pg-triggers 0.4.2 → 0.4.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/lib/pg-triggers.d.ts +1 -1
- package/lib/pg-triggers.js +15 -2
- package/lib/table-max-id-trg.sql +10 -9
- package/package.json +1 -1
package/lib/pg-triggers.d.ts
CHANGED
package/lib/pg-triggers.js
CHANGED
|
@@ -5,9 +5,22 @@ var fs = require("fs/promises");
|
|
|
5
5
|
|
|
6
6
|
var pgTriggers = {}
|
|
7
7
|
|
|
8
|
-
|
|
8
|
+
function q(str) {
|
|
9
|
+
return '"' + str.replace(/"/g, '""') + '"';
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
pgTriggers.dumpMaxIdTrigger = async function dumpMaxIdTrigger (tableName, idName, opts) {
|
|
13
|
+
opts = opts || {};
|
|
14
|
+
opts.firstId = opts.firstId || '1';
|
|
15
|
+
opts.grouping = opts.grouping || [];
|
|
9
16
|
var content = await fs.readFile(__dirname + "/table-max-id-trg.sql", "utf8");
|
|
10
|
-
var sql = content
|
|
17
|
+
var sql = content
|
|
18
|
+
.replace(/table_name/g, tableName.replace(/"/g, '""'))
|
|
19
|
+
.replace(/"id_name"/g, q(idName))
|
|
20
|
+
.replace(/v_first_id/g, opts.firstId)
|
|
21
|
+
.replace(/where true/g, opts.grouping.length ? `where ${
|
|
22
|
+
opts.grouping.map(g => `x.${q(g)} = new.${q(g)}`).join(' and ')
|
|
23
|
+
}` : '');
|
|
11
24
|
return sql;
|
|
12
25
|
};
|
|
13
26
|
|
package/lib/table-max-id-trg.sql
CHANGED
|
@@ -1,20 +1,21 @@
|
|
|
1
|
-
create or replace function table_name_max_id_trg() returns trigger
|
|
1
|
+
create or replace function "table_name_max_id_trg"() returns trigger
|
|
2
2
|
language plpgsql
|
|
3
3
|
as
|
|
4
4
|
$body$
|
|
5
5
|
declare
|
|
6
|
-
|
|
6
|
+
v_curr_max bigint;
|
|
7
7
|
begin
|
|
8
|
-
if new.id_name is null then
|
|
9
|
-
select max(id_name) into
|
|
10
|
-
from table_name
|
|
11
|
-
|
|
8
|
+
if new."id_name" is null then
|
|
9
|
+
select max("id_name") into v_curr_max
|
|
10
|
+
from "table_name" x
|
|
11
|
+
where true;
|
|
12
|
+
new."id_name" := coalesce(v_curr_max + 1, v_first_id);
|
|
12
13
|
end if;
|
|
13
14
|
return new;
|
|
14
15
|
end;
|
|
15
16
|
$body$;
|
|
16
17
|
|
|
17
|
-
create trigger table_name_max_id_trg
|
|
18
|
+
create trigger "table_name_max_id_trg"
|
|
18
19
|
before insert
|
|
19
|
-
on table_name
|
|
20
|
-
for each row execute function table_name_max_id_trg();
|
|
20
|
+
on "table_name"
|
|
21
|
+
for each row execute function "table_name_max_id_trg"();
|