Skip to content

Commit 4857974

Browse files
committed
Update CHANGELOG
1 parent 25730c8 commit 4857974

File tree

3 files changed

+315
-172
lines changed

3 files changed

+315
-172
lines changed

CHANGELOG.md

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,11 @@
1010

1111
## Version History
1212

13-
$## v17.1.0
13+
### v17.2.0
14+
15+
- :rocket: Allow upsert behavior to be defined on `generate`
16+
17+
### v17.1.0
1418

1519
- :rocket: Add generic `.count()` function
1620

generic.ts

Lines changed: 25 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,11 @@ export interface GenericList<T> {
2525
items: Array<T>
2626
}
2727

28+
export enum GenerateUpsert {
29+
DO_NOTHING = 'DoNothing',
30+
UPDATE = 'Update'
31+
}
32+
2833
export enum GenericListOrder {
2934
ASC = 'asc',
3035
DESC = 'desc'
@@ -199,10 +204,26 @@ export default class Drizzle<T extends GenericTable> {
199204
await this.pool.delete(this.generic)
200205
}
201206

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+
}
206227

207228
return pgres[0] as InferSelectModel<T>;
208229
}

0 commit comments

Comments
 (0)