typeorm 1.0.0-beta.2 → 1.0.0-beta.3
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/README.md +1 -3
- package/browser/connection/ConnectionOptionsReader.js +1 -1
- package/browser/connection/ConnectionOptionsReader.js.map +1 -1
- package/browser/data-source/DataSource.d.ts +1 -1
- package/browser/data-source/DataSource.js.map +1 -1
- package/browser/decorator/options/JoinColumnOptions.js.map +1 -1
- package/browser/driver/DriverUtils.d.ts +1 -0
- package/browser/driver/DriverUtils.js +27 -29
- package/browser/driver/DriverUtils.js.map +1 -1
- package/browser/driver/aurora-mysql/AuroraMysqlDriver.js +4 -4
- package/browser/driver/aurora-mysql/AuroraMysqlDriver.js.map +1 -1
- package/browser/driver/aurora-mysql/AuroraMysqlQueryRunner.d.ts +2 -1
- package/browser/driver/aurora-mysql/AuroraMysqlQueryRunner.js +9 -6
- package/browser/driver/aurora-mysql/AuroraMysqlQueryRunner.js.map +1 -1
- package/browser/driver/aurora-postgres/AuroraPostgresQueryRunner.d.ts +2 -1
- package/browser/driver/aurora-postgres/AuroraPostgresQueryRunner.js +3 -0
- package/browser/driver/aurora-postgres/AuroraPostgresQueryRunner.js.map +1 -1
- package/browser/driver/better-sqlite3/BetterSqlite3QueryRunner.d.ts +2 -1
- package/browser/driver/better-sqlite3/BetterSqlite3QueryRunner.js +3 -0
- package/browser/driver/better-sqlite3/BetterSqlite3QueryRunner.js.map +1 -1
- package/browser/driver/capacitor/CapacitorQueryRunner.d.ts +1 -1
- package/browser/driver/capacitor/CapacitorQueryRunner.js +5 -1
- package/browser/driver/capacitor/CapacitorQueryRunner.js.map +1 -1
- package/browser/driver/cockroachdb/CockroachDriver.js +3 -3
- package/browser/driver/cockroachdb/CockroachDriver.js.map +1 -1
- package/browser/driver/cockroachdb/CockroachQueryRunner.d.ts +2 -1
- package/browser/driver/cockroachdb/CockroachQueryRunner.js +55 -50
- package/browser/driver/cockroachdb/CockroachQueryRunner.js.map +1 -1
- package/browser/driver/cordova/CordovaQueryRunner.d.ts +1 -1
- package/browser/driver/cordova/CordovaQueryRunner.js +2 -0
- package/browser/driver/cordova/CordovaQueryRunner.js.map +1 -1
- package/browser/driver/expo/ExpoDataSourceOptions.d.ts +5 -3
- package/browser/driver/expo/ExpoDataSourceOptions.js.map +1 -1
- package/browser/driver/expo/ExpoDriver.d.ts +16 -1
- package/browser/driver/expo/ExpoDriver.js +68 -6
- package/browser/driver/expo/ExpoDriver.js.map +1 -1
- package/browser/driver/expo/ExpoQueryRunner.d.ts +2 -1
- package/browser/driver/expo/ExpoQueryRunner.js +3 -0
- package/browser/driver/expo/ExpoQueryRunner.js.map +1 -1
- package/browser/driver/mysql/MysqlDriver.js +4 -4
- package/browser/driver/mysql/MysqlDriver.js.map +1 -1
- package/browser/driver/mysql/MysqlQueryRunner.d.ts +2 -1
- package/browser/driver/mysql/MysqlQueryRunner.js +78 -82
- package/browser/driver/mysql/MysqlQueryRunner.js.map +1 -1
- package/browser/driver/nativescript/NativescriptQueryRunner.d.ts +1 -1
- package/browser/driver/nativescript/NativescriptQueryRunner.js +3 -0
- package/browser/driver/nativescript/NativescriptQueryRunner.js.map +1 -1
- package/browser/driver/oracle/OracleDriver.js +2 -2
- package/browser/driver/oracle/OracleDriver.js.map +1 -1
- package/browser/driver/postgres/PostgresDriver.js +8 -8
- package/browser/driver/postgres/PostgresDriver.js.map +1 -1
- package/browser/driver/postgres/PostgresQueryRunner.d.ts +2 -1
- package/browser/driver/postgres/PostgresQueryRunner.js +12 -8
- package/browser/driver/postgres/PostgresQueryRunner.js.map +1 -1
- package/browser/driver/react-native/ReactNativeDriver.js +1 -1
- package/browser/driver/react-native/ReactNativeDriver.js.map +1 -1
- package/browser/driver/react-native/ReactNativeQueryRunner.d.ts +1 -1
- package/browser/driver/react-native/ReactNativeQueryRunner.js +3 -0
- package/browser/driver/react-native/ReactNativeQueryRunner.js.map +1 -1
- package/browser/driver/sap/SapDriver.js +5 -3
- package/browser/driver/sap/SapDriver.js.map +1 -1
- package/browser/driver/sap/SapQueryRunner.d.ts +2 -1
- package/browser/driver/sap/SapQueryRunner.js +171 -16
- package/browser/driver/sap/SapQueryRunner.js.map +1 -1
- package/browser/driver/spanner/SpannerDriver.d.ts +1 -1
- package/browser/driver/spanner/SpannerDriver.js +6 -8
- package/browser/driver/spanner/SpannerDriver.js.map +1 -1
- package/browser/driver/spanner/SpannerQueryRunner.d.ts +16 -1
- package/browser/driver/spanner/SpannerQueryRunner.js +75 -7
- package/browser/driver/spanner/SpannerQueryRunner.js.map +1 -1
- package/browser/driver/sqlite-abstract/AbstractSqliteDriver.js +1 -1
- package/browser/driver/sqlite-abstract/AbstractSqliteDriver.js.map +1 -1
- package/browser/driver/sqlite-abstract/AbstractSqliteQueryRunner.js +10 -14
- package/browser/driver/sqlite-abstract/AbstractSqliteQueryRunner.js.map +1 -1
- package/browser/driver/sqljs/SqljsQueryRunner.d.ts +2 -1
- package/browser/driver/sqljs/SqljsQueryRunner.js +3 -0
- package/browser/driver/sqljs/SqljsQueryRunner.js.map +1 -1
- package/browser/driver/sqlserver/SqlServerDriver.js +1 -1
- package/browser/driver/sqlserver/SqlServerDriver.js.map +1 -1
- package/browser/driver/sqlserver/SqlServerQueryRunner.d.ts +2 -1
- package/browser/driver/sqlserver/SqlServerQueryRunner.js +65 -60
- package/browser/driver/sqlserver/SqlServerQueryRunner.js.map +1 -1
- package/browser/entity-manager/EntityManager.d.ts +1 -1
- package/browser/entity-manager/EntityManager.js.map +1 -1
- package/browser/error/NamedPlaceholdersNotSupportedError.d.ts +7 -0
- package/browser/error/NamedPlaceholdersNotSupportedError.js +14 -0
- package/browser/error/NamedPlaceholdersNotSupportedError.js.map +1 -0
- package/browser/error/QueryFailedError.d.ts +3 -2
- package/browser/error/QueryFailedError.js.map +1 -1
- package/browser/error/index.d.ts +1 -0
- package/browser/error/index.js +1 -0
- package/browser/error/index.js.map +1 -1
- package/browser/index.d.ts +0 -1
- package/browser/index.js +1 -3
- package/browser/index.js.map +1 -1
- package/browser/logger/AbstractLogger.d.ts +5 -4
- package/browser/logger/AbstractLogger.js +3 -1
- package/browser/logger/AbstractLogger.js.map +1 -1
- package/browser/logger/DebugLogger.js +3 -1
- package/browser/logger/DebugLogger.js.map +1 -1
- package/browser/logger/Logger.d.ts +5 -4
- package/browser/logger/Logger.js.map +1 -1
- package/browser/naming-strategy/DefaultNamingStrategy.d.ts +7 -26
- package/browser/naming-strategy/DefaultNamingStrategy.js +19 -37
- package/browser/naming-strategy/DefaultNamingStrategy.js.map +1 -1
- package/browser/naming-strategy/NamingStrategyInterface.d.ts +9 -13
- package/browser/naming-strategy/NamingStrategyInterface.js.map +1 -1
- package/browser/persistence/EntityPersistExecutor.js +20 -8
- package/browser/persistence/EntityPersistExecutor.js.map +1 -1
- package/browser/persistence/SubjectDatabaseEntityLoader.js +15 -5
- package/browser/persistence/SubjectDatabaseEntityLoader.js.map +1 -1
- package/browser/persistence/SubjectExecutor.js +50 -30
- package/browser/persistence/SubjectExecutor.js.map +1 -1
- package/browser/platform/PlatformTools.js +1 -1
- package/browser/platform/PlatformTools.js.map +1 -1
- package/browser/query-builder/JoinAttribute.js +3 -3
- package/browser/query-builder/JoinAttribute.js.map +1 -1
- package/browser/query-builder/QueryBuilder.d.ts +0 -1
- package/browser/query-builder/QueryBuilder.js +3 -13
- package/browser/query-builder/QueryBuilder.js.map +1 -1
- package/browser/query-builder/SelectQueryBuilder.js +33 -27
- package/browser/query-builder/SelectQueryBuilder.js.map +1 -1
- package/browser/query-builder/SoftDeleteQueryBuilder.js +0 -2
- package/browser/query-builder/SoftDeleteQueryBuilder.js.map +1 -1
- package/browser/query-builder/UpdateQueryBuilder.js +0 -2
- package/browser/query-builder/UpdateQueryBuilder.js.map +1 -1
- package/browser/query-builder/relation-id/RelationIdAttribute.js +4 -4
- package/browser/query-builder/relation-id/RelationIdAttribute.js.map +1 -1
- package/browser/query-builder/relation-id/RelationIdLoader.js +16 -9
- package/browser/query-builder/relation-id/RelationIdLoader.js.map +1 -1
- package/browser/query-runner/BaseQueryRunner.d.ts +44 -21
- package/browser/query-runner/BaseQueryRunner.js +61 -21
- package/browser/query-runner/BaseQueryRunner.js.map +1 -1
- package/browser/query-runner/QueryRunner.d.ts +11 -2
- package/browser/query-runner/QueryRunner.js.map +1 -1
- package/browser/repository/BaseEntity.d.ts +2 -1
- package/browser/repository/BaseEntity.js.map +1 -1
- package/browser/repository/Repository.d.ts +1 -1
- package/browser/repository/Repository.js.map +1 -1
- package/browser/subscriber/Broadcaster.d.ts +4 -4
- package/browser/subscriber/Broadcaster.js.map +1 -1
- package/browser/subscriber/event/QueryEvent.d.ts +2 -1
- package/browser/subscriber/event/QueryEvent.js.map +1 -1
- package/browser/util/DirectoryExportedClassesLoader.js +1 -1
- package/browser/util/DirectoryExportedClassesLoader.js.map +1 -1
- package/browser/util/ImportUtils.js +1 -1
- package/browser/util/ImportUtils.js.map +1 -1
- package/browser/util/OrmUtils.js +1 -1
- package/browser/util/OrmUtils.js.map +1 -1
- package/browser/util/PathUtils.js +1 -1
- package/browser/util/PathUtils.js.map +1 -1
- package/browser/util/RandomGenerator.d.ts +1 -10
- package/browser/util/RandomGenerator.js +1 -10
- package/browser/util/RandomGenerator.js.map +1 -1
- package/browser/util/StringUtils.js +9 -9
- package/browser/util/StringUtils.js.map +1 -1
- package/browser/util/escapeRegExp.js +1 -1
- package/browser/util/escapeRegExp.js.map +1 -1
- package/commands/InitCommand.d.ts +0 -3
- package/commands/InitCommand.js +4 -31
- package/commands/InitCommand.js.map +1 -1
- package/commands/MigrationGenerateCommand.js +3 -1
- package/commands/MigrationGenerateCommand.js.map +1 -1
- package/commands/VersionCommand.js +2 -2
- package/commands/VersionCommand.js.map +1 -1
- package/connection/ConnectionOptionsReader.js +1 -1
- package/connection/ConnectionOptionsReader.js.map +1 -1
- package/data-source/DataSource.d.ts +1 -1
- package/data-source/DataSource.js.map +1 -1
- package/decorator/options/JoinColumnOptions.js.map +1 -1
- package/driver/DriverUtils.d.ts +1 -0
- package/driver/DriverUtils.js +27 -29
- package/driver/DriverUtils.js.map +1 -1
- package/driver/aurora-mysql/AuroraMysqlDriver.js +4 -4
- package/driver/aurora-mysql/AuroraMysqlDriver.js.map +1 -1
- package/driver/aurora-mysql/AuroraMysqlQueryRunner.d.ts +2 -1
- package/driver/aurora-mysql/AuroraMysqlQueryRunner.js +9 -6
- package/driver/aurora-mysql/AuroraMysqlQueryRunner.js.map +1 -1
- package/driver/aurora-postgres/AuroraPostgresQueryRunner.d.ts +2 -1
- package/driver/aurora-postgres/AuroraPostgresQueryRunner.js +3 -0
- package/driver/aurora-postgres/AuroraPostgresQueryRunner.js.map +1 -1
- package/driver/better-sqlite3/BetterSqlite3QueryRunner.d.ts +2 -1
- package/driver/better-sqlite3/BetterSqlite3QueryRunner.js +3 -0
- package/driver/better-sqlite3/BetterSqlite3QueryRunner.js.map +1 -1
- package/driver/capacitor/CapacitorQueryRunner.d.ts +1 -1
- package/driver/capacitor/CapacitorQueryRunner.js +5 -1
- package/driver/capacitor/CapacitorQueryRunner.js.map +1 -1
- package/driver/cockroachdb/CockroachDriver.js +3 -3
- package/driver/cockroachdb/CockroachDriver.js.map +1 -1
- package/driver/cockroachdb/CockroachQueryRunner.d.ts +2 -1
- package/driver/cockroachdb/CockroachQueryRunner.js +55 -50
- package/driver/cockroachdb/CockroachQueryRunner.js.map +1 -1
- package/driver/cordova/CordovaQueryRunner.d.ts +1 -1
- package/driver/cordova/CordovaQueryRunner.js +2 -0
- package/driver/cordova/CordovaQueryRunner.js.map +1 -1
- package/driver/expo/ExpoDataSourceOptions.d.ts +5 -3
- package/driver/expo/ExpoDataSourceOptions.js.map +1 -1
- package/driver/expo/ExpoDriver.d.ts +16 -1
- package/driver/expo/ExpoDriver.js +68 -6
- package/driver/expo/ExpoDriver.js.map +1 -1
- package/driver/expo/ExpoQueryRunner.d.ts +2 -1
- package/driver/expo/ExpoQueryRunner.js +3 -0
- package/driver/expo/ExpoQueryRunner.js.map +1 -1
- package/driver/mysql/MysqlDriver.js +4 -4
- package/driver/mysql/MysqlDriver.js.map +1 -1
- package/driver/mysql/MysqlQueryRunner.d.ts +2 -1
- package/driver/mysql/MysqlQueryRunner.js +78 -82
- package/driver/mysql/MysqlQueryRunner.js.map +1 -1
- package/driver/nativescript/NativescriptQueryRunner.d.ts +1 -1
- package/driver/nativescript/NativescriptQueryRunner.js +3 -0
- package/driver/nativescript/NativescriptQueryRunner.js.map +1 -1
- package/driver/oracle/OracleDriver.js +2 -2
- package/driver/oracle/OracleDriver.js.map +1 -1
- package/driver/postgres/PostgresDriver.js +8 -8
- package/driver/postgres/PostgresDriver.js.map +1 -1
- package/driver/postgres/PostgresQueryRunner.d.ts +2 -1
- package/driver/postgres/PostgresQueryRunner.js +12 -8
- package/driver/postgres/PostgresQueryRunner.js.map +1 -1
- package/driver/react-native/ReactNativeDriver.js +1 -1
- package/driver/react-native/ReactNativeDriver.js.map +1 -1
- package/driver/react-native/ReactNativeQueryRunner.d.ts +1 -1
- package/driver/react-native/ReactNativeQueryRunner.js +3 -0
- package/driver/react-native/ReactNativeQueryRunner.js.map +1 -1
- package/driver/sap/SapDriver.js +5 -3
- package/driver/sap/SapDriver.js.map +1 -1
- package/driver/sap/SapQueryRunner.d.ts +2 -1
- package/driver/sap/SapQueryRunner.js +171 -16
- package/driver/sap/SapQueryRunner.js.map +1 -1
- package/driver/spanner/SpannerDriver.d.ts +1 -1
- package/driver/spanner/SpannerDriver.js +6 -8
- package/driver/spanner/SpannerDriver.js.map +1 -1
- package/driver/spanner/SpannerQueryRunner.d.ts +16 -1
- package/driver/spanner/SpannerQueryRunner.js +75 -7
- package/driver/spanner/SpannerQueryRunner.js.map +1 -1
- package/driver/sqlite-abstract/AbstractSqliteDriver.js +1 -1
- package/driver/sqlite-abstract/AbstractSqliteDriver.js.map +1 -1
- package/driver/sqlite-abstract/AbstractSqliteQueryRunner.js +10 -14
- package/driver/sqlite-abstract/AbstractSqliteQueryRunner.js.map +1 -1
- package/driver/sqljs/SqljsQueryRunner.d.ts +2 -1
- package/driver/sqljs/SqljsQueryRunner.js +3 -0
- package/driver/sqljs/SqljsQueryRunner.js.map +1 -1
- package/driver/sqlserver/SqlServerDriver.js +1 -1
- package/driver/sqlserver/SqlServerDriver.js.map +1 -1
- package/driver/sqlserver/SqlServerQueryRunner.d.ts +2 -1
- package/driver/sqlserver/SqlServerQueryRunner.js +65 -60
- package/driver/sqlserver/SqlServerQueryRunner.js.map +1 -1
- package/entity-manager/EntityManager.d.ts +1 -1
- package/entity-manager/EntityManager.js.map +1 -1
- package/error/NamedPlaceholdersNotSupportedError.d.ts +7 -0
- package/error/NamedPlaceholdersNotSupportedError.js +14 -0
- package/error/NamedPlaceholdersNotSupportedError.js.map +1 -0
- package/error/QueryFailedError.d.ts +3 -2
- package/error/QueryFailedError.js.map +1 -1
- package/error/index.d.ts +1 -0
- package/error/index.js +1 -0
- package/error/index.js.map +1 -1
- package/index.d.ts +0 -1
- package/index.js +1 -3
- package/index.js.map +1 -1
- package/index.mjs +2 -2
- package/logger/AbstractLogger.d.ts +5 -4
- package/logger/AbstractLogger.js +3 -1
- package/logger/AbstractLogger.js.map +1 -1
- package/logger/DebugLogger.js +3 -1
- package/logger/DebugLogger.js.map +1 -1
- package/logger/Logger.d.ts +5 -4
- package/logger/Logger.js.map +1 -1
- package/naming-strategy/DefaultNamingStrategy.d.ts +7 -26
- package/naming-strategy/DefaultNamingStrategy.js +19 -37
- package/naming-strategy/DefaultNamingStrategy.js.map +1 -1
- package/naming-strategy/NamingStrategyInterface.d.ts +9 -13
- package/naming-strategy/NamingStrategyInterface.js.map +1 -1
- package/package.json +6 -6
- package/persistence/EntityPersistExecutor.js +20 -8
- package/persistence/EntityPersistExecutor.js.map +1 -1
- package/persistence/SubjectDatabaseEntityLoader.js +15 -5
- package/persistence/SubjectDatabaseEntityLoader.js.map +1 -1
- package/persistence/SubjectExecutor.js +50 -30
- package/persistence/SubjectExecutor.js.map +1 -1
- package/platform/PlatformTools.js +1 -1
- package/platform/PlatformTools.js.map +1 -1
- package/query-builder/JoinAttribute.js +3 -3
- package/query-builder/JoinAttribute.js.map +1 -1
- package/query-builder/QueryBuilder.d.ts +0 -1
- package/query-builder/QueryBuilder.js +3 -13
- package/query-builder/QueryBuilder.js.map +1 -1
- package/query-builder/SelectQueryBuilder.js +33 -27
- package/query-builder/SelectQueryBuilder.js.map +1 -1
- package/query-builder/SoftDeleteQueryBuilder.js +0 -2
- package/query-builder/SoftDeleteQueryBuilder.js.map +1 -1
- package/query-builder/UpdateQueryBuilder.js +0 -2
- package/query-builder/UpdateQueryBuilder.js.map +1 -1
- package/query-builder/relation-id/RelationIdAttribute.js +4 -4
- package/query-builder/relation-id/RelationIdAttribute.js.map +1 -1
- package/query-builder/relation-id/RelationIdLoader.js +16 -9
- package/query-builder/relation-id/RelationIdLoader.js.map +1 -1
- package/query-runner/BaseQueryRunner.d.ts +44 -21
- package/query-runner/BaseQueryRunner.js +61 -21
- package/query-runner/BaseQueryRunner.js.map +1 -1
- package/query-runner/QueryRunner.d.ts +11 -2
- package/query-runner/QueryRunner.js.map +1 -1
- package/repository/BaseEntity.d.ts +2 -1
- package/repository/BaseEntity.js.map +1 -1
- package/repository/Repository.d.ts +1 -1
- package/repository/Repository.js.map +1 -1
- package/subscriber/Broadcaster.d.ts +4 -4
- package/subscriber/Broadcaster.js.map +1 -1
- package/subscriber/event/QueryEvent.d.ts +2 -1
- package/subscriber/event/QueryEvent.js.map +1 -1
- package/util/DirectoryExportedClassesLoader.js +1 -1
- package/util/DirectoryExportedClassesLoader.js.map +1 -1
- package/util/ImportUtils.js +1 -1
- package/util/ImportUtils.js.map +1 -1
- package/util/OrmUtils.js +1 -1
- package/util/OrmUtils.js.map +1 -1
- package/util/PathUtils.js +1 -1
- package/util/PathUtils.js.map +1 -1
- package/util/RandomGenerator.d.ts +1 -10
- package/util/RandomGenerator.js +1 -10
- package/util/RandomGenerator.js.map +1 -1
- package/util/StringUtils.js +9 -9
- package/util/StringUtils.js.map +1 -1
- package/util/escapeRegExp.js +1 -1
- package/util/escapeRegExp.js.map +1 -1
- package/browser/naming-strategy/LegacyOracleNamingStrategy.d.ts +0 -21
- package/browser/naming-strategy/LegacyOracleNamingStrategy.js +0 -49
- package/browser/naming-strategy/LegacyOracleNamingStrategy.js.map +0 -1
- package/naming-strategy/LegacyOracleNamingStrategy.d.ts +0 -21
- package/naming-strategy/LegacyOracleNamingStrategy.js +0 -49
- package/naming-strategy/LegacyOracleNamingStrategy.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AuroraMysqlQueryRunner.js","sourceRoot":"","sources":["../../../../src/driver/aurora-mysql/AuroraMysqlQueryRunner.ts"],"names":[],"mappings":"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","sourcesContent":["import type { ObjectLiteral } from \"../../common/ObjectLiteral\"\nimport { TypeORMError } from \"../../error\"\nimport { QueryRunnerAlreadyReleasedError } from \"../../error/QueryRunnerAlreadyReleasedError\"\nimport { TransactionNotStartedError } from \"../../error/TransactionNotStartedError\"\nimport type { ReadStream } from \"../../platform/PlatformTools\"\nimport { BaseQueryRunner } from \"../../query-runner/BaseQueryRunner\"\nimport { QueryResult } from \"../../query-runner/QueryResult\"\nimport type { QueryRunner } from \"../../query-runner/QueryRunner\"\nimport type { TableIndexOptions } from \"../../schema-builder/options/TableIndexOptions\"\nimport { Table } from \"../../schema-builder/table/Table\"\nimport type { TableCheck } from \"../../schema-builder/table/TableCheck\"\nimport { TableColumn } from \"../../schema-builder/table/TableColumn\"\nimport type { TableExclusion } from \"../../schema-builder/table/TableExclusion\"\nimport { TableForeignKey } from \"../../schema-builder/table/TableForeignKey\"\nimport { TableIndex } from \"../../schema-builder/table/TableIndex\"\nimport { TableUnique } from \"../../schema-builder/table/TableUnique\"\nimport { View } from \"../../schema-builder/view/View\"\nimport { Broadcaster } from \"../../subscriber/Broadcaster\"\nimport { InstanceChecker } from \"../../util/InstanceChecker\"\nimport { OrmUtils } from \"../../util/OrmUtils\"\nimport { Query } from \"../Query\"\nimport type { ColumnType } from \"../types/ColumnTypes\"\nimport type { IsolationLevel } from \"../types/IsolationLevel\"\nimport { validateIsolationLevel } from \"../validate-isolation-level\"\nimport { MetadataTableType } from \"../types/MetadataTableType\"\nimport type { AuroraMysqlDriver } from \"./AuroraMysqlDriver\"\n\n/**\n * Runs queries on a single mysql database connection.\n */\nexport class AuroraMysqlQueryRunner\n extends BaseQueryRunner\n implements QueryRunner\n{\n // -------------------------------------------------------------------------\n // Public Implemented Properties\n // -------------------------------------------------------------------------\n\n /**\n * Database driver used by connection.\n */\n\n driver: AuroraMysqlDriver\n\n protected client: any\n\n // -------------------------------------------------------------------------\n // Protected Properties\n // -------------------------------------------------------------------------\n\n /**\n * Promise used to obtain a database connection from a pool for a first time.\n */\n protected databaseConnectionPromise: Promise<any>\n\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n\n constructor(driver: AuroraMysqlDriver, client: any) {\n super()\n this.driver = driver\n this.dataSource = driver.dataSource\n this.client = client\n this.broadcaster = new Broadcaster(this)\n }\n\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n\n /**\n * Creates/uses database connection from the connection pool to perform further operations.\n * Returns obtained database connection.\n */\n async connect(): Promise<any> {\n return {}\n }\n\n /**\n * Releases used database connection.\n * You cannot use query runner methods once its released.\n */\n release(): Promise<void> {\n this.isReleased = true\n if (this.databaseConnection) this.databaseConnection.release()\n return Promise.resolve()\n }\n\n /**\n * Starts transaction on the current connection.\n *\n * @param isolationLevel\n */\n async startTransaction(isolationLevel?: IsolationLevel): Promise<void> {\n isolationLevel ??= this.dataSource.options.isolationLevel\n\n validateIsolationLevel(\n this.driver.supportedIsolationLevels,\n isolationLevel,\n )\n\n this.isTransactionActive = true\n try {\n await this.broadcaster.broadcast(\"BeforeTransactionStart\")\n } catch (err) {\n this.isTransactionActive = false\n throw err\n }\n\n if (this.transactionDepth === 0) {\n try {\n await this.client.startTransaction()\n } catch (err) {\n this.isTransactionActive = false\n throw err\n }\n } else {\n await this.query(`SAVEPOINT typeorm_${this.transactionDepth}`)\n }\n this.transactionDepth += 1\n\n await this.broadcaster.broadcast(\"AfterTransactionStart\")\n }\n\n /**\n * Commits transaction.\n * Error will be thrown if transaction was not started.\n */\n async commitTransaction(): Promise<void> {\n if (!this.isTransactionActive) throw new TransactionNotStartedError()\n\n await this.broadcaster.broadcast(\"BeforeTransactionCommit\")\n\n if (this.transactionDepth > 1) {\n await this.query(\n `RELEASE SAVEPOINT typeorm_${this.transactionDepth - 1}`,\n )\n } else {\n await this.client.commitTransaction()\n this.isTransactionActive = false\n }\n this.transactionDepth -= 1\n\n await this.broadcaster.broadcast(\"AfterTransactionCommit\")\n }\n\n /**\n * Rollbacks transaction.\n * Error will be thrown if transaction was not started.\n */\n async rollbackTransaction(): Promise<void> {\n if (!this.isTransactionActive) throw new TransactionNotStartedError()\n\n await this.broadcaster.broadcast(\"BeforeTransactionRollback\")\n\n if (this.transactionDepth > 1) {\n await this.query(\n `ROLLBACK TO SAVEPOINT typeorm_${this.transactionDepth - 1}`,\n )\n } else {\n await this.client.rollbackTransaction()\n this.isTransactionActive = false\n }\n this.transactionDepth -= 1\n\n await this.broadcaster.broadcast(\"AfterTransactionRollback\")\n }\n\n /**\n * Executes a raw SQL query.\n *\n * @param query\n * @param parameters\n * @param useStructuredResult\n */\n async query(\n query: string,\n parameters?: any[],\n useStructuredResult = false,\n ): Promise<any> {\n if (this.isReleased) throw new QueryRunnerAlreadyReleasedError()\n\n const raw = await this.client.query(query, parameters)\n\n const result = new QueryResult()\n\n result.raw = raw\n\n if (raw?.hasOwnProperty(\"records\") && Array.isArray(raw.records)) {\n result.records = raw.records\n }\n\n if (raw?.hasOwnProperty(\"numberOfRecordsUpdated\")) {\n result.affected = raw.numberOfRecordsUpdated\n }\n\n if (!useStructuredResult) {\n return result.raw\n }\n\n return result\n }\n\n /**\n * Returns raw data stream.\n *\n * @param query\n * @param parameters\n * @param onEnd\n * @param onError\n */\n stream(\n query: string,\n parameters?: any[],\n onEnd?: Function,\n onError?: Function,\n ): Promise<ReadStream> {\n if (this.isReleased) throw new QueryRunnerAlreadyReleasedError()\n\n return new Promise(async (ok, fail) => {\n try {\n const databaseConnection = await this.connect()\n const stream = databaseConnection.query(query, parameters)\n if (onEnd) stream.on(\"end\", onEnd)\n if (onError) stream.on(\"error\", onError)\n ok(stream)\n } catch (err) {\n fail(err)\n }\n })\n }\n\n /**\n * Returns all available database names including system databases.\n */\n async getDatabases(): Promise<string[]> {\n return Promise.resolve([])\n }\n\n /**\n * Returns all available schema names including system schemas.\n * If database parameter specified, returns schemas of that database.\n *\n * @param database\n */\n async getSchemas(database?: string): Promise<string[]> {\n throw new TypeORMError(`MySql driver does not support table schemas`)\n }\n\n /**\n * Checks if database with the given name exist.\n *\n * @param database\n */\n async hasDatabase(database: string): Promise<boolean> {\n const result = await this.query(\n `SELECT * FROM \\`INFORMATION_SCHEMA\\`.\\`SCHEMATA\\` WHERE \\`SCHEMA_NAME\\` = ?`,\n [database],\n )\n return result.length ? true : false\n }\n\n /**\n * Loads currently using database\n */\n async getCurrentDatabase(): Promise<string> {\n const query = await this.query(`SELECT DATABASE() AS \\`db_name\\``)\n return query[0][\"db_name\"]\n }\n\n /**\n * Checks if schema with the given name exist.\n *\n * @param schema\n */\n async hasSchema(schema: string): Promise<boolean> {\n throw new TypeORMError(`MySql driver does not support table schemas`)\n }\n\n /**\n * Loads currently using database schema\n */\n async getCurrentSchema(): Promise<string> {\n const query = await this.query(`SELECT SCHEMA() AS \\`schema_name\\``)\n return query[0][\"schema_name\"]\n }\n\n /**\n * Checks if table with the given name exist in the database.\n *\n * @param tableOrName\n */\n async hasTable(tableOrName: Table | string): Promise<boolean> {\n const parsedTableName = this.driver.parseTableName(tableOrName)\n const sql = `SELECT * FROM \\`INFORMATION_SCHEMA\\`.\\`COLUMNS\\` WHERE \\`TABLE_SCHEMA\\` = ? AND \\`TABLE_NAME\\` = ?`\n const result = await this.query(sql, [\n parsedTableName.database,\n parsedTableName.tableName,\n ])\n return result.length ? true : false\n }\n\n /**\n * Checks if column with the given name exist in the given table.\n *\n * @param tableOrName\n * @param column\n */\n async hasColumn(\n tableOrName: Table | string,\n column: TableColumn | string,\n ): Promise<boolean> {\n const parsedTableName = this.driver.parseTableName(tableOrName)\n const columnName = InstanceChecker.isTableColumn(column)\n ? column.name\n : column\n const sql = `SELECT * FROM \\`INFORMATION_SCHEMA\\`.\\`COLUMNS\\` WHERE \\`TABLE_SCHEMA\\` = ? AND \\`TABLE_NAME\\` = ? AND \\`COLUMN_NAME\\` = ?`\n const result = await this.query(sql, [\n parsedTableName.database,\n parsedTableName.tableName,\n columnName,\n ])\n return result.length ? true : false\n }\n\n /**\n * Creates a new database.\n *\n * @param database\n * @param ifNotExists\n */\n async createDatabase(\n database: string,\n ifNotExists?: boolean,\n ): Promise<void> {\n const up = ifNotExists\n ? `CREATE DATABASE IF NOT EXISTS ${this.driver.escape(database)}`\n : `CREATE DATABASE ${this.driver.escape(database)}`\n const down = `DROP DATABASE ${this.driver.escape(database)}`\n await this.executeQueries(new Query(up), new Query(down))\n }\n\n /**\n * Drops database.\n *\n * @param database\n * @param ifExists\n */\n async dropDatabase(database: string, ifExists?: boolean): Promise<void> {\n const up = ifExists\n ? `DROP DATABASE IF EXISTS ${this.driver.escape(database)}`\n : `DROP DATABASE ${this.driver.escape(database)}`\n const down = `CREATE DATABASE ${this.driver.escape(database)}`\n await this.executeQueries(new Query(up), new Query(down))\n }\n\n /**\n * Creates a new table schema.\n *\n * @param schemaPath\n * @param ifNotExists\n */\n async createSchema(\n schemaPath: string,\n ifNotExists?: boolean,\n ): Promise<void> {\n throw new TypeORMError(\n `Schema create queries are not supported by MySql driver.`,\n )\n }\n\n /**\n * Drops table schema.\n *\n * @param schemaPath\n * @param ifExists\n */\n async dropSchema(schemaPath: string, ifExists?: boolean): Promise<void> {\n throw new TypeORMError(\n `Schema drop queries are not supported by MySql driver.`,\n )\n }\n\n /**\n * Creates a new table.\n *\n * @param table\n * @param ifNotExists\n * @param createForeignKeys\n */\n async createTable(\n table: Table,\n ifNotExists: boolean = false,\n createForeignKeys: boolean = true,\n ): Promise<void> {\n if (ifNotExists) {\n const isTableExist = await this.hasTable(table)\n if (isTableExist) return Promise.resolve()\n }\n const upQueries: Query[] = []\n const downQueries: Query[] = []\n\n upQueries.push(this.createTableSql(table, createForeignKeys))\n downQueries.push(this.dropTableSql(table))\n\n // we must first drop indices, than drop foreign keys, because drop queries runs in reversed order\n // and foreign keys will be dropped first as indices. This order is very important, because we can't drop index\n // if it related to the foreign key.\n\n // createTable does not need separate method to create indices, because it create indices in the same query with table creation.\n table.indices.forEach((index) =>\n downQueries.push(this.dropIndexSql(table, index)),\n )\n\n // if createForeignKeys is true, we must drop created foreign keys in down query.\n // createTable does not need separate method to create foreign keys, because it create fk's in the same query with table creation.\n if (createForeignKeys)\n table.foreignKeys.forEach((foreignKey) =>\n downQueries.push(this.dropForeignKeySql(table, foreignKey)),\n )\n\n return this.executeQueries(upQueries, downQueries)\n }\n\n /**\n * Drop the table.\n *\n * @param target\n * @param ifExists\n * @param dropForeignKeys\n */\n async dropTable(\n target: Table | string,\n ifExists?: boolean,\n dropForeignKeys: boolean = true,\n ): Promise<void> {\n // It needs because if table does not exist and dropForeignKeys or dropIndices is true, we don't need\n // to perform drop queries for foreign keys and indices.\n if (ifExists) {\n const isTableExist = await this.hasTable(target)\n if (!isTableExist) return Promise.resolve()\n }\n\n // if dropTable called with dropForeignKeys = true, we must create foreign keys in down query.\n const createForeignKeys: boolean = dropForeignKeys\n const tablePath = this.getTablePath(target)\n const table = await this.getCachedTable(tablePath)\n const upQueries: Query[] = []\n const downQueries: Query[] = []\n\n if (dropForeignKeys)\n table.foreignKeys.forEach((foreignKey) =>\n upQueries.push(this.dropForeignKeySql(table, foreignKey)),\n )\n\n table.indices.forEach((index) =>\n upQueries.push(this.dropIndexSql(table, index)),\n )\n\n upQueries.push(this.dropTableSql(table))\n downQueries.push(this.createTableSql(table, createForeignKeys))\n\n await this.executeQueries(upQueries, downQueries)\n }\n\n /**\n * Creates a new view.\n *\n * @param view\n * @param syncWithMetadata\n */\n async createView(\n view: View,\n syncWithMetadata: boolean = false,\n ): Promise<void> {\n const upQueries: Query[] = []\n const downQueries: Query[] = []\n upQueries.push(this.createViewSql(view))\n if (syncWithMetadata)\n upQueries.push(await this.insertViewDefinitionSql(view))\n downQueries.push(this.dropViewSql(view))\n if (syncWithMetadata)\n downQueries.push(await this.deleteViewDefinitionSql(view))\n await this.executeQueries(upQueries, downQueries)\n }\n\n /**\n * Drops the view.\n *\n * @param target\n * @param ifExists\n */\n async dropView(target: View | string, ifExists?: boolean): Promise<void> {\n const viewName = InstanceChecker.isView(target) ? target.name : target\n const view = await this.getCachedView(viewName)\n\n await this.executeQueries(\n [\n await this.deleteViewDefinitionSql(view),\n this.dropViewSql(view, ifExists),\n ],\n [\n await this.insertViewDefinitionSql(view),\n this.createViewSql(view),\n ],\n )\n }\n\n /**\n * Renames a table.\n *\n * @param oldTableOrName\n * @param newTableName\n */\n async renameTable(\n oldTableOrName: Table | string,\n newTableName: string,\n ): Promise<void> {\n const upQueries: Query[] = []\n const downQueries: Query[] = []\n const oldTable = InstanceChecker.isTable(oldTableOrName)\n ? oldTableOrName\n : await this.getCachedTable(oldTableOrName)\n const newTable = oldTable.clone()\n\n const { database } = this.driver.parseTableName(oldTable)\n newTable.name = database ? `${database}.${newTableName}` : newTableName\n\n // rename table\n upQueries.push(\n new Query(\n `RENAME TABLE ${this.escapePath(oldTable)} TO ${this.escapePath(\n newTable,\n )}`,\n ),\n )\n downQueries.push(\n new Query(\n `RENAME TABLE ${this.escapePath(newTable)} TO ${this.escapePath(\n oldTable,\n )}`,\n ),\n )\n\n // rename index constraints\n newTable.indices.forEach((index) => {\n // build new constraint name\n const columnNames = index.columnNames\n .map((column) => `\\`${column}\\``)\n .join(\", \")\n const newIndexName = this.dataSource.namingStrategy.indexName(\n newTable,\n index.columnNames,\n index.where,\n )\n\n // build queries\n let indexType = \"\"\n if (index.isUnique) indexType += \"UNIQUE \"\n if (index.isSpatial) indexType += \"SPATIAL \"\n if (index.isFulltext) indexType += \"FULLTEXT \"\n upQueries.push(\n new Query(\n `ALTER TABLE ${this.escapePath(newTable)} DROP INDEX \\`${\n index.name\n }\\`, ADD ${indexType}INDEX \\`${newIndexName}\\` (${columnNames})`,\n ),\n )\n downQueries.push(\n new Query(\n `ALTER TABLE ${this.escapePath(\n newTable,\n )} DROP INDEX \\`${newIndexName}\\`, ADD ${indexType}INDEX \\`${\n index.name\n }\\` (${columnNames})`,\n ),\n )\n\n // replace constraint name\n index.name = newIndexName\n })\n\n // rename foreign key constraint\n newTable.foreignKeys.forEach((foreignKey) => {\n // build new constraint name\n const columnNames = foreignKey.columnNames\n .map((column) => `\\`${column}\\``)\n .join(\", \")\n const referencedColumnNames = foreignKey.referencedColumnNames\n .map((column) => `\\`${column}\\``)\n .join(\",\")\n const newForeignKeyName =\n this.dataSource.namingStrategy.foreignKeyName(\n newTable,\n foreignKey.columnNames,\n )\n\n // build queries\n let up =\n `ALTER TABLE ${this.escapePath(newTable)} DROP FOREIGN KEY \\`${\n foreignKey.name\n }\\`, ADD CONSTRAINT \\`${newForeignKeyName}\\` FOREIGN KEY (${columnNames}) ` +\n `REFERENCES ${this.escapePath(\n this.getTablePath(foreignKey),\n )}(${referencedColumnNames})`\n if (foreignKey.onDelete) up += ` ON DELETE ${foreignKey.onDelete}`\n if (foreignKey.onUpdate) up += ` ON UPDATE ${foreignKey.onUpdate}`\n\n let down =\n `ALTER TABLE ${this.escapePath(\n newTable,\n )} DROP FOREIGN KEY \\`${newForeignKeyName}\\`, ADD CONSTRAINT \\`${\n foreignKey.name\n }\\` FOREIGN KEY (${columnNames}) ` +\n `REFERENCES ${this.escapePath(\n this.getTablePath(foreignKey),\n )}(${referencedColumnNames})`\n if (foreignKey.onDelete) down += ` ON DELETE ${foreignKey.onDelete}`\n if (foreignKey.onUpdate) down += ` ON UPDATE ${foreignKey.onUpdate}`\n\n upQueries.push(new Query(up))\n downQueries.push(new Query(down))\n\n // replace constraint name\n foreignKey.name = newForeignKeyName\n })\n\n await this.executeQueries(upQueries, downQueries)\n\n // rename old table and replace it in cached tabled;\n oldTable.name = newTable.name\n this.replaceCachedTable(oldTable, newTable)\n }\n\n /**\n * Creates a new column from the column in the table.\n *\n * @param tableOrName\n * @param column\n */\n async addColumn(\n tableOrName: Table | string,\n column: TableColumn,\n ): Promise<void> {\n const table = InstanceChecker.isTable(tableOrName)\n ? tableOrName\n : await this.getCachedTable(tableOrName)\n const clonedTable = table.clone()\n const upQueries: Query[] = []\n const downQueries: Query[] = []\n const skipColumnLevelPrimary = clonedTable.primaryColumns.length > 0\n\n upQueries.push(\n new Query(\n `ALTER TABLE ${this.escapePath(\n table,\n )} ADD ${this.buildCreateColumnSql(\n column,\n skipColumnLevelPrimary,\n false,\n )}`,\n ),\n )\n downQueries.push(\n new Query(\n `ALTER TABLE ${this.escapePath(table)} DROP COLUMN \\`${\n column.name\n }\\``,\n ),\n )\n\n // create or update primary key constraint\n if (column.isPrimary && skipColumnLevelPrimary) {\n // if we already have generated column, we must temporary drop AUTO_INCREMENT property.\n const generatedColumn = clonedTable.columns.find(\n (column) =>\n column.isGenerated &&\n column.generationStrategy === \"increment\",\n )\n if (generatedColumn) {\n const nonGeneratedColumn = generatedColumn.clone()\n nonGeneratedColumn.isGenerated = false\n nonGeneratedColumn.generationStrategy = undefined\n upQueries.push(\n new Query(\n `ALTER TABLE ${this.escapePath(table)} CHANGE \\`${\n column.name\n }\\` ${this.buildCreateColumnSql(\n nonGeneratedColumn,\n true,\n )}`,\n ),\n )\n downQueries.push(\n new Query(\n `ALTER TABLE ${this.escapePath(table)} CHANGE \\`${\n nonGeneratedColumn.name\n }\\` ${this.buildCreateColumnSql(column, true)}`,\n ),\n )\n }\n\n const primaryColumns = clonedTable.primaryColumns\n let columnNames = primaryColumns\n .map((column) => `\\`${column.name}\\``)\n .join(\", \")\n upQueries.push(\n new Query(\n `ALTER TABLE ${this.escapePath(table)} DROP PRIMARY KEY`,\n ),\n )\n downQueries.push(\n new Query(\n `ALTER TABLE ${this.escapePath(\n table,\n )} ADD PRIMARY KEY (${columnNames})`,\n ),\n )\n\n primaryColumns.push(column)\n columnNames = primaryColumns\n .map((column) => `\\`${column.name}\\``)\n .join(\", \")\n upQueries.push(\n new Query(\n `ALTER TABLE ${this.escapePath(\n table,\n )} ADD PRIMARY KEY (${columnNames})`,\n ),\n )\n downQueries.push(\n new Query(\n `ALTER TABLE ${this.escapePath(table)} DROP PRIMARY KEY`,\n ),\n )\n\n // if we previously dropped AUTO_INCREMENT property, we must bring it back\n if (generatedColumn) {\n const nonGeneratedColumn = generatedColumn.clone()\n nonGeneratedColumn.isGenerated = false\n nonGeneratedColumn.generationStrategy = undefined\n upQueries.push(\n new Query(\n `ALTER TABLE ${this.escapePath(table)} CHANGE \\`${\n nonGeneratedColumn.name\n }\\` ${this.buildCreateColumnSql(column, true)}`,\n ),\n )\n downQueries.push(\n new Query(\n `ALTER TABLE ${this.escapePath(table)} CHANGE \\`${\n column.name\n }\\` ${this.buildCreateColumnSql(\n nonGeneratedColumn,\n true,\n )}`,\n ),\n )\n }\n }\n\n // create column index\n const columnIndex = clonedTable.indices.find(\n (index) =>\n index.columnNames.length === 1 &&\n index.columnNames[0] === column.name,\n )\n if (columnIndex) {\n upQueries.push(this.createIndexSql(table, columnIndex))\n downQueries.push(this.dropIndexSql(table, columnIndex))\n } else if (column.isUnique) {\n const uniqueIndex = new TableIndex({\n name: this.dataSource.namingStrategy.indexName(table, [\n column.name,\n ]),\n columnNames: [column.name],\n isUnique: true,\n })\n clonedTable.indices.push(uniqueIndex)\n clonedTable.uniques.push(\n new TableUnique({\n name: uniqueIndex.name,\n columnNames: uniqueIndex.columnNames,\n }),\n )\n upQueries.push(\n new Query(\n `ALTER TABLE ${this.escapePath(table)} ADD UNIQUE INDEX \\`${\n uniqueIndex.name\n }\\` (\\`${column.name}\\`)`,\n ),\n )\n downQueries.push(\n new Query(\n `ALTER TABLE ${this.escapePath(table)} DROP INDEX \\`${\n uniqueIndex.name\n }\\``,\n ),\n )\n }\n\n await this.executeQueries(upQueries, downQueries)\n\n clonedTable.addColumn(column)\n this.replaceCachedTable(table, clonedTable)\n }\n\n /**\n * Creates a new columns from the column in the table.\n *\n * @param tableOrName\n * @param columns\n */\n async addColumns(\n tableOrName: Table | string,\n columns: TableColumn[],\n ): Promise<void> {\n for (const column of columns) {\n await this.addColumn(tableOrName, column)\n }\n }\n\n /**\n * Renames column in the given table.\n *\n * @param tableOrName\n * @param oldTableColumnOrName\n * @param newTableColumnOrName\n */\n async renameColumn(\n tableOrName: Table | string,\n oldTableColumnOrName: TableColumn | string,\n newTableColumnOrName: TableColumn | string,\n ): Promise<void> {\n const table = InstanceChecker.isTable(tableOrName)\n ? tableOrName\n : await this.getCachedTable(tableOrName)\n const oldColumn = InstanceChecker.isTableColumn(oldTableColumnOrName)\n ? oldTableColumnOrName\n : table.columns.find((c) => c.name === oldTableColumnOrName)\n if (!oldColumn)\n throw new TypeORMError(\n `Column \"${oldTableColumnOrName}\" was not found in the \"${table.name}\" table.`,\n )\n\n let newColumn: TableColumn\n if (InstanceChecker.isTableColumn(newTableColumnOrName)) {\n newColumn = newTableColumnOrName\n } else {\n newColumn = oldColumn.clone()\n newColumn.name = newTableColumnOrName\n }\n\n await this.changeColumn(table, oldColumn, newColumn)\n }\n\n /**\n * Changes a column in the table.\n *\n * @param tableOrName\n * @param oldColumnOrName\n * @param newColumn\n */\n async changeColumn(\n tableOrName: Table | string,\n oldColumnOrName: TableColumn | string,\n newColumn: TableColumn,\n ): Promise<void> {\n const table = InstanceChecker.isTable(tableOrName)\n ? tableOrName\n : await this.getCachedTable(tableOrName)\n let clonedTable = table.clone()\n const upQueries: Query[] = []\n const downQueries: Query[] = []\n\n const oldColumn = InstanceChecker.isTableColumn(oldColumnOrName)\n ? oldColumnOrName\n : table.columns.find((column) => column.name === oldColumnOrName)\n if (!oldColumn)\n throw new TypeORMError(\n `Column \"${oldColumnOrName}\" was not found in the \"${table.name}\" table.`,\n )\n\n if (\n (newColumn.isGenerated !== oldColumn.isGenerated &&\n newColumn.generationStrategy !== \"uuid\") ||\n oldColumn.type !== newColumn.type ||\n oldColumn.length !== newColumn.length ||\n oldColumn.generatedType !== newColumn.generatedType\n ) {\n await this.dropColumn(table, oldColumn)\n await this.addColumn(table, newColumn)\n\n // update cloned table\n clonedTable = table.clone()\n } else {\n if (newColumn.name !== oldColumn.name) {\n // We don't change any column properties, just rename it.\n upQueries.push(\n new Query(\n `ALTER TABLE ${this.escapePath(table)} CHANGE \\`${\n oldColumn.name\n }\\` \\`${newColumn.name}\\` ${this.buildCreateColumnSql(\n oldColumn,\n true,\n true,\n )}`,\n ),\n )\n downQueries.push(\n new Query(\n `ALTER TABLE ${this.escapePath(table)} CHANGE \\`${\n newColumn.name\n }\\` \\`${oldColumn.name}\\` ${this.buildCreateColumnSql(\n oldColumn,\n true,\n true,\n )}`,\n ),\n )\n\n // rename index constraints\n clonedTable.findColumnIndices(oldColumn).forEach((index) => {\n // build new constraint name\n index.columnNames.splice(\n index.columnNames.indexOf(oldColumn.name),\n 1,\n )\n index.columnNames.push(newColumn.name)\n const columnNames = index.columnNames\n .map((column) => `\\`${column}\\``)\n .join(\", \")\n const newIndexName =\n this.dataSource.namingStrategy.indexName(\n clonedTable,\n index.columnNames,\n index.where,\n )\n\n // build queries\n let indexType = \"\"\n if (index.isUnique) indexType += \"UNIQUE \"\n if (index.isSpatial) indexType += \"SPATIAL \"\n if (index.isFulltext) indexType += \"FULLTEXT \"\n upQueries.push(\n new Query(\n `ALTER TABLE ${this.escapePath(\n table,\n )} DROP INDEX \\`${\n index.name\n }\\`, ADD ${indexType}INDEX \\`${newIndexName}\\` (${columnNames})`,\n ),\n )\n downQueries.push(\n new Query(\n `ALTER TABLE ${this.escapePath(\n table,\n )} DROP INDEX \\`${newIndexName}\\`, ADD ${indexType}INDEX \\`${\n index.name\n }\\` (${columnNames})`,\n ),\n )\n\n // replace constraint name\n index.name = newIndexName\n })\n\n // rename foreign key constraints\n clonedTable\n .findColumnForeignKeys(oldColumn)\n .forEach((foreignKey) => {\n // build new constraint name\n foreignKey.columnNames.splice(\n foreignKey.columnNames.indexOf(oldColumn.name),\n 1,\n )\n foreignKey.columnNames.push(newColumn.name)\n const columnNames = foreignKey.columnNames\n .map((column) => `\\`${column}\\``)\n .join(\", \")\n const referencedColumnNames =\n foreignKey.referencedColumnNames\n .map((column) => `\\`${column}\\``)\n .join(\",\")\n const newForeignKeyName =\n this.dataSource.namingStrategy.foreignKeyName(\n clonedTable,\n foreignKey.columnNames,\n )\n\n // build queries\n let up =\n `ALTER TABLE ${this.escapePath(\n table,\n )} DROP FOREIGN KEY \\`${\n foreignKey.name\n }\\`, ADD CONSTRAINT \\`${newForeignKeyName}\\` FOREIGN KEY (${columnNames}) ` +\n `REFERENCES ${this.escapePath(\n this.getTablePath(foreignKey),\n )}(${referencedColumnNames})`\n if (foreignKey.onDelete)\n up += ` ON DELETE ${foreignKey.onDelete}`\n if (foreignKey.onUpdate)\n up += ` ON UPDATE ${foreignKey.onUpdate}`\n\n let down =\n `ALTER TABLE ${this.escapePath(\n table,\n )} DROP FOREIGN KEY \\`${newForeignKeyName}\\`, ADD CONSTRAINT \\`${\n foreignKey.name\n }\\` FOREIGN KEY (${columnNames}) ` +\n `REFERENCES ${this.escapePath(\n this.getTablePath(foreignKey),\n )}(${referencedColumnNames})`\n if (foreignKey.onDelete)\n down += ` ON DELETE ${foreignKey.onDelete}`\n if (foreignKey.onUpdate)\n down += ` ON UPDATE ${foreignKey.onUpdate}`\n\n upQueries.push(new Query(up))\n downQueries.push(new Query(down))\n\n // replace constraint name\n foreignKey.name = newForeignKeyName\n })\n\n // rename old column in the Table object\n const oldTableColumn = clonedTable.columns.find(\n (column) => column.name === oldColumn.name,\n )\n clonedTable.columns[\n clonedTable.columns.indexOf(oldTableColumn!)\n ].name = newColumn.name\n oldColumn.name = newColumn.name\n }\n\n if (this.isColumnChanged(oldColumn, newColumn, true)) {\n upQueries.push(\n new Query(\n `ALTER TABLE ${this.escapePath(table)} CHANGE \\`${\n oldColumn.name\n }\\` ${this.buildCreateColumnSql(newColumn, true)}`,\n ),\n )\n downQueries.push(\n new Query(\n `ALTER TABLE ${this.escapePath(table)} CHANGE \\`${\n newColumn.name\n }\\` ${this.buildCreateColumnSql(oldColumn, true)}`,\n ),\n )\n }\n\n if (newColumn.isPrimary !== oldColumn.isPrimary) {\n // if table have generated column, we must drop AUTO_INCREMENT before changing primary constraints.\n const generatedColumn = clonedTable.columns.find(\n (column) =>\n column.isGenerated &&\n column.generationStrategy === \"increment\",\n )\n if (generatedColumn) {\n const nonGeneratedColumn = generatedColumn.clone()\n nonGeneratedColumn.isGenerated = false\n nonGeneratedColumn.generationStrategy = undefined\n\n upQueries.push(\n new Query(\n `ALTER TABLE ${this.escapePath(table)} CHANGE \\`${\n generatedColumn.name\n }\\` ${this.buildCreateColumnSql(\n nonGeneratedColumn,\n true,\n )}`,\n ),\n )\n downQueries.push(\n new Query(\n `ALTER TABLE ${this.escapePath(table)} CHANGE \\`${\n nonGeneratedColumn.name\n }\\` ${this.buildCreateColumnSql(\n generatedColumn,\n true,\n )}`,\n ),\n )\n }\n\n const primaryColumns = clonedTable.primaryColumns\n\n // if primary column state changed, we must always drop existed constraint.\n if (primaryColumns.length > 0) {\n const columnNames = primaryColumns\n .map((column) => `\\`${column.name}\\``)\n .join(\", \")\n upQueries.push(\n new Query(\n `ALTER TABLE ${this.escapePath(\n table,\n )} DROP PRIMARY KEY`,\n ),\n )\n downQueries.push(\n new Query(\n `ALTER TABLE ${this.escapePath(\n table,\n )} ADD PRIMARY KEY (${columnNames})`,\n ),\n )\n }\n\n if (newColumn.isPrimary === true) {\n primaryColumns.push(newColumn)\n // update column in table\n const column = clonedTable.columns.find(\n (column) => column.name === newColumn.name,\n )\n column!.isPrimary = true\n const columnNames = primaryColumns\n .map((column) => `\\`${column.name}\\``)\n .join(\", \")\n upQueries.push(\n new Query(\n `ALTER TABLE ${this.escapePath(\n table,\n )} ADD PRIMARY KEY (${columnNames})`,\n ),\n )\n downQueries.push(\n new Query(\n `ALTER TABLE ${this.escapePath(\n table,\n )} DROP PRIMARY KEY`,\n ),\n )\n } else {\n const primaryColumn = primaryColumns.find(\n (c) => c.name === newColumn.name,\n )\n primaryColumns.splice(\n primaryColumns.indexOf(primaryColumn!),\n 1,\n )\n // update column in table\n const column = clonedTable.columns.find(\n (column) => column.name === newColumn.name,\n )\n column!.isPrimary = false\n\n // if we have another primary keys, we must recreate constraint.\n if (primaryColumns.length > 0) {\n const columnNames = primaryColumns\n .map((column) => `\\`${column.name}\\``)\n .join(\", \")\n upQueries.push(\n new Query(\n `ALTER TABLE ${this.escapePath(\n table,\n )} ADD PRIMARY KEY (${columnNames})`,\n ),\n )\n downQueries.push(\n new Query(\n `ALTER TABLE ${this.escapePath(\n table,\n )} DROP PRIMARY KEY`,\n ),\n )\n }\n }\n\n // if we have generated column, and we dropped AUTO_INCREMENT property before, we must bring it back\n if (generatedColumn) {\n const nonGeneratedColumn = generatedColumn.clone()\n nonGeneratedColumn.isGenerated = false\n nonGeneratedColumn.generationStrategy = undefined\n\n upQueries.push(\n new Query(\n `ALTER TABLE ${this.escapePath(table)} CHANGE \\`${\n nonGeneratedColumn.name\n }\\` ${this.buildCreateColumnSql(\n generatedColumn,\n true,\n )}`,\n ),\n )\n downQueries.push(\n new Query(\n `ALTER TABLE ${this.escapePath(table)} CHANGE \\`${\n generatedColumn.name\n }\\` ${this.buildCreateColumnSql(\n nonGeneratedColumn,\n true,\n )}`,\n ),\n )\n }\n }\n\n if (newColumn.isUnique !== oldColumn.isUnique) {\n if (newColumn.isUnique === true) {\n const uniqueIndex = new TableIndex({\n name: this.dataSource.namingStrategy.indexName(table, [\n newColumn.name,\n ]),\n columnNames: [newColumn.name],\n isUnique: true,\n })\n clonedTable.indices.push(uniqueIndex)\n clonedTable.uniques.push(\n new TableUnique({\n name: uniqueIndex.name,\n columnNames: uniqueIndex.columnNames,\n }),\n )\n upQueries.push(\n new Query(\n `ALTER TABLE ${this.escapePath(\n table,\n )} ADD UNIQUE INDEX \\`${uniqueIndex.name}\\` (\\`${\n newColumn.name\n }\\`)`,\n ),\n )\n downQueries.push(\n new Query(\n `ALTER TABLE ${this.escapePath(\n table,\n )} DROP INDEX \\`${uniqueIndex.name}\\``,\n ),\n )\n } else {\n const uniqueIndex = clonedTable.indices.find((index) => {\n return (\n index.columnNames.length === 1 &&\n index.isUnique === true &&\n !!index.columnNames.find(\n (columnName) => columnName === newColumn.name,\n )\n )\n })\n clonedTable.indices.splice(\n clonedTable.indices.indexOf(uniqueIndex!),\n 1,\n )\n\n const tableUnique = clonedTable.uniques.find(\n (unique) => unique.name === uniqueIndex!.name,\n )\n clonedTable.uniques.splice(\n clonedTable.uniques.indexOf(tableUnique!),\n 1,\n )\n\n upQueries.push(\n new Query(\n `ALTER TABLE ${this.escapePath(\n table,\n )} DROP INDEX \\`${uniqueIndex!.name}\\``,\n ),\n )\n downQueries.push(\n new Query(\n `ALTER TABLE ${this.escapePath(\n table,\n )} ADD UNIQUE INDEX \\`${uniqueIndex!.name}\\` (\\`${\n newColumn.name\n }\\`)`,\n ),\n )\n }\n }\n }\n\n await this.executeQueries(upQueries, downQueries)\n this.replaceCachedTable(table, clonedTable)\n }\n\n /**\n * Changes a column in the table.\n *\n * @param tableOrName\n * @param changedColumns\n */\n async changeColumns(\n tableOrName: Table | string,\n changedColumns: { newColumn: TableColumn; oldColumn: TableColumn }[],\n ): Promise<void> {\n for (const { oldColumn, newColumn } of changedColumns) {\n await this.changeColumn(tableOrName, oldColumn, newColumn)\n }\n }\n\n /**\n * Drops column in the table.\n *\n * @param tableOrName\n * @param columnOrName\n * @param ifExists\n */\n async dropColumn(\n tableOrName: Table | string,\n columnOrName: TableColumn | string,\n ifExists?: boolean,\n ): Promise<void> {\n const table = InstanceChecker.isTable(tableOrName)\n ? tableOrName\n : await this.getCachedTable(tableOrName)\n const column = InstanceChecker.isTableColumn(columnOrName)\n ? columnOrName\n : table.findColumnByName(columnOrName)\n if (!column) {\n if (ifExists) return\n throw new TypeORMError(\n `Column \"${columnOrName}\" was not found in table \"${table.name}\"`,\n )\n }\n\n const clonedTable = table.clone()\n const upQueries: Query[] = []\n const downQueries: Query[] = []\n\n // drop primary key constraint\n if (column.isPrimary) {\n // if table have generated column, we must drop AUTO_INCREMENT before changing primary constraints.\n const generatedColumn = clonedTable.columns.find(\n (column) =>\n column.isGenerated &&\n column.generationStrategy === \"increment\",\n )\n if (generatedColumn) {\n const nonGeneratedColumn = generatedColumn.clone()\n nonGeneratedColumn.isGenerated = false\n nonGeneratedColumn.generationStrategy = undefined\n\n upQueries.push(\n new Query(\n `ALTER TABLE ${this.escapePath(table)} CHANGE \\`${\n generatedColumn.name\n }\\` ${this.buildCreateColumnSql(\n nonGeneratedColumn,\n true,\n )}`,\n ),\n )\n downQueries.push(\n new Query(\n `ALTER TABLE ${this.escapePath(table)} CHANGE \\`${\n nonGeneratedColumn.name\n }\\` ${this.buildCreateColumnSql(\n generatedColumn,\n true,\n )}`,\n ),\n )\n }\n\n // dropping primary key constraint\n const columnNames = clonedTable.primaryColumns\n .map((primaryColumn) => `\\`${primaryColumn.name}\\``)\n .join(\", \")\n upQueries.push(\n new Query(\n `ALTER TABLE ${this.escapePath(\n clonedTable,\n )} DROP PRIMARY KEY`,\n ),\n )\n downQueries.push(\n new Query(\n `ALTER TABLE ${this.escapePath(\n clonedTable,\n )} ADD PRIMARY KEY (${columnNames})`,\n ),\n )\n\n // update column in table\n const tableColumn = clonedTable.findColumnByName(column.name)\n tableColumn!.isPrimary = false\n\n // if primary key have multiple columns, we must recreate it without dropped column\n if (clonedTable.primaryColumns.length > 0) {\n const columnNames = clonedTable.primaryColumns\n .map((primaryColumn) => `\\`${primaryColumn.name}\\``)\n .join(\", \")\n upQueries.push(\n new Query(\n `ALTER TABLE ${this.escapePath(\n clonedTable,\n )} ADD PRIMARY KEY (${columnNames})`,\n ),\n )\n downQueries.push(\n new Query(\n `ALTER TABLE ${this.escapePath(\n clonedTable,\n )} DROP PRIMARY KEY`,\n ),\n )\n }\n\n // if we have generated column, and we dropped AUTO_INCREMENT property before, and this column is not current dropping column, we must bring it back\n if (generatedColumn && generatedColumn.name !== column.name) {\n const nonGeneratedColumn = generatedColumn.clone()\n nonGeneratedColumn.isGenerated = false\n nonGeneratedColumn.generationStrategy = undefined\n\n upQueries.push(\n new Query(\n `ALTER TABLE ${this.escapePath(table)} CHANGE \\`${\n nonGeneratedColumn.name\n }\\` ${this.buildCreateColumnSql(\n generatedColumn,\n true,\n )}`,\n ),\n )\n downQueries.push(\n new Query(\n `ALTER TABLE ${this.escapePath(table)} CHANGE \\`${\n generatedColumn.name\n }\\` ${this.buildCreateColumnSql(\n nonGeneratedColumn,\n true,\n )}`,\n ),\n )\n }\n }\n\n // drop column index\n const columnIndex = clonedTable.indices.find(\n (index) =>\n index.columnNames.length === 1 &&\n index.columnNames[0] === column.name,\n )\n if (columnIndex) {\n clonedTable.indices.splice(\n clonedTable.indices.indexOf(columnIndex),\n 1,\n )\n upQueries.push(this.dropIndexSql(table, columnIndex))\n downQueries.push(this.createIndexSql(table, columnIndex))\n } else if (column.isUnique) {\n // we splice constraints both from table uniques and indices.\n const uniqueName =\n this.dataSource.namingStrategy.uniqueConstraintName(table, [\n column.name,\n ])\n const foundUnique = clonedTable.uniques.find(\n (unique) => unique.name === uniqueName,\n )\n if (foundUnique)\n clonedTable.uniques.splice(\n clonedTable.uniques.indexOf(foundUnique),\n 1,\n )\n\n const indexName = this.dataSource.namingStrategy.indexName(table, [\n column.name,\n ])\n const foundIndex = clonedTable.indices.find(\n (index) => index.name === indexName,\n )\n if (foundIndex)\n clonedTable.indices.splice(\n clonedTable.indices.indexOf(foundIndex),\n 1,\n )\n\n upQueries.push(\n new Query(\n `ALTER TABLE ${this.escapePath(\n table,\n )} DROP INDEX \\`${indexName}\\``,\n ),\n )\n downQueries.push(\n new Query(\n `ALTER TABLE ${this.escapePath(\n table,\n )} ADD UNIQUE INDEX \\`${indexName}\\` (\\`${column.name}\\`)`,\n ),\n )\n }\n\n upQueries.push(\n new Query(\n `ALTER TABLE ${this.escapePath(table)} DROP COLUMN \\`${\n column.name\n }\\``,\n ),\n )\n downQueries.push(\n new Query(\n `ALTER TABLE ${this.escapePath(\n table,\n )} ADD ${this.buildCreateColumnSql(column, true)}`,\n ),\n )\n\n await this.executeQueries(upQueries, downQueries)\n\n clonedTable.removeColumn(column)\n this.replaceCachedTable(table, clonedTable)\n }\n\n /**\n * Drops the columns in the table.\n *\n * @param tableOrName\n * @param columns\n * @param ifExists\n */\n async dropColumns(\n tableOrName: Table | string,\n columns: TableColumn[] | string[],\n ifExists?: boolean,\n ): Promise<void> {\n for (const column of [...columns]) {\n await this.dropColumn(tableOrName, column, ifExists)\n }\n }\n\n /**\n * Creates a new primary key.\n *\n * @param tableOrName\n * @param columnNames\n */\n async createPrimaryKey(\n tableOrName: Table | string,\n columnNames: string[],\n ): Promise<void> {\n const table = InstanceChecker.isTable(tableOrName)\n ? tableOrName\n : await this.getCachedTable(tableOrName)\n const clonedTable = table.clone()\n\n const up = this.createPrimaryKeySql(table, columnNames)\n const down = this.dropPrimaryKeySql(table)\n\n await this.executeQueries(up, down)\n clonedTable.columns.forEach((column) => {\n if (columnNames.find((columnName) => columnName === column.name))\n column.isPrimary = true\n })\n this.replaceCachedTable(table, clonedTable)\n }\n\n /**\n * Updates composite primary keys.\n *\n * @param tableOrName\n * @param columns\n */\n async updatePrimaryKeys(\n tableOrName: Table | string,\n columns: TableColumn[],\n ): Promise<void> {\n const table = InstanceChecker.isTable(tableOrName)\n ? tableOrName\n : await this.getCachedTable(tableOrName)\n const clonedTable = table.clone()\n const columnNames = columns.map((column) => column.name)\n const upQueries: Query[] = []\n const downQueries: Query[] = []\n\n // if table have generated column, we must drop AUTO_INCREMENT before changing primary constraints.\n const generatedColumn = clonedTable.columns.find(\n (column) =>\n column.isGenerated && column.generationStrategy === \"increment\",\n )\n if (generatedColumn) {\n const nonGeneratedColumn = generatedColumn.clone()\n nonGeneratedColumn.isGenerated = false\n nonGeneratedColumn.generationStrategy = undefined\n\n upQueries.push(\n new Query(\n `ALTER TABLE ${this.escapePath(table)} CHANGE \\`${\n generatedColumn.name\n }\\` ${this.buildCreateColumnSql(nonGeneratedColumn, true)}`,\n ),\n )\n downQueries.push(\n new Query(\n `ALTER TABLE ${this.escapePath(table)} CHANGE \\`${\n nonGeneratedColumn.name\n }\\` ${this.buildCreateColumnSql(generatedColumn, true)}`,\n ),\n )\n }\n\n // if table already have primary columns, we must drop them.\n const primaryColumns = clonedTable.primaryColumns\n if (primaryColumns.length > 0) {\n const columnNames = primaryColumns\n .map((column) => `\\`${column.name}\\``)\n .join(\", \")\n upQueries.push(\n new Query(\n `ALTER TABLE ${this.escapePath(table)} DROP PRIMARY KEY`,\n ),\n )\n downQueries.push(\n new Query(\n `ALTER TABLE ${this.escapePath(\n table,\n )} ADD PRIMARY KEY (${columnNames})`,\n ),\n )\n }\n\n // update columns in table.\n clonedTable.columns\n .filter((column) => columnNames.indexOf(column.name) !== -1)\n .forEach((column) => {\n column.isPrimary = true\n })\n\n const columnNamesString = columnNames\n .map((columnName) => `\\`${columnName}\\``)\n .join(\", \")\n upQueries.push(\n new Query(\n `ALTER TABLE ${this.escapePath(\n table,\n )} ADD PRIMARY KEY (${columnNamesString})`,\n ),\n )\n downQueries.push(\n new Query(`ALTER TABLE ${this.escapePath(table)} DROP PRIMARY KEY`),\n )\n\n // if we already have generated column or column is changed to generated, and we dropped AUTO_INCREMENT property before, we must bring it back\n const newOrExistGeneratedColumn =\n generatedColumn ??\n columns.find(\n (column) =>\n column.isGenerated &&\n column.generationStrategy === \"increment\",\n )\n if (newOrExistGeneratedColumn) {\n const nonGeneratedColumn = newOrExistGeneratedColumn.clone()\n nonGeneratedColumn.isGenerated = false\n nonGeneratedColumn.generationStrategy = undefined\n\n upQueries.push(\n new Query(\n `ALTER TABLE ${this.escapePath(table)} CHANGE \\`${\n nonGeneratedColumn.name\n }\\` ${this.buildCreateColumnSql(\n newOrExistGeneratedColumn,\n true,\n )}`,\n ),\n )\n downQueries.push(\n new Query(\n `ALTER TABLE ${this.escapePath(table)} CHANGE \\`${\n newOrExistGeneratedColumn.name\n }\\` ${this.buildCreateColumnSql(nonGeneratedColumn, true)}`,\n ),\n )\n\n // if column changed to generated, we must update it in table\n const changedGeneratedColumn = clonedTable.columns.find(\n (column) => column.name === newOrExistGeneratedColumn.name,\n )\n changedGeneratedColumn!.isGenerated = true\n changedGeneratedColumn!.generationStrategy = \"increment\"\n }\n\n await this.executeQueries(upQueries, downQueries)\n this.replaceCachedTable(table, clonedTable)\n }\n\n /**\n * Drops a primary key.\n *\n * @param tableOrName\n * @param constraintName\n * @param ifExists\n */\n async dropPrimaryKey(\n tableOrName: Table | string,\n constraintName?: string,\n ifExists?: boolean,\n ): Promise<void> {\n const table = InstanceChecker.isTable(tableOrName)\n ? tableOrName\n : await this.getCachedTable(tableOrName)\n\n if (ifExists && table.primaryColumns.length === 0)\n return Promise.resolve()\n\n const up = this.dropPrimaryKeySql(table)\n const down = this.createPrimaryKeySql(\n table,\n table.primaryColumns.map((column) => column.name),\n )\n await this.executeQueries(up, down)\n table.primaryColumns.forEach((column) => {\n column.isPrimary = false\n })\n }\n\n /**\n * Creates a new unique constraint.\n *\n * @param tableOrName\n * @param uniqueConstraint\n */\n async createUniqueConstraint(\n tableOrName: Table | string,\n uniqueConstraint: TableUnique,\n ): Promise<void> {\n throw new TypeORMError(\n `MySql does not support unique constraints. Use unique index instead.`,\n )\n }\n\n /**\n * Creates a new unique constraints.\n *\n * @param tableOrName\n * @param uniqueConstraints\n */\n async createUniqueConstraints(\n tableOrName: Table | string,\n uniqueConstraints: TableUnique[],\n ): Promise<void> {\n throw new TypeORMError(\n `MySql does not support unique constraints. Use unique index instead.`,\n )\n }\n\n /**\n * Drops a unique constraint.\n *\n * @param tableOrName\n * @param uniqueOrName\n * @param ifExists\n */\n async dropUniqueConstraint(\n tableOrName: Table | string,\n uniqueOrName: TableUnique | string,\n ifExists?: boolean,\n ): Promise<void> {\n throw new TypeORMError(\n `MySql does not support unique constraints. Use unique index instead.`,\n )\n }\n\n /**\n * Drops a unique constraints.\n *\n * @param tableOrName\n * @param uniqueConstraints\n * @param ifExists\n */\n async dropUniqueConstraints(\n tableOrName: Table | string,\n uniqueConstraints: TableUnique[],\n ifExists?: boolean,\n ): Promise<void> {\n throw new TypeORMError(\n `MySql does not support unique constraints. Use unique index instead.`,\n )\n }\n\n /**\n * Creates a new check constraint.\n *\n * @param tableOrName\n * @param checkConstraint\n */\n async createCheckConstraint(\n tableOrName: Table | string,\n checkConstraint: TableCheck,\n ): Promise<void> {\n throw new TypeORMError(`MySql does not support check constraints.`)\n }\n\n /**\n * Creates a new check constraints.\n *\n * @param tableOrName\n * @param checkConstraints\n */\n async createCheckConstraints(\n tableOrName: Table | string,\n checkConstraints: TableCheck[],\n ): Promise<void> {\n throw new TypeORMError(`MySql does not support check constraints.`)\n }\n\n /**\n * Drops check constraint.\n *\n * @param tableOrName\n * @param checkOrName\n * @param ifExists\n */\n async dropCheckConstraint(\n tableOrName: Table | string,\n checkOrName: TableCheck | string,\n ifExists?: boolean,\n ): Promise<void> {\n throw new TypeORMError(`MySql does not support check constraints.`)\n }\n\n /**\n * Drops check constraints.\n *\n * @param tableOrName\n * @param checkConstraints\n * @param ifExists\n */\n async dropCheckConstraints(\n tableOrName: Table | string,\n checkConstraints: TableCheck[],\n ifExists?: boolean,\n ): Promise<void> {\n throw new TypeORMError(`MySql does not support check constraints.`)\n }\n\n /**\n * Creates a new exclusion constraint.\n *\n * @param tableOrName\n * @param exclusionConstraint\n */\n async createExclusionConstraint(\n tableOrName: Table | string,\n exclusionConstraint: TableExclusion,\n ): Promise<void> {\n throw new TypeORMError(`MySql does not support exclusion constraints.`)\n }\n\n /**\n * Creates a new exclusion constraints.\n *\n * @param tableOrName\n * @param exclusionConstraints\n */\n async createExclusionConstraints(\n tableOrName: Table | string,\n exclusionConstraints: TableExclusion[],\n ): Promise<void> {\n throw new TypeORMError(`MySql does not support exclusion constraints.`)\n }\n\n /**\n * Drops exclusion constraint.\n *\n * @param tableOrName\n * @param exclusionOrName\n * @param ifExists\n */\n async dropExclusionConstraint(\n tableOrName: Table | string,\n exclusionOrName: TableExclusion | string,\n ifExists?: boolean,\n ): Promise<void> {\n throw new TypeORMError(`MySql does not support exclusion constraints.`)\n }\n\n /**\n * Drops exclusion constraints.\n *\n * @param tableOrName\n * @param exclusionConstraints\n * @param ifExists\n */\n async dropExclusionConstraints(\n tableOrName: Table | string,\n exclusionConstraints: TableExclusion[],\n ifExists?: boolean,\n ): Promise<void> {\n throw new TypeORMError(`MySql does not support exclusion constraints.`)\n }\n\n /**\n * Creates a new foreign key.\n *\n * @param tableOrName\n * @param foreignKey\n */\n async createForeignKey(\n tableOrName: Table | string,\n foreignKey: TableForeignKey,\n ): Promise<void> {\n const table = InstanceChecker.isTable(tableOrName)\n ? tableOrName\n : await this.getCachedTable(tableOrName)\n\n // new FK may be passed without name. In this case we generate FK name manually.\n foreignKey.name ??= this.dataSource.namingStrategy.foreignKeyName(\n table,\n foreignKey.columnNames,\n )\n\n const up = this.createForeignKeySql(table, foreignKey)\n const down = this.dropForeignKeySql(table, foreignKey)\n await this.executeQueries(up, down)\n table.addForeignKey(foreignKey)\n }\n\n /**\n * Creates a new foreign keys.\n *\n * @param tableOrName\n * @param foreignKeys\n */\n async createForeignKeys(\n tableOrName: Table | string,\n foreignKeys: TableForeignKey[],\n ): Promise<void> {\n const promises = foreignKeys.map((foreignKey) =>\n this.createForeignKey(tableOrName, foreignKey),\n )\n await Promise.all(promises)\n }\n\n /**\n * Drops a foreign key.\n *\n * @param tableOrName\n * @param foreignKeyOrName\n * @param ifExists\n */\n async dropForeignKey(\n tableOrName: Table | string,\n foreignKeyOrName: TableForeignKey | string,\n ifExists?: boolean,\n ): Promise<void> {\n const table = InstanceChecker.isTable(tableOrName)\n ? tableOrName\n : await this.getCachedTable(tableOrName)\n const foreignKey = InstanceChecker.isTableForeignKey(foreignKeyOrName)\n ? foreignKeyOrName\n : table.foreignKeys.find((fk) => fk.name === foreignKeyOrName)\n if (!foreignKey) {\n if (ifExists) return\n throw new TypeORMError(\n `Supplied foreign key was not found in table ${table.name}`,\n )\n }\n\n foreignKey.name ??= this.dataSource.namingStrategy.foreignKeyName(\n table,\n foreignKey.columnNames,\n )\n\n const up = this.dropForeignKeySql(table, foreignKey)\n const down = this.createForeignKeySql(table, foreignKey)\n await this.executeQueries(up, down)\n table.removeForeignKey(foreignKey)\n }\n\n /**\n * Drops a foreign keys from the table.\n *\n * @param tableOrName\n * @param foreignKeys\n * @param ifExists\n */\n async dropForeignKeys(\n tableOrName: Table | string,\n foreignKeys: TableForeignKey[],\n ifExists?: boolean,\n ): Promise<void> {\n const promises = foreignKeys.map((foreignKey) =>\n this.dropForeignKey(tableOrName, foreignKey, ifExists),\n )\n await Promise.all(promises)\n }\n\n /**\n * Creates a new index.\n *\n * @param tableOrName\n * @param index\n */\n async createIndex(\n tableOrName: Table | string,\n index: TableIndex,\n ): Promise<void> {\n const table = InstanceChecker.isTable(tableOrName)\n ? tableOrName\n : await this.getCachedTable(tableOrName)\n\n // new index may be passed without name. In this case we generate index name manually.\n index.name ??= this.generateIndexName(table, index)\n\n const up = this.createIndexSql(table, index)\n const down = this.dropIndexSql(table, index)\n await this.executeQueries(up, down)\n table.addIndex(index, true)\n }\n\n /**\n * Creates a new indices\n *\n * @param tableOrName\n * @param indices\n */\n async createIndices(\n tableOrName: Table | string,\n indices: TableIndex[],\n ): Promise<void> {\n const promises = indices.map((index) =>\n this.createIndex(tableOrName, index),\n )\n await Promise.all(promises)\n }\n\n /**\n * Drops an index.\n *\n * @param tableOrName\n * @param indexOrName\n * @param ifExists\n */\n async dropIndex(\n tableOrName: Table | string,\n indexOrName: TableIndex | string,\n ifExists?: boolean,\n ): Promise<void> {\n const table = InstanceChecker.isTable(tableOrName)\n ? tableOrName\n : await this.getCachedTable(tableOrName)\n const index = InstanceChecker.isTableIndex(indexOrName)\n ? indexOrName\n : table.indices.find((i) => i.name === indexOrName)\n if (!index) {\n if (ifExists) return\n throw new TypeORMError(\n `Supplied index ${indexOrName} was not found in table ${table.name}`,\n )\n }\n\n // old index may be passed without name. In this case we generate index name manually.\n index.name ??= this.generateIndexName(table, index)\n\n const up = this.dropIndexSql(table, index)\n const down = this.createIndexSql(table, index)\n await this.executeQueries(up, down)\n table.removeIndex(index, true)\n }\n\n /**\n * Drops an indices from the table.\n *\n * @param tableOrName\n * @param indices\n * @param ifExists\n */\n async dropIndices(\n tableOrName: Table | string,\n indices: TableIndex[],\n ifExists?: boolean,\n ): Promise<void> {\n const promises = indices.map((index) =>\n this.dropIndex(tableOrName, index, ifExists),\n )\n await Promise.all(promises)\n }\n\n /**\n * Clears all table contents.\n * Note: this operation uses SQL's TRUNCATE query which cannot be reverted in transactions.\n *\n * @param tableOrName\n * @param options\n * @param options.cascade\n */\n async clearTable(\n tableOrName: Table | string,\n options?: { cascade?: boolean },\n ): Promise<void> {\n if (options?.cascade)\n throw new TypeORMError(\n `MySql does not support clearing table with cascade option`,\n )\n await this.query(`TRUNCATE TABLE ${this.escapePath(tableOrName)}`)\n }\n\n /**\n * Removes all tables from the currently connected database.\n * Be careful using this method and avoid using it in production or migrations\n * (because it can clear all your database).\n *\n * @param database\n */\n async clearDatabase(database?: string): Promise<void> {\n const dbName = database ?? this.driver.database\n if (dbName) {\n const isDatabaseExist = await this.hasDatabase(dbName)\n if (!isDatabaseExist) return Promise.resolve()\n } else {\n throw new TypeORMError(\n `Can not clear database. No database is specified`,\n )\n }\n\n const isAnotherTransactionActive = this.isTransactionActive\n if (!isAnotherTransactionActive) await this.startTransaction()\n try {\n const selectViewDropsQuery = `SELECT concat('DROP VIEW IF EXISTS \\`', table_schema, '\\`.\\`', table_name, '\\`') AS \\`query\\` FROM \\`INFORMATION_SCHEMA\\`.\\`VIEWS\\` WHERE \\`TABLE_SCHEMA\\` = ?`\n const dropViewQueries: ObjectLiteral[] = await this.query(\n selectViewDropsQuery,\n [dbName],\n )\n await Promise.all(\n dropViewQueries.map((q) => this.query(q[\"query\"])),\n )\n\n const disableForeignKeysCheckQuery = `SET FOREIGN_KEY_CHECKS = 0;`\n const dropTablesQuery = `SELECT concat('DROP TABLE IF EXISTS \\`', table_schema, '\\`.\\`', table_name, '\\`') AS \\`query\\` FROM \\`INFORMATION_SCHEMA\\`.\\`TABLES\\` WHERE \\`TABLE_SCHEMA\\` = ?`\n const enableForeignKeysCheckQuery = `SET FOREIGN_KEY_CHECKS = 1;`\n\n await this.query(disableForeignKeysCheckQuery)\n const dropQueries: ObjectLiteral[] = await this.query(\n dropTablesQuery,\n [dbName],\n )\n await Promise.all(\n dropQueries.map((query) => this.query(query[\"query\"])),\n )\n await this.query(enableForeignKeysCheckQuery)\n\n if (!isAnotherTransactionActive) {\n await this.commitTransaction()\n }\n } catch (error) {\n try {\n // we throw original error even if rollback thrown an error\n if (!isAnotherTransactionActive) {\n await this.rollbackTransaction()\n }\n } catch (rollbackError) {}\n throw error\n }\n }\n\n // -------------------------------------------------------------------------\n // Protected Methods\n // -------------------------------------------------------------------------\n\n protected async loadViews(viewNames?: string[]): Promise<View[]> {\n const hasTable = await this.hasTable(this.getTypeormMetadataTableName())\n if (!hasTable) {\n return []\n }\n\n viewNames ??= []\n\n const currentDatabase = await this.getCurrentDatabase()\n const viewsCondition = viewNames\n .map((tableName) => {\n let { database, tableName: name } =\n this.driver.parseTableName(tableName)\n\n database ??= currentDatabase\n\n return `(\\`t\\`.\\`schema\\` = '${database}' AND \\`t\\`.\\`name\\` = '${name}')`\n })\n .join(\" OR \")\n\n const query =\n `SELECT \\`t\\`.*, \\`v\\`.\\`check_option\\` FROM ${this.escapePath(\n this.getTypeormMetadataTableName(),\n )} \\`t\\` ` +\n `INNER JOIN \\`information_schema\\`.\\`views\\` \\`v\\` ON \\`v\\`.\\`table_schema\\` = \\`t\\`.\\`schema\\` AND \\`v\\`.\\`table_name\\` = \\`t\\`.\\`name\\` WHERE \\`t\\`.\\`type\\` = '${\n MetadataTableType.VIEW\n }' ${viewsCondition ? `AND (${viewsCondition})` : \"\"}`\n const dbViews = await this.query(query)\n return dbViews.map((dbView: any) => {\n const view = new View()\n const db =\n dbView[\"schema\"] === currentDatabase\n ? undefined\n : dbView[\"schema\"]\n view.database = dbView[\"schema\"]\n view.name = this.driver.buildTableName(\n dbView[\"name\"],\n undefined,\n db,\n )\n view.expression = dbView[\"value\"]\n return view\n })\n }\n\n /**\n * Loads all tables (with given names) from the database and creates a Table from them.\n *\n * @param tableNames\n */\n protected async loadTables(tableNames?: string[]): Promise<Table[]> {\n // if no tables given then no need to proceed\n if (tableNames?.length === 0) {\n return []\n }\n\n const dbTables: { TABLE_NAME: string; TABLE_SCHEMA: string }[] = []\n\n const currentDatabase = await this.getCurrentDatabase()\n\n if (!tableNames) {\n const tablesSql = `SELECT TABLE_NAME, TABLE_SCHEMA FROM \\`INFORMATION_SCHEMA\\`.\\`TABLES\\``\n\n dbTables.push(...(await this.query(tablesSql)))\n } else {\n const tablesCondition = tableNames\n .map((tableName) => {\n let [database, name] = tableName.split(\".\")\n if (!name) {\n name = database\n database = this.driver.database ?? currentDatabase\n }\n return `(\\`TABLE_SCHEMA\\` = '${database}' AND \\`TABLE_NAME\\` = '${name}')`\n })\n .join(\" OR \")\n const tablesSql =\n `SELECT TABLE_NAME, TABLE_SCHEMA FROM \\`INFORMATION_SCHEMA\\`.\\`TABLES\\` WHERE ` +\n tablesCondition\n\n dbTables.push(...(await this.query(tablesSql)))\n }\n\n if (dbTables.length === 0) {\n return []\n }\n\n const columnsCondition = dbTables\n .map(({ TABLE_NAME, TABLE_SCHEMA }) => {\n return `(\\`TABLE_SCHEMA\\` = '${TABLE_SCHEMA}' AND \\`TABLE_NAME\\` = '${TABLE_NAME}')`\n })\n .join(\" OR \")\n const columnsSql =\n `SELECT * FROM \\`INFORMATION_SCHEMA\\`.\\`COLUMNS\\` WHERE ` +\n columnsCondition\n\n const primaryKeySql = `SELECT * FROM \\`INFORMATION_SCHEMA\\`.\\`KEY_COLUMN_USAGE\\` WHERE \\`CONSTRAINT_NAME\\` = 'PRIMARY' AND (${columnsCondition})`\n\n const collationsSql = `SELECT \\`SCHEMA_NAME\\`, \\`DEFAULT_CHARACTER_SET_NAME\\` as \\`CHARSET\\`, \\`DEFAULT_COLLATION_NAME\\` AS \\`COLLATION\\` FROM \\`INFORMATION_SCHEMA\\`.\\`SCHEMATA\\``\n\n const indicesCondition = dbTables\n .map(({ TABLE_NAME, TABLE_SCHEMA }) => {\n return `(\\`s\\`.\\`TABLE_SCHEMA\\` = '${TABLE_SCHEMA}' AND \\`s\\`.\\`TABLE_NAME\\` = '${TABLE_NAME}')`\n })\n .join(\" OR \")\n const indicesSql =\n `SELECT \\`s\\`.* FROM \\`INFORMATION_SCHEMA\\`.\\`STATISTICS\\` \\`s\\` ` +\n `LEFT JOIN \\`INFORMATION_SCHEMA\\`.\\`REFERENTIAL_CONSTRAINTS\\` \\`rc\\` ON \\`s\\`.\\`INDEX_NAME\\` = \\`rc\\`.\\`CONSTRAINT_NAME\\` ` +\n `WHERE (${indicesCondition}) AND \\`s\\`.\\`INDEX_NAME\\` != 'PRIMARY' AND \\`rc\\`.\\`CONSTRAINT_NAME\\` IS NULL`\n\n const foreignKeysCondition = dbTables\n .map(({ TABLE_NAME, TABLE_SCHEMA }) => {\n return `(\\`kcu\\`.\\`TABLE_SCHEMA\\` = '${TABLE_SCHEMA}' AND \\`kcu\\`.\\`TABLE_NAME\\` = '${TABLE_NAME}')`\n })\n .join(\" OR \")\n const foreignKeysSql =\n `SELECT \\`kcu\\`.\\`TABLE_SCHEMA\\`, \\`kcu\\`.\\`TABLE_NAME\\`, \\`kcu\\`.\\`CONSTRAINT_NAME\\`, \\`kcu\\`.\\`COLUMN_NAME\\`, \\`kcu\\`.\\`REFERENCED_TABLE_SCHEMA\\`, ` +\n `\\`kcu\\`.\\`REFERENCED_TABLE_NAME\\`, \\`kcu\\`.\\`REFERENCED_COLUMN_NAME\\`, \\`rc\\`.\\`DELETE_RULE\\` \\`ON_DELETE\\`, \\`rc\\`.\\`UPDATE_RULE\\` \\`ON_UPDATE\\` ` +\n `FROM \\`INFORMATION_SCHEMA\\`.\\`KEY_COLUMN_USAGE\\` \\`kcu\\` ` +\n `INNER JOIN \\`INFORMATION_SCHEMA\\`.\\`REFERENTIAL_CONSTRAINTS\\` \\`rc\\` ON \\`rc\\`.\\`constraint_name\\` = \\`kcu\\`.\\`constraint_name\\` ` +\n `WHERE ` +\n foreignKeysCondition\n const [\n dbColumns,\n dbPrimaryKeys,\n dbCollations,\n dbIndices,\n dbForeignKeys,\n ]: ObjectLiteral[][] = await Promise.all([\n this.query(columnsSql),\n this.query(primaryKeySql),\n this.query(collationsSql),\n this.query(indicesSql),\n this.query(foreignKeysSql),\n ])\n\n // create tables for loaded tables\n return dbTables.map((dbTable) => {\n const table = new Table()\n\n const dbCollation = dbCollations.find(\n (coll) => coll[\"SCHEMA_NAME\"] === dbTable[\"TABLE_SCHEMA\"],\n )!\n const defaultCollation = dbCollation[\"COLLATION\"]\n const defaultCharset = dbCollation[\"CHARSET\"]\n\n // We do not need to join database name, when database is by default.\n const db =\n dbTable[\"TABLE_SCHEMA\"] === currentDatabase\n ? undefined\n : dbTable[\"TABLE_SCHEMA\"]\n table.database = dbTable[\"TABLE_SCHEMA\"]\n table.name = this.driver.buildTableName(\n dbTable[\"TABLE_NAME\"],\n undefined,\n db,\n )\n\n // create columns from the loaded columns\n table.columns = dbColumns\n .filter(\n (dbColumn) =>\n dbColumn[\"TABLE_NAME\"] === dbTable[\"TABLE_NAME\"] &&\n dbColumn[\"TABLE_SCHEMA\"] === dbTable[\"TABLE_SCHEMA\"],\n )\n .map((dbColumn) => {\n const columnUniqueIndices = dbIndices.filter((dbIndex) => {\n return (\n dbIndex[\"TABLE_NAME\"] === dbTable[\"TABLE_NAME\"] &&\n dbIndex[\"TABLE_SCHEMA\"] ===\n dbTable[\"TABLE_SCHEMA\"] &&\n dbIndex[\"COLUMN_NAME\"] ===\n dbColumn[\"COLUMN_NAME\"] &&\n parseInt(dbIndex[\"NON_UNIQUE\"], 10) === 0\n )\n })\n\n const tableMetadata = this.dataSource.entityMetadatas.find(\n (metadata) =>\n this.getTablePath(table) ===\n this.getTablePath(metadata),\n )\n const hasIgnoredIndex =\n columnUniqueIndices.length > 0 &&\n tableMetadata?.indices.some((index) => {\n return columnUniqueIndices.some((uniqueIndex) => {\n return (\n index.name === uniqueIndex[\"INDEX_NAME\"] &&\n index.synchronize === false\n )\n })\n })\n\n const isConstraintComposite = columnUniqueIndices.every(\n (uniqueIndex) => {\n return dbIndices.some(\n (dbIndex) =>\n dbIndex[\"INDEX_NAME\"] ===\n uniqueIndex[\"INDEX_NAME\"] &&\n dbIndex[\"COLUMN_NAME\"] !==\n dbColumn[\"COLUMN_NAME\"],\n )\n },\n )\n\n const tableColumn = new TableColumn()\n tableColumn.name = dbColumn[\"COLUMN_NAME\"]\n tableColumn.type = dbColumn[\"DATA_TYPE\"].toLowerCase()\n\n tableColumn.unsigned =\n dbColumn[\"COLUMN_TYPE\"].includes(\"unsigned\")\n\n if (\n dbColumn[\"COLUMN_DEFAULT\"] === null ||\n dbColumn[\"COLUMN_DEFAULT\"] === undefined\n ) {\n tableColumn.default = undefined\n } else {\n tableColumn.default =\n dbColumn[\"COLUMN_DEFAULT\"] === \"CURRENT_TIMESTAMP\"\n ? dbColumn[\"COLUMN_DEFAULT\"]\n : `'${dbColumn[\"COLUMN_DEFAULT\"]}'`\n }\n\n if (dbColumn[\"EXTRA\"].indexOf(\"on update\") !== -1) {\n tableColumn.onUpdate = dbColumn[\"EXTRA\"].substring(\n dbColumn[\"EXTRA\"].indexOf(\"on update\") + 10,\n )\n }\n\n if (dbColumn[\"GENERATION_EXPRESSION\"]) {\n tableColumn.asExpression =\n dbColumn[\"GENERATION_EXPRESSION\"]\n tableColumn.generatedType =\n dbColumn[\"EXTRA\"].indexOf(\"VIRTUAL\") !== -1\n ? \"VIRTUAL\"\n : \"STORED\"\n }\n\n tableColumn.isUnique =\n columnUniqueIndices.length > 0 &&\n !hasIgnoredIndex &&\n !isConstraintComposite\n tableColumn.isNullable = dbColumn[\"IS_NULLABLE\"] === \"YES\"\n tableColumn.isPrimary = dbPrimaryKeys.some(\n (dbPrimaryKey) => {\n return (\n dbPrimaryKey[\"TABLE_NAME\"] ===\n dbColumn[\"TABLE_NAME\"] &&\n dbPrimaryKey[\"TABLE_SCHEMA\"] ===\n dbColumn[\"TABLE_SCHEMA\"] &&\n dbPrimaryKey[\"COLUMN_NAME\"] ===\n dbColumn[\"COLUMN_NAME\"]\n )\n },\n )\n tableColumn.isGenerated =\n dbColumn[\"EXTRA\"].indexOf(\"auto_increment\") !== -1\n if (tableColumn.isGenerated)\n tableColumn.generationStrategy = \"increment\"\n\n tableColumn.comment =\n typeof dbColumn[\"COLUMN_COMMENT\"] === \"string\" &&\n dbColumn[\"COLUMN_COMMENT\"].length === 0\n ? undefined\n : dbColumn[\"COLUMN_COMMENT\"]\n if (dbColumn[\"CHARACTER_SET_NAME\"])\n tableColumn.charset =\n dbColumn[\"CHARACTER_SET_NAME\"] === defaultCharset\n ? undefined\n : dbColumn[\"CHARACTER_SET_NAME\"]\n if (dbColumn[\"COLLATION_NAME\"])\n tableColumn.collation =\n dbColumn[\"COLLATION_NAME\"] === defaultCollation\n ? undefined\n : dbColumn[\"COLLATION_NAME\"]\n\n // check only columns that have length property\n if (\n this.driver.withLengthColumnTypes.indexOf(\n tableColumn.type as ColumnType,\n ) !== -1 &&\n dbColumn[\"CHARACTER_MAXIMUM_LENGTH\"]\n ) {\n const length =\n dbColumn[\"CHARACTER_MAXIMUM_LENGTH\"].toString()\n tableColumn.length = !this.isDefaultColumnLength(\n table,\n tableColumn,\n length,\n )\n ? length\n : \"\"\n }\n\n if (\n tableColumn.type === \"decimal\" ||\n tableColumn.type === \"double\" ||\n tableColumn.type === \"float\"\n ) {\n if (\n dbColumn[\"NUMERIC_PRECISION\"] !== null &&\n !this.isDefaultColumnPrecision(\n table,\n tableColumn,\n dbColumn[\"NUMERIC_PRECISION\"],\n )\n )\n tableColumn.precision = parseInt(\n dbColumn[\"NUMERIC_PRECISION\"],\n )\n if (\n dbColumn[\"NUMERIC_SCALE\"] !== null &&\n !this.isDefaultColumnScale(\n table,\n tableColumn,\n dbColumn[\"NUMERIC_SCALE\"],\n )\n )\n tableColumn.scale = parseInt(\n dbColumn[\"NUMERIC_SCALE\"],\n )\n }\n\n if (\n tableColumn.type === \"enum\" ||\n tableColumn.type === \"simple-enum\" ||\n tableColumn.type === \"set\"\n ) {\n const colType = dbColumn[\"COLUMN_TYPE\"]\n const items = colType\n .substring(\n colType.indexOf(\"(\") + 1,\n colType.lastIndexOf(\")\"),\n )\n .split(\",\")\n tableColumn.enum = (items as string[]).map((item) => {\n return item.substring(1, item.length - 1)\n })\n tableColumn.length = \"\"\n }\n\n if (\n (tableColumn.type === \"datetime\" ||\n tableColumn.type === \"time\" ||\n tableColumn.type === \"timestamp\") &&\n dbColumn[\"DATETIME_PRECISION\"] !== null &&\n dbColumn[\"DATETIME_PRECISION\"] !== undefined &&\n !this.isDefaultColumnPrecision(\n table,\n tableColumn,\n parseInt(dbColumn[\"DATETIME_PRECISION\"]),\n )\n ) {\n tableColumn.precision = parseInt(\n dbColumn[\"DATETIME_PRECISION\"],\n )\n }\n\n return tableColumn\n })\n\n // find foreign key constraints of table, group them by constraint name and build TableForeignKey.\n const tableForeignKeyConstraints = OrmUtils.uniq(\n dbForeignKeys.filter((dbForeignKey) => {\n return (\n dbForeignKey[\"TABLE_NAME\"] === dbTable[\"TABLE_NAME\"] &&\n dbForeignKey[\"TABLE_SCHEMA\"] === dbTable[\"TABLE_SCHEMA\"]\n )\n }),\n (dbForeignKey) => dbForeignKey[\"CONSTRAINT_NAME\"],\n )\n\n table.foreignKeys = tableForeignKeyConstraints.map(\n (dbForeignKey) => {\n const foreignKeys = dbForeignKeys.filter(\n (dbFk) =>\n dbFk[\"CONSTRAINT_NAME\"] ===\n dbForeignKey[\"CONSTRAINT_NAME\"],\n )\n\n // if referenced table located in currently used db, we don't need to concat db name to table name.\n const database =\n dbForeignKey[\"REFERENCED_TABLE_SCHEMA\"] ===\n currentDatabase\n ? undefined\n : dbForeignKey[\"REFERENCED_TABLE_SCHEMA\"]\n const referencedTableName = this.driver.buildTableName(\n dbForeignKey[\"REFERENCED_TABLE_NAME\"],\n undefined,\n database,\n )\n\n return new TableForeignKey({\n name: dbForeignKey[\"CONSTRAINT_NAME\"],\n columnNames: foreignKeys.map(\n (dbFk) => dbFk[\"COLUMN_NAME\"],\n ),\n referencedDatabase:\n dbForeignKey[\"REFERENCED_TABLE_SCHEMA\"],\n referencedTableName: referencedTableName,\n referencedColumnNames: foreignKeys.map(\n (dbFk) => dbFk[\"REFERENCED_COLUMN_NAME\"],\n ),\n onDelete: dbForeignKey[\"ON_DELETE\"],\n onUpdate: dbForeignKey[\"ON_UPDATE\"],\n })\n },\n )\n\n // find index constraints of table, group them by constraint name and build TableIndex.\n const tableIndexConstraints = OrmUtils.uniq(\n dbIndices.filter((dbIndex) => {\n return (\n dbIndex[\"TABLE_NAME\"] === dbTable[\"TABLE_NAME\"] &&\n dbIndex[\"TABLE_SCHEMA\"] === dbTable[\"TABLE_SCHEMA\"]\n )\n }),\n (dbIndex) => dbIndex[\"INDEX_NAME\"],\n )\n\n table.indices = tableIndexConstraints.map((constraint) => {\n const indices = dbIndices.filter((index) => {\n return (\n index[\"TABLE_SCHEMA\"] === constraint[\"TABLE_SCHEMA\"] &&\n index[\"TABLE_NAME\"] === constraint[\"TABLE_NAME\"] &&\n index[\"INDEX_NAME\"] === constraint[\"INDEX_NAME\"]\n )\n })\n\n const nonUnique = parseInt(constraint[\"NON_UNIQUE\"], 10)\n\n return new TableIndex({\n table: table,\n name: constraint[\"INDEX_NAME\"],\n columnNames: indices.map((i) => i[\"COLUMN_NAME\"]),\n isUnique: nonUnique === 0,\n isSpatial: constraint[\"INDEX_TYPE\"] === \"SPATIAL\",\n isFulltext: constraint[\"INDEX_TYPE\"] === \"FULLTEXT\",\n } as TableIndexOptions)\n })\n\n return table\n })\n }\n\n /**\n * Builds create table sql\n *\n * @param table\n * @param createForeignKeys\n */\n protected createTableSql(table: Table, createForeignKeys?: boolean): Query {\n const columnDefinitions = table.columns\n .map((column) => this.buildCreateColumnSql(column, true))\n .join(\", \")\n let sql = `CREATE TABLE ${this.escapePath(table)} (${columnDefinitions}`\n\n // we create unique indexes instead of unique constraints, because MySql does not have unique constraints.\n // if we mark column as Unique, it means that we create UNIQUE INDEX.\n table.columns\n .filter((column) => column.isUnique)\n .forEach((column) => {\n const isUniqueIndexExist = table.indices.some((index) => {\n return (\n index.columnNames.length === 1 &&\n !!index.isUnique &&\n index.columnNames.indexOf(column.name) !== -1\n )\n })\n const isUniqueConstraintExist = table.uniques.some((unique) => {\n return (\n unique.columnNames.length === 1 &&\n unique.columnNames.indexOf(column.name) !== -1\n )\n })\n if (!isUniqueIndexExist && !isUniqueConstraintExist)\n table.indices.push(\n new TableIndex({\n name: this.dataSource.namingStrategy.uniqueConstraintName(\n table,\n [column.name],\n ),\n columnNames: [column.name],\n isUnique: true,\n }),\n )\n })\n\n // as MySql does not have unique constraints, we must create table indices from table uniques and mark them as unique.\n if (table.uniques.length > 0) {\n table.uniques.forEach((unique) => {\n const uniqueExist = table.indices.some(\n (index) => index.name === unique.name,\n )\n if (!uniqueExist) {\n table.indices.push(\n new TableIndex({\n name: unique.name,\n columnNames: unique.columnNames,\n isUnique: true,\n }),\n )\n }\n })\n }\n\n if (table.indices.length > 0) {\n const indicesSql = table.indices\n .map((index) => {\n const columnNames = index.columnNames\n .map((columnName) => `\\`${columnName}\\``)\n .join(\", \")\n index.name ??= this.dataSource.namingStrategy.indexName(\n table,\n index.columnNames,\n index.where,\n )\n\n let indexType = \"\"\n if (index.isUnique) indexType += \"UNIQUE \"\n if (index.isSpatial) indexType += \"SPATIAL \"\n if (index.isFulltext) indexType += \"FULLTEXT \"\n return `${indexType}INDEX \\`${index.name}\\` (${columnNames})`\n })\n .join(\", \")\n\n sql += `, ${indicesSql}`\n }\n\n if (table.foreignKeys.length > 0 && createForeignKeys) {\n const foreignKeysSql = table.foreignKeys\n .map((fk) => {\n const columnNames = fk.columnNames\n .map((columnName) => `\\`${columnName}\\``)\n .join(\", \")\n fk.name ??= this.dataSource.namingStrategy.foreignKeyName(\n table,\n fk.columnNames,\n )\n const referencedColumnNames = fk.referencedColumnNames\n .map((columnName) => `\\`${columnName}\\``)\n .join(\", \")\n\n let constraint = `CONSTRAINT \\`${\n fk.name\n }\\` FOREIGN KEY (${columnNames}) REFERENCES ${this.escapePath(\n this.getTablePath(fk),\n )} (${referencedColumnNames})`\n if (fk.onDelete) constraint += ` ON DELETE ${fk.onDelete}`\n if (fk.onUpdate) constraint += ` ON UPDATE ${fk.onUpdate}`\n\n return constraint\n })\n .join(\", \")\n\n sql += `, ${foreignKeysSql}`\n }\n\n if (table.primaryColumns.length > 0) {\n const columnNames = table.primaryColumns\n .map((column) => `\\`${column.name}\\``)\n .join(\", \")\n sql += `, PRIMARY KEY (${columnNames})`\n }\n\n sql += `) ENGINE=${table.engine ?? \"InnoDB\"}`\n\n return new Query(sql)\n }\n\n /**\n * Builds drop table sql\n *\n * @param tableOrName\n */\n protected dropTableSql(tableOrName: Table | string): Query {\n return new Query(`DROP TABLE ${this.escapePath(tableOrName)}`)\n }\n\n protected createViewSql(view: View): Query {\n if (typeof view.expression === \"string\") {\n return new Query(\n `CREATE VIEW ${this.escapePath(view)} AS ${view.expression}`,\n )\n } else {\n return new Query(\n `CREATE VIEW ${this.escapePath(view)} AS ${view\n .expression(this.dataSource)\n .getQuery()}`,\n )\n }\n }\n\n protected async insertViewDefinitionSql(view: View): Promise<Query> {\n const currentDatabase = await this.getCurrentDatabase()\n const expression =\n typeof view.expression === \"string\"\n ? view.expression.trim()\n : view.expression(this.dataSource).getQuery()\n return this.insertTypeormMetadataSql({\n type: MetadataTableType.VIEW,\n schema: currentDatabase,\n name: view.name,\n value: expression,\n })\n }\n\n /**\n * Builds drop view sql.\n *\n * @param viewOrPath\n * @param ifExists\n */\n protected dropViewSql(\n viewOrPath: View | string,\n ifExists?: boolean,\n ): Query {\n const ifExistsClause = ifExists ? \"IF EXISTS \" : \"\"\n return new Query(\n `DROP VIEW ${ifExistsClause}${this.escapePath(viewOrPath)}`,\n )\n }\n\n /**\n * Builds remove view sql.\n *\n * @param viewOrPath\n */\n protected async deleteViewDefinitionSql(\n viewOrPath: View | string,\n ): Promise<Query> {\n const currentDatabase = await this.getCurrentDatabase()\n const viewName = InstanceChecker.isView(viewOrPath)\n ? viewOrPath.name\n : viewOrPath\n return this.deleteTypeormMetadataSql({\n type: MetadataTableType.VIEW,\n schema: currentDatabase,\n name: viewName,\n })\n }\n\n /**\n * Builds create index sql.\n *\n * @param table\n * @param index\n */\n protected createIndexSql(table: Table, index: TableIndex): Query {\n const columns = index.columnNames\n .map((columnName) => `\\`${columnName}\\``)\n .join(\", \")\n let indexType = \"\"\n if (index.isUnique) indexType += \"UNIQUE \"\n if (index.isSpatial) indexType += \"SPATIAL \"\n if (index.isFulltext) indexType += \"FULLTEXT \"\n return new Query(\n `CREATE ${indexType}INDEX \\`${index.name}\\` ON ${this.escapePath(\n table,\n )} (${columns})`,\n )\n }\n\n /**\n * Builds drop index sql.\n *\n * @param table\n * @param indexOrName\n */\n protected dropIndexSql(\n table: Table,\n indexOrName: TableIndex | string,\n ): Query {\n const indexName = InstanceChecker.isTableIndex(indexOrName)\n ? indexOrName.name\n : indexOrName\n return new Query(\n `DROP INDEX \\`${indexName}\\` ON ${this.escapePath(table)}`,\n )\n }\n\n /**\n * Builds create primary key sql.\n *\n * @param table\n * @param columnNames\n */\n protected createPrimaryKeySql(table: Table, columnNames: string[]): Query {\n const columnNamesString = columnNames\n .map((columnName) => `\\`${columnName}\\``)\n .join(\", \")\n return new Query(\n `ALTER TABLE ${this.escapePath(\n table,\n )} ADD PRIMARY KEY (${columnNamesString})`,\n )\n }\n\n /**\n * Builds drop primary key sql.\n *\n * @param table\n */\n protected dropPrimaryKeySql(table: Table): Query {\n return new Query(\n `ALTER TABLE ${this.escapePath(table)} DROP PRIMARY KEY`,\n )\n }\n\n /**\n * Builds create foreign key sql.\n *\n * @param table\n * @param foreignKey\n */\n protected createForeignKeySql(\n table: Table,\n foreignKey: TableForeignKey,\n ): Query {\n const columnNames = foreignKey.columnNames\n .map((column) => `\\`${column}\\``)\n .join(\", \")\n const referencedColumnNames = foreignKey.referencedColumnNames\n .map((column) => `\\`${column}\\``)\n .join(\",\")\n let sql =\n `ALTER TABLE ${this.escapePath(table)} ADD CONSTRAINT \\`${\n foreignKey.name\n }\\` FOREIGN KEY (${columnNames}) ` +\n `REFERENCES ${this.escapePath(\n this.getTablePath(foreignKey),\n )}(${referencedColumnNames})`\n if (foreignKey.onDelete) sql += ` ON DELETE ${foreignKey.onDelete}`\n if (foreignKey.onUpdate) sql += ` ON UPDATE ${foreignKey.onUpdate}`\n\n return new Query(sql)\n }\n\n /**\n * Builds drop foreign key sql.\n *\n * @param table\n * @param foreignKeyOrName\n */\n protected dropForeignKeySql(\n table: Table,\n foreignKeyOrName: TableForeignKey | string,\n ): Query {\n const foreignKeyName = InstanceChecker.isTableForeignKey(\n foreignKeyOrName,\n )\n ? foreignKeyOrName.name\n : foreignKeyOrName\n return new Query(\n `ALTER TABLE ${this.escapePath(\n table,\n )} DROP FOREIGN KEY \\`${foreignKeyName}\\``,\n )\n }\n\n /**\n * Escapes a given comment so it's safe to include in a query.\n *\n * @param comment\n */\n protected escapeComment(comment?: string) {\n if (!comment || comment.length === 0) {\n return `''`\n }\n\n comment = comment\n .replace(/\\\\/g, \"\\\\\\\\\") // MySQL allows escaping characters via backslashes\n .replace(/'/g, \"''\")\n .replace(/\\u0000/g, \"\") // Null bytes aren't allowed in comments\n\n return `'${comment}'`\n }\n\n /**\n * Escapes given table or view path.\n *\n * @param target\n */\n protected escapePath(target: Table | View | string): string {\n const { database, tableName } = this.driver.parseTableName(target)\n\n if (database && database !== this.driver.database) {\n return `\\`${database}\\`.\\`${tableName}\\``\n }\n\n return `\\`${tableName}\\``\n }\n\n /**\n * Builds a part of query to create/change a column.\n *\n * @param column\n * @param skipPrimary\n * @param skipName\n */\n protected buildCreateColumnSql(\n column: TableColumn,\n skipPrimary: boolean,\n skipName: boolean = false,\n ) {\n let c: string\n if (skipName) {\n c = this.dataSource.driver.createFullType(column)\n } else {\n c = `\\`${column.name}\\` ${this.dataSource.driver.createFullType(\n column,\n )}`\n }\n\n if (column.asExpression)\n c += ` AS (${column.asExpression}) ${\n column.generatedType ?? \"VIRTUAL\"\n }`\n\n if (column.unsigned) {\n c += \" UNSIGNED\"\n }\n\n if (column.enum)\n c += ` (${column.enum\n .map((value) => \"'\" + value + \"'\")\n .join(\", \")})`\n if (column.charset) c += ` CHARACTER SET \"${column.charset}\"`\n if (column.collation) c += ` COLLATE \"${column.collation}\"`\n if (!column.isNullable) c += \" NOT NULL\"\n if (column.isNullable) c += \" NULL\"\n if (column.isPrimary && !skipPrimary) c += \" PRIMARY KEY\"\n if (column.isGenerated && column.generationStrategy === \"increment\")\n // don't use skipPrimary here since updates can update already exist primary without auto inc.\n c += \" AUTO_INCREMENT\"\n if (column.comment)\n c += ` COMMENT ${this.escapeComment(column.comment)}`\n if (column.default !== undefined && column.default !== null)\n c += ` DEFAULT ${column.default}`\n if (column.onUpdate) c += ` ON UPDATE ${column.onUpdate}`\n\n return c\n }\n\n /**\n * Change table comment.\n *\n * @param tableOrName\n * @param comment\n */\n changeTableComment(\n tableOrName: Table | string,\n comment?: string,\n ): Promise<void> {\n throw new TypeORMError(\n `aurora-mysql driver does not support change table comment.`,\n )\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"AuroraMysqlQueryRunner.js","sourceRoot":"","sources":["../../../../src/driver/aurora-mysql/AuroraMysqlQueryRunner.ts"],"names":[],"mappings":";;;AACA,uCAA0C;AAC1C,uGAAmG;AACnG,iGAA6F;AAC7F,uFAAmF;AAEnF,wEAAoE;AACpE,gEAA4D;AAG5D,4DAAwD;AAExD,wEAAoE;AAEpE,gFAA4E;AAC5E,sEAAkE;AAClE,wEAAoE;AACpE,yDAAqD;AACrD,8DAA0D;AAC1D,gEAA4D;AAC5D,kDAA8C;AAC9C,oCAAgC;AAGhC,0EAAoE;AACpE,kEAA8D;AAG9D;;GAEG;AACH,MAAa,sBACT,SAAQ,iCAAe;IAwBvB,4EAA4E;IAC5E,cAAc;IACd,4EAA4E;IAE5E,YAAY,MAAyB,EAAE,MAAW;QAC9C,KAAK,EAAE,CAAA;QACP,IAAI,CAAC,MAAM,GAAG,MAAM,CAAA;QACpB,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC,UAAU,CAAA;QACnC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAA;QACpB,IAAI,CAAC,WAAW,GAAG,IAAI,yBAAW,CAAC,IAAI,CAAC,CAAA;IAC5C,CAAC;IAED,4EAA4E;IAC5E,iBAAiB;IACjB,4EAA4E;IAE5E;;;OAGG;IACH,KAAK,CAAC,OAAO;QACT,OAAO,EAAE,CAAA;IACb,CAAC;IAED;;;OAGG;IACH,OAAO;QACH,IAAI,CAAC,UAAU,GAAG,IAAI,CAAA;QACtB,IAAI,IAAI,CAAC,kBAAkB;YAAE,IAAI,CAAC,kBAAkB,CAAC,OAAO,EAAE,CAAA;QAC9D,OAAO,OAAO,CAAC,OAAO,EAAE,CAAA;IAC5B,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,gBAAgB,CAAC,cAA+B;QAClD,cAAc,KAAK,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,cAAc,CAAA;QAEzD,IAAA,iDAAsB,EAClB,IAAI,CAAC,MAAM,CAAC,wBAAwB,EACpC,cAAc,CACjB,CAAA;QAED,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAA;QAC/B,IAAI,CAAC;YACD,MAAM,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,wBAAwB,CAAC,CAAA;QAC9D,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACX,IAAI,CAAC,mBAAmB,GAAG,KAAK,CAAA;YAChC,MAAM,GAAG,CAAA;QACb,CAAC;QAED,IAAI,IAAI,CAAC,gBAAgB,KAAK,CAAC,EAAE,CAAC;YAC9B,IAAI,CAAC;gBACD,MAAM,IAAI,CAAC,MAAM,CAAC,gBAAgB,EAAE,CAAA;YACxC,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACX,IAAI,CAAC,mBAAmB,GAAG,KAAK,CAAA;gBAChC,MAAM,GAAG,CAAA;YACb,CAAC;QACL,CAAC;aAAM,CAAC;YACJ,MAAM,IAAI,CAAC,KAAK,CAAC,qBAAqB,IAAI,CAAC,gBAAgB,EAAE,CAAC,CAAA;QAClE,CAAC;QACD,IAAI,CAAC,gBAAgB,IAAI,CAAC,CAAA;QAE1B,MAAM,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,uBAAuB,CAAC,CAAA;IAC7D,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,iBAAiB;QACnB,IAAI,CAAC,IAAI,CAAC,mBAAmB;YAAE,MAAM,IAAI,uDAA0B,EAAE,CAAA;QAErE,MAAM,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,yBAAyB,CAAC,CAAA;QAE3D,IAAI,IAAI,CAAC,gBAAgB,GAAG,CAAC,EAAE,CAAC;YAC5B,MAAM,IAAI,CAAC,KAAK,CACZ,6BAA6B,IAAI,CAAC,gBAAgB,GAAG,CAAC,EAAE,CAC3D,CAAA;QACL,CAAC;aAAM,CAAC;YACJ,MAAM,IAAI,CAAC,MAAM,CAAC,iBAAiB,EAAE,CAAA;YACrC,IAAI,CAAC,mBAAmB,GAAG,KAAK,CAAA;QACpC,CAAC;QACD,IAAI,CAAC,gBAAgB,IAAI,CAAC,CAAA;QAE1B,MAAM,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,wBAAwB,CAAC,CAAA;IAC9D,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,mBAAmB;QACrB,IAAI,CAAC,IAAI,CAAC,mBAAmB;YAAE,MAAM,IAAI,uDAA0B,EAAE,CAAA;QAErE,MAAM,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,2BAA2B,CAAC,CAAA;QAE7D,IAAI,IAAI,CAAC,gBAAgB,GAAG,CAAC,EAAE,CAAC;YAC5B,MAAM,IAAI,CAAC,KAAK,CACZ,iCAAiC,IAAI,CAAC,gBAAgB,GAAG,CAAC,EAAE,CAC/D,CAAA;QACL,CAAC;aAAM,CAAC;YACJ,MAAM,IAAI,CAAC,MAAM,CAAC,mBAAmB,EAAE,CAAA;YACvC,IAAI,CAAC,mBAAmB,GAAG,KAAK,CAAA;QACpC,CAAC;QACD,IAAI,CAAC,gBAAgB,IAAI,CAAC,CAAA;QAE1B,MAAM,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,0BAA0B,CAAC,CAAA;IAChE,CAAC;IAED;;;;;;OAMG;IACH,KAAK,CAAC,KAAK,CACP,KAAa,EACb,UAAkC,EAClC,mBAAmB,GAAG,KAAK;QAE3B,IAAI,IAAI,CAAC,UAAU;YAAE,MAAM,IAAI,iEAA+B,EAAE,CAAA;QAChE,IAAI,UAAU,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC;YACxC,MAAM,IAAI,uEAAkC,EAAE,CAAA;QAElD,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,UAAU,CAAC,CAAA;QAEtD,MAAM,MAAM,GAAG,IAAI,yBAAW,EAAE,CAAA;QAEhC,MAAM,CAAC,GAAG,GAAG,GAAG,CAAA;QAEhB,IAAI,GAAG,EAAE,cAAc,CAAC,SAAS,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;YAC/D,MAAM,CAAC,OAAO,GAAG,GAAG,CAAC,OAAO,CAAA;QAChC,CAAC;QAED,IAAI,GAAG,EAAE,cAAc,CAAC,wBAAwB,CAAC,EAAE,CAAC;YAChD,MAAM,CAAC,QAAQ,GAAG,GAAG,CAAC,sBAAsB,CAAA;QAChD,CAAC;QAED,IAAI,CAAC,mBAAmB,EAAE,CAAC;YACvB,OAAO,MAAM,CAAC,GAAG,CAAA;QACrB,CAAC;QAED,OAAO,MAAM,CAAA;IACjB,CAAC;IAED;;;;;;;OAOG;IACH,MAAM,CACF,KAAa,EACb,UAAkB,EAClB,KAAgB,EAChB,OAAkB;QAElB,IAAI,IAAI,CAAC,UAAU;YAAE,MAAM,IAAI,iEAA+B,EAAE,CAAA;QAEhE,OAAO,IAAI,OAAO,CAAC,KAAK,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE;YAClC,IAAI,CAAC;gBACD,MAAM,kBAAkB,GAAG,MAAM,IAAI,CAAC,OAAO,EAAE,CAAA;gBAC/C,MAAM,MAAM,GAAG,kBAAkB,CAAC,KAAK,CAAC,KAAK,EAAE,UAAU,CAAC,CAAA;gBAC1D,IAAI,KAAK;oBAAE,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,CAAA;gBAClC,IAAI,OAAO;oBAAE,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,CAAC,CAAA;gBACxC,EAAE,CAAC,MAAM,CAAC,CAAA;YACd,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACX,IAAI,CAAC,GAAG,CAAC,CAAA;YACb,CAAC;QACL,CAAC,CAAC,CAAA;IACN,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,YAAY;QACd,OAAO,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,CAAA;IAC9B,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,UAAU,CAAC,QAAiB;QAC9B,MAAM,IAAI,oBAAY,CAAC,6CAA6C,CAAC,CAAA;IACzE,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,WAAW,CAAC,QAAgB;QAC9B,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,KAAK,CAC3B,6EAA6E,EAC7E,CAAC,QAAQ,CAAC,CACb,CAAA;QACD,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAA;IACvC,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,kBAAkB;QACpB,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,kCAAkC,CAAC,CAAA;QAClE,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAA;IAC9B,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,SAAS,CAAC,MAAc;QAC1B,MAAM,IAAI,oBAAY,CAAC,6CAA6C,CAAC,CAAA;IACzE,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,gBAAgB;QAClB,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,oCAAoC,CAAC,CAAA;QACpE,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,CAAA;IAClC,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,QAAQ,CAAC,WAA2B;QACtC,MAAM,eAAe,GAAG,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,WAAW,CAAC,CAAA;QAC/D,MAAM,GAAG,GAAG,oGAAoG,CAAA;QAChH,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE;YACjC,eAAe,CAAC,QAAQ;YACxB,eAAe,CAAC,SAAS;SAC5B,CAAC,CAAA;QACF,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAA;IACvC,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,SAAS,CACX,WAA2B,EAC3B,MAA4B;QAE5B,MAAM,eAAe,GAAG,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,WAAW,CAAC,CAAA;QAC/D,MAAM,UAAU,GAAG,iCAAe,CAAC,aAAa,CAAC,MAAM,CAAC;YACpD,CAAC,CAAC,MAAM,CAAC,IAAI;YACb,CAAC,CAAC,MAAM,CAAA;QACZ,MAAM,GAAG,GAAG,4HAA4H,CAAA;QACxI,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE;YACjC,eAAe,CAAC,QAAQ;YACxB,eAAe,CAAC,SAAS;YACzB,UAAU;SACb,CAAC,CAAA;QACF,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAA;IACvC,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,cAAc,CAChB,QAAgB,EAChB,WAAqB;QAErB,MAAM,EAAE,GAAG,WAAW;YAClB,CAAC,CAAC,iCAAiC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE;YACjE,CAAC,CAAC,mBAAmB,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAA;QACvD,MAAM,IAAI,GAAG,iBAAiB,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAA;QAC5D,MAAM,IAAI,CAAC,cAAc,CAAC,IAAI,aAAK,CAAC,EAAE,CAAC,EAAE,IAAI,aAAK,CAAC,IAAI,CAAC,CAAC,CAAA;IAC7D,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,YAAY,CAAC,QAAgB,EAAE,QAAkB;QACnD,MAAM,EAAE,GAAG,QAAQ;YACf,CAAC,CAAC,2BAA2B,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE;YAC3D,CAAC,CAAC,iBAAiB,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAA;QACrD,MAAM,IAAI,GAAG,mBAAmB,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAA;QAC9D,MAAM,IAAI,CAAC,cAAc,CAAC,IAAI,aAAK,CAAC,EAAE,CAAC,EAAE,IAAI,aAAK,CAAC,IAAI,CAAC,CAAC,CAAA;IAC7D,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,YAAY,CACd,UAAkB,EAClB,WAAqB;QAErB,MAAM,IAAI,oBAAY,CAClB,0DAA0D,CAC7D,CAAA;IACL,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,UAAU,CAAC,UAAkB,EAAE,QAAkB;QACnD,MAAM,IAAI,oBAAY,CAClB,wDAAwD,CAC3D,CAAA;IACL,CAAC;IAED;;;;;;OAMG;IACH,KAAK,CAAC,WAAW,CACb,KAAY,EACZ,cAAuB,KAAK,EAC5B,oBAA6B,IAAI;QAEjC,IAAI,WAAW,EAAE,CAAC;YACd,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAA;YAC/C,IAAI,YAAY;gBAAE,OAAO,OAAO,CAAC,OAAO,EAAE,CAAA;QAC9C,CAAC;QACD,MAAM,SAAS,GAAY,EAAE,CAAA;QAC7B,MAAM,WAAW,GAAY,EAAE,CAAA;QAE/B,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,iBAAiB,CAAC,CAAC,CAAA;QAC7D,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,CAAA;QAE1C,kGAAkG;QAClG,+GAA+G;QAC/G,oCAAoC;QAEpC,gIAAgI;QAChI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE,CAC5B,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,CACpD,CAAA;QAED,iFAAiF;QACjF,kIAAkI;QAClI,IAAI,iBAAiB;YACjB,KAAK,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,UAAU,EAAE,EAAE,CACrC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC,CAC9D,CAAA;QAEL,OAAO,IAAI,CAAC,cAAc,CAAC,SAAS,EAAE,WAAW,CAAC,CAAA;IACtD,CAAC;IAED;;;;;;OAMG;IACH,KAAK,CAAC,SAAS,CACX,MAAsB,EACtB,QAAkB,EAClB,kBAA2B,IAAI;QAE/B,qGAAqG;QACrG,wDAAwD;QACxD,IAAI,QAAQ,EAAE,CAAC;YACX,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAA;YAChD,IAAI,CAAC,YAAY;gBAAE,OAAO,OAAO,CAAC,OAAO,EAAE,CAAA;QAC/C,CAAC;QAED,8FAA8F;QAC9F,MAAM,iBAAiB,GAAY,eAAe,CAAA;QAClD,MAAM,SAAS,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAA;QAC3C,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,CAAA;QAClD,MAAM,SAAS,GAAY,EAAE,CAAA;QAC7B,MAAM,WAAW,GAAY,EAAE,CAAA;QAE/B,IAAI,eAAe;YACf,KAAK,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,UAAU,EAAE,EAAE,CACrC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC,CAC5D,CAAA;QAEL,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE,CAC5B,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,CAClD,CAAA;QAED,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,CAAA;QACxC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,iBAAiB,CAAC,CAAC,CAAA;QAE/D,MAAM,IAAI,CAAC,cAAc,CAAC,SAAS,EAAE,WAAW,CAAC,CAAA;IACrD,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,UAAU,CACZ,IAAU,EACV,mBAA4B,KAAK;QAEjC,MAAM,SAAS,GAAY,EAAE,CAAA;QAC7B,MAAM,WAAW,GAAY,EAAE,CAAA;QAC/B,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CAAA;QACxC,IAAI,gBAAgB;YAChB,SAAS,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,CAAC,CAAA;QAC5D,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAA;QACxC,IAAI,gBAAgB;YAChB,WAAW,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,CAAC,CAAA;QAC9D,MAAM,IAAI,CAAC,cAAc,CAAC,SAAS,EAAE,WAAW,CAAC,CAAA;IACrD,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,QAAQ,CAAC,MAAqB,EAAE,QAAkB;QACpD,MAAM,QAAQ,GAAG,iCAAe,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAA;QACtE,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAA;QAE/C,MAAM,IAAI,CAAC,cAAc,CACrB;YACI,MAAM,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC;YACxC,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,QAAQ,CAAC;SACnC,EACD;YACI,MAAM,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC;YACxC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC;SAC3B,CACJ,CAAA;IACL,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,WAAW,CACb,cAA8B,EAC9B,YAAoB;QAEpB,MAAM,SAAS,GAAY,EAAE,CAAA;QAC7B,MAAM,WAAW,GAAY,EAAE,CAAA;QAC/B,MAAM,QAAQ,GAAG,iCAAe,CAAC,OAAO,CAAC,cAAc,CAAC;YACpD,CAAC,CAAC,cAAc;YAChB,CAAC,CAAC,MAAM,IAAI,CAAC,cAAc,CAAC,cAAc,CAAC,CAAA;QAC/C,MAAM,QAAQ,GAAG,QAAQ,CAAC,KAAK,EAAE,CAAA;QAEjC,MAAM,EAAE,QAAQ,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAA;QACzD,QAAQ,CAAC,IAAI,GAAG,QAAQ,CAAC,CAAC,CAAC,GAAG,QAAQ,IAAI,YAAY,EAAE,CAAC,CAAC,CAAC,YAAY,CAAA;QAEvE,eAAe;QACf,SAAS,CAAC,IAAI,CACV,IAAI,aAAK,CACL,gBAAgB,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,OAAO,IAAI,CAAC,UAAU,CAC3D,QAAQ,CACX,EAAE,CACN,CACJ,CAAA;QACD,WAAW,CAAC,IAAI,CACZ,IAAI,aAAK,CACL,gBAAgB,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,OAAO,IAAI,CAAC,UAAU,CAC3D,QAAQ,CACX,EAAE,CACN,CACJ,CAAA;QAED,2BAA2B;QAC3B,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE;YAC/B,4BAA4B;YAC5B,MAAM,WAAW,GAAG,KAAK,CAAC,WAAW;iBAChC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,KAAK,MAAM,IAAI,CAAC;iBAChC,IAAI,CAAC,IAAI,CAAC,CAAA;YACf,MAAM,YAAY,GAAG,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC,SAAS,CACzD,QAAQ,EACR,KAAK,CAAC,WAAW,EACjB,KAAK,CAAC,KAAK,CACd,CAAA;YAED,gBAAgB;YAChB,IAAI,SAAS,GAAG,EAAE,CAAA;YAClB,IAAI,KAAK,CAAC,QAAQ;gBAAE,SAAS,IAAI,SAAS,CAAA;YAC1C,IAAI,KAAK,CAAC,SAAS;gBAAE,SAAS,IAAI,UAAU,CAAA;YAC5C,IAAI,KAAK,CAAC,UAAU;gBAAE,SAAS,IAAI,WAAW,CAAA;YAC9C,SAAS,CAAC,IAAI,CACV,IAAI,aAAK,CACL,eAAe,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,iBACpC,KAAK,CAAC,IACV,WAAW,SAAS,WAAW,YAAY,OAAO,WAAW,GAAG,CACnE,CACJ,CAAA;YACD,WAAW,CAAC,IAAI,CACZ,IAAI,aAAK,CACL,eAAe,IAAI,CAAC,UAAU,CAC1B,QAAQ,CACX,iBAAiB,YAAY,WAAW,SAAS,WAC9C,KAAK,CAAC,IACV,OAAO,WAAW,GAAG,CACxB,CACJ,CAAA;YAED,0BAA0B;YAC1B,KAAK,CAAC,IAAI,GAAG,YAAY,CAAA;QAC7B,CAAC,CAAC,CAAA;QAEF,gCAAgC;QAChC,QAAQ,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,UAAU,EAAE,EAAE;YACxC,4BAA4B;YAC5B,MAAM,WAAW,GAAG,UAAU,CAAC,WAAW;iBACrC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,KAAK,MAAM,IAAI,CAAC;iBAChC,IAAI,CAAC,IAAI,CAAC,CAAA;YACf,MAAM,qBAAqB,GAAG,UAAU,CAAC,qBAAqB;iBACzD,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,KAAK,MAAM,IAAI,CAAC;iBAChC,IAAI,CAAC,GAAG,CAAC,CAAA;YACd,MAAM,iBAAiB,GACnB,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC,cAAc,CACzC,QAAQ,EACR,UAAU,CAAC,WAAW,CACzB,CAAA;YAEL,gBAAgB;YAChB,IAAI,EAAE,GACF,eAAe,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,uBACpC,UAAU,CAAC,IACf,wBAAwB,iBAAiB,mBAAmB,WAAW,IAAI;gBAC3E,cAAc,IAAI,CAAC,UAAU,CACzB,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,CAChC,IAAI,qBAAqB,GAAG,CAAA;YACjC,IAAI,UAAU,CAAC,QAAQ;gBAAE,EAAE,IAAI,cAAc,UAAU,CAAC,QAAQ,EAAE,CAAA;YAClE,IAAI,UAAU,CAAC,QAAQ;gBAAE,EAAE,IAAI,cAAc,UAAU,CAAC,QAAQ,EAAE,CAAA;YAElE,IAAI,IAAI,GACJ,eAAe,IAAI,CAAC,UAAU,CAC1B,QAAQ,CACX,uBAAuB,iBAAiB,wBACrC,UAAU,CAAC,IACf,mBAAmB,WAAW,IAAI;gBAClC,cAAc,IAAI,CAAC,UAAU,CACzB,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,CAChC,IAAI,qBAAqB,GAAG,CAAA;YACjC,IAAI,UAAU,CAAC,QAAQ;gBAAE,IAAI,IAAI,cAAc,UAAU,CAAC,QAAQ,EAAE,CAAA;YACpE,IAAI,UAAU,CAAC,QAAQ;gBAAE,IAAI,IAAI,cAAc,UAAU,CAAC,QAAQ,EAAE,CAAA;YAEpE,SAAS,CAAC,IAAI,CAAC,IAAI,aAAK,CAAC,EAAE,CAAC,CAAC,CAAA;YAC7B,WAAW,CAAC,IAAI,CAAC,IAAI,aAAK,CAAC,IAAI,CAAC,CAAC,CAAA;YAEjC,0BAA0B;YAC1B,UAAU,CAAC,IAAI,GAAG,iBAAiB,CAAA;QACvC,CAAC,CAAC,CAAA;QAEF,MAAM,IAAI,CAAC,cAAc,CAAC,SAAS,EAAE,WAAW,CAAC,CAAA;QAEjD,oDAAoD;QACpD,QAAQ,CAAC,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAA;QAC7B,IAAI,CAAC,kBAAkB,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAA;IAC/C,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,SAAS,CACX,WAA2B,EAC3B,MAAmB;QAEnB,MAAM,KAAK,GAAG,iCAAe,CAAC,OAAO,CAAC,WAAW,CAAC;YAC9C,CAAC,CAAC,WAAW;YACb,CAAC,CAAC,MAAM,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC,CAAA;QAC5C,MAAM,WAAW,GAAG,KAAK,CAAC,KAAK,EAAE,CAAA;QACjC,MAAM,SAAS,GAAY,EAAE,CAAA;QAC7B,MAAM,WAAW,GAAY,EAAE,CAAA;QAC/B,MAAM,sBAAsB,GAAG,WAAW,CAAC,cAAc,CAAC,MAAM,GAAG,CAAC,CAAA;QAEpE,SAAS,CAAC,IAAI,CACV,IAAI,aAAK,CACL,eAAe,IAAI,CAAC,UAAU,CAC1B,KAAK,CACR,QAAQ,IAAI,CAAC,oBAAoB,CAC9B,MAAM,EACN,sBAAsB,EACtB,KAAK,CACR,EAAE,CACN,CACJ,CAAA;QACD,WAAW,CAAC,IAAI,CACZ,IAAI,aAAK,CACL,eAAe,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,kBACjC,MAAM,CAAC,IACX,IAAI,CACP,CACJ,CAAA;QAED,0CAA0C;QAC1C,IAAI,MAAM,CAAC,SAAS,IAAI,sBAAsB,EAAE,CAAC;YAC7C,uFAAuF;YACvF,MAAM,eAAe,GAAG,WAAW,CAAC,OAAO,CAAC,IAAI,CAC5C,CAAC,MAAM,EAAE,EAAE,CACP,MAAM,CAAC,WAAW;gBAClB,MAAM,CAAC,kBAAkB,KAAK,WAAW,CAChD,CAAA;YACD,IAAI,eAAe,EAAE,CAAC;gBAClB,MAAM,kBAAkB,GAAG,eAAe,CAAC,KAAK,EAAE,CAAA;gBAClD,kBAAkB,CAAC,WAAW,GAAG,KAAK,CAAA;gBACtC,kBAAkB,CAAC,kBAAkB,GAAG,SAAS,CAAA;gBACjD,SAAS,CAAC,IAAI,CACV,IAAI,aAAK,CACL,eAAe,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,aACjC,MAAM,CAAC,IACX,MAAM,IAAI,CAAC,oBAAoB,CAC3B,kBAAkB,EAClB,IAAI,CACP,EAAE,CACN,CACJ,CAAA;gBACD,WAAW,CAAC,IAAI,CACZ,IAAI,aAAK,CACL,eAAe,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,aACjC,kBAAkB,CAAC,IACvB,MAAM,IAAI,CAAC,oBAAoB,CAAC,MAAM,EAAE,IAAI,CAAC,EAAE,CAClD,CACJ,CAAA;YACL,CAAC;YAED,MAAM,cAAc,GAAG,WAAW,CAAC,cAAc,CAAA;YACjD,IAAI,WAAW,GAAG,cAAc;iBAC3B,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC;iBACrC,IAAI,CAAC,IAAI,CAAC,CAAA;YACf,SAAS,CAAC,IAAI,CACV,IAAI,aAAK,CACL,eAAe,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,mBAAmB,CAC3D,CACJ,CAAA;YACD,WAAW,CAAC,IAAI,CACZ,IAAI,aAAK,CACL,eAAe,IAAI,CAAC,UAAU,CAC1B,KAAK,CACR,qBAAqB,WAAW,GAAG,CACvC,CACJ,CAAA;YAED,cAAc,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;YAC3B,WAAW,GAAG,cAAc;iBACvB,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC;iBACrC,IAAI,CAAC,IAAI,CAAC,CAAA;YACf,SAAS,CAAC,IAAI,CACV,IAAI,aAAK,CACL,eAAe,IAAI,CAAC,UAAU,CAC1B,KAAK,CACR,qBAAqB,WAAW,GAAG,CACvC,CACJ,CAAA;YACD,WAAW,CAAC,IAAI,CACZ,IAAI,aAAK,CACL,eAAe,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,mBAAmB,CAC3D,CACJ,CAAA;YAED,0EAA0E;YAC1E,IAAI,eAAe,EAAE,CAAC;gBAClB,MAAM,kBAAkB,GAAG,eAAe,CAAC,KAAK,EAAE,CAAA;gBAClD,kBAAkB,CAAC,WAAW,GAAG,KAAK,CAAA;gBACtC,kBAAkB,CAAC,kBAAkB,GAAG,SAAS,CAAA;gBACjD,SAAS,CAAC,IAAI,CACV,IAAI,aAAK,CACL,eAAe,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,aACjC,kBAAkB,CAAC,IACvB,MAAM,IAAI,CAAC,oBAAoB,CAAC,MAAM,EAAE,IAAI,CAAC,EAAE,CAClD,CACJ,CAAA;gBACD,WAAW,CAAC,IAAI,CACZ,IAAI,aAAK,CACL,eAAe,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,aACjC,MAAM,CAAC,IACX,MAAM,IAAI,CAAC,oBAAoB,CAC3B,kBAAkB,EAClB,IAAI,CACP,EAAE,CACN,CACJ,CAAA;YACL,CAAC;QACL,CAAC;QAED,sBAAsB;QACtB,MAAM,WAAW,GAAG,WAAW,CAAC,OAAO,CAAC,IAAI,CACxC,CAAC,KAAK,EAAE,EAAE,CACN,KAAK,CAAC,WAAW,CAAC,MAAM,KAAK,CAAC;YAC9B,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,KAAK,MAAM,CAAC,IAAI,CAC3C,CAAA;QACD,IAAI,WAAW,EAAE,CAAC;YACd,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC,CAAA;YACvD,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC,CAAA;QAC3D,CAAC;aAAM,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;YACzB,MAAM,WAAW,GAAG,IAAI,uBAAU,CAAC;gBAC/B,IAAI,EAAE,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC,SAAS,CAAC,KAAK,EAAE;oBAClD,MAAM,CAAC,IAAI;iBACd,CAAC;gBACF,WAAW,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC;gBAC1B,QAAQ,EAAE,IAAI;aACjB,CAAC,CAAA;YACF,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,CAAA;YACrC,WAAW,CAAC,OAAO,CAAC,IAAI,CACpB,IAAI,yBAAW,CAAC;gBACZ,IAAI,EAAE,WAAW,CAAC,IAAI;gBACtB,WAAW,EAAE,WAAW,CAAC,WAAW;aACvC,CAAC,CACL,CAAA;YACD,SAAS,CAAC,IAAI,CACV,IAAI,aAAK,CACL,eAAe,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,uBACjC,WAAW,CAAC,IAChB,SAAS,MAAM,CAAC,IAAI,KAAK,CAC5B,CACJ,CAAA;YACD,WAAW,CAAC,IAAI,CACZ,IAAI,aAAK,CACL,eAAe,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,iBACjC,WAAW,CAAC,IAChB,IAAI,CACP,CACJ,CAAA;QACL,CAAC;QAED,MAAM,IAAI,CAAC,cAAc,CAAC,SAAS,EAAE,WAAW,CAAC,CAAA;QAEjD,WAAW,CAAC,SAAS,CAAC,MAAM,CAAC,CAAA;QAC7B,IAAI,CAAC,kBAAkB,CAAC,KAAK,EAAE,WAAW,CAAC,CAAA;IAC/C,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,UAAU,CACZ,WAA2B,EAC3B,OAAsB;QAEtB,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;YAC3B,MAAM,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE,MAAM,CAAC,CAAA;QAC7C,CAAC;IACL,CAAC;IAED;;;;;;OAMG;IACH,KAAK,CAAC,YAAY,CACd,WAA2B,EAC3B,oBAA0C,EAC1C,oBAA0C;QAE1C,MAAM,KAAK,GAAG,iCAAe,CAAC,OAAO,CAAC,WAAW,CAAC;YAC9C,CAAC,CAAC,WAAW;YACb,CAAC,CAAC,MAAM,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC,CAAA;QAC5C,MAAM,SAAS,GAAG,iCAAe,CAAC,aAAa,CAAC,oBAAoB,CAAC;YACjE,CAAC,CAAC,oBAAoB;YACtB,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,oBAAoB,CAAC,CAAA;QAChE,IAAI,CAAC,SAAS;YACV,MAAM,IAAI,oBAAY,CAClB,WAAW,oBAAoB,2BAA2B,KAAK,CAAC,IAAI,UAAU,CACjF,CAAA;QAEL,IAAI,SAAsB,CAAA;QAC1B,IAAI,iCAAe,CAAC,aAAa,CAAC,oBAAoB,CAAC,EAAE,CAAC;YACtD,SAAS,GAAG,oBAAoB,CAAA;QACpC,CAAC;aAAM,CAAC;YACJ,SAAS,GAAG,SAAS,CAAC,KAAK,EAAE,CAAA;YAC7B,SAAS,CAAC,IAAI,GAAG,oBAAoB,CAAA;QACzC,CAAC;QAED,MAAM,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,SAAS,EAAE,SAAS,CAAC,CAAA;IACxD,CAAC;IAED;;;;;;OAMG;IACH,KAAK,CAAC,YAAY,CACd,WAA2B,EAC3B,eAAqC,EACrC,SAAsB;QAEtB,MAAM,KAAK,GAAG,iCAAe,CAAC,OAAO,CAAC,WAAW,CAAC;YAC9C,CAAC,CAAC,WAAW;YACb,CAAC,CAAC,MAAM,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC,CAAA;QAC5C,IAAI,WAAW,GAAG,KAAK,CAAC,KAAK,EAAE,CAAA;QAC/B,MAAM,SAAS,GAAY,EAAE,CAAA;QAC7B,MAAM,WAAW,GAAY,EAAE,CAAA;QAE/B,MAAM,SAAS,GAAG,iCAAe,CAAC,aAAa,CAAC,eAAe,CAAC;YAC5D,CAAC,CAAC,eAAe;YACjB,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,KAAK,eAAe,CAAC,CAAA;QACrE,IAAI,CAAC,SAAS;YACV,MAAM,IAAI,oBAAY,CAClB,WAAW,eAAe,2BAA2B,KAAK,CAAC,IAAI,UAAU,CAC5E,CAAA;QAEL,IACI,CAAC,SAAS,CAAC,WAAW,KAAK,SAAS,CAAC,WAAW;YAC5C,SAAS,CAAC,kBAAkB,KAAK,MAAM,CAAC;YAC5C,SAAS,CAAC,IAAI,KAAK,SAAS,CAAC,IAAI;YACjC,SAAS,CAAC,MAAM,KAAK,SAAS,CAAC,MAAM;YACrC,SAAS,CAAC,aAAa,KAAK,SAAS,CAAC,aAAa,EACrD,CAAC;YACC,MAAM,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,SAAS,CAAC,CAAA;YACvC,MAAM,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,SAAS,CAAC,CAAA;YAEtC,sBAAsB;YACtB,WAAW,GAAG,KAAK,CAAC,KAAK,EAAE,CAAA;QAC/B,CAAC;aAAM,CAAC;YACJ,IAAI,SAAS,CAAC,IAAI,KAAK,SAAS,CAAC,IAAI,EAAE,CAAC;gBACpC,yDAAyD;gBACzD,SAAS,CAAC,IAAI,CACV,IAAI,aAAK,CACL,eAAe,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,aACjC,SAAS,CAAC,IACd,QAAQ,SAAS,CAAC,IAAI,MAAM,IAAI,CAAC,oBAAoB,CACjD,SAAS,EACT,IAAI,EACJ,IAAI,CACP,EAAE,CACN,CACJ,CAAA;gBACD,WAAW,CAAC,IAAI,CACZ,IAAI,aAAK,CACL,eAAe,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,aACjC,SAAS,CAAC,IACd,QAAQ,SAAS,CAAC,IAAI,MAAM,IAAI,CAAC,oBAAoB,CACjD,SAAS,EACT,IAAI,EACJ,IAAI,CACP,EAAE,CACN,CACJ,CAAA;gBAED,2BAA2B;gBAC3B,WAAW,CAAC,iBAAiB,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE;oBACvD,4BAA4B;oBAC5B,KAAK,CAAC,WAAW,CAAC,MAAM,CACpB,KAAK,CAAC,WAAW,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,EACzC,CAAC,CACJ,CAAA;oBACD,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAA;oBACtC,MAAM,WAAW,GAAG,KAAK,CAAC,WAAW;yBAChC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,KAAK,MAAM,IAAI,CAAC;yBAChC,IAAI,CAAC,IAAI,CAAC,CAAA;oBACf,MAAM,YAAY,GACd,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC,SAAS,CACpC,WAAW,EACX,KAAK,CAAC,WAAW,EACjB,KAAK,CAAC,KAAK,CACd,CAAA;oBAEL,gBAAgB;oBAChB,IAAI,SAAS,GAAG,EAAE,CAAA;oBAClB,IAAI,KAAK,CAAC,QAAQ;wBAAE,SAAS,IAAI,SAAS,CAAA;oBAC1C,IAAI,KAAK,CAAC,SAAS;wBAAE,SAAS,IAAI,UAAU,CAAA;oBAC5C,IAAI,KAAK,CAAC,UAAU;wBAAE,SAAS,IAAI,WAAW,CAAA;oBAC9C,SAAS,CAAC,IAAI,CACV,IAAI,aAAK,CACL,eAAe,IAAI,CAAC,UAAU,CAC1B,KAAK,CACR,iBACG,KAAK,CAAC,IACV,WAAW,SAAS,WAAW,YAAY,OAAO,WAAW,GAAG,CACnE,CACJ,CAAA;oBACD,WAAW,CAAC,IAAI,CACZ,IAAI,aAAK,CACL,eAAe,IAAI,CAAC,UAAU,CAC1B,KAAK,CACR,iBAAiB,YAAY,WAAW,SAAS,WAC9C,KAAK,CAAC,IACV,OAAO,WAAW,GAAG,CACxB,CACJ,CAAA;oBAED,0BAA0B;oBAC1B,KAAK,CAAC,IAAI,GAAG,YAAY,CAAA;gBAC7B,CAAC,CAAC,CAAA;gBAEF,iCAAiC;gBACjC,WAAW;qBACN,qBAAqB,CAAC,SAAS,CAAC;qBAChC,OAAO,CAAC,CAAC,UAAU,EAAE,EAAE;oBACpB,4BAA4B;oBAC5B,UAAU,CAAC,WAAW,CAAC,MAAM,CACzB,UAAU,CAAC,WAAW,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,EAC9C,CAAC,CACJ,CAAA;oBACD,UAAU,CAAC,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAA;oBAC3C,MAAM,WAAW,GAAG,UAAU,CAAC,WAAW;yBACrC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,KAAK,MAAM,IAAI,CAAC;yBAChC,IAAI,CAAC,IAAI,CAAC,CAAA;oBACf,MAAM,qBAAqB,GACvB,UAAU,CAAC,qBAAqB;yBAC3B,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,KAAK,MAAM,IAAI,CAAC;yBAChC,IAAI,CAAC,GAAG,CAAC,CAAA;oBAClB,MAAM,iBAAiB,GACnB,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC,cAAc,CACzC,WAAW,EACX,UAAU,CAAC,WAAW,CACzB,CAAA;oBAEL,gBAAgB;oBAChB,IAAI,EAAE,GACF,eAAe,IAAI,CAAC,UAAU,CAC1B,KAAK,CACR,uBACG,UAAU,CAAC,IACf,wBAAwB,iBAAiB,mBAAmB,WAAW,IAAI;wBAC3E,cAAc,IAAI,CAAC,UAAU,CACzB,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,CAChC,IAAI,qBAAqB,GAAG,CAAA;oBACjC,IAAI,UAAU,CAAC,QAAQ;wBACnB,EAAE,IAAI,cAAc,UAAU,CAAC,QAAQ,EAAE,CAAA;oBAC7C,IAAI,UAAU,CAAC,QAAQ;wBACnB,EAAE,IAAI,cAAc,UAAU,CAAC,QAAQ,EAAE,CAAA;oBAE7C,IAAI,IAAI,GACJ,eAAe,IAAI,CAAC,UAAU,CAC1B,KAAK,CACR,uBAAuB,iBAAiB,wBACrC,UAAU,CAAC,IACf,mBAAmB,WAAW,IAAI;wBAClC,cAAc,IAAI,CAAC,UAAU,CACzB,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,CAChC,IAAI,qBAAqB,GAAG,CAAA;oBACjC,IAAI,UAAU,CAAC,QAAQ;wBACnB,IAAI,IAAI,cAAc,UAAU,CAAC,QAAQ,EAAE,CAAA;oBAC/C,IAAI,UAAU,CAAC,QAAQ;wBACnB,IAAI,IAAI,cAAc,UAAU,CAAC,QAAQ,EAAE,CAAA;oBAE/C,SAAS,CAAC,IAAI,CAAC,IAAI,aAAK,CAAC,EAAE,CAAC,CAAC,CAAA;oBAC7B,WAAW,CAAC,IAAI,CAAC,IAAI,aAAK,CAAC,IAAI,CAAC,CAAC,CAAA;oBAEjC,0BAA0B;oBAC1B,UAAU,CAAC,IAAI,GAAG,iBAAiB,CAAA;gBACvC,CAAC,CAAC,CAAA;gBAEN,wCAAwC;gBACxC,MAAM,cAAc,GAAG,WAAW,CAAC,OAAO,CAAC,IAAI,CAC3C,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,KAAK,SAAS,CAAC,IAAI,CAC7C,CAAA;gBACD,WAAW,CAAC,OAAO,CACf,WAAW,CAAC,OAAO,CAAC,OAAO,CAAC,cAAe,CAAC,CAC/C,CAAC,IAAI,GAAG,SAAS,CAAC,IAAI,CAAA;gBACvB,SAAS,CAAC,IAAI,GAAG,SAAS,CAAC,IAAI,CAAA;YACnC,CAAC;YAED,IAAI,IAAI,CAAC,eAAe,CAAC,SAAS,EAAE,SAAS,EAAE,IAAI,CAAC,EAAE,CAAC;gBACnD,SAAS,CAAC,IAAI,CACV,IAAI,aAAK,CACL,eAAe,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,aACjC,SAAS,CAAC,IACd,MAAM,IAAI,CAAC,oBAAoB,CAAC,SAAS,EAAE,IAAI,CAAC,EAAE,CACrD,CACJ,CAAA;gBACD,WAAW,CAAC,IAAI,CACZ,IAAI,aAAK,CACL,eAAe,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,aACjC,SAAS,CAAC,IACd,MAAM,IAAI,CAAC,oBAAoB,CAAC,SAAS,EAAE,IAAI,CAAC,EAAE,CACrD,CACJ,CAAA;YACL,CAAC;YAED,IAAI,SAAS,CAAC,SAAS,KAAK,SAAS,CAAC,SAAS,EAAE,CAAC;gBAC9C,mGAAmG;gBACnG,MAAM,eAAe,GAAG,WAAW,CAAC,OAAO,CAAC,IAAI,CAC5C,CAAC,MAAM,EAAE,EAAE,CACP,MAAM,CAAC,WAAW;oBAClB,MAAM,CAAC,kBAAkB,KAAK,WAAW,CAChD,CAAA;gBACD,IAAI,eAAe,EAAE,CAAC;oBAClB,MAAM,kBAAkB,GAAG,eAAe,CAAC,KAAK,EAAE,CAAA;oBAClD,kBAAkB,CAAC,WAAW,GAAG,KAAK,CAAA;oBACtC,kBAAkB,CAAC,kBAAkB,GAAG,SAAS,CAAA;oBAEjD,SAAS,CAAC,IAAI,CACV,IAAI,aAAK,CACL,eAAe,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,aACjC,eAAe,CAAC,IACpB,MAAM,IAAI,CAAC,oBAAoB,CAC3B,kBAAkB,EAClB,IAAI,CACP,EAAE,CACN,CACJ,CAAA;oBACD,WAAW,CAAC,IAAI,CACZ,IAAI,aAAK,CACL,eAAe,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,aACjC,kBAAkB,CAAC,IACvB,MAAM,IAAI,CAAC,oBAAoB,CAC3B,eAAe,EACf,IAAI,CACP,EAAE,CACN,CACJ,CAAA;gBACL,CAAC;gBAED,MAAM,cAAc,GAAG,WAAW,CAAC,cAAc,CAAA;gBAEjD,2EAA2E;gBAC3E,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBAC5B,MAAM,WAAW,GAAG,cAAc;yBAC7B,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC;yBACrC,IAAI,CAAC,IAAI,CAAC,CAAA;oBACf,SAAS,CAAC,IAAI,CACV,IAAI,aAAK,CACL,eAAe,IAAI,CAAC,UAAU,CAC1B,KAAK,CACR,mBAAmB,CACvB,CACJ,CAAA;oBACD,WAAW,CAAC,IAAI,CACZ,IAAI,aAAK,CACL,eAAe,IAAI,CAAC,UAAU,CAC1B,KAAK,CACR,qBAAqB,WAAW,GAAG,CACvC,CACJ,CAAA;gBACL,CAAC;gBAED,IAAI,SAAS,CAAC,SAAS,KAAK,IAAI,EAAE,CAAC;oBAC/B,cAAc,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;oBAC9B,yBAAyB;oBACzB,MAAM,MAAM,GAAG,WAAW,CAAC,OAAO,CAAC,IAAI,CACnC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,KAAK,SAAS,CAAC,IAAI,CAC7C,CAAA;oBACD,MAAO,CAAC,SAAS,GAAG,IAAI,CAAA;oBACxB,MAAM,WAAW,GAAG,cAAc;yBAC7B,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC;yBACrC,IAAI,CAAC,IAAI,CAAC,CAAA;oBACf,SAAS,CAAC,IAAI,CACV,IAAI,aAAK,CACL,eAAe,IAAI,CAAC,UAAU,CAC1B,KAAK,CACR,qBAAqB,WAAW,GAAG,CACvC,CACJ,CAAA;oBACD,WAAW,CAAC,IAAI,CACZ,IAAI,aAAK,CACL,eAAe,IAAI,CAAC,UAAU,CAC1B,KAAK,CACR,mBAAmB,CACvB,CACJ,CAAA;gBACL,CAAC;qBAAM,CAAC;oBACJ,MAAM,aAAa,GAAG,cAAc,CAAC,IAAI,CACrC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,SAAS,CAAC,IAAI,CACnC,CAAA;oBACD,cAAc,CAAC,MAAM,CACjB,cAAc,CAAC,OAAO,CAAC,aAAc,CAAC,EACtC,CAAC,CACJ,CAAA;oBACD,yBAAyB;oBACzB,MAAM,MAAM,GAAG,WAAW,CAAC,OAAO,CAAC,IAAI,CACnC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,KAAK,SAAS,CAAC,IAAI,CAC7C,CAAA;oBACD,MAAO,CAAC,SAAS,GAAG,KAAK,CAAA;oBAEzB,gEAAgE;oBAChE,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;wBAC5B,MAAM,WAAW,GAAG,cAAc;6BAC7B,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC;6BACrC,IAAI,CAAC,IAAI,CAAC,CAAA;wBACf,SAAS,CAAC,IAAI,CACV,IAAI,aAAK,CACL,eAAe,IAAI,CAAC,UAAU,CAC1B,KAAK,CACR,qBAAqB,WAAW,GAAG,CACvC,CACJ,CAAA;wBACD,WAAW,CAAC,IAAI,CACZ,IAAI,aAAK,CACL,eAAe,IAAI,CAAC,UAAU,CAC1B,KAAK,CACR,mBAAmB,CACvB,CACJ,CAAA;oBACL,CAAC;gBACL,CAAC;gBAED,oGAAoG;gBACpG,IAAI,eAAe,EAAE,CAAC;oBAClB,MAAM,kBAAkB,GAAG,eAAe,CAAC,KAAK,EAAE,CAAA;oBAClD,kBAAkB,CAAC,WAAW,GAAG,KAAK,CAAA;oBACtC,kBAAkB,CAAC,kBAAkB,GAAG,SAAS,CAAA;oBAEjD,SAAS,CAAC,IAAI,CACV,IAAI,aAAK,CACL,eAAe,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,aACjC,kBAAkB,CAAC,IACvB,MAAM,IAAI,CAAC,oBAAoB,CAC3B,eAAe,EACf,IAAI,CACP,EAAE,CACN,CACJ,CAAA;oBACD,WAAW,CAAC,IAAI,CACZ,IAAI,aAAK,CACL,eAAe,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,aACjC,eAAe,CAAC,IACpB,MAAM,IAAI,CAAC,oBAAoB,CAC3B,kBAAkB,EAClB,IAAI,CACP,EAAE,CACN,CACJ,CAAA;gBACL,CAAC;YACL,CAAC;YAED,IAAI,SAAS,CAAC,QAAQ,KAAK,SAAS,CAAC,QAAQ,EAAE,CAAC;gBAC5C,IAAI,SAAS,CAAC,QAAQ,KAAK,IAAI,EAAE,CAAC;oBAC9B,MAAM,WAAW,GAAG,IAAI,uBAAU,CAAC;wBAC/B,IAAI,EAAE,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC,SAAS,CAAC,KAAK,EAAE;4BAClD,SAAS,CAAC,IAAI;yBACjB,CAAC;wBACF,WAAW,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC;wBAC7B,QAAQ,EAAE,IAAI;qBACjB,CAAC,CAAA;oBACF,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,CAAA;oBACrC,WAAW,CAAC,OAAO,CAAC,IAAI,CACpB,IAAI,yBAAW,CAAC;wBACZ,IAAI,EAAE,WAAW,CAAC,IAAI;wBACtB,WAAW,EAAE,WAAW,CAAC,WAAW;qBACvC,CAAC,CACL,CAAA;oBACD,SAAS,CAAC,IAAI,CACV,IAAI,aAAK,CACL,eAAe,IAAI,CAAC,UAAU,CAC1B,KAAK,CACR,uBAAuB,WAAW,CAAC,IAAI,SACpC,SAAS,CAAC,IACd,KAAK,CACR,CACJ,CAAA;oBACD,WAAW,CAAC,IAAI,CACZ,IAAI,aAAK,CACL,eAAe,IAAI,CAAC,UAAU,CAC1B,KAAK,CACR,iBAAiB,WAAW,CAAC,IAAI,IAAI,CACzC,CACJ,CAAA;gBACL,CAAC;qBAAM,CAAC;oBACJ,MAAM,WAAW,GAAG,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE;wBACnD,OAAO,CACH,KAAK,CAAC,WAAW,CAAC,MAAM,KAAK,CAAC;4BAC9B,KAAK,CAAC,QAAQ,KAAK,IAAI;4BACvB,CAAC,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,CACpB,CAAC,UAAU,EAAE,EAAE,CAAC,UAAU,KAAK,SAAS,CAAC,IAAI,CAChD,CACJ,CAAA;oBACL,CAAC,CAAC,CAAA;oBACF,WAAW,CAAC,OAAO,CAAC,MAAM,CACtB,WAAW,CAAC,OAAO,CAAC,OAAO,CAAC,WAAY,CAAC,EACzC,CAAC,CACJ,CAAA;oBAED,MAAM,WAAW,GAAG,WAAW,CAAC,OAAO,CAAC,IAAI,CACxC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,KAAK,WAAY,CAAC,IAAI,CAChD,CAAA;oBACD,WAAW,CAAC,OAAO,CAAC,MAAM,CACtB,WAAW,CAAC,OAAO,CAAC,OAAO,CAAC,WAAY,CAAC,EACzC,CAAC,CACJ,CAAA;oBAED,SAAS,CAAC,IAAI,CACV,IAAI,aAAK,CACL,eAAe,IAAI,CAAC,UAAU,CAC1B,KAAK,CACR,iBAAiB,WAAY,CAAC,IAAI,IAAI,CAC1C,CACJ,CAAA;oBACD,WAAW,CAAC,IAAI,CACZ,IAAI,aAAK,CACL,eAAe,IAAI,CAAC,UAAU,CAC1B,KAAK,CACR,uBAAuB,WAAY,CAAC,IAAI,SACrC,SAAS,CAAC,IACd,KAAK,CACR,CACJ,CAAA;gBACL,CAAC;YACL,CAAC;QACL,CAAC;QAED,MAAM,IAAI,CAAC,cAAc,CAAC,SAAS,EAAE,WAAW,CAAC,CAAA;QACjD,IAAI,CAAC,kBAAkB,CAAC,KAAK,EAAE,WAAW,CAAC,CAAA;IAC/C,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,aAAa,CACf,WAA2B,EAC3B,cAAoE;QAEpE,KAAK,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,IAAI,cAAc,EAAE,CAAC;YACpD,MAAM,IAAI,CAAC,YAAY,CAAC,WAAW,EAAE,SAAS,EAAE,SAAS,CAAC,CAAA;QAC9D,CAAC;IACL,CAAC;IAED;;;;;;OAMG;IACH,KAAK,CAAC,UAAU,CACZ,WAA2B,EAC3B,YAAkC,EAClC,QAAkB;QAElB,MAAM,KAAK,GAAG,iCAAe,CAAC,OAAO,CAAC,WAAW,CAAC;YAC9C,CAAC,CAAC,WAAW;YACb,CAAC,CAAC,MAAM,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC,CAAA;QAC5C,MAAM,MAAM,GAAG,iCAAe,CAAC,aAAa,CAAC,YAAY,CAAC;YACtD,CAAC,CAAC,YAAY;YACd,CAAC,CAAC,KAAK,CAAC,gBAAgB,CAAC,YAAY,CAAC,CAAA;QAC1C,IAAI,CAAC,MAAM,EAAE,CAAC;YACV,IAAI,QAAQ;gBAAE,OAAM;YACpB,MAAM,IAAI,oBAAY,CAClB,WAAW,YAAY,6BAA6B,KAAK,CAAC,IAAI,GAAG,CACpE,CAAA;QACL,CAAC;QAED,MAAM,WAAW,GAAG,KAAK,CAAC,KAAK,EAAE,CAAA;QACjC,MAAM,SAAS,GAAY,EAAE,CAAA;QAC7B,MAAM,WAAW,GAAY,EAAE,CAAA;QAE/B,8BAA8B;QAC9B,IAAI,MAAM,CAAC,SAAS,EAAE,CAAC;YACnB,mGAAmG;YACnG,MAAM,eAAe,GAAG,WAAW,CAAC,OAAO,CAAC,IAAI,CAC5C,CAAC,MAAM,EAAE,EAAE,CACP,MAAM,CAAC,WAAW;gBAClB,MAAM,CAAC,kBAAkB,KAAK,WAAW,CAChD,CAAA;YACD,IAAI,eAAe,EAAE,CAAC;gBAClB,MAAM,kBAAkB,GAAG,eAAe,CAAC,KAAK,EAAE,CAAA;gBAClD,kBAAkB,CAAC,WAAW,GAAG,KAAK,CAAA;gBACtC,kBAAkB,CAAC,kBAAkB,GAAG,SAAS,CAAA;gBAEjD,SAAS,CAAC,IAAI,CACV,IAAI,aAAK,CACL,eAAe,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,aACjC,eAAe,CAAC,IACpB,MAAM,IAAI,CAAC,oBAAoB,CAC3B,kBAAkB,EAClB,IAAI,CACP,EAAE,CACN,CACJ,CAAA;gBACD,WAAW,CAAC,IAAI,CACZ,IAAI,aAAK,CACL,eAAe,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,aACjC,kBAAkB,CAAC,IACvB,MAAM,IAAI,CAAC,oBAAoB,CAC3B,eAAe,EACf,IAAI,CACP,EAAE,CACN,CACJ,CAAA;YACL,CAAC;YAED,kCAAkC;YAClC,MAAM,WAAW,GAAG,WAAW,CAAC,cAAc;iBACzC,GAAG,CAAC,CAAC,aAAa,EAAE,EAAE,CAAC,KAAK,aAAa,CAAC,IAAI,IAAI,CAAC;iBACnD,IAAI,CAAC,IAAI,CAAC,CAAA;YACf,SAAS,CAAC,IAAI,CACV,IAAI,aAAK,CACL,eAAe,IAAI,CAAC,UAAU,CAC1B,WAAW,CACd,mBAAmB,CACvB,CACJ,CAAA;YACD,WAAW,CAAC,IAAI,CACZ,IAAI,aAAK,CACL,eAAe,IAAI,CAAC,UAAU,CAC1B,WAAW,CACd,qBAAqB,WAAW,GAAG,CACvC,CACJ,CAAA;YAED,yBAAyB;YACzB,MAAM,WAAW,GAAG,WAAW,CAAC,gBAAgB,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;YAC7D,WAAY,CAAC,SAAS,GAAG,KAAK,CAAA;YAE9B,mFAAmF;YACnF,IAAI,WAAW,CAAC,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACxC,MAAM,WAAW,GAAG,WAAW,CAAC,cAAc;qBACzC,GAAG,CAAC,CAAC,aAAa,EAAE,EAAE,CAAC,KAAK,aAAa,CAAC,IAAI,IAAI,CAAC;qBACnD,IAAI,CAAC,IAAI,CAAC,CAAA;gBACf,SAAS,CAAC,IAAI,CACV,IAAI,aAAK,CACL,eAAe,IAAI,CAAC,UAAU,CAC1B,WAAW,CACd,qBAAqB,WAAW,GAAG,CACvC,CACJ,CAAA;gBACD,WAAW,CAAC,IAAI,CACZ,IAAI,aAAK,CACL,eAAe,IAAI,CAAC,UAAU,CAC1B,WAAW,CACd,mBAAmB,CACvB,CACJ,CAAA;YACL,CAAC;YAED,oJAAoJ;YACpJ,IAAI,eAAe,IAAI,eAAe,CAAC,IAAI,KAAK,MAAM,CAAC,IAAI,EAAE,CAAC;gBAC1D,MAAM,kBAAkB,GAAG,eAAe,CAAC,KAAK,EAAE,CAAA;gBAClD,kBAAkB,CAAC,WAAW,GAAG,KAAK,CAAA;gBACtC,kBAAkB,CAAC,kBAAkB,GAAG,SAAS,CAAA;gBAEjD,SAAS,CAAC,IAAI,CACV,IAAI,aAAK,CACL,eAAe,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,aACjC,kBAAkB,CAAC,IACvB,MAAM,IAAI,CAAC,oBAAoB,CAC3B,eAAe,EACf,IAAI,CACP,EAAE,CACN,CACJ,CAAA;gBACD,WAAW,CAAC,IAAI,CACZ,IAAI,aAAK,CACL,eAAe,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,aACjC,eAAe,CAAC,IACpB,MAAM,IAAI,CAAC,oBAAoB,CAC3B,kBAAkB,EAClB,IAAI,CACP,EAAE,CACN,CACJ,CAAA;YACL,CAAC;QACL,CAAC;QAED,oBAAoB;QACpB,MAAM,WAAW,GAAG,WAAW,CAAC,OAAO,CAAC,IAAI,CACxC,CAAC,KAAK,EAAE,EAAE,CACN,KAAK,CAAC,WAAW,CAAC,MAAM,KAAK,CAAC;YAC9B,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,KAAK,MAAM,CAAC,IAAI,CAC3C,CAAA;QACD,IAAI,WAAW,EAAE,CAAC;YACd,WAAW,CAAC,OAAO,CAAC,MAAM,CACtB,WAAW,CAAC,OAAO,CAAC,OAAO,CAAC,WAAW,CAAC,EACxC,CAAC,CACJ,CAAA;YACD,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC,CAAA;YACrD,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC,CAAA;QAC7D,CAAC;aAAM,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;YACzB,6DAA6D;YAC7D,MAAM,UAAU,GACZ,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC,oBAAoB,CAAC,KAAK,EAAE;gBACvD,MAAM,CAAC,IAAI;aACd,CAAC,CAAA;YACN,MAAM,WAAW,GAAG,WAAW,CAAC,OAAO,CAAC,IAAI,CACxC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,KAAK,UAAU,CACzC,CAAA;YACD,IAAI,WAAW;gBACX,WAAW,CAAC,OAAO,CAAC,MAAM,CACtB,WAAW,CAAC,OAAO,CAAC,OAAO,CAAC,WAAW,CAAC,EACxC,CAAC,CACJ,CAAA;YAEL,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC,SAAS,CAAC,KAAK,EAAE;gBAC9D,MAAM,CAAC,IAAI;aACd,CAAC,CAAA;YACF,MAAM,UAAU,GAAG,WAAW,CAAC,OAAO,CAAC,IAAI,CACvC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,KAAK,SAAS,CACtC,CAAA;YACD,IAAI,UAAU;gBACV,WAAW,CAAC,OAAO,CAAC,MAAM,CACtB,WAAW,CAAC,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC,EACvC,CAAC,CACJ,CAAA;YAEL,SAAS,CAAC,IAAI,CACV,IAAI,aAAK,CACL,eAAe,IAAI,CAAC,UAAU,CAC1B,KAAK,CACR,iBAAiB,SAAS,IAAI,CAClC,CACJ,CAAA;YACD,WAAW,CAAC,IAAI,CACZ,IAAI,aAAK,CACL,eAAe,IAAI,CAAC,UAAU,CAC1B,KAAK,CACR,uBAAuB,SAAS,SAAS,MAAM,CAAC,IAAI,KAAK,CAC7D,CACJ,CAAA;QACL,CAAC;QAED,SAAS,CAAC,IAAI,CACV,IAAI,aAAK,CACL,eAAe,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,kBACjC,MAAM,CAAC,IACX,IAAI,CACP,CACJ,CAAA;QACD,WAAW,CAAC,IAAI,CACZ,IAAI,aAAK,CACL,eAAe,IAAI,CAAC,UAAU,CAC1B,KAAK,CACR,QAAQ,IAAI,CAAC,oBAAoB,CAAC,MAAM,EAAE,IAAI,CAAC,EAAE,CACrD,CACJ,CAAA;QAED,MAAM,IAAI,CAAC,cAAc,CAAC,SAAS,EAAE,WAAW,CAAC,CAAA;QAEjD,WAAW,CAAC,YAAY,CAAC,MAAM,CAAC,CAAA;QAChC,IAAI,CAAC,kBAAkB,CAAC,KAAK,EAAE,WAAW,CAAC,CAAA;IAC/C,CAAC;IAED;;;;;;OAMG;IACH,KAAK,CAAC,WAAW,CACb,WAA2B,EAC3B,OAAiC,EACjC,QAAkB;QAElB,KAAK,MAAM,MAAM,IAAI,CAAC,GAAG,OAAO,CAAC,EAAE,CAAC;YAChC,MAAM,IAAI,CAAC,UAAU,CAAC,WAAW,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAA;QACxD,CAAC;IACL,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,gBAAgB,CAClB,WAA2B,EAC3B,WAAqB;QAErB,MAAM,KAAK,GAAG,iCAAe,CAAC,OAAO,CAAC,WAAW,CAAC;YAC9C,CAAC,CAAC,WAAW;YACb,CAAC,CAAC,MAAM,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC,CAAA;QAC5C,MAAM,WAAW,GAAG,KAAK,CAAC,KAAK,EAAE,CAAA;QAEjC,MAAM,EAAE,GAAG,IAAI,CAAC,mBAAmB,CAAC,KAAK,EAAE,WAAW,CAAC,CAAA;QACvD,MAAM,IAAI,GAAG,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAA;QAE1C,MAAM,IAAI,CAAC,cAAc,CAAC,EAAE,EAAE,IAAI,CAAC,CAAA;QACnC,WAAW,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE;YACnC,IAAI,WAAW,CAAC,IAAI,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,UAAU,KAAK,MAAM,CAAC,IAAI,CAAC;gBAC5D,MAAM,CAAC,SAAS,GAAG,IAAI,CAAA;QAC/B,CAAC,CAAC,CAAA;QACF,IAAI,CAAC,kBAAkB,CAAC,KAAK,EAAE,WAAW,CAAC,CAAA;IAC/C,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,iBAAiB,CACnB,WAA2B,EAC3B,OAAsB;QAEtB,MAAM,KAAK,GAAG,iCAAe,CAAC,OAAO,CAAC,WAAW,CAAC;YAC9C,CAAC,CAAC,WAAW;YACb,CAAC,CAAC,MAAM,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC,CAAA;QAC5C,MAAM,WAAW,GAAG,KAAK,CAAC,KAAK,EAAE,CAAA;QACjC,MAAM,WAAW,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;QACxD,MAAM,SAAS,GAAY,EAAE,CAAA;QAC7B,MAAM,WAAW,GAAY,EAAE,CAAA;QAE/B,mGAAmG;QACnG,MAAM,eAAe,GAAG,WAAW,CAAC,OAAO,CAAC,IAAI,CAC5C,CAAC,MAAM,EAAE,EAAE,CACP,MAAM,CAAC,WAAW,IAAI,MAAM,CAAC,kBAAkB,KAAK,WAAW,CACtE,CAAA;QACD,IAAI,eAAe,EAAE,CAAC;YAClB,MAAM,kBAAkB,GAAG,eAAe,CAAC,KAAK,EAAE,CAAA;YAClD,kBAAkB,CAAC,WAAW,GAAG,KAAK,CAAA;YACtC,kBAAkB,CAAC,kBAAkB,GAAG,SAAS,CAAA;YAEjD,SAAS,CAAC,IAAI,CACV,IAAI,aAAK,CACL,eAAe,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,aACjC,eAAe,CAAC,IACpB,MAAM,IAAI,CAAC,oBAAoB,CAAC,kBAAkB,EAAE,IAAI,CAAC,EAAE,CAC9D,CACJ,CAAA;YACD,WAAW,CAAC,IAAI,CACZ,IAAI,aAAK,CACL,eAAe,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,aACjC,kBAAkB,CAAC,IACvB,MAAM,IAAI,CAAC,oBAAoB,CAAC,eAAe,EAAE,IAAI,CAAC,EAAE,CAC3D,CACJ,CAAA;QACL,CAAC;QAED,4DAA4D;QAC5D,MAAM,cAAc,GAAG,WAAW,CAAC,cAAc,CAAA;QACjD,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC5B,MAAM,WAAW,GAAG,cAAc;iBAC7B,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC;iBACrC,IAAI,CAAC,IAAI,CAAC,CAAA;YACf,SAAS,CAAC,IAAI,CACV,IAAI,aAAK,CACL,eAAe,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,mBAAmB,CAC3D,CACJ,CAAA;YACD,WAAW,CAAC,IAAI,CACZ,IAAI,aAAK,CACL,eAAe,IAAI,CAAC,UAAU,CAC1B,KAAK,CACR,qBAAqB,WAAW,GAAG,CACvC,CACJ,CAAA;QACL,CAAC;QAED,2BAA2B;QAC3B,WAAW,CAAC,OAAO;aACd,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,WAAW,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;aAC3D,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE;YAChB,MAAM,CAAC,SAAS,GAAG,IAAI,CAAA;QAC3B,CAAC,CAAC,CAAA;QAEN,MAAM,iBAAiB,GAAG,WAAW;aAChC,GAAG,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,KAAK,UAAU,IAAI,CAAC;aACxC,IAAI,CAAC,IAAI,CAAC,CAAA;QACf,SAAS,CAAC,IAAI,CACV,IAAI,aAAK,CACL,eAAe,IAAI,CAAC,UAAU,CAC1B,KAAK,CACR,qBAAqB,iBAAiB,GAAG,CAC7C,CACJ,CAAA;QACD,WAAW,CAAC,IAAI,CACZ,IAAI,aAAK,CAAC,eAAe,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,mBAAmB,CAAC,CACtE,CAAA;QAED,8IAA8I;QAC9I,MAAM,yBAAyB,GAC3B,eAAe;YACf,OAAO,CAAC,IAAI,CACR,CAAC,MAAM,EAAE,EAAE,CACP,MAAM,CAAC,WAAW;gBAClB,MAAM,CAAC,kBAAkB,KAAK,WAAW,CAChD,CAAA;QACL,IAAI,yBAAyB,EAAE,CAAC;YAC5B,MAAM,kBAAkB,GAAG,yBAAyB,CAAC,KAAK,EAAE,CAAA;YAC5D,kBAAkB,CAAC,WAAW,GAAG,KAAK,CAAA;YACtC,kBAAkB,CAAC,kBAAkB,GAAG,SAAS,CAAA;YAEjD,SAAS,CAAC,IAAI,CACV,IAAI,aAAK,CACL,eAAe,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,aACjC,kBAAkB,CAAC,IACvB,MAAM,IAAI,CAAC,oBAAoB,CAC3B,yBAAyB,EACzB,IAAI,CACP,EAAE,CACN,CACJ,CAAA;YACD,WAAW,CAAC,IAAI,CACZ,IAAI,aAAK,CACL,eAAe,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,aACjC,yBAAyB,CAAC,IAC9B,MAAM,IAAI,CAAC,oBAAoB,CAAC,kBAAkB,EAAE,IAAI,CAAC,EAAE,CAC9D,CACJ,CAAA;YAED,6DAA6D;YAC7D,MAAM,sBAAsB,GAAG,WAAW,CAAC,OAAO,CAAC,IAAI,CACnD,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,KAAK,yBAAyB,CAAC,IAAI,CAC7D,CAAA;YACD,sBAAuB,CAAC,WAAW,GAAG,IAAI,CAAA;YAC1C,sBAAuB,CAAC,kBAAkB,GAAG,WAAW,CAAA;QAC5D,CAAC;QAED,MAAM,IAAI,CAAC,cAAc,CAAC,SAAS,EAAE,WAAW,CAAC,CAAA;QACjD,IAAI,CAAC,kBAAkB,CAAC,KAAK,EAAE,WAAW,CAAC,CAAA;IAC/C,CAAC;IAED;;;;;;OAMG;IACH,KAAK,CAAC,cAAc,CAChB,WAA2B,EAC3B,cAAuB,EACvB,QAAkB;QAElB,MAAM,KAAK,GAAG,iCAAe,CAAC,OAAO,CAAC,WAAW,CAAC;YAC9C,CAAC,CAAC,WAAW;YACb,CAAC,CAAC,MAAM,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC,CAAA;QAE5C,IAAI,QAAQ,IAAI,KAAK,CAAC,cAAc,CAAC,MAAM,KAAK,CAAC;YAC7C,OAAO,OAAO,CAAC,OAAO,EAAE,CAAA;QAE5B,MAAM,EAAE,GAAG,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAA;QACxC,MAAM,IAAI,GAAG,IAAI,CAAC,mBAAmB,CACjC,KAAK,EACL,KAAK,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CACpD,CAAA;QACD,MAAM,IAAI,CAAC,cAAc,CAAC,EAAE,EAAE,IAAI,CAAC,CAAA;QACnC,KAAK,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE;YACpC,MAAM,CAAC,SAAS,GAAG,KAAK,CAAA;QAC5B,CAAC,CAAC,CAAA;IACN,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,sBAAsB,CACxB,WAA2B,EAC3B,gBAA6B;QAE7B,MAAM,IAAI,oBAAY,CAClB,sEAAsE,CACzE,CAAA;IACL,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,uBAAuB,CACzB,WAA2B,EAC3B,iBAAgC;QAEhC,MAAM,IAAI,oBAAY,CAClB,sEAAsE,CACzE,CAAA;IACL,CAAC;IAED;;;;;;OAMG;IACH,KAAK,CAAC,oBAAoB,CACtB,WAA2B,EAC3B,YAAkC,EAClC,QAAkB;QAElB,MAAM,IAAI,oBAAY,CAClB,sEAAsE,CACzE,CAAA;IACL,CAAC;IAED;;;;;;OAMG;IACH,KAAK,CAAC,qBAAqB,CACvB,WAA2B,EAC3B,iBAAgC,EAChC,QAAkB;QAElB,MAAM,IAAI,oBAAY,CAClB,sEAAsE,CACzE,CAAA;IACL,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,qBAAqB,CACvB,WAA2B,EAC3B,eAA2B;QAE3B,MAAM,IAAI,oBAAY,CAAC,2CAA2C,CAAC,CAAA;IACvE,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,sBAAsB,CACxB,WAA2B,EAC3B,gBAA8B;QAE9B,MAAM,IAAI,oBAAY,CAAC,2CAA2C,CAAC,CAAA;IACvE,CAAC;IAED;;;;;;OAMG;IACH,KAAK,CAAC,mBAAmB,CACrB,WAA2B,EAC3B,WAAgC,EAChC,QAAkB;QAElB,MAAM,IAAI,oBAAY,CAAC,2CAA2C,CAAC,CAAA;IACvE,CAAC;IAED;;;;;;OAMG;IACH,KAAK,CAAC,oBAAoB,CACtB,WAA2B,EAC3B,gBAA8B,EAC9B,QAAkB;QAElB,MAAM,IAAI,oBAAY,CAAC,2CAA2C,CAAC,CAAA;IACvE,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,yBAAyB,CAC3B,WAA2B,EAC3B,mBAAmC;QAEnC,MAAM,IAAI,oBAAY,CAAC,+CAA+C,CAAC,CAAA;IAC3E,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,0BAA0B,CAC5B,WAA2B,EAC3B,oBAAsC;QAEtC,MAAM,IAAI,oBAAY,CAAC,+CAA+C,CAAC,CAAA;IAC3E,CAAC;IAED;;;;;;OAMG;IACH,KAAK,CAAC,uBAAuB,CACzB,WAA2B,EAC3B,eAAwC,EACxC,QAAkB;QAElB,MAAM,IAAI,oBAAY,CAAC,+CAA+C,CAAC,CAAA;IAC3E,CAAC;IAED;;;;;;OAMG;IACH,KAAK,CAAC,wBAAwB,CAC1B,WAA2B,EAC3B,oBAAsC,EACtC,QAAkB;QAElB,MAAM,IAAI,oBAAY,CAAC,+CAA+C,CAAC,CAAA;IAC3E,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,gBAAgB,CAClB,WAA2B,EAC3B,UAA2B;QAE3B,MAAM,KAAK,GAAG,iCAAe,CAAC,OAAO,CAAC,WAAW,CAAC;YAC9C,CAAC,CAAC,WAAW;YACb,CAAC,CAAC,MAAM,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC,CAAA;QAE5C,gFAAgF;QAChF,UAAU,CAAC,IAAI,KAAK,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC,cAAc,CAC7D,KAAK,EACL,UAAU,CAAC,WAAW,CACzB,CAAA;QAED,MAAM,EAAE,GAAG,IAAI,CAAC,mBAAmB,CAAC,KAAK,EAAE,UAAU,CAAC,CAAA;QACtD,MAAM,IAAI,GAAG,IAAI,CAAC,iBAAiB,CAAC,KAAK,EAAE,UAAU,CAAC,CAAA;QACtD,MAAM,IAAI,CAAC,cAAc,CAAC,EAAE,EAAE,IAAI,CAAC,CAAA;QACnC,KAAK,CAAC,aAAa,CAAC,UAAU,CAAC,CAAA;IACnC,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,iBAAiB,CACnB,WAA2B,EAC3B,WAA8B;QAE9B,MAAM,QAAQ,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC,UAAU,EAAE,EAAE,CAC5C,IAAI,CAAC,gBAAgB,CAAC,WAAW,EAAE,UAAU,CAAC,CACjD,CAAA;QACD,MAAM,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAA;IAC/B,CAAC;IAED;;;;;;OAMG;IACH,KAAK,CAAC,cAAc,CAChB,WAA2B,EAC3B,gBAA0C,EAC1C,QAAkB;QAElB,MAAM,KAAK,GAAG,iCAAe,CAAC,OAAO,CAAC,WAAW,CAAC;YAC9C,CAAC,CAAC,WAAW;YACb,CAAC,CAAC,MAAM,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC,CAAA;QAC5C,MAAM,UAAU,GAAG,iCAAe,CAAC,iBAAiB,CAAC,gBAAgB,CAAC;YAClE,CAAC,CAAC,gBAAgB;YAClB,CAAC,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,IAAI,KAAK,gBAAgB,CAAC,CAAA;QAClE,IAAI,CAAC,UAAU,EAAE,CAAC;YACd,IAAI,QAAQ;gBAAE,OAAM;YACpB,MAAM,IAAI,oBAAY,CAClB,+CAA+C,KAAK,CAAC,IAAI,EAAE,CAC9D,CAAA;QACL,CAAC;QAED,UAAU,CAAC,IAAI,KAAK,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC,cAAc,CAC7D,KAAK,EACL,UAAU,CAAC,WAAW,CACzB,CAAA;QAED,MAAM,EAAE,GAAG,IAAI,CAAC,iBAAiB,CAAC,KAAK,EAAE,UAAU,CAAC,CAAA;QACpD,MAAM,IAAI,GAAG,IAAI,CAAC,mBAAmB,CAAC,KAAK,EAAE,UAAU,CAAC,CAAA;QACxD,MAAM,IAAI,CAAC,cAAc,CAAC,EAAE,EAAE,IAAI,CAAC,CAAA;QACnC,KAAK,CAAC,gBAAgB,CAAC,UAAU,CAAC,CAAA;IACtC,CAAC;IAED;;;;;;OAMG;IACH,KAAK,CAAC,eAAe,CACjB,WAA2B,EAC3B,WAA8B,EAC9B,QAAkB;QAElB,MAAM,QAAQ,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC,UAAU,EAAE,EAAE,CAC5C,IAAI,CAAC,cAAc,CAAC,WAAW,EAAE,UAAU,EAAE,QAAQ,CAAC,CACzD,CAAA;QACD,MAAM,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAA;IAC/B,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,WAAW,CACb,WAA2B,EAC3B,KAAiB;QAEjB,MAAM,KAAK,GAAG,iCAAe,CAAC,OAAO,CAAC,WAAW,CAAC;YAC9C,CAAC,CAAC,WAAW;YACb,CAAC,CAAC,MAAM,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC,CAAA;QAE5C,sFAAsF;QACtF,KAAK,CAAC,IAAI,KAAK,IAAI,CAAC,iBAAiB,CAAC,KAAK,EAAE,KAAK,CAAC,CAAA;QAEnD,MAAM,EAAE,GAAG,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,KAAK,CAAC,CAAA;QAC5C,MAAM,IAAI,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,KAAK,CAAC,CAAA;QAC5C,MAAM,IAAI,CAAC,cAAc,CAAC,EAAE,EAAE,IAAI,CAAC,CAAA;QACnC,KAAK,CAAC,QAAQ,CAAC,KAAK,EAAE,IAAI,CAAC,CAAA;IAC/B,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,aAAa,CACf,WAA2B,EAC3B,OAAqB;QAErB,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CACnC,IAAI,CAAC,WAAW,CAAC,WAAW,EAAE,KAAK,CAAC,CACvC,CAAA;QACD,MAAM,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAA;IAC/B,CAAC;IAED;;;;;;OAMG;IACH,KAAK,CAAC,SAAS,CACX,WAA2B,EAC3B,WAAgC,EAChC,QAAkB;QAElB,MAAM,KAAK,GAAG,iCAAe,CAAC,OAAO,CAAC,WAAW,CAAC;YAC9C,CAAC,CAAC,WAAW;YACb,CAAC,CAAC,MAAM,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC,CAAA;QAC5C,MAAM,KAAK,GAAG,iCAAe,CAAC,YAAY,CAAC,WAAW,CAAC;YACnD,CAAC,CAAC,WAAW;YACb,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,WAAW,CAAC,CAAA;QACvD,IAAI,CAAC,KAAK,EAAE,CAAC;YACT,IAAI,QAAQ;gBAAE,OAAM;YACpB,MAAM,IAAI,oBAAY,CAClB,kBAAkB,WAAW,2BAA2B,KAAK,CAAC,IAAI,EAAE,CACvE,CAAA;QACL,CAAC;QAED,sFAAsF;QACtF,KAAK,CAAC,IAAI,KAAK,IAAI,CAAC,iBAAiB,CAAC,KAAK,EAAE,KAAK,CAAC,CAAA;QAEnD,MAAM,EAAE,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,KAAK,CAAC,CAAA;QAC1C,MAAM,IAAI,GAAG,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,KAAK,CAAC,CAAA;QAC9C,MAAM,IAAI,CAAC,cAAc,CAAC,EAAE,EAAE,IAAI,CAAC,CAAA;QACnC,KAAK,CAAC,WAAW,CAAC,KAAK,EAAE,IAAI,CAAC,CAAA;IAClC,CAAC;IAED;;;;;;OAMG;IACH,KAAK,CAAC,WAAW,CACb,WAA2B,EAC3B,OAAqB,EACrB,QAAkB;QAElB,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CACnC,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE,KAAK,EAAE,QAAQ,CAAC,CAC/C,CAAA;QACD,MAAM,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAA;IAC/B,CAAC;IAED;;;;;;;OAOG;IACH,KAAK,CAAC,UAAU,CACZ,WAA2B,EAC3B,OAA+B;QAE/B,IAAI,OAAO,EAAE,OAAO;YAChB,MAAM,IAAI,oBAAY,CAClB,2DAA2D,CAC9D,CAAA;QACL,MAAM,IAAI,CAAC,KAAK,CAAC,kBAAkB,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC,CAAA;IACtE,CAAC;IAED;;;;;;OAMG;IACH,KAAK,CAAC,aAAa,CAAC,QAAiB;QACjC,MAAM,MAAM,GAAG,QAAQ,IAAI,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAA;QAC/C,IAAI,MAAM,EAAE,CAAC;YACT,MAAM,eAAe,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAA;YACtD,IAAI,CAAC,eAAe;gBAAE,OAAO,OAAO,CAAC,OAAO,EAAE,CAAA;QAClD,CAAC;aAAM,CAAC;YACJ,MAAM,IAAI,oBAAY,CAClB,kDAAkD,CACrD,CAAA;QACL,CAAC;QAED,MAAM,0BAA0B,GAAG,IAAI,CAAC,mBAAmB,CAAA;QAC3D,IAAI,CAAC,0BAA0B;YAAE,MAAM,IAAI,CAAC,gBAAgB,EAAE,CAAA;QAC9D,IAAI,CAAC;YACD,MAAM,oBAAoB,GAAG,gKAAgK,CAAA;YAC7L,MAAM,eAAe,GAAoB,MAAM,IAAI,CAAC,KAAK,CACrD,oBAAoB,EACpB,CAAC,MAAM,CAAC,CACX,CAAA;YACD,MAAM,OAAO,CAAC,GAAG,CACb,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CACrD,CAAA;YAED,MAAM,4BAA4B,GAAG,6BAA6B,CAAA;YAClE,MAAM,eAAe,GAAG,kKAAkK,CAAA;YAC1L,MAAM,2BAA2B,GAAG,6BAA6B,CAAA;YAEjE,MAAM,IAAI,CAAC,KAAK,CAAC,4BAA4B,CAAC,CAAA;YAC9C,MAAM,WAAW,GAAoB,MAAM,IAAI,CAAC,KAAK,CACjD,eAAe,EACf,CAAC,MAAM,CAAC,CACX,CAAA;YACD,MAAM,OAAO,CAAC,GAAG,CACb,WAAW,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CACzD,CAAA;YACD,MAAM,IAAI,CAAC,KAAK,CAAC,2BAA2B,CAAC,CAAA;YAE7C,IAAI,CAAC,0BAA0B,EAAE,CAAC;gBAC9B,MAAM,IAAI,CAAC,iBAAiB,EAAE,CAAA;YAClC,CAAC;QACL,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACb,IAAI,CAAC;gBACD,2DAA2D;gBAC3D,IAAI,CAAC,0BAA0B,EAAE,CAAC;oBAC9B,MAAM,IAAI,CAAC,mBAAmB,EAAE,CAAA;gBACpC,CAAC;YACL,CAAC;YAAC,OAAO,aAAa,EAAE,CAAC,CAAA,CAAC;YAC1B,MAAM,KAAK,CAAA;QACf,CAAC;IACL,CAAC;IAED,4EAA4E;IAC5E,oBAAoB;IACpB,4EAA4E;IAElE,KAAK,CAAC,SAAS,CAAC,SAAoB;QAC1C,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,2BAA2B,EAAE,CAAC,CAAA;QACxE,IAAI,CAAC,QAAQ,EAAE,CAAC;YACZ,OAAO,EAAE,CAAA;QACb,CAAC;QAED,SAAS,KAAK,EAAE,CAAA;QAEhB,MAAM,eAAe,GAAG,MAAM,IAAI,CAAC,kBAAkB,EAAE,CAAA;QACvD,MAAM,cAAc,GAAG,SAAS;aAC3B,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE;YACf,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,IAAI,EAAE,GAC7B,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,SAAS,CAAC,CAAA;YAEzC,QAAQ,KAAK,eAAe,CAAA;YAE5B,OAAO,wBAAwB,QAAQ,2BAA2B,IAAI,IAAI,CAAA;QAC9E,CAAC,CAAC;aACD,IAAI,CAAC,MAAM,CAAC,CAAA;QAEjB,MAAM,KAAK,GACP,+CAA+C,IAAI,CAAC,UAAU,CAC1D,IAAI,CAAC,2BAA2B,EAAE,CACrC,SAAS;YACV,oKACI,qCAAiB,CAAC,IACtB,KAAK,cAAc,CAAC,CAAC,CAAC,QAAQ,cAAc,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAA;QAC1D,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAA;QACvC,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,MAAW,EAAE,EAAE;YAC/B,MAAM,IAAI,GAAG,IAAI,WAAI,EAAE,CAAA;YACvB,MAAM,EAAE,GACJ,MAAM,CAAC,QAAQ,CAAC,KAAK,eAAe;gBAChC,CAAC,CAAC,SAAS;gBACX,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAA;YAC1B,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAA;YAChC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,cAAc,CAClC,MAAM,CAAC,MAAM,CAAC,EACd,SAAS,EACT,EAAE,CACL,CAAA;YACD,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC,OAAO,CAAC,CAAA;YACjC,OAAO,IAAI,CAAA;QACf,CAAC,CAAC,CAAA;IACN,CAAC;IAED;;;;OAIG;IACO,KAAK,CAAC,UAAU,CAAC,UAAqB;QAC5C,6CAA6C;QAC7C,IAAI,UAAU,EAAE,MAAM,KAAK,CAAC,EAAE,CAAC;YAC3B,OAAO,EAAE,CAAA;QACb,CAAC;QAED,MAAM,QAAQ,GAAmD,EAAE,CAAA;QAEnE,MAAM,eAAe,GAAG,MAAM,IAAI,CAAC,kBAAkB,EAAE,CAAA;QAEvD,IAAI,CAAC,UAAU,EAAE,CAAC;YACd,MAAM,SAAS,GAAG,wEAAwE,CAAA;YAE1F,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,CAAA;QACnD,CAAC;aAAM,CAAC;YACJ,MAAM,eAAe,GAAG,UAAU;iBAC7B,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE;gBACf,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,GAAG,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;gBAC3C,IAAI,CAAC,IAAI,EAAE,CAAC;oBACR,IAAI,GAAG,QAAQ,CAAA;oBACf,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,IAAI,eAAe,CAAA;gBACtD,CAAC;gBACD,OAAO,wBAAwB,QAAQ,2BAA2B,IAAI,IAAI,CAAA;YAC9E,CAAC,CAAC;iBACD,IAAI,CAAC,MAAM,CAAC,CAAA;YACjB,MAAM,SAAS,GACX,+EAA+E;gBAC/E,eAAe,CAAA;YAEnB,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,CAAA;QACnD,CAAC;QAED,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACxB,OAAO,EAAE,CAAA;QACb,CAAC;QAED,MAAM,gBAAgB,GAAG,QAAQ;aAC5B,GAAG,CAAC,CAAC,EAAE,UAAU,EAAE,YAAY,EAAE,EAAE,EAAE;YAClC,OAAO,wBAAwB,YAAY,2BAA2B,UAAU,IAAI,CAAA;QACxF,CAAC,CAAC;aACD,IAAI,CAAC,MAAM,CAAC,CAAA;QACjB,MAAM,UAAU,GACZ,yDAAyD;YACzD,gBAAgB,CAAA;QAEpB,MAAM,aAAa,GAAG,wGAAwG,gBAAgB,GAAG,CAAA;QAEjJ,MAAM,aAAa,GAAG,6JAA6J,CAAA;QAEnL,MAAM,gBAAgB,GAAG,QAAQ;aAC5B,GAAG,CAAC,CAAC,EAAE,UAAU,EAAE,YAAY,EAAE,EAAE,EAAE;YAClC,OAAO,8BAA8B,YAAY,iCAAiC,UAAU,IAAI,CAAA;QACpG,CAAC,CAAC;aACD,IAAI,CAAC,MAAM,CAAC,CAAA;QACjB,MAAM,UAAU,GACZ,kEAAkE;YAClE,2HAA2H;YAC3H,UAAU,gBAAgB,gFAAgF,CAAA;QAE9G,MAAM,oBAAoB,GAAG,QAAQ;aAChC,GAAG,CAAC,CAAC,EAAE,UAAU,EAAE,YAAY,EAAE,EAAE,EAAE;YAClC,OAAO,gCAAgC,YAAY,mCAAmC,UAAU,IAAI,CAAA;QACxG,CAAC,CAAC;aACD,IAAI,CAAC,MAAM,CAAC,CAAA;QACjB,MAAM,cAAc,GAChB,sJAAsJ;YACtJ,oJAAoJ;YACpJ,2DAA2D;YAC3D,mIAAmI;YACnI,QAAQ;YACR,oBAAoB,CAAA;QACxB,MAAM,CACF,SAAS,EACT,aAAa,EACb,YAAY,EACZ,SAAS,EACT,aAAa,EAChB,GAAsB,MAAM,OAAO,CAAC,GAAG,CAAC;YACrC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC;YACtB,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC;YACzB,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC;YACzB,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC;YACtB,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC;SAC7B,CAAC,CAAA;QAEF,kCAAkC;QAClC,OAAO,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE;YAC5B,MAAM,KAAK,GAAG,IAAI,aAAK,EAAE,CAAA;YAEzB,MAAM,WAAW,GAAG,YAAY,CAAC,IAAI,CACjC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,OAAO,CAAC,cAAc,CAAC,CAC3D,CAAA;YACF,MAAM,gBAAgB,GAAG,WAAW,CAAC,WAAW,CAAC,CAAA;YACjD,MAAM,cAAc,GAAG,WAAW,CAAC,SAAS,CAAC,CAAA;YAE7C,qEAAqE;YACrE,MAAM,EAAE,GACJ,OAAO,CAAC,cAAc,CAAC,KAAK,eAAe;gBACvC,CAAC,CAAC,SAAS;gBACX,CAAC,CAAC,OAAO,CAAC,cAAc,CAAC,CAAA;YACjC,KAAK,CAAC,QAAQ,GAAG,OAAO,CAAC,cAAc,CAAC,CAAA;YACxC,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,cAAc,CACnC,OAAO,CAAC,YAAY,CAAC,EACrB,SAAS,EACT,EAAE,CACL,CAAA;YAED,yCAAyC;YACzC,KAAK,CAAC,OAAO,GAAG,SAAS;iBACpB,MAAM,CACH,CAAC,QAAQ,EAAE,EAAE,CACT,QAAQ,CAAC,YAAY,CAAC,KAAK,OAAO,CAAC,YAAY,CAAC;gBAChD,QAAQ,CAAC,cAAc,CAAC,KAAK,OAAO,CAAC,cAAc,CAAC,CAC3D;iBACA,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE;gBACd,MAAM,mBAAmB,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE;oBACrD,OAAO,CACH,OAAO,CAAC,YAAY,CAAC,KAAK,OAAO,CAAC,YAAY,CAAC;wBAC/C,OAAO,CAAC,cAAc,CAAC;4BACnB,OAAO,CAAC,cAAc,CAAC;wBAC3B,OAAO,CAAC,aAAa,CAAC;4BAClB,QAAQ,CAAC,aAAa,CAAC;wBAC3B,QAAQ,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,CAC5C,CAAA;gBACL,CAAC,CAAC,CAAA;gBAEF,MAAM,aAAa,GAAG,IAAI,CAAC,UAAU,CAAC,eAAe,CAAC,IAAI,CACtD,CAAC,QAAQ,EAAE,EAAE,CACT,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC;oBACxB,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,CAClC,CAAA;gBACD,MAAM,eAAe,GACjB,mBAAmB,CAAC,MAAM,GAAG,CAAC;oBAC9B,aAAa,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE;wBAClC,OAAO,mBAAmB,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,EAAE;4BAC5C,OAAO,CACH,KAAK,CAAC,IAAI,KAAK,WAAW,CAAC,YAAY,CAAC;gCACxC,KAAK,CAAC,WAAW,KAAK,KAAK,CAC9B,CAAA;wBACL,CAAC,CAAC,CAAA;oBACN,CAAC,CAAC,CAAA;gBAEN,MAAM,qBAAqB,GAAG,mBAAmB,CAAC,KAAK,CACnD,CAAC,WAAW,EAAE,EAAE;oBACZ,OAAO,SAAS,CAAC,IAAI,CACjB,CAAC,OAAO,EAAE,EAAE,CACR,OAAO,CAAC,YAAY,CAAC;wBACjB,WAAW,CAAC,YAAY,CAAC;wBAC7B,OAAO,CAAC,aAAa,CAAC;4BAClB,QAAQ,CAAC,aAAa,CAAC,CAClC,CAAA;gBACL,CAAC,CACJ,CAAA;gBAED,MAAM,WAAW,GAAG,IAAI,yBAAW,EAAE,CAAA;gBACrC,WAAW,CAAC,IAAI,GAAG,QAAQ,CAAC,aAAa,CAAC,CAAA;gBAC1C,WAAW,CAAC,IAAI,GAAG,QAAQ,CAAC,WAAW,CAAC,CAAC,WAAW,EAAE,CAAA;gBAEtD,WAAW,CAAC,QAAQ;oBAChB,QAAQ,CAAC,aAAa,CAAC,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAA;gBAEhD,IACI,QAAQ,CAAC,gBAAgB,CAAC,KAAK,IAAI;oBACnC,QAAQ,CAAC,gBAAgB,CAAC,KAAK,SAAS,EAC1C,CAAC;oBACC,WAAW,CAAC,OAAO,GAAG,SAAS,CAAA;gBACnC,CAAC;qBAAM,CAAC;oBACJ,WAAW,CAAC,OAAO;wBACf,QAAQ,CAAC,gBAAgB,CAAC,KAAK,mBAAmB;4BAC9C,CAAC,CAAC,QAAQ,CAAC,gBAAgB,CAAC;4BAC5B,CAAC,CAAC,IAAI,QAAQ,CAAC,gBAAgB,CAAC,GAAG,CAAA;gBAC/C,CAAC;gBAED,IAAI,QAAQ,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC;oBAChD,WAAW,CAAC,QAAQ,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAC,KAAK,CAC1C,QAAQ,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,WAAW,CAAC,GAAG,EAAE,CAC9C,CAAA;gBACL,CAAC;gBAED,IAAI,QAAQ,CAAC,uBAAuB,CAAC,EAAE,CAAC;oBACpC,WAAW,CAAC,YAAY;wBACpB,QAAQ,CAAC,uBAAuB,CAAC,CAAA;oBACrC,WAAW,CAAC,aAAa;wBACrB,QAAQ,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;4BACvC,CAAC,CAAC,SAAS;4BACX,CAAC,CAAC,QAAQ,CAAA;gBACtB,CAAC;gBAED,WAAW,CAAC,QAAQ;oBAChB,mBAAmB,CAAC,MAAM,GAAG,CAAC;wBAC9B,CAAC,eAAe;wBAChB,CAAC,qBAAqB,CAAA;gBAC1B,WAAW,CAAC,UAAU,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,KAAK,CAAA;gBAC1D,WAAW,CAAC,SAAS,GAAG,aAAa,CAAC,IAAI,CACtC,CAAC,YAAY,EAAE,EAAE;oBACb,OAAO,CACH,YAAY,CAAC,YAAY,CAAC;wBACtB,QAAQ,CAAC,YAAY,CAAC;wBAC1B,YAAY,CAAC,cAAc,CAAC;4BACxB,QAAQ,CAAC,cAAc,CAAC;wBAC5B,YAAY,CAAC,aAAa,CAAC;4BACvB,QAAQ,CAAC,aAAa,CAAC,CAC9B,CAAA;gBACL,CAAC,CACJ,CAAA;gBACD,WAAW,CAAC,WAAW;oBACnB,QAAQ,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC,CAAA;gBACtD,IAAI,WAAW,CAAC,WAAW;oBACvB,WAAW,CAAC,kBAAkB,GAAG,WAAW,CAAA;gBAEhD,WAAW,CAAC,OAAO;oBACf,OAAO,QAAQ,CAAC,gBAAgB,CAAC,KAAK,QAAQ;wBAC9C,QAAQ,CAAC,gBAAgB,CAAC,CAAC,MAAM,KAAK,CAAC;wBACnC,CAAC,CAAC,SAAS;wBACX,CAAC,CAAC,QAAQ,CAAC,gBAAgB,CAAC,CAAA;gBACpC,IAAI,QAAQ,CAAC,oBAAoB,CAAC;oBAC9B,WAAW,CAAC,OAAO;wBACf,QAAQ,CAAC,oBAAoB,CAAC,KAAK,cAAc;4BAC7C,CAAC,CAAC,SAAS;4BACX,CAAC,CAAC,QAAQ,CAAC,oBAAoB,CAAC,CAAA;gBAC5C,IAAI,QAAQ,CAAC,gBAAgB,CAAC;oBAC1B,WAAW,CAAC,SAAS;wBACjB,QAAQ,CAAC,gBAAgB,CAAC,KAAK,gBAAgB;4BAC3C,CAAC,CAAC,SAAS;4BACX,CAAC,CAAC,QAAQ,CAAC,gBAAgB,CAAC,CAAA;gBAExC,+CAA+C;gBAC/C,IACI,IAAI,CAAC,MAAM,CAAC,qBAAqB,CAAC,OAAO,CACrC,WAAW,CAAC,IAAkB,CACjC,KAAK,CAAC,CAAC;oBACR,QAAQ,CAAC,0BAA0B,CAAC,EACtC,CAAC;oBACC,MAAM,MAAM,GACR,QAAQ,CAAC,0BAA0B,CAAC,CAAC,QAAQ,EAAE,CAAA;oBACnD,WAAW,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,qBAAqB,CAC5C,KAAK,EACL,WAAW,EACX,MAAM,CACT;wBACG,CAAC,CAAC,MAAM;wBACR,CAAC,CAAC,EAAE,CAAA;gBACZ,CAAC;gBAED,IACI,WAAW,CAAC,IAAI,KAAK,SAAS;oBAC9B,WAAW,CAAC,IAAI,KAAK,QAAQ;oBAC7B,WAAW,CAAC,IAAI,KAAK,OAAO,EAC9B,CAAC;oBACC,IACI,QAAQ,CAAC,mBAAmB,CAAC,KAAK,IAAI;wBACtC,CAAC,IAAI,CAAC,wBAAwB,CAC1B,KAAK,EACL,WAAW,EACX,QAAQ,CAAC,mBAAmB,CAAC,CAChC;wBAED,WAAW,CAAC,SAAS,GAAG,QAAQ,CAC5B,QAAQ,CAAC,mBAAmB,CAAC,CAChC,CAAA;oBACL,IACI,QAAQ,CAAC,eAAe,CAAC,KAAK,IAAI;wBAClC,CAAC,IAAI,CAAC,oBAAoB,CACtB,KAAK,EACL,WAAW,EACX,QAAQ,CAAC,eAAe,CAAC,CAC5B;wBAED,WAAW,CAAC,KAAK,GAAG,QAAQ,CACxB,QAAQ,CAAC,eAAe,CAAC,CAC5B,CAAA;gBACT,CAAC;gBAED,IACI,WAAW,CAAC,IAAI,KAAK,MAAM;oBAC3B,WAAW,CAAC,IAAI,KAAK,aAAa;oBAClC,WAAW,CAAC,IAAI,KAAK,KAAK,EAC5B,CAAC;oBACC,MAAM,OAAO,GAAG,QAAQ,CAAC,aAAa,CAAC,CAAA;oBACvC,MAAM,KAAK,GAAG,OAAO;yBAChB,KAAK,CACF,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,EACxB,OAAO,CAAC,WAAW,CAAC,GAAG,CAAC,CAC3B;yBACA,KAAK,CAAC,GAAG,CAAC,CAAA;oBACf,WAAW,CAAC,IAAI,GAAI,KAAkB,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;wBAChD,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;oBAC5B,CAAC,CAAC,CAAA;oBACF,WAAW,CAAC,MAAM,GAAG,EAAE,CAAA;gBAC3B,CAAC;gBAED,IACI,CAAC,WAAW,CAAC,IAAI,KAAK,UAAU;oBAC5B,WAAW,CAAC,IAAI,KAAK,MAAM;oBAC3B,WAAW,CAAC,IAAI,KAAK,WAAW,CAAC;oBACrC,QAAQ,CAAC,oBAAoB,CAAC,KAAK,IAAI;oBACvC,QAAQ,CAAC,oBAAoB,CAAC,KAAK,SAAS;oBAC5C,CAAC,IAAI,CAAC,wBAAwB,CAC1B,KAAK,EACL,WAAW,EACX,QAAQ,CAAC,QAAQ,CAAC,oBAAoB,CAAC,CAAC,CAC3C,EACH,CAAC;oBACC,WAAW,CAAC,SAAS,GAAG,QAAQ,CAC5B,QAAQ,CAAC,oBAAoB,CAAC,CACjC,CAAA;gBACL,CAAC;gBAED,OAAO,WAAW,CAAA;YACtB,CAAC,CAAC,CAAA;YAEN,kGAAkG;YAClG,MAAM,0BAA0B,GAAG,mBAAQ,CAAC,IAAI,CAC5C,aAAa,CAAC,MAAM,CAAC,CAAC,YAAY,EAAE,EAAE;gBAClC,OAAO,CACH,YAAY,CAAC,YAAY,CAAC,KAAK,OAAO,CAAC,YAAY,CAAC;oBACpD,YAAY,CAAC,cAAc,CAAC,KAAK,OAAO,CAAC,cAAc,CAAC,CAC3D,CAAA;YACL,CAAC,CAAC,EACF,CAAC,YAAY,EAAE,EAAE,CAAC,YAAY,CAAC,iBAAiB,CAAC,CACpD,CAAA;YAED,KAAK,CAAC,WAAW,GAAG,0BAA0B,CAAC,GAAG,CAC9C,CAAC,YAAY,EAAE,EAAE;gBACb,MAAM,WAAW,GAAG,aAAa,CAAC,MAAM,CACpC,CAAC,IAAI,EAAE,EAAE,CACL,IAAI,CAAC,iBAAiB,CAAC;oBACvB,YAAY,CAAC,iBAAiB,CAAC,CACtC,CAAA;gBAED,mGAAmG;gBACnG,MAAM,QAAQ,GACV,YAAY,CAAC,yBAAyB,CAAC;oBACvC,eAAe;oBACX,CAAC,CAAC,SAAS;oBACX,CAAC,CAAC,YAAY,CAAC,yBAAyB,CAAC,CAAA;gBACjD,MAAM,mBAAmB,GAAG,IAAI,CAAC,MAAM,CAAC,cAAc,CAClD,YAAY,CAAC,uBAAuB,CAAC,EACrC,SAAS,EACT,QAAQ,CACX,CAAA;gBAED,OAAO,IAAI,iCAAe,CAAC;oBACvB,IAAI,EAAE,YAAY,CAAC,iBAAiB,CAAC;oBACrC,WAAW,EAAE,WAAW,CAAC,GAAG,CACxB,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,aAAa,CAAC,CAChC;oBACD,kBAAkB,EACd,YAAY,CAAC,yBAAyB,CAAC;oBAC3C,mBAAmB,EAAE,mBAAmB;oBACxC,qBAAqB,EAAE,WAAW,CAAC,GAAG,CAClC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAC3C;oBACD,QAAQ,EAAE,YAAY,CAAC,WAAW,CAAC;oBACnC,QAAQ,EAAE,YAAY,CAAC,WAAW,CAAC;iBACtC,CAAC,CAAA;YACN,CAAC,CACJ,CAAA;YAED,uFAAuF;YACvF,MAAM,qBAAqB,GAAG,mBAAQ,CAAC,IAAI,CACvC,SAAS,CAAC,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE;gBACzB,OAAO,CACH,OAAO,CAAC,YAAY,CAAC,KAAK,OAAO,CAAC,YAAY,CAAC;oBAC/C,OAAO,CAAC,cAAc,CAAC,KAAK,OAAO,CAAC,cAAc,CAAC,CACtD,CAAA;YACL,CAAC,CAAC,EACF,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,YAAY,CAAC,CACrC,CAAA;YAED,KAAK,CAAC,OAAO,GAAG,qBAAqB,CAAC,GAAG,CAAC,CAAC,UAAU,EAAE,EAAE;gBACrD,MAAM,OAAO,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE;oBACvC,OAAO,CACH,KAAK,CAAC,cAAc,CAAC,KAAK,UAAU,CAAC,cAAc,CAAC;wBACpD,KAAK,CAAC,YAAY,CAAC,KAAK,UAAU,CAAC,YAAY,CAAC;wBAChD,KAAK,CAAC,YAAY,CAAC,KAAK,UAAU,CAAC,YAAY,CAAC,CACnD,CAAA;gBACL,CAAC,CAAC,CAAA;gBAEF,MAAM,SAAS,GAAG,QAAQ,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,EAAE,CAAC,CAAA;gBAExD,OAAO,IAAI,uBAAU,CAAC;oBAClB,KAAK,EAAE,KAAK;oBACZ,IAAI,EAAE,UAAU,CAAC,YAAY,CAAC;oBAC9B,WAAW,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC;oBACjD,QAAQ,EAAE,SAAS,KAAK,CAAC;oBACzB,SAAS,EAAE,UAAU,CAAC,YAAY,CAAC,KAAK,SAAS;oBACjD,UAAU,EAAE,UAAU,CAAC,YAAY,CAAC,KAAK,UAAU;iBACjC,CAAC,CAAA;YAC3B,CAAC,CAAC,CAAA;YAEF,OAAO,KAAK,CAAA;QAChB,CAAC,CAAC,CAAA;IACN,CAAC;IAED;;;;;OAKG;IACO,cAAc,CAAC,KAAY,EAAE,iBAA2B;QAC9D,MAAM,iBAAiB,GAAG,KAAK,CAAC,OAAO;aAClC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,IAAI,CAAC,oBAAoB,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;aACxD,IAAI,CAAC,IAAI,CAAC,CAAA;QACf,IAAI,GAAG,GAAG,gBAAgB,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,KAAK,iBAAiB,EAAE,CAAA;QAExE,0GAA0G;QAC1G,qEAAqE;QACrE,KAAK,CAAC,OAAO;aACR,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC;aACnC,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE;YAChB,MAAM,kBAAkB,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE;gBACpD,OAAO,CACH,KAAK,CAAC,WAAW,CAAC,MAAM,KAAK,CAAC;oBAC9B,CAAC,CAAC,KAAK,CAAC,QAAQ;oBAChB,KAAK,CAAC,WAAW,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAChD,CAAA;YACL,CAAC,CAAC,CAAA;YACF,MAAM,uBAAuB,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE;gBAC1D,OAAO,CACH,MAAM,CAAC,WAAW,CAAC,MAAM,KAAK,CAAC;oBAC/B,MAAM,CAAC,WAAW,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CACjD,CAAA;YACL,CAAC,CAAC,CAAA;YACF,IAAI,CAAC,kBAAkB,IAAI,CAAC,uBAAuB;gBAC/C,KAAK,CAAC,OAAO,CAAC,IAAI,CACd,IAAI,uBAAU,CAAC;oBACX,IAAI,EAAE,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC,oBAAoB,CACrD,KAAK,EACL,CAAC,MAAM,CAAC,IAAI,CAAC,CAChB;oBACD,WAAW,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC;oBAC1B,QAAQ,EAAE,IAAI;iBACjB,CAAC,CACL,CAAA;QACT,CAAC,CAAC,CAAA;QAEN,sHAAsH;QACtH,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC3B,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE;gBAC7B,MAAM,WAAW,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAClC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,KAAK,MAAM,CAAC,IAAI,CACxC,CAAA;gBACD,IAAI,CAAC,WAAW,EAAE,CAAC;oBACf,KAAK,CAAC,OAAO,CAAC,IAAI,CACd,IAAI,uBAAU,CAAC;wBACX,IAAI,EAAE,MAAM,CAAC,IAAI;wBACjB,WAAW,EAAE,MAAM,CAAC,WAAW;wBAC/B,QAAQ,EAAE,IAAI;qBACjB,CAAC,CACL,CAAA;gBACL,CAAC;YACL,CAAC,CAAC,CAAA;QACN,CAAC;QAED,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC3B,MAAM,UAAU,GAAG,KAAK,CAAC,OAAO;iBAC3B,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;gBACX,MAAM,WAAW,GAAG,KAAK,CAAC,WAAW;qBAChC,GAAG,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,KAAK,UAAU,IAAI,CAAC;qBACxC,IAAI,CAAC,IAAI,CAAC,CAAA;gBACf,KAAK,CAAC,IAAI,KAAK,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC,SAAS,CACnD,KAAK,EACL,KAAK,CAAC,WAAW,EACjB,KAAK,CAAC,KAAK,CACd,CAAA;gBAED,IAAI,SAAS,GAAG,EAAE,CAAA;gBAClB,IAAI,KAAK,CAAC,QAAQ;oBAAE,SAAS,IAAI,SAAS,CAAA;gBAC1C,IAAI,KAAK,CAAC,SAAS;oBAAE,SAAS,IAAI,UAAU,CAAA;gBAC5C,IAAI,KAAK,CAAC,UAAU;oBAAE,SAAS,IAAI,WAAW,CAAA;gBAC9C,OAAO,GAAG,SAAS,WAAW,KAAK,CAAC,IAAI,OAAO,WAAW,GAAG,CAAA;YACjE,CAAC,CAAC;iBACD,IAAI,CAAC,IAAI,CAAC,CAAA;YAEf,GAAG,IAAI,KAAK,UAAU,EAAE,CAAA;QAC5B,CAAC;QAED,IAAI,KAAK,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,IAAI,iBAAiB,EAAE,CAAC;YACpD,MAAM,cAAc,GAAG,KAAK,CAAC,WAAW;iBACnC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE;gBACR,MAAM,WAAW,GAAG,EAAE,CAAC,WAAW;qBAC7B,GAAG,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,KAAK,UAAU,IAAI,CAAC;qBACxC,IAAI,CAAC,IAAI,CAAC,CAAA;gBACf,EAAE,CAAC,IAAI,KAAK,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC,cAAc,CACrD,KAAK,EACL,EAAE,CAAC,WAAW,CACjB,CAAA;gBACD,MAAM,qBAAqB,GAAG,EAAE,CAAC,qBAAqB;qBACjD,GAAG,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,KAAK,UAAU,IAAI,CAAC;qBACxC,IAAI,CAAC,IAAI,CAAC,CAAA;gBAEf,IAAI,UAAU,GAAG,gBACb,EAAE,CAAC,IACP,mBAAmB,WAAW,gBAAgB,IAAI,CAAC,UAAU,CACzD,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC,CACxB,KAAK,qBAAqB,GAAG,CAAA;gBAC9B,IAAI,EAAE,CAAC,QAAQ;oBAAE,UAAU,IAAI,cAAc,EAAE,CAAC,QAAQ,EAAE,CAAA;gBAC1D,IAAI,EAAE,CAAC,QAAQ;oBAAE,UAAU,IAAI,cAAc,EAAE,CAAC,QAAQ,EAAE,CAAA;gBAE1D,OAAO,UAAU,CAAA;YACrB,CAAC,CAAC;iBACD,IAAI,CAAC,IAAI,CAAC,CAAA;YAEf,GAAG,IAAI,KAAK,cAAc,EAAE,CAAA;QAChC,CAAC;QAED,IAAI,KAAK,CAAC,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAClC,MAAM,WAAW,GAAG,KAAK,CAAC,cAAc;iBACnC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC;iBACrC,IAAI,CAAC,IAAI,CAAC,CAAA;YACf,GAAG,IAAI,kBAAkB,WAAW,GAAG,CAAA;QAC3C,CAAC;QAED,GAAG,IAAI,YAAY,KAAK,CAAC,MAAM,IAAI,QAAQ,EAAE,CAAA;QAE7C,OAAO,IAAI,aAAK,CAAC,GAAG,CAAC,CAAA;IACzB,CAAC;IAED;;;;OAIG;IACO,YAAY,CAAC,WAA2B;QAC9C,OAAO,IAAI,aAAK,CAAC,cAAc,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC,CAAA;IAClE,CAAC;IAES,aAAa,CAAC,IAAU;QAC9B,IAAI,OAAO,IAAI,CAAC,UAAU,KAAK,QAAQ,EAAE,CAAC;YACtC,OAAO,IAAI,aAAK,CACZ,eAAe,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,IAAI,CAAC,UAAU,EAAE,CAC/D,CAAA;QACL,CAAC;aAAM,CAAC;YACJ,OAAO,IAAI,aAAK,CACZ,eAAe,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,IAAI;iBAC1C,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC;iBAC3B,QAAQ,EAAE,EAAE,CACpB,CAAA;QACL,CAAC;IACL,CAAC;IAES,KAAK,CAAC,uBAAuB,CAAC,IAAU;QAC9C,MAAM,eAAe,GAAG,MAAM,IAAI,CAAC,kBAAkB,EAAE,CAAA;QACvD,MAAM,UAAU,GACZ,OAAO,IAAI,CAAC,UAAU,KAAK,QAAQ;YAC/B,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE;YACxB,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,QAAQ,EAAE,CAAA;QACrD,OAAO,IAAI,CAAC,wBAAwB,CAAC;YACjC,IAAI,EAAE,qCAAiB,CAAC,IAAI;YAC5B,MAAM,EAAE,eAAe;YACvB,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,KAAK,EAAE,UAAU;SACpB,CAAC,CAAA;IACN,CAAC;IAED;;;;;OAKG;IACO,WAAW,CACjB,UAAyB,EACzB,QAAkB;QAElB,MAAM,cAAc,GAAG,QAAQ,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,CAAA;QACnD,OAAO,IAAI,aAAK,CACZ,aAAa,cAAc,GAAG,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAC9D,CAAA;IACL,CAAC;IAED;;;;OAIG;IACO,KAAK,CAAC,uBAAuB,CACnC,UAAyB;QAEzB,MAAM,eAAe,GAAG,MAAM,IAAI,CAAC,kBAAkB,EAAE,CAAA;QACvD,MAAM,QAAQ,GAAG,iCAAe,CAAC,MAAM,CAAC,UAAU,CAAC;YAC/C,CAAC,CAAC,UAAU,CAAC,IAAI;YACjB,CAAC,CAAC,UAAU,CAAA;QAChB,OAAO,IAAI,CAAC,wBAAwB,CAAC;YACjC,IAAI,EAAE,qCAAiB,CAAC,IAAI;YAC5B,MAAM,EAAE,eAAe;YACvB,IAAI,EAAE,QAAQ;SACjB,CAAC,CAAA;IACN,CAAC;IAED;;;;;OAKG;IACO,cAAc,CAAC,KAAY,EAAE,KAAiB;QACpD,MAAM,OAAO,GAAG,KAAK,CAAC,WAAW;aAC5B,GAAG,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,KAAK,UAAU,IAAI,CAAC;aACxC,IAAI,CAAC,IAAI,CAAC,CAAA;QACf,IAAI,SAAS,GAAG,EAAE,CAAA;QAClB,IAAI,KAAK,CAAC,QAAQ;YAAE,SAAS,IAAI,SAAS,CAAA;QAC1C,IAAI,KAAK,CAAC,SAAS;YAAE,SAAS,IAAI,UAAU,CAAA;QAC5C,IAAI,KAAK,CAAC,UAAU;YAAE,SAAS,IAAI,WAAW,CAAA;QAC9C,OAAO,IAAI,aAAK,CACZ,UAAU,SAAS,WAAW,KAAK,CAAC,IAAI,SAAS,IAAI,CAAC,UAAU,CAC5D,KAAK,CACR,KAAK,OAAO,GAAG,CACnB,CAAA;IACL,CAAC;IAED;;;;;OAKG;IACO,YAAY,CAClB,KAAY,EACZ,WAAgC;QAEhC,MAAM,SAAS,GAAG,iCAAe,CAAC,YAAY,CAAC,WAAW,CAAC;YACvD,CAAC,CAAC,WAAW,CAAC,IAAI;YAClB,CAAC,CAAC,WAAW,CAAA;QACjB,OAAO,IAAI,aAAK,CACZ,gBAAgB,SAAS,SAAS,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,CAC7D,CAAA;IACL,CAAC;IAED;;;;;OAKG;IACO,mBAAmB,CAAC,KAAY,EAAE,WAAqB;QAC7D,MAAM,iBAAiB,GAAG,WAAW;aAChC,GAAG,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,KAAK,UAAU,IAAI,CAAC;aACxC,IAAI,CAAC,IAAI,CAAC,CAAA;QACf,OAAO,IAAI,aAAK,CACZ,eAAe,IAAI,CAAC,UAAU,CAC1B,KAAK,CACR,qBAAqB,iBAAiB,GAAG,CAC7C,CAAA;IACL,CAAC;IAED;;;;OAIG;IACO,iBAAiB,CAAC,KAAY;QACpC,OAAO,IAAI,aAAK,CACZ,eAAe,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,mBAAmB,CAC3D,CAAA;IACL,CAAC;IAED;;;;;OAKG;IACO,mBAAmB,CACzB,KAAY,EACZ,UAA2B;QAE3B,MAAM,WAAW,GAAG,UAAU,CAAC,WAAW;aACrC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,KAAK,MAAM,IAAI,CAAC;aAChC,IAAI,CAAC,IAAI,CAAC,CAAA;QACf,MAAM,qBAAqB,GAAG,UAAU,CAAC,qBAAqB;aACzD,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,KAAK,MAAM,IAAI,CAAC;aAChC,IAAI,CAAC,GAAG,CAAC,CAAA;QACd,IAAI,GAAG,GACH,eAAe,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,qBACjC,UAAU,CAAC,IACf,mBAAmB,WAAW,IAAI;YAClC,cAAc,IAAI,CAAC,UAAU,CACzB,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,CAChC,IAAI,qBAAqB,GAAG,CAAA;QACjC,IAAI,UAAU,CAAC,QAAQ;YAAE,GAAG,IAAI,cAAc,UAAU,CAAC,QAAQ,EAAE,CAAA;QACnE,IAAI,UAAU,CAAC,QAAQ;YAAE,GAAG,IAAI,cAAc,UAAU,CAAC,QAAQ,EAAE,CAAA;QAEnE,OAAO,IAAI,aAAK,CAAC,GAAG,CAAC,CAAA;IACzB,CAAC;IAED;;;;;OAKG;IACO,iBAAiB,CACvB,KAAY,EACZ,gBAA0C;QAE1C,MAAM,cAAc,GAAG,iCAAe,CAAC,iBAAiB,CACpD,gBAAgB,CACnB;YACG,CAAC,CAAC,gBAAgB,CAAC,IAAI;YACvB,CAAC,CAAC,gBAAgB,CAAA;QACtB,OAAO,IAAI,aAAK,CACZ,eAAe,IAAI,CAAC,UAAU,CAC1B,KAAK,CACR,uBAAuB,cAAc,IAAI,CAC7C,CAAA;IACL,CAAC;IAED;;;;OAIG;IACO,aAAa,CAAC,OAAgB;QACpC,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACnC,OAAO,IAAI,CAAA;QACf,CAAC;QAED,OAAO,GAAG,OAAO;aACZ,UAAU,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,mDAAmD;aAC5E,UAAU,CAAC,GAAG,EAAE,IAAI,CAAC;aACrB,UAAU,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAA,CAAC,wCAAwC;QAEtE,OAAO,IAAI,OAAO,GAAG,CAAA;IACzB,CAAC;IAED;;;;OAIG;IACO,UAAU,CAAC,MAA6B;QAC9C,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,MAAM,CAAC,CAAA;QAElE,IAAI,QAAQ,IAAI,QAAQ,KAAK,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC;YAChD,OAAO,KAAK,QAAQ,QAAQ,SAAS,IAAI,CAAA;QAC7C,CAAC;QAED,OAAO,KAAK,SAAS,IAAI,CAAA;IAC7B,CAAC;IAED;;;;;;OAMG;IACO,oBAAoB,CAC1B,MAAmB,EACnB,WAAoB,EACpB,WAAoB,KAAK;QAEzB,IAAI,CAAS,CAAA;QACb,IAAI,QAAQ,EAAE,CAAC;YACX,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,cAAc,CAAC,MAAM,CAAC,CAAA;QACrD,CAAC;aAAM,CAAC;YACJ,CAAC,GAAG,KAAK,MAAM,CAAC,IAAI,MAAM,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,cAAc,CAC3D,MAAM,CACT,EAAE,CAAA;QACP,CAAC;QAED,IAAI,MAAM,CAAC,YAAY;YACnB,CAAC,IAAI,QAAQ,MAAM,CAAC,YAAY,KAC5B,MAAM,CAAC,aAAa,IAAI,SAC5B,EAAE,CAAA;QAEN,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;YAClB,CAAC,IAAI,WAAW,CAAA;QACpB,CAAC;QAED,IAAI,MAAM,CAAC,IAAI;YACX,CAAC,IAAI,KAAK,MAAM,CAAC,IAAI;iBAChB,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,GAAG,GAAG,KAAK,GAAG,GAAG,CAAC;iBACjC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAA;QACtB,IAAI,MAAM,CAAC,OAAO;YAAE,CAAC,IAAI,mBAAmB,MAAM,CAAC,OAAO,GAAG,CAAA;QAC7D,IAAI,MAAM,CAAC,SAAS;YAAE,CAAC,IAAI,aAAa,MAAM,CAAC,SAAS,GAAG,CAAA;QAC3D,IAAI,CAAC,MAAM,CAAC,UAAU;YAAE,CAAC,IAAI,WAAW,CAAA;QACxC,IAAI,MAAM,CAAC,UAAU;YAAE,CAAC,IAAI,OAAO,CAAA;QACnC,IAAI,MAAM,CAAC,SAAS,IAAI,CAAC,WAAW;YAAE,CAAC,IAAI,cAAc,CAAA;QACzD,IAAI,MAAM,CAAC,WAAW,IAAI,MAAM,CAAC,kBAAkB,KAAK,WAAW;YAC/D,8FAA8F;YAC9F,CAAC,IAAI,iBAAiB,CAAA;QAC1B,IAAI,MAAM,CAAC,OAAO;YACd,CAAC,IAAI,YAAY,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAA;QACzD,IAAI,MAAM,CAAC,OAAO,KAAK,SAAS,IAAI,MAAM,CAAC,OAAO,KAAK,IAAI;YACvD,CAAC,IAAI,YAAY,MAAM,CAAC,OAAO,EAAE,CAAA;QACrC,IAAI,MAAM,CAAC,QAAQ;YAAE,CAAC,IAAI,cAAc,MAAM,CAAC,QAAQ,EAAE,CAAA;QAEzD,OAAO,CAAC,CAAA;IACZ,CAAC;IAED;;;;;OAKG;IACH,kBAAkB,CACd,WAA2B,EAC3B,OAAgB;QAEhB,MAAM,IAAI,oBAAY,CAClB,4DAA4D,CAC/D,CAAA;IACL,CAAC;CACJ;AAv6FD,wDAu6FC","sourcesContent":["import type { ObjectLiteral } from \"../../common/ObjectLiteral\"\nimport { TypeORMError } from \"../../error\"\nimport { NamedPlaceholdersNotSupportedError } from \"../../error/NamedPlaceholdersNotSupportedError\"\nimport { QueryRunnerAlreadyReleasedError } from \"../../error/QueryRunnerAlreadyReleasedError\"\nimport { TransactionNotStartedError } from \"../../error/TransactionNotStartedError\"\nimport type { ReadStream } from \"../../platform/PlatformTools\"\nimport { BaseQueryRunner } from \"../../query-runner/BaseQueryRunner\"\nimport { QueryResult } from \"../../query-runner/QueryResult\"\nimport type { QueryRunner } from \"../../query-runner/QueryRunner\"\nimport type { TableIndexOptions } from \"../../schema-builder/options/TableIndexOptions\"\nimport { Table } from \"../../schema-builder/table/Table\"\nimport type { TableCheck } from \"../../schema-builder/table/TableCheck\"\nimport { TableColumn } from \"../../schema-builder/table/TableColumn\"\nimport type { TableExclusion } from \"../../schema-builder/table/TableExclusion\"\nimport { TableForeignKey } from \"../../schema-builder/table/TableForeignKey\"\nimport { TableIndex } from \"../../schema-builder/table/TableIndex\"\nimport { TableUnique } from \"../../schema-builder/table/TableUnique\"\nimport { View } from \"../../schema-builder/view/View\"\nimport { Broadcaster } from \"../../subscriber/Broadcaster\"\nimport { InstanceChecker } from \"../../util/InstanceChecker\"\nimport { OrmUtils } from \"../../util/OrmUtils\"\nimport { Query } from \"../Query\"\nimport type { ColumnType } from \"../types/ColumnTypes\"\nimport type { IsolationLevel } from \"../types/IsolationLevel\"\nimport { validateIsolationLevel } from \"../validate-isolation-level\"\nimport { MetadataTableType } from \"../types/MetadataTableType\"\nimport type { AuroraMysqlDriver } from \"./AuroraMysqlDriver\"\n\n/**\n * Runs queries on a single mysql database connection.\n */\nexport class AuroraMysqlQueryRunner\n extends BaseQueryRunner\n implements QueryRunner\n{\n // -------------------------------------------------------------------------\n // Public Implemented Properties\n // -------------------------------------------------------------------------\n\n /**\n * Database driver used by connection.\n */\n\n driver: AuroraMysqlDriver\n\n protected client: any\n\n // -------------------------------------------------------------------------\n // Protected Properties\n // -------------------------------------------------------------------------\n\n /**\n * Promise used to obtain a database connection from a pool for a first time.\n */\n protected databaseConnectionPromise: Promise<any>\n\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n\n constructor(driver: AuroraMysqlDriver, client: any) {\n super()\n this.driver = driver\n this.dataSource = driver.dataSource\n this.client = client\n this.broadcaster = new Broadcaster(this)\n }\n\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n\n /**\n * Creates/uses database connection from the connection pool to perform further operations.\n * Returns obtained database connection.\n */\n async connect(): Promise<any> {\n return {}\n }\n\n /**\n * Releases used database connection.\n * You cannot use query runner methods once its released.\n */\n release(): Promise<void> {\n this.isReleased = true\n if (this.databaseConnection) this.databaseConnection.release()\n return Promise.resolve()\n }\n\n /**\n * Starts transaction on the current connection.\n *\n * @param isolationLevel\n */\n async startTransaction(isolationLevel?: IsolationLevel): Promise<void> {\n isolationLevel ??= this.dataSource.options.isolationLevel\n\n validateIsolationLevel(\n this.driver.supportedIsolationLevels,\n isolationLevel,\n )\n\n this.isTransactionActive = true\n try {\n await this.broadcaster.broadcast(\"BeforeTransactionStart\")\n } catch (err) {\n this.isTransactionActive = false\n throw err\n }\n\n if (this.transactionDepth === 0) {\n try {\n await this.client.startTransaction()\n } catch (err) {\n this.isTransactionActive = false\n throw err\n }\n } else {\n await this.query(`SAVEPOINT typeorm_${this.transactionDepth}`)\n }\n this.transactionDepth += 1\n\n await this.broadcaster.broadcast(\"AfterTransactionStart\")\n }\n\n /**\n * Commits transaction.\n * Error will be thrown if transaction was not started.\n */\n async commitTransaction(): Promise<void> {\n if (!this.isTransactionActive) throw new TransactionNotStartedError()\n\n await this.broadcaster.broadcast(\"BeforeTransactionCommit\")\n\n if (this.transactionDepth > 1) {\n await this.query(\n `RELEASE SAVEPOINT typeorm_${this.transactionDepth - 1}`,\n )\n } else {\n await this.client.commitTransaction()\n this.isTransactionActive = false\n }\n this.transactionDepth -= 1\n\n await this.broadcaster.broadcast(\"AfterTransactionCommit\")\n }\n\n /**\n * Rollbacks transaction.\n * Error will be thrown if transaction was not started.\n */\n async rollbackTransaction(): Promise<void> {\n if (!this.isTransactionActive) throw new TransactionNotStartedError()\n\n await this.broadcaster.broadcast(\"BeforeTransactionRollback\")\n\n if (this.transactionDepth > 1) {\n await this.query(\n `ROLLBACK TO SAVEPOINT typeorm_${this.transactionDepth - 1}`,\n )\n } else {\n await this.client.rollbackTransaction()\n this.isTransactionActive = false\n }\n this.transactionDepth -= 1\n\n await this.broadcaster.broadcast(\"AfterTransactionRollback\")\n }\n\n /**\n * Executes a raw SQL query.\n *\n * @param query\n * @param parameters\n * @param useStructuredResult\n */\n async query(\n query: string,\n parameters?: any[] | ObjectLiteral,\n useStructuredResult = false,\n ): Promise<any> {\n if (this.isReleased) throw new QueryRunnerAlreadyReleasedError()\n if (parameters && !Array.isArray(parameters))\n throw new NamedPlaceholdersNotSupportedError()\n\n const raw = await this.client.query(query, parameters)\n\n const result = new QueryResult()\n\n result.raw = raw\n\n if (raw?.hasOwnProperty(\"records\") && Array.isArray(raw.records)) {\n result.records = raw.records\n }\n\n if (raw?.hasOwnProperty(\"numberOfRecordsUpdated\")) {\n result.affected = raw.numberOfRecordsUpdated\n }\n\n if (!useStructuredResult) {\n return result.raw\n }\n\n return result\n }\n\n /**\n * Returns raw data stream.\n *\n * @param query\n * @param parameters\n * @param onEnd\n * @param onError\n */\n stream(\n query: string,\n parameters?: any[],\n onEnd?: Function,\n onError?: Function,\n ): Promise<ReadStream> {\n if (this.isReleased) throw new QueryRunnerAlreadyReleasedError()\n\n return new Promise(async (ok, fail) => {\n try {\n const databaseConnection = await this.connect()\n const stream = databaseConnection.query(query, parameters)\n if (onEnd) stream.on(\"end\", onEnd)\n if (onError) stream.on(\"error\", onError)\n ok(stream)\n } catch (err) {\n fail(err)\n }\n })\n }\n\n /**\n * Returns all available database names including system databases.\n */\n async getDatabases(): Promise<string[]> {\n return Promise.resolve([])\n }\n\n /**\n * Returns all available schema names including system schemas.\n * If database parameter specified, returns schemas of that database.\n *\n * @param database\n */\n async getSchemas(database?: string): Promise<string[]> {\n throw new TypeORMError(`MySql driver does not support table schemas`)\n }\n\n /**\n * Checks if database with the given name exist.\n *\n * @param database\n */\n async hasDatabase(database: string): Promise<boolean> {\n const result = await this.query(\n `SELECT * FROM \\`INFORMATION_SCHEMA\\`.\\`SCHEMATA\\` WHERE \\`SCHEMA_NAME\\` = ?`,\n [database],\n )\n return result.length ? true : false\n }\n\n /**\n * Loads currently using database\n */\n async getCurrentDatabase(): Promise<string> {\n const query = await this.query(`SELECT DATABASE() AS \\`db_name\\``)\n return query[0][\"db_name\"]\n }\n\n /**\n * Checks if schema with the given name exist.\n *\n * @param schema\n */\n async hasSchema(schema: string): Promise<boolean> {\n throw new TypeORMError(`MySql driver does not support table schemas`)\n }\n\n /**\n * Loads currently using database schema\n */\n async getCurrentSchema(): Promise<string> {\n const query = await this.query(`SELECT SCHEMA() AS \\`schema_name\\``)\n return query[0][\"schema_name\"]\n }\n\n /**\n * Checks if table with the given name exist in the database.\n *\n * @param tableOrName\n */\n async hasTable(tableOrName: Table | string): Promise<boolean> {\n const parsedTableName = this.driver.parseTableName(tableOrName)\n const sql = `SELECT * FROM \\`INFORMATION_SCHEMA\\`.\\`COLUMNS\\` WHERE \\`TABLE_SCHEMA\\` = ? AND \\`TABLE_NAME\\` = ?`\n const result = await this.query(sql, [\n parsedTableName.database,\n parsedTableName.tableName,\n ])\n return result.length ? true : false\n }\n\n /**\n * Checks if column with the given name exist in the given table.\n *\n * @param tableOrName\n * @param column\n */\n async hasColumn(\n tableOrName: Table | string,\n column: TableColumn | string,\n ): Promise<boolean> {\n const parsedTableName = this.driver.parseTableName(tableOrName)\n const columnName = InstanceChecker.isTableColumn(column)\n ? column.name\n : column\n const sql = `SELECT * FROM \\`INFORMATION_SCHEMA\\`.\\`COLUMNS\\` WHERE \\`TABLE_SCHEMA\\` = ? AND \\`TABLE_NAME\\` = ? AND \\`COLUMN_NAME\\` = ?`\n const result = await this.query(sql, [\n parsedTableName.database,\n parsedTableName.tableName,\n columnName,\n ])\n return result.length ? true : false\n }\n\n /**\n * Creates a new database.\n *\n * @param database\n * @param ifNotExists\n */\n async createDatabase(\n database: string,\n ifNotExists?: boolean,\n ): Promise<void> {\n const up = ifNotExists\n ? `CREATE DATABASE IF NOT EXISTS ${this.driver.escape(database)}`\n : `CREATE DATABASE ${this.driver.escape(database)}`\n const down = `DROP DATABASE ${this.driver.escape(database)}`\n await this.executeQueries(new Query(up), new Query(down))\n }\n\n /**\n * Drops database.\n *\n * @param database\n * @param ifExists\n */\n async dropDatabase(database: string, ifExists?: boolean): Promise<void> {\n const up = ifExists\n ? `DROP DATABASE IF EXISTS ${this.driver.escape(database)}`\n : `DROP DATABASE ${this.driver.escape(database)}`\n const down = `CREATE DATABASE ${this.driver.escape(database)}`\n await this.executeQueries(new Query(up), new Query(down))\n }\n\n /**\n * Creates a new table schema.\n *\n * @param schemaPath\n * @param ifNotExists\n */\n async createSchema(\n schemaPath: string,\n ifNotExists?: boolean,\n ): Promise<void> {\n throw new TypeORMError(\n `Schema create queries are not supported by MySql driver.`,\n )\n }\n\n /**\n * Drops table schema.\n *\n * @param schemaPath\n * @param ifExists\n */\n async dropSchema(schemaPath: string, ifExists?: boolean): Promise<void> {\n throw new TypeORMError(\n `Schema drop queries are not supported by MySql driver.`,\n )\n }\n\n /**\n * Creates a new table.\n *\n * @param table\n * @param ifNotExists\n * @param createForeignKeys\n */\n async createTable(\n table: Table,\n ifNotExists: boolean = false,\n createForeignKeys: boolean = true,\n ): Promise<void> {\n if (ifNotExists) {\n const isTableExist = await this.hasTable(table)\n if (isTableExist) return Promise.resolve()\n }\n const upQueries: Query[] = []\n const downQueries: Query[] = []\n\n upQueries.push(this.createTableSql(table, createForeignKeys))\n downQueries.push(this.dropTableSql(table))\n\n // we must first drop indices, than drop foreign keys, because drop queries runs in reversed order\n // and foreign keys will be dropped first as indices. This order is very important, because we can't drop index\n // if it related to the foreign key.\n\n // createTable does not need separate method to create indices, because it create indices in the same query with table creation.\n table.indices.forEach((index) =>\n downQueries.push(this.dropIndexSql(table, index)),\n )\n\n // if createForeignKeys is true, we must drop created foreign keys in down query.\n // createTable does not need separate method to create foreign keys, because it create fk's in the same query with table creation.\n if (createForeignKeys)\n table.foreignKeys.forEach((foreignKey) =>\n downQueries.push(this.dropForeignKeySql(table, foreignKey)),\n )\n\n return this.executeQueries(upQueries, downQueries)\n }\n\n /**\n * Drop the table.\n *\n * @param target\n * @param ifExists\n * @param dropForeignKeys\n */\n async dropTable(\n target: Table | string,\n ifExists?: boolean,\n dropForeignKeys: boolean = true,\n ): Promise<void> {\n // It needs because if table does not exist and dropForeignKeys or dropIndices is true, we don't need\n // to perform drop queries for foreign keys and indices.\n if (ifExists) {\n const isTableExist = await this.hasTable(target)\n if (!isTableExist) return Promise.resolve()\n }\n\n // if dropTable called with dropForeignKeys = true, we must create foreign keys in down query.\n const createForeignKeys: boolean = dropForeignKeys\n const tablePath = this.getTablePath(target)\n const table = await this.getCachedTable(tablePath)\n const upQueries: Query[] = []\n const downQueries: Query[] = []\n\n if (dropForeignKeys)\n table.foreignKeys.forEach((foreignKey) =>\n upQueries.push(this.dropForeignKeySql(table, foreignKey)),\n )\n\n table.indices.forEach((index) =>\n upQueries.push(this.dropIndexSql(table, index)),\n )\n\n upQueries.push(this.dropTableSql(table))\n downQueries.push(this.createTableSql(table, createForeignKeys))\n\n await this.executeQueries(upQueries, downQueries)\n }\n\n /**\n * Creates a new view.\n *\n * @param view\n * @param syncWithMetadata\n */\n async createView(\n view: View,\n syncWithMetadata: boolean = false,\n ): Promise<void> {\n const upQueries: Query[] = []\n const downQueries: Query[] = []\n upQueries.push(this.createViewSql(view))\n if (syncWithMetadata)\n upQueries.push(await this.insertViewDefinitionSql(view))\n downQueries.push(this.dropViewSql(view))\n if (syncWithMetadata)\n downQueries.push(await this.deleteViewDefinitionSql(view))\n await this.executeQueries(upQueries, downQueries)\n }\n\n /**\n * Drops the view.\n *\n * @param target\n * @param ifExists\n */\n async dropView(target: View | string, ifExists?: boolean): Promise<void> {\n const viewName = InstanceChecker.isView(target) ? target.name : target\n const view = await this.getCachedView(viewName)\n\n await this.executeQueries(\n [\n await this.deleteViewDefinitionSql(view),\n this.dropViewSql(view, ifExists),\n ],\n [\n await this.insertViewDefinitionSql(view),\n this.createViewSql(view),\n ],\n )\n }\n\n /**\n * Renames a table.\n *\n * @param oldTableOrName\n * @param newTableName\n */\n async renameTable(\n oldTableOrName: Table | string,\n newTableName: string,\n ): Promise<void> {\n const upQueries: Query[] = []\n const downQueries: Query[] = []\n const oldTable = InstanceChecker.isTable(oldTableOrName)\n ? oldTableOrName\n : await this.getCachedTable(oldTableOrName)\n const newTable = oldTable.clone()\n\n const { database } = this.driver.parseTableName(oldTable)\n newTable.name = database ? `${database}.${newTableName}` : newTableName\n\n // rename table\n upQueries.push(\n new Query(\n `RENAME TABLE ${this.escapePath(oldTable)} TO ${this.escapePath(\n newTable,\n )}`,\n ),\n )\n downQueries.push(\n new Query(\n `RENAME TABLE ${this.escapePath(newTable)} TO ${this.escapePath(\n oldTable,\n )}`,\n ),\n )\n\n // rename index constraints\n newTable.indices.forEach((index) => {\n // build new constraint name\n const columnNames = index.columnNames\n .map((column) => `\\`${column}\\``)\n .join(\", \")\n const newIndexName = this.dataSource.namingStrategy.indexName(\n newTable,\n index.columnNames,\n index.where,\n )\n\n // build queries\n let indexType = \"\"\n if (index.isUnique) indexType += \"UNIQUE \"\n if (index.isSpatial) indexType += \"SPATIAL \"\n if (index.isFulltext) indexType += \"FULLTEXT \"\n upQueries.push(\n new Query(\n `ALTER TABLE ${this.escapePath(newTable)} DROP INDEX \\`${\n index.name\n }\\`, ADD ${indexType}INDEX \\`${newIndexName}\\` (${columnNames})`,\n ),\n )\n downQueries.push(\n new Query(\n `ALTER TABLE ${this.escapePath(\n newTable,\n )} DROP INDEX \\`${newIndexName}\\`, ADD ${indexType}INDEX \\`${\n index.name\n }\\` (${columnNames})`,\n ),\n )\n\n // replace constraint name\n index.name = newIndexName\n })\n\n // rename foreign key constraint\n newTable.foreignKeys.forEach((foreignKey) => {\n // build new constraint name\n const columnNames = foreignKey.columnNames\n .map((column) => `\\`${column}\\``)\n .join(\", \")\n const referencedColumnNames = foreignKey.referencedColumnNames\n .map((column) => `\\`${column}\\``)\n .join(\",\")\n const newForeignKeyName =\n this.dataSource.namingStrategy.foreignKeyName(\n newTable,\n foreignKey.columnNames,\n )\n\n // build queries\n let up =\n `ALTER TABLE ${this.escapePath(newTable)} DROP FOREIGN KEY \\`${\n foreignKey.name\n }\\`, ADD CONSTRAINT \\`${newForeignKeyName}\\` FOREIGN KEY (${columnNames}) ` +\n `REFERENCES ${this.escapePath(\n this.getTablePath(foreignKey),\n )}(${referencedColumnNames})`\n if (foreignKey.onDelete) up += ` ON DELETE ${foreignKey.onDelete}`\n if (foreignKey.onUpdate) up += ` ON UPDATE ${foreignKey.onUpdate}`\n\n let down =\n `ALTER TABLE ${this.escapePath(\n newTable,\n )} DROP FOREIGN KEY \\`${newForeignKeyName}\\`, ADD CONSTRAINT \\`${\n foreignKey.name\n }\\` FOREIGN KEY (${columnNames}) ` +\n `REFERENCES ${this.escapePath(\n this.getTablePath(foreignKey),\n )}(${referencedColumnNames})`\n if (foreignKey.onDelete) down += ` ON DELETE ${foreignKey.onDelete}`\n if (foreignKey.onUpdate) down += ` ON UPDATE ${foreignKey.onUpdate}`\n\n upQueries.push(new Query(up))\n downQueries.push(new Query(down))\n\n // replace constraint name\n foreignKey.name = newForeignKeyName\n })\n\n await this.executeQueries(upQueries, downQueries)\n\n // rename old table and replace it in cached tabled;\n oldTable.name = newTable.name\n this.replaceCachedTable(oldTable, newTable)\n }\n\n /**\n * Creates a new column from the column in the table.\n *\n * @param tableOrName\n * @param column\n */\n async addColumn(\n tableOrName: Table | string,\n column: TableColumn,\n ): Promise<void> {\n const table = InstanceChecker.isTable(tableOrName)\n ? tableOrName\n : await this.getCachedTable(tableOrName)\n const clonedTable = table.clone()\n const upQueries: Query[] = []\n const downQueries: Query[] = []\n const skipColumnLevelPrimary = clonedTable.primaryColumns.length > 0\n\n upQueries.push(\n new Query(\n `ALTER TABLE ${this.escapePath(\n table,\n )} ADD ${this.buildCreateColumnSql(\n column,\n skipColumnLevelPrimary,\n false,\n )}`,\n ),\n )\n downQueries.push(\n new Query(\n `ALTER TABLE ${this.escapePath(table)} DROP COLUMN \\`${\n column.name\n }\\``,\n ),\n )\n\n // create or update primary key constraint\n if (column.isPrimary && skipColumnLevelPrimary) {\n // if we already have generated column, we must temporary drop AUTO_INCREMENT property.\n const generatedColumn = clonedTable.columns.find(\n (column) =>\n column.isGenerated &&\n column.generationStrategy === \"increment\",\n )\n if (generatedColumn) {\n const nonGeneratedColumn = generatedColumn.clone()\n nonGeneratedColumn.isGenerated = false\n nonGeneratedColumn.generationStrategy = undefined\n upQueries.push(\n new Query(\n `ALTER TABLE ${this.escapePath(table)} CHANGE \\`${\n column.name\n }\\` ${this.buildCreateColumnSql(\n nonGeneratedColumn,\n true,\n )}`,\n ),\n )\n downQueries.push(\n new Query(\n `ALTER TABLE ${this.escapePath(table)} CHANGE \\`${\n nonGeneratedColumn.name\n }\\` ${this.buildCreateColumnSql(column, true)}`,\n ),\n )\n }\n\n const primaryColumns = clonedTable.primaryColumns\n let columnNames = primaryColumns\n .map((column) => `\\`${column.name}\\``)\n .join(\", \")\n upQueries.push(\n new Query(\n `ALTER TABLE ${this.escapePath(table)} DROP PRIMARY KEY`,\n ),\n )\n downQueries.push(\n new Query(\n `ALTER TABLE ${this.escapePath(\n table,\n )} ADD PRIMARY KEY (${columnNames})`,\n ),\n )\n\n primaryColumns.push(column)\n columnNames = primaryColumns\n .map((column) => `\\`${column.name}\\``)\n .join(\", \")\n upQueries.push(\n new Query(\n `ALTER TABLE ${this.escapePath(\n table,\n )} ADD PRIMARY KEY (${columnNames})`,\n ),\n )\n downQueries.push(\n new Query(\n `ALTER TABLE ${this.escapePath(table)} DROP PRIMARY KEY`,\n ),\n )\n\n // if we previously dropped AUTO_INCREMENT property, we must bring it back\n if (generatedColumn) {\n const nonGeneratedColumn = generatedColumn.clone()\n nonGeneratedColumn.isGenerated = false\n nonGeneratedColumn.generationStrategy = undefined\n upQueries.push(\n new Query(\n `ALTER TABLE ${this.escapePath(table)} CHANGE \\`${\n nonGeneratedColumn.name\n }\\` ${this.buildCreateColumnSql(column, true)}`,\n ),\n )\n downQueries.push(\n new Query(\n `ALTER TABLE ${this.escapePath(table)} CHANGE \\`${\n column.name\n }\\` ${this.buildCreateColumnSql(\n nonGeneratedColumn,\n true,\n )}`,\n ),\n )\n }\n }\n\n // create column index\n const columnIndex = clonedTable.indices.find(\n (index) =>\n index.columnNames.length === 1 &&\n index.columnNames[0] === column.name,\n )\n if (columnIndex) {\n upQueries.push(this.createIndexSql(table, columnIndex))\n downQueries.push(this.dropIndexSql(table, columnIndex))\n } else if (column.isUnique) {\n const uniqueIndex = new TableIndex({\n name: this.dataSource.namingStrategy.indexName(table, [\n column.name,\n ]),\n columnNames: [column.name],\n isUnique: true,\n })\n clonedTable.indices.push(uniqueIndex)\n clonedTable.uniques.push(\n new TableUnique({\n name: uniqueIndex.name,\n columnNames: uniqueIndex.columnNames,\n }),\n )\n upQueries.push(\n new Query(\n `ALTER TABLE ${this.escapePath(table)} ADD UNIQUE INDEX \\`${\n uniqueIndex.name\n }\\` (\\`${column.name}\\`)`,\n ),\n )\n downQueries.push(\n new Query(\n `ALTER TABLE ${this.escapePath(table)} DROP INDEX \\`${\n uniqueIndex.name\n }\\``,\n ),\n )\n }\n\n await this.executeQueries(upQueries, downQueries)\n\n clonedTable.addColumn(column)\n this.replaceCachedTable(table, clonedTable)\n }\n\n /**\n * Creates a new columns from the column in the table.\n *\n * @param tableOrName\n * @param columns\n */\n async addColumns(\n tableOrName: Table | string,\n columns: TableColumn[],\n ): Promise<void> {\n for (const column of columns) {\n await this.addColumn(tableOrName, column)\n }\n }\n\n /**\n * Renames column in the given table.\n *\n * @param tableOrName\n * @param oldTableColumnOrName\n * @param newTableColumnOrName\n */\n async renameColumn(\n tableOrName: Table | string,\n oldTableColumnOrName: TableColumn | string,\n newTableColumnOrName: TableColumn | string,\n ): Promise<void> {\n const table = InstanceChecker.isTable(tableOrName)\n ? tableOrName\n : await this.getCachedTable(tableOrName)\n const oldColumn = InstanceChecker.isTableColumn(oldTableColumnOrName)\n ? oldTableColumnOrName\n : table.columns.find((c) => c.name === oldTableColumnOrName)\n if (!oldColumn)\n throw new TypeORMError(\n `Column \"${oldTableColumnOrName}\" was not found in the \"${table.name}\" table.`,\n )\n\n let newColumn: TableColumn\n if (InstanceChecker.isTableColumn(newTableColumnOrName)) {\n newColumn = newTableColumnOrName\n } else {\n newColumn = oldColumn.clone()\n newColumn.name = newTableColumnOrName\n }\n\n await this.changeColumn(table, oldColumn, newColumn)\n }\n\n /**\n * Changes a column in the table.\n *\n * @param tableOrName\n * @param oldColumnOrName\n * @param newColumn\n */\n async changeColumn(\n tableOrName: Table | string,\n oldColumnOrName: TableColumn | string,\n newColumn: TableColumn,\n ): Promise<void> {\n const table = InstanceChecker.isTable(tableOrName)\n ? tableOrName\n : await this.getCachedTable(tableOrName)\n let clonedTable = table.clone()\n const upQueries: Query[] = []\n const downQueries: Query[] = []\n\n const oldColumn = InstanceChecker.isTableColumn(oldColumnOrName)\n ? oldColumnOrName\n : table.columns.find((column) => column.name === oldColumnOrName)\n if (!oldColumn)\n throw new TypeORMError(\n `Column \"${oldColumnOrName}\" was not found in the \"${table.name}\" table.`,\n )\n\n if (\n (newColumn.isGenerated !== oldColumn.isGenerated &&\n newColumn.generationStrategy !== \"uuid\") ||\n oldColumn.type !== newColumn.type ||\n oldColumn.length !== newColumn.length ||\n oldColumn.generatedType !== newColumn.generatedType\n ) {\n await this.dropColumn(table, oldColumn)\n await this.addColumn(table, newColumn)\n\n // update cloned table\n clonedTable = table.clone()\n } else {\n if (newColumn.name !== oldColumn.name) {\n // We don't change any column properties, just rename it.\n upQueries.push(\n new Query(\n `ALTER TABLE ${this.escapePath(table)} CHANGE \\`${\n oldColumn.name\n }\\` \\`${newColumn.name}\\` ${this.buildCreateColumnSql(\n oldColumn,\n true,\n true,\n )}`,\n ),\n )\n downQueries.push(\n new Query(\n `ALTER TABLE ${this.escapePath(table)} CHANGE \\`${\n newColumn.name\n }\\` \\`${oldColumn.name}\\` ${this.buildCreateColumnSql(\n oldColumn,\n true,\n true,\n )}`,\n ),\n )\n\n // rename index constraints\n clonedTable.findColumnIndices(oldColumn).forEach((index) => {\n // build new constraint name\n index.columnNames.splice(\n index.columnNames.indexOf(oldColumn.name),\n 1,\n )\n index.columnNames.push(newColumn.name)\n const columnNames = index.columnNames\n .map((column) => `\\`${column}\\``)\n .join(\", \")\n const newIndexName =\n this.dataSource.namingStrategy.indexName(\n clonedTable,\n index.columnNames,\n index.where,\n )\n\n // build queries\n let indexType = \"\"\n if (index.isUnique) indexType += \"UNIQUE \"\n if (index.isSpatial) indexType += \"SPATIAL \"\n if (index.isFulltext) indexType += \"FULLTEXT \"\n upQueries.push(\n new Query(\n `ALTER TABLE ${this.escapePath(\n table,\n )} DROP INDEX \\`${\n index.name\n }\\`, ADD ${indexType}INDEX \\`${newIndexName}\\` (${columnNames})`,\n ),\n )\n downQueries.push(\n new Query(\n `ALTER TABLE ${this.escapePath(\n table,\n )} DROP INDEX \\`${newIndexName}\\`, ADD ${indexType}INDEX \\`${\n index.name\n }\\` (${columnNames})`,\n ),\n )\n\n // replace constraint name\n index.name = newIndexName\n })\n\n // rename foreign key constraints\n clonedTable\n .findColumnForeignKeys(oldColumn)\n .forEach((foreignKey) => {\n // build new constraint name\n foreignKey.columnNames.splice(\n foreignKey.columnNames.indexOf(oldColumn.name),\n 1,\n )\n foreignKey.columnNames.push(newColumn.name)\n const columnNames = foreignKey.columnNames\n .map((column) => `\\`${column}\\``)\n .join(\", \")\n const referencedColumnNames =\n foreignKey.referencedColumnNames\n .map((column) => `\\`${column}\\``)\n .join(\",\")\n const newForeignKeyName =\n this.dataSource.namingStrategy.foreignKeyName(\n clonedTable,\n foreignKey.columnNames,\n )\n\n // build queries\n let up =\n `ALTER TABLE ${this.escapePath(\n table,\n )} DROP FOREIGN KEY \\`${\n foreignKey.name\n }\\`, ADD CONSTRAINT \\`${newForeignKeyName}\\` FOREIGN KEY (${columnNames}) ` +\n `REFERENCES ${this.escapePath(\n this.getTablePath(foreignKey),\n )}(${referencedColumnNames})`\n if (foreignKey.onDelete)\n up += ` ON DELETE ${foreignKey.onDelete}`\n if (foreignKey.onUpdate)\n up += ` ON UPDATE ${foreignKey.onUpdate}`\n\n let down =\n `ALTER TABLE ${this.escapePath(\n table,\n )} DROP FOREIGN KEY \\`${newForeignKeyName}\\`, ADD CONSTRAINT \\`${\n foreignKey.name\n }\\` FOREIGN KEY (${columnNames}) ` +\n `REFERENCES ${this.escapePath(\n this.getTablePath(foreignKey),\n )}(${referencedColumnNames})`\n if (foreignKey.onDelete)\n down += ` ON DELETE ${foreignKey.onDelete}`\n if (foreignKey.onUpdate)\n down += ` ON UPDATE ${foreignKey.onUpdate}`\n\n upQueries.push(new Query(up))\n downQueries.push(new Query(down))\n\n // replace constraint name\n foreignKey.name = newForeignKeyName\n })\n\n // rename old column in the Table object\n const oldTableColumn = clonedTable.columns.find(\n (column) => column.name === oldColumn.name,\n )\n clonedTable.columns[\n clonedTable.columns.indexOf(oldTableColumn!)\n ].name = newColumn.name\n oldColumn.name = newColumn.name\n }\n\n if (this.isColumnChanged(oldColumn, newColumn, true)) {\n upQueries.push(\n new Query(\n `ALTER TABLE ${this.escapePath(table)} CHANGE \\`${\n oldColumn.name\n }\\` ${this.buildCreateColumnSql(newColumn, true)}`,\n ),\n )\n downQueries.push(\n new Query(\n `ALTER TABLE ${this.escapePath(table)} CHANGE \\`${\n newColumn.name\n }\\` ${this.buildCreateColumnSql(oldColumn, true)}`,\n ),\n )\n }\n\n if (newColumn.isPrimary !== oldColumn.isPrimary) {\n // if table have generated column, we must drop AUTO_INCREMENT before changing primary constraints.\n const generatedColumn = clonedTable.columns.find(\n (column) =>\n column.isGenerated &&\n column.generationStrategy === \"increment\",\n )\n if (generatedColumn) {\n const nonGeneratedColumn = generatedColumn.clone()\n nonGeneratedColumn.isGenerated = false\n nonGeneratedColumn.generationStrategy = undefined\n\n upQueries.push(\n new Query(\n `ALTER TABLE ${this.escapePath(table)} CHANGE \\`${\n generatedColumn.name\n }\\` ${this.buildCreateColumnSql(\n nonGeneratedColumn,\n true,\n )}`,\n ),\n )\n downQueries.push(\n new Query(\n `ALTER TABLE ${this.escapePath(table)} CHANGE \\`${\n nonGeneratedColumn.name\n }\\` ${this.buildCreateColumnSql(\n generatedColumn,\n true,\n )}`,\n ),\n )\n }\n\n const primaryColumns = clonedTable.primaryColumns\n\n // if primary column state changed, we must always drop existed constraint.\n if (primaryColumns.length > 0) {\n const columnNames = primaryColumns\n .map((column) => `\\`${column.name}\\``)\n .join(\", \")\n upQueries.push(\n new Query(\n `ALTER TABLE ${this.escapePath(\n table,\n )} DROP PRIMARY KEY`,\n ),\n )\n downQueries.push(\n new Query(\n `ALTER TABLE ${this.escapePath(\n table,\n )} ADD PRIMARY KEY (${columnNames})`,\n ),\n )\n }\n\n if (newColumn.isPrimary === true) {\n primaryColumns.push(newColumn)\n // update column in table\n const column = clonedTable.columns.find(\n (column) => column.name === newColumn.name,\n )\n column!.isPrimary = true\n const columnNames = primaryColumns\n .map((column) => `\\`${column.name}\\``)\n .join(\", \")\n upQueries.push(\n new Query(\n `ALTER TABLE ${this.escapePath(\n table,\n )} ADD PRIMARY KEY (${columnNames})`,\n ),\n )\n downQueries.push(\n new Query(\n `ALTER TABLE ${this.escapePath(\n table,\n )} DROP PRIMARY KEY`,\n ),\n )\n } else {\n const primaryColumn = primaryColumns.find(\n (c) => c.name === newColumn.name,\n )\n primaryColumns.splice(\n primaryColumns.indexOf(primaryColumn!),\n 1,\n )\n // update column in table\n const column = clonedTable.columns.find(\n (column) => column.name === newColumn.name,\n )\n column!.isPrimary = false\n\n // if we have another primary keys, we must recreate constraint.\n if (primaryColumns.length > 0) {\n const columnNames = primaryColumns\n .map((column) => `\\`${column.name}\\``)\n .join(\", \")\n upQueries.push(\n new Query(\n `ALTER TABLE ${this.escapePath(\n table,\n )} ADD PRIMARY KEY (${columnNames})`,\n ),\n )\n downQueries.push(\n new Query(\n `ALTER TABLE ${this.escapePath(\n table,\n )} DROP PRIMARY KEY`,\n ),\n )\n }\n }\n\n // if we have generated column, and we dropped AUTO_INCREMENT property before, we must bring it back\n if (generatedColumn) {\n const nonGeneratedColumn = generatedColumn.clone()\n nonGeneratedColumn.isGenerated = false\n nonGeneratedColumn.generationStrategy = undefined\n\n upQueries.push(\n new Query(\n `ALTER TABLE ${this.escapePath(table)} CHANGE \\`${\n nonGeneratedColumn.name\n }\\` ${this.buildCreateColumnSql(\n generatedColumn,\n true,\n )}`,\n ),\n )\n downQueries.push(\n new Query(\n `ALTER TABLE ${this.escapePath(table)} CHANGE \\`${\n generatedColumn.name\n }\\` ${this.buildCreateColumnSql(\n nonGeneratedColumn,\n true,\n )}`,\n ),\n )\n }\n }\n\n if (newColumn.isUnique !== oldColumn.isUnique) {\n if (newColumn.isUnique === true) {\n const uniqueIndex = new TableIndex({\n name: this.dataSource.namingStrategy.indexName(table, [\n newColumn.name,\n ]),\n columnNames: [newColumn.name],\n isUnique: true,\n })\n clonedTable.indices.push(uniqueIndex)\n clonedTable.uniques.push(\n new TableUnique({\n name: uniqueIndex.name,\n columnNames: uniqueIndex.columnNames,\n }),\n )\n upQueries.push(\n new Query(\n `ALTER TABLE ${this.escapePath(\n table,\n )} ADD UNIQUE INDEX \\`${uniqueIndex.name}\\` (\\`${\n newColumn.name\n }\\`)`,\n ),\n )\n downQueries.push(\n new Query(\n `ALTER TABLE ${this.escapePath(\n table,\n )} DROP INDEX \\`${uniqueIndex.name}\\``,\n ),\n )\n } else {\n const uniqueIndex = clonedTable.indices.find((index) => {\n return (\n index.columnNames.length === 1 &&\n index.isUnique === true &&\n !!index.columnNames.find(\n (columnName) => columnName === newColumn.name,\n )\n )\n })\n clonedTable.indices.splice(\n clonedTable.indices.indexOf(uniqueIndex!),\n 1,\n )\n\n const tableUnique = clonedTable.uniques.find(\n (unique) => unique.name === uniqueIndex!.name,\n )\n clonedTable.uniques.splice(\n clonedTable.uniques.indexOf(tableUnique!),\n 1,\n )\n\n upQueries.push(\n new Query(\n `ALTER TABLE ${this.escapePath(\n table,\n )} DROP INDEX \\`${uniqueIndex!.name}\\``,\n ),\n )\n downQueries.push(\n new Query(\n `ALTER TABLE ${this.escapePath(\n table,\n )} ADD UNIQUE INDEX \\`${uniqueIndex!.name}\\` (\\`${\n newColumn.name\n }\\`)`,\n ),\n )\n }\n }\n }\n\n await this.executeQueries(upQueries, downQueries)\n this.replaceCachedTable(table, clonedTable)\n }\n\n /**\n * Changes a column in the table.\n *\n * @param tableOrName\n * @param changedColumns\n */\n async changeColumns(\n tableOrName: Table | string,\n changedColumns: { newColumn: TableColumn; oldColumn: TableColumn }[],\n ): Promise<void> {\n for (const { oldColumn, newColumn } of changedColumns) {\n await this.changeColumn(tableOrName, oldColumn, newColumn)\n }\n }\n\n /**\n * Drops column in the table.\n *\n * @param tableOrName\n * @param columnOrName\n * @param ifExists\n */\n async dropColumn(\n tableOrName: Table | string,\n columnOrName: TableColumn | string,\n ifExists?: boolean,\n ): Promise<void> {\n const table = InstanceChecker.isTable(tableOrName)\n ? tableOrName\n : await this.getCachedTable(tableOrName)\n const column = InstanceChecker.isTableColumn(columnOrName)\n ? columnOrName\n : table.findColumnByName(columnOrName)\n if (!column) {\n if (ifExists) return\n throw new TypeORMError(\n `Column \"${columnOrName}\" was not found in table \"${table.name}\"`,\n )\n }\n\n const clonedTable = table.clone()\n const upQueries: Query[] = []\n const downQueries: Query[] = []\n\n // drop primary key constraint\n if (column.isPrimary) {\n // if table have generated column, we must drop AUTO_INCREMENT before changing primary constraints.\n const generatedColumn = clonedTable.columns.find(\n (column) =>\n column.isGenerated &&\n column.generationStrategy === \"increment\",\n )\n if (generatedColumn) {\n const nonGeneratedColumn = generatedColumn.clone()\n nonGeneratedColumn.isGenerated = false\n nonGeneratedColumn.generationStrategy = undefined\n\n upQueries.push(\n new Query(\n `ALTER TABLE ${this.escapePath(table)} CHANGE \\`${\n generatedColumn.name\n }\\` ${this.buildCreateColumnSql(\n nonGeneratedColumn,\n true,\n )}`,\n ),\n )\n downQueries.push(\n new Query(\n `ALTER TABLE ${this.escapePath(table)} CHANGE \\`${\n nonGeneratedColumn.name\n }\\` ${this.buildCreateColumnSql(\n generatedColumn,\n true,\n )}`,\n ),\n )\n }\n\n // dropping primary key constraint\n const columnNames = clonedTable.primaryColumns\n .map((primaryColumn) => `\\`${primaryColumn.name}\\``)\n .join(\", \")\n upQueries.push(\n new Query(\n `ALTER TABLE ${this.escapePath(\n clonedTable,\n )} DROP PRIMARY KEY`,\n ),\n )\n downQueries.push(\n new Query(\n `ALTER TABLE ${this.escapePath(\n clonedTable,\n )} ADD PRIMARY KEY (${columnNames})`,\n ),\n )\n\n // update column in table\n const tableColumn = clonedTable.findColumnByName(column.name)\n tableColumn!.isPrimary = false\n\n // if primary key have multiple columns, we must recreate it without dropped column\n if (clonedTable.primaryColumns.length > 0) {\n const columnNames = clonedTable.primaryColumns\n .map((primaryColumn) => `\\`${primaryColumn.name}\\``)\n .join(\", \")\n upQueries.push(\n new Query(\n `ALTER TABLE ${this.escapePath(\n clonedTable,\n )} ADD PRIMARY KEY (${columnNames})`,\n ),\n )\n downQueries.push(\n new Query(\n `ALTER TABLE ${this.escapePath(\n clonedTable,\n )} DROP PRIMARY KEY`,\n ),\n )\n }\n\n // if we have generated column, and we dropped AUTO_INCREMENT property before, and this column is not current dropping column, we must bring it back\n if (generatedColumn && generatedColumn.name !== column.name) {\n const nonGeneratedColumn = generatedColumn.clone()\n nonGeneratedColumn.isGenerated = false\n nonGeneratedColumn.generationStrategy = undefined\n\n upQueries.push(\n new Query(\n `ALTER TABLE ${this.escapePath(table)} CHANGE \\`${\n nonGeneratedColumn.name\n }\\` ${this.buildCreateColumnSql(\n generatedColumn,\n true,\n )}`,\n ),\n )\n downQueries.push(\n new Query(\n `ALTER TABLE ${this.escapePath(table)} CHANGE \\`${\n generatedColumn.name\n }\\` ${this.buildCreateColumnSql(\n nonGeneratedColumn,\n true,\n )}`,\n ),\n )\n }\n }\n\n // drop column index\n const columnIndex = clonedTable.indices.find(\n (index) =>\n index.columnNames.length === 1 &&\n index.columnNames[0] === column.name,\n )\n if (columnIndex) {\n clonedTable.indices.splice(\n clonedTable.indices.indexOf(columnIndex),\n 1,\n )\n upQueries.push(this.dropIndexSql(table, columnIndex))\n downQueries.push(this.createIndexSql(table, columnIndex))\n } else if (column.isUnique) {\n // we splice constraints both from table uniques and indices.\n const uniqueName =\n this.dataSource.namingStrategy.uniqueConstraintName(table, [\n column.name,\n ])\n const foundUnique = clonedTable.uniques.find(\n (unique) => unique.name === uniqueName,\n )\n if (foundUnique)\n clonedTable.uniques.splice(\n clonedTable.uniques.indexOf(foundUnique),\n 1,\n )\n\n const indexName = this.dataSource.namingStrategy.indexName(table, [\n column.name,\n ])\n const foundIndex = clonedTable.indices.find(\n (index) => index.name === indexName,\n )\n if (foundIndex)\n clonedTable.indices.splice(\n clonedTable.indices.indexOf(foundIndex),\n 1,\n )\n\n upQueries.push(\n new Query(\n `ALTER TABLE ${this.escapePath(\n table,\n )} DROP INDEX \\`${indexName}\\``,\n ),\n )\n downQueries.push(\n new Query(\n `ALTER TABLE ${this.escapePath(\n table,\n )} ADD UNIQUE INDEX \\`${indexName}\\` (\\`${column.name}\\`)`,\n ),\n )\n }\n\n upQueries.push(\n new Query(\n `ALTER TABLE ${this.escapePath(table)} DROP COLUMN \\`${\n column.name\n }\\``,\n ),\n )\n downQueries.push(\n new Query(\n `ALTER TABLE ${this.escapePath(\n table,\n )} ADD ${this.buildCreateColumnSql(column, true)}`,\n ),\n )\n\n await this.executeQueries(upQueries, downQueries)\n\n clonedTable.removeColumn(column)\n this.replaceCachedTable(table, clonedTable)\n }\n\n /**\n * Drops the columns in the table.\n *\n * @param tableOrName\n * @param columns\n * @param ifExists\n */\n async dropColumns(\n tableOrName: Table | string,\n columns: TableColumn[] | string[],\n ifExists?: boolean,\n ): Promise<void> {\n for (const column of [...columns]) {\n await this.dropColumn(tableOrName, column, ifExists)\n }\n }\n\n /**\n * Creates a new primary key.\n *\n * @param tableOrName\n * @param columnNames\n */\n async createPrimaryKey(\n tableOrName: Table | string,\n columnNames: string[],\n ): Promise<void> {\n const table = InstanceChecker.isTable(tableOrName)\n ? tableOrName\n : await this.getCachedTable(tableOrName)\n const clonedTable = table.clone()\n\n const up = this.createPrimaryKeySql(table, columnNames)\n const down = this.dropPrimaryKeySql(table)\n\n await this.executeQueries(up, down)\n clonedTable.columns.forEach((column) => {\n if (columnNames.find((columnName) => columnName === column.name))\n column.isPrimary = true\n })\n this.replaceCachedTable(table, clonedTable)\n }\n\n /**\n * Updates composite primary keys.\n *\n * @param tableOrName\n * @param columns\n */\n async updatePrimaryKeys(\n tableOrName: Table | string,\n columns: TableColumn[],\n ): Promise<void> {\n const table = InstanceChecker.isTable(tableOrName)\n ? tableOrName\n : await this.getCachedTable(tableOrName)\n const clonedTable = table.clone()\n const columnNames = columns.map((column) => column.name)\n const upQueries: Query[] = []\n const downQueries: Query[] = []\n\n // if table have generated column, we must drop AUTO_INCREMENT before changing primary constraints.\n const generatedColumn = clonedTable.columns.find(\n (column) =>\n column.isGenerated && column.generationStrategy === \"increment\",\n )\n if (generatedColumn) {\n const nonGeneratedColumn = generatedColumn.clone()\n nonGeneratedColumn.isGenerated = false\n nonGeneratedColumn.generationStrategy = undefined\n\n upQueries.push(\n new Query(\n `ALTER TABLE ${this.escapePath(table)} CHANGE \\`${\n generatedColumn.name\n }\\` ${this.buildCreateColumnSql(nonGeneratedColumn, true)}`,\n ),\n )\n downQueries.push(\n new Query(\n `ALTER TABLE ${this.escapePath(table)} CHANGE \\`${\n nonGeneratedColumn.name\n }\\` ${this.buildCreateColumnSql(generatedColumn, true)}`,\n ),\n )\n }\n\n // if table already have primary columns, we must drop them.\n const primaryColumns = clonedTable.primaryColumns\n if (primaryColumns.length > 0) {\n const columnNames = primaryColumns\n .map((column) => `\\`${column.name}\\``)\n .join(\", \")\n upQueries.push(\n new Query(\n `ALTER TABLE ${this.escapePath(table)} DROP PRIMARY KEY`,\n ),\n )\n downQueries.push(\n new Query(\n `ALTER TABLE ${this.escapePath(\n table,\n )} ADD PRIMARY KEY (${columnNames})`,\n ),\n )\n }\n\n // update columns in table.\n clonedTable.columns\n .filter((column) => columnNames.indexOf(column.name) !== -1)\n .forEach((column) => {\n column.isPrimary = true\n })\n\n const columnNamesString = columnNames\n .map((columnName) => `\\`${columnName}\\``)\n .join(\", \")\n upQueries.push(\n new Query(\n `ALTER TABLE ${this.escapePath(\n table,\n )} ADD PRIMARY KEY (${columnNamesString})`,\n ),\n )\n downQueries.push(\n new Query(`ALTER TABLE ${this.escapePath(table)} DROP PRIMARY KEY`),\n )\n\n // if we already have generated column or column is changed to generated, and we dropped AUTO_INCREMENT property before, we must bring it back\n const newOrExistGeneratedColumn =\n generatedColumn ??\n columns.find(\n (column) =>\n column.isGenerated &&\n column.generationStrategy === \"increment\",\n )\n if (newOrExistGeneratedColumn) {\n const nonGeneratedColumn = newOrExistGeneratedColumn.clone()\n nonGeneratedColumn.isGenerated = false\n nonGeneratedColumn.generationStrategy = undefined\n\n upQueries.push(\n new Query(\n `ALTER TABLE ${this.escapePath(table)} CHANGE \\`${\n nonGeneratedColumn.name\n }\\` ${this.buildCreateColumnSql(\n newOrExistGeneratedColumn,\n true,\n )}`,\n ),\n )\n downQueries.push(\n new Query(\n `ALTER TABLE ${this.escapePath(table)} CHANGE \\`${\n newOrExistGeneratedColumn.name\n }\\` ${this.buildCreateColumnSql(nonGeneratedColumn, true)}`,\n ),\n )\n\n // if column changed to generated, we must update it in table\n const changedGeneratedColumn = clonedTable.columns.find(\n (column) => column.name === newOrExistGeneratedColumn.name,\n )\n changedGeneratedColumn!.isGenerated = true\n changedGeneratedColumn!.generationStrategy = \"increment\"\n }\n\n await this.executeQueries(upQueries, downQueries)\n this.replaceCachedTable(table, clonedTable)\n }\n\n /**\n * Drops a primary key.\n *\n * @param tableOrName\n * @param constraintName\n * @param ifExists\n */\n async dropPrimaryKey(\n tableOrName: Table | string,\n constraintName?: string,\n ifExists?: boolean,\n ): Promise<void> {\n const table = InstanceChecker.isTable(tableOrName)\n ? tableOrName\n : await this.getCachedTable(tableOrName)\n\n if (ifExists && table.primaryColumns.length === 0)\n return Promise.resolve()\n\n const up = this.dropPrimaryKeySql(table)\n const down = this.createPrimaryKeySql(\n table,\n table.primaryColumns.map((column) => column.name),\n )\n await this.executeQueries(up, down)\n table.primaryColumns.forEach((column) => {\n column.isPrimary = false\n })\n }\n\n /**\n * Creates a new unique constraint.\n *\n * @param tableOrName\n * @param uniqueConstraint\n */\n async createUniqueConstraint(\n tableOrName: Table | string,\n uniqueConstraint: TableUnique,\n ): Promise<void> {\n throw new TypeORMError(\n `MySql does not support unique constraints. Use unique index instead.`,\n )\n }\n\n /**\n * Creates a new unique constraints.\n *\n * @param tableOrName\n * @param uniqueConstraints\n */\n async createUniqueConstraints(\n tableOrName: Table | string,\n uniqueConstraints: TableUnique[],\n ): Promise<void> {\n throw new TypeORMError(\n `MySql does not support unique constraints. Use unique index instead.`,\n )\n }\n\n /**\n * Drops a unique constraint.\n *\n * @param tableOrName\n * @param uniqueOrName\n * @param ifExists\n */\n async dropUniqueConstraint(\n tableOrName: Table | string,\n uniqueOrName: TableUnique | string,\n ifExists?: boolean,\n ): Promise<void> {\n throw new TypeORMError(\n `MySql does not support unique constraints. Use unique index instead.`,\n )\n }\n\n /**\n * Drops a unique constraints.\n *\n * @param tableOrName\n * @param uniqueConstraints\n * @param ifExists\n */\n async dropUniqueConstraints(\n tableOrName: Table | string,\n uniqueConstraints: TableUnique[],\n ifExists?: boolean,\n ): Promise<void> {\n throw new TypeORMError(\n `MySql does not support unique constraints. Use unique index instead.`,\n )\n }\n\n /**\n * Creates a new check constraint.\n *\n * @param tableOrName\n * @param checkConstraint\n */\n async createCheckConstraint(\n tableOrName: Table | string,\n checkConstraint: TableCheck,\n ): Promise<void> {\n throw new TypeORMError(`MySql does not support check constraints.`)\n }\n\n /**\n * Creates a new check constraints.\n *\n * @param tableOrName\n * @param checkConstraints\n */\n async createCheckConstraints(\n tableOrName: Table | string,\n checkConstraints: TableCheck[],\n ): Promise<void> {\n throw new TypeORMError(`MySql does not support check constraints.`)\n }\n\n /**\n * Drops check constraint.\n *\n * @param tableOrName\n * @param checkOrName\n * @param ifExists\n */\n async dropCheckConstraint(\n tableOrName: Table | string,\n checkOrName: TableCheck | string,\n ifExists?: boolean,\n ): Promise<void> {\n throw new TypeORMError(`MySql does not support check constraints.`)\n }\n\n /**\n * Drops check constraints.\n *\n * @param tableOrName\n * @param checkConstraints\n * @param ifExists\n */\n async dropCheckConstraints(\n tableOrName: Table | string,\n checkConstraints: TableCheck[],\n ifExists?: boolean,\n ): Promise<void> {\n throw new TypeORMError(`MySql does not support check constraints.`)\n }\n\n /**\n * Creates a new exclusion constraint.\n *\n * @param tableOrName\n * @param exclusionConstraint\n */\n async createExclusionConstraint(\n tableOrName: Table | string,\n exclusionConstraint: TableExclusion,\n ): Promise<void> {\n throw new TypeORMError(`MySql does not support exclusion constraints.`)\n }\n\n /**\n * Creates a new exclusion constraints.\n *\n * @param tableOrName\n * @param exclusionConstraints\n */\n async createExclusionConstraints(\n tableOrName: Table | string,\n exclusionConstraints: TableExclusion[],\n ): Promise<void> {\n throw new TypeORMError(`MySql does not support exclusion constraints.`)\n }\n\n /**\n * Drops exclusion constraint.\n *\n * @param tableOrName\n * @param exclusionOrName\n * @param ifExists\n */\n async dropExclusionConstraint(\n tableOrName: Table | string,\n exclusionOrName: TableExclusion | string,\n ifExists?: boolean,\n ): Promise<void> {\n throw new TypeORMError(`MySql does not support exclusion constraints.`)\n }\n\n /**\n * Drops exclusion constraints.\n *\n * @param tableOrName\n * @param exclusionConstraints\n * @param ifExists\n */\n async dropExclusionConstraints(\n tableOrName: Table | string,\n exclusionConstraints: TableExclusion[],\n ifExists?: boolean,\n ): Promise<void> {\n throw new TypeORMError(`MySql does not support exclusion constraints.`)\n }\n\n /**\n * Creates a new foreign key.\n *\n * @param tableOrName\n * @param foreignKey\n */\n async createForeignKey(\n tableOrName: Table | string,\n foreignKey: TableForeignKey,\n ): Promise<void> {\n const table = InstanceChecker.isTable(tableOrName)\n ? tableOrName\n : await this.getCachedTable(tableOrName)\n\n // new FK may be passed without name. In this case we generate FK name manually.\n foreignKey.name ??= this.dataSource.namingStrategy.foreignKeyName(\n table,\n foreignKey.columnNames,\n )\n\n const up = this.createForeignKeySql(table, foreignKey)\n const down = this.dropForeignKeySql(table, foreignKey)\n await this.executeQueries(up, down)\n table.addForeignKey(foreignKey)\n }\n\n /**\n * Creates a new foreign keys.\n *\n * @param tableOrName\n * @param foreignKeys\n */\n async createForeignKeys(\n tableOrName: Table | string,\n foreignKeys: TableForeignKey[],\n ): Promise<void> {\n const promises = foreignKeys.map((foreignKey) =>\n this.createForeignKey(tableOrName, foreignKey),\n )\n await Promise.all(promises)\n }\n\n /**\n * Drops a foreign key.\n *\n * @param tableOrName\n * @param foreignKeyOrName\n * @param ifExists\n */\n async dropForeignKey(\n tableOrName: Table | string,\n foreignKeyOrName: TableForeignKey | string,\n ifExists?: boolean,\n ): Promise<void> {\n const table = InstanceChecker.isTable(tableOrName)\n ? tableOrName\n : await this.getCachedTable(tableOrName)\n const foreignKey = InstanceChecker.isTableForeignKey(foreignKeyOrName)\n ? foreignKeyOrName\n : table.foreignKeys.find((fk) => fk.name === foreignKeyOrName)\n if (!foreignKey) {\n if (ifExists) return\n throw new TypeORMError(\n `Supplied foreign key was not found in table ${table.name}`,\n )\n }\n\n foreignKey.name ??= this.dataSource.namingStrategy.foreignKeyName(\n table,\n foreignKey.columnNames,\n )\n\n const up = this.dropForeignKeySql(table, foreignKey)\n const down = this.createForeignKeySql(table, foreignKey)\n await this.executeQueries(up, down)\n table.removeForeignKey(foreignKey)\n }\n\n /**\n * Drops a foreign keys from the table.\n *\n * @param tableOrName\n * @param foreignKeys\n * @param ifExists\n */\n async dropForeignKeys(\n tableOrName: Table | string,\n foreignKeys: TableForeignKey[],\n ifExists?: boolean,\n ): Promise<void> {\n const promises = foreignKeys.map((foreignKey) =>\n this.dropForeignKey(tableOrName, foreignKey, ifExists),\n )\n await Promise.all(promises)\n }\n\n /**\n * Creates a new index.\n *\n * @param tableOrName\n * @param index\n */\n async createIndex(\n tableOrName: Table | string,\n index: TableIndex,\n ): Promise<void> {\n const table = InstanceChecker.isTable(tableOrName)\n ? tableOrName\n : await this.getCachedTable(tableOrName)\n\n // new index may be passed without name. In this case we generate index name manually.\n index.name ??= this.generateIndexName(table, index)\n\n const up = this.createIndexSql(table, index)\n const down = this.dropIndexSql(table, index)\n await this.executeQueries(up, down)\n table.addIndex(index, true)\n }\n\n /**\n * Creates a new indices\n *\n * @param tableOrName\n * @param indices\n */\n async createIndices(\n tableOrName: Table | string,\n indices: TableIndex[],\n ): Promise<void> {\n const promises = indices.map((index) =>\n this.createIndex(tableOrName, index),\n )\n await Promise.all(promises)\n }\n\n /**\n * Drops an index.\n *\n * @param tableOrName\n * @param indexOrName\n * @param ifExists\n */\n async dropIndex(\n tableOrName: Table | string,\n indexOrName: TableIndex | string,\n ifExists?: boolean,\n ): Promise<void> {\n const table = InstanceChecker.isTable(tableOrName)\n ? tableOrName\n : await this.getCachedTable(tableOrName)\n const index = InstanceChecker.isTableIndex(indexOrName)\n ? indexOrName\n : table.indices.find((i) => i.name === indexOrName)\n if (!index) {\n if (ifExists) return\n throw new TypeORMError(\n `Supplied index ${indexOrName} was not found in table ${table.name}`,\n )\n }\n\n // old index may be passed without name. In this case we generate index name manually.\n index.name ??= this.generateIndexName(table, index)\n\n const up = this.dropIndexSql(table, index)\n const down = this.createIndexSql(table, index)\n await this.executeQueries(up, down)\n table.removeIndex(index, true)\n }\n\n /**\n * Drops an indices from the table.\n *\n * @param tableOrName\n * @param indices\n * @param ifExists\n */\n async dropIndices(\n tableOrName: Table | string,\n indices: TableIndex[],\n ifExists?: boolean,\n ): Promise<void> {\n const promises = indices.map((index) =>\n this.dropIndex(tableOrName, index, ifExists),\n )\n await Promise.all(promises)\n }\n\n /**\n * Clears all table contents.\n * Note: this operation uses SQL's TRUNCATE query which cannot be reverted in transactions.\n *\n * @param tableOrName\n * @param options\n * @param options.cascade\n */\n async clearTable(\n tableOrName: Table | string,\n options?: { cascade?: boolean },\n ): Promise<void> {\n if (options?.cascade)\n throw new TypeORMError(\n `MySql does not support clearing table with cascade option`,\n )\n await this.query(`TRUNCATE TABLE ${this.escapePath(tableOrName)}`)\n }\n\n /**\n * Removes all tables from the currently connected database.\n * Be careful using this method and avoid using it in production or migrations\n * (because it can clear all your database).\n *\n * @param database\n */\n async clearDatabase(database?: string): Promise<void> {\n const dbName = database ?? this.driver.database\n if (dbName) {\n const isDatabaseExist = await this.hasDatabase(dbName)\n if (!isDatabaseExist) return Promise.resolve()\n } else {\n throw new TypeORMError(\n `Can not clear database. No database is specified`,\n )\n }\n\n const isAnotherTransactionActive = this.isTransactionActive\n if (!isAnotherTransactionActive) await this.startTransaction()\n try {\n const selectViewDropsQuery = `SELECT concat('DROP VIEW IF EXISTS \\`', table_schema, '\\`.\\`', table_name, '\\`') AS \\`query\\` FROM \\`INFORMATION_SCHEMA\\`.\\`VIEWS\\` WHERE \\`TABLE_SCHEMA\\` = ?`\n const dropViewQueries: ObjectLiteral[] = await this.query(\n selectViewDropsQuery,\n [dbName],\n )\n await Promise.all(\n dropViewQueries.map((q) => this.query(q[\"query\"])),\n )\n\n const disableForeignKeysCheckQuery = `SET FOREIGN_KEY_CHECKS = 0;`\n const dropTablesQuery = `SELECT concat('DROP TABLE IF EXISTS \\`', table_schema, '\\`.\\`', table_name, '\\`') AS \\`query\\` FROM \\`INFORMATION_SCHEMA\\`.\\`TABLES\\` WHERE \\`TABLE_SCHEMA\\` = ?`\n const enableForeignKeysCheckQuery = `SET FOREIGN_KEY_CHECKS = 1;`\n\n await this.query(disableForeignKeysCheckQuery)\n const dropQueries: ObjectLiteral[] = await this.query(\n dropTablesQuery,\n [dbName],\n )\n await Promise.all(\n dropQueries.map((query) => this.query(query[\"query\"])),\n )\n await this.query(enableForeignKeysCheckQuery)\n\n if (!isAnotherTransactionActive) {\n await this.commitTransaction()\n }\n } catch (error) {\n try {\n // we throw original error even if rollback thrown an error\n if (!isAnotherTransactionActive) {\n await this.rollbackTransaction()\n }\n } catch (rollbackError) {}\n throw error\n }\n }\n\n // -------------------------------------------------------------------------\n // Protected Methods\n // -------------------------------------------------------------------------\n\n protected async loadViews(viewNames?: string[]): Promise<View[]> {\n const hasTable = await this.hasTable(this.getTypeormMetadataTableName())\n if (!hasTable) {\n return []\n }\n\n viewNames ??= []\n\n const currentDatabase = await this.getCurrentDatabase()\n const viewsCondition = viewNames\n .map((tableName) => {\n let { database, tableName: name } =\n this.driver.parseTableName(tableName)\n\n database ??= currentDatabase\n\n return `(\\`t\\`.\\`schema\\` = '${database}' AND \\`t\\`.\\`name\\` = '${name}')`\n })\n .join(\" OR \")\n\n const query =\n `SELECT \\`t\\`.*, \\`v\\`.\\`check_option\\` FROM ${this.escapePath(\n this.getTypeormMetadataTableName(),\n )} \\`t\\` ` +\n `INNER JOIN \\`information_schema\\`.\\`views\\` \\`v\\` ON \\`v\\`.\\`table_schema\\` = \\`t\\`.\\`schema\\` AND \\`v\\`.\\`table_name\\` = \\`t\\`.\\`name\\` WHERE \\`t\\`.\\`type\\` = '${\n MetadataTableType.VIEW\n }' ${viewsCondition ? `AND (${viewsCondition})` : \"\"}`\n const dbViews = await this.query(query)\n return dbViews.map((dbView: any) => {\n const view = new View()\n const db =\n dbView[\"schema\"] === currentDatabase\n ? undefined\n : dbView[\"schema\"]\n view.database = dbView[\"schema\"]\n view.name = this.driver.buildTableName(\n dbView[\"name\"],\n undefined,\n db,\n )\n view.expression = dbView[\"value\"]\n return view\n })\n }\n\n /**\n * Loads all tables (with given names) from the database and creates a Table from them.\n *\n * @param tableNames\n */\n protected async loadTables(tableNames?: string[]): Promise<Table[]> {\n // if no tables given then no need to proceed\n if (tableNames?.length === 0) {\n return []\n }\n\n const dbTables: { TABLE_NAME: string; TABLE_SCHEMA: string }[] = []\n\n const currentDatabase = await this.getCurrentDatabase()\n\n if (!tableNames) {\n const tablesSql = `SELECT TABLE_NAME, TABLE_SCHEMA FROM \\`INFORMATION_SCHEMA\\`.\\`TABLES\\``\n\n dbTables.push(...(await this.query(tablesSql)))\n } else {\n const tablesCondition = tableNames\n .map((tableName) => {\n let [database, name] = tableName.split(\".\")\n if (!name) {\n name = database\n database = this.driver.database ?? currentDatabase\n }\n return `(\\`TABLE_SCHEMA\\` = '${database}' AND \\`TABLE_NAME\\` = '${name}')`\n })\n .join(\" OR \")\n const tablesSql =\n `SELECT TABLE_NAME, TABLE_SCHEMA FROM \\`INFORMATION_SCHEMA\\`.\\`TABLES\\` WHERE ` +\n tablesCondition\n\n dbTables.push(...(await this.query(tablesSql)))\n }\n\n if (dbTables.length === 0) {\n return []\n }\n\n const columnsCondition = dbTables\n .map(({ TABLE_NAME, TABLE_SCHEMA }) => {\n return `(\\`TABLE_SCHEMA\\` = '${TABLE_SCHEMA}' AND \\`TABLE_NAME\\` = '${TABLE_NAME}')`\n })\n .join(\" OR \")\n const columnsSql =\n `SELECT * FROM \\`INFORMATION_SCHEMA\\`.\\`COLUMNS\\` WHERE ` +\n columnsCondition\n\n const primaryKeySql = `SELECT * FROM \\`INFORMATION_SCHEMA\\`.\\`KEY_COLUMN_USAGE\\` WHERE \\`CONSTRAINT_NAME\\` = 'PRIMARY' AND (${columnsCondition})`\n\n const collationsSql = `SELECT \\`SCHEMA_NAME\\`, \\`DEFAULT_CHARACTER_SET_NAME\\` as \\`CHARSET\\`, \\`DEFAULT_COLLATION_NAME\\` AS \\`COLLATION\\` FROM \\`INFORMATION_SCHEMA\\`.\\`SCHEMATA\\``\n\n const indicesCondition = dbTables\n .map(({ TABLE_NAME, TABLE_SCHEMA }) => {\n return `(\\`s\\`.\\`TABLE_SCHEMA\\` = '${TABLE_SCHEMA}' AND \\`s\\`.\\`TABLE_NAME\\` = '${TABLE_NAME}')`\n })\n .join(\" OR \")\n const indicesSql =\n `SELECT \\`s\\`.* FROM \\`INFORMATION_SCHEMA\\`.\\`STATISTICS\\` \\`s\\` ` +\n `LEFT JOIN \\`INFORMATION_SCHEMA\\`.\\`REFERENTIAL_CONSTRAINTS\\` \\`rc\\` ON \\`s\\`.\\`INDEX_NAME\\` = \\`rc\\`.\\`CONSTRAINT_NAME\\` ` +\n `WHERE (${indicesCondition}) AND \\`s\\`.\\`INDEX_NAME\\` != 'PRIMARY' AND \\`rc\\`.\\`CONSTRAINT_NAME\\` IS NULL`\n\n const foreignKeysCondition = dbTables\n .map(({ TABLE_NAME, TABLE_SCHEMA }) => {\n return `(\\`kcu\\`.\\`TABLE_SCHEMA\\` = '${TABLE_SCHEMA}' AND \\`kcu\\`.\\`TABLE_NAME\\` = '${TABLE_NAME}')`\n })\n .join(\" OR \")\n const foreignKeysSql =\n `SELECT \\`kcu\\`.\\`TABLE_SCHEMA\\`, \\`kcu\\`.\\`TABLE_NAME\\`, \\`kcu\\`.\\`CONSTRAINT_NAME\\`, \\`kcu\\`.\\`COLUMN_NAME\\`, \\`kcu\\`.\\`REFERENCED_TABLE_SCHEMA\\`, ` +\n `\\`kcu\\`.\\`REFERENCED_TABLE_NAME\\`, \\`kcu\\`.\\`REFERENCED_COLUMN_NAME\\`, \\`rc\\`.\\`DELETE_RULE\\` \\`ON_DELETE\\`, \\`rc\\`.\\`UPDATE_RULE\\` \\`ON_UPDATE\\` ` +\n `FROM \\`INFORMATION_SCHEMA\\`.\\`KEY_COLUMN_USAGE\\` \\`kcu\\` ` +\n `INNER JOIN \\`INFORMATION_SCHEMA\\`.\\`REFERENTIAL_CONSTRAINTS\\` \\`rc\\` ON \\`rc\\`.\\`constraint_name\\` = \\`kcu\\`.\\`constraint_name\\` ` +\n `WHERE ` +\n foreignKeysCondition\n const [\n dbColumns,\n dbPrimaryKeys,\n dbCollations,\n dbIndices,\n dbForeignKeys,\n ]: ObjectLiteral[][] = await Promise.all([\n this.query(columnsSql),\n this.query(primaryKeySql),\n this.query(collationsSql),\n this.query(indicesSql),\n this.query(foreignKeysSql),\n ])\n\n // create tables for loaded tables\n return dbTables.map((dbTable) => {\n const table = new Table()\n\n const dbCollation = dbCollations.find(\n (coll) => coll[\"SCHEMA_NAME\"] === dbTable[\"TABLE_SCHEMA\"],\n )!\n const defaultCollation = dbCollation[\"COLLATION\"]\n const defaultCharset = dbCollation[\"CHARSET\"]\n\n // We do not need to join database name, when database is by default.\n const db =\n dbTable[\"TABLE_SCHEMA\"] === currentDatabase\n ? undefined\n : dbTable[\"TABLE_SCHEMA\"]\n table.database = dbTable[\"TABLE_SCHEMA\"]\n table.name = this.driver.buildTableName(\n dbTable[\"TABLE_NAME\"],\n undefined,\n db,\n )\n\n // create columns from the loaded columns\n table.columns = dbColumns\n .filter(\n (dbColumn) =>\n dbColumn[\"TABLE_NAME\"] === dbTable[\"TABLE_NAME\"] &&\n dbColumn[\"TABLE_SCHEMA\"] === dbTable[\"TABLE_SCHEMA\"],\n )\n .map((dbColumn) => {\n const columnUniqueIndices = dbIndices.filter((dbIndex) => {\n return (\n dbIndex[\"TABLE_NAME\"] === dbTable[\"TABLE_NAME\"] &&\n dbIndex[\"TABLE_SCHEMA\"] ===\n dbTable[\"TABLE_SCHEMA\"] &&\n dbIndex[\"COLUMN_NAME\"] ===\n dbColumn[\"COLUMN_NAME\"] &&\n parseInt(dbIndex[\"NON_UNIQUE\"], 10) === 0\n )\n })\n\n const tableMetadata = this.dataSource.entityMetadatas.find(\n (metadata) =>\n this.getTablePath(table) ===\n this.getTablePath(metadata),\n )\n const hasIgnoredIndex =\n columnUniqueIndices.length > 0 &&\n tableMetadata?.indices.some((index) => {\n return columnUniqueIndices.some((uniqueIndex) => {\n return (\n index.name === uniqueIndex[\"INDEX_NAME\"] &&\n index.synchronize === false\n )\n })\n })\n\n const isConstraintComposite = columnUniqueIndices.every(\n (uniqueIndex) => {\n return dbIndices.some(\n (dbIndex) =>\n dbIndex[\"INDEX_NAME\"] ===\n uniqueIndex[\"INDEX_NAME\"] &&\n dbIndex[\"COLUMN_NAME\"] !==\n dbColumn[\"COLUMN_NAME\"],\n )\n },\n )\n\n const tableColumn = new TableColumn()\n tableColumn.name = dbColumn[\"COLUMN_NAME\"]\n tableColumn.type = dbColumn[\"DATA_TYPE\"].toLowerCase()\n\n tableColumn.unsigned =\n dbColumn[\"COLUMN_TYPE\"].includes(\"unsigned\")\n\n if (\n dbColumn[\"COLUMN_DEFAULT\"] === null ||\n dbColumn[\"COLUMN_DEFAULT\"] === undefined\n ) {\n tableColumn.default = undefined\n } else {\n tableColumn.default =\n dbColumn[\"COLUMN_DEFAULT\"] === \"CURRENT_TIMESTAMP\"\n ? dbColumn[\"COLUMN_DEFAULT\"]\n : `'${dbColumn[\"COLUMN_DEFAULT\"]}'`\n }\n\n if (dbColumn[\"EXTRA\"].indexOf(\"on update\") !== -1) {\n tableColumn.onUpdate = dbColumn[\"EXTRA\"].slice(\n dbColumn[\"EXTRA\"].indexOf(\"on update\") + 10,\n )\n }\n\n if (dbColumn[\"GENERATION_EXPRESSION\"]) {\n tableColumn.asExpression =\n dbColumn[\"GENERATION_EXPRESSION\"]\n tableColumn.generatedType =\n dbColumn[\"EXTRA\"].indexOf(\"VIRTUAL\") !== -1\n ? \"VIRTUAL\"\n : \"STORED\"\n }\n\n tableColumn.isUnique =\n columnUniqueIndices.length > 0 &&\n !hasIgnoredIndex &&\n !isConstraintComposite\n tableColumn.isNullable = dbColumn[\"IS_NULLABLE\"] === \"YES\"\n tableColumn.isPrimary = dbPrimaryKeys.some(\n (dbPrimaryKey) => {\n return (\n dbPrimaryKey[\"TABLE_NAME\"] ===\n dbColumn[\"TABLE_NAME\"] &&\n dbPrimaryKey[\"TABLE_SCHEMA\"] ===\n dbColumn[\"TABLE_SCHEMA\"] &&\n dbPrimaryKey[\"COLUMN_NAME\"] ===\n dbColumn[\"COLUMN_NAME\"]\n )\n },\n )\n tableColumn.isGenerated =\n dbColumn[\"EXTRA\"].indexOf(\"auto_increment\") !== -1\n if (tableColumn.isGenerated)\n tableColumn.generationStrategy = \"increment\"\n\n tableColumn.comment =\n typeof dbColumn[\"COLUMN_COMMENT\"] === \"string\" &&\n dbColumn[\"COLUMN_COMMENT\"].length === 0\n ? undefined\n : dbColumn[\"COLUMN_COMMENT\"]\n if (dbColumn[\"CHARACTER_SET_NAME\"])\n tableColumn.charset =\n dbColumn[\"CHARACTER_SET_NAME\"] === defaultCharset\n ? undefined\n : dbColumn[\"CHARACTER_SET_NAME\"]\n if (dbColumn[\"COLLATION_NAME\"])\n tableColumn.collation =\n dbColumn[\"COLLATION_NAME\"] === defaultCollation\n ? undefined\n : dbColumn[\"COLLATION_NAME\"]\n\n // check only columns that have length property\n if (\n this.driver.withLengthColumnTypes.indexOf(\n tableColumn.type as ColumnType,\n ) !== -1 &&\n dbColumn[\"CHARACTER_MAXIMUM_LENGTH\"]\n ) {\n const length =\n dbColumn[\"CHARACTER_MAXIMUM_LENGTH\"].toString()\n tableColumn.length = !this.isDefaultColumnLength(\n table,\n tableColumn,\n length,\n )\n ? length\n : \"\"\n }\n\n if (\n tableColumn.type === \"decimal\" ||\n tableColumn.type === \"double\" ||\n tableColumn.type === \"float\"\n ) {\n if (\n dbColumn[\"NUMERIC_PRECISION\"] !== null &&\n !this.isDefaultColumnPrecision(\n table,\n tableColumn,\n dbColumn[\"NUMERIC_PRECISION\"],\n )\n )\n tableColumn.precision = parseInt(\n dbColumn[\"NUMERIC_PRECISION\"],\n )\n if (\n dbColumn[\"NUMERIC_SCALE\"] !== null &&\n !this.isDefaultColumnScale(\n table,\n tableColumn,\n dbColumn[\"NUMERIC_SCALE\"],\n )\n )\n tableColumn.scale = parseInt(\n dbColumn[\"NUMERIC_SCALE\"],\n )\n }\n\n if (\n tableColumn.type === \"enum\" ||\n tableColumn.type === \"simple-enum\" ||\n tableColumn.type === \"set\"\n ) {\n const colType = dbColumn[\"COLUMN_TYPE\"]\n const items = colType\n .slice(\n colType.indexOf(\"(\") + 1,\n colType.lastIndexOf(\")\"),\n )\n .split(\",\")\n tableColumn.enum = (items as string[]).map((item) => {\n return item.slice(1, -1)\n })\n tableColumn.length = \"\"\n }\n\n if (\n (tableColumn.type === \"datetime\" ||\n tableColumn.type === \"time\" ||\n tableColumn.type === \"timestamp\") &&\n dbColumn[\"DATETIME_PRECISION\"] !== null &&\n dbColumn[\"DATETIME_PRECISION\"] !== undefined &&\n !this.isDefaultColumnPrecision(\n table,\n tableColumn,\n parseInt(dbColumn[\"DATETIME_PRECISION\"]),\n )\n ) {\n tableColumn.precision = parseInt(\n dbColumn[\"DATETIME_PRECISION\"],\n )\n }\n\n return tableColumn\n })\n\n // find foreign key constraints of table, group them by constraint name and build TableForeignKey.\n const tableForeignKeyConstraints = OrmUtils.uniq(\n dbForeignKeys.filter((dbForeignKey) => {\n return (\n dbForeignKey[\"TABLE_NAME\"] === dbTable[\"TABLE_NAME\"] &&\n dbForeignKey[\"TABLE_SCHEMA\"] === dbTable[\"TABLE_SCHEMA\"]\n )\n }),\n (dbForeignKey) => dbForeignKey[\"CONSTRAINT_NAME\"],\n )\n\n table.foreignKeys = tableForeignKeyConstraints.map(\n (dbForeignKey) => {\n const foreignKeys = dbForeignKeys.filter(\n (dbFk) =>\n dbFk[\"CONSTRAINT_NAME\"] ===\n dbForeignKey[\"CONSTRAINT_NAME\"],\n )\n\n // if referenced table located in currently used db, we don't need to concat db name to table name.\n const database =\n dbForeignKey[\"REFERENCED_TABLE_SCHEMA\"] ===\n currentDatabase\n ? undefined\n : dbForeignKey[\"REFERENCED_TABLE_SCHEMA\"]\n const referencedTableName = this.driver.buildTableName(\n dbForeignKey[\"REFERENCED_TABLE_NAME\"],\n undefined,\n database,\n )\n\n return new TableForeignKey({\n name: dbForeignKey[\"CONSTRAINT_NAME\"],\n columnNames: foreignKeys.map(\n (dbFk) => dbFk[\"COLUMN_NAME\"],\n ),\n referencedDatabase:\n dbForeignKey[\"REFERENCED_TABLE_SCHEMA\"],\n referencedTableName: referencedTableName,\n referencedColumnNames: foreignKeys.map(\n (dbFk) => dbFk[\"REFERENCED_COLUMN_NAME\"],\n ),\n onDelete: dbForeignKey[\"ON_DELETE\"],\n onUpdate: dbForeignKey[\"ON_UPDATE\"],\n })\n },\n )\n\n // find index constraints of table, group them by constraint name and build TableIndex.\n const tableIndexConstraints = OrmUtils.uniq(\n dbIndices.filter((dbIndex) => {\n return (\n dbIndex[\"TABLE_NAME\"] === dbTable[\"TABLE_NAME\"] &&\n dbIndex[\"TABLE_SCHEMA\"] === dbTable[\"TABLE_SCHEMA\"]\n )\n }),\n (dbIndex) => dbIndex[\"INDEX_NAME\"],\n )\n\n table.indices = tableIndexConstraints.map((constraint) => {\n const indices = dbIndices.filter((index) => {\n return (\n index[\"TABLE_SCHEMA\"] === constraint[\"TABLE_SCHEMA\"] &&\n index[\"TABLE_NAME\"] === constraint[\"TABLE_NAME\"] &&\n index[\"INDEX_NAME\"] === constraint[\"INDEX_NAME\"]\n )\n })\n\n const nonUnique = parseInt(constraint[\"NON_UNIQUE\"], 10)\n\n return new TableIndex({\n table: table,\n name: constraint[\"INDEX_NAME\"],\n columnNames: indices.map((i) => i[\"COLUMN_NAME\"]),\n isUnique: nonUnique === 0,\n isSpatial: constraint[\"INDEX_TYPE\"] === \"SPATIAL\",\n isFulltext: constraint[\"INDEX_TYPE\"] === \"FULLTEXT\",\n } as TableIndexOptions)\n })\n\n return table\n })\n }\n\n /**\n * Builds create table sql\n *\n * @param table\n * @param createForeignKeys\n */\n protected createTableSql(table: Table, createForeignKeys?: boolean): Query {\n const columnDefinitions = table.columns\n .map((column) => this.buildCreateColumnSql(column, true))\n .join(\", \")\n let sql = `CREATE TABLE ${this.escapePath(table)} (${columnDefinitions}`\n\n // we create unique indexes instead of unique constraints, because MySql does not have unique constraints.\n // if we mark column as Unique, it means that we create UNIQUE INDEX.\n table.columns\n .filter((column) => column.isUnique)\n .forEach((column) => {\n const isUniqueIndexExist = table.indices.some((index) => {\n return (\n index.columnNames.length === 1 &&\n !!index.isUnique &&\n index.columnNames.indexOf(column.name) !== -1\n )\n })\n const isUniqueConstraintExist = table.uniques.some((unique) => {\n return (\n unique.columnNames.length === 1 &&\n unique.columnNames.indexOf(column.name) !== -1\n )\n })\n if (!isUniqueIndexExist && !isUniqueConstraintExist)\n table.indices.push(\n new TableIndex({\n name: this.dataSource.namingStrategy.uniqueConstraintName(\n table,\n [column.name],\n ),\n columnNames: [column.name],\n isUnique: true,\n }),\n )\n })\n\n // as MySql does not have unique constraints, we must create table indices from table uniques and mark them as unique.\n if (table.uniques.length > 0) {\n table.uniques.forEach((unique) => {\n const uniqueExist = table.indices.some(\n (index) => index.name === unique.name,\n )\n if (!uniqueExist) {\n table.indices.push(\n new TableIndex({\n name: unique.name,\n columnNames: unique.columnNames,\n isUnique: true,\n }),\n )\n }\n })\n }\n\n if (table.indices.length > 0) {\n const indicesSql = table.indices\n .map((index) => {\n const columnNames = index.columnNames\n .map((columnName) => `\\`${columnName}\\``)\n .join(\", \")\n index.name ??= this.dataSource.namingStrategy.indexName(\n table,\n index.columnNames,\n index.where,\n )\n\n let indexType = \"\"\n if (index.isUnique) indexType += \"UNIQUE \"\n if (index.isSpatial) indexType += \"SPATIAL \"\n if (index.isFulltext) indexType += \"FULLTEXT \"\n return `${indexType}INDEX \\`${index.name}\\` (${columnNames})`\n })\n .join(\", \")\n\n sql += `, ${indicesSql}`\n }\n\n if (table.foreignKeys.length > 0 && createForeignKeys) {\n const foreignKeysSql = table.foreignKeys\n .map((fk) => {\n const columnNames = fk.columnNames\n .map((columnName) => `\\`${columnName}\\``)\n .join(\", \")\n fk.name ??= this.dataSource.namingStrategy.foreignKeyName(\n table,\n fk.columnNames,\n )\n const referencedColumnNames = fk.referencedColumnNames\n .map((columnName) => `\\`${columnName}\\``)\n .join(\", \")\n\n let constraint = `CONSTRAINT \\`${\n fk.name\n }\\` FOREIGN KEY (${columnNames}) REFERENCES ${this.escapePath(\n this.getTablePath(fk),\n )} (${referencedColumnNames})`\n if (fk.onDelete) constraint += ` ON DELETE ${fk.onDelete}`\n if (fk.onUpdate) constraint += ` ON UPDATE ${fk.onUpdate}`\n\n return constraint\n })\n .join(\", \")\n\n sql += `, ${foreignKeysSql}`\n }\n\n if (table.primaryColumns.length > 0) {\n const columnNames = table.primaryColumns\n .map((column) => `\\`${column.name}\\``)\n .join(\", \")\n sql += `, PRIMARY KEY (${columnNames})`\n }\n\n sql += `) ENGINE=${table.engine ?? \"InnoDB\"}`\n\n return new Query(sql)\n }\n\n /**\n * Builds drop table sql\n *\n * @param tableOrName\n */\n protected dropTableSql(tableOrName: Table | string): Query {\n return new Query(`DROP TABLE ${this.escapePath(tableOrName)}`)\n }\n\n protected createViewSql(view: View): Query {\n if (typeof view.expression === \"string\") {\n return new Query(\n `CREATE VIEW ${this.escapePath(view)} AS ${view.expression}`,\n )\n } else {\n return new Query(\n `CREATE VIEW ${this.escapePath(view)} AS ${view\n .expression(this.dataSource)\n .getQuery()}`,\n )\n }\n }\n\n protected async insertViewDefinitionSql(view: View): Promise<Query> {\n const currentDatabase = await this.getCurrentDatabase()\n const expression =\n typeof view.expression === \"string\"\n ? view.expression.trim()\n : view.expression(this.dataSource).getQuery()\n return this.insertTypeormMetadataSql({\n type: MetadataTableType.VIEW,\n schema: currentDatabase,\n name: view.name,\n value: expression,\n })\n }\n\n /**\n * Builds drop view sql.\n *\n * @param viewOrPath\n * @param ifExists\n */\n protected dropViewSql(\n viewOrPath: View | string,\n ifExists?: boolean,\n ): Query {\n const ifExistsClause = ifExists ? \"IF EXISTS \" : \"\"\n return new Query(\n `DROP VIEW ${ifExistsClause}${this.escapePath(viewOrPath)}`,\n )\n }\n\n /**\n * Builds remove view sql.\n *\n * @param viewOrPath\n */\n protected async deleteViewDefinitionSql(\n viewOrPath: View | string,\n ): Promise<Query> {\n const currentDatabase = await this.getCurrentDatabase()\n const viewName = InstanceChecker.isView(viewOrPath)\n ? viewOrPath.name\n : viewOrPath\n return this.deleteTypeormMetadataSql({\n type: MetadataTableType.VIEW,\n schema: currentDatabase,\n name: viewName,\n })\n }\n\n /**\n * Builds create index sql.\n *\n * @param table\n * @param index\n */\n protected createIndexSql(table: Table, index: TableIndex): Query {\n const columns = index.columnNames\n .map((columnName) => `\\`${columnName}\\``)\n .join(\", \")\n let indexType = \"\"\n if (index.isUnique) indexType += \"UNIQUE \"\n if (index.isSpatial) indexType += \"SPATIAL \"\n if (index.isFulltext) indexType += \"FULLTEXT \"\n return new Query(\n `CREATE ${indexType}INDEX \\`${index.name}\\` ON ${this.escapePath(\n table,\n )} (${columns})`,\n )\n }\n\n /**\n * Builds drop index sql.\n *\n * @param table\n * @param indexOrName\n */\n protected dropIndexSql(\n table: Table,\n indexOrName: TableIndex | string,\n ): Query {\n const indexName = InstanceChecker.isTableIndex(indexOrName)\n ? indexOrName.name\n : indexOrName\n return new Query(\n `DROP INDEX \\`${indexName}\\` ON ${this.escapePath(table)}`,\n )\n }\n\n /**\n * Builds create primary key sql.\n *\n * @param table\n * @param columnNames\n */\n protected createPrimaryKeySql(table: Table, columnNames: string[]): Query {\n const columnNamesString = columnNames\n .map((columnName) => `\\`${columnName}\\``)\n .join(\", \")\n return new Query(\n `ALTER TABLE ${this.escapePath(\n table,\n )} ADD PRIMARY KEY (${columnNamesString})`,\n )\n }\n\n /**\n * Builds drop primary key sql.\n *\n * @param table\n */\n protected dropPrimaryKeySql(table: Table): Query {\n return new Query(\n `ALTER TABLE ${this.escapePath(table)} DROP PRIMARY KEY`,\n )\n }\n\n /**\n * Builds create foreign key sql.\n *\n * @param table\n * @param foreignKey\n */\n protected createForeignKeySql(\n table: Table,\n foreignKey: TableForeignKey,\n ): Query {\n const columnNames = foreignKey.columnNames\n .map((column) => `\\`${column}\\``)\n .join(\", \")\n const referencedColumnNames = foreignKey.referencedColumnNames\n .map((column) => `\\`${column}\\``)\n .join(\",\")\n let sql =\n `ALTER TABLE ${this.escapePath(table)} ADD CONSTRAINT \\`${\n foreignKey.name\n }\\` FOREIGN KEY (${columnNames}) ` +\n `REFERENCES ${this.escapePath(\n this.getTablePath(foreignKey),\n )}(${referencedColumnNames})`\n if (foreignKey.onDelete) sql += ` ON DELETE ${foreignKey.onDelete}`\n if (foreignKey.onUpdate) sql += ` ON UPDATE ${foreignKey.onUpdate}`\n\n return new Query(sql)\n }\n\n /**\n * Builds drop foreign key sql.\n *\n * @param table\n * @param foreignKeyOrName\n */\n protected dropForeignKeySql(\n table: Table,\n foreignKeyOrName: TableForeignKey | string,\n ): Query {\n const foreignKeyName = InstanceChecker.isTableForeignKey(\n foreignKeyOrName,\n )\n ? foreignKeyOrName.name\n : foreignKeyOrName\n return new Query(\n `ALTER TABLE ${this.escapePath(\n table,\n )} DROP FOREIGN KEY \\`${foreignKeyName}\\``,\n )\n }\n\n /**\n * Escapes a given comment so it's safe to include in a query.\n *\n * @param comment\n */\n protected escapeComment(comment?: string) {\n if (!comment || comment.length === 0) {\n return `''`\n }\n\n comment = comment\n .replaceAll(\"\\\\\", \"\\\\\\\\\") // MySQL allows escaping characters via backslashes\n .replaceAll(\"'\", \"''\")\n .replaceAll(\"\\u0000\", \"\") // Null bytes aren't allowed in comments\n\n return `'${comment}'`\n }\n\n /**\n * Escapes given table or view path.\n *\n * @param target\n */\n protected escapePath(target: Table | View | string): string {\n const { database, tableName } = this.driver.parseTableName(target)\n\n if (database && database !== this.driver.database) {\n return `\\`${database}\\`.\\`${tableName}\\``\n }\n\n return `\\`${tableName}\\``\n }\n\n /**\n * Builds a part of query to create/change a column.\n *\n * @param column\n * @param skipPrimary\n * @param skipName\n */\n protected buildCreateColumnSql(\n column: TableColumn,\n skipPrimary: boolean,\n skipName: boolean = false,\n ) {\n let c: string\n if (skipName) {\n c = this.dataSource.driver.createFullType(column)\n } else {\n c = `\\`${column.name}\\` ${this.dataSource.driver.createFullType(\n column,\n )}`\n }\n\n if (column.asExpression)\n c += ` AS (${column.asExpression}) ${\n column.generatedType ?? \"VIRTUAL\"\n }`\n\n if (column.unsigned) {\n c += \" UNSIGNED\"\n }\n\n if (column.enum)\n c += ` (${column.enum\n .map((value) => \"'\" + value + \"'\")\n .join(\", \")})`\n if (column.charset) c += ` CHARACTER SET \"${column.charset}\"`\n if (column.collation) c += ` COLLATE \"${column.collation}\"`\n if (!column.isNullable) c += \" NOT NULL\"\n if (column.isNullable) c += \" NULL\"\n if (column.isPrimary && !skipPrimary) c += \" PRIMARY KEY\"\n if (column.isGenerated && column.generationStrategy === \"increment\")\n // don't use skipPrimary here since updates can update already exist primary without auto inc.\n c += \" AUTO_INCREMENT\"\n if (column.comment)\n c += ` COMMENT ${this.escapeComment(column.comment)}`\n if (column.default !== undefined && column.default !== null)\n c += ` DEFAULT ${column.default}`\n if (column.onUpdate) c += ` ON UPDATE ${column.onUpdate}`\n\n return c\n }\n\n /**\n * Change table comment.\n *\n * @param tableOrName\n * @param comment\n */\n changeTableComment(\n tableOrName: Table | string,\n comment?: string,\n ): Promise<void> {\n throw new TypeORMError(\n `aurora-mysql driver does not support change table comment.`,\n )\n }\n}\n"]}
|