knex 2.5.0 → 2.5.1

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.
Files changed (167) hide show
  1. package/CHANGELOG.md +64 -58
  2. package/CONTRIBUTING.md +194 -194
  3. package/README.md +149 -147
  4. package/UPGRADING.md +245 -233
  5. package/bin/cli.js +475 -473
  6. package/bin/utils/cli-config-utils.js +212 -210
  7. package/bin/utils/constants.js +7 -7
  8. package/bin/utils/migrationsLister.js +37 -37
  9. package/knex.js +23 -23
  10. package/knex.mjs +11 -11
  11. package/lib/builder-interface-augmenter.js +120 -120
  12. package/lib/client.js +495 -495
  13. package/lib/constants.js +61 -61
  14. package/lib/dialects/better-sqlite3/index.js +77 -77
  15. package/lib/dialects/cockroachdb/crdb-columncompiler.js +14 -14
  16. package/lib/dialects/cockroachdb/crdb-querybuilder.js +11 -11
  17. package/lib/dialects/cockroachdb/crdb-querycompiler.js +122 -122
  18. package/lib/dialects/cockroachdb/crdb-tablecompiler.js +37 -37
  19. package/lib/dialects/cockroachdb/crdb-viewcompiler.js +15 -15
  20. package/lib/dialects/cockroachdb/index.js +86 -86
  21. package/lib/dialects/index.js +20 -20
  22. package/lib/dialects/mssql/index.js +500 -500
  23. package/lib/dialects/mssql/mssql-formatter.js +34 -34
  24. package/lib/dialects/mssql/query/mssql-querycompiler.js +601 -601
  25. package/lib/dialects/mssql/schema/mssql-columncompiler.js +185 -185
  26. package/lib/dialects/mssql/schema/mssql-compiler.js +91 -91
  27. package/lib/dialects/mssql/schema/mssql-tablecompiler.js +378 -378
  28. package/lib/dialects/mssql/schema/mssql-viewcompiler.js +55 -55
  29. package/lib/dialects/mssql/transaction.js +176 -176
  30. package/lib/dialects/mysql/index.js +201 -201
  31. package/lib/dialects/mysql/query/mysql-querycompiler.js +274 -274
  32. package/lib/dialects/mysql/schema/mysql-columncompiler.js +193 -193
  33. package/lib/dialects/mysql/schema/mysql-compiler.js +60 -60
  34. package/lib/dialects/mysql/schema/mysql-tablecompiler.js +381 -381
  35. package/lib/dialects/mysql/schema/mysql-viewbuilder.js +21 -21
  36. package/lib/dialects/mysql/schema/mysql-viewcompiler.js +15 -15
  37. package/lib/dialects/mysql/transaction.js +46 -46
  38. package/lib/dialects/mysql2/index.js +53 -53
  39. package/lib/dialects/mysql2/transaction.js +44 -44
  40. package/lib/dialects/oracle/DEAD_CODE.md +5 -5
  41. package/lib/dialects/oracle/index.js +92 -92
  42. package/lib/dialects/oracle/query/oracle-querycompiler.js +343 -343
  43. package/lib/dialects/oracle/schema/internal/incrementUtils.js +20 -20
  44. package/lib/dialects/oracle/schema/internal/trigger.js +135 -135
  45. package/lib/dialects/oracle/schema/oracle-columnbuilder.js +17 -17
  46. package/lib/dialects/oracle/schema/oracle-columncompiler.js +126 -126
  47. package/lib/dialects/oracle/schema/oracle-compiler.js +122 -122
  48. package/lib/dialects/oracle/schema/oracle-tablecompiler.js +190 -190
  49. package/lib/dialects/oracle/utils.js +87 -87
  50. package/lib/dialects/oracledb/index.js +327 -327
  51. package/lib/dialects/oracledb/query/oracledb-querycompiler.js +481 -481
  52. package/lib/dialects/oracledb/schema/oracledb-columncompiler.js +61 -61
  53. package/lib/dialects/oracledb/schema/oracledb-tablecompiler.js +19 -19
  54. package/lib/dialects/oracledb/schema/oracledb-viewbuilder.js +13 -13
  55. package/lib/dialects/oracledb/schema/oracledb-viewcompiler.js +19 -19
  56. package/lib/dialects/oracledb/transaction.js +98 -98
  57. package/lib/dialects/oracledb/utils.js +208 -208
  58. package/lib/dialects/pgnative/index.js +60 -60
  59. package/lib/dialects/postgres/execution/pg-transaction.js +19 -19
  60. package/lib/dialects/postgres/index.js +358 -358
  61. package/lib/dialects/postgres/query/pg-querybuilder.js +43 -43
  62. package/lib/dialects/postgres/query/pg-querycompiler.js +400 -400
  63. package/lib/dialects/postgres/schema/pg-columncompiler.js +156 -156
  64. package/lib/dialects/postgres/schema/pg-compiler.js +138 -138
  65. package/lib/dialects/postgres/schema/pg-tablecompiler.js +304 -304
  66. package/lib/dialects/postgres/schema/pg-viewbuilder.js +21 -21
  67. package/lib/dialects/postgres/schema/pg-viewcompiler.js +35 -35
  68. package/lib/dialects/redshift/index.js +86 -86
  69. package/lib/dialects/redshift/query/redshift-querycompiler.js +163 -163
  70. package/lib/dialects/redshift/schema/redshift-columnbuilder.js +22 -22
  71. package/lib/dialects/redshift/schema/redshift-columncompiler.js +67 -67
  72. package/lib/dialects/redshift/schema/redshift-compiler.js +14 -14
  73. package/lib/dialects/redshift/schema/redshift-tablecompiler.js +122 -122
  74. package/lib/dialects/redshift/schema/redshift-viewcompiler.js +11 -11
  75. package/lib/dialects/redshift/transaction.js +32 -32
  76. package/lib/dialects/sqlite3/execution/sqlite-transaction.js +25 -25
  77. package/lib/dialects/sqlite3/index.js +250 -250
  78. package/lib/dialects/sqlite3/query/sqlite-querybuilder.js +33 -33
  79. package/lib/dialects/sqlite3/query/sqlite-querycompiler.js +334 -334
  80. package/lib/dialects/sqlite3/schema/ddl.js +400 -400
  81. package/lib/dialects/sqlite3/schema/internal/compiler.js +327 -327
  82. package/lib/dialects/sqlite3/schema/internal/parser-combinator.js +161 -161
  83. package/lib/dialects/sqlite3/schema/internal/parser.js +638 -638
  84. package/lib/dialects/sqlite3/schema/internal/sqlite-ddl-operations.js +41 -41
  85. package/lib/dialects/sqlite3/schema/internal/tokenizer.js +38 -38
  86. package/lib/dialects/sqlite3/schema/internal/utils.js +12 -12
  87. package/lib/dialects/sqlite3/schema/sqlite-columncompiler.js +50 -50
  88. package/lib/dialects/sqlite3/schema/sqlite-compiler.js +80 -80
  89. package/lib/dialects/sqlite3/schema/sqlite-tablecompiler.js +347 -347
  90. package/lib/dialects/sqlite3/schema/sqlite-viewcompiler.js +40 -40
  91. package/lib/execution/batch-insert.js +51 -51
  92. package/lib/execution/internal/delay.js +6 -6
  93. package/lib/execution/internal/ensure-connection-callback.js +41 -41
  94. package/lib/execution/internal/query-executioner.js +62 -62
  95. package/lib/execution/runner.js +325 -325
  96. package/lib/execution/transaction.js +409 -409
  97. package/lib/formatter/formatterUtils.js +42 -42
  98. package/lib/formatter/rawFormatter.js +84 -84
  99. package/lib/formatter/wrappingFormatter.js +250 -250
  100. package/lib/formatter.js +25 -25
  101. package/lib/index.js +3 -3
  102. package/lib/knex-builder/FunctionHelper.js +80 -80
  103. package/lib/knex-builder/Knex.js +59 -59
  104. package/lib/knex-builder/internal/config-resolver.js +57 -57
  105. package/lib/knex-builder/internal/parse-connection.js +87 -87
  106. package/lib/knex-builder/make-knex.js +345 -345
  107. package/lib/logger.js +76 -76
  108. package/lib/migrations/common/MigrationsLoader.js +36 -36
  109. package/lib/migrations/migrate/MigrationGenerator.js +84 -84
  110. package/lib/migrations/migrate/Migrator.js +598 -598
  111. package/lib/migrations/migrate/migrate-stub.js +17 -17
  112. package/lib/migrations/migrate/migration-list-resolver.js +33 -33
  113. package/lib/migrations/migrate/migrator-configuration-merger.js +58 -58
  114. package/lib/migrations/migrate/sources/fs-migrations.js +74 -74
  115. package/lib/migrations/migrate/table-creator.js +77 -77
  116. package/lib/migrations/migrate/table-resolver.js +27 -27
  117. package/lib/migrations/seed/Seeder.js +137 -137
  118. package/lib/migrations/seed/seed-stub.js +13 -13
  119. package/lib/migrations/seed/seeder-configuration-merger.js +60 -60
  120. package/lib/migrations/seed/sources/fs-seeds.js +65 -65
  121. package/lib/migrations/util/fs.js +86 -86
  122. package/lib/migrations/util/import-file.js +12 -12
  123. package/lib/migrations/util/is-module-type.js +9 -9
  124. package/lib/migrations/util/template.js +52 -52
  125. package/lib/migrations/util/timestamp.js +14 -14
  126. package/lib/query/analytic.js +52 -52
  127. package/lib/query/constants.js +15 -15
  128. package/lib/query/joinclause.js +270 -270
  129. package/lib/query/method-constants.js +136 -136
  130. package/lib/query/querybuilder.js +1793 -1793
  131. package/lib/query/querycompiler.js +1591 -1591
  132. package/lib/raw.js +139 -139
  133. package/lib/ref.js +39 -39
  134. package/lib/schema/builder.js +115 -115
  135. package/lib/schema/columnbuilder.js +146 -146
  136. package/lib/schema/columncompiler.js +307 -307
  137. package/lib/schema/compiler.js +187 -187
  138. package/lib/schema/internal/helpers.js +55 -55
  139. package/lib/schema/tablebuilder.js +376 -376
  140. package/lib/schema/tablecompiler.js +433 -433
  141. package/lib/schema/viewbuilder.js +92 -92
  142. package/lib/schema/viewcompiler.js +138 -138
  143. package/lib/util/finally-mixin.js +13 -13
  144. package/lib/util/helpers.js +95 -95
  145. package/lib/util/is.js +32 -32
  146. package/lib/util/nanoid.js +40 -40
  147. package/lib/util/noop.js +1 -1
  148. package/lib/util/save-async-stack.js +14 -14
  149. package/lib/util/security.js +26 -26
  150. package/lib/util/string.js +190 -190
  151. package/lib/util/timeout.js +29 -29
  152. package/package.json +11 -10
  153. package/scripts/build.js +125 -125
  154. package/scripts/clean.js +31 -31
  155. package/scripts/docker-compose.yml +152 -152
  156. package/scripts/next-release-howto.md +24 -24
  157. package/scripts/release.sh +2 -0
  158. package/scripts/runkit-example.js +35 -34
  159. package/scripts/stress-test/docker-compose.yml +57 -57
  160. package/scripts/stress-test/knex-stress-test.js +212 -208
  161. package/scripts/stress-test/mysql2-random-hanging-every-now-and-then.js +149 -145
  162. package/scripts/stress-test/mysql2-sudden-exit-without-error.js +101 -100
  163. package/scripts/stress-test/reconnect-test-mysql-based-drivers.js +188 -184
  164. package/scripts/update_gitignore_for_tsc_output.js +90 -90
  165. package/types/index.d.ts +3274 -3273
  166. package/types/result.d.ts +27 -27
  167. package/types/tables.d.ts +4 -4
