src/model/schema/ColumnCombination.ts
A collection of columns. It offers set operations and other methods for convenience.
Properties |
|
Methods |
|
Accessors |
Public
constructor(columns?: Array<Column>)
|
||||||
Defined in src/model/schema/ColumnCombination.ts:9
|
||||||
Parameters :
|
Private _columns |
Type : Array<Column>
|
Default value : []
|
Defined in src/model/schema/ColumnCombination.ts:9
|
Public add | ||||||
add(columns: Array<Column>)
|
||||||
Defined in src/model/schema/ColumnCombination.ts:87
|
||||||
Parameters :
Returns :
void
|
Public applySourceMapping | ||||||
applySourceMapping(mapping: Map
|
||||||
Defined in src/model/schema/ColumnCombination.ts:147
|
||||||
Returns a copy of this columnCombination where all sourceTableInstances of the contained columns are replaced according to the mapping.
Parameters :
Returns :
ColumnCombination
|
Public asArray |
asArray()
|
Defined in src/model/schema/ColumnCombination.ts:19
|
Returns :
Array<Column>
|
Public columnByName | ||||||
columnByName(name: string)
|
||||||
Defined in src/model/schema/ColumnCombination.ts:31
|
||||||
Parameters :
Returns :
Column
|
Public columnNames |
columnNames()
|
Defined in src/model/schema/ColumnCombination.ts:132
|
Returns :
Array<string>
|
Public columnsByIds | ||||||
columnsByIds(...numbers: Array
|
||||||
Defined in src/model/schema/ColumnCombination.ts:37
|
||||||
Parameters :
Returns :
ColumnCombination
|
Public columnsByNames | ||||||
columnsByNames(...names: Array
|
||||||
Defined in src/model/schema/ColumnCombination.ts:27
|
||||||
Parameters :
Returns :
Array<Column>
|
Public columnsEquivalentTo | |||||||||
columnsEquivalentTo(sourceColumns: Array
|
|||||||||
Defined in src/model/schema/ColumnCombination.ts:72
|
|||||||||
Tries to find columns whose sourceColumns are the equal to the given ones. Returns the ones that are found. If findAll is set to true, all sourceColumns must be found or the return value is null.
Parameters :
Returns :
Array | null
|
Public columnSubstitution | ||||||
columnSubstitution(mapping: Map<Column | Column>)
|
||||||
Defined in src/model/schema/ColumnCombination.ts:158
|
||||||
Replaces columns within the collection according to the mapping.
Parameters :
Returns :
this
|
Public copy |
copy()
|
Defined in src/model/schema/ColumnCombination.ts:23
|
Returns :
ColumnCombination
|
Public delete | ||||||
delete(columns: Array<Column>)
|
||||||
Defined in src/model/schema/ColumnCombination.ts:93
|
||||||
Parameters :
Returns :
void
|
Public equals | ||||||
equals(other: ColumnCombination)
|
||||||
Defined in src/model/schema/ColumnCombination.ts:107
|
||||||
Parameters :
Returns :
boolean
|
Public includes | ||||||
includes(column: Column)
|
||||||
Defined in src/model/schema/ColumnCombination.ts:99
|
||||||
Parameters :
Returns :
boolean
|
Public intersect | ||||||
intersect(other: ColumnCombination)
|
||||||
Defined in src/model/schema/ColumnCombination.ts:111
|
||||||
Parameters :
Returns :
ColumnCombination
|
Public isSubsetOf | ||||||
isSubsetOf(other: ColumnCombination)
|
||||||
Defined in src/model/schema/ColumnCombination.ts:128
|
||||||
Parameters :
Returns :
boolean
|
Public setMinus | ||||||
setMinus(other: ColumnCombination)
|
||||||
Defined in src/model/schema/ColumnCombination.ts:123
|
||||||
Parameters :
Returns :
ColumnCombination
|
Public sourceColumnNames |
sourceColumnNames()
|
Defined in src/model/schema/ColumnCombination.ts:136
|
Returns :
Array<string>
|
Public sourceTableInstance |
sourceTableInstance()
|
Defined in src/model/schema/ColumnCombination.ts:46
|
Should only be called on collections of columns with the same sourceTableInstance. It returns this sourceTableInstance.
Returns :
SourceTableInstance
|
Public sourceTableInstances |
sourceTableInstances()
|
Defined in src/model/schema/ColumnCombination.ts:59
|
Returns all sourceTableInstances of the contained columns.
Returns :
Array<SourceTableInstance>
|
Public toString |
toString()
|
Defined in src/model/schema/ColumnCombination.ts:140
|
Returns :
string
|
()
|
Defined in src/model/schema/ColumnCombination.ts:15
|
Returns :
any
|
Public union | ||||||
union(other: ColumnCombination)
|
||||||
Defined in src/model/schema/ColumnCombination.ts:118
|
||||||
Parameters :
Returns :
ColumnCombination
|
cardinality |
getcardinality()
|
Defined in src/model/schema/ColumnCombination.ts:103
|
import Column from './Column';
import SourceColumn from './SourceColumn';
import SourceTableInstance from './SourceTableInstance';
/**
* A collection of columns. It offers set operations and other methods for convenience.
*/
export default class ColumnCombination {
private _columns: Array<Column> = [];
public constructor(columns?: Array<Column>) {
this._columns = columns || new Array();
}
[Symbol.iterator]() {
return this._columns[Symbol.iterator]();
}
public asArray(): Array<Column> {
return this._columns;
}
public copy(): ColumnCombination {
return new ColumnCombination(new Array(...this._columns));
}
public columnsByNames(...names: Array<string>): Array<Column> {
return names.map((name) => this.columnByName(name));
}
public columnByName(name: string): Column {
const result = this.asArray().find((column) => name.includes(column.name));
if (!result) console.error('column with name ' + name + ' not found');
return result!;
}
public columnsByIds(...numbers: Array<number>): ColumnCombination {
return new ColumnCombination(
this.asArray().filter((col, i) => numbers.includes(i))
);
}
/**
* Should only be called on collections of columns with the same sourceTableInstance. It returns this sourceTableInstance.
*/
public sourceTableInstance(): SourceTableInstance {
let sources = this.sourceTableInstances();
if (sources.length > 1)
console.warn(
'Warning: expected only one SourceTableInstance but there are ' +
sources.length
);
return sources[0];
}
/**
* Returns all sourceTableInstances of the contained columns.
*/
public sourceTableInstances(): Array<SourceTableInstance> {
let sources = new Array<SourceTableInstance>();
this._columns.forEach((column) => {
if (!sources.includes(column.sourceTableInstance))
sources.push(column.sourceTableInstance);
});
return sources;
}
/**
* Tries to find columns whose sourceColumns are the equal to the given ones. Returns the ones that are found.
* If findAll is set to true, all sourceColumns must be found or the return value is null.
*/
public columnsEquivalentTo(
sourceColumns: Array<SourceColumn>,
findAll: boolean
): Array<Column> | null {
const equivalentColumns = new Array<Column>();
for (const sourceColumn of sourceColumns) {
let equivalentColumn = this.asArray().find((column) =>
column.sourceColumn.equals(sourceColumn)
);
if (findAll && !equivalentColumn) return null;
if (equivalentColumn) equivalentColumns.push(equivalentColumn);
}
return equivalentColumns;
}
public add(...columns: Array<Column>) {
columns.forEach((col) => {
if (!this.includes(col)) this._columns.push(col);
});
}
public delete(...columns: Array<Column>) {
this._columns = this._columns.filter(
(col) => !columns.some((deleteCol) => deleteCol.equals(col))
);
}
public includes(column: Column): boolean {
return this.asArray().some((col) => col.equals(column));
}
public get cardinality(): number {
return this._columns.length;
}
public equals(other: ColumnCombination): boolean {
return this.cardinality == other.cardinality && this.isSubsetOf(other);
}
public intersect(other: ColumnCombination): ColumnCombination {
this._columns.forEach((col) => {
if (!other.includes(col)) this.delete(col);
});
return this;
}
public union(other: ColumnCombination): ColumnCombination {
this.add(...other._columns);
return this;
}
public setMinus(other: ColumnCombination): ColumnCombination {
this.delete(...other._columns);
return this;
}
public isSubsetOf(other: ColumnCombination): boolean {
return this.asArray().every((col) => other.includes(col));
}
public columnNames(): Array<string> {
return this.asArray().map((col) => col.name);
}
public sourceColumnNames(): Array<string> {
return this.asArray().map((col) => col.sourceColumn.name);
}
public toString(): string {
return this.columnNames().join(', ');
}
/**
* Returns a copy of this columnCombination where all sourceTableInstances of the contained columns are replaced according to the mapping.
*/
public applySourceMapping(
mapping: Map<SourceTableInstance, SourceTableInstance>
): ColumnCombination {
return new ColumnCombination(
this._columns.map((column) => column.applySourceMapping(mapping))
);
}
/**
* Replaces columns within the collection according to the mapping.
*/
public columnSubstitution(mapping: Map<Column, Column>) {
this._columns = this._columns.map(
(column) => mapping.get(column) || column
);
return this;
}
}