knex 0.21.20 → 0.21.21
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 +6 -0
- package/CONTRIBUTING.md +184 -184
- package/LICENSE +22 -22
- package/README.md +95 -95
- package/bin/cli.js +414 -414
- package/bin/utils/cli-config-utils.js +151 -151
- package/bin/utils/constants.js +7 -7
- package/bin/utils/migrationsLister.js +37 -37
- package/knex.js +8 -8
- package/lib/client.js +413 -413
- package/lib/config-resolver.js +61 -61
- package/lib/constants.js +44 -44
- package/lib/dialects/mssql/index.js +390 -390
- package/lib/dialects/mssql/query/compiler.js +444 -444
- package/lib/dialects/mssql/schema/columncompiler.js +103 -103
- package/lib/dialects/mssql/schema/compiler.js +59 -59
- package/lib/dialects/mssql/schema/tablecompiler.js +245 -245
- package/lib/dialects/mssql/transaction.js +97 -97
- package/lib/dialects/mysql/index.js +191 -191
- package/lib/dialects/mysql/query/compiler.js +142 -142
- package/lib/dialects/mysql/schema/columncompiler.js +171 -171
- package/lib/dialects/mysql/schema/compiler.js +60 -60
- package/lib/dialects/mysql/schema/tablecompiler.js +262 -262
- package/lib/dialects/mysql/transaction.js +48 -48
- package/lib/dialects/mysql2/index.js +35 -35
- package/lib/dialects/mysql2/transaction.js +46 -46
- package/lib/dialects/oracle/DEAD_CODE.md +5 -5
- package/lib/dialects/oracle/formatter.js +20 -20
- package/lib/dialects/oracle/index.js +79 -79
- package/lib/dialects/oracle/query/compiler.js +327 -327
- package/lib/dialects/oracle/schema/columnbuilder.js +18 -18
- package/lib/dialects/oracle/schema/columncompiler.js +139 -139
- package/lib/dialects/oracle/schema/compiler.js +81 -81
- package/lib/dialects/oracle/schema/tablecompiler.js +165 -165
- package/lib/dialects/oracle/schema/trigger.js +126 -126
- package/lib/dialects/oracle/utils.js +86 -86
- package/lib/dialects/oracledb/index.js +489 -489
- package/lib/dialects/oracledb/query/compiler.js +363 -363
- package/lib/dialects/oracledb/schema/columncompiler.js +35 -35
- package/lib/dialects/oracledb/transaction.js +76 -76
- package/lib/dialects/oracledb/utils.js +14 -14
- package/lib/dialects/postgres/index.js +319 -319
- package/lib/dialects/postgres/query/compiler.js +206 -206
- package/lib/dialects/postgres/schema/columncompiler.js +125 -125
- package/lib/dialects/postgres/schema/compiler.js +109 -109
- package/lib/dialects/postgres/schema/tablecompiler.js +183 -183
- package/lib/dialects/redshift/index.js +73 -73
- package/lib/dialects/redshift/query/compiler.js +119 -119
- package/lib/dialects/redshift/schema/columnbuilder.js +20 -20
- package/lib/dialects/redshift/schema/columncompiler.js +60 -60
- package/lib/dialects/redshift/schema/compiler.js +14 -14
- package/lib/dialects/redshift/schema/tablecompiler.js +123 -123
- package/lib/dialects/redshift/transaction.js +18 -18
- package/lib/dialects/sqlite3/formatter.js +21 -21
- package/lib/dialects/sqlite3/index.js +169 -169
- package/lib/dialects/sqlite3/query/compiler.js +222 -222
- package/lib/dialects/sqlite3/schema/columncompiler.js +27 -27
- package/lib/dialects/sqlite3/schema/compiler.js +49 -49
- package/lib/dialects/sqlite3/schema/ddl.js +525 -525
- package/lib/dialects/sqlite3/schema/tablecompiler.js +238 -238
- package/lib/formatter.js +295 -295
- package/lib/functionhelper.js +14 -14
- package/lib/helpers.js +92 -92
- package/lib/index.js +3 -3
- package/lib/interface.js +115 -115
- package/lib/knex.js +42 -42
- package/lib/logger.js +76 -76
- package/lib/migrate/MigrationGenerator.js +82 -82
- package/lib/migrate/Migrator.js +611 -611
- package/lib/migrate/configuration-merger.js +60 -60
- package/lib/migrate/migrate-stub.js +17 -17
- package/lib/migrate/migration-list-resolver.js +36 -36
- package/lib/migrate/sources/fs-migrations.js +99 -99
- package/lib/migrate/stub/cjs.stub +15 -15
- package/lib/migrate/stub/coffee.stub +13 -13
- package/lib/migrate/stub/eg.stub +14 -14
- package/lib/migrate/stub/js.stub +15 -15
- package/lib/migrate/stub/knexfile-coffee.stub +34 -34
- package/lib/migrate/stub/knexfile-eg.stub +43 -43
- package/lib/migrate/stub/knexfile-js.stub +44 -44
- package/lib/migrate/stub/knexfile-ls.stub +35 -35
- package/lib/migrate/stub/knexfile-ts.stub +44 -44
- package/lib/migrate/stub/ls.stub +14 -14
- package/lib/migrate/stub/ts.stub +21 -21
- package/lib/migrate/table-creator.js +67 -67
- package/lib/migrate/table-resolver.js +27 -27
- package/lib/query/builder.js +1372 -1372
- package/lib/query/compiler.js +889 -889
- package/lib/query/constants.js +13 -13
- package/lib/query/joinclause.js +263 -263
- package/lib/query/methods.js +92 -92
- package/lib/query/string.js +190 -190
- package/lib/raw.js +188 -188
- package/lib/ref.js +39 -39
- package/lib/runner.js +285 -285
- package/lib/schema/builder.js +82 -82
- package/lib/schema/columnbuilder.js +117 -117
- package/lib/schema/columncompiler.js +177 -177
- package/lib/schema/compiler.js +101 -101
- package/lib/schema/helpers.js +51 -51
- package/lib/schema/tablebuilder.js +288 -288
- package/lib/schema/tablecompiler.js +296 -296
- package/lib/seed/Seeder.js +203 -203
- package/lib/seed/seed-stub.js +13 -13
- package/lib/seed/stub/coffee.stub +9 -9
- package/lib/seed/stub/eg.stub +11 -11
- package/lib/seed/stub/js.stub +13 -13
- package/lib/seed/stub/ls.stub +11 -11
- package/lib/seed/stub/ts.stub +13 -13
- package/lib/transaction.js +363 -363
- package/lib/util/batchInsert.js +59 -59
- package/lib/util/delay.js +6 -6
- package/lib/util/fake-client.js +9 -9
- package/lib/util/finally-mixin.js +13 -13
- package/lib/util/fs.js +76 -76
- package/lib/util/import-file.js +13 -13
- package/lib/util/is-module-type.js +14 -14
- package/lib/util/is.js +32 -32
- package/lib/util/make-knex.js +338 -338
- package/lib/util/nanoid.js +29 -29
- package/lib/util/noop.js +1 -1
- package/lib/util/parse-connection.js +66 -66
- package/lib/util/save-async-stack.js +14 -14
- package/lib/util/template.js +52 -52
- package/lib/util/timeout.js +29 -29
- package/lib/util/timestamp.js +16 -16
- package/package.json +1 -1
- package/scripts/build.js +125 -125
- package/scripts/docker-compose.yml +111 -111
- package/scripts/next-release-howto.md +24 -24
- 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 +47 -47
- package/scripts/stress-test/knex-stress-test.js +196 -196
- 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/types/index.d.ts +2249 -2249
- package/types/result.d.ts +27 -27
- package/types/tables.d.ts +4 -4
package/lib/raw.js
CHANGED
|
@@ -1,188 +1,188 @@
|
|
|
1
|
-
// Raw
|
|
2
|
-
// -------
|
|
3
|
-
const { inherits } = require('util');
|
|
4
|
-
const { EventEmitter } = require('events');
|
|
5
|
-
const debug = require('debug');
|
|
6
|
-
const assign = require('lodash/assign');
|
|
7
|
-
const isPlainObject = require('lodash/isPlainObject');
|
|
8
|
-
const reduce = require('lodash/reduce');
|
|
9
|
-
|
|
10
|
-
const helpers = require('./helpers');
|
|
11
|
-
const saveAsyncStack = require('./util/save-async-stack');
|
|
12
|
-
const { nanoid } = require('./util/nanoid');
|
|
13
|
-
const { isNumber, isObject } = require('./util/is');
|
|
14
|
-
|
|
15
|
-
const debugBindings = debug('knex:bindings');
|
|
16
|
-
|
|
17
|
-
function Raw(client) {
|
|
18
|
-
this.client = client;
|
|
19
|
-
|
|
20
|
-
this.sql = '';
|
|
21
|
-
this.bindings = [];
|
|
22
|
-
|
|
23
|
-
// Todo: Deprecate
|
|
24
|
-
this._wrappedBefore = undefined;
|
|
25
|
-
this._wrappedAfter = undefined;
|
|
26
|
-
if (client && client.config) {
|
|
27
|
-
this._debug = client.config.debug;
|
|
28
|
-
saveAsyncStack(this, 4);
|
|
29
|
-
}
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
inherits(Raw, EventEmitter);
|
|
33
|
-
|
|
34
|
-
assign(Raw.prototype, {
|
|
35
|
-
set(sql, bindings) {
|
|
36
|
-
this.sql = sql;
|
|
37
|
-
this.bindings =
|
|
38
|
-
(isObject(bindings) && !bindings.toSQL) || bindings === undefined
|
|
39
|
-
? bindings
|
|
40
|
-
: [bindings];
|
|
41
|
-
|
|
42
|
-
return this;
|
|
43
|
-
},
|
|
44
|
-
|
|
45
|
-
timeout(ms, { cancel } = {}) {
|
|
46
|
-
if (isNumber(ms) && ms > 0) {
|
|
47
|
-
this._timeout = ms;
|
|
48
|
-
if (cancel) {
|
|
49
|
-
this.client.assertCanCancelQuery();
|
|
50
|
-
this._cancelOnTimeout = true;
|
|
51
|
-
}
|
|
52
|
-
}
|
|
53
|
-
return this;
|
|
54
|
-
},
|
|
55
|
-
|
|
56
|
-
// Wraps the current sql with `before` and `after`.
|
|
57
|
-
wrap(before, after) {
|
|
58
|
-
this._wrappedBefore = before;
|
|
59
|
-
this._wrappedAfter = after;
|
|
60
|
-
return this;
|
|
61
|
-
},
|
|
62
|
-
|
|
63
|
-
// Calls `toString` on the Knex object.
|
|
64
|
-
toString() {
|
|
65
|
-
return this.toQuery();
|
|
66
|
-
},
|
|
67
|
-
|
|
68
|
-
// Returns the raw sql for the query.
|
|
69
|
-
toSQL(method, tz) {
|
|
70
|
-
let obj;
|
|
71
|
-
const formatter = this.client.formatter(this);
|
|
72
|
-
|
|
73
|
-
if (Array.isArray(this.bindings)) {
|
|
74
|
-
obj = replaceRawArrBindings(this, formatter);
|
|
75
|
-
} else if (this.bindings && isPlainObject(this.bindings)) {
|
|
76
|
-
obj = replaceKeyBindings(this, formatter);
|
|
77
|
-
} else {
|
|
78
|
-
obj = {
|
|
79
|
-
method: 'raw',
|
|
80
|
-
sql: this.sql,
|
|
81
|
-
bindings: this.bindings === undefined ? [] : [this.bindings],
|
|
82
|
-
};
|
|
83
|
-
}
|
|
84
|
-
|
|
85
|
-
if (this._wrappedBefore) {
|
|
86
|
-
obj.sql = this._wrappedBefore + obj.sql;
|
|
87
|
-
}
|
|
88
|
-
if (this._wrappedAfter) {
|
|
89
|
-
obj.sql = obj.sql + this._wrappedAfter;
|
|
90
|
-
}
|
|
91
|
-
|
|
92
|
-
obj.options = reduce(this._options, assign, {});
|
|
93
|
-
|
|
94
|
-
if (this._timeout) {
|
|
95
|
-
obj.timeout = this._timeout;
|
|
96
|
-
if (this._cancelOnTimeout) {
|
|
97
|
-
obj.cancelOnTimeout = this._cancelOnTimeout;
|
|
98
|
-
}
|
|
99
|
-
}
|
|
100
|
-
|
|
101
|
-
obj.bindings = obj.bindings || [];
|
|
102
|
-
if (helpers.containsUndefined(obj.bindings)) {
|
|
103
|
-
const undefinedBindingIndices = helpers.getUndefinedIndices(
|
|
104
|
-
this.bindings
|
|
105
|
-
);
|
|
106
|
-
debugBindings(obj.bindings);
|
|
107
|
-
throw new Error(
|
|
108
|
-
`Undefined binding(s) detected for keys [${undefinedBindingIndices}] when compiling RAW query: ${obj.sql}`
|
|
109
|
-
);
|
|
110
|
-
}
|
|
111
|
-
|
|
112
|
-
obj.__knexQueryUid = nanoid();
|
|
113
|
-
|
|
114
|
-
return obj;
|
|
115
|
-
},
|
|
116
|
-
});
|
|
117
|
-
|
|
118
|
-
function replaceRawArrBindings(raw, formatter) {
|
|
119
|
-
const expectedBindings = raw.bindings.length;
|
|
120
|
-
const values = raw.bindings;
|
|
121
|
-
let index = 0;
|
|
122
|
-
|
|
123
|
-
const sql = raw.sql.replace(/\\?\?\??/g, function (match) {
|
|
124
|
-
if (match === '\\?') {
|
|
125
|
-
return match;
|
|
126
|
-
}
|
|
127
|
-
|
|
128
|
-
const value = values[index++];
|
|
129
|
-
|
|
130
|
-
if (match === '??') {
|
|
131
|
-
return formatter.columnize(value);
|
|
132
|
-
}
|
|
133
|
-
return formatter.parameter(value);
|
|
134
|
-
});
|
|
135
|
-
|
|
136
|
-
if (expectedBindings !== index) {
|
|
137
|
-
throw new Error(`Expected ${expectedBindings} bindings, saw ${index}`);
|
|
138
|
-
}
|
|
139
|
-
|
|
140
|
-
return {
|
|
141
|
-
method: 'raw',
|
|
142
|
-
sql,
|
|
143
|
-
bindings: formatter.bindings,
|
|
144
|
-
};
|
|
145
|
-
}
|
|
146
|
-
|
|
147
|
-
function replaceKeyBindings(raw, formatter) {
|
|
148
|
-
const values = raw.bindings;
|
|
149
|
-
const regex = /\\?(:(\w+):(?=::)|:(\w+):(?!:)|:(\w+))/g;
|
|
150
|
-
|
|
151
|
-
const sql = raw.sql.replace(regex, function (match, p1, p2, p3, p4) {
|
|
152
|
-
if (match !== p1) {
|
|
153
|
-
return p1;
|
|
154
|
-
}
|
|
155
|
-
|
|
156
|
-
const part = p2 || p3 || p4;
|
|
157
|
-
const key = match.trim();
|
|
158
|
-
const isIdentifier = key[key.length - 1] === ':';
|
|
159
|
-
const value = values[part];
|
|
160
|
-
|
|
161
|
-
if (value === undefined) {
|
|
162
|
-
if (Object.prototype.hasOwnProperty.call(values, part)) {
|
|
163
|
-
formatter.bindings.push(value);
|
|
164
|
-
}
|
|
165
|
-
|
|
166
|
-
return match;
|
|
167
|
-
}
|
|
168
|
-
|
|
169
|
-
if (isIdentifier) {
|
|
170
|
-
return match.replace(p1, formatter.columnize(value));
|
|
171
|
-
}
|
|
172
|
-
|
|
173
|
-
return match.replace(p1, formatter.parameter(value));
|
|
174
|
-
});
|
|
175
|
-
|
|
176
|
-
return {
|
|
177
|
-
method: 'raw',
|
|
178
|
-
sql,
|
|
179
|
-
bindings: formatter.bindings,
|
|
180
|
-
};
|
|
181
|
-
}
|
|
182
|
-
|
|
183
|
-
// Allow the `Raw` object to be utilized with full access to the relevant
|
|
184
|
-
// promise API.
|
|
185
|
-
require('./interface')(Raw);
|
|
186
|
-
helpers.addQueryContext(Raw);
|
|
187
|
-
|
|
188
|
-
module.exports = Raw;
|
|
1
|
+
// Raw
|
|
2
|
+
// -------
|
|
3
|
+
const { inherits } = require('util');
|
|
4
|
+
const { EventEmitter } = require('events');
|
|
5
|
+
const debug = require('debug');
|
|
6
|
+
const assign = require('lodash/assign');
|
|
7
|
+
const isPlainObject = require('lodash/isPlainObject');
|
|
8
|
+
const reduce = require('lodash/reduce');
|
|
9
|
+
|
|
10
|
+
const helpers = require('./helpers');
|
|
11
|
+
const saveAsyncStack = require('./util/save-async-stack');
|
|
12
|
+
const { nanoid } = require('./util/nanoid');
|
|
13
|
+
const { isNumber, isObject } = require('./util/is');
|
|
14
|
+
|
|
15
|
+
const debugBindings = debug('knex:bindings');
|
|
16
|
+
|
|
17
|
+
function Raw(client) {
|
|
18
|
+
this.client = client;
|
|
19
|
+
|
|
20
|
+
this.sql = '';
|
|
21
|
+
this.bindings = [];
|
|
22
|
+
|
|
23
|
+
// Todo: Deprecate
|
|
24
|
+
this._wrappedBefore = undefined;
|
|
25
|
+
this._wrappedAfter = undefined;
|
|
26
|
+
if (client && client.config) {
|
|
27
|
+
this._debug = client.config.debug;
|
|
28
|
+
saveAsyncStack(this, 4);
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
inherits(Raw, EventEmitter);
|
|
33
|
+
|
|
34
|
+
assign(Raw.prototype, {
|
|
35
|
+
set(sql, bindings) {
|
|
36
|
+
this.sql = sql;
|
|
37
|
+
this.bindings =
|
|
38
|
+
(isObject(bindings) && !bindings.toSQL) || bindings === undefined
|
|
39
|
+
? bindings
|
|
40
|
+
: [bindings];
|
|
41
|
+
|
|
42
|
+
return this;
|
|
43
|
+
},
|
|
44
|
+
|
|
45
|
+
timeout(ms, { cancel } = {}) {
|
|
46
|
+
if (isNumber(ms) && ms > 0) {
|
|
47
|
+
this._timeout = ms;
|
|
48
|
+
if (cancel) {
|
|
49
|
+
this.client.assertCanCancelQuery();
|
|
50
|
+
this._cancelOnTimeout = true;
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
return this;
|
|
54
|
+
},
|
|
55
|
+
|
|
56
|
+
// Wraps the current sql with `before` and `after`.
|
|
57
|
+
wrap(before, after) {
|
|
58
|
+
this._wrappedBefore = before;
|
|
59
|
+
this._wrappedAfter = after;
|
|
60
|
+
return this;
|
|
61
|
+
},
|
|
62
|
+
|
|
63
|
+
// Calls `toString` on the Knex object.
|
|
64
|
+
toString() {
|
|
65
|
+
return this.toQuery();
|
|
66
|
+
},
|
|
67
|
+
|
|
68
|
+
// Returns the raw sql for the query.
|
|
69
|
+
toSQL(method, tz) {
|
|
70
|
+
let obj;
|
|
71
|
+
const formatter = this.client.formatter(this);
|
|
72
|
+
|
|
73
|
+
if (Array.isArray(this.bindings)) {
|
|
74
|
+
obj = replaceRawArrBindings(this, formatter);
|
|
75
|
+
} else if (this.bindings && isPlainObject(this.bindings)) {
|
|
76
|
+
obj = replaceKeyBindings(this, formatter);
|
|
77
|
+
} else {
|
|
78
|
+
obj = {
|
|
79
|
+
method: 'raw',
|
|
80
|
+
sql: this.sql,
|
|
81
|
+
bindings: this.bindings === undefined ? [] : [this.bindings],
|
|
82
|
+
};
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
if (this._wrappedBefore) {
|
|
86
|
+
obj.sql = this._wrappedBefore + obj.sql;
|
|
87
|
+
}
|
|
88
|
+
if (this._wrappedAfter) {
|
|
89
|
+
obj.sql = obj.sql + this._wrappedAfter;
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
obj.options = reduce(this._options, assign, {});
|
|
93
|
+
|
|
94
|
+
if (this._timeout) {
|
|
95
|
+
obj.timeout = this._timeout;
|
|
96
|
+
if (this._cancelOnTimeout) {
|
|
97
|
+
obj.cancelOnTimeout = this._cancelOnTimeout;
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
obj.bindings = obj.bindings || [];
|
|
102
|
+
if (helpers.containsUndefined(obj.bindings)) {
|
|
103
|
+
const undefinedBindingIndices = helpers.getUndefinedIndices(
|
|
104
|
+
this.bindings
|
|
105
|
+
);
|
|
106
|
+
debugBindings(obj.bindings);
|
|
107
|
+
throw new Error(
|
|
108
|
+
`Undefined binding(s) detected for keys [${undefinedBindingIndices}] when compiling RAW query: ${obj.sql}`
|
|
109
|
+
);
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
obj.__knexQueryUid = nanoid();
|
|
113
|
+
|
|
114
|
+
return obj;
|
|
115
|
+
},
|
|
116
|
+
});
|
|
117
|
+
|
|
118
|
+
function replaceRawArrBindings(raw, formatter) {
|
|
119
|
+
const expectedBindings = raw.bindings.length;
|
|
120
|
+
const values = raw.bindings;
|
|
121
|
+
let index = 0;
|
|
122
|
+
|
|
123
|
+
const sql = raw.sql.replace(/\\?\?\??/g, function (match) {
|
|
124
|
+
if (match === '\\?') {
|
|
125
|
+
return match;
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
const value = values[index++];
|
|
129
|
+
|
|
130
|
+
if (match === '??') {
|
|
131
|
+
return formatter.columnize(value);
|
|
132
|
+
}
|
|
133
|
+
return formatter.parameter(value);
|
|
134
|
+
});
|
|
135
|
+
|
|
136
|
+
if (expectedBindings !== index) {
|
|
137
|
+
throw new Error(`Expected ${expectedBindings} bindings, saw ${index}`);
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
return {
|
|
141
|
+
method: 'raw',
|
|
142
|
+
sql,
|
|
143
|
+
bindings: formatter.bindings,
|
|
144
|
+
};
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
function replaceKeyBindings(raw, formatter) {
|
|
148
|
+
const values = raw.bindings;
|
|
149
|
+
const regex = /\\?(:(\w+):(?=::)|:(\w+):(?!:)|:(\w+))/g;
|
|
150
|
+
|
|
151
|
+
const sql = raw.sql.replace(regex, function (match, p1, p2, p3, p4) {
|
|
152
|
+
if (match !== p1) {
|
|
153
|
+
return p1;
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
const part = p2 || p3 || p4;
|
|
157
|
+
const key = match.trim();
|
|
158
|
+
const isIdentifier = key[key.length - 1] === ':';
|
|
159
|
+
const value = values[part];
|
|
160
|
+
|
|
161
|
+
if (value === undefined) {
|
|
162
|
+
if (Object.prototype.hasOwnProperty.call(values, part)) {
|
|
163
|
+
formatter.bindings.push(value);
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
return match;
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
if (isIdentifier) {
|
|
170
|
+
return match.replace(p1, formatter.columnize(value));
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
return match.replace(p1, formatter.parameter(value));
|
|
174
|
+
});
|
|
175
|
+
|
|
176
|
+
return {
|
|
177
|
+
method: 'raw',
|
|
178
|
+
sql,
|
|
179
|
+
bindings: formatter.bindings,
|
|
180
|
+
};
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
// Allow the `Raw` object to be utilized with full access to the relevant
|
|
184
|
+
// promise API.
|
|
185
|
+
require('./interface')(Raw);
|
|
186
|
+
helpers.addQueryContext(Raw);
|
|
187
|
+
|
|
188
|
+
module.exports = Raw;
|
package/lib/ref.js
CHANGED
|
@@ -1,39 +1,39 @@
|
|
|
1
|
-
const Raw = require('./raw');
|
|
2
|
-
|
|
3
|
-
class Ref extends Raw {
|
|
4
|
-
constructor(client, ref) {
|
|
5
|
-
super(client);
|
|
6
|
-
|
|
7
|
-
this.ref = ref;
|
|
8
|
-
this._schema = null;
|
|
9
|
-
this._alias = null;
|
|
10
|
-
}
|
|
11
|
-
|
|
12
|
-
withSchema(schema) {
|
|
13
|
-
this._schema = schema;
|
|
14
|
-
|
|
15
|
-
return this;
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
as(alias) {
|
|
19
|
-
this._alias = alias;
|
|
20
|
-
|
|
21
|
-
return this;
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
toSQL() {
|
|
25
|
-
const string = this._schema ? `${this._schema}.${this.ref}` : this.ref;
|
|
26
|
-
|
|
27
|
-
const formatter = this.client.formatter(this);
|
|
28
|
-
|
|
29
|
-
const ref = formatter.columnize(string);
|
|
30
|
-
|
|
31
|
-
const sql = this._alias ? `${ref} as ${formatter.wrap(this._alias)}` : ref;
|
|
32
|
-
|
|
33
|
-
this.set(sql, []);
|
|
34
|
-
|
|
35
|
-
return super.toSQL(...arguments);
|
|
36
|
-
}
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
module.exports = Ref;
|
|
1
|
+
const Raw = require('./raw');
|
|
2
|
+
|
|
3
|
+
class Ref extends Raw {
|
|
4
|
+
constructor(client, ref) {
|
|
5
|
+
super(client);
|
|
6
|
+
|
|
7
|
+
this.ref = ref;
|
|
8
|
+
this._schema = null;
|
|
9
|
+
this._alias = null;
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
withSchema(schema) {
|
|
13
|
+
this._schema = schema;
|
|
14
|
+
|
|
15
|
+
return this;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
as(alias) {
|
|
19
|
+
this._alias = alias;
|
|
20
|
+
|
|
21
|
+
return this;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
toSQL() {
|
|
25
|
+
const string = this._schema ? `${this._schema}.${this.ref}` : this.ref;
|
|
26
|
+
|
|
27
|
+
const formatter = this.client.formatter(this);
|
|
28
|
+
|
|
29
|
+
const ref = formatter.columnize(string);
|
|
30
|
+
|
|
31
|
+
const sql = this._alias ? `${ref} as ${formatter.wrap(this._alias)}` : ref;
|
|
32
|
+
|
|
33
|
+
this.set(sql, []);
|
|
34
|
+
|
|
35
|
+
return super.toSQL(...arguments);
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
module.exports = Ref;
|