pqb 0.7.0 → 0.7.2
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 +12 -0
- package/dist/index.d.ts +45 -9
- package/dist/index.esm.js +73 -6
- package/dist/index.esm.js.map +1 -1
- package/dist/index.js +73 -6
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
- package/src/adapter.test.ts +1 -1
- package/src/columnSchema/columnType.test.ts +2 -1
- package/src/columnSchema/columnTypes.test.ts +1 -1
- package/src/columnSchema/timestamps.test.ts +2 -2
- package/src/columnSchema/utils.ts +1 -1
- package/src/columnsOperators.test.ts +1 -1
- package/src/db.test.ts +83 -1
- package/src/db.ts +27 -10
- package/src/errors.test.ts +6 -1
- package/src/queryMethods/aggregate.test.ts +1 -1
- package/src/queryMethods/callbacks.test.ts +1 -1
- package/src/queryMethods/clear.test.ts +1 -1
- package/src/queryMethods/columnInfo.test.ts +5 -1
- package/src/queryMethods/copy.test.ts +63 -0
- package/src/queryMethods/copy.ts +17 -0
- package/src/queryMethods/create.test.ts +1 -1
- package/src/queryMethods/delete.test.ts +1 -1
- package/src/queryMethods/for.test.ts +5 -1
- package/src/queryMethods/from.test.ts +6 -1
- package/src/queryMethods/get.test.ts +7 -1
- package/src/queryMethods/having.test.ts +6 -1
- package/src/queryMethods/join.test.ts +6 -1
- package/src/queryMethods/json.test.ts +1 -1
- package/src/queryMethods/log.test.ts +6 -1
- package/src/queryMethods/log.ts +1 -0
- package/src/queryMethods/merge.test.ts +1 -1
- package/src/queryMethods/queryMethods.test.ts +1 -1
- package/src/queryMethods/queryMethods.ts +4 -1
- package/src/queryMethods/raw.test.ts +1 -1
- package/src/queryMethods/select.test.ts +1 -1
- package/src/queryMethods/then.test.ts +6 -1
- package/src/queryMethods/transaction.test.ts +1 -1
- package/src/queryMethods/union.test.ts +1 -1
- package/src/queryMethods/update.test.ts +1 -1
- package/src/queryMethods/upsert.test.ts +6 -1
- package/src/queryMethods/where.test.ts +1 -1
- package/src/queryMethods/window.test.ts +1 -1
- package/src/queryMethods/with.test.ts +6 -1
- package/src/sql/copy.ts +59 -0
- package/src/sql/data.ts +29 -1
- package/src/sql/toSql.ts +6 -0
- package/src/{test-utils.ts → test-utils/test-utils.ts} +8 -7
- package/src/test-utils/user.csv +1 -0
- package/src/utils.test.ts +1 -1
package/dist/index.js
CHANGED
|
@@ -1312,6 +1312,45 @@ const pushColumnInfoSql = (ctx, table, query) => {
|
|
|
1312
1312
|
}
|
|
1313
1313
|
};
|
|
1314
1314
|
|
|
1315
|
+
const pushCopySql = (ctx, model, query, quotedAs) => {
|
|
1316
|
+
const { sql } = ctx;
|
|
1317
|
+
const { copy } = query;
|
|
1318
|
+
const columns = copy.columns ? `(${copy.columns.map(q).join(", ")})` : "";
|
|
1319
|
+
const target = "from" in copy ? copy.from : copy.to;
|
|
1320
|
+
sql.push(
|
|
1321
|
+
`COPY ${q(model.table)}${columns} ${"from" in copy ? "FROM" : "TO"} ${typeof target === "string" ? quote(target) : `PROGRAM ${quote(target.program)}`}`
|
|
1322
|
+
);
|
|
1323
|
+
if (Object.keys(copy).length > (copy.columns ? 2 : 1)) {
|
|
1324
|
+
const options = [];
|
|
1325
|
+
if (copy.format)
|
|
1326
|
+
options.push(`FORMAT ${copy.format}`);
|
|
1327
|
+
if (copy.freeze)
|
|
1328
|
+
options.push(`FREEZE ${copy.freeze}`);
|
|
1329
|
+
if (copy.delimiter)
|
|
1330
|
+
options.push(`DELIMITER ${quote(copy.delimiter)}`);
|
|
1331
|
+
if (copy.null)
|
|
1332
|
+
options.push(`NULL ${quote(copy.null)}`);
|
|
1333
|
+
if (copy.header)
|
|
1334
|
+
options.push(`HEADER ${copy.header}`);
|
|
1335
|
+
if (copy.quote)
|
|
1336
|
+
options.push(`QUOTE ${quote(copy.quote)}`);
|
|
1337
|
+
if (copy.escape)
|
|
1338
|
+
options.push(`ESCAPE ${quote(copy.escape)}`);
|
|
1339
|
+
if (copy.forceQuote)
|
|
1340
|
+
options.push(
|
|
1341
|
+
`FORCE_QUOTE ${copy.forceQuote === "*" ? "*" : `(${copy.forceQuote.map(q).join(", ")})`}`
|
|
1342
|
+
);
|
|
1343
|
+
if (copy.forceNotNull)
|
|
1344
|
+
options.push(`FORCE_NOT_NULL (${copy.forceNotNull.map(q).join(", ")})`);
|
|
1345
|
+
if (copy.forceNull)
|
|
1346
|
+
options.push(`FORCE_NULL (${copy.forceNull.map(q).join(", ")})`);
|
|
1347
|
+
if (copy.encoding)
|
|
1348
|
+
options.push(`ENCODING ${quote(copy.encoding)}`);
|
|
1349
|
+
sql.push(`WITH (${options.join(", ")})`);
|
|
1350
|
+
}
|
|
1351
|
+
pushWhereStatementSql(ctx, model, query, quotedAs);
|
|
1352
|
+
};
|
|
1353
|
+
|
|
1315
1354
|
const toSqlCacheKey = Symbol("toSqlCache");
|
|
1316
1355
|
const toSql = (model, options) => {
|
|
1317
1356
|
return !(options == null ? void 0 : options.clearCache) && model.query[toSqlCacheKey] || (model.query[toSqlCacheKey] = makeSql(model, options));
|
|
@@ -1356,6 +1395,10 @@ const makeSql = (model, { values = [] } = {}) => {
|
|
|
1356
1395
|
pushDeleteSql(ctx, model, query, quotedAs2);
|
|
1357
1396
|
return { text: sql.join(" "), values };
|
|
1358
1397
|
}
|
|
1398
|
+
if (query.type === "copy") {
|
|
1399
|
+
pushCopySql(ctx, model, query, quotedAs2);
|
|
1400
|
+
return { text: sql.join(" "), values };
|
|
1401
|
+
}
|
|
1359
1402
|
}
|
|
1360
1403
|
const quotedAs = model.table && q(query.as || model.table);
|
|
1361
1404
|
sql.push("SELECT");
|
|
@@ -1566,7 +1609,7 @@ const assignMethodsToClass = (klass, methods) => {
|
|
|
1566
1609
|
writable: true,
|
|
1567
1610
|
value(...args) {
|
|
1568
1611
|
const cloned = cloneInstance(this);
|
|
1569
|
-
return methods[name].
|
|
1612
|
+
return methods[name].apply(cloned, args);
|
|
1570
1613
|
}
|
|
1571
1614
|
});
|
|
1572
1615
|
}
|
|
@@ -5466,6 +5509,19 @@ class RawMethods {
|
|
|
5466
5509
|
}
|
|
5467
5510
|
}
|
|
5468
5511
|
|
|
5512
|
+
class CopyMethods {
|
|
5513
|
+
copy(arg) {
|
|
5514
|
+
return this.clone()._copy(arg);
|
|
5515
|
+
}
|
|
5516
|
+
_copy(arg) {
|
|
5517
|
+
Object.assign(this.query, {
|
|
5518
|
+
type: "copy",
|
|
5519
|
+
copy: arg
|
|
5520
|
+
});
|
|
5521
|
+
return this;
|
|
5522
|
+
}
|
|
5523
|
+
}
|
|
5524
|
+
|
|
5469
5525
|
class QueryMethods {
|
|
5470
5526
|
all() {
|
|
5471
5527
|
return this.clone()._all();
|
|
@@ -5653,7 +5709,8 @@ applyMixins(QueryMethods, [
|
|
|
5653
5709
|
QueryUpsert,
|
|
5654
5710
|
QueryGet,
|
|
5655
5711
|
MergeQueryMethods,
|
|
5656
|
-
RawMethods
|
|
5712
|
+
RawMethods,
|
|
5713
|
+
CopyMethods
|
|
5657
5714
|
]);
|
|
5658
5715
|
|
|
5659
5716
|
var __defProp = Object.defineProperty;
|
|
@@ -5694,7 +5751,7 @@ class Db {
|
|
|
5694
5751
|
this.columnTypes = columnTypes;
|
|
5695
5752
|
this.whereQueryBuilder = WhereQueryBuilder;
|
|
5696
5753
|
this.onQueryBuilder = OnQueryBuilder;
|
|
5697
|
-
var _a;
|
|
5754
|
+
var _a, _b;
|
|
5698
5755
|
this.__model = this;
|
|
5699
5756
|
const logger = options.logger || console;
|
|
5700
5757
|
this.query = {
|
|
@@ -5710,8 +5767,17 @@ class Db {
|
|
|
5710
5767
|
this.primaryKeys = Object.keys(shape).filter(
|
|
5711
5768
|
(key) => shape[key].isPrimaryKey
|
|
5712
5769
|
);
|
|
5770
|
+
const primaryKeysFromData = (_b = getTableData().primaryKey) == null ? void 0 : _b.columns;
|
|
5771
|
+
if (primaryKeysFromData)
|
|
5772
|
+
this.primaryKeys.push(...primaryKeysFromData);
|
|
5713
5773
|
if (this.primaryKeys.length === 1) {
|
|
5714
5774
|
this.singlePrimaryKey = this.primaryKeys[0];
|
|
5775
|
+
} else if (this.primaryKeys.length === 0 && shape !== anyShape && options.noPrimaryKey !== "ignore") {
|
|
5776
|
+
const message = `Table ${table} has no primary key`;
|
|
5777
|
+
if (options.noPrimaryKey === "error")
|
|
5778
|
+
throw new Error(message);
|
|
5779
|
+
else
|
|
5780
|
+
logger.warn(message);
|
|
5715
5781
|
}
|
|
5716
5782
|
const columns = Object.keys(
|
|
5717
5783
|
shape
|
|
@@ -5761,18 +5827,19 @@ const createDb = (_a) => {
|
|
|
5761
5827
|
"logger",
|
|
5762
5828
|
"columnTypes"
|
|
5763
5829
|
]);
|
|
5764
|
-
var _a2;
|
|
5830
|
+
var _a2, _b2;
|
|
5765
5831
|
const adapter = "adapter" in options ? options.adapter : new Adapter(options);
|
|
5766
5832
|
const commonOptions = {
|
|
5767
5833
|
log,
|
|
5768
5834
|
logger,
|
|
5769
|
-
autoPreparedStatements: (_a2 = options.autoPreparedStatements) != null ? _a2 : false
|
|
5835
|
+
autoPreparedStatements: (_a2 = options.autoPreparedStatements) != null ? _a2 : false,
|
|
5836
|
+
noPrimaryKey: (_b2 = options.noPrimaryKey) != null ? _b2 : "error"
|
|
5770
5837
|
};
|
|
5771
5838
|
const qb = new Db(
|
|
5772
5839
|
adapter,
|
|
5773
5840
|
void 0,
|
|
5774
5841
|
void 0,
|
|
5775
|
-
|
|
5842
|
+
anyShape,
|
|
5776
5843
|
ct,
|
|
5777
5844
|
commonOptions
|
|
5778
5845
|
);
|