pqb 0.40.8 → 0.40.10
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/dist/index.d.ts +36 -20
- package/dist/index.js +72 -56
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +72 -56
- package/dist/index.mjs.map +1 -1
- package/package.json +2 -2
package/dist/index.d.ts
CHANGED
|
@@ -384,6 +384,8 @@ interface CommonQueryData {
|
|
|
384
384
|
outerJoinOverrides?: JoinOverrides;
|
|
385
385
|
schema?: string;
|
|
386
386
|
select?: SelectItem[];
|
|
387
|
+
selectAllColumns?: string[];
|
|
388
|
+
selectAllKeys?: RecordUnknown;
|
|
387
389
|
/**
|
|
388
390
|
* column type for query with 'value' or 'valueOrThrow' return type
|
|
389
391
|
* Is needed in {@link getShapeFromSelect} to get shape of sub-select that returns a single value.
|
|
@@ -1883,6 +1885,13 @@ interface QueryMetaHasWhere {
|
|
|
1883
1885
|
hasWhere: true;
|
|
1884
1886
|
};
|
|
1885
1887
|
}
|
|
1888
|
+
interface QueryFnReturningSelect {
|
|
1889
|
+
(q: never): {
|
|
1890
|
+
meta: {
|
|
1891
|
+
hasSelect: true;
|
|
1892
|
+
};
|
|
1893
|
+
};
|
|
1894
|
+
}
|
|
1886
1895
|
/**
|
|
1887
1896
|
* Mutative {@link Where.prototype.where}
|
|
1888
1897
|
*/
|
|
@@ -2483,6 +2492,10 @@ declare class Where {
|
|
|
2483
2492
|
* // find by a relation name if it's defined
|
|
2484
2493
|
* db.user.whereExists('account');
|
|
2485
2494
|
*
|
|
2495
|
+
* // find users who have an account with positive balance
|
|
2496
|
+
* // `accounts` is a relation name
|
|
2497
|
+
* db.user.whereExists((q) => q.accounts.where({ balance: { gt: 0 } }));
|
|
2498
|
+
*
|
|
2486
2499
|
* // find using a table and a join conditions
|
|
2487
2500
|
* db.user.whereExists(db.account, 'account.id', 'user.id');
|
|
2488
2501
|
*
|
|
@@ -2490,7 +2503,11 @@ declare class Where {
|
|
|
2490
2503
|
* db.user.whereExists(db.account, (q) => q.on('account.id', '=', 'user.id'));
|
|
2491
2504
|
* ```
|
|
2492
2505
|
*/
|
|
2493
|
-
whereExists<T extends PickQueryMetaShapeRelationsWithData, Arg extends JoinFirstArg<T>>(this: T, arg: Arg, ...args:
|
|
2506
|
+
whereExists<T extends PickQueryMetaShapeRelationsWithData, Arg extends JoinFirstArg<T>, Args extends JoinArgs<T, Arg>>(this: T, arg: Arg, ...args: Args): Arg extends QueryFnReturningSelect ? {
|
|
2507
|
+
error: 'Cannot select in whereExists';
|
|
2508
|
+
} : Args[0] extends QueryFnReturningSelect ? {
|
|
2509
|
+
error: 'Cannot select in whereExists';
|
|
2510
|
+
} : WhereResult<T>;
|
|
2494
2511
|
/**
|
|
2495
2512
|
* Acts as `whereExists`, but prepends the condition with `OR`:
|
|
2496
2513
|
*
|
|
@@ -3345,29 +3362,29 @@ type DbTableOptionScopes<Table extends string | undefined, Shape extends QueryCo
|
|
|
3345
3362
|
[K in Keys]: (q: ScopeArgumentQuery<Table, Shape>) => QueryBase;
|
|
3346
3363
|
};
|
|
3347
3364
|
type QueryDefaultReturnData<Shape extends QueryColumnsInit> = {
|
|
3348
|
-
[K in DefaultSelectColumns<Shape>
|
|
3365
|
+
[K in DefaultSelectColumns<Shape>]: Shape[K]['outputType'];
|
|
3349
3366
|
}[];
|
|
3367
|
+
interface TableMeta<Table extends string | undefined, Shape extends QueryColumnsInit, ShapeWithComputed extends QueryColumnsInit, Scopes extends RecordUnknown | undefined> extends QueryMetaBase<{
|
|
3368
|
+
[K in keyof Scopes]: true;
|
|
3369
|
+
}> {
|
|
3370
|
+
kind: 'select';
|
|
3371
|
+
defaults: {
|
|
3372
|
+
[K in keyof Shape as unknown extends Shape[K]['data']['default'] ? never : K]: true;
|
|
3373
|
+
};
|
|
3374
|
+
selectable: SelectableFromShape<ShapeWithComputed, Table>;
|
|
3375
|
+
defaultSelect: DefaultSelectColumns<Shape>;
|
|
3376
|
+
}
|
|
3350
3377
|
declare const anyShape: QueryColumnsInit;
|
|
3351
3378
|
interface Db<Table extends string | undefined = undefined, Shape extends QueryColumnsInit = QueryColumnsInit, PrimaryKeys = never, UniqueColumns = never, UniqueColumnTuples = never, UniqueConstraints = never, ColumnTypes = DefaultColumnTypes<ColumnSchemaConfig>, ShapeWithComputed extends QueryColumnsInit = Shape, Scopes extends RecordUnknown | undefined = EmptyObject> extends DbBase<Adapter, Table, Shape, ColumnTypes, ShapeWithComputed>, QueryMethods<ColumnTypes>, QueryBase {
|
|
3352
|
-
result: Pick<Shape, DefaultSelectColumns<Shape
|
|
3379
|
+
result: Pick<Shape, DefaultSelectColumns<Shape>>;
|
|
3353
3380
|
queryBuilder: Db;
|
|
3354
3381
|
returnType: undefined;
|
|
3355
3382
|
then: QueryThen<QueryDefaultReturnData<Shape>>;
|
|
3356
3383
|
windows: Query['windows'];
|
|
3357
|
-
defaultSelectColumns: DefaultSelectColumns<Shape>;
|
|
3358
3384
|
relations: EmptyObject;
|
|
3359
3385
|
withData: EmptyObject;
|
|
3360
3386
|
error: new (message: string, length: number, name: QueryErrorName) => QueryError<this>;
|
|
3361
|
-
meta:
|
|
3362
|
-
kind: 'select';
|
|
3363
|
-
defaults: {
|
|
3364
|
-
[K in keyof Shape as unknown extends Shape[K]['data']['default'] ? never : K]: true;
|
|
3365
|
-
};
|
|
3366
|
-
scopes: {
|
|
3367
|
-
[K in keyof Scopes]: true;
|
|
3368
|
-
};
|
|
3369
|
-
selectable: SelectableFromShape<ShapeWithComputed, Table>;
|
|
3370
|
-
};
|
|
3387
|
+
meta: TableMeta<Table, Shape, ShapeWithComputed, Scopes>;
|
|
3371
3388
|
internal: QueryInternal<{
|
|
3372
3389
|
[K in keyof PrimaryKeys]: (keyof PrimaryKeys extends K ? never : keyof PrimaryKeys) extends never ? PrimaryKeys[K] : never;
|
|
3373
3390
|
}[keyof PrimaryKeys], PrimaryKeys | UniqueColumns, {
|
|
@@ -4764,7 +4781,7 @@ type FromResult<T extends FromQuerySelf, Arg extends MaybeArray<FromArg<T>>> = A
|
|
|
4764
4781
|
} : K extends 'result' ? T['withData'][Arg]['shape'] : K extends 'then' ? QueryThen<GetQueryResult<T, T['withData'][Arg]['shape']>> : T[K];
|
|
4765
4782
|
} : SetQueryTableAlias<T, Arg> : Arg extends PickQueryTableMetaResultInputType ? {
|
|
4766
4783
|
[K in keyof T]: K extends 'meta' ? {
|
|
4767
|
-
[K in keyof T['meta']]: K extends 'as' ? AliasOrTable<Arg> : K extends 'selectable' ? SelectableFromShape<Arg['result'], AliasOrTable<Arg>> : K extends 'kind' ? 'select' : T['meta'][K];
|
|
4784
|
+
[K in keyof T['meta']]: K extends 'as' ? AliasOrTable<Arg> : K extends 'selectable' ? SelectableFromShape<Arg['result'], AliasOrTable<Arg>> : K extends 'kind' ? 'select' : K extends 'defaultSelect' ? keyof Arg['result'] : T['meta'][K];
|
|
4768
4785
|
} : K extends 'result' ? Arg['result'] : K extends 'shape' ? Arg['result'] : K extends 'inputType' ? Arg['inputType'] : K extends 'then' ? QueryThen<GetQueryResult<T, Arg['result']>> : T[K];
|
|
4769
4786
|
} : Arg extends (infer A)[] ? {
|
|
4770
4787
|
[K in keyof T]: K extends 'meta' ? {
|
|
@@ -5364,11 +5381,11 @@ interface SelectAsCheckReturnTypes {
|
|
|
5364
5381
|
}
|
|
5365
5382
|
type SelectResult<T extends SelectSelf, Columns extends PropertyKey[]> = {
|
|
5366
5383
|
[K in keyof T]: K extends 'result' ? ('*' extends Columns[number] ? {
|
|
5367
|
-
[K in Columns[number] |
|
|
5384
|
+
[K in Columns[number] | T['meta']['defaultSelect'] as K extends '*' ? never : T['meta']['selectable'][K]['as']]: T['meta']['selectable'][K]['column'];
|
|
5368
5385
|
} : {
|
|
5369
5386
|
[K in Columns[number] as T['meta']['selectable'][K]['as']]: T['meta']['selectable'][K]['column'];
|
|
5370
5387
|
}) & (T['meta']['hasSelect'] extends true ? Omit<T['result'], Columns[number]> : unknown) : K extends 'then' ? QueryThen<GetQueryResult<T, ('*' extends Columns[number] ? {
|
|
5371
|
-
[K in Exclude<Columns[number], '*'> |
|
|
5388
|
+
[K in Exclude<Columns[number], '*'> | T['meta']['defaultSelect'] as T['meta']['selectable'][K]['as']]: T['meta']['selectable'][K]['column'];
|
|
5372
5389
|
} : {
|
|
5373
5390
|
[K in Columns[number] as T['meta']['selectable'][K]['as']]: T['meta']['selectable'][K]['column'];
|
|
5374
5391
|
}) & (T['meta']['hasSelect'] extends true ? Omit<T['result'], Columns[number]> : unknown)>> : T[K];
|
|
@@ -5391,9 +5408,9 @@ type SelectResultColumnsAndObj<T extends SelectSelf, Columns extends PropertyKey
|
|
|
5391
5408
|
selectable: SelectAsSelectable<Obj>;
|
|
5392
5409
|
} : K extends 'result' ? // Combine previously selected items, all columns if * was provided,
|
|
5393
5410
|
{
|
|
5394
|
-
[K in ('*' extends Columns[number] ? Exclude<Columns[number], '*'> |
|
|
5411
|
+
[K in ('*' extends Columns[number] ? Exclude<Columns[number], '*'> | T['meta']['defaultSelect'] : Columns[number]) | keyof Obj as K extends Columns[number] ? T['meta']['selectable'][K]['as'] : K]: K extends keyof Obj ? SelectAsValueResult<T, Obj[K]> : T['meta']['selectable'][K]['column'];
|
|
5395
5412
|
} & (T['meta']['hasSelect'] extends true ? Omit<T['result'], Columns[number]> : unknown) : K extends 'then' ? QueryThen<GetQueryResult<T, {
|
|
5396
|
-
[K in ('*' extends Columns[number] ? Exclude<Columns[number], '*'> |
|
|
5413
|
+
[K in ('*' extends Columns[number] ? Exclude<Columns[number], '*'> | T['meta']['defaultSelect'] : Columns[number]) | keyof Obj as K extends Columns[number] ? T['meta']['selectable'][K]['as'] : K]: K extends keyof Obj ? SelectAsValueResult<T, Obj[K]> : T['meta']['selectable'][K]['column'];
|
|
5397
5414
|
} & (T['meta']['hasSelect'] extends true ? Omit<T['result'], Columns[number]> : unknown)>> : T[K];
|
|
5398
5415
|
};
|
|
5399
5416
|
type SelectAsSelectable<Arg> = {
|
|
@@ -7600,7 +7617,6 @@ interface Query extends QueryBase, QueryMethods<unknown> {
|
|
|
7600
7617
|
then: QueryThen<unknown>;
|
|
7601
7618
|
catch: QueryCatch;
|
|
7602
7619
|
windows: EmptyObject;
|
|
7603
|
-
defaultSelectColumns: string[];
|
|
7604
7620
|
relations: RelationsBase;
|
|
7605
7621
|
error: new (message: string, length: number, name: QueryErrorName) => QueryError;
|
|
7606
7622
|
}
|
package/dist/index.js
CHANGED
|
@@ -805,8 +805,8 @@ const columnCode = (type, ctx, key, code, data = type.data, skip) => {
|
|
|
805
805
|
orchidCore.addCode(code, part);
|
|
806
806
|
}
|
|
807
807
|
}
|
|
808
|
-
if (data.
|
|
809
|
-
orchidCore.addCode(code, ".
|
|
808
|
+
if (data.explicitSelect)
|
|
809
|
+
orchidCore.addCode(code, ".select(false)");
|
|
810
810
|
if (data.isNullable)
|
|
811
811
|
orchidCore.addCode(code, ".nullable()");
|
|
812
812
|
if (type.encodeFn && type.encodeFn !== (skip == null ? void 0 : skip.encodeFn))
|
|
@@ -2358,7 +2358,7 @@ const getArgQueryTarget = (ctx, first, joinSubQuery, cloned) => {
|
|
|
2358
2358
|
}
|
|
2359
2359
|
};
|
|
2360
2360
|
const subJoinToSql = (ctx, jq, innerAs, outerAs, cloned) => {
|
|
2361
|
-
if (!jq.q.select && jq.
|
|
2361
|
+
if (!jq.q.select && jq.q.selectAllColumns) {
|
|
2362
2362
|
if (!cloned)
|
|
2363
2363
|
jq = jq.clone();
|
|
2364
2364
|
jq.q.select = [new RawSQL(`${innerAs}.*`)];
|
|
@@ -2578,6 +2578,13 @@ const processJoinArgs = (joinTo, first, args, joinSubQuery, whereExists) => {
|
|
|
2578
2578
|
s: joinSubQuery
|
|
2579
2579
|
};
|
|
2580
2580
|
};
|
|
2581
|
+
const preprocessJoinArg = (q, arg) => {
|
|
2582
|
+
if (typeof arg !== "function")
|
|
2583
|
+
return arg;
|
|
2584
|
+
arg = arg(q.relations);
|
|
2585
|
+
arg.joinQueryAfterCallback = arg.joinQuery;
|
|
2586
|
+
return arg;
|
|
2587
|
+
};
|
|
2581
2588
|
const makeJoinQueryBuilder = (joinedQuery, joinedShapes, joinTo) => {
|
|
2582
2589
|
const q = joinedQuery.baseQuery.clone();
|
|
2583
2590
|
q.baseQuery = q;
|
|
@@ -2640,10 +2647,7 @@ const _join = (query, require2, type, first, args) => {
|
|
|
2640
2647
|
let batchParsers;
|
|
2641
2648
|
let computeds;
|
|
2642
2649
|
let joinSubQuery = false;
|
|
2643
|
-
|
|
2644
|
-
first = first(query.relations);
|
|
2645
|
-
first.joinQueryAfterCallback = first.joinQuery;
|
|
2646
|
-
}
|
|
2650
|
+
first = preprocessJoinArg(query, first);
|
|
2647
2651
|
if (typeof first === "object") {
|
|
2648
2652
|
if (require2 && isQueryNone(first)) {
|
|
2649
2653
|
return _queryNone(query);
|
|
@@ -2695,7 +2699,7 @@ const _join = (query, require2, type, first, args) => {
|
|
|
2695
2699
|
);
|
|
2696
2700
|
if (joinKey && "s" in joinArgs && joinArgs.s) {
|
|
2697
2701
|
const j = "j" in joinArgs ? (_b = joinArgs.r) != null ? _b : joinArgs.j : "r" in joinArgs ? joinArgs.r : joinArgs.q;
|
|
2698
|
-
if (j.q.select || !j.
|
|
2702
|
+
if (j.q.select || !j.q.selectAllColumns) {
|
|
2699
2703
|
const shape2 = getShapeFromSelect(j, true);
|
|
2700
2704
|
setQueryObjectValue(
|
|
2701
2705
|
query,
|
|
@@ -4715,7 +4719,7 @@ class SelectItemExpression extends orchidCore.Expression {
|
|
|
4715
4719
|
}
|
|
4716
4720
|
// `makeSQL` acts similarly to how select args are handled
|
|
4717
4721
|
makeSQL(ctx, quotedAs) {
|
|
4718
|
-
return typeof this.item === "string" ? this.item === "*" ? selectAllSql(this.
|
|
4722
|
+
return typeof this.item === "string" ? this.item === "*" ? selectAllSql(this.q, quotedAs) : columnToSql(ctx, this.q, this.q.shape, this.item, quotedAs, true) : this.item.toSQL(ctx, quotedAs);
|
|
4719
4723
|
}
|
|
4720
4724
|
}
|
|
4721
4725
|
|
|
@@ -4849,12 +4853,14 @@ function queryFrom(self, arg) {
|
|
|
4849
4853
|
data.batchParsers = q.q.batchParsers;
|
|
4850
4854
|
}
|
|
4851
4855
|
data.from = arg;
|
|
4856
|
+
data.selectAllColumns = data.selectAllKeys = void 0;
|
|
4852
4857
|
return self;
|
|
4853
4858
|
}
|
|
4854
4859
|
function queryFromSql(self, args) {
|
|
4855
4860
|
const data = self.q;
|
|
4856
4861
|
data.as || (data.as = "t");
|
|
4857
4862
|
data.from = sqlQueryArgsToExpression(args);
|
|
4863
|
+
data.selectAllColumns = data.selectAllKeys = void 0;
|
|
4858
4864
|
return self;
|
|
4859
4865
|
}
|
|
4860
4866
|
class FromMethods {
|
|
@@ -4969,11 +4975,11 @@ const selectToSql = (ctx, table, query, quotedAs, hookSelect = query.hookSelect)
|
|
|
4969
4975
|
if (item === "*") {
|
|
4970
4976
|
if (hookSelect) {
|
|
4971
4977
|
selected != null ? selected : selected = {};
|
|
4972
|
-
for (const key in
|
|
4978
|
+
for (const key in query.selectAllKeys || query.shape) {
|
|
4973
4979
|
selected[key] = quotedAs;
|
|
4974
4980
|
}
|
|
4975
4981
|
}
|
|
4976
|
-
sql = selectAllSql(
|
|
4982
|
+
sql = selectAllSql(query, quotedAs);
|
|
4977
4983
|
} else {
|
|
4978
4984
|
const index = item.indexOf(".");
|
|
4979
4985
|
if (index !== -1) {
|
|
@@ -5075,15 +5081,15 @@ const selectToSql = (ctx, table, query, quotedAs, hookSelect = query.hookSelect)
|
|
|
5075
5081
|
list.push(sql);
|
|
5076
5082
|
}
|
|
5077
5083
|
}
|
|
5078
|
-
return list.length ? list.join(", ") : query.select ? "" : selectAllSql(
|
|
5084
|
+
return list.length ? list.join(", ") : query.select ? "" : selectAllSql(query, quotedAs);
|
|
5079
5085
|
};
|
|
5080
5086
|
function selectedObjectToSQL(ctx, quotedAs, item) {
|
|
5081
5087
|
const sql = item.toSQL(ctx, quotedAs);
|
|
5082
5088
|
return ctx.aliasValue ? `${sql} r` : sql;
|
|
5083
5089
|
}
|
|
5084
|
-
const selectAllSql = (
|
|
5090
|
+
const selectAllSql = (query, quotedAs) => {
|
|
5085
5091
|
var _a, _b, _c;
|
|
5086
|
-
return ((_a = query.join) == null ? void 0 : _a.length) ? ((_b =
|
|
5092
|
+
return ((_a = query.join) == null ? void 0 : _a.length) ? ((_b = query.selectAllColumns) == null ? void 0 : _b.map((item) => `${quotedAs}.${item}`).join(", ")) || `${quotedAs}.*` : ((_c = query.selectAllColumns) == null ? void 0 : _c.join(", ")) || "*";
|
|
5087
5093
|
};
|
|
5088
5094
|
const pushSubQuerySql = (ctx, query, as, list, quotedAs) => {
|
|
5089
5095
|
var _a, _b, _c;
|
|
@@ -5277,7 +5283,7 @@ const pushWithSql = (ctx, items) => {
|
|
|
5277
5283
|
|
|
5278
5284
|
const checkIfASimpleQuery = (q) => {
|
|
5279
5285
|
var _a, _b;
|
|
5280
|
-
if (q.q.returnType && q.q.returnType !== "all" || q.
|
|
5286
|
+
if (q.q.returnType && q.q.returnType !== "all" || q.q.selectAllColumns || ((_a = q.q.and) == null ? void 0 : _a.length) || ((_b = q.q.or) == null ? void 0 : _b.length) || q.q.scopes)
|
|
5281
5287
|
return false;
|
|
5282
5288
|
const keys = Object.keys(q.q);
|
|
5283
5289
|
return !keys.some((key) => queryKeysOfNotSimpleQuery.includes(key));
|
|
@@ -5305,7 +5311,7 @@ const pushFromAndAs = (ctx, table, data, quotedAs) => {
|
|
|
5305
5311
|
const from = getFrom(ctx, table, data, quotedAs);
|
|
5306
5312
|
sql += from;
|
|
5307
5313
|
if (data.as && quotedAs && quotedAs !== from) {
|
|
5308
|
-
sql += `
|
|
5314
|
+
sql += ` ${quotedAs}`;
|
|
5309
5315
|
}
|
|
5310
5316
|
for (const as in data.sources) {
|
|
5311
5317
|
const source = data.sources[as];
|
|
@@ -9439,16 +9445,17 @@ var __spreadValues$5 = (a, b) => {
|
|
|
9439
9445
|
}
|
|
9440
9446
|
return a;
|
|
9441
9447
|
};
|
|
9442
|
-
const mergableObjects =
|
|
9443
|
-
shape
|
|
9444
|
-
withShapes
|
|
9445
|
-
parsers
|
|
9446
|
-
defaults
|
|
9447
|
-
joinedShapes
|
|
9448
|
-
joinedParsers
|
|
9449
|
-
joinedBatchParsers
|
|
9450
|
-
selectedComputeds
|
|
9451
|
-
|
|
9448
|
+
const mergableObjects = /* @__PURE__ */ new Set([
|
|
9449
|
+
"shape",
|
|
9450
|
+
"withShapes",
|
|
9451
|
+
"parsers",
|
|
9452
|
+
"defaults",
|
|
9453
|
+
"joinedShapes",
|
|
9454
|
+
"joinedParsers",
|
|
9455
|
+
"joinedBatchParsers",
|
|
9456
|
+
"selectedComputeds"
|
|
9457
|
+
]);
|
|
9458
|
+
const dontMergeArrays = /* @__PURE__ */ new Set(["selectAllColumns", "selectAllKeys"]);
|
|
9452
9459
|
class MergeQueryMethods {
|
|
9453
9460
|
merge(q) {
|
|
9454
9461
|
const query = this.clone();
|
|
@@ -9464,8 +9471,10 @@ class MergeQueryMethods {
|
|
|
9464
9471
|
break;
|
|
9465
9472
|
case "object":
|
|
9466
9473
|
if (Array.isArray(value)) {
|
|
9467
|
-
|
|
9468
|
-
|
|
9474
|
+
if (!dontMergeArrays.has(key)) {
|
|
9475
|
+
a[key] = a[key] ? [...a[key], ...value] : value;
|
|
9476
|
+
}
|
|
9477
|
+
} else if (mergableObjects.has(key)) {
|
|
9469
9478
|
a[key] = a[key] ? __spreadValues$5(__spreadValues$5({}, a[key]), value) : value;
|
|
9470
9479
|
} else if (key === "union") {
|
|
9471
9480
|
a[key] = a[key] ? {
|
|
@@ -9809,7 +9818,13 @@ const _queryWhereIn = (q, and, arg, values, not) => {
|
|
|
9809
9818
|
return q;
|
|
9810
9819
|
};
|
|
9811
9820
|
const existsArgs = (self, q, args) => {
|
|
9812
|
-
const joinArgs = processJoinArgs(
|
|
9821
|
+
const joinArgs = processJoinArgs(
|
|
9822
|
+
self,
|
|
9823
|
+
preprocessJoinArg(self, q),
|
|
9824
|
+
args,
|
|
9825
|
+
false,
|
|
9826
|
+
true
|
|
9827
|
+
);
|
|
9813
9828
|
return [
|
|
9814
9829
|
{
|
|
9815
9830
|
EXISTS: joinArgs
|
|
@@ -10452,6 +10467,10 @@ class Where {
|
|
|
10452
10467
|
* // find by a relation name if it's defined
|
|
10453
10468
|
* db.user.whereExists('account');
|
|
10454
10469
|
*
|
|
10470
|
+
* // find users who have an account with positive balance
|
|
10471
|
+
* // `accounts` is a relation name
|
|
10472
|
+
* db.user.whereExists((q) => q.accounts.where({ balance: { gt: 0 } }));
|
|
10473
|
+
*
|
|
10455
10474
|
* // find using a table and a join conditions
|
|
10456
10475
|
* db.user.whereExists(db.account, 'account.id', 'user.id');
|
|
10457
10476
|
*
|
|
@@ -11385,7 +11404,11 @@ class QueryUpsertOrCreate {
|
|
|
11385
11404
|
if (!orchidCore.isObjectEmpty(updateData)) {
|
|
11386
11405
|
_queryUpdate(q, updateData);
|
|
11387
11406
|
}
|
|
11388
|
-
|
|
11407
|
+
const c = orCreate(q, data.create, updateData, mergeData);
|
|
11408
|
+
if (!c.q.select) {
|
|
11409
|
+
c.q.returnType = "void";
|
|
11410
|
+
}
|
|
11411
|
+
return c;
|
|
11389
11412
|
}
|
|
11390
11413
|
/**
|
|
11391
11414
|
* `orCreate` creates a record only if it was not found by conditions.
|
|
@@ -12686,7 +12709,7 @@ class Db {
|
|
|
12686
12709
|
const parsers = {};
|
|
12687
12710
|
let hasParsers = false;
|
|
12688
12711
|
let modifyQuery = void 0;
|
|
12689
|
-
let
|
|
12712
|
+
let prepareSelectAll = false;
|
|
12690
12713
|
const { snakeCase } = options;
|
|
12691
12714
|
for (const key in shape) {
|
|
12692
12715
|
const column = shape[key];
|
|
@@ -12696,14 +12719,17 @@ class Db {
|
|
|
12696
12719
|
parsers[key] = column.parseFn;
|
|
12697
12720
|
}
|
|
12698
12721
|
if (column.data.name) {
|
|
12699
|
-
|
|
12722
|
+
prepareSelectAll = true;
|
|
12700
12723
|
} else if (snakeCase) {
|
|
12701
12724
|
const snakeName = orchidCore.toSnakeCase(key);
|
|
12702
12725
|
if (snakeName !== key) {
|
|
12703
|
-
|
|
12726
|
+
prepareSelectAll = true;
|
|
12704
12727
|
column.data.name = snakeName;
|
|
12705
12728
|
}
|
|
12706
12729
|
}
|
|
12730
|
+
if (column.data.explicitSelect) {
|
|
12731
|
+
prepareSelectAll = true;
|
|
12732
|
+
}
|
|
12707
12733
|
const { modifyQuery: mq } = column.data;
|
|
12708
12734
|
if (mq) {
|
|
12709
12735
|
modifyQuery = orchidCore.pushOrNewArray(modifyQuery, (q) => mq(q, column));
|
|
@@ -12723,17 +12749,6 @@ class Db {
|
|
|
12723
12749
|
}
|
|
12724
12750
|
}
|
|
12725
12751
|
}
|
|
12726
|
-
if (hasCustomName) {
|
|
12727
|
-
const list = [];
|
|
12728
|
-
for (const key in shape) {
|
|
12729
|
-
const column = shape[key];
|
|
12730
|
-
list.push(
|
|
12731
|
-
column.data.name ? `"${column.data.name}" AS "${key}"` : `"${key}"`
|
|
12732
|
-
);
|
|
12733
|
-
}
|
|
12734
|
-
this.internal.columnsForSelectAll = list;
|
|
12735
|
-
this.internal.columnsKeysForSelectAll = __spreadValues({}, shape);
|
|
12736
|
-
}
|
|
12737
12752
|
this.q = {
|
|
12738
12753
|
adapter,
|
|
12739
12754
|
shape,
|
|
@@ -12766,21 +12781,22 @@ class Db {
|
|
|
12766
12781
|
const columns = Object.keys(
|
|
12767
12782
|
shape
|
|
12768
12783
|
);
|
|
12769
|
-
const { toSQL } = this;
|
|
12770
12784
|
this.columns = columns;
|
|
12771
|
-
this.defaultSelectColumns = columns.filter(
|
|
12772
|
-
(column) => !shape[column].data.isHidden
|
|
12773
|
-
);
|
|
12774
12785
|
if (options.computed)
|
|
12775
12786
|
applyComputedColumns(this, options.computed);
|
|
12776
|
-
|
|
12777
|
-
|
|
12778
|
-
const
|
|
12779
|
-
|
|
12780
|
-
|
|
12781
|
-
|
|
12782
|
-
|
|
12783
|
-
|
|
12787
|
+
if (prepareSelectAll) {
|
|
12788
|
+
const list = [];
|
|
12789
|
+
for (const key in shape) {
|
|
12790
|
+
const column = shape[key];
|
|
12791
|
+
if (!column.data.explicitSelect) {
|
|
12792
|
+
list.push(
|
|
12793
|
+
column.data.name ? `"${column.data.name}" AS "${key}"` : `"${key}"`
|
|
12794
|
+
);
|
|
12795
|
+
}
|
|
12796
|
+
}
|
|
12797
|
+
this.q.selectAllColumns = list;
|
|
12798
|
+
this.q.selectAllKeys = __spreadValues({}, shape);
|
|
12799
|
+
}
|
|
12784
12800
|
if (modifyQuery) {
|
|
12785
12801
|
for (const cb of modifyQuery) {
|
|
12786
12802
|
cb(this);
|