File tree Expand file tree Collapse file tree 3 files changed +315
-172
lines changed Expand file tree Collapse file tree 3 files changed +315
-172
lines changed Original file line number Diff line number Diff line change 10
10
11
11
## Version History
12
12
13
- $## v17.1.0
13
+ ### v17.2.0
14
+
15
+ - :rocket : Allow upsert behavior to be defined on ` generate `
16
+
17
+ ### v17.1.0
14
18
15
19
- :rocket : Add generic ` .count() ` function
16
20
Original file line number Diff line number Diff line change @@ -25,6 +25,11 @@ export interface GenericList<T> {
25
25
items : Array < T >
26
26
}
27
27
28
+ export enum GenerateUpsert {
29
+ DO_NOTHING = 'DoNothing' ,
30
+ UPDATE = 'Update'
31
+ }
32
+
28
33
export enum GenericListOrder {
29
34
ASC = 'asc' ,
30
35
DESC = 'desc'
@@ -199,10 +204,26 @@ export default class Drizzle<T extends GenericTable> {
199
204
await this . pool . delete ( this . generic )
200
205
}
201
206
202
- async generate ( values : InferInsertModel < T > ) : Promise < InferSelectModel < T > > {
203
- const pgres = await this . pool . insert ( this . generic )
204
- . values ( values )
205
- . returning ( ) ;
207
+ async generate ( values : InferInsertModel < T > , opts ?: {
208
+ upsert ?: GenerateUpsert
209
+ } ) : Promise < InferSelectModel < T > > {
210
+ if ( ! opts ) opts = { } ;
211
+
212
+ let pgres ;
213
+ if ( opts . upsert && opts . upsert === GenerateUpsert . DO_NOTHING ) {
214
+ pgres = await this . pool . insert ( this . generic )
215
+ . values ( values )
216
+ . onConflictDoNothing ( )
217
+ . returning ( )
218
+ } else if ( opts . upsert && opts . upsert === GenerateUpsert . UPDATE ) {
219
+ pgres = await this . pool . insert ( this . generic )
220
+ . values ( values )
221
+ . onConflictDoUpdate ( { target : this . requiredPrimaryKey ( ) , set : values } )
222
+ . returning ( )
223
+ } else {
224
+ pgres = await this . pool . insert ( this . generic )
225
+ . values ( values )
226
+ }
206
227
207
228
return pgres [ 0 ] as InferSelectModel < T > ;
208
229
}
You can’t perform that action at this time.
0 commit comments