@prisma-psm/pg 1.0.45 → 1.0.48

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@prisma-psm/pg",
3
- "version": "1.0.45",
3
+ "version": "1.0.48",
4
4
  "description": "Prisma Safe Migration Postgres Driver",
5
5
  "main": "src/index.js",
6
6
  "scripts": {
@@ -7,11 +7,6 @@ export interface RestoreOptions {
7
7
  parser: PostgresParserOptions;
8
8
  }
9
9
  export declare function lockTable(opts: RestoreOptions): string[];
10
- export interface RestoreOptions {
11
- source: string;
12
- model: ModelOptions;
13
- parser: PostgresParserOptions;
14
- }
15
10
  export declare function restoreBackupSQL(opts: RestoreOptions): {
16
11
  data: string[];
17
12
  registry: string[];
@@ -1 +1 @@
1
- {"version":3,"file":"engine.d.ts","sourceRoot":"","sources":["engine.ts"],"names":[],"mappings":"AAAA,OAAO,EAAc,YAAY,EAAC,MAAM,kBAAkB,CAAC;AAG3D,OAAO,EAAE,qBAAqB,EAAE,MAAM,QAAQ,CAAC;AAK/C,wBAAgB,2BAA2B,CAAE,IAAI,EAAE,qBAAqB,YAoCvE;AAGD,MAAM,WAAW,cAAc;IAC3B,MAAM,EAAC,MAAM,CAAA;IACb,KAAK,EAAC,YAAY,CAAC;IACnB,MAAM,EAAC,qBAAqB,CAAA;CAC/B;AAED,wBAAgB,SAAS,CAAC,IAAI,EAAE,cAAc,YA4B7C;AAED,MAAM,WAAW,cAAc;IAC3B,MAAM,EAAC,MAAM,CAAA;IACb,KAAK,EAAC,YAAY,CAAC;IACnB,MAAM,EAAC,qBAAqB,CAAA;CAC/B;AAED,wBAAgB,gBAAgB,CAAC,IAAI,EAAC,cAAc,GAAI;IACpD,IAAI,EAAC,MAAM,EAAE,CAAA;IACb,QAAQ,EAAC,MAAM,EAAE,CAAA;CACpB,CAiJA;AAED,MAAM,WAAW,oBAAqB,SAAQ,cAAc;IACxD,IAAI,EAAC,MAAM,CAAA;IACX,EAAE,EAAC,MAAM,CAAA;IACT,GAAG,CAAC,EAAC,MAAM,CAAA;CACd;AACD,wBAAgB,gBAAgB,CAAE,IAAI,EAAC,oBAAoB,YAgB1D"}
1
+ {"version":3,"file":"engine.d.ts","sourceRoot":"","sources":["engine.ts"],"names":[],"mappings":"AAAA,OAAO,EAAe,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAG7D,OAAO,EAAE,qBAAqB,EAAE,MAAM,QAAQ,CAAC;AAK/C,wBAAgB,2BAA2B,CAAC,IAAI,EAAE,qBAAqB,YAuCtE;AAED,MAAM,WAAW,cAAc;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,YAAY,CAAC;IACpB,MAAM,EAAE,qBAAqB,CAAC;CACjC;AAED,wBAAgB,SAAS,CAAC,IAAI,EAAE,cAAc,YAyB7C;AAED,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,cAAc,GAAG;IACpD,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,QAAQ,EAAE,MAAM,EAAE,CAAC;CACtB,CAuLA;AAED,MAAM,WAAW,oBAAqB,SAAQ,cAAc;IACxD,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,CAAC;IACX,GAAG,CAAC,EAAE,MAAM,CAAC;CAChB;AACD,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,oBAAoB,YAqB1D"}
@@ -43,7 +43,7 @@ function createFunctionRestoreSerial(opts) {
43
43
  end if;
44
44
  return next;
45
45
  end;
46
- $$;`
46
+ $$;`,
47
47
  ], tab);
48
48
  }
