typeorm 0.2.43 → 0.2.44-dev.7facbab
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/browser/driver/Driver.d.ts +2 -1
- package/browser/driver/Driver.js.map +1 -1
- package/browser/driver/mysql/MysqlDriver.d.ts +6 -2
- package/browser/driver/mysql/MysqlDriver.js +42 -6
- package/browser/driver/mysql/MysqlDriver.js.map +1 -1
- package/browser/driver/sap/SapQueryRunner.js +12 -0
- package/browser/driver/sap/SapQueryRunner.js.map +1 -1
- package/browser/error/ReturningStatementNotSupportedError.js +1 -1
- package/browser/error/ReturningStatementNotSupportedError.js.map +1 -1
- package/browser/persistence/SubjectExecutor.js +2 -1
- package/browser/persistence/SubjectExecutor.js.map +1 -1
- package/browser/query-builder/DeleteQueryBuilder.js +7 -10
- package/browser/query-builder/DeleteQueryBuilder.js.map +1 -1
- package/browser/query-builder/InsertQueryBuilder.js +10 -3
- package/browser/query-builder/InsertQueryBuilder.js.map +1 -1
- package/browser/query-builder/QueryBuilder.d.ts +2 -1
- package/browser/query-builder/QueryBuilder.js +2 -2
- package/browser/query-builder/QueryBuilder.js.map +1 -1
- package/browser/query-builder/RelationLoader.js +1 -1
- package/browser/query-builder/RelationLoader.js.map +1 -1
- package/browser/query-builder/ReturningResultsEntityUpdator.js +4 -3
- package/browser/query-builder/ReturningResultsEntityUpdator.js.map +1 -1
- package/browser/query-builder/SoftDeleteQueryBuilder.js +7 -12
- package/browser/query-builder/SoftDeleteQueryBuilder.js.map +1 -1
- package/browser/query-builder/UpdateQueryBuilder.js +7 -11
- package/browser/query-builder/UpdateQueryBuilder.js.map +1 -1
- package/browser/util/ImportUtils.js +2 -1
- package/browser/util/ImportUtils.js.map +1 -1
- package/cli.js +0 -0
- package/driver/Driver.d.ts +2 -1
- package/driver/Driver.js.map +1 -1
- package/driver/mysql/MysqlDriver.d.ts +6 -2
- package/driver/mysql/MysqlDriver.js +42 -6
- package/driver/mysql/MysqlDriver.js.map +1 -1
- package/driver/sap/SapQueryRunner.js +12 -0
- package/driver/sap/SapQueryRunner.js.map +1 -1
- package/error/ReturningStatementNotSupportedError.js +1 -1
- package/error/ReturningStatementNotSupportedError.js.map +1 -1
- package/package.json +1 -252
- package/persistence/SubjectExecutor.js +2 -1
- package/persistence/SubjectExecutor.js.map +1 -1
- package/query-builder/DeleteQueryBuilder.js +7 -10
- package/query-builder/DeleteQueryBuilder.js.map +1 -1
- package/query-builder/InsertQueryBuilder.js +10 -3
- package/query-builder/InsertQueryBuilder.js.map +1 -1
- package/query-builder/QueryBuilder.d.ts +2 -1
- package/query-builder/QueryBuilder.js +2 -2
- package/query-builder/QueryBuilder.js.map +1 -1
- package/query-builder/RelationLoader.js +5 -5
- package/query-builder/RelationLoader.js.map +1 -1
- package/query-builder/ReturningResultsEntityUpdator.js +4 -3
- package/query-builder/ReturningResultsEntityUpdator.js.map +1 -1
- package/query-builder/SoftDeleteQueryBuilder.js +7 -12
- package/query-builder/SoftDeleteQueryBuilder.js.map +1 -1
- package/query-builder/UpdateQueryBuilder.js +7 -11
- package/query-builder/UpdateQueryBuilder.js.map +1 -1
- package/util/ImportUtils.js +2 -1
- package/util/ImportUtils.js.map +1 -1
|
@@ -13,6 +13,7 @@ import { Table } from "../schema-builder/table/Table";
|
|
|
13
13
|
import { View } from "../schema-builder/view/View";
|
|
14
14
|
import { TableForeignKey } from "../schema-builder/table/TableForeignKey";
|
|
15
15
|
import { UpsertType } from "./types/UpsertType";
|
|
16
|
+
export declare type ReturningType = "insert" | "update" | "delete";
|
|
16
17
|
/**
|
|
17
18
|
* Driver organizes TypeORM communication with specific database management system.
|
|
18
19
|
*/
|
|
@@ -180,7 +181,7 @@ export interface Driver {
|
|
|
180
181
|
/**
|
|
181
182
|
* Returns true if driver supports RETURNING / OUTPUT statement.
|
|
182
183
|
*/
|
|
183
|
-
isReturningSqlSupported(): boolean;
|
|
184
|
+
isReturningSqlSupported(returningType: ReturningType): boolean;
|
|
184
185
|
/**
|
|
185
186
|
* Returns true if driver supports uuid values generation on its own.
|
|
186
187
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../browser/src/driver/Driver.ts"],"names":[],"mappings":"","file":"Driver.js","sourcesContent":["import {QueryRunner} from \"../query-runner/QueryRunner\";\nimport {ColumnMetadata} from \"../metadata/ColumnMetadata\";\nimport {ObjectLiteral} from \"../common/ObjectLiteral\";\nimport {ColumnType} from \"./types/ColumnTypes\";\nimport {MappedColumnTypes} from \"./types/MappedColumnTypes\";\nimport {SchemaBuilder} from \"../schema-builder/SchemaBuilder\";\nimport {DataTypeDefaults} from \"./types/DataTypeDefaults\";\nimport {BaseConnectionOptions} from \"../connection/BaseConnectionOptions\";\nimport {TableColumn} from \"../schema-builder/table/TableColumn\";\nimport {EntityMetadata} from \"../metadata/EntityMetadata\";\nimport {ReplicationMode} from \"./types/ReplicationMode\";\nimport {
|
|
1
|
+
{"version":3,"sources":["../browser/src/driver/Driver.ts"],"names":[],"mappings":"","file":"Driver.js","sourcesContent":["import {QueryRunner} from \"../query-runner/QueryRunner\";\nimport {ColumnMetadata} from \"../metadata/ColumnMetadata\";\nimport {ObjectLiteral} from \"../common/ObjectLiteral\";\nimport {ColumnType} from \"./types/ColumnTypes\";\nimport {MappedColumnTypes} from \"./types/MappedColumnTypes\";\nimport {SchemaBuilder} from \"../schema-builder/SchemaBuilder\";\nimport {DataTypeDefaults} from \"./types/DataTypeDefaults\";\nimport {BaseConnectionOptions} from \"../connection/BaseConnectionOptions\";\nimport {TableColumn} from \"../schema-builder/table/TableColumn\";\nimport {EntityMetadata} from \"../metadata/EntityMetadata\";\nimport {ReplicationMode} from \"./types/ReplicationMode\";\nimport {Table} from \"../schema-builder/table/Table\";\nimport {View} from \"../schema-builder/view/View\";\nimport {TableForeignKey} from \"../schema-builder/table/TableForeignKey\";\nimport {UpsertType} from \"./types/UpsertType\";\n\nexport type ReturningType = \"insert\" | \"update\" | \"delete\";\n\n/**\n * Driver organizes TypeORM communication with specific database management system.\n */\nexport interface Driver {\n\n /**\n * Connection options.\n */\n options: BaseConnectionOptions;\n\n /**\n * Database name used to perform all write queries.\n *\n * todo: probably move into query runner.\n */\n database?: string;\n\n /**\n * Schema name used to perform all write queries.\n */\n schema?: string;\n\n /**\n * Indicates if replication is enabled.\n */\n isReplicated: boolean;\n\n /**\n * Indicates if tree tables are supported by this driver.\n */\n treeSupport: boolean;\n\n /**\n * Gets list of supported column data types by a driver.\n */\n supportedDataTypes: ColumnType[];\n\n /**\n * Returns type of upsert supported by driver if any\n */\n supportedUpsertType?: UpsertType;\n\n /**\n * Default values of length, precision and scale depends on column data type.\n * Used in the cases when length/precision/scale is not specified by user.\n */\n dataTypeDefaults: DataTypeDefaults;\n\n /**\n * Gets list of spatial column data types.\n */\n spatialTypes: ColumnType[];\n\n /**\n * Gets list of column data types that support length by a driver.\n */\n withLengthColumnTypes: ColumnType[];\n\n /**\n * Gets list of column data types that support precision by a driver.\n */\n withPrecisionColumnTypes: ColumnType[];\n\n /**\n * Gets list of column data types that support scale by a driver.\n */\n withScaleColumnTypes: ColumnType[];\n\n /**\n * Orm has special columns and we need to know what database column types should be for those types.\n * Column types are driver dependant.\n */\n mappedDataTypes: MappedColumnTypes;\n\n /**\n * Max length allowed by the DBMS for aliases (execution of queries).\n */\n maxAliasLength?: number;\n\n /**\n * Performs connection to the database.\n * Depend on driver type it may create a connection pool.\n */\n connect(): Promise<void>;\n\n /**\n * Makes any action after connection (e.g. create extensions in Postgres driver).\n */\n afterConnect(): Promise<void>;\n\n /**\n * Closes connection with database and releases all resources.\n */\n disconnect(): Promise<void>;\n\n /**\n * Synchronizes database schema (creates tables, indices, etc).\n */\n createSchemaBuilder(): SchemaBuilder;\n\n /**\n * Creates a query runner used for common queries.\n */\n createQueryRunner(mode: ReplicationMode): QueryRunner;\n\n /**\n * Replaces parameters in the given sql with special escaping character\n * and an array of parameter names to be passed to a query.\n */\n escapeQueryWithParameters(sql: string, parameters: ObjectLiteral, nativeParameters: ObjectLiteral): [string, any[]];\n\n /**\n * Escapes a table name, column name or an alias.\n *\n * todo: probably escape should be able to handle dots in the names and automatically escape them\n */\n escape(name: string): string;\n\n /**\n * Build full table name with database name, schema name and table name.\n * E.g. myDB.mySchema.myTable\n */\n buildTableName(tableName: string, schema?: string, database?: string): string;\n\n /**\n * Parse a target table name or other types and return a normalized table definition.\n */\n parseTableName(target: EntityMetadata | Table | View | TableForeignKey | string): { tableName: string, schema?: string, database?: string };\n\n /**\n * Prepares given value to a value to be persisted, based on its column type and metadata.\n */\n preparePersistentValue(value: any, column: ColumnMetadata): any;\n\n /**\n * Prepares given value to a value to be persisted, based on its column type.\n */\n prepareHydratedValue(value: any, column: ColumnMetadata): any;\n\n /**\n * Transforms type of the given column to a database column type.\n */\n normalizeType(column: { type?: ColumnType|string, length?: number|string, precision?: number|null, scale?: number, isArray?: boolean }): string;\n\n /**\n * Normalizes \"default\" value of the column.\n */\n normalizeDefault(columnMetadata: ColumnMetadata): string | undefined;\n\n /**\n * Normalizes \"isUnique\" value of the column.\n */\n normalizeIsUnique(column: ColumnMetadata): boolean;\n\n /**\n * Calculates column length taking into account the default length values.\n */\n getColumnLength(column: ColumnMetadata): string;\n\n /**\n * Normalizes \"default\" value of the column.\n */\n createFullType(column: TableColumn): string;\n\n /**\n * Obtains a new database connection to a master server.\n * Used for replication.\n * If replication is not setup then returns default connection's database connection.\n */\n obtainMasterConnection(): Promise<any>;\n\n /**\n * Obtains a new database connection to a slave server.\n * Used for replication.\n * If replication is not setup then returns master (default) connection's database connection.\n */\n obtainSlaveConnection(): Promise<any>;\n\n /**\n * Creates generated map of values generated or returned by database after INSERT query.\n */\n createGeneratedMap(metadata: EntityMetadata, insertResult: any, entityIndex?: number, entityNum?: number): ObjectLiteral|undefined;\n\n /**\n * Differentiate columns of this table and columns from the given column metadatas columns\n * and returns only changed.\n */\n findChangedColumns(tableColumns: TableColumn[], columnMetadatas: ColumnMetadata[]): ColumnMetadata[];\n\n /**\n * Returns true if driver supports RETURNING / OUTPUT statement.\n */\n isReturningSqlSupported(returningType: ReturningType): boolean;\n\n /**\n * Returns true if driver supports uuid values generation on its own.\n */\n isUUIDGenerationSupported(): boolean;\n\n /**\n * Returns true if driver supports fulltext indices.\n */\n isFullTextColumnTypeSupported(): boolean;\n\n /**\n * Creates an escaped parameter.\n */\n createParameter(parameterName: string, index: number): string;\n\n}\n"],"sourceRoot":".."}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Driver } from "../Driver";
|
|
1
|
+
import { Driver, ReturningType } from "../Driver";
|
|
2
2
|
import { MysqlQueryRunner } from "./MysqlQueryRunner";
|
|
3
3
|
import { ObjectLiteral } from "../../common/ObjectLiteral";
|
|
4
4
|
import { ColumnMetadata } from "../../metadata/ColumnMetadata";
|
|
@@ -102,6 +102,10 @@ export declare class MysqlDriver implements Driver {
|
|
|
102
102
|
* @see https://dev.mysql.com/doc/refman/5.5/en/identifiers.html
|
|
103
103
|
*/
|
|
104
104
|
maxAliasLength: number;
|
|
105
|
+
/**
|
|
106
|
+
* Supported returning types
|
|
107
|
+
*/
|
|
108
|
+
private readonly _isReturningSqlSupported;
|
|
105
109
|
constructor(connection: Connection);
|
|
106
110
|
/**
|
|
107
111
|
* Performs connection to the database.
|
|
@@ -202,7 +206,7 @@ export declare class MysqlDriver implements Driver {
|
|
|
202
206
|
/**
|
|
203
207
|
* Returns true if driver supports RETURNING / OUTPUT statement.
|
|
204
208
|
*/
|
|
205
|
-
isReturningSqlSupported(): boolean;
|
|
209
|
+
isReturningSqlSupported(returningType: ReturningType): boolean;
|
|
206
210
|
/**
|
|
207
211
|
* Returns true if driver supports uuid values generation on its own.
|
|
208
212
|
*/
|
|
@@ -13,6 +13,7 @@ import { TypeORMError } from "../../error";
|
|
|
13
13
|
import { Table } from "../../schema-builder/table/Table";
|
|
14
14
|
import { View } from "../../schema-builder/view/View";
|
|
15
15
|
import { TableForeignKey } from "../../schema-builder/table/TableForeignKey";
|
|
16
|
+
import { VersionUtils } from "../../util/VersionUtils";
|
|
16
17
|
/**
|
|
17
18
|
* Organizes communication with MySQL DBMS.
|
|
18
19
|
*/
|
|
@@ -243,6 +244,14 @@ var MysqlDriver = /** @class */ (function () {
|
|
|
243
244
|
* @see https://dev.mysql.com/doc/refman/5.5/en/identifiers.html
|
|
244
245
|
*/
|
|
245
246
|
this.maxAliasLength = 63;
|
|
247
|
+
/**
|
|
248
|
+
* Supported returning types
|
|
249
|
+
*/
|
|
250
|
+
this._isReturningSqlSupported = {
|
|
251
|
+
delete: false,
|
|
252
|
+
insert: false,
|
|
253
|
+
update: false,
|
|
254
|
+
};
|
|
246
255
|
this.connection = connection;
|
|
247
256
|
this.options = __assign({ legacySpatialSupport: true }, connection.options);
|
|
248
257
|
this.isReplicated = this.options.replication ? true : false;
|
|
@@ -268,7 +277,7 @@ var MysqlDriver = /** @class */ (function () {
|
|
|
268
277
|
*/
|
|
269
278
|
MysqlDriver.prototype.connect = function () {
|
|
270
279
|
return __awaiter(this, void 0, void 0, function () {
|
|
271
|
-
var _a, queryRunner, _b;
|
|
280
|
+
var _a, queryRunner, _b, result, dbVersion;
|
|
272
281
|
var _this = this;
|
|
273
282
|
return __generator(this, function (_c) {
|
|
274
283
|
switch (_c.label) {
|
|
@@ -299,7 +308,21 @@ var MysqlDriver = /** @class */ (function () {
|
|
|
299
308
|
case 6:
|
|
300
309
|
_c.sent();
|
|
301
310
|
_c.label = 7;
|
|
302
|
-
case 7:
|
|
311
|
+
case 7:
|
|
312
|
+
if (!(this.options.type === "mariadb")) return [3 /*break*/, 9];
|
|
313
|
+
return [4 /*yield*/, this.createQueryRunner("master")
|
|
314
|
+
.query("SELECT VERSION() AS `version`")];
|
|
315
|
+
case 8:
|
|
316
|
+
result = _c.sent();
|
|
317
|
+
dbVersion = result[0].version;
|
|
318
|
+
if (VersionUtils.isGreaterOrEqual(dbVersion, "10.0.5")) {
|
|
319
|
+
this._isReturningSqlSupported.delete = true;
|
|
320
|
+
}
|
|
321
|
+
if (VersionUtils.isGreaterOrEqual(dbVersion, "10.5.0")) {
|
|
322
|
+
this._isReturningSqlSupported.insert = true;
|
|
323
|
+
}
|
|
324
|
+
_c.label = 9;
|
|
325
|
+
case 9: return [2 /*return*/];
|
|
303
326
|
}
|
|
304
327
|
});
|
|
305
328
|
});
|
|
@@ -692,6 +715,19 @@ var MysqlDriver = /** @class */ (function () {
|
|
|
692
715
|
* Creates generated map of values generated or returned by database after INSERT query.
|
|
693
716
|
*/
|
|
694
717
|
MysqlDriver.prototype.createGeneratedMap = function (metadata, insertResult, entityIndex) {
|
|
718
|
+
if (!insertResult) {
|
|
719
|
+
return undefined;
|
|
720
|
+
}
|
|
721
|
+
if (insertResult.insertId === undefined) {
|
|
722
|
+
return Object.keys(insertResult).reduce(function (map, key) {
|
|
723
|
+
var column = metadata.findColumnWithDatabaseName(key);
|
|
724
|
+
if (column) {
|
|
725
|
+
OrmUtils.mergeDeep(map, column.createValueMap(insertResult[key]));
|
|
726
|
+
// OrmUtils.mergeDeep(map, column.createValueMap(this.prepareHydratedValue(insertResult[key], column))); // TODO: probably should be like there, but fails on enums, fix later
|
|
727
|
+
}
|
|
728
|
+
return map;
|
|
729
|
+
}, {});
|
|
730
|
+
}
|
|
695
731
|
var generatedMap = metadata.generatedColumns.reduce(function (map, generatedColumn) {
|
|
696
732
|
var value;
|
|
697
733
|
if (generatedColumn.generationStrategy === "increment" && insertResult.insertId) {
|
|
@@ -765,8 +801,8 @@ var MysqlDriver = /** @class */ (function () {
|
|
|
765
801
|
/**
|
|
766
802
|
* Returns true if driver supports RETURNING / OUTPUT statement.
|
|
767
803
|
*/
|
|
768
|
-
MysqlDriver.prototype.isReturningSqlSupported = function () {
|
|
769
|
-
return
|
|
804
|
+
MysqlDriver.prototype.isReturningSqlSupported = function (returningType) {
|
|
805
|
+
return this._isReturningSqlSupported[returningType];
|
|
770
806
|
};
|
|
771
807
|
/**
|
|
772
808
|
* Returns true if driver supports uuid values generation on its own.
|
|
@@ -871,8 +907,8 @@ var MysqlDriver = /** @class */ (function () {
|
|
|
871
907
|
MysqlDriver.prototype.prepareDbConnection = function (connection) {
|
|
872
908
|
var logger = this.connection.logger;
|
|
873
909
|
/*
|
|
874
|
-
|
|
875
|
-
|
|
910
|
+
* Attaching an error handler to connection errors is essential, as, otherwise, errors raised will go unhandled and
|
|
911
|
+
* cause the hosting app to crash.
|
|
876
912
|
*/
|
|
877
913
|
if (connection.listeners("error").length === 0) {
|
|
878
914
|
connection.on("error", function (error) { return logger.log("warn", "MySQL connection raised an error. " + error); });
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../browser/src/driver/mysql/MysqlDriver.ts"],"names":[],"mappings":"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","file":"MysqlDriver.js","sourcesContent":["import {Driver} from \"../Driver\";\nimport {ConnectionIsNotSetError} from \"../../error/ConnectionIsNotSetError\";\nimport {DriverPackageNotInstalledError} from \"../../error/DriverPackageNotInstalledError\";\nimport {DriverUtils} from \"../DriverUtils\";\nimport {MysqlQueryRunner} from \"./MysqlQueryRunner\";\nimport {ObjectLiteral} from \"../../common/ObjectLiteral\";\nimport {ColumnMetadata} from \"../../metadata/ColumnMetadata\";\nimport {DateUtils} from \"../../util/DateUtils\";\nimport {PlatformTools} from \"../../platform/PlatformTools\";\nimport {Connection} from \"../../connection/Connection\";\nimport {RdbmsSchemaBuilder} from \"../../schema-builder/RdbmsSchemaBuilder\";\nimport {MysqlConnectionOptions} from \"./MysqlConnectionOptions\";\nimport {MappedColumnTypes} from \"../types/MappedColumnTypes\";\nimport {ColumnType} from \"../types/ColumnTypes\";\nimport {DataTypeDefaults} from \"../types/DataTypeDefaults\";\nimport {TableColumn} from \"../../schema-builder/table/TableColumn\";\nimport {MysqlConnectionCredentialsOptions} from \"./MysqlConnectionCredentialsOptions\";\nimport {EntityMetadata} from \"../../metadata/EntityMetadata\";\nimport {OrmUtils} from \"../../util/OrmUtils\";\nimport {ApplyValueTransformers} from \"../../util/ApplyValueTransformers\";\nimport {ReplicationMode} from \"../types/ReplicationMode\";\nimport { TypeORMError } from \"../../error\";\nimport { Table } from \"../../schema-builder/table/Table\";\nimport { View } from \"../../schema-builder/view/View\";\nimport { TableForeignKey } from \"../../schema-builder/table/TableForeignKey\";\n\n/**\n * Organizes communication with MySQL DBMS.\n */\nexport class MysqlDriver implements Driver {\n\n // -------------------------------------------------------------------------\n // Public Properties\n // -------------------------------------------------------------------------\n\n /**\n * Connection used by driver.\n */\n connection: Connection;\n\n /**\n * Mysql underlying library.\n */\n mysql: any;\n\n /**\n * Connection pool.\n * Used in non-replication mode.\n */\n pool: any;\n\n /**\n * Pool cluster used in replication mode.\n */\n poolCluster: any;\n\n // -------------------------------------------------------------------------\n // Public Implemented Properties\n // -------------------------------------------------------------------------\n\n /**\n * Connection options.\n */\n options: MysqlConnectionOptions;\n\n /**\n * Master database used to perform all write queries.\n */\n database?: string;\n\n /**\n * Indicates if replication is enabled.\n */\n isReplicated: boolean = false;\n\n /**\n * Indicates if tree tables are supported by this driver.\n */\n treeSupport = true;\n\n /**\n * Gets list of supported column data types by a driver.\n *\n * @see https://www.tutorialspoint.com/mysql/mysql-data-types.htm\n * @see https://dev.mysql.com/doc/refman/8.0/en/data-types.html\n */\n supportedDataTypes: ColumnType[] = [\n // numeric types\n \"bit\",\n \"int\",\n \"integer\", // synonym for int\n \"tinyint\",\n \"smallint\",\n \"mediumint\",\n \"bigint\",\n \"float\",\n \"double\",\n \"double precision\", // synonym for double\n \"real\", // synonym for double\n \"decimal\",\n \"dec\", // synonym for decimal\n \"numeric\", // synonym for decimal\n \"fixed\", // synonym for decimal\n \"bool\", // synonym for tinyint\n \"boolean\", // synonym for tinyint\n // date and time types\n \"date\",\n \"datetime\",\n \"timestamp\",\n \"time\",\n \"year\",\n // string types\n \"char\",\n \"nchar\", // synonym for national char\n \"national char\",\n \"varchar\",\n \"nvarchar\", // synonym for national varchar\n \"national varchar\",\n \"blob\",\n \"text\",\n \"tinyblob\",\n \"tinytext\",\n \"mediumblob\",\n \"mediumtext\",\n \"longblob\",\n \"longtext\",\n \"enum\",\n \"set\",\n \"binary\",\n \"varbinary\",\n // json data type\n \"json\",\n // spatial data types\n \"geometry\",\n \"point\",\n \"linestring\",\n \"polygon\",\n \"multipoint\",\n \"multilinestring\",\n \"multipolygon\",\n \"geometrycollection\"\n ];\n\n /**\n * Returns type of upsert supported by driver if any\n */\n readonly supportedUpsertType = \"on-duplicate-key-update\";\n\n /**\n * Gets list of spatial column data types.\n */\n spatialTypes: ColumnType[] = [\n \"geometry\",\n \"point\",\n \"linestring\",\n \"polygon\",\n \"multipoint\",\n \"multilinestring\",\n \"multipolygon\",\n \"geometrycollection\"\n ];\n\n /**\n * Gets list of column data types that support length by a driver.\n */\n withLengthColumnTypes: ColumnType[] = [\n \"char\",\n \"varchar\",\n \"nvarchar\",\n \"binary\",\n \"varbinary\"\n ];\n\n /**\n * Gets list of column data types that support length by a driver.\n */\n withWidthColumnTypes: ColumnType[] = [\n \"bit\",\n \"tinyint\",\n \"smallint\",\n \"mediumint\",\n \"int\",\n \"integer\",\n \"bigint\"\n ];\n\n /**\n * Gets list of column data types that support precision by a driver.\n */\n withPrecisionColumnTypes: ColumnType[] = [\n \"decimal\",\n \"dec\",\n \"numeric\",\n \"fixed\",\n \"float\",\n \"double\",\n \"double precision\",\n \"real\",\n \"time\",\n \"datetime\",\n \"timestamp\"\n ];\n\n /**\n * Gets list of column data types that supports scale by a driver.\n */\n withScaleColumnTypes: ColumnType[] = [\n \"decimal\",\n \"dec\",\n \"numeric\",\n \"fixed\",\n \"float\",\n \"double\",\n \"double precision\",\n \"real\"\n ];\n\n /**\n * Gets list of column data types that supports UNSIGNED and ZEROFILL attributes.\n */\n unsignedAndZerofillTypes: ColumnType[] = [\n \"int\",\n \"integer\",\n \"smallint\",\n \"tinyint\",\n \"mediumint\",\n \"bigint\",\n \"decimal\",\n \"dec\",\n \"numeric\",\n \"fixed\",\n \"float\",\n \"double\",\n \"double precision\",\n \"real\"\n ];\n\n /**\n * ORM has special columns and we need to know what database column types should be for those columns.\n * Column types are driver dependant.\n */\n mappedDataTypes: MappedColumnTypes = {\n createDate: \"datetime\",\n createDatePrecision: 6,\n createDateDefault: \"CURRENT_TIMESTAMP(6)\",\n updateDate: \"datetime\",\n updateDatePrecision: 6,\n updateDateDefault: \"CURRENT_TIMESTAMP(6)\",\n deleteDate: \"datetime\",\n deleteDatePrecision: 6,\n deleteDateNullable: true,\n version: \"int\",\n treeLevel: \"int\",\n migrationId: \"int\",\n migrationName: \"varchar\",\n migrationTimestamp: \"bigint\",\n cacheId: \"int\",\n cacheIdentifier: \"varchar\",\n cacheTime: \"bigint\",\n cacheDuration: \"int\",\n cacheQuery: \"text\",\n cacheResult: \"text\",\n metadataType: \"varchar\",\n metadataDatabase: \"varchar\",\n metadataSchema: \"varchar\",\n metadataTable: \"varchar\",\n metadataName: \"varchar\",\n metadataValue: \"text\",\n };\n\n /**\n * Default values of length, precision and scale depends on column data type.\n * Used in the cases when length/precision/scale is not specified by user.\n */\n dataTypeDefaults: DataTypeDefaults = {\n \"varchar\": { length: 255 },\n \"nvarchar\": { length: 255 },\n \"national varchar\": { length: 255 },\n \"char\": { length: 1 },\n \"binary\": { length: 1 },\n \"varbinary\": { length: 255 },\n \"decimal\": { precision: 10, scale: 0 },\n \"dec\": { precision: 10, scale: 0 },\n \"numeric\": { precision: 10, scale: 0 },\n \"fixed\": { precision: 10, scale: 0 },\n \"float\": { precision: 12 },\n \"double\": { precision: 22 },\n \"time\": { precision: 0 },\n \"datetime\": { precision: 0 },\n \"timestamp\": { precision: 0 },\n \"bit\": { width: 1 },\n \"int\": { width: 11 },\n \"integer\": { width: 11 },\n \"tinyint\": { width: 4 },\n \"smallint\": { width: 6 },\n \"mediumint\": { width: 9 },\n \"bigint\": { width: 20 }\n };\n\n\n /**\n * Max length allowed by MySQL for aliases.\n * @see https://dev.mysql.com/doc/refman/5.5/en/identifiers.html\n */\n maxAliasLength = 63;\n\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n\n constructor(connection: Connection) {\n this.connection = connection;\n this.options = {\n legacySpatialSupport: true,\n ...connection.options\n } as MysqlConnectionOptions;\n this.isReplicated = this.options.replication ? true : false;\n\n // load mysql package\n this.loadDependencies();\n\n this.database = DriverUtils.buildDriverOptions(this.options.replication ? this.options.replication.master : this.options).database;\n\n // validate options to make sure everything is set\n // todo: revisit validation with replication in mind\n // if (!(this.options.host || (this.options.extra && this.options.extra.socketPath)) && !this.options.socketPath)\n // throw new DriverOptionNotSetError(\"socketPath and host\");\n // if (!this.options.username)\n // throw new DriverOptionNotSetError(\"username\");\n // if (!this.options.database)\n // throw new DriverOptionNotSetError(\"database\");\n // todo: check what is going on when connection is setup without database and how to connect to a database then?\n // todo: provide options to auto-create a database if it does not exist yet\n }\n\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n\n /**\n * Performs connection to the database.\n */\n async connect(): Promise<void> {\n\n if (this.options.replication) {\n this.poolCluster = this.mysql.createPoolCluster(this.options.replication);\n this.options.replication.slaves.forEach((slave, index) => {\n this.poolCluster.add(\"SLAVE\" + index, this.createConnectionOptions(this.options, slave));\n });\n this.poolCluster.add(\"MASTER\", this.createConnectionOptions(this.options, this.options.replication.master));\n\n } else {\n this.pool = await this.createPool(this.createConnectionOptions(this.options, this.options));\n }\n\n if (!this.database) {\n const queryRunner = await this.createQueryRunner(\"master\");\n\n this.database = await queryRunner.getCurrentDatabase();\n\n await queryRunner.release();\n }\n }\n\n /**\n * Makes any action after connection (e.g. create extensions in Postgres driver).\n */\n afterConnect(): Promise<void> {\n return Promise.resolve();\n }\n\n /**\n * Closes connection with the database.\n */\n async disconnect(): Promise<void> {\n if (!this.poolCluster && !this.pool)\n return Promise.reject(new ConnectionIsNotSetError(\"mysql\"));\n\n if (this.poolCluster) {\n return new Promise<void>((ok, fail) => {\n this.poolCluster.end((err: any) => err ? fail(err) : ok());\n this.poolCluster = undefined;\n });\n }\n if (this.pool) {\n return new Promise<void>((ok, fail) => {\n this.pool.end((err: any) => {\n if (err) return fail(err);\n this.pool = undefined;\n ok();\n });\n });\n }\n }\n\n /**\n * Creates a schema builder used to build and sync a schema.\n */\n createSchemaBuilder() {\n return new RdbmsSchemaBuilder(this.connection);\n }\n\n /**\n * Creates a query runner used to execute database queries.\n */\n createQueryRunner(mode: ReplicationMode) {\n return new MysqlQueryRunner(this, mode);\n }\n\n /**\n * Replaces parameters in the given sql with special escaping character\n * and an array of parameter names to be passed to a query.\n */\n escapeQueryWithParameters(sql: string, parameters: ObjectLiteral, nativeParameters: ObjectLiteral): [string, any[]] {\n const escapedParameters: any[] = Object.keys(nativeParameters).map(key => nativeParameters[key]);\n if (!parameters || !Object.keys(parameters).length)\n return [sql, escapedParameters];\n\n sql = sql.replace(/:(\\.\\.\\.)?([A-Za-z0-9_.]+)/g, (full, isArray: string, key: string): string => {\n if (!parameters.hasOwnProperty(key)) {\n return full;\n }\n\n let value: any = parameters[key];\n\n if (isArray) {\n return value.map((v: any) => {\n escapedParameters.push(v);\n return this.createParameter(key, escapedParameters.length - 1);\n }).join(\", \");\n\n }\n\n if (value instanceof Function) {\n return value();\n\n }\n\n escapedParameters.push(value);\n return this.createParameter(key, escapedParameters.length - 1);\n }); // todo: make replace only in value statements, otherwise problems\n return [sql, escapedParameters];\n }\n\n /**\n * Escapes a column name.\n */\n escape(columnName: string): string {\n return \"`\" + columnName + \"`\";\n }\n\n /**\n * Build full table name with database name, schema name and table name.\n * E.g. myDB.mySchema.myTable\n */\n buildTableName(tableName: string, schema?: string, database?: string): string {\n let tablePath = [ tableName ];\n\n if (database) {\n tablePath.unshift(database);\n }\n\n return tablePath.join(\".\");\n }\n\n /**\n * Parse a target table name or other types and return a normalized table definition.\n */\n parseTableName(target: EntityMetadata | Table | View | TableForeignKey | string): { database?: string, schema?: string, tableName: string } {\n const driverDatabase = this.database;\n const driverSchema = undefined;\n\n if (target instanceof Table || target instanceof View) {\n const parsed = this.parseTableName(target.name);\n\n return {\n database: target.database || parsed.database || driverDatabase,\n schema: target.schema || parsed.schema || driverSchema,\n tableName: parsed.tableName\n };\n }\n\n if (target instanceof TableForeignKey) {\n const parsed = this.parseTableName(target.referencedTableName);\n\n return {\n database: target.referencedDatabase || parsed.database || driverDatabase,\n schema: target.referencedSchema || parsed.schema || driverSchema,\n tableName: parsed.tableName\n };\n }\n\n if (target instanceof EntityMetadata) {\n // EntityMetadata tableName is never a path\n\n return {\n database: target.database || driverDatabase,\n schema: target.schema || driverSchema,\n tableName: target.tableName\n };\n\n }\n\n const parts = target.split(\".\");\n\n return {\n database: (parts.length > 1 ? parts[0] : undefined) || driverDatabase,\n schema: driverSchema,\n tableName: parts.length > 1 ? parts[1] : parts[0]\n };\n }\n\n /**\n * Prepares given value to a value to be persisted, based on its column type and metadata.\n */\n preparePersistentValue(value: any, columnMetadata: ColumnMetadata): any {\n if (columnMetadata.transformer)\n value = ApplyValueTransformers.transformTo(columnMetadata.transformer, value);\n\n if (value === null || value === undefined)\n return value;\n\n if (columnMetadata.type === Boolean) {\n return value === true ? 1 : 0;\n\n } else if (columnMetadata.type === \"date\") {\n return DateUtils.mixedDateToDateString(value);\n\n } else if (columnMetadata.type === \"time\") {\n return DateUtils.mixedDateToTimeString(value);\n\n } else if (columnMetadata.type === \"json\") {\n return JSON.stringify(value);\n\n } else if (columnMetadata.type === \"timestamp\" || columnMetadata.type === \"datetime\" || columnMetadata.type === Date) {\n return DateUtils.mixedDateToDate(value);\n\n } else if (columnMetadata.type === \"simple-array\") {\n return DateUtils.simpleArrayToString(value);\n\n } else if (columnMetadata.type === \"simple-json\") {\n return DateUtils.simpleJsonToString(value);\n\n } else if (columnMetadata.type === \"enum\" || columnMetadata.type === \"simple-enum\") {\n return \"\" + value;\n\n } else if (columnMetadata.type === \"set\") {\n return DateUtils.simpleArrayToString(value);\n }\n\n return value;\n }\n\n /**\n * Prepares given value to a value to be persisted, based on its column type or metadata.\n */\n prepareHydratedValue(value: any, columnMetadata: ColumnMetadata): any {\n if (value === null || value === undefined)\n return columnMetadata.transformer ? ApplyValueTransformers.transformFrom(columnMetadata.transformer, value) : value;\n\n if (columnMetadata.type === Boolean || columnMetadata.type === \"bool\" || columnMetadata.type === \"boolean\") {\n value = value ? true : false;\n\n } else if (columnMetadata.type === \"datetime\" || columnMetadata.type === Date) {\n value = DateUtils.normalizeHydratedDate(value);\n\n } else if (columnMetadata.type === \"date\") {\n value = DateUtils.mixedDateToDateString(value);\n\n } else if (columnMetadata.type === \"json\") {\n value = typeof value === \"string\" ? JSON.parse(value) : value;\n\n } else if (columnMetadata.type === \"time\") {\n value = DateUtils.mixedTimeToString(value);\n\n } else if (columnMetadata.type === \"simple-array\") {\n value = DateUtils.stringToSimpleArray(value);\n\n } else if (columnMetadata.type === \"simple-json\") {\n value = DateUtils.stringToSimpleJson(value);\n\n } else if ((columnMetadata.type === \"enum\" || columnMetadata.type === \"simple-enum\")\n && columnMetadata.enum\n && !isNaN(value)\n && columnMetadata.enum.indexOf(parseInt(value)) >= 0) {\n // convert to number if that exists in possible enum options\n value = parseInt(value);\n } else if (columnMetadata.type === \"set\") {\n value = DateUtils.stringToSimpleArray(value);\n }\n\n if (columnMetadata.transformer)\n value = ApplyValueTransformers.transformFrom(columnMetadata.transformer, value);\n\n return value;\n }\n\n /**\n * Creates a database type from a given column metadata.\n */\n normalizeType(column: { type: ColumnType, length?: number|string, precision?: number|null, scale?: number }): string {\n if (column.type === Number || column.type === \"integer\") {\n return \"int\";\n\n } else if (column.type === String) {\n return \"varchar\";\n\n } else if (column.type === Date) {\n return \"datetime\";\n\n } else if ((column.type as any) === Buffer) {\n return \"blob\";\n\n } else if (column.type === Boolean) {\n return \"tinyint\";\n\n } else if (column.type === \"uuid\") {\n return \"varchar\";\n\n } else if (column.type === \"json\" && this.options.type === \"mariadb\") {\n /*\n * MariaDB implements this as a LONGTEXT rather, as the JSON data type contradicts the SQL standard,\n * and MariaDB's benchmarks indicate that performance is at least equivalent.\n *\n * @see https://mariadb.com/kb/en/json-data-type/\n */\n return \"longtext\";\n\n } else if (column.type === \"simple-array\" || column.type === \"simple-json\") {\n return \"text\";\n\n } else if (column.type === \"simple-enum\") {\n return \"enum\";\n\n } else if (column.type === \"double precision\" || column.type === \"real\") {\n return \"double\";\n\n } else if (column.type === \"dec\" || column.type === \"numeric\" || column.type === \"fixed\") {\n return \"decimal\";\n\n } else if (column.type === \"bool\" || column.type === \"boolean\") {\n return \"tinyint\";\n\n } else if (column.type === \"nvarchar\" || column.type === \"national varchar\") {\n return \"varchar\";\n\n } else if (column.type === \"nchar\" || column.type === \"national char\") {\n return \"char\";\n\n } else {\n return column.type as string || \"\";\n }\n }\n\n /**\n * Normalizes \"default\" value of the column.\n */\n normalizeDefault(columnMetadata: ColumnMetadata): string | undefined {\n const defaultValue = columnMetadata.default;\n\n if (defaultValue === null) {\n return undefined;\n }\n\n if (\n (columnMetadata.type === \"enum\"\n || columnMetadata.type === \"simple-enum\"\n || typeof defaultValue === \"string\")\n && defaultValue !== undefined) {\n return `'${defaultValue}'`;\n }\n\n if ((columnMetadata.type === \"set\") && defaultValue !== undefined) {\n return `'${DateUtils.simpleArrayToString(defaultValue)}'`;\n }\n\n if (typeof defaultValue === \"number\") {\n return `'${defaultValue.toFixed(columnMetadata.scale)}'`;\n }\n\n if (typeof defaultValue === \"boolean\") {\n return defaultValue ? \"1\" : \"0\";\n }\n\n if (typeof defaultValue === \"function\") {\n const value = defaultValue();\n return this.normalizeDatetimeFunction(value);\n }\n\n if (defaultValue === undefined) {\n return undefined;\n }\n\n return `${defaultValue}`;\n }\n\n /**\n * Normalizes \"isUnique\" value of the column.\n */\n normalizeIsUnique(column: ColumnMetadata): boolean {\n return column.entityMetadata.indices.some(idx => idx.isUnique && idx.columns.length === 1 && idx.columns[0] === column);\n }\n\n /**\n * Returns default column lengths, which is required on column creation.\n */\n getColumnLength(column: ColumnMetadata|TableColumn): string {\n if (column.length)\n return column.length.toString();\n\n /**\n * fix https://github.com/typeorm/typeorm/issues/1139\n */\n if (column.generationStrategy === \"uuid\")\n return \"36\";\n\n switch (column.type) {\n case String:\n case \"varchar\":\n case \"nvarchar\":\n case \"national varchar\":\n return \"255\";\n case \"varbinary\":\n return \"255\";\n default:\n return \"\";\n }\n }\n\n /**\n * Creates column type definition including length, precision and scale\n */\n createFullType(column: TableColumn): string {\n let type = column.type;\n\n // used 'getColumnLength()' method, because MySQL requires column length for `varchar`, `nvarchar` and `varbinary` data types\n if (this.getColumnLength(column)) {\n type += `(${this.getColumnLength(column)})`;\n\n } else if (column.width) {\n type += `(${column.width})`;\n\n } else if (column.precision !== null && column.precision !== undefined && column.scale !== null && column.scale !== undefined) {\n type += `(${column.precision},${column.scale})`;\n\n } else if (column.precision !== null && column.precision !== undefined) {\n type += `(${column.precision})`;\n }\n\n if (column.isArray)\n type += \" array\";\n\n return type;\n }\n\n /**\n * Obtains a new database connection to a master server.\n * Used for replication.\n * If replication is not setup then returns default connection's database connection.\n */\n obtainMasterConnection(): Promise<any> {\n return new Promise<any>((ok, fail) => {\n if (this.poolCluster) {\n this.poolCluster.getConnection(\"MASTER\", (err: any, dbConnection: any) => {\n err ? fail(err) : ok(this.prepareDbConnection(dbConnection));\n });\n\n } else if (this.pool) {\n this.pool.getConnection((err: any, dbConnection: any) => {\n err ? fail(err) : ok(this.prepareDbConnection(dbConnection));\n });\n } else {\n fail(new TypeORMError(`Connection is not established with mysql database`));\n }\n });\n }\n\n /**\n * Obtains a new database connection to a slave server.\n * Used for replication.\n * If replication is not setup then returns master (default) connection's database connection.\n */\n obtainSlaveConnection(): Promise<any> {\n if (!this.poolCluster)\n return this.obtainMasterConnection();\n\n return new Promise<any>((ok, fail) => {\n this.poolCluster.getConnection(\"SLAVE*\", (err: any, dbConnection: any) => {\n err ? fail(err) : ok(this.prepareDbConnection(dbConnection));\n });\n });\n }\n\n /**\n * Creates generated map of values generated or returned by database after INSERT query.\n */\n createGeneratedMap(metadata: EntityMetadata, insertResult: any, entityIndex: number) {\n const generatedMap = metadata.generatedColumns.reduce((map, generatedColumn) => {\n let value: any;\n if (generatedColumn.generationStrategy === \"increment\" && insertResult.insertId) {\n // NOTE: When multiple rows is inserted by a single INSERT statement,\n // `insertId` is the value generated for the first inserted row only.\n value = insertResult.insertId + entityIndex;\n // } else if (generatedColumn.generationStrategy === \"uuid\") {\n // console.log(\"getting db value:\", generatedColumn.databaseName);\n // value = generatedColumn.getEntityValue(uuidMap);\n }\n\n return OrmUtils.mergeDeep(map, generatedColumn.createValueMap(value));\n }, {} as ObjectLiteral);\n\n return Object.keys(generatedMap).length > 0 ? generatedMap : undefined;\n }\n\n /**\n * Differentiate columns of this table and columns from the given column metadatas columns\n * and returns only changed.\n */\n findChangedColumns(tableColumns: TableColumn[], columnMetadatas: ColumnMetadata[]): ColumnMetadata[] {\n return columnMetadatas.filter(columnMetadata => {\n const tableColumn = tableColumns.find(c => c.name === columnMetadata.databaseName);\n if (!tableColumn)\n return false; // we don't need new columns, we only need exist and changed\n\n const isColumnChanged = tableColumn.name !== columnMetadata.databaseName\n || tableColumn.type !== this.normalizeType(columnMetadata)\n || tableColumn.length !== this.getColumnLength(columnMetadata)\n || tableColumn.width !== columnMetadata.width\n || (columnMetadata.precision !== undefined && tableColumn.precision !== columnMetadata.precision)\n || (columnMetadata.scale !== undefined && tableColumn.scale !== columnMetadata.scale)\n || tableColumn.zerofill !== columnMetadata.zerofill\n || tableColumn.unsigned !== columnMetadata.unsigned\n || tableColumn.asExpression !== columnMetadata.asExpression\n || tableColumn.generatedType !== columnMetadata.generatedType\n || tableColumn.comment !== this.escapeComment(columnMetadata.comment)\n || !this.compareDefaultValues(this.normalizeDefault(columnMetadata), tableColumn.default)\n || (tableColumn.enum && columnMetadata.enum && !OrmUtils.isArraysEqual(tableColumn.enum, columnMetadata.enum.map(val => val + \"\")))\n || tableColumn.onUpdate !== this.normalizeDatetimeFunction(columnMetadata.onUpdate)\n || tableColumn.isPrimary !== columnMetadata.isPrimary\n || tableColumn.isNullable !== columnMetadata.isNullable\n || tableColumn.isUnique !== this.normalizeIsUnique(columnMetadata)\n || (columnMetadata.generationStrategy !== \"uuid\" && tableColumn.isGenerated !== columnMetadata.isGenerated);\n\n // DEBUG SECTION\n // if (isColumnChanged) {\n // console.log(\"table:\", columnMetadata.entityMetadata.tableName);\n // console.log(\"name:\", tableColumn.name, columnMetadata.databaseName);\n // console.log(\"type:\", tableColumn.type, this.normalizeType(columnMetadata));\n // console.log(\"length:\", tableColumn.length, columnMetadata.length);\n // console.log(\"width:\", tableColumn.width, columnMetadata.width);\n // console.log(\"precision:\", tableColumn.precision, columnMetadata.precision);\n // console.log(\"scale:\", tableColumn.scale, columnMetadata.scale);\n // console.log(\"zerofill:\", tableColumn.zerofill, columnMetadata.zerofill);\n // console.log(\"unsigned:\", tableColumn.unsigned, columnMetadata.unsigned);\n // console.log(\"asExpression:\", tableColumn.asExpression, columnMetadata.asExpression);\n // console.log(\"generatedType:\", tableColumn.generatedType, columnMetadata.generatedType);\n // console.log(\"comment:\", tableColumn.comment, this.escapeComment(columnMetadata.comment));\n // console.log(\"default:\", tableColumn.default, this.normalizeDefault(columnMetadata));\n // console.log(\"enum:\", tableColumn.enum, columnMetadata.enum);\n // console.log(\"default changed:\", !this.compareDefaultValues(this.normalizeDefault(columnMetadata), tableColumn.default));\n // console.log(\"onUpdate:\", tableColumn.onUpdate, this.normalizeOnUpdate(columnMetadata.onUpdate));\n // console.log(\"isPrimary:\", tableColumn.isPrimary, columnMetadata.isPrimary);\n // console.log(\"isNullable:\", tableColumn.isNullable, columnMetadata.isNullable);\n // console.log(\"isUnique:\", tableColumn.isUnique, this.normalizeIsUnique(columnMetadata));\n // console.log(\"isGenerated:\", tableColumn.isGenerated, columnMetadata.isGenerated);\n // console.log((columnMetadata.generationStrategy !== \"uuid\" && tableColumn.isGenerated !== columnMetadata.isGenerated));\n // console.log(\"==========================================\");\n // }\n\n return isColumnChanged;\n });\n }\n\n /**\n * Returns true if driver supports RETURNING / OUTPUT statement.\n */\n isReturningSqlSupported(): boolean {\n return false;\n }\n\n /**\n * Returns true if driver supports uuid values generation on its own.\n */\n isUUIDGenerationSupported(): boolean {\n return false;\n }\n\n /**\n * Returns true if driver supports fulltext indices.\n */\n isFullTextColumnTypeSupported(): boolean {\n return true;\n }\n\n /**\n * Creates an escaped parameter.\n */\n createParameter(parameterName: string, index: number): string {\n return \"?\";\n }\n\n // -------------------------------------------------------------------------\n // Protected Methods\n // -------------------------------------------------------------------------\n\n /**\n * Loads all driver dependencies.\n */\n protected loadDependencies(): void {\n try {\n // try to load first supported package\n const mysql = this.options.driver || PlatformTools.load(\"mysql\");\n this.mysql = mysql;\n /*\n * Some frameworks (such as Jest) may mess up Node's require cache and provide garbage for the 'mysql' module\n * if it was not installed. We check that the object we got actually contains something otherwise we treat\n * it as if the `require` call failed.\n *\n * @see https://github.com/typeorm/typeorm/issues/1373\n */\n if (Object.keys(this.mysql).length === 0) {\n throw new TypeORMError(\"'mysql' was found but it is empty. Falling back to 'mysql2'.\");\n }\n } catch (e) {\n try {\n this.mysql = PlatformTools.load(\"mysql2\"); // try to load second supported package\n\n } catch (e) {\n throw new DriverPackageNotInstalledError(\"Mysql\", \"mysql\");\n }\n }\n }\n\n /**\n * Creates a new connection pool for a given database credentials.\n */\n protected createConnectionOptions(options: MysqlConnectionOptions, credentials: MysqlConnectionCredentialsOptions): Promise<any> {\n\n credentials = Object.assign({}, credentials, DriverUtils.buildDriverOptions(credentials)); // todo: do it better way\n\n // build connection options for the driver\n return Object.assign({}, {\n charset: options.charset,\n timezone: options.timezone,\n connectTimeout: options.connectTimeout,\n insecureAuth: options.insecureAuth,\n supportBigNumbers: options.supportBigNumbers !== undefined ? options.supportBigNumbers : true,\n bigNumberStrings: options.bigNumberStrings !== undefined ? options.bigNumberStrings : true,\n dateStrings: options.dateStrings,\n debug: options.debug,\n trace: options.trace,\n multipleStatements: options.multipleStatements,\n flags: options.flags\n }, {\n host: credentials.host,\n user: credentials.username,\n password: credentials.password,\n database: credentials.database,\n port: credentials.port,\n ssl: options.ssl,\n socketPath: credentials.socketPath\n },\n options.acquireTimeout === undefined\n ? {}\n : { acquireTimeout: options.acquireTimeout },\n options.extra || {});\n }\n\n /**\n * Creates a new connection pool for a given database credentials.\n */\n protected createPool(connectionOptions: any): Promise<any> {\n\n // create a connection pool\n const pool = this.mysql.createPool(connectionOptions);\n\n // make sure connection is working fine\n return new Promise<void>((ok, fail) => {\n // (issue #610) we make first connection to database to make sure if connection credentials are wrong\n // we give error before calling any other method that creates actual query runner\n pool.getConnection((err: any, connection: any) => {\n if (err)\n return pool.end(() => fail(err));\n\n connection.release();\n ok(pool);\n });\n });\n }\n\n /**\n * Attaches all required base handlers to a database connection, such as the unhandled error handler.\n */\n private prepareDbConnection(connection: any): any {\n const { logger } = this.connection;\n /*\n Attaching an error handler to connection errors is essential, as, otherwise, errors raised will go unhandled and\n cause the hosting app to crash.\n */\n if (connection.listeners(\"error\").length === 0) {\n connection.on(\"error\", (error: any) => logger.log(\"warn\", `MySQL connection raised an error. ${error}`));\n }\n return connection;\n }\n\n /**\n * Checks if \"DEFAULT\" values in the column metadata and in the database are equal.\n */\n protected compareDefaultValues(columnMetadataValue: string | undefined, databaseValue: string | undefined): boolean {\n if (typeof columnMetadataValue === \"string\" && typeof databaseValue === \"string\") {\n // we need to cut out \"'\" because in mysql we can understand returned value is a string or a function\n // as result compare cannot understand if default is really changed or not\n columnMetadataValue = columnMetadataValue.replace(/^'+|'+$/g, \"\");\n databaseValue = databaseValue.replace(/^'+|'+$/g, \"\");\n }\n\n return columnMetadataValue === databaseValue;\n }\n\n /**\n * If parameter is a datetime function, e.g. \"CURRENT_TIMESTAMP\", normalizes it.\n * Otherwise returns original input.\n */\n protected normalizeDatetimeFunction(value?: string) {\n if (!value) return value;\n\n // check if input is datetime function\n const isDatetimeFunction = value.toUpperCase().indexOf(\"CURRENT_TIMESTAMP\") !== -1\n || value.toUpperCase().indexOf(\"NOW\") !== -1;\n\n if (isDatetimeFunction) {\n // extract precision, e.g. \"(3)\"\n const precision = value.match(/\\(\\d+\\)/);\n if (this.options.type === \"mariadb\") {\n return precision ? `CURRENT_TIMESTAMP${precision[0]}` : \"CURRENT_TIMESTAMP()\";\n } else {\n return precision ? `CURRENT_TIMESTAMP${precision[0]}` : \"CURRENT_TIMESTAMP\";\n }\n } else {\n return value;\n }\n }\n\n /**\n * Escapes a given comment.\n */\n protected escapeComment(comment?: string) {\n if (!comment) return comment;\n\n comment = comment.replace(/\\u0000/g, \"\"); // Null bytes aren't allowed in comments\n\n return comment;\n }\n\n}\n"],"sourceRoot":"../.."}
|
|
1
|
+
{"version":3,"sources":["../browser/src/driver/mysql/MysqlDriver.ts"],"names":[],"mappings":";AACA,OAAO,EAAC,uBAAuB,EAAC,MAAM,qCAAqC,CAAC;AAC5E,OAAO,EAAC,8BAA8B,EAAC,MAAM,4CAA4C,CAAC;AAC1F,OAAO,EAAC,WAAW,EAAC,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAC,gBAAgB,EAAC,MAAM,oBAAoB,CAAC;AAGpD,OAAO,EAAC,SAAS,EAAC,MAAM,sBAAsB,CAAC;AAC/C,OAAO,EAAC,aAAa,EAAC,MAAM,8BAA8B,CAAC;AAE3D,OAAO,EAAC,kBAAkB,EAAC,MAAM,yCAAyC,CAAC;AAO3E,OAAO,EAAC,cAAc,EAAC,MAAM,+BAA+B,CAAC;AAC7D,OAAO,EAAC,QAAQ,EAAC,MAAM,qBAAqB,CAAC;AAC7C,OAAO,EAAC,sBAAsB,EAAC,MAAM,mCAAmC,CAAC;AAEzE,OAAO,EAAC,YAAY,EAAC,MAAM,aAAa,CAAC;AACzC,OAAO,EAAC,KAAK,EAAC,MAAM,kCAAkC,CAAC;AACvD,OAAO,EAAC,IAAI,EAAC,MAAM,gCAAgC,CAAC;AACpD,OAAO,EAAC,eAAe,EAAC,MAAM,4CAA4C,CAAC;AAC3E,OAAO,EAAC,YAAY,EAAC,MAAM,yBAAyB,CAAC;AAErD;;GAEG;AACH;IA+RI,4EAA4E;IAC5E,cAAc;IACd,4EAA4E;IAE5E,qBAAY,UAAsB;QA1PlC;;WAEG;QACH,iBAAY,GAAY,KAAK,CAAC;QAE9B;;WAEG;QACH,gBAAW,GAAG,IAAI,CAAC;QAEnB;;;;;WAKG;QACH,uBAAkB,GAAiB;YAC/B,gBAAgB;YAChB,KAAK;YACL,KAAK;YACL,SAAS;YACT,SAAS;YACT,UAAU;YACV,WAAW;YACX,QAAQ;YACR,OAAO;YACP,QAAQ;YACR,kBAAkB;YAClB,MAAM;YACN,SAAS;YACT,KAAK;YACL,SAAS;YACT,OAAO;YACP,MAAM;YACN,SAAS;YACT,sBAAsB;YACtB,MAAM;YACN,UAAU;YACV,WAAW;YACX,MAAM;YACN,MAAM;YACN,eAAe;YACf,MAAM;YACN,OAAO;YACP,eAAe;YACf,SAAS;YACT,UAAU;YACV,kBAAkB;YAClB,MAAM;YACN,MAAM;YACN,UAAU;YACV,UAAU;YACV,YAAY;YACZ,YAAY;YACZ,UAAU;YACV,UAAU;YACV,MAAM;YACN,KAAK;YACL,QAAQ;YACR,WAAW;YACX,iBAAiB;YACjB,MAAM;YACN,qBAAqB;YACrB,UAAU;YACV,OAAO;YACP,YAAY;YACZ,SAAS;YACT,YAAY;YACZ,iBAAiB;YACjB,cAAc;YACd,oBAAoB;SACvB,CAAC;QAEF;;WAEG;QACM,wBAAmB,GAAG,yBAAyB,CAAC;QAEzD;;WAEG;QACH,iBAAY,GAAiB;YACzB,UAAU;YACV,OAAO;YACP,YAAY;YACZ,SAAS;YACT,YAAY;YACZ,iBAAiB;YACjB,cAAc;YACd,oBAAoB;SACvB,CAAC;QAEF;;WAEG;QACH,0BAAqB,GAAiB;YAClC,MAAM;YACN,SAAS;YACT,UAAU;YACV,QAAQ;YACR,WAAW;SACd,CAAC;QAEF;;WAEG;QACH,yBAAoB,GAAiB;YACjC,KAAK;YACL,SAAS;YACT,UAAU;YACV,WAAW;YACX,KAAK;YACL,SAAS;YACT,QAAQ;SACX,CAAC;QAEF;;WAEG;QACH,6BAAwB,GAAiB;YACrC,SAAS;YACT,KAAK;YACL,SAAS;YACT,OAAO;YACP,OAAO;YACP,QAAQ;YACR,kBAAkB;YAClB,MAAM;YACN,MAAM;YACN,UAAU;YACV,WAAW;SACd,CAAC;QAEF;;WAEG;QACH,yBAAoB,GAAiB;YACjC,SAAS;YACT,KAAK;YACL,SAAS;YACT,OAAO;YACP,OAAO;YACP,QAAQ;YACR,kBAAkB;YAClB,MAAM;SACT,CAAC;QAEF;;WAEG;QACH,6BAAwB,GAAiB;YACrC,KAAK;YACL,SAAS;YACT,UAAU;YACV,SAAS;YACT,WAAW;YACX,QAAQ;YACR,SAAS;YACT,KAAK;YACL,SAAS;YACT,OAAO;YACP,OAAO;YACP,QAAQ;YACR,kBAAkB;YAClB,MAAM;SACT,CAAC;QAEF;;;WAGG;QACH,oBAAe,GAAsB;YACjC,UAAU,EAAE,UAAU;YACtB,mBAAmB,EAAE,CAAC;YACtB,iBAAiB,EAAE,sBAAsB;YACzC,UAAU,EAAE,UAAU;YACtB,mBAAmB,EAAE,CAAC;YACtB,iBAAiB,EAAE,sBAAsB;YACzC,UAAU,EAAE,UAAU;YACtB,mBAAmB,EAAE,CAAC;YACtB,kBAAkB,EAAE,IAAI;YACxB,OAAO,EAAE,KAAK;YACd,SAAS,EAAE,KAAK;YAChB,WAAW,EAAE,KAAK;YAClB,aAAa,EAAE,SAAS;YACxB,kBAAkB,EAAE,QAAQ;YAC5B,OAAO,EAAE,KAAK;YACd,eAAe,EAAE,SAAS;YAC1B,SAAS,EAAE,QAAQ;YACnB,aAAa,EAAE,KAAK;YACpB,UAAU,EAAE,MAAM;YAClB,WAAW,EAAE,MAAM;YACnB,YAAY,EAAE,SAAS;YACvB,gBAAgB,EAAE,SAAS;YAC3B,cAAc,EAAE,SAAS;YACzB,aAAa,EAAE,SAAS;YACxB,YAAY,EAAE,SAAS;YACvB,aAAa,EAAE,MAAM;SACxB,CAAC;QAEF;;;WAGG;QACH,qBAAgB,GAAqB;YACjC,SAAS,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE;YAC1B,UAAU,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE;YAC3B,kBAAkB,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE;YACnC,MAAM,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE;YACrB,QAAQ,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE;YACvB,WAAW,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE;YAC5B,SAAS,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE;YACtC,KAAK,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE;YAClC,SAAS,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE;YACtC,OAAO,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE;YACpC,OAAO,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE;YAC1B,QAAQ,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE;YAC3B,MAAM,EAAE,EAAE,SAAS,EAAE,CAAC,EAAE;YACxB,UAAU,EAAE,EAAE,SAAS,EAAE,CAAC,EAAE;YAC5B,WAAW,EAAE,EAAE,SAAS,EAAE,CAAC,EAAE;YAC7B,KAAK,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE;YACnB,KAAK,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE;YACpB,SAAS,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE;YACxB,SAAS,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE;YACvB,UAAU,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE;YACxB,WAAW,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE;YACzB,QAAQ,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE;SAC1B,CAAC;QAGF;;;WAGG;QACH,mBAAc,GAAG,EAAE,CAAC;QAGpB;;WAEG;QACc,6BAAwB,GAAmC;YACxE,MAAM,EAAE,KAAK;YACb,MAAM,EAAE,KAAK;YACb,MAAM,EAAE,KAAK;SAChB,CAAC;QAOE,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;QAC7B,IAAI,CAAC,OAAO,GAAG,WACX,oBAAoB,EAAE,IAAI,IACvB,UAAU,CAAC,OAAO,CACE,CAAC;QAC5B,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC;QAE5D,qBAAqB;QACrB,IAAI,CAAC,gBAAgB,EAAE,CAAC;QAExB,IAAI,CAAC,QAAQ,GAAG,WAAW,CAAC,kBAAkB,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC;QAEnI,kDAAkD;QAClD,oDAAoD;QACpD,iHAAiH;QACjH,gEAAgE;QAChE,8BAA8B;QAC9B,qDAAqD;QACrD,8BAA8B;QAC9B,qDAAqD;QACrD,gHAAgH;QAChH,2EAA2E;IAC/E,CAAC;IAED,4EAA4E;IAC5E,iBAAiB;IACjB,4EAA4E;IAE5E;;OAEG;IACG,6BAAO,GAAb;;;;;;;6BAEQ,IAAI,CAAC,OAAO,CAAC,WAAW,EAAxB,wBAAwB;wBACxB,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;wBAC1E,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC,UAAC,KAAK,EAAE,KAAK;4BACjD,KAAI,CAAC,WAAW,CAAC,GAAG,CAAC,OAAO,GAAG,KAAK,EAAE,KAAI,CAAC,uBAAuB,CAAC,KAAI,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC;wBAC7F,CAAC,CAAC,CAAC;wBACH,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,QAAQ,EAAE,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC;;;wBAG5G,KAAA,IAAI,CAAA;wBAAQ,qBAAM,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,EAAA;;wBAA3F,GAAK,IAAI,GAAG,SAA+E,CAAC;;;6BAG5F,CAAC,IAAI,CAAC,QAAQ,EAAd,wBAAc;wBACM,qBAAM,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC,EAAA;;wBAApD,WAAW,GAAG,SAAsC;wBAE1D,KAAA,IAAI,CAAA;wBAAY,qBAAM,WAAW,CAAC,kBAAkB,EAAE,EAAA;;wBAAtD,GAAK,QAAQ,GAAG,SAAsC,CAAC;wBAEvD,qBAAM,WAAW,CAAC,OAAO,EAAE,EAAA;;wBAA3B,SAA2B,CAAC;;;6BAG5B,CAAA,IAAI,CAAC,OAAO,CAAC,IAAI,KAAK,SAAS,CAAA,EAA/B,wBAA+B;wBAChB,qBAAM,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC;iCAChD,KAAK,CAAC,+BAAiC,CAAC,EAAA;;wBADvC,MAAM,GAAG,SACwD;wBACjE,SAAS,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;wBAEpC,IAAI,YAAY,CAAC,gBAAgB,CAAC,SAAS,EAAE,QAAQ,CAAC,EAAE;4BACpD,IAAI,CAAC,wBAAwB,CAAC,MAAM,GAAG,IAAI,CAAC;yBAC/C;wBACD,IAAI,YAAY,CAAC,gBAAgB,CAAC,SAAS,EAAE,QAAQ,CAAC,EAAE;4BACpD,IAAI,CAAC,wBAAwB,CAAC,MAAM,GAAG,IAAI,CAAC;yBAC/C;;;;;;KAER;IAED;;OAEG;IACH,kCAAY,GAAZ;QACI,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC;IAC7B,CAAC;IAED;;OAEG;IACG,gCAAU,GAAhB;;;;gBACI,IAAI,CAAC,IAAI,CAAC,WAAW,IAAI,CAAC,IAAI,CAAC,IAAI;oBAC/B,sBAAO,OAAO,CAAC,MAAM,CAAC,IAAI,uBAAuB,CAAC,OAAO,CAAC,CAAC,EAAC;gBAEhE,IAAI,IAAI,CAAC,WAAW,EAAE;oBAClB,sBAAO,IAAI,OAAO,CAAO,UAAC,EAAE,EAAE,IAAI;4BAC9B,KAAI,CAAC,WAAW,CAAC,GAAG,CAAC,UAAC,GAAQ,IAAK,OAAA,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,EAAtB,CAAsB,CAAC,CAAC;4BAC3D,KAAI,CAAC,WAAW,GAAG,SAAS,CAAC;wBACjC,CAAC,CAAC,EAAC;iBACN;gBACD,IAAI,IAAI,CAAC,IAAI,EAAE;oBACX,sBAAO,IAAI,OAAO,CAAO,UAAC,EAAE,EAAE,IAAI;4BAC9B,KAAI,CAAC,IAAI,CAAC,GAAG,CAAC,UAAC,GAAQ;gCACnB,IAAI,GAAG;oCAAE,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC;gCAC1B,KAAI,CAAC,IAAI,GAAG,SAAS,CAAC;gCACtB,EAAE,EAAE,CAAC;4BACT,CAAC,CAAC,CAAC;wBACP,CAAC,CAAC,EAAC;iBACN;;;;KACJ;IAED;;OAEG;IACH,yCAAmB,GAAnB;QACI,OAAO,IAAI,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IACnD,CAAC;IAED;;OAEG;IACH,uCAAiB,GAAjB,UAAkB,IAAqB;QACnC,OAAO,IAAI,gBAAgB,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IAC5C,CAAC;IAED;;;OAGG;IACH,+CAAyB,GAAzB,UAA0B,GAAW,EAAE,UAAyB,EAAE,gBAA+B;QAAjG,iBA6BC;QA5BG,IAAM,iBAAiB,GAAU,MAAM,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,GAAG,CAAC,UAAA,GAAG,IAAI,OAAA,gBAAgB,CAAC,GAAG,CAAC,EAArB,CAAqB,CAAC,CAAC;QACjG,IAAI,CAAC,UAAU,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,MAAM;YAC9C,OAAO,CAAC,GAAG,EAAE,iBAAiB,CAAC,CAAC;QAEpC,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,6BAA6B,EAAE,UAAC,IAAI,EAAE,OAAe,EAAE,GAAW;YAChF,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC,GAAG,CAAC,EAAE;gBACjC,OAAO,IAAI,CAAC;aACf;YAED,IAAI,KAAK,GAAQ,UAAU,CAAC,GAAG,CAAC,CAAC;YAEjC,IAAI,OAAO,EAAE;gBACT,OAAO,KAAK,CAAC,GAAG,CAAC,UAAC,CAAM;oBACpB,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;oBAC1B,OAAO,KAAI,CAAC,eAAe,CAAC,GAAG,EAAE,iBAAiB,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;gBACnE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;aAEjB;YAED,IAAI,KAAK,YAAY,QAAQ,EAAE;gBAC3B,OAAO,KAAK,EAAE,CAAC;aAElB;YAED,iBAAiB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAC9B,OAAO,KAAI,CAAC,eAAe,CAAC,GAAG,EAAE,iBAAiB,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QACnE,CAAC,CAAC,CAAC,CAAC,kEAAkE;QACtE,OAAO,CAAC,GAAG,EAAE,iBAAiB,CAAC,CAAC;IACpC,CAAC;IAED;;OAEG;IACH,4BAAM,GAAN,UAAO,UAAkB;QACrB,OAAO,GAAG,GAAG,UAAU,GAAG,GAAG,CAAC;IAClC,CAAC;IAED;;;OAGG;IACH,oCAAc,GAAd,UAAe,SAAiB,EAAE,MAAe,EAAE,QAAiB;QAChE,IAAI,SAAS,GAAG,CAAE,SAAS,CAAE,CAAC;QAE9B,IAAI,QAAQ,EAAE;YACV,SAAS,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;SAC/B;QAED,OAAO,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC/B,CAAC;IAED;;OAEG;IACH,oCAAc,GAAd,UAAe,MAAgE;QAC3E,IAAM,cAAc,GAAG,IAAI,CAAC,QAAQ,CAAC;QACrC,IAAM,YAAY,GAAG,SAAS,CAAC;QAE/B,IAAI,MAAM,YAAY,KAAK,IAAI,MAAM,YAAY,IAAI,EAAE;YACnD,IAAM,MAAM,GAAG,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;YAEhD,OAAO;gBACH,QAAQ,EAAE,MAAM,CAAC,QAAQ,IAAI,MAAM,CAAC,QAAQ,IAAI,cAAc;gBAC9D,MAAM,EAAE,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,IAAI,YAAY;gBACtD,SAAS,EAAE,MAAM,CAAC,SAAS;aAC9B,CAAC;SACL;QAED,IAAI,MAAM,YAAY,eAAe,EAAE;YACnC,IAAM,MAAM,GAAG,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,mBAAmB,CAAC,CAAC;YAE/D,OAAO;gBACH,QAAQ,EAAE,MAAM,CAAC,kBAAkB,IAAI,MAAM,CAAC,QAAQ,IAAI,cAAc;gBACxE,MAAM,EAAE,MAAM,CAAC,gBAAgB,IAAI,MAAM,CAAC,MAAM,IAAI,YAAY;gBAChE,SAAS,EAAE,MAAM,CAAC,SAAS;aAC9B,CAAC;SACL;QAED,IAAI,MAAM,YAAY,cAAc,EAAE;YAClC,2CAA2C;YAE3C,OAAO;gBACH,QAAQ,EAAE,MAAM,CAAC,QAAQ,IAAI,cAAc;gBAC3C,MAAM,EAAE,MAAM,CAAC,MAAM,IAAI,YAAY;gBACrC,SAAS,EAAE,MAAM,CAAC,SAAS;aAC9B,CAAC;SAEL;QAED,IAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAEhC,OAAO;YACH,QAAQ,EAAE,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,cAAc;YACrE,MAAM,EAAE,YAAY;YACpB,SAAS,EAAE,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;SACpD,CAAC;IACN,CAAC;IAED;;OAEG;IACH,4CAAsB,GAAtB,UAAuB,KAAU,EAAE,cAA8B;QAC7D,IAAI,cAAc,CAAC,WAAW;YAC1B,KAAK,GAAG,sBAAsB,CAAC,WAAW,CAAC,cAAc,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;QAElF,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS;YACrC,OAAO,KAAK,CAAC;QAEjB,IAAI,cAAc,CAAC,IAAI,KAAK,OAAO,EAAE;YACjC,OAAO,KAAK,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;SAEjC;aAAM,IAAI,cAAc,CAAC,IAAI,KAAK,MAAM,EAAE;YACvC,OAAO,SAAS,CAAC,qBAAqB,CAAC,KAAK,CAAC,CAAC;SAEjD;aAAM,IAAI,cAAc,CAAC,IAAI,KAAK,MAAM,EAAE;YACvC,OAAO,SAAS,CAAC,qBAAqB,CAAC,KAAK,CAAC,CAAC;SAEjD;aAAM,IAAI,cAAc,CAAC,IAAI,KAAK,MAAM,EAAE;YACvC,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;SAEhC;aAAM,IAAI,cAAc,CAAC,IAAI,KAAK,WAAW,IAAI,cAAc,CAAC,IAAI,KAAK,UAAU,IAAI,cAAc,CAAC,IAAI,KAAK,IAAI,EAAE;YAClH,OAAO,SAAS,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;SAE3C;aAAM,IAAI,cAAc,CAAC,IAAI,KAAK,cAAc,EAAE;YAC/C,OAAO,SAAS,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAC;SAE/C;aAAM,IAAI,cAAc,CAAC,IAAI,KAAK,aAAa,EAAE;YAC9C,OAAO,SAAS,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC;SAE9C;aAAM,IAAI,cAAc,CAAC,IAAI,KAAK,MAAM,IAAI,cAAc,CAAC,IAAI,KAAK,aAAa,EAAE;YAChF,OAAO,EAAE,GAAG,KAAK,CAAC;SAErB;aAAM,IAAI,cAAc,CAAC,IAAI,KAAK,KAAK,EAAE;YACtC,OAAO,SAAS,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAC;SAC/C;QAED,OAAO,KAAK,CAAC;IACjB,CAAC;IAED;;OAEG;IACH,0CAAoB,GAApB,UAAqB,KAAU,EAAE,cAA8B;QAC3D,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS;YACrC,OAAO,cAAc,CAAC,WAAW,CAAC,CAAC,CAAC,sBAAsB,CAAC,aAAa,CAAC,cAAc,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;QAExH,IAAI,cAAc,CAAC,IAAI,KAAK,OAAO,IAAI,cAAc,CAAC,IAAI,KAAK,MAAM,IAAI,cAAc,CAAC,IAAI,KAAK,SAAS,EAAE;YACxG,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC;SAEhC;aAAM,IAAI,cAAc,CAAC,IAAI,KAAK,UAAU,IAAI,cAAc,CAAC,IAAI,KAAK,IAAI,EAAE;YAC3E,KAAK,GAAG,SAAS,CAAC,qBAAqB,CAAC,KAAK,CAAC,CAAC;SAElD;aAAM,IAAI,cAAc,CAAC,IAAI,KAAK,MAAM,EAAE;YACvC,KAAK,GAAG,SAAS,CAAC,qBAAqB,CAAC,KAAK,CAAC,CAAC;SAElD;aAAM,IAAI,cAAc,CAAC,IAAI,KAAK,MAAM,EAAE;YACvC,KAAK,GAAG,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;SAEjE;aAAM,IAAI,cAAc,CAAC,IAAI,KAAK,MAAM,EAAE;YACvC,KAAK,GAAG,SAAS,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC;SAE9C;aAAM,IAAI,cAAc,CAAC,IAAI,KAAK,cAAc,EAAE;YAC/C,KAAK,GAAG,SAAS,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAC;SAEhD;aAAM,IAAI,cAAc,CAAC,IAAI,KAAK,aAAa,EAAE;YAC9C,KAAK,GAAG,SAAS,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC;SAE/C;aAAM,IAAI,CAAC,cAAc,CAAC,IAAI,KAAK,MAAM,IAAI,cAAc,CAAC,IAAI,KAAK,aAAa,CAAC;eAC7E,cAAc,CAAC,IAAI;eACnB,CAAC,KAAK,CAAC,KAAK,CAAC;eACb,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,EAAE;YACtD,4DAA4D;YAC5D,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;SAC3B;aAAM,IAAI,cAAc,CAAC,IAAI,KAAK,KAAK,EAAE;YACtC,KAAK,GAAG,SAAS,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAC;SAChD;QAED,IAAI,cAAc,CAAC,WAAW;YAC1B,KAAK,GAAG,sBAAsB,CAAC,aAAa,CAAC,cAAc,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;QAEpF,OAAO,KAAK,CAAC;IACjB,CAAC;IAED;;OAEG;IACH,mCAAa,GAAb,UAAc,MAA6F;QACvG,IAAI,MAAM,CAAC,IAAI,KAAK,MAAM,IAAI,MAAM,CAAC,IAAI,KAAK,SAAS,EAAE;YACrD,OAAO,KAAK,CAAC;SAEhB;aAAM,IAAI,MAAM,CAAC,IAAI,KAAK,MAAM,EAAE;YAC/B,OAAO,SAAS,CAAC;SAEpB;aAAM,IAAI,MAAM,CAAC,IAAI,KAAK,IAAI,EAAE;YAC7B,OAAO,UAAU,CAAC;SAErB;aAAM,IAAK,MAAM,CAAC,IAAY,KAAK,MAAM,EAAE;YACxC,OAAO,MAAM,CAAC;SAEjB;aAAM,IAAI,MAAM,CAAC,IAAI,KAAK,OAAO,EAAE;YAChC,OAAO,SAAS,CAAC;SAEpB;aAAM,IAAI,MAAM,CAAC,IAAI,KAAK,MAAM,EAAE;YAC/B,OAAO,SAAS,CAAC;SAEpB;aAAM,IAAI,MAAM,CAAC,IAAI,KAAK,MAAM,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,KAAK,SAAS,EAAE;YAClE;;;;;eAKG;YACH,OAAO,UAAU,CAAC;SAErB;aAAM,IAAI,MAAM,CAAC,IAAI,KAAK,cAAc,IAAI,MAAM,CAAC,IAAI,KAAK,aAAa,EAAE;YACxE,OAAO,MAAM,CAAC;SAEjB;aAAM,IAAI,MAAM,CAAC,IAAI,KAAK,aAAa,EAAE;YACtC,OAAO,MAAM,CAAC;SAEjB;aAAM,IAAI,MAAM,CAAC,IAAI,KAAK,kBAAkB,IAAI,MAAM,CAAC,IAAI,KAAK,MAAM,EAAE;YACrE,OAAO,QAAQ,CAAC;SAEnB;aAAM,IAAI,MAAM,CAAC,IAAI,KAAK,KAAK,IAAI,MAAM,CAAC,IAAI,KAAK,SAAS,IAAI,MAAM,CAAC,IAAI,KAAK,OAAO,EAAE;YACtF,OAAO,SAAS,CAAC;SAEpB;aAAM,IAAI,MAAM,CAAC,IAAI,KAAK,MAAM,IAAI,MAAM,CAAC,IAAI,KAAK,SAAS,EAAE;YAC5D,OAAO,SAAS,CAAC;SAEpB;aAAM,IAAI,MAAM,CAAC,IAAI,KAAK,UAAU,IAAI,MAAM,CAAC,IAAI,KAAK,kBAAkB,EAAE;YACzE,OAAO,SAAS,CAAC;SAEpB;aAAM,IAAI,MAAM,CAAC,IAAI,KAAK,OAAO,IAAI,MAAM,CAAC,IAAI,KAAK,eAAe,EAAE;YACnE,OAAO,MAAM,CAAC;SAEjB;aAAM;YACH,OAAO,MAAM,CAAC,IAAc,IAAI,EAAE,CAAC;SACtC;IACL,CAAC;IAED;;OAEG;IACH,sCAAgB,GAAhB,UAAiB,cAA8B;QAC3C,IAAM,YAAY,GAAG,cAAc,CAAC,OAAO,CAAC;QAE5C,IAAI,YAAY,KAAK,IAAI,EAAE;YACvB,OAAO,SAAS,CAAC;SACpB;QAED,IACI,CAAC,cAAc,CAAC,IAAI,KAAK,MAAM;eAC5B,cAAc,CAAC,IAAI,KAAK,aAAa;eACrC,OAAO,YAAY,KAAK,QAAQ,CAAC;eACjC,YAAY,KAAK,SAAS,EAAE;YAC/B,OAAO,MAAI,YAAY,MAAG,CAAC;SAC9B;QAED,IAAI,CAAC,cAAc,CAAC,IAAI,KAAK,KAAK,CAAC,IAAI,YAAY,KAAK,SAAS,EAAE;YAC/D,OAAO,MAAI,SAAS,CAAC,mBAAmB,CAAC,YAAY,CAAC,MAAG,CAAC;SAC7D;QAED,IAAI,OAAO,YAAY,KAAK,QAAQ,EAAE;YAClC,OAAO,MAAI,YAAY,CAAC,OAAO,CAAC,cAAc,CAAC,KAAK,CAAC,MAAG,CAAC;SAC5D;QAED,IAAI,OAAO,YAAY,KAAK,SAAS,EAAE;YACnC,OAAO,YAAY,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;SACnC;QAED,IAAI,OAAO,YAAY,KAAK,UAAU,EAAE;YACpC,IAAM,KAAK,GAAG,YAAY,EAAE,CAAC;YAC7B,OAAO,IAAI,CAAC,yBAAyB,CAAC,KAAK,CAAC,CAAC;SAChD;QAED,IAAI,YAAY,KAAK,SAAS,EAAE;YAC5B,OAAO,SAAS,CAAC;SACpB;QAED,OAAO,KAAG,YAAc,CAAC;IAC7B,CAAC;IAED;;OAEG;IACH,uCAAiB,GAAjB,UAAkB,MAAsB;QACpC,OAAO,MAAM,CAAC,cAAc,CAAC,OAAO,CAAC,IAAI,CAAC,UAAA,GAAG,IAAI,OAAA,GAAG,CAAC,QAAQ,IAAI,GAAG,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,IAAI,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,MAAM,EAArE,CAAqE,CAAC,CAAC;IAC5H,CAAC;IAED;;OAEG;IACH,qCAAe,GAAf,UAAgB,MAAkC;QAC9C,IAAI,MAAM,CAAC,MAAM;YACb,OAAO,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC;QAEpC;;WAEG;QACH,IAAI,MAAM,CAAC,kBAAkB,KAAK,MAAM;YACpC,OAAO,IAAI,CAAC;QAEhB,QAAQ,MAAM,CAAC,IAAI,EAAE;YACjB,KAAK,MAAM,CAAC;YACZ,KAAK,SAAS,CAAC;YACf,KAAK,UAAU,CAAC;YAChB,KAAK,kBAAkB;gBACnB,OAAO,KAAK,CAAC;YACjB,KAAK,WAAW;gBACZ,OAAO,KAAK,CAAC;YACjB;gBACI,OAAO,EAAE,CAAC;SACjB;IACL,CAAC;IAED;;OAEG;IACH,oCAAc,GAAd,UAAe,MAAmB;QAC9B,IAAI,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC;QAEvB,6HAA6H;QAC7H,IAAI,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,EAAE;YAC9B,IAAI,IAAI,MAAI,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,MAAG,CAAC;SAE/C;aAAM,IAAI,MAAM,CAAC,KAAK,EAAE;YACrB,IAAI,IAAI,MAAI,MAAM,CAAC,KAAK,MAAG,CAAC;SAE/B;aAAM,IAAI,MAAM,CAAC,SAAS,KAAK,IAAI,IAAI,MAAM,CAAC,SAAS,KAAK,SAAS,IAAI,MAAM,CAAC,KAAK,KAAK,IAAI,IAAI,MAAM,CAAC,KAAK,KAAK,SAAS,EAAE;YAC3H,IAAI,IAAI,MAAI,MAAM,CAAC,SAAS,SAAI,MAAM,CAAC,KAAK,MAAG,CAAC;SAEnD;aAAM,IAAI,MAAM,CAAC,SAAS,KAAK,IAAI,IAAI,MAAM,CAAC,SAAS,KAAK,SAAS,EAAE;YACpE,IAAI,IAAI,MAAI,MAAM,CAAC,SAAS,MAAG,CAAC;SACnC;QAED,IAAI,MAAM,CAAC,OAAO;YACd,IAAI,IAAI,QAAQ,CAAC;QAErB,OAAO,IAAI,CAAC;IAChB,CAAC;IAED;;;;OAIG;IACH,4CAAsB,GAAtB;QAAA,iBAeC;QAdG,OAAO,IAAI,OAAO,CAAM,UAAC,EAAE,EAAE,IAAI;YAC7B,IAAI,KAAI,CAAC,WAAW,EAAE;gBAClB,KAAI,CAAC,WAAW,CAAC,aAAa,CAAC,QAAQ,EAAE,UAAC,GAAQ,EAAE,YAAiB;oBACjE,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,KAAI,CAAC,mBAAmB,CAAC,YAAY,CAAC,CAAC,CAAC;gBACjE,CAAC,CAAC,CAAC;aAEN;iBAAM,IAAI,KAAI,CAAC,IAAI,EAAE;gBAClB,KAAI,CAAC,IAAI,CAAC,aAAa,CAAC,UAAC,GAAQ,EAAE,YAAiB;oBAChD,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,KAAI,CAAC,mBAAmB,CAAC,YAAY,CAAC,CAAC,CAAC;gBACjE,CAAC,CAAC,CAAC;aACN;iBAAM;gBACH,IAAI,CAAC,IAAI,YAAY,CAAC,mDAAmD,CAAC,CAAC,CAAC;aAC/E;QACL,CAAC,CAAC,CAAC;IACP,CAAC;IAED;;;;OAIG;IACH,2CAAqB,GAArB;QAAA,iBASC;QARG,IAAI,CAAC,IAAI,CAAC,WAAW;YACjB,OAAO,IAAI,CAAC,sBAAsB,EAAE,CAAC;QAEzC,OAAO,IAAI,OAAO,CAAM,UAAC,EAAE,EAAE,IAAI;YAC7B,KAAI,CAAC,WAAW,CAAC,aAAa,CAAC,QAAQ,EAAE,UAAC,GAAQ,EAAE,YAAiB;gBACjE,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,KAAI,CAAC,mBAAmB,CAAC,YAAY,CAAC,CAAC,CAAC;YACjE,CAAC,CAAC,CAAC;QACP,CAAC,CAAC,CAAC;IACP,CAAC;IAED;;OAEG;IACH,wCAAkB,GAAlB,UAAmB,QAAwB,EAAE,YAAiB,EAAE,WAAmB;QAC/E,IAAI,CAAC,YAAY,EAAE;YACf,OAAO,SAAS,CAAC;SACpB;QAED,IAAI,YAAY,CAAC,QAAQ,KAAK,SAAS,EAAE;YACrC,OAAO,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,MAAM,CAAC,UAAC,GAAG,EAAE,GAAG;gBAC7C,IAAM,MAAM,GAAG,QAAQ,CAAC,0BAA0B,CAAC,GAAG,CAAC,CAAC;gBACxD,IAAI,MAAM,EAAE;oBACR,QAAQ,CAAC,SAAS,CAAC,GAAG,EAAE,MAAM,CAAC,cAAc,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;oBAClE,8KAA8K;iBACjL;gBACD,OAAO,GAAG,CAAC;YACf,CAAC,EAAE,EAAmB,CAAC,CAAC;SAC3B;QAED,IAAM,YAAY,GAAG,QAAQ,CAAC,gBAAgB,CAAC,MAAM,CAAC,UAAC,GAAG,EAAE,eAAe;YACvE,IAAI,KAAU,CAAC;YACf,IAAI,eAAe,CAAC,kBAAkB,KAAK,WAAW,IAAI,YAAY,CAAC,QAAQ,EAAE;gBAC7E,qEAAqE;gBACrE,qEAAqE;gBACrE,KAAK,GAAG,YAAY,CAAC,QAAQ,GAAG,WAAW,CAAC;gBAChD,8DAA8D;gBAC9D,sEAAsE;gBACtE,uDAAuD;aACtD;YAED,OAAO,QAAQ,CAAC,SAAS,CAAC,GAAG,EAAE,eAAe,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC,CAAC;QAC1E,CAAC,EAAE,EAAmB,CAAC,CAAC;QAExB,OAAO,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,SAAS,CAAC;IAC3E,CAAC;IAED;;;OAGG;IACH,wCAAkB,GAAlB,UAAmB,YAA2B,EAAE,eAAiC;QAAjF,iBAqDC;QApDG,OAAO,eAAe,CAAC,MAAM,CAAC,UAAA,cAAc;YACxC,IAAM,WAAW,GAAG,YAAY,CAAC,IAAI,CAAC,UAAA,CAAC,IAAI,OAAA,CAAC,CAAC,IAAI,KAAK,cAAc,CAAC,YAAY,EAAtC,CAAsC,CAAC,CAAC;YACnF,IAAI,CAAC,WAAW;gBACZ,OAAO,KAAK,CAAC,CAAC,4DAA4D;YAE9E,IAAM,eAAe,GAAG,WAAW,CAAC,IAAI,KAAK,cAAc,CAAC,YAAY;mBACjE,WAAW,CAAC,IAAI,KAAK,KAAI,CAAC,aAAa,CAAC,cAAc,CAAC;mBACvD,WAAW,CAAC,MAAM,KAAK,KAAI,CAAC,eAAe,CAAC,cAAc,CAAC;mBAC3D,WAAW,CAAC,KAAK,KAAK,cAAc,CAAC,KAAK;mBAC1C,CAAC,cAAc,CAAC,SAAS,KAAK,SAAS,IAAI,WAAW,CAAC,SAAS,KAAK,cAAc,CAAC,SAAS,CAAC;mBAC9F,CAAC,cAAc,CAAC,KAAK,KAAK,SAAS,IAAI,WAAW,CAAC,KAAK,KAAK,cAAc,CAAC,KAAK,CAAC;mBAClF,WAAW,CAAC,QAAQ,KAAK,cAAc,CAAC,QAAQ;mBAChD,WAAW,CAAC,QAAQ,KAAK,cAAc,CAAC,QAAQ;mBAChD,WAAW,CAAC,YAAY,KAAK,cAAc,CAAC,YAAY;mBACxD,WAAW,CAAC,aAAa,KAAK,cAAc,CAAC,aAAa;mBAC1D,WAAW,CAAC,OAAO,KAAK,KAAI,CAAC,aAAa,CAAC,cAAc,CAAC,OAAO,CAAC;mBAClE,CAAC,KAAI,CAAC,oBAAoB,CAAC,KAAI,CAAC,gBAAgB,CAAC,cAAc,CAAC,EAAE,WAAW,CAAC,OAAO,CAAC;mBACtF,CAAC,WAAW,CAAC,IAAI,IAAI,cAAc,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,WAAW,CAAC,IAAI,EAAE,cAAc,CAAC,IAAI,CAAC,GAAG,CAAC,UAAA,GAAG,IAAI,OAAA,GAAG,GAAG,EAAE,EAAR,CAAQ,CAAC,CAAC,CAAC;mBAChI,WAAW,CAAC,QAAQ,KAAK,KAAI,CAAC,yBAAyB,CAAC,cAAc,CAAC,QAAQ,CAAC;mBAChF,WAAW,CAAC,SAAS,KAAK,cAAc,CAAC,SAAS;mBAClD,WAAW,CAAC,UAAU,KAAK,cAAc,CAAC,UAAU;mBACpD,WAAW,CAAC,QAAQ,KAAK,KAAI,CAAC,iBAAiB,CAAC,cAAc,CAAC;mBAC/D,CAAC,cAAc,CAAC,kBAAkB,KAAK,MAAM,IAAI,WAAW,CAAC,WAAW,KAAK,cAAc,CAAC,WAAW,CAAC,CAAC;YAEhH,gBAAgB;YAChB,yBAAyB;YACzB,sEAAsE;YACtE,2EAA2E;YAC3E,kFAAkF;YAClF,yEAAyE;YACzE,sEAAsE;YACtE,kFAAkF;YAClF,sEAAsE;YACtE,+EAA+E;YAC/E,+EAA+E;YAC/E,2FAA2F;YAC3F,8FAA8F;YAC9F,gGAAgG;YAChG,2FAA2F;YAC3F,mEAAmE;YACnE,+HAA+H;YAC/H,uGAAuG;YACvG,kFAAkF;YAClF,qFAAqF;YACrF,8FAA8F;YAC9F,wFAAwF;YACxF,6HAA6H;YAC7H,iEAAiE;YACjE,IAAI;YAEJ,OAAO,eAAe,CAAC;QAC3B,CAAC,CAAC,CAAC;IACP,CAAC;IAED;;OAEG;IACH,6CAAuB,GAAvB,UAAwB,aAA4B;QAChD,OAAO,IAAI,CAAC,wBAAwB,CAAC,aAAa,CAAC,CAAC;IACxD,CAAC;IAED;;OAEG;IACH,+CAAyB,GAAzB;QACI,OAAO,KAAK,CAAC;IACjB,CAAC;IAED;;OAEG;IACH,mDAA6B,GAA7B;QACI,OAAO,IAAI,CAAC;IAChB,CAAC;IAED;;OAEG;IACH,qCAAe,GAAf,UAAgB,aAAqB,EAAE,KAAa;QAChD,OAAO,GAAG,CAAC;IACf,CAAC;IAED,4EAA4E;IAC5E,oBAAoB;IACpB,4EAA4E;IAE5E;;OAEG;IACO,sCAAgB,GAA1B;QACI,IAAI;YACA,sCAAsC;YACtC,IAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,IAAI,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YACjE,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;YACnB;;;;;;eAMG;YACH,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE;gBACtC,MAAM,IAAI,YAAY,CAAC,8DAA8D,CAAC,CAAC;aAC1F;SACJ;QAAC,OAAO,CAAC,EAAE;YACR,IAAI;gBACA,IAAI,CAAC,KAAK,GAAG,aAAa,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,uCAAuC;aAErF;YAAC,OAAO,CAAC,EAAE;gBACR,MAAM,IAAI,8BAA8B,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;aAC9D;SACJ;IACL,CAAC;IAED;;OAEG;IACO,6CAAuB,GAAjC,UAAkC,OAA+B,EAAE,WAA8C;QAE7G,WAAW,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,WAAW,EAAE,WAAW,CAAC,kBAAkB,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,yBAAyB;QAEpH,0CAA0C;QAC1C,OAAO,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE;YACrB,OAAO,EAAE,OAAO,CAAC,OAAO;YACxB,QAAQ,EAAE,OAAO,CAAC,QAAQ;YAC1B,cAAc,EAAE,OAAO,CAAC,cAAc;YACtC,YAAY,EAAE,OAAO,CAAC,YAAY;YAClC,iBAAiB,EAAE,OAAO,CAAC,iBAAiB,KAAK,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC,CAAC,IAAI;YAC7F,gBAAgB,EAAE,OAAO,CAAC,gBAAgB,KAAK,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC,CAAC,IAAI;YAC1F,WAAW,EAAE,OAAO,CAAC,WAAW;YAChC,KAAK,EAAE,OAAO,CAAC,KAAK;YACpB,KAAK,EAAE,OAAO,CAAC,KAAK;YACpB,kBAAkB,EAAE,OAAO,CAAC,kBAAkB;YAC9C,KAAK,EAAE,OAAO,CAAC,KAAK;SACvB,EAAE;YACC,IAAI,EAAE,WAAW,CAAC,IAAI;YACtB,IAAI,EAAE,WAAW,CAAC,QAAQ;YAC1B,QAAQ,EAAE,WAAW,CAAC,QAAQ;YAC9B,QAAQ,EAAE,WAAW,CAAC,QAAQ;YAC9B,IAAI,EAAE,WAAW,CAAC,IAAI;YACtB,GAAG,EAAE,OAAO,CAAC,GAAG;YAChB,UAAU,EAAE,WAAW,CAAC,UAAU;SACrC,EACD,OAAO,CAAC,cAAc,KAAK,SAAS;YAChC,CAAC,CAAC,EAAE;YACJ,CAAC,CAAC,EAAE,cAAc,EAAE,OAAO,CAAC,cAAc,EAAE,EAChD,OAAO,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC;IACzB,CAAC;IAED;;OAEG;IACO,gCAAU,GAApB,UAAqB,iBAAsB;QAEvC,2BAA2B;QAC3B,IAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,iBAAiB,CAAC,CAAC;QAEtD,uCAAuC;QACvC,OAAO,IAAI,OAAO,CAAO,UAAC,EAAE,EAAE,IAAI;YAC9B,qGAAqG;YACrG,iFAAiF;YACjF,IAAI,CAAC,aAAa,CAAC,UAAC,GAAQ,EAAE,UAAe;gBACzC,IAAI,GAAG;oBACH,OAAO,IAAI,CAAC,GAAG,CAAC,cAAM,OAAA,IAAI,CAAC,GAAG,CAAC,EAAT,CAAS,CAAC,CAAC;gBAErC,UAAU,CAAC,OAAO,EAAE,CAAC;gBACrB,EAAE,CAAC,IAAI,CAAC,CAAC;YACb,CAAC,CAAC,CAAC;QACP,CAAC,CAAC,CAAC;IACP,CAAC;IAED;;OAEG;IACK,yCAAmB,GAA3B,UAA4B,UAAe;QAC/B,IAAA,MAAM,GAAK,IAAI,CAAC,UAAU,OAApB,CAAqB;QACnC;;;WAGG;QACH,IAAI,UAAU,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE;YAC5C,UAAU,CAAC,EAAE,CAAC,OAAO,EAAE,UAAC,KAAU,IAAK,OAAA,MAAM,CAAC,GAAG,CAAC,MAAM,EAAE,uCAAqC,KAAO,CAAC,EAAhE,CAAgE,CAAC,CAAC;SAC5G;QACD,OAAO,UAAU,CAAC;IACtB,CAAC;IAED;;OAEG;IACO,0CAAoB,GAA9B,UAA+B,mBAAuC,EAAE,aAAiC;QACrG,IAAI,OAAO,mBAAmB,KAAK,QAAQ,IAAI,OAAO,aAAa,KAAK,QAAQ,EAAE;YAC9E,qGAAqG;YACrG,0EAA0E;YAC1E,mBAAmB,GAAG,mBAAmB,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;YAClE,aAAa,GAAG,aAAa,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;SACzD;QAED,OAAO,mBAAmB,KAAK,aAAa,CAAC;IACjD,CAAC;IAED;;;OAGG;IACO,+CAAyB,GAAnC,UAAoC,KAAc;QAC9C,IAAI,CAAC,KAAK;YAAE,OAAO,KAAK,CAAC;QAEzB,sCAAsC;QACtC,IAAM,kBAAkB,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAC;eAC3E,KAAK,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;QAEjD,IAAI,kBAAkB,EAAE;YACpB,gCAAgC;YAChC,IAAM,SAAS,GAAG,KAAK,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;YACzC,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,KAAK,SAAS,EAAE;gBACjC,OAAO,SAAS,CAAC,CAAC,CAAC,sBAAoB,SAAS,CAAC,CAAC,CAAG,CAAC,CAAC,CAAC,qBAAqB,CAAC;aACjF;iBAAM;gBACH,OAAO,SAAS,CAAC,CAAC,CAAC,sBAAoB,SAAS,CAAC,CAAC,CAAG,CAAC,CAAC,CAAC,mBAAmB,CAAC;aAC/E;SACJ;aAAM;YACH,OAAO,KAAK,CAAC;SAChB;IACL,CAAC;IAED;;OAEG;IACO,mCAAa,GAAvB,UAAwB,OAAgB;QACpC,IAAI,CAAC,OAAO;YAAG,OAAO,OAAO,CAAC;QAE9B,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC,CAAC,wCAAwC;QAElF,OAAO,OAAO,CAAC;IACnB,CAAC;IAEL,kBAAC;AAAD,CAviCA,AAuiCC,IAAA","file":"MysqlDriver.js","sourcesContent":["import {Driver, ReturningType} from \"../Driver\";\nimport {ConnectionIsNotSetError} from \"../../error/ConnectionIsNotSetError\";\nimport {DriverPackageNotInstalledError} from \"../../error/DriverPackageNotInstalledError\";\nimport {DriverUtils} from \"../DriverUtils\";\nimport {MysqlQueryRunner} from \"./MysqlQueryRunner\";\nimport {ObjectLiteral} from \"../../common/ObjectLiteral\";\nimport {ColumnMetadata} from \"../../metadata/ColumnMetadata\";\nimport {DateUtils} from \"../../util/DateUtils\";\nimport {PlatformTools} from \"../../platform/PlatformTools\";\nimport {Connection} from \"../../connection/Connection\";\nimport {RdbmsSchemaBuilder} from \"../../schema-builder/RdbmsSchemaBuilder\";\nimport {MysqlConnectionOptions} from \"./MysqlConnectionOptions\";\nimport {MappedColumnTypes} from \"../types/MappedColumnTypes\";\nimport {ColumnType} from \"../types/ColumnTypes\";\nimport {DataTypeDefaults} from \"../types/DataTypeDefaults\";\nimport {TableColumn} from \"../../schema-builder/table/TableColumn\";\nimport {MysqlConnectionCredentialsOptions} from \"./MysqlConnectionCredentialsOptions\";\nimport {EntityMetadata} from \"../../metadata/EntityMetadata\";\nimport {OrmUtils} from \"../../util/OrmUtils\";\nimport {ApplyValueTransformers} from \"../../util/ApplyValueTransformers\";\nimport {ReplicationMode} from \"../types/ReplicationMode\";\nimport {TypeORMError} from \"../../error\";\nimport {Table} from \"../../schema-builder/table/Table\";\nimport {View} from \"../../schema-builder/view/View\";\nimport {TableForeignKey} from \"../../schema-builder/table/TableForeignKey\";\nimport {VersionUtils} from \"../../util/VersionUtils\";\n\n/**\n * Organizes communication with MySQL DBMS.\n */\nexport class MysqlDriver implements Driver {\n\n // -------------------------------------------------------------------------\n // Public Properties\n // -------------------------------------------------------------------------\n\n /**\n * Connection used by driver.\n */\n connection: Connection;\n\n /**\n * Mysql underlying library.\n */\n mysql: any;\n\n /**\n * Connection pool.\n * Used in non-replication mode.\n */\n pool: any;\n\n /**\n * Pool cluster used in replication mode.\n */\n poolCluster: any;\n\n // -------------------------------------------------------------------------\n // Public Implemented Properties\n // -------------------------------------------------------------------------\n\n /**\n * Connection options.\n */\n options: MysqlConnectionOptions;\n\n /**\n * Master database used to perform all write queries.\n */\n database?: string;\n\n /**\n * Indicates if replication is enabled.\n */\n isReplicated: boolean = false;\n\n /**\n * Indicates if tree tables are supported by this driver.\n */\n treeSupport = true;\n\n /**\n * Gets list of supported column data types by a driver.\n *\n * @see https://www.tutorialspoint.com/mysql/mysql-data-types.htm\n * @see https://dev.mysql.com/doc/refman/8.0/en/data-types.html\n */\n supportedDataTypes: ColumnType[] = [\n // numeric types\n \"bit\",\n \"int\",\n \"integer\", // synonym for int\n \"tinyint\",\n \"smallint\",\n \"mediumint\",\n \"bigint\",\n \"float\",\n \"double\",\n \"double precision\", // synonym for double\n \"real\", // synonym for double\n \"decimal\",\n \"dec\", // synonym for decimal\n \"numeric\", // synonym for decimal\n \"fixed\", // synonym for decimal\n \"bool\", // synonym for tinyint\n \"boolean\", // synonym for tinyint\n // date and time types\n \"date\",\n \"datetime\",\n \"timestamp\",\n \"time\",\n \"year\",\n // string types\n \"char\",\n \"nchar\", // synonym for national char\n \"national char\",\n \"varchar\",\n \"nvarchar\", // synonym for national varchar\n \"national varchar\",\n \"blob\",\n \"text\",\n \"tinyblob\",\n \"tinytext\",\n \"mediumblob\",\n \"mediumtext\",\n \"longblob\",\n \"longtext\",\n \"enum\",\n \"set\",\n \"binary\",\n \"varbinary\",\n // json data type\n \"json\",\n // spatial data types\n \"geometry\",\n \"point\",\n \"linestring\",\n \"polygon\",\n \"multipoint\",\n \"multilinestring\",\n \"multipolygon\",\n \"geometrycollection\"\n ];\n\n /**\n * Returns type of upsert supported by driver if any\n */\n readonly supportedUpsertType = \"on-duplicate-key-update\";\n\n /**\n * Gets list of spatial column data types.\n */\n spatialTypes: ColumnType[] = [\n \"geometry\",\n \"point\",\n \"linestring\",\n \"polygon\",\n \"multipoint\",\n \"multilinestring\",\n \"multipolygon\",\n \"geometrycollection\"\n ];\n\n /**\n * Gets list of column data types that support length by a driver.\n */\n withLengthColumnTypes: ColumnType[] = [\n \"char\",\n \"varchar\",\n \"nvarchar\",\n \"binary\",\n \"varbinary\"\n ];\n\n /**\n * Gets list of column data types that support length by a driver.\n */\n withWidthColumnTypes: ColumnType[] = [\n \"bit\",\n \"tinyint\",\n \"smallint\",\n \"mediumint\",\n \"int\",\n \"integer\",\n \"bigint\"\n ];\n\n /**\n * Gets list of column data types that support precision by a driver.\n */\n withPrecisionColumnTypes: ColumnType[] = [\n \"decimal\",\n \"dec\",\n \"numeric\",\n \"fixed\",\n \"float\",\n \"double\",\n \"double precision\",\n \"real\",\n \"time\",\n \"datetime\",\n \"timestamp\"\n ];\n\n /**\n * Gets list of column data types that supports scale by a driver.\n */\n withScaleColumnTypes: ColumnType[] = [\n \"decimal\",\n \"dec\",\n \"numeric\",\n \"fixed\",\n \"float\",\n \"double\",\n \"double precision\",\n \"real\"\n ];\n\n /**\n * Gets list of column data types that supports UNSIGNED and ZEROFILL attributes.\n */\n unsignedAndZerofillTypes: ColumnType[] = [\n \"int\",\n \"integer\",\n \"smallint\",\n \"tinyint\",\n \"mediumint\",\n \"bigint\",\n \"decimal\",\n \"dec\",\n \"numeric\",\n \"fixed\",\n \"float\",\n \"double\",\n \"double precision\",\n \"real\"\n ];\n\n /**\n * ORM has special columns and we need to know what database column types should be for those columns.\n * Column types are driver dependant.\n */\n mappedDataTypes: MappedColumnTypes = {\n createDate: \"datetime\",\n createDatePrecision: 6,\n createDateDefault: \"CURRENT_TIMESTAMP(6)\",\n updateDate: \"datetime\",\n updateDatePrecision: 6,\n updateDateDefault: \"CURRENT_TIMESTAMP(6)\",\n deleteDate: \"datetime\",\n deleteDatePrecision: 6,\n deleteDateNullable: true,\n version: \"int\",\n treeLevel: \"int\",\n migrationId: \"int\",\n migrationName: \"varchar\",\n migrationTimestamp: \"bigint\",\n cacheId: \"int\",\n cacheIdentifier: \"varchar\",\n cacheTime: \"bigint\",\n cacheDuration: \"int\",\n cacheQuery: \"text\",\n cacheResult: \"text\",\n metadataType: \"varchar\",\n metadataDatabase: \"varchar\",\n metadataSchema: \"varchar\",\n metadataTable: \"varchar\",\n metadataName: \"varchar\",\n metadataValue: \"text\",\n };\n\n /**\n * Default values of length, precision and scale depends on column data type.\n * Used in the cases when length/precision/scale is not specified by user.\n */\n dataTypeDefaults: DataTypeDefaults = {\n \"varchar\": { length: 255 },\n \"nvarchar\": { length: 255 },\n \"national varchar\": { length: 255 },\n \"char\": { length: 1 },\n \"binary\": { length: 1 },\n \"varbinary\": { length: 255 },\n \"decimal\": { precision: 10, scale: 0 },\n \"dec\": { precision: 10, scale: 0 },\n \"numeric\": { precision: 10, scale: 0 },\n \"fixed\": { precision: 10, scale: 0 },\n \"float\": { precision: 12 },\n \"double\": { precision: 22 },\n \"time\": { precision: 0 },\n \"datetime\": { precision: 0 },\n \"timestamp\": { precision: 0 },\n \"bit\": { width: 1 },\n \"int\": { width: 11 },\n \"integer\": { width: 11 },\n \"tinyint\": { width: 4 },\n \"smallint\": { width: 6 },\n \"mediumint\": { width: 9 },\n \"bigint\": { width: 20 }\n };\n\n\n /**\n * Max length allowed by MySQL for aliases.\n * @see https://dev.mysql.com/doc/refman/5.5/en/identifiers.html\n */\n maxAliasLength = 63;\n\n\n /**\n * Supported returning types\n */\n private readonly _isReturningSqlSupported: Record<ReturningType, boolean> = {\n delete: false,\n insert: false,\n update: false,\n };\n\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n\n constructor(connection: Connection) {\n this.connection = connection;\n this.options = {\n legacySpatialSupport: true,\n ...connection.options\n } as MysqlConnectionOptions;\n this.isReplicated = this.options.replication ? true : false;\n\n // load mysql package\n this.loadDependencies();\n\n this.database = DriverUtils.buildDriverOptions(this.options.replication ? this.options.replication.master : this.options).database;\n\n // validate options to make sure everything is set\n // todo: revisit validation with replication in mind\n // if (!(this.options.host || (this.options.extra && this.options.extra.socketPath)) && !this.options.socketPath)\n // throw new DriverOptionNotSetError(\"socketPath and host\");\n // if (!this.options.username)\n // throw new DriverOptionNotSetError(\"username\");\n // if (!this.options.database)\n // throw new DriverOptionNotSetError(\"database\");\n // todo: check what is going on when connection is setup without database and how to connect to a database then?\n // todo: provide options to auto-create a database if it does not exist yet\n }\n\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n\n /**\n * Performs connection to the database.\n */\n async connect(): Promise<void> {\n\n if (this.options.replication) {\n this.poolCluster = this.mysql.createPoolCluster(this.options.replication);\n this.options.replication.slaves.forEach((slave, index) => {\n this.poolCluster.add(\"SLAVE\" + index, this.createConnectionOptions(this.options, slave));\n });\n this.poolCluster.add(\"MASTER\", this.createConnectionOptions(this.options, this.options.replication.master));\n\n } else {\n this.pool = await this.createPool(this.createConnectionOptions(this.options, this.options));\n }\n\n if (!this.database) {\n const queryRunner = await this.createQueryRunner(\"master\");\n\n this.database = await queryRunner.getCurrentDatabase();\n\n await queryRunner.release();\n }\n\n if (this.options.type === \"mariadb\") {\n const result = await this.createQueryRunner(\"master\")\n .query(`SELECT VERSION() AS \\`version\\``) as { version: string; }[];\n const dbVersion = result[0].version;\n\n if (VersionUtils.isGreaterOrEqual(dbVersion, \"10.0.5\")) {\n this._isReturningSqlSupported.delete = true;\n }\n if (VersionUtils.isGreaterOrEqual(dbVersion, \"10.5.0\")) {\n this._isReturningSqlSupported.insert = true;\n }\n }\n }\n\n /**\n * Makes any action after connection (e.g. create extensions in Postgres driver).\n */\n afterConnect(): Promise<void> {\n return Promise.resolve();\n }\n\n /**\n * Closes connection with the database.\n */\n async disconnect(): Promise<void> {\n if (!this.poolCluster && !this.pool)\n return Promise.reject(new ConnectionIsNotSetError(\"mysql\"));\n\n if (this.poolCluster) {\n return new Promise<void>((ok, fail) => {\n this.poolCluster.end((err: any) => err ? fail(err) : ok());\n this.poolCluster = undefined;\n });\n }\n if (this.pool) {\n return new Promise<void>((ok, fail) => {\n this.pool.end((err: any) => {\n if (err) return fail(err);\n this.pool = undefined;\n ok();\n });\n });\n }\n }\n\n /**\n * Creates a schema builder used to build and sync a schema.\n */\n createSchemaBuilder() {\n return new RdbmsSchemaBuilder(this.connection);\n }\n\n /**\n * Creates a query runner used to execute database queries.\n */\n createQueryRunner(mode: ReplicationMode) {\n return new MysqlQueryRunner(this, mode);\n }\n\n /**\n * Replaces parameters in the given sql with special escaping character\n * and an array of parameter names to be passed to a query.\n */\n escapeQueryWithParameters(sql: string, parameters: ObjectLiteral, nativeParameters: ObjectLiteral): [string, any[]] {\n const escapedParameters: any[] = Object.keys(nativeParameters).map(key => nativeParameters[key]);\n if (!parameters || !Object.keys(parameters).length)\n return [sql, escapedParameters];\n\n sql = sql.replace(/:(\\.\\.\\.)?([A-Za-z0-9_.]+)/g, (full, isArray: string, key: string): string => {\n if (!parameters.hasOwnProperty(key)) {\n return full;\n }\n\n let value: any = parameters[key];\n\n if (isArray) {\n return value.map((v: any) => {\n escapedParameters.push(v);\n return this.createParameter(key, escapedParameters.length - 1);\n }).join(\", \");\n\n }\n\n if (value instanceof Function) {\n return value();\n\n }\n\n escapedParameters.push(value);\n return this.createParameter(key, escapedParameters.length - 1);\n }); // todo: make replace only in value statements, otherwise problems\n return [sql, escapedParameters];\n }\n\n /**\n * Escapes a column name.\n */\n escape(columnName: string): string {\n return \"`\" + columnName + \"`\";\n }\n\n /**\n * Build full table name with database name, schema name and table name.\n * E.g. myDB.mySchema.myTable\n */\n buildTableName(tableName: string, schema?: string, database?: string): string {\n let tablePath = [ tableName ];\n\n if (database) {\n tablePath.unshift(database);\n }\n\n return tablePath.join(\".\");\n }\n\n /**\n * Parse a target table name or other types and return a normalized table definition.\n */\n parseTableName(target: EntityMetadata | Table | View | TableForeignKey | string): { database?: string, schema?: string, tableName: string } {\n const driverDatabase = this.database;\n const driverSchema = undefined;\n\n if (target instanceof Table || target instanceof View) {\n const parsed = this.parseTableName(target.name);\n\n return {\n database: target.database || parsed.database || driverDatabase,\n schema: target.schema || parsed.schema || driverSchema,\n tableName: parsed.tableName\n };\n }\n\n if (target instanceof TableForeignKey) {\n const parsed = this.parseTableName(target.referencedTableName);\n\n return {\n database: target.referencedDatabase || parsed.database || driverDatabase,\n schema: target.referencedSchema || parsed.schema || driverSchema,\n tableName: parsed.tableName\n };\n }\n\n if (target instanceof EntityMetadata) {\n // EntityMetadata tableName is never a path\n\n return {\n database: target.database || driverDatabase,\n schema: target.schema || driverSchema,\n tableName: target.tableName\n };\n\n }\n\n const parts = target.split(\".\");\n\n return {\n database: (parts.length > 1 ? parts[0] : undefined) || driverDatabase,\n schema: driverSchema,\n tableName: parts.length > 1 ? parts[1] : parts[0]\n };\n }\n\n /**\n * Prepares given value to a value to be persisted, based on its column type and metadata.\n */\n preparePersistentValue(value: any, columnMetadata: ColumnMetadata): any {\n if (columnMetadata.transformer)\n value = ApplyValueTransformers.transformTo(columnMetadata.transformer, value);\n\n if (value === null || value === undefined)\n return value;\n\n if (columnMetadata.type === Boolean) {\n return value === true ? 1 : 0;\n\n } else if (columnMetadata.type === \"date\") {\n return DateUtils.mixedDateToDateString(value);\n\n } else if (columnMetadata.type === \"time\") {\n return DateUtils.mixedDateToTimeString(value);\n\n } else if (columnMetadata.type === \"json\") {\n return JSON.stringify(value);\n\n } else if (columnMetadata.type === \"timestamp\" || columnMetadata.type === \"datetime\" || columnMetadata.type === Date) {\n return DateUtils.mixedDateToDate(value);\n\n } else if (columnMetadata.type === \"simple-array\") {\n return DateUtils.simpleArrayToString(value);\n\n } else if (columnMetadata.type === \"simple-json\") {\n return DateUtils.simpleJsonToString(value);\n\n } else if (columnMetadata.type === \"enum\" || columnMetadata.type === \"simple-enum\") {\n return \"\" + value;\n\n } else if (columnMetadata.type === \"set\") {\n return DateUtils.simpleArrayToString(value);\n }\n\n return value;\n }\n\n /**\n * Prepares given value to a value to be persisted, based on its column type or metadata.\n */\n prepareHydratedValue(value: any, columnMetadata: ColumnMetadata): any {\n if (value === null || value === undefined)\n return columnMetadata.transformer ? ApplyValueTransformers.transformFrom(columnMetadata.transformer, value) : value;\n\n if (columnMetadata.type === Boolean || columnMetadata.type === \"bool\" || columnMetadata.type === \"boolean\") {\n value = value ? true : false;\n\n } else if (columnMetadata.type === \"datetime\" || columnMetadata.type === Date) {\n value = DateUtils.normalizeHydratedDate(value);\n\n } else if (columnMetadata.type === \"date\") {\n value = DateUtils.mixedDateToDateString(value);\n\n } else if (columnMetadata.type === \"json\") {\n value = typeof value === \"string\" ? JSON.parse(value) : value;\n\n } else if (columnMetadata.type === \"time\") {\n value = DateUtils.mixedTimeToString(value);\n\n } else if (columnMetadata.type === \"simple-array\") {\n value = DateUtils.stringToSimpleArray(value);\n\n } else if (columnMetadata.type === \"simple-json\") {\n value = DateUtils.stringToSimpleJson(value);\n\n } else if ((columnMetadata.type === \"enum\" || columnMetadata.type === \"simple-enum\")\n && columnMetadata.enum\n && !isNaN(value)\n && columnMetadata.enum.indexOf(parseInt(value)) >= 0) {\n // convert to number if that exists in possible enum options\n value = parseInt(value);\n } else if (columnMetadata.type === \"set\") {\n value = DateUtils.stringToSimpleArray(value);\n }\n\n if (columnMetadata.transformer)\n value = ApplyValueTransformers.transformFrom(columnMetadata.transformer, value);\n\n return value;\n }\n\n /**\n * Creates a database type from a given column metadata.\n */\n normalizeType(column: { type: ColumnType, length?: number|string, precision?: number|null, scale?: number }): string {\n if (column.type === Number || column.type === \"integer\") {\n return \"int\";\n\n } else if (column.type === String) {\n return \"varchar\";\n\n } else if (column.type === Date) {\n return \"datetime\";\n\n } else if ((column.type as any) === Buffer) {\n return \"blob\";\n\n } else if (column.type === Boolean) {\n return \"tinyint\";\n\n } else if (column.type === \"uuid\") {\n return \"varchar\";\n\n } else if (column.type === \"json\" && this.options.type === \"mariadb\") {\n /*\n * MariaDB implements this as a LONGTEXT rather, as the JSON data type contradicts the SQL standard,\n * and MariaDB's benchmarks indicate that performance is at least equivalent.\n *\n * @see https://mariadb.com/kb/en/json-data-type/\n */\n return \"longtext\";\n\n } else if (column.type === \"simple-array\" || column.type === \"simple-json\") {\n return \"text\";\n\n } else if (column.type === \"simple-enum\") {\n return \"enum\";\n\n } else if (column.type === \"double precision\" || column.type === \"real\") {\n return \"double\";\n\n } else if (column.type === \"dec\" || column.type === \"numeric\" || column.type === \"fixed\") {\n return \"decimal\";\n\n } else if (column.type === \"bool\" || column.type === \"boolean\") {\n return \"tinyint\";\n\n } else if (column.type === \"nvarchar\" || column.type === \"national varchar\") {\n return \"varchar\";\n\n } else if (column.type === \"nchar\" || column.type === \"national char\") {\n return \"char\";\n\n } else {\n return column.type as string || \"\";\n }\n }\n\n /**\n * Normalizes \"default\" value of the column.\n */\n normalizeDefault(columnMetadata: ColumnMetadata): string | undefined {\n const defaultValue = columnMetadata.default;\n\n if (defaultValue === null) {\n return undefined;\n }\n\n if (\n (columnMetadata.type === \"enum\"\n || columnMetadata.type === \"simple-enum\"\n || typeof defaultValue === \"string\")\n && defaultValue !== undefined) {\n return `'${defaultValue}'`;\n }\n\n if ((columnMetadata.type === \"set\") && defaultValue !== undefined) {\n return `'${DateUtils.simpleArrayToString(defaultValue)}'`;\n }\n\n if (typeof defaultValue === \"number\") {\n return `'${defaultValue.toFixed(columnMetadata.scale)}'`;\n }\n\n if (typeof defaultValue === \"boolean\") {\n return defaultValue ? \"1\" : \"0\";\n }\n\n if (typeof defaultValue === \"function\") {\n const value = defaultValue();\n return this.normalizeDatetimeFunction(value);\n }\n\n if (defaultValue === undefined) {\n return undefined;\n }\n\n return `${defaultValue}`;\n }\n\n /**\n * Normalizes \"isUnique\" value of the column.\n */\n normalizeIsUnique(column: ColumnMetadata): boolean {\n return column.entityMetadata.indices.some(idx => idx.isUnique && idx.columns.length === 1 && idx.columns[0] === column);\n }\n\n /**\n * Returns default column lengths, which is required on column creation.\n */\n getColumnLength(column: ColumnMetadata|TableColumn): string {\n if (column.length)\n return column.length.toString();\n\n /**\n * fix https://github.com/typeorm/typeorm/issues/1139\n */\n if (column.generationStrategy === \"uuid\")\n return \"36\";\n\n switch (column.type) {\n case String:\n case \"varchar\":\n case \"nvarchar\":\n case \"national varchar\":\n return \"255\";\n case \"varbinary\":\n return \"255\";\n default:\n return \"\";\n }\n }\n\n /**\n * Creates column type definition including length, precision and scale\n */\n createFullType(column: TableColumn): string {\n let type = column.type;\n\n // used 'getColumnLength()' method, because MySQL requires column length for `varchar`, `nvarchar` and `varbinary` data types\n if (this.getColumnLength(column)) {\n type += `(${this.getColumnLength(column)})`;\n\n } else if (column.width) {\n type += `(${column.width})`;\n\n } else if (column.precision !== null && column.precision !== undefined && column.scale !== null && column.scale !== undefined) {\n type += `(${column.precision},${column.scale})`;\n\n } else if (column.precision !== null && column.precision !== undefined) {\n type += `(${column.precision})`;\n }\n\n if (column.isArray)\n type += \" array\";\n\n return type;\n }\n\n /**\n * Obtains a new database connection to a master server.\n * Used for replication.\n * If replication is not setup then returns default connection's database connection.\n */\n obtainMasterConnection(): Promise<any> {\n return new Promise<any>((ok, fail) => {\n if (this.poolCluster) {\n this.poolCluster.getConnection(\"MASTER\", (err: any, dbConnection: any) => {\n err ? fail(err) : ok(this.prepareDbConnection(dbConnection));\n });\n\n } else if (this.pool) {\n this.pool.getConnection((err: any, dbConnection: any) => {\n err ? fail(err) : ok(this.prepareDbConnection(dbConnection));\n });\n } else {\n fail(new TypeORMError(`Connection is not established with mysql database`));\n }\n });\n }\n\n /**\n * Obtains a new database connection to a slave server.\n * Used for replication.\n * If replication is not setup then returns master (default) connection's database connection.\n */\n obtainSlaveConnection(): Promise<any> {\n if (!this.poolCluster)\n return this.obtainMasterConnection();\n\n return new Promise<any>((ok, fail) => {\n this.poolCluster.getConnection(\"SLAVE*\", (err: any, dbConnection: any) => {\n err ? fail(err) : ok(this.prepareDbConnection(dbConnection));\n });\n });\n }\n\n /**\n * Creates generated map of values generated or returned by database after INSERT query.\n */\n createGeneratedMap(metadata: EntityMetadata, insertResult: any, entityIndex: number) {\n if (!insertResult) {\n return undefined;\n }\n\n if (insertResult.insertId === undefined) {\n return Object.keys(insertResult).reduce((map, key) => {\n const column = metadata.findColumnWithDatabaseName(key);\n if (column) {\n OrmUtils.mergeDeep(map, column.createValueMap(insertResult[key]));\n // OrmUtils.mergeDeep(map, column.createValueMap(this.prepareHydratedValue(insertResult[key], column))); // TODO: probably should be like there, but fails on enums, fix later\n }\n return map;\n }, {} as ObjectLiteral);\n }\n\n const generatedMap = metadata.generatedColumns.reduce((map, generatedColumn) => {\n let value: any;\n if (generatedColumn.generationStrategy === \"increment\" && insertResult.insertId) {\n // NOTE: When multiple rows is inserted by a single INSERT statement,\n // `insertId` is the value generated for the first inserted row only.\n value = insertResult.insertId + entityIndex;\n // } else if (generatedColumn.generationStrategy === \"uuid\") {\n // console.log(\"getting db value:\", generatedColumn.databaseName);\n // value = generatedColumn.getEntityValue(uuidMap);\n }\n\n return OrmUtils.mergeDeep(map, generatedColumn.createValueMap(value));\n }, {} as ObjectLiteral);\n\n return Object.keys(generatedMap).length > 0 ? generatedMap : undefined;\n }\n\n /**\n * Differentiate columns of this table and columns from the given column metadatas columns\n * and returns only changed.\n */\n findChangedColumns(tableColumns: TableColumn[], columnMetadatas: ColumnMetadata[]): ColumnMetadata[] {\n return columnMetadatas.filter(columnMetadata => {\n const tableColumn = tableColumns.find(c => c.name === columnMetadata.databaseName);\n if (!tableColumn)\n return false; // we don't need new columns, we only need exist and changed\n\n const isColumnChanged = tableColumn.name !== columnMetadata.databaseName\n || tableColumn.type !== this.normalizeType(columnMetadata)\n || tableColumn.length !== this.getColumnLength(columnMetadata)\n || tableColumn.width !== columnMetadata.width\n || (columnMetadata.precision !== undefined && tableColumn.precision !== columnMetadata.precision)\n || (columnMetadata.scale !== undefined && tableColumn.scale !== columnMetadata.scale)\n || tableColumn.zerofill !== columnMetadata.zerofill\n || tableColumn.unsigned !== columnMetadata.unsigned\n || tableColumn.asExpression !== columnMetadata.asExpression\n || tableColumn.generatedType !== columnMetadata.generatedType\n || tableColumn.comment !== this.escapeComment(columnMetadata.comment)\n || !this.compareDefaultValues(this.normalizeDefault(columnMetadata), tableColumn.default)\n || (tableColumn.enum && columnMetadata.enum && !OrmUtils.isArraysEqual(tableColumn.enum, columnMetadata.enum.map(val => val + \"\")))\n || tableColumn.onUpdate !== this.normalizeDatetimeFunction(columnMetadata.onUpdate)\n || tableColumn.isPrimary !== columnMetadata.isPrimary\n || tableColumn.isNullable !== columnMetadata.isNullable\n || tableColumn.isUnique !== this.normalizeIsUnique(columnMetadata)\n || (columnMetadata.generationStrategy !== \"uuid\" && tableColumn.isGenerated !== columnMetadata.isGenerated);\n\n // DEBUG SECTION\n // if (isColumnChanged) {\n // console.log(\"table:\", columnMetadata.entityMetadata.tableName);\n // console.log(\"name:\", tableColumn.name, columnMetadata.databaseName);\n // console.log(\"type:\", tableColumn.type, this.normalizeType(columnMetadata));\n // console.log(\"length:\", tableColumn.length, columnMetadata.length);\n // console.log(\"width:\", tableColumn.width, columnMetadata.width);\n // console.log(\"precision:\", tableColumn.precision, columnMetadata.precision);\n // console.log(\"scale:\", tableColumn.scale, columnMetadata.scale);\n // console.log(\"zerofill:\", tableColumn.zerofill, columnMetadata.zerofill);\n // console.log(\"unsigned:\", tableColumn.unsigned, columnMetadata.unsigned);\n // console.log(\"asExpression:\", tableColumn.asExpression, columnMetadata.asExpression);\n // console.log(\"generatedType:\", tableColumn.generatedType, columnMetadata.generatedType);\n // console.log(\"comment:\", tableColumn.comment, this.escapeComment(columnMetadata.comment));\n // console.log(\"default:\", tableColumn.default, this.normalizeDefault(columnMetadata));\n // console.log(\"enum:\", tableColumn.enum, columnMetadata.enum);\n // console.log(\"default changed:\", !this.compareDefaultValues(this.normalizeDefault(columnMetadata), tableColumn.default));\n // console.log(\"onUpdate:\", tableColumn.onUpdate, this.normalizeOnUpdate(columnMetadata.onUpdate));\n // console.log(\"isPrimary:\", tableColumn.isPrimary, columnMetadata.isPrimary);\n // console.log(\"isNullable:\", tableColumn.isNullable, columnMetadata.isNullable);\n // console.log(\"isUnique:\", tableColumn.isUnique, this.normalizeIsUnique(columnMetadata));\n // console.log(\"isGenerated:\", tableColumn.isGenerated, columnMetadata.isGenerated);\n // console.log((columnMetadata.generationStrategy !== \"uuid\" && tableColumn.isGenerated !== columnMetadata.isGenerated));\n // console.log(\"==========================================\");\n // }\n\n return isColumnChanged;\n });\n }\n\n /**\n * Returns true if driver supports RETURNING / OUTPUT statement.\n */\n isReturningSqlSupported(returningType: ReturningType): boolean {\n return this._isReturningSqlSupported[returningType];\n }\n\n /**\n * Returns true if driver supports uuid values generation on its own.\n */\n isUUIDGenerationSupported(): boolean {\n return false;\n }\n\n /**\n * Returns true if driver supports fulltext indices.\n */\n isFullTextColumnTypeSupported(): boolean {\n return true;\n }\n\n /**\n * Creates an escaped parameter.\n */\n createParameter(parameterName: string, index: number): string {\n return \"?\";\n }\n\n // -------------------------------------------------------------------------\n // Protected Methods\n // -------------------------------------------------------------------------\n\n /**\n * Loads all driver dependencies.\n */\n protected loadDependencies(): void {\n try {\n // try to load first supported package\n const mysql = this.options.driver || PlatformTools.load(\"mysql\");\n this.mysql = mysql;\n /*\n * Some frameworks (such as Jest) may mess up Node's require cache and provide garbage for the 'mysql' module\n * if it was not installed. We check that the object we got actually contains something otherwise we treat\n * it as if the `require` call failed.\n *\n * @see https://github.com/typeorm/typeorm/issues/1373\n */\n if (Object.keys(this.mysql).length === 0) {\n throw new TypeORMError(\"'mysql' was found but it is empty. Falling back to 'mysql2'.\");\n }\n } catch (e) {\n try {\n this.mysql = PlatformTools.load(\"mysql2\"); // try to load second supported package\n\n } catch (e) {\n throw new DriverPackageNotInstalledError(\"Mysql\", \"mysql\");\n }\n }\n }\n\n /**\n * Creates a new connection pool for a given database credentials.\n */\n protected createConnectionOptions(options: MysqlConnectionOptions, credentials: MysqlConnectionCredentialsOptions): Promise<any> {\n\n credentials = Object.assign({}, credentials, DriverUtils.buildDriverOptions(credentials)); // todo: do it better way\n\n // build connection options for the driver\n return Object.assign({}, {\n charset: options.charset,\n timezone: options.timezone,\n connectTimeout: options.connectTimeout,\n insecureAuth: options.insecureAuth,\n supportBigNumbers: options.supportBigNumbers !== undefined ? options.supportBigNumbers : true,\n bigNumberStrings: options.bigNumberStrings !== undefined ? options.bigNumberStrings : true,\n dateStrings: options.dateStrings,\n debug: options.debug,\n trace: options.trace,\n multipleStatements: options.multipleStatements,\n flags: options.flags\n }, {\n host: credentials.host,\n user: credentials.username,\n password: credentials.password,\n database: credentials.database,\n port: credentials.port,\n ssl: options.ssl,\n socketPath: credentials.socketPath\n },\n options.acquireTimeout === undefined\n ? {}\n : { acquireTimeout: options.acquireTimeout },\n options.extra || {});\n }\n\n /**\n * Creates a new connection pool for a given database credentials.\n */\n protected createPool(connectionOptions: any): Promise<any> {\n\n // create a connection pool\n const pool = this.mysql.createPool(connectionOptions);\n\n // make sure connection is working fine\n return new Promise<void>((ok, fail) => {\n // (issue #610) we make first connection to database to make sure if connection credentials are wrong\n // we give error before calling any other method that creates actual query runner\n pool.getConnection((err: any, connection: any) => {\n if (err)\n return pool.end(() => fail(err));\n\n connection.release();\n ok(pool);\n });\n });\n }\n\n /**\n * Attaches all required base handlers to a database connection, such as the unhandled error handler.\n */\n private prepareDbConnection(connection: any): any {\n const { logger } = this.connection;\n /*\n * Attaching an error handler to connection errors is essential, as, otherwise, errors raised will go unhandled and\n * cause the hosting app to crash.\n */\n if (connection.listeners(\"error\").length === 0) {\n connection.on(\"error\", (error: any) => logger.log(\"warn\", `MySQL connection raised an error. ${error}`));\n }\n return connection;\n }\n\n /**\n * Checks if \"DEFAULT\" values in the column metadata and in the database are equal.\n */\n protected compareDefaultValues(columnMetadataValue: string | undefined, databaseValue: string | undefined): boolean {\n if (typeof columnMetadataValue === \"string\" && typeof databaseValue === \"string\") {\n // we need to cut out \"'\" because in mysql we can understand returned value is a string or a function\n // as result compare cannot understand if default is really changed or not\n columnMetadataValue = columnMetadataValue.replace(/^'+|'+$/g, \"\");\n databaseValue = databaseValue.replace(/^'+|'+$/g, \"\");\n }\n\n return columnMetadataValue === databaseValue;\n }\n\n /**\n * If parameter is a datetime function, e.g. \"CURRENT_TIMESTAMP\", normalizes it.\n * Otherwise returns original input.\n */\n protected normalizeDatetimeFunction(value?: string) {\n if (!value) return value;\n\n // check if input is datetime function\n const isDatetimeFunction = value.toUpperCase().indexOf(\"CURRENT_TIMESTAMP\") !== -1\n || value.toUpperCase().indexOf(\"NOW\") !== -1;\n\n if (isDatetimeFunction) {\n // extract precision, e.g. \"(3)\"\n const precision = value.match(/\\(\\d+\\)/);\n if (this.options.type === \"mariadb\") {\n return precision ? `CURRENT_TIMESTAMP${precision[0]}` : \"CURRENT_TIMESTAMP()\";\n } else {\n return precision ? `CURRENT_TIMESTAMP${precision[0]}` : \"CURRENT_TIMESTAMP\";\n }\n } else {\n return value;\n }\n }\n\n /**\n * Escapes a given comment.\n */\n protected escapeComment(comment?: string) {\n if (!comment) return comment;\n\n comment = comment.replace(/\\u0000/g, \"\"); // Null bytes aren't allowed in comments\n\n return comment;\n }\n\n}\n"],"sourceRoot":"../.."}
|
|
@@ -692,6 +692,7 @@ var SapQueryRunner = /** @class */ (function (_super) {
|
|
|
692
692
|
referencedColumnNames: foreignKeys.map(function (dbFk) { return dbFk["REFERENCED_COLUMN_NAME"]; }),
|
|
693
693
|
onDelete: dbForeignKey["DELETE_RULE"] === "RESTRICT" ? "NO ACTION" : dbForeignKey["DELETE_RULE"],
|
|
694
694
|
onUpdate: dbForeignKey["UPDATE_RULE"] === "RESTRICT" ? "NO ACTION" : dbForeignKey["UPDATE_RULE"],
|
|
695
|
+
deferrable: dbForeignKey["CHECK_TIME"].replace("_", " "), // "CHECK_TIME" is "INITIALLY_IMMEDIATE" or "INITIALLY DEFERRED"
|
|
695
696
|
});
|
|
696
697
|
});
|
|
697
698
|
// drop referenced foreign keys
|
|
@@ -806,6 +807,7 @@ var SapQueryRunner = /** @class */ (function (_super) {
|
|
|
806
807
|
referencedColumnNames: foreignKeys.map(function (dbFk) { return dbFk["REFERENCED_COLUMN_NAME"]; }),
|
|
807
808
|
onDelete: dbForeignKey["DELETE_RULE"] === "RESTRICT" ? "NO ACTION" : dbForeignKey["DELETE_RULE"],
|
|
808
809
|
onUpdate: dbForeignKey["UPDATE_RULE"] === "RESTRICT" ? "NO ACTION" : dbForeignKey["UPDATE_RULE"],
|
|
810
|
+
deferrable: dbForeignKey["CHECK_TIME"].replace("_", " "),
|
|
809
811
|
});
|
|
810
812
|
});
|
|
811
813
|
// drop referenced foreign keys
|
|
@@ -1226,6 +1228,7 @@ var SapQueryRunner = /** @class */ (function (_super) {
|
|
|
1226
1228
|
referencedColumnNames: foreignKeys.map(function (dbFk) { return dbFk["REFERENCED_COLUMN_NAME"]; }),
|
|
1227
1229
|
onDelete: dbForeignKey["DELETE_RULE"] === "RESTRICT" ? "NO ACTION" : dbForeignKey["DELETE_RULE"],
|
|
1228
1230
|
onUpdate: dbForeignKey["UPDATE_RULE"] === "RESTRICT" ? "NO ACTION" : dbForeignKey["UPDATE_RULE"],
|
|
1231
|
+
deferrable: dbForeignKey["CHECK_TIME"].replace("_", " "),
|
|
1229
1232
|
});
|
|
1230
1233
|
});
|
|
1231
1234
|
// drop referenced foreign keys
|
|
@@ -1420,6 +1423,7 @@ var SapQueryRunner = /** @class */ (function (_super) {
|
|
|
1420
1423
|
referencedColumnNames: foreignKeys.map(function (dbFk) { return dbFk["REFERENCED_COLUMN_NAME"]; }),
|
|
1421
1424
|
onDelete: dbForeignKey["DELETE_RULE"] === "RESTRICT" ? "NO ACTION" : dbForeignKey["DELETE_RULE"],
|
|
1422
1425
|
onUpdate: dbForeignKey["UPDATE_RULE"] === "RESTRICT" ? "NO ACTION" : dbForeignKey["UPDATE_RULE"],
|
|
1426
|
+
deferrable: dbForeignKey["CHECK_TIME"].replace("_", " "),
|
|
1423
1427
|
});
|
|
1424
1428
|
});
|
|
1425
1429
|
// drop referenced foreign keys
|
|
@@ -1507,6 +1511,7 @@ var SapQueryRunner = /** @class */ (function (_super) {
|
|
|
1507
1511
|
referencedColumnNames: foreignKeys.map(function (dbFk) { return dbFk["REFERENCED_COLUMN_NAME"]; }),
|
|
1508
1512
|
onDelete: dbForeignKey["DELETE_RULE"] === "RESTRICT" ? "NO ACTION" : dbForeignKey["DELETE_RULE"],
|
|
1509
1513
|
onUpdate: dbForeignKey["UPDATE_RULE"] === "RESTRICT" ? "NO ACTION" : dbForeignKey["UPDATE_RULE"],
|
|
1514
|
+
deferrable: dbForeignKey["CHECK_TIME"].replace("_", " "),
|
|
1510
1515
|
});
|
|
1511
1516
|
});
|
|
1512
1517
|
// drop referenced foreign keys
|
|
@@ -2256,6 +2261,7 @@ var SapQueryRunner = /** @class */ (function (_super) {
|
|
|
2256
2261
|
referencedColumnNames: foreignKeys.map(function (dbFk) { return dbFk["REFERENCED_COLUMN_NAME"]; }),
|
|
2257
2262
|
onDelete: dbForeignKey["DELETE_RULE"] === "RESTRICT" ? "NO ACTION" : dbForeignKey["DELETE_RULE"],
|
|
2258
2263
|
onUpdate: dbForeignKey["UPDATE_RULE"] === "RESTRICT" ? "NO ACTION" : dbForeignKey["UPDATE_RULE"],
|
|
2264
|
+
deferrable: dbForeignKey["CHECK_TIME"].replace("_", " "),
|
|
2259
2265
|
});
|
|
2260
2266
|
});
|
|
2261
2267
|
tableIndexConstraints = OrmUtils.uniq(dbIndices.filter(function (dbIndex) { return (dbIndex["TABLE_NAME"] === dbTable["TABLE_NAME"] &&
|
|
@@ -2343,6 +2349,9 @@ var SapQueryRunner = /** @class */ (function (_super) {
|
|
|
2343
2349
|
var onUpdate = fk.onUpdate === "NO ACTION" ? "RESTRICT" : fk.onUpdate;
|
|
2344
2350
|
constraint += " ON UPDATE " + onUpdate;
|
|
2345
2351
|
}
|
|
2352
|
+
if (fk.deferrable) {
|
|
2353
|
+
constraint += " " + fk.deferrable;
|
|
2354
|
+
}
|
|
2346
2355
|
return constraint;
|
|
2347
2356
|
}).join(", ");
|
|
2348
2357
|
sql += ", " + foreignKeysSql;
|
|
@@ -2500,6 +2509,9 @@ var SapQueryRunner = /** @class */ (function (_super) {
|
|
|
2500
2509
|
var onUpdate = foreignKey.onUpdate === "NO ACTION" ? "RESTRICT" : foreignKey.onUpdate;
|
|
2501
2510
|
sql += " ON UPDATE " + onUpdate;
|
|
2502
2511
|
}
|
|
2512
|
+
if (foreignKey.deferrable) {
|
|
2513
|
+
sql += " " + foreignKey.deferrable;
|
|
2514
|
+
}
|
|
2503
2515
|
return new Query(sql);
|
|
2504
2516
|
};
|
|
2505
2517
|
/**
|