@prisma-psm/pg 1.0.47 → 1.0.50
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 +1 @@
|
|
|
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,
|
|
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,CA2OA;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"}
|
|
@@ -79,26 +79,87 @@ function restoreBackupSQL(opts) {
|
|
|
79
79
|
const temp = (0, escape_1.oid)(opts.model.temp);
|
|
80
80
|
if ((_b = (_a = opts.model.psm) === null || _a === void 0 ? void 0 : _a.backup) === null || _b === void 0 ? void 0 : _b.skip)
|
|
81
81
|
return null;
|
|
82
|
+
// Função auxiliar para extrair a expressão SQL do default de um campo
|
|
83
|
+
function getDefaultSQL(field) {
|
|
84
|
+
const def = field.default;
|
|
85
|
+
if (def === undefined || def === null)
|
|
86
|
+
return 'NULL';
|
|
87
|
+
// 1. Tipos primitivos
|
|
88
|
+
if (typeof def === 'string')
|
|
89
|
+
return def;
|
|
90
|
+
if (typeof def === 'number')
|
|
91
|
+
return String(def);
|
|
92
|
+
if (typeof def === 'boolean')
|
|
93
|
+
return def ? 'true' : 'false';
|
|
94
|
+
// 2. Objetos
|
|
95
|
+
if (typeof def === 'object') {
|
|
96
|
+
const obj = def; // escape para acessar propriedades desconhecidas
|
|
97
|
+
// 2.1 Propriedades comuns em alguns dialetos (sql, expression)
|
|
98
|
+
if (obj.sql && typeof obj.sql === 'string')
|
|
99
|
+
return obj.sql;
|
|
100
|
+
if (obj.expression && typeof obj.expression === 'string')
|
|
101
|
+
return obj.expression;
|
|
102
|
+
// 2.2 Função representada por { name, args } (padrão Prisma para funções como nextval, now)
|
|
103
|
+
if (obj.name && typeof obj.name === 'string') {
|
|
104
|
+
const name = obj.name;
|
|
105
|
+
const args = Array.isArray(obj.args) ? obj.args : [];
|
|
106
|
+
// Converte cada argumento recursivamente
|
|
107
|
+
const argsSql = args.map((arg) => {
|
|
108
|
+
if (arg === null || arg === undefined)
|
|
109
|
+
return 'NULL';
|
|
110
|
+
if (typeof arg === 'string')
|
|
111
|
+
return arg;
|
|
112
|
+
if (typeof arg === 'number')
|
|
113
|
+
return String(arg);
|
|
114
|
+
if (typeof arg === 'boolean')
|
|
115
|
+
return arg ? 'true' : 'false';
|
|
116
|
+
if (typeof arg === 'object') {
|
|
117
|
+
// Tenta extrair SQL do argumento (pode ser outra função)
|
|
118
|
+
return getDefaultSQL({ default: arg });
|
|
119
|
+
}
|
|
120
|
+
return String(arg);
|
|
121
|
+
}).join(', ');
|
|
122
|
+
return `${name}(${argsSql})`;
|
|
123
|
+
}
|
|
124
|
+
// 2.3 Objetos com toString personalizado (evita [object Object])
|
|
125
|
+
if (obj.toString && obj.toString !== Object.prototype.toString) {
|
|
126
|
+
const str = obj.toString();
|
|
127
|
+
if (str !== '[object Object]')
|
|
128
|
+
return str;
|
|
129
|
+
}
|
|
130
|
+
// 2.4 Tenta obter value (para objetos simples como { value: ... })
|
|
131
|
+
if (obj.value !== undefined) {
|
|
132
|
+
return getDefaultSQL({ default: obj.value });
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
// Fallback seguro
|
|
136
|
+
return 'NULL';
|
|
137
|
+
}
|
|
82
138
|
// Filtra campos escalares não gerados (serão restaurados)
|
|
83
139
|
const filter = (field) => !field.isGenerated && field.kind === "scalar";
|
|
84
140
|
const fields = opts.model.fields.filter(filter);
|
|
85
141
|
// Lista de colunas para o INSERT (na mesma ordem dos campos)
|
|
86
142
|
const columns = fields.map((f) => ` ${(0, escape_1.oid)(f.name)}`).join(", ");
|
|
87
|
-
// Constrói a lista de expressões SELECT com
|
|
143
|
+
// Constrói a lista de expressões SELECT com CASE que verifica existência da chave no JSON original
|
|
88
144
|
const selectExpressions = fields
|
|
89
145
|
.map((field) => {
|
|
90
146
|
const colName = (0, escape_1.oid)(field.dbName || field.name);
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
147
|
+
const colNameLit = (0, escape_1.lit)(field.dbName || field.name);
|
|
148
|
+
const defaultValue = getDefaultSQL(field);
|
|
149
|
+
return `
|
|
150
|
+
CASE
|
|
151
|
+
WHEN original_json ? ${colNameLit} THEN s.${colName}
|
|
152
|
+
ELSE ${defaultValue}
|
|
153
|
+
END AS ${colName}
|
|
154
|
+
`.trim();
|
|
96
155
|
})
|
|
97
156
|
.join(",\n");
|
|
98
|
-
// Nova DEFAULT_QUERY com CTE e
|
|
157
|
+
// Nova DEFAULT_QUERY com CTE que inclui o JSON original e aplica CASE para cada coluna
|
|
99
158
|
const DEFAULT_QUERY = `
|
|
100
159
|
WITH __source AS (
|
|
101
|
-
SELECT
|
|
160
|
+
SELECT
|
|
161
|
+
to_jsonb(_t) AS original_json,
|
|
162
|
+
(jsonb_populate_record(null::${shadow}.${temp}, to_jsonb(_t))).*
|
|
102
163
|
FROM ${schema}.${source} _t
|
|
103
164
|
)
|
|
104
165
|
SELECT
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"engine.js","sourceRoot":"","sources":["engine.ts"],"names":[],"mappings":";;AAQA,kEAuCC;AAQD,8BAyBC;AAED,
|
|
1
|
+
{"version":3,"file":"engine.js","sourceRoot":"","sources":["engine.ts"],"names":[],"mappings":"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"}
|
|
@@ -92,6 +92,59 @@ export function restoreBackupSQL(opts: RestoreOptions): {
|
|
|
92
92
|
|
|
93
93
|
if (opts.model.psm?.backup?.skip) return null as any;
|
|
94
94
|
|
|
95
|
+
// Função auxiliar para extrair a expressão SQL do default de um campo
|
|
96
|
+
function getDefaultSQL(field: FieldOption): string {
|
|
97
|
+
const def = field.default;
|
|
98
|
+
if (def === undefined || def === null) return 'NULL';
|
|
99
|
+
|
|
100
|
+
// 1. Tipos primitivos
|
|
101
|
+
if (typeof def === 'string') return def;
|
|
102
|
+
if (typeof def === 'number') return String(def);
|
|
103
|
+
if (typeof def === 'boolean') return def ? 'true' : 'false';
|
|
104
|
+
|
|
105
|
+
// 2. Objetos
|
|
106
|
+
if (typeof def === 'object') {
|
|
107
|
+
const obj = def as any; // escape para acessar propriedades desconhecidas
|
|
108
|
+
|
|
109
|
+
// 2.1 Propriedades comuns em alguns dialetos (sql, expression)
|
|
110
|
+
if (obj.sql && typeof obj.sql === 'string') return obj.sql;
|
|
111
|
+
if (obj.expression && typeof obj.expression === 'string') return obj.expression;
|
|
112
|
+
|
|
113
|
+
// 2.2 Função representada por { name, args } (padrão Prisma para funções como nextval, now)
|
|
114
|
+
if (obj.name && typeof obj.name === 'string') {
|
|
115
|
+
const name = obj.name;
|
|
116
|
+
const args = Array.isArray(obj.args) ? obj.args : [];
|
|
117
|
+
// Converte cada argumento recursivamente
|
|
118
|
+
const argsSql = args.map((arg: any) => {
|
|
119
|
+
if (arg === null || arg === undefined) return 'NULL';
|
|
120
|
+
if (typeof arg === 'string') return arg;
|
|
121
|
+
if (typeof arg === 'number') return String(arg);
|
|
122
|
+
if (typeof arg === 'boolean') return arg ? 'true' : 'false';
|
|
123
|
+
if (typeof arg === 'object') {
|
|
124
|
+
// Tenta extrair SQL do argumento (pode ser outra função)
|
|
125
|
+
return getDefaultSQL({ default: arg } as FieldOption);
|
|
126
|
+
}
|
|
127
|
+
return String(arg);
|
|
128
|
+
}).join(', ');
|
|
129
|
+
return `${name}(${argsSql})`;
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
// 2.3 Objetos com toString personalizado (evita [object Object])
|
|
133
|
+
if (obj.toString && obj.toString !== Object.prototype.toString) {
|
|
134
|
+
const str = obj.toString();
|
|
135
|
+
if (str !== '[object Object]') return str;
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
// 2.4 Tenta obter value (para objetos simples como { value: ... })
|
|
139
|
+
if (obj.value !== undefined) {
|
|
140
|
+
return getDefaultSQL({ default: obj.value } as FieldOption);
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
// Fallback seguro
|
|
145
|
+
return 'NULL';
|
|
146
|
+
}
|
|
147
|
+
|
|
95
148
|
// Filtra campos escalares não gerados (serão restaurados)
|
|
96
149
|
const filter = (field: FieldOption) =>
|
|
97
150
|
!field.isGenerated && field.kind === "scalar";
|
|
@@ -100,23 +153,27 @@ export function restoreBackupSQL(opts: RestoreOptions): {
|
|
|
100
153
|
// Lista de colunas para o INSERT (na mesma ordem dos campos)
|
|
101
154
|
const columns = fields.map((f) => ` ${oid(f.name)}`).join(", ");
|
|
102
155
|
|
|
103
|
-
// Constrói a lista de expressões SELECT com
|
|
156
|
+
// Constrói a lista de expressões SELECT com CASE que verifica existência da chave no JSON original
|
|
104
157
|
const selectExpressions = fields
|
|
105
158
|
.map((field) => {
|
|
106
159
|
const colName = oid(field.dbName || field.name);
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
160
|
+
const colNameLit = lit(field.dbName || field.name);
|
|
161
|
+
const defaultValue = getDefaultSQL(field);
|
|
162
|
+
return `
|
|
163
|
+
CASE
|
|
164
|
+
WHEN original_json ? ${colNameLit} THEN s.${colName}
|
|
165
|
+
ELSE ${defaultValue}
|
|
166
|
+
END AS ${colName}
|
|
167
|
+
`.trim();
|
|
113
168
|
})
|
|
114
169
|
.join(",\n");
|
|
115
170
|
|
|
116
|
-
// Nova DEFAULT_QUERY com CTE e
|
|
171
|
+
// Nova DEFAULT_QUERY com CTE que inclui o JSON original e aplica CASE para cada coluna
|
|
117
172
|
const DEFAULT_QUERY = `
|
|
118
173
|
WITH __source AS (
|
|
119
|
-
SELECT
|
|
174
|
+
SELECT
|
|
175
|
+
to_jsonb(_t) AS original_json,
|
|
176
|
+
(jsonb_populate_record(null::${shadow}.${temp}, to_jsonb(_t))).*
|
|
120
177
|
FROM ${schema}.${source} _t
|
|
121
178
|
)
|
|
122
179
|
SELECT
|
|
@@ -125,7 +182,7 @@ export function restoreBackupSQL(opts: RestoreOptions): {
|
|
|
125
182
|
`;
|
|
126
183
|
|
|
127
184
|
const DEFAULT_SOURCE_CHECKER = `select 1 from pg_catalog.pg_tables t where t.tablename = ${lit(
|
|
128
|
-
|
|
185
|
+
opts.model.name
|
|
129
186
|
)} and t.schemaname = ${lit(opts.model.schema)}`;
|
|
130
187
|
const DEFAULT_WHEN = `true`;
|
|
131
188
|
const DEFAULT_RESOLVER = fields
|
|
@@ -169,7 +226,7 @@ export function restoreBackupSQL(opts: RestoreOptions): {
|
|
|
169
226
|
const model = opts.parser.models.find((m) => m.model === expression);
|
|
170
227
|
if (model) {
|
|
171
228
|
revision_query = `select * from ${oid(
|
|
172
|
-
|
|
229
|
+
model.schema || "public"
|
|
173
230
|
)}.${oid(model.dbName || model.name)}`;
|
|
174
231
|
}
|
|
175
232
|
}
|
|
@@ -283,7 +340,7 @@ export function restoreSerialSQL(opts: RestoreSerialOptions) {
|
|
|
283
340
|
`RESTORE SEQUENCE OF FIELD ${opts.to} FROM MODEL ${opts.model.model}`
|
|
284
341
|
),
|
|
285
342
|
`select * from ${oid(opts.parser.sys)}.restore_serial(\n ${args.join(
|
|
286
|
-
|
|
343
|
+
",\n "
|
|
287
344
|
)}\n);`,
|
|
288
345
|
notice(
|
|
289
346
|
`RESTORE SEQUENCE OF FIELD ${opts.to} FROM MODEL ${opts.model.model} OK`
|