@prisma-psm/pg 1.0.0

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.
Files changed (114) hide show
  1. package/.idea/modules.xml +8 -0
  2. package/.idea/php.xml +9 -0
  3. package/.idea/psm-pg.iml +8 -0
  4. package/.idea/vcs.xml +6 -0
  5. package/.idea/workspace.xml +73 -0
  6. package/LICENSE +201 -0
  7. package/README.md +2 -0
  8. package/package.json +21 -0
  9. package/src/index.d.ts +4 -0
  10. package/src/index.d.ts.map +1 -0
  11. package/src/index.js +21 -0
  12. package/src/index.js.map +1 -0
  13. package/src/index.ts +23 -0
  14. package/src/migration/migrate.d.ts +3 -0
  15. package/src/migration/migrate.d.ts.map +1 -0
  16. package/src/migration/migrate.js +8 -0
  17. package/src/migration/migrate.js.map +1 -0
  18. package/src/migration/migrate.ts +7 -0
  19. package/src/migration/test.d.ts +3 -0
  20. package/src/migration/test.d.ts.map +1 -0
  21. package/src/migration/test.js +40 -0
  22. package/src/migration/test.js.map +1 -0
  23. package/src/migration/test.ts +43 -0
  24. package/src/parser/backup/engine.d.ts +16 -0
  25. package/src/parser/backup/engine.d.ts.map +1 -0
  26. package/src/parser/backup/engine.js +176 -0
  27. package/src/parser/backup/engine.js.map +1 -0
  28. package/src/parser/backup/engine.ts +201 -0
  29. package/src/parser/backup/index.d.ts +7 -0
  30. package/src/parser/backup/index.d.ts.map +1 -0
  31. package/src/parser/backup/index.js +29 -0
  32. package/src/parser/backup/index.js.map +1 -0
  33. package/src/parser/backup/index.ts +30 -0
  34. package/src/parser/constraint.d.ts +22 -0
  35. package/src/parser/constraint.d.ts.map +1 -0
  36. package/src/parser/constraint.js +160 -0
  37. package/src/parser/constraint.js.map +1 -0
  38. package/src/parser/constraint.ts +161 -0
  39. package/src/parser/def.d.ts +37 -0
  40. package/src/parser/def.d.ts.map +1 -0
  41. package/src/parser/def.js +4 -0
  42. package/src/parser/def.js.map +1 -0
  43. package/src/parser/def.ts +22 -0
  44. package/src/parser/dependencies.d.ts +3 -0
  45. package/src/parser/dependencies.d.ts.map +1 -0
  46. package/src/parser/dependencies.js +39 -0
  47. package/src/parser/dependencies.js.map +1 -0
  48. package/src/parser/dependencies.ts +43 -0
  49. package/src/parser/indexes.d.ts +13 -0
  50. package/src/parser/indexes.d.ts.map +1 -0
  51. package/src/parser/indexes.js +54 -0
  52. package/src/parser/indexes.js.map +1 -0
  53. package/src/parser/indexes.ts +57 -0
  54. package/src/parser/modelParser.d.ts +19 -0
  55. package/src/parser/modelParser.d.ts.map +1 -0
  56. package/src/parser/modelParser.js +24 -0
  57. package/src/parser/modelParser.js.map +1 -0
  58. package/src/parser/modelParser.ts +30 -0
  59. package/src/parser/notice.d.ts +2 -0
  60. package/src/parser/notice.d.ts.map +1 -0
  61. package/src/parser/notice.js +8 -0
  62. package/src/parser/notice.js.map +1 -0
  63. package/src/parser/notice.ts +5 -0
  64. package/src/parser/parser.d.ts +15 -0
  65. package/src/parser/parser.d.ts.map +1 -0
  66. package/src/parser/parser.js +72 -0
  67. package/src/parser/parser.js.map +1 -0
  68. package/src/parser/parser.ts +87 -0
  69. package/src/parser/shadow.d.ts +4 -0
  70. package/src/parser/shadow.d.ts.map +1 -0
  71. package/src/parser/shadow.js +21 -0
  72. package/src/parser/shadow.js.map +1 -0
  73. package/src/parser/shadow.ts +20 -0
  74. package/src/parser/sql.d.ts +3 -0
  75. package/src/parser/sql.d.ts.map +1 -0
  76. package/src/parser/sql.js +67 -0
  77. package/src/parser/sql.js.map +1 -0
  78. package/src/parser/sql.ts +74 -0
  79. package/src/parser/sys.d.ts +11 -0
  80. package/src/parser/sys.d.ts.map +1 -0
  81. package/src/parser/sys.js +54 -0
  82. package/src/parser/sys.js.map +1 -0
  83. package/src/parser/sys.ts +56 -0
  84. package/src/parser/table/engine.d.ts +7 -0
  85. package/src/parser/table/engine.d.ts.map +1 -0
  86. package/src/parser/table/engine.js +103 -0
  87. package/src/parser/table/engine.js.map +1 -0
  88. package/src/parser/table/engine.ts +106 -0
  89. package/src/parser/table/field.d.ts +8 -0
  90. package/src/parser/table/field.d.ts.map +1 -0
  91. package/src/parser/table/field.js +25 -0
  92. package/src/parser/table/field.js.map +1 -0
  93. package/src/parser/table/field.ts +22 -0
  94. package/src/parser/table.d.ts +8 -0
  95. package/src/parser/table.d.ts.map +1 -0
  96. package/src/parser/table.js +31 -0
  97. package/src/parser/table.js.map +1 -0
  98. package/src/parser/table.ts +30 -0
  99. package/src/utils/escape.d.ts +3 -0
  100. package/src/utils/escape.d.ts.map +1 -0
  101. package/src/utils/escape.js +59 -0
  102. package/src/utils/escape.js.map +1 -0
  103. package/src/utils/escape.ts +36 -0
  104. package/src/utils/sha.d.ts +2 -0
  105. package/src/utils/sha.d.ts.map +1 -0
  106. package/src/utils/sha.js +33 -0
  107. package/src/utils/sha.js.map +1 -0
  108. package/src/utils/sha.ts +6 -0
  109. package/src/utils/tabs.d.ts +2 -0
  110. package/src/utils/tabs.d.ts.map +1 -0
  111. package/src/utils/tabs.js +16 -0
  112. package/src/utils/tabs.js.map +1 -0
  113. package/src/utils/tabs.ts +14 -0
  114. package/tsconfig.json +81 -0
