renamed column name to databaseName and removed name. again broke monogdb files

This commit is contained in:
Umed Khudoiberdiev 2017-05-05 16:33:17 +05:00
parent 1ecb949b1e
commit a7de0586ec
20 changed files with 149 additions and 162 deletions

View File

@ -163,12 +163,12 @@ export class PostgresQueryRunner implements QueryRunner {
const columns = keys.map(key => this.driver.escapeColumnName(key)).join(", ");
const values = keys.map((key, index) => "$" + (index + 1)).join(",");
const sql = columns.length > 0
? `INSERT INTO ${this.driver.escapeTableName(tableName)}(${columns}) VALUES (${values}) ${ generatedColumn ? " RETURNING " + this.driver.escapeColumnName(generatedColumn.fullName) : "" }`
: `INSERT INTO ${this.driver.escapeTableName(tableName)} DEFAULT VALUES ${ generatedColumn ? " RETURNING " + this.driver.escapeColumnName(generatedColumn.fullName) : "" }`;
? `INSERT INTO ${this.driver.escapeTableName(tableName)}(${columns}) VALUES (${values}) ${ generatedColumn ? " RETURNING " + this.driver.escapeColumnName(generatedColumn.databaseName) : "" }`
: `INSERT INTO ${this.driver.escapeTableName(tableName)} DEFAULT VALUES ${ generatedColumn ? " RETURNING " + this.driver.escapeColumnName(generatedColumn.databaseName) : "" }`;
const parameters = keys.map(key => keyValues[key]);
const result: ObjectLiteral[] = await this.query(sql, parameters);
if (generatedColumn)
return result[0][generatedColumn.fullName];
return result[0][generatedColumn.databaseName];
return result;
}

View File

