fixed bug with default values comparision

This commit is contained in:
Umed Khudoiberdiev 2017-01-12 21:07:31 +05:00
parent 97ee9af475
commit 3ccf4d6123
9 changed files with 97 additions and 2 deletions

View File

@ -1,7 +1,7 @@
{
"name": "typeorm",
"private": true,
"version": "0.0.7-alpha.12",
"version": "0.0.7-alpha.13",
"description": "Data-Mapper ORM for TypeScript, ES7, ES6, ES5. Supports MySQL, PostgreSQL, MariaDB, SQLite, MS SQL Server, Oracle, WebSQL databases.",
"license": "MIT",
"readmeFilename": "README.md",

View File

@ -736,6 +736,21 @@ export class MysqlQueryRunner implements QueryRunner {
throw new DataTypeNotSupportedByDriverError(typeOptions.type, "MySQL/MariaDB");
}
/**
* Checks if "DEFAULT" values in the column metadata and in the database schema are equal.
*/
compareDefaultValues(columnMetadataValue: any, databaseValue: any): boolean {
if (typeof columnMetadataValue === "number")
return columnMetadataValue === parseInt(databaseValue);
if (typeof columnMetadataValue === "boolean")
return columnMetadataValue === (!!databaseValue || databaseValue === "false");
if (typeof columnMetadataValue === "function")
return columnMetadataValue() === databaseValue;
return columnMetadataValue === databaseValue;
}
// -------------------------------------------------------------------------
// Protected Methods
// -------------------------------------------------------------------------

View File

@ -807,6 +807,21 @@ AND cons.constraint_name = cols.constraint_name AND cons.owner = cols.owner ORDE
throw new DataTypeNotSupportedByDriverError(typeOptions.type, "Oracle");
}
/**
* Checks if "DEFAULT" values in the column metadata and in the database schema are equal.
*/
compareDefaultValues(columnMetadataValue: any, databaseValue: any): boolean {
if (typeof columnMetadataValue === "number")
return columnMetadataValue === parseInt(databaseValue);
if (typeof columnMetadataValue === "boolean")
return columnMetadataValue === (!!databaseValue || databaseValue === "false");
if (typeof columnMetadataValue === "function")
return columnMetadataValue() === databaseValue;
return columnMetadataValue === databaseValue;
}
// -------------------------------------------------------------------------
// Protected Methods
// -------------------------------------------------------------------------

View File

@ -802,6 +802,21 @@ where constraint_type = 'PRIMARY KEY' and tc.table_catalog = '${this.dbName}'`;
throw new DataTypeNotSupportedByDriverError(typeOptions.type, "Postgres");
}
/**
* Checks if "DEFAULT" values in the column metadata and in the database schema are equal.
*/
compareDefaultValues(columnMetadataValue: any, databaseValue: any): boolean {
if (typeof columnMetadataValue === "number")
return columnMetadataValue === parseInt(databaseValue);
if (typeof columnMetadataValue === "boolean")
return columnMetadataValue === (!!databaseValue || databaseValue === "false");
if (typeof columnMetadataValue === "function")
return columnMetadataValue() === databaseValue;
return columnMetadataValue === databaseValue;
}
// -------------------------------------------------------------------------
// Protected Methods
// -------------------------------------------------------------------------

View File

@ -785,6 +785,21 @@ export class SqliteQueryRunner implements QueryRunner {
throw new DataTypeNotSupportedByDriverError(typeOptions.type, "SQLite");
}
/**
* Checks if "DEFAULT" values in the column metadata and in the database schema are equal.
*/
compareDefaultValues(columnMetadataValue: any, databaseValue: any): boolean {
if (typeof columnMetadataValue === "number")
return columnMetadataValue === parseInt(databaseValue);
if (typeof columnMetadataValue === "boolean")
return columnMetadataValue === (!!databaseValue || databaseValue === "false");
if (typeof columnMetadataValue === "function")
return columnMetadataValue() === databaseValue;
return columnMetadataValue === databaseValue;
}
// -------------------------------------------------------------------------
// Protected Methods
// -------------------------------------------------------------------------

View File

@ -839,6 +839,21 @@ WHERE columnUsages.TABLE_CATALOG = '${this.dbName}' AND tableConstraints.TABLE_C
throw new DataTypeNotSupportedByDriverError(typeOptions.type, "SQLServer");
}
/**
* Checks if "DEFAULT" values in the column metadata and in the database schema are equal.
*/
compareDefaultValues(columnMetadataValue: any, databaseValue: any): boolean {
if (typeof columnMetadataValue === "number")
return columnMetadataValue === parseInt(databaseValue);
if (typeof columnMetadataValue === "boolean")
return columnMetadataValue === (!!databaseValue || databaseValue === "false");
if (typeof columnMetadataValue === "function")
return columnMetadataValue() === databaseValue;
return columnMetadataValue === databaseValue;
}
// -------------------------------------------------------------------------
// Protected Methods
// -------------------------------------------------------------------------

View File

@ -794,6 +794,21 @@ export class WebsqlQueryRunner implements QueryRunner {
throw new DataTypeNotSupportedByDriverError(typeOptions.type, "WebSQL");
}
/**
* Checks if "DEFAULT" values in the column metadata and in the database schema are equal.
*/
compareDefaultValues(columnMetadataValue: any, databaseValue: any): boolean {
if (typeof columnMetadataValue === "number")
return columnMetadataValue === parseInt(databaseValue);
if (typeof columnMetadataValue === "boolean")
return columnMetadataValue === (!!databaseValue || databaseValue === "false");
if (typeof columnMetadataValue === "function")
return columnMetadataValue() === databaseValue;
return columnMetadataValue === databaseValue;
}
// -------------------------------------------------------------------------
// Protected Methods
// -------------------------------------------------------------------------

View File

@ -79,6 +79,11 @@ export interface QueryRunner {
*/
normalizeType(typeOptions: { type: ColumnType, length?: string|number, precision?: number, scale?: number, timezone?: boolean }): any;
/**
* Checks if "DEFAULT" values in the column metadata and in the database schema are equal.
*/
compareDefaultValues(columnMetadataValue: any, databaseValue: any): boolean;
/**
* Loads all tables (with given names) from the database and creates a TableSchema from them.
*/

View File

@ -204,7 +204,7 @@ export class TableSchema {
return columnSchema.name !== columnMetadata.name ||
columnSchema.type !== queryRunner.normalizeType(columnMetadata) ||
columnSchema.comment !== columnMetadata.comment ||
(!columnSchema.isGenerated && columnSchema.default !== columnMetadata.default) || // we included check for generated here, because generated columns already can have default values
(!columnSchema.isGenerated && !queryRunner.compareDefaultValues(columnMetadata.default, columnSchema.default)) || // we included check for generated here, because generated columns already can have default values
columnSchema.isNullable !== columnMetadata.isNullable ||
columnSchema.isUnique !== columnMetadata.isUnique ||
// columnSchema.isPrimary !== columnMetadata.isPrimary ||