@ignisia/sql 0.3.0 → 0.4.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.
Files changed (108) hide show
  1. package/README.md +1 -1
  2. package/dist/cjs/column/index.js +2 -9
  3. package/dist/cjs/database/alter.d.cts +2 -2
  4. package/dist/cjs/database/column.d.cts +2 -2
  5. package/dist/cjs/database/contract.d.cts +2 -2
  6. package/dist/cjs/database/index.d.cts +2 -2
  7. package/dist/cjs/database/index.js +1 -1
  8. package/dist/cjs/database/table.d.cts +2 -2
  9. package/dist/cjs/database/types.d.cts +1 -1
  10. package/dist/cjs/database/wrapper.d.cts +3 -3
  11. package/dist/cjs/database/wrapper.js +1 -17
  12. package/dist/cjs/{index-2jl8MRfX.d.cts → index-BjgeY76W.d.cts} +2 -2
  13. package/dist/cjs/{index-CnQVnCEI.d.cts → index-K07efKgt.d.cts} +194 -86
  14. package/dist/cjs/index.d.cts +2 -2
  15. package/dist/cjs/migration/index.d.cts +2 -2
  16. package/dist/cjs/migration/type.d.cts +2 -2
  17. package/dist/cjs/query/ast.d.cts +8 -0
  18. package/dist/cjs/query/ast.js +2 -0
  19. package/dist/cjs/query/builder.d.cts +5 -5
  20. package/dist/cjs/query/builder.js +8 -10
  21. package/dist/cjs/query/compiler.d.cts +13 -0
  22. package/dist/cjs/query/compiler.js +114 -0
  23. package/dist/cjs/query/condition/common.d.cts +46 -0
  24. package/dist/cjs/query/condition/common.js +50 -0
  25. package/dist/cjs/query/condition/core.d.cts +8 -0
  26. package/dist/cjs/query/condition/core.js +91 -0
  27. package/dist/cjs/query/condition/index.d.cts +10 -0
  28. package/dist/cjs/query/condition/index.js +26 -0
  29. package/dist/cjs/query/condition/not.d.cts +46 -0
  30. package/dist/cjs/query/condition/not.js +51 -0
  31. package/dist/cjs/query/constants.d.cts +31 -6
  32. package/dist/cjs/query/constants.js +30 -5
  33. package/dist/cjs/query/contract.d.cts +2 -2
  34. package/dist/cjs/query/explain.d.cts +12 -0
  35. package/dist/cjs/query/explain.js +65 -0
  36. package/dist/cjs/query/helper.d.cts +3 -3
  37. package/dist/cjs/query/helper.js +1 -5
  38. package/dist/cjs/query/index.d.cts +4 -4
  39. package/dist/cjs/query/index.js +57 -72
  40. package/dist/cjs/query/join.d.cts +19 -7
  41. package/dist/cjs/query/join.js +46 -9
  42. package/dist/cjs/query/sql.d.cts +6 -4
  43. package/dist/cjs/query/sql.js +64 -25
  44. package/dist/cjs/query/types.d.cts +2 -2
  45. package/dist/cjs/query/utilities.d.cts +7 -8
  46. package/dist/cjs/query/utilities.js +21 -66
  47. package/dist/cjs/table/index.d.cts +3 -3
  48. package/dist/cjs/table/types.d.cts +2 -2
  49. package/dist/cjs/table/utilities.d.cts +2 -2
  50. package/dist/cjs/types.d.cts +5 -1
  51. package/dist/cjs/utilities.d.cts +2 -1
  52. package/dist/cjs/utilities.js +22 -0
  53. package/dist/esm/column/index.js +3 -10
  54. package/dist/esm/database/alter.d.ts +2 -2
  55. package/dist/esm/database/column.d.ts +2 -2
  56. package/dist/esm/database/contract.d.ts +2 -2
  57. package/dist/esm/database/index.d.ts +2 -2
  58. package/dist/esm/database/index.js +2 -2
  59. package/dist/esm/database/table.d.ts +2 -2
  60. package/dist/esm/database/types.d.ts +1 -1
  61. package/dist/esm/database/wrapper.d.ts +3 -3
  62. package/dist/esm/database/wrapper.js +1 -17
  63. package/dist/esm/{index-BXOAxB_h.d.ts → index-B4y4GiNB.d.ts} +2 -2
  64. package/dist/esm/{index-BdpoD4zk.d.ts → index-CARBkj9h.d.ts} +194 -86
  65. package/dist/esm/index.d.ts +2 -2
  66. package/dist/esm/migration/index.d.ts +2 -2
  67. package/dist/esm/migration/type.d.ts +2 -2
  68. package/dist/esm/query/ast.d.ts +8 -0
  69. package/dist/esm/query/ast.js +1 -0
  70. package/dist/esm/query/builder.d.ts +5 -5
  71. package/dist/esm/query/builder.js +8 -10
  72. package/dist/esm/query/compiler.d.ts +13 -0
  73. package/dist/esm/query/compiler.js +112 -0
  74. package/dist/esm/query/condition/common.d.ts +46 -0
  75. package/dist/esm/query/condition/common.js +45 -0
  76. package/dist/esm/query/condition/core.d.ts +8 -0
  77. package/dist/esm/query/condition/core.js +89 -0
  78. package/dist/esm/query/condition/index.d.ts +10 -0
  79. package/dist/esm/query/condition/index.js +3 -0
  80. package/dist/esm/query/condition/not.d.ts +46 -0
  81. package/dist/esm/query/condition/not.js +46 -0
  82. package/dist/esm/query/constants.d.ts +31 -6
  83. package/dist/esm/query/constants.js +28 -6
  84. package/dist/esm/query/contract.d.ts +2 -2
  85. package/dist/esm/query/explain.d.ts +12 -0
  86. package/dist/esm/query/explain.js +64 -0
  87. package/dist/esm/query/helper.d.ts +3 -3
  88. package/dist/esm/query/helper.js +3 -6
  89. package/dist/esm/query/index.d.ts +4 -4
  90. package/dist/esm/query/index.js +60 -75
  91. package/dist/esm/query/join.d.ts +19 -7
  92. package/dist/esm/query/join.js +45 -9
  93. package/dist/esm/query/sql.d.ts +6 -4
  94. package/dist/esm/query/sql.js +64 -27
  95. package/dist/esm/query/types.d.ts +2 -2
  96. package/dist/esm/query/utilities.d.ts +7 -8
  97. package/dist/esm/query/utilities.js +22 -66
  98. package/dist/esm/table/index.d.ts +3 -3
  99. package/dist/esm/table/types.d.ts +2 -2
  100. package/dist/esm/table/utilities.d.ts +2 -2
  101. package/dist/esm/types.d.ts +5 -1
  102. package/dist/esm/utilities.d.ts +2 -1
  103. package/dist/esm/utilities.js +22 -1
  104. package/package.json +11 -5
  105. package/dist/cjs/query/condition.d.cts +0 -8
  106. package/dist/cjs/query/condition.js +0 -109
  107. package/dist/esm/query/condition.d.ts +0 -8
  108. package/dist/esm/query/condition.js +0 -101
@@ -1,8 +1,8 @@
1
1
  import { Column } from './column/index.js';
2
- import { AcceptedColumnTypes } from './column/constants.js';
3
- import { UnionToIntersection } from './types.js';
4
- import { QueryType, OrderBy, AggregationFunction, QueryHooksType, AcceptedOperator, ConditionClause, LogicalOperator } from './query/constants.js';
5
2
  import { TransactionSQL } from 'bun';
3
+ import { UnionToIntersection, Multiply, Subtract } from './types.js';
4
+ import { QueryType, OrderBy, AggregationFunction, ExplainClause, ExplainFormat, AcceptedOperator, QueryHooksType, ConditionClause, LogicalOperator, AstType, AcceptedJoin } from './query/constants.js';
5
+ import { AcceptedColumnTypes } from './column/constants.js';
6
6
  import { Dialect } from './table/constants.js';
7
7
 
8
8
  type ColumnSelector<Alias extends string, TableRef extends Table<string, Record<string, Column>>, JoinedTables extends Record<string, Table<string, Record<string, Column>>>> = `${Alias}."${keyof TableRef['columns'] & string}"` | `${Alias}.*` | {
@@ -12,7 +12,7 @@ type StrictColumnSelector<Alias extends string, TableRef extends Table<string, R
12
12
  [A in keyof JoinedTables]: `${A & string}."${keyof JoinedTables[A]['columns'] & string}"`;
13
13
  }[keyof JoinedTables];
14
14
  type WhereValue<T extends Column> = {
15
- [K in AcceptedOperator]: K extends typeof AcceptedOperator.BETWEEN | typeof AcceptedOperator.NOT_BETWEEN ? [T['_output'], T['_output']] : K extends typeof AcceptedOperator.IN | typeof AcceptedOperator.NOT_IN ? T['_output'][] : K extends typeof AcceptedOperator.IS_NULL | typeof AcceptedOperator.IS_NOT_NULL ? never : T['_output'];
15
+ [K in AcceptedOperator]: K extends typeof AcceptedOperator.BETWEEN ? [T['_output'], T['_output']] : K extends typeof AcceptedOperator.IN ? T['_output'][] : K extends typeof AcceptedOperator.IS_NULL ? never : K extends typeof AcceptedOperator.STARTS_WITH | typeof AcceptedOperator.ENDS_WITH ? T['_output'] : T['_output'];
16
16
  };
17
17
  type AcceptedOrderBy<Columns extends string> = {
18
18
  column: Columns;
@@ -21,15 +21,13 @@ type AcceptedOrderBy<Columns extends string> = {
21
21
  type InsertValuesParser<Columns extends Record<string, Column>> = {
22
22
  [ColName in keyof Columns]: {
23
23
  output: Columns[ColName]['_output'];
24
- required: Columns[ColName]['definition'] extends {
25
- type: infer Type;
26
- } ? Type extends typeof AcceptedColumnTypes.SERIAL ? false : Columns[ColName]['definition'] extends {
27
- notNull: true;
28
- } ? true : Columns[ColName]['definition'] extends {
24
+ required: Columns[ColName]['type'] extends typeof AcceptedColumnTypes.SERIAL ? false : Columns[ColName]['definition'] extends {
29
25
  autoIncrement: true;
30
26
  } ? false : Columns[ColName]['definition'] extends {
31
27
  default: unknown;
32
- } ? false : true : false;
28
+ } ? false : Columns[ColName]['definition'] extends {
29
+ notNull: true;
30
+ } ? true : false;
33
31
  };
34
32
  };
35
33
  type InsertValuesParserRequired<Parsed extends InsertValuesParser<Record<string, Column>>> = {
@@ -56,9 +54,8 @@ type AggregateColumn<Allowed extends string, Fn extends AggregationFunction = Ag
56
54
  interface QueryDefinition<Alias extends string, TableRef extends Table<string, Record<string, Column>>, JoinedTables extends Record<string, Table<string, Record<string, Column>>> = NonNullable<unknown>, AllowedColumn extends ColumnSelector<Alias, TableRef, JoinedTables> = ColumnSelector<Alias, TableRef, JoinedTables>> {
57
55
  queryType: QueryType | null;
58
56
  select: SelectableColumn<AllowedColumn>[] | null;
59
- where: string[] | null;
60
- having: string[] | null;
61
- params: unknown[] | null;
57
+ where: GroupNode;
58
+ having: GroupNode;
62
59
  limit: number | null;
63
60
  offset: number | null;
64
61
  groupBy: AllowedColumn[] | null;
@@ -67,7 +64,7 @@ interface QueryDefinition<Alias extends string, TableRef extends Table<string, R
67
64
  orderBy: AcceptedOrderBy<AllowedColumn>[] | null;
68
65
  aggregates: AggregateColumn<AllowedColumn>[] | null;
69
66
  distinct: boolean | null;
70
- joins: string[] | null;
67
+ joins: JoinNode[];
71
68
  baseAlias: Alias | null;
72
69
  withDeleted: boolean | null;
73
70
  joinedTables: JoinedTables | null;
@@ -128,10 +125,57 @@ interface QueryRunHooksOptions {
128
125
  interface QueryRunHooks {
129
126
  (options: QueryRunHooksOptions): void;
130
127
  }
131
- interface QuerHooks {
128
+ interface QueryHooks {
132
129
  after: Set<QueryRunHooks>;
133
130
  before: Set<QueryRunHooks>;
134
131
  }
132
+ interface ExplainOptions extends Partial<Record<Lowercase<Exclude<ExplainClause, typeof ExplainClause.FORMAT>>, boolean>> {
133
+ format?: ExplainFormat;
134
+ tx?: TransactionSQL | null;
135
+ }
136
+
137
+ declare function addCondition<Alias extends string, TableRef extends Table<string, Record<string, Column>>, JoinedTables extends Record<string, Table<string, Record<string, Column>>>, Definition extends Partial<QueryDefinition<Alias, TableRef, JoinedTables>>, AllowedColumn extends ColumnSelector<Alias, TableRef, JoinedTables>, StrictAllowedColumn extends StrictColumnSelector<Alias, TableRef, JoinedTables>, Clause extends ConditionClause, ColName extends StrictAllowedColumn, Col extends ColName extends `${infer TableAlias}.${infer TableColumn}` ? TableAlias extends Alias ? TableRef['columns'][TableColumn] : JoinedTables[TableAlias]['columns'][TableColumn] : never, Operator extends AcceptedOperator, Value extends WhereValue<Col>[Operator], Logical extends LogicalOperator, ValidClause extends Lowercase<Clause>>(query: QueryBuilder<Alias, TableRef, JoinedTables, Definition, AllowedColumn, StrictAllowedColumn>, clause: Clause, column: ColName, operator: Operator, value: Value, logical: Logical, negate: boolean): QueryBuilder<Alias, TableRef, JoinedTables, Omit<Definition, ValidClause> & { [Key in ValidClause]: string[]; }, ColumnSelector<Alias, TableRef, JoinedTables>, StrictColumnSelector<Alias, TableRef, JoinedTables>, QueryTransformerContract<Alias, TableRef, JoinedTables, Omit<Definition, ValidClause> & { [Key in ValidClause]: string[]; }, ColumnSelector<Alias, TableRef, JoinedTables>, StrictColumnSelector<Alias, TableRef, JoinedTables>>, QueryConditionContract<Alias, TableRef, JoinedTables, Omit<Definition, ValidClause> & { [Key in ValidClause]: string[]; }, ColumnSelector<Alias, TableRef, JoinedTables>, StrictColumnSelector<Alias, TableRef, JoinedTables>>>;
138
+ declare function addGroupCondition<Alias extends string, TableRef extends Table<string, Record<string, Column>>, JoinedTables extends Record<string, Table<string, Record<string, Column>>>, Definition extends Partial<QueryDefinition<Alias, TableRef, JoinedTables>>, AllowedColumn extends ColumnSelector<Alias, TableRef, JoinedTables>, StrictAllowedColumn extends StrictColumnSelector<Alias, TableRef, JoinedTables>, Logical extends LogicalOperator>(query: QueryBuilder<Alias, TableRef, JoinedTables, Definition, AllowedColumn, StrictAllowedColumn>, logical: Logical, callback: (q: QueryBuilder<Alias, TableRef, JoinedTables>) => QueryBuilder<Alias, TableRef, JoinedTables>, negate: boolean): QueryBuilder<Alias, TableRef, JoinedTables, Omit<Definition, "where"> & {
139
+ where: GroupNode;
140
+ }, ColumnSelector<Alias, TableRef, JoinedTables>, StrictColumnSelector<Alias, TableRef, JoinedTables>, QueryTransformerContract<Alias, TableRef, JoinedTables, Omit<Definition, "where"> & {
141
+ where: GroupNode;
142
+ }, ColumnSelector<Alias, TableRef, JoinedTables>, StrictColumnSelector<Alias, TableRef, JoinedTables>>, QueryConditionContract<Alias, TableRef, JoinedTables, Omit<Definition, "where"> & {
143
+ where: GroupNode;
144
+ }, ColumnSelector<Alias, TableRef, JoinedTables>, StrictColumnSelector<Alias, TableRef, JoinedTables>>>;
145
+
146
+ interface QueryTransformerContract<Alias extends string, TableRef extends Table<string, Record<string, Column>>, JoinedTables extends Record<string, Table<string, Record<string, Column>>>, Definition extends Partial<QueryDefinition<Alias, TableRef, JoinedTables>>, AllowedColumn extends ColumnSelector<Alias, TableRef, JoinedTables>, StrictAllowedColumn extends StrictColumnSelector<Alias, TableRef, JoinedTables>> {
147
+ toQuery(this: QueryBuilder<Alias, TableRef, JoinedTables, Definition, AllowedColumn, StrictAllowedColumn>, dialect?: Dialect | null): {
148
+ query: string;
149
+ params: unknown[] | null | undefined;
150
+ };
151
+ toString(this: QueryBuilder<Alias, TableRef, JoinedTables, Definition, AllowedColumn, StrictAllowedColumn>): string;
152
+ toDebugString(this: QueryBuilder<Alias, TableRef, JoinedTables, Definition, AllowedColumn, StrictAllowedColumn>): string;
153
+ explain(this: QueryBuilder<Alias, TableRef, JoinedTables, Definition, AllowedColumn, StrictAllowedColumn>): Promise<unknown>;
154
+ explain(this: QueryBuilder<Alias, TableRef, JoinedTables, Definition, AllowedColumn, StrictAllowedColumn>, options: ExplainOptions): Promise<unknown>;
155
+ exec<This extends QueryBuilder<Alias, TableRef, JoinedTables, Definition, AllowedColumn, StrictAllowedColumn> = QueryBuilder<Alias, TableRef, JoinedTables, Definition, AllowedColumn, StrictAllowedColumn>, Output extends This['_output'] = This['_output']>(this: This, tx?: TransactionSQL | null): Promise<Output>;
156
+ clone(this: QueryBuilder<Alias, TableRef, JoinedTables, Definition, AllowedColumn, StrictAllowedColumn>): typeof this;
157
+ alias<NewAlias extends string>(this: QueryBuilder<Alias, TableRef, JoinedTables, Definition, AllowedColumn, StrictAllowedColumn>, alias: NewAlias): QueryBuilder<NewAlias, TableRef, JoinedTables, Omit<Definition, 'baseAlias'> & {
158
+ baseAlias: NewAlias;
159
+ }>;
160
+ }
161
+ interface QueryConditionContract<Alias extends string, TableRef extends Table<string, Record<string, Column>>, JoinedTables extends Record<string, Table<string, Record<string, Column>>>, Definition extends Partial<QueryDefinition<Alias, TableRef, JoinedTables>>, AllowedColumn extends ColumnSelector<Alias, TableRef, JoinedTables>, StrictAllowedColumn extends StrictColumnSelector<Alias, TableRef, JoinedTables>> {
162
+ where<ColName extends StrictAllowedColumn, Col extends ColName extends `${infer TableAlias}.${infer TableColumn}` ? TableAlias extends Alias ? TableRef['columns'][TableColumn] : JoinedTables[TableAlias]['columns'][TableColumn] : never, Operator extends typeof AcceptedOperator.IS_NULL, Value extends WhereValue<Col>[Operator]>(this: QueryBuilder<Alias, TableRef, JoinedTables, Definition, AllowedColumn, StrictAllowedColumn>, column: ColName, operator: Operator): ReturnType<typeof addCondition<Alias, TableRef, JoinedTables, Definition, AllowedColumn, StrictAllowedColumn, typeof ConditionClause.WHERE, ColName, ColName extends `${infer TableAlias}.${infer TableColumn}` ? TableAlias extends Alias ? TableRef['columns'][TableColumn] : JoinedTables[TableAlias]['columns'][TableColumn] : never, Operator, Value, typeof LogicalOperator.AND, Lowercase<typeof ConditionClause.WHERE>>>;
163
+ where<ColName extends StrictAllowedColumn, Col extends ColName extends `${infer TableAlias}.${infer TableColumn}` ? TableAlias extends Alias ? TableRef['columns'][TableColumn] : JoinedTables[TableAlias]['columns'][TableColumn] : never, Operator extends AcceptedOperator, Value extends WhereValue<Col>[Operator]>(this: QueryBuilder<Alias, TableRef, JoinedTables, Definition, AllowedColumn, StrictAllowedColumn>, column: ColName, operator: Operator, value: Value): ReturnType<typeof addCondition<Alias, TableRef, JoinedTables, Definition, AllowedColumn, StrictAllowedColumn, typeof ConditionClause.WHERE, ColName, ColName extends `${infer TableAlias}.${infer TableColumn}` ? TableAlias extends Alias ? TableRef['columns'][TableColumn] : JoinedTables[TableAlias]['columns'][TableColumn] : never, Operator, Value, typeof LogicalOperator.AND, Lowercase<typeof ConditionClause.WHERE>>>;
164
+ or<ColName extends StrictAllowedColumn, Col extends ColName extends `${infer TableAlias}.${infer TableColumn}` ? TableAlias extends Alias ? TableRef['columns'][TableColumn] : JoinedTables[TableAlias]['columns'][TableColumn] : never, Operator extends typeof AcceptedOperator.IS_NULL, Value extends WhereValue<Col>[Operator]>(this: QueryBuilder<Alias, TableRef, JoinedTables, Definition, AllowedColumn, StrictAllowedColumn>, column: ColName, operator: Operator): ReturnType<typeof addCondition<Alias, TableRef, JoinedTables, Definition, AllowedColumn, StrictAllowedColumn, typeof ConditionClause.WHERE, ColName, ColName extends `${infer TableAlias}.${infer TableColumn}` ? TableAlias extends Alias ? TableRef['columns'][TableColumn] : JoinedTables[TableAlias]['columns'][TableColumn] : never, Operator, Value, typeof LogicalOperator.OR, Lowercase<typeof ConditionClause.WHERE>>>;
165
+ or<ColName extends StrictAllowedColumn, Col extends ColName extends `${infer TableAlias}.${infer TableColumn}` ? TableAlias extends Alias ? TableRef['columns'][TableColumn] : JoinedTables[TableAlias]['columns'][TableColumn] : never, Operator extends AcceptedOperator, Value extends WhereValue<Col>[Operator]>(this: QueryBuilder<Alias, TableRef, JoinedTables, Definition, AllowedColumn, StrictAllowedColumn>, column: ColName, operator: Operator, value: Value): ReturnType<typeof addCondition<Alias, TableRef, JoinedTables, Definition, AllowedColumn, StrictAllowedColumn, typeof ConditionClause.WHERE, ColName, ColName extends `${infer TableAlias}.${infer TableColumn}` ? TableAlias extends Alias ? TableRef['columns'][TableColumn] : JoinedTables[TableAlias]['columns'][TableColumn] : never, Operator, Value, typeof LogicalOperator.OR, Lowercase<typeof ConditionClause.WHERE>>>;
166
+ having<ColName extends StrictAllowedColumn, Col extends ColName extends `${infer TableAlias}.${infer TableColumn}` ? TableAlias extends Alias ? TableRef['columns'][TableColumn] : JoinedTables[TableAlias]['columns'][TableColumn] : never, Operator extends AcceptedOperator, Value extends WhereValue<Col>[Operator]>(this: QueryBuilder<Alias, TableRef, JoinedTables, Definition, AllowedColumn, StrictAllowedColumn>, column: ColName, operator: Operator, value: Value): ReturnType<typeof addCondition<Alias, TableRef, JoinedTables, Definition, AllowedColumn, StrictAllowedColumn, typeof ConditionClause.HAVING, ColName, ColName extends `${infer TableAlias}.${infer TableColumn}` ? TableAlias extends Alias ? TableRef['columns'][TableColumn] : JoinedTables[TableAlias]['columns'][TableColumn] : never, Operator, Value, typeof LogicalOperator.AND, Lowercase<typeof ConditionClause.HAVING>>>;
167
+ whereGroup(this: QueryBuilder<Alias, TableRef, JoinedTables, Definition, AllowedColumn, StrictAllowedColumn>, callback: (q: QueryBuilder<Alias, TableRef, JoinedTables>) => QueryBuilder<Alias, TableRef, JoinedTables>): ReturnType<typeof addGroupCondition<Alias, TableRef, JoinedTables, Definition, AllowedColumn, StrictAllowedColumn, typeof LogicalOperator.AND>>;
168
+ orGroup(this: QueryBuilder<Alias, TableRef, JoinedTables, Definition, AllowedColumn, StrictAllowedColumn>, callback: (q: QueryBuilder<Alias, TableRef, JoinedTables>) => QueryBuilder<Alias, TableRef, JoinedTables>): ReturnType<typeof addGroupCondition<Alias, TableRef, JoinedTables, Definition, AllowedColumn, StrictAllowedColumn, typeof LogicalOperator.OR>>;
169
+ not: {
170
+ where<ColName extends StrictAllowedColumn, Col extends ColName extends `${infer TableAlias}.${infer TableColumn}` ? TableAlias extends Alias ? TableRef['columns'][TableColumn] : JoinedTables[TableAlias]['columns'][TableColumn] : never, Operator extends typeof AcceptedOperator.IS_NULL, Value extends WhereValue<Col>[Operator]>(column: ColName, operator: Operator): ReturnType<typeof addCondition<Alias, TableRef, JoinedTables, Definition, AllowedColumn, StrictAllowedColumn, typeof ConditionClause.WHERE, ColName, ColName extends `${infer TableAlias}.${infer TableColumn}` ? TableAlias extends Alias ? TableRef['columns'][TableColumn] : JoinedTables[TableAlias]['columns'][TableColumn] : never, Operator, Value, typeof LogicalOperator.AND, Lowercase<typeof ConditionClause.WHERE>>>;
171
+ where<ColName extends StrictAllowedColumn, Col extends ColName extends `${infer TableAlias}.${infer TableColumn}` ? TableAlias extends Alias ? TableRef['columns'][TableColumn] : JoinedTables[TableAlias]['columns'][TableColumn] : never, Operator extends AcceptedOperator, Value extends WhereValue<Col>[Operator]>(column: ColName, operator: Operator, value: Value): ReturnType<typeof addCondition<Alias, TableRef, JoinedTables, Definition, AllowedColumn, StrictAllowedColumn, typeof ConditionClause.WHERE, ColName, ColName extends `${infer TableAlias}.${infer TableColumn}` ? TableAlias extends Alias ? TableRef['columns'][TableColumn] : JoinedTables[TableAlias]['columns'][TableColumn] : never, Operator, Value, typeof LogicalOperator.AND, Lowercase<typeof ConditionClause.WHERE>>>;
172
+ or<ColName extends StrictAllowedColumn, Col extends ColName extends `${infer TableAlias}.${infer TableColumn}` ? TableAlias extends Alias ? TableRef['columns'][TableColumn] : JoinedTables[TableAlias]['columns'][TableColumn] : never, Operator extends typeof AcceptedOperator.IS_NULL, Value extends WhereValue<Col>[Operator]>(column: ColName, operator: Operator): ReturnType<typeof addCondition<Alias, TableRef, JoinedTables, Definition, AllowedColumn, StrictAllowedColumn, typeof ConditionClause.WHERE, ColName, ColName extends `${infer TableAlias}.${infer TableColumn}` ? TableAlias extends Alias ? TableRef['columns'][TableColumn] : JoinedTables[TableAlias]['columns'][TableColumn] : never, Operator, Value, typeof LogicalOperator.OR, Lowercase<typeof ConditionClause.WHERE>>>;
173
+ or<ColName extends StrictAllowedColumn, Col extends ColName extends `${infer TableAlias}.${infer TableColumn}` ? TableAlias extends Alias ? TableRef['columns'][TableColumn] : JoinedTables[TableAlias]['columns'][TableColumn] : never, Operator extends AcceptedOperator, Value extends WhereValue<Col>[Operator]>(column: ColName, operator: Operator, value: Value): ReturnType<typeof addCondition<Alias, TableRef, JoinedTables, Definition, AllowedColumn, StrictAllowedColumn, typeof ConditionClause.WHERE, ColName, ColName extends `${infer TableAlias}.${infer TableColumn}` ? TableAlias extends Alias ? TableRef['columns'][TableColumn] : JoinedTables[TableAlias]['columns'][TableColumn] : never, Operator, Value, typeof LogicalOperator.OR, Lowercase<typeof ConditionClause.WHERE>>>;
174
+ having<ColName extends StrictAllowedColumn, Col extends ColName extends `${infer TableAlias}.${infer TableColumn}` ? TableAlias extends Alias ? TableRef['columns'][TableColumn] : JoinedTables[TableAlias]['columns'][TableColumn] : never, Operator extends AcceptedOperator, Value extends WhereValue<Col>[Operator]>(column: ColName, operator: Operator, value: Value): ReturnType<typeof addCondition<Alias, TableRef, JoinedTables, Definition, AllowedColumn, StrictAllowedColumn, typeof ConditionClause.HAVING, ColName, ColName extends `${infer TableAlias}.${infer TableColumn}` ? TableAlias extends Alias ? TableRef['columns'][TableColumn] : JoinedTables[TableAlias]['columns'][TableColumn] : never, Operator, Value, typeof LogicalOperator.AND, Lowercase<typeof ConditionClause.HAVING>>>;
175
+ whereGroup(callback: (q: QueryBuilder<Alias, TableRef, JoinedTables>) => QueryBuilder<Alias, TableRef, JoinedTables>): ReturnType<typeof addGroupCondition<Alias, TableRef, JoinedTables, Definition, AllowedColumn, StrictAllowedColumn, typeof LogicalOperator.AND>>;
176
+ orGroup(callback: (q: QueryBuilder<Alias, TableRef, JoinedTables>) => QueryBuilder<Alias, TableRef, JoinedTables>): ReturnType<typeof addGroupCondition<Alias, TableRef, JoinedTables, Definition, AllowedColumn, StrictAllowedColumn, typeof LogicalOperator.OR>>;
177
+ };
178
+ }
135
179
 
136
180
  type SqlConfigMapping = {
137
181
  [Dialect.POSTGRES]: PostgresConfig;
@@ -247,14 +291,53 @@ declare class Table<TableName extends string, Columns extends Record<string, Col
247
291
  setDialect<DbDialect extends Dialect>(dialect: DbDialect): Table<TableName, Columns, DbDialect, CreatedAt, UpdatedAt, Timestamp, Paranoid>;
248
292
  create(options?: ExecOptions): Promise<this>;
249
293
  drop(options?: ExecOptions): Promise<this>;
250
- query(): QueryBuilder<this["name"], this, {}, {}, ColumnSelector<this["name"], this, {}>, `${this["name"]}."${keyof this["columns"] & string}"`>;
294
+ query(): QueryBuilder<this["name"], this, {}, {}, ColumnSelector<this["name"], this, {}>, `${this["name"]}."${keyof this["columns"] & string}"`, QueryTransformerContract<this["name"], this, {}, {}, ColumnSelector<this["name"], this, {}>, `${this["name"]}."${keyof this["columns"] & string}"`>, QueryConditionContract<this["name"], this, {}, {}, ColumnSelector<this["name"], this, {}>, `${this["name"]}."${keyof this["columns"] & string}"`>>;
295
+ }
296
+
297
+ interface BaseComparisonNode {
298
+ type: typeof AstType.COMPARISON;
299
+ column: string;
300
+ }
301
+ interface SingleValueComparisonNode extends BaseComparisonNode {
302
+ operator: Exclude<AcceptedOperator, typeof AcceptedOperator.IN | typeof AcceptedOperator.BETWEEN>;
303
+ value: unknown;
304
+ }
305
+ interface MultiValueComparisonNode extends BaseComparisonNode {
306
+ operator: typeof AcceptedOperator.IN | typeof AcceptedOperator.BETWEEN;
307
+ values: unknown[];
308
+ }
309
+ interface NullValueComparisonNode extends BaseComparisonNode {
310
+ operator: typeof AcceptedOperator.IS_NULL;
311
+ }
312
+ type ComparisonNode = SingleValueComparisonNode | MultiValueComparisonNode | NullValueComparisonNode;
313
+ interface GroupNode {
314
+ type: typeof AstType.GROUP;
315
+ operator: LogicalOperator;
316
+ children: AstNode[];
317
+ }
318
+ interface NotNode {
319
+ type: typeof AstType.NOT;
320
+ child: AstNode;
251
321
  }
322
+ type AstNode = ComparisonNode | GroupNode | NotNode;
323
+ interface BaseJoinNode {
324
+ type: typeof AstType.JOIN;
325
+ table: Table<string, Record<string, Column>>;
326
+ alias: string;
327
+ }
328
+ interface NonCrossNaturalJoinNode extends BaseJoinNode {
329
+ join: Exclude<AcceptedJoin, typeof AcceptedJoin.CROSS | typeof AcceptedJoin.NATURAL>;
330
+ on: AstNode;
331
+ }
332
+ interface CrossNaturalJoinNode extends BaseJoinNode {
333
+ join: typeof AcceptedJoin.CROSS | typeof AcceptedJoin.NATURAL;
334
+ }
335
+ type JoinNode = CrossNaturalJoinNode | NonCrossNaturalJoinNode;
252
336
 
253
337
  declare function alias<Alias extends string, TableRef extends Table<string, Record<string, Column>>, JoinedTables extends Record<string, Table<string, Record<string, Column>>>, Definition extends Partial<QueryDefinition<Alias, TableRef, JoinedTables>>, AllowedColumn extends ColumnSelector<Alias, TableRef, JoinedTables>, StrictAllowedColumn extends StrictColumnSelector<Alias, TableRef, JoinedTables>, NewAlias extends string>(this: QueryBuilder<Alias, TableRef, JoinedTables, Definition, AllowedColumn, StrictAllowedColumn>, alias: NewAlias): QueryBuilder<NewAlias, TableRef, JoinedTables, Omit<Definition, "baseAlias"> & {
254
338
  baseAlias: NewAlias;
255
339
  }>;
256
- declare function clone<Alias extends string, TableRef extends Table<string, Record<string, Column>>, JoinedTables extends Record<string, Table<string, Record<string, Column>>>, Definition extends Partial<QueryDefinition<Alias, TableRef, JoinedTables>>, AllowedColumn extends ColumnSelector<Alias, TableRef, JoinedTables>, StrictAllowedColumn extends StrictColumnSelector<Alias, TableRef, JoinedTables>>(this: QueryBuilder<Alias, TableRef, JoinedTables, Definition, AllowedColumn, StrictAllowedColumn>): QueryBuilder<Alias, TableRef, JoinedTables, Definition, AllowedColumn, StrictAllowedColumn>;
257
- declare function rawCol<StrictAllowedColumn extends string, ColName extends StrictAllowedColumn = StrictAllowedColumn>(column: ColName): ColName;
340
+ declare function clone<Alias extends string, TableRef extends Table<string, Record<string, Column>>, JoinedTables extends Record<string, Table<string, Record<string, Column>>>, Definition extends Partial<QueryDefinition<Alias, TableRef, JoinedTables>>, AllowedColumn extends ColumnSelector<Alias, TableRef, JoinedTables>, StrictAllowedColumn extends StrictColumnSelector<Alias, TableRef, JoinedTables>>(this: QueryBuilder<Alias, TableRef, JoinedTables, Definition, AllowedColumn, StrictAllowedColumn>): QueryBuilder<Alias, TableRef, JoinedTables, Definition, AllowedColumn, StrictAllowedColumn, QueryTransformerContract<Alias, TableRef, JoinedTables, Definition, AllowedColumn, StrictAllowedColumn>, QueryConditionContract<Alias, TableRef, JoinedTables, Definition, AllowedColumn, StrictAllowedColumn>>;
258
341
  declare function col<StrictAllowedColumn extends string, ColName extends StrictAllowedColumn = StrictAllowedColumn, ColAlias extends string = string>(column: ColName, alias: ColAlias): {
259
342
  readonly column: ColName;
260
343
  readonly as: ColAlias;
@@ -270,79 +353,94 @@ declare function aggregateCol<StrictAllowedColumn extends string, Aggregate exte
270
353
  fn: Aggregate;
271
354
  };
272
355
 
273
- declare function addRawCondition<Alias extends string, TableRef extends Table<string, Record<string, Column>>, JoinedTables extends Record<string, Table<string, Record<string, Column>>>, Definition extends Partial<QueryDefinition<Alias, TableRef, JoinedTables>>, AllowedColumn extends ColumnSelector<Alias, TableRef, JoinedTables>, StrictAllowedColumn extends StrictColumnSelector<Alias, TableRef, JoinedTables>, Clause extends ConditionClause, Logical extends LogicalOperator, ValidClause extends Lowercase<Clause>>(query: QueryBuilder<Alias, TableRef, JoinedTables, Definition, AllowedColumn, StrictAllowedColumn>, clause: Clause, column: (c: typeof rawCol) => string, logical: Logical, params?: any): QueryBuilder<Alias, TableRef, JoinedTables, Definition, AllowedColumn, StrictAllowedColumn>;
274
- declare function rawWhere<Alias extends string, TableRef extends Table<string, Record<string, Column>>, JoinedTables extends Record<string, Table<string, Record<string, Column>>>, Definition extends Partial<QueryDefinition<Alias, TableRef, JoinedTables>>, AllowedColumn extends ColumnSelector<Alias, TableRef, JoinedTables>, StrictAllowedColumn extends StrictColumnSelector<Alias, TableRef, JoinedTables>>(this: QueryBuilder<Alias, TableRef, JoinedTables, Definition, AllowedColumn, StrictAllowedColumn>, column: (c: typeof rawCol) => string, params?: any): QueryBuilder<Alias, TableRef, JoinedTables, Definition, AllowedColumn, StrictAllowedColumn>;
275
- declare function rawOr<Alias extends string, TableRef extends Table<string, Record<string, Column>>, JoinedTables extends Record<string, Table<string, Record<string, Column>>>, Definition extends Partial<QueryDefinition<Alias, TableRef, JoinedTables>>, AllowedColumn extends ColumnSelector<Alias, TableRef, JoinedTables>, StrictAllowedColumn extends StrictColumnSelector<Alias, TableRef, JoinedTables>>(this: QueryBuilder<Alias, TableRef, JoinedTables, Definition, AllowedColumn, StrictAllowedColumn>, column: (c: typeof rawCol) => string, params?: any): QueryBuilder<Alias, TableRef, JoinedTables, Definition, AllowedColumn, StrictAllowedColumn>;
276
- declare function rawHaving<Alias extends string, TableRef extends Table<string, Record<string, Column>>, JoinedTables extends Record<string, Table<string, Record<string, Column>>>, Definition extends Partial<QueryDefinition<Alias, TableRef, JoinedTables>>, AllowedColumn extends ColumnSelector<Alias, TableRef, JoinedTables>, StrictAllowedColumn extends StrictColumnSelector<Alias, TableRef, JoinedTables>>(this: QueryBuilder<Alias, TableRef, JoinedTables, Definition, AllowedColumn, StrictAllowedColumn>, column: (c: typeof rawCol) => string, params?: any): QueryBuilder<Alias, TableRef, JoinedTables, Definition, AllowedColumn, StrictAllowedColumn>;
277
- declare function addCondition<Alias extends string, TableRef extends Table<string, Record<string, Column>>, JoinedTables extends Record<string, Table<string, Record<string, Column>>>, Definition extends Partial<QueryDefinition<Alias, TableRef, JoinedTables>>, AllowedColumn extends ColumnSelector<Alias, TableRef, JoinedTables>, StrictAllowedColumn extends StrictColumnSelector<Alias, TableRef, JoinedTables>, Clause extends ConditionClause, ColName extends StrictAllowedColumn, Col extends ColName extends `${infer TableAlias}.${infer TableColumn}` ? TableAlias extends Alias ? TableRef['columns'][TableColumn] : JoinedTables[TableAlias]['columns'][TableColumn] : never, Operator extends AcceptedOperator, Value extends WhereValue<Col>[Operator], Logical extends LogicalOperator, ValidClause extends Lowercase<Clause>>(query: QueryBuilder<Alias, TableRef, JoinedTables, Definition, AllowedColumn, StrictAllowedColumn>, clause: Clause, column: ColName, operator: Operator, value: Value, logical: Logical): QueryBuilder<Alias, TableRef, JoinedTables, Omit<Definition, ValidClause> & { [Key in ValidClause]: string[]; }, ColumnSelector<Alias, TableRef, JoinedTables>, StrictColumnSelector<Alias, TableRef, JoinedTables>>;
278
- declare function where<Alias extends string, TableRef extends Table<string, Record<string, Column>>, JoinedTables extends Record<string, Table<string, Record<string, Column>>>, Definition extends Partial<QueryDefinition<Alias, TableRef, JoinedTables>>, AllowedColumn extends ColumnSelector<Alias, TableRef, JoinedTables>, StrictAllowedColumn extends StrictColumnSelector<Alias, TableRef, JoinedTables>, ColName extends StrictAllowedColumn, Col extends ColName extends `${infer TableAlias}.${infer TableColumn}` ? TableAlias extends Alias ? TableRef['columns'][TableColumn] : JoinedTables[TableAlias]['columns'][TableColumn] : never, Operator extends AcceptedOperator, Value extends WhereValue<Col>[Operator]>(this: QueryBuilder<Alias, TableRef, JoinedTables, Definition, AllowedColumn, StrictAllowedColumn>, column: ColName, operator: Operator, value?: Value): QueryBuilder<Alias, TableRef, JoinedTables, Omit<Definition, "where"> & {
279
- where: string[];
280
- }, ColumnSelector<Alias, TableRef, JoinedTables>, StrictColumnSelector<Alias, TableRef, JoinedTables>>;
281
- declare function or<Alias extends string, TableRef extends Table<string, Record<string, Column>>, JoinedTables extends Record<string, Table<string, Record<string, Column>>>, Definition extends Partial<QueryDefinition<Alias, TableRef, JoinedTables>>, AllowedColumn extends ColumnSelector<Alias, TableRef, JoinedTables>, StrictAllowedColumn extends StrictColumnSelector<Alias, TableRef, JoinedTables>, ColName extends StrictAllowedColumn, Col extends ColName extends `${infer TableAlias}.${infer TableColumn}` ? TableAlias extends Alias ? TableRef['columns'][TableColumn] : JoinedTables[TableAlias]['columns'][TableColumn] : never, Operator extends AcceptedOperator, Value extends WhereValue<Col>[Operator]>(this: QueryBuilder<Alias, TableRef, JoinedTables, Definition, AllowedColumn, StrictAllowedColumn>, column: ColName, operator: Operator, value?: Value): QueryBuilder<Alias, TableRef, JoinedTables, Omit<Definition, "where"> & {
282
- where: string[];
283
- }, ColumnSelector<Alias, TableRef, JoinedTables>, StrictColumnSelector<Alias, TableRef, JoinedTables>>;
284
- declare function having<Alias extends string, TableRef extends Table<string, Record<string, Column>>, JoinedTables extends Record<string, Table<string, Record<string, Column>>>, Definition extends Partial<QueryDefinition<Alias, TableRef, JoinedTables>>, AllowedColumn extends ColumnSelector<Alias, TableRef, JoinedTables>, StrictAllowedColumn extends StrictColumnSelector<Alias, TableRef, JoinedTables>, ColName extends StrictAllowedColumn, Col extends ColName extends `${infer TableAlias}.${infer TableColumn}` ? TableAlias extends Alias ? TableRef['columns'][TableColumn] : JoinedTables[TableAlias]['columns'][TableColumn] : never, Operator extends AcceptedOperator, Value extends WhereValue<Col>[Operator]>(this: QueryBuilder<Alias, TableRef, JoinedTables, Definition, AllowedColumn, StrictAllowedColumn>, column: ColName, operator: Operator, value: Value): QueryBuilder<Alias, TableRef, JoinedTables, Omit<Definition, "having"> & {
285
- having: string[];
286
- }, ColumnSelector<Alias, TableRef, JoinedTables>, StrictColumnSelector<Alias, TableRef, JoinedTables>>;
287
-
288
- interface QueryTransformerContract<Alias extends string, TableRef extends Table<string, Record<string, Column>>, JoinedTables extends Record<string, Table<string, Record<string, Column>>>, Definition extends Partial<QueryDefinition<Alias, TableRef, JoinedTables>>, AllowedColumn extends ColumnSelector<Alias, TableRef, JoinedTables>, StrictAllowedColumn extends StrictColumnSelector<Alias, TableRef, JoinedTables>> {
289
- toQuery(this: QueryBuilder<Alias, TableRef, JoinedTables, Definition, AllowedColumn, StrictAllowedColumn>, dialect?: Dialect | null): {
290
- query: string;
291
- params: unknown[] | null | undefined;
292
- };
293
- toString(this: QueryBuilder<Alias, TableRef, JoinedTables, Definition, AllowedColumn, StrictAllowedColumn>): string;
294
- exec<This extends QueryBuilder<Alias, TableRef, JoinedTables, Definition, AllowedColumn, StrictAllowedColumn> = QueryBuilder<Alias, TableRef, JoinedTables, Definition, AllowedColumn, StrictAllowedColumn>, Output extends This['_output'] = This['_output']>(this: This, tx?: TransactionSQL | null): Promise<Output>;
295
- clone(this: QueryBuilder<Alias, TableRef, JoinedTables, Definition, AllowedColumn, StrictAllowedColumn>): typeof this;
296
- alias<NewAlias extends string>(alias: NewAlias): QueryBuilder<NewAlias, TableRef, JoinedTables, Omit<Definition, 'baseAlias'> & {
297
- baseAlias: NewAlias;
298
- }>;
299
- }
300
- interface QueryConditionContract<Alias extends string, TableRef extends Table<string, Record<string, Column>>, JoinedTables extends Record<string, Table<string, Record<string, Column>>>, Definition extends Partial<QueryDefinition<Alias, TableRef, JoinedTables>>, AllowedColumn extends ColumnSelector<Alias, TableRef, JoinedTables>, StrictAllowedColumn extends StrictColumnSelector<Alias, TableRef, JoinedTables>> {
301
- rawWhere(this: QueryBuilder<Alias, TableRef, JoinedTables, Definition, AllowedColumn, StrictAllowedColumn>, column: (c: typeof rawCol) => string, params?: any): ReturnType<typeof addRawCondition<Alias, TableRef, JoinedTables, Definition, AllowedColumn, StrictAllowedColumn, typeof ConditionClause.WHERE, typeof LogicalOperator.AND, Lowercase<typeof ConditionClause.WHERE>>>;
302
- rawOr(this: QueryBuilder<Alias, TableRef, JoinedTables, Definition, AllowedColumn, StrictAllowedColumn>, column: (c: typeof rawCol) => string, params?: any): ReturnType<typeof addRawCondition<Alias, TableRef, JoinedTables, Definition, AllowedColumn, StrictAllowedColumn, typeof ConditionClause.WHERE, typeof LogicalOperator.OR, Lowercase<typeof ConditionClause.WHERE>>>;
303
- rawHaving(this: QueryBuilder<Alias, TableRef, JoinedTables, Definition, AllowedColumn, StrictAllowedColumn>, column: (c: typeof rawCol) => string, params?: any): ReturnType<typeof addRawCondition<Alias, TableRef, JoinedTables, Definition, AllowedColumn, StrictAllowedColumn, typeof ConditionClause.HAVING, typeof LogicalOperator.AND, Lowercase<typeof ConditionClause.HAVING>>>;
304
- where<ColName extends StrictAllowedColumn, Col extends ColName extends `${infer TableAlias}.${infer TableColumn}` ? TableAlias extends Alias ? TableRef['columns'][TableColumn] : JoinedTables[TableAlias]['columns'][TableColumn] : never, Operator extends typeof AcceptedOperator.IS_NULL | typeof AcceptedOperator.IS_NOT_NULL, Value extends WhereValue<Col>[Operator]>(this: QueryBuilder<Alias, TableRef, JoinedTables, Definition, AllowedColumn, StrictAllowedColumn>, column: ColName, operator: Operator): ReturnType<typeof addCondition<Alias, TableRef, JoinedTables, Definition, AllowedColumn, StrictAllowedColumn, typeof ConditionClause.WHERE, ColName, ColName extends `${infer TableAlias}.${infer TableColumn}` ? TableAlias extends Alias ? TableRef['columns'][TableColumn] : JoinedTables[TableAlias]['columns'][TableColumn] : never, Operator, Value, typeof LogicalOperator.AND, Lowercase<typeof ConditionClause.WHERE>>>;
305
- where<ColName extends StrictAllowedColumn, Col extends ColName extends `${infer TableAlias}.${infer TableColumn}` ? TableAlias extends Alias ? TableRef['columns'][TableColumn] : JoinedTables[TableAlias]['columns'][TableColumn] : never, Operator extends AcceptedOperator, Value extends WhereValue<Col>[Operator]>(this: QueryBuilder<Alias, TableRef, JoinedTables, Definition, AllowedColumn, StrictAllowedColumn>, column: ColName, operator: Operator, value: Value): ReturnType<typeof addCondition<Alias, TableRef, JoinedTables, Definition, AllowedColumn, StrictAllowedColumn, typeof ConditionClause.WHERE, ColName, ColName extends `${infer TableAlias}.${infer TableColumn}` ? TableAlias extends Alias ? TableRef['columns'][TableColumn] : JoinedTables[TableAlias]['columns'][TableColumn] : never, Operator, Value, typeof LogicalOperator.AND, Lowercase<typeof ConditionClause.WHERE>>>;
306
- or<ColName extends StrictAllowedColumn, Col extends ColName extends `${infer TableAlias}.${infer TableColumn}` ? TableAlias extends Alias ? TableRef['columns'][TableColumn] : JoinedTables[TableAlias]['columns'][TableColumn] : never, Operator extends typeof AcceptedOperator.IS_NULL | typeof AcceptedOperator.IS_NOT_NULL, Value extends WhereValue<Col>[Operator]>(this: QueryBuilder<Alias, TableRef, JoinedTables, Definition, AllowedColumn, StrictAllowedColumn>, column: ColName, operator: Operator): ReturnType<typeof addCondition<Alias, TableRef, JoinedTables, Definition, AllowedColumn, StrictAllowedColumn, typeof ConditionClause.WHERE, ColName, ColName extends `${infer TableAlias}.${infer TableColumn}` ? TableAlias extends Alias ? TableRef['columns'][TableColumn] : JoinedTables[TableAlias]['columns'][TableColumn] : never, Operator, Value, typeof LogicalOperator.OR, Lowercase<typeof ConditionClause.WHERE>>>;
307
- or<ColName extends StrictAllowedColumn, Col extends ColName extends `${infer TableAlias}.${infer TableColumn}` ? TableAlias extends Alias ? TableRef['columns'][TableColumn] : JoinedTables[TableAlias]['columns'][TableColumn] : never, Operator extends AcceptedOperator, Value extends WhereValue<Col>[Operator]>(this: QueryBuilder<Alias, TableRef, JoinedTables, Definition, AllowedColumn, StrictAllowedColumn>, column: ColName, operator: Operator, value: Value): ReturnType<typeof addCondition<Alias, TableRef, JoinedTables, Definition, AllowedColumn, StrictAllowedColumn, typeof ConditionClause.WHERE, ColName, ColName extends `${infer TableAlias}.${infer TableColumn}` ? TableAlias extends Alias ? TableRef['columns'][TableColumn] : JoinedTables[TableAlias]['columns'][TableColumn] : never, Operator, Value, typeof LogicalOperator.OR, Lowercase<typeof ConditionClause.WHERE>>>;
308
- having<ColName extends StrictAllowedColumn, Col extends ColName extends `${infer TableAlias}.${infer TableColumn}` ? TableAlias extends Alias ? TableRef['columns'][TableColumn] : JoinedTables[TableAlias]['columns'][TableColumn] : never, Operator extends AcceptedOperator, Value extends WhereValue<Col>[Operator]>(this: QueryBuilder<Alias, TableRef, JoinedTables, Definition, AllowedColumn, StrictAllowedColumn>, column: ColName, operator: Operator, value: Value): ReturnType<typeof addCondition<Alias, TableRef, JoinedTables, Definition, AllowedColumn, StrictAllowedColumn, typeof ConditionClause.HAVING, ColName, ColName extends `${infer TableAlias}.${infer TableColumn}` ? TableAlias extends Alias ? TableRef['columns'][TableColumn] : JoinedTables[TableAlias]['columns'][TableColumn] : never, Operator, Value, typeof LogicalOperator.AND, Lowercase<typeof ConditionClause.HAVING>>>;
309
- }
310
-
311
- declare class QueryBuilder<Alias extends TableRef['name'], TableRef extends Table<string, Record<string, Column>>, JoinedTables extends Record<string, Table<string, Record<string, Column>>> = NonNullable<unknown>, Definition extends Partial<QueryDefinition<Alias, TableRef, JoinedTables>> = NonNullable<unknown>, AllowedColumn extends ColumnSelector<Alias, TableRef, JoinedTables> = ColumnSelector<Alias, TableRef, JoinedTables>, StrictAllowedColumn extends StrictColumnSelector<Alias, TableRef, JoinedTables> = StrictColumnSelector<Alias, TableRef, JoinedTables>> {
312
- readonly hooks: Partial<QuerHooks>;
356
+ declare class QueryBuilder<Alias extends TableRef['name'], TableRef extends Table<string, Record<string, Column>>, JoinedTables extends Record<string, Table<string, Record<string, Column>>> = NonNullable<unknown>, Definition extends Partial<QueryDefinition<Alias, TableRef, JoinedTables>> = NonNullable<unknown>, AllowedColumn extends ColumnSelector<Alias, TableRef, JoinedTables> = ColumnSelector<Alias, TableRef, JoinedTables>, StrictAllowedColumn extends StrictColumnSelector<Alias, TableRef, JoinedTables> = StrictColumnSelector<Alias, TableRef, JoinedTables>, TransformerContract extends QueryTransformerContract<Alias, TableRef, JoinedTables, Definition, AllowedColumn, StrictAllowedColumn> = QueryTransformerContract<Alias, TableRef, JoinedTables, Definition, AllowedColumn, StrictAllowedColumn>, QueryContract extends QueryConditionContract<Alias, TableRef, JoinedTables, Definition, AllowedColumn, StrictAllowedColumn> = QueryConditionContract<Alias, TableRef, JoinedTables, Definition, AllowedColumn, StrictAllowedColumn>> {
357
+ readonly hooks: Partial<QueryHooks>;
313
358
  readonly table: TableRef;
314
359
  readonly definition: Definition;
315
360
  readonly _output: QueryOutput<Alias, TableRef, JoinedTables, Definition, AllowedColumn>;
316
- alias: QueryTransformerContract<Alias, TableRef, JoinedTables, Definition, AllowedColumn, StrictAllowedColumn>['alias'];
317
- clone: QueryTransformerContract<Alias, TableRef, JoinedTables, Definition, AllowedColumn, StrictAllowedColumn>['clone'];
318
- toQuery: QueryTransformerContract<Alias, TableRef, JoinedTables, Definition, AllowedColumn, StrictAllowedColumn>['toQuery'];
319
- toString: QueryTransformerContract<Alias, TableRef, JoinedTables, Definition, AllowedColumn, StrictAllowedColumn>['toString'];
320
- exec: QueryTransformerContract<Alias, TableRef, JoinedTables, Definition, AllowedColumn, StrictAllowedColumn>['exec'];
321
- rawWhere: QueryConditionContract<Alias, TableRef, JoinedTables, Definition, AllowedColumn, StrictAllowedColumn>['rawWhere'];
322
- rawAnd: QueryConditionContract<Alias, TableRef, JoinedTables, Definition, AllowedColumn, StrictAllowedColumn>['rawWhere'];
323
- rawOr: QueryConditionContract<Alias, TableRef, JoinedTables, Definition, AllowedColumn, StrictAllowedColumn>['rawOr'];
324
- rawHaving: QueryConditionContract<Alias, TableRef, JoinedTables, Definition, AllowedColumn, StrictAllowedColumn>['rawHaving'];
325
- where: QueryConditionContract<Alias, TableRef, JoinedTables, Definition, AllowedColumn, StrictAllowedColumn>['where'];
326
- and: QueryConditionContract<Alias, TableRef, JoinedTables, Definition, AllowedColumn, StrictAllowedColumn>['where'];
327
- or: QueryConditionContract<Alias, TableRef, JoinedTables, Definition, AllowedColumn, StrictAllowedColumn>['or'];
328
- having: QueryConditionContract<Alias, TableRef, JoinedTables, Definition, AllowedColumn, StrictAllowedColumn>['having'];
361
+ alias: TransformerContract['alias'];
362
+ clone: TransformerContract['clone'];
363
+ toQuery: TransformerContract['toQuery'];
364
+ toString: TransformerContract['toString'];
365
+ toDebugString: TransformerContract['toDebugString'];
366
+ explain: TransformerContract['explain'];
367
+ exec: TransformerContract['exec'];
368
+ where: QueryContract['where'];
369
+ and: QueryContract['where'];
370
+ or: QueryContract['or'];
371
+ having: QueryContract['having'];
372
+ whereGroup: QueryContract['whereGroup'];
373
+ orGroup: QueryContract['orGroup'];
374
+ readonly not: QueryContract['not'];
329
375
  constructor(table: TableRef);
330
- leftJoin<JoinTable extends Table<string, Record<string, Column>>, JoinAlias extends string, BaseColName extends `${Alias}."${keyof TableRef['columns'] & string}"`, JoinColName extends `${JoinAlias}."${keyof JoinTable['columns'] & string}"`>(joinTable: JoinTable, alias: JoinAlias, baseColumn: BaseColName, joinColumn: JoinColName): QueryBuilder<Alias, TableRef, JoinedTables & { [K in JoinAlias]: JoinTable; }, Omit<Definition, "joins" | "joinedTables"> & {
331
- joins: string[];
376
+ leftJoin<JoinTable extends Table<string, Record<string, Column>>, JoinAlias extends string>(joinTable: JoinTable, alias: JoinAlias): {
377
+ on<FinalJoinedTables extends JoinedTables & { [K in JoinAlias]: JoinTable; }, ReturnedJoinedTables extends FinalJoinedTables = FinalJoinedTables>(callback: (q: QueryBuilder<Alias, TableRef, FinalJoinedTables, {}, ColumnSelector<Alias, TableRef, FinalJoinedTables>, StrictColumnSelector<Alias, TableRef, FinalJoinedTables>, QueryTransformerContract<Alias, TableRef, FinalJoinedTables, {}, ColumnSelector<Alias, TableRef, FinalJoinedTables>, StrictColumnSelector<Alias, TableRef, FinalJoinedTables>>, QueryConditionContract<Alias, TableRef, FinalJoinedTables, {}, ColumnSelector<Alias, TableRef, FinalJoinedTables>, StrictColumnSelector<Alias, TableRef, FinalJoinedTables>>>) => QueryBuilder<Alias, TableRef, ReturnedJoinedTables, {}, ColumnSelector<Alias, TableRef, ReturnedJoinedTables>, StrictColumnSelector<Alias, TableRef, ReturnedJoinedTables>, QueryTransformerContract<Alias, TableRef, ReturnedJoinedTables, {}, ColumnSelector<Alias, TableRef, ReturnedJoinedTables>, StrictColumnSelector<Alias, TableRef, ReturnedJoinedTables>>, QueryConditionContract<Alias, TableRef, ReturnedJoinedTables, {}, ColumnSelector<Alias, TableRef, ReturnedJoinedTables>, StrictColumnSelector<Alias, TableRef, ReturnedJoinedTables>>>): QueryBuilder<Alias, TableRef, ReturnedJoinedTables, Omit<Definition, "joins" | "joinedTables"> & {
378
+ joins: JoinNode[];
379
+ joinedTables: ReturnedJoinedTables;
380
+ }, ColumnSelector<Alias, TableRef, ReturnedJoinedTables>, StrictColumnSelector<Alias, TableRef, ReturnedJoinedTables>, QueryTransformerContract<Alias, TableRef, ReturnedJoinedTables, Omit<Definition, "joins" | "joinedTables"> & {
381
+ joins: JoinNode[];
382
+ joinedTables: ReturnedJoinedTables;
383
+ }, ColumnSelector<Alias, TableRef, ReturnedJoinedTables>, StrictColumnSelector<Alias, TableRef, ReturnedJoinedTables>>, QueryConditionContract<Alias, TableRef, ReturnedJoinedTables, Omit<Definition, "joins" | "joinedTables"> & {
384
+ joins: JoinNode[];
385
+ joinedTables: ReturnedJoinedTables;
386
+ }, ColumnSelector<Alias, TableRef, ReturnedJoinedTables>, StrictColumnSelector<Alias, TableRef, ReturnedJoinedTables>>>;
387
+ };
388
+ rightJoin<JoinTable extends Table<string, Record<string, Column>>, JoinAlias extends string>(joinTable: JoinTable, alias: JoinAlias): {
389
+ on<FinalJoinedTables extends JoinedTables & { [K in JoinAlias]: JoinTable; }, ReturnedJoinedTables extends FinalJoinedTables = FinalJoinedTables>(callback: (q: QueryBuilder<Alias, TableRef, FinalJoinedTables, {}, ColumnSelector<Alias, TableRef, FinalJoinedTables>, StrictColumnSelector<Alias, TableRef, FinalJoinedTables>, QueryTransformerContract<Alias, TableRef, FinalJoinedTables, {}, ColumnSelector<Alias, TableRef, FinalJoinedTables>, StrictColumnSelector<Alias, TableRef, FinalJoinedTables>>, QueryConditionContract<Alias, TableRef, FinalJoinedTables, {}, ColumnSelector<Alias, TableRef, FinalJoinedTables>, StrictColumnSelector<Alias, TableRef, FinalJoinedTables>>>) => QueryBuilder<Alias, TableRef, ReturnedJoinedTables, {}, ColumnSelector<Alias, TableRef, ReturnedJoinedTables>, StrictColumnSelector<Alias, TableRef, ReturnedJoinedTables>, QueryTransformerContract<Alias, TableRef, ReturnedJoinedTables, {}, ColumnSelector<Alias, TableRef, ReturnedJoinedTables>, StrictColumnSelector<Alias, TableRef, ReturnedJoinedTables>>, QueryConditionContract<Alias, TableRef, ReturnedJoinedTables, {}, ColumnSelector<Alias, TableRef, ReturnedJoinedTables>, StrictColumnSelector<Alias, TableRef, ReturnedJoinedTables>>>): QueryBuilder<Alias, TableRef, ReturnedJoinedTables, Omit<Definition, "joins" | "joinedTables"> & {
390
+ joins: JoinNode[];
391
+ joinedTables: ReturnedJoinedTables;
392
+ }, ColumnSelector<Alias, TableRef, ReturnedJoinedTables>, StrictColumnSelector<Alias, TableRef, ReturnedJoinedTables>, QueryTransformerContract<Alias, TableRef, ReturnedJoinedTables, Omit<Definition, "joins" | "joinedTables"> & {
393
+ joins: JoinNode[];
394
+ joinedTables: ReturnedJoinedTables;
395
+ }, ColumnSelector<Alias, TableRef, ReturnedJoinedTables>, StrictColumnSelector<Alias, TableRef, ReturnedJoinedTables>>, QueryConditionContract<Alias, TableRef, ReturnedJoinedTables, Omit<Definition, "joins" | "joinedTables"> & {
396
+ joins: JoinNode[];
397
+ joinedTables: ReturnedJoinedTables;
398
+ }, ColumnSelector<Alias, TableRef, ReturnedJoinedTables>, StrictColumnSelector<Alias, TableRef, ReturnedJoinedTables>>>;
399
+ };
400
+ innerJoin<JoinTable extends Table<string, Record<string, Column>>, JoinAlias extends string>(joinTable: JoinTable, alias: JoinAlias): {
401
+ on<FinalJoinedTables extends JoinedTables & { [K in JoinAlias]: JoinTable; }, ReturnedJoinedTables extends FinalJoinedTables = FinalJoinedTables>(callback: (q: QueryBuilder<Alias, TableRef, FinalJoinedTables, {}, ColumnSelector<Alias, TableRef, FinalJoinedTables>, StrictColumnSelector<Alias, TableRef, FinalJoinedTables>, QueryTransformerContract<Alias, TableRef, FinalJoinedTables, {}, ColumnSelector<Alias, TableRef, FinalJoinedTables>, StrictColumnSelector<Alias, TableRef, FinalJoinedTables>>, QueryConditionContract<Alias, TableRef, FinalJoinedTables, {}, ColumnSelector<Alias, TableRef, FinalJoinedTables>, StrictColumnSelector<Alias, TableRef, FinalJoinedTables>>>) => QueryBuilder<Alias, TableRef, ReturnedJoinedTables, {}, ColumnSelector<Alias, TableRef, ReturnedJoinedTables>, StrictColumnSelector<Alias, TableRef, ReturnedJoinedTables>, QueryTransformerContract<Alias, TableRef, ReturnedJoinedTables, {}, ColumnSelector<Alias, TableRef, ReturnedJoinedTables>, StrictColumnSelector<Alias, TableRef, ReturnedJoinedTables>>, QueryConditionContract<Alias, TableRef, ReturnedJoinedTables, {}, ColumnSelector<Alias, TableRef, ReturnedJoinedTables>, StrictColumnSelector<Alias, TableRef, ReturnedJoinedTables>>>): QueryBuilder<Alias, TableRef, ReturnedJoinedTables, Omit<Definition, "joins" | "joinedTables"> & {
402
+ joins: JoinNode[];
403
+ joinedTables: ReturnedJoinedTables;
404
+ }, ColumnSelector<Alias, TableRef, ReturnedJoinedTables>, StrictColumnSelector<Alias, TableRef, ReturnedJoinedTables>, QueryTransformerContract<Alias, TableRef, ReturnedJoinedTables, Omit<Definition, "joins" | "joinedTables"> & {
405
+ joins: JoinNode[];
406
+ joinedTables: ReturnedJoinedTables;
407
+ }, ColumnSelector<Alias, TableRef, ReturnedJoinedTables>, StrictColumnSelector<Alias, TableRef, ReturnedJoinedTables>>, QueryConditionContract<Alias, TableRef, ReturnedJoinedTables, Omit<Definition, "joins" | "joinedTables"> & {
408
+ joins: JoinNode[];
409
+ joinedTables: ReturnedJoinedTables;
410
+ }, ColumnSelector<Alias, TableRef, ReturnedJoinedTables>, StrictColumnSelector<Alias, TableRef, ReturnedJoinedTables>>>;
411
+ };
412
+ fullJoin<JoinTable extends Table<string, Record<string, Column>>, JoinAlias extends string>(joinTable: JoinTable, alias: JoinAlias): {
413
+ on<FinalJoinedTables extends JoinedTables & { [K in JoinAlias]: JoinTable; }, ReturnedJoinedTables extends FinalJoinedTables = FinalJoinedTables>(callback: (q: QueryBuilder<Alias, TableRef, FinalJoinedTables, {}, ColumnSelector<Alias, TableRef, FinalJoinedTables>, StrictColumnSelector<Alias, TableRef, FinalJoinedTables>, QueryTransformerContract<Alias, TableRef, FinalJoinedTables, {}, ColumnSelector<Alias, TableRef, FinalJoinedTables>, StrictColumnSelector<Alias, TableRef, FinalJoinedTables>>, QueryConditionContract<Alias, TableRef, FinalJoinedTables, {}, ColumnSelector<Alias, TableRef, FinalJoinedTables>, StrictColumnSelector<Alias, TableRef, FinalJoinedTables>>>) => QueryBuilder<Alias, TableRef, ReturnedJoinedTables, {}, ColumnSelector<Alias, TableRef, ReturnedJoinedTables>, StrictColumnSelector<Alias, TableRef, ReturnedJoinedTables>, QueryTransformerContract<Alias, TableRef, ReturnedJoinedTables, {}, ColumnSelector<Alias, TableRef, ReturnedJoinedTables>, StrictColumnSelector<Alias, TableRef, ReturnedJoinedTables>>, QueryConditionContract<Alias, TableRef, ReturnedJoinedTables, {}, ColumnSelector<Alias, TableRef, ReturnedJoinedTables>, StrictColumnSelector<Alias, TableRef, ReturnedJoinedTables>>>): QueryBuilder<Alias, TableRef, ReturnedJoinedTables, Omit<Definition, "joins" | "joinedTables"> & {
414
+ joins: JoinNode[];
415
+ joinedTables: ReturnedJoinedTables;
416
+ }, ColumnSelector<Alias, TableRef, ReturnedJoinedTables>, StrictColumnSelector<Alias, TableRef, ReturnedJoinedTables>, QueryTransformerContract<Alias, TableRef, ReturnedJoinedTables, Omit<Definition, "joins" | "joinedTables"> & {
417
+ joins: JoinNode[];
418
+ joinedTables: ReturnedJoinedTables;
419
+ }, ColumnSelector<Alias, TableRef, ReturnedJoinedTables>, StrictColumnSelector<Alias, TableRef, ReturnedJoinedTables>>, QueryConditionContract<Alias, TableRef, ReturnedJoinedTables, Omit<Definition, "joins" | "joinedTables"> & {
420
+ joins: JoinNode[];
421
+ joinedTables: ReturnedJoinedTables;
422
+ }, ColumnSelector<Alias, TableRef, ReturnedJoinedTables>, StrictColumnSelector<Alias, TableRef, ReturnedJoinedTables>>>;
423
+ };
424
+ crossJoin<JoinTable extends Table<string, Record<string, Column>>, JoinAlias extends string>(joinTable: JoinTable, alias: JoinAlias): QueryBuilder<Alias, TableRef, JoinedTables & { [K in JoinAlias]: JoinTable; }, Omit<Definition, "joins" | "joinedTables"> & {
425
+ joins: JoinNode[];
332
426
  joinedTables: JoinedTables & { [K in JoinAlias]: JoinTable; };
333
- }, ColumnSelector<Alias, TableRef, JoinedTables & { [K in JoinAlias]: JoinTable; }>, StrictColumnSelector<Alias, TableRef, JoinedTables & { [K in JoinAlias]: JoinTable; }>>;
334
- rightJoin<JoinTable extends Table<string, Record<string, Column>>, JoinAlias extends string, BaseColName extends `${Alias}."${keyof TableRef['columns'] & string}"`, JoinColName extends `${JoinAlias}."${keyof JoinTable['columns'] & string}"`>(joinTable: JoinTable, alias: JoinAlias, baseColumn: BaseColName, joinColumn: JoinColName): QueryBuilder<Alias, TableRef, JoinedTables & { [K in JoinAlias]: JoinTable; }, Omit<Definition, "joins" | "joinedTables"> & {
335
- joins: string[];
427
+ }, ColumnSelector<Alias, TableRef, JoinedTables & { [K in JoinAlias]: JoinTable; }>, StrictColumnSelector<Alias, TableRef, JoinedTables & { [K in JoinAlias]: JoinTable; }>, QueryTransformerContract<Alias, TableRef, JoinedTables & { [K in JoinAlias]: JoinTable; }, Omit<Definition, "joins" | "joinedTables"> & {
428
+ joins: JoinNode[];
336
429
  joinedTables: JoinedTables & { [K in JoinAlias]: JoinTable; };
337
- }, ColumnSelector<Alias, TableRef, JoinedTables & { [K in JoinAlias]: JoinTable; }>, StrictColumnSelector<Alias, TableRef, JoinedTables & { [K in JoinAlias]: JoinTable; }>>;
338
- innerJoin<JoinTable extends Table<string, Record<string, Column>>, JoinAlias extends string, BaseColName extends `${Alias}."${keyof TableRef['columns'] & string}"`, JoinColName extends `${JoinAlias}."${keyof JoinTable['columns'] & string}"`>(joinTable: JoinTable, alias: JoinAlias, baseColumn: BaseColName, joinColumn: JoinColName): QueryBuilder<Alias, TableRef, JoinedTables & { [K in JoinAlias]: JoinTable; }, Omit<Definition, "joins" | "joinedTables"> & {
339
- joins: string[];
430
+ }, ColumnSelector<Alias, TableRef, JoinedTables & { [K in JoinAlias]: JoinTable; }>, StrictColumnSelector<Alias, TableRef, JoinedTables & { [K in JoinAlias]: JoinTable; }>>, QueryConditionContract<Alias, TableRef, JoinedTables & { [K in JoinAlias]: JoinTable; }, Omit<Definition, "joins" | "joinedTables"> & {
431
+ joins: JoinNode[];
340
432
  joinedTables: JoinedTables & { [K in JoinAlias]: JoinTable; };
341
- }, ColumnSelector<Alias, TableRef, JoinedTables & { [K in JoinAlias]: JoinTable; }>, StrictColumnSelector<Alias, TableRef, JoinedTables & { [K in JoinAlias]: JoinTable; }>>;
342
- naturalJoin<JoinTable extends Table<string, Record<string, Column>>, JoinAlias extends string, BaseColName extends `${Alias}."${keyof TableRef['columns'] & string}"`, JoinColName extends `${JoinAlias}."${keyof JoinTable['columns'] & string}"`>(joinTable: JoinTable, alias: JoinAlias, baseColumn: BaseColName, joinColumn: JoinColName): QueryBuilder<Alias, TableRef, JoinedTables & { [K in JoinAlias]: JoinTable; }, Omit<Definition, "joins" | "joinedTables"> & {
343
- joins: string[];
433
+ }, ColumnSelector<Alias, TableRef, JoinedTables & { [K in JoinAlias]: JoinTable; }>, StrictColumnSelector<Alias, TableRef, JoinedTables & { [K in JoinAlias]: JoinTable; }>>>;
434
+ naturalJoin<JoinTable extends Table<string, Record<string, Column>>, JoinAlias extends string>(joinTable: JoinTable, alias: JoinAlias): QueryBuilder<Alias, TableRef, JoinedTables & { [K in JoinAlias]: JoinTable; }, Omit<Definition, "joins" | "joinedTables"> & {
435
+ joins: JoinNode[];
344
436
  joinedTables: JoinedTables & { [K in JoinAlias]: JoinTable; };
345
- }, ColumnSelector<Alias, TableRef, JoinedTables & { [K in JoinAlias]: JoinTable; }>, StrictColumnSelector<Alias, TableRef, JoinedTables & { [K in JoinAlias]: JoinTable; }>>;
437
+ }, ColumnSelector<Alias, TableRef, JoinedTables & { [K in JoinAlias]: JoinTable; }>, StrictColumnSelector<Alias, TableRef, JoinedTables & { [K in JoinAlias]: JoinTable; }>, QueryTransformerContract<Alias, TableRef, JoinedTables & { [K in JoinAlias]: JoinTable; }, Omit<Definition, "joins" | "joinedTables"> & {
438
+ joins: JoinNode[];
439
+ joinedTables: JoinedTables & { [K in JoinAlias]: JoinTable; };
440
+ }, ColumnSelector<Alias, TableRef, JoinedTables & { [K in JoinAlias]: JoinTable; }>, StrictColumnSelector<Alias, TableRef, JoinedTables & { [K in JoinAlias]: JoinTable; }>>, QueryConditionContract<Alias, TableRef, JoinedTables & { [K in JoinAlias]: JoinTable; }, Omit<Definition, "joins" | "joinedTables"> & {
441
+ joins: JoinNode[];
442
+ joinedTables: JoinedTables & { [K in JoinAlias]: JoinTable; };
443
+ }, ColumnSelector<Alias, TableRef, JoinedTables & { [K in JoinAlias]: JoinTable; }>, StrictColumnSelector<Alias, TableRef, JoinedTables & { [K in JoinAlias]: JoinTable; }>>>;
346
444
  distinct(): QueryBuilder<Alias, TableRef, JoinedTables, Definition & {
347
445
  distinct: true;
348
446
  }>;
@@ -368,7 +466,7 @@ declare class QueryBuilder<Alias extends TableRef['name'], TableRef extends Tabl
368
466
  queryType: typeof QueryType.SELECT;
369
467
  select: Array<`${Base}."${keyof Columns & string}"`>;
370
468
  }>;
371
- select<Columns extends Array<RawColumn<AllowedColumn> | ((c: typeof col) => AliasedColumn<AllowedColumn, string>)>>(...columns: Columns): QueryBuilder<Alias, TableRef, JoinedTables, Omit<Definition, 'queryType' | 'select'> & {
469
+ select<Columns extends Array<RawColumn<AllowedColumn> | ((c: typeof col) => AliasedColumn<AllowedColumn, string>)>>(...columns: Columns): QueryBuilder<Alias, TableRef, JoinedTables, Definition & {
372
470
  queryType: typeof QueryType.SELECT;
373
471
  select: {
374
472
  [K in keyof Columns]: Columns[K] extends (col: never) => infer R ? R : Columns[K];
@@ -385,8 +483,18 @@ declare class QueryBuilder<Alias extends TableRef['name'], TableRef extends Tabl
385
483
  delete(): QueryBuilder<Alias, TableRef, JoinedTables, Omit<Definition, "queryType" | "updateValues"> & {
386
484
  queryType: typeof QueryType.UPDATE;
387
485
  updateValues: AcceptedUpdateValues<TableRef["columns"]>;
388
- }, ColumnSelector<Alias, TableRef, JoinedTables>, StrictColumnSelector<Alias, TableRef, JoinedTables>>;
486
+ }, ColumnSelector<Alias, TableRef, JoinedTables>, StrictColumnSelector<Alias, TableRef, JoinedTables>, QueryTransformerContract<Alias, TableRef, JoinedTables, Omit<Definition, "queryType" | "updateValues"> & {
487
+ queryType: typeof QueryType.UPDATE;
488
+ updateValues: AcceptedUpdateValues<TableRef["columns"]>;
489
+ }, ColumnSelector<Alias, TableRef, JoinedTables>, StrictColumnSelector<Alias, TableRef, JoinedTables>>, QueryConditionContract<Alias, TableRef, JoinedTables, Omit<Definition, "queryType" | "updateValues"> & {
490
+ queryType: typeof QueryType.UPDATE;
491
+ updateValues: AcceptedUpdateValues<TableRef["columns"]>;
492
+ }, ColumnSelector<Alias, TableRef, JoinedTables>, StrictColumnSelector<Alias, TableRef, JoinedTables>>>;
493
+ paginate<Page extends number, Size extends number, Offset extends number = Multiply<Subtract<Page, 1>, Size>>(page: Page, size: Size): QueryBuilder<Alias, TableRef, JoinedTables, Omit<Definition, "limit" | "offset"> & {
494
+ limit: Size;
495
+ offset: Offset;
496
+ }>;
389
497
  infer(): this['_output'];
390
498
  }
391
499
 
392
- export { type AliasedColumn as A, clone as B, type ColumnSelector as C, type DatabaseDefinition as D, type ExecOptions as E, rawCol as F, col as G, aggregateCol as H, addRawCondition as I, rawWhere as J, rawOr as K, rawHaving as L, type MergeTimestampParanoid as M, addCondition as N, where as O, type PostgresConfig as P, type QueryDefinition as Q, type RawColumn as R, type SqlConfigMapping as S, Table as T, or as U, having as V, type WhereValue as W, type QueryTransformerContract as X, type QueryConditionContract as Y, type TimestampOptions as a, type DatabaseDialect as b, type DatabaseExecOptions as c, type SqliteConfig as d, type StrictColumnSelector as e, QueryBuilder as f, type SelectableColumn as g, type QuerHooks as h, type DatabaseOptions as i, type QueryRunHooks as j, type AcceptedOrderBy as k, type AcceptedInsertValues as l, type AcceptedUpdateValues as m, type AggregateColumn as n, type SelectQueryOutput as o, type QueryOutput as p, type QueryRunHooksOptions as q, type SqlConfig as r, type MysqlConfig as s, createdAt as t, updatedAt as u, deletedAt as v, defineColumns as w, type TableOptions as x, type TableOutput as y, alias as z };
500
+ export { clone as $, type AliasedColumn as A, deletedAt as B, type ColumnSelector as C, type DatabaseDefinition as D, type ExplainOptions as E, defineColumns as F, type GroupNode as G, type TableOptions as H, type TableOutput as I, type JoinNode as J, type ExecOptions as K, type SingleValueComparisonNode as L, type MergeTimestampParanoid as M, type MultiValueComparisonNode as N, type NullValueComparisonNode as O, type PostgresConfig as P, type QueryDefinition as Q, type RawColumn as R, type SqlConfigMapping as S, Table as T, type ComparisonNode as U, type NotNode as V, type WhereValue as W, type BaseJoinNode as X, type NonCrossNaturalJoinNode as Y, type CrossNaturalJoinNode as Z, alias as _, addCondition as a, col as a0, aggregateCol as a1, addGroupCondition as b, type TimestampOptions as c, type DatabaseDialect as d, type DatabaseExecOptions as e, type MysqlConfig as f, type SqliteConfig as g, type StrictColumnSelector as h, QueryBuilder as i, type SelectableColumn as j, type QueryTransformerContract as k, type QueryConditionContract as l, type AstNode as m, type QueryHooks as n, type DatabaseOptions as o, type QueryRunHooks as p, type AcceptedOrderBy as q, type AcceptedInsertValues as r, type AcceptedUpdateValues as s, type AggregateColumn as t, type SelectQueryOutput as u, type QueryOutput as v, type QueryRunHooksOptions as w, type SqlConfig as x, createdAt as y, updatedAt as z };
@@ -1,7 +1,7 @@
1
1
  export { Column } from './column/index.js';
2
- export { D as Database } from './index-BXOAxB_h.js';
2
+ export { D as Database } from './index-B4y4GiNB.js';
3
3
  export { Migration } from './migration/index.js';
4
- export { f as QueryBuilder, T as Table } from './index-BdpoD4zk.js';
4
+ export { i as QueryBuilder, T as Table } from './index-CARBkj9h.js';
5
5
  import './table/constants.js';
6
6
  import './column/constants.js';
7
7
  import './column/types.js';
@@ -1,6 +1,6 @@
1
1
  import { Column } from '../column/index.js';
2
- import { D as Database } from '../index-BXOAxB_h.js';
3
- import { T as Table } from '../index-BdpoD4zk.js';
2
+ import { D as Database } from '../index-B4y4GiNB.js';
3
+ import { T as Table } from '../index-CARBkj9h.js';
4
4
  import { Dialect } from '../table/constants.js';
5
5
  import { MigrationOptions, MigrationFn } from './type.js';
6
6
  import '../column/constants.js';
@@ -1,6 +1,6 @@
1
1
  import { Column } from '../column/index.js';
2
- import { D as Database } from '../index-BXOAxB_h.js';
3
- import { T as Table } from '../index-BdpoD4zk.js';
2
+ import { D as Database } from '../index-B4y4GiNB.js';
3
+ import { T as Table } from '../index-CARBkj9h.js';
4
4
  import { Dialect } from '../table/constants.js';
5
5
  import '../column/constants.js';
6
6
  import '../column/types.js';
@@ -0,0 +1,8 @@
1
+ import '../column/index.js';
2
+ export { m as AstNode, X as BaseJoinNode, U as ComparisonNode, Z as CrossNaturalJoinNode, G as GroupNode, J as JoinNode, N as MultiValueComparisonNode, Y as NonCrossNaturalJoinNode, V as NotNode, O as NullValueComparisonNode, L as SingleValueComparisonNode } from '../index-CARBkj9h.js';
3
+ import './constants.js';
4
+ import '../table/constants.js';
5
+ import '../column/constants.js';
6
+ import '../column/types.js';
7
+ import 'bun';
8
+ import '../types.js';
@@ -0,0 +1 @@
1
+
@@ -1,15 +1,15 @@
1
- import { T as Table, Q as QueryDefinition, C as ColumnSelector, e as StrictColumnSelector, f as QueryBuilder } from '../index-BdpoD4zk.js';
1
+ import { T as Table, Q as QueryDefinition, C as ColumnSelector, h as StrictColumnSelector, i as QueryBuilder } from '../index-CARBkj9h.js';
2
2
  import { Column } from '../column/index.js';
3
- import '../column/constants.js';
3
+ import 'bun';
4
4
  import '../types.js';
5
5
  import './constants.js';
6
- import 'bun';
6
+ import '../column/constants.js';
7
7
  import '../table/constants.js';
8
8
  import '../column/types.js';
9
9
 
10
10
  declare function buildSelectQuery<Alias extends string, TableRef extends Table<string, Record<string, Column>>, JoinedTables extends Record<string, Table<string, Record<string, Column>>>, Definition extends Partial<QueryDefinition<Alias, TableRef, JoinedTables>>, AllowedColumn extends ColumnSelector<Alias, TableRef, JoinedTables>, StrictAllowedColumn extends StrictColumnSelector<Alias, TableRef, JoinedTables>>(q: QueryBuilder<Alias, TableRef, JoinedTables, Definition, AllowedColumn, StrictAllowedColumn>): string;
11
- declare function buildInsertQuery<Alias extends string, TableRef extends Table<string, Record<string, Column>>, JoinedTables extends Record<string, Table<string, Record<string, Column>>>, Definition extends Partial<QueryDefinition<Alias, TableRef, JoinedTables>>, AllowedColumn extends ColumnSelector<Alias, TableRef, JoinedTables>, StrictAllowedColumn extends StrictColumnSelector<Alias, TableRef, JoinedTables>>(q: QueryBuilder<Alias, TableRef, JoinedTables, Definition, AllowedColumn, StrictAllowedColumn>): string;
12
- declare function buildUpdateQuery<Alias extends string, TableRef extends Table<string, Record<string, Column>>, JoinedTables extends Record<string, Table<string, Record<string, Column>>>, Definition extends Partial<QueryDefinition<Alias, TableRef, JoinedTables>>, AllowedColumn extends ColumnSelector<Alias, TableRef, JoinedTables>, StrictAllowedColumn extends StrictColumnSelector<Alias, TableRef, JoinedTables>>(q: QueryBuilder<Alias, TableRef, JoinedTables, Definition, AllowedColumn, StrictAllowedColumn>): string;
11
+ declare function buildInsertQuery<Alias extends string, TableRef extends Table<string, Record<string, Column>>, JoinedTables extends Record<string, Table<string, Record<string, Column>>>, Definition extends Partial<QueryDefinition<Alias, TableRef, JoinedTables>>, AllowedColumn extends ColumnSelector<Alias, TableRef, JoinedTables>, StrictAllowedColumn extends StrictColumnSelector<Alias, TableRef, JoinedTables>>(q: QueryBuilder<Alias, TableRef, JoinedTables, Definition, AllowedColumn, StrictAllowedColumn>, params: unknown[]): string;
12
+ declare function buildUpdateQuery<Alias extends string, TableRef extends Table<string, Record<string, Column>>, JoinedTables extends Record<string, Table<string, Record<string, Column>>>, Definition extends Partial<QueryDefinition<Alias, TableRef, JoinedTables>>, AllowedColumn extends ColumnSelector<Alias, TableRef, JoinedTables>, StrictAllowedColumn extends StrictColumnSelector<Alias, TableRef, JoinedTables>>(q: QueryBuilder<Alias, TableRef, JoinedTables, Definition, AllowedColumn, StrictAllowedColumn>, params: unknown[]): string;
13
13
  declare function buildDeleteQuery<Alias extends string, TableRef extends Table<string, Record<string, Column>>, JoinedTables extends Record<string, Table<string, Record<string, Column>>>, Definition extends Partial<QueryDefinition<Alias, TableRef, JoinedTables>>, AllowedColumn extends ColumnSelector<Alias, TableRef, JoinedTables>, StrictAllowedColumn extends StrictColumnSelector<Alias, TableRef, JoinedTables>>(q: QueryBuilder<Alias, TableRef, JoinedTables, Definition, AllowedColumn, StrictAllowedColumn>): string;
14
14
 
15
15
  export { buildDeleteQuery, buildInsertQuery, buildSelectQuery, buildUpdateQuery };
@@ -30,7 +30,7 @@ function buildSelectQuery(q) {
30
30
  const distinct = q.definition.distinct ? "DISTINCT " : "";
31
31
  return `SELECT ${distinct}${columns.join(", ")} FROM ${from}`;
32
32
  }
33
- function buildInsertQuery(q) {
33
+ function buildInsertQuery(q, params) {
34
34
  const rows = q.definition?.insertValues;
35
35
  if (!rows?.length) {
36
36
  throw new Error(`INSERT requires values`);
@@ -39,12 +39,14 @@ function buildInsertQuery(q) {
39
39
  const columns = keys.map(quoteIdentifier).join(", ");
40
40
  const rowPlaceholders = `(${keys.map(() => "?").join(", ")})`;
41
41
  const placeholders = rows.map(() => rowPlaceholders).join(", ");
42
- q.definition.params = rows.flatMap(
43
- (row) => keys.map((key) => row[key])
42
+ params.push(
43
+ ...rows.flatMap(
44
+ (row) => keys.map((key) => row[key])
45
+ )
44
46
  );
45
47
  return `INSERT INTO ${q.table.name} (${columns}) VALUES ${placeholders} RETURNING *`;
46
48
  }
47
- function buildUpdateQuery(q) {
49
+ function buildUpdateQuery(q, params) {
48
50
  if (!q.definition?.updateValues) {
49
51
  throw new Error(`UPDATE requires values`);
50
52
  }
@@ -53,12 +55,8 @@ function buildUpdateQuery(q) {
53
55
  (key) => q.definition.updateValues[key]
54
56
  );
55
57
  keys = keys.map(quoteIdentifier);
56
- if (q.definition?.params) {
57
- q.definition.params = [...updateParams, ...q.definition.params];
58
- } else {
59
- q.definition.params = updateParams;
60
- }
61
- return `UPDATE ${q.table.name} SET ${keys.map((key) => `${key} = ?`.trim()).join(", ")}`;
58
+ params.unshift(...updateParams);
59
+ return `UPDATE ${q.table.name} SET ${keys.map((key) => `${key} = ?`).join(", ")}`;
62
60
  }
63
61
  function buildDeleteQuery(q) {
64
62
  return `DELETE FROM ${q.table.name}`;
@@ -0,0 +1,13 @@
1
+ import { Dialect } from '../table/constants.js';
2
+ import { m as AstNode, J as JoinNode } from '../index-CARBkj9h.js';
3
+ import '../column/index.js';
4
+ import '../column/constants.js';
5
+ import '../column/types.js';
6
+ import 'bun';
7
+ import '../types.js';
8
+ import './constants.js';
9
+
10
+ declare function compileAst(dialect: Dialect | null, node: AstNode, params: unknown[]): string;
11
+ declare function compileJoin(dialect: Dialect | null, join: JoinNode, params: unknown[]): string;
12
+
13
+ export { compileAst, compileJoin };