From 2fd0a8afabcbb8ba7a9b15be8843e964c70985e0 Mon Sep 17 00:00:00 2001 From: Simon Elsbrock Date: Sat, 16 May 2020 11:43:46 +0200 Subject: [PATCH] fix: HANA - SSL options, column delta detection mechanism (#5938) --- src/driver/sap/SapConnectionCredentialsOptions.ts | 2 +- src/driver/sap/SapDriver.ts | 14 +++++++------- src/driver/sap/SapQueryRunner.ts | 8 ++++---- 3 files changed, 12 insertions(+), 12 deletions(-) diff --git a/src/driver/sap/SapConnectionCredentialsOptions.ts b/src/driver/sap/SapConnectionCredentialsOptions.ts index d0a36c746d..a64ddcfee3 100644 --- a/src/driver/sap/SapConnectionCredentialsOptions.ts +++ b/src/driver/sap/SapConnectionCredentialsOptions.ts @@ -36,7 +36,7 @@ export interface SapConnectionCredentialsOptions { /** * Validate database certificate */ - readonly validateCertificate?: boolean; + readonly sslValidateCertificate?: boolean; /** * Key for encrypted connection diff --git a/src/driver/sap/SapDriver.ts b/src/driver/sap/SapDriver.ts index 105c59c0b9..4ae3b02e91 100644 --- a/src/driver/sap/SapDriver.ts +++ b/src/driver/sap/SapDriver.ts @@ -220,7 +220,7 @@ export class SapDriver implements Driver { if (this.options.database) dbParams.databaseName = this.options.database; if (this.options.encrypt) dbParams.encrypt = this.options.encrypt; - if (this.options.validateCertificate) dbParams.validateCertificate = this.options.validateCertificate; + if (this.options.sslValidateCertificate) dbParams.validateCertificate = this.options.sslValidateCertificate; if (this.options.key) dbParams.key = this.options.key; if (this.options.cert) dbParams.cert = this.options.cert; if (this.options.ca) dbParams.ca = this.options.ca; @@ -573,15 +573,15 @@ export class SapDriver implements Driver { // console.log("table:", columnMetadata.entityMetadata.tableName); // console.log("name:", tableColumn.name, columnMetadata.databaseName); - // console.log("type:", tableColumn.type, this.normalizeType(columnMetadata)); - // console.log("length:", tableColumn.length, columnMetadata.length); + // console.log("type:", tableColumn.type, _this.normalizeType(columnMetadata)); + // console.log("length:", tableColumn.length, _this.getColumnLength(columnMetadata)); // console.log("width:", tableColumn.width, columnMetadata.width); // console.log("precision:", tableColumn.precision, columnMetadata.precision); // console.log("scale:", tableColumn.scale, columnMetadata.scale); // console.log("default:", tableColumn.default, columnMetadata.default); // console.log("isPrimary:", tableColumn.isPrimary, columnMetadata.isPrimary); // console.log("isNullable:", tableColumn.isNullable, columnMetadata.isNullable); - // console.log("isUnique:", tableColumn.isUnique, this.normalizeIsUnique(columnMetadata)); + // console.log("isUnique:", tableColumn.isUnique, _this.normalizeIsUnique(columnMetadata)); // console.log("isGenerated:", tableColumn.isGenerated, columnMetadata.isGenerated); // console.log((columnMetadata.generationStrategy !== "uuid" && tableColumn.isGenerated !== columnMetadata.isGenerated)); // console.log("=========================================="); @@ -589,9 +589,9 @@ export class SapDriver implements Driver { const normalizeDefault = this.normalizeDefault(columnMetadata); const hanaNullComapatibleDefault = normalizeDefault == null ? undefined : normalizeDefault; - return tableColumn.name !== columnMetadata.databaseName + return tableColumn.name !== columnMetadata.databaseName || tableColumn.type !== this.normalizeType(columnMetadata) - || tableColumn.length !== columnMetadata.length + || columnMetadata.length && tableColumn.length !== this.getColumnLength(columnMetadata) || tableColumn.precision !== columnMetadata.precision || tableColumn.scale !== columnMetadata.scale // || tableColumn.comment !== columnMetadata.comment || // todo @@ -599,7 +599,7 @@ export class SapDriver implements Driver { || tableColumn.isPrimary !== columnMetadata.isPrimary || tableColumn.isNullable !== columnMetadata.isNullable || tableColumn.isUnique !== this.normalizeIsUnique(columnMetadata) - || tableColumn.isGenerated !== columnMetadata.isGenerated; + || (columnMetadata.generationStrategy !== "uuid" && tableColumn.isGenerated !== columnMetadata.isGenerated); }); } diff --git a/src/driver/sap/SapQueryRunner.ts b/src/driver/sap/SapQueryRunner.ts index c3d606b8c4..9e839a4490 100644 --- a/src/driver/sap/SapQueryRunner.ts +++ b/src/driver/sap/SapQueryRunner.ts @@ -1447,7 +1447,7 @@ export class SapQueryRunner extends BaseQueryRunner implements QueryRunner { return `("SCHEMA_NAME" = '${schema}' AND "TABLE_NAME" = '${name}')`; }).join(" OR "); const tablesSql = `SELECT * FROM "SYS"."TABLES" WHERE ` + tablesCondition; - const columnsSql = `SELECT * FROM "SYS"."TABLE_COLUMNS" WHERE ` + tablesCondition; + const columnsSql = `SELECT * FROM "SYS"."TABLE_COLUMNS" WHERE ` + tablesCondition + ` ORDER BY "POSITION"`; const constraintsCondition = tableNames.map(tableName => { let [schema, name] = tableName.split("."); @@ -1458,7 +1458,7 @@ export class SapQueryRunner extends BaseQueryRunner implements QueryRunner { return `("SCHEMA_NAME" = '${schema}' AND "TABLE_NAME" = '${name}')`; }).join(" OR "); - const constraintsSql = `SELECT * FROM "SYS"."CONSTRAINTS" WHERE (${constraintsCondition})`; + const constraintsSql = `SELECT * FROM "SYS"."CONSTRAINTS" WHERE (${constraintsCondition}) ORDER BY "POSITION"`; const indicesCondition = tableNames.map(tableName => { let [schema, name] = tableName.split("."); @@ -1471,7 +1471,7 @@ export class SapQueryRunner extends BaseQueryRunner implements QueryRunner { // excluding primary key and autogenerated fulltext indices const indicesSql = `SELECT "I"."INDEX_TYPE", "I"."SCHEMA_NAME", "I"."TABLE_NAME", "I"."INDEX_NAME", "IC"."COLUMN_NAME", "I"."CONSTRAINT" ` + `FROM "SYS"."INDEXES" "I" INNER JOIN "SYS"."INDEX_COLUMNS" "IC" ON "IC"."INDEX_OID" = "I"."INDEX_OID" ` + - `WHERE (${indicesCondition}) AND ("I"."CONSTRAINT" IS NULL OR "I"."CONSTRAINT" != 'PRIMARY KEY') AND "I"."INDEX_NAME" NOT LIKE '%_SYS_FULLTEXT_%'`; + `WHERE (${indicesCondition}) AND ("I"."CONSTRAINT" IS NULL OR "I"."CONSTRAINT" != 'PRIMARY KEY') AND "I"."INDEX_NAME" NOT LIKE '%_SYS_FULLTEXT_%' ORDER BY "IC"."POSITION"`; const foreignKeysCondition = tableNames.map(tableName => { let [schema, name] = tableName.split("."); @@ -1481,7 +1481,7 @@ export class SapQueryRunner extends BaseQueryRunner implements QueryRunner { } return `("SCHEMA_NAME" = '${schema}' AND "TABLE_NAME" = '${name}')`; }).join(" OR "); - const foreignKeysSql = `SELECT * FROM "SYS"."REFERENTIAL_CONSTRAINTS" WHERE (${foreignKeysCondition})`; + const foreignKeysSql = `SELECT * FROM "SYS"."REFERENTIAL_CONSTRAINTS" WHERE (${foreignKeysCondition}) ORDER BY "POSITION"`; const [dbTables, dbColumns, dbConstraints, dbIndices, dbForeignKeys]: ObjectLiteral[][] = await Promise.all([ this.query(tablesSql), this.query(columnsSql),