knex 3.2.3 → 3.2.4
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/CHANGELOG.md +2447 -2441
- package/CONTRIBUTING.md +190 -190
- package/LICENSE +22 -22
- package/README.md +156 -156
- package/UPGRADING.md +245 -245
- package/bin/cli.js +516 -516
- package/bin/knexfile-runtime-error.js +27 -27
- package/bin/utils/cli-config-utils.js +217 -217
- package/bin/utils/constants.js +7 -7
- package/bin/utils/migrationsLister.js +37 -37
- package/knex.js +23 -23
- package/knex.mjs +11 -11
- package/lib/builder-interface-augmenter.js +120 -120
- package/lib/client.js +585 -585
- package/lib/constants.js +61 -61
- package/lib/dialects/better-sqlite3/index.js +101 -101
- package/lib/dialects/cockroachdb/crdb-columncompiler.js +14 -14
- package/lib/dialects/cockroachdb/crdb-querybuilder.js +11 -11
- package/lib/dialects/cockroachdb/crdb-querycompiler.js +122 -122
- package/lib/dialects/cockroachdb/crdb-tablecompiler.js +46 -46
- package/lib/dialects/cockroachdb/crdb-viewcompiler.js +15 -15
- package/lib/dialects/cockroachdb/index.js +86 -86
- package/lib/dialects/index.js +34 -34
- package/lib/dialects/mssql/index.js +498 -498
- package/lib/dialects/mssql/mssql-formatter.js +34 -34
- package/lib/dialects/mssql/query/mssql-querycompiler.js +601 -601
- package/lib/dialects/mssql/schema/mssql-columncompiler.js +185 -185
- package/lib/dialects/mssql/schema/mssql-compiler.js +91 -91
- package/lib/dialects/mssql/schema/mssql-tablecompiler.js +393 -393
- package/lib/dialects/mssql/schema/mssql-viewcompiler.js +55 -55
- package/lib/dialects/mssql/transaction.js +176 -176
- package/lib/dialects/mysql/index.js +317 -317
- package/lib/dialects/mysql/query/mysql-querybuilder.js +14 -14
- package/lib/dialects/mysql/query/mysql-querycompiler.js +292 -292
- package/lib/dialects/mysql/schema/mysql-columncompiler.js +193 -193
- package/lib/dialects/mysql/schema/mysql-compiler.js +60 -60
- package/lib/dialects/mysql/schema/mysql-tablecompiler.js +426 -426
- package/lib/dialects/mysql/schema/mysql-viewbuilder.js +21 -21
- package/lib/dialects/mysql/schema/mysql-viewcompiler.js +15 -15
- package/lib/dialects/mysql/transaction.js +46 -46
- package/lib/dialects/mysql2/index.js +53 -53
- package/lib/dialects/mysql2/transaction.js +44 -44
- package/lib/dialects/oracle/DEAD_CODE.md +5 -5
- package/lib/dialects/oracle/index.js +92 -92
- package/lib/dialects/oracle/query/oracle-querycompiler.js +343 -343
- package/lib/dialects/oracle/schema/internal/incrementUtils.js +22 -22
- package/lib/dialects/oracle/schema/internal/trigger.js +155 -155
- package/lib/dialects/oracle/schema/oracle-columnbuilder.js +17 -17
- package/lib/dialects/oracle/schema/oracle-columncompiler.js +126 -126
- package/lib/dialects/oracle/schema/oracle-compiler.js +124 -124
- package/lib/dialects/oracle/schema/oracle-tablecompiler.js +210 -210
- package/lib/dialects/oracle/utils.js +107 -107
- package/lib/dialects/oracledb/index.js +381 -381
- package/lib/dialects/oracledb/query/oracledb-querycompiler.js +481 -481
- package/lib/dialects/oracledb/schema/oracledb-columncompiler.js +61 -61
- package/lib/dialects/oracledb/schema/oracledb-tablecompiler.js +19 -19
- package/lib/dialects/oracledb/schema/oracledb-viewbuilder.js +13 -13
- package/lib/dialects/oracledb/schema/oracledb-viewcompiler.js +19 -19
- package/lib/dialects/oracledb/transaction.js +98 -98
- package/lib/dialects/oracledb/utils.js +208 -208
- package/lib/dialects/pgnative/index.js +60 -60
- package/lib/dialects/postgres/execution/pg-transaction.js +19 -19
- package/lib/dialects/postgres/index.js +373 -373
- package/lib/dialects/postgres/query/pg-querybuilder.js +43 -43
- package/lib/dialects/postgres/query/pg-querycompiler.js +400 -400
- package/lib/dialects/postgres/schema/pg-columncompiler.js +162 -162
- package/lib/dialects/postgres/schema/pg-compiler.js +138 -138
- package/lib/dialects/postgres/schema/pg-tablecompiler.js +331 -331
- package/lib/dialects/postgres/schema/pg-viewbuilder.js +21 -21
- package/lib/dialects/postgres/schema/pg-viewcompiler.js +35 -35
- package/lib/dialects/redshift/index.js +86 -86
- package/lib/dialects/redshift/query/redshift-querycompiler.js +163 -163
- package/lib/dialects/redshift/schema/redshift-columnbuilder.js +22 -22
- package/lib/dialects/redshift/schema/redshift-columncompiler.js +67 -67
- package/lib/dialects/redshift/schema/redshift-compiler.js +14 -14
- package/lib/dialects/redshift/schema/redshift-tablecompiler.js +134 -134
- package/lib/dialects/redshift/schema/redshift-viewcompiler.js +11 -11
- package/lib/dialects/redshift/transaction.js +32 -32
- package/lib/dialects/sqlite3/execution/sqlite-transaction.js +172 -172
- package/lib/dialects/sqlite3/index.js +263 -263
- package/lib/dialects/sqlite3/query/sqlite-querybuilder.js +33 -33
- package/lib/dialects/sqlite3/query/sqlite-querycompiler.js +341 -341
- package/lib/dialects/sqlite3/schema/ddl.js +380 -380
- package/lib/dialects/sqlite3/schema/internal/compiler.js +327 -327
- package/lib/dialects/sqlite3/schema/internal/parser-combinator.js +161 -161
- package/lib/dialects/sqlite3/schema/internal/parser.js +638 -638
- package/lib/dialects/sqlite3/schema/internal/sqlite-ddl-operations.js +41 -41
- package/lib/dialects/sqlite3/schema/internal/tokenizer.js +38 -38
- package/lib/dialects/sqlite3/schema/internal/utils.js +12 -12
- package/lib/dialects/sqlite3/schema/sqlite-columncompiler.js +50 -50
- package/lib/dialects/sqlite3/schema/sqlite-compiler.js +80 -80
- package/lib/dialects/sqlite3/schema/sqlite-tablecompiler.js +364 -364
- package/lib/dialects/sqlite3/schema/sqlite-viewcompiler.js +40 -40
- package/lib/execution/batch-insert.js +51 -51
- package/lib/execution/internal/delay.js +6 -6
- package/lib/execution/internal/ensure-connection-callback.js +41 -41
- package/lib/execution/internal/query-executioner.js +62 -62
- package/lib/execution/runner.js +325 -325
- package/lib/execution/transaction.js +417 -417
- package/lib/formatter/formatterUtils.js +42 -42
- package/lib/formatter/rawFormatter.js +84 -84
- package/lib/formatter/wrappingFormatter.js +253 -253
- package/lib/formatter.js +25 -25
- package/lib/index.js +3 -3
- package/lib/knex-builder/FunctionHelper.js +80 -80
- package/lib/knex-builder/Knex.js +59 -59
- package/lib/knex-builder/internal/config-resolver.js +57 -57
- package/lib/knex-builder/internal/parse-connection.js +87 -87
- package/lib/knex-builder/make-knex.js +345 -345
- package/lib/logger.js +76 -76
- package/lib/migrations/common/MigrationsLoader.js +36 -36
- package/lib/migrations/migrate/MigrationGenerator.js +84 -84
- package/lib/migrations/migrate/Migrator.js +632 -632
- package/lib/migrations/migrate/migrate-stub.js +17 -17
- package/lib/migrations/migrate/migration-list-resolver.js +33 -33
- package/lib/migrations/migrate/migrator-configuration-merger.js +58 -58
- package/lib/migrations/migrate/sources/fs-migrations.js +74 -74
- package/lib/migrations/migrate/stub/cjs.stub +15 -15
- package/lib/migrations/migrate/stub/coffee.stub +13 -13
- package/lib/migrations/migrate/stub/eg.stub +14 -14
- package/lib/migrations/migrate/stub/js-schema.stub +22 -22
- package/lib/migrations/migrate/stub/js.stub +22 -22
- package/lib/migrations/migrate/stub/knexfile-coffee.stub +34 -34
- package/lib/migrations/migrate/stub/knexfile-eg.stub +43 -43
- package/lib/migrations/migrate/stub/knexfile-js.stub +47 -47
- package/lib/migrations/migrate/stub/knexfile-ls.stub +35 -35
- package/lib/migrations/migrate/stub/knexfile-ts.stub +47 -47
- package/lib/migrations/migrate/stub/ls.stub +14 -14
- package/lib/migrations/migrate/stub/mjs.stub +23 -23
- package/lib/migrations/migrate/stub/ts-schema.stub +21 -21
- package/lib/migrations/migrate/stub/ts.stub +21 -21
- package/lib/migrations/migrate/table-creator.js +77 -77
- package/lib/migrations/migrate/table-resolver.js +27 -27
- package/lib/migrations/seed/Seeder.js +137 -137
- package/lib/migrations/seed/seed-stub.js +13 -13
- package/lib/migrations/seed/seeder-configuration-merger.js +60 -60
- package/lib/migrations/seed/sources/fs-seeds.js +65 -65
- package/lib/migrations/seed/stub/coffee.stub +9 -9
- package/lib/migrations/seed/stub/eg.stub +11 -11
- package/lib/migrations/seed/stub/js.stub +13 -13
- package/lib/migrations/seed/stub/ls.stub +11 -11
- package/lib/migrations/seed/stub/mjs.stub +12 -12
- package/lib/migrations/seed/stub/ts.stub +13 -13
- package/lib/migrations/util/fs.js +86 -86
- package/lib/migrations/util/import-file.js +12 -12
- package/lib/migrations/util/is-module-type.js +9 -9
- package/lib/migrations/util/template.js +52 -52
- package/lib/migrations/util/timestamp.js +14 -14
- package/lib/query/analytic.js +52 -52
- package/lib/query/constants.js +15 -15
- package/lib/query/joinclause.js +270 -270
- package/lib/query/method-constants.js +136 -136
- package/lib/query/querybuilder.js +1793 -1793
- package/lib/query/querycompiler.js +1634 -1634
- package/lib/raw.js +139 -139
- package/lib/ref.js +39 -39
- package/lib/schema/builder.js +115 -115
- package/lib/schema/columnbuilder.js +146 -146
- package/lib/schema/columncompiler.js +307 -307
- package/lib/schema/compiler.js +187 -187
- package/lib/schema/internal/helpers.js +55 -55
- package/lib/schema/tablebuilder.js +379 -379
- package/lib/schema/tablecompiler.js +450 -450
- package/lib/schema/viewbuilder.js +92 -92
- package/lib/schema/viewcompiler.js +138 -138
- package/lib/util/finally-mixin.js +13 -13
- package/lib/util/helpers.js +95 -95
- package/lib/util/is.js +32 -32
- package/lib/util/nanoid.js +40 -40
- package/lib/util/noop.js +1 -1
- package/lib/util/save-async-stack.js +14 -14
- package/lib/util/security.js +32 -32
- package/lib/util/string.js +190 -190
- package/lib/util/timeout.js +29 -29
- package/package.json +294 -293
- package/scripts/act-testing/act.sh +19 -19
- package/scripts/act-testing/merged-no-label.json +11 -11
- package/scripts/act-testing/merged-patch-labeled.json +12 -12
- package/scripts/act-testing/merged-skip-labeled.json +12 -12
- package/scripts/act-testing/not-merged-patch-labeled.json +12 -12
- package/scripts/build-for-release.sh +121 -121
- package/scripts/build.js +125 -125
- package/scripts/clean.js +31 -31
- package/scripts/docker-compose.yml +150 -150
- package/scripts/format-changelog.js +55 -55
- package/scripts/next-release-howto.md +24 -24
- package/scripts/oracledb-install-driver-libs.sh +82 -82
- package/scripts/release.sh +36 -36
- package/scripts/runkit-example.js +35 -35
- package/scripts/stress-test/README.txt +18 -18
- package/scripts/stress-test/docker-compose.yml +55 -55
- package/scripts/stress-test/knex-stress-test.js +212 -212
- package/scripts/stress-test/mysql2-random-hanging-every-now-and-then.js +149 -149
- package/scripts/stress-test/mysql2-sudden-exit-without-error.js +101 -101
- package/scripts/stress-test/reconnect-test-mysql-based-drivers.js +188 -188
- package/types/index.d.mts +11 -0
- package/types/index.d.ts +3321 -3321
- package/types/result.d.ts +27 -27
- package/types/tables.d.ts +4 -4
|
@@ -1,41 +1,41 @@
|
|
|
1
|
-
function copyData(sourceTable, targetTable, columns) {
|
|
2
|
-
return `INSERT INTO "${targetTable}" SELECT ${
|
|
3
|
-
columns === undefined
|
|
4
|
-
? '*'
|
|
5
|
-
: columns.map((column) => `"${column}"`).join(', ')
|
|
6
|
-
} FROM "${sourceTable}";`;
|
|
7
|
-
}
|
|
8
|
-
|
|
9
|
-
function dropOriginal(tableName) {
|
|
10
|
-
return `DROP TABLE "${tableName}"`;
|
|
11
|
-
}
|
|
12
|
-
|
|
13
|
-
function renameTable(tableName, alteredName) {
|
|
14
|
-
return `ALTER TABLE "${tableName}" RENAME TO "${alteredName}"`;
|
|
15
|
-
}
|
|
16
|
-
|
|
17
|
-
function getTableSql(tableName) {
|
|
18
|
-
return `SELECT type, sql FROM sqlite_master WHERE (type='table' OR (type='index' AND sql IS NOT NULL)) AND lower(tbl_name)='${tableName.toLowerCase()}'`;
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
function isForeignCheckEnabled() {
|
|
22
|
-
return `PRAGMA foreign_keys`;
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
function setForeignCheck(enable) {
|
|
26
|
-
return `PRAGMA foreign_keys = ${enable ? 'ON' : 'OFF'}`;
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
function executeForeignCheck() {
|
|
30
|
-
return `PRAGMA foreign_key_check`;
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
module.exports = {
|
|
34
|
-
copyData,
|
|
35
|
-
dropOriginal,
|
|
36
|
-
renameTable,
|
|
37
|
-
getTableSql,
|
|
38
|
-
isForeignCheckEnabled,
|
|
39
|
-
setForeignCheck,
|
|
40
|
-
executeForeignCheck,
|
|
41
|
-
};
|
|
1
|
+
function copyData(sourceTable, targetTable, columns) {
|
|
2
|
+
return `INSERT INTO "${targetTable}" SELECT ${
|
|
3
|
+
columns === undefined
|
|
4
|
+
? '*'
|
|
5
|
+
: columns.map((column) => `"${column}"`).join(', ')
|
|
6
|
+
} FROM "${sourceTable}";`;
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
function dropOriginal(tableName) {
|
|
10
|
+
return `DROP TABLE "${tableName}"`;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
function renameTable(tableName, alteredName) {
|
|
14
|
+
return `ALTER TABLE "${tableName}" RENAME TO "${alteredName}"`;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
function getTableSql(tableName) {
|
|
18
|
+
return `SELECT type, sql FROM sqlite_master WHERE (type='table' OR (type='index' AND sql IS NOT NULL)) AND lower(tbl_name)='${tableName.toLowerCase()}'`;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
function isForeignCheckEnabled() {
|
|
22
|
+
return `PRAGMA foreign_keys`;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
function setForeignCheck(enable) {
|
|
26
|
+
return `PRAGMA foreign_keys = ${enable ? 'ON' : 'OFF'}`;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
function executeForeignCheck() {
|
|
30
|
+
return `PRAGMA foreign_key_check`;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
module.exports = {
|
|
34
|
+
copyData,
|
|
35
|
+
dropOriginal,
|
|
36
|
+
renameTable,
|
|
37
|
+
getTableSql,
|
|
38
|
+
isForeignCheckEnabled,
|
|
39
|
+
setForeignCheck,
|
|
40
|
+
executeForeignCheck,
|
|
41
|
+
};
|
|
@@ -1,38 +1,38 @@
|
|
|
1
|
-
function tokenize(text, tokens) {
|
|
2
|
-
const compiledRegex = new RegExp(
|
|
3
|
-
Object.entries(tokens)
|
|
4
|
-
.map(([type, regex]) => `(?<${type}>${regex.source})`)
|
|
5
|
-
.join('|'),
|
|
6
|
-
'yi'
|
|
7
|
-
);
|
|
8
|
-
|
|
9
|
-
let index = 0;
|
|
10
|
-
const ast = [];
|
|
11
|
-
|
|
12
|
-
while (index < text.length) {
|
|
13
|
-
compiledRegex.lastIndex = index;
|
|
14
|
-
const result = text.match(compiledRegex);
|
|
15
|
-
|
|
16
|
-
if (result !== null) {
|
|
17
|
-
const [type, text] = Object.entries(result.groups).find(
|
|
18
|
-
([name, group]) => group !== undefined
|
|
19
|
-
);
|
|
20
|
-
|
|
21
|
-
index += text.length;
|
|
22
|
-
|
|
23
|
-
if (!type.startsWith('_')) {
|
|
24
|
-
ast.push({ type, text });
|
|
25
|
-
}
|
|
26
|
-
} else {
|
|
27
|
-
throw new Error(
|
|
28
|
-
`No matching tokenizer rule found at: [${text.substring(index)}]`
|
|
29
|
-
);
|
|
30
|
-
}
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
return ast;
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
module.exports = {
|
|
37
|
-
tokenize,
|
|
38
|
-
};
|
|
1
|
+
function tokenize(text, tokens) {
|
|
2
|
+
const compiledRegex = new RegExp(
|
|
3
|
+
Object.entries(tokens)
|
|
4
|
+
.map(([type, regex]) => `(?<${type}>${regex.source})`)
|
|
5
|
+
.join('|'),
|
|
6
|
+
'yi'
|
|
7
|
+
);
|
|
8
|
+
|
|
9
|
+
let index = 0;
|
|
10
|
+
const ast = [];
|
|
11
|
+
|
|
12
|
+
while (index < text.length) {
|
|
13
|
+
compiledRegex.lastIndex = index;
|
|
14
|
+
const result = text.match(compiledRegex);
|
|
15
|
+
|
|
16
|
+
if (result !== null) {
|
|
17
|
+
const [type, text] = Object.entries(result.groups).find(
|
|
18
|
+
([name, group]) => group !== undefined
|
|
19
|
+
);
|
|
20
|
+
|
|
21
|
+
index += text.length;
|
|
22
|
+
|
|
23
|
+
if (!type.startsWith('_')) {
|
|
24
|
+
ast.push({ type, text });
|
|
25
|
+
}
|
|
26
|
+
} else {
|
|
27
|
+
throw new Error(
|
|
28
|
+
`No matching tokenizer rule found at: [${text.substring(index)}]`
|
|
29
|
+
);
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
return ast;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
module.exports = {
|
|
37
|
+
tokenize,
|
|
38
|
+
};
|
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
function isEqualId(first, second) {
|
|
2
|
-
return first.toLowerCase() === second.toLowerCase();
|
|
3
|
-
}
|
|
4
|
-
|
|
5
|
-
function includesId(list, id) {
|
|
6
|
-
return list.some((item) => isEqualId(item, id));
|
|
7
|
-
}
|
|
8
|
-
|
|
9
|
-
module.exports = {
|
|
10
|
-
isEqualId,
|
|
11
|
-
includesId,
|
|
12
|
-
};
|
|
1
|
+
function isEqualId(first, second) {
|
|
2
|
+
return first.toLowerCase() === second.toLowerCase();
|
|
3
|
+
}
|
|
4
|
+
|
|
5
|
+
function includesId(list, id) {
|
|
6
|
+
return list.some((item) => isEqualId(item, id));
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
module.exports = {
|
|
10
|
+
isEqualId,
|
|
11
|
+
includesId,
|
|
12
|
+
};
|
|
@@ -1,50 +1,50 @@
|
|
|
1
|
-
const ColumnCompiler = require('../../../schema/columncompiler');
|
|
2
|
-
|
|
3
|
-
// Column Compiler
|
|
4
|
-
// -------
|
|
5
|
-
|
|
6
|
-
class ColumnCompiler_SQLite3 extends ColumnCompiler {
|
|
7
|
-
constructor() {
|
|
8
|
-
super(...arguments);
|
|
9
|
-
this.modifiers = ['nullable', 'defaultTo'];
|
|
10
|
-
this._addCheckModifiers();
|
|
11
|
-
}
|
|
12
|
-
|
|
13
|
-
// Types
|
|
14
|
-
// -------
|
|
15
|
-
|
|
16
|
-
enu(allowed) {
|
|
17
|
-
return `text check (${this.formatter.wrap(
|
|
18
|
-
this.args[0]
|
|
19
|
-
)} in ('${allowed.join("', '")}'))`;
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
_pushAlterCheckQuery(checkPredicate, constraintName) {
|
|
23
|
-
throw new Error(
|
|
24
|
-
`Alter table with to add constraints is not permitted in SQLite`
|
|
25
|
-
);
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
checkRegex(regexes, constraintName) {
|
|
29
|
-
return this._check(
|
|
30
|
-
`${this.formatter.wrap(
|
|
31
|
-
this.getColumnName()
|
|
32
|
-
)} REGEXP ${this.client._escapeBinding(regexes)}`,
|
|
33
|
-
constraintName
|
|
34
|
-
);
|
|
35
|
-
}
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
ColumnCompiler_SQLite3.prototype.json = 'json';
|
|
39
|
-
ColumnCompiler_SQLite3.prototype.jsonb = 'json';
|
|
40
|
-
ColumnCompiler_SQLite3.prototype.double =
|
|
41
|
-
ColumnCompiler_SQLite3.prototype.decimal =
|
|
42
|
-
ColumnCompiler_SQLite3.prototype.floating =
|
|
43
|
-
'float';
|
|
44
|
-
ColumnCompiler_SQLite3.prototype.timestamp = 'datetime';
|
|
45
|
-
// autoincrement without primary key is a syntax error in SQLite, so it's necessary
|
|
46
|
-
ColumnCompiler_SQLite3.prototype.increments =
|
|
47
|
-
ColumnCompiler_SQLite3.prototype.bigincrements =
|
|
48
|
-
'integer not null primary key autoincrement';
|
|
49
|
-
|
|
50
|
-
module.exports = ColumnCompiler_SQLite3;
|
|
1
|
+
const ColumnCompiler = require('../../../schema/columncompiler');
|
|
2
|
+
|
|
3
|
+
// Column Compiler
|
|
4
|
+
// -------
|
|
5
|
+
|
|
6
|
+
class ColumnCompiler_SQLite3 extends ColumnCompiler {
|
|
7
|
+
constructor() {
|
|
8
|
+
super(...arguments);
|
|
9
|
+
this.modifiers = ['nullable', 'defaultTo'];
|
|
10
|
+
this._addCheckModifiers();
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
// Types
|
|
14
|
+
// -------
|
|
15
|
+
|
|
16
|
+
enu(allowed) {
|
|
17
|
+
return `text check (${this.formatter.wrap(
|
|
18
|
+
this.args[0]
|
|
19
|
+
)} in ('${allowed.join("', '")}'))`;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
_pushAlterCheckQuery(checkPredicate, constraintName) {
|
|
23
|
+
throw new Error(
|
|
24
|
+
`Alter table with to add constraints is not permitted in SQLite`
|
|
25
|
+
);
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
checkRegex(regexes, constraintName) {
|
|
29
|
+
return this._check(
|
|
30
|
+
`${this.formatter.wrap(
|
|
31
|
+
this.getColumnName()
|
|
32
|
+
)} REGEXP ${this.client._escapeBinding(regexes)}`,
|
|
33
|
+
constraintName
|
|
34
|
+
);
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
ColumnCompiler_SQLite3.prototype.json = 'json';
|
|
39
|
+
ColumnCompiler_SQLite3.prototype.jsonb = 'json';
|
|
40
|
+
ColumnCompiler_SQLite3.prototype.double =
|
|
41
|
+
ColumnCompiler_SQLite3.prototype.decimal =
|
|
42
|
+
ColumnCompiler_SQLite3.prototype.floating =
|
|
43
|
+
'float';
|
|
44
|
+
ColumnCompiler_SQLite3.prototype.timestamp = 'datetime';
|
|
45
|
+
// autoincrement without primary key is a syntax error in SQLite, so it's necessary
|
|
46
|
+
ColumnCompiler_SQLite3.prototype.increments =
|
|
47
|
+
ColumnCompiler_SQLite3.prototype.bigincrements =
|
|
48
|
+
'integer not null primary key autoincrement';
|
|
49
|
+
|
|
50
|
+
module.exports = ColumnCompiler_SQLite3;
|
|
@@ -1,80 +1,80 @@
|
|
|
1
|
-
// SQLite3: Column Builder & Compiler
|
|
2
|
-
// -------
|
|
3
|
-
const SchemaCompiler = require('../../../schema/compiler');
|
|
4
|
-
|
|
5
|
-
const some = require('lodash/some');
|
|
6
|
-
|
|
7
|
-
// Schema Compiler
|
|
8
|
-
// -------
|
|
9
|
-
|
|
10
|
-
class SchemaCompiler_SQLite3 extends SchemaCompiler {
|
|
11
|
-
constructor(client, builder) {
|
|
12
|
-
super(client, builder);
|
|
13
|
-
}
|
|
14
|
-
|
|
15
|
-
// Compile the query to determine if a table exists.
|
|
16
|
-
hasTable(tableName) {
|
|
17
|
-
const sql =
|
|
18
|
-
`select * from sqlite_master ` +
|
|
19
|
-
`where type = 'table' and name = ${this.client.parameter(
|
|
20
|
-
this.formatter.wrap(tableName).replace(/`/g, ''),
|
|
21
|
-
this.builder,
|
|
22
|
-
this.bindingsHolder
|
|
23
|
-
)}`;
|
|
24
|
-
this.pushQuery({ sql, output: (resp) => resp.length > 0 });
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
// Compile the query to determine if a column exists.
|
|
28
|
-
hasColumn(tableName, column) {
|
|
29
|
-
this.pushQuery({
|
|
30
|
-
sql: `PRAGMA table_info(${this.formatter.wrap(tableName)})`,
|
|
31
|
-
output(resp) {
|
|
32
|
-
return some(resp, (col) => {
|
|
33
|
-
return (
|
|
34
|
-
this.client.wrapIdentifier(col.name.toLowerCase()) ===
|
|
35
|
-
this.client.wrapIdentifier(column.toLowerCase())
|
|
36
|
-
);
|
|
37
|
-
});
|
|
38
|
-
},
|
|
39
|
-
});
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
// Compile a rename table command.
|
|
43
|
-
renameTable(from, to) {
|
|
44
|
-
this.pushQuery(
|
|
45
|
-
`alter table ${this.formatter.wrap(from)} rename to ${this.formatter.wrap(
|
|
46
|
-
to
|
|
47
|
-
)}`
|
|
48
|
-
);
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
async generateDdlCommands() {
|
|
52
|
-
const sequence = this.builder._sequence;
|
|
53
|
-
for (let i = 0, l = sequence.length; i < l; i++) {
|
|
54
|
-
const query = sequence[i];
|
|
55
|
-
this[query.method].apply(this, query.args);
|
|
56
|
-
}
|
|
57
|
-
|
|
58
|
-
const commandSources = this.sequence;
|
|
59
|
-
|
|
60
|
-
if (commandSources.length === 1 && commandSources[0].statementsProducer) {
|
|
61
|
-
return commandSources[0].statementsProducer();
|
|
62
|
-
} else {
|
|
63
|
-
const result = [];
|
|
64
|
-
|
|
65
|
-
for (const commandSource of commandSources) {
|
|
66
|
-
const command = commandSource.sql;
|
|
67
|
-
|
|
68
|
-
if (Array.isArray(command)) {
|
|
69
|
-
result.push(...command);
|
|
70
|
-
} else {
|
|
71
|
-
result.push(command);
|
|
72
|
-
}
|
|
73
|
-
}
|
|
74
|
-
|
|
75
|
-
return { pre: [], sql: result, check: null, post: [] };
|
|
76
|
-
}
|
|
77
|
-
}
|
|
78
|
-
}
|
|
79
|
-
|
|
80
|
-
module.exports = SchemaCompiler_SQLite3;
|
|
1
|
+
// SQLite3: Column Builder & Compiler
|
|
2
|
+
// -------
|
|
3
|
+
const SchemaCompiler = require('../../../schema/compiler');
|
|
4
|
+
|
|
5
|
+
const some = require('lodash/some');
|
|
6
|
+
|
|
7
|
+
// Schema Compiler
|
|
8
|
+
// -------
|
|
9
|
+
|
|
10
|
+
class SchemaCompiler_SQLite3 extends SchemaCompiler {
|
|
11
|
+
constructor(client, builder) {
|
|
12
|
+
super(client, builder);
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
// Compile the query to determine if a table exists.
|
|
16
|
+
hasTable(tableName) {
|
|
17
|
+
const sql =
|
|
18
|
+
`select * from sqlite_master ` +
|
|
19
|
+
`where type = 'table' and name = ${this.client.parameter(
|
|
20
|
+
this.formatter.wrap(tableName).replace(/`/g, ''),
|
|
21
|
+
this.builder,
|
|
22
|
+
this.bindingsHolder
|
|
23
|
+
)}`;
|
|
24
|
+
this.pushQuery({ sql, output: (resp) => resp.length > 0 });
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
// Compile the query to determine if a column exists.
|
|
28
|
+
hasColumn(tableName, column) {
|
|
29
|
+
this.pushQuery({
|
|
30
|
+
sql: `PRAGMA table_info(${this.formatter.wrap(tableName)})`,
|
|
31
|
+
output(resp) {
|
|
32
|
+
return some(resp, (col) => {
|
|
33
|
+
return (
|
|
34
|
+
this.client.wrapIdentifier(col.name.toLowerCase()) ===
|
|
35
|
+
this.client.wrapIdentifier(column.toLowerCase())
|
|
36
|
+
);
|
|
37
|
+
});
|
|
38
|
+
},
|
|
39
|
+
});
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
// Compile a rename table command.
|
|
43
|
+
renameTable(from, to) {
|
|
44
|
+
this.pushQuery(
|
|
45
|
+
`alter table ${this.formatter.wrap(from)} rename to ${this.formatter.wrap(
|
|
46
|
+
to
|
|
47
|
+
)}`
|
|
48
|
+
);
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
async generateDdlCommands() {
|
|
52
|
+
const sequence = this.builder._sequence;
|
|
53
|
+
for (let i = 0, l = sequence.length; i < l; i++) {
|
|
54
|
+
const query = sequence[i];
|
|
55
|
+
this[query.method].apply(this, query.args);
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
const commandSources = this.sequence;
|
|
59
|
+
|
|
60
|
+
if (commandSources.length === 1 && commandSources[0].statementsProducer) {
|
|
61
|
+
return commandSources[0].statementsProducer();
|
|
62
|
+
} else {
|
|
63
|
+
const result = [];
|
|
64
|
+
|
|
65
|
+
for (const commandSource of commandSources) {
|
|
66
|
+
const command = commandSource.sql;
|
|
67
|
+
|
|
68
|
+
if (Array.isArray(command)) {
|
|
69
|
+
result.push(...command);
|
|
70
|
+
} else {
|
|
71
|
+
result.push(command);
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
return { pre: [], sql: result, check: null, post: [] };
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
module.exports = SchemaCompiler_SQLite3;
|