@ez4/pgmigration 0.42.0 → 0.43.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.
package/dist/main.mjs CHANGED
@@ -1,134 +1,151 @@
1
- var te=Object.defineProperty;var m=(n,p)=>te(n,"name",{value:p,configurable:!0});import{SqlBuilder as V}from"@ez4/pgsql";import{deepEqual as F,deepCompareObject as ne,isAnyObject as L}from"@ez4/utils";
2
- import{isTableMetadata as G}from"@ez4/pgclient/library";import{isAnySchema as J}from"@ez4/schema";var H=m((n,p)=>ne(n,p,{onRename:m((f,y)=>!L(f)||!L(y)?!1:G(f)&&G(y)?re(f.schema,
3
- y.schema):J(f)&&J(y)?oe(f,y):!1,"onRename")}),"getTableRepositoryChanges"),re=m(
4
- (n,p)=>F(Object.keys(n.properties),Object.keys(p.properties)),"canRenameTable"),
5
- oe=m((n,p)=>F(n,p,{depth:1,include:{type:!0,definitions:!0,nullable:!0,format:!0}}),
6
- "canRenameColumn");import{isEnumSchema as W,isScalarSchema as X,SchemaType as $}from"@ez4/schema";import{
7
- isNotNullish as Y}from"@ez4/utils";var q=m((n,p)=>{let[f]=n.select().rawColumn("1").from("pg_constraint").where({conname:n.
8
- rawString(p)}).build();return f},"getCheckConstraintQuery"),K=m((n,p,f)=>{let[y]=n.
9
- select().rawColumn("1").where({NOT:{exists:n.select().from(n.rawValue("informati\
10
- on_schema.columns")).rawColumn("1").where({column_name:n.rawString(f),table_name:n.
11
- rawString(p)})}}).build();return y},"getCheckColumnQuery");import{toSnakeCase as se}from"@ez4/utils";var z=m((n,p)=>`${v(n,p)}_pk`,"getPrimaryKeyName"),D=m((n,p)=>`${v(n,p)}_uk`,"ge\
12
- tUniqueKeyName"),U=m((n,p)=>`${v(n,p)}_sk`,"getSecondaryKeyName"),T=m((n,p)=>`${v(
13
- n,p)}_fk`,"getRelationName"),C=m((n,p)=>`${v(n,p)}_ck`,"getConstraintName"),v=m(
14
- (n,p)=>`${n}_${se(p.replaceAll(":","_"))}`,"getName");var O;(c=>{c.prepareCreate=m((e,t,s)=>{let l=[];for(let r in s){let i=s[r];if(W(
15
- i)||X(i)&&Y(i.definitions?.value)){let a=C(t,r);l.push({check:q(e,a),query:g(e,t,
16
- a,r,i).build()})}}return l},"prepareCreate"),c.prepareUpdate=m((e,t,s,l,r)=>{let i=[];
17
- for(let a in r){let{update:h,create:x,remove:S}=r[a];if(S||h){let b=l.properties[a];
18
- if(o(b)){let R=C(t,a);i.push({query:u(e,t,R).build()})}}if(x||h){let b=s.properties[a];
19
- if(o(b)){let R=C(t,a);i.push({check:q(e,R),query:g(e,t,R,a,b).build()})}}}return i},
20
- "prepareUpdate"),c.prepareRenameTable=m((e,t,s,l)=>{let r=[];for(let i in l){let a=l[i];
21
- if(o(a)){let h=C(t,i),x=C(s,i),S=e.table(s).alter().existing().constraint(h).rename(
22
- x);r.push({check:q(e,x),query:S.build()})}}return r},"prepareRenameTable"),c.prepareRenameColumns=
23
- m((e,t,s,l)=>{let r=[];for(let i in l){let a=l[i],h=s[a];if(o(h)){let x=C(t,i),S=C(
24
- t,a),b=e.table(t).alter().existing().constraint(x).rename(S);r.push({check:q(e,S),
25
- query:b.build()})}}return r},"prepareRenameColumns"),c.prepareDelete=m((e,t,s)=>{
26
- let l=[];for(let r in s){let i=s[r];if(o(i)){let a=C(t,r);l.push({query:u(e,t,a).
27
- build()})}}return l},"prepareDelete");let o=m(e=>W(e)||X(e)&&Y(e.definitions?.value),
28
- "isConstrainedSchema"),u=m((e,t,s)=>e.table(t).alter().existing().constraint(s).
29
- drop().existing(),"getDeleteQuery"),g=m((e,t,s,l,r)=>{let i=e.table(t).alter().existing().
30
- constraint(s);switch(r.type){case $.Enum:{let a=r.options.map(({value:h})=>`${h}`);
31
- i.check({[l]:{isIn:a}});break}case $.Boolean:case $.Number:case $.String:{i.check(
32
- {[l]:{equal:r.definitions?.value}});break}}return i},"getCreateQuery")})(O||={});import{getTableName as ie}from"@ez4/pgclient/library";import{isNullishSchema as ae}from"@ez4/schema";
33
- import{Index as Z}from"@ez4/database";var B;(g=>{g.prepareCreate=m((c,e,t,s)=>{let l=[];for(let r in s){let i=s[r];if(d(
34
- i))continue;let{[i.targetColumn]:a}=t.properties,h=T(e,r),x=!!ae(a);l.push({check:q(
35
- c,h),query:u(c,e,h,i,x).build()})}return l},"prepareCreate"),g.prepareUpdate=m((c,e,t,s)=>{
36
- let l=[];for(let r in t){let i=t[r];if(d(i))continue;let a=s[i.targetColumn]?.update,
37
- h=a?.optional??a?.nullable;if(h===void 0)continue;let x=T(e,r);l.push({query:o(c,
38
- e,x).build()},{query:u(c,e,x,i,h).build()})}return l},"prepareUpdate"),g.prepareRename=
39
- m((c,e,t,s)=>{let l=[];for(let r in s){let i=s[r];if(d(i))continue;let a=T(e,r),
40
- h=T(t,r),x=c.table(t).alter().existing().constraint(a).rename(h);l.push({check:q(
41
- c,h),query:x.build()})}return l},"prepareRename"),g.prepareDelete=m((c,e,t)=>{let s=[];
42
- for(let l in t){let r=t[l];if(d(r))continue;let i=T(e,l);s.push({query:o(c,e,i).
43
- build()})}return s},"prepareDelete");let d=m(c=>{let{sourceIndex:e,targetIndex:t}=c;
44
- return!e||e===Z.Secondary||t===Z.Primary},"isNotRealRelation"),o=m((c,e,t)=>c.table(
45
- e).alter().existing().constraint(t).drop().existing(),"getDeleteQuery"),u=m((c,e,t,s,l)=>{
46
- let{sourceTable:r,sourceColumn:i,targetColumn:a}=s,h=ie(r),x=c.table(e).alter().
47
- existing().constraint(t).foreign(a,h,[i]);return l?x.delete().null():x.delete().
48
- cascade(),x.update().cascade(),x},"getCreateQuery")})(B||={});import{SchemaType as Q}from"@ez4/schema";import{Index as N}from"@ez4/database";var j;(o=>{o.prepareCreate=m((u,g,c,e,t)=>{let s={constraints:[],indexes:[]};for(let l in e){
49
- let{columns:r,type:i}=e[l];switch(i){default:throw new Error("Unsupported index \
50
- type.");case N.Primary:{let a=z(g,l),h=u.table(g).alter().existing().constraint(
51
- a).primary(r);s.constraints.push({check:q(u,a),query:h.build()});break}case N.Unique:{
52
- let a=D(g,l),h=u.table(g).alter().existing().constraint(a).unique(r);s.constraints.
53
- push({check:q(u,a),query:h.build()});break}case N.Secondary:{let a=U(g,l),h=d(r,
54
- c),x=u.index(a).create(g,r).type(h).missing();t&&x.concurrent(),s.indexes.push({
55
- query:x.build()});break}}}return s},"prepareCreate"),o.prepareUpdate=m((u,g,c,e,t,s,l)=>{
56
- let r={constraints:[],indexes:[]};for(let i in s){let{update:a,create:h,remove:x}=s[i];
57
- if(x||a){let S=(0,o.prepareDelete)(u,g,{[i]:e[i]});r.constraints.push(...S.constraints),
58
- r.indexes.push(...S.indexes)}if(h||a){let S=(0,o.prepareCreate)(u,g,c,{[i]:t[i]},
59
- l);r.constraints.push(...S.constraints),r.indexes.push(...S.indexes)}}return r},
60
- "prepareUpdate"),o.prepareRename=m((u,g,c,e)=>{let t={constraints:[],indexes:[]};
61
- for(let s in e){let{type:l}=e[s];switch(l){default:throw new Error("Unsupported \
62
- index type.");case N.Primary:{let r=z(g,s),i=z(c,s),a=u.table(c).alter().existing().
63
- constraint(r).rename(i);t.constraints.push({check:q(u,i),query:a.build()});break}case N.
64
- Unique:{let r=D(g,s),i=D(c,s),a=u.table(c).alter().existing().constraint(r).rename(
65
- i);t.constraints.push({check:q(u,i),query:a.build()});break}case N.Secondary:{let r=U(
66
- g,s),i=U(c,s),a=u.index(r).rename(i).existing();t.indexes.push({query:a.build()});
67
- break}}}return t},"prepareRename"),o.prepareDelete=m((u,g,c)=>{let e={constraints:[],
68
- indexes:[]};for(let t in c){let{type:s}=c[t];switch(s){default:throw new Error("\
69
- Unsupported index type.");case N.Primary:{let l=z(g,t),r=u.table(g).alter().existing().
70
- constraint(l).drop().existing();e.constraints.push({query:r.build()});break}case N.
71
- Unique:{let l=D(g,t),r=u.table(g).alter().existing().constraint(l).drop().existing();
72
- e.constraints.push({query:r.build()});break}case N.Secondary:{let l=U(g,t),r=u.index(
73
- l).drop().existing().concurrent();e.indexes.push({query:r.build()});break}}}return e},
74
- "prepareDelete");let d=m((u,g)=>{if(u.length===1){let[c]=u;switch(g.properties[c]?.
75
- type){case Q.Object:case Q.Union:case Q.Array:case Q.Tuple:return"GIN"}}return"B\
76
- TREE"},"getIndexType")})(j||={});import{Index as ee}from"@ez4/database";import{isArraySchema as ce,isEnumSchema as me,isObjectSchema as pe,isScalarSchema as ue,
77
- isStringSchema as le,isTupleSchema as de,SchemaType as P}from"@ez4/schema";import{
78
- isAnyNumber as ge}from"@ez4/utils";var M=m(n=>!!(n.nullable||n.optional),"isOptionalColumn"),I=m((n,p)=>{if(ue(n)||
79
- pe(n)||ce(n)||de(n)){let{definitions:f}=n;switch(typeof f?.default){case"boolean":case"\
80
- number":return`${f.default}`;case"string":return`'${f.default}'`;case"object":return`\
81
- '${JSON.stringify(f.default)}'`}}if(me(n)){let{definitions:f}=n;if(f?.default)return`\
82
- '${f.default}'`}if(le(n)&&p)switch(n.format){case"date-time":case"date":case"tim\
83
- e":return"now()";case"uuid":return"gen_random_uuid()"}if(M(n))return"null"},"get\
84
- ColumnDefault"),_=m((n,p)=>{switch(n.type){case P.Array:case P.Object:case P.Reference:case P.
85
- Union:case P.Tuple:return"jsonb";case P.Boolean:return"boolean";case P.Enum:return"\
86
- text";case P.Number:return fe(n,p);case P.String:return ye(n)}},"getColumnType"),
87
- fe=m((n,p)=>n.format==="integer"?p?"bigserial":"bigint":"decimal","getColumNumbe\
88
- rType"),ye=m(n=>{switch(n.format){case"uuid":case"time":case"date":return n.format;case"\
89
- date-time":return"timestamptz";default:let p=n.definitions?.maxLength;return ge(
90
- p)?`varchar(${p})`:"text"}},"getColumnTextType");var A;(d=>(d.prepareCreate=m((o,u,g,c)=>{let e=o.table(u).alter().existing();for(let t in c){
91
- let s=c[t],r=g[t]?.type===ee.Primary,i=!M(s),a=_(s,r),h=I(s,r);e.add(t,a,i,h).missing()}
92
- return{query:e.build()}},"prepareCreate"),d.prepareUpdate=m((o,u,g,c,e)=>{let t=[];
93
- for(let s in e){let{create:l,update:r,nested:i,remove:a}=e[s],h=g.properties[s],
94
- S=c[s]?.type===ee.Primary,b=o.table(u).alter().existing().column(s);if(l){let R=l.
95
- definitions?.default,k=l?.nullable;R!==void 0&&b.default(I(h,S)),k!==void 0&&b.optional(
96
- k)}if(r||i){let R=i?.definitions?.update?.default,k=r?.nullable;r?.type!==void 0&&
97
- b.type(_(h,S)),R!==void 0&&b.default(I(h,S)),k!==void 0&&b.optional(k)}if(a){let R=a.
98
- definitions?.default,k=a?.nullable;R!==void 0&&b.default(null),k!==void 0&&b.optional(
99
- k)}b.empty||t.push({check:K(o,u,s),query:b.build()})}return t},"prepareUpdate"),
100
- d.prepareRename=m((o,u,g)=>{let c=[];for(let e in g){let t=g[e],s=o.table(u).alter().
101
- existing().rename(e,t);c.push({check:K(o,u,e),query:s.build()})}return c},"prepa\
102
- reRename"),d.prepareDelete=m((o,u,g)=>{let c=o.table(u).alter().existing();for(let e in g)
103
- c.drop(e).existing();return{query:c.build()}},"prepareDelete")))(A||={});import{Index as he}from"@ez4/database";var E;(y=>(y.prepareCreate=m((d,o,u,g)=>{let c=d.table(o).create().missing();for(let e in u.
104
- properties){let t=u.properties[e],l=g[e]?.type===he.Primary,r=!M(t),i=_(t,l),a=I(
105
- t,l);c.column(e,i,r,a).missing()}return{query:c.build()}},"prepareCreate"),y.prepareRename=
106
- m((d,o,u)=>({query:d.table(o).rename(u).existing().build()}),"prepareRename"),y.
107
- prepareDelete=m((d,o)=>({query:d.table(o).drop().existing().cascade().build()}),
108
- "prepareDelete")))(E||={});var xe=m(n=>{let p=new V,f={tables:[],constraints:[],relations:[],indexes:[]};for(let y in n){
109
- let{name:d,schema:o,indexes:u,relations:g}=n[y];f.tables.push(E.prepareCreate(p,
110
- d,o,u)),f.constraints.push(...O.prepareCreate(p,d,o.properties)),f.relations.push(
111
- ...B.prepareCreate(p,d,o,g)),w(f,j.prepareCreate(p,d,o,u,!1))}return f},"getCrea\
112
- teQueries"),ht=m((n,p)=>{let f=H(n,p),y=new V,d={tables:[],constraints:[],relations:[],
113
- indexes:[]};if(f.create&&w(d,xe(f.create)),f.rename)for(let o in f.rename){let u=f.
114
- rename[o],g=n[u].indexes,c=n[u].relations,e=n[u].schema;d.tables.push(E.prepareRename(
115
- y,o,u)),d.constraints.push(...O.prepareRenameTable(y,o,u,e.properties)),d.relations.
116
- push(...B.prepareRename(y,o,u,c)),w(d,j.prepareRename(y,o,u,g))}if(f.nested)for(let o in f.
117
- nested){let{nested:u}=f.nested[o];if(!u)continue;let{schema:g,relations:c,indexes:e}=u,
118
- t=g?.nested?.properties,s=n[o].relations,l=p[o].indexes,r=n[o].indexes,i=p[o].schema,
119
- a=n[o].schema;t?.create&&(d.tables.push(A.prepareCreate(y,o,r,t.create)),d.constraints.
120
- push(...O.prepareCreate(y,o,t.create))),t?.nested&&(d.tables.push(...A.prepareUpdate(
121
- y,o,a,r,t.nested)),d.constraints.push(...O.prepareUpdate(y,o,a,i,t.nested)),d.relations.
122
- push(...B.prepareUpdate(y,o,s,t.nested))),t?.rename&&(d.tables.push(...A.prepareRename(
123
- y,o,t.rename)),d.constraints.push(...O.prepareRenameColumns(y,o,a.properties,t.rename))),
124
- t?.remove&&(d.tables.push(A.prepareDelete(y,o,t.remove)),d.constraints.push(...O.
125
- prepareDelete(y,o,t.remove))),e?.create&&w(d,j.prepareCreate(y,o,a,e.create,!0)),
126
- e?.nested&&w(d,j.prepareUpdate(y,o,a,l,r,e.nested,!0)),e?.remove&&w(d,j.prepareDelete(
127
- y,o,e.remove)),c?.create&&d.relations.push(...B.prepareCreate(y,o,a,c.create)),c?.
128
- remove&&d.relations.push(...B.prepareDelete(y,o,c.remove))}return f.remove&&w(d,
129
- Se(f.remove)),d},"getUpdateQueries"),Se=m(n=>{let p=new V,f={tables:[],constraints:[],
130
- relations:[],indexes:[]};for(let y in n){let{name:d}=n[y];f.tables.push(E.prepareDelete(
131
- p,d))}return f},"getDeleteQueries"),w=m((n,p)=>{p.indexes&&n.indexes.push(...p.indexes),
132
- p.constraints&&n.constraints.push(...p.constraints),p.relations&&n.relations.push(
133
- ...p.relations),p.tables&&n.tables.push(...p.tables)},"combineQueries");export{xe as getCreateQueries,Se as getDeleteQueries,ht as getUpdateQueries};
1
+ var re=Object.defineProperty;var c=(t,m)=>re(t,"name",{value:m,configurable:!0});import{SqlBuilder as L}from"@ez4/pgsql";import{deepEqual as W,deepCompareObject as oe,isAnyObject as G,toSnakeCase as J}from"@ez4/utils";
2
+ import{isTableMetadata as F}from"@ez4/pgclient/library";import{isAnySchema as H}from"@ez4/schema";var X=c((t,m)=>oe(t,m,{onSimilarName:c((y,h)=>{let g=new Set(J(y).split("_")),p=new Set(
3
+ J(h).split("_"));for(let f of p)if(f.length>1&&g.has(f))return!0;return!1},"onSi\
4
+ milarName"),onRename:c((y,h)=>!G(y)||!G(h)?!1:F(y)&&F(h)?se(y.schema,h.schema):H(
5
+ y)&&H(h)?ie(y,h):!1,"onRename")}),"getTableRepositoryChanges"),se=c((t,m)=>W(Object.
6
+ keys(t.properties),Object.keys(m.properties)),"canRenameTable"),ie=c((t,m)=>W(t,
7
+ m,{depth:1,include:{type:!0,definitions:!0,nullable:!0,format:!0}}),"canRenameCo\
8
+ lumn");import{isEnumSchema as Y,isScalarSchema as Z,SchemaType as $}from"@ez4/schema";import{
9
+ isNotNullish as ee}from"@ez4/utils";var R=c((t,m)=>{let[y]=t.select().rawColumn("1").from("pg_constraint").where({conname:t.
10
+ rawString(m)}).build();return y},"getCheckConstraintQuery"),V=c((t,m,y)=>{let[h]=t.
11
+ select().rawColumn("1").where({NOT:{exists:t.select().from(t.rawValue("informati\
12
+ on_schema.columns")).rawColumn("1").where({column_name:t.rawString(y),table_name:t.
13
+ rawString(m)})}}).build();return h},"getCheckColumnQuery"),K=c((t,m)=>{let[y]=t.
14
+ select().rawColumn("1").from("pg_constraint").where({convalidated:t.rawValue("tr\
15
+ ue"),conname:t.rawString(m)}).build();return y},"getCheckConstraintValidatedQuer\
16
+ y");import{toSnakeCase as ae}from"@ez4/utils";var A=c((t,m)=>`${D(t,m)}_pk`,"getPrimaryKeyName"),z=c((t,m)=>`${D(t,m)}_uk`,"ge\
17
+ tUniqueKeyName"),M=c((t,m)=>`${D(t,m)}_sk`,"getSecondaryKeyName"),j=c((t,m)=>`${D(
18
+ t,m)}_fk`,"getRelationName"),N=c((t,m)=>`${D(t,m)}_ck`,"getConstraintName"),D=c(
19
+ (t,m)=>`${t}_${ae(m.replaceAll(":","_"))}`,"getName");var v;(r=>{r.prepareCreate=c((e,n,d)=>{let a={constraints:[],validations:[]};for(let i in d){
20
+ let o=d[i];if(Y(o)||Z(o)&&ee(o.definitions?.value)){let u=N(n,i);a.constraints.push(
21
+ {check:R(e,u),query:s(e,n,u,i,o).build()}),a.validations.push({check:K(e,u),query:l(
22
+ e,n,u).build(),name:u})}}return a},"prepareCreate"),r.prepareUpdate=c((e,n,d,a,i)=>{
23
+ let o={constraints:[],validations:[]};for(let u in i){let{update:S,create:x,remove:q}=i[u];
24
+ if(q||S){let C=a.properties[u];if(p(C)){let b=N(n,u);o.constraints.push({query:f(
25
+ e,n,b).build()})}}if(x||S){let C=d.properties[u];if(p(C)){let b=N(n,u);o.constraints.
26
+ push({check:R(e,b),query:s(e,n,b,u,C).build()}),o.validations.push({check:K(e,b),
27
+ query:l(e,n,b).build(),name:b})}}}return o},"prepareUpdate"),r.prepareRenameTable=
28
+ c((e,n,d,a)=>{let i=[];for(let o in a){let u=a[o];if(p(u)){let S=N(n,o),x=N(d,o),
29
+ q=e.table(d).alter().existing().constraint(S).rename(x);i.push({check:R(e,x),query:q.
30
+ build()})}}return i},"prepareRenameTable"),r.prepareRenameColumns=c((e,n,d,a)=>{
31
+ let i=[];for(let o in a){let u=a[o],S=d[u];if(p(S)){let x=N(n,o),q=N(n,u),C=e.table(
32
+ n).alter().existing().constraint(x).rename(q);i.push({check:R(e,q),query:C.build()})}}
33
+ return i},"prepareRenameColumns"),r.prepareDelete=c((e,n,d)=>{let a=[];for(let i in d){
34
+ let o=d[i];if(p(o)){let u=N(n,i);a.push({query:f(e,n,u).build()})}}return a},"pr\
35
+ epareDelete");let p=c(e=>Y(e)||Z(e)&&ee(e.definitions?.value),"isConstrainedSche\
36
+ ma"),f=c((e,n,d)=>e.table(n).alter().existing().constraint(d).drop().existing(),
37
+ "getDeleteQuery"),l=c((e,n,d)=>e.table(n).alter().existing().constraint(d).validate(),
38
+ "getValidationQuery"),s=c((e,n,d,a,i)=>{let o=e.table(n).alter().existing().constraint(
39
+ d);switch(i.type){case $.Enum:{let u=i.options.map(({value:x})=>`${x}`);o.check(
40
+ {[a]:{isIn:u}}).validate(!1);break}case $.Boolean:case $.Number:case $.String:{o.
41
+ check({[a]:{equal:i.definitions?.value}}).validate(!1);break}}return o},"getCrea\
42
+ teQuery")})(v||={});import{getTableName as ce}from"@ez4/pgclient/library";import{isNullishSchema as me}from"@ez4/schema";
43
+ import{Index as te}from"@ez4/database";var O;(l=>{l.prepareCreate=c((s,r,e,n)=>{let d=[];for(let a in n){let i=n[a];if(g(
44
+ i))continue;let{[i.targetColumn]:o}=e.properties,u=j(r,a),S=!!me(o);d.push({check:R(
45
+ s,u),query:f(s,r,u,i,S).build()})}return d},"prepareCreate"),l.prepareUpdate=c((s,r,e,n)=>{
46
+ let d=[];for(let a in e){let i=e[a];if(g(i))continue;let o=n[i.targetColumn]?.update,
47
+ u=o?.optional??o?.nullable;if(u===void 0)continue;let S=j(r,a);d.push({query:p(s,
48
+ r,S).build()},{query:f(s,r,S,i,u).build()})}return d},"prepareUpdate"),l.prepareRename=
49
+ c((s,r,e,n)=>{let d=[];for(let a in n){let i=n[a];if(g(i))continue;let o=j(r,a),
50
+ u=j(e,a),S=s.table(e).alter().existing().constraint(o).rename(u);d.push({check:R(
51
+ s,u),query:S.build()})}return d},"prepareRename"),l.prepareDelete=c((s,r,e)=>{let n=[];
52
+ for(let d in e){let a=e[d];if(g(a))continue;let i=j(r,d);n.push({query:p(s,r,i).
53
+ build()})}return n},"prepareDelete");let g=c(s=>{let{sourceIndex:r,targetIndex:e}=s;
54
+ return!r||r===te.Secondary||e===te.Primary},"isNotRealRelation"),p=c((s,r,e)=>s.
55
+ table(r).alter().existing().constraint(e).drop().existing(),"getDeleteQuery"),f=c(
56
+ (s,r,e,n,d)=>{let{sourceTable:a,sourceColumn:i,targetColumn:o}=n,u=ce(a),S=s.table(
57
+ r).alter().existing().constraint(e),x=S.foreign(o,u,[i]).validate(!1);return d?x.
58
+ delete().null():x.delete().cascade(),x.update().cascade(),S},"getCreateQuery")})(
59
+ O||={});import{SchemaType as E}from"@ez4/schema";import{Index as w}from"@ez4/database";var B;(f=>{f.prepareCreate=c((l,s,r,e)=>{let n={constraints:[],validations:[],indexes:[]};
60
+ for(let d in e){let{columns:a,type:i,name:o}=e[d];switch(i){default:throw new Error(
61
+ "Unsupported index type.");case w.Primary:{let u=A(s,o);n.constraints.push({check:R(
62
+ l,u),query:l.table(s).alter().existing().constraint(u).primary(a).build()});break}case w.
63
+ Unique:{let u=z(s,o),S=p(a,r);n.indexes.push({query:l.index(u).create(s,a).type(
64
+ S).unique().concurrent().missing().build()}),n.validations.push({query:(0,f.getValidationQuery)(
65
+ l,u),name:u});break}case w.Secondary:{let u=M(s,o),S=p(a,r);n.indexes.push({query:l.
66
+ index(u).create(s,a).type(S).concurrent().missing().build()}),n.validations.push(
67
+ {query:(0,f.getValidationQuery)(l,u),name:u});break}}}return n},"prepareCreate"),
68
+ f.prepareUpdate=c((l,s,r,e,n,d)=>{let a={constraints:[],validations:[],indexes:[]};
69
+ for(let i in d){let{update:o,create:u,remove:S}=d[i];if(S||o){let x=(0,f.prepareDelete)(
70
+ l,s,{[i]:e[i]});a.constraints.push(...x.constraints),a.indexes.push(...x.indexes)}
71
+ if(u||o){let x=(0,f.prepareCreate)(l,s,r,{[i]:n[i]});a.constraints.push(...x.constraints),
72
+ a.indexes.push(...x.indexes)}}return a},"prepareUpdate"),f.prepareRename=c((l,s,r,e)=>{
73
+ let n={validations:[],constraints:[],indexes:[]};for(let d in e){let{type:a,name:i}=e[d];
74
+ switch(a){default:throw new Error("Unsupported index type.");case w.Primary:{let o=A(
75
+ s,i),u=A(r,i);n.constraints.push({check:R(l,u),query:l.table(r).alter().existing().
76
+ constraint(o).rename(u).build()});break}case w.Unique:{let o=z(s,i),u=z(r,i);n.indexes.
77
+ push({query:l.index(o).rename(u).existing().build()});break}case w.Secondary:{let o=M(
78
+ s,i),u=M(r,i);n.indexes.push({query:l.index(o).rename(u).existing().build()});break}}}
79
+ return n},"prepareRename"),f.prepareDelete=c((l,s,r)=>{let e={validations:[],constraints:[],
80
+ indexes:[]};for(let n in r){let{type:d,name:a}=r[n];switch(d){default:throw new Error(
81
+ "Unsupported index type.");case w.Primary:{let i=A(s,a),o=l.table(s).alter().existing().
82
+ constraint(i).drop().existing();e.constraints.push({query:o.build()});break}case w.
83
+ Unique:{let i=z(s,a),o=l.index(i).drop().existing().concurrent();e.indexes.push(
84
+ {query:o.build()});break}case w.Secondary:{let i=M(s,a),o=l.index(i).drop().existing().
85
+ concurrent();e.indexes.push({query:o.build()});break}}}return e},"prepareDelete"),
86
+ f.getValidationQuery=c((l,s)=>{let[r]=l.select().rawColumn("1").from("pg_index").
87
+ where({indexrelid:l.rawValue(`${l.rawString(s).build()}::regclass`),indisvalid:l.
88
+ rawValue("false"),indisready:l.rawValue("true")}).build();return r},"getValidati\
89
+ onQuery");let p=c((l,s)=>{if(l.length===1){let[r]=l;switch(s.properties[r]?.type){case E.
90
+ Object:case E.Union:case E.Array:case E.Tuple:return"GIN"}}return"BTREE"},"getIn\
91
+ dexType")})(B||={});import{Index as ne}from"@ez4/database";import{isArraySchema as pe,isEnumSchema as ue,isObjectSchema as le,isScalarSchema as de,
92
+ isStringSchema as ge,isTupleSchema as fe,SchemaType as k}from"@ez4/schema";import{
93
+ isAnyNumber as ye}from"@ez4/utils";var U=c(t=>!!(t.nullable||t.optional),"isOptionalColumn"),T=c((t,m)=>{if(de(t)||
94
+ le(t)||pe(t)||fe(t)){let{definitions:y}=t;switch(typeof y?.default){case"boolean":case"\
95
+ number":return`${y.default}`;case"string":return`'${y.default}'`;case"object":return`\
96
+ '${JSON.stringify(y.default)}'`}}if(ue(t)){let{definitions:y}=t;if(y?.default)return`\
97
+ '${y.default}'`}if(ge(t)&&m)switch(t.format){case"date-time":case"date":case"tim\
98
+ e":return"now()";case"uuid":return"gen_random_uuid()"}if(U(t))return"null"},"get\
99
+ ColumnDefault"),_=c((t,m)=>{switch(t.type){case k.Array:case k.Object:case k.Reference:case k.
100
+ Union:case k.Tuple:return"jsonb";case k.Boolean:return"boolean";case k.Enum:return"\
101
+ text";case k.Number:return he(t,m);case k.String:return xe(t)}},"getColumnType"),
102
+ he=c((t,m)=>t.format==="integer"?m?"bigserial":"bigint":"decimal","getColumNumbe\
103
+ rType"),xe=c(t=>{switch(t.format){case"uuid":case"time":case"date":return t.format;case"\
104
+ date-time":return"timestamptz";default:let m=t.definitions?.maxLength;return ye(
105
+ m)?`varchar(${m})`:"text"}},"getColumnTextType");var I;(g=>(g.prepareCreate=c((p,f,l,s)=>{let r=p.table(f).alter().existing();for(let e in s){
106
+ let n=s[e],a=l[e]?.type===ne.Primary,i=!U(n),o=_(n,a),u=T(n,a);r.add(e,o,i,u).missing()}
107
+ return{query:r.build()}},"prepareCreate"),g.prepareUpdate=c((p,f,l,s,r)=>{let e=[];
108
+ for(let n in r){let{create:d,update:a,nested:i,remove:o}=r[n],u=l.properties[n],
109
+ x=s[n]?.type===ne.Primary,q=p.table(f).alter().existing().column(n);if(d){let C=d.
110
+ definitions?.default,b=d?.nullable;C!==void 0&&q.default(T(u,x)),!x&&b!==void 0&&
111
+ q.optional(b)}if(a||i){let C=i?.definitions?.update?.default,b=a?.nullable;a?.type!==
112
+ void 0&&q.type(_(u,x)),C!==void 0&&q.default(T(u,x)),!x&&b!==void 0&&q.optional(
113
+ b)}if(o){let C=o.definitions?.default,b=o?.nullable;C!==void 0&&q.default(null),
114
+ !x&&b!==void 0&&q.optional(b)}q.empty||e.push({check:V(p,f,n),query:q.build()})}
115
+ return e},"prepareUpdate"),g.prepareRename=c((p,f,l)=>{let s=[];for(let r in l){
116
+ let e=l[r],n=p.table(f).alter().existing().rename(r,e);s.push({check:V(p,f,r),query:n.
117
+ build()})}return s},"prepareRename"),g.prepareDelete=c((p,f,l)=>{let s=p.table(f).
118
+ alter().existing();for(let r in l)s.drop(r).existing();return{query:s.build()}},
119
+ "prepareDelete")))(I||={});import{Index as Se}from"@ez4/database";var Q;(h=>(h.prepareCreate=c((g,p,f,l)=>{let s=g.table(p).create().missing();for(let r in f.
120
+ properties){let e=f.properties[r],d=l[r]?.type===Se.Primary,a=!U(e),i=_(e,d),o=T(
121
+ e,d);s.column(r,i,a,o).missing()}return{query:s.build()}},"prepareCreate"),h.prepareRename=
122
+ c((g,p,f)=>({query:g.table(p).rename(f).existing().build()}),"prepareRename"),h.
123
+ prepareDelete=c((g,p)=>({query:g.table(p).drop().existing().cascade().build()}),
124
+ "prepareDelete")))(Q||={});var qe=c(t=>{let m=new L,y={tables:[],constraints:[],validations:[],relations:[],
125
+ indexes:[]};for(let h in t){let{name:g,schema:p,indexes:f,relations:l}=t[h];y.tables.
126
+ push(Q.prepareCreate(m,g,p,f)),y.relations.push(...O.prepareCreate(m,g,p,l)),P(y,
127
+ v.prepareCreate(m,g,p.properties)),P(y,B.prepareCreate(m,g,p,f))}return y},"getC\
128
+ reateQueries"),St=c((t,m)=>{let y=X(t,m),h=new L,g={tables:[],constraints:[],validations:[],
129
+ relations:[],indexes:[]};if(y.create&&P(g,qe(y.create)),y.rename)for(let p in y.
130
+ rename){let f=y.rename[p],l=t[f].indexes,s=t[f].relations,r=t[f].schema;g.tables.
131
+ push(Q.prepareRename(h,p,f)),g.constraints.push(...v.prepareRenameTable(h,p,f,r.
132
+ properties)),g.relations.push(...O.prepareRename(h,p,f,s)),P(g,B.prepareRename(h,
133
+ p,f,l))}if(y.nested)for(let p in y.nested){let{nested:f}=y.nested[p];if(!f)continue;
134
+ let{schema:l,relations:s,indexes:r}=f,e=l?.nested?.properties,n=t[p].relations,d=m[p].
135
+ indexes,a=t[p].indexes,i=m[p].schema,o=t[p].schema;e?.create&&(g.tables.push(I.prepareCreate(
136
+ h,p,a,e.create)),P(g,v.prepareCreate(h,p,e.create))),e?.nested&&(g.tables.push(...I.
137
+ prepareUpdate(h,p,o,a,e.nested)),P(g,v.prepareUpdate(h,p,o,i,e.nested)),g.relations.
138
+ push(...O.prepareUpdate(h,p,n,e.nested))),e?.rename&&(g.tables.push(...I.prepareRename(
139
+ h,p,e.rename)),g.constraints.push(...v.prepareRenameColumns(h,p,o.properties,e.rename))),
140
+ e?.remove&&(g.tables.push(I.prepareDelete(h,p,e.remove)),g.constraints.push(...v.
141
+ prepareDelete(h,p,e.remove))),r?.create&&P(g,B.prepareCreate(h,p,o,r.create)),r?.
142
+ nested&&P(g,B.prepareUpdate(h,p,o,d,a,r.nested)),r?.remove&&P(g,B.prepareDelete(
143
+ h,p,r.remove)),s?.create&&g.relations.push(...O.prepareCreate(h,p,o,s.create)),s?.
144
+ remove&&g.relations.push(...O.prepareDelete(h,p,s.remove))}return y.remove&&P(g,
145
+ be(y.remove)),g},"getUpdateQueries"),be=c(t=>{let m=new L,y={tables:[],constraints:[],
146
+ validations:[],relations:[],indexes:[]};for(let h in t){let{name:g}=t[h];y.tables.
147
+ push(Q.prepareDelete(m,g))}return y},"getDeleteQueries"),P=c((t,m)=>{m.tables&&t.
148
+ tables.push(...m.tables),m.constraints&&t.constraints.push(...m.constraints),m.validations&&
149
+ t.validations.push(...m.validations),m.relations&&t.relations.push(...m.relations),
150
+ m.indexes&&t.indexes.push(...m.indexes)},"combineQueries");export{qe as getCreateQueries,be as getDeleteQueries,St as getUpdateQueries};
134
151
  //# sourceMappingURL=main.mjs.map
@@ -1,18 +1,11 @@
1
1
  import type { AnySchema, ObjectSchema, ObjectSchemaProperties } from '@ez4/schema';
2
2
  import type { ObjectComparison } from '@ez4/utils';
3
3
  import type { SqlBuilder } from '@ez4/pgsql';
4
+ import type { PgMigrationQueries } from '../types/query';
5
+ type ConstraintMigrationQueries = Pick<PgMigrationQueries, 'constraints' | 'validations'>;
4
6
  export declare namespace ConstraintQuery {
5
- const prepareCreate: (builder: SqlBuilder, table: string, columns: Record<string, AnySchema>) => {
6
- check: string;
7
- query: string;
8
- }[];
9
- const prepareUpdate: (builder: SqlBuilder, table: string, targetSchema: ObjectSchema, sourceSchema: ObjectSchema, changes: Record<string, ObjectComparison>) => ({
10
- query: string;
11
- check?: undefined;
12
- } | {
13
- check: string;
14
- query: string;
15
- })[];
7
+ const prepareCreate: (builder: SqlBuilder, table: string, columns: Record<string, AnySchema>) => ConstraintMigrationQueries;
8
+ const prepareUpdate: (builder: SqlBuilder, table: string, targetSchema: ObjectSchema, sourceSchema: ObjectSchema, changes: Record<string, ObjectComparison>) => ConstraintMigrationQueries;
16
9
  const prepareRenameTable: (builder: SqlBuilder, fromTable: string, toTable: string, columns: Record<string, AnySchema>) => {
17
10
  check: string;
18
11
  query: string;
@@ -25,3 +18,4 @@ export declare namespace ConstraintQuery {
25
18
  query: string;
26
19
  }[];
27
20
  }
21
+ export {};
@@ -3,11 +3,12 @@ import type { ObjectComparison } from '@ez4/utils';
3
3
  import type { ObjectSchema } from '@ez4/schema';
4
4
  import type { SqlBuilder } from '@ez4/pgsql';
5
5
  import type { PgMigrationQueries } from '../types/query';
6
- type IndexMigrationQueries = Pick<PgMigrationQueries, 'constraints' | 'indexes'>;
6
+ type IndexMigrationQueries = Pick<PgMigrationQueries, 'constraints' | 'validations' | 'indexes'>;
7
7
  export declare namespace IndexQueries {
8
- const prepareCreate: (builder: SqlBuilder, table: string, schema: ObjectSchema, indexes: PgIndexRepository, concurrent: boolean) => IndexMigrationQueries;
9
- const prepareUpdate: (builder: SqlBuilder, table: string, schema: ObjectSchema, sourceIndexes: PgIndexRepository, targetIndexes: PgIndexRepository, changes: Record<string, ObjectComparison>, concurrent: boolean) => IndexMigrationQueries;
8
+ const prepareCreate: (builder: SqlBuilder, table: string, schema: ObjectSchema, indexes: PgIndexRepository) => IndexMigrationQueries;
9
+ const prepareUpdate: (builder: SqlBuilder, table: string, schema: ObjectSchema, sourceIndexes: PgIndexRepository, targetIndexes: PgIndexRepository, changes: Record<string, ObjectComparison>) => IndexMigrationQueries;
10
10
  const prepareRename: (builder: SqlBuilder, fromTable: string, toTable: string, indexes: PgIndexRepository) => IndexMigrationQueries;
11
11
  const prepareDelete: (builder: SqlBuilder, table: string, indexes: PgIndexRepository) => IndexMigrationQueries;
12
+ const getValidationQuery: (builder: SqlBuilder, name: string) => string;
12
13
  }
13
14
  export {};
@@ -2,9 +2,15 @@ export type PgMigrationStatement = {
2
2
  check?: string;
3
3
  query: string;
4
4
  };
5
+ export type PgValidationStatement = {
6
+ name: string;
7
+ check?: string;
8
+ query: string;
9
+ };
5
10
  export type PgMigrationQueries = {
6
11
  tables: PgMigrationStatement[];
7
12
  constraints: PgMigrationStatement[];
13
+ validations: PgValidationStatement[];
8
14
  relations: PgMigrationStatement[];
9
15
  indexes: PgMigrationStatement[];
10
16
  };
@@ -2,3 +2,4 @@ import type { SqlBuilder } from '@ez4/pgsql';
2
2
  export declare const getCheckDatabaseQuery: (builder: SqlBuilder, database: string) => string;
3
3
  export declare const getCheckConstraintQuery: (builder: SqlBuilder, name: string) => string;
4
4
  export declare const getCheckColumnQuery: (builder: SqlBuilder, table: string, column: string) => string;
5
+ export declare const getCheckConstraintValidatedQuery: (builder: SqlBuilder, name: string) => string;
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@ez4/pgmigration",
3
3
  "description": "EZ4: A PostgreSQL migration library",
4
- "version": "0.42.0",
4
+ "version": "0.43.0",
5
5
  "author": "Silas B.",
6
6
  "license": "MIT",
7
7
  "type": "module",
@@ -43,10 +43,10 @@
43
43
  "live:publish": "npm run build && npm publish --access public"
44
44
  },
45
45
  "dependencies": {
46
- "@ez4/database": "^0.42.0",
47
- "@ez4/pgsql": "^0.42.0",
48
- "@ez4/pgclient": "^0.42.0",
49
- "@ez4/schema": "^0.42.0",
50
- "@ez4/utils": "^0.42.0"
46
+ "@ez4/database": "^0.43.0",
47
+ "@ez4/pgsql": "^0.43.0",
48
+ "@ez4/pgclient": "^0.43.0",
49
+ "@ez4/schema": "^0.43.0",
50
+ "@ez4/utils": "^0.43.0"
51
51
  }
52
52
  }