@ -227,11 +227,11 @@ export class SqlServerQueryRunner implements QueryRunner {
const parameters = keys.map(key => keyValues[key]);
const sql = columns.length > 0
? `INSERT INTO ${this.driver.escapeTableName(tableName)}(${columns}) ${ generatedColumn ? "OUTPUT INSERTED." + generatedColumn.fullName + " " : "" }VALUES (${values})`
: `INSERT INTO ${this.driver.escapeTableName(tableName)} ${ generatedColumn ? "OUTPUT INSERTED." + generatedColumn.fullName + " " : "" }DEFAULT VALUES `;
? `INSERT INTO ${this.driver.escapeTableName(tableName)}(${columns}) ${ generatedColumn ? "OUTPUT INSERTED." + generatedColumn.databaseName + " " : "" }VALUES (${values})`
: `INSERT INTO ${this.driver.escapeTableName(tableName)} ${ generatedColumn ? "OUTPUT INSERTED." + generatedColumn.databaseName + " " : "" }DEFAULT VALUES `;
const result = await this.query(sql, parameters);
return generatedColumn ? result instanceof Array ? result[0][generatedColumn.fullName] : result[generatedColumn.fullName] : undefined;
return generatedColumn ? result instanceof Array ? result[0][generatedColumn.databaseName] : result[generatedColumn.databaseName] : undefined;
}
/**

View File

@ -49,8 +49,8 @@ export class LazyRelationsWrapper {
.innerJoin(relation.entityMetadata.target as Function, relation.entityMetadata.name, conditions);
joinColumns.forEach(joinColumn => {
qb.andWhere(`${relation.entityMetadata.name}.${joinColumn.referencedColumn!.fullName} = :${joinColumn.referencedColumn!.fullName}`)
.setParameter(`${joinColumn.referencedColumn!.fullName}`, this[joinColumn.referencedColumn!.fullName]);
qb.andWhere(`${relation.entityMetadata.name}.${joinColumn.referencedColumn!.databaseName} = :${joinColumn.referencedColumn!.databaseName}`)
.setParameter(`${joinColumn.referencedColumn!.databaseName}`, this[joinColumn.referencedColumn!.databaseName]);
});
this[promiseIndex] = qb.getOne().then(result => {

View File

@ -191,7 +191,7 @@ export class EntityMetadataBuilder {
referencedColumns = relation.inverseEntityMetadata.primaryColumnsWithParentIdColumns;
} else { // cases with referenced columns defined
referencedColumns = joinColumnArgsArray.map(joinColumnArgs => {
const referencedColumn = relation.inverseEntityMetadata.columns.find(column => column.fullName === joinColumnArgs.referencedColumnName);
const referencedColumn = relation.inverseEntityMetadata.columns.find(column => column.databaseName === joinColumnArgs.referencedColumnName);
if (!referencedColumn)
throw new Error(`Referenced column ${joinColumnArgs.referencedColumnName} was not found in entity ${relation.inverseEntityMetadata.name}`);
@ -211,7 +211,7 @@ export class EntityMetadataBuilder {
});
const joinColumnName = joinColumnMetadataArg ? joinColumnMetadataArg.name : this.namingStrategy.joinColumnName(relation.propertyName, referencedColumn.propertyName);
let relationalColumn = relation.entityMetadata.columns.find(column => column.fullName === joinColumnName);
let relationalColumn = relation.entityMetadata.columns.find(column => column.databaseName === joinColumnName);
if (!relationalColumn) {
relationalColumn = new ColumnMetadata(entityMetadata, {
target: relation.entityMetadata.target,
@ -264,7 +264,7 @@ export class EntityMetadataBuilder {
referencedColumns = relation.entityMetadata.primaryColumnsWithParentIdColumns;
} else {
referencedColumns = joinTableMetadataArgs.joinColumns!.map(joinColumn => {
const referencedColumn = relation.entityMetadata.columns.find(column => column.fullName === joinColumn.referencedColumnName);
const referencedColumn = relation.entityMetadata.columns.find(column => column.databaseName === joinColumn.referencedColumnName);
if (!referencedColumn)
throw new Error(`Referenced column ${joinColumn.referencedColumnName} was not found in entity ${relation.entityMetadata.name}`);
@ -279,7 +279,7 @@ export class EntityMetadataBuilder {
inverseReferencedColumns = relation.inverseEntityMetadata.primaryColumnsWithParentIdColumns;
} else {
inverseReferencedColumns = joinTableMetadataArgs.inverseJoinColumns!.map(joinColumn => {
const referencedColumn = relation.inverseEntityMetadata.columns.find(column => column.fullName === joinColumn.referencedColumnName);
const referencedColumn = relation.inverseEntityMetadata.columns.find(column => column.databaseName === joinColumn.referencedColumnName);
if (!referencedColumn)
throw new Error(`Referenced column ${joinColumn.referencedColumnName} was not found in entity ${relation.inverseEntityMetadata.name}`);
@ -293,7 +293,7 @@ export class EntityMetadataBuilder {
return (!joinColumnArgs.referencedColumnName || joinColumnArgs.referencedColumnName === referencedColumn.propertyName) &&
!!joinColumnArgs.name;
}) : undefined;
const columnName = joinColumn && joinColumn.name ? joinColumn.name : this.namingStrategy.joinTableColumnName(relation.entityMetadata.tableNameWithoutPrefix, referencedColumn.fullName);
const columnName = joinColumn && joinColumn.name ? joinColumn.name : this.namingStrategy.joinTableColumnName(relation.entityMetadata.tableNameWithoutPrefix, referencedColumn.databaseName);
return new ColumnMetadata(junctionEntityMetadata, {
propertyName: columnName,
@ -313,7 +313,7 @@ export class EntityMetadataBuilder {
return (!joinColumnArgs.referencedColumnName || joinColumnArgs.referencedColumnName === inverseReferencedColumn.propertyName) &&
!!joinColumnArgs.name;
}) : undefined;
const columnName = joinColumn && joinColumn.name ? joinColumn.name : this.namingStrategy.joinTableColumnName(relation.inverseEntityMetadata.tableNameWithoutPrefix, inverseReferencedColumn.fullName);
const columnName = joinColumn && joinColumn.name ? joinColumn.name : this.namingStrategy.joinTableColumnName(relation.inverseEntityMetadata.tableNameWithoutPrefix, inverseReferencedColumn.databaseName);
return new ColumnMetadata(junctionEntityMetadata, {
propertyName: columnName,
@ -339,8 +339,8 @@ export class EntityMetadataBuilder {
junctionEntityMetadata.ownColumns = junctionColumns.concat(inverseJunctionColumns);
junctionEntityMetadata.foreignKeys = foreignKeys;
junctionEntityMetadata.indices = [ // todo: shall we remove indices?
new IndexMetadata(junctionEntityMetadata, { columns: junctionColumns.map(column => column.fullName), unique: false }),
new IndexMetadata(junctionEntityMetadata, { columns: inverseJunctionColumns.map(column => column.fullName), unique: false })
new IndexMetadata(junctionEntityMetadata, { columns: junctionColumns.map(column => column.databaseName), unique: false }),
new IndexMetadata(junctionEntityMetadata, { columns: inverseJunctionColumns.map(column => column.databaseName), unique: false })
];
this.createEntityMetadata(junctionEntityMetadata, {
tableType: "junction",
@ -363,7 +363,7 @@ export class EntityMetadataBuilder {
.forEach(metadata => {
const indexForKey = new IndexMetadata(metadata, {
target: metadata.target,
columns: [metadata.discriminatorColumn.fullName],
columns: [metadata.discriminatorColumn.databaseName],
unique: false
});
metadata.indices.push(indexForKey);

View File

@ -215,17 +215,6 @@ export class ColumnMetadata {
return this.entityMetadata.target;
}
/**
* Column name in the database.
*
* todo: rename to databaseName
* @deprecated
*/
// name: string;
get name(): string {
return this.entityMetadata.namingStrategy.columnName(this.propertyName, this._name);
}
/**
* Gets full path to this column property (including column property name).
* Full path is relevant when column is used in embeds (one or multiple nested).
@ -242,11 +231,9 @@ export class ColumnMetadata {
}
/**
* Column name in the database including its embedded prefixes.
*
* todo: rename to databaseName
* Complete column name in the database including its embedded prefixes.
*/
get fullName(): string {
get databaseName(): string {
// if this column is embedded's column then apply different entity
if (this.embeddedMetadata) {

View File

@ -691,7 +691,7 @@ export class EntityMetadata {
if (entityValue === null || entityValue === undefined)
return;
map[column.fullName] = entityValue;
map[column.databaseName] = entityValue;
// if entity id is a relation, then extract referenced column from that relation
/*const columnRelation = this.relations.find(relation => relation.propertyName === column.propertyName);
@ -786,7 +786,7 @@ export class EntityMetadata {
Object.keys(idMap).forEach(propertyName => {
const column = this.getColumnByPropertyName(propertyName);
if (column) {
map[column.fullName] = idMap[propertyName];
map[column.databaseName] = idMap[propertyName];
}
});
return map;
@ -815,7 +815,7 @@ export class EntityMetadata {
* Checks if column with the given database name exist.
*/
hasColumnWithDbName(name: string): boolean {
return !!this.ownColumns.find(column => column.fullName === name);
return !!this.ownColumns.find(column => column.databaseName === name);
}
/**

View File

@ -90,14 +90,14 @@ export class ForeignKeyMetadata {
* Gets array of column names.
*/
get columnNames(): string[] {
return this.columns.map(column => column.fullName);
return this.columns.map(column => column.databaseName);
}
/**
* Gets array of referenced column names.
*/
get referencedColumnNames(): string[] {
return this.referencedColumns.map(column => column.fullName);
return this.referencedColumns.map(column => column.databaseName);
}
}

View File

@ -105,7 +105,7 @@ export class IndexMetadata {
throw new Error(`Index ${this._name ? "\"" + this._name + "\" " : ""}contains columns that are missing in the entity: ` + missingColumnNames.join(", "));
}
return columns.map(column => column.fullName);
return columns.map(column => column.databaseName);
}
/**
@ -137,7 +137,7 @@ export class IndexMetadata {
if (!column)
throw new Error(`Index ${this._name ? "\"" + this._name + "\" " : ""}contains columns that are missing in the entity: ${key}`);
updatedMap[column.name] = map[key];
updatedMap[column.databaseName] = map[key];
return updatedMap;
}, {} as { [key: string]: number });
}

View File

@ -197,16 +197,16 @@ export class RelationMetadata {
if (this.isOwning) {
if (this.isManyToMany) {
return this.joinColumns[0].name;
return this.joinColumns[0].databaseName;
} else if (this.foreignKeys[0] && this.foreignKeys[0].columns) {
return this.foreignKeys[0].columns[0].name;
return this.foreignKeys[0].columns[0].databaseName;
}
} else if (this.hasInverseSide) {
if (this.inverseRelation.isManyToMany) {
return this.inverseRelation.inverseJoinColumns[0].name;
return this.inverseRelation.inverseJoinColumns[0].databaseName;
} else if (this.inverseRelation.foreignKeys[0] && this.inverseRelation.foreignKeys[0].columns && this.inverseRelation.foreignKeys[0].columns[0].referencedColumn!) {
return this.inverseRelation.foreignKeys[0].columns[0].referencedColumn!.fullName; // todo: [0] is temporary!!
return this.inverseRelation.foreignKeys[0].columns[0].referencedColumn!.databaseName; // todo: [0] is temporary!!
}
}

View File

@ -263,7 +263,7 @@ export class SubjectOperationExecutor {
}
if (relationId) {
updateOptions[joinColumn.fullName] = relationId;
updateOptions[joinColumn.databaseName] = relationId;
}
});
@ -298,19 +298,19 @@ export class SubjectOperationExecutor {
}
}
if (relationIdOfEntityValue) {
conditions[column.fullName] = relationIdOfEntityValue;
conditions[column.databaseName] = relationIdOfEntityValue;
}
});
} else {
if (entityValue) {
conditions[column.fullName] = entityValue;
conditions[column.databaseName] = entityValue;
} else {
if (subject.newlyGeneratedId) {
conditions[column.fullName] = subject.newlyGeneratedId;
conditions[column.databaseName] = subject.newlyGeneratedId;
} else if (subject.generatedObjectId) {
conditions[column.fullName] = subject.generatedObjectId;
conditions[column.databaseName] = subject.generatedObjectId;
}
}
}
@ -355,20 +355,20 @@ export class SubjectOperationExecutor {
}
}
if (relationIdOfEntityValue) {
conditions[column.fullName] = relationIdOfEntityValue;
conditions[column.databaseName] = relationIdOfEntityValue;
}
});
} else {
const entityValueInsertSubject = this.insertSubjects.find(subject => subject.entity === subRelatedEntity);
if (entityValue) {
conditions[column.fullName] = entityValue;
conditions[column.databaseName] = entityValue;
} else {
if (entityValueInsertSubject && entityValueInsertSubject.newlyGeneratedId) {
conditions[column.fullName] = entityValueInsertSubject.newlyGeneratedId;
conditions[column.databaseName] = entityValueInsertSubject.newlyGeneratedId;
} else if (entityValueInsertSubject && entityValueInsertSubject.generatedObjectId) {
conditions[column.fullName] = entityValueInsertSubject.generatedObjectId;
conditions[column.databaseName] = entityValueInsertSubject.generatedObjectId;
}
}
@ -393,9 +393,9 @@ export class SubjectOperationExecutor {
}
}
}
updateOptions[joinColumn.fullName] = id;
updateOptions[joinColumn.databaseName] = id;
} else {
updateOptions[joinColumn.fullName] = subject.entity[referencedColumn.propertyName] || subject.newlyGeneratedId || subRelatedEntity.generatedObjectId;
updateOptions[joinColumn.databaseName] = subject.entity[referencedColumn.propertyName] || subject.newlyGeneratedId || subRelatedEntity.generatedObjectId;
}
const updatePromise = this.queryRunner.update(relation.inverseEntityMetadata.tableName, updateOptions, conditions);
@ -471,7 +471,7 @@ export class SubjectOperationExecutor {
if (value === null || value === undefined)
return;
values[column.fullName] = this.connection.driver.preparePersistentValue(value, column); // todo: maybe preparePersistentValue is not responsibility of this class
values[column.databaseName] = this.connection.driver.preparePersistentValue(value, column); // todo: maybe preparePersistentValue is not responsibility of this class
});
metadata.relationsWithJoinColumns.forEach(relation => {
@ -533,7 +533,7 @@ export class SubjectOperationExecutor {
}
if (relationValue) {
values[joinColumn.fullName] = relationValue;
values[joinColumn.databaseName] = relationValue;
}
});
@ -542,25 +542,25 @@ export class SubjectOperationExecutor {
// add special column and value - date of creation
if (metadata.hasCreateDateColumn) {
const value = this.connection.driver.preparePersistentValue(date, metadata.createDateColumn);
values[metadata.createDateColumn.fullName] = value;
values[metadata.createDateColumn.databaseName] = value;
}
// add special column and value - date of updating
if (metadata.hasUpdateDateColumn) {
const value = this.connection.driver.preparePersistentValue(date, metadata.updateDateColumn);
values[metadata.updateDateColumn.fullName] = value;
values[metadata.updateDateColumn.databaseName] = value;
}
// add special column and value - version column
if (metadata.hasVersionColumn) {
const value = this.connection.driver.preparePersistentValue(1, metadata.versionColumn);
values[metadata.versionColumn.fullName] = value;
values[metadata.versionColumn.databaseName] = value;
}
// add special column and value - discriminator value (for tables using table inheritance)
if (metadata.hasDiscriminatorColumn) {
const value = this.connection.driver.preparePersistentValue(discriminatorValue || metadata.discriminatorValue, metadata.discriminatorColumn);
values[metadata.discriminatorColumn.fullName] = value;
values[metadata.discriminatorColumn.databaseName] = value;
}
// add special column and value - tree level and tree parents (for tree-type tables)
@ -568,12 +568,12 @@ export class SubjectOperationExecutor {
const parentEntity = entity[metadata.treeParentRelation.propertyName];
const parentLevel = parentEntity ? (parentEntity[metadata.treeLevelColumn.propertyName] || 0) : 0;
values[metadata.treeLevelColumn.fullName] = parentLevel + 1;
values[metadata.treeLevelColumn.databaseName] = parentLevel + 1;
}
// add special column and value - parent id column (for tables using table inheritance)
if (metadata.parentEntityMetadata && metadata.hasParentIdColumn) { // todo: should be array of primary keys
values[metadata.parentIdColumn.fullName] = parentIdColumnValue || entity[metadata.parentEntityMetadata.firstPrimaryColumn.propertyName];
values[metadata.parentIdColumn.databaseName] = parentIdColumnValue || entity[metadata.parentEntityMetadata.firstPrimaryColumn.propertyName];
}
return values;
@ -646,8 +646,8 @@ export class SubjectOperationExecutor {
subject.treeLevel = await this.queryRunner.insertIntoClosureTable(tableName, newEntityId, parentEntityId, subject.metadata.hasTreeLevelColumn);
if (subject.metadata.hasTreeLevelColumn) {
const values = { [subject.metadata.treeLevelColumn.fullName]: subject.treeLevel };
await this.queryRunner.update(subject.metadata.tableName, values, { [referencedColumn.fullName]: newEntityId });
const values = { [subject.metadata.treeLevelColumn.databaseName]: subject.treeLevel };
await this.queryRunner.update(subject.metadata.tableName, values, { [referencedColumn.databaseName]: newEntityId });
}
}
@ -702,7 +702,7 @@ export class SubjectOperationExecutor {
const value: ObjectLiteral = {};
subject.metadata.columns.forEach(column => {
if (entity[column.propertyName] !== undefined)
value[column.fullName] = column.getValue(entity);
value[column.databaseName] = column.getValue(entity);
});
// addEmbeddedValuesRecursively(entity, value, subject.metadata.embeddeds);
@ -711,10 +711,10 @@ export class SubjectOperationExecutor {
return;
if (subject.metadata.hasUpdateDateColumn)
value[subject.metadata.updateDateColumn.fullName] = this.connection.driver.preparePersistentValue(new Date(), subject.metadata.updateDateColumn);
value[subject.metadata.updateDateColumn.databaseName] = this.connection.driver.preparePersistentValue(new Date(), subject.metadata.updateDateColumn);
if (subject.metadata.hasVersionColumn)
value[subject.metadata.versionColumn.fullName] = this.connection.driver.preparePersistentValue(entity[subject.metadata.versionColumn.propertyName] + 1, subject.metadata.versionColumn);
value[subject.metadata.versionColumn.databaseName] = this.connection.driver.preparePersistentValue(entity[subject.metadata.versionColumn.propertyName] + 1, subject.metadata.versionColumn);
// console.log(value);
// console.log("idMap:", idMap);
@ -734,7 +734,7 @@ export class SubjectOperationExecutor {
valueMaps.push(valueMap);
}
valueMap.values[column.fullName] = this.connection.driver.preparePersistentValue(column.getValue(entity), column);
valueMap.values[column.databaseName] = this.connection.driver.preparePersistentValue(column.getValue(entity), column);
});
subject.diffRelations.forEach(relation => {
@ -746,7 +746,7 @@ export class SubjectOperationExecutor {
const value = relation.getEntityValue(entity);
relation.joinColumns.forEach(joinColumn => {
valueMap!.values[joinColumn.name] = value !== null && value !== undefined ? value[joinColumn.referencedColumn!.propertyName] : null; // todo: should not have a call to primaryColumn, instead join column metadata should be used
valueMap!.values[joinColumn.databaseName] = value !== null && value !== undefined ? value[joinColumn.referencedColumn!.propertyName] : null; // todo: should not have a call to primaryColumn, instead join column metadata should be used
});
});
@ -761,7 +761,7 @@ export class SubjectOperationExecutor {
valueMaps.push(valueMap);
}
valueMap.values[subject.metadata.updateDateColumn.fullName] = this.connection.driver.preparePersistentValue(new Date(), subject.metadata.updateDateColumn);
valueMap.values[subject.metadata.updateDateColumn.databaseName] = this.connection.driver.preparePersistentValue(new Date(), subject.metadata.updateDateColumn);
}
if (subject.metadata.hasVersionColumn) {
@ -771,7 +771,7 @@ export class SubjectOperationExecutor {
valueMaps.push(valueMap);
}
valueMap.values[subject.metadata.versionColumn.fullName] = this.connection.driver.preparePersistentValue(entity[subject.metadata.versionColumn.propertyName] + 1, subject.metadata.versionColumn);
valueMap.values[subject.metadata.versionColumn.databaseName] = this.connection.driver.preparePersistentValue(entity[subject.metadata.versionColumn.propertyName] + 1, subject.metadata.versionColumn);
}
if (subject.metadata.parentEntityMetadata) {
@ -786,7 +786,7 @@ export class SubjectOperationExecutor {
valueMaps.push(valueMap);
}
valueMap.values[subject.metadata.parentEntityMetadata.updateDateColumn.fullName] = this.connection.driver.preparePersistentValue(new Date(), subject.metadata.parentEntityMetadata.updateDateColumn);
valueMap.values[subject.metadata.parentEntityMetadata.updateDateColumn.databaseName] = this.connection.driver.preparePersistentValue(new Date(), subject.metadata.parentEntityMetadata.updateDateColumn);
}
if (subject.metadata.parentEntityMetadata.hasVersionColumn) {
@ -800,7 +800,7 @@ export class SubjectOperationExecutor {
valueMaps.push(valueMap);
}
valueMap.values[subject.metadata.parentEntityMetadata.versionColumn.fullName] = this.connection.driver.preparePersistentValue(entity[subject.metadata.parentEntityMetadata.versionColumn.propertyName] + 1, subject.metadata.parentEntityMetadata.versionColumn);
valueMap.values[subject.metadata.parentEntityMetadata.versionColumn.databaseName] = this.connection.driver.preparePersistentValue(entity[subject.metadata.parentEntityMetadata.versionColumn.propertyName] + 1, subject.metadata.parentEntityMetadata.versionColumn);
}
}
@ -832,7 +832,7 @@ export class SubjectOperationExecutor {
subject.relationUpdates.forEach(setRelation => {
setRelation.relation.joinColumns.forEach(joinColumn => {
const value = setRelation.value ? setRelation.value[joinColumn.referencedColumn!.propertyName] : null;
values[joinColumn.fullName] = value; // todo: || fromInsertedSubjects ??
values[joinColumn.databaseName] = value; // todo: || fromInsertedSubjects ??
});
});
@ -861,13 +861,13 @@ export class SubjectOperationExecutor {
if (subject.metadata.parentEntityMetadata) { // this code should not be there. it should be handled by subject.metadata.getEntityIdColumnMap
const parentConditions: ObjectLiteral = {};
subject.metadata.parentPrimaryColumns.forEach(column => {
parentConditions[column.fullName] = subject.databaseEntity[column.propertyName];
parentConditions[column.databaseName] = subject.databaseEntity[column.propertyName];
});
await this.queryRunner.delete(subject.metadata.parentEntityMetadata.tableName, parentConditions);
const childConditions: ObjectLiteral = {};
subject.metadata.primaryColumnsWithParentIdColumns.forEach(column => {
childConditions[column.fullName] = subject.databaseEntity[column.propertyName];
childConditions[column.databaseName] = subject.databaseEntity[column.propertyName];
});
await this.queryRunner.delete(subject.metadata.tableName, childConditions);
} else {
@ -935,7 +935,7 @@ export class SubjectOperationExecutor {
if (!relationId)
throw new Error(`Cannot insert object of ${(newBindEntity.constructor as any).name} type. Looks like its not persisted yet, or cascades are not set on the relation.`); // todo: better error message
const columns = relation.junctionEntityMetadata.columnsWithoutEmbeddeds.map(column => column.fullName);
const columns = relation.junctionEntityMetadata.columnsWithoutEmbeddeds.map(column => column.databaseName);
const values = relation.isOwning ? [...ownId, ...relationId] : [...relationId, ...ownId];
return this.queryRunner.insert(relation.junctionEntityMetadata.tableName, OrmUtils.zipObject(columns, values));
@ -973,14 +973,14 @@ export class SubjectOperationExecutor {
const secondJoinColumns = junctionRemove.relation.isOwning ? junctionRemove.relation.inverseJoinColumns : junctionRemove.relation.inverseRelation.joinColumns;
let conditions: ObjectLiteral = {};
firstJoinColumns.forEach(joinColumn => {
conditions[joinColumn.fullName] = joinColumn.referencedColumn!.getValue(entity);
conditions[joinColumn.databaseName] = joinColumn.referencedColumn!.getValue(entity);
});
const removePromises = junctionRemove.junctionRelationIds.map(relationIds => {
let inverseConditions: ObjectLiteral = {};
Object.keys(relationIds).forEach(key => {
const joinColumn = secondJoinColumns.find(column => column.referencedColumn!.propertyName === key);
inverseConditions[joinColumn!.fullName] = relationIds[key];
inverseConditions[joinColumn!.databaseName] = relationIds[key];
});
return this.queryRunner.delete(junctionMetadata.tableName, Object.assign({}, inverseConditions, conditions));
});

View File

@ -883,11 +883,11 @@ export class QueryBuilder<Entity> {
const metadata = this.expressionMap.mainAlias!.metadata;
let idsQuery = `SELECT `;
idsQuery += metadata.primaryColumns.map((primaryColumn, index) => {
const propertyName = this.escapeAlias(mainAliasName + "_" + primaryColumn.fullName);
const propertyName = this.escapeAlias(mainAliasName + "_" + primaryColumn.databaseName);
if (index === 0) {
return `DISTINCT(${distinctAlias}.${propertyName}) as ids_${primaryColumn.fullName}`;
return `DISTINCT(${distinctAlias}.${propertyName}) as ids_${primaryColumn.databaseName}`;
} else {
return `${distinctAlias}.${propertyName}) as ids_${primaryColumn.fullName}`;
return `${distinctAlias}.${propertyName}) as ids_${primaryColumn.databaseName}`;
}
}).join(", ");
if (selects.length > 0)
@ -898,7 +898,7 @@ export class QueryBuilder<Entity> {
if (orderBys.length > 0) {
idsQuery += " ORDER BY " + orderBys;
} else {
idsQuery += ` ORDER BY "ids_${metadata.firstPrimaryColumn.fullName}"`; // this is required for mssql driver if firstResult is used. Other drivers don't care about it
idsQuery += ` ORDER BY "ids_${metadata.firstPrimaryColumn.databaseName}"`; // this is required for mssql driver if firstResult is used. Other drivers don't care about it
}
if (this.connection.driver instanceof SqlServerDriver) { // todo: temporary. need to refactor and make a proper abstraction
@ -994,7 +994,7 @@ export class QueryBuilder<Entity> {
const distinctAlias = this.escapeAlias(mainAlias);
let countSql = `COUNT(` + metadata.primaryColumnsWithParentIdColumns.map((primaryColumn, index) => {
const propertyName = this.escapeColumn(primaryColumn.fullName);
const propertyName = this.escapeColumn(primaryColumn.databaseName);
if (index === 0) {
return `DISTINCT(${distinctAlias}.${propertyName})`;
} else {
@ -1216,8 +1216,8 @@ export class QueryBuilder<Entity> {
return columns.map(column => {
const selection = this.expressionMap.selects.find(select => select.selection === aliasName + "." + column.propertyName);
return {
selection: this.escapeAlias(aliasName) + "." + this.escapeColumn(column.fullName),
aliasName: selection && selection.aliasName ? selection.aliasName : aliasName + "_" + column.fullName,
selection: this.escapeAlias(aliasName) + "." + this.escapeColumn(column.databaseName),
aliasName: selection && selection.aliasName ? selection.aliasName : aliasName + "_" + column.databaseName,
// todo: need to keep in mind that custom selection.aliasName breaks hydrator. fix it later!
};
// return this.escapeAlias(aliasName) + "." + this.escapeColumn(column.fullName) +
@ -1285,7 +1285,7 @@ export class QueryBuilder<Entity> {
const alias = "parentIdColumn_" + ea(this.expressionMap.mainAlias!.metadata.parentEntityMetadata.tableName);
this.expressionMap.mainAlias!.metadata.parentEntityMetadata.columns.forEach(column => {
// TODO implement partial select
allSelects.push({ selection: ea(alias + "." + column.fullName), aliasName: alias + "_" + column.fullName });
allSelects.push({ selection: ea(alias + "." + column.databaseName), aliasName: alias + "_" + column.databaseName });
// allSelects.push(alias + "." + ec(column.fullName) + " AS " + alias + "_" + ea(column.fullName));
});
}
@ -1389,7 +1389,7 @@ export class QueryBuilder<Entity> {
if (this.expressionMap.mainAlias!.hasMetadata) {
const mainMetadata = this.expressionMap.mainAlias!.metadata;
if (mainMetadata.hasDiscriminatorColumn)
return ` WHERE ${ conditions.length ? "(" + conditions + ") AND" : "" } ${mainMetadata.discriminatorColumn.fullName}=:discriminatorColumnValue`;
return ` WHERE ${ conditions.length ? "(" + conditions + ") AND" : "" } ${mainMetadata.discriminatorColumn.databaseName}=:discriminatorColumnValue`;
}
if (!conditions.length) return "";
@ -1411,11 +1411,11 @@ export class QueryBuilder<Entity> {
// });
alias.metadata.columns.forEach(column => {
const expression = "([ =\(]|^.{0})" + alias.name + "\\." + column.propertyPath + "([ =]|.{0}$)";
statement = statement.replace(new RegExp(expression, "gm"), "$1" + this.escapeAlias(alias.name) + "." + this.escapeColumn(column.fullName) + "$2");
statement = statement.replace(new RegExp(expression, "gm"), "$1" + this.escapeAlias(alias.name) + "." + this.escapeColumn(column.databaseName) + "$2");
});
alias.metadata.relationsWithJoinColumns/*.filter(relation => !relation.isInEmbedded)*/.forEach(relation => {
const expression = "([ =\(]|^.{0})" + alias.name + "\\." + relation.propertyPath + "([ =]|.{0}$)";
statement = statement.replace(new RegExp(expression, "gm"), "$1" + this.escapeAlias(alias.name) + "." + this.escapeColumn(relation.joinColumns[0].fullName) + "$2"); // todo: fix relation.joinColumns[0], what if multiple columns
statement = statement.replace(new RegExp(expression, "gm"), "$1" + this.escapeAlias(alias.name) + "." + this.escapeColumn(relation.joinColumns[0].databaseName) + "$2"); // todo: fix relation.joinColumns[0], what if multiple columns
});
});
return statement;
@ -1455,7 +1455,7 @@ export class QueryBuilder<Entity> {
// JOIN `category` `category` ON `category`.`id` = `post`.`categoryId`
const condition = relation.joinColumns.map(joinColumn => {
return ea(destinationTableAlias) + "." + ec(joinColumn.referencedColumn!.fullName) + "=" + ea(parentAlias) + "." + ec(joinColumn.propertyName);
return ea(destinationTableAlias) + "." + ec(joinColumn.referencedColumn!.databaseName) + "=" + ea(parentAlias) + "." + ec(joinColumn.propertyName);
}).join(" AND ");
return " " + joinAttr.direction + " JOIN " + et(destinationTableName) + " " + ea(destinationTableAlias) + " ON " + condition + appendedCondition;
@ -1464,7 +1464,7 @@ export class QueryBuilder<Entity> {
// JOIN `post` `post` ON `post`.`categoryId` = `category`.`id`
const condition = relation.inverseRelation.joinColumns.map(joinColumn => {
return ea(destinationTableAlias!) + "." + ec(joinColumn.propertyName) + "=" + ea(parentAlias) + "." + ec(joinColumn.referencedColumn!.fullName);
return ea(destinationTableAlias!) + "." + ec(joinColumn.propertyName) + "=" + ea(parentAlias) + "." + ec(joinColumn.referencedColumn!.databaseName);
}).join(" AND ");
return " " + joinAttr.direction + " JOIN " + et(destinationTableName) + " " + ea(destinationTableAlias) + " ON " + condition + appendedCondition;
@ -1479,23 +1479,23 @@ export class QueryBuilder<Entity> {
junctionCondition = relation.joinColumns.map(joinColumn => {
// `post_category`.`postId` = `post`.`id`
return ea(junctionAlias) + "." + ec(joinColumn.propertyName) + "=" + ea(parentAlias) + "." + ec(joinColumn.referencedColumn!.fullName);
return ea(junctionAlias) + "." + ec(joinColumn.propertyName) + "=" + ea(parentAlias) + "." + ec(joinColumn.referencedColumn!.databaseName);
}).join(" AND ");
destinationCondition = relation.inverseJoinColumns.map(joinColumn => {
// `category`.`id` = `post_category`.`categoryId`
return ea(destinationTableAlias) + "." + ec(joinColumn.referencedColumn!.fullName) + "=" + ea(junctionAlias) + "." + ec(joinColumn.propertyName);
return ea(destinationTableAlias) + "." + ec(joinColumn.referencedColumn!.databaseName) + "=" + ea(junctionAlias) + "." + ec(joinColumn.propertyName);
}).join(" AND ");
} else {
junctionCondition = relation.inverseRelation.inverseJoinColumns.map(joinColumn => {
// `post_category`.`categoryId` = `category`.`id`
return ea(junctionAlias) + "." + ec(joinColumn.propertyName) + "=" + ea(parentAlias) + "." + ec(joinColumn.referencedColumn!.fullName);
return ea(junctionAlias) + "." + ec(joinColumn.propertyName) + "=" + ea(parentAlias) + "." + ec(joinColumn.referencedColumn!.databaseName);
}).join(" AND ");
destinationCondition = relation.inverseRelation.joinColumns.map(joinColumn => {
// `post`.`id` = `post_category`.`postId`
return ea(destinationTableAlias) + "." + ec(joinColumn.referencedColumn!.fullName) + "=" + ea(junctionAlias) + "." + ec(joinColumn.propertyName);
return ea(destinationTableAlias) + "." + ec(joinColumn.referencedColumn!.databaseName) + "=" + ea(junctionAlias) + "." + ec(joinColumn.propertyName);
}).join(" AND ");
}
@ -1512,7 +1512,7 @@ export class QueryBuilder<Entity> {
const alias = "parentIdColumn_" + metadata.parentEntityMetadata.tableName;
const parentJoin = " JOIN " + et(metadata.parentEntityMetadata.tableName) + " " + ea(alias) + " ON " +
metadata.parentIdColumns.map(parentIdColumn => {
return this.expressionMap.mainAlias!.name + "." + parentIdColumn.fullName + "=" + ea(alias) + "." + parentIdColumn.propertyName;
return this.expressionMap.mainAlias!.name + "." + parentIdColumn.databaseName + "=" + ea(alias) + "." + parentIdColumn.propertyName;
});
joins.push(parentJoin);
}
@ -1627,11 +1627,11 @@ export class QueryBuilder<Entity> {
const whereSubStrings: string[] = [];
// if (metadata.hasMultiplePrimaryKeys) {
metadata.primaryColumns.forEach((primaryColumn, secondIndex) => {
whereSubStrings.push(ea(alias) + "." + ec(primaryColumn.fullName) + "=:id_" + index + "_" + secondIndex);
whereSubStrings.push(ea(alias) + "." + ec(primaryColumn.databaseName) + "=:id_" + index + "_" + secondIndex);
parameters["id_" + index + "_" + secondIndex] = primaryColumn.getValue(id);
});
metadata.parentIdColumns.forEach((primaryColumn, secondIndex) => {
whereSubStrings.push(ea(alias) + "." + ec(id[primaryColumn.fullName]) + "=:parentId_" + index + "_" + secondIndex);
whereSubStrings.push(ea(alias) + "." + ec(id[primaryColumn.databaseName]) + "=:parentId_" + index + "_" + secondIndex);
parameters["parentId_" + index + "_" + secondIndex] = primaryColumn.getValue(id);
});
// } else {

View File

@ -78,14 +78,14 @@ export class RelationCountLoader {
let secondJunctionColumn: ColumnMetadata;
if (relationCountAttr.relation.isOwning) { // todo fix joinColumns[0] and inverseJoinColumns[0].
joinTableColumnName = relationCountAttr.relation.joinColumns[0].referencedColumn!.fullName;
inverseJoinColumnName = relationCountAttr.relation.inverseJoinColumns[0].referencedColumn!.fullName;
joinTableColumnName = relationCountAttr.relation.joinColumns[0].referencedColumn!.databaseName;
inverseJoinColumnName = relationCountAttr.relation.inverseJoinColumns[0].referencedColumn!.databaseName;
firstJunctionColumn = relationCountAttr.relation.junctionEntityMetadata.columnsWithoutEmbeddeds[0];
secondJunctionColumn = relationCountAttr.relation.junctionEntityMetadata.columnsWithoutEmbeddeds[1];
} else {
joinTableColumnName = relationCountAttr.relation.inverseRelation.inverseJoinColumns[0].referencedColumn!.fullName;
inverseJoinColumnName = relationCountAttr.relation.inverseRelation.joinColumns[0].referencedColumn!.fullName;
joinTableColumnName = relationCountAttr.relation.inverseRelation.inverseJoinColumns[0].referencedColumn!.databaseName;
inverseJoinColumnName = relationCountAttr.relation.inverseRelation.joinColumns[0].referencedColumn!.databaseName;
firstJunctionColumn = relationCountAttr.relation.junctionEntityMetadata.columnsWithoutEmbeddeds[1];
secondJunctionColumn = relationCountAttr.relation.junctionEntityMetadata.columnsWithoutEmbeddeds[0];
}

View File

@ -89,7 +89,7 @@ export class RelationIdLoader {
qb.select(inverseSideTableAlias + "." + inverseSidePropertyName, "manyToManyId");
inverseRelation.entityMetadata.primaryColumns.forEach(primaryColumn => {
qb.addSelect(inverseSideTableAlias + "." + primaryColumn.fullName, inverseSideTableAlias + "_" + primaryColumn.fullName);
qb.addSelect(inverseSideTableAlias + "." + primaryColumn.databaseName, inverseSideTableAlias + "_" + primaryColumn.databaseName);
});
qb.from(inverseSideTable, inverseSideTableAlias)
@ -111,10 +111,10 @@ export class RelationIdLoader {
}
if (inverseRelation.entityMetadata.primaryColumns.length === 1) {
result.id.push(rawResult[inverseSideTableAlias + "_" + inverseRelation.entityMetadata.firstPrimaryColumn.fullName]);
result.id.push(rawResult[inverseSideTableAlias + "_" + inverseRelation.entityMetadata.firstPrimaryColumn.databaseName]);
} else {
result.id.push(inverseRelation.entityMetadata.primaryColumns.reduce((ids, primaryColumn) => {
ids[primaryColumn.propertyName] = rawResult[inverseSideTableAlias + "_" + primaryColumn.fullName];
ids[primaryColumn.propertyName] = rawResult[inverseSideTableAlias + "_" + primaryColumn.databaseName];
return ids;
}, {} as ObjectLiteral));
}
@ -140,14 +140,14 @@ export class RelationIdLoader {
let secondJunctionColumn: ColumnMetadata;
if (relationIdAttr.relation.isOwning) { // todo fix joinColumns[0]
joinTableColumnName = relationIdAttr.relation.joinColumns[0].referencedColumn!.fullName;
inverseJoinColumnName = relationIdAttr.relation.joinColumns[0].referencedColumn!.fullName;
joinTableColumnName = relationIdAttr.relation.joinColumns[0].referencedColumn!.databaseName;
inverseJoinColumnName = relationIdAttr.relation.joinColumns[0].referencedColumn!.databaseName;
firstJunctionColumn = relationIdAttr.relation.junctionEntityMetadata.columns[0];
secondJunctionColumn = relationIdAttr.relation.junctionEntityMetadata.columns[1];
} else {
joinTableColumnName = relationIdAttr.relation.inverseRelation.joinColumns[0].referencedColumn!.fullName;
inverseJoinColumnName = relationIdAttr.relation.inverseRelation.joinColumns[0].referencedColumn!.fullName;
joinTableColumnName = relationIdAttr.relation.inverseRelation.joinColumns[0].referencedColumn!.databaseName;
inverseJoinColumnName = relationIdAttr.relation.inverseRelation.joinColumns[0].referencedColumn!.databaseName;
firstJunctionColumn = relationIdAttr.relation.junctionEntityMetadata.columns[1];
secondJunctionColumn = relationIdAttr.relation.junctionEntityMetadata.columns[0];
}
@ -203,7 +203,7 @@ export class RelationIdLoader {
protected createIdMap(columns: ColumnMetadata[], parentAlias: string, rawEntity: any) {
return columns.reduce((idMap, primaryColumn) => {
idMap[primaryColumn.propertyName] = rawEntity[parentAlias + "_" + primaryColumn.fullName];
idMap[primaryColumn.propertyName] = rawEntity[parentAlias + "_" + primaryColumn.databaseName];
return idMap;
}, {} as ObjectLiteral);
}

View File

@ -32,18 +32,18 @@ export class DocumentToEntityTransformer {
let hasData = false;
// handle _id property the special way
if (metadata.hasObjectIdColumn && document[metadata.objectIdColumn.name]) {
if (metadata.hasObjectIdColumn && document[metadata.objectIdColumn.databaseName]) {
// todo: we can't use driver in this class
// do we really need prepare hydrated value here? If no then no problem. If yes then think maybe prepareHydratedValue process should be extracted out of driver class?
// entity[metadata.objectIdColumn.propertyName] = this.driver.prepareHydratedValue(document[metadata.objectIdColumn.name"], metadata.objectIdColumn);
entity[metadata.objectIdColumn.propertyName] = document[metadata.objectIdColumn.name];
entity[metadata.objectIdColumn.propertyName] = document[metadata.objectIdColumn.databaseName];
hasData = true;
}
// add special columns that contains relation ids
if (this.enableRelationIdValues) {
metadata.columns.filter(column => !!column.relationMetadata).forEach(column => {
const valueInObject = document[column.name];
const valueInObject = document[column.databaseName];
if (valueInObject !== undefined && valueInObject !== null && column.propertyName) {
// todo: we can't use driver in this class
// const value = this.driver.prepareHydratedValue(valueInObject, column);
@ -68,7 +68,7 @@ export class DocumentToEntityTransformer {
// get value from columns selections and put them into object
metadata.columnsWithoutEmbeddeds.forEach(column => {
const valueInObject = document[column.name];
const valueInObject = document[column.databaseName];
if (valueInObject !== undefined &&
valueInObject !== null &&
column.propertyName &&
@ -91,14 +91,14 @@ export class DocumentToEntityTransformer {
entity[embedded.propertyName] = (document[embedded.prefix] as any[]).map(subValue => {
const newItem = embedded.create();
embedded.columns.forEach(column => {
newItem[column.propertyName] = subValue[column.name];
newItem[column.propertyName] = subValue[column.databaseName];
});
return newItem;
});
} else {
embedded.columns.forEach(column => {
const value = document[embedded.prefix][column.name];
const value = document[embedded.prefix][column.databaseName];
if (!value) return;
if (!entity[embedded.propertyName])

View File

@ -46,7 +46,7 @@ export class RawSqlResultsToEntityTransformer {
protected group(rawResults: any[], alias: Alias): any[][] {
const groupedResults: { id: any, items: any[] }[] = [];
rawResults.forEach(rawResult => {
const id = alias.metadata.primaryColumnsWithParentIdColumns.map(column => rawResult[alias.name + "_" + column.fullName]).join("_"); // todo: check partial
const id = alias.metadata.primaryColumnsWithParentIdColumns.map(column => rawResult[alias.name + "_" + column.databaseName]).join("_"); // todo: check partial
if (!id) return;
let group = groupedResults.find(groupedResult => groupedResult.id === id);
@ -85,7 +85,7 @@ export class RawSqlResultsToEntityTransformer {
protected transformColumns(rawResults: any[], alias: Alias, entity: ObjectLiteral, columns: ColumnMetadata[]): boolean {
let hasData = false;
columns.forEach(column => {
const value = rawResults[0][alias.name + "_" + column.fullName];
const value = rawResults[0][alias.name + "_" + column.databaseName];
if (value === undefined || value === null || column.isVirtual || column.isParentId || column.isDiscriminator)
return;
@ -145,16 +145,16 @@ export class RawSqlResultsToEntityTransformer {
let idMap: any, referenceColumnValue: any;
if (relation.isManyToOne || relation.isOneToOneOwner) {
idMap = relation.entityMetadata.primaryColumns.reduce((idMap, primaryColumn) => {
idMap[primaryColumn.propertyName] = rawSqlResults[0][alias.name + "_" + primaryColumn.fullName];
idMap[primaryColumn.propertyName] = rawSqlResults[0][alias.name + "_" + primaryColumn.databaseName];
return idMap;
}, {} as ObjectLiteral);
} else {
let referenceColumnName: string;
if (relation.isOneToMany || relation.isOneToOneNotOwner) { // todo: fix joinColumns[0]
referenceColumnName = relation.inverseRelation.joinColumns[0].referencedColumn!.fullName;
referenceColumnName = relation.inverseRelation.joinColumns[0].referencedColumn!.databaseName;
} else {
referenceColumnName = relation.isOwning ? relation.joinColumns[0].referencedColumn!.fullName : relation.inverseRelation.joinColumns[0].referencedColumn!.fullName;
referenceColumnName = relation.isOwning ? relation.joinColumns[0].referencedColumn!.databaseName : relation.inverseRelation.joinColumns[0].referencedColumn!.databaseName;
}
referenceColumnValue = rawSqlResults[0][alias.name + "_" + referenceColumnName];
if (referenceColumnValue === undefined || referenceColumnValue === null)
@ -183,10 +183,10 @@ export class RawSqlResultsToEntityTransformer {
let referenceColumnName: string;
if (relation.isOneToMany) {
referenceColumnName = relation.inverseRelation.joinColumns[0].referencedColumn!.fullName; // todo: fix joinColumns[0]
referenceColumnName = relation.inverseRelation.joinColumns[0].referencedColumn!.databaseName; // todo: fix joinColumns[0]
} else {
referenceColumnName = relation.isOwning ? relation.joinColumns[0].referencedColumn!.fullName : relation.inverseRelation.joinColumns[0].referencedColumn!.fullName;
referenceColumnName = relation.isOwning ? relation.joinColumns[0].referencedColumn!.databaseName : relation.inverseRelation.joinColumns[0].referencedColumn!.databaseName;
}
const referenceColumnValue = rawSqlResults[0][alias.name + "_" + referenceColumnName]; // we use zero index since its grouped data // todo: selection with alias for entity columns wont work

View File

@ -60,11 +60,11 @@ export class SpecificRepository<Entity extends ObjectLiteral> {
if (relation.isOwning) {
table = relation.entityMetadata.tableName;
values[relation.name] = relatedEntityId;
conditions[relation.joinColumns[0].referencedColumn!.fullName] = entityId;
conditions[relation.joinColumns[0].referencedColumn!.databaseName] = entityId;
} else {
table = relation.inverseEntityMetadata.tableName;
values[relation.inverseRelation.name] = relatedEntityId;
conditions[relation.inverseRelation.joinColumns[0].referencedColumn!.fullName] = entityId;
conditions[relation.inverseRelation.joinColumns[0].referencedColumn!.databaseName] = entityId;
}
@ -107,11 +107,11 @@ export class SpecificRepository<Entity extends ObjectLiteral> {
if (relation.isOwning) {
table = relation.inverseEntityMetadata.tableName;
values[relation.inverseRelation.name] = relatedEntityId;
conditions[relation.inverseRelation.joinColumns[0].referencedColumn!.fullName] = entityId;
conditions[relation.inverseRelation.joinColumns[0].referencedColumn!.databaseName] = entityId;
} else {
table = relation.entityMetadata.tableName;
values[relation.name] = relatedEntityId;
conditions[relation.joinColumns[0].referencedColumn!.fullName] = entityId;
conditions[relation.joinColumns[0].referencedColumn!.databaseName] = entityId;
}
const queryRunnerProvider = this.queryRunnerProvider ? this.queryRunnerProvider : new QueryRunnerProvider(this.connection.driver);
@ -151,11 +151,11 @@ export class SpecificRepository<Entity extends ObjectLiteral> {
const insertPromises = relatedEntityIds.map(relatedEntityId => {
const values: any = {};
if (relation.isOwning) {
values[relation.junctionEntityMetadata.columns[0].fullName] = entityId;
values[relation.junctionEntityMetadata.columns[1].fullName] = relatedEntityId;
values[relation.junctionEntityMetadata.columns[0].databaseName] = entityId;
values[relation.junctionEntityMetadata.columns[1].databaseName] = relatedEntityId;
} else {
values[relation.junctionEntityMetadata.columns[1].fullName] = entityId;
values[relation.junctionEntityMetadata.columns[0].fullName] = relatedEntityId;
values[relation.junctionEntityMetadata.columns[1].databaseName] = entityId;
values[relation.junctionEntityMetadata.columns[0].databaseName] = relatedEntityId;
}
return queryRunner.insert(relation.junctionEntityMetadata.tableName, values);
@ -197,11 +197,11 @@ export class SpecificRepository<Entity extends ObjectLiteral> {
const insertPromises = entityIds.map(entityId => {
const values: any = {};
if (relation.isOwning) {
values[relation.junctionEntityMetadata.columns[0].fullName] = entityId;
values[relation.junctionEntityMetadata.columns[1].fullName] = relatedEntityId;
values[relation.junctionEntityMetadata.columns[0].databaseName] = entityId;
values[relation.junctionEntityMetadata.columns[1].databaseName] = relatedEntityId;
} else {
values[relation.junctionEntityMetadata.columns[1].fullName] = entityId;
values[relation.junctionEntityMetadata.columns[0].fullName] = relatedEntityId;
values[relation.junctionEntityMetadata.columns[1].databaseName] = entityId;
values[relation.junctionEntityMetadata.columns[0].databaseName] = relatedEntityId;
}
return queryRunner.insert(relation.junctionEntityMetadata.tableName, values);
@ -247,8 +247,8 @@ export class SpecificRepository<Entity extends ObjectLiteral> {
.delete()
.fromTable(relation.junctionEntityMetadata.tableName, "junctionEntity");
const firstColumnName = this.connection.driver.escapeColumnName(relation.isOwning ? relation.junctionEntityMetadata.columns[0].fullName : relation.junctionEntityMetadata.columns[1].fullName);
const secondColumnName = this.connection.driver.escapeColumnName(relation.isOwning ? relation.junctionEntityMetadata.columns[1].fullName : relation.junctionEntityMetadata.columns[0].fullName);
const firstColumnName = this.connection.driver.escapeColumnName(relation.isOwning ? relation.junctionEntityMetadata.columns[0].databaseName : relation.junctionEntityMetadata.columns[1].databaseName);
const secondColumnName = this.connection.driver.escapeColumnName(relation.isOwning ? relation.junctionEntityMetadata.columns[1].databaseName : relation.junctionEntityMetadata.columns[0].databaseName);
relatedEntityIds.forEach((relatedEntityId, index) => {
qb.orWhere(`(${firstColumnName}=:entityId AND ${secondColumnName}=:relatedEntity_${index})`)
@ -293,8 +293,8 @@ export class SpecificRepository<Entity extends ObjectLiteral> {
.delete()
.from(relation.junctionEntityMetadata.tableName, "junctionEntity");
const firstColumnName = relation.isOwning ? relation.junctionEntityMetadata.columns[1].fullName : relation.junctionEntityMetadata.columns[0].fullName;
const secondColumnName = relation.isOwning ? relation.junctionEntityMetadata.columns[0].fullName : relation.junctionEntityMetadata.columns[1].fullName;
const firstColumnName = relation.isOwning ? relation.junctionEntityMetadata.columns[1].databaseName : relation.junctionEntityMetadata.columns[0].databaseName;
const secondColumnName = relation.isOwning ? relation.junctionEntityMetadata.columns[0].databaseName : relation.junctionEntityMetadata.columns[1].databaseName;
entityIds.forEach((entityId, index) => {
qb.orWhere(`(${firstColumnName}=:relatedEntityId AND ${secondColumnName}=:entity_${index})`)
@ -422,7 +422,7 @@ export class SpecificRepository<Entity extends ObjectLiteral> {
const entityReferencedColumns = relation.isOwning ? relation.joinColumns.map(joinColumn => joinColumn.referencedColumn!) : relation.inverseRelation.inverseJoinColumns.map(joinColumn => joinColumn.referencedColumn!);
const ownerEntityColumns = relation.isOwning ? relation.joinColumns : relation.inverseRelation.inverseJoinColumns;
const inverseEntityColumns = relation.isOwning ? relation.inverseJoinColumns : relation.inverseRelation.joinColumns;
const inverseEntityColumnNames = relation.isOwning ? relation.inverseJoinColumns.map(joinColumn => joinColumn.name) : relation.inverseRelation.joinColumns.map(joinColumn => joinColumn.name);
const inverseEntityColumnNames = relation.isOwning ? relation.inverseJoinColumns.map(joinColumn => joinColumn.databaseName) : relation.inverseRelation.joinColumns.map(joinColumn => joinColumn.databaseName);
let entityIds = this.convertEntityOrEntitiesToIdOrIds(entityReferencedColumns, entityOrEntities);
if (!(entityIds instanceof Array)) entityIds = [entityIds];
@ -446,8 +446,8 @@ export class SpecificRepository<Entity extends ObjectLiteral> {
});
qb.fromTable(relation.junctionEntityMetadata.tableName, "junction");
Object.keys(entityId).forEach((columnName) => {
const junctionColumnName = ownerEntityColumns.find(joinColumn => joinColumn.referencedColumn!.name === columnName);
qb.andWhere(ea("junction") + "." + ec(junctionColumnName!.name) + "=:" + junctionColumnName!.name + "_entityId", {[junctionColumnName!.name + "_entityId"]: entityId[columnName]});
const junctionColumnName = ownerEntityColumns.find(joinColumn => joinColumn.referencedColumn!.databaseName === columnName);
qb.andWhere(ea("junction") + "." + ec(junctionColumnName!.databaseName) + "=:" + junctionColumnName!.databaseName + "_entityId", {[junctionColumnName!.databaseName + "_entityId"]: entityId[columnName]});
});
// ownerEntityColumnNames.forEach(columnName => {
// qb.andWhere(ea("junction") + "." + ec(columnName) + "=:" + columnName + "_entityId", {[columnName + "_entityId"]: entityId});
@ -464,7 +464,7 @@ export class SpecificRepository<Entity extends ObjectLiteral> {
.then((results: any[]) => {
results.forEach(result => {
ids.push(Object.keys(result).reduce((id, key) => {
const junctionColumnName = inverseEntityColumns.find(joinColumn => joinColumn.name === key)!;
const junctionColumnName = inverseEntityColumns.find(joinColumn => joinColumn.databaseName === key)!;
id[junctionColumnName.referencedColumn!.propertyName] = result[key];
return id;
}, {} as ObjectLiteral));
@ -490,7 +490,7 @@ export class SpecificRepository<Entity extends ObjectLiteral> {
} else {
if (entityOrEntities instanceof Object) {
return columns.reduce((ids, column) => {
ids[column.name] = entityOrEntities[column.propertyName];
ids[column.databaseName] = entityOrEntities[column.propertyName];
return ids;
}, {} as ObjectLiteral);
} else {

View File

@ -47,7 +47,7 @@ export class TreeRepository<Entity> extends Repository<Entity> {
const escapeAlias = (alias: string) => this.connection.driver.escapeAliasName(alias);
const escapeColumn = (column: string) => this.connection.driver.escapeColumnName(column);
const joinCondition = `${escapeAlias(alias)}.${escapeColumn(this.metadata.firstPrimaryColumn.fullName)}=${escapeAlias(closureTableAlias)}.${escapeColumn("descendant")}`;
const joinCondition = `${escapeAlias(alias)}.${escapeColumn(this.metadata.firstPrimaryColumn.databaseName)}=${escapeAlias(closureTableAlias)}.${escapeColumn("descendant")}`;
return this.createQueryBuilder(alias)
.innerJoin(this.metadata.closureJunctionTable.tableName, closureTableAlias, joinCondition)
.where(`${escapeAlias(closureTableAlias)}.${escapeColumn("ancestor")}=${this.metadata.getEntityIdMap(entity)![this.metadata.firstPrimaryColumn.propertyName]}`);
@ -95,7 +95,7 @@ export class TreeRepository<Entity> extends Repository<Entity> {
const escapeAlias = (alias: string) => this.connection.driver.escapeAliasName(alias);
const escapeColumn = (column: string) => this.connection.driver.escapeColumnName(column);
const joinCondition = `${escapeAlias(alias)}.${escapeColumn(this.metadata.firstPrimaryColumn.fullName)}=${escapeAlias(closureTableAlias)}.${escapeColumn("ancestor")}`;
const joinCondition = `${escapeAlias(alias)}.${escapeColumn(this.metadata.firstPrimaryColumn.databaseName)}=${escapeAlias(closureTableAlias)}.${escapeColumn("ancestor")}`;
return this.createQueryBuilder(alias)
.innerJoin(this.metadata.closureJunctionTable.tableName, closureTableAlias, joinCondition)
.where(`${escapeAlias(closureTableAlias)}.${escapeColumn("descendant")}=${this.metadata.getEntityIdMap(entity)![this.metadata.firstPrimaryColumn.propertyName]}`);
@ -148,7 +148,7 @@ export class TreeRepository<Entity> extends Repository<Entity> {
protected createRelationMaps(alias: string, rawResults: any[]): { id: any, parentId: any }[] {
return rawResults.map(rawResult => {
return {
id: rawResult[alias + "_" + this.metadata.firstPrimaryColumn.fullName],
id: rawResult[alias + "_" + this.metadata.firstPrimaryColumn.databaseName],
parentId: rawResult[alias + "_" + this.metadata.treeParentRelation.name]
};
});

View File

@ -164,7 +164,7 @@ export class SchemaBuilder {
// find columns that exist in the database but does not exist in the metadata
const droppedColumnSchemas = tableSchema.columns.filter(columnSchema => {
return !metadata.columns.find(columnMetadata => columnMetadata.fullName === columnSchema.name);
return !metadata.columns.find(columnMetadata => columnMetadata.databaseName === columnSchema.name);
});
if (droppedColumnSchemas.length === 0)
return;
@ -202,12 +202,12 @@ export class SchemaBuilder {
// find which columns are new
const newColumnMetadatas = metadata.columns.filter(columnMetadata => {
return !tableSchema.columns.find(columnSchema => columnSchema.name === columnMetadata.fullName);
return !tableSchema.columns.find(columnSchema => columnSchema.name === columnMetadata.databaseName);
});
if (newColumnMetadatas.length === 0)
return;
this.logger.logSchemaBuild(`new columns added: ` + newColumnMetadatas.map(column => column.fullName).join(", "));
this.logger.logSchemaBuild(`new columns added: ` + newColumnMetadatas.map(column => column.databaseName).join(", "));
// create columns in the database
const newColumnSchemas = this.metadataColumnsToColumnSchemas(newColumnMetadatas);
@ -234,7 +234,7 @@ export class SchemaBuilder {
// drop all foreign keys that point to this column
const dropRelatedForeignKeysPromises = updatedColumnSchemas
.filter(changedColumnSchema => !!metadata.columns.find(columnMetadata => columnMetadata.fullName === changedColumnSchema.name))
.filter(changedColumnSchema => !!metadata.columns.find(columnMetadata => columnMetadata.databaseName === changedColumnSchema.name))
.map(changedColumnSchema => this.dropColumnReferencedForeignKeys(metadata.tableName, changedColumnSchema.name));
// wait until all related foreign keys are dropped
@ -242,7 +242,7 @@ export class SchemaBuilder {
// drop all indices that point to this column
const dropRelatedIndicesPromises = updatedColumnSchemas
.filter(changedColumnSchema => !!metadata.columns.find(columnMetadata => columnMetadata.fullName === changedColumnSchema.name))
.filter(changedColumnSchema => !!metadata.columns.find(columnMetadata => columnMetadata.databaseName === changedColumnSchema.name))
.map(changedColumnSchema => this.dropColumnReferencedIndices(metadata.tableName, changedColumnSchema.name));
// wait until all related indices are dropped
@ -250,7 +250,7 @@ export class SchemaBuilder {
// generate a map of new/old columns
const newAndOldColumnSchemas = updatedColumnSchemas.map(changedColumnSchema => {
const columnMetadata = metadata.columns.find(column => column.fullName === changedColumnSchema.name);
const columnMetadata = metadata.columns.find(column => column.databaseName === changedColumnSchema.name);
const newColumnSchema = ColumnSchema.create(columnMetadata!, this.queryRunner.normalizeType(columnMetadata!));
tableSchema.replaceColumn(changedColumnSchema, newColumnSchema);
@ -276,12 +276,12 @@ export class SchemaBuilder {
const metadataPrimaryColumns = metadata.columns.filter(column => column.isPrimary && !column.isGenerated);
const addedKeys = metadataPrimaryColumns
.filter(primaryKey => {
return !tableSchema.primaryKeysWithoutGenerated.find(dbPrimaryKey => dbPrimaryKey.columnName === primaryKey.fullName);
return !tableSchema.primaryKeysWithoutGenerated.find(dbPrimaryKey => dbPrimaryKey.columnName === primaryKey.databaseName);
})
.map(primaryKey => new PrimaryKeySchema("", primaryKey.fullName));
.map(primaryKey => new PrimaryKeySchema("", primaryKey.databaseName));
const droppedKeys = tableSchema.primaryKeysWithoutGenerated.filter(primaryKeySchema => {
return !metadataPrimaryColumns.find(primaryKeyMetadata => primaryKeyMetadata.fullName === primaryKeySchema.columnName);
return !metadataPrimaryColumns.find(primaryKeyMetadata => primaryKeyMetadata.databaseName === primaryKeySchema.columnName);
});
if (addedKeys.length === 0 && droppedKeys.length === 0)
@ -405,11 +405,11 @@ export class SchemaBuilder {
const dependForeignKeys = allForeignKeyMetadatas.filter(foreignKey => {
if (foreignKey.tableName === tableName) {
return !!foreignKey.columns.find(fkColumn => {
return fkColumn.fullName === columnName;
return fkColumn.databaseName === columnName;
});
} else if (foreignKey.referencedTableName === tableName) {
return !!foreignKey.referencedColumns.find(fkColumn => {
return fkColumn.fullName === columnName;
return fkColumn.databaseName === columnName;
});
}
return false;

View File

@ -104,7 +104,7 @@ export class ColumnSchema {
*/
static create(columnMetadata: ColumnMetadata, normalizedType: string): ColumnSchema {
const columnSchema = new ColumnSchema();
columnSchema.name = columnMetadata.fullName;
columnSchema.name = columnMetadata.databaseName;
columnSchema.default = columnMetadata.default;
columnSchema.comment = columnMetadata.comment;
columnSchema.isGenerated = columnMetadata.isGenerated;

View File

@ -198,11 +198,11 @@ export class TableSchema {
*/
findChangedColumns(queryRunner: QueryRunner, columnMetadatas: ColumnMetadata[]): ColumnSchema[] {
return this.columns.filter(columnSchema => {
const columnMetadata = columnMetadatas.find(columnMetadata => columnMetadata.fullName === columnSchema.name);
const columnMetadata = columnMetadatas.find(columnMetadata => columnMetadata.databaseName === columnSchema.name);
if (!columnMetadata)
return false; // we don't need new columns, we only need exist and changed
return columnSchema.name !== columnMetadata.fullName ||
return columnSchema.name !== columnMetadata.databaseName ||
columnSchema.type !== queryRunner.normalizeType(columnMetadata) ||
columnSchema.comment !== columnMetadata.comment ||
(!columnSchema.isGenerated && !queryRunner.compareDefaultValues(columnMetadata.default, columnSchema.default)) || // we included check for generated here, because generated columns already can have default values