@@ -0,0 +1,176 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createFunctionRestoreSerial = createFunctionRestoreSerial;
4
+ exports.restoreBackupSQL = restoreBackupSQL;
5
+ exports.restoreSerialSQL = restoreSerialSQL;
6
+ const escape_1 = require("../../utils/escape");
7
+ const tabs_1 = require("../../utils/tabs");
8
+ const sys_1 = require("../sys");
9
+ const sha_1 = require("../../utils/sha");
10
+ const notice_1 = require("../notice");
11
+ function createFunctionRestoreSerial(opts) {
12
+ const sys = (0, escape_1.oid)(opts.sys);
13
+ const tab = " ";
14
+ return (0, tabs_1.noTab)([
15
+ `create or replace function ${sys}.restore_serial(
16
+ schema character varying,
17
+ source character varying,
18
+ shadow character varying,
19
+ temp character varying,
20
+ "from" character varying,
21
+ "to" character varying,
22
+ "seq" character varying
23
+ ) returns table( sequence character varying, counts int8 )
24
+ language plpgsql as $$
25
+ declare
26
+ begin
27
+ if exists(
28
+ select *
29
+ from pg_tables t
30
+ where t.schemaname = schema
31
+ and t.tablename = source
32
+ ) then
33
+ execute format( $statment$
34
+ select max( %I ) from %I.%I
35
+ $statment$, "from", schema, source )
36
+ into counts;
37
+
38
+ counts := coalesce( counts, 0 )+1;
39
+ -- example district_id_seq
40
+ sequence := coalesce( seq, format( '%I.%I', shadow, format( '%s_%s_seq', temp, "to" ) ) );
41
+ perform setval( sequence::regclass, counts, false );
42
+ end if;
43
+ return next;
44
+ end;
45
+ $$;`
46
+ ], tab);
47
+ }
48
+ function restoreBackupSQL(opts) {
49
+ 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;
50
+ const schema = (0, escape_1.oid)(opts.model.schema);
51
+ const source = (0, escape_1.oid)(opts.source);
52
+ const shadow = (0, escape_1.oid)(opts.parser.shadow);
53
+ const table = (0, escape_1.oid)(opts.model.name);
54
+ const temp = (0, escape_1.oid)(opts.model.temp);
55
+ if ((_b = (_a = opts.model.psm) === null || _a === void 0 ? void 0 : _a.backup) === null || _b === void 0 ? void 0 : _b.skip)
56
+ return null;
57
+ let filter = (field) => {
58
+ return !field.isGenerated
59
+ && field.kind === "scalar";
60
+ };
61
+ const columns = opts.model.fields.filter(filter)
62
+ .map(value => ` ${(0, escape_1.oid)(value.name)}`)
63
+ .join(", ");
64
+ const DEFAULT_QUERY = `select * from ${schema}.${source}`;
65
+ const DEFAULT_RESOLVER = opts.model.fields.filter(filter)
66
+ .map(value => {
67
+ return ` ${(0, escape_1.oid)(value.dbName || value.name)}`;
68
+ })
69
+ .join(", ");
70
+ const revision_resolver = opts.model.fields.filter(filter)
71
+ .map(field => {
72
+ var _a, _b;
73
+ let expression = (_b = (_a = field.psm) === null || _a === void 0 ? void 0 : _a.restore) === null || _b === void 0 ? void 0 : _b.expression;
74
+ if (!expression)
75
+ expression = ` ${(0, escape_1.oid)(field.dbName || field.name)}`;
76
+ return expression;
77
+ })
78
+ .join(", ");
79
+ let revision_query = DEFAULT_QUERY;
80
+ 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;
81
+ if (((_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.from) === "query"
82
+ && !!expression)
83
+ revision_query = expression;
84
+ else 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:linked"
85
+ && !!expression
86
+ && !!((_o = (_m = opts.model.psm) === null || _m === void 0 ? void 0 : _m.query) === null || _o === void 0 ? void 0 : _o[expression]))
87
+ revision_query = (_q = (_p = opts.model.psm) === null || _p === void 0 ? void 0 : _p.query) === null || _q === void 0 ? void 0 : _q[expression];
88
+ else if (((_t = (_s = (_r = opts.model.psm) === null || _r === void 0 ? void 0 : _r.backup) === null || _s === void 0 ? void 0 : _s.rev) === null || _t === void 0 ? void 0 : _t.from) === "model" && !!expression) {
89
+ let model = opts.parser.models.find(value => value.model === expression);
90
+ if (!!model)
91
+ revision_query = `select * from ${(0, escape_1.oid)(model.schema || "public")}.${(0, escape_1.oid)(model.dbName || model.name)}`;
92
+ }
93
+ const sys = (0, escape_1.oid)(opts.parser.sys);
94
+ let revision = "null";
95
+ const relation = `${schema}.${table}`;
96
+ 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.version)
97
+ revision = (0, escape_1.val)((_y = (_x = opts.model.psm) === null || _x === void 0 ? void 0 : _x.backup) === null || _y === void 0 ? void 0 : _y.rev.version);
98
+ let always_query = DEFAULT_QUERY;
99
+ let always_resolver = DEFAULT_RESOLVER;
100
+ if (((_1 = (_0 = (_z = opts.model.psm) === null || _z === void 0 ? void 0 : _z.backup) === null || _0 === void 0 ? void 0 : _0.rev) === null || _1 === void 0 ? void 0 : _1.apply) === "ALWAYS" && !!revision_query && !!revision_resolver) {
101
+ always_query = revision_query;
102
+ always_resolver = revision_resolver;
103
+ revision = `always-${opts.parser.migration}`;
104
+ }
105
+ const next = `
106
+ do $$
107
+ declare
108
+ _revision character varying := ${revision}::character varying;
109
+ _relation character varying := ${(0, escape_1.val)(relation)}::character varying;
110
+ begin
111
+ if _revision is not null and not exists(
112
+ select 1
113
+ from ${sys}.revision r
114
+ where r.revision = _revision
115
+ and operation = 'restore:data'
116
+ and relation = _relation
117
+ ) then
118
+ with __restore as (
119
+ ${revision_query}
120
+ ) insert into ${shadow}.${temp} (${columns})
121
+ select
122
+ ${revision_resolver}
123
+ from __restore r;
124
+ elsif _revision is null then
125
+ with __restore as (
126
+ ${always_query}
127
+ ) insert into ${shadow}.${temp} (${columns})
128
+ select
129
+ ${always_resolver}
130
+ from __restore r;
131
+ else
132
+ raise exception 'cannot restore revision';
133
+ end if;
134
+
135
+ ${(0, sys_1.createRevision)(opts.parser, {
136
+ revision: (_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.version,
137
+ relation: relation,
138
+ hash: (0, sha_1.migrationHash)(opts.parser.migration, `restore:data-${relation}`),
139
+ operation: `restore:data-${relation}`
140
+ }).join("\n")}
141
+ end;
142
+ $$;
143
+ `.split("\n")
144
+ .filter(value => !!value)
145
+ .map(value => {
146
+ if (value.startsWith(" "))
147
+ return value.substring(" ".length);
148
+ return value;
149
+ })
150
+ .join("\n");
151
+ return [
152
+ (0, notice_1.notice)(`CREATE BACKUP FOR MODEL ${opts.model.model}`),
153
+ next,
154
+ (0, notice_1.notice)(`CREATE BACKUP FOR MODEL ${opts.model.model} OK`),
155
+ ];
156
+ }
157
+ function restoreSerialSQL(opts) {
158
+ let seq = "null";
159
+ if (!!opts.seq)
160
+ seq = (0, escape_1.val)(opts.seq);
161
+ const args = [
162
+ ` schema := ${(0, escape_1.val)(opts.model.schema)}::character varying`,
163
+ ` source := ${(0, escape_1.val)(opts.source)}::character varying`,
164
+ ` shadow := ${(0, escape_1.val)(opts.parser.shadow)}::character varying`,
165
+ ` temp := ${(0, escape_1.val)(opts.model.temp)}::character varying`,
166
+ ` "from" := ${(0, escape_1.val)(opts.from)}::character varying`,
167
+ ` "to" := ${(0, escape_1.val)(opts.to)}::character varying`,
168
+ ` "seq" := ${seq}::character varying`,
169
+ ];
170
+ return [
171
+ (0, notice_1.notice)(`RESTORE SEQUENCE OF FIELD ${opts.to} FROM MODEL ${opts.model.model}`),
172
+ `select * from ${(0, escape_1.oid)(opts.parser.sys)}.restore_serial(\n ${args.join(",\n ")}\n);`,
173
+ (0, notice_1.notice)(`RESTORE SEQUENCE OF FIELD ${opts.to} FROM MODEL ${opts.model.model} OK`),
174
+ ];
175
+ }
176
+ //# sourceMappingURL=engine.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"engine.js","sourceRoot":"","sources":["engine.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,201 @@
1
+ import {FieldOption, ModelOptions} from "@prisma-psm/core";
2
+ import {oid, val} from "../../utils/escape";
3
+ import { noTab } from "../../utils/tabs";
4
+ import { PostgresParserOptions } from "../def";
5
+ import {createRevision} from "../sys";
6
+ import {migrationHash} from "../../utils/sha";
7
+ import {notice} from "../notice";
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(
14
+ schema character varying,
15
+ source character varying,
16
+ shadow character varying,
17
+ temp character varying,
18
+ "from" character varying,
19
+ "to" character varying,
20
+ "seq" character varying
21
+ ) returns table( sequence character varying, counts int8 )
22
+ language plpgsql as $$
23
+ declare
24
+ begin
25
+ if exists(
26
+ select *
27
+ from pg_tables t
28
+ where t.schemaname = schema
29
+ and t.tablename = source
30
+ ) then
31
+ execute format( $statment$
32
+ select max( %I ) from %I.%I
33
+ $statment$, "from", schema, source )
34
+ into counts;
35
+
36
+ counts := coalesce( counts, 0 )+1;
37
+ -- example district_id_seq
38
+ sequence := coalesce( seq, format( '%I.%I', shadow, format( '%s_%s_seq', temp, "to" ) ) );
39
+ perform setval( sequence::regclass, counts, false );
40
+ end if;
41
+ return next;
42
+ end;
43
+ $$;`
44
+ ], tab );
45
+ }
46
+
47
+
48
+ export interface RestoreOptions{
49
+ source:string
50
+ model:ModelOptions,
51
+ parser:PostgresParserOptions
52
+ }
53
+
54
+ export function restoreBackupSQL(opts:RestoreOptions ): string[] {
55
+ const schema = oid(opts.model.schema);
56
+ const source = oid(opts.source);
57
+ const shadow = oid(opts.parser.shadow);
58
+ const table = oid(opts.model.name);
59
+ const temp = oid(opts.model.temp);
60
+
61
+
62
+
63
+
64
+ if( opts.model.psm?.backup?.skip ) return null as any;
65
+
66
+ let filter = ( field:FieldOption)=>{
67
+ return !field.isGenerated
68
+ && field.kind === "scalar"
69
+ ;
70
+ }
71
+
72
+ const columns = opts.model.fields.filter( filter )
73
+ .map( value => ` ${oid(value.name)}` )
74
+ .join(", ")
75
+ ;
76
+
77
+ const DEFAULT_QUERY = `select * from ${schema}.${source}`;
78
+ const DEFAULT_RESOLVER = opts.model.fields.filter( filter )
79
+ .map( value => {
80
+ return ` ${oid(value.dbName||value.name)}`;
81
+ })
82
+ .join(", ")
83
+ ;
84
+
85
+ const revision_resolver = opts.model.fields.filter( filter )
86
+ .map( field => {
87
+
88
+ let expression = field.psm?.restore?.expression;
89
+ if( !expression ) expression = ` ${oid(field.dbName||field.name)}`;
90
+ return expression;
91
+ })
92
+ .join(", ")
93
+ ;
94
+
95
+ let revision_query = DEFAULT_QUERY;
96
+ const expression = opts.model.psm?.backup?.rev?.expression;
97
+ if( opts.model.psm?.backup?.rev?.from === "query"
98
+ && !!expression
99
+ ) revision_query = expression
100
+
101
+ else if( opts.model.psm?.backup?.rev?.from === "query:linked"
102
+ && !!expression
103
+ && !!opts.model.psm?.query?.[expression]
104
+ ) revision_query = opts.model.psm?.query?.[expression]
105
+
106
+ else if( opts.model.psm?.backup?.rev?.from === "model" && !!expression ){
107
+ let model = opts.parser.models.find( value => value.model === expression );
108
+ if( !!model ) revision_query = `select * from ${oid(model.schema||"public")}.${oid(model.dbName||model.name)}`
109
+ }
110
+
111
+ const sys = oid( opts.parser.sys );
112
+ let revision= "null";
113
+ const relation = `${schema}.${table}`;
114
+ if( opts.model.psm?.backup?.rev?.version ) revision = val( opts.model.psm?.backup?.rev.version );
115
+
116
+ let always_query = DEFAULT_QUERY;
117
+ let always_resolver = DEFAULT_RESOLVER;
118
+ if( opts.model.psm?.backup?.rev?.apply === "ALWAYS" && !!revision_query && !!revision_resolver) {
119
+ always_query = revision_query;
120
+ always_resolver = revision_resolver;
121
+ revision = `always-${opts.parser.migration}`;
122
+ }
123
+
124
+ const next = `
125
+ do $$
126
+ declare
127
+ _revision character varying := ${revision}::character varying;
128
+ _relation character varying := ${val(relation)}::character varying;
129
+ begin
130
+ if _revision is not null and not exists(
131
+ select 1
132
+ from ${sys}.revision r
133
+ where r.revision = _revision
134
+ and operation = 'restore:data'
135
+ and relation = _relation
136
+ ) then
137
+ with __restore as (
138
+ ${revision_query}
139
+ ) insert into ${shadow}.${temp} (${ columns })
140
+ select
141
+ ${revision_resolver}
142
+ from __restore r;
143
+ elsif _revision is null then
144
+ with __restore as (
145
+ ${always_query}
146
+ ) insert into ${shadow}.${temp} (${ columns })
147
+ select
148
+ ${always_resolver}
149
+ from __restore r;
150
+ else
151
+ raise exception 'cannot restore revision';
152
+ end if;
153
+
154
+ ${ createRevision( opts.parser, {
155
+ revision: opts.model.psm?.backup?.rev?.version,
156
+ relation: relation,
157
+ hash: migrationHash( opts.parser.migration, `restore:data-${relation}`),
158
+ operation: `restore:data-${relation}`
159
+ }).join("\n")}
160
+ end;
161
+ $$;
162
+ `.split("\n")
163
+ .filter( value => !!value )
164
+ .map( value => {
165
+ if( value.startsWith(" ") ) return value.substring(" ".length)
166
+ return value;
167
+ })
168
+ .join("\n");
169
+
170
+ return [
171
+ notice( `CREATE BACKUP FOR MODEL ${opts.model.model}` ),
172
+ next,
173
+ notice( `CREATE BACKUP FOR MODEL ${opts.model.model} OK` ),
174
+ ]
175
+ }
176
+
177
+ export interface RestoreSerialOptions extends RestoreOptions {
178
+ from:string
179
+ to:string
180
+ seq?:string
181
+ }
182
+ export function restoreSerialSQL( opts:RestoreSerialOptions) {
183
+ let seq = "null";
184
+ if( !!opts.seq ) seq = val( opts.seq );
185
+ const args = [
186
+ ` schema := ${val(opts.model.schema)}::character varying`,
187
+ ` source := ${val(opts.source)}::character varying`,
188
+ ` shadow := ${val(opts.parser.shadow)}::character varying`,
189
+ ` temp := ${val(opts.model.temp)}::character varying`,
190
+ ` "from" := ${val(opts.from)}::character varying`,
191
+ ` "to" := ${val(opts.to)}::character varying`,
192
+ ` "seq" := ${seq}::character varying`,
193
+ ];
194
+ return [
195
+ notice( `RESTORE SEQUENCE OF FIELD ${opts.to} FROM MODEL ${opts.model.model}`),
196
+ `select * from ${oid(opts.parser.sys)}.restore_serial(\n ${args.join(",\n ")}\n);`,
197
+ notice( `RESTORE SEQUENCE OF FIELD ${opts.to} FROM MODEL ${opts.model.model} OK`),
198
+ ];
199
+
200
+ }
201
+
@@ -0,0 +1,7 @@
1
+ import { ModelOptions } from "@prisma-psm/core";
2
+ import { PostgresParserOptions } from "../def";
3
+ export declare function backupParser(model: ModelOptions, parser: PostgresParserOptions): {
4
+ restore_backup: () => string[];
5
+ restore_serial: () => string[];
6
+ };
7
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,YAAY,EAAC,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAC,qBAAqB,EAAC,MAAM,QAAQ,CAAC;AAI7C,wBAAgB,YAAY,CAAE,KAAK,EAAC,YAAY,EAAE,MAAM,EAAC,qBAAqB;;;EAwB7E"}
@@ -0,0 +1,29 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.backupParser = backupParser;
4
+ const engine_1 = require("./engine");
5
+ const field_1 = require("../table/field");
6
+ function backupParser(model, parser) {
7
+ const fieldSQL = model.fields.map(field_1.fieldParser);
8
+ return {
9
+ restore_backup: () => (0, engine_1.restoreBackupSQL)({
10
+ source: model.name,
11
+ model: model,
12
+ parser: parser,
13
+ }),
14
+ restore_serial: () => {
15
+ const sequences = [];
16
+ fieldSQL.filter(f => f.serial).map(f => (0, engine_1.restoreSerialSQL)({
17
+ source: model.name,
18
+ parser: parser,
19
+ model: model,
20
+ from: f.name,
21
+ to: f.name,
22
+ })).forEach(value => {
23
+ sequences.push(...value);
24
+ });
25
+ return sequences;
26
+ },
27
+ };
28
+ }
29
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["index.ts"],"names":[],"mappings":";;AAKA,oCAwBC;AA3BD,qCAA4D;AAC5D,0CAA2C;AAE3C,SAAgB,YAAY,CAAE,KAAkB,EAAE,MAA4B;IAC1E,MAAM,QAAQ,GAAG,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,mBAAW,CAAC,CAAC;IAE/C,OAAO;QACH,cAAc,EAAE,GAAG,EAAE,CAAC,IAAA,yBAAgB,EAAC;YACnC,MAAM,EAAE,KAAK,CAAC,IAAI;YAClB,KAAK,EAAE,KAAK;YACZ,MAAM,EAAE,MAAM;SACjB,CAAC;QACF,cAAc,EAAE,GAAG,EAAE;YACjB,MAAM,SAAS,GAAY,EAAE,CAAC;YAE9B,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAE,IAAA,yBAAgB,EAAC;gBACtD,MAAM,EAAE,KAAK,CAAC,IAAI;gBAClB,MAAM,EAAE,MAAM;gBACd,KAAK,EAAE,KAAK;gBACZ,IAAI,EAAE,CAAC,CAAC,IAAI;gBACZ,EAAE,EAAE,CAAC,CAAC,IAAI;aACb,CAAC,CAAC,CAAC,OAAO,CAAE,KAAK,CAAC,EAAE;gBACjB,SAAS,CAAC,IAAI,CAAE,GAAG,KAAK,CAAE,CAAC;YAC/B,CAAC,CAAC,CAAC;YACH,OAAO,SAAS,CAAC;QACrB,CAAC;KACJ,CAAA;AACL,CAAC"}
@@ -0,0 +1,30 @@
1
+ import {ModelOptions} from "@prisma-psm/core";
2
+ import {PostgresParserOptions} from "../def";
3
+ import {restoreBackupSQL, restoreSerialSQL} from "./engine";
4
+ import {fieldParser} from "../table/field";
5
+
6
+ export function backupParser( model:ModelOptions, parser:PostgresParserOptions ){
7
+ const fieldSQL = model.fields.map(fieldParser);
8
+
9
+ return {
10
+ restore_backup: () => restoreBackupSQL({
11
+ source: model.name,
12
+ model: model,
13
+ parser: parser,
14
+ }),
15
+ restore_serial: () => {
16
+ const sequences:string[] = [];
17
+
18
+ fieldSQL.filter(f => f.serial).map(f => restoreSerialSQL({
19
+ source: model.name,
20
+ parser: parser,
21
+ model: model,
22
+ from: f.name,
23
+ to: f.name,
24
+ })).forEach( value => {
25
+ sequences.push( ...value );
26
+ });
27
+ return sequences;
28
+ },
29
+ }
30
+ }
@@ -0,0 +1,22 @@
1
+ import { PostgresParserOptions } from "./def";
2
+ import { ModelOptions } from "@prisma-psm/core";
3
+ export type ConstraintsOptions = {
4
+ model: ModelOptions;
5
+ name: string;
6
+ key: "primary" | "foreign" | "unique" | "check" | "index";
7
+ fields?: string[];
8
+ refModel?: string;
9
+ algorithm?: string;
10
+ refModelSchema?: string;
11
+ refFields?: string[];
12
+ parser: PostgresParserOptions;
13
+ };
14
+ export declare function constraintsParser(model: ModelOptions, parser: PostgresParserOptions): {
15
+ create_primary_keys: () => string[];
16
+ drop_primary_keys: () => string[];
17
+ create_foreign_key: () => string[];
18
+ drop_foreign_key: () => string[];
19
+ create_unique_key: () => string[];
20
+ drop_unique_key: () => string[];
21
+ };
22
+ //# sourceMappingURL=constraint.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constraint.d.ts","sourceRoot":"","sources":["constraint.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,qBAAqB,EAAC,MAAM,OAAO,CAAC;AAE5C,OAAO,EAAC,YAAY,EAAC,MAAM,kBAAkB,CAAC;AAG9C,MAAM,MAAM,kBAAkB,GAAG;IAC7B,KAAK,EAAC,YAAY,CAAC;IACnB,IAAI,EAAC,MAAM,CAAA;IACX,GAAG,EAAE,SAAS,GAAC,SAAS,GAAC,QAAQ,GAAC,OAAO,GAAC,OAAO,CAAC;IAClD,MAAM,CAAC,EAAC,MAAM,EAAE,CAAC;IACjB,QAAQ,CAAC,EAAC,MAAM,CAAA;IAChB,SAAS,CAAC,EAAC,MAAM,CAAA;IACjB,cAAc,CAAC,EAAC,MAAM,CAAA;IACtB,SAAS,CAAC,EAAC,MAAM,EAAE,CAAC;IACpB,MAAM,EAAC,qBAAqB,CAAA;CAC/B,CAAA;AAqCD,wBAAgB,iBAAiB,CAAE,KAAK,EAAC,YAAY,EAAE,MAAM,EAAC,qBAAqB;;;;;;;EA4GlF"}
@@ -0,0 +1,160 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.constraintsParser = constraintsParser;
4
+ const escape_1 = require("../utils/escape");
5
+ const notice_1 = require("./notice");
6
+ function resolver(parser, opts) {
7
+ var _a, _b;
8
+ const name = (0, escape_1.oid)(opts.name);
9
+ let refFields = "";
10
+ let fieldsId = "";
11
+ let refModel = "";
12
+ let refModelSchema = "";
13
+ if (!!((_a = opts.refFields) === null || _a === void 0 ? void 0 : _a.length))
14
+ refFields = opts.refFields.map(escape_1.oid).join(`, `);
15
+ if (!!((_b = opts.fields) === null || _b === void 0 ? void 0 : _b.length))
16
+ fieldsId = opts.fields.map(escape_1.oid).join(`, `);
17
+ if (!!opts.refModel)
18
+ refModel = (0, escape_1.oid)(opts.refModel);
19
+ if (!!opts.refModelSchema)
20
+ refModelSchema = (0, escape_1.oid)(opts.refModelSchema);
21
+ return {
22
+ create_primary: () => ([
23
+ (0, notice_1.notice)(`CREATE PRIMARY KEY ${name} OF MODEL ${opts.model.model}`),
24
+ `alter table if exists ${(0, escape_1.oid)(parser.shadow)}.${(0, escape_1.oid)(opts.model.temp)} add constraint ${name} primary key (${fieldsId});`,
25
+ (0, notice_1.notice)(`CREATE PRIMARY KEY ${name} OF MODEL ${opts.model.model} OK!`),
26
+ ]),
27
+ create_foreign: () => ([
28
+ (0, notice_1.notice)(`CREATE FOREIGN KEY ${name} OF MODEL ${opts.model.model}`),
29
+ `alter table if exists ${(0, escape_1.oid)(parser.shadow)}.${(0, escape_1.oid)(opts.model.temp)} add constraint ${name} foreign key (${fieldsId}) references ${refModelSchema}.${refModel} ( ${refFields} );`,
30
+ (0, notice_1.notice)(`CREATE FOREIGN KEY ${name} OF MODEL ${opts.model.model} OK!`),
31
+ ]),
32
+ create_unique: () => ([
33
+ (0, notice_1.notice)(`CREATE UNIQUE KEY ${name} OF MODEL ${opts.model.model}`),
34
+ `alter table if exists ${(0, escape_1.oid)(parser.shadow)}.${(0, escape_1.oid)(opts.model.temp)} add constraint ${name} unique (${fieldsId});`,
35
+ (0, notice_1.notice)(`CREATE UNIQUE KEY ${name} OF MODEL ${opts.model.model} OK!`),
36
+ ]),
37
+ drop: () => ([
38
+ (0, notice_1.notice)(`DROP CONSTRAINT KEY ${name} OF MODEL ${opts.model.model}`),
39
+ `alter table if exists ${(0, escape_1.oid)(opts.model.schema)}.${(0, escape_1.oid)(opts.model.name)} drop constraint if exists ${name};`,
40
+ (0, notice_1.notice)(`DROP CONSTRAINT KEY ${name} OF MODEL ${opts.model.model} OK!`),
41
+ ]),
42
+ };
43
+ }
44
+ function constraintsParser(model, parser) {
45
+ const primary = (() => {
46
+ var _a;
47
+ const index = model.indexes.find(value => value.type === "id");
48
+ if (!index)
49
+ return;
50
+ let localField = (_a = index.fields) === null || _a === void 0 ? void 0 : _a.map(next => {
51
+ const field = model.fields.find(value1 => value1.name === next.name);
52
+ if (!field)
53
+ return next.name;
54
+ return field.dbName || field.name;
55
+ });
56
+ let name = index.dbName || index.name;
57
+ if (!name)
58
+ name = `pk_${model.name}_${localField.join("_")}_by_prisma`;
59
+ return resolver(parser, {
60
+ key: "primary",
61
+ fields: localField,
62
+ name: name,
63
+ parser: parser,
64
+ model: model,
65
+ });
66
+ })();
67
+ const unique = model.indexes.filter(field => {
68
+ return field.type === "unique";
69
+ }).map(index => {
70
+ var _a;
71
+ let localField = (_a = index.fields) === null || _a === void 0 ? void 0 : _a.map(next => {
72
+ const field = model.fields.find(value1 => value1.name === next.name);
73
+ if (!field)
74
+ return next.name;
75
+ return field.dbName || field.name;
76
+ });
77
+ let name = index.dbName || index.name;
78
+ if (!name)
79
+ name = `uk_${model.name}_${localField.join("_")}_by_prisma`;
80
+ return resolver(parser, {
81
+ key: "unique",
82
+ fields: localField,
83
+ name: name,
84
+ parser: parser,
85
+ model: model
86
+ });
87
+ });
88
+ const foreign = model.fields.filter(field => {
89
+ var _a, _b;
90
+ return field.kind === "object"
91
+ && !!field.relationName
92
+ && ((_a = field.relationFromFields) === null || _a === void 0 ? void 0 : _a.length)
93
+ && ((_b = field.relationToFields) === null || _b === void 0 ? void 0 : _b.length);
94
+ }).map(next => {
95
+ var _a, _b, _c;
96
+ let localField = (_a = next.relationFromFields) === null || _a === void 0 ? void 0 : _a.map(name => {
97
+ const field = model.fields.find(value1 => value1.name === name);
98
+ if (!field)
99
+ return name;
100
+ return field.dbName || field.name;
101
+ });
102
+ let reference = parser.models.find(value => value.model === next.type);
103
+ if ((_b = reference === null || reference === void 0 ? void 0 : reference.psm) === null || _b === void 0 ? void 0 : _b.view)
104
+ return null;
105
+ let referenceField = (_c = next.relationToFields) === null || _c === void 0 ? void 0 : _c.map(name => {
106
+ if (!reference)
107
+ return name;
108
+ const field = reference.fields.find(value1 => value1.name === name);
109
+ if (!field)
110
+ return name;
111
+ return field.dbName || field.name;
112
+ });
113
+ let name = next.relationName;
114
+ let ref = reference === null || reference === void 0 ? void 0 : reference.name;
115
+ if (!name)
116
+ name = `fk_${model.name}_${referenceField === null || referenceField === void 0 ? void 0 : referenceField.join("_")}_to_${ref}_by_prisma`;
117
+ return resolver(parser, {
118
+ key: "foreign",
119
+ fields: localField,
120
+ name: name,
121
+ refModel: ref,
122
+ refFields: referenceField,
123
+ refModelSchema: (reference === null || reference === void 0 ? void 0 : reference.schema) || "public",
124
+ parser: parser,
125
+ model: model,
126
+ });
127
+ }).filter(value => !!value);
128
+ const maps = (list, key) => {
129
+ const fk = [];
130
+ if (!list)
131
+ return [];
132
+ list.forEach(value => {
133
+ if (!value)
134
+ return;
135
+ fk.push(...value === null || value === void 0 ? void 0 : value[key]());
136
+ });
137
+ return fk;
138
+ };
139
+ return {
140
+ create_primary_keys: () => {
141
+ return maps([primary], "create_primary");
142
+ },
143
+ drop_primary_keys: () => {
144
+ return maps([primary], "drop");
145
+ },
146
+ create_foreign_key: () => {
147
+ return maps(foreign, "create_foreign");
148
+ },
149
+ drop_foreign_key: () => {
150
+ return maps(foreign, "drop");
151
+ },
152
+ create_unique_key: () => {
153
+ return maps(unique, "create_unique");
154
+ },
155
+ drop_unique_key: () => {
156
+ return maps(unique, "drop");
157
+ },
158
+ };
159
+ }
160
+ //# sourceMappingURL=constraint.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constraint.js","sourceRoot":"","sources":["constraint.ts"],"names":[],"mappings":"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"}