pqb 0.25.1 → 0.26.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/dist/index.d.ts CHANGED
@@ -264,7 +264,7 @@ type OnConflictItem = string | string[] | Expression;
264
264
  type OnConflictMergeUpdate = string | string[] | RecordUnknown | Expression;
265
265
 
266
266
  type BooleanQueryColumn = QueryColumn<boolean, OperatorsBoolean>;
267
- declare class BooleanColumn$1<Schema extends ColumnSchemaConfig> extends ColumnType<Schema, boolean, Schema['boolean'], OperatorsBoolean> {
267
+ declare class BooleanColumn$1<Schema extends ColumnSchemaConfig> extends ColumnType<Schema, boolean, ReturnType<Schema['boolean']>, OperatorsBoolean> {
268
268
  dataType: "boolean";
269
269
  operators: OperatorsBoolean;
270
270
  constructor(schema: Schema);
@@ -863,6 +863,35 @@ declare class Join {
863
863
  *
864
864
  * When no matching record is found, it will skip records of the main table.
865
865
  *
866
+ * When joining the same table with the same condition more than once, duplicated joins will be ignored:
867
+ *
868
+ * ```ts
869
+ * // joining a relation
870
+ * db.post.join('comments').join('comments');
871
+ *
872
+ * // joining a table with a condition
873
+ * db.post
874
+ * .join('comments', 'comments.postId', 'post.id')
875
+ * .join('comments', 'comments.postId', 'post.id');
876
+ * ```
877
+ *
878
+ * Both queries will produce SQL with only 1 join
879
+ *
880
+ * ```sql
881
+ * SELECT * FROM post JOIN comments ON comments.postId = post.id
882
+ * ```
883
+ *
884
+ * However, this is only possible if the join has no dynamic values:
885
+ *
886
+ * ```ts
887
+ * db.post
888
+ * .join('comments', (q) => q.where({ rating: { gt: 5 } }))
889
+ * .join('comments', (q) => q.where({ rating: { gt: 5 } }));
890
+ * ```
891
+ *
892
+ * Both joins above have the same `{ gt: 5 }`, but still, the `5` is a dynamic value and in this case joins will be duplicated,
893
+ * resulting in a database error.
894
+ *
866
895
  * ### join relation
867
896
  *
868
897
  * When relations are defined between the tables, you can join them by a relation name.
@@ -2081,7 +2110,7 @@ declare class ScopeMethods {
2081
2110
  }
2082
2111
 
2083
2112
  type DateColumnInput = string | number | Date;
2084
- declare abstract class DateBaseColumn<Schema extends ColumnSchemaConfig> extends ColumnType<Schema, string, Schema['stringNumberDate'], OperatorsDate, DateColumnInput, string, Schema['stringSchema']> {
2113
+ declare abstract class DateBaseColumn<Schema extends ColumnSchemaConfig> extends ColumnType<Schema, string, ReturnType<Schema['stringNumberDate']>, OperatorsDate, DateColumnInput, string, ReturnType<Schema['stringSchema']>> {
2085
2114
  data: DateColumnData;
2086
2115
  operators: OperatorsDate;
2087
2116
  encodeFn: (input: DateColumnInput) => string | Date;
@@ -2113,7 +2142,7 @@ declare class TimestampTZColumn<Schema extends ColumnSchemaConfig> extends DateT
2113
2142
  baseDataType: "timestamp";
2114
2143
  toCode(t: string): Code;
2115
2144
  }
2116
- declare class TimeColumn<Schema extends ColumnSchemaConfig> extends ColumnType<Schema, string, Schema['stringSchema'], OperatorsTime> {
2145
+ declare class TimeColumn<Schema extends ColumnSchemaConfig> extends ColumnType<Schema, string, ReturnType<Schema['stringSchema']>, OperatorsTime> {
2117
2146
  data: DateColumnData & {
2118
2147
  dateTimePrecision?: number;
2119
2148
  };
@@ -2122,7 +2151,7 @@ declare class TimeColumn<Schema extends ColumnSchemaConfig> extends ColumnType<S
2122
2151
  constructor(schema: Schema, dateTimePrecision?: number);
2123
2152
  toCode(t: string): Code;
2124
2153
  }
2125
- declare class IntervalColumn<Schema extends ColumnSchemaConfig> extends ColumnType<Schema, TimeInterval, Schema['timeInterval'], OperatorsDate> {
2154
+ declare class IntervalColumn<Schema extends ColumnSchemaConfig> extends ColumnType<Schema, TimeInterval, ReturnType<Schema['timeInterval']>, OperatorsDate> {
2126
2155
  data: ColumnData & {
2127
2156
  fields?: string;
2128
2157
  precision?: number;
@@ -2165,7 +2194,7 @@ declare class JSONColumn<T, Schema extends ColumnTypeSchemaArg> extends ColumnTy
2165
2194
  operators: OperatorsJson;
2166
2195
  toCode(t: string): Code;
2167
2196
  }
2168
- declare class JSONTextColumn<Schema extends ColumnSchemaConfig> extends ColumnType<Schema, string, Schema['stringSchema'], OperatorsText> {
2197
+ declare class JSONTextColumn<Schema extends ColumnSchemaConfig> extends ColumnType<Schema, string, ReturnType<Schema['stringSchema']>, OperatorsText> {
2169
2198
  dataType: "json";
2170
2199
  operators: OperatorsText;
2171
2200
  constructor(schema: Schema);
@@ -2173,10 +2202,10 @@ declare class JSONTextColumn<Schema extends ColumnSchemaConfig> extends ColumnTy
2173
2202
  }
2174
2203
 
2175
2204
  type TextColumnData = StringTypeData;
2176
- declare abstract class TextBaseColumn<Schema extends ColumnSchemaConfig> extends ColumnType<Schema, string, Schema['stringSchema'], OperatorsText> {
2205
+ declare abstract class TextBaseColumn<Schema extends ColumnSchemaConfig> extends ColumnType<Schema, string, ReturnType<Schema['stringSchema']>, OperatorsText> {
2177
2206
  data: TextColumnData;
2178
2207
  operators: OperatorsText;
2179
- constructor(schema: Schema, schemaType?: Schema['stringSchema']);
2208
+ constructor(schema: Schema, schemaType?: ReturnType<Schema['stringSchema']>);
2180
2209
  }
2181
2210
  declare abstract class LimitedTextBaseColumn<Schema extends ColumnSchemaConfig> extends TextBaseColumn<Schema> {
2182
2211
  data: TextColumnData & {
@@ -2206,55 +2235,55 @@ declare class TextColumn<Schema extends ColumnSchemaConfig> extends TextBaseColu
2206
2235
  constructor(schema: Schema, min?: number, max?: number);
2207
2236
  toCode(t: string): Code;
2208
2237
  }
2209
- declare class ByteaColumn<Schema extends ColumnSchemaConfig> extends ColumnType<Schema, Buffer, Schema['buffer'], OperatorsText> {
2238
+ declare class ByteaColumn<Schema extends ColumnSchemaConfig> extends ColumnType<Schema, Buffer, ReturnType<Schema['buffer']>, OperatorsText> {
2210
2239
  dataType: "bytea";
2211
2240
  operators: OperatorsText;
2212
2241
  constructor(schema: Schema);
2213
2242
  toCode(t: string): Code;
2214
2243
  }
2215
- declare class PointColumn<Schema extends ColumnSchemaConfig> extends ColumnType<Schema, string, Schema['stringSchema'], OperatorsText> {
2244
+ declare class PointColumn<Schema extends ColumnSchemaConfig> extends ColumnType<Schema, string, ReturnType<Schema['stringSchema']>, OperatorsText> {
2216
2245
  dataType: "point";
2217
2246
  operators: OperatorsText;
2218
2247
  constructor(schema: Schema);
2219
2248
  toCode(t: string): Code;
2220
2249
  }
2221
- declare class LineColumn<Schema extends ColumnSchemaConfig> extends ColumnType<Schema, string, Schema['stringSchema'], OperatorsText> {
2250
+ declare class LineColumn<Schema extends ColumnSchemaConfig> extends ColumnType<Schema, string, ReturnType<Schema['stringSchema']>, OperatorsText> {
2222
2251
  dataType: "line";
2223
2252
  operators: OperatorsText;
2224
2253
  constructor(schema: Schema);
2225
2254
  toCode(t: string): Code;
2226
2255
  }
2227
- declare class LsegColumn<Schema extends ColumnSchemaConfig> extends ColumnType<Schema, string, Schema['stringSchema'], OperatorsText> {
2256
+ declare class LsegColumn<Schema extends ColumnSchemaConfig> extends ColumnType<Schema, string, ReturnType<Schema['stringSchema']>, OperatorsText> {
2228
2257
  dataType: "lseg";
2229
2258
  operators: OperatorsText;
2230
2259
  constructor(schema: Schema);
2231
2260
  toCode(t: string): Code;
2232
2261
  }
2233
- declare class BoxColumn<Schema extends ColumnSchemaConfig> extends ColumnType<Schema, string, Schema['stringSchema'], OperatorsText> {
2262
+ declare class BoxColumn<Schema extends ColumnSchemaConfig> extends ColumnType<Schema, string, ReturnType<Schema['stringSchema']>, OperatorsText> {
2234
2263
  dataType: "box";
2235
2264
  operators: OperatorsText;
2236
2265
  constructor(schema: Schema);
2237
2266
  toCode(t: string): Code;
2238
2267
  }
2239
- declare class PathColumn<Schema extends ColumnSchemaConfig> extends ColumnType<Schema, string, Schema['stringSchema'], OperatorsText> {
2268
+ declare class PathColumn<Schema extends ColumnSchemaConfig> extends ColumnType<Schema, string, ReturnType<Schema['stringSchema']>, OperatorsText> {
2240
2269
  dataType: "path";
2241
2270
  operators: OperatorsText;
2242
2271
  constructor(schema: Schema);
2243
2272
  toCode(t: string): Code;
2244
2273
  }
2245
- declare class PolygonColumn<Schema extends ColumnSchemaConfig> extends ColumnType<Schema, string, Schema['stringSchema'], OperatorsText> {
2274
+ declare class PolygonColumn<Schema extends ColumnSchemaConfig> extends ColumnType<Schema, string, ReturnType<Schema['stringSchema']>, OperatorsText> {
2246
2275
  dataType: "polygon";
2247
2276
  operators: OperatorsText;
2248
2277
  constructor(schema: Schema);
2249
2278
  toCode(t: string): Code;
2250
2279
  }
2251
- declare class CircleColumn<Schema extends ColumnSchemaConfig> extends ColumnType<Schema, string, Schema['stringSchema'], OperatorsText> {
2280
+ declare class CircleColumn<Schema extends ColumnSchemaConfig> extends ColumnType<Schema, string, ReturnType<Schema['stringSchema']>, OperatorsText> {
2252
2281
  dataType: "circle";
2253
2282
  operators: OperatorsText;
2254
2283
  constructor(schema: Schema);
2255
2284
  toCode(t: string): Code;
2256
2285
  }
2257
- declare class MoneyColumn<Schema extends ColumnSchemaConfig> extends NumberBaseColumn<Schema, Schema['stringSchema']> {
2286
+ declare class MoneyColumn<Schema extends ColumnSchemaConfig> extends NumberBaseColumn<Schema, ReturnType<Schema['stringSchema']>> {
2258
2287
  dataType: "money";
2259
2288
  constructor(schema: Schema);
2260
2289
  toCode(t: string): Code;
@@ -2262,25 +2291,25 @@ declare class MoneyColumn<Schema extends ColumnSchemaConfig> extends NumberBaseC
2262
2291
  hideFromCode: boolean;
2263
2292
  };
2264
2293
  }
2265
- declare class CidrColumn<Schema extends ColumnSchemaConfig> extends ColumnType<Schema, string, Schema['stringSchema'], OperatorsText> {
2294
+ declare class CidrColumn<Schema extends ColumnSchemaConfig> extends ColumnType<Schema, string, ReturnType<Schema['stringSchema']>, OperatorsText> {
2266
2295
  dataType: "cidr";
2267
2296
  operators: OperatorsText;
2268
2297
  constructor(schema: Schema);
2269
2298
  toCode(t: string): Code;
2270
2299
  }
2271
- declare class InetColumn<Schema extends ColumnSchemaConfig> extends ColumnType<Schema, string, Schema['stringSchema'], OperatorsText> {
2300
+ declare class InetColumn<Schema extends ColumnSchemaConfig> extends ColumnType<Schema, string, ReturnType<Schema['stringSchema']>, OperatorsText> {
2272
2301
  dataType: "inet";
2273
2302
  operators: OperatorsText;
2274
2303
  constructor(schema: Schema);
2275
2304
  toCode(t: string): Code;
2276
2305
  }
2277
- declare class MacAddrColumn<Schema extends ColumnSchemaConfig> extends ColumnType<Schema, string, Schema['stringSchema'], OperatorsText> {
2306
+ declare class MacAddrColumn<Schema extends ColumnSchemaConfig> extends ColumnType<Schema, string, ReturnType<Schema['stringSchema']>, OperatorsText> {
2278
2307
  dataType: "macaddr";
2279
2308
  operators: OperatorsText;
2280
2309
  constructor(schema: Schema);
2281
2310
  toCode(t: string): Code;
2282
2311
  }
2283
- declare class MacAddr8Column<Schema extends ColumnSchemaConfig> extends ColumnType<Schema, string, Schema['stringSchema'], OperatorsText> {
2312
+ declare class MacAddr8Column<Schema extends ColumnSchemaConfig> extends ColumnType<Schema, string, ReturnType<Schema['stringSchema']>, OperatorsText> {
2284
2313
  dataType: "macaddr8";
2285
2314
  operators: OperatorsText;
2286
2315
  constructor(schema: Schema);
@@ -2307,7 +2336,7 @@ declare class BitVaryingColumn<Schema extends ColumnSchemaConfig> extends Column
2307
2336
  toSQL(): string;
2308
2337
  }
2309
2338
  type TsVectorGeneratedColumns = string[] | Record<string, SearchWeight>;
2310
- declare class TsVectorColumn<Schema extends ColumnSchemaConfig> extends ColumnType<Schema, string, Schema['stringSchema'], OperatorsText> {
2339
+ declare class TsVectorColumn<Schema extends ColumnSchemaConfig> extends ColumnType<Schema, string, ReturnType<Schema['stringSchema']>, OperatorsText> {
2311
2340
  defaultLanguage: string;
2312
2341
  dataType: "tsvector";
2313
2342
  operators: OperatorsText;
@@ -2339,13 +2368,13 @@ declare class TsVectorColumn<Schema extends ColumnSchemaConfig> extends ColumnTy
2339
2368
  */
2340
2369
  generated<T extends PickColumnData>(this: T, ...args: StaticSQLArgs | [language: string, columns: TsVectorGeneratedColumns] | [columns: TsVectorGeneratedColumns]): T;
2341
2370
  }
2342
- declare class TsQueryColumn<Schema extends ColumnSchemaConfig> extends ColumnType<Schema, string, Schema['stringSchema'], OperatorsText> {
2371
+ declare class TsQueryColumn<Schema extends ColumnSchemaConfig> extends ColumnType<Schema, string, ReturnType<Schema['stringSchema']>, OperatorsText> {
2343
2372
  dataType: "tsquery";
2344
2373
  operators: OperatorsText;
2345
2374
  constructor(schema: Schema);
2346
2375
  toCode(t: string): Code;
2347
2376
  }
2348
- declare class UUIDColumn<Schema extends ColumnSchemaConfig> extends ColumnType<Schema, string, Schema['uuid'], OperatorsText> {
2377
+ declare class UUIDColumn<Schema extends ColumnSchemaConfig> extends ColumnType<Schema, string, ReturnType<Schema['uuid']>, OperatorsText> {
2349
2378
  dataType: "uuid";
2350
2379
  operators: OperatorsText;
2351
2380
  constructor(schema: Schema);
@@ -2357,7 +2386,7 @@ declare class UUIDColumn<Schema extends ColumnSchemaConfig> extends ColumnType<S
2357
2386
  };
2358
2387
  toCode(t: string): Code;
2359
2388
  }
2360
- declare class XMLColumn<Schema extends ColumnSchemaConfig> extends ColumnType<Schema, string, Schema['stringSchema'], OperatorsText> {
2389
+ declare class XMLColumn<Schema extends ColumnSchemaConfig> extends ColumnType<Schema, string, ReturnType<Schema['stringSchema']>, OperatorsText> {
2361
2390
  dataType: "xml";
2362
2391
  operators: OperatorsText;
2363
2392
  constructor(schema: Schema);
@@ -2373,7 +2402,7 @@ declare class CitextColumn<Schema extends ColumnSchemaConfig> extends TextBaseCo
2373
2402
  toCode(t: string): Code;
2374
2403
  }
2375
2404
 
2376
- declare class CustomTypeColumn<Schema extends ColumnSchemaConfig> extends ColumnType<Schema, unknown, Schema['unknown'], typeof Operators.any> {
2405
+ declare class CustomTypeColumn<Schema extends ColumnSchemaConfig> extends ColumnType<Schema, unknown, ReturnType<Schema['unknown']>, typeof Operators.any> {
2377
2406
  dataType: string;
2378
2407
  operators: OperatorsAny;
2379
2408
  constructor(schema: Schema, dataType: string);
@@ -2530,16 +2559,16 @@ declare abstract class NumberBaseColumn<Schema extends ColumnSchemaConfig, Schem
2530
2559
  data: NumberColumnData;
2531
2560
  operators: OperatorsNumber;
2532
2561
  }
2533
- declare abstract class IntegerBaseColumn<Schema extends ColumnSchemaConfig> extends NumberBaseColumn<Schema, Schema['int']> {
2562
+ declare abstract class IntegerBaseColumn<Schema extends ColumnSchemaConfig> extends NumberBaseColumn<Schema, ReturnType<Schema['int']>> {
2534
2563
  data: NumberColumnData;
2535
2564
  constructor(schema: Schema);
2536
2565
  }
2537
- declare abstract class NumberAsStringBaseColumn<Schema extends ColumnSchemaConfig> extends ColumnType<Schema, string, Schema['stringSchema'], OperatorsNumber> {
2566
+ declare abstract class NumberAsStringBaseColumn<Schema extends ColumnSchemaConfig> extends ColumnType<Schema, string, ReturnType<Schema['stringSchema']>, OperatorsNumber> {
2538
2567
  operators: OperatorsNumber;
2539
2568
  data: ColumnData;
2540
2569
  constructor(schema: Schema);
2541
2570
  }
2542
- declare class DecimalColumn<Schema extends ColumnSchemaConfig> extends ColumnType<Schema, string, Schema['stringSchema'], OperatorsNumber> {
2571
+ declare class DecimalColumn<Schema extends ColumnSchemaConfig> extends ColumnType<Schema, string, ReturnType<Schema['stringSchema']>, OperatorsNumber> {
2543
2572
  data: ColumnData & {
2544
2573
  numericPrecision?: number;
2545
2574
  numericScale?: number;
@@ -2568,7 +2597,7 @@ declare class BigIntColumn<Schema extends ColumnSchemaConfig> extends NumberAsSt
2568
2597
  toCode(t: string): Code;
2569
2598
  identity<T extends ColumnType>(this: T, options?: TableData.Identity): IdentityColumn<T>;
2570
2599
  }
2571
- declare class RealColumn<Schema extends ColumnSchemaConfig> extends NumberBaseColumn<Schema, Schema['number']> {
2600
+ declare class RealColumn<Schema extends ColumnSchemaConfig> extends NumberBaseColumn<Schema, ReturnType<Schema['number']>> {
2572
2601
  dataType: "real";
2573
2602
  parseItem: typeof parseFloat;
2574
2603
  constructor(schema: Schema);
@@ -2840,7 +2869,7 @@ interface DbResult<ColumnTypes> extends Db<string, Record<string, never>, EmptyO
2840
2869
  close: Adapter['close'];
2841
2870
  }
2842
2871
  /**
2843
- * For the case of using the query builder as a standalone tool, use `createDb` from `pqb` package.
2872
+ * For the case of using the query builder as a standalone tool, use `createDb`.
2844
2873
  *
2845
2874
  * As `Orchid ORM` focuses on ORM usage, docs examples mostly demonstrates how to work with ORM-defined tables,
2846
2875
  * but everything that's not related to table relations should also work with `pqb` query builder on its own.
@@ -2850,6 +2879,10 @@ interface DbResult<ColumnTypes> extends Db<string, Record<string, never>, EmptyO
2850
2879
  * ```ts
2851
2880
  * import { createDb } from 'orchid-orm';
2852
2881
  *
2882
+ * import { zodSchemaConfig } from 'orchid-orm-schema-to-zod';
2883
+ * // or
2884
+ * import { SchemaConfig } from 'orchid-orm-valibot';
2885
+ *
2853
2886
  * const db = createDb({
2854
2887
  * // db connection options
2855
2888
  * databaseURL: process.env.DATABASE_URL,
@@ -2861,6 +2894,11 @@ interface DbResult<ColumnTypes> extends Db<string, Record<string, never>, EmptyO
2861
2894
  * // override default SQL for timestamp, see `nowSQL` above
2862
2895
  * nowSQL: `now() AT TIME ZONE 'UTC'`,
2863
2896
  *
2897
+ * // optional, but recommended: makes zod schemas for your tables
2898
+ * schemaConfig: zodSchemaConfig,
2899
+ * // or
2900
+ * schemaConfig: valibotSchemaConfig,
2901
+ *
2864
2902
  * // override column types:
2865
2903
  * columnTypes: (t) => ({
2866
2904
  * // by default timestamp is returned as a string, override to a number
@@ -6966,7 +7004,7 @@ interface ColumnsShapeToObjectArray<Shape extends QueryColumns> {
6966
7004
  operators: OperatorsAny;
6967
7005
  }
6968
7006
 
6969
- declare abstract class VirtualColumn<Schema extends ColumnSchemaConfig, InputSchema extends Schema['type'] = Schema['never']> extends ColumnType<Schema, unknown, InputSchema, OperatorsAny> {
7007
+ declare abstract class VirtualColumn<Schema extends ColumnSchemaConfig, InputSchema extends Schema['type'] = ReturnType<Schema['never']>> extends ColumnType<Schema, unknown, InputSchema, OperatorsAny> {
6970
7008
  dataType: string;
6971
7009
  operators: OperatorsAny;
6972
7010
  constructor(schema: Schema, inputSchema?: InputSchema);