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.
@@ -1,5 +1,5 @@
1
1
  declare module "pg-triggers"{
2
2
 
3
- function table_name_max_id_trg(tableName:string, idName:string): Promise<string>;
3
+ function dumpMaxIdTrigger(tableName:string, idName:string, opts:{firstId:number, grouping:string[]}): Promise<string>;
4
4
 
5
5
  }
@@ -5,9 +5,22 @@ var fs = require("fs/promises");
5
5
 
6
6
  var pgTriggers = {}
7
7
 
8
- pgTriggers.dumpMaxIdTrigger = async function dumpMaxIdTrigger (tableName, idName) {
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.replace(/table_name/g, tableName).replace(/id_name/g, idName);
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
 
@@ -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
- curr_max bigint;
6
+ v_curr_max bigint;
7
7
  begin
8
- if new.id_name is null then
9
- select max(id_name) into curr_max
10
- from table_name;
11
- new.id_name := coalesce(curr_max + 1, 1);
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"();
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "pg-triggers",
3
3
  "description": "Triggers for postgres",
4
- "version": "0.4.2",
4
+ "version": "0.4.3",
5
5
  "author": "Emilio Platzer <emilioplatzer@gmail.com>",
6
6
  "repository": "emilioplatzer/pg-triggers",
7
7
  "license": "MIT",