49
49
  function lockTable(opts) {
@@ -68,10 +68,7 @@ function lockTable(opts) {
68
68
  RAISE NOTICE 'TABLE ${schema}.${source} NOT FOUND, SKIPPING LOCK';
69
69
  END IF;
70
70
  END $$;`.trim();
71
- return [
72
- (0, notice_1.notice)(`PREPARING LOCK FOR MODEL ${modelName}`),
73
- sql
74
- ];
71
+ return [(0, notice_1.notice)(`PREPARING LOCK FOR MODEL ${modelName}`), sql];
75
72
  }
76
73
  function restoreBackupSQL(opts) {
77
74
  var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y, _z, _0, _1, _2, _3, _4, _5, _6, _7;
@@ -82,25 +79,47 @@ function restoreBackupSQL(opts) {
82
79
  const temp = (0, escape_1.oid)(opts.model.temp);
83
80
  if ((_b = (_a = opts.model.psm) === null || _a === void 0 ? void 0 : _a.backup) === null || _b === void 0 ? void 0 : _b.skip)
84
81
  return null;
85
- let filter = (field) => {
86
- return !field.isGenerated
87
- && field.kind === "scalar";
88
- };
89
- const columns = opts.model.fields.filter(filter)
90
- .map(value => ` ${(0, escape_1.oid)(value.name)}`)
91
- .join(", ");
92
- const DEFAULT_WHEN = `true`;
93
- const DEFAULT_QUERY = `select * from ${schema}.${source}`;
94
- const DEFAULT_SOURCE_CHECKER = `select 1 from pg_catalog.pg_tables t where t.tablename = ${(0, escape_1.lit)(opts.model.name)} and t.schemaname = ${(0, escape_1.lit)(opts.model.schema)}`;
95
- const DEFAULT_RESOLVER = opts.model.fields.filter(filter)
96
- .map(value => {
97
- return ` ${(0, escape_1.oid)(value.dbName || value.name)}`;
82
+ // Filtra campos escalares não gerados (serão restaurados)
83
+ const filter = (field) => !field.isGenerated && field.kind === "scalar";
84
+ const fields = opts.model.fields.filter(filter);
85
+ // Lista de colunas para o INSERT (na mesma ordem dos campos)
86
+ const columns = fields.map((f) => ` ${(0, escape_1.oid)(f.name)}`).join(", ");
87
+ // Constrói a lista de expressões SELECT com CASE que verifica existência da chave no JSON original
88
+ const selectExpressions = fields
89
+ .map((field) => {
90
+ const colName = (0, escape_1.oid)(field.dbName || field.name);
91
+ const colNameLit = (0, escape_1.lit)(field.dbName || field.name);
92
+ // Obtém a expressão default do modelo (assumindo que reflete o schema do banco)
93
+ const defaultValue = field.default !== undefined ? field.default : "NULL";
94
+ return `
95
+ CASE
96
+ WHEN original_json ? ${colNameLit} THEN s.${colName}
97
+ ELSE ${defaultValue}
98
+ END AS ${colName}
99
+ `.trim();
98
100
  })
101
+ .join(",\n");
102
+ // Nova DEFAULT_QUERY com CTE que inclui o JSON original e aplica CASE para cada coluna
103
+ const DEFAULT_QUERY = `
104
+ WITH __source AS (
105
+ SELECT
106
+ to_jsonb(_t) AS original_json,
107
+ (jsonb_populate_record(null::${shadow}.${temp}, to_jsonb(_t))).*
108
+ FROM ${schema}.${source} _t
109
+ )
110
+ SELECT
111
+ ${selectExpressions}
112
+ FROM __source s
113
+ `;
114
+ const DEFAULT_SOURCE_CHECKER = `select 1 from pg_catalog.pg_tables t where t.tablename = ${(0, escape_1.lit)(opts.model.name)} and t.schemaname = ${(0, escape_1.lit)(opts.model.schema)}`;
115
+ const DEFAULT_WHEN = `true`;
116
+ const DEFAULT_RESOLVER = fields
117
+ .map((f) => ` ${(0, escape_1.oid)(f.dbName || f.name)}`)
99
118
  .join(", ");
100
119
  let source_exists = DEFAULT_SOURCE_CHECKER;
101
120
  let when = DEFAULT_WHEN;
102
- const revision_resolver = opts.model.fields.filter(filter)
103
- .map(field => {
121
+ const revision_resolver = fields
122
+ .map((field) => {
104
123
  var _a, _b;
105
124
  let expression = (_b = (_a = field.psm) === null || _a === void 0 ? void 0 : _a.restore) === null || _b === void 0 ? void 0 : _b.expression;
106
125
  if (!expression)
@@ -111,29 +130,36 @@ function restoreBackupSQL(opts) {
111
130
  let revision_query = DEFAULT_QUERY;
112
131
  const expression = (_e = (_d = (_c = opts.model.psm) === null || _c === void 0 ? void 0 : _c.backup) === null || _d === void 0 ? void 0 : _d.rev) === null || _e === void 0 ? void 0 : _e.expression;
113
132
  const exists = (_h = (_g = (_f = opts.model.psm) === null || _f === void 0 ? void 0 : _f.backup) === null || _g === void 0 ? void 0 : _g.rev) === null || _h === void 0 ? void 0 : _h.exists;
114
- if (!!(exists === null || exists === void 0 ? void 0 : exists.length)) {
133
+ if (exists === null || exists === void 0 ? void 0 : exists.length) {
115
134
  source_exists = exists;
116
135
  }
117
- if (((_l = (_k = (_j = opts.model.psm) === null || _j === void 0 ? void 0 : _j.backup) === null || _k === void 0 ? void 0 : _k.rev) === null || _l === void 0 ? void 0 : _l.from) === "query"
118
- && !!expression)
136
+ if (((_l = (_k = (_j = opts.model.psm) === null || _j === void 0 ? void 0 : _j.backup) === null || _k === void 0 ? void 0 : _k.rev) === null || _l === void 0 ? void 0 : _l.from) === "query" &&
137
+ expression) {
119
138
  revision_query = expression;
120
- else if (((_p = (_o = (_m = opts.model.psm) === null || _m === void 0 ? void 0 : _m.backup) === null || _o === void 0 ? void 0 : _o.rev) === null || _p === void 0 ? void 0 : _p.from) === "query:linked"
121
- && !!expression
122
- && !!((_r = (_q = opts.model.psm) === null || _q === void 0 ? void 0 : _q.query) === null || _r === void 0 ? void 0 : _r[expression]))
139
+ }
140
+ else if (((_p = (_o = (_m = opts.model.psm) === null || _m === void 0 ? void 0 : _m.backup) === null || _o === void 0 ? void 0 : _o.rev) === null || _p === void 0 ? void 0 : _p.from) === "query:linked" &&
141
+ expression &&
142
+ ((_r = (_q = opts.model.psm) === null || _q === void 0 ? void 0 : _q.query) === null || _r === void 0 ? void 0 : _r[expression])) {
123
143
  revision_query = (_t = (_s = opts.model.psm) === null || _s === void 0 ? void 0 : _s.query) === null || _t === void 0 ? void 0 : _t[expression];
124
- else if (((_w = (_v = (_u = opts.model.psm) === null || _u === void 0 ? void 0 : _u.backup) === null || _v === void 0 ? void 0 : _v.rev) === null || _w === void 0 ? void 0 : _w.from) === "model" && !!expression) {
125
- let model = opts.parser.models.find(value => value.model === expression);
126
- if (!!model)
144
+ }
145
+ else if (((_w = (_v = (_u = opts.model.psm) === null || _u === void 0 ? void 0 : _u.backup) === null || _v === void 0 ? void 0 : _v.rev) === null || _w === void 0 ? void 0 : _w.from) === "model" &&
146
+ expression) {
147
+ const model = opts.parser.models.find((m) => m.model === expression);
148
+ if (model) {
127
149
  revision_query = `select * from ${(0, escape_1.oid)(model.schema || "public")}.${(0, escape_1.oid)(model.dbName || model.name)}`;
150
+ }
128
151
  }
129
152
  const sys = (0, escape_1.oid)(opts.parser.sys);
130
153
  let revision = "null";
131
154
  const relation = `${schema}.${table}`;
132
- if ((_z = (_y = (_x = opts.model.psm) === null || _x === void 0 ? void 0 : _x.backup) === null || _y === void 0 ? void 0 : _y.rev) === null || _z === void 0 ? void 0 : _z.version)
155
+ if ((_z = (_y = (_x = opts.model.psm) === null || _x === void 0 ? void 0 : _x.backup) === null || _y === void 0 ? void 0 : _y.rev) === null || _z === void 0 ? void 0 : _z.version) {
133
156
  revision = (0, escape_1.lit)((_1 = (_0 = opts.model.psm) === null || _0 === void 0 ? void 0 : _0.backup) === null || _1 === void 0 ? void 0 : _1.rev.version);
157
+ }
134
158
  let always_query = DEFAULT_QUERY;
135
159
  let always_resolver = DEFAULT_RESOLVER;
136
- if (((_4 = (_3 = (_2 = opts.model.psm) === null || _2 === void 0 ? void 0 : _2.backup) === null || _3 === void 0 ? void 0 : _3.rev) === null || _4 === void 0 ? void 0 : _4.apply) === "ALWAYS" && !!revision_query && !!revision_resolver) {
160
+ if (((_4 = (_3 = (_2 = opts.model.psm) === null || _2 === void 0 ? void 0 : _2.backup) === null || _3 === void 0 ? void 0 : _3.rev) === null || _4 === void 0 ? void 0 : _4.apply) === "ALWAYS" &&
161
+ revision_query &&
162
+ revision_resolver) {
137
163
  always_query = revision_query;
138
164
  always_resolver = revision_resolver;
139
165
  revision = `always-${opts.parser.migration}`;
@@ -180,12 +206,8 @@ function restoreBackupSQL(opts) {
180
206
  end;
181
207
  $$;
182
208
  `.split("\n")
183
- .filter(value => !!value)
184
- .map(value => {
185
- if (value.startsWith(" "))
186
- return value.substring(" ".length);
187
- return value;
188
- })
209
+ .filter((line) => line.trim() !== "")
210
+ .map((line) => line.replace(/^ {6}/, "")) // Remove indentação de 6 espaços
189
211
  .join("\n");
190
212
  return {
191
213
  data: [
@@ -199,7 +221,7 @@ function restoreBackupSQL(opts) {
199
221
  revision: (_7 = (_6 = (_5 = opts.model.psm) === null || _5 === void 0 ? void 0 : _5.backup) === null || _6 === void 0 ? void 0 : _6.rev) === null || _7 === void 0 ? void 0 : _7.version,
200
222
  relation: relation,
201
223
  hash: (0, sha_1.migrationHash)(opts.parser.migration, `restore:data-${relation}`),
202
- operation: `restore:data-${relation}`
224
+ operation: `restore:data-${relation}`,
203
225
  }).join("\n"),
204
226
  (0, notice_1.notice)(`REGISTRY RESTORE OF BACKUP FOR MODEL ${opts.model.model} OK`),
205
227
  ],
@@ -1 +1 @@
1
- {"version":3,"file":"engine.js","sourceRoot":"","sources":["engine.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"engine.js","sourceRoot":"","sources":["engine.ts"],"names":[],"mappings":"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"}
@@ -1,16 +1,17 @@
1
- import {FieldOption, ModelOptions} from "@prisma-psm/core";
2
- import {oid, lit, VARCHAR} from "../../utils/escape";
1
+ import { FieldOption, ModelOptions } from "@prisma-psm/core";
2
+ import { oid, lit, VARCHAR } from "../../utils/escape";
3
3
  import { noTab } from "../../utils/tabs";
4
4
  import { PostgresParserOptions } from "../def";
5
- import {notice} from "../notice";
6
- import {createRevision} from "../sys";
7
- import {migrationHash} from "../../utils/sha";
5
+ import { notice } from "../notice";
6
+ import { createRevision } from "../sys";
7
+ import { migrationHash } from "../../utils/sha";
8
8
 
9
- export function createFunctionRestoreSerial( opts: PostgresParserOptions) {
10
- const sys = oid( opts.sys);
11
- const tab = " "
12
- return noTab([
13
- `create or replace function ${sys}.restore_serial(
9
+ export function createFunctionRestoreSerial(opts: PostgresParserOptions) {
10
+ const sys = oid(opts.sys);
11
+ const tab = " ";
12
+ return noTab(
13
+ [
14
+ `create or replace function ${sys}.restore_serial(
14
15
  schema character varying,
15
16
  source character varying,
16
17
  shadow character varying,
@@ -40,15 +41,16 @@ export function createFunctionRestoreSerial( opts: PostgresParserOptions) {
40
41
  end if;
41
42
  return next;
42
43
  end;
43
- $$;`
44
- ], tab );
44
+ $$;`,
45
+ ],
46
+ tab
47
+ );
45
48
  }
46
49
 
47
-
48
- export interface RestoreOptions{
49
- source:string
50
- model:ModelOptions,
51
- parser:PostgresParserOptions
50
+ export interface RestoreOptions {
51
+ source: string;
52
+ model: ModelOptions;
53
+ parser: PostgresParserOptions;
52
54
  }
53
55
 
54
56
  export function lockTable(opts: RestoreOptions) {
@@ -75,101 +77,128 @@ export function lockTable(opts: RestoreOptions) {
75
77
  END IF;
76
78
  END $$;`.trim();
77
79
 
78
- return [
79
- notice(`PREPARING LOCK FOR MODEL ${modelName}`),
80
- sql
81
- ];
80
+ return [notice(`PREPARING LOCK FOR MODEL ${modelName}`), sql];
82
81
  }
83
82
 
84
- export interface RestoreOptions{
85
- source:string
86
- model:ModelOptions,
87
- parser:PostgresParserOptions
88
- }
83
+ export function restoreBackupSQL(opts: RestoreOptions): {
84
+ data: string[];
85
+ registry: string[];
86
+ } {
87
+ const schema = oid(opts.model.schema);
88
+ const source = oid(opts.source);
89
+ const shadow = oid(opts.parser.shadow);
90
+ const table = oid(opts.model.name);
91
+ const temp = oid(opts.model.temp);
89
92
 
90
- export function restoreBackupSQL(opts:RestoreOptions ): {
91
- data:string[]
92
- registry:string[]
93
- }{
94
- const schema = oid(opts.model.schema);
95
- const source = oid(opts.source);
96
- const shadow = oid(opts.parser.shadow);
97
- const table = oid(opts.model.name);
98
- const temp = oid(opts.model.temp);
93
+ if (opts.model.psm?.backup?.skip) return null as any;
99
94
 
100
- if( opts.model.psm?.backup?.skip ) return null as any;
95
+ // Filtra campos escalares não gerados (serão restaurados)
96
+ const filter = (field: FieldOption) =>
97
+ !field.isGenerated && field.kind === "scalar";
98
+ const fields = opts.model.fields.filter(filter);
101
99
 
102
- let filter = ( field:FieldOption)=>{
103
- return !field.isGenerated
104
- && field.kind === "scalar"
105
- ;
106
- }
100
+ // Lista de colunas para o INSERT (na mesma ordem dos campos)
101
+ const columns = fields.map((f) => ` ${oid(f.name)}`).join(", ");
107
102
 
103
+ // Constrói a lista de expressões SELECT com CASE que verifica existência da chave no JSON original
104
+ const selectExpressions = fields
105
+ .map((field) => {
106
+ const colName = oid(field.dbName || field.name);
107
+ const colNameLit = lit(field.dbName || field.name);
108
+ // Obtém a expressão default do modelo (assumindo que reflete o schema do banco)
109
+ const defaultValue = field.default !== undefined ? field.default : "NULL";
110
+ return `
111
+ CASE
112
+ WHEN original_json ? ${colNameLit} THEN s.${colName}
113
+ ELSE ${defaultValue}
114
+ END AS ${colName}
115
+ `.trim();
116
+ })
117
+ .join(",\n");
108
118
 
109
- const columns = opts.model.fields.filter( filter )
110
- .map( value => ` ${oid(value.name)}` )
111
- .join(", ")
112
- ;
119
+ // Nova DEFAULT_QUERY com CTE que inclui o JSON original e aplica CASE para cada coluna
120
+ const DEFAULT_QUERY = `
121
+ WITH __source AS (
122
+ SELECT
123
+ to_jsonb(_t) AS original_json,
124
+ (jsonb_populate_record(null::${shadow}.${temp}, to_jsonb(_t))).*
125
+ FROM ${schema}.${source} _t
126
+ )
127
+ SELECT
128
+ ${selectExpressions}
129
+ FROM __source s
130
+ `;
113
131
 
132
+ const DEFAULT_SOURCE_CHECKER = `select 1 from pg_catalog.pg_tables t where t.tablename = ${lit(
133
+ opts.model.name
134
+ )} and t.schemaname = ${lit(opts.model.schema)}`;
114
135
  const DEFAULT_WHEN = `true`;
115
- const DEFAULT_QUERY = `select * from ${schema}.${source}`;
116
- const DEFAULT_SOURCE_CHECKER = `select 1 from pg_catalog.pg_tables t where t.tablename = ${lit(opts.model.name)} and t.schemaname = ${lit(opts.model.schema)}`;
117
- const DEFAULT_RESOLVER = opts.model.fields.filter( filter )
118
- .map( value => {
119
- return ` ${oid(value.dbName||value.name)}`;
120
- })
121
- .join(", ")
122
- ;
136
+ const DEFAULT_RESOLVER = fields
137
+ .map((f) => ` ${oid(f.dbName || f.name)}`)
138
+ .join(", ");
123
139
 
124
140
  let source_exists = DEFAULT_SOURCE_CHECKER;
125
141
  let when = DEFAULT_WHEN;
126
142
 
127
- const revision_resolver = opts.model.fields.filter( filter )
128
- .map( field => {
129
-
143
+ const revision_resolver = fields
144
+ .map((field) => {
130
145
  let expression = field.psm?.restore?.expression;
131
- if( !expression ) expression = ` ${oid(field.dbName||field.name)}`;
146
+ if (!expression) expression = ` ${oid(field.dbName || field.name)}`;
132
147
  return expression;
133
148
  })
134
- .join(", ")
135
- ;
149
+ .join(", ");
136
150
 
137
151
  let revision_query = DEFAULT_QUERY;
138
152
  const expression = opts.model.psm?.backup?.rev?.expression;
139
153
  const exists = opts.model.psm?.backup?.rev?.exists;
140
154
 
141
- if( !!exists?.length ){
155
+ if (exists?.length) {
142
156
  source_exists = exists;
143
157
  }
144
158
 
145
- if( opts.model.psm?.backup?.rev?.from === "query"
146
- && !!expression
147
- ) revision_query = expression;
148
-
149
- else if( opts.model.psm?.backup?.rev?.from === "query:linked"
150
- && !!expression
151
- && !!opts.model.psm?.query?.[expression]
152
- ) revision_query = opts.model.psm?.query?.[expression]
153
-
154
- else if( opts.model.psm?.backup?.rev?.from === "model" && !!expression ){
155
- let model = opts.parser.models.find( value => value.model === expression );
156
- if( !!model ) revision_query = `select * from ${oid(model.schema||"public")}.${oid(model.dbName||model.name)}`
159
+ if (
160
+ opts.model.psm?.backup?.rev?.from === "query" &&
161
+ expression
162
+ ) {
163
+ revision_query = expression;
164
+ } else if (
165
+ opts.model.psm?.backup?.rev?.from === "query:linked" &&
166
+ expression &&
167
+ opts.model.psm?.query?.[expression]
168
+ ) {
169
+ revision_query = opts.model.psm?.query?.[expression];
170
+ } else if (
171
+ opts.model.psm?.backup?.rev?.from === "model" &&
172
+ expression
173
+ ) {
174
+ const model = opts.parser.models.find((m) => m.model === expression);
175
+ if (model) {
176
+ revision_query = `select * from ${oid(
177
+ model.schema || "public"
178
+ )}.${oid(model.dbName || model.name)}`;
179
+ }
157
180
  }
158
181
 
159
- const sys = oid( opts.parser.sys );
160
- let revision= "null";
182
+ const sys = oid(opts.parser.sys);
183
+ let revision = "null";
161
184
  const relation = `${schema}.${table}`;
162
- if( opts.model.psm?.backup?.rev?.version ) revision = lit( opts.model.psm?.backup?.rev.version );
185
+ if (opts.model.psm?.backup?.rev?.version) {
186
+ revision = lit(opts.model.psm?.backup?.rev.version);
187
+ }
163
188
 
164
189
  let always_query = DEFAULT_QUERY;
165
190
  let always_resolver = DEFAULT_RESOLVER;
166
- if( opts.model.psm?.backup?.rev?.apply === "ALWAYS" && !!revision_query && !!revision_resolver) {
191
+ if (
192
+ opts.model.psm?.backup?.rev?.apply === "ALWAYS" &&
193
+ revision_query &&
194
+ revision_resolver
195
+ ) {
167
196
  always_query = revision_query;
168
197
  always_resolver = revision_resolver;
169
198
  revision = `always-${opts.parser.migration}`;
170
199
  }
171
200
 
172
- const next =`
201
+ const next = `
173
202
  do $$
174
203
  declare
175
204
  _revision character varying := ${revision}::character varying;
@@ -194,14 +223,14 @@ export function restoreBackupSQL(opts:RestoreOptions ): {
194
223
  ) then
195
224
  with __restore as (
196
225
  ${revision_query}
197
- ) insert into ${shadow}.${temp} (${ columns })
226
+ ) insert into ${shadow}.${temp} (${columns})
198
227
  select
199
228
  ${revision_resolver}
200
229
  from __restore r;
201
230
  elsif _revision is null then
202
231
  with __restore as (
203
232
  ${always_query}
204
- ) insert into ${shadow}.${temp} (${ columns })
233
+ ) insert into ${shadow}.${temp} (${columns})
205
234
  select
206
235
  ${always_resolver}
207
236
  from __restore r;
@@ -211,38 +240,40 @@ export function restoreBackupSQL(opts:RestoreOptions ): {
211
240
  end;
212
241
  $$;
213
242
  `.split("\n")
214
- .filter( value => !!value )
215
- .map( value => {
216
- if( value.startsWith(" ") ) return value.substring(" ".length)
217
- return value;
218
- })
243
+ .filter((line) => line.trim() !== "")
244
+ .map((line) => line.replace(/^ {6}/, "")) // Remove indentação de 6 espaços
219
245
  .join("\n");
220
246
 
221
247
  return {
222
248
  data: [
223
- notice( `RESTORE BACKUP FOR MODEL ${opts.model.model}` ),
249
+ notice(`RESTORE BACKUP FOR MODEL ${opts.model.model}`),
224
250
  next,
225
- notice( `RESTORE BACKUP FOR MODEL ${opts.model.model} OK` ),
251
+ notice(`RESTORE BACKUP FOR MODEL ${opts.model.model} OK`),
226
252
  ],
227
253
  registry: [
228
- notice( `REGISTRY RESTORE OF BACKUP FOR MODEL ${opts.model.model}` ),
229
- createRevision( opts.parser, {
254
+ notice(`REGISTRY RESTORE OF BACKUP FOR MODEL ${opts.model.model}`),
255
+ createRevision(opts.parser, {
230
256
  revision: opts.model.psm?.backup?.rev?.version,
231
257
  relation: relation,
232
- hash: migrationHash( opts.parser.migration, `restore:data-${relation}`),
233
- operation: `restore:data-${relation}`
258
+ hash: migrationHash(
259
+ opts.parser.migration,
260
+ `restore:data-${relation}`
261
+ ),
262
+ operation: `restore:data-${relation}`,
234
263
  }).join("\n"),
235
- notice( `REGISTRY RESTORE OF BACKUP FOR MODEL ${opts.model.model} OK` ),
264
+ notice(
265
+ `REGISTRY RESTORE OF BACKUP FOR MODEL ${opts.model.model} OK`
266
+ ),
236
267
  ],
237
- }
268
+ };
238
269
  }
239
270
 
240
271
  export interface RestoreSerialOptions extends RestoreOptions {
241
- from:string
242
- to:string
243
- seq?:string
272
+ from: string;
273
+ to: string;
274
+ seq?: string;
244
275
  }
245
- export function restoreSerialSQL( opts:RestoreSerialOptions) {
276
+ export function restoreSerialSQL(opts: RestoreSerialOptions) {
246
277
  const args = [
247
278
  ` schema := ${lit(opts.model.schema, VARCHAR)}`,
248
279
  ` source := ${lit(opts.source, VARCHAR)}`,
@@ -250,13 +281,17 @@ export function restoreSerialSQL( opts:RestoreSerialOptions) {
250
281
  ` temp := ${lit(opts.model.temp, VARCHAR)}`,
251
282
  ` "from" := ${lit(opts.from, VARCHAR)}`,
252
283
  ` "to" := ${lit(opts.to, VARCHAR)}`,
253
- ` "seq" := ${lit( opts.seq, VARCHAR)}`,
284
+ ` "seq" := ${lit(opts.seq, VARCHAR)}`,
254
285
  ];
255
286
  return [
256
- notice( `RESTORE SEQUENCE OF FIELD ${opts.to} FROM MODEL ${opts.model.model}`),
257
- `select * from ${oid(opts.parser.sys)}.restore_serial(\n ${args.join(",\n ")}\n);`,
258
- notice( `RESTORE SEQUENCE OF FIELD ${opts.to} FROM MODEL ${opts.model.model} OK`),
287
+ notice(
288
+ `RESTORE SEQUENCE OF FIELD ${opts.to} FROM MODEL ${opts.model.model}`
289
+ ),
290
+ `select * from ${oid(opts.parser.sys)}.restore_serial(\n ${args.join(
291
+ ",\n "
292
+ )}\n);`,
293
+ notice(
294
+ `RESTORE SEQUENCE OF FIELD ${opts.to} FROM MODEL ${opts.model.model} OK`
295
+ ),
259
296
  ];
260
-
261
- }
262
-
297
+ }