@@ -1,17 +1,17 @@
1
- // Stub Migrate:
2
- // Used for now in browser builds, where filesystem access isn't
3
- // available.
4
- const StubMigrate = (module.exports = function () {});
5
-
6
- const noSuchMethod = async function () {
7
- throw new Error('Migrations are not supported');
8
- };
9
-
10
- StubMigrate.prototype = {
11
- make: noSuchMethod,
12
- latest: noSuchMethod,
13
- rollback: noSuchMethod,
14
- currentVersion: noSuchMethod,
15
- up: noSuchMethod,
16
- down: noSuchMethod,
17
- };
1
+ // Stub Migrate:
2
+ // Used for now in browser builds, where filesystem access isn't
3
+ // available.
4
+ const StubMigrate = (module.exports = function () {});
5
+
6
+ const noSuchMethod = async function () {
7
+ throw new Error('Migrations are not supported');
8
+ };
9
+
10
+ StubMigrate.prototype = {
11
+ make: noSuchMethod,
12
+ latest: noSuchMethod,
13
+ rollback: noSuchMethod,
14
+ currentVersion: noSuchMethod,
15
+ up: noSuchMethod,
16
+ down: noSuchMethod,
17
+ };
@@ -1,33 +1,33 @@
1
- const { getTableName } = require('./table-resolver');
2
- const { ensureTable } = require('./table-creator');
3
-
4
- // Lists all available migration versions, as a sorted array.
5
- function listAll(migrationSource, loadExtensions) {
6
- return migrationSource.getMigrations(loadExtensions);
7
- }
8
-
9
- // Lists all migrations that have been completed for the current db, as an
10
- // array.
11
- async function listCompleted(tableName, schemaName, trxOrKnex) {
12
- await ensureTable(tableName, schemaName, trxOrKnex);
13
-
14
- return await trxOrKnex
15
- .from(getTableName(tableName, schemaName))
16
- .orderBy('id')
17
- .select('name');
18
- }
19
-
20
- // Gets the migration list from the migration directory specified in config, as well as
21
- // the list of completed migrations to check what should be run.
22
- function listAllAndCompleted(config, trxOrKnex) {
23
- return Promise.all([
24
- listAll(config.migrationSource, config.loadExtensions),
25
- listCompleted(config.tableName, config.schemaName, trxOrKnex),
26
- ]);
27
- }
28
-
29
- module.exports = {
30
- listAll,
31
- listAllAndCompleted,
32
- listCompleted,
33
- };
1
+ const { getTableName } = require('./table-resolver');
2
+ const { ensureTable } = require('./table-creator');
3
+
4
+ // Lists all available migration versions, as a sorted array.
5
+ function listAll(migrationSource, loadExtensions) {
6
+ return migrationSource.getMigrations(loadExtensions);
7
+ }
8
+
9
+ // Lists all migrations that have been completed for the current db, as an
10
+ // array.
11
+ async function listCompleted(tableName, schemaName, trxOrKnex) {
12
+ await ensureTable(tableName, schemaName, trxOrKnex);
13
+
14
+ return await trxOrKnex
15
+ .from(getTableName(tableName, schemaName))
16
+ .orderBy('id')
17
+ .select('name');
18
+ }
19
+
20
+ // Gets the migration list from the migration directory specified in config, as well as
21
+ // the list of completed migrations to check what should be run.
22
+ function listAllAndCompleted(config, trxOrKnex) {
23
+ return Promise.all([
24
+ listAll(config.migrationSource, config.loadExtensions),
25
+ listCompleted(config.tableName, config.schemaName, trxOrKnex),
26
+ ]);
27
+ }
28
+
29
+ module.exports = {
30
+ listAll,
31
+ listAllAndCompleted,
32
+ listCompleted,
33
+ };
@@ -1,58 +1,58 @@
1
- const { FsMigrations } = require('./sources/fs-migrations');
2
- const Logger = require('../../logger');
3
- const { DEFAULT_LOAD_EXTENSIONS } = require('../common/MigrationsLoader');
4
- const defaultLogger = new Logger();
5
-
6
- const CONFIG_DEFAULT = Object.freeze({
7
- extension: 'js',
8
- loadExtensions: DEFAULT_LOAD_EXTENSIONS,
9
- tableName: 'knex_migrations',
10
- schemaName: null,
11
- directory: './migrations',
12
- disableTransactions: false,
13
- disableMigrationsListValidation: false,
14
- sortDirsSeparately: false,
15
- });
16
-
17
- function getMergedConfig(config, currentConfig, logger = defaultLogger) {
18
- // config is the user specified config, mergedConfig has defaults and current config
19
- // applied to it.
20
- const mergedConfig = Object.assign(
21
- {},
22
- CONFIG_DEFAULT,
23
- currentConfig || {},
24
- config
25
- );
26
-
27
- if (
28
- config &&
29
- // If user specifies any FS related config,
30
- // clear specified migrationSource to avoid ambiguity
31
- (config.directory ||
32
- config.sortDirsSeparately !== undefined ||
33
- config.loadExtensions)
34
- ) {
35
- if (config.migrationSource) {
36
- logger.warn(
37
- 'FS-related option specified for migration configuration. This resets migrationSource to default FsMigrations'
38
- );
39
- }
40
- mergedConfig.migrationSource = null;
41
- }
42
-
43
- // If the user has not specified any configs, we need to
44
- // default to fs migrations to maintain compatibility
45
- if (!mergedConfig.migrationSource) {
46
- mergedConfig.migrationSource = new FsMigrations(
47
- mergedConfig.directory,
48
- mergedConfig.sortDirsSeparately,
49
- mergedConfig.loadExtensions
50
- );
51
- }
52
-
53
- return mergedConfig;
54
- }
55
-
56
- module.exports = {
57
- getMergedConfig,
58
- };
1
+ const { FsMigrations } = require('./sources/fs-migrations');
2
+ const Logger = require('../../logger');
3
+ const { DEFAULT_LOAD_EXTENSIONS } = require('../common/MigrationsLoader');
4
+ const defaultLogger = new Logger();
5
+
6
+ const CONFIG_DEFAULT = Object.freeze({
7
+ extension: 'js',
8
+ loadExtensions: DEFAULT_LOAD_EXTENSIONS,
9
+ tableName: 'knex_migrations',
10
+ schemaName: null,
11
+ directory: './migrations',
12
+ disableTransactions: false,
13
+ disableMigrationsListValidation: false,
14
+ sortDirsSeparately: false,
15
+ });
16
+
17
+ function getMergedConfig(config, currentConfig, logger = defaultLogger) {
18
+ // config is the user specified config, mergedConfig has defaults and current config
19
+ // applied to it.
20
+ const mergedConfig = Object.assign(
21
+ {},
22
+ CONFIG_DEFAULT,
23
+ currentConfig || {},
24
+ config
25
+ );
26
+
27
+ if (
28
+ config &&
29
+ // If user specifies any FS related config,
30
+ // clear specified migrationSource to avoid ambiguity
31
+ (config.directory ||
32
+ config.sortDirsSeparately !== undefined ||
33
+ config.loadExtensions)
34
+ ) {
35
+ if (config.migrationSource) {
36
+ logger.warn(
37
+ 'FS-related option specified for migration configuration. This resets migrationSource to default FsMigrations'
38
+ );
39
+ }
40
+ mergedConfig.migrationSource = null;
41
+ }
42
+
43
+ // If the user has not specified any configs, we need to
44
+ // default to fs migrations to maintain compatibility
45
+ if (!mergedConfig.migrationSource) {
46
+ mergedConfig.migrationSource = new FsMigrations(
47
+ mergedConfig.directory,
48
+ mergedConfig.sortDirsSeparately,
49
+ mergedConfig.loadExtensions
50
+ );
51
+ }
52
+
53
+ return mergedConfig;
54
+ }
55
+
56
+ module.exports = {
57
+ getMergedConfig,
58
+ };
@@ -1,74 +1,74 @@
1
- const path = require('path');
2
- const sortBy = require('lodash/sortBy');
3
-
4
- const { readdir } = require('../../util/fs');
5
- const { AbstractMigrationsLoader } = require('../../common/MigrationsLoader');
6
-
7
- class FsMigrations extends AbstractMigrationsLoader {
8
- /**
9
- * Gets the migration names
10
- * @returns Promise<string[]>
11
- */
12
- getMigrations(loadExtensions) {
13
- // Get a list of files in all specified migration directories
14
- const readMigrationsPromises = this.migrationsPaths.map((configDir) => {
15
- const absoluteDir = path.resolve(process.cwd(), configDir);
16
- return readdir(absoluteDir).then((files) => ({
17
- files,
18
- configDir,
19
- absoluteDir,
20
- }));
21
- });
22
-
23
- return Promise.all(readMigrationsPromises).then((allMigrations) => {
24
- const migrations = allMigrations.reduce((acc, migrationDirectory) => {
25
- // When true, files inside the folder should be sorted
26
- if (this.sortDirsSeparately) {
27
- migrationDirectory.files = migrationDirectory.files.sort();
28
- }
29
-
30
- migrationDirectory.files.forEach((file) =>
31
- acc.push({ file, directory: migrationDirectory.configDir })
32
- );
33
-
34
- return acc;
35
- }, []);
36
-
37
- // If true we have already sorted the migrations inside the folders
38
- // return the migrations fully qualified
39
- if (this.sortDirsSeparately) {
40
- return filterMigrations(
41
- this,
42
- migrations,
43
- loadExtensions || this.loadExtensions
44
- );
45
- }
46
-
47
- return filterMigrations(
48
- this,
49
- sortBy(migrations, 'file'),
50
- loadExtensions || this.loadExtensions
51
- );
52
- });
53
- }
54
-
55
- getMigrationName(migration) {
56
- return migration.file;
57
- }
58
-
59
- getMigration(migrationInfo) {
60
- return this.getFile(migrationInfo);
61
- }
62
- }
63
-
64
- function filterMigrations(migrationSource, migrations, loadExtensions) {
65
- return migrations.filter((migration) => {
66
- const migrationName = migrationSource.getMigrationName(migration);
67
- const extension = path.extname(migrationName);
68
- return loadExtensions.includes(extension);
69
- });
70
- }
71
-
72
- module.exports = {
73
- FsMigrations,
74
- };
1
+ const path = require('path');
2
+ const sortBy = require('lodash/sortBy');
3
+
4
+ const { readdir } = require('../../util/fs');
5
+ const { AbstractMigrationsLoader } = require('../../common/MigrationsLoader');
6
+
7
+ class FsMigrations extends AbstractMigrationsLoader {
8
+ /**
9
+ * Gets the migration names
10
+ * @returns Promise<string[]>
11
+ */
12
+ getMigrations(loadExtensions) {
13
+ // Get a list of files in all specified migration directories
14
+ const readMigrationsPromises = this.migrationsPaths.map((configDir) => {
15
+ const absoluteDir = path.resolve(process.cwd(), configDir);
16
+ return readdir(absoluteDir).then((files) => ({
17
+ files,
18
+ configDir,
19
+ absoluteDir,
20
+ }));
21
+ });
22
+
23
+ return Promise.all(readMigrationsPromises).then((allMigrations) => {
24
+ const migrations = allMigrations.reduce((acc, migrationDirectory) => {
25
+ // When true, files inside the folder should be sorted
26
+ if (this.sortDirsSeparately) {
27
+ migrationDirectory.files = migrationDirectory.files.sort();
28
+ }
29
+
30
+ migrationDirectory.files.forEach((file) =>
31
+ acc.push({ file, directory: migrationDirectory.configDir })
32
+ );
33
+
34
+ return acc;
35
+ }, []);
36
+
37
+ // If true we have already sorted the migrations inside the folders
38
+ // return the migrations fully qualified
39
+ if (this.sortDirsSeparately) {
40
+ return filterMigrations(
41
+ this,
42
+ migrations,
43
+ loadExtensions || this.loadExtensions
44
+ );
45
+ }
46
+
47
+ return filterMigrations(
48
+ this,
49
+ sortBy(migrations, 'file'),
50
+ loadExtensions || this.loadExtensions
51
+ );
52
+ });
53
+ }
54
+
55
+ getMigrationName(migration) {
56
+ return migration.file;
57
+ }
58
+
59
+ getMigration(migrationInfo) {
60
+ return this.getFile(migrationInfo);
61
+ }
62
+ }
63
+
64
+ function filterMigrations(migrationSource, migrations, loadExtensions) {
65
+ return migrations.filter((migration) => {
66
+ const migrationName = migrationSource.getMigrationName(migration);
67
+ const extension = path.extname(migrationName);
68
+ return loadExtensions.includes(extension);
69
+ });
70
+ }
71
+
72
+ module.exports = {
73
+ FsMigrations,
74
+ };
@@ -1,77 +1,77 @@
1
- const {
2
- getTable,
3
- getLockTableName,
4
- getLockTableNameWithSchema,
5
- getTableName,
6
- } = require('./table-resolver');
7
-
8
- function ensureTable(tableName, schemaName, trxOrKnex) {
9
- const lockTable = getLockTableName(tableName);
10
- return getSchemaBuilder(trxOrKnex, schemaName)
11
- .hasTable(tableName)
12
- .then((exists) => {
13
- return !exists && _createMigrationTable(tableName, schemaName, trxOrKnex);
14
- })
15
- .then(() => {
16
- return getSchemaBuilder(trxOrKnex, schemaName).hasTable(lockTable);
17
- })
18
- .then((exists) => {
19
- return (
20
- !exists && _createMigrationLockTable(lockTable, schemaName, trxOrKnex)
21
- );
22
- })
23
- .then(() => {
24
- return getTable(trxOrKnex, lockTable, schemaName).select('*');
25
- })
26
- .then((data) => {
27
- return (
28
- !data.length && _insertLockRowIfNeeded(tableName, schemaName, trxOrKnex)
29
- );
30
- });
31
- }
32
-
33
- function _createMigrationTable(tableName, schemaName, trxOrKnex) {
34
- return getSchemaBuilder(trxOrKnex, schemaName).createTable(
35
- getTableName(tableName),
36
- function (t) {
37
- t.increments();
38
- t.string('name');
39
- t.integer('batch');
40
- t.timestamp('migration_time');
41
- }
42
- );
43
- }
44
-
45
- function _createMigrationLockTable(tableName, schemaName, trxOrKnex) {
46
- return getSchemaBuilder(trxOrKnex, schemaName).createTable(
47
- tableName,
48
- function (t) {
49
- t.increments('index').primary();
50
- t.integer('is_locked');
51
- }
52
- );
53
- }
54
-
55
- function _insertLockRowIfNeeded(tableName, schemaName, trxOrKnex) {
56
- const lockTableWithSchema = getLockTableNameWithSchema(tableName, schemaName);
57
- return trxOrKnex
58
- .select('*')
59
- .from(lockTableWithSchema)
60
- .then((data) => {
61
- return !data.length
62
- ? trxOrKnex.from(lockTableWithSchema).insert({ is_locked: 0 })
63
- : null;
64
- });
65
- }
66
-
67
- //Get schema-aware schema builder for a given schema nam
68
- function getSchemaBuilder(trxOrKnex, schemaName) {
69
- return schemaName
70
- ? trxOrKnex.schema.withSchema(schemaName)
71
- : trxOrKnex.schema;
72
- }
73
-
74
- module.exports = {
75
- ensureTable,
76
- getSchemaBuilder,
77
- };
1
+ const {
2
+ getTable,
3
+ getLockTableName,
4
+ getLockTableNameWithSchema,
5
+ getTableName,
6
+ } = require('./table-resolver');
7
+
8
+ function ensureTable(tableName, schemaName, trxOrKnex) {
9
+ const lockTable = getLockTableName(tableName);
10
+ return getSchemaBuilder(trxOrKnex, schemaName)
11
+ .hasTable(tableName)
12
+ .then((exists) => {
13
+ return !exists && _createMigrationTable(tableName, schemaName, trxOrKnex);
14
+ })
15
+ .then(() => {
16
+ return getSchemaBuilder(trxOrKnex, schemaName).hasTable(lockTable);
17
+ })
18
+ .then((exists) => {
19
+ return (
20
+ !exists && _createMigrationLockTable(lockTable, schemaName, trxOrKnex)
21
+ );
22
+ })
23
+ .then(() => {
24
+ return getTable(trxOrKnex, lockTable, schemaName).select('*');
25
+ })
26
+ .then((data) => {
27
+ return (
28
+ !data.length && _insertLockRowIfNeeded(tableName, schemaName, trxOrKnex)
29
+ );
30
+ });
31
+ }
32
+
33
+ function _createMigrationTable(tableName, schemaName, trxOrKnex) {
34
+ return getSchemaBuilder(trxOrKnex, schemaName).createTable(
35
+ getTableName(tableName),
36
+ function (t) {
37
+ t.increments();
38
+ t.string('name');
39
+ t.integer('batch');
40
+ t.timestamp('migration_time');
41
+ }
42
+ );
43
+ }
44
+
45
+ function _createMigrationLockTable(tableName, schemaName, trxOrKnex) {
46
+ return getSchemaBuilder(trxOrKnex, schemaName).createTable(
47
+ tableName,
48
+ function (t) {
49
+ t.increments('index').primary();
50
+ t.integer('is_locked');
51
+ }
52
+ );
53
+ }
54
+
55
+ function _insertLockRowIfNeeded(tableName, schemaName, trxOrKnex) {
56
+ const lockTableWithSchema = getLockTableNameWithSchema(tableName, schemaName);
57
+ return trxOrKnex
58
+ .select('*')
59
+ .from(lockTableWithSchema)
60
+ .then((data) => {
61
+ return !data.length
62
+ ? trxOrKnex.from(lockTableWithSchema).insert({ is_locked: 0 })
63
+ : null;
64
+ });
65
+ }
66
+
67
+ //Get schema-aware schema builder for a given schema nam
68
+ function getSchemaBuilder(trxOrKnex, schemaName) {
69
+ return schemaName
70
+ ? trxOrKnex.schema.withSchema(schemaName)
71
+ : trxOrKnex.schema;
72
+ }
73
+
74
+ module.exports = {
75
+ ensureTable,
76
+ getSchemaBuilder,
77
+ };
@@ -1,27 +1,27 @@
1
- //Get schema-aware table name
2
- function getTableName(tableName, schemaName) {
3
- return schemaName ? `${schemaName}.${tableName}` : tableName;
4
- }
5
-
6
- //Get schema-aware query builder for a given table and schema name
7
- function getTable(trxOrKnex, tableName, schemaName) {
8
- return schemaName
9
- ? trxOrKnex(tableName).withSchema(schemaName)
10
- : trxOrKnex(tableName);
11
- }
12
- function getLockTableName(tableName) {
13
- return tableName + '_lock';
14
- }
15
-
16
- function getLockTableNameWithSchema(tableName, schemaName) {
17
- return schemaName
18
- ? schemaName + '.' + getLockTableName(tableName)
19
- : getLockTableName(tableName);
20
- }
21
-
22
- module.exports = {
23
- getLockTableName,
24
- getLockTableNameWithSchema,
25
- getTable,
26
- getTableName,
27
- };
1
+ //Get schema-aware table name
2
+ function getTableName(tableName, schemaName) {
3
+ return schemaName ? `${schemaName}.${tableName}` : tableName;
4
+ }
5
+
6
+ //Get schema-aware query builder for a given table and schema name
7
+ function getTable(trxOrKnex, tableName, schemaName) {
8
+ return schemaName
9
+ ? trxOrKnex(tableName).withSchema(schemaName)
10
+ : trxOrKnex(tableName);
11
+ }
12
+ function getLockTableName(tableName) {
13
+ return tableName + '_lock';
14
+ }
15
+
16
+ function getLockTableNameWithSchema(tableName, schemaName) {
17
+ return schemaName
18
+ ? schemaName + '.' + getLockTableName(tableName)
19
+ : getLockTableName(tableName);
20
+ }
21
+
22
+ module.exports = {
23
+ getLockTableName,
24
+ getLockTableNameWithSchema,
25
+ getTable,
26
+ getTableName,
27
+ };