Skip to content

Commit

Permalink
fix: HANA - SSL options, column delta detection mechanism (#5938)
Browse files Browse the repository at this point in the history
  • Loading branch information
elsbrock committed May 16, 2020
1 parent 4ef0bce commit 2fd0a8a
Show file tree
Hide file tree
Showing 3 changed files with 12 additions and 12 deletions.
2 changes: 1 addition & 1 deletion src/driver/sap/SapConnectionCredentialsOptions.ts
Expand Up @@ -36,7 +36,7 @@ export interface SapConnectionCredentialsOptions {
/**
* Validate database certificate
*/
readonly validateCertificate?: boolean;
readonly sslValidateCertificate?: boolean;

/**
* Key for encrypted connection
Expand Down
14 changes: 7 additions & 7 deletions src/driver/sap/SapDriver.ts
Expand Up @@ -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;
Expand Down Expand Up @@ -573,33 +573,33 @@ 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("==========================================");

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
|| (!tableColumn.isGenerated && (hanaNullComapatibleDefault !== tableColumn.default)) // we included check for generated here, because generated columns already can have default values
|| tableColumn.isPrimary !== columnMetadata.isPrimary
|| tableColumn.isNullable !== columnMetadata.isNullable
|| tableColumn.isUnique !== this.normalizeIsUnique(columnMetadata)
|| tableColumn.isGenerated !== columnMetadata.isGenerated;
|| (columnMetadata.generationStrategy !== "uuid" && tableColumn.isGenerated !== columnMetadata.isGenerated);
});
}

Expand Down
8 changes: 4 additions & 4 deletions src/driver/sap/SapQueryRunner.ts
Expand Up @@ -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(".");
Expand All @@ -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(".");
Expand All @@ -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(".");
Expand All @@ -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),
Expand Down

0 comments on commit 2fd0a8a

Please sign in to comment.