@pdg/drizzle-mysql 0.0.0-stage → 1.0.0

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.
@@ -0,0 +1,264 @@
1
+ import { SQL } from 'drizzle-orm';
2
+ import { MySqlTable, MySqlColumn, type MySqlAsyncSelectBase } from 'drizzle-orm/mysql-core';
3
+ import type { SelectedFields } from 'drizzle-orm/operations';
4
+ import type { GetSelectTableName } from 'drizzle-orm/query-builders/select.types';
5
+ import type { MySqlColumnSelectionName, MySqlSelectedNamedColumnUnion, MySqlSelectedNamedColumns, MySqlSelectedTableColumns, MySqlAliasTable } from './columns.cjs';
6
+ import type { MySqlInsertValues, MySqlUpdateValues, MySqlCompareValues, MySqlColumnName, MySqlArrayCompareValues, MySqlRangeCompareValues, MySqlPatternCompareValues, MySqlNullConditionInput, MySqlConditions } from './@types.cjs';
7
+ import type { MySql2Database } from 'drizzle-orm/mysql2';
8
+ /********************************************************************************************************************
9
+ * MySqlQuery
10
+ * ******************************************************************************************************************/
11
+ export declare class MySqlQuery<TTable extends MySqlTable, IV extends MySqlInsertValues<TTable> = MySqlInsertValues<TTable>, UV extends MySqlUpdateValues<TTable> = MySqlUpdateValues<TTable>, TCreatedAt extends string = 'created_at', TUpdatedAt extends string = 'updated_at', AR = AddResult<TTable>> {
12
+ private readonly current;
13
+ private readonly getTimestamp;
14
+ private readonly timestampColumns;
15
+ readonly t: TTable;
16
+ /********************************************************************************************************************
17
+ * constructor
18
+ * ******************************************************************************************************************/
19
+ constructor(table: TTable, current: () => MySql2Database, getTimestamp: () => any, timestampColumns?: {
20
+ createdAt?: TCreatedAt;
21
+ updatedAt?: TUpdatedAt;
22
+ });
23
+ private readonly drizzle;
24
+ /********************************************************************************************************************
25
+ * (PROTECTED) getTx
26
+ * ******************************************************************************************************************/
27
+ protected getTx(): MySql2Database<import("drizzle-orm").EmptyRelations>;
28
+ /********************************************************************************************************************
29
+ * columns
30
+ * ******************************************************************************************************************/
31
+ columns(): MySqlSelectedTableColumns<TTable>;
32
+ columns<N extends MySqlColumnSelectionName<TTable>>(...names: N[] & MySqlColumnSelectionName<TTable>[]): MySqlSelectedNamedColumnUnion<TTable, N>;
33
+ private resolveFields;
34
+ /********************************************************************************************************************
35
+ * select
36
+ * ******************************************************************************************************************/
37
+ select(): SelectFrom<TTable, undefined>;
38
+ select(fields: readonly []): SelectFrom<TTable, {}>;
39
+ select<N extends MySqlColumnSelectionName<TTable>>(fields: readonly N[] & readonly MySqlColumnSelectionName<TTable>[]): SelectFrom<TTable, MySqlSelectedNamedColumns<TTable, readonly N[]>>;
40
+ select<const T extends readonly FieldInput[]>(fields: (query: FieldsQuery<TTable>) => T): SelectFrom<TTable, MergeFields<T>>;
41
+ select<const T extends readonly FieldInput[] | readonly MySqlColumnSelectionName<TTable>[]>(fields: T & readonly (FieldInput | MySqlColumnSelectionName<TTable>)[]): SelectFrom<TTable, MergeFields<NamedFields<TTable, T>>>;
42
+ select<TSelection extends SelectedFields<MySqlColumn, TTable>>(fields?: Fields<FieldsQuery<TTable>, TSelection>): SelectFrom<TTable, TSelection>;
43
+ select<TAlias extends string>(alias: MySqlAliasTable<TTable, TAlias>): SelectFrom<MySqlAliasTable<TTable, TAlias>, undefined>;
44
+ select<TAlias extends string>(alias: MySqlAliasTable<TTable, TAlias>, fields: readonly []): SelectFrom<MySqlAliasTable<TTable, TAlias>, {}>;
45
+ select<TAlias extends string, N extends MySqlColumnSelectionName<MySqlAliasTable<TTable, TAlias>>>(alias: MySqlAliasTable<TTable, TAlias>, fields: readonly N[] & readonly MySqlColumnSelectionName<MySqlAliasTable<TTable, TAlias>>[]): SelectFrom<MySqlAliasTable<TTable, TAlias>, MySqlSelectedNamedColumns<MySqlAliasTable<TTable, TAlias>, readonly N[]>>;
46
+ select<TAlias extends string, const T extends readonly FieldInput[]>(alias: MySqlAliasTable<TTable, TAlias>, fields: (query: FieldsQuery<MySqlAliasTable<TTable, TAlias>>) => T): SelectFrom<MySqlAliasTable<TTable, TAlias>, MergeFields<T>>;
47
+ select<TAlias extends string, const T extends readonly FieldInput[] | readonly MySqlColumnSelectionName<MySqlAliasTable<TTable, TAlias>>[]>(alias: MySqlAliasTable<TTable, TAlias>, fields: T & readonly (FieldInput | MySqlColumnSelectionName<MySqlAliasTable<TTable, TAlias>>)[]): SelectFrom<MySqlAliasTable<TTable, TAlias>, MergeFields<NamedFields<MySqlAliasTable<TTable, TAlias>, T>>>;
48
+ select<TAlias extends string, TSelection extends SelectedFields<MySqlColumn, MySqlAliasTable<TTable, TAlias>>>(alias: MySqlAliasTable<TTable, TAlias>, fields: Fields<FieldsQuery<MySqlAliasTable<TTable, TAlias>>, TSelection>): SelectFrom<MySqlAliasTable<TTable, TAlias>, TSelection>;
49
+ /********************************************************************************************************************
50
+ * find
51
+ * ******************************************************************************************************************/
52
+ find(where: BaseWhere<this>): Promise<FindResult<TTable, undefined>>;
53
+ find(fields: readonly [], where?: BaseWhere<this>): Promise<FindResult<TTable, {}>>;
54
+ find<N extends MySqlColumnSelectionName<TTable>>(fields: readonly N[] & readonly MySqlColumnSelectionName<TTable>[], where?: BaseWhere<this>): Promise<FindResult<TTable, MySqlSelectedNamedColumns<TTable, readonly N[]>>>;
55
+ find<const T extends readonly FieldInput[]>(fields: (query: FieldsQuery<TTable>) => T, where: BaseWhere<this>): Promise<FindResult<TTable, MergeFields<T>>>;
56
+ find<const T extends readonly FieldInput[] | readonly MySqlColumnSelectionName<TTable>[]>(fields: T & readonly (FieldInput | MySqlColumnSelectionName<TTable>)[], where: BaseWhere<this>): Promise<FindResult<TTable, MergeFields<NamedFields<TTable, T>>>>;
57
+ find<TSelection extends SelectedFields<MySqlColumn, TTable>>(fields: Fields<FieldsQuery<TTable>, TSelection>, where: BaseWhere<this>): Promise<FindResult<TTable, TSelection>>;
58
+ find<TAlias extends string>(alias: MySqlAliasTable<TTable, TAlias>, where: BaseWhere<this>): Promise<FindResult<MySqlAliasTable<TTable, TAlias>, undefined>>;
59
+ find<TAlias extends string>(alias: MySqlAliasTable<TTable, TAlias>, fields: readonly [], where?: BaseWhere<this>): Promise<FindResult<MySqlAliasTable<TTable, TAlias>, {}>>;
60
+ find<TAlias extends string, N extends MySqlColumnSelectionName<MySqlAliasTable<TTable, TAlias>>>(alias: MySqlAliasTable<TTable, TAlias>, fields: readonly N[] & readonly MySqlColumnSelectionName<MySqlAliasTable<TTable, TAlias>>[], where?: BaseWhere<this>): Promise<FindResult<MySqlAliasTable<TTable, TAlias>, MySqlSelectedNamedColumns<MySqlAliasTable<TTable, TAlias>, readonly N[]>>>;
61
+ find<TAlias extends string, const T extends readonly FieldInput[]>(alias: MySqlAliasTable<TTable, TAlias>, fields: (query: FieldsQuery<MySqlAliasTable<TTable, TAlias>>) => T, where: BaseWhere<this>): Promise<FindResult<MySqlAliasTable<TTable, TAlias>, MergeFields<T>>>;
62
+ find<TAlias extends string, const T extends readonly FieldInput[] | readonly MySqlColumnSelectionName<MySqlAliasTable<TTable, TAlias>>[]>(alias: MySqlAliasTable<TTable, TAlias>, fields: T & readonly (FieldInput | MySqlColumnSelectionName<MySqlAliasTable<TTable, TAlias>>)[], where: BaseWhere<this>): Promise<FindResult<MySqlAliasTable<TTable, TAlias>, MergeFields<NamedFields<MySqlAliasTable<TTable, TAlias>, T>>>>;
63
+ find<TAlias extends string, TSelection extends SelectedFields<MySqlColumn, MySqlAliasTable<TTable, TAlias>>>(alias: MySqlAliasTable<TTable, TAlias>, fields: Fields<FieldsQuery<MySqlAliasTable<TTable, TAlias>>, TSelection>, where: BaseWhere<this>): Promise<FindResult<MySqlAliasTable<TTable, TAlias>, TSelection>>;
64
+ /********************************************************************************************************************
65
+ * findByPrimaryKey
66
+ * ******************************************************************************************************************/
67
+ findByPrimaryKey<N extends MySqlColumnSelectionName<TTable>>(fields: readonly N[] & readonly MySqlColumnSelectionName<TTable>[], key: PrimaryKeyInput<TTable>): Promise<FindResult<TTable, MySqlSelectedNamedColumns<TTable, readonly N[]>>>;
68
+ findByPrimaryKey(key: PrimaryKeyInput<TTable>): Promise<FindResult<TTable, undefined>>;
69
+ findByPrimaryKey(fields: readonly [], key: PrimaryKeyInput<TTable>): Promise<FindResult<TTable, {}>>;
70
+ findByPrimaryKey<const T extends readonly FieldInput[]>(fields: (query: FieldsQuery<TTable>) => T, key: PrimaryKeyInput<TTable>): Promise<FindResult<TTable, MergeFields<T>>>;
71
+ findByPrimaryKey<const T extends readonly FieldInput[] | readonly MySqlColumnSelectionName<TTable>[]>(fields: T & readonly (FieldInput | MySqlColumnSelectionName<TTable>)[], key: PrimaryKeyInput<TTable>): Promise<FindResult<TTable, MergeFields<NamedFields<TTable, T>>>>;
72
+ findByPrimaryKey<TSelection extends SelectedFields<MySqlColumn, TTable>>(fields: Fields<FieldsQuery<TTable>, TSelection>, key: PrimaryKeyInput<TTable>): Promise<FindResult<TTable, TSelection>>;
73
+ /********************************************************************************************************************
74
+ * primaryKeyCondition
75
+ * ******************************************************************************************************************/
76
+ private primaryKeyCondition;
77
+ /********************************************************************************************************************
78
+ * exists
79
+ * ******************************************************************************************************************/
80
+ exists(where?: BaseWhere<this>): Promise<boolean>;
81
+ /********************************************************************************************************************
82
+ * existsByPrimarykey
83
+ * ******************************************************************************************************************/
84
+ existsByPrimaryKey(key: PrimaryKeyInput<TTable>): Promise<boolean>;
85
+ /********************************************************************************************************************
86
+ * notExists
87
+ * ******************************************************************************************************************/
88
+ notExists(where?: BaseWhere<this>): Promise<boolean>;
89
+ /********************************************************************************************************************
90
+ * notExistsByPrimaryKey
91
+ * ******************************************************************************************************************/
92
+ notExistsByPrimaryKey(key: PrimaryKeyInput<TTable>): Promise<boolean>;
93
+ /********************************************************************************************************************
94
+ * count
95
+ * ******************************************************************************************************************/
96
+ count(where?: BaseWhere<this>): Promise<number>;
97
+ /********************************************************************************************************************
98
+ * (PRIVATE) insertValues
99
+ * ******************************************************************************************************************/
100
+ private insertValues;
101
+ /********************************************************************************************************************
102
+ * add
103
+ * ******************************************************************************************************************/
104
+ add(value: IV[]): Promise<AR[]>;
105
+ add(value: IV): Promise<AR>;
106
+ /********************************************************************************************************************
107
+ * addWithCreatedAt
108
+ * ******************************************************************************************************************/
109
+ addWithCreatedAt(value: TimestampInput<IV, TCreatedAt, TUpdatedAt>[]): Promise<AR[]>;
110
+ addWithCreatedAt(value: TimestampInput<IV, TCreatedAt, TUpdatedAt>): Promise<AR>;
111
+ /********************************************************************************************************************
112
+ * addWithCreatedUpdatedAt
113
+ * ******************************************************************************************************************/
114
+ addWithCreatedUpdatedAt(value: TimestampInput<IV, TCreatedAt, TUpdatedAt>[]): Promise<AR[]>;
115
+ addWithCreatedUpdatedAt(value: TimestampInput<IV, TCreatedAt, TUpdatedAt>): Promise<AR>;
116
+ /********************************************************************************************************************
117
+ * edit
118
+ * ******************************************************************************************************************/
119
+ edit(set: UV, where: BaseWhere<this>): Omit<import("drizzle-orm/mysql-core").MySqlAsyncUpdateBase<import("drizzle-orm").Assume<import("drizzle-orm").Assume<TTable, MySqlTable<import("drizzle-orm/mysql-core").TableConfig>>, MySqlTable<import("drizzle-orm/mysql-core").TableConfig>>, import("drizzle-orm/mysql2").MySql2QueryResultHKT, false, "where">, "where">;
120
+ /********************************************************************************************************************
121
+ * editByPrimaryKey
122
+ * ******************************************************************************************************************/
123
+ editByPrimaryKey(set: UV, key: PrimaryKeyInput<TTable>): Omit<import("drizzle-orm/mysql-core").MySqlAsyncUpdateBase<import("drizzle-orm").Assume<import("drizzle-orm").Assume<TTable, MySqlTable<import("drizzle-orm/mysql-core").TableConfig>>, MySqlTable<import("drizzle-orm/mysql-core").TableConfig>>, import("drizzle-orm/mysql2").MySql2QueryResultHKT, false, "where">, "where">;
124
+ /********************************************************************************************************************
125
+ * editWithUpdatedAt
126
+ * ******************************************************************************************************************/
127
+ editWithUpdatedAt(set: Omit<UV, TUpdatedAt> & {
128
+ [P in TUpdatedAt]?: never;
129
+ }, where: BaseWhere<this>): Omit<import("drizzle-orm/mysql-core").MySqlAsyncUpdateBase<import("drizzle-orm").Assume<import("drizzle-orm").Assume<TTable, MySqlTable<import("drizzle-orm/mysql-core").TableConfig>>, MySqlTable<import("drizzle-orm/mysql-core").TableConfig>>, import("drizzle-orm/mysql2").MySql2QueryResultHKT, false, "where">, "where">;
130
+ /********************************************************************************************************************
131
+ * editWithUpdatedAtByPrimaryKey
132
+ * ******************************************************************************************************************/
133
+ editWithUpdatedAtByPrimaryKey(set: Omit<UV, TUpdatedAt> & {
134
+ [P in TUpdatedAt]?: never;
135
+ }, key: PrimaryKeyInput<TTable>): Omit<import("drizzle-orm/mysql-core").MySqlAsyncUpdateBase<import("drizzle-orm").Assume<import("drizzle-orm").Assume<TTable, MySqlTable<import("drizzle-orm/mysql-core").TableConfig>>, MySqlTable<import("drizzle-orm/mysql-core").TableConfig>>, import("drizzle-orm/mysql2").MySql2QueryResultHKT, false, "where">, "where">;
136
+ /********************************************************************************************************************
137
+ * remove
138
+ * ******************************************************************************************************************/
139
+ remove(where: BaseWhere<this>): Omit<import("drizzle-orm/mysql-core").MySqlAsyncDeleteBase<import("drizzle-orm").Assume<TTable, MySqlTable<import("drizzle-orm/mysql-core").TableConfig>>, import("drizzle-orm/mysql2").MySql2QueryResultHKT, false, "where">, "where">;
140
+ /********************************************************************************************************************
141
+ * removeByPrimaryKey
142
+ * ******************************************************************************************************************/
143
+ removeByPrimaryKey(key: PrimaryKeyInput<TTable>): Omit<import("drizzle-orm/mysql-core").MySqlAsyncDeleteBase<import("drizzle-orm").Assume<TTable, MySqlTable<import("drizzle-orm/mysql-core").TableConfig>>, import("drizzle-orm/mysql2").MySql2QueryResultHKT, false, "where">, "where">;
144
+ /********************************************************************************************************************
145
+ * eq
146
+ * ******************************************************************************************************************/
147
+ eq(values: MySqlCompareValues<TTable>): SQL | undefined;
148
+ /********************************************************************************************************************
149
+ * ne
150
+ * ******************************************************************************************************************/
151
+ ne(values: MySqlCompareValues<TTable>): SQL | undefined;
152
+ /********************************************************************************************************************
153
+ * gt
154
+ * ******************************************************************************************************************/
155
+ gt(values: MySqlCompareValues<TTable>): SQL | undefined;
156
+ /********************************************************************************************************************
157
+ * gte
158
+ * ******************************************************************************************************************/
159
+ gte(values: MySqlCompareValues<TTable>): SQL | undefined;
160
+ /********************************************************************************************************************
161
+ * lt
162
+ * ******************************************************************************************************************/
163
+ lt(values: MySqlCompareValues<TTable>): SQL | undefined;
164
+ /********************************************************************************************************************
165
+ * lte
166
+ * ******************************************************************************************************************/
167
+ lte(values: MySqlCompareValues<TTable>): SQL | undefined;
168
+ /********************************************************************************************************************
169
+ * lte
170
+ * ******************************************************************************************************************/
171
+ inArray(values: MySqlArrayCompareValues<TTable>): SQL | undefined;
172
+ /********************************************************************************************************************
173
+ * notInArray
174
+ * ******************************************************************************************************************/
175
+ notInArray(values: MySqlArrayCompareValues<TTable>): SQL | undefined;
176
+ /********************************************************************************************************************
177
+ * between
178
+ * ******************************************************************************************************************/
179
+ between(values: MySqlRangeCompareValues<TTable>): SQL | undefined;
180
+ /********************************************************************************************************************
181
+ * notBetween
182
+ * ******************************************************************************************************************/
183
+ notBetween(values: MySqlRangeCompareValues<TTable>): SQL | undefined;
184
+ /********************************************************************************************************************
185
+ * like
186
+ * ******************************************************************************************************************/
187
+ like(values: MySqlPatternCompareValues<TTable>): SQL | undefined;
188
+ /********************************************************************************************************************
189
+ * notLike
190
+ * ******************************************************************************************************************/
191
+ notLike(values: MySqlPatternCompareValues<TTable>): SQL | undefined;
192
+ /********************************************************************************************************************
193
+ * ilike
194
+ * ******************************************************************************************************************/
195
+ ilike(values: MySqlPatternCompareValues<TTable>): SQL | undefined;
196
+ /********************************************************************************************************************
197
+ * notIlike
198
+ * ******************************************************************************************************************/
199
+ notIlike(values: MySqlPatternCompareValues<TTable>): SQL | undefined;
200
+ /********************************************************************************************************************
201
+ * isNull
202
+ * ******************************************************************************************************************/
203
+ isNull(name: MySqlColumnName<TTable>): SQL;
204
+ isNull(names: MySqlNullConditionInput<TTable>): SQL | undefined;
205
+ /********************************************************************************************************************
206
+ * isNotNull
207
+ * ******************************************************************************************************************/
208
+ isNotNull(name: MySqlColumnName<TTable>): SQL;
209
+ isNotNull(names: MySqlNullConditionInput<TTable>): SQL | undefined;
210
+ /********************************************************************************************************************
211
+ * and
212
+ * ******************************************************************************************************************/
213
+ and(options: MySqlConditions<TTable>): SQL | undefined;
214
+ /********************************************************************************************************************
215
+ * or
216
+ * ******************************************************************************************************************/
217
+ or(options: MySqlConditions<TTable>): SQL | undefined;
218
+ }
219
+ /********************************************************************************************************************
220
+ * types
221
+ * ******************************************************************************************************************/
222
+ type SelectFrom<TTable extends MySqlTable, TSelection extends FieldSet | undefined> = MySqlAsyncSelectBase<GetSelectTableName<TTable>, TSelection extends undefined ? MySqlSelectedTableColumns<TTable> : TSelection, 'partial'>;
223
+ type FindResult<TTable extends MySqlTable, TSelection extends FieldSet | undefined> = Awaited<SelectFrom<TTable, TSelection>>[number] | undefined;
224
+ type WhereQuery<TQuery> = Pick<TQuery, Extract<keyof TQuery, 't' | 'eq' | 'ne' | 'gt' | 'gte' | 'lt' | 'lte' | 'inArray' | 'notInArray' | 'between' | 'notBetween' | 'like' | 'notLike' | 'ilike' | 'notIlike' | 'isNull' | 'isNotNull' | 'and' | 'or'>>;
225
+ type BaseWhere<TQuery> = SQL | undefined | ((query: WhereQuery<TQuery>) => SQL | undefined);
226
+ type FieldSet = SelectedFields<MySqlColumn, MySqlTable>;
227
+ type FieldInput = FieldSet | false | undefined;
228
+ type FieldsQuery<TTable extends MySqlTable> = {
229
+ readonly t: TTable;
230
+ columns(): MySqlSelectedTableColumns<TTable>;
231
+ columns<N extends MySqlColumnSelectionName<TTable>>(...names: N[] & MySqlColumnSelectionName<TTable>[]): MySqlSelectedNamedColumnUnion<TTable, N>;
232
+ };
233
+ type Fields<TQuery, TSelection> = TSelection | ((query: TQuery) => TSelection);
234
+ type NamedFields<TTable extends MySqlTable, T extends readonly (FieldInput | MySqlColumnSelectionName<TTable>)[]> = {
235
+ [I in keyof T]: T[I] extends MySqlColumnSelectionName<TTable> ? MySqlSelectedNamedColumns<TTable, readonly [T[I]]> : Extract<T[I], FieldInput>;
236
+ };
237
+ type MergeField<First, Result> = First extends FieldSet ? Result extends unknown ? Omit<Result, keyof First> & First : never : Result;
238
+ type MergeFields<T extends readonly FieldInput[], Result = {}> = T extends readonly [
239
+ infer First extends FieldInput,
240
+ ...infer Rest extends readonly FieldInput[]
241
+ ] ? MergeFields<Rest, MergeField<First, Result>> : number extends T['length'] ? Exclude<T[number], false | undefined> : Result extends unknown ? {
242
+ [P in keyof Result]: Result[P];
243
+ } : never;
244
+ type PrimaryKeyNames<T extends MySqlTable> = {
245
+ [P in keyof T['_']['columns']]: T['_']['columns'][P]['_'] extends {
246
+ isPrimaryKey: true;
247
+ } ? P : never;
248
+ }[keyof T['_']['columns']];
249
+ type PrimaryKeyObject<T extends MySqlTable> = {
250
+ [P in PrimaryKeyNames<T>]: T['_']['columns'][P]['_']['data'];
251
+ };
252
+ type IsUnion<T, U = T> = T extends U ? ([U] extends [T] ? false : true) : never;
253
+ type PrimaryKeyInput<T extends MySqlTable> = [PrimaryKeyNames<T>] extends [never] ? never : IsUnion<PrimaryKeyNames<T>> extends true ? PrimaryKeyObject<T> : PrimaryKeyObject<T> | PrimaryKeyObject<T>[PrimaryKeyNames<T>];
254
+ type AutoIncrementKeys<TTable extends MySqlTable> = {
255
+ [P in keyof TTable['_']['columns']]: TTable['_']['columns'][P]['_'] extends {
256
+ isAutoincrement: true;
257
+ } ? P : never;
258
+ }[keyof TTable['_']['columns']];
259
+ type HasAutoIncrement<TTable extends MySqlTable> = [AutoIncrementKeys<TTable>] extends [never] ? false : true;
260
+ type TimestampInput<T, C extends string, U extends string> = Omit<T, C | U> & {
261
+ [P in C | U]?: never;
262
+ };
263
+ type AddResult<TTable extends MySqlTable> = HasAutoIncrement<TTable> extends true ? number : undefined;
264
+ export {};
@@ -0,0 +1,264 @@
1
+ import { SQL } from 'drizzle-orm';
2
+ import { MySqlTable, MySqlColumn, type MySqlAsyncSelectBase } from 'drizzle-orm/mysql-core';
3
+ import type { SelectedFields } from 'drizzle-orm/operations';
4
+ import type { GetSelectTableName } from 'drizzle-orm/query-builders/select.types';
5
+ import type { MySqlColumnSelectionName, MySqlSelectedNamedColumnUnion, MySqlSelectedNamedColumns, MySqlSelectedTableColumns, MySqlAliasTable } from './columns.js';
6
+ import type { MySqlInsertValues, MySqlUpdateValues, MySqlCompareValues, MySqlColumnName, MySqlArrayCompareValues, MySqlRangeCompareValues, MySqlPatternCompareValues, MySqlNullConditionInput, MySqlConditions } from './@types.js';
7
+ import type { MySql2Database } from 'drizzle-orm/mysql2';
8
+ /********************************************************************************************************************
9
+ * MySqlQuery
10
+ * ******************************************************************************************************************/
11
+ export declare class MySqlQuery<TTable extends MySqlTable, IV extends MySqlInsertValues<TTable> = MySqlInsertValues<TTable>, UV extends MySqlUpdateValues<TTable> = MySqlUpdateValues<TTable>, TCreatedAt extends string = 'created_at', TUpdatedAt extends string = 'updated_at', AR = AddResult<TTable>> {
12
+ private readonly current;
13
+ private readonly getTimestamp;
14
+ private readonly timestampColumns;
15
+ readonly t: TTable;
16
+ /********************************************************************************************************************
17
+ * constructor
18
+ * ******************************************************************************************************************/
19
+ constructor(table: TTable, current: () => MySql2Database, getTimestamp: () => any, timestampColumns?: {
20
+ createdAt?: TCreatedAt;
21
+ updatedAt?: TUpdatedAt;
22
+ });
23
+ private readonly drizzle;
24
+ /********************************************************************************************************************
25
+ * (PROTECTED) getTx
26
+ * ******************************************************************************************************************/
27
+ protected getTx(): MySql2Database<import("drizzle-orm").EmptyRelations>;
28
+ /********************************************************************************************************************
29
+ * columns
30
+ * ******************************************************************************************************************/
31
+ columns(): MySqlSelectedTableColumns<TTable>;
32
+ columns<N extends MySqlColumnSelectionName<TTable>>(...names: N[] & MySqlColumnSelectionName<TTable>[]): MySqlSelectedNamedColumnUnion<TTable, N>;
33
+ private resolveFields;
34
+ /********************************************************************************************************************
35
+ * select
36
+ * ******************************************************************************************************************/
37
+ select(): SelectFrom<TTable, undefined>;
38
+ select(fields: readonly []): SelectFrom<TTable, {}>;
39
+ select<N extends MySqlColumnSelectionName<TTable>>(fields: readonly N[] & readonly MySqlColumnSelectionName<TTable>[]): SelectFrom<TTable, MySqlSelectedNamedColumns<TTable, readonly N[]>>;
40
+ select<const T extends readonly FieldInput[]>(fields: (query: FieldsQuery<TTable>) => T): SelectFrom<TTable, MergeFields<T>>;
41
+ select<const T extends readonly FieldInput[] | readonly MySqlColumnSelectionName<TTable>[]>(fields: T & readonly (FieldInput | MySqlColumnSelectionName<TTable>)[]): SelectFrom<TTable, MergeFields<NamedFields<TTable, T>>>;
42
+ select<TSelection extends SelectedFields<MySqlColumn, TTable>>(fields?: Fields<FieldsQuery<TTable>, TSelection>): SelectFrom<TTable, TSelection>;
43
+ select<TAlias extends string>(alias: MySqlAliasTable<TTable, TAlias>): SelectFrom<MySqlAliasTable<TTable, TAlias>, undefined>;
44
+ select<TAlias extends string>(alias: MySqlAliasTable<TTable, TAlias>, fields: readonly []): SelectFrom<MySqlAliasTable<TTable, TAlias>, {}>;
45
+ select<TAlias extends string, N extends MySqlColumnSelectionName<MySqlAliasTable<TTable, TAlias>>>(alias: MySqlAliasTable<TTable, TAlias>, fields: readonly N[] & readonly MySqlColumnSelectionName<MySqlAliasTable<TTable, TAlias>>[]): SelectFrom<MySqlAliasTable<TTable, TAlias>, MySqlSelectedNamedColumns<MySqlAliasTable<TTable, TAlias>, readonly N[]>>;
46
+ select<TAlias extends string, const T extends readonly FieldInput[]>(alias: MySqlAliasTable<TTable, TAlias>, fields: (query: FieldsQuery<MySqlAliasTable<TTable, TAlias>>) => T): SelectFrom<MySqlAliasTable<TTable, TAlias>, MergeFields<T>>;
47
+ select<TAlias extends string, const T extends readonly FieldInput[] | readonly MySqlColumnSelectionName<MySqlAliasTable<TTable, TAlias>>[]>(alias: MySqlAliasTable<TTable, TAlias>, fields: T & readonly (FieldInput | MySqlColumnSelectionName<MySqlAliasTable<TTable, TAlias>>)[]): SelectFrom<MySqlAliasTable<TTable, TAlias>, MergeFields<NamedFields<MySqlAliasTable<TTable, TAlias>, T>>>;
48
+ select<TAlias extends string, TSelection extends SelectedFields<MySqlColumn, MySqlAliasTable<TTable, TAlias>>>(alias: MySqlAliasTable<TTable, TAlias>, fields: Fields<FieldsQuery<MySqlAliasTable<TTable, TAlias>>, TSelection>): SelectFrom<MySqlAliasTable<TTable, TAlias>, TSelection>;
49
+ /********************************************************************************************************************
50
+ * find
51
+ * ******************************************************************************************************************/
52
+ find(where: BaseWhere<this>): Promise<FindResult<TTable, undefined>>;
53
+ find(fields: readonly [], where?: BaseWhere<this>): Promise<FindResult<TTable, {}>>;
54
+ find<N extends MySqlColumnSelectionName<TTable>>(fields: readonly N[] & readonly MySqlColumnSelectionName<TTable>[], where?: BaseWhere<this>): Promise<FindResult<TTable, MySqlSelectedNamedColumns<TTable, readonly N[]>>>;
55
+ find<const T extends readonly FieldInput[]>(fields: (query: FieldsQuery<TTable>) => T, where: BaseWhere<this>): Promise<FindResult<TTable, MergeFields<T>>>;
56
+ find<const T extends readonly FieldInput[] | readonly MySqlColumnSelectionName<TTable>[]>(fields: T & readonly (FieldInput | MySqlColumnSelectionName<TTable>)[], where: BaseWhere<this>): Promise<FindResult<TTable, MergeFields<NamedFields<TTable, T>>>>;
57
+ find<TSelection extends SelectedFields<MySqlColumn, TTable>>(fields: Fields<FieldsQuery<TTable>, TSelection>, where: BaseWhere<this>): Promise<FindResult<TTable, TSelection>>;
58
+ find<TAlias extends string>(alias: MySqlAliasTable<TTable, TAlias>, where: BaseWhere<this>): Promise<FindResult<MySqlAliasTable<TTable, TAlias>, undefined>>;
59
+ find<TAlias extends string>(alias: MySqlAliasTable<TTable, TAlias>, fields: readonly [], where?: BaseWhere<this>): Promise<FindResult<MySqlAliasTable<TTable, TAlias>, {}>>;
60
+ find<TAlias extends string, N extends MySqlColumnSelectionName<MySqlAliasTable<TTable, TAlias>>>(alias: MySqlAliasTable<TTable, TAlias>, fields: readonly N[] & readonly MySqlColumnSelectionName<MySqlAliasTable<TTable, TAlias>>[], where?: BaseWhere<this>): Promise<FindResult<MySqlAliasTable<TTable, TAlias>, MySqlSelectedNamedColumns<MySqlAliasTable<TTable, TAlias>, readonly N[]>>>;
61
+ find<TAlias extends string, const T extends readonly FieldInput[]>(alias: MySqlAliasTable<TTable, TAlias>, fields: (query: FieldsQuery<MySqlAliasTable<TTable, TAlias>>) => T, where: BaseWhere<this>): Promise<FindResult<MySqlAliasTable<TTable, TAlias>, MergeFields<T>>>;
62
+ find<TAlias extends string, const T extends readonly FieldInput[] | readonly MySqlColumnSelectionName<MySqlAliasTable<TTable, TAlias>>[]>(alias: MySqlAliasTable<TTable, TAlias>, fields: T & readonly (FieldInput | MySqlColumnSelectionName<MySqlAliasTable<TTable, TAlias>>)[], where: BaseWhere<this>): Promise<FindResult<MySqlAliasTable<TTable, TAlias>, MergeFields<NamedFields<MySqlAliasTable<TTable, TAlias>, T>>>>;
63
+ find<TAlias extends string, TSelection extends SelectedFields<MySqlColumn, MySqlAliasTable<TTable, TAlias>>>(alias: MySqlAliasTable<TTable, TAlias>, fields: Fields<FieldsQuery<MySqlAliasTable<TTable, TAlias>>, TSelection>, where: BaseWhere<this>): Promise<FindResult<MySqlAliasTable<TTable, TAlias>, TSelection>>;
64
+ /********************************************************************************************************************
65
+ * findByPrimaryKey
66
+ * ******************************************************************************************************************/
67
+ findByPrimaryKey<N extends MySqlColumnSelectionName<TTable>>(fields: readonly N[] & readonly MySqlColumnSelectionName<TTable>[], key: PrimaryKeyInput<TTable>): Promise<FindResult<TTable, MySqlSelectedNamedColumns<TTable, readonly N[]>>>;
68
+ findByPrimaryKey(key: PrimaryKeyInput<TTable>): Promise<FindResult<TTable, undefined>>;
69
+ findByPrimaryKey(fields: readonly [], key: PrimaryKeyInput<TTable>): Promise<FindResult<TTable, {}>>;
70
+ findByPrimaryKey<const T extends readonly FieldInput[]>(fields: (query: FieldsQuery<TTable>) => T, key: PrimaryKeyInput<TTable>): Promise<FindResult<TTable, MergeFields<T>>>;
71
+ findByPrimaryKey<const T extends readonly FieldInput[] | readonly MySqlColumnSelectionName<TTable>[]>(fields: T & readonly (FieldInput | MySqlColumnSelectionName<TTable>)[], key: PrimaryKeyInput<TTable>): Promise<FindResult<TTable, MergeFields<NamedFields<TTable, T>>>>;
72
+ findByPrimaryKey<TSelection extends SelectedFields<MySqlColumn, TTable>>(fields: Fields<FieldsQuery<TTable>, TSelection>, key: PrimaryKeyInput<TTable>): Promise<FindResult<TTable, TSelection>>;
73
+ /********************************************************************************************************************
74
+ * primaryKeyCondition
75
+ * ******************************************************************************************************************/
76
+ private primaryKeyCondition;
77
+ /********************************************************************************************************************
78
+ * exists
79
+ * ******************************************************************************************************************/
80
+ exists(where?: BaseWhere<this>): Promise<boolean>;
81
+ /********************************************************************************************************************
82
+ * existsByPrimarykey
83
+ * ******************************************************************************************************************/
84
+ existsByPrimaryKey(key: PrimaryKeyInput<TTable>): Promise<boolean>;
85
+ /********************************************************************************************************************
86
+ * notExists
87
+ * ******************************************************************************************************************/
88
+ notExists(where?: BaseWhere<this>): Promise<boolean>;
89
+ /********************************************************************************************************************
90
+ * notExistsByPrimaryKey
91
+ * ******************************************************************************************************************/
92
+ notExistsByPrimaryKey(key: PrimaryKeyInput<TTable>): Promise<boolean>;
93
+ /********************************************************************************************************************
94
+ * count
95
+ * ******************************************************************************************************************/
96
+ count(where?: BaseWhere<this>): Promise<number>;
97
+ /********************************************************************************************************************
98
+ * (PRIVATE) insertValues
99
+ * ******************************************************************************************************************/
100
+ private insertValues;
101
+ /********************************************************************************************************************
102
+ * add
103
+ * ******************************************************************************************************************/
104
+ add(value: IV[]): Promise<AR[]>;
105
+ add(value: IV): Promise<AR>;
106
+ /********************************************************************************************************************
107
+ * addWithCreatedAt
108
+ * ******************************************************************************************************************/
109
+ addWithCreatedAt(value: TimestampInput<IV, TCreatedAt, TUpdatedAt>[]): Promise<AR[]>;
110
+ addWithCreatedAt(value: TimestampInput<IV, TCreatedAt, TUpdatedAt>): Promise<AR>;
111
+ /********************************************************************************************************************
112
+ * addWithCreatedUpdatedAt
113
+ * ******************************************************************************************************************/
114
+ addWithCreatedUpdatedAt(value: TimestampInput<IV, TCreatedAt, TUpdatedAt>[]): Promise<AR[]>;
115
+ addWithCreatedUpdatedAt(value: TimestampInput<IV, TCreatedAt, TUpdatedAt>): Promise<AR>;
116
+ /********************************************************************************************************************
117
+ * edit
118
+ * ******************************************************************************************************************/
119
+ edit(set: UV, where: BaseWhere<this>): Omit<import("drizzle-orm/mysql-core").MySqlAsyncUpdateBase<import("drizzle-orm").Assume<import("drizzle-orm").Assume<TTable, MySqlTable<import("drizzle-orm/mysql-core").TableConfig>>, MySqlTable<import("drizzle-orm/mysql-core").TableConfig>>, import("drizzle-orm/mysql2").MySql2QueryResultHKT, false, "where">, "where">;
120
+ /********************************************************************************************************************
121
+ * editByPrimaryKey
122
+ * ******************************************************************************************************************/
123
+ editByPrimaryKey(set: UV, key: PrimaryKeyInput<TTable>): Omit<import("drizzle-orm/mysql-core").MySqlAsyncUpdateBase<import("drizzle-orm").Assume<import("drizzle-orm").Assume<TTable, MySqlTable<import("drizzle-orm/mysql-core").TableConfig>>, MySqlTable<import("drizzle-orm/mysql-core").TableConfig>>, import("drizzle-orm/mysql2").MySql2QueryResultHKT, false, "where">, "where">;
124
+ /********************************************************************************************************************
125
+ * editWithUpdatedAt
126
+ * ******************************************************************************************************************/
127
+ editWithUpdatedAt(set: Omit<UV, TUpdatedAt> & {
128
+ [P in TUpdatedAt]?: never;
129
+ }, where: BaseWhere<this>): Omit<import("drizzle-orm/mysql-core").MySqlAsyncUpdateBase<import("drizzle-orm").Assume<import("drizzle-orm").Assume<TTable, MySqlTable<import("drizzle-orm/mysql-core").TableConfig>>, MySqlTable<import("drizzle-orm/mysql-core").TableConfig>>, import("drizzle-orm/mysql2").MySql2QueryResultHKT, false, "where">, "where">;
130
+ /********************************************************************************************************************
131
+ * editWithUpdatedAtByPrimaryKey
132
+ * ******************************************************************************************************************/
133
+ editWithUpdatedAtByPrimaryKey(set: Omit<UV, TUpdatedAt> & {
134
+ [P in TUpdatedAt]?: never;
135
+ }, key: PrimaryKeyInput<TTable>): Omit<import("drizzle-orm/mysql-core").MySqlAsyncUpdateBase<import("drizzle-orm").Assume<import("drizzle-orm").Assume<TTable, MySqlTable<import("drizzle-orm/mysql-core").TableConfig>>, MySqlTable<import("drizzle-orm/mysql-core").TableConfig>>, import("drizzle-orm/mysql2").MySql2QueryResultHKT, false, "where">, "where">;
136
+ /********************************************************************************************************************
137
+ * remove
138
+ * ******************************************************************************************************************/
139
+ remove(where: BaseWhere<this>): Omit<import("drizzle-orm/mysql-core").MySqlAsyncDeleteBase<import("drizzle-orm").Assume<TTable, MySqlTable<import("drizzle-orm/mysql-core").TableConfig>>, import("drizzle-orm/mysql2").MySql2QueryResultHKT, false, "where">, "where">;
140
+ /********************************************************************************************************************
141
+ * removeByPrimaryKey
142
+ * ******************************************************************************************************************/
143
+ removeByPrimaryKey(key: PrimaryKeyInput<TTable>): Omit<import("drizzle-orm/mysql-core").MySqlAsyncDeleteBase<import("drizzle-orm").Assume<TTable, MySqlTable<import("drizzle-orm/mysql-core").TableConfig>>, import("drizzle-orm/mysql2").MySql2QueryResultHKT, false, "where">, "where">;
144
+ /********************************************************************************************************************
145
+ * eq
146
+ * ******************************************************************************************************************/
147
+ eq(values: MySqlCompareValues<TTable>): SQL | undefined;
148
+ /********************************************************************************************************************
149
+ * ne
150
+ * ******************************************************************************************************************/
151
+ ne(values: MySqlCompareValues<TTable>): SQL | undefined;
152
+ /********************************************************************************************************************
153
+ * gt
154
+ * ******************************************************************************************************************/
155
+ gt(values: MySqlCompareValues<TTable>): SQL | undefined;
156
+ /********************************************************************************************************************
157
+ * gte
158
+ * ******************************************************************************************************************/
159
+ gte(values: MySqlCompareValues<TTable>): SQL | undefined;
160
+ /********************************************************************************************************************
161
+ * lt
162
+ * ******************************************************************************************************************/
163
+ lt(values: MySqlCompareValues<TTable>): SQL | undefined;
164
+ /********************************************************************************************************************
165
+ * lte
166
+ * ******************************************************************************************************************/
167
+ lte(values: MySqlCompareValues<TTable>): SQL | undefined;
168
+ /********************************************************************************************************************
169
+ * lte
170
+ * ******************************************************************************************************************/
171
+ inArray(values: MySqlArrayCompareValues<TTable>): SQL | undefined;
172
+ /********************************************************************************************************************
173
+ * notInArray
174
+ * ******************************************************************************************************************/
175
+ notInArray(values: MySqlArrayCompareValues<TTable>): SQL | undefined;
176
+ /********************************************************************************************************************
177
+ * between
178
+ * ******************************************************************************************************************/
179
+ between(values: MySqlRangeCompareValues<TTable>): SQL | undefined;
180
+ /********************************************************************************************************************
181
+ * notBetween
182
+ * ******************************************************************************************************************/
183
+ notBetween(values: MySqlRangeCompareValues<TTable>): SQL | undefined;
184
+ /********************************************************************************************************************
185
+ * like
186
+ * ******************************************************************************************************************/
187
+ like(values: MySqlPatternCompareValues<TTable>): SQL | undefined;
188
+ /********************************************************************************************************************
189
+ * notLike
190
+ * ******************************************************************************************************************/
191
+ notLike(values: MySqlPatternCompareValues<TTable>): SQL | undefined;
192
+ /********************************************************************************************************************
193
+ * ilike
194
+ * ******************************************************************************************************************/
195
+ ilike(values: MySqlPatternCompareValues<TTable>): SQL | undefined;
196
+ /********************************************************************************************************************
197
+ * notIlike
198
+ * ******************************************************************************************************************/
199
+ notIlike(values: MySqlPatternCompareValues<TTable>): SQL | undefined;
200
+ /********************************************************************************************************************
201
+ * isNull
202
+ * ******************************************************************************************************************/
203
+ isNull(name: MySqlColumnName<TTable>): SQL;
204
+ isNull(names: MySqlNullConditionInput<TTable>): SQL | undefined;
205
+ /********************************************************************************************************************
206
+ * isNotNull
207
+ * ******************************************************************************************************************/
208
+ isNotNull(name: MySqlColumnName<TTable>): SQL;
209
+ isNotNull(names: MySqlNullConditionInput<TTable>): SQL | undefined;
210
+ /********************************************************************************************************************
211
+ * and
212
+ * ******************************************************************************************************************/
213
+ and(options: MySqlConditions<TTable>): SQL | undefined;
214
+ /********************************************************************************************************************
215
+ * or
216
+ * ******************************************************************************************************************/
217
+ or(options: MySqlConditions<TTable>): SQL | undefined;
218
+ }
219
+ /********************************************************************************************************************
220
+ * types
221
+ * ******************************************************************************************************************/
222
+ type SelectFrom<TTable extends MySqlTable, TSelection extends FieldSet | undefined> = MySqlAsyncSelectBase<GetSelectTableName<TTable>, TSelection extends undefined ? MySqlSelectedTableColumns<TTable> : TSelection, 'partial'>;
223
+ type FindResult<TTable extends MySqlTable, TSelection extends FieldSet | undefined> = Awaited<SelectFrom<TTable, TSelection>>[number] | undefined;
224
+ type WhereQuery<TQuery> = Pick<TQuery, Extract<keyof TQuery, 't' | 'eq' | 'ne' | 'gt' | 'gte' | 'lt' | 'lte' | 'inArray' | 'notInArray' | 'between' | 'notBetween' | 'like' | 'notLike' | 'ilike' | 'notIlike' | 'isNull' | 'isNotNull' | 'and' | 'or'>>;
225
+ type BaseWhere<TQuery> = SQL | undefined | ((query: WhereQuery<TQuery>) => SQL | undefined);
226
+ type FieldSet = SelectedFields<MySqlColumn, MySqlTable>;
227
+ type FieldInput = FieldSet | false | undefined;
228
+ type FieldsQuery<TTable extends MySqlTable> = {
229
+ readonly t: TTable;
230
+ columns(): MySqlSelectedTableColumns<TTable>;
231
+ columns<N extends MySqlColumnSelectionName<TTable>>(...names: N[] & MySqlColumnSelectionName<TTable>[]): MySqlSelectedNamedColumnUnion<TTable, N>;
232
+ };
233
+ type Fields<TQuery, TSelection> = TSelection | ((query: TQuery) => TSelection);
234
+ type NamedFields<TTable extends MySqlTable, T extends readonly (FieldInput | MySqlColumnSelectionName<TTable>)[]> = {
235
+ [I in keyof T]: T[I] extends MySqlColumnSelectionName<TTable> ? MySqlSelectedNamedColumns<TTable, readonly [T[I]]> : Extract<T[I], FieldInput>;
236
+ };
237
+ type MergeField<First, Result> = First extends FieldSet ? Result extends unknown ? Omit<Result, keyof First> & First : never : Result;
238
+ type MergeFields<T extends readonly FieldInput[], Result = {}> = T extends readonly [
239
+ infer First extends FieldInput,
240
+ ...infer Rest extends readonly FieldInput[]
241
+ ] ? MergeFields<Rest, MergeField<First, Result>> : number extends T['length'] ? Exclude<T[number], false | undefined> : Result extends unknown ? {
242
+ [P in keyof Result]: Result[P];
243
+ } : never;
244
+ type PrimaryKeyNames<T extends MySqlTable> = {
245
+ [P in keyof T['_']['columns']]: T['_']['columns'][P]['_'] extends {
246
+ isPrimaryKey: true;
247
+ } ? P : never;
248
+ }[keyof T['_']['columns']];
249
+ type PrimaryKeyObject<T extends MySqlTable> = {
250
+ [P in PrimaryKeyNames<T>]: T['_']['columns'][P]['_']['data'];
251
+ };
252
+ type IsUnion<T, U = T> = T extends U ? ([U] extends [T] ? false : true) : never;
253
+ type PrimaryKeyInput<T extends MySqlTable> = [PrimaryKeyNames<T>] extends [never] ? never : IsUnion<PrimaryKeyNames<T>> extends true ? PrimaryKeyObject<T> : PrimaryKeyObject<T> | PrimaryKeyObject<T>[PrimaryKeyNames<T>];
254
+ type AutoIncrementKeys<TTable extends MySqlTable> = {
255
+ [P in keyof TTable['_']['columns']]: TTable['_']['columns'][P]['_'] extends {
256
+ isAutoincrement: true;
257
+ } ? P : never;
258
+ }[keyof TTable['_']['columns']];
259
+ type HasAutoIncrement<TTable extends MySqlTable> = [AutoIncrementKeys<TTable>] extends [never] ? false : true;
260
+ type TimestampInput<T, C extends string, U extends string> = Omit<T, C | U> & {
261
+ [P in C | U]?: never;
262
+ };
263
+ type AddResult<TTable extends MySqlTable> = HasAutoIncrement<TTable> extends true ? number : undefined;
264
+ export {};