forge-sql-orm 2.1.9 → 2.1.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/ForgeSQLORM.js +3 -7
- package/dist/ForgeSQLORM.js.map +1 -1
- package/dist/ForgeSQLORM.mjs +3 -7
- package/dist/ForgeSQLORM.mjs.map +1 -1
- package/dist/core/ForgeSQLORM.d.ts +5 -5
- package/dist/core/ForgeSQLORM.d.ts.map +1 -1
- package/dist/core/ForgeSQLQueryBuilder.d.ts +29 -5
- package/dist/core/ForgeSQLQueryBuilder.d.ts.map +1 -1
- package/dist/lib/drizzle/extensions/additionalActions.d.ts +30 -6
- package/dist/lib/drizzle/extensions/additionalActions.d.ts.map +1 -1
- package/dist/utils/forgeDriver.d.ts.map +1 -1
- package/package.json +12 -12
- package/src/core/ForgeSQLORM.ts +1 -1
- package/src/core/ForgeSQLQueryBuilder.ts +53 -8
- package/src/lib/drizzle/extensions/additionalActions.ts +231 -18
- package/src/utils/forgeDriver.ts +3 -8
|
@@ -8,7 +8,7 @@ import {
|
|
|
8
8
|
import { SelectedFields } from "drizzle-orm/mysql-core/query-builders/select.types";
|
|
9
9
|
import { applyFromDriverTransform, ForgeSqlOrmOptions, mapSelectFieldsWithAlias } from "../../..";
|
|
10
10
|
import { MySqlSelectBase, MySqlSelectBuilder } from "drizzle-orm/mysql-core";
|
|
11
|
-
import
|
|
11
|
+
import { MySqlTable } from "drizzle-orm/mysql-core/table";
|
|
12
12
|
import {
|
|
13
13
|
MySqlDeleteBase,
|
|
14
14
|
MySqlInsertBuilder,
|
|
@@ -26,9 +26,10 @@ import { isSQLWrapper, SQLWrapper } from "drizzle-orm/sql/sql";
|
|
|
26
26
|
import type { MySqlQueryResultKind } from "drizzle-orm/mysql-core/session";
|
|
27
27
|
import { getTableColumns, Query, SQL } from "drizzle-orm";
|
|
28
28
|
import { MySqlDialect } from "drizzle-orm/mysql-core/dialect";
|
|
29
|
-
import
|
|
29
|
+
import {
|
|
30
30
|
GetSelectTableName,
|
|
31
31
|
GetSelectTableSelection,
|
|
32
|
+
SelectResultField,
|
|
32
33
|
} from "drizzle-orm/query-builders/select.types";
|
|
33
34
|
|
|
34
35
|
// ============================================================================
|
|
@@ -142,12 +143,19 @@ export type SelectAllFromAliasedType = <T extends MySqlTable>(
|
|
|
142
143
|
table: T,
|
|
143
144
|
) => MySqlSelectBase<
|
|
144
145
|
GetSelectTableName<T>,
|
|
145
|
-
|
|
146
|
-
|
|
146
|
+
GetSelectTableSelection<T>,
|
|
147
|
+
"single",
|
|
147
148
|
MySqlRemotePreparedQueryHKT,
|
|
148
149
|
GetSelectTableName<T> extends string ? Record<string & GetSelectTableName<T>, "not-null"> : {},
|
|
149
150
|
false,
|
|
150
151
|
never,
|
|
152
|
+
{
|
|
153
|
+
[K in keyof {
|
|
154
|
+
[Key in keyof GetSelectTableSelection<T>]: SelectResultField<GetSelectTableSelection<T>[Key]>;
|
|
155
|
+
}]: {
|
|
156
|
+
[Key in keyof GetSelectTableSelection<T>]: SelectResultField<GetSelectTableSelection<T>[Key]>;
|
|
157
|
+
}[K];
|
|
158
|
+
}[],
|
|
151
159
|
any
|
|
152
160
|
>;
|
|
153
161
|
|
|
@@ -158,12 +166,19 @@ export type SelectAllDistinctFromAliasedType = <T extends MySqlTable>(
|
|
|
158
166
|
table: T,
|
|
159
167
|
) => MySqlSelectBase<
|
|
160
168
|
GetSelectTableName<T>,
|
|
161
|
-
|
|
162
|
-
|
|
169
|
+
GetSelectTableSelection<T>,
|
|
170
|
+
"single",
|
|
163
171
|
MySqlRemotePreparedQueryHKT,
|
|
164
172
|
GetSelectTableName<T> extends string ? Record<string & GetSelectTableName<T>, "not-null"> : {},
|
|
165
173
|
false,
|
|
166
174
|
never,
|
|
175
|
+
{
|
|
176
|
+
[K in keyof {
|
|
177
|
+
[Key in keyof GetSelectTableSelection<T>]: SelectResultField<GetSelectTableSelection<T>[Key]>;
|
|
178
|
+
}]: {
|
|
179
|
+
[Key in keyof GetSelectTableSelection<T>]: SelectResultField<GetSelectTableSelection<T>[Key]>;
|
|
180
|
+
}[K];
|
|
181
|
+
}[],
|
|
167
182
|
any
|
|
168
183
|
>;
|
|
169
184
|
|
|
@@ -175,12 +190,19 @@ export type SelectAllFromCacheableAliasedType = <T extends MySqlTable>(
|
|
|
175
190
|
cacheTtl?: number,
|
|
176
191
|
) => MySqlSelectBase<
|
|
177
192
|
GetSelectTableName<T>,
|
|
178
|
-
|
|
179
|
-
|
|
193
|
+
GetSelectTableSelection<T>,
|
|
194
|
+
"single",
|
|
180
195
|
MySqlRemotePreparedQueryHKT,
|
|
181
196
|
GetSelectTableName<T> extends string ? Record<string & GetSelectTableName<T>, "not-null"> : {},
|
|
182
197
|
false,
|
|
183
198
|
never,
|
|
199
|
+
{
|
|
200
|
+
[K in keyof {
|
|
201
|
+
[Key in keyof GetSelectTableSelection<T>]: SelectResultField<GetSelectTableSelection<T>[Key]>;
|
|
202
|
+
}]: {
|
|
203
|
+
[Key in keyof GetSelectTableSelection<T>]: SelectResultField<GetSelectTableSelection<T>[Key]>;
|
|
204
|
+
}[K];
|
|
205
|
+
}[],
|
|
184
206
|
any
|
|
185
207
|
>;
|
|
186
208
|
|
|
@@ -192,12 +214,19 @@ export type SelectAllDistinctFromCacheableAliasedType = <T extends MySqlTable>(
|
|
|
192
214
|
cacheTtl?: number,
|
|
193
215
|
) => MySqlSelectBase<
|
|
194
216
|
GetSelectTableName<T>,
|
|
195
|
-
|
|
196
|
-
|
|
217
|
+
GetSelectTableSelection<T>,
|
|
218
|
+
"single",
|
|
197
219
|
MySqlRemotePreparedQueryHKT,
|
|
198
220
|
GetSelectTableName<T> extends string ? Record<string & GetSelectTableName<T>, "not-null"> : {},
|
|
199
221
|
false,
|
|
200
222
|
never,
|
|
223
|
+
{
|
|
224
|
+
[K in keyof {
|
|
225
|
+
[Key in keyof GetSelectTableSelection<T>]: SelectResultField<GetSelectTableSelection<T>[Key]>;
|
|
226
|
+
}]: {
|
|
227
|
+
[Key in keyof GetSelectTableSelection<T>]: SelectResultField<GetSelectTableSelection<T>[Key]>;
|
|
228
|
+
}[K];
|
|
229
|
+
}[],
|
|
201
230
|
any
|
|
202
231
|
>;
|
|
203
232
|
|
|
@@ -774,8 +803,52 @@ export function patchDbWithSelectAliased(
|
|
|
774
803
|
* const users = await db.selectFrom(userTable).where(eq(userTable.id, 1));
|
|
775
804
|
* ```
|
|
776
805
|
*/
|
|
777
|
-
db.selectFrom = function <T extends MySqlTable>(
|
|
778
|
-
|
|
806
|
+
db.selectFrom = function <T extends MySqlTable>(
|
|
807
|
+
table: T,
|
|
808
|
+
): MySqlSelectBase<
|
|
809
|
+
GetSelectTableName<T>,
|
|
810
|
+
GetSelectTableSelection<T>,
|
|
811
|
+
"single",
|
|
812
|
+
MySqlRemotePreparedQueryHKT,
|
|
813
|
+
GetSelectTableName<T> extends string ? Record<string & GetSelectTableName<T>, "not-null"> : {},
|
|
814
|
+
false,
|
|
815
|
+
never,
|
|
816
|
+
{
|
|
817
|
+
[K in keyof {
|
|
818
|
+
[Key in keyof GetSelectTableSelection<T>]: SelectResultField<
|
|
819
|
+
GetSelectTableSelection<T>[Key]
|
|
820
|
+
>;
|
|
821
|
+
}]: {
|
|
822
|
+
[Key in keyof GetSelectTableSelection<T>]: SelectResultField<
|
|
823
|
+
GetSelectTableSelection<T>[Key]
|
|
824
|
+
>;
|
|
825
|
+
}[K];
|
|
826
|
+
}[],
|
|
827
|
+
any
|
|
828
|
+
> {
|
|
829
|
+
return db.selectAliased(getTableColumns(table)).from(table) as unknown as MySqlSelectBase<
|
|
830
|
+
GetSelectTableName<T>,
|
|
831
|
+
GetSelectTableSelection<T>,
|
|
832
|
+
"single",
|
|
833
|
+
MySqlRemotePreparedQueryHKT,
|
|
834
|
+
GetSelectTableName<T> extends string
|
|
835
|
+
? Record<string & GetSelectTableName<T>, "not-null">
|
|
836
|
+
: {},
|
|
837
|
+
false,
|
|
838
|
+
never,
|
|
839
|
+
{
|
|
840
|
+
[K in keyof {
|
|
841
|
+
[Key in keyof GetSelectTableSelection<T>]: SelectResultField<
|
|
842
|
+
GetSelectTableSelection<T>[Key]
|
|
843
|
+
>;
|
|
844
|
+
}]: {
|
|
845
|
+
[Key in keyof GetSelectTableSelection<T>]: SelectResultField<
|
|
846
|
+
GetSelectTableSelection<T>[Key]
|
|
847
|
+
>;
|
|
848
|
+
}[K];
|
|
849
|
+
}[],
|
|
850
|
+
any
|
|
851
|
+
>;
|
|
779
852
|
};
|
|
780
853
|
|
|
781
854
|
/**
|
|
@@ -790,8 +863,55 @@ export function patchDbWithSelectAliased(
|
|
|
790
863
|
* const users = await db.selectFromCacheable(userTable, 300).where(eq(userTable.id, 1));
|
|
791
864
|
* ```
|
|
792
865
|
*/
|
|
793
|
-
db.selectFromCacheable = function <T extends MySqlTable>(
|
|
794
|
-
|
|
866
|
+
db.selectFromCacheable = function <T extends MySqlTable>(
|
|
867
|
+
table: T,
|
|
868
|
+
cacheTtl?: number,
|
|
869
|
+
): MySqlSelectBase<
|
|
870
|
+
GetSelectTableName<T>,
|
|
871
|
+
GetSelectTableSelection<T>,
|
|
872
|
+
"single",
|
|
873
|
+
MySqlRemotePreparedQueryHKT,
|
|
874
|
+
GetSelectTableName<T> extends string ? Record<string & GetSelectTableName<T>, "not-null"> : {},
|
|
875
|
+
false,
|
|
876
|
+
never,
|
|
877
|
+
{
|
|
878
|
+
[K in keyof {
|
|
879
|
+
[Key in keyof GetSelectTableSelection<T>]: SelectResultField<
|
|
880
|
+
GetSelectTableSelection<T>[Key]
|
|
881
|
+
>;
|
|
882
|
+
}]: {
|
|
883
|
+
[Key in keyof GetSelectTableSelection<T>]: SelectResultField<
|
|
884
|
+
GetSelectTableSelection<T>[Key]
|
|
885
|
+
>;
|
|
886
|
+
}[K];
|
|
887
|
+
}[],
|
|
888
|
+
any
|
|
889
|
+
> {
|
|
890
|
+
return db
|
|
891
|
+
.selectAliasedCacheable(getTableColumns(table), cacheTtl)
|
|
892
|
+
.from(table) as unknown as MySqlSelectBase<
|
|
893
|
+
GetSelectTableName<T>,
|
|
894
|
+
GetSelectTableSelection<T>,
|
|
895
|
+
"single",
|
|
896
|
+
MySqlRemotePreparedQueryHKT,
|
|
897
|
+
GetSelectTableName<T> extends string
|
|
898
|
+
? Record<string & GetSelectTableName<T>, "not-null">
|
|
899
|
+
: {},
|
|
900
|
+
false,
|
|
901
|
+
never,
|
|
902
|
+
{
|
|
903
|
+
[K in keyof {
|
|
904
|
+
[Key in keyof GetSelectTableSelection<T>]: SelectResultField<
|
|
905
|
+
GetSelectTableSelection<T>[Key]
|
|
906
|
+
>;
|
|
907
|
+
}]: {
|
|
908
|
+
[Key in keyof GetSelectTableSelection<T>]: SelectResultField<
|
|
909
|
+
GetSelectTableSelection<T>[Key]
|
|
910
|
+
>;
|
|
911
|
+
}[K];
|
|
912
|
+
}[],
|
|
913
|
+
any
|
|
914
|
+
>;
|
|
795
915
|
};
|
|
796
916
|
|
|
797
917
|
/**
|
|
@@ -805,8 +925,54 @@ export function patchDbWithSelectAliased(
|
|
|
805
925
|
* const uniqueUsers = await db.selectDistinctFrom(userTable).where(eq(userTable.status, 'active'));
|
|
806
926
|
* ```
|
|
807
927
|
*/
|
|
808
|
-
db.selectDistinctFrom = function <T extends MySqlTable>(
|
|
809
|
-
|
|
928
|
+
db.selectDistinctFrom = function <T extends MySqlTable>(
|
|
929
|
+
table: T,
|
|
930
|
+
): MySqlSelectBase<
|
|
931
|
+
GetSelectTableName<T>,
|
|
932
|
+
GetSelectTableSelection<T>,
|
|
933
|
+
"single",
|
|
934
|
+
MySqlRemotePreparedQueryHKT,
|
|
935
|
+
GetSelectTableName<T> extends string ? Record<string & GetSelectTableName<T>, "not-null"> : {},
|
|
936
|
+
false,
|
|
937
|
+
never,
|
|
938
|
+
{
|
|
939
|
+
[K in keyof {
|
|
940
|
+
[Key in keyof GetSelectTableSelection<T>]: SelectResultField<
|
|
941
|
+
GetSelectTableSelection<T>[Key]
|
|
942
|
+
>;
|
|
943
|
+
}]: {
|
|
944
|
+
[Key in keyof GetSelectTableSelection<T>]: SelectResultField<
|
|
945
|
+
GetSelectTableSelection<T>[Key]
|
|
946
|
+
>;
|
|
947
|
+
}[K];
|
|
948
|
+
}[],
|
|
949
|
+
any
|
|
950
|
+
> {
|
|
951
|
+
return db
|
|
952
|
+
.selectAliasedDistinct(getTableColumns(table))
|
|
953
|
+
.from(table) as unknown as MySqlSelectBase<
|
|
954
|
+
GetSelectTableName<T>,
|
|
955
|
+
GetSelectTableSelection<T>,
|
|
956
|
+
"single",
|
|
957
|
+
MySqlRemotePreparedQueryHKT,
|
|
958
|
+
GetSelectTableName<T> extends string
|
|
959
|
+
? Record<string & GetSelectTableName<T>, "not-null">
|
|
960
|
+
: {},
|
|
961
|
+
false,
|
|
962
|
+
never,
|
|
963
|
+
{
|
|
964
|
+
[K in keyof {
|
|
965
|
+
[Key in keyof GetSelectTableSelection<T>]: SelectResultField<
|
|
966
|
+
GetSelectTableSelection<T>[Key]
|
|
967
|
+
>;
|
|
968
|
+
}]: {
|
|
969
|
+
[Key in keyof GetSelectTableSelection<T>]: SelectResultField<
|
|
970
|
+
GetSelectTableSelection<T>[Key]
|
|
971
|
+
>;
|
|
972
|
+
}[K];
|
|
973
|
+
}[],
|
|
974
|
+
any
|
|
975
|
+
>;
|
|
810
976
|
};
|
|
811
977
|
|
|
812
978
|
/**
|
|
@@ -821,8 +987,55 @@ export function patchDbWithSelectAliased(
|
|
|
821
987
|
* const uniqueUsers = await db.selectDistinctFromCacheable(userTable, 300).where(eq(userTable.status, 'active'));
|
|
822
988
|
* ```
|
|
823
989
|
*/
|
|
824
|
-
db.selectDistinctFromCacheable = function <T extends MySqlTable>(
|
|
825
|
-
|
|
990
|
+
db.selectDistinctFromCacheable = function <T extends MySqlTable>(
|
|
991
|
+
table: T,
|
|
992
|
+
cacheTtl?: number,
|
|
993
|
+
): MySqlSelectBase<
|
|
994
|
+
GetSelectTableName<T>,
|
|
995
|
+
GetSelectTableSelection<T>,
|
|
996
|
+
"single",
|
|
997
|
+
MySqlRemotePreparedQueryHKT,
|
|
998
|
+
GetSelectTableName<T> extends string ? Record<string & GetSelectTableName<T>, "not-null"> : {},
|
|
999
|
+
false,
|
|
1000
|
+
never,
|
|
1001
|
+
{
|
|
1002
|
+
[K in keyof {
|
|
1003
|
+
[Key in keyof GetSelectTableSelection<T>]: SelectResultField<
|
|
1004
|
+
GetSelectTableSelection<T>[Key]
|
|
1005
|
+
>;
|
|
1006
|
+
}]: {
|
|
1007
|
+
[Key in keyof GetSelectTableSelection<T>]: SelectResultField<
|
|
1008
|
+
GetSelectTableSelection<T>[Key]
|
|
1009
|
+
>;
|
|
1010
|
+
}[K];
|
|
1011
|
+
}[],
|
|
1012
|
+
any
|
|
1013
|
+
> {
|
|
1014
|
+
return db
|
|
1015
|
+
.selectAliasedDistinctCacheable(getTableColumns(table), cacheTtl)
|
|
1016
|
+
.from(table) as unknown as MySqlSelectBase<
|
|
1017
|
+
GetSelectTableName<T>,
|
|
1018
|
+
GetSelectTableSelection<T>,
|
|
1019
|
+
"single",
|
|
1020
|
+
MySqlRemotePreparedQueryHKT,
|
|
1021
|
+
GetSelectTableName<T> extends string
|
|
1022
|
+
? Record<string & GetSelectTableName<T>, "not-null">
|
|
1023
|
+
: {},
|
|
1024
|
+
false,
|
|
1025
|
+
never,
|
|
1026
|
+
{
|
|
1027
|
+
[K in keyof {
|
|
1028
|
+
[Key in keyof GetSelectTableSelection<T>]: SelectResultField<
|
|
1029
|
+
GetSelectTableSelection<T>[Key]
|
|
1030
|
+
>;
|
|
1031
|
+
}]: {
|
|
1032
|
+
[Key in keyof GetSelectTableSelection<T>]: SelectResultField<
|
|
1033
|
+
GetSelectTableSelection<T>[Key]
|
|
1034
|
+
>;
|
|
1035
|
+
}[K];
|
|
1036
|
+
}[],
|
|
1037
|
+
any
|
|
1038
|
+
>;
|
|
826
1039
|
};
|
|
827
1040
|
|
|
828
1041
|
// ============================================================================
|
package/src/utils/forgeDriver.ts
CHANGED
|
@@ -124,7 +124,7 @@ async function processDDLResult(method: QueryMethod, result: any): Promise<Forge
|
|
|
124
124
|
|
|
125
125
|
if (Array.isArray(result.rows)) {
|
|
126
126
|
if (method === "execute") {
|
|
127
|
-
return { rows: result.rows };
|
|
127
|
+
return { rows: [result.rows] };
|
|
128
128
|
} else {
|
|
129
129
|
const rows = (result.rows as any[]).map((r) => Object.values(r as Record<string, unknown>));
|
|
130
130
|
return { rows };
|
|
@@ -150,15 +150,10 @@ async function processExecuteMethod(query: string, params: unknown[]): Promise<F
|
|
|
150
150
|
|
|
151
151
|
const result = await withTimeout(sqlStatement.execute());
|
|
152
152
|
await saveMetaDataToContext(result.metadata as ForgeSQLMetadata);
|
|
153
|
-
if (!result
|
|
153
|
+
if (!result.rows) {
|
|
154
154
|
return { rows: [[]] };
|
|
155
155
|
}
|
|
156
156
|
|
|
157
|
-
if (isUpdateQueryResponse(result.rows)) {
|
|
158
|
-
const oneRow = result.rows as any;
|
|
159
|
-
return { rows: [oneRow] };
|
|
160
|
-
}
|
|
161
|
-
|
|
162
157
|
return { rows: [result.rows] };
|
|
163
158
|
}
|
|
164
159
|
|
|
@@ -179,7 +174,7 @@ async function processAllMethod(query: string, params: unknown[]): Promise<Forge
|
|
|
179
174
|
const result = (await withTimeout(sqlStatement.execute())) as ForgeSQLResult;
|
|
180
175
|
await saveMetaDataToContext(result.metadata);
|
|
181
176
|
|
|
182
|
-
if (!result
|
|
177
|
+
if (!result.rows) {
|
|
183
178
|
return { rows: [] };
|
|
184
179
|
}
|
|
185
180
|
|