knex 2.3.0 → 2.4.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.
- package/CHANGELOG.md +25 -0
- package/CONTRIBUTING.md +194 -194
- package/LICENSE +22 -22
- package/README.md +148 -148
- package/UPGRADING.md +233 -233
- package/bin/cli.js +472 -472
- package/bin/utils/cli-config-utils.js +210 -210
- package/bin/utils/constants.js +7 -7
- package/bin/utils/migrationsLister.js +37 -37
- package/knex.js +23 -23
- package/lib/builder-interface-augmenter.js +120 -120
- package/lib/client.js +475 -470
- package/lib/constants.js +61 -61
- package/lib/dialects/better-sqlite3/index.js +72 -72
- 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 +37 -37
- package/lib/dialects/cockroachdb/crdb-viewcompiler.js +15 -15
- package/lib/dialects/cockroachdb/index.js +86 -86
- package/lib/dialects/mssql/index.js +495 -495
- package/lib/dialects/mssql/mssql-formatter.js +34 -34
- package/lib/dialects/mssql/query/mssql-querycompiler.js +600 -600
- 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 +378 -372
- package/lib/dialects/mssql/schema/mssql-viewcompiler.js +55 -55
- package/lib/dialects/mssql/transaction.js +176 -176
- package/lib/dialects/mysql/index.js +201 -201
- package/lib/dialects/mysql/query/mysql-querycompiler.js +274 -248
- 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 +381 -381
- 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 +33 -33
- 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 +342 -342
- package/lib/dialects/oracle/schema/internal/incrementUtils.js +20 -20
- package/lib/dialects/oracle/schema/internal/trigger.js +135 -135
- 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 +122 -122
- package/lib/dialects/oracle/schema/oracle-tablecompiler.js +190 -190
- package/lib/dialects/oracle/utils.js +87 -87
- package/lib/dialects/oracledb/index.js +327 -327
- package/lib/dialects/oracledb/query/oracledb-querycompiler.js +481 -481
- package/lib/dialects/oracledb/schema/oracledb-columncompiler.js +55 -55
- 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 +12 -12
- package/lib/dialects/postgres/index.js +358 -358
- package/lib/dialects/postgres/query/pg-querybuilder.js +38 -38
- package/lib/dialects/postgres/query/pg-querycompiler.js +395 -395
- package/lib/dialects/postgres/schema/pg-columncompiler.js +156 -156
- package/lib/dialects/postgres/schema/pg-compiler.js +136 -136
- package/lib/dialects/postgres/schema/pg-tablecompiler.js +299 -275
- 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 +122 -122
- package/lib/dialects/redshift/schema/redshift-viewcompiler.js +11 -11
- package/lib/dialects/redshift/transaction.js +25 -25
- package/lib/dialects/sqlite3/execution/sqlite-transaction.js +18 -18
- package/lib/dialects/sqlite3/index.js +250 -250
- package/lib/dialects/sqlite3/query/sqlite-querybuilder.js +33 -33
- package/lib/dialects/sqlite3/query/sqlite-querycompiler.js +334 -334
- package/lib/dialects/sqlite3/schema/ddl.js +400 -400
- 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 +347 -341
- 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 -58
- package/lib/execution/runner.js +307 -307
- package/lib/execution/transaction.js +401 -401
- package/lib/formatter/formatterUtils.js +42 -42
- package/lib/formatter/rawFormatter.js +84 -84
- package/lib/formatter/wrappingFormatter.js +250 -250
- package/lib/formatter.js +25 -25
- package/lib/index.js +3 -3
- package/lib/knex-builder/FunctionHelper.js +54 -54
- 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 +340 -340
- package/lib/logger.js +76 -76
- package/lib/migrations/common/MigrationsLoader.js +36 -36
- package/lib/migrations/migrate/MigrationGenerator.js +82 -82
- package/lib/migrations/migrate/Migrator.js +598 -598
- 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 -15
- 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 +135 -135
- package/lib/query/querybuilder.js +1794 -1800
- package/lib/query/querycompiler.js +1580 -1580
- package/lib/raw.js +139 -139
- package/lib/ref.js +39 -39
- package/lib/schema/builder.js +114 -114
- package/lib/schema/columnbuilder.js +145 -145
- 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 +375 -375
- package/lib/schema/tablecompiler.js +433 -433
- package/lib/schema/viewbuilder.js +93 -93
- 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/string.js +190 -190
- package/lib/util/timeout.js +29 -29
- package/package.json +4 -4
- package/scripts/build.js +125 -125
- package/scripts/clean.js +29 -29
- package/scripts/docker-compose.yml +152 -152
- package/scripts/next-release-howto.md +24 -24
- package/scripts/oracledb-install-driver-libs.sh +82 -82
- package/scripts/release.sh +34 -34
- package/scripts/runkit-example.js +34 -34
- package/scripts/stress-test/README.txt +18 -18
- package/scripts/stress-test/docker-compose.yml +57 -57
- package/scripts/stress-test/knex-stress-test.js +208 -208
- package/scripts/stress-test/mysql2-random-hanging-every-now-and-then.js +145 -145
- package/scripts/stress-test/mysql2-sudden-exit-without-error.js +100 -100
- package/scripts/stress-test/reconnect-test-mysql-based-drivers.js +184 -184
- package/scripts/update_gitignore_for_tsc_output.js +86 -85
- package/types/index.d.ts +3233 -3230
- package/types/result.d.ts +27 -27
- package/types/tables.d.ts +4 -4
package/lib/constants.js
CHANGED
|
@@ -1,61 +1,61 @@
|
|
|
1
|
-
// The client names we'll allow in the `{name: lib}` pairing.
|
|
2
|
-
const CLIENT_ALIASES = Object.freeze({
|
|
3
|
-
pg: 'postgres',
|
|
4
|
-
postgresql: 'postgres',
|
|
5
|
-
sqlite: 'sqlite3',
|
|
6
|
-
});
|
|
7
|
-
|
|
8
|
-
const SUPPORTED_CLIENTS = Object.freeze(
|
|
9
|
-
[
|
|
10
|
-
'mssql',
|
|
11
|
-
'mysql',
|
|
12
|
-
'mysql2',
|
|
13
|
-
'oracledb',
|
|
14
|
-
'postgres',
|
|
15
|
-
'pgnative',
|
|
16
|
-
'redshift',
|
|
17
|
-
'sqlite3',
|
|
18
|
-
'cockroachdb',
|
|
19
|
-
'better-sqlite3',
|
|
20
|
-
].concat(Object.keys(CLIENT_ALIASES))
|
|
21
|
-
);
|
|
22
|
-
|
|
23
|
-
const DRIVER_NAMES = Object.freeze({
|
|
24
|
-
MsSQL: 'mssql',
|
|
25
|
-
MySQL: 'mysql',
|
|
26
|
-
MySQL2: 'mysql2',
|
|
27
|
-
Oracle: 'oracledb',
|
|
28
|
-
PostgreSQL: 'pg',
|
|
29
|
-
PgNative: 'pgnative',
|
|
30
|
-
Redshift: 'pg-redshift',
|
|
31
|
-
SQLite: 'sqlite3',
|
|
32
|
-
CockroachDB: 'cockroachdb',
|
|
33
|
-
BetterSQLite3: 'better-sqlite3',
|
|
34
|
-
});
|
|
35
|
-
|
|
36
|
-
const POOL_CONFIG_OPTIONS = Object.freeze([
|
|
37
|
-
'maxWaitingClients',
|
|
38
|
-
'testOnBorrow',
|
|
39
|
-
'fifo',
|
|
40
|
-
'priorityRange',
|
|
41
|
-
'autostart',
|
|
42
|
-
'evictionRunIntervalMillis',
|
|
43
|
-
'numTestsPerRun',
|
|
44
|
-
'softIdleTimeoutMillis',
|
|
45
|
-
'Promise',
|
|
46
|
-
]);
|
|
47
|
-
|
|
48
|
-
/**
|
|
49
|
-
* Regex that only matches comma's in strings that aren't wrapped in parentheses. Can be used to
|
|
50
|
-
* safely split strings like `id int, name string, body text, primary key (id, name)` into definition
|
|
51
|
-
* rows
|
|
52
|
-
*/
|
|
53
|
-
const COMMA_NO_PAREN_REGEX = /,[\s](?![^(]*\))/g;
|
|
54
|
-
|
|
55
|
-
module.exports = {
|
|
56
|
-
CLIENT_ALIASES,
|
|
57
|
-
SUPPORTED_CLIENTS,
|
|
58
|
-
POOL_CONFIG_OPTIONS,
|
|
59
|
-
COMMA_NO_PAREN_REGEX,
|
|
60
|
-
DRIVER_NAMES,
|
|
61
|
-
};
|
|
1
|
+
// The client names we'll allow in the `{name: lib}` pairing.
|
|
2
|
+
const CLIENT_ALIASES = Object.freeze({
|
|
3
|
+
pg: 'postgres',
|
|
4
|
+
postgresql: 'postgres',
|
|
5
|
+
sqlite: 'sqlite3',
|
|
6
|
+
});
|
|
7
|
+
|
|
8
|
+
const SUPPORTED_CLIENTS = Object.freeze(
|
|
9
|
+
[
|
|
10
|
+
'mssql',
|
|
11
|
+
'mysql',
|
|
12
|
+
'mysql2',
|
|
13
|
+
'oracledb',
|
|
14
|
+
'postgres',
|
|
15
|
+
'pgnative',
|
|
16
|
+
'redshift',
|
|
17
|
+
'sqlite3',
|
|
18
|
+
'cockroachdb',
|
|
19
|
+
'better-sqlite3',
|
|
20
|
+
].concat(Object.keys(CLIENT_ALIASES))
|
|
21
|
+
);
|
|
22
|
+
|
|
23
|
+
const DRIVER_NAMES = Object.freeze({
|
|
24
|
+
MsSQL: 'mssql',
|
|
25
|
+
MySQL: 'mysql',
|
|
26
|
+
MySQL2: 'mysql2',
|
|
27
|
+
Oracle: 'oracledb',
|
|
28
|
+
PostgreSQL: 'pg',
|
|
29
|
+
PgNative: 'pgnative',
|
|
30
|
+
Redshift: 'pg-redshift',
|
|
31
|
+
SQLite: 'sqlite3',
|
|
32
|
+
CockroachDB: 'cockroachdb',
|
|
33
|
+
BetterSQLite3: 'better-sqlite3',
|
|
34
|
+
});
|
|
35
|
+
|
|
36
|
+
const POOL_CONFIG_OPTIONS = Object.freeze([
|
|
37
|
+
'maxWaitingClients',
|
|
38
|
+
'testOnBorrow',
|
|
39
|
+
'fifo',
|
|
40
|
+
'priorityRange',
|
|
41
|
+
'autostart',
|
|
42
|
+
'evictionRunIntervalMillis',
|
|
43
|
+
'numTestsPerRun',
|
|
44
|
+
'softIdleTimeoutMillis',
|
|
45
|
+
'Promise',
|
|
46
|
+
]);
|
|
47
|
+
|
|
48
|
+
/**
|
|
49
|
+
* Regex that only matches comma's in strings that aren't wrapped in parentheses. Can be used to
|
|
50
|
+
* safely split strings like `id int, name string, body text, primary key (id, name)` into definition
|
|
51
|
+
* rows
|
|
52
|
+
*/
|
|
53
|
+
const COMMA_NO_PAREN_REGEX = /,[\s](?![^(]*\))/g;
|
|
54
|
+
|
|
55
|
+
module.exports = {
|
|
56
|
+
CLIENT_ALIASES,
|
|
57
|
+
SUPPORTED_CLIENTS,
|
|
58
|
+
POOL_CONFIG_OPTIONS,
|
|
59
|
+
COMMA_NO_PAREN_REGEX,
|
|
60
|
+
DRIVER_NAMES,
|
|
61
|
+
};
|
|
@@ -1,72 +1,72 @@
|
|
|
1
|
-
// better-sqlite3 Client
|
|
2
|
-
// -------
|
|
3
|
-
const Client_SQLite3 = require('../sqlite3');
|
|
4
|
-
|
|
5
|
-
class Client_BetterSQLite3 extends Client_SQLite3 {
|
|
6
|
-
_driver() {
|
|
7
|
-
return require('better-sqlite3');
|
|
8
|
-
}
|
|
9
|
-
|
|
10
|
-
// Get a raw connection from the database, returning a promise with the connection object.
|
|
11
|
-
async acquireRawConnection() {
|
|
12
|
-
return new this.driver(this.connectionSettings.filename);
|
|
13
|
-
}
|
|
14
|
-
|
|
15
|
-
// Used to explicitly close a connection, called internally by the pool when
|
|
16
|
-
// a connection times out or the pool is shutdown.
|
|
17
|
-
async destroyRawConnection(connection) {
|
|
18
|
-
return connection.close();
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
// Runs the query on the specified connection, providing the bindings and any
|
|
22
|
-
// other necessary prep work.
|
|
23
|
-
async _query(connection, obj) {
|
|
24
|
-
if (!obj.sql) throw new Error('The query is empty');
|
|
25
|
-
|
|
26
|
-
if (!connection) {
|
|
27
|
-
throw new Error('No connection provided');
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
const statement = connection.prepare(obj.sql);
|
|
31
|
-
const bindings = this._formatBindings(obj.bindings);
|
|
32
|
-
|
|
33
|
-
if (statement.reader) {
|
|
34
|
-
const response = await statement.all(bindings);
|
|
35
|
-
obj.response = response;
|
|
36
|
-
return obj;
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
const response = await statement.run(bindings);
|
|
40
|
-
obj.response = response;
|
|
41
|
-
obj.context = {
|
|
42
|
-
lastID: response.lastInsertRowid,
|
|
43
|
-
changes: response.changes,
|
|
44
|
-
};
|
|
45
|
-
|
|
46
|
-
return obj;
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
_formatBindings(bindings) {
|
|
50
|
-
if (!bindings) {
|
|
51
|
-
return [];
|
|
52
|
-
}
|
|
53
|
-
return bindings.map((binding) => {
|
|
54
|
-
if (binding instanceof Date) {
|
|
55
|
-
return binding.valueOf();
|
|
56
|
-
}
|
|
57
|
-
|
|
58
|
-
if (typeof binding === 'boolean') {
|
|
59
|
-
return Number(binding);
|
|
60
|
-
}
|
|
61
|
-
|
|
62
|
-
return binding;
|
|
63
|
-
});
|
|
64
|
-
}
|
|
65
|
-
}
|
|
66
|
-
|
|
67
|
-
Object.assign(Client_BetterSQLite3.prototype, {
|
|
68
|
-
// The "dialect", for reference .
|
|
69
|
-
driverName: 'better-sqlite3',
|
|
70
|
-
});
|
|
71
|
-
|
|
72
|
-
module.exports = Client_BetterSQLite3;
|
|
1
|
+
// better-sqlite3 Client
|
|
2
|
+
// -------
|
|
3
|
+
const Client_SQLite3 = require('../sqlite3');
|
|
4
|
+
|
|
5
|
+
class Client_BetterSQLite3 extends Client_SQLite3 {
|
|
6
|
+
_driver() {
|
|
7
|
+
return require('better-sqlite3');
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
// Get a raw connection from the database, returning a promise with the connection object.
|
|
11
|
+
async acquireRawConnection() {
|
|
12
|
+
return new this.driver(this.connectionSettings.filename);
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
// Used to explicitly close a connection, called internally by the pool when
|
|
16
|
+
// a connection times out or the pool is shutdown.
|
|
17
|
+
async destroyRawConnection(connection) {
|
|
18
|
+
return connection.close();
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
// Runs the query on the specified connection, providing the bindings and any
|
|
22
|
+
// other necessary prep work.
|
|
23
|
+
async _query(connection, obj) {
|
|
24
|
+
if (!obj.sql) throw new Error('The query is empty');
|
|
25
|
+
|
|
26
|
+
if (!connection) {
|
|
27
|
+
throw new Error('No connection provided');
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
const statement = connection.prepare(obj.sql);
|
|
31
|
+
const bindings = this._formatBindings(obj.bindings);
|
|
32
|
+
|
|
33
|
+
if (statement.reader) {
|
|
34
|
+
const response = await statement.all(bindings);
|
|
35
|
+
obj.response = response;
|
|
36
|
+
return obj;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
const response = await statement.run(bindings);
|
|
40
|
+
obj.response = response;
|
|
41
|
+
obj.context = {
|
|
42
|
+
lastID: response.lastInsertRowid,
|
|
43
|
+
changes: response.changes,
|
|
44
|
+
};
|
|
45
|
+
|
|
46
|
+
return obj;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
_formatBindings(bindings) {
|
|
50
|
+
if (!bindings) {
|
|
51
|
+
return [];
|
|
52
|
+
}
|
|
53
|
+
return bindings.map((binding) => {
|
|
54
|
+
if (binding instanceof Date) {
|
|
55
|
+
return binding.valueOf();
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
if (typeof binding === 'boolean') {
|
|
59
|
+
return Number(binding);
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
return binding;
|
|
63
|
+
});
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
Object.assign(Client_BetterSQLite3.prototype, {
|
|
68
|
+
// The "dialect", for reference .
|
|
69
|
+
driverName: 'better-sqlite3',
|
|
70
|
+
});
|
|
71
|
+
|
|
72
|
+
module.exports = Client_BetterSQLite3;
|
|
@@ -1,14 +1,14 @@
|
|
|
1
|
-
const ColumnCompiler_PG = require('../postgres/schema/pg-columncompiler.js');
|
|
2
|
-
|
|
3
|
-
class ColumnCompiler_CRDB extends ColumnCompiler_PG {
|
|
4
|
-
uuid(options = { primaryKey: false }) {
|
|
5
|
-
return (
|
|
6
|
-
'uuid' +
|
|
7
|
-
(this.tableCompiler._canBeAddPrimaryKey(options)
|
|
8
|
-
? ' primary key default gen_random_uuid()'
|
|
9
|
-
: '')
|
|
10
|
-
);
|
|
11
|
-
}
|
|
12
|
-
}
|
|
13
|
-
|
|
14
|
-
module.exports = ColumnCompiler_CRDB;
|
|
1
|
+
const ColumnCompiler_PG = require('../postgres/schema/pg-columncompiler.js');
|
|
2
|
+
|
|
3
|
+
class ColumnCompiler_CRDB extends ColumnCompiler_PG {
|
|
4
|
+
uuid(options = { primaryKey: false }) {
|
|
5
|
+
return (
|
|
6
|
+
'uuid' +
|
|
7
|
+
(this.tableCompiler._canBeAddPrimaryKey(options)
|
|
8
|
+
? ' primary key default gen_random_uuid()'
|
|
9
|
+
: '')
|
|
10
|
+
);
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
module.exports = ColumnCompiler_CRDB;
|
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
const QueryBuilder = require('../../query/querybuilder');
|
|
2
|
-
const isEmpty = require('lodash/isEmpty');
|
|
3
|
-
|
|
4
|
-
module.exports = class QueryBuilder_CockroachDB extends QueryBuilder {
|
|
5
|
-
upsert(values, returning, options) {
|
|
6
|
-
this._method = 'upsert';
|
|
7
|
-
if (!isEmpty(returning)) this.returning(returning, options);
|
|
8
|
-
this._single.upsert = values;
|
|
9
|
-
return this;
|
|
10
|
-
}
|
|
11
|
-
};
|
|
1
|
+
const QueryBuilder = require('../../query/querybuilder');
|
|
2
|
+
const isEmpty = require('lodash/isEmpty');
|
|
3
|
+
|
|
4
|
+
module.exports = class QueryBuilder_CockroachDB extends QueryBuilder {
|
|
5
|
+
upsert(values, returning, options) {
|
|
6
|
+
this._method = 'upsert';
|
|
7
|
+
if (!isEmpty(returning)) this.returning(returning, options);
|
|
8
|
+
this._single.upsert = values;
|
|
9
|
+
return this;
|
|
10
|
+
}
|
|
11
|
+
};
|
|
@@ -1,122 +1,122 @@
|
|
|
1
|
-
const QueryCompiler_PG = require('../postgres/query/pg-querycompiler');
|
|
2
|
-
const {
|
|
3
|
-
columnize: columnize_,
|
|
4
|
-
wrap: wrap_,
|
|
5
|
-
operator: operator_,
|
|
6
|
-
} = require('../../formatter/wrappingFormatter');
|
|
7
|
-
|
|
8
|
-
class QueryCompiler_CRDB extends QueryCompiler_PG {
|
|
9
|
-
truncate() {
|
|
10
|
-
return `truncate ${this.tableName}`;
|
|
11
|
-
}
|
|
12
|
-
|
|
13
|
-
upsert() {
|
|
14
|
-
let sql = this._upsert();
|
|
15
|
-
if (sql === '') return sql;
|
|
16
|
-
const { returning } = this.single;
|
|
17
|
-
if (returning) sql += this._returning(returning);
|
|
18
|
-
return {
|
|
19
|
-
sql: sql,
|
|
20
|
-
returning,
|
|
21
|
-
};
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
_upsert() {
|
|
25
|
-
const upsertValues = this.single.upsert || [];
|
|
26
|
-
const sql = this.with() + `upsert into ${this.tableName} `;
|
|
27
|
-
const body = this._insertBody(upsertValues);
|
|
28
|
-
return body === '' ? '' : sql + body;
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
_groupOrder(item, type) {
|
|
32
|
-
// CockroachDB don't support PostgreSQL order nulls first/last syntax, we take the generic one.
|
|
33
|
-
return this._basicGroupOrder(item, type);
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
whereJsonPath(statement) {
|
|
37
|
-
let castValue = '';
|
|
38
|
-
if (!isNaN(statement.value) && parseInt(statement.value)) {
|
|
39
|
-
castValue = '::int';
|
|
40
|
-
} else if (!isNaN(statement.value) && parseFloat(statement.value)) {
|
|
41
|
-
castValue = '::float';
|
|
42
|
-
} else {
|
|
43
|
-
castValue = " #>> '{}'";
|
|
44
|
-
}
|
|
45
|
-
return `json_extract_path(${this._columnClause(
|
|
46
|
-
statement
|
|
47
|
-
)}, ${this.client.toArrayPathFromJsonPath(
|
|
48
|
-
statement.jsonPath,
|
|
49
|
-
this.builder,
|
|
50
|
-
this.bindingsHolder
|
|
51
|
-
)})${castValue} ${operator_(
|
|
52
|
-
statement.operator,
|
|
53
|
-
this.builder,
|
|
54
|
-
this.client,
|
|
55
|
-
this.bindingsHolder
|
|
56
|
-
)} ${this._jsonValueClause(statement)}`;
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
// Json common functions
|
|
60
|
-
_jsonExtract(nameFunction, params) {
|
|
61
|
-
let extractions;
|
|
62
|
-
if (Array.isArray(params.column)) {
|
|
63
|
-
extractions = params.column;
|
|
64
|
-
} else {
|
|
65
|
-
extractions = [params];
|
|
66
|
-
}
|
|
67
|
-
return extractions
|
|
68
|
-
.map((extraction) => {
|
|
69
|
-
const jsonCol = `json_extract_path(${columnize_(
|
|
70
|
-
extraction.column || extraction[0],
|
|
71
|
-
this.builder,
|
|
72
|
-
this.client,
|
|
73
|
-
this.bindingsHolder
|
|
74
|
-
)}, ${this.client.toArrayPathFromJsonPath(
|
|
75
|
-
extraction.path || extraction[1],
|
|
76
|
-
this.builder,
|
|
77
|
-
this.bindingsHolder
|
|
78
|
-
)})`;
|
|
79
|
-
const alias = extraction.alias || extraction[2];
|
|
80
|
-
return alias
|
|
81
|
-
? this.client.alias(jsonCol, this.formatter.wrap(alias))
|
|
82
|
-
: jsonCol;
|
|
83
|
-
})
|
|
84
|
-
.join(', ');
|
|
85
|
-
}
|
|
86
|
-
|
|
87
|
-
_onJsonPathEquals(nameJoinFunction, clause) {
|
|
88
|
-
return (
|
|
89
|
-
'json_extract_path(' +
|
|
90
|
-
wrap_(
|
|
91
|
-
clause.columnFirst,
|
|
92
|
-
undefined,
|
|
93
|
-
this.builder,
|
|
94
|
-
this.client,
|
|
95
|
-
this.bindingsHolder
|
|
96
|
-
) +
|
|
97
|
-
', ' +
|
|
98
|
-
this.client.toArrayPathFromJsonPath(
|
|
99
|
-
clause.jsonPathFirst,
|
|
100
|
-
this.builder,
|
|
101
|
-
this.bindingsHolder
|
|
102
|
-
) +
|
|
103
|
-
') = json_extract_path(' +
|
|
104
|
-
wrap_(
|
|
105
|
-
clause.columnSecond,
|
|
106
|
-
undefined,
|
|
107
|
-
this.builder,
|
|
108
|
-
this.client,
|
|
109
|
-
this.bindingsHolder
|
|
110
|
-
) +
|
|
111
|
-
', ' +
|
|
112
|
-
this.client.toArrayPathFromJsonPath(
|
|
113
|
-
clause.jsonPathSecond,
|
|
114
|
-
this.builder,
|
|
115
|
-
this.bindingsHolder
|
|
116
|
-
) +
|
|
117
|
-
')'
|
|
118
|
-
);
|
|
119
|
-
}
|
|
120
|
-
}
|
|
121
|
-
|
|
122
|
-
module.exports = QueryCompiler_CRDB;
|
|
1
|
+
const QueryCompiler_PG = require('../postgres/query/pg-querycompiler');
|
|
2
|
+
const {
|
|
3
|
+
columnize: columnize_,
|
|
4
|
+
wrap: wrap_,
|
|
5
|
+
operator: operator_,
|
|
6
|
+
} = require('../../formatter/wrappingFormatter');
|
|
7
|
+
|
|
8
|
+
class QueryCompiler_CRDB extends QueryCompiler_PG {
|
|
9
|
+
truncate() {
|
|
10
|
+
return `truncate ${this.tableName}`;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
upsert() {
|
|
14
|
+
let sql = this._upsert();
|
|
15
|
+
if (sql === '') return sql;
|
|
16
|
+
const { returning } = this.single;
|
|
17
|
+
if (returning) sql += this._returning(returning);
|
|
18
|
+
return {
|
|
19
|
+
sql: sql,
|
|
20
|
+
returning,
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
_upsert() {
|
|
25
|
+
const upsertValues = this.single.upsert || [];
|
|
26
|
+
const sql = this.with() + `upsert into ${this.tableName} `;
|
|
27
|
+
const body = this._insertBody(upsertValues);
|
|
28
|
+
return body === '' ? '' : sql + body;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
_groupOrder(item, type) {
|
|
32
|
+
// CockroachDB don't support PostgreSQL order nulls first/last syntax, we take the generic one.
|
|
33
|
+
return this._basicGroupOrder(item, type);
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
whereJsonPath(statement) {
|
|
37
|
+
let castValue = '';
|
|
38
|
+
if (!isNaN(statement.value) && parseInt(statement.value)) {
|
|
39
|
+
castValue = '::int';
|
|
40
|
+
} else if (!isNaN(statement.value) && parseFloat(statement.value)) {
|
|
41
|
+
castValue = '::float';
|
|
42
|
+
} else {
|
|
43
|
+
castValue = " #>> '{}'";
|
|
44
|
+
}
|
|
45
|
+
return `json_extract_path(${this._columnClause(
|
|
46
|
+
statement
|
|
47
|
+
)}, ${this.client.toArrayPathFromJsonPath(
|
|
48
|
+
statement.jsonPath,
|
|
49
|
+
this.builder,
|
|
50
|
+
this.bindingsHolder
|
|
51
|
+
)})${castValue} ${operator_(
|
|
52
|
+
statement.operator,
|
|
53
|
+
this.builder,
|
|
54
|
+
this.client,
|
|
55
|
+
this.bindingsHolder
|
|
56
|
+
)} ${this._jsonValueClause(statement)}`;
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
// Json common functions
|
|
60
|
+
_jsonExtract(nameFunction, params) {
|
|
61
|
+
let extractions;
|
|
62
|
+
if (Array.isArray(params.column)) {
|
|
63
|
+
extractions = params.column;
|
|
64
|
+
} else {
|
|
65
|
+
extractions = [params];
|
|
66
|
+
}
|
|
67
|
+
return extractions
|
|
68
|
+
.map((extraction) => {
|
|
69
|
+
const jsonCol = `json_extract_path(${columnize_(
|
|
70
|
+
extraction.column || extraction[0],
|
|
71
|
+
this.builder,
|
|
72
|
+
this.client,
|
|
73
|
+
this.bindingsHolder
|
|
74
|
+
)}, ${this.client.toArrayPathFromJsonPath(
|
|
75
|
+
extraction.path || extraction[1],
|
|
76
|
+
this.builder,
|
|
77
|
+
this.bindingsHolder
|
|
78
|
+
)})`;
|
|
79
|
+
const alias = extraction.alias || extraction[2];
|
|
80
|
+
return alias
|
|
81
|
+
? this.client.alias(jsonCol, this.formatter.wrap(alias))
|
|
82
|
+
: jsonCol;
|
|
83
|
+
})
|
|
84
|
+
.join(', ');
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
_onJsonPathEquals(nameJoinFunction, clause) {
|
|
88
|
+
return (
|
|
89
|
+
'json_extract_path(' +
|
|
90
|
+
wrap_(
|
|
91
|
+
clause.columnFirst,
|
|
92
|
+
undefined,
|
|
93
|
+
this.builder,
|
|
94
|
+
this.client,
|
|
95
|
+
this.bindingsHolder
|
|
96
|
+
) +
|
|
97
|
+
', ' +
|
|
98
|
+
this.client.toArrayPathFromJsonPath(
|
|
99
|
+
clause.jsonPathFirst,
|
|
100
|
+
this.builder,
|
|
101
|
+
this.bindingsHolder
|
|
102
|
+
) +
|
|
103
|
+
') = json_extract_path(' +
|
|
104
|
+
wrap_(
|
|
105
|
+
clause.columnSecond,
|
|
106
|
+
undefined,
|
|
107
|
+
this.builder,
|
|
108
|
+
this.client,
|
|
109
|
+
this.bindingsHolder
|
|
110
|
+
) +
|
|
111
|
+
', ' +
|
|
112
|
+
this.client.toArrayPathFromJsonPath(
|
|
113
|
+
clause.jsonPathSecond,
|
|
114
|
+
this.builder,
|
|
115
|
+
this.bindingsHolder
|
|
116
|
+
) +
|
|
117
|
+
')'
|
|
118
|
+
);
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
module.exports = QueryCompiler_CRDB;
|
|
@@ -1,37 +1,37 @@
|
|
|
1
|
-
/* eslint max-len: 0 */
|
|
2
|
-
|
|
3
|
-
const TableCompiler = require('../postgres/schema/pg-tablecompiler');
|
|
4
|
-
|
|
5
|
-
class TableCompiler_CRDB extends TableCompiler {
|
|
6
|
-
constructor(client, tableBuilder) {
|
|
7
|
-
super(client, tableBuilder);
|
|
8
|
-
}
|
|
9
|
-
|
|
10
|
-
addColumns(columns, prefix, colCompilers) {
|
|
11
|
-
if (prefix === this.alterColumnsPrefix) {
|
|
12
|
-
// alter columns
|
|
13
|
-
for (const col of colCompilers) {
|
|
14
|
-
this.client.logger.warn(
|
|
15
|
-
'Experimental alter column in use, see issue: https://github.com/cockroachdb/cockroach/issues/49329'
|
|
16
|
-
);
|
|
17
|
-
this.pushQuery({
|
|
18
|
-
sql: 'SET enable_experimental_alter_column_type_general = true',
|
|
19
|
-
bindings: [],
|
|
20
|
-
});
|
|
21
|
-
super._addColumn(col);
|
|
22
|
-
}
|
|
23
|
-
} else {
|
|
24
|
-
// base class implementation for normal add
|
|
25
|
-
super.addColumns(columns, prefix);
|
|
26
|
-
}
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
dropUnique(columns, indexName) {
|
|
30
|
-
indexName = indexName
|
|
31
|
-
? this.formatter.wrap(indexName)
|
|
32
|
-
: this._indexCommand('unique', this.tableNameRaw, columns);
|
|
33
|
-
this.pushQuery(`drop index ${this.tableName()}@${indexName} cascade `);
|
|
34
|
-
}
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
module.exports = TableCompiler_CRDB;
|
|
1
|
+
/* eslint max-len: 0 */
|
|
2
|
+
|
|
3
|
+
const TableCompiler = require('../postgres/schema/pg-tablecompiler');
|
|
4
|
+
|
|
5
|
+
class TableCompiler_CRDB extends TableCompiler {
|
|
6
|
+
constructor(client, tableBuilder) {
|
|
7
|
+
super(client, tableBuilder);
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
addColumns(columns, prefix, colCompilers) {
|
|
11
|
+
if (prefix === this.alterColumnsPrefix) {
|
|
12
|
+
// alter columns
|
|
13
|
+
for (const col of colCompilers) {
|
|
14
|
+
this.client.logger.warn(
|
|
15
|
+
'Experimental alter column in use, see issue: https://github.com/cockroachdb/cockroach/issues/49329'
|
|
16
|
+
);
|
|
17
|
+
this.pushQuery({
|
|
18
|
+
sql: 'SET enable_experimental_alter_column_type_general = true',
|
|
19
|
+
bindings: [],
|
|
20
|
+
});
|
|
21
|
+
super._addColumn(col);
|
|
22
|
+
}
|
|
23
|
+
} else {
|
|
24
|
+
// base class implementation for normal add
|
|
25
|
+
super.addColumns(columns, prefix);
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
dropUnique(columns, indexName) {
|
|
30
|
+
indexName = indexName
|
|
31
|
+
? this.formatter.wrap(indexName)
|
|
32
|
+
: this._indexCommand('unique', this.tableNameRaw, columns);
|
|
33
|
+
this.pushQuery(`drop index ${this.tableName()}@${indexName} cascade `);
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
module.exports = TableCompiler_CRDB;
|
|
@@ -1,15 +1,15 @@
|
|
|
1
|
-
const ViewCompiler_PG = require('../postgres/schema/pg-viewcompiler.js');
|
|
2
|
-
|
|
3
|
-
class ViewCompiler_CRDB extends ViewCompiler_PG {
|
|
4
|
-
renameColumn(from, to) {
|
|
5
|
-
throw new Error('rename column of views is not supported by this dialect.');
|
|
6
|
-
}
|
|
7
|
-
|
|
8
|
-
defaultTo(column, defaultValue) {
|
|
9
|
-
throw new Error(
|
|
10
|
-
'change default values of views is not supported by this dialect.'
|
|
11
|
-
);
|
|
12
|
-
}
|
|
13
|
-
}
|
|
14
|
-
|
|
15
|
-
module.exports = ViewCompiler_CRDB;
|
|
1
|
+
const ViewCompiler_PG = require('../postgres/schema/pg-viewcompiler.js');
|
|
2
|
+
|
|
3
|
+
class ViewCompiler_CRDB extends ViewCompiler_PG {
|
|
4
|
+
renameColumn(from, to) {
|
|
5
|
+
throw new Error('rename column of views is not supported by this dialect.');
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
defaultTo(column, defaultValue) {
|
|
9
|
+
throw new Error(
|
|
10
|
+
'change default values of views is not supported by this dialect.'
|
|
11
|
+
);
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
module.exports = ViewCompiler_CRDB;
|