@juit/pgproxy-persister 1.3.1 → 1.3.3
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/model.cjs +6 -4
- package/dist/model.cjs.map +1 -1
- package/dist/model.d.ts +21 -2
- package/dist/model.mjs +6 -4
- package/dist/model.mjs.map +1 -1
- package/package.json +3 -3
- package/src/model.ts +38 -6
package/dist/model.cjs
CHANGED
|
@@ -52,7 +52,7 @@ function where(query, params) {
|
|
|
52
52
|
count
|
|
53
53
|
];
|
|
54
54
|
}
|
|
55
|
-
function insert(schema, table, query) {
|
|
55
|
+
function insert(schema, table, query, unique = false) {
|
|
56
56
|
assertObject(query, "Called INSERT with a non-object");
|
|
57
57
|
const columns = [];
|
|
58
58
|
const placeholders = [];
|
|
@@ -63,8 +63,9 @@ function insert(schema, table, query) {
|
|
|
63
63
|
placeholders.push(`$${index}`);
|
|
64
64
|
values.push(value);
|
|
65
65
|
}
|
|
66
|
+
const returning = unique ? "ON CONFLICT DO NOTHING RETURNING *" : "RETURNING *";
|
|
66
67
|
return [
|
|
67
|
-
columns.length == 0 ? `INSERT INTO ${(0, import_pgproxy_client.escape)(schema)}.${(0, import_pgproxy_client.escape)(table)} DEFAULT VALUES
|
|
68
|
+
columns.length == 0 ? `INSERT INTO ${(0, import_pgproxy_client.escape)(schema)}.${(0, import_pgproxy_client.escape)(table)} DEFAULT VALUES ${returning}` : `INSERT INTO ${(0, import_pgproxy_client.escape)(schema)}.${(0, import_pgproxy_client.escape)(table)} (${columns.join()}) VALUES (${placeholders.join()}) ${returning}`,
|
|
68
69
|
values
|
|
69
70
|
];
|
|
70
71
|
}
|
|
@@ -160,8 +161,9 @@ var ModelImpl = class {
|
|
|
160
161
|
this._schema = schema || "public";
|
|
161
162
|
this._table = table;
|
|
162
163
|
}
|
|
163
|
-
|
|
164
|
-
|
|
164
|
+
// Actual implementation
|
|
165
|
+
async create(data, unique = false) {
|
|
166
|
+
const [sql, params] = insert(this._schema, this._table, data, unique);
|
|
165
167
|
const result = await this._connection.query(sql, params);
|
|
166
168
|
return result.rows[0];
|
|
167
169
|
}
|
package/dist/model.cjs.map
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../src/model.ts"],
|
|
4
|
-
"mappings": ";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,4BAAuB;AAQvB,SAAS,OAAO,WAAgB,SAAoC;AAClE,MAAI,CAAE,UAAW,OAAM,IAAI,MAAM,OAAO;AAC1C;AAEA,SAAS,YAAY,OAAY,SAAyC;AACxE,SAAO,MAAM,QAAQ,KAAK,GAAG,OAAO;AACtC;AAEA,SAAS,aAAa,OAAY,SAA0C;AAC1E,SAAO,SAAU,OAAO,UAAU,UAAW,OAAO;AACtD;
|
|
4
|
+
"mappings": ";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,4BAAuB;AAQvB,SAAS,OAAO,WAAgB,SAAoC;AAClE,MAAI,CAAE,UAAW,OAAM,IAAI,MAAM,OAAO;AAC1C;AAEA,SAAS,YAAY,OAAY,SAAyC;AACxE,SAAO,MAAM,QAAQ,KAAK,GAAG,OAAO;AACtC;AAEA,SAAS,aAAa,OAAY,SAA0C;AAC1E,SAAO,SAAU,OAAO,UAAU,UAAW,OAAO;AACtD;AA8MA,SAAS,MACL,OACA,QAC4B;AAC9B,QAAM,aAAa,CAAC;AAEpB,MAAI,QAAQ;AACZ,aAAW,CAAE,QAAQ,KAAM,KAAK,OAAO,QAAQ,KAAK,GAAG;AACrD,QAAI,UAAU,OAAW;AACzB,QAAI,UAAU,MAAM;AAClB,iBAAW,KAAK,OAAG,8BAAO,MAAM,CAAC,UAAU;AAAA,IAC7C,OAAO;AACL,YAAM,QAAQ,OAAO,KAAK,KAAK;AAC/B,iBAAW,KAAK,OAAG,8BAAO,MAAM,CAAC,KAAK,KAAK,EAAE;AAAA,IAC/C;AACA;AAAA,EACF;AAEA,SAAO;AAAA,IACL,WAAW,SAAS,UAAU,WAAW,KAAK,OAAO,CAAC,KAAK;AAAA,IAC3D;AAAA,IACA;AAAA,EACF;AACF;AAGA,SAAS,OACL,QACA,OACA,OACA,SAAkB,OACb;AACP,eAAa,OAAO,iCAAiC;AAErD,QAAM,UAAU,CAAC;AACjB,QAAM,eAAe,CAAC;AACtB,QAAM,SAAS,CAAC;AAEhB,aAAW,CAAE,QAAQ,KAAM,KAAK,OAAO,QAAQ,KAAK,GAAG;AACrD,QAAI,UAAU,OAAW;AACzB,UAAM,QAAQ,QAAQ,KAAK,OAAG,8BAAO,MAAM,CAAC,EAAE;AAC9C,iBAAa,KAAK,IAAI,KAAK,EAAE;AAC7B,WAAO,KAAK,KAAK;AAAA,EACnB;AAEA,QAAM,YAAY,SAAS,uCAAuC;AAElE,SAAO;AAAA,IACL,QAAQ,UAAU,IAChB,mBAAe,8BAAO,MAAM,CAAC,QAAI,8BAAO,KAAK,CAAC,mBAAmB,SAAS,KAC1E,mBAAe,8BAAO,MAAM,CAAC,QAAI,8BAAO,KAAK,CAAC,KAAK,QAAQ,KAAK,CAAC,aAAa,aAAa,KAAK,CAAC,KAAK,SAAS;AAAA,IACjH;AAAA,EACF;AACF;AAGA,SAAS,OACL,QACA,OACA,MACA,MACK;AACP,eAAa,MAAM,0CAA0C;AAC7D,eAAa,MAAM,0CAA0C;AAE7D,SAAO,OAAO,KAAK,IAAI,EAAE,SAAS,GAAG,qCAAqC;AAC1E,SAAO,OAAO,KAAK,IAAI,EAAE,SAAS,GAAG,uCAAuC;AAG5E,QAAM,SAA8B,EAAE,GAAG,MAAM,GAAG,MAAM,GAAG,KAAK;AAGhE,QAAM,UAAoB,CAAC;AAC3B,QAAM,eAAyB,CAAC;AAChC,QAAM,SAAgB,CAAC;AACvB,aAAW,CAAE,QAAQ,KAAM,KAAK,OAAO,QAAQ,MAAM,GAAG;AACtD,QAAI,UAAU,OAAW;AACzB,UAAM,QAAQ,QAAQ,KAAK,OAAG,8BAAO,MAAM,CAAC,EAAE;AAC9C,iBAAa,KAAK,IAAI,KAAK,EAAE;AAC7B,WAAO,KAAK,KAAK;AAAA,EACnB;AAGA,QAAM,eAAyB,CAAC;AAChC,aAAW,CAAE,QAAQ,KAAM,KAAK,OAAO,QAAQ,IAAI,GAAG;AACpD,QAAI,UAAU,OAAW,cAAa,SAAK,8BAAO,MAAM,CAAC;AAAA,EAC3D;AAGA,QAAM,UAAoB,CAAC;AAC3B,aAAW,CAAE,QAAQ,KAAM,KAAK,OAAO,QAAQ,IAAI,GAAG;AACpD,QAAI,UAAU,OAAW;AACzB,YAAQ,KAAK,OAAG,8BAAO,MAAM,CAAC,KAAK,QAAQ,SAAS,QAAQ,SAAS,CAAC,EAAE;AACxE,WAAO,KAAK,KAAK;AAAA,EACnB;AAGA,SAAO;AAAA,IACL,mBAAe,8BAAO,MAAM,CAAC,QAAI,8BAAO,KAAK,CAAC,KAAK,QAAQ,KAAK,CAAC,aAAa,aAAa,KAAK,CAAC,kBACjF,aAAa,KAAK,GAAG,CAAC,mBACrB,QAAQ,KAAK,GAAG,CAAC;AAAA,IAClC;AAAA,EACF;AACF;AAGA,SAAS,OACL,QACA,OACA,OACA,MACA,QACA,OACK;AACP,MAAI,OAAO,SAAS,SAAU,QAAO,CAAE,IAAK;AAC5C,eAAa,OAAO,uCAAuC;AAC3D,cAAY,MAAM,qCAAqC;AAEvD,QAAM,CAAE,YAAY,MAAO,IAAI,MAAM,OAAO,CAAC,CAAC;AAE9C,QAAM,QAAQ,CAAC;AACf,aAAW,SAAS,MAAM;AACxB,QAAI,MAAM,YAAY,EAAE,SAAS,OAAO,GAAG;AACzC,YAAM,KAAK,OAAG,8BAAO,MAAM,MAAM,GAAG,EAAE,CAAC,CAAC,OAAO;AAAA,IACjD,WAAW,MAAM,YAAY,EAAE,SAAS,MAAM,GAAG;AAC/C,YAAM,KAAK,OAAG,8BAAO,MAAM,MAAM,GAAG,EAAE,CAAC,CAAC,MAAM;AAAA,IAChD,OAAO;AACL,YAAM,SAAK,8BAAO,KAAK,CAAC;AAAA,IAC1B;AAAA,EACF;AAEA,QAAM,UAAU,MAAM,UAAU,IAAI,KAAK,aAAa,MAAM,KAAK,GAAG,CAAC;AAErE,MAAI,MAAM,qBAAiB,8BAAO,MAAM,CAAC,QAAI,8BAAO,KAAK,CAAC,GAAG,UAAU,GAAG,OAAO;AAEjF,MAAI,UAAW,SAAS,GAAI;AAC1B,WAAO,YAAY,OAAO,SAAS,CAAC;AACpC,WAAO,KAAK,KAAK,MAAM,MAAM,CAAC;AAAA,EAChC;AAEA,MAAI,SAAU,QAAQ,GAAI;AACxB,WAAO,WAAW,OAAO,SAAS,CAAC;AACnC,WAAO,KAAK,KAAK,MAAM,KAAK,CAAC;AAAA,EAC/B;AAEA,SAAO,CAAE,KAAK,MAAO;AACvB;AAGA,SAAS,OACL,QACA,OACA,OACA,OACK;AACP,eAAa,OAAO,uCAAuC;AAC3D,eAAa,OAAO,uCAAuC;AAE3D,QAAM,UAAU,CAAC;AACjB,QAAM,SAAS,CAAC;AAEhB,aAAW,CAAE,QAAQ,KAAM,KAAK,OAAO,QAAQ,KAAK,GAAG;AACrD,QAAI,UAAU,OAAW;AACzB,UAAM,QAAQ,OAAO,KAAK,KAAK;AAC/B,YAAQ,KAAK,OAAG,8BAAO,MAAM,CAAC,KAAK,KAAK,EAAE;AAAA,EAC5C;AAEA,MAAI,QAAQ,WAAW,EAAG,QAAO,OAAO,QAAQ,OAAO,OAAO,CAAC,GAAG,GAAG,CAAC;AAEtE,QAAM,CAAE,YAAY,EAAE,KAAM,IAAI,MAAM,OAAO,MAAM;AACnD,SAAO,QAAQ,GAAG,kDAAkD;AAEpE,QAAM,YAAY,cAAU,8BAAO,MAAM,CAAC,QAAI,8BAAO,KAAK,CAAC,QAAQ,QAAQ,KAAK,CAAC,GAAG,UAAU;AAC9F,SAAO,CAAE,WAAW,MAAO;AAC7B;AAGA,SAAS,IACL,QACA,OACA,OACK;AACP,eAAa,OAAO,uCAAuC;AAE3D,QAAM,CAAE,YAAY,QAAQ,KAAM,IAAI,MAAM,OAAO,CAAC,CAAC;AAErD,SAAO,QAAQ,GAAG,kDAAkD;AAEpE,SAAO,CAAE,mBAAe,8BAAO,MAAM,CAAC,QAAI,8BAAO,KAAK,CAAC,GAAG,UAAU,gBAAgB,MAAO;AAC7F;AAIA,IAAM,YAAN,MAAwF;AAAA,EAC9E;AAAA,EACA;AAAA,EACA;AAAA,EAER,YAAY,YAAyB,MAAc;AACjD,SAAK,cAAc;AAEnB,UAAM,CAAE,eAAe,YAAY,GAAG,KAAM,IAAI,KAAK,MAAM,GAAG;AAC9D,WAAO,MAAM,WAAW,GAAG,uBAAuB,IAAI,GAAG;AAEzD,UAAM,CAAE,QAAQ,KAAM,IAAI,aACxB,CAAE,eAAe,UAAW,IAC5B,CAAE,UAAU,aAAc;AAC5B,WAAO,OAAO,uBAAuB,IAAI,GAAG;AAE5C,SAAK,UAAU,UAAU;AACzB,SAAK,SAAS;AAAA,EAChB;AAAA;AAAA,EAMA,MAAM,OACF,MACA,SAAgB,OAC2B;AAC7C,UAAM,CAAE,KAAK,MAAO,IAAI,OAAO,KAAK,SAAS,KAAK,QAAQ,MAAM,MAAM;AACtE,UAAM,SAAS,MAAM,KAAK,YAAY,MAA8B,KAAK,MAAM;AAC/E,WAAO,OAAO,KAAK,CAAC;AAAA,EACtB;AAAA,EAEA,MAAM,OACF,MACA,MAC+B;AACjC,UAAM,CAAE,KAAK,MAAO,IAAI,OAAO,KAAK,SAAS,KAAK,QAAQ,MAAM,IAAI;AACpE,UAAM,SAAS,MAAM,KAAK,YAAY,MAA8B,KAAK,MAAM;AAC/E,WAAO,OAAO,KAAK,CAAC;AAAA,EACtB;AAAA,EAEA,MAAM,KACF,QAA+B,CAAC,GAChC,OAA8C,CAAC,GAC/C,SAAiB,GACjB,QAAgB,GACiB;AACnC,UAAM,CAAE,KAAK,MAAO,IAAI,OAAO,KAAK,SAAS,KAAK,QAAQ,OAAO,MAAM,QAAQ,KAAK;AACpF,UAAM,SAAS,MAAM,KAAK,YAAY,MAA8B,KAAK,MAAM;AAC/E,WAAO,OAAO;AAAA,EAChB;AAAA,EAEA,MAAM,KACF,OACA,MAC2C;AAC7C,UAAM,SAAS,MAAM,KAAK,KAAK,OAAO,MAAM,GAAG,CAAC;AAChD,WAAO,OAAO,CAAC;AAAA,EACjB;AAAA,EAEA,MAAM,OACF,OACA,OACiC;AACnC,UAAM,CAAE,KAAK,MAAO,IAAI,OAAO,KAAK,SAAS,KAAK,QAAQ,OAAO,KAAK;AACtE,UAAM,SAAS,MAAM,KAAK,YAAY,MAA8B,KAAK,MAAM;AAC/E,WAAO,OAAO;AAAA,EAChB;AAAA,EAEA,MAAM,OACF,OACe;AACjB,UAAM,CAAE,KAAK,MAAO,IAAI,IAAI,KAAK,SAAS,KAAK,QAAQ,KAAK;AAC5D,UAAM,SAAS,MAAM,KAAK,YAAY,MAAM,KAAK,MAAM;AACvD,WAAO,OAAO;AAAA,EAChB;AACF;AAMO,IAAM,QAA0B;",
|
|
5
5
|
"names": []
|
|
6
6
|
}
|
package/dist/model.d.ts
CHANGED
|
@@ -22,7 +22,9 @@ export type InferInsertType<Table extends Record<string, ColumnDefinition>> = Si
|
|
|
22
22
|
}>;
|
|
23
23
|
/** Infer the TypeScript type suitable for a `SELECT` from a table */
|
|
24
24
|
export type InferSelectType<Table extends Record<string, ColumnDefinition>> = {
|
|
25
|
-
[Column in keyof Table as Column extends string ? Column : never]-?: Table[Column]['isNullable'] extends true ? Table[Column]['type'] | null : Table[Column]['type']
|
|
25
|
+
[Column in keyof Table as Column extends string ? Column : never]-?: (Table[Column]['isNullable'] extends true ? Table[Column]['type'] | null : Table[Column]['type']) & (Table[Column] extends {
|
|
26
|
+
branding: infer Brand;
|
|
27
|
+
} ? Brand : unknown);
|
|
26
28
|
};
|
|
27
29
|
/** Infer the TypeScript type suitable for a `UPDATE` in a table */
|
|
28
30
|
export type InferUpdateType<Table extends Record<string, ColumnDefinition>> = {
|
|
@@ -39,10 +41,27 @@ export interface Model<Table extends Record<string, ColumnDefinition>> {
|
|
|
39
41
|
/**
|
|
40
42
|
* Create a row in the table.
|
|
41
43
|
*
|
|
44
|
+
* With this variant, uniqueness checks are not performed, that is, if a
|
|
45
|
+
* conflict occurs due to a unique constraint or primary key, an error will
|
|
46
|
+
* be raised.
|
|
47
|
+
*
|
|
48
|
+
* @param data - The data to insert in the table
|
|
49
|
+
* @param unique - Ignore uniqueness checks (defaults to `false`)
|
|
50
|
+
* @returns A record containing all colums from the table (including defaults)
|
|
51
|
+
*/
|
|
52
|
+
create(data: InferInsertType<Table>, unique?: false): Promise<InferSelectType<Table>>;
|
|
53
|
+
/**
|
|
54
|
+
* Create a row in the table returning a value *only if* a new one is created.
|
|
55
|
+
*
|
|
56
|
+
* With this variant, uniqueness checks **are performed**, that is, if a
|
|
57
|
+
* conflict occurs due to a unique constraint or primary key, this will
|
|
58
|
+
* return `undefined`.
|
|
59
|
+
*
|
|
42
60
|
* @param data - The data to insert in the table
|
|
61
|
+
* @param unique - Enforce uniqueness checks (typed as `true`)
|
|
43
62
|
* @returns A record containing all colums from the table (including defaults)
|
|
44
63
|
*/
|
|
45
|
-
create(data: InferInsertType<Table
|
|
64
|
+
create(data: InferInsertType<Table>, unique: true): Promise<InferSelectType<Table> | undefined>;
|
|
46
65
|
/**
|
|
47
66
|
* Insert a row in the database or update its contents on conflict.
|
|
48
67
|
*
|
package/dist/model.mjs
CHANGED
|
@@ -28,7 +28,7 @@ function where(query, params) {
|
|
|
28
28
|
count
|
|
29
29
|
];
|
|
30
30
|
}
|
|
31
|
-
function insert(schema, table, query) {
|
|
31
|
+
function insert(schema, table, query, unique = false) {
|
|
32
32
|
assertObject(query, "Called INSERT with a non-object");
|
|
33
33
|
const columns = [];
|
|
34
34
|
const placeholders = [];
|
|
@@ -39,8 +39,9 @@ function insert(schema, table, query) {
|
|
|
39
39
|
placeholders.push(`$${index}`);
|
|
40
40
|
values.push(value);
|
|
41
41
|
}
|
|
42
|
+
const returning = unique ? "ON CONFLICT DO NOTHING RETURNING *" : "RETURNING *";
|
|
42
43
|
return [
|
|
43
|
-
columns.length == 0 ? `INSERT INTO ${escape(schema)}.${escape(table)} DEFAULT VALUES
|
|
44
|
+
columns.length == 0 ? `INSERT INTO ${escape(schema)}.${escape(table)} DEFAULT VALUES ${returning}` : `INSERT INTO ${escape(schema)}.${escape(table)} (${columns.join()}) VALUES (${placeholders.join()}) ${returning}`,
|
|
44
45
|
values
|
|
45
46
|
];
|
|
46
47
|
}
|
|
@@ -136,8 +137,9 @@ var ModelImpl = class {
|
|
|
136
137
|
this._schema = schema || "public";
|
|
137
138
|
this._table = table;
|
|
138
139
|
}
|
|
139
|
-
|
|
140
|
-
|
|
140
|
+
// Actual implementation
|
|
141
|
+
async create(data, unique = false) {
|
|
142
|
+
const [sql, params] = insert(this._schema, this._table, data, unique);
|
|
141
143
|
const result = await this._connection.query(sql, params);
|
|
142
144
|
return result.rows[0];
|
|
143
145
|
}
|
package/dist/model.mjs.map
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../src/model.ts"],
|
|
4
|
-
"mappings": ";AAAA,SAAS,cAAc;AAQvB,SAAS,OAAO,WAAgB,SAAoC;AAClE,MAAI,CAAE,UAAW,OAAM,IAAI,MAAM,OAAO;AAC1C;AAEA,SAAS,YAAY,OAAY,SAAyC;AACxE,SAAO,MAAM,QAAQ,KAAK,GAAG,OAAO;AACtC;AAEA,SAAS,aAAa,OAAY,SAA0C;AAC1E,SAAO,SAAU,OAAO,UAAU,UAAW,OAAO;AACtD;
|
|
4
|
+
"mappings": "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",
|
|
5
5
|
"names": []
|
|
6
6
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@juit/pgproxy-persister",
|
|
3
|
-
"version": "1.3.
|
|
3
|
+
"version": "1.3.3",
|
|
4
4
|
"main": "./dist/index.cjs",
|
|
5
5
|
"module": "./dist/index.mjs",
|
|
6
6
|
"types": "./dist/index.d.ts",
|
|
@@ -53,7 +53,7 @@
|
|
|
53
53
|
"src/"
|
|
54
54
|
],
|
|
55
55
|
"dependencies": {
|
|
56
|
-
"@juit/pgproxy-client": "1.3.
|
|
57
|
-
"@juit/pgproxy-types": "1.3.
|
|
56
|
+
"@juit/pgproxy-client": "1.3.3",
|
|
57
|
+
"@juit/pgproxy-types": "1.3.3"
|
|
58
58
|
}
|
|
59
59
|
}
|
package/src/model.ts
CHANGED
|
@@ -68,9 +68,11 @@ export type InferInsertType<Table extends Record<string, ColumnDefinition>> =
|
|
|
68
68
|
/** Infer the TypeScript type suitable for a `SELECT` from a table */
|
|
69
69
|
export type InferSelectType<Table extends Record<string, ColumnDefinition>> =
|
|
70
70
|
{ [ Column in keyof Table as Column extends string ? Column : never ] -? :
|
|
71
|
-
Table[Column]['isNullable'] extends true ?
|
|
71
|
+
( Table[Column]['isNullable'] extends true ?
|
|
72
72
|
Table[Column]['type'] | null :
|
|
73
73
|
Table[Column]['type']
|
|
74
|
+
) & ( Table[Column] extends { branding: infer Brand } ? Brand : unknown )
|
|
75
|
+
|
|
74
76
|
}
|
|
75
77
|
|
|
76
78
|
/** Infer the TypeScript type suitable for a `UPDATE` in a table */
|
|
@@ -106,13 +108,35 @@ export interface Model<Table extends Record<string, ColumnDefinition>> {
|
|
|
106
108
|
/**
|
|
107
109
|
* Create a row in the table.
|
|
108
110
|
*
|
|
111
|
+
* With this variant, uniqueness checks are not performed, that is, if a
|
|
112
|
+
* conflict occurs due to a unique constraint or primary key, an error will
|
|
113
|
+
* be raised.
|
|
114
|
+
*
|
|
109
115
|
* @param data - The data to insert in the table
|
|
116
|
+
* @param unique - Ignore uniqueness checks (defaults to `false`)
|
|
110
117
|
* @returns A record containing all colums from the table (including defaults)
|
|
111
118
|
*/
|
|
112
119
|
create(
|
|
113
120
|
data: InferInsertType<Table>,
|
|
121
|
+
unique?: false,
|
|
114
122
|
): Promise<InferSelectType<Table>>
|
|
115
123
|
|
|
124
|
+
/**
|
|
125
|
+
* Create a row in the table returning a value *only if* a new one is created.
|
|
126
|
+
*
|
|
127
|
+
* With this variant, uniqueness checks **are performed**, that is, if a
|
|
128
|
+
* conflict occurs due to a unique constraint or primary key, this will
|
|
129
|
+
* return `undefined`.
|
|
130
|
+
*
|
|
131
|
+
* @param data - The data to insert in the table
|
|
132
|
+
* @param unique - Enforce uniqueness checks (typed as `true`)
|
|
133
|
+
* @returns A record containing all colums from the table (including defaults)
|
|
134
|
+
*/
|
|
135
|
+
create(
|
|
136
|
+
data: InferInsertType<Table>,
|
|
137
|
+
unique: true,
|
|
138
|
+
): Promise<InferSelectType<Table> | undefined>
|
|
139
|
+
|
|
116
140
|
/**
|
|
117
141
|
* Insert a row in the database or update its contents on conflict.
|
|
118
142
|
*
|
|
@@ -228,6 +252,7 @@ function insert(
|
|
|
228
252
|
schema: string,
|
|
229
253
|
table: string,
|
|
230
254
|
query: Record<string, any>,
|
|
255
|
+
unique: boolean = false,
|
|
231
256
|
): Query {
|
|
232
257
|
assertObject(query, 'Called INSERT with a non-object')
|
|
233
258
|
|
|
@@ -242,10 +267,12 @@ function insert(
|
|
|
242
267
|
values.push(value)
|
|
243
268
|
}
|
|
244
269
|
|
|
270
|
+
const returning = unique ? 'ON CONFLICT DO NOTHING RETURNING *' : 'RETURNING *'
|
|
271
|
+
|
|
245
272
|
return [
|
|
246
273
|
columns.length == 0 ?
|
|
247
|
-
`INSERT INTO ${escape(schema)}.${escape(table)} DEFAULT VALUES
|
|
248
|
-
`INSERT INTO ${escape(schema)}.${escape(table)} (${columns.join()}) VALUES (${placeholders.join()})
|
|
274
|
+
`INSERT INTO ${escape(schema)}.${escape(table)} DEFAULT VALUES ${returning}` :
|
|
275
|
+
`INSERT INTO ${escape(schema)}.${escape(table)} (${columns.join()}) VALUES (${placeholders.join()}) ${returning}`,
|
|
249
276
|
values,
|
|
250
277
|
]
|
|
251
278
|
}
|
|
@@ -408,12 +435,17 @@ class ModelImpl<Table extends Record<string, ColumnDefinition>> implements Model
|
|
|
408
435
|
this._table = table
|
|
409
436
|
}
|
|
410
437
|
|
|
438
|
+
// Make typescript happy about overloads
|
|
439
|
+
create(data: InferInsertType<Table>): Promise<InferSelectType<Table>>
|
|
440
|
+
|
|
441
|
+
// Actual implementation
|
|
411
442
|
async create(
|
|
412
443
|
data: InferInsertType<Table>,
|
|
413
|
-
|
|
414
|
-
|
|
444
|
+
unique: false = false,
|
|
445
|
+
): Promise<InferSelectType<Table> | undefined> {
|
|
446
|
+
const [ sql, params ] = insert(this._schema, this._table, data, unique)
|
|
415
447
|
const result = await this._connection.query<InferSelectType<Table>>(sql, params)
|
|
416
|
-
return result.rows[0]
|
|
448
|
+
return result.rows[0]
|
|
417
449
|
}
|
|
418
450
|
|
|
419
451
|
async upsert<K extends InferQueryType<Table>>(
|