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.
- package/CHANGELOG.md +64 -58
- package/CONTRIBUTING.md +194 -194
- package/README.md +149 -147
- package/UPGRADING.md +245 -233
- package/bin/cli.js +475 -473
- package/bin/utils/cli-config-utils.js +212 -210
- 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 +495 -495
- package/lib/constants.js +61 -61
- package/lib/dialects/better-sqlite3/index.js +77 -77
- 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/index.js +20 -20
- package/lib/dialects/mssql/index.js +500 -500
- 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 +378 -378
- 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 -274
- 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 +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 +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 +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 +358 -358
- 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 +156 -156
- package/lib/dialects/postgres/schema/pg-compiler.js +138 -138
- package/lib/dialects/postgres/schema/pg-tablecompiler.js +304 -304
- 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 +32 -32
- package/lib/dialects/sqlite3/execution/sqlite-transaction.js +25 -25
- 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 -347
- 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 +409 -409
- 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 +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 +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/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/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 +1591 -1591
- 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 +376 -376
- package/lib/schema/tablecompiler.js +433 -433
- 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 +26 -26
- package/lib/util/string.js +190 -190
- package/lib/util/timeout.js +29 -29
- package/package.json +11 -10
- package/scripts/build.js +125 -125
- package/scripts/clean.js +31 -31
- package/scripts/docker-compose.yml +152 -152
- package/scripts/next-release-howto.md +24 -24
- package/scripts/release.sh +2 -0
- package/scripts/runkit-example.js +35 -34
- package/scripts/stress-test/docker-compose.yml +57 -57
- package/scripts/stress-test/knex-stress-test.js +212 -208
- package/scripts/stress-test/mysql2-random-hanging-every-now-and-then.js +149 -145
- package/scripts/stress-test/mysql2-sudden-exit-without-error.js +101 -100
- package/scripts/stress-test/reconnect-test-mysql-based-drivers.js +188 -184
- package/scripts/update_gitignore_for_tsc_output.js +90 -90
- package/types/index.d.ts +3274 -3273
- package/types/result.d.ts +27 -27
- package/types/tables.d.ts +4 -4
|
@@ -1,42 +1,42 @@
|
|
|
1
|
-
const { isObject } = require('../util/is');
|
|
2
|
-
|
|
3
|
-
// Compiles a callback using the query builder.
|
|
4
|
-
function compileCallback(callback, method, client, bindingsHolder) {
|
|
5
|
-
// Build the callback
|
|
6
|
-
const builder = client.queryBuilder();
|
|
7
|
-
callback.call(builder, builder);
|
|
8
|
-
|
|
9
|
-
// Compile the callback, using the current formatter (to track all bindings).
|
|
10
|
-
const compiler = client.queryCompiler(builder, bindingsHolder.bindings);
|
|
11
|
-
|
|
12
|
-
// Return the compiled & parameterized sql.
|
|
13
|
-
return compiler.toSQL(method || builder._method || 'select');
|
|
14
|
-
}
|
|
15
|
-
|
|
16
|
-
function wrapAsIdentifier(value, builder, client) {
|
|
17
|
-
const queryContext = builder.queryContext();
|
|
18
|
-
return client.wrapIdentifier((value || '').trim(), queryContext);
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
function formatDefault(value, type, client) {
|
|
22
|
-
if (value === void 0) {
|
|
23
|
-
return '';
|
|
24
|
-
} else if (value === null) {
|
|
25
|
-
return 'null';
|
|
26
|
-
} else if (value && value.isRawInstance) {
|
|
27
|
-
return value.toQuery();
|
|
28
|
-
} else if (type === 'bool') {
|
|
29
|
-
if (value === 'false') value = 0;
|
|
30
|
-
return `'${value ? 1 : 0}'`;
|
|
31
|
-
} else if ((type === 'json' || type === 'jsonb') && isObject(value)) {
|
|
32
|
-
return `'${JSON.stringify(value)}'`;
|
|
33
|
-
} else {
|
|
34
|
-
return client._escapeBinding(value.toString());
|
|
35
|
-
}
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
module.exports = {
|
|
39
|
-
compileCallback,
|
|
40
|
-
wrapAsIdentifier,
|
|
41
|
-
formatDefault,
|
|
42
|
-
};
|
|
1
|
+
const { isObject } = require('../util/is');
|
|
2
|
+
|
|
3
|
+
// Compiles a callback using the query builder.
|
|
4
|
+
function compileCallback(callback, method, client, bindingsHolder) {
|
|
5
|
+
// Build the callback
|
|
6
|
+
const builder = client.queryBuilder();
|
|
7
|
+
callback.call(builder, builder);
|
|
8
|
+
|
|
9
|
+
// Compile the callback, using the current formatter (to track all bindings).
|
|
10
|
+
const compiler = client.queryCompiler(builder, bindingsHolder.bindings);
|
|
11
|
+
|
|
12
|
+
// Return the compiled & parameterized sql.
|
|
13
|
+
return compiler.toSQL(method || builder._method || 'select');
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
function wrapAsIdentifier(value, builder, client) {
|
|
17
|
+
const queryContext = builder.queryContext();
|
|
18
|
+
return client.wrapIdentifier((value || '').trim(), queryContext);
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
function formatDefault(value, type, client) {
|
|
22
|
+
if (value === void 0) {
|
|
23
|
+
return '';
|
|
24
|
+
} else if (value === null) {
|
|
25
|
+
return 'null';
|
|
26
|
+
} else if (value && value.isRawInstance) {
|
|
27
|
+
return value.toQuery();
|
|
28
|
+
} else if (type === 'bool') {
|
|
29
|
+
if (value === 'false') value = 0;
|
|
30
|
+
return `'${value ? 1 : 0}'`;
|
|
31
|
+
} else if ((type === 'json' || type === 'jsonb') && isObject(value)) {
|
|
32
|
+
return `'${JSON.stringify(value)}'`;
|
|
33
|
+
} else {
|
|
34
|
+
return client._escapeBinding(value.toString());
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
module.exports = {
|
|
39
|
+
compileCallback,
|
|
40
|
+
wrapAsIdentifier,
|
|
41
|
+
formatDefault,
|
|
42
|
+
};
|
|
@@ -1,84 +1,84 @@
|
|
|
1
|
-
const { columnize } = require('./wrappingFormatter');
|
|
2
|
-
|
|
3
|
-
function replaceRawArrBindings(raw, client) {
|
|
4
|
-
const bindingsHolder = {
|
|
5
|
-
bindings: [],
|
|
6
|
-
};
|
|
7
|
-
const builder = raw;
|
|
8
|
-
|
|
9
|
-
const expectedBindings = raw.bindings.length;
|
|
10
|
-
const values = raw.bindings;
|
|
11
|
-
let index = 0;
|
|
12
|
-
|
|
13
|
-
const sql = raw.sql.replace(/\\?\?\??/g, function (match) {
|
|
14
|
-
if (match === '\\?') {
|
|
15
|
-
return match;
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
const value = values[index++];
|
|
19
|
-
|
|
20
|
-
if (match === '??') {
|
|
21
|
-
return columnize(value, builder, client, bindingsHolder);
|
|
22
|
-
}
|
|
23
|
-
return client.parameter(value, builder, bindingsHolder);
|
|
24
|
-
});
|
|
25
|
-
|
|
26
|
-
if (expectedBindings !== index) {
|
|
27
|
-
throw new Error(`Expected ${expectedBindings} bindings, saw ${index}`);
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
return {
|
|
31
|
-
method: 'raw',
|
|
32
|
-
sql,
|
|
33
|
-
bindings: bindingsHolder.bindings,
|
|
34
|
-
};
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
function replaceKeyBindings(raw, client) {
|
|
38
|
-
const bindingsHolder = {
|
|
39
|
-
bindings: [],
|
|
40
|
-
};
|
|
41
|
-
const builder = raw;
|
|
42
|
-
|
|
43
|
-
const values = raw.bindings;
|
|
44
|
-
const regex = /\\?(:(\w+):(?=::)|:(\w+):(?!:)|:(\w+))/g;
|
|
45
|
-
|
|
46
|
-
const sql = raw.sql.replace(regex, function (match, p1, p2, p3, p4) {
|
|
47
|
-
if (match !== p1) {
|
|
48
|
-
return p1;
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
const part = p2 || p3 || p4;
|
|
52
|
-
const key = match.trim();
|
|
53
|
-
const isIdentifier = key[key.length - 1] === ':';
|
|
54
|
-
const value = values[part];
|
|
55
|
-
|
|
56
|
-
if (value === undefined) {
|
|
57
|
-
if (Object.prototype.hasOwnProperty.call(values, part)) {
|
|
58
|
-
bindingsHolder.bindings.push(value);
|
|
59
|
-
}
|
|
60
|
-
|
|
61
|
-
return match;
|
|
62
|
-
}
|
|
63
|
-
|
|
64
|
-
if (isIdentifier) {
|
|
65
|
-
return match.replace(
|
|
66
|
-
p1,
|
|
67
|
-
columnize(value, builder, client, bindingsHolder)
|
|
68
|
-
);
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
return match.replace(p1, client.parameter(value, builder, bindingsHolder));
|
|
72
|
-
});
|
|
73
|
-
|
|
74
|
-
return {
|
|
75
|
-
method: 'raw',
|
|
76
|
-
sql,
|
|
77
|
-
bindings: bindingsHolder.bindings,
|
|
78
|
-
};
|
|
79
|
-
}
|
|
80
|
-
|
|
81
|
-
module.exports = {
|
|
82
|
-
replaceKeyBindings,
|
|
83
|
-
replaceRawArrBindings,
|
|
84
|
-
};
|
|
1
|
+
const { columnize } = require('./wrappingFormatter');
|
|
2
|
+
|
|
3
|
+
function replaceRawArrBindings(raw, client) {
|
|
4
|
+
const bindingsHolder = {
|
|
5
|
+
bindings: [],
|
|
6
|
+
};
|
|
7
|
+
const builder = raw;
|
|
8
|
+
|
|
9
|
+
const expectedBindings = raw.bindings.length;
|
|
10
|
+
const values = raw.bindings;
|
|
11
|
+
let index = 0;
|
|
12
|
+
|
|
13
|
+
const sql = raw.sql.replace(/\\?\?\??/g, function (match) {
|
|
14
|
+
if (match === '\\?') {
|
|
15
|
+
return match;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
const value = values[index++];
|
|
19
|
+
|
|
20
|
+
if (match === '??') {
|
|
21
|
+
return columnize(value, builder, client, bindingsHolder);
|
|
22
|
+
}
|
|
23
|
+
return client.parameter(value, builder, bindingsHolder);
|
|
24
|
+
});
|
|
25
|
+
|
|
26
|
+
if (expectedBindings !== index) {
|
|
27
|
+
throw new Error(`Expected ${expectedBindings} bindings, saw ${index}`);
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
return {
|
|
31
|
+
method: 'raw',
|
|
32
|
+
sql,
|
|
33
|
+
bindings: bindingsHolder.bindings,
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
function replaceKeyBindings(raw, client) {
|
|
38
|
+
const bindingsHolder = {
|
|
39
|
+
bindings: [],
|
|
40
|
+
};
|
|
41
|
+
const builder = raw;
|
|
42
|
+
|
|
43
|
+
const values = raw.bindings;
|
|
44
|
+
const regex = /\\?(:(\w+):(?=::)|:(\w+):(?!:)|:(\w+))/g;
|
|
45
|
+
|
|
46
|
+
const sql = raw.sql.replace(regex, function (match, p1, p2, p3, p4) {
|
|
47
|
+
if (match !== p1) {
|
|
48
|
+
return p1;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
const part = p2 || p3 || p4;
|
|
52
|
+
const key = match.trim();
|
|
53
|
+
const isIdentifier = key[key.length - 1] === ':';
|
|
54
|
+
const value = values[part];
|
|
55
|
+
|
|
56
|
+
if (value === undefined) {
|
|
57
|
+
if (Object.prototype.hasOwnProperty.call(values, part)) {
|
|
58
|
+
bindingsHolder.bindings.push(value);
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
return match;
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
if (isIdentifier) {
|
|
65
|
+
return match.replace(
|
|
66
|
+
p1,
|
|
67
|
+
columnize(value, builder, client, bindingsHolder)
|
|
68
|
+
);
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
return match.replace(p1, client.parameter(value, builder, bindingsHolder));
|
|
72
|
+
});
|
|
73
|
+
|
|
74
|
+
return {
|
|
75
|
+
method: 'raw',
|
|
76
|
+
sql,
|
|
77
|
+
bindings: bindingsHolder.bindings,
|
|
78
|
+
};
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
module.exports = {
|
|
82
|
+
replaceKeyBindings,
|
|
83
|
+
replaceRawArrBindings,
|
|
84
|
+
};
|