@supabase/lite 0.2.0 → 0.2.1-next.1
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/README.md +7 -7
- package/STATUS.md +844 -0
- package/UPGRADE.md +221 -0
- package/dist/cli/index.js +144 -175
- package/dist/cli/lib.js +44 -73
- package/dist/db/browser/index.js +19 -50
- package/dist/db/bun/index.js +19 -50
- package/dist/db/fallback.js +18 -49
- package/dist/db/node/index.js +19 -50
- package/dist/db/workerd/index.js +18 -49
- package/dist/index.js +56 -87
- package/package.json +5 -8
package/dist/db/node/index.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {createRequire}from'node:module';import
|
|
1
|
+
import {Deparser,QuoteUtils}from'pgsql-deparser';import {DeparserContext}from'pgsql-deparser/visitors/base.js';import {SqlFormatter}from'pgsql-deparser/utils/sql-formatter.js';import {createRequire}from'node:module';import pn from'node:fs';import dt from'node:path';import {Kysely,OperationNodeTransformer,SchemableIdentifierNode,JoinNode,TableNode,AliasNode,ListNode,UsingNode}from'kysely';import {GenericSqliteDialect,buildQueryFn}from'kysely-generic-sqlite';import {Connection,RelationNotFoundError,invariant,DataLossError,PlanStepType}from'@supabase/lite';try {
|
|
2
2
|
/**
|
|
3
3
|
* Adding this to avoid warnings from node:sqlite being experimental
|
|
4
4
|
*/
|
|
@@ -9,43 +9,12 @@ import {createRequire}from'node:module';import qs from'node:fs';import De from'n
|
|
|
9
9
|
};
|
|
10
10
|
} catch {}
|
|
11
11
|
|
|
12
|
-
var
|
|
13
|
-
SELECT ${
|
|
14
|
-
FROM ${N(t)};`,description:`Copy data from ${N(t)} to ${N(u)}`,type:"copy_data"});}r.push({sql:`DROP TABLE ${N(t)};`,description:`Drop old table ${N(t)}`,type:"drop_table"}),r.push({sql:`ALTER TABLE ${N(u)} RENAME TO ${N(t)};`,description:`Rename ${N(u)} to ${N(t)}`,type:"rename_table"});let T=e.indexes.filter(S=>S.table===t);for(let S of T){let b=S.unique?"UNIQUE ":"",_=S.columns.map(y=>N(y)).join(", ");r.push({sql:`CREATE ${b}INDEX ${N(S.name)} ON ${N(t)} (${_});`,description:`Recreate index ${N(S.name)} on ${N(t)}`,type:"add_index"});}let E=e.triggers?.filter(S=>S.table===t)??[];for(let S of E)r.push({sql:`${S.sql};`,description:`Recreate trigger ${N(S.name)} on ${N(t)}`,type:"create_trigger"});let g=i.columns.filter(S=>S.table===t&&S.type==="removed");for(let S of g)n.push({table:t,reason:`column "${S.name}" will be dropped`});let A=i.columns.filter(S=>S.table===t&&S.type==="modified");for(let S of A)S.changes?.type&&n.push({table:t,reason:`column "${S.name}" type changes from ${S.changes.type.from} to ${S.changes.type.to}`}),S.changes?.nullable&&!S.changes.nullable.to&&n.push({table:t,reason:`column "${S.name}" becomes NOT NULL`});return {steps:r,warnings:n}}canSimpleAlter(t,s,e){let i=s.columns.filter(f=>f.table===t),r=i.filter(f=>f.type==="added"),n=i.filter(f=>f.type==="removed"),a=i.filter(f=>f.type==="modified"),u=s.foreign_keys.some(f=>f.table===t);if(n.length>0||a.length>0||u)return {canAlter:false,addedCols:r};let l=e.tables.find(f=>f.name===t);return l&&/\bCHECK\s*\(/i.test(l.sql)?{canAlter:false,addedCols:r}:{canAlter:r.every(f=>{let m=f.column;return this.hasNonConstantDefault(m.default_value)?false:m.nullable||m.default_value!=null})&&r.length>0,addedCols:r}}hasNonConstantDefault(t){if(t==null)return false;let s=t.trim().toUpperCase();return li.includes(s)}columnDef(t){let s=t.column,e=`${N(s.name)} ${s.type||"TEXT"}`;return s.nullable||(e+=" NOT NULL"),s.default_value!=null&&(e+=` DEFAULT ${s.default_value}`),e}};});async function Q(o){let{parse:t}=await import('pgsql-parser');return t(o)}var rs=C(()=>{});var U,ie=C(()=>{U=class{newlineChar;tabChar;prettyMode;constructor(t=`
|
|
15
|
-
|
|
16
|
-
`," ",s),this.select=n,this.from=a,this.group=u,this.sort=l,this.insertColumns=p,this.update=f,this.bool=m,this.isColumnConstraint=T,this.isDomainConstraint=E,this.alterColumnOptions=g,this.alterTableOptions=A,this.isEnumValue=S,this.objtype=b,this.subtype=_,Object.assign(this,y);}spawn(t,s={}){return new o({indentLevel:this.indentLevel,prettyMode:this.prettyMode,isStringLiteral:this.isStringLiteral,parentNodeTypes:[...this.parentNodeTypes,t],formatter:this.formatter,select:this.select,from:this.from,group:this.group,sort:this.sort,insertColumns:this.insertColumns,update:this.update,bool:this.bool,isColumnConstraint:this.isColumnConstraint,isDomainConstraint:this.isDomainConstraint,alterColumnOptions:this.alterColumnOptions,alterTableOptions:this.alterTableOptions,isEnumValue:this.isEnumValue,objtype:this.objtype,subtype:this.subtype,...s})}indent(t,s){if(!this.prettyMode)return t;let e=s!==void 0?s:this.indentLevel+1;return this.formatter.indent(t,e)}newline(){return this.formatter.newline()}parens(t){return this.formatter.parens(t)}format(t,s){return this.formatter.format(t,s)}isPretty(){return this.formatter.isPretty()}};});function Pt(o){let t=o.toLowerCase();return as.has(t)?"RESERVED_KEYWORD":os.has(t)?"TYPE_FUNC_NAME_KEYWORD":ls.has(t)?"COL_NAME_KEYWORD":us.has(t)?"UNRESERVED_KEYWORD":"NO_KEYWORD"}var ut,as,us,ls,os,re=C(()=>{ut={UNRESERVED_KEYWORD:["abort","absent","absolute","access","action","add","admin","after","aggregate","also","alter","always","asensitive","assertion","assignment","at","atomic","attach","attribute","backward","before","begin","breadth","by","cache","call","called","cascade","cascaded","catalog","chain","characteristics","checkpoint","class","close","cluster","columns","comment","comments","commit","committed","compression","conditional","configuration","conflict","connection","constraints","content","continue","conversion","copy","cost","csv","cube","current","cursor","cycle","data","database","day","deallocate","declare","defaults","deferred","definer","delete","delimiter","delimiters","depends","depth","detach","dictionary","disable","discard","document","domain","double","drop","each","empty","enable","encoding","encrypted","enforced","enum","error","escape","event","exclude","excluding","exclusive","execute","explain","expression","extension","external","family","filter","finalize","first","following","force","format","forward","function","functions","generated","global","granted","groups","handler","header","hold","hour","identity","if","ignore","immediate","immutable","implicit","import","include","including","increment","indent","index","indexes","inherit","inherits","inline","input","insensitive","insert","instead","invoker","isolation","keep","key","keys","label","language","large","last","leakproof","level","listen","load","local","location","lock","locked","logged","lsn","mapping","match","matched","materialized","maxvalue","merge","method","minute","minvalue","mode","month","move","name","names","nested","new","next","nfc","nfd","nfkc","nfkd","no","normalized","nothing","notify","nowait","nulls","object","objects","of","off","oids","old","omit","operator","option","options","ordinality","others","over","overriding","owned","owner","parallel","parameter","parser","partial","partition","partitions","passing","password","path","period","plan","plans","policy","preceding","prepare","prepared","preserve","prior","privileges","procedural","procedure","procedures","program","publication","quote","quotes","range","read","reassign","recursive","ref","referencing","refresh","reindex","relative","release","rename","repeatable","replace","replica","reset","respect","restart","restrict","return","returns","revoke","role","rollback","rollup","routine","routines","rows","rule","savepoint","scalar","schema","schemas","scroll","search","second","security","sequence","sequences","serializable","server","session","set","sets","share","show","simple","skip","snapshot","source","split","sql","stable","standalone","start","statement","statistics","stdin","stdout","storage","stored","strict","string","strip","subscription","support","sysid","system","tables","tablespace","target","temp","template","temporary","text","ties","transaction","transform","trigger","truncate","trusted","type","types","uescape","unbounded","uncommitted","unconditional","unencrypted","unknown","unlisten","unlogged","until","update","vacuum","valid","validate","validator","value","varying","version","view","views","virtual","volatile","wait","whitespace","within","without","work","wrapper","write","xml","year","yes","zone"],RESERVED_KEYWORD:["all","analyse","analyze","and","any","array","as","asc","asymmetric","both","case","cast","check","collate","column","constraint","create","current_catalog","current_date","current_role","current_time","current_timestamp","current_user","default","deferrable","desc","distinct","do","else","end","except","false","fetch","for","foreign","from","grant","group","having","in","initially","intersect","into","lateral","leading","limit","localtime","localtimestamp","not","null","offset","on","only","or","order","placing","primary","references","returning","select","session_user","some","symmetric","system_user","table","then","to","trailing","true","union","unique","user","using","variadic","when","where","window","with"],TYPE_FUNC_NAME_KEYWORD:["authorization","binary","collation","concurrently","cross","current_schema","freeze","full","ilike","inner","is","isnull","join","left","like","natural","notnull","outer","overlaps","right","similar","tablesample","verbose"],COL_NAME_KEYWORD:["between","bigint","bit","boolean","char","character","coalesce","dec","decimal","exists","extract","float","greatest","grouping","inout","int","integer","interval","json","json_array","json_arrayagg","json_exists","json_object","json_objectagg","json_query","json_scalar","json_serialize","json_table","json_value","least","merge_action","national","nchar","none","normalize","nullif","numeric","out","overlay","position","precision","real","row","setof","smallint","substring","time","timestamp","treat","trim","values","varchar","xmlattributes","xmlconcat","xmlelement","xmlexists","xmlforest","xmlnamespaces","xmlparse","xmlpi","xmlroot","xmlserialize","xmltable"]},as=new Set(ut.RESERVED_KEYWORD??[]),us=new Set(ut.UNRESERVED_KEYWORD??[]),ls=new Set(ut.COL_NAME_KEYWORD??[]),os=new Set(ut.TYPE_FUNC_NAME_KEYWORD??[]);});var h,ps=C(()=>{re();h=class o{static escape(t){return `'${t.replace(/'/g,"''")}'`}static escapeEString(t){return t.replace(/\\/g,"\\\\").replace(/'/g,"''")}static formatEString(t){return o.needsEscapePrefix(t)?`E'${o.escapeEString(t)}'`:o.escape(t)}static needsEscapePrefix(t){return !/^\\x[0-9a-fA-F]+$/i.test(t)&&t.includes("\\")}static quoteIdentifier(t){if(!t)return t;let s=true,e=t[0];e>="a"&&e<="z"||e==="_"||(s=false);for(let r=0;r<t.length;r++){let n=t[r];n>="a"&&n<="z"||n>="0"&&n<="9"||n==="_"||(s=false);}if(s){let r=Pt(t);r!=="NO_KEYWORD"&&r!=="UNRESERVED_KEYWORD"&&(s=false);}if(s)return t;let i='"';for(let r=0;r<t.length;r++){let n=t[r];n==='"'&&(i+='"'),i+=n;}return i+='"',i}static quoteIdentifierAfterDot(t){if(!t)return t;let s=true,e=t[0];e>="a"&&e<="z"||e==="_"||(s=false);for(let r=0;r<t.length;r++){let n=t[r];n>="a"&&n<="z"||n>="0"&&n<="9"||n==="_"||(s=false);}if(s)return t;let i='"';for(let r=0;r<t.length;r++){let n=t[r];n==='"'&&(i+='"'),i+=n;}return i+='"',i}static quoteDottedName(t){return !t||t.length===0?"":t.length===1?o.quoteIdentifier(t[0]):t.map((s,e)=>e===0?o.quoteIdentifier(s):o.quoteIdentifierAfterDot(s)).join(".")}static quoteQualifiedIdentifier(t,s){return t?`${o.quoteIdentifier(t)}.${o.quoteIdentifierAfterDot(s)}`:o.quoteIdentifier(s)}static quoteIdentifierTypeName(t){if(!t)return t;let s=true,e=t[0];e>="a"&&e<="z"||e==="_"||(s=false);for(let r=0;r<t.length;r++){let n=t[r];n>="a"&&n<="z"||n>="0"&&n<="9"||n==="_"||(s=false);}if(s&&Pt(t)==="RESERVED_KEYWORD"&&(s=false),s)return t;let i='"';for(let r=0;r<t.length;r++){let n=t[r];n==='"'&&(i+='"'),i+=n;}return i+='"',i}static quoteTypeDottedName(t){return !t||t.length===0?"":t.map(s=>o.quoteIdentifierTypeName(s)).join(".")}};});var ne=C(()=>{ps();re();});var c,cs=C(()=>{c=class{static unwrapList(t){return t==null?[]:t.List!==void 0?t.List.items||[]:Array.isArray(t)?t:[t]}static formatList(t,s=", ",e="",i){return !t||t.length===0?"":t.map(r=>`${e}${i(r)}`).join(s)}};});function Si(o){return o&&typeof o=="object"&&!Array.isArray(o)&&!("ParseResult"in o)&&!("RawStmt"in o)&&("stmts"in o||"version"in o)}var gi,Ti,Z,fs=C(()=>{ns();ie();ne();cs();gi=["int2","int4","int8","float4","float8","numeric","varchar","char","bpchar","text","bool","date","time","timetz","timestamp","timestamptz","interval","bytea","uuid","json","jsonb","xml","money","bit","varbit","inet","cidr","macaddr","macaddr8"],Ti=[["numeric",["decimal","dec"]],["int4",["int","integer"]],["float8",["float"]],["bpchar",["character"]],["varchar",["character varying"]]];Z=class o{tree;options;constructor(t,s={}){this.options={functionDelimiter:"$$",functionDelimiterFallback:"$EOFCODE$",...s},Si(t)?this.tree=[{ParseResult:t}]:Array.isArray(t)?this.tree=t:this.tree=[t];}static deparse(t,s={}){return new o(t,s).deparseQuery()}deparseQuery(){let t=new U(this.options.newline,this.options.tab,this.options.pretty),s=new z({formatter:t,prettyMode:this.options.pretty});return this.tree.map(e=>this.deparse(e,s)||"").filter(e=>e!=="").join(s.newline()+s.newline())}getFunctionDelimiter(t){let s=this.options.functionDelimiter||"$$";return t.includes(s)?this.options.functionDelimiterFallback||"$EOFCODE$":s}getObjectTypeKeyword(t){switch(t){case "OBJECT_TABLE":return "TABLE";case "OBJECT_VIEW":return "VIEW";case "OBJECT_INDEX":return "INDEX";case "OBJECT_SEQUENCE":return "SEQUENCE";case "OBJECT_FUNCTION":return "FUNCTION";case "OBJECT_PROCEDURE":return "PROCEDURE";case "OBJECT_SCHEMA":return "SCHEMA";case "OBJECT_DATABASE":return "DATABASE";case "OBJECT_DOMAIN":return "DOMAIN";case "OBJECT_AGGREGATE":return "AGGREGATE";case "OBJECT_CONVERSION":return "CONVERSION";case "OBJECT_LANGUAGE":return "LANGUAGE";case "OBJECT_OPERATOR":return "OPERATOR";case "OBJECT_OPFAMILY":return "OPERATOR FAMILY";case "OBJECT_OPCLASS":return "OPERATOR CLASS";case "OBJECT_TSDICTIONARY":return "TEXT SEARCH DICTIONARY";case "OBJECT_TSCONFIGURATION":return "TEXT SEARCH CONFIGURATION";case "OBJECT_EVENT_TRIGGER":return "EVENT TRIGGER";case "OBJECT_FDW":return "FOREIGN DATA WRAPPER";case "OBJECT_FOREIGN_SERVER":return "SERVER";case "OBJECT_TYPE":return "TYPE";case "OBJECT_COLLATION":return "COLLATION";case "OBJECT_PUBLICATION":return "PUBLICATION";case "OBJECT_ACCESS_METHOD":return "ACCESS METHOD";case "OBJECT_AMOP":return "OPERATOR CLASS";case "OBJECT_AMPROC":return "OPERATOR CLASS";case "OBJECT_ATTRIBUTE":return "ATTRIBUTE";case "OBJECT_CAST":return "CAST";case "OBJECT_COLUMN":return "COLUMN";case "OBJECT_DEFAULT":return "DEFAULT";case "OBJECT_DEFACL":return "DEFAULT PRIVILEGES";case "OBJECT_DOMCONSTRAINT":return "DOMAIN";case "OBJECT_EXTENSION":return "EXTENSION";case "OBJECT_FOREIGN_TABLE":return "FOREIGN TABLE";case "OBJECT_LARGEOBJECT":return "LARGE OBJECT";case "OBJECT_MATVIEW":return "MATERIALIZED VIEW";case "OBJECT_PARAMETER_ACL":return "PARAMETER";case "OBJECT_POLICY":return "POLICY";case "OBJECT_PUBLICATION_NAMESPACE":return "PUBLICATION";case "OBJECT_PUBLICATION_REL":return "PUBLICATION";case "OBJECT_ROLE":return "ROLE";case "OBJECT_ROUTINE":return "ROUTINE";case "OBJECT_RULE":return "RULE";case "OBJECT_STATISTIC_EXT":return "STATISTICS";case "OBJECT_SUBSCRIPTION":return "SUBSCRIPTION";case "OBJECT_TABCONSTRAINT":return "CONSTRAINT";case "OBJECT_TABLESPACE":return "TABLESPACE";case "OBJECT_TRANSFORM":return "TRANSFORM";case "OBJECT_TRIGGER":return "TRIGGER";case "OBJECT_TSPARSER":return "TEXT SEARCH PARSER";case "OBJECT_TSTEMPLATE":return "TEXT SEARCH TEMPLATE";case "OBJECT_USER_MAPPING":return "USER MAPPING";default:throw new Error(`Unsupported objectType: ${t}`)}}deparse(t,s){if(t==null)return null;if(!s){let e=new U(this.options.newline,this.options.tab,this.options.pretty);s=new z({formatter:e,prettyMode:this.options.pretty});}if(typeof t=="number"||t instanceof Number)return t.toString();try{return this.visit(t,s)}catch(e){let i=Object.keys(t)[0];throw new Error(`Error deparsing ${i}: ${e.message}`)}}visit(t,s){if(!s){let n=new U(this.options.newline,this.options.tab,this.options.pretty);s=new z({formatter:n,prettyMode:this.options.pretty});}let e=this.getNodeType(t);if(!e)return "";let i=this.getNodeData(t),r=e;if(typeof this[r]=="function")return this[r](i,s);throw new Error(`Deparser does not handle node type: ${e}`)}getNodeType(t){return Object.keys(t)[0]}getNodeData(t){let s=Object.keys(t);return s.length===1&&typeof t[s[0]]=="object"?t[s[0]]:t}ParseResult(t,s){return !t.stmts||t.stmts.length===0?"":t.stmts.filter(e=>e!=null).map(e=>this.RawStmt(e,s)).filter(e=>e!=="").join(s.newline()+s.newline())}RawStmt(t,s){if(!t.stmt)return "";let e=this.deparse(t.stmt,s);return t.stmt_len?e+";":e}SelectStmt(t,s){let e=[];if(t.withClause&&e.push(this.WithClause(t.withClause,s)),!t.op||t.op==="SETOP_NONE")t.valuesLists==null&&(!s.isPretty()||!t.targetList)&&e.push("SELECT");else {let r=this.SelectStmt(t.larg,s),n=this.SelectStmt(t.rarg,s),a=t.larg&&(t.larg.op&&t.larg.op!=="SETOP_NONE"||t.larg.sortClause||t.larg.limitCount||t.larg.limitOffset||t.larg.withClause),u=t.rarg&&(t.rarg.op&&t.rarg.op!=="SETOP_NONE"||t.rarg.sortClause||t.rarg.limitCount||t.rarg.limitOffset||t.rarg.withClause);switch(a?e.push(s.parens(r)):e.push(r),t.op){case "SETOP_UNION":e.push("UNION");break;case "SETOP_INTERSECT":e.push("INTERSECT");break;case "SETOP_EXCEPT":e.push("EXCEPT");break;default:throw new Error(`Bad SelectStmt op: ${t.op}`)}t.all&&e.push("ALL"),u?e.push(s.parens(n)):e.push(n);}let i="";if(t.distinctClause){let r=c.unwrapList(t.distinctClause);if(r.length>0&&Object.keys(r[0]).length>0){let n=r.map(a=>this.visit(a,s.spawn("SelectStmt",{select:true}))).join(", ");i=" DISTINCT ON "+s.parens(n);}else i=" DISTINCT";if(!s.isPretty())if(r.length>0&&Object.keys(r[0]).length>0){e.push("DISTINCT ON");let n=r.map(a=>this.visit(a,s.spawn("SelectStmt",{select:true}))).join(", ");e.push(s.parens(n));}else e.push("DISTINCT");}if(t.targetList){let r=c.unwrapList(t.targetList);if(s.isPretty())if(r.length===1){let n=r[0],a=this.visit(n,s.spawn("SelectStmt",{select:true}));this.isComplexSelectTarget(n)?(e.push("SELECT"+i),this.containsMultilineStringLiteral(a)?e.push(a):e.push(s.indent(a))):e.push("SELECT"+i+" "+a);}else {let a=r.map(u=>{let l=this.visit(u,s.spawn("SelectStmt",{select:true}));return this.containsMultilineStringLiteral(l)?l:s.indent(l)}).join(","+s.newline());e.push("SELECT"+i),e.push(a);}else {let n=r.map(a=>this.visit(a,s.spawn("SelectStmt",{select:true}))).join(", ");e.push(n);}}if(t.intoClause&&(e.push("INTO"),e.push(this.IntoClause(t.intoClause,s))),t.fromClause){let n=c.unwrapList(t.fromClause).map(a=>this.deparse(a,s.spawn("SelectStmt",{from:true}))).join(", ");e.push("FROM "+n.trim());}if(t.whereClause)if(s.isPretty()){e.push("WHERE");let a=this.visit(t.whereClause,s).split(s.newline()).map((u,l)=>l===0?s.indent(u):u);e.push(a.join(s.newline()));}else e.push("WHERE"),e.push(this.visit(t.whereClause,s));if(t.valuesLists)if(s.isPretty()){e.push("VALUES");let n=c.unwrapList(t.valuesLists).map(a=>{let u=c.unwrapList(a).map(l=>this.visit(l,s));return s.parens(u.join(", "))}).map(a=>this.containsMultilineStringLiteral(a)?a:s.indent(a));e.push(n.join(`,
|
|
17
|
-
`));}else {e.push("VALUES");let r=c.unwrapList(t.valuesLists).map(n=>{let a=c.unwrapList(n).map(u=>this.visit(u,s));return s.parens(a.join(", "))});e.push(r.join(", "));}if(t.groupClause){let r=c.unwrapList(t.groupClause);if(s.isPretty()){let n=r.map(a=>{let u=this.visit(a,s.spawn("SelectStmt",{group:true,indentLevel:s.indentLevel+1}));return this.containsMultilineStringLiteral(u)?u:s.indent(u)}).join(","+s.newline());e.push("GROUP BY"),e.push(n);}else {e.push("GROUP BY");let n=r.map(a=>this.visit(a,s.spawn("SelectStmt",{group:true}))).join(", ");e.push(n);}}if(t.havingClause)if(s.isPretty()){e.push("HAVING");let r=this.visit(t.havingClause,s);this.containsMultilineStringLiteral(r)?e.push(r):e.push(s.indent(r));}else e.push("HAVING"),e.push(this.visit(t.havingClause,s));if(t.windowClause){e.push("WINDOW");let n=c.unwrapList(t.windowClause).map(a=>this.visit(a,s)).join(", ");e.push(n);}if(t.sortClause){let r=c.unwrapList(t.sortClause);if(s.isPretty()){let n=r.map(a=>{let u=this.visit(a,s.spawn("SelectStmt",{sort:true,indentLevel:s.indentLevel+1}));return this.containsMultilineStringLiteral(u)?u:s.indent(u)}).join(","+s.newline());e.push("ORDER BY"),e.push(n);}else {e.push("ORDER BY");let n=r.map(a=>this.visit(a,s.spawn("SelectStmt",{sort:true}))).join(", ");e.push(n);}}if(t.limitCount&&e.push("LIMIT "+this.visit(t.limitCount,s)),t.limitOffset&&e.push("OFFSET "+this.visit(t.limitOffset,s)),t.lockingClause){let n=c.unwrapList(t.lockingClause).map(a=>this.visit(a,s)).join(" ");e.push(n);}return s.isPretty()?e.filter(n=>n.trim()!=="").join(s.newline()):e.join(" ")}A_Expr(t,s){let e=t.kind,i=c.unwrapList(t.name),r=t.lexpr,n=t.rexpr;switch(e){case "AEXPR_OP":if(r&&n){let m=this.deparseOperatorName(i,s),T=this.visit(r,s),E=this.visit(n,s),g=false;if(r&&"A_Expr"in r&&r.A_Expr?.kind==="AEXPR_OP"){let S=this.deparseOperatorName(c.unwrapList(r.A_Expr.name),s);this.needsParentheses(S,m,"left")&&(g=true);}r&&this.isComplexExpression(r)&&(g=true),g&&(T=s.parens(T));let A=false;if(n&&"A_Expr"in n&&n.A_Expr?.kind==="AEXPR_OP"){let S=this.deparseOperatorName(c.unwrapList(n.A_Expr.name),s);this.needsParentheses(S,m,"right")&&(A=true);}return n&&this.isComplexExpression(n)&&(A=true),A&&(E=s.parens(E)),s.format([T,m,E])}else if(n){let m=this.deparseOperatorName(i,s),T=this.visit(n,s);return n&&"A_Expr"in n&&n.A_Expr?.kind==="AEXPR_OP"&&n.A_Expr?.lexpr&&(T=s.parens(T)),s.format([m,T])}break;case "AEXPR_OP_ANY":return s.format([this.visit(r,s),this.deparseOperatorName(i,s),"ANY",s.parens(this.visit(n,s))]);case "AEXPR_OP_ALL":return s.format([this.visit(r,s),this.deparseOperatorName(i,s),"ALL",s.parens(this.visit(n,s))]);case "AEXPR_DISTINCT":{let m=this.visit(r,s),T=this.visit(n,s);return r&&this.isComplexExpression(r)&&(m=s.parens(m)),n&&this.isComplexExpression(n)&&(T=s.parens(T)),s.format([m,"IS DISTINCT FROM",T])}case "AEXPR_NOT_DISTINCT":{let m=this.visit(r,s),T=this.visit(n,s);return r&&this.isComplexExpression(r)&&(m=s.parens(m)),n&&this.isComplexExpression(n)&&(T=s.parens(T)),s.format([m,"IS NOT DISTINCT FROM",T])}case "AEXPR_NULLIF":return s.format(["NULLIF",s.parens([this.visit(r,s),this.visit(n,s)].join(", "))]);case "AEXPR_IN":let a=this.deparseOperatorName(i,s);return a==="<>"||a==="!="?s.format([this.visit(r,s),"NOT IN",s.parens(this.visit(n,s))]):s.format([this.visit(r,s),"IN",s.parens(this.visit(n,s))]);case "AEXPR_LIKE":return this.deparseOperatorName(i,s)==="!~~"?s.format([this.visit(r,s),"NOT LIKE",this.visit(n,s)]):s.format([this.visit(r,s),"LIKE",this.visit(n,s)]);case "AEXPR_ILIKE":return this.deparseOperatorName(i,s)==="!~~*"?s.format([this.visit(r,s),"NOT ILIKE",this.visit(n,s)]):s.format([this.visit(r,s),"ILIKE",this.visit(n,s)]);case "AEXPR_SIMILAR":let p=this.deparseOperatorName(i,s),f;if(n&&"FuncCall"in n&&n.FuncCall?.funcname?.length===2&&n.FuncCall.funcname[0]?.String?.sval==="pg_catalog"&&n.FuncCall.funcname[1]?.String?.sval==="similar_to_escape"){let m=n.FuncCall.args||[];f=this.visit(m[0],s),m.length>1&&(f+=` ESCAPE ${this.visit(m[1],s)}`);}else f=this.visit(n,s);return p==="!~"?s.format([this.visit(r,s),"NOT SIMILAR TO",f]):s.format([this.visit(r,s),"SIMILAR TO",f]);case "AEXPR_BETWEEN":return s.format([this.visit(r,s),"BETWEEN",this.visitBetweenRange(n,s)]);case "AEXPR_NOT_BETWEEN":return s.format([this.visit(r,s),"NOT BETWEEN",this.visitBetweenRange(n,s)]);case "AEXPR_BETWEEN_SYM":return s.format([this.visit(r,s),"BETWEEN SYMMETRIC",this.visitBetweenRange(n,s)]);case "AEXPR_NOT_BETWEEN_SYM":return s.format([this.visit(r,s),"NOT BETWEEN SYMMETRIC",this.visitBetweenRange(n,s)])}throw new Error(`Unhandled A_Expr kind: ${e}`)}deparseOperatorName(t,s){if(!t||t.length===0)return "";let e=t.map(i=>i.String?i.String.sval||i.String.str:this.visit(i,s));return e.length>1?`OPERATOR(${e.join(".")})`:e.join(".")}getOperatorPrecedence(t){return {"||":1,OR:2,AND:3,NOT:4,IS:5,IN:5,BETWEEN:5,LIKE:5,ILIKE:5,SIMILAR:5,"<":6,"<=":6,">":6,">=":6,"=":6,"<>":6,"!=":6,"+":7,"-":7,"*":8,"/":8,"%":8,"^":9,"~":10,"&":10,"|":10,"#":10,"<<":10,">>":10}[t]||0}needsParentheses(t,s,e){let i=this.getOperatorPrecedence(t),r=this.getOperatorPrecedence(s);return i<r||i===r&&e==="right"&&(s==="-"||s==="/")}isComplexExpression(t){return !!(t.NullTest||t.BooleanTest||t.BoolExpr||t.CaseExpr||t.CoalesceExpr||t.SubLink||t.A_Expr)}isComplexSelectTarget(t){if(!t)return false;if(t.ResTarget?.val)return this.isComplexExpression(t.ResTarget.val);if(t.CaseExpr||t.SubLink||t.NullTest||t.BooleanTest||t.BoolExpr)return true;if(t.CoalesceExpr){let s=t.CoalesceExpr.args;if(s&&Array.isArray(s)&&s.length>1)return true}if(t.FuncCall){let s=t.FuncCall,e=s.args?Array.isArray(s.args)?s.args:[s.args]:[];if(s.over||s.agg_filter||s.agg_order||s.agg_distinct||e.length>1)return true;if(e.length===1)return this.isComplexSelectTarget(e[0])}if(t.A_Expr){let s=t.A_Expr;return !!(s.lexpr&&this.isComplexSelectTarget(s.lexpr)||s.rexpr&&this.isComplexSelectTarget(s.rexpr))}return t.TypeCast?this.isComplexSelectTarget(t.TypeCast.arg):t.A_ArrayExpr?true:t.A_Indirection?this.isComplexSelectTarget(t.A_Indirection.arg):(t.A_Const||t.ColumnRef||t.ParamRef||t.A_Star,false)}visitBetweenRange(t,s){return t&&"List"in t&&t.List?.items?t.List.items.map(i=>this.visit(i,s)).join(" AND "):this.visit(t,s)}InsertStmt(t,s){let e=[];if(t.withClause&&e.push(this.WithClause(t.withClause,s)),e.push("INSERT INTO"),e.push(this.RangeVar(t.relation,s)),t.cols){let i=c.unwrapList(t.cols),r=s.spawn("InsertStmt",{insertColumns:true}),n=i.map(a=>this.visit(a,r));if(s.isPretty()){let a=n.map(u=>s.indent(u));e.push(`(
|
|
18
|
-
`+a.join(`,
|
|
19
|
-
`)+`
|
|
20
|
-
)`);}else e.push(s.parens(n.join(", ")));}if(t.selectStmt?e.push(this.visit(t.selectStmt,s)):(!t.cols||t.cols&&c.unwrapList(t.cols).length===0)&&e.push("DEFAULT VALUES"),t.onConflictClause){if(e.push("ON CONFLICT"),t.onConflictClause.infer){let i=t.onConflictClause.infer;if(i.conname)e.push("ON CONSTRAINT"),e.push(i.conname);else if(i.indexElems){let n=c.unwrapList(i.indexElems).map(a=>this.visit(a,s));e.push(s.parens(n.join(", ")));}i.whereClause&&(e.push("WHERE"),e.push(this.visit(i.whereClause,s)));}if(t.onConflictClause.action==="ONCONFLICT_UPDATE"){e.push("DO UPDATE SET");let i=c.unwrapList(t.onConflictClause.targetList);if(i&&i.length){let r=i[0];if(r.ResTarget?.val?.MultiAssignRef&&i.every(n=>n.ResTarget?.val?.MultiAssignRef)){let a=i.sort((u,l)=>u.ResTarget.val.MultiAssignRef.colno-l.ResTarget.val.MultiAssignRef.colno).map(u=>u.ResTarget.name);e.push(s.parens(a.join(", "))),e.push("="),e.push(this.visit(r.ResTarget.val.MultiAssignRef.source,s));}else {let n=s.spawn("UpdateStmt",{update:true}),a=i.map(u=>this.visit(u,n));if(s.isPretty()){let u=a.map(l=>s.indent(l));e.push(`
|
|
21
|
-
`+u.join(`,
|
|
22
|
-
`));}else e.push(a.join(", "));}}t.onConflictClause.whereClause&&(e.push("WHERE"),e.push(this.visit(t.onConflictClause.whereClause,s)));}else t.onConflictClause.action==="ONCONFLICT_NOTHING"&&e.push("DO NOTHING");}if(t.returningList){e.push("RETURNING");let r=c.unwrapList(t.returningList).map(n=>this.visit(n,s));e.push(r.join(", "));}return e.join(" ")}UpdateStmt(t,s){let e=[];t.withClause&&e.push(this.WithClause(t.withClause,s)),e.push("UPDATE"),t.relation&&e.push(this.RangeVar(t.relation,s)),e.push("SET");let i=c.unwrapList(t.targetList);if(i&&i.length){i[0];let n=new Set,a=[];for(let u=0;u<i.length;u++){if(n.has(u))continue;let l=i[u],p=l.ResTarget?.val?.MultiAssignRef;if(p){let f=[];for(let E=u;E<i.length;E++){let g=i[E],A=g.ResTarget?.val?.MultiAssignRef;A&&JSON.stringify(A.source)===JSON.stringify(p.source)&&(f.push(g),n.add(E));}let m=f.map(E=>E.ResTarget.name),T=`${s.parens(m.join(", "))} = ${this.visit(p.source,s)}`;a.push(T);}else a.push(this.visit(l,s.spawn("UpdateStmt",{update:true}))),n.add(u);}e.push(a.join(","));}if(t.fromClause){e.push("FROM");let n=c.unwrapList(t.fromClause).map(a=>this.visit(a,s));e.push(n.join(", "));}return t.whereClause&&(e.push("WHERE"),e.push(this.visit(t.whereClause,s))),t.returningList&&(e.push("RETURNING"),e.push(this.deparseReturningList(t.returningList,s))),e.join(" ")}DeleteStmt(t,s){try{let e=[];if(t.withClause)try{e.push(this.WithClause(t.withClause,s));}catch(i){throw console.warn(`Error processing withClause in DeleteStmt: ${i instanceof Error?i.message:String(i)}`),new Error(`Error deparsing DeleteStmt: ${i instanceof Error?i.message:String(i)}`)}if(e.push("DELETE"),e.push("FROM"),!t.relation)throw new Error("DeleteStmt requires a relation");if(e.push(this.RangeVar(t.relation,s)),t.usingClause){e.push("USING");let r=c.unwrapList(t.usingClause).filter(n=>n!=null&&this.getNodeType(n)!=="undefined").map(n=>{try{return this.visit(n,s)}catch(a){return console.warn(`Error processing usingClause item in DeleteStmt: ${a instanceof Error?a.message:String(a)}`),""}}).filter(n=>n&&n.trim());r.length>0&&e.push(r.join(", "));}if(t.whereClause){e.push("WHERE");try{e.push(this.visit(t.whereClause,s));}catch(i){throw console.warn(`Error processing whereClause in DeleteStmt: ${i instanceof Error?i.message:String(i)}`),new Error(`Error deparsing DeleteStmt: ${i instanceof Error?i.message:String(i)}`)}}if(t.returningList){e.push("RETURNING");try{e.push(this.deparseReturningList(t.returningList,s));}catch(i){throw console.warn(`Error processing returningList in DeleteStmt: ${i instanceof Error?i.message:String(i)}`),new Error(`Error deparsing DeleteStmt: ${i instanceof Error?i.message:String(i)}`)}}return e.join(" ")}catch(e){throw new Error(`Error deparsing DeleteStmt: ${e instanceof Error?e.message:String(e)}`)}}WithClause(t,s){let e=["WITH"];if(t.recursive&&e.push("RECURSIVE"),t.ctes&&t.ctes.length>0){let i=c.unwrapList(t.ctes);if(s.isPretty()){let r=i.map((n,a)=>{let u=this.visit(n,s),l=a===0?s.newline():","+s.newline();return this.containsMultilineStringLiteral(u)?l+u:l+s.indent(u)});e.push(r.join(""));}else {let r=i.map(n=>this.visit(n,s));e.push(r.join(", "));}}return e.join(" ")}ResTarget(t,s){let e=[];if(s.update&&t.name){if(e.push(h.quoteIdentifier(t.name)),t.indirection&&t.indirection.length>0){let i=c.unwrapList(t.indirection).map(r=>r.String?`.${h.quoteIdentifierAfterDot(r.String.sval||r.String.str)}`:this.visit(r,s));e.push(i.join(""));}e.push("="),t.val&&e.push(this.deparse(t.val,s));}else if(s.insertColumns&&t.name){if(e.push(h.quoteIdentifier(t.name)),t.indirection&&t.indirection.length>0){let i=c.unwrapList(t.indirection).map(r=>r.String?`.${h.quoteIdentifierAfterDot(r.String.sval||r.String.str)}`:this.visit(r,s));e.push(i.join(""));}}else t.val&&e.push(this.deparse(t.val,s)),t.name&&(e.push("AS"),e.push(h.quoteIdentifier(t.name)));return e.join(" ")}deparseReturningList(t,s){return c.unwrapList(t).filter(e=>e!=null&&this.getNodeType(e)!=="undefined").map(e=>{try{if(this.getNodeType(e)==="ResTarget"){let i=this.getNodeData(e),r=i.val?this.visit(i.val,s):"",n=i.name?` AS ${h.quoteIdentifier(i.name)}`:"";return r+n}else return this.visit(e,s)}catch(i){return console.warn(`Error processing returning item: ${i instanceof Error?i.message:String(i)}`),""}}).filter(e=>e&&e.trim()).join(", ")}BoolExpr(t,s){let e=t.boolop,i=c.unwrapList(t.args),r="%s";s.bool&&(r="(%s)");let n=s.spawn("BoolExpr",{bool:true});switch(e){case "AND_EXPR":if(s.isPretty()&&i.length>1){let a=i.map(u=>this.visit(u,n)).join(s.newline()+s.indent("AND "));return r.replace("%s",()=>a)}else {let a=i.map(u=>this.visit(u,n)).join(" AND ");return r.replace("%s",()=>a)}case "OR_EXPR":if(s.isPretty()&&i.length>1){let a=i.map(u=>this.visit(u,n)).join(s.newline()+s.indent("OR "));return r.replace("%s",()=>a)}else {let a=i.map(u=>this.visit(u,n)).join(" OR ");return r.replace("%s",()=>a)}case "NOT_EXPR":return `NOT (${this.visit(i[0],s)})`;default:throw new Error(`Unhandled BoolExpr boolop: ${e}`)}}FuncCall(t,s){let e=c.unwrapList(t.funcname),i=c.unwrapList(t.args),r=e.map(p=>p.String?.sval||p.String?.str||"").filter(p=>p),n=h.quoteDottedName(r);if(t.funcformat==="COERCE_SQL_SYNTAX"&&n==="pg_catalog.xmlexists"&&i.length>=2){let p=this.visit(i[0],s),f=this.visit(i[1],s);return `xmlexists (${p} PASSING ${f})`}if(t.funcformat==="COERCE_SQL_SYNTAX"&&n==="pg_catalog.extract"&&i.length>=2){let p=this.visit(i[0],s),f=this.visit(i[1],s);return p.startsWith("'")&&p.endsWith("'")&&(p=p.slice(1,-1).toUpperCase()),`EXTRACT(${p} FROM ${f})`}if(t.funcformat==="COERCE_SQL_SYNTAX"&&(n==="pg_catalog.rtrim"||n==="pg_catalog.ltrim"||n==="pg_catalog.btrim")&&i.length>=1){let p=this.visit(i[0],s),f="";if(i.length>=2&&(f=` ${this.visit(i[1],s)}`),n==="pg_catalog.rtrim")return `TRIM(TRAILING${f} FROM ${p})`;if(n==="pg_catalog.ltrim")return `TRIM(LEADING${f} FROM ${p})`;if(n==="pg_catalog.btrim")return `TRIM(BOTH${f} FROM ${p})`}if(t.funcformat==="COERCE_SQL_SYNTAX"&&n==="pg_catalog.pg_collation_for")return `COLLATION FOR (${i.map(f=>this.visit(f,s)).join(", ")})`;if(t.funcformat==="COERCE_SQL_SYNTAX"&&n==="pg_catalog.substring"){let p=this.visit(i[0],s);if(i.length===3){let f=this.visit(i[1],s),m=this.visit(i[2],s);return `SUBSTRING(${p} FROM ${f} FOR ${m})`}else if(i.length===2){let f=this.visit(i[1],s);return `SUBSTRING(${p} FROM ${f})`}}if(t.funcformat==="COERCE_SQL_SYNTAX"&&n==="pg_catalog.position"&&i.length===2){let p=this.visit(i[0],s);return `POSITION(${this.visit(i[1],s)} IN ${p})`}if(t.funcformat==="COERCE_SQL_SYNTAX"&&n==="pg_catalog.overlay"){if(i.length===4){let p=this.visit(i[0],s),f=this.visit(i[1],s),m=this.visit(i[2],s),T=this.visit(i[3],s);return `OVERLAY(${p} PLACING ${f} FROM ${m} FOR ${T})`}else if(i.length===3){let p=this.visit(i[0],s),f=this.visit(i[1],s),m=this.visit(i[2],s);return `OVERLAY(${p} PLACING ${f} FROM ${m})`}}if(t.funcformat==="COERCE_SQL_SYNTAX"&&n==="pg_catalog.is_normalized"){let p=this.visit(i[0],s);if(i.length===2){let m=this.visit(i[1],s).replace(/'/g,"");return `${p} IS ${m} NORMALIZED`}else return `${p} IS NORMALIZED`}if(t.funcformat==="COERCE_SQL_SYNTAX"&&n==="pg_catalog.normalize"){let p=this.visit(i[0],s);if(i.length===2){let m=this.visit(i[1],s).replace(/'/g,"");return `normalize(${p}, ${m})`}else return `normalize(${p})`}if(t.funcformat==="COERCE_SQL_SYNTAX"&&n==="pg_catalog.system_user"&&i.length===0)return "SYSTEM_USER";if(n==="pg_catalog.overlaps"&&i.length===4){let p=this.visit(i[0],s),f=this.visit(i[1],s),m=this.visit(i[2],s),T=this.visit(i[3],s);return `(${p}, ${f}) OVERLAPS (${m}, ${T})`}if(n==="pg_catalog.timezone"&&i.length===2){let p=this.visit(i[1],s),f=this.visit(i[0],s);if(i[1]&&"A_Expr"in i[1]&&i[1].A_Expr?.kind==="AEXPR_OP"){let m=this.deparseOperatorName(c.unwrapList(i[1].A_Expr.name),s);(m==="+"||m==="-"||m==="*"||m==="/")&&(p=s.parens(p));}return `${p} AT TIME ZONE ${f}`}let a=[];if(t.agg_star)t.agg_distinct?a.push("DISTINCT *"):a.push("*");else {let p=i.map(f=>this.visit(f,s));if(t.func_variadic&&p.length>0){let f=p.length-1;p[f]=`VARIADIC ${p[f]}`;}t.agg_distinct&&p.length>0?a.push("DISTINCT "+p.join(", ")):a.push(...p);}let u="";if(t.agg_order&&t.agg_order.length>0){let f=c.unwrapList(t.agg_order).map(m=>this.visit(m,s));t.agg_within_group?u=` WITHIN GROUP (ORDER BY ${f.join(", ")})`:u=` ORDER BY ${f.join(", ")}`;}let l;if(t.agg_within_group&&u?l=`${n}(${a.join(", ")})${u}`:l=`${n}(${a.join(", ")}${u})`,t.agg_filter&&(l+=` FILTER (WHERE ${this.visit(t.agg_filter,s)})`),t.over)if(t.over.name)l+=` OVER ${t.over.name}`;else {let p=[];if(t.over.partitionClause){let T=c.unwrapList(t.over.partitionClause).map(E=>this.visit(E,s));p.push(`PARTITION BY ${T.join(", ")}`);}if(t.over.orderClause){let T=c.unwrapList(t.over.orderClause).map(E=>this.visit(E,s));p.push(`ORDER BY ${T.join(", ")}`);}let f=this.formatWindowFrame(t.over,s.spawn("FuncCall"));if(f&&p.push(f),p.length>0)if(s.isPretty()&&p.length>1){let m=p.map(T=>s.indent(T));l+=` OVER (${s.newline()}${m.join(s.newline())}${s.newline()})`;}else l+=` OVER (${p.join(" ")})`;else l+=" OVER ()";}return l}FuncExpr(t,s){let e=`func_${t.funcid}`,i=t.args?c.unwrapList(t.args).map(r=>this.visit(r,s)).join(", "):"";return `${e}(${i})`}A_Const(t,s){let e=t;if(e.ival!==void 0)return typeof e.ival=="object"&&e.ival!==null?e.ival.ival!==void 0?e.ival.ival.toString():Object.keys(e.ival).length===0?"0":e.ival.toString():e.ival===null?"NULL":e.ival.toString();if(e.fval!==void 0)return typeof e.fval=="object"&&e.fval!==null?e.fval.fval!==void 0?e.fval.fval.toString():Object.keys(e.fval).length===0?"0.0":e.fval.toString():e.fval===null?"NULL":e.fval.toString();if(e.sval!==void 0)return typeof e.sval=="object"&&e.sval!==null?e.sval.sval!==void 0?h.formatEString(e.sval.sval):e.sval.String&&e.sval.String.sval!==void 0?h.formatEString(e.sval.String.sval):Object.keys(e.sval).length===0?"''":h.formatEString(e.sval.toString()):e.sval===null?"NULL":h.formatEString(e.sval);if(e.boolval!==void 0)return typeof e.boolval=="object"&&e.boolval!==null?e.boolval.boolval!==void 0?e.boolval.boolval?"true":"false":Object.keys(e.boolval).length===0?"false":e.boolval?"true":"false":e.boolval===null?"NULL":e.boolval?"true":"false";if(e.bsval!==void 0)if(typeof e.bsval=="object"&&e.bsval!==null)if(e.bsval.bsval!==void 0){let i=e.bsval.bsval;return i.startsWith("x")&&/^x[0-9A-Fa-f]+$/.test(i)?`x'${i.substring(1)}'`:i.startsWith("b")?`b'${i.substring(1)}'`:`b'${i}'`}else return Object.keys(e.bsval).length===0?"''":e.bsval.toString();else {if(e.bsval===null)return "NULL";{let i=e.bsval;return i.startsWith("x")&&/^x[0-9A-Fa-f]+$/.test(i)?`x'${i.substring(1)}'`:i.startsWith("b")?`b'${i.substring(1)}'`:`b'${i}'`}}if(e.val){if(e.val.Integer?.ival!==void 0)return e.val.Integer.ival.toString();if(e.val.Float?.fval!==void 0)return e.val.Float.fval.toString();if(e.val.String?.sval!==void 0)return h.escape(e.val.String.sval);if(e.val.Boolean?.boolval!==void 0)return e.val.Boolean.boolval?"true":"false";if(e.val.BitString?.bsval!==void 0)return e.val.BitString.bsval}return e.isnull===true?"NULL":typeof e=="object"&&e!==null?e.Boolean!==void 0?e.Boolean?"true":"false":e.Integer!==void 0?typeof e.Integer=="object"&&e.Integer.ival!==void 0?e.Integer.ival.toString():e.Integer.toString():e.Float!==void 0?typeof e.Float=="object"&&e.Float.fval!==void 0?e.Float.fval.toString():e.Float.toString():e.String!==void 0?typeof e.String=="object"&&e.String.sval!==void 0?h.escape(e.String.sval):h.escape(e.String):(Object.keys(e).length===0||console.warn("A_Const: Unhandled object structure:",JSON.stringify(e,null,2)),"NULL"):"NULL"}ColumnRef(t,s){return c.unwrapList(t.fields).map(i=>i.String?h.quoteIdentifier(i.String.sval||i.String.str):i.A_Star?"*":this.visit(i,s)).join(".")}TypeName(t,s){if(!t.names)return "";let e=[];t.setof&&e.push("SETOF");let i=t.names.map(l=>l.String?l.String.sval||l.String.str:"").filter(Boolean);if(i.length===0)return "";let r=null;t.typmods?i.some(p=>(typeof p=="string"?p:p.String?.sval||p.String?.str)==="interval")?r=this.formatIntervalTypeMods(t.typmods,s):r=this.formatTypeMods(t.typmods,s):t.typemod&&t.typemod!==-1&&(r=this.formatSingleTypeMod(t.typemod,i[0]));let n=(l,p)=>p!=null?l==="interval"?p.startsWith("(")?`${l}${p}`:`${l} ${p}`:`${l}(${p})`:l,a=l=>l.map(p=>p.Integer&&p.Integer.ival!==void 0&&p.Integer.ival!==-1?`[${p.Integer.ival}]`:"[]").join("");if(i.length===1){let l=i[0];if(l==="char")return s.parentNodeTypes.includes("TypeCast")&&r==="1"?e.push('"char"'):e.push(n('"char"',r)),e.join(" ");let p=n(h.quoteIdentifierTypeName(l),r);return t.arrayBounds&&t.arrayBounds.length>0&&(p+=a(t.arrayBounds)),e.push(p),e.join(" ")}if(i.length===2){let[l,p]=i;if(l==="pg_catalog"&&p==="char")return e.push(n("pg_catalog.char",r)),e.join(" ");if(l==="pg_catalog"){let f=`${l}.${p}`;p==="bpchar"&&r?f="char":p==="varchar"?f="varchar":p==="numeric"?f="numeric":p==="int4"?f="int":p==="float8"?f="double precision":p==="float4"?f="real":p==="int8"?f="bigint":p==="int2"?f="smallint":p==="bool"?f="boolean":p==="interval"?(s.parentNodeTypes.includes("TypeCast"),f="interval"):p==="timestamptz"?r?(f=`timestamp(${r}) with time zone`,r=null):f="timestamp with time zone":p==="timetz"?r?(f=`time(${r}) with time zone`,r=null):f="time with time zone":p==="timestamp"?r?(f=`timestamp(${r})`,r=null):f="timestamp":p==="time"&&(r?(f=`time(${r})`,r=null):f="time");let m=n(f,r);return t.arrayBounds&&t.arrayBounds.length>0&&(m+=a(t.arrayBounds)),e.push(m),e.join(" ")}}let u=n(h.quoteTypeDottedName(i),r);return t.arrayBounds&&t.arrayBounds.length>0&&(u+=a(t.arrayBounds)),e.push(u),e.join(" ")}Alias(t,s){let e=t.aliasname,i=[];if(t.colnames){let n=c.unwrapList(t.colnames).map(a=>{let u=this.deparse(a,s);return u.startsWith('"')&&u.endsWith('"')?u:this.quoteIfNeeded(u)});i.push("AS",this.quoteIfNeeded(e)+s.parens(n.join(", ")));}else i.push("AS",this.quoteIfNeeded(e));return i.join(" ")}RangeVar(t,s){let e=[];t&&(!("inh"in t)||t.inh===void 0)&&!s.parentNodeTypes.includes("CompositeTypeStmt")&&!s.parentNodeTypes.includes("AlterTypeStmt")&&s.objtype!=="OBJECT_TYPE"&&!s.parentNodeTypes.includes("CreateForeignTableStmt")&&e.push("ONLY");let i="";if(t.catalogname?(i=h.quoteIdentifier(t.catalogname),t.schemaname&&(i+="."+h.quoteIdentifierAfterDot(t.schemaname)),i+="."+h.quoteIdentifierAfterDot(t.relname)):t.schemaname?i=h.quoteQualifiedIdentifier(t.schemaname,t.relname):i=h.quoteIdentifier(t.relname),e.push(i),t.alias){let n=this.Alias(t.alias,s);e.push(n);}return e.join(" ")}formatIntervalTypeMods(t,s){if(!t||t.length===0)return null;let e=c.unwrapList(t),i={4:"year",2:"month",8:"day",1024:"hour",2048:"minute",4096:"second",6:"year to month",1032:"day to hour",3080:"day to minute",7176:"day to second",3072:"hour to minute",7168:"hour to second",6144:"minute to second"};if(e.length===1){let n=e[0];if(n&&typeof n=="object"){let a=n.A_Const;if(a&&a.ival!==void 0){let u=typeof a.ival=="object"?a.ival.ival:a.ival;if(u!==void 0)return i[u]?i[u]:`(${u})`}}}if(e.length===2){let n=e[0],a=e[1];if(n&&typeof n=="object"){let u=n.A_Const;if(u&&u.ival!==void 0){let l=typeof u.ival=="object"?u.ival.ival:u.ival;if(a&&typeof a=="object"){let p=a.A_Const;if(p&&p.ival!==void 0){let f=typeof p.ival=="object"?p.ival.ival!==void 0?p.ival.ival:0:p.ival;if(l===32767&&f>=0)return `(${f})`;if(i[l]&&f>=0)return `${i[l]}(${f})`}}}}}let r=e.map(n=>{if(n&&typeof n=="object"){let u=n.A_Const;if(u&&u.ival!==void 0){let l=typeof u.ival=="object"?u.ival.ival:u.ival;if(l!==void 0)return i[l]||l.toString()}}return this.visit(n,s)||""}).filter(Boolean);return r.length>0?r.join(" "):null}formatTypeMods(t,s){if(!t||t.length===0)return null;let i=c.unwrapList(t).filter(r=>{if(r&&typeof r=="object"){let n=r.A_Const;if(n&&n.ival&&(typeof n.ival=="object"?n.ival.ival:n.ival)===32767)return false}return true});return i.length===0?null:i.map(r=>this.deparse(r,s)).join(", ")}formatSingleTypeMod(t,s){switch(s){case "varchar":case "bpchar":case "char":if(t>4)return (t-64).toString();break;case "numeric":case "decimal":if(t>4){let e=t-4,i=e>>16&65535,r=e&65535;return r>0?`${i},${r}`:i.toString()}break;case "time":case "timetz":case "timestamp":case "timestamptz":case "interval":if(t>=0)return t.toString();break}return null}getPgCatalogTypeName(t,s){switch(t){case "bpchar":return s!=null?"char":"bpchar";case "varchar":return "varchar";case "numeric":return "numeric";case "bool":return "boolean";case "int2":return "smallint";case "int4":return "int";case "int8":return "bigint";case "real":return "float4";case "time":return "time";case "timestamp":return "timestamp";case "interval":return "interval";case "bit":return "bit";default:return t}}isPgCatalogType(t){let s=t.replace(/^pg_catalog\./,"");if(gi.includes(s))return true;for(let[e,i]of Ti)if(i.includes(s))return true;return false}A_ArrayExpr(t,s){return `ARRAY[${c.unwrapList(t.elements).map(r=>this.visit(r,s)).join(", ")}]`}A_Indices(t,s){let e=[];return t.is_slice?(t.lidx&&e.push(this.visit(t.lidx,s)),e.push(":"),t.uidx&&e.push(this.visit(t.uidx,s))):t.uidx&&e.push(this.visit(t.uidx,s)),`[${e.join("")}]`}A_Indirection(t,s){let e=this.visit(t.arg,s),i=this.getNodeType(t.arg);(i==="TypeCast"||i==="SubLink"||i==="A_Expr"||i==="FuncCall"||i==="A_Indirection"||i==="ColumnRef"||i==="RowExpr")&&(e=`(${e})`);let r=[e],n=c.unwrapList(t.indirection);for(let a of n)if(a.String||a.A_Star){let u=a.A_Star?"*":h.quoteIdentifier(a.String.sval||a.String.str);r.push(`.${u}`);}else r.push(this.visit(a,s));return r.join("")}A_Star(t,s){return "*"}CaseExpr(t,s){let e=["CASE"];t.arg&&e.push(this.visit(t.arg,s));let i=c.unwrapList(t.args);if(s.isPretty()&&i.length>0){for(let r of i){let n=this.visit(r,s);this.containsMultilineStringLiteral(n)?e.push(s.newline()+n):e.push(s.newline()+s.indent(n));}if(t.defresult){let r=this.visit(t.defresult,s);this.containsMultilineStringLiteral(r)?e.push(s.newline()+"ELSE "+r):e.push(s.newline()+s.indent("ELSE "+r));}return e.push(s.newline()+"END"),e.join(" ")}else {for(let r of i)e.push(this.visit(r,s));return t.defresult&&(e.push("ELSE"),e.push(this.visit(t.defresult,s))),e.push("END"),e.join(" ")}}CoalesceExpr(t,s){return `COALESCE(${c.unwrapList(t.args).map(r=>this.visit(r,s)).join(", ")})`}TypeCast(t,s){let e=this.visit(t.arg,s),i=this.TypeName(t.typeName,s);if(i==="bpchar"||i==="pg_catalog.bpchar"){let r=t.typeName?.names;if(r&&r.length===2&&r[0]?.String?.sval==="pg_catalog"&&r[1]?.String?.sval==="bpchar")return `CAST(${e} AS ${i})`}if(this.isPgCatalogType(i)){let r=this.getNodeType(t.arg),n=r==="A_Const"||r==="ColumnRef",a=r==="FuncCall";if((n||a)&&!(n&&(e.includes("(")||e.startsWith("-")))){let l=i.replace("pg_catalog.","");return a?`${s.parens(e)}::${l}`:`${e}::${l}`}}return `CAST(${e} AS ${i})`}CollateClause(t,s){let e=[];if(t.arg){let i=this.visit(t.arg,s),r=this.getNodeType(t.arg);(r==="A_Expr"||r==="FuncCall"||r==="SubLink")&&(i=`(${i})`),e.push(i);}if(e.push("COLLATE"),t.collname){let i=c.unwrapList(t.collname);e.push(i.map(r=>this.visit(r,s)).join("."));}return e.join(" ")}BooleanTest(t,s){let e=[],i=s.spawn("BooleanTest",{bool:true});switch(e.push(this.visit(t.arg,i)),t.booltesttype){case "IS_TRUE":e.push("IS TRUE");break;case "IS_NOT_TRUE":e.push("IS NOT TRUE");break;case "IS_FALSE":e.push("IS FALSE");break;case "IS_NOT_FALSE":e.push("IS NOT FALSE");break;case "IS_UNKNOWN":e.push("IS UNKNOWN");break;case "IS_NOT_UNKNOWN":e.push("IS NOT UNKNOWN");break}return e.join(" ")}NullTest(t,s){let e=[];switch(e.push(this.visit(t.arg,s)),t.nulltesttype){case "IS_NULL":e.push("IS NULL");break;case "IS_NOT_NULL":e.push("IS NOT NULL");break}return e.join(" ")}quoteIfNeeded(t){return h.quoteIdentifier(t)}preserveOperatorDefElemCase(t){return {leftarg:"Leftarg",rightarg:"Rightarg",procedure:"Procedure",function:"Function",commutator:"Commutator",negator:"Negator",restrict:"Restrict",join:"Join",hashes:"Hashes",merges:"Merges"}[t.toLowerCase()]||t}String(t,s){if(s.isStringLiteral||s.isEnumValue)return h.formatEString(t.sval||"");let e=t.sval||"";return s.parentNodeTypes.includes("DefElem")||s.parentNodeTypes.includes("CreateOpClassItem")||s.parentNodeTypes.includes("ObjectWithArgs")&&/^[+\-*/<>=~!@#%^&|`?]+$/.test(e)?e:h.quoteIdentifier(e)}Integer(t,s){return t.ival?.toString()||"0"}Float(t,s){return t.fval||"0.0"}Boolean(t,s){return t.boolval?"true":"false"}BitString(t,s){return t.bsval.startsWith("x")?`x'${t.bsval.substring(1)}'`:t.bsval.startsWith("b")?`b'${t.bsval.substring(1)}'`:`b'${t.bsval}'`}Null(t,s){return "NULL"}List(t,s){return !t.items||t.items.length===0?"":t.items.map(e=>this.visit(e,s)).join(", ")}CreateStmt(t,s){let e=["CREATE"];if(t.relation&&t.relation.relpersistence==="t"?e.push("TEMPORARY"):t.relation&&t.relation.relpersistence==="u"&&e.push("UNLOGGED"),t.if_not_exists?e.push("TABLE IF NOT EXISTS"):e.push("TABLE"),e.push(this.RangeVar(t.relation,s)),t.ofTypename){if(e.push("OF"),e.push(this.TypeName(t.ofTypename,s)),t.tableElts){let r=c.unwrapList(t.tableElts).map(n=>this.deparse(n,s));e.push(s.parens(r.join(", ")));}}else if(t.tableElts){let r=c.unwrapList(t.tableElts).map(n=>this.deparse(n,s.spawn("CreateStmt")));if(s.isPretty()){let n=r.map(a=>{let u=a.trim();return u.startsWith(`
|
|
23
|
-
`)?s.indent(u.substring(1)):s.indent(u)}).join(","+s.newline());e.push("("+s.newline()+n+s.newline()+")");}else e.push(s.parens(r.join(", ")));}else t.partbound||e.push(s.parens(""));if(t.partbound&&t.inhRelations&&t.inhRelations.length>0){e.push("PARTITION OF");let r=c.unwrapList(t.inhRelations).map(n=>this.visit(n,s));if(e.push(r[0]),t.partbound.strategy==="l"&&t.partbound.listdatums){e.push("FOR VALUES IN");let n=c.unwrapList(t.partbound.listdatums).map(a=>this.visit(a,s)).join(", ");e.push(`(${n})`);}else if(t.partbound.strategy==="r"&&(t.partbound.lowerdatums||t.partbound.upperdatums)){if(e.push("FOR VALUES FROM"),t.partbound.lowerdatums){let n=c.unwrapList(t.partbound.lowerdatums).map(a=>this.visit(a,s)).join(", ");e.push(`(${n})`);}if(t.partbound.upperdatums){e.push("TO");let n=c.unwrapList(t.partbound.upperdatums).map(a=>this.visit(a,s)).join(", ");e.push(`(${n})`);}}else if(t.partbound.strategy==="h"&&t.partbound.modulus!==void 0){e.push("FOR VALUES WITH");let n=t.partbound.remainder!==void 0?t.partbound.remainder:0;e.push(`(MODULUS ${t.partbound.modulus}, REMAINDER ${n})`);}else t.partbound.is_default&&e.push("DEFAULT");}else if(t.inhRelations){e.push("INHERITS");let r=c.unwrapList(t.inhRelations).map(n=>this.visit(n,s));e.push(s.parens(r.join(", ")));}if(t.partspec){switch(e.push("PARTITION BY"),t.partspec.strategy){case "PARTITION_STRATEGY_HASH":e.push("HASH");break;case "PARTITION_STRATEGY_LIST":e.push("LIST");break;case "PARTITION_STRATEGY_RANGE":e.push("RANGE");break}if(t.partspec.partParams&&t.partspec.partParams.length>0){let i=c.unwrapList(t.partspec.partParams).map(r=>this.visit(r,s)).join(", ");e.push(`(${i})`);}}if(t.oncommit&&t.oncommit!=="ONCOMMIT_NOOP")switch(e.push("ON COMMIT"),t.oncommit){case "ONCOMMIT_PRESERVE_ROWS":e.push("PRESERVE ROWS");break;case "ONCOMMIT_DELETE_ROWS":e.push("DELETE ROWS");break;case "ONCOMMIT_DROP":e.push("DROP");break}if(t.options&&t.options.length>0){let i=s.spawn("CreateStmt"),r=t.options.map(n=>this.deparse(n,i));e.push("WITH",`(${r.join(", ")})`);}return t.accessMethod&&(e.push("USING"),e.push(this.quoteIfNeeded(t.accessMethod))),e.join(" ")}ColumnDef(t,s){let e=[];if(t.colname&&e.push(h.quoteIdentifier(t.colname)),t.typeName&&e.push(this.TypeName(t.typeName,s)),t.fdwoptions&&t.fdwoptions.length>0){e.push("OPTIONS");let i=s.spawn("ColumnDef"),r=c.unwrapList(t.fdwoptions).map(n=>this.visit(n,i));e.push(`(${r.join(", ")})`);}if(t.collClause&&e.push(this.CollateClause(t.collClause,s)),t.constraints){let r=c.unwrapList(t.constraints).map(n=>{let a=s.spawn("ColumnDef",{isColumnConstraint:true});return this.visit(n,a)});e.push(...r);}return t.raw_default&&(e.push("DEFAULT"),e.push(this.visit(t.raw_default,s))),t.generated&&(e.push("GENERATED ALWAYS AS"),e.push(`(${t.generated})`),e.push("STORED")),t.is_not_null&&e.push("NOT NULL"),e.join(" ")}Constraint(t,s){let e=[];switch(t.conname&&(t.contype==="CONSTR_CHECK"||t.contype==="CONSTR_UNIQUE"||t.contype==="CONSTR_PRIMARY"||t.contype==="CONSTR_FOREIGN")&&(e.push("CONSTRAINT"),e.push(h.quoteIdentifier(t.conname))),t.contype){case "CONSTR_NULL":e.push("NULL");break;case "CONSTR_NOTNULL":e.push("NOT NULL");break;case "CONSTR_DEFAULT":e.push("DEFAULT"),t.raw_expr&&e.push(this.visit(t.raw_expr,s));break;case "CONSTR_CHECK":if(s.isPretty()&&!s.isColumnConstraint?e.push(`
|
|
24
|
-
`+s.indent("CHECK")):e.push("CHECK"),t.raw_expr)if(s.isPretty()){let i=this.visit(t.raw_expr,s);i.includes(`
|
|
25
|
-
`)?e.push(`(
|
|
26
|
-
`+s.indent(i)+`
|
|
27
|
-
)`):e.push(`(${i})`);}else e.push(s.parens(this.visit(t.raw_expr,s)));t.skip_validation&&e.push("NOT VALID"),t.is_no_inherit&&!s.isDomainConstraint&&e.push("NO INHERIT");break;case "CONSTR_GENERATED":e.push("GENERATED"),t.generated_when==="a"?e.push("ALWAYS"):t.generated_when==="s"&&e.push("BY DEFAULT"),e.push("AS"),t.raw_expr&&e.push(s.parens(this.visit(t.raw_expr,s))),e.push("STORED");break;case "CONSTR_IDENTITY":if(e.push("GENERATED"),t.generated_when==="a"?e.push("ALWAYS"):(t.generated_when==="d"||t.generated_when==="s")&&e.push("BY DEFAULT"),e.push("AS IDENTITY"),t.options&&t.options.length>0){let i=c.unwrapList(t.options).map(r=>{if(r.DefElem){let n=r.DefElem;if(n.defname==="sequence_name")return n.arg&&n.arg.List?`SEQUENCE NAME ${c.unwrapList(n.arg).map(l=>this.visit(l,s)).join(".")}`:"SEQUENCE NAME";if(n.defname==="start")return `START WITH ${n.arg?this.visit(n.arg,s):""}`;if(n.defname==="increment")return `INCREMENT BY ${n.arg?this.visit(n.arg,s):""}`;if(n.defname==="minvalue")return n.arg?`MINVALUE ${this.visit(n.arg,s)}`:"NO MINVALUE";if(n.defname==="maxvalue")return n.arg?`MAXVALUE ${this.visit(n.arg,s)}`:"NO MAXVALUE";if(n.defname==="cache")return `CACHE ${n.arg?this.visit(n.arg,s):""}`;if(n.defname==="cycle")return (n.arg?this.visit(n.arg,s):"")==="true"?"CYCLE":"NO CYCLE";let a=n.arg?this.visit(n.arg,s):"";return `${n.defname.toUpperCase()} ${a}`}return this.visit(r,s)});if(s.isPretty()){let r=i.map(n=>s.indent(n));e.push(`(
|
|
28
|
-
`+r.join(`
|
|
29
|
-
`)+`
|
|
30
|
-
)`);}else e.push(`(${i.join(" ")})`);}break;case "CONSTR_PRIMARY":if(e.push("PRIMARY KEY"),t.keys&&t.keys.length>0){let i=c.unwrapList(t.keys).map(r=>this.visit(r,s)).join(", ");e.push(`(${i})`);}t.indexname&&(e.push("USING INDEX"),e.push(t.indexname));break;case "CONSTR_UNIQUE":if(s.isPretty()&&!s.isColumnConstraint?e.push(`
|
|
31
|
-
`+s.indent("UNIQUE")):e.push("UNIQUE"),t.nulls_not_distinct&&e.push("NULLS NOT DISTINCT"),t.keys&&t.keys.length>0){let i=c.unwrapList(t.keys).map(r=>this.visit(r,s)).join(", ");e.push(`(${i})`);}t.indexname&&(e.push("USING INDEX"),e.push(t.indexname));break;case "CONSTR_FOREIGN":if(s.isColumnConstraint)e.push("REFERENCES");else if(s.isPretty()){if(e.push(`
|
|
32
|
-
`+s.indent("FOREIGN KEY")),t.fk_attrs&&t.fk_attrs.length>0){let i=c.unwrapList(t.fk_attrs).map(r=>this.visit(r,s)).join(", ");e.push(`(${i})`);}e.push(`
|
|
33
|
-
`+s.indent("REFERENCES"));}else {if(e.push("FOREIGN KEY"),t.fk_attrs&&t.fk_attrs.length>0){let i=c.unwrapList(t.fk_attrs).map(r=>this.visit(r,s)).join(", ");e.push(`(${i})`);}e.push("REFERENCES");}if(t.pktable)if(s.isPretty()&&!s.isColumnConstraint){let i=e.length-1;i>=0&&e[i].includes("REFERENCES")?e[i]+=" "+this.RangeVar(t.pktable,s):e.push(this.RangeVar(t.pktable,s));}else e.push(this.RangeVar(t.pktable,s));if(t.pk_attrs&&t.pk_attrs.length>0){let i=c.unwrapList(t.pk_attrs).map(r=>this.visit(r,s)).join(", ");if(s.isPretty()&&!s.isColumnConstraint){let r=e.length-1;r>=0?e[r]+=` (${i})`:e.push(`(${i})`);}else e.push(`(${i})`);}if(t.fk_matchtype&&t.fk_matchtype!=="s"){let i="";switch(t.fk_matchtype){case "f":i="MATCH FULL";break;case "p":i="MATCH PARTIAL";break}s.isPretty()&&!s.isColumnConstraint?e.push(`
|
|
34
|
-
`+s.indent(i)):e.push(i);}if(t.fk_upd_action&&t.fk_upd_action!=="a"){let i="ON UPDATE ";switch(t.fk_upd_action){case "r":i+="RESTRICT";break;case "c":i+="CASCADE";break;case "n":i+="SET NULL";break;case "d":i+="SET DEFAULT";break}s.isPretty()?e.push(`
|
|
35
|
-
`+s.indent(i)):(e.push("ON UPDATE"),e.push(i.replace("ON UPDATE ","")));}if(t.fk_del_action&&t.fk_del_action!=="a"){let i="ON DELETE ";switch(t.fk_del_action){case "r":i+="RESTRICT";break;case "c":i+="CASCADE";break;case "n":i+="SET NULL";break;case "d":i+="SET DEFAULT";break}s.isPretty()?e.push(`
|
|
36
|
-
`+s.indent(i)):(e.push("ON DELETE"),e.push(i.replace("ON DELETE ","")));}t.skip_validation&&!s.isDomainConstraint&&(s.isPretty()&&!s.isColumnConstraint?e.push(`
|
|
37
|
-
`+s.indent("NOT VALID")):e.push("NOT VALID"));break;case "CONSTR_ATTR_DEFERRABLE":e.push("DEFERRABLE");break;case "CONSTR_ATTR_NOT_DEFERRABLE":e.push("NOT DEFERRABLE");break;case "CONSTR_ATTR_DEFERRED":e.push("INITIALLY DEFERRED");break;case "CONSTR_ATTR_IMMEDIATE":e.push("INITIALLY IMMEDIATE");break;case "CONSTR_EXCLUSION":if(e.push("EXCLUDE"),t.access_method&&(e.push("USING"),e.push(t.access_method)),t.exclusions&&t.exclusions.length>0){let i=c.unwrapList(t.exclusions).map(r=>{if(this.getNodeType(r)==="List"){let n=c.unwrapList(r);if(n.length>=2){let a=this.visit(n[0],s),u=n[1],l="";if(this.getNodeType(u)==="List"){let p=c.unwrapList(u);p.length>0&&p[0].String&&(l=p[0].String.sval);}else u.String?l=u.String.sval:l=this.visit(u,s);return `${a} WITH ${l}`}}return this.visit(r,s)});e.push(`(${i.join(", ")})`);}t.where_clause&&(e.push("WHERE"),e.push(s.parens(this.visit(t.where_clause,s))));break}if((t.contype==="CONSTR_PRIMARY"||t.contype==="CONSTR_UNIQUE"||t.contype==="CONSTR_FOREIGN")&&(t.deferrable?s.isPretty()&&t.contype==="CONSTR_FOREIGN"?(e.push(`
|
|
38
|
-
`+s.indent("DEFERRABLE")),t.initdeferred===true?e.push(`
|
|
39
|
-
`+s.indent("INITIALLY DEFERRED")):t.initdeferred===false&&e.push(`
|
|
40
|
-
`+s.indent("INITIALLY IMMEDIATE"))):(e.push("DEFERRABLE"),t.initdeferred===true?e.push("INITIALLY DEFERRED"):t.initdeferred===false&&e.push("INITIALLY IMMEDIATE")):t.deferrable===false&&(s.isPretty()&&t.contype==="CONSTR_FOREIGN"?e.push(`
|
|
41
|
-
`+s.indent("NOT DEFERRABLE")):e.push("NOT DEFERRABLE"))),s.isPretty()&&t.contype==="CONSTR_FOREIGN"){let i="";for(let r=0;r<e.length;r++)e[r].startsWith(`
|
|
42
|
-
`)||r>0&&!e[r-1].startsWith(`
|
|
43
|
-
`)&&(i+=" "),i+=e[r];return i}return e.join(" ")}SubLink(t,s){let e=s.parens(this.visit(t.subselect,s));switch(t.subLinkType){case "ANY_SUBLINK":if(t.testexpr&&t.operName){let i=this.visit(t.testexpr,s),r=this.deparseOperatorName(t.operName,s);return `${i} ${r} ANY ${e}`}else if(t.testexpr)return `${this.visit(t.testexpr,s)} IN ${e}`;return e;case "ALL_SUBLINK":if(t.testexpr&&t.operName){let i=this.visit(t.testexpr,s),r=this.deparseOperatorName(t.operName,s);return `${i} ${r} ALL ${e}`}return e;case "EXISTS_SUBLINK":return `EXISTS ${e}`;case "ARRAY_SUBLINK":return `ARRAY${e}`;default:return e}}CaseWhen(t,s){let e=["WHEN"];return t.expr&&e.push(this.visit(t.expr,s)),e.push("THEN"),t.result&&e.push(this.visit(t.result,s)),e.join(" ")}WindowDef(t,s){let e=[];t.name&&e.push(t.name);let i=[];if(t.partitionClause){let n=c.unwrapList(t.partitionClause).map(a=>this.visit(a,s));i.push(`PARTITION BY ${n.join(", ")}`);}if(t.orderClause){let n=c.unwrapList(t.orderClause).map(a=>this.visit(a,s));i.push(`ORDER BY ${n.join(", ")}`);}if(t.frameOptions&&t.frameOptions!==1058){let r=this.formatWindowFrame(t,s.spawn("WindowDef"));r&&i.push(r);}return i.length>0?(t.name&&e.push("AS"),e.push(`(${i.join(" ")})`)):t.name?(e.push("AS"),e.push("()")):e.length===0&&e.push("()"),e.join(" ")}formatWindowFrame(t,s){if(!t.frameOptions)return null;let e=t.frameOptions,r=e&-229377,n=[];if(e&1&&(e&2?n.push("RANGE"):e&4?n.push("ROWS"):e&8&&n.push("GROUPS")),n.length===0)return null;let a=[];if(r===789)a.push("CURRENT ROW"),a.push("AND UNBOUNDED FOLLOWING");else if(r===1077)a.push("UNBOUNDED PRECEDING"),a.push("AND CURRENT ROW");else if(r===18453)t.startOffset&&t.endOffset&&(a.push(`${this.visit(t.startOffset,s)} PRECEDING`),a.push(`AND ${this.visit(t.endOffset,s)} FOLLOWING`));else if(r===1557)a.push("CURRENT ROW"),a.push("AND CURRENT ROW");else if(r===16917)a.push("CURRENT ROW"),t.endOffset&&a.push(`AND ${this.visit(t.endOffset,s)} FOLLOWING`);else {if(r===1058)return null;t.startOffset?e&1024?a.push(`${this.visit(t.startOffset,s)} PRECEDING`):e&2048?a.push(`${this.visit(t.startOffset,s)} FOLLOWING`):a.push(`${this.visit(t.startOffset,s)} PRECEDING`):e&16?a.push("UNBOUNDED PRECEDING"):e&32&&a.push("CURRENT ROW"),t.endOffset?a.length>0&&(e&4096?a.push(`AND ${this.visit(t.endOffset,s)} PRECEDING`):e&8192?a.push(`AND ${this.visit(t.endOffset,s)} FOLLOWING`):a.push(`AND ${this.visit(t.endOffset,s)} FOLLOWING`)):e&128?a.length>0&&a.push("AND UNBOUNDED FOLLOWING"):(a.length>0&&a.push("AND CURRENT ROW"));}return a.length>0&&(n.push("BETWEEN"),n.push(a.join(" "))),e&32768?n.push("EXCLUDE CURRENT ROW"):e&65536?n.push("EXCLUDE GROUP"):e&131072&&n.push("EXCLUDE TIES"),n.join(" ")}SortBy(t,s){let e=[];if(t.node&&e.push(this.visit(t.node,s)),t.sortby_dir==="SORTBY_USING"&&t.useOp){e.push("USING");let i=c.unwrapList(t.useOp);e.push(i.map(r=>r.String&&r.String.sval?r.String.sval:this.visit(r,s)).join("."));}else t.sortby_dir==="SORTBY_ASC"?e.push("ASC"):t.sortby_dir==="SORTBY_DESC"&&e.push("DESC");return t.sortby_nulls==="SORTBY_NULLS_FIRST"?e.push("NULLS FIRST"):t.sortby_nulls==="SORTBY_NULLS_LAST"&&e.push("NULLS LAST"),e.join(" ")}GroupingSet(t,s){switch(t.kind){case "GROUPING_SET_EMPTY":return "()";case "GROUPING_SET_SIMPLE":return "";case "GROUPING_SET_ROLLUP":return `ROLLUP (${c.unwrapList(t.content).map(l=>this.visit(l,s)).join(", ")})`;case "GROUPING_SET_CUBE":return `CUBE (${c.unwrapList(t.content).map(l=>this.visit(l,s)).join(", ")})`;case "GROUPING_SET_SETS":return `GROUPING SETS (${c.unwrapList(t.content).map(l=>this.visit(l,s)).join(", ")})`;default:return ""}}CommonTableExpr(t,s){let e=[];if(t.ctename&&e.push(t.ctename),t.aliascolnames){let r=c.unwrapList(t.aliascolnames).map(n=>this.visit(n,s));e[e.length-1]+=s.parens(r.join(", "));}return e.push("AS"),t.ctematerialized==="CTEMaterializeNever"?e.push("NOT MATERIALIZED"):t.ctematerialized==="CTEMaterializeAlways"&&e.push("MATERIALIZED"),t.ctequery&&e.push(s.parens(this.visit(t.ctequery,s))),e.join(" ")}ParamRef(t,s){return `$${t.number}`}LockingClause(t,s){let e=[];switch(t.strength){case "LCS_FORUPDATE":e.push("FOR UPDATE");break;case "LCS_FORSHARE":e.push("FOR SHARE");break;case "LCS_FORKEYSHARE":e.push("FOR KEY SHARE");break;case "LCS_FORNOKEYUPDATE":e.push("FOR NO KEY UPDATE");break;default:throw new Error(`Unsupported locking strength: ${t.strength}`)}if(t.lockedRels&&t.lockedRels.length>0){e.push("OF");let i=c.unwrapList(t.lockedRels).map(r=>this.visit(r,s)).join(", ");e.push(i);}return t.waitPolicy==="LockWaitSkip"?e.push("SKIP LOCKED"):t.waitPolicy==="LockWaitError"&&e.push("NOWAIT"),e.join(" ")}MinMaxExpr(t,s){let i=c.unwrapList(t.args).map(r=>this.visit(r,s));return t.op==="IS_GREATEST"?`GREATEST(${i.join(", ")})`:`LEAST(${i.join(", ")})`}RowExpr(t,s){let i=c.unwrapList(t.args).map(r=>this.visit(r,s));return t.row_format==="COERCE_IMPLICIT_CAST"?`(${i.join(", ")})`:`ROW(${i.join(", ")})`}OpExpr(t,s){let e=c.unwrapList(t.args);if(e.length===2){let i=this.visit(e[0],s),r=this.visit(e[1],s),n=this.getOperatorName(t.opno);return `${i} ${n} ${r}`}else if(e.length===1){let i=this.visit(e[0],s);return `${this.getOperatorName(t.opno)} ${i}`}throw new Error(`Unsupported OpExpr with ${e.length} arguments`)}DistinctExpr(t,s){let e=c.unwrapList(t.args);if(e.length===2){let i=s.spawn("DistinctExpr",{isStringLiteral:true}),r=this.visit(e[0],i),n=this.visit(e[1],i);return `${r} IS DISTINCT FROM ${n}`}throw new Error(`DistinctExpr requires exactly 2 arguments, got ${e.length}`)}NullIfExpr(t,s){let e=c.unwrapList(t.args);if(e.length===2){let i=s.spawn("NullIfExpr",{isStringLiteral:true}),r=this.visit(e[0],i),n=this.visit(e[1],i);return `NULLIF(${r}, ${n})`}throw new Error(`NullIfExpr requires exactly 2 arguments, got ${e.length}`)}ScalarArrayOpExpr(t,s){let e=c.unwrapList(t.args);if(e.length===2){let i=this.visit(e[0],s),r=this.visit(e[1],s),n=t.useOr?"ANY":"ALL",a=this.getOperatorName(t.opno);return `${i} ${a} ${n}(${r})`}throw new Error(`ScalarArrayOpExpr requires exactly 2 arguments, got ${e.length}`)}Aggref(t,s){let e=this.getAggFunctionName(t.aggfnoid),i=e+"(",r=t.aggdistinct&&t.aggdistinct.length>0;if(t.args&&t.args.length>0){let a=c.unwrapList(t.args).map(u=>this.visit(u,s));r?i+="DISTINCT "+a.join(", "):i+=a.join(", ");}else e.toUpperCase()==="COUNT"&&(r?i+="DISTINCT *":i+="*");if(i+=")",t.aggorder&&t.aggorder.length>0){i+=" ORDER BY ";let a=c.unwrapList(t.aggorder).map(u=>this.visit(u,s));i+=a.join(", ");}return i}WindowFunc(t,s){let i=this.getWindowFunctionName(t.winfnoid)+"(";if(t.args&&t.args.length>0){let n=c.unwrapList(t.args).map(a=>this.visit(a,s));i+=n.join(", ");}return i+=") OVER (",t.winref&&typeof t.winref=="object"?i+=this.visit(t.winref,s):t.winref&&(i+="ORDER BY created_at ASC"),i+=")",i}FieldSelect(t,s){let e=[];return t.arg&&e.push(this.visit(t.arg,s)),t.fieldnum!==void 0&&e.push(`.field_${t.fieldnum}`),e.join("")}RelabelType(t,s){if(t.arg){let e=s.spawn("RelabelType",{isStringLiteral:true});return this.visit(t.arg,e)}return ""}CoerceViaIO(t,s){return t.arg?this.visit(t.arg,s):""}ArrayCoerceExpr(t,s){return t.arg?this.visit(t.arg,s):""}ConvertRowtypeExpr(t,s){if(t.arg){let e=s.spawn("ConvertRowtypeExpr",{isStringLiteral:true});return this.visit(t.arg,e)}return ""}NamedArgExpr(t,s){let e=[];return t.name&&(e.push(t.name),e.push("=>")),t.arg&&e.push(this.visit(t.arg,s)),e.join(" ")}ViewStmt(t,s){let e=[];if(e.push("CREATE"),t.replace&&e.push("OR REPLACE"),t.view&&t.view.relpersistence==="t"&&e.push("TEMPORARY"),e.push("VIEW"),t.view&&e.push(this.RangeVar(t.view,s)),t.aliases&&t.aliases.length>0){let i=c.unwrapList(t.aliases).map(r=>this.visit(r,s));e.push(s.parens(i.join(", ")));}if(t.options&&t.options.length>0){let i=s.spawn("ViewStmt"),r=c.unwrapList(t.options).map(n=>this.visit(n,i));e.push(`WITH (${r.join(", ")})`);}if(e.push("AS"),t.query&&e.push(this.visit(t.query,s)),t.withCheckOption)switch(t.withCheckOption){case "CASCADED_CHECK_OPTION":e.push("WITH CASCADED CHECK OPTION");break;case "LOCAL_CHECK_OPTION":e.push("WITH LOCAL CHECK OPTION");break}return e.join(" ")}IndexStmt(t,s){let e=[];if(e.push("CREATE"),t.unique&&e.push("UNIQUE"),e.push("INDEX"),t.concurrent&&e.push("CONCURRENTLY"),t.if_not_exists&&e.push("IF NOT EXISTS"),t.idxname&&e.push(h.quoteIdentifier(t.idxname)),e.push("ON"),t.relation&&e.push(this.RangeVar(t.relation,s)),t.accessMethod&&t.accessMethod!=="btree"&&(e.push("USING"),e.push(t.accessMethod)),t.indexParams&&t.indexParams.length>0){let i=c.unwrapList(t.indexParams).map(r=>this.visit(r,s));e.push(s.parens(i.join(", ")));}if(t.indexIncludingParams&&t.indexIncludingParams.length>0){let i=c.unwrapList(t.indexIncludingParams).map(r=>this.visit(r,s));e.push("INCLUDE"),e.push(s.parens(i.join(", ")));}if(t.whereClause&&(e.push("WHERE"),e.push(this.visit(t.whereClause,s))),t.options&&t.options.length>0){let i=s.spawn("IndexStmt"),r=c.unwrapList(t.options).map(n=>this.visit(n,i));e.push("WITH"),e.push(s.parens(r.join(", ")));}return t.nulls_not_distinct&&e.push("NULLS NOT DISTINCT"),t.tableSpace&&(e.push("TABLESPACE"),e.push(h.quoteIdentifier(t.tableSpace))),e.join(" ")}IndexElem(t,s){let e=[];if(t.name?e.push(h.quoteIdentifier(t.name)):t.expr&&e.push(s.parens(this.visit(t.expr,s))),t.collation&&t.collation.length>0){let i=c.unwrapList(t.collation).map(r=>this.visit(r,s));e.push("COLLATE"),e.push(i.join("."));}if(t.opclass&&t.opclass.length>0){let r=c.unwrapList(t.opclass).map(n=>this.visit(n,s)).join(".");if(t.opclassopts&&t.opclassopts.length>0){let n=c.unwrapList(t.opclassopts).map(a=>{if(a.DefElem&&a.DefElem.arg&&this.getNodeType(a.DefElem.arg)==="String"){let u=this.getNodeData(a.DefElem.arg);return `${a.DefElem.defname}='${u.sval}'`}return this.visit(a,s.spawn("IndexElem"))});r+=`(${n.join(", ")})`;}e.push(r);}if(t.ordering)switch(t.ordering){case "SORTBY_ASC":e.push("ASC");break;case "SORTBY_DESC":e.push("DESC");break}if(t.nulls_ordering)switch(t.nulls_ordering){case "SORTBY_NULLS_FIRST":e.push("NULLS FIRST");break;case "SORTBY_NULLS_LAST":e.push("NULLS LAST");break}return e.join(" ")}PartitionElem(t,s){let e=[];if(t.name?e.push(h.quoteIdentifier(t.name)):t.expr&&e.push(s.parens(this.visit(t.expr,s))),t.collation&&t.collation.length>0){let i=c.unwrapList(t.collation).map(r=>this.visit(r,s));e.push("COLLATE"),e.push(i.join("."));}if(t.opclass&&t.opclass.length>0){let i=c.unwrapList(t.opclass).map(r=>this.visit(r,s));e.push(i.join("."));}return e.join(" ")}PartitionCmd(t,s){let e=[];if(t.concurrent&&e.push("CONCURRENTLY"),t.name&&e.push(this.visit(t.name,s)),t.bound)if(t.bound.strategy==="l"&&t.bound.listdatums){e.push("FOR VALUES IN");let i=c.unwrapList(t.bound.listdatums).map(r=>this.visit(r,s)).join(", ");e.push(`(${i})`);}else if(t.bound.strategy==="r"&&(t.bound.lowerdatums||t.bound.upperdatums)){if(e.push("FOR VALUES FROM"),t.bound.lowerdatums){let i=c.unwrapList(t.bound.lowerdatums).map(r=>this.visit(r,s)).join(", ");e.push(`(${i})`);}if(t.bound.upperdatums){e.push("TO");let i=c.unwrapList(t.bound.upperdatums).map(r=>this.visit(r,s)).join(", ");e.push(`(${i})`);}}else t.bound.strategy==="h"&&t.bound.modulus!==void 0&&t.bound.remainder!==void 0?(e.push("FOR VALUES WITH"),e.push(`(modulus ${t.bound.modulus}, remainder ${t.bound.remainder})`)):t.bound.is_default&&e.push("DEFAULT");return e.join(" ")}getAggFunctionName(t){return {2100:"avg",2101:"count",2102:"max",2103:"min",2104:"sum",2105:"stddev",2106:"variance",2107:"array_agg",2108:"string_agg"}[t||0]||"unknown_agg"}getWindowFunctionName(t){return {3100:"row_number",3101:"rank",3102:"dense_rank",3103:"percent_rank",3104:"cume_dist",3105:"ntile",3106:"lag",3107:"lead",3108:"first_value",3109:"last_value"}[t||0]||"unknown_window_func"}getOperatorName(t){return {96:"=",518:"<>",97:"<",521:">",523:"<=",525:">=",551:"+",552:"-",553:"*",554:"/",555:"%",484:"-",1752:"~~",1753:"!~~",1754:"~~*",1755:"!~~*",15:"=",58:"<",59:"<=",61:">",62:">="}[t||0]||"="}JoinExpr(t,s){let e=[];t.larg&&e.push(this.visit(t.larg,s));let i="";switch(t.isNatural&&(i="NATURAL "),t.jointype){case "JOIN_INNER":t.isNatural?i+="JOIN":!t.quals&&(!t.usingClause||t.usingClause.length===0)?i+="CROSS JOIN":i+="JOIN";break;case "JOIN_LEFT":i+="LEFT JOIN";break;case "JOIN_FULL":i+="FULL JOIN";break;case "JOIN_RIGHT":i+="RIGHT JOIN";break;default:i+="JOIN";}if(t.rarg){let n=this.visit(t.rarg,s);t.rarg&&"JoinExpr"in t.rarg&&!t.rarg.JoinExpr.alias&&(n=`(${n})`),s.isPretty()?e.push(s.newline()+i+" "+n):e.push(i+" "+n);}else s.isPretty()?e.push(s.newline()+i):e.push(i);if(t.usingClause&&t.usingClause.length>0){let a=c.unwrapList(t.usingClause).map(u=>this.visit(u,s));s.isPretty()?e.push(` USING (${a.join(", ")})`):e.push(`USING (${a.join(", ")})`);}else if(t.quals){let n=this.visit(t.quals,s);s.isPretty()?n.includes("AND")||n.includes("OR")||n.length>50?this.containsMultilineStringLiteral(n)?e.push(` ON ${n}`):e.push(` ON${s.newline()}${s.indent(n)}`):e.push(` ON ${n}`):e.push(`ON ${n}`);}let r;if(s.isPretty()?r=e.join(""):r=e.join(" "),t.join_using_alias&&t.join_using_alias.aliasname){let n=t.join_using_alias.aliasname;if(t.join_using_alias.colnames&&t.join_using_alias.colnames.length>0){let u=c.unwrapList(t.join_using_alias.colnames).map(l=>this.visit(l,s)).join(", ");n+=`(${u})`;}r+=` AS ${n}`;}if(t.alias&&t.alias.aliasname){let n=t.alias.aliasname;if(t.alias.colnames&&t.alias.colnames.length>0){let u=c.unwrapList(t.alias.colnames).map(l=>this.visit(l,s)).join(", ");n+=`(${u})`;}r=`(${r}) ${n}`;}return r}FromExpr(t,s){let r=c.unwrapList(t.fromlist).map(n=>this.visit(n,s)).join(", ");return t.quals&&(r+=` WHERE ${this.visit(t.quals,s)}`),r}TransactionStmt(t,s){let e=[];switch(t.kind){case "TRANS_STMT_BEGIN":e.push("BEGIN");break;case "TRANS_STMT_START":e.push("START TRANSACTION");break;case "TRANS_STMT_COMMIT":e.push("COMMIT");break;case "TRANS_STMT_ROLLBACK":e.push("ROLLBACK");break;case "TRANS_STMT_SAVEPOINT":e.push("SAVEPOINT"),t.savepoint_name&&e.push(h.quoteIdentifier(t.savepoint_name));break;case "TRANS_STMT_RELEASE":e.push("RELEASE SAVEPOINT"),t.savepoint_name&&e.push(h.quoteIdentifier(t.savepoint_name));break;case "TRANS_STMT_ROLLBACK_TO":e.push("ROLLBACK TO"),t.savepoint_name&&e.push(h.quoteIdentifier(t.savepoint_name));break;case "TRANS_STMT_PREPARE":e.push("PREPARE TRANSACTION"),t.gid&&e.push(`'${t.gid}'`);break;case "TRANS_STMT_COMMIT_PREPARED":e.push("COMMIT PREPARED"),t.gid&&e.push(`'${t.gid}'`);break;case "TRANS_STMT_ROLLBACK_PREPARED":e.push("ROLLBACK PREPARED"),t.gid&&e.push(`'${t.gid}'`);break;default:throw new Error(`Unsupported TransactionStmt kind: ${t.kind}`)}if(t.options&&t.options.length>0){let i=c.unwrapList(t.options).map(r=>{if(r.DefElem){let n=r.DefElem;if(n.defname==="transaction_read_only"){let a=false;if(n.arg){let u=this.getNodeData(n.arg);if(u.ival!==void 0)a=(typeof u.ival=="object"?u.ival.ival:u.ival)===1;else if(u.sval!==void 0){let p=(typeof u.sval=="object"?u.sval.sval:u.sval).replace(/'/g,"");a=p.toLowerCase()==="on"||p.toLowerCase()==="true";}}return a?"READ ONLY":"READ WRITE"}else if(n.defname==="transaction_isolation"){if(n.arg&&n.arg.A_Const&&n.arg.A_Const.sval)return `ISOLATION LEVEL ${n.arg.A_Const.sval.sval.toUpperCase()}`}else if(n.defname==="transaction_deferrable"){let a=false;if(n.arg){let u=this.getNodeData(n.arg);if(u.ival!==void 0)a=(typeof u.ival=="object"?u.ival.ival:u.ival)===1;else if(u.sval!==void 0){let p=(typeof u.sval=="object"?u.sval.sval:u.sval).replace(/'/g,"");a=p.toLowerCase()==="on"||p.toLowerCase()==="true";}}return a?"DEFERRABLE":"NOT DEFERRABLE"}}return this.visit(r,s)}).filter(Boolean);i.length>0&&e.push(i.join(", "));}return e.join(" ")}VariableSetStmt(t,s){switch(t.kind){case "VAR_SET_VALUE":let e=t.is_local?"LOCAL ":"",i=t.args?c.unwrapList(t.args).map(l=>{let p=this.getNodeData(l);if(p.sval!==void 0){let f=typeof p.sval=="object"?p.sval.sval:p.sval;return f===""||f.includes(" ")||f.includes("-")||/[A-Z]/.test(f)||/^\d/.test(f)||f.includes(".")||f.includes("$")||f.toLowerCase()==="all"||/^[+-]\d/.test(f)?`'${f}'`:f}return this.visit(l,s)}).join(", "):"",r=h.quoteIdentifier(t.name);return !t.args||t.args.length===0?`SET ${e}${r}`:`SET ${e}${r} TO ${i}`;case "VAR_SET_DEFAULT":return `SET ${h.quoteIdentifier(t.name)} TO DEFAULT`;case "VAR_SET_CURRENT":return `SET ${h.quoteIdentifier(t.name)} FROM CURRENT`;case "VAR_SET_MULTI":if(t.name==="TRANSACTION"||t.name==="SESSION CHARACTERISTICS"){let l=[];if(t.args){let p=c.unwrapList(t.args);for(let f of p)if(f.DefElem){let m=f.DefElem;if(m.defname==="transaction_isolation"){let T=m.arg?this.visit(m.arg,s):"";l.push(`ISOLATION LEVEL ${T.replace(/'/g,"").toUpperCase()}`);}else if(m.defname==="transaction_read_only"){let T=false;if(m.arg){let E=this.getNodeData(m.arg);if(E.ival!==void 0)T=(typeof E.ival=="object"?E.ival.ival:E.ival)===1;else if(E.sval!==void 0){let A=(typeof E.sval=="object"?E.sval.sval:E.sval).replace(/'/g,"");T=A.toLowerCase()==="on"||A.toLowerCase()==="true";}}l.push(T?"READ ONLY":"READ WRITE");}else if(m.defname==="transaction_deferrable"){let T=false;if(m.arg){let E=this.getNodeData(m.arg);if(E.ival!==void 0)T=(typeof E.ival=="object"?E.ival.ival:E.ival)===1;else if(E.sval!==void 0){let A=(typeof E.sval=="object"?E.sval.sval:E.sval).replace(/'/g,"");T=A.toLowerCase()==="on"||A.toLowerCase()==="true";}}l.push(T?"DEFERRABLE":"NOT DEFERRABLE");}}}return t.name==="SESSION CHARACTERISTICS"?`SET SESSION CHARACTERISTICS AS TRANSACTION ${l.join(", ")}`:`SET TRANSACTION ${l.join(", ")}`}else return `SET ${t.args?c.unwrapList(t.args).map(p=>p.VariableSetStmt?this.VariableSetStmt(p.VariableSetStmt,s):this.visit(p,s)).join(", "):""}`;case "VAR_RESET":return `RESET ${h.quoteIdentifier(t.name)}`;case "VAR_RESET_ALL":return "RESET ALL";default:throw new Error(`Unsupported VariableSetStmt kind: ${t.kind}`)}}VariableShowStmt(t,s){return t.name==="ALL"?"SHOW ALL":`SHOW ${t.name}`}CreateSchemaStmt(t,s){let e=["CREATE SCHEMA"];if(t.if_not_exists&&e.push("IF NOT EXISTS"),t.schemaname&&e.push(h.quoteIdentifier(t.schemaname)),t.authrole&&(e.push("AUTHORIZATION"),e.push(this.RoleSpec(t.authrole,s))),t.schemaElts&&t.schemaElts.length>0){let i=c.unwrapList(t.schemaElts).map(r=>this.visit(r,s)).join(" ");e.push(i);}return e.join(" ")}RoleSpec(t,s){if(t.rolename)return this.quoteIfNeeded(t.rolename);switch(t.roletype){case "ROLESPEC_PUBLIC":return "PUBLIC";case "ROLESPEC_CURRENT_USER":return "CURRENT_USER";case "ROLESPEC_SESSION_USER":return "SESSION_USER";case "ROLESPEC_CURRENT_ROLE":return "CURRENT_ROLE";default:return "PUBLIC"}}roletype(t,s){return t.rolename?t.rolename:""}DropStmt(t,s){let e=["DROP"];if(t.removeType)switch(t.removeType){case "OBJECT_TABLE":e.push("TABLE");break;case "OBJECT_VIEW":e.push("VIEW");break;case "OBJECT_INDEX":e.push("INDEX");break;case "OBJECT_SEQUENCE":e.push("SEQUENCE");break;case "OBJECT_SCHEMA":e.push("SCHEMA");break;case "OBJECT_FUNCTION":e.push("FUNCTION");break;case "OBJECT_PROCEDURE":e.push("PROCEDURE");break;case "OBJECT_DATABASE":e.push("DATABASE");break;case "OBJECT_EXTENSION":e.push("EXTENSION");break;case "OBJECT_TYPE":e.push("TYPE");break;case "OBJECT_DOMAIN":e.push("DOMAIN");break;case "OBJECT_TRIGGER":e.push("TRIGGER");break;case "OBJECT_RULE":e.push("RULE");break;case "OBJECT_POLICY":e.push("POLICY");break;case "OBJECT_ROLE":e.push("ROLE");break;case "OBJECT_TABLESPACE":e.push("TABLESPACE");break;case "OBJECT_FOREIGN_SERVER":e.push("SERVER");break;case "OBJECT_FDW":e.push("FOREIGN DATA WRAPPER");break;case "OBJECT_PUBLICATION":e.push("PUBLICATION");break;case "OBJECT_SUBSCRIPTION":e.push("SUBSCRIPTION");break;case "OBJECT_CAST":e.push("CAST");break;case "OBJECT_TRANSFORM":e.push("TRANSFORM");break;case "OBJECT_ACCESS_METHOD":e.push("ACCESS METHOD");break;case "OBJECT_OPERATOR":e.push("OPERATOR");break;case "OBJECT_FOREIGN_TABLE":e.push("FOREIGN TABLE");break;case "OBJECT_MATVIEW":e.push("MATERIALIZED VIEW");break;case "OBJECT_OPCLASS":e.push("OPERATOR CLASS");break;case "OBJECT_OPFAMILY":e.push("OPERATOR FAMILY");break;case "OBJECT_COLLATION":e.push("COLLATION");break;case "OBJECT_CONVERSION":e.push("CONVERSION");break;case "OBJECT_LANGUAGE":e.push("LANGUAGE");break;case "OBJECT_LARGEOBJECT":e.push("LARGE OBJECT");break;case "OBJECT_AGGREGATE":e.push("AGGREGATE");break;case "OBJECT_STATISTIC_EXT":e.push("STATISTICS");break;case "OBJECT_EVENT_TRIGGER":e.push("EVENT TRIGGER");break;case "OBJECT_AMOP":e.push("OPERATOR CLASS");break;case "OBJECT_AMPROC":e.push("OPERATOR CLASS");break;case "OBJECT_ATTRIBUTE":e.push("ATTRIBUTE");break;case "OBJECT_DEFAULT":e.push("DEFAULT");break;case "OBJECT_DEFACL":e.push("DEFAULT PRIVILEGES");break;case "OBJECT_PARAMETER_ACL":e.push("PARAMETER");break;case "OBJECT_PUBLICATION_NAMESPACE":e.push("PUBLICATION");break;case "OBJECT_PUBLICATION_REL":e.push("PUBLICATION");break;case "OBJECT_ROUTINE":e.push("ROUTINE");break;case "OBJECT_TABCONSTRAINT":e.push("CONSTRAINT");break;case "OBJECT_TSCONFIGURATION":e.push("TEXT SEARCH CONFIGURATION");break;case "OBJECT_TSDICTIONARY":e.push("TEXT SEARCH DICTIONARY");break;case "OBJECT_TSPARSER":e.push("TEXT SEARCH PARSER");break;case "OBJECT_TSTEMPLATE":e.push("TEXT SEARCH TEMPLATE");break;case "OBJECT_USER_MAPPING":e.push("USER MAPPING");break;default:throw new Error(`Unsupported DROP object type: ${t.removeType}`)}if(t.concurrent&&e.push("CONCURRENTLY"),t.missing_ok&&e.push("IF EXISTS"),t.objects&&t.objects.length>0)if(t.removeType==="OBJECT_POLICY"){let i=t.objects[0];if(i&&i.List&&i.List.items){let r=i.List.items.map(n=>n.String&&n.String.sval?n.String.sval:this.visit(n,s));if(r.length===3){let[n,a,u]=r;e.push(`${u} ON ${n}.${a}`);}else if(r.length===2){let[n,a]=r;e.push(`${a} ON ${n}`);}else e.push(r.join(", "));}}else if(t.removeType==="OBJECT_CAST"){let i=t.objects.map(r=>{if(r&&r.List&&r.List.items){let a=r.List.items.map(u=>this.visit(u,s)).filter(u=>u&&u.trim());if(a.length===2){let[u,l]=a;return `(${u} AS ${l})`}return a.join(".")}return this.visit(r,s)}).filter(r=>r&&r.trim()).join(", ");i&&e.push(i);}else if(t.removeType==="OBJECT_TRIGGER"||t.removeType==="OBJECT_RULE"){let i=t.objects.map(r=>{if(r&&r.List&&r.List.items){let a=r.List.items.map(u=>u.String&&u.String.sval?h.quoteIdentifier(u.String.sval):this.visit(u,s)).filter(u=>u&&u.trim());if(a.length===2){let[u,l]=a;return `${l} ON ${u}`}else if(a.length===3){let[u,l,p]=a;return `${p} ON ${u}.${l}`}return a.join(".")}return this.visit(r,s)}).filter(r=>r&&r.trim()).join(", ");i&&e.push(i);}else if(t.removeType==="OBJECT_OPFAMILY"||t.removeType==="OBJECT_OPCLASS"){let i=t.objects.map(r=>{if(r&&r.List&&r.List.items){let a=r.List.items.map(u=>u.String&&u.String.sval?u.String.sval:this.visit(u,s)).filter(u=>u&&u.trim());if(a.length===2){let u=a[0],l=a[1];return `${h.quoteIdentifier(l)} USING ${u}`}else if(a.length===3){let u=a[0],l=a[1],p=a[2];return `${h.quoteQualifiedIdentifier(l,p)} USING ${u}`}return a.join(".")}return this.visit(r,s)}).filter(r=>r&&r.trim()).join(", ");i&&e.push(i);}else if(t.removeType==="OBJECT_TRANSFORM"){let i=t.objects.map(r=>{if(r&&r.List&&r.List.items){let a=r.List.items.map(u=>u.String&&u.String.sval?u.String.sval:this.visit(u,s)).filter(u=>u&&u.trim());if(a.length===2){let[u,l]=a;return `FOR ${u} LANGUAGE ${l}`}return a.join(".")}return this.visit(r,s)}).filter(r=>r&&r.trim()).join(", ");i&&e.push(i);}else {let i=t.objects.map(r=>{if(Array.isArray(r))return r.map(l=>this.visit(l,s)).filter(l=>l&&l.trim()).join(".");if(r&&r.List&&r.List.items)return r.List.items.map(l=>l.String&&l.String.sval?h.quoteIdentifier(l.String.sval):this.visit(l,s)).filter(l=>l&&l.trim()).join(".");let n=s.spawn("DropStmt",{objtype:t.removeType});return this.visit(r,n)}).filter(r=>r&&r.trim()).join(", ");i&&e.push(i);}return t.behavior==="DROP_CASCADE"&&e.push("CASCADE"),e.join(" ")}TruncateStmt(t,s){let e=["TRUNCATE"];if(t.relations&&t.relations.length>0){let i=t.relations.map(r=>this.visit(r,s)).join(", ");e.push(i);}return t.restart_seqs&&e.push("RESTART IDENTITY"),t.behavior==="DROP_CASCADE"&&e.push("CASCADE"),e.join(" ")}ReturnStmt(t,s){let e=["RETURN"];if(t.returnval){let i=this.visit(t.returnval,s);e.push(i);}return e.join(" ")}PLAssignStmt(t,s){let e=[];if(t.name){let i=h.quoteIdentifier(t.name);if(t.indirection&&t.indirection.length>0){let r=t.indirection.map(n=>this.visit(n,s)).join("");i+=r;}e.push(i);}if(e.push(":="),t.val){let i=t.val;if(i.targetList){e.push("SELECT");let r=this.targetList(i.targetList,s);e.push(r);}else {let r=this.visit(t.val,s);e.push(r);}}return e.join(" ")}CopyStmt(t,s){let e=["COPY"];if(t.relation){let i=this.RangeVar(t.relation,s);e.push(i);}else if(t.query){let i=this.visit(t.query,s);e.push(`(${i})`);}if(t.attlist&&t.attlist.length>0){let i=c.unwrapList(t.attlist).map(r=>this.visit(r,s)).join(", ");e.push(`(${i})`);}if(t.is_from?e.push("FROM"):e.push("TO"),t.is_program&&e.push("PROGRAM"),t.filename?e.push(`'${t.filename}'`):e.push("STDIN"),t.options&&t.options.length>0){e.push("WITH");let i=c.unwrapList(t.options).map(r=>this.visit(r,s.spawn("CopyStmt"))).join(", ");e.push(`(${i})`);}if(t.whereClause){e.push("WHERE");let i=this.visit(t.whereClause,s);e.push(i);}return e.join(" ")}AlterTableStmt(t,s){let e=["ALTER"];if(t.objtype)switch(t.objtype){case "OBJECT_TABLE":e.push("TABLE");break;case "OBJECT_INDEX":e.push("INDEX");break;case "OBJECT_SEQUENCE":e.push("SEQUENCE");break;case "OBJECT_VIEW":e.push("VIEW");break;case "OBJECT_MATVIEW":e.push("MATERIALIZED VIEW");break;case "OBJECT_FOREIGN_TABLE":e.push("FOREIGN TABLE");break;case "OBJECT_TYPE":e.push("TYPE");break;default:e.push("TABLE");}else e.push("TABLE");t.missing_ok&&e.push("IF EXISTS");let i=s.spawn("AlterTableStmt",{objtype:t.objtype});if(t.relation){let r=this.RangeVar(t.relation,i);e.push(r);}if(t.cmds&&t.cmds.length>0){let r=c.unwrapList(t.cmds);if(s.isPretty()){let n=r.map(a=>{let u=this.visit(a,i);return s.newline()+s.indent(u)}).join(",");e.push(n);}else {let n=r.map(a=>this.visit(a,i)).join(", ");e.push(n);}}return e.join(" ")}AlterTableCmd(t,s){let e=[];if(t.subtype)switch(t.subtype){case "AT_AddColumn":if(s.objtype==="OBJECT_TYPE"?e.push("ADD ATTRIBUTE"):e.push("ADD COLUMN"),t.missing_ok&&e.push("IF NOT EXISTS"),t.def){let i=this.getNodeData(t.def);if(s.isPretty()){let r=[],n=[];if(i.colname&&r.push(h.quoteIdentifier(i.colname)),i.typeName&&r.push(this.TypeName(i.typeName,s)),i.is_not_null&&n.push("NOT NULL"),i.collClause&&n.push(this.CollateClause(i.collClause,s)),i.constraints&&c.unwrapList(i.constraints).forEach(l=>{let p=s.spawn("ColumnDef",{isColumnConstraint:true}),f=this.visit(l,p);if(f.includes("REFERENCES")&&f.includes("ON DELETE")){let m=f.match(/^(.*REFERENCES[^)]*\([^)]*\))\s*(ON\s+DELETE\s+CASCADE.*)$/);m?(n.push(m[1]),n.push(m[2])):n.push(f);}else if(f==="UNIQUE"&&i.raw_default){let m="DEFAULT "+this.visit(i.raw_default,s);n.push("UNIQUE "+m);}else n.push(f);}),i.raw_default&&!i.constraints?.some(u=>this.visit(u,s.spawn("ColumnDef",{isColumnConstraint:true}))==="UNIQUE")){let u="DEFAULT "+this.visit(i.raw_default,s);n.push(u);}if(i.fdwoptions&&i.fdwoptions.length>0){n.push("OPTIONS");let u=s.spawn("ColumnDef"),l=c.unwrapList(i.fdwoptions).map(p=>this.visit(p,u));n.push(`(${l.join(", ")})`);}let a=r.join(" ");if(n.length>0){let u=n.map(l=>s.indent(l)).join(s.newline());a+=s.newline()+u;}e.push(a);}else {let r=[];if(i.colname&&r.push(h.quoteIdentifier(i.colname)),i.typeName&&r.push(this.TypeName(i.typeName,s)),i.collClause&&r.push(this.CollateClause(i.collClause,s)),i.fdwoptions&&i.fdwoptions.length>0){r.push("OPTIONS");let n=s.spawn("ColumnDef"),a=c.unwrapList(i.fdwoptions).map(u=>this.visit(u,n));r.push(`(${a.join(", ")})`);}if(i.constraints){let a=c.unwrapList(i.constraints).map(u=>{let l=s.spawn("ColumnDef",{isColumnConstraint:true});return this.visit(u,l)});r.push(...a);}i.raw_default&&(r.push("DEFAULT"),r.push(this.visit(i.raw_default,s))),i.is_not_null&&r.push("NOT NULL"),e.push(r.join(" "));}}t.behavior==="DROP_CASCADE"&&e.push("CASCADE");break;case "AT_DropColumn":t.missing_ok?s.objtype==="OBJECT_TYPE"?e.push("DROP ATTRIBUTE IF EXISTS"):e.push("DROP COLUMN IF EXISTS"):s.objtype==="OBJECT_TYPE"?e.push("DROP ATTRIBUTE"):e.push("DROP COLUMN"),t.name&&e.push(h.quoteIdentifier(t.name)),t.behavior==="DROP_CASCADE"?e.push("CASCADE"):t.behavior==="DROP_RESTRICT"&&e.push("RESTRICT");break;case "AT_AlterColumnType":if(s.objtype==="OBJECT_TYPE"?e.push("ALTER ATTRIBUTE"):e.push("ALTER COLUMN"),t.name&&e.push(h.quoteIdentifier(t.name)),e.push("TYPE"),t.def){let i=this.getNodeData(t.def);if(i&&i.typeName)e.push(this.TypeName(i.typeName,s)),i.raw_default&&(e.push("USING"),e.push(this.visit(i.raw_default,s)));else {let r=this.visit(t.def,s);e.push(r);}}t.behavior==="DROP_CASCADE"&&e.push("CASCADE");break;case "AT_SetTableSpace":e.push("SET TABLESPACE"),t.name&&e.push(h.quoteIdentifier(t.name));break;case "AT_AddConstraint":if(e.push("ADD"),t.def){let i=this.visit(t.def,s);e.push(i);}break;case "AT_DropConstraint":t.missing_ok?e.push("DROP CONSTRAINT IF EXISTS"):e.push("DROP CONSTRAINT"),t.name&&e.push(h.quoteIdentifier(t.name)),t.behavior==="DROP_CASCADE"?e.push("CASCADE"):t.behavior==="DROP_RESTRICT"&&e.push("RESTRICT");break;case "AT_SetRelOptions":if(e.push("SET"),t.def){let i=s.spawn("AlterTableCmd",{subtype:"AT_SetRelOptions"}),r=c.unwrapList(t.def).map(n=>this.visit(n,i)).join(", ");e.push(`(${r})`);}else e.push("()");break;case "AT_ResetRelOptions":if(e.push("RESET"),t.def){let i=s.spawn("AlterTableCmd",{subtype:"AT_ResetRelOptions"}),r=c.unwrapList(t.def).map(n=>this.visit(n,i)).join(", ");e.push(`(${r})`);}else e.push("()");break;case "AT_ColumnDefault":e.push("ALTER COLUMN"),t.name&&e.push(h.quoteIdentifier(t.name)),t.def?(e.push("SET DEFAULT"),e.push(this.visit(t.def,s))):e.push("DROP DEFAULT");break;case "AT_SetStorage":if(e.push("ALTER COLUMN"),t.name&&e.push(h.quoteIdentifier(t.name)),e.push("SET STORAGE"),t.def){let i=this.visit(t.def,s);e.push(i);}break;case "AT_ClusterOn":e.push("CLUSTER ON"),t.name&&e.push(h.quoteIdentifier(t.name));break;case "AT_DropCluster":e.push("SET WITHOUT CLUSTER");break;case "AT_ChangeOwner":e.push("OWNER TO"),t.newowner&&e.push(this.RoleSpec(t.newowner,s));break;case "AT_AddInherit":e.push("INHERIT"),t.def&&e.push(this.visit(t.def,s));break;case "AT_DropInherit":e.push("NO INHERIT"),t.def&&e.push(this.visit(t.def,s));break;case "AT_SetNotNull":e.push("ALTER COLUMN"),t.name&&e.push(h.quoteIdentifier(t.name)),e.push("SET NOT NULL");break;case "AT_DropNotNull":e.push("ALTER COLUMN"),t.name&&e.push(h.quoteIdentifier(t.name)),e.push("DROP NOT NULL");break;case "AT_SetStatistics":e.push("ALTER COLUMN"),t.name?e.push(h.quoteIdentifier(t.name)):t.num!==void 0&&t.num!==null&&e.push(t.num.toString()),e.push("SET STATISTICS"),t.def&&e.push(this.visit(t.def,s));break;case "AT_SetOptions":if(e.push("ALTER COLUMN"),t.name&&e.push(h.quoteIdentifier(t.name)),e.push("SET"),t.def){let i=s.spawn("AlterTableCmd",{subtype:"AT_SetOptions"}),r=c.unwrapList(t.def).map(n=>this.visit(n,i)).join(", ");e.push(`(${r})`);}else e.push("()");break;case "AT_ResetOptions":if(e.push("ALTER COLUMN"),t.name&&e.push(h.quoteIdentifier(t.name)),e.push("RESET"),t.def){let i=s.spawn("AlterTableCmd",{subtype:"AT_ResetOptions"}),r=c.unwrapList(t.def).map(n=>this.visit(n,i)).join(", ");e.push(`(${r})`);}else e.push("()");break;case "AT_SetCompression":e.push("ALTER COLUMN"),t.name&&e.push(h.quoteIdentifier(t.name)),e.push("SET COMPRESSION"),t.def&&e.push(this.visit(t.def,s));break;case "AT_ValidateConstraint":e.push("VALIDATE CONSTRAINT"),t.name&&e.push(h.quoteIdentifier(t.name));break;case "AT_EnableTrig":e.push("ENABLE TRIGGER"),t.name&&e.push(h.quoteIdentifier(t.name));break;case "AT_EnableAlwaysTrig":e.push("ENABLE ALWAYS TRIGGER"),t.name&&e.push(h.quoteIdentifier(t.name));break;case "AT_EnableReplicaTrig":e.push("ENABLE REPLICA TRIGGER"),t.name&&e.push(h.quoteIdentifier(t.name));break;case "AT_DisableTrig":e.push("DISABLE TRIGGER"),t.name&&e.push(h.quoteIdentifier(t.name));break;case "AT_EnableTrigAll":e.push("ENABLE TRIGGER ALL");break;case "AT_DisableTrigAll":e.push("DISABLE TRIGGER ALL");break;case "AT_EnableTrigUser":e.push("ENABLE TRIGGER USER");break;case "AT_DisableTrigUser":e.push("DISABLE TRIGGER USER");break;case "AT_EnableRule":e.push("ENABLE RULE"),t.name&&e.push(h.quoteIdentifier(t.name));break;case "AT_EnableAlwaysRule":e.push("ENABLE ALWAYS RULE"),t.name&&e.push(h.quoteIdentifier(t.name));break;case "AT_EnableReplicaRule":e.push("ENABLE REPLICA RULE"),t.name&&e.push(h.quoteIdentifier(t.name));break;case "AT_DisableRule":e.push("DISABLE RULE"),t.name&&e.push(h.quoteIdentifier(t.name));break;case "AT_SetAccessMethod":e.push("SET ACCESS METHOD"),t.name?e.push(h.quoteIdentifier(t.name)):e.push("DEFAULT");break;case "AT_EnableRowSecurity":e.push("ENABLE ROW LEVEL SECURITY");break;case "AT_DisableRowSecurity":e.push("DISABLE ROW LEVEL SECURITY");break;case "AT_ForceRowSecurity":e.push("FORCE ROW LEVEL SECURITY");break;case "AT_NoForceRowSecurity":e.push("NO FORCE ROW LEVEL SECURITY");break;case "AT_AttachPartition":e.push("ATTACH PARTITION"),t.def&&e.push(this.visit(t.def,s));break;case "AT_DetachPartition":e.push("DETACH PARTITION"),t.def&&e.push(this.visit(t.def,s));break;case "AT_DetachPartitionFinalize":e.push("DETACH PARTITION"),t.def&&e.push(this.visit(t.def,s)),e.push("FINALIZE");break;case "AT_SetLogged":e.push("SET LOGGED");break;case "AT_SetUnLogged":e.push("SET UNLOGGED");break;case "AT_AddColumnToView":if(e.push("ADD COLUMN"),t.def){let i=this.visit(t.def,s);e.push(i);}break;case "AT_CookedColumnDefault":e.push("ALTER COLUMN"),t.name&&e.push(h.quoteIdentifier(t.name)),t.def?(e.push("SET DEFAULT"),e.push(this.visit(t.def,s))):e.push("DROP DEFAULT");break;case "AT_SetExpression":e.push("ALTER COLUMN"),t.name&&e.push(h.quoteIdentifier(t.name)),e.push("SET EXPRESSION"),t.def&&e.push(this.visit(t.def,s));break;case "AT_DropExpression":e.push("ALTER COLUMN"),t.name&&e.push(h.quoteIdentifier(t.name)),e.push("DROP EXPRESSION");break;case "AT_CheckNotNull":e.push("ALTER COLUMN"),t.name&&e.push(h.quoteIdentifier(t.name)),e.push("SET NOT NULL");break;case "AT_AddIndex":e.push("ADD"),t.def&&e.push(this.visit(t.def,s));break;case "AT_ReAddIndex":e.push("ADD"),t.def&&e.push(this.visit(t.def,s));break;case "AT_ReAddConstraint":e.push("ADD"),t.def&&e.push(this.visit(t.def,s));break;case "AT_ReAddDomainConstraint":e.push("ADD"),t.def&&e.push(this.visit(t.def,s));break;case "AT_AlterConstraint":if(e.push("ALTER CONSTRAINT"),t.def&&this.getNodeType(t.def)==="Constraint"){let i=this.getNodeData(t.def);i.conname&&(e.push(h.quoteIdentifier(i.conname)),i.deferrable!==void 0&&e.push(i.deferrable?"DEFERRABLE":"NOT DEFERRABLE"),i.initdeferred!==void 0&&e.push(i.initdeferred?"INITIALLY DEFERRED":"INITIALLY IMMEDIATE"));}else t.name&&(e.push(h.quoteIdentifier(t.name)),t.def&&e.push(this.visit(t.def,s)));break;case "AT_AddIndexConstraint":e.push("ADD"),t.def&&e.push(this.visit(t.def,s));break;case "AT_ReAddComment":e.push("COMMENT"),t.def&&e.push(this.visit(t.def,s));break;case "AT_AlterColumnGenericOptions":if(e.push("ALTER COLUMN"),t.name&&e.push(h.quoteIdentifier(t.name)),e.push("OPTIONS"),t.def){let i=s.spawn("AlterTableCmd",{alterColumnOptions:true}),r=c.unwrapList(t.def).map(n=>this.visit(n,i)).join(", ");e.push(`(${r})`);}break;case "AT_DropOids":e.push("SET WITHOUT OIDS");break;case "AT_ReplaceRelOptions":if(e.push("REPLACE"),t.def&&Array.isArray(t.def)){let i=c.unwrapList(t.def).map(r=>this.visit(r,s)).join(", ");e.push(`(${i})`);}else e.push("()");break;case "AT_AddOf":e.push("OF"),t.def&&e.push(this.visit(t.def,s));break;case "AT_DropOf":e.push("NOT OF");break;case "AT_ReplicaIdentity":e.push("REPLICA IDENTITY"),t.def&&e.push(this.visit(t.def,s));break;case "AT_GenericOptions":if(e.push("OPTIONS"),t.def){let i=s.spawn("AlterTableCmd",{alterTableOptions:true}),r=c.unwrapList(t.def).map(n=>this.visit(n,i)).join(", ");e.push(`(${r})`);}break;case "AT_AddIdentity":e.push("ALTER COLUMN"),t.name&&e.push(h.quoteIdentifier(t.name)),e.push("ADD"),t.def&&e.push(this.visit(t.def,s));break;case "AT_SetIdentity":e.push("ALTER COLUMN"),t.name&&e.push(h.quoteIdentifier(t.name)),e.push("SET"),t.def&&e.push(this.visit(t.def,s));break;case "AT_DropIdentity":e.push("ALTER COLUMN"),t.name&&e.push(h.quoteIdentifier(t.name)),e.push("DROP IDENTITY"),t.behavior==="DROP_CASCADE"?e.push("CASCADE"):t.behavior==="DROP_RESTRICT"&&e.push("RESTRICT");break;case "AT_ReAddStatistics":e.push("ADD"),t.def&&e.push(this.visit(t.def,s));break;default:throw new Error(`Unsupported AlterTableCmd subtype: ${t.subtype}`)}return e.join(" ")}CreateFunctionStmt(t,s){let e=["CREATE"];if(t.replace&&e.push("OR REPLACE"),t.is_procedure?e.push("PROCEDURE"):e.push("FUNCTION"),t.funcname&&t.funcname.length>0){let r=t.funcname.map(a=>a.String?.sval||a.String?.str||"").filter(a=>a),n=h.quoteDottedName(r);if(t.parameters&&t.parameters.length>0){let a=t.parameters.filter(u=>this.getNodeData(u).mode!=="FUNC_PARAM_TABLE").map(u=>this.visit(u,s));if(a.length>0)if(s.isPretty()){let u=a.map(l=>s.indent(l)).join(","+s.newline());e.push(n+"("+s.newline()+u+s.newline()+")");}else e.push(n+"("+a.join(", ")+")");else e.push(n+"()");}else e.push(n+"()");}if(t.parameters&&t.parameters.some(r=>this.getNodeData(r).mode==="FUNC_PARAM_TABLE")){let r=t.parameters.filter(n=>this.getNodeData(n).mode==="FUNC_PARAM_TABLE").map(n=>this.visit(n,s));if(s.isPretty()){let n=r.map(a=>s.indent(a)).join(","+s.newline());e.push("RETURNS TABLE ("+s.newline()+n+s.newline()+")");}else e.push("RETURNS TABLE ("),e.push(r.join(", ")),e.push(")");}else t.returnType&&(e.push("RETURNS"),e.push(this.TypeName(t.returnType,s)));if(t.options&&t.options.length>0){let r=s.spawn("CreateFunctionStmt"),n=t.options.map(a=>this.visit(a,r));e.push(...n);}if(t.sql_body){let r=this.getNodeType(t.sql_body);if(r==="ReturnStmt")e.push(this.visit(t.sql_body,s));else {if(e.push("BEGIN ATOMIC"),r==="List"){let n=c.unwrapList(t.sql_body);if(!(n.length===0||n.length===1&&Object.keys(n[0]).length===0)){let a=n;n.length===1&&n[0].List&&(a=c.unwrapList(n[0]));let u=a.filter(l=>l&&Object.keys(l).length>0).map(l=>{let p=this.visit(l,s);return p.endsWith(";")?p:p+";"});u.length>0&&e.push(u.join(" "));}}else {let n=this.visit(t.sql_body,s);n&&!n.endsWith(";")?e.push(n+";"):e.push(n);}e.push("END");}}return e.join(" ")}FunctionParameter(t,s){let e=[];if(t.mode)switch(t.mode){case "FUNC_PARAM_IN":e.push("IN");break;case "FUNC_PARAM_OUT":e.push("OUT");break;case "FUNC_PARAM_INOUT":e.push("INOUT");break;case "FUNC_PARAM_VARIADIC":e.push("VARIADIC");break}return t.name&&e.push(h.quoteIdentifier(t.name)),t.argType&&e.push(this.TypeName(t.argType,s)),t.defexpr&&(e.push("DEFAULT"),e.push(this.visit(t.defexpr,s))),e.join(" ")}CreateEnumStmt(t,s){let e=["CREATE","TYPE"];if(t.typeName){let i=c.unwrapList(t.typeName).map(r=>this.visit(r,s)).join(".");e.push(i);}if(e.push("AS","ENUM"),t.vals&&t.vals.length>0){let i=s.spawn("CreateEnumStmt",{isEnumValue:true}),r=c.unwrapList(t.vals).map(n=>this.visit(n,i)).join(", ");e.push(`(${r})`);}else e.push("()");return e.join(" ")}CreateDomainStmt(t,s){let e=["CREATE","DOMAIN"];if(t.domainname){let i=c.unwrapList(t.domainname).map(r=>this.visit(r,s)).join(".");e.push(i);}if(t.typeName&&(e.push("AS"),e.push(this.TypeName(t.typeName,s))),t.collClause&&e.push(this.CollateClause(t.collClause,s)),t.constraints){let i=c.unwrapList(t.constraints).map(r=>this.visit(r,s)).join(" ");i&&e.push(i);}return e.join(" ")}CreateRoleStmt(t,s){let e=["CREATE"];if(t.stmt_type==="ROLESTMT_ROLE"?e.push("ROLE"):t.stmt_type==="ROLESTMT_USER"?e.push("USER"):t.stmt_type==="ROLESTMT_GROUP"?e.push("GROUP"):e.push("ROLE"),t.role){let i=h.quoteIdentifier(t.role);e.push(i);}if(t.options){let i=c.unwrapList(t.options).map(r=>this.visit(r,s.spawn("CreateRoleStmt"))).join(" ");i&&(e.push("WITH"),e.push(i));}return e.join(" ")}DefElem(t,s){if(!t.defname)return "";if(s.parentNodeTypes.includes("DefineStmt")&&["commutator","negator"].includes(t.defname.toLowerCase())&&t.arg&&this.getNodeType(t.arg)==="List"){let e=this.getNodeData(t.arg),i=c.unwrapList(e.items);if(i.length===1&&i[0].String)return `${this.preserveOperatorDefElemCase(t.defname)} = ${i[0].String.sval}`}if(s.parentNodeTypes.includes("IndexElem")){if(t.arg&&this.getNodeType(t.arg)==="String"){let e=this.getNodeData(t.arg);return `${t.defname}='${e.sval}'`}return `${t.defname}=${this.visit(t.arg,s.spawn("DefElem"))}`}if(s.parentNodeTypes.includes("DefineStmt")&&["hashes","merges"].includes(t.defname.toLowerCase())&&!t.arg)return t.defname!==t.defname.toLowerCase()&&t.defname!==t.defname.toUpperCase()?h.quoteIdentifier(t.defname):t.defname.charAt(0).toUpperCase()+t.defname.slice(1).toLowerCase();if(s.parentNodeTypes.includes("AlterFdwStmt")||s.parentNodeTypes.includes("CreateFdwStmt")||s.parentNodeTypes.includes("CreateForeignServerStmt")||s.parentNodeTypes.includes("AlterForeignServerStmt")||s.parentNodeTypes.includes("CreateUserMappingStmt")||s.parentNodeTypes.includes("AlterUserMappingStmt")||s.parentNodeTypes.includes("ColumnDef")||s.parentNodeTypes.includes("CreateForeignTableStmt")||s.parentNodeTypes.includes("ImportForeignSchemaStmt")||s.alterColumnOptions||s.alterTableOptions){if(["handler","validator"].includes(t.defname)){if(!t.arg)return `NO ${t.defname.toUpperCase()}`;let e=s.spawn("DefElem"),i=this.visit(t.arg,e);return `${t.defname.toUpperCase()} ${i}`}if(t.arg){let e=s.spawn("DefElem"),i=this.visit(t.arg,e);if(s.parentNodeTypes.includes("CreateFdwStmt")||s.parentNodeTypes.includes("AlterFdwStmt")){let a=typeof i=="string"&&!i.startsWith("'")?`'${i}'`:i,u=h.quoteIdentifier(t.defname);return t.defaction==="DEFELEM_ADD"?`ADD ${u} ${a}`:t.defaction==="DEFELEM_DROP"?`DROP ${u}`:t.defaction==="DEFELEM_SET"?`SET ${u} ${a}`:`${u} ${a}`}let r=typeof i=="string"&&!i.startsWith("'")?`'${i}'`:i;return t.defaction==="DEFELEM_ADD"?`ADD ${t.defname} ${r}`:t.defaction==="DEFELEM_DROP"?`DROP ${t.defname}`:t.defaction==="DEFELEM_SET"?`SET ${t.defname} ${r}`:`${h.quoteIdentifier(t.defname)} ${r}`}else if(t.defaction==="DEFELEM_DROP")return `DROP ${t.defname}`}if((s.parentNodeTypes.includes("CreateSeqStmt")||s.parentNodeTypes.includes("AlterSeqStmt"))&&(t.defname==="minvalue"||t.defname==="maxvalue")&&!t.arg)return `NO ${t.defname.toUpperCase()}`;if((s.parentNodeTypes.includes("CreateRoleStmt")||s.parentNodeTypes.includes("AlterRoleStmt"))&&t.defname==="password"){if(!t.arg)return "PASSWORD NULL";let e=s.spawn("DefElem"),i=this.visit(t.arg,e);return `PASSWORD ${typeof i=="string"&&!i.startsWith("'")?`'${i}'`:i}`}if(t.arg){let e=s.spawn("DefElem"),i=this.visit(t.arg,e);if(s.parentNodeTypes.includes("AlterOperatorStmt")){if(t.arg&&this.getNodeType(t.arg)==="TypeName"){let n=this.getNodeData(t.arg);if(n.names){let a=c.unwrapList(n.names);if(a.length===1&&a[0].String)return `${t.defname} = ${a[0].String.sval}`}}if(t.arg&&this.getNodeType(t.arg)==="List"){let n=this.getNodeData(t.arg),a=c.unwrapList(n.items);if(a.length===1&&a[0].String)return `${t.defname} = ${a[0].String.sval}`}}if(s.parentNodeTypes.includes("CreatedbStmt")||s.parentNodeTypes.includes("DropdbStmt")){let n=typeof i=="string"?h.escape(i):i;return `${t.defname} = ${n}`}if(s.parentNodeTypes.includes("CreateForeignServerStmt")||s.parentNodeTypes.includes("AlterForeignServerStmt")){let n=typeof i=="string"?h.escape(i):i;return `${h.quoteIdentifier(t.defname)} ${n}`}if(s.parentNodeTypes.includes("CreateRoleStmt")||s.parentNodeTypes.includes("AlterRoleStmt")){if(t.defname==="rolemembers"&&t.arg&&this.getNodeType(t.arg)==="List"){let n=this.getNodeData(t.arg),u=c.unwrapList(n.items).map(l=>this.visit(l,s));return s.parentNodeTypes.includes("CreateRoleStmt")?`ROLE ${u.join(", ")}`:`ADD USER ${u.join(", ")}`}if(t.defname==="addroleto"&&t.arg&&this.getNodeType(t.arg)==="List"){let n=this.getNodeData(t.arg);return `IN ROLE ${c.unwrapList(n.items).map(l=>this.visit(l,s)).join(", ")}`}if(t.defname==="validUntil")return `VALID UNTIL ${typeof i=="string"&&!i.startsWith("'")?`'${i}'`:i}`;if(t.defname==="adminmembers")return `ADMIN ${i}`;if(t.defname==="connectionlimit")return `CONNECTION LIMIT ${i}`;if(t.defname==="sysid")return `SYSID ${i}`;if(String(i)==="true")return t.defname==="isreplication"?"REPLICATION":t.defname==="canlogin"?"LOGIN":t.defname.toUpperCase();if(String(i)==="false")return t.defname==="canlogin"?"NOLOGIN":t.defname==="isreplication"?"NOREPLICATION":`NO${t.defname.toUpperCase()}`}if(s.parentNodeTypes.includes("CreateSeqStmt")||s.parentNodeTypes.includes("AlterSeqStmt")){if(t.defname==="owned_by")if(t.arg&&this.getNodeType(t.arg)==="List"){let n=this.getNodeData(t.arg);return `OWNED BY ${c.unwrapList(n.items).map(l=>{let p=this.getNodeData(l);if(this.getNodeType(l)==="String"){let f=p.sval;return h.quoteIdentifier(f)}return this.visit(l,s)}).join(".")}`}else return `OWNED BY ${i}`;if(t.defname==="cycle"){let n=String(i).toLowerCase();if(n==="true"||n==="1")return "CYCLE";if(n==="false"||n==="0")return "NO CYCLE"}return (t.defname==="minvalue"||t.defname==="maxvalue")&&!t.arg?`NO ${t.defname.toUpperCase()}`:`${t.defname.toUpperCase()} ${i}`}if(s.parentNodeTypes.includes("CreateTableSpaceStmt")||s.parentNodeTypes.includes("AlterTableSpaceOptionsStmt"))return `${t.defname.toUpperCase()} ${i}`;if(s.parentNodeTypes.includes("ExplainStmt"))return i?`${t.defname.toUpperCase()} ${i.toUpperCase()}`:t.defname.toUpperCase();if(s.parentNodeTypes.includes("DoStmt")){if(t.defname==="as"){let n=s.spawn("DefElem"),a=t.arg?this.visit(t.arg,n):"";if(Array.isArray(a)){let l=a.join(""),p=this.getFunctionDelimiter(l);return `${p}${l}${p}`}else {let u=this.getFunctionDelimiter(a);return `${u}${a}${u}`}}return ""}if(s.parentNodeTypes.includes("CreateFunctionStmt")||s.parentNodeTypes.includes("AlterFunctionStmt")){if(t.defname==="as")if(t.arg&&t.arg.List){let u=(t.arg.List.items||[]).map(l=>l.String?l.String.sval:this.visit(l,s));if(u.length===1){let l=u[0],p=this.getFunctionDelimiter(l);return `AS ${p}${l}${p}`}else return `AS ${u.map(l=>{let p=this.getFunctionDelimiter(l);return `${p}${l}${p}`}).join(", ")}`}else if(Array.isArray(i)){let n=i;if(n.length===1){let a=n[0],u=this.getFunctionDelimiter(a);return `AS ${u}${a}${u}`}else return `AS ${n.map(a=>{let u=this.getFunctionDelimiter(a);return `${u}${a}${u}`}).join(", ")}`}else {let n=this.getFunctionDelimiter(i);return `AS ${n}${i}${n}`}return t.defname==="language"?`LANGUAGE ${i}`:t.defname==="volatility"?i.toUpperCase():t.defname==="strict"?i==="true"?"STRICT":"CALLED ON NULL INPUT":t.defname==="security"?i==="true"?"SECURITY DEFINER":"SECURITY INVOKER":t.defname==="leakproof"?i==="true"?"LEAKPROOF":"NOT LEAKPROOF":t.defname==="cost"?`COST ${i}`:t.defname==="rows"?`ROWS ${i}`:t.defname==="window"?i==="true"?"WINDOW":"":t.defname==="set"?this.visit(t.arg,s):`${t.defname.toUpperCase()} ${i}`}if(s.parentNodeTypes.includes("CreateExtensionStmt")||s.parentNodeTypes.includes("AlterExtensionStmt")||s.parentNodeTypes.includes("CreateFdwStmt")||s.parentNodeTypes.includes("AlterFdwStmt")){if(s.parentNodeTypes.includes("AlterExtensionStmt")){if(t.defname==="new_version")return `UPDATE TO ${typeof i=="string"&&!i.startsWith("'")?`'${i}'`:i}`;if(t.defname==="schema")return `SET SCHEMA ${i}`}if(s.parentNodeTypes.includes("CreateFdwStmt")){if(["handler","validator"].includes(t.defname))return `${t.defname.toUpperCase()} ${i}`;let n=typeof i=="string"?h.escape(i):i;return `${t.defname} ${n}`}return t.defname==="cascade"?i==="true"?"CASCADE":"":`${t.defname.toUpperCase()} ${i}`}if(s.parentNodeTypes.includes("IndexStmt"))return `${t.defname}=${i}`;if(s.parentNodeTypes.includes("IndexElem")){if(t.arg&&this.getNodeType(t.arg)==="String"){let n=this.getNodeData(t.arg);return `${t.defname}='${n.sval}'`}return `${t.defname}=${i}`}if(s.parentNodeTypes.includes("CreateStmt")){if(t.arg&&this.getNodeType(t.arg)==="Integer"){let n=this.getNodeData(t.arg);return `${t.defname}=${n.ival}`}return `${t.defname}=${i}`}if(s.parentNodeTypes.includes("CreateEventTrigStmt")){if(t.arg&&this.getNodeType(t.arg)==="List"){let n=this.getNodeData(t.arg),u=c.unwrapList(n.items).map(l=>this.getNodeType(l)==="String"?`'${this.getNodeData(l).sval||""}'`:this.visit(l,s));return `${t.defname} IN (${u.join(", ")})`}return `${t.defname} = ${i}`}if((s.parentNodeTypes.includes("AlterTableCmd")||s.parentNodeTypes.includes("AlterTableStmt"))&&!s.parentNodeTypes.includes("ColumnDef")){let n=t.defnamespace?`${t.defnamespace}.${t.defname}`:t.defname;return t.arg&&this.getNodeType(t.arg)==="TypeName"?`${n} = ${i}`:`${n} = ${i}`}if(s.parentNodeTypes.includes("ViewStmt")){if(typeof i=="string"&&/^\d+$/.test(i))return `${t.defname}=${i}`;let n=typeof i=="string"?h.escape(i):i;return `${t.defname} = ${n}`}if(s.parentNodeTypes.includes("CopyStmt"))return t.defname==="format"&&t.arg&&this.getNodeType(t.arg)==="String"?`FORMAT ${this.getNodeData(t.arg).sval.toUpperCase()}`:t.arg?`${t.defname.toUpperCase()} ${i}`:t.defname.toUpperCase();if(s.parentNodeTypes.includes("DefineStmt")){let n=this.preserveOperatorDefElemCase(t.defname);if(["commutator","negator"].includes(t.defname.toLowerCase())){if(t.arg){if(t.arg&&this.getNodeType(t.arg)==="List"){let l=this.getNodeData(t.arg),p=c.unwrapList(l.items);if(p.length===1&&p[0].String)return `${n} = ${p[0].String.sval}`}let u=i.replace(/^"(.*)"$/,"$1");return `${n} = ${u}`}return n}if(["hashes","merges"].includes(t.defname.toLowerCase()))return t.defname!==t.defname.toLowerCase()&&t.defname!==t.defname.toUpperCase()?h.quoteIdentifier(t.defname):n.toUpperCase();let a=h.quoteIdentifier(t.defname);if(a!==t.defname){if(t.arg){if(this.getNodeType(t.arg)==="String"){let u=this.getNodeData(t.arg);return u.sval==="true"||u.sval==="false"?`${a} = ${u.sval}`:`${a} = '${u.sval}'`}return `${a} = ${i}`}return a}if(n!==t.defname)return t.arg?`${n} = ${i}`:n;if(t.arg&&this.getNodeType(t.arg)==="String"){let u=this.getNodeData(t.arg);return u.sval==="true"||u.sval==="false"?`${t.defname} = ${u.sval}`:`${t.defname} = '${u.sval}'`}if(t.arg&&this.getNodeType(t.arg)==="Boolean"){let u=this.getNodeData(t.arg);return `${t.defname} = ${u.boolval?"true":"false"}`}if(t.arg&&this.getNodeType(t.arg)==="Integer"){let u=this.getNodeData(t.arg);return `${t.defname} = ${u.ival}`}if(t.arg&&this.getNodeType(t.arg)==="TypeName"){let u=this.getNodeData(t.arg);if(u.names){let l=c.unwrapList(u.names);if(l.length===1&&l[0].String)return `${t.defname} = ${l[0].String.sval}`}return `${t.defname} = ${i}`}}let r=typeof i=="string"?h.escape(i):i;return `${t.defname} = ${r}`}return s.parentNodeTypes.includes("DefineStmt")&&!t.arg&&t.defname!==t.defname.toLowerCase()&&t.defname!==t.defname.toUpperCase()?h.quoteIdentifier(t.defname):t.defname.toUpperCase()}CreateTableSpaceStmt(t,s){let e=["CREATE","TABLESPACE"];if(t.tablespacename&&e.push(t.tablespacename),t.owner&&(e.push("OWNER"),e.push(this.RoleSpec(t.owner,s))),t.location&&(e.push("LOCATION"),e.push(`'${t.location}'`)),t.options&&t.options.length>0){e.push("WITH");let i=s.spawn("CreateTableSpaceStmt"),r=c.unwrapList(t.options).map(n=>this.visit(n,i)).join(", ");e.push(`(${r})`);}return e.join(" ")}DropTableSpaceStmt(t,s){let e=["DROP","TABLESPACE"];return t.missing_ok&&e.push("IF","EXISTS"),t.tablespacename&&e.push(t.tablespacename),e.join(" ")}AlterTableSpaceOptionsStmt(t,s){let e=["ALTER","TABLESPACE"];if(t.tablespacename&&e.push(t.tablespacename),t.isReset?e.push("RESET"):e.push("SET"),t.options&&t.options.length>0){let i=s.spawn("AlterTableSpaceOptionsStmt"),r=c.unwrapList(t.options).map(n=>this.visit(n,i)).join(", ");e.push(`(${r})`);}return e.join(" ")}CreateExtensionStmt(t,s){let e=["CREATE","EXTENSION"];if(t.if_not_exists&&e.push("IF","NOT","EXISTS"),t.extname&&e.push(this.quoteIfNeeded(t.extname)),t.options&&t.options.length>0){let i=s.spawn("CreateExtensionStmt"),r=c.unwrapList(t.options).map(n=>this.visit(n,i)).join(" ");e.push(r);}return e.join(" ")}AlterExtensionStmt(t,s){let e=["ALTER","EXTENSION"];if(t.extname&&e.push(this.quoteIfNeeded(t.extname)),t.options&&t.options.length>0){let i=s.spawn("AlterExtensionStmt"),r=c.unwrapList(t.options).map(n=>this.visit(n,i)).join(" ");e.push(r);}return e.join(" ")}AlterExtensionContentsStmt(t,s){let e=["ALTER","EXTENSION"];if(t.extname&&e.push(this.quoteIfNeeded(t.extname)),t.action===1?e.push("ADD"):t.action===-1&&e.push("DROP"),t.objtype)try{e.push(this.getObjectTypeKeyword(t.objtype));}catch{e.push(t.objtype.toString());}return t.object&&e.push(this.visit(t.object,s)),e.join(" ")}CreateFdwStmt(t,s){let e=["CREATE","FOREIGN","DATA","WRAPPER"];if(t.fdwname&&e.push(t.fdwname),t.func_options&&t.func_options.length>0){let i=s.spawn("CreateFdwStmt"),r=c.unwrapList(t.func_options).map(n=>this.visit(n,i)).join(" ");e.push(r);}if(t.options&&t.options.length>0){e.push("OPTIONS");let i=s.spawn("CreateFdwStmt"),r=c.unwrapList(t.options).map(n=>this.visit(n,i)).join(", ");e.push(`(${r})`);}return e.join(" ")}SetOperationStmt(t,s){let e=[];if(t.larg&&e.push(this.visit(t.larg,s)),t.op)switch(t.op){case "SETOP_UNION":e.push(t.all?"UNION ALL":"UNION");break;case "SETOP_INTERSECT":e.push(t.all?"INTERSECT ALL":"INTERSECT");break;case "SETOP_EXCEPT":e.push(t.all?"EXCEPT ALL":"EXCEPT");break;default:throw new Error(`Unsupported SetOperation: ${t.op}`)}return t.rarg&&e.push(this.visit(t.rarg,s)),e.join(" ")}ReplicaIdentityStmt(t,s){let e=[];if(t.identity_type)switch(t.identity_type){case "d":case "REPLICA_IDENTITY_DEFAULT":e.push("DEFAULT");break;case "f":case "REPLICA_IDENTITY_FULL":e.push("FULL");break;case "n":case "REPLICA_IDENTITY_NOTHING":e.push("NOTHING");break;case "i":case "REPLICA_IDENTITY_INDEX":e.push("USING","INDEX"),t.name&&e.push(h.quoteIdentifier(t.name));break;default:throw new Error(`Unsupported replica identity type: ${t.identity_type}`)}return e.join(" ")}AlterCollationStmt(t,s){let e=["ALTER","COLLATION"];if(t.collname&&t.collname.length>0){let i=c.unwrapList(t.collname).map(r=>this.visit(r,s)).join(".");e.push(i);}return e.push("REFRESH","VERSION"),e.join(" ")}AlterDomainStmt(t,s){let e=["ALTER","DOMAIN"];if(t.typeName&&t.typeName.length>0){let i=c.unwrapList(t.typeName).map(r=>this.visit(r,s)).join(".");e.push(i);}if(t.subtype)switch(t.subtype){case "AT_SetNotNull":e.push("SET","NOT","NULL");break;case "AT_DropNotNull":e.push("DROP","NOT","NULL");break;case "AT_SetDefault":e.push("SET","DEFAULT"),t.def&&e.push(this.visit(t.def,s));break;case "AT_DropDefault":e.push("DROP","DEFAULT");break;case "AT_AddConstraint":if(e.push("ADD"),t.def){let i=s.spawn("CreateDomainStmt",{isDomainConstraint:true});e.push(this.visit(t.def,i));}break;case "AT_DropConstraint":e.push("DROP","CONSTRAINT"),t.missing_ok&&e.push("IF","EXISTS"),t.name&&e.push(h.quoteIdentifier(t.name)),t.behavior==="DROP_CASCADE"&&e.push("CASCADE");break;case "AT_ValidateConstraint":e.push("VALIDATE","CONSTRAINT"),t.name&&e.push(h.quoteIdentifier(t.name));break;case "C":if(e.push("ADD"),t.def){let i=s.spawn("CreateDomainStmt",{isDomainConstraint:true});e.push(this.visit(t.def,i));}break;case "X":e.push("DROP","CONSTRAINT"),t.missing_ok&&e.push("IF","EXISTS"),t.name&&e.push(h.quoteIdentifier(t.name)),t.behavior==="DROP_CASCADE"&&e.push("CASCADE");break;case "V":e.push("VALIDATE","CONSTRAINT"),t.name&&e.push(h.quoteIdentifier(t.name));break;case "O":e.push("SET","NOT","NULL");break;case "N":e.push("DROP","NOT","NULL");break;case "T":t.def?(e.push("SET","DEFAULT"),e.push(this.visit(t.def,s))):e.push("DROP","DEFAULT");break;default:throw new Error(`Unsupported AlterDomainStmt subtype: ${t.subtype}`)}return e.join(" ")}PrepareStmt(t,s){let e=["PREPARE"];if(t.name&&e.push(t.name),t.argtypes&&t.argtypes.length>0){let i=c.unwrapList(t.argtypes).map(r=>this.visit(r,s)).join(", ");e.push(`(${i})`);}return e.push("AS"),t.query&&e.push(this.visit(t.query,s)),e.join(" ")}ExecuteStmt(t,s){let e=["EXECUTE"];if(t.name&&e.push(t.name),t.params&&t.params.length>0){let i=c.unwrapList(t.params).map(r=>this.visit(r,s)).join(", ");e.push(`(${i})`);}return e.join(" ")}DeallocateStmt(t,s){let e=["DEALLOCATE"];return t.isall?e.push("ALL"):t.name&&e.push(t.name),e.join(" ")}NotifyStmt(t,s){let e=["NOTIFY"];return t.conditionname&&e.push(t.conditionname),t.payload!==null&&t.payload!==void 0&&(e.push(","),e.push(`'${t.payload}'`)),e.join(" ")}ListenStmt(t,s){let e=["LISTEN"];return t.conditionname&&e.push(t.conditionname),e.join(" ")}UnlistenStmt(t,s){let e=["UNLISTEN"];return t.conditionname?e.push(t.conditionname):e.push("*"),e.join(" ")}CheckPointStmt(t,s){return "CHECKPOINT"}LoadStmt(t,s){if(!t.filename)throw new Error("LoadStmt requires filename");return `LOAD '${t.filename}'`}DiscardStmt(t,s){switch(t.target){case "DISCARD_ALL":return "DISCARD ALL";case "DISCARD_PLANS":return "DISCARD PLANS";case "DISCARD_SEQUENCES":return "DISCARD SEQUENCES";case "DISCARD_TEMP":return "DISCARD TEMP";default:throw new Error(`Unsupported DiscardStmt target: ${t.target}`)}}CommentStmt(t,s){let e=["COMMENT ON"];if(t.objtype)switch(t.objtype){case "OBJECT_TABLE":e.push("TABLE");break;case "OBJECT_COLUMN":e.push("COLUMN");break;case "OBJECT_INDEX":e.push("INDEX");break;case "OBJECT_FUNCTION":e.push("FUNCTION");break;case "OBJECT_VIEW":e.push("VIEW");break;case "OBJECT_SCHEMA":e.push("SCHEMA");break;case "OBJECT_DATABASE":e.push("DATABASE");break;case "OBJECT_MATVIEW":e.push("MATERIALIZED VIEW");break;case "OBJECT_TABCONSTRAINT":e.push("CONSTRAINT");break;case "OBJECT_TRIGGER":e.push("TRIGGER");break;case "OBJECT_FDW":e.push("FOREIGN DATA WRAPPER");break;case "OBJECT_EVENT_TRIGGER":e.push("EVENT TRIGGER");break;case "OBJECT_FOREIGN_SERVER":e.push("SERVER");break;case "OBJECT_FOREIGN_TABLE":e.push("FOREIGN TABLE");break;case "OBJECT_STATISTIC_EXT":e.push("STATISTICS");break;case "OBJECT_LARGEOBJECT":e.push("LARGE OBJECT");break;case "OBJECT_OPERATOR":e.push("OPERATOR");break;case "OBJECT_OPCLASS":e.push("OPERATOR CLASS");break;case "OBJECT_OPFAMILY":e.push("OPERATOR FAMILY");break;case "OBJECT_POLICY":e.push("POLICY");break;case "OBJECT_TSPARSER":e.push("TEXT SEARCH PARSER");break;case "OBJECT_TSDICTIONARY":e.push("TEXT SEARCH DICTIONARY");break;case "OBJECT_TSTEMPLATE":e.push("TEXT SEARCH TEMPLATE");break;case "OBJECT_TSCONFIGURATION":e.push("TEXT SEARCH CONFIGURATION");break;case "OBJECT_TRANSFORM":e.push("TRANSFORM");break;default:e.push(t.objtype.replace("OBJECT_",""));}if(t.object)if(t.object&&typeof t.object=="object"&&"List"in t.object){let i=t.object.List;if(i.items&&i.items.length>0){let r=c.unwrapList(i.items).map(n=>this.visit(n,s));if(t.objtype==="OBJECT_TABCONSTRAINT")if(r.length===3){let[n,a,u]=r;e.push(u),e.push("ON"),e.push(`${n}.${a}`);}else if(r.length===2){let[n,a]=r;e.push(a),e.push("ON"),e.push(n);}else e.push(r.join("."));else if(t.objtype==="OBJECT_TRIGGER")if(r.length===2){let[n,a]=r;e.push(a),e.push("ON"),e.push(n);}else e.push(r.join("."));else if(t.objtype==="OBJECT_RULE")if(r.length===2){let[n,a]=r;e.push(a),e.push("ON"),e.push(n);}else e.push(r.join("."));else if(t.objtype==="OBJECT_OPERATOR")if(t.object&&t.object.ObjectWithArgs){let n=t.object.ObjectWithArgs,a=n.objname&&n.objname[0]&&n.objname[0].String?n.objname[0].String.sval:"unknown";a.startsWith('"')&&a.endsWith('"')&&(a=a.slice(1,-1));let u=[];n.objargs&&n.objargs.forEach(l=>{if(!l||Object.keys(l).length===0)u.push("NONE");else if(l.TypeName){let p=this.visit(l,s);u.push(p);}else u.push("unknown");}),e.push(`${a} (${u.join(", ")})`);}else e.push(r.join("."));else if(t.objtype==="OBJECT_OPCLASS"||t.objtype==="OBJECT_OPFAMILY")if(r.length>=2){let n=r[r.length-1],a=r[r.length-2];e.push(`${n} USING ${a}`);}else e.push(r.join(" USING "));else if(t.objtype==="OBJECT_POLICY")if(r.length===2){let[n,a]=r;e.push(a),e.push("ON"),e.push(n);}else e.push(r.join("."));else if(t.objtype==="OBJECT_TRANSFORM")if(r.length===2){let[n,a]=r;e.push("FOR"),e.push(n),e.push("LANGUAGE"),e.push(a);}else e.push(r.join("."));else e.push(r.join("."));}}else if(t.objtype==="OBJECT_OPERATOR"&&t.object&&t.object.ObjectWithArgs){let i=t.object.ObjectWithArgs,r=i.objname&&i.objname[0]&&i.objname[0].String?i.objname[0].String.sval:"unknown";r.startsWith('"')&&r.endsWith('"')&&(r=r.slice(1,-1));let n=[];i.objargs&&i.objargs.forEach(a=>{if(!a||Object.keys(a).length===0)n.push("NONE");else if(a.TypeName){let u=this.visit(a,s);n.push(u);}else n.push("unknown");}),e.push(`${r}(${n.join(", ")})`);}else {let i=s.spawn("CommentStmt",{objtype:t.objtype});e.push(this.visit(t.object,i));}return e.push("IS"),t.comment===null||t.comment===void 0?e.push("NULL"):t.comment&&e.push(h.formatEString(t.comment)),e.join(" ")}LockStmt(t,s){let e=["LOCK","TABLE"];if(t.relations&&t.relations.length>0){let i=c.unwrapList(t.relations).map(r=>this.visit(r,s)).join(", ");e.push(i);}if(t.mode!==void 0){let i=["","ACCESS SHARE","ROW SHARE","ROW EXCLUSIVE","SHARE UPDATE EXCLUSIVE","SHARE","SHARE ROW EXCLUSIVE","EXCLUSIVE","ACCESS EXCLUSIVE"];t.mode>=1&&t.mode<i.length&&e.push("IN",i[t.mode],"MODE");}return t.nowait&&e.push("NOWAIT"),e.join(" ")}CreatePolicyStmt(t,s){let e=[],i=["CREATE","POLICY"];if(t.policy_name&&i.push(h.quoteIdentifier(t.policy_name)),e.push(i.join(" ")),t.table&&(s.isPretty()?e.push(s.newline()+s.indent(`ON ${this.RangeVar(t.table,s)}`)):(e.push("ON"),e.push(this.RangeVar(t.table,s)))),t.permissive===void 0?s.isPretty()?e.push(s.newline()+s.indent("AS RESTRICTIVE")):e.push("AS","RESTRICTIVE"):t.permissive===true&&(s.isPretty()?e.push(s.newline()+s.indent("AS PERMISSIVE")):e.push("AS","PERMISSIVE")),t.cmd_name&&(s.isPretty()?e.push(s.newline()+s.indent(`FOR ${t.cmd_name.toUpperCase()}`)):e.push("FOR",t.cmd_name.toUpperCase())),t.roles&&t.roles.length>0){let r=c.unwrapList(t.roles).map(n=>this.visit(n,s));s.isPretty()?e.push(s.newline()+s.indent(`TO ${r.join(", ")}`)):(e.push("TO"),e.push(r.join(", ")));}if(t.qual)if(s.isPretty()){let r=this.visit(t.qual,s);e.push(s.newline()+s.indent("USING (")),e.push(s.newline()+s.indent(s.indent(r))),e.push(s.newline()+s.indent(")"));}else e.push("USING"),e.push(`(${this.visit(t.qual,s)})`);if(t.with_check)if(s.isPretty()){let r=this.visit(t.with_check,s);e.push(s.newline()+s.indent("WITH CHECK (")),e.push(s.newline()+s.indent(s.indent(r))),e.push(s.newline()+s.indent(")"));}else e.push("WITH CHECK"),e.push(`(${this.visit(t.with_check,s)})`);return s.isPretty()?e.join(""):e.join(" ")}AlterPolicyStmt(t,s){let e=["ALTER","POLICY"];if(t.policy_name&&e.push(h.quoteIdentifier(t.policy_name)),t.table&&(e.push("ON"),e.push(this.RangeVar(t.table,s))),t.roles&&t.roles.length>0){e.push("TO");let i=c.unwrapList(t.roles).map(r=>this.visit(r,s));e.push(i.join(", "));}return t.qual&&(e.push("USING"),e.push(`(${this.visit(t.qual,s)})`)),t.with_check&&(e.push("WITH CHECK"),e.push(`(${this.visit(t.with_check,s)})`)),e.join(" ")}CreateUserMappingStmt(t,s){let e=["CREATE"];if(t.if_not_exists&&e.push("IF","NOT","EXISTS"),e.push("USER","MAPPING"),e.push("FOR"),t.user?e.push(this.RoleSpec(t.user,s)):e.push("CURRENT_USER"),e.push("SERVER"),t.servername&&e.push(h.quoteIdentifier(t.servername)),t.options&&t.options.length>0){e.push("OPTIONS");let i=s.spawn("CreateUserMappingStmt"),r=c.unwrapList(t.options).map(n=>this.visit(n,i));e.push(`(${r.join(", ")})`);}return e.join(" ")}CreateStatsStmt(t,s){let e=["CREATE"];if(t.if_not_exists&&e.push("IF","NOT","EXISTS"),e.push("STATISTICS"),t.defnames&&t.defnames.length>0){let i=c.unwrapList(t.defnames).map(r=>this.visit(r,s));e.push(i.join("."));}if(t.stat_types&&t.stat_types.length>0){let i=c.unwrapList(t.stat_types).map(r=>this.visit(r,s));e.push(`(${i.join(", ")})`);}if(e.push("ON"),t.exprs&&t.exprs.length>0){let i=c.unwrapList(t.exprs).map(r=>this.visit(r,s));e.push(i.join(", "));}if(t.relations&&t.relations.length>0){e.push("FROM");let i=c.unwrapList(t.relations).map(r=>this.visit(r,s));e.push(i.join(", "));}return e.join(" ")}StatsElem(t,s){return t.name?this.quoteIfNeeded(t.name):t.expr?`(${this.visit(t.expr,s)})`:""}CreatePublicationStmt(t,s){let e=["CREATE","PUBLICATION"];if(t.pubname&&e.push(h.quoteIdentifier(t.pubname)),t.pubobjects&&t.pubobjects.length>0){e.push("FOR","TABLE");let i=c.unwrapList(t.pubobjects).map(r=>this.visit(r,s));e.push(i.join(", "));}else t.for_all_tables&&e.push("FOR","ALL","TABLES");if(t.options&&t.options.length>0){e.push("WITH");let i=c.unwrapList(t.options).map(r=>this.visit(r,s));e.push(`(${i.join(", ")})`);}return e.join(" ")}CreateSubscriptionStmt(t,s){let e=["CREATE","SUBSCRIPTION"];if(t.subname&&e.push(h.quoteIdentifier(t.subname)),e.push("CONNECTION"),t.conninfo&&e.push(`'${t.conninfo}'`),e.push("PUBLICATION"),t.publication&&t.publication.length>0){let i=c.unwrapList(t.publication).map(r=>this.visit(r,s));e.push(i.join(", "));}if(t.options&&t.options.length>0){e.push("WITH");let i=c.unwrapList(t.options).map(r=>this.visit(r,s));e.push(`(${i.join(", ")})`);}return e.join(" ")}AlterPublicationStmt(t,s){let e=["ALTER","PUBLICATION"];if(t.pubname&&e.push(h.quoteIdentifier(t.pubname)),t.action)switch(t.action){case "AP_AddObjects":e.push("ADD");break;case "AP_DropObjects":e.push("DROP");break;case "AP_SetObjects":e.push("SET");break;default:throw new Error(`Unsupported AlterPublicationStmt action: ${t.action}`)}if(t.for_all_tables)e.push("FOR ALL TABLES");else if(t.pubobjects&&t.pubobjects.length>0){e.push("FOR TABLE");let i=c.unwrapList(t.pubobjects).map(r=>this.visit(r,s));e.push(i.join(", "));}if(t.options&&t.options.length>0){e.push("WITH");let i=c.unwrapList(t.options).map(r=>this.visit(r,s));e.push(`(${i.join(", ")})`);}return e.join(" ")}AlterSubscriptionStmt(t,s){let e=["ALTER","SUBSCRIPTION"];if(t.subname&&e.push(h.quoteIdentifier(t.subname)),t.kind)switch(t.kind){case "ALTER_SUBSCRIPTION_OPTIONS":e.push("SET");break;case "ALTER_SUBSCRIPTION_CONNECTION":e.push("CONNECTION"),t.conninfo&&e.push(`'${t.conninfo}'`);break;case "ALTER_SUBSCRIPTION_SET_PUBLICATION":if(e.push("SET PUBLICATION"),t.publication&&t.publication.length>0){let i=c.unwrapList(t.publication).map(r=>this.visit(r,s));e.push(i.join(", "));}break;case "ALTER_SUBSCRIPTION_REFRESH":e.push("REFRESH PUBLICATION");break;case "ALTER_SUBSCRIPTION_ENABLED":e.push("ENABLE");break;case "ALTER_SUBSCRIPTION_SKIP":e.push("SKIP");break;default:throw new Error(`Unsupported AlterSubscriptionStmt kind: ${t.kind}`)}if(t.options&&t.options.length>0){e.push("WITH");let i=c.unwrapList(t.options).map(r=>this.visit(r,s));e.push(`(${i.join(", ")})`);}return e.join(" ")}DropSubscriptionStmt(t,s){let e=["DROP","SUBSCRIPTION"];if(t.missing_ok&&e.push("IF EXISTS"),t.subname&&e.push(h.quoteIdentifier(t.subname)),t.behavior)switch(t.behavior){case "DROP_CASCADE":e.push("CASCADE");break;case "DROP_RESTRICT":e.push("RESTRICT");break}return e.join(" ")}DoStmt(t,s){let e=["DO"];if(t.args&&t.args.length>0){let i=s.spawn("DoStmt"),r=c.unwrapList(t.args),n=[];for(let a of r)if(this.getNodeType(a)==="DefElem"){let l=this.getNodeData(a);if(l.defname==="language"){let p=this.visit(l.arg,i);n.push(`LANGUAGE ${p}`);}else if(l.defname==="as")if(this.getNodeType(l.arg)==="String"){let f=this.getNodeData(l.arg),m=this.getFunctionDelimiter(f.sval);n.push(`${m}${f.sval}${m}`);}else n.push(this.visit(l.arg,i));}e.push(...n);}return e.join(" ")}generateUniqueDollarTag(t){let s=/\$[a-zA-Z0-9_]*\$/g,e=t.match(s)||[];if(e.length===0)return "$$";let i=new Set(e);if(i.has("$$")){let r=1,n=`$do${r}$`;for(;i.has(n);)r++,n=`$do${r}$`;return n}return "$$"}InlineCodeBlock(t,s){if(t.source_text){let i=this.getFunctionDelimiter(t.source_text);return `${i}${t.source_text}${i}`}let e=this.options.functionDelimiter||"$$";return `${e}${e}`}CallContext(t,s){return t.atomic!==void 0?t.atomic?"ATOMIC":"NOT ATOMIC":""}ConstraintsSetStmt(t,s){let e=["SET","CONSTRAINTS"];if(t.constraints&&t.constraints.length>0){let i=c.unwrapList(t.constraints).map(r=>this.visit(r,s));e.push(i.join(", "));}else e.push("ALL");return e.push(t.deferred?"DEFERRED":"IMMEDIATE"),e.join(" ")}AlterSystemStmt(t,s){let e=["ALTER","SYSTEM"];if(t.setstmt){let r=this.VariableSetStmt(t.setstmt,s).replace(/^SET\s+/,"");e.push("SET",r);}return e.join(" ")}VacuumRelation(t,s){let e=[];if(t.relation&&e.push(this.RangeVar(t.relation,s)),t.va_cols&&t.va_cols.length>0){e.push("(");let i=c.unwrapList(t.va_cols).map(r=>this.visit(r,s));e.push(i.join(", ")),e.push(")");}return e.join(" ")}DropOwnedStmt(t,s){let e=["DROP","OWNED","BY"];if(t.roles&&t.roles.length>0){let i=c.unwrapList(t.roles).map(r=>this.visit(r,s));e.push(i.join(", "));}if(t.behavior)switch(t.behavior){case "DROP_CASCADE":e.push("CASCADE");break;case "DROP_RESTRICT":e.push("RESTRICT");break}return e.join(" ")}ReassignOwnedStmt(t,s){let e=["REASSIGN","OWNED","BY"];if(t.roles&&t.roles.length>0){let i=c.unwrapList(t.roles).map(r=>this.visit(r,s));e.push(i.join(", "));}return e.push("TO"),t.newrole&&e.push(this.RoleSpec(t.newrole,s)),e.join(" ")}AlterTSDictionaryStmt(t,s){let e=["ALTER","TEXT","SEARCH","DICTIONARY"];if(t.dictname&&t.dictname.length>0){let i=c.unwrapList(t.dictname).map(r=>this.visit(r,s));e.push(i.join("."));}if(t.options&&t.options.length>0){e.push("(");let i=c.unwrapList(t.options).map(r=>this.visit(r,s));e.push(i.join(", ")),e.push(")");}return e.join(" ")}AlterTSConfigurationStmt(t,s){let e=["ALTER","TEXT","SEARCH","CONFIGURATION"];if(t.cfgname&&t.cfgname.length>0){let i=c.unwrapList(t.cfgname).map(r=>this.visit(r,s));e.push(i.join("."));}if(t.kind)switch(t.kind){case "ALTER_TSCONFIG_ADD_MAPPING":if(e.push("ADD","MAPPING","FOR"),t.tokentype&&t.tokentype.length>0){let i=c.unwrapList(t.tokentype).map(r=>this.visit(r,s));e.push(i.join(", "));}if(t.dicts&&t.dicts.length>0){e.push("WITH");let i=c.unwrapList(t.dicts).map(r=>r.List&&r.List.items?c.unwrapList(r.List.items).map(n=>this.visit(n,s)).join("."):this.visit(r,s));e.push(i.join(", "));}break;case "ALTER_TSCONFIG_ALTER_MAPPING_FOR_TOKEN":if(e.push("ALTER","MAPPING","FOR"),t.tokentype&&t.tokentype.length>0){let i=c.unwrapList(t.tokentype).map(r=>this.visit(r,s));e.push(i.join(", "));}if(t.dicts&&t.dicts.length>0){e.push("WITH");let i=c.unwrapList(t.dicts).map(r=>r.List&&r.List.items?c.unwrapList(r.List.items).map(n=>this.visit(n,s)).join("."):this.visit(r,s));e.push(i.join(", "));}break;case "ALTER_TSCONFIG_REPLACE_DICT":if(e.push("ALTER","MAPPING","REPLACE"),t.dicts&&t.dicts.length>=2){let i=c.unwrapList(t.dicts).map(r=>r.List&&r.List.items?c.unwrapList(r.List.items).map(n=>this.visit(n,s)).join("."):this.visit(r,s));e.push(i[0],"WITH",i.slice(1).join(", "));}break;case "ALTER_TSCONFIG_REPLACE_DICT_FOR_TOKEN":if(e.push("ALTER","MAPPING","FOR"),t.tokentype&&t.tokentype.length>0){let i=c.unwrapList(t.tokentype).map(r=>this.visit(r,s));e.push(i.join(", "));}if(t.dicts&&t.dicts.length>=2){e.push("REPLACE");let i=c.unwrapList(t.dicts).map(r=>r.List&&r.List.items?c.unwrapList(r.List.items).map(n=>this.visit(n,s)).join("."):this.visit(r,s));e.push(i[0],"WITH",i.slice(1).join(", "));}break;case "ALTER_TSCONFIG_DROP_MAPPING":if(e.push("DROP","MAPPING","FOR"),t.tokentype&&t.tokentype.length>0){let i=c.unwrapList(t.tokentype).map(r=>this.visit(r,s));e.push(i.join(", "));}break;default:throw new Error(`Unsupported AlterTSConfigurationStmt kind: ${t.kind}`)}return e.join(" ")}ClosePortalStmt(t,s){let e=["CLOSE"];return t.portalname?e.push(h.quoteIdentifier(t.portalname)):e.push("ALL"),e.join(" ")}FetchStmt(t,s){let e=[t.ismove?"MOVE":"FETCH"],i=t.howMany===9223372036854776e3;if(t.direction)switch(t.direction){case "FETCH_FORWARD":i?e.push("FORWARD","ALL"):t.howMany!==void 0&&t.howMany!==null?e.push("FORWARD",t.howMany.toString()):e.push("FORWARD");break;case "FETCH_BACKWARD":i?e.push("BACKWARD","ALL"):t.howMany!==void 0&&t.howMany!==null?e.push("BACKWARD",t.howMany.toString()):e.push("BACKWARD");break;case "FETCH_ABSOLUTE":t.howMany!==void 0&&t.howMany!==null&&e.push("ABSOLUTE",t.howMany.toString());break;case "FETCH_RELATIVE":t.howMany!==void 0&&t.howMany!==null?e.push("RELATIVE",t.howMany.toString()):e.push("RELATIVE","0");break;default:throw new Error(`Unsupported FetchStmt direction: ${t.direction}`)}else i&&e.push("ALL");return t.portalname&&e.push(h.quoteIdentifier(t.portalname)),e.join(" ")}AlterStatsStmt(t,s){let e=["ALTER","STATISTICS"];if(t.defnames&&t.defnames.length>0){let i=c.unwrapList(t.defnames).map(r=>this.visit(r,s));e.push(i.join("."));}return e.push("SET","STATISTICS"),t.stxstattarget&&e.push(this.visit(t.stxstattarget,s)),e.join(" ")}ObjectWithArgs(t,s){let e="";if(t.objname&&t.objname.length>0){let i=s.spawn("ObjectWithArgs");e=c.unwrapList(t.objname).map(n=>this.visit(n,i)).join(".");}if(t.objfuncargs&&t.objfuncargs.length>0){let i=c.unwrapList(t.objfuncargs).map(r=>this.visit(r,s));e+=`(${i.join(", ")})`;}else if(t.objargs&&t.objargs.length>0){let i=c.unwrapList(t.objargs).map(r=>!r||Object.keys(r).length===0?"NONE":this.visit(r,s));e+=`(${i.join(", ")})`;}else t.args_unspecified||((s.parentNodeTypes.includes("CommentStmt")||s.parentNodeTypes.includes("DropStmt"))&&s.objtype==="OBJECT_AGGREGATE"?e+="(*)":s.parentNodeTypes.includes("CreateOpClassItem")||(e+="()"));return e}AlterOperatorStmt(t,s){let e=["ALTER","OPERATOR"];if(t.opername&&e.push(this.ObjectWithArgs(t.opername,s)),e.push("SET"),t.options&&t.options.length>0){let i=s.spawn("AlterOperatorStmt"),r=c.unwrapList(t.options).map(n=>this.visit(n,i));e.push(`(${r.join(", ")})`);}return e.join(" ")}AlterFdwStmt(t,s){let e=["ALTER","FOREIGN","DATA","WRAPPER"];if(t.fdwname&&e.push(h.quoteIdentifier(t.fdwname)),t.func_options&&t.func_options.length>0){let i=s.spawn("AlterFdwStmt"),r=c.unwrapList(t.func_options).map(n=>this.visit(n,i));e.push(r.join(" "));}if(t.options&&t.options.length>0){e.push("OPTIONS");let i=s.spawn("AlterFdwStmt"),r=c.unwrapList(t.options).map(n=>this.visit(n,i));e.push(`(${r.join(", ")})`);}return e.join(" ")}CreateForeignServerStmt(t,s){let e=["CREATE","SERVER"];if(t.if_not_exists&&e.push("IF","NOT","EXISTS"),t.servername&&e.push(h.quoteIdentifier(t.servername)),t.servertype&&e.push("TYPE",h.escape(t.servertype)),t.version&&e.push("VERSION",h.escape(t.version)),t.fdwname&&e.push("FOREIGN","DATA","WRAPPER",h.quoteIdentifier(t.fdwname)),t.options&&t.options.length>0){e.push("OPTIONS"),e.push("(");let i=s.spawn("CreateForeignServerStmt"),r=c.unwrapList(t.options).map(n=>this.visit(n,i));e.push(r.join(", ")),e.push(")");}return e.join(" ")}AlterForeignServerStmt(t,s){let e=["ALTER","SERVER"];if(t.servername&&e.push(h.quoteIdentifier(t.servername)),t.version&&e.push("VERSION",h.escape(t.version)),t.options&&t.options.length>0){e.push("OPTIONS"),e.push("(");let i=s.spawn("AlterForeignServerStmt"),r=c.unwrapList(t.options).map(n=>this.visit(n,i));e.push(r.join(", ")),e.push(")");}return e.join(" ")}AlterUserMappingStmt(t,s){let e=["ALTER","USER","MAPPING","FOR"];if(t.user?e.push(this.RoleSpec(t.user,s)):e.push("CURRENT_USER"),e.push("SERVER"),t.servername&&e.push(h.quoteIdentifier(t.servername)),t.options&&t.options.length>0){e.push("OPTIONS");let i=s.spawn("AlterUserMappingStmt"),r=c.unwrapList(t.options).map(n=>this.visit(n,i));e.push(`(${r.join(", ")})`);}return e.join(" ")}DropUserMappingStmt(t,s){let e=["DROP","USER","MAPPING"];return t.missing_ok&&e.push("IF","EXISTS"),e.push("FOR"),t.user?e.push(this.RoleSpec(t.user,s)):e.push("CURRENT_USER"),e.push("SERVER"),t.servername&&e.push(h.quoteIdentifier(t.servername)),e.join(" ")}ImportForeignSchemaStmt(t,s){let e=["IMPORT","FOREIGN","SCHEMA"];if(t.remote_schema&&e.push(h.quoteIdentifier(t.remote_schema)),t.list_type)switch(t.list_type){case "FDW_IMPORT_SCHEMA_ALL":break;case "FDW_IMPORT_SCHEMA_LIMIT_TO":if(e.push("LIMIT","TO"),t.table_list&&t.table_list.length>0){let i=c.unwrapList(t.table_list).map(r=>this.visit(r,s));e.push(`(${i.join(", ")})`);}break;case "FDW_IMPORT_SCHEMA_EXCEPT":if(e.push("EXCEPT"),t.table_list&&t.table_list.length>0){let i=c.unwrapList(t.table_list).map(r=>this.visit(r,s));e.push(`(${i.join(", ")})`);}break;default:throw new Error(`Unsupported ImportForeignSchemaStmt list_type: ${t.list_type}`)}if(e.push("FROM","SERVER"),t.server_name&&e.push(h.quoteIdentifier(t.server_name)),e.push("INTO"),t.local_schema&&e.push(h.quoteIdentifier(t.local_schema)),t.options&&t.options.length>0){let i=s.spawn("ImportForeignSchemaStmt"),r=c.unwrapList(t.options).map(n=>this.visit(n,i));e.push(`OPTIONS (${r.join(", ")})`);}return e.join(" ")}ClusterStmt(t,s){let e=["CLUSTER"];if(t.relation&&(e.push(this.RangeVar(t.relation,s)),t.indexname&&e.push("USING",h.quoteIdentifier(t.indexname))),t.params&&t.params.length>0){let i=c.unwrapList(t.params).map(r=>this.visit(r,s));e.push(`(${i.join(", ")})`);}return e.join(" ")}VacuumStmt(t,s){let e=[t.is_vacuumcmd?"VACUUM":"ANALYZE"];if(t.options&&t.options.length>0){let i=c.unwrapList(t.options).map(r=>this.visit(r,s));e.push(`(${i.join(", ")})`);}if(t.rels&&t.rels.length>0){let i=c.unwrapList(t.rels).map(r=>this.visit(r,s));e.push(i.join(", "));}return e.join(" ")}ExplainStmt(t,s){let e=["EXPLAIN"];if(t.options&&t.options.length>0){let i=s.spawn("ExplainStmt"),r=c.unwrapList(t.options).map(n=>this.visit(n,i));e.push(`(${r.join(", ")})`);}return t.query&&e.push(this.visit(t.query,s)),e.join(" ")}ReindexStmt(t,s){let e=["REINDEX"];if(t.params&&t.params.length>0){let i=c.unwrapList(t.params).map(r=>this.visit(r,s));e.push(`(${i.join(", ")})`);}if(t.kind)switch(t.kind){case "REINDEX_OBJECT_INDEX":e.push("INDEX");break;case "REINDEX_OBJECT_TABLE":e.push("TABLE");break;case "REINDEX_OBJECT_SCHEMA":e.push("SCHEMA");break;case "REINDEX_OBJECT_SYSTEM":e.push("SYSTEM");break;case "REINDEX_OBJECT_DATABASE":e.push("DATABASE");break;default:throw new Error(`Unsupported ReindexStmt kind: ${t.kind}`)}return t.relation&&e.push(this.RangeVar(t.relation,s)),t.name&&e.push(h.quoteIdentifier(t.name)),e.join(" ")}CallStmt(t,s){let e=["CALL"];if(t.funccall){let i=t.funccall;if(i.funcname&&i.funcname.length>0){let n=i.funcname.map(u=>u.String?u.String.sval:this.visit(u,s)).join("."),a="";i.args&&i.args.length>0?a=`(${i.args.map(l=>this.visit(l,s)).join(", ")})`:a="()",e.push(`${n}${a}`);}}else if(t.funcexpr)e.push(this.FuncExpr(t.funcexpr,s));else throw new Error("CallStmt requires either funccall or funcexpr");return e.join(" ")}CreatedbStmt(t,s){let e=["CREATE DATABASE"];if(!t.dbname)throw new Error("CreatedbStmt requires dbname");if(e.push(h.quoteIdentifier(t.dbname)),t.options&&t.options.length>0){let i=c.unwrapList(t.options).map(r=>this.visit(r,s)).join(" ");e.push("WITH",i);}return e.join(" ")}DropdbStmt(t,s){let e=["DROP DATABASE"];if(t.missing_ok&&e.push("IF EXISTS"),!t.dbname)throw new Error("DropdbStmt requires dbname");if(e.push(h.quoteIdentifier(t.dbname)),t.options&&t.options.length>0){let i=c.unwrapList(t.options).map(r=>this.visit(r,s)).join(" ");e.push("WITH",i);}return e.join(" ")}RenameStmt(t,s){let e=["ALTER"];if(!t.renameType)throw new Error("RenameStmt requires renameType");switch(t.renameType){case "OBJECT_TABLE":e.push("TABLE");break;case "OBJECT_VIEW":e.push("VIEW");break;case "OBJECT_INDEX":e.push("INDEX");break;case "OBJECT_SEQUENCE":e.push("SEQUENCE");break;case "OBJECT_FUNCTION":e.push("FUNCTION");break;case "OBJECT_PROCEDURE":e.push("PROCEDURE");break;case "OBJECT_SCHEMA":e.push("SCHEMA");break;case "OBJECT_DATABASE":e.push("DATABASE");break;case "OBJECT_COLUMN":t.relationType==="OBJECT_FOREIGN_TABLE"?e.push("FOREIGN TABLE"):t.relationType==="OBJECT_VIEW"?e.push("VIEW"):e.push("TABLE");break;case "OBJECT_DOMAIN":e.push("DOMAIN");break;case "OBJECT_TYPE":e.push("TYPE");break;case "OBJECT_DOMCONSTRAINT":e.push("DOMAIN");break;case "OBJECT_TABCONSTRAINT":e.push("TABLE");break;case "OBJECT_AGGREGATE":e.push("AGGREGATE");break;case "OBJECT_COLLATION":e.push("COLLATION");break;case "OBJECT_CONVERSION":e.push("CONVERSION");break;case "OBJECT_EXTENSION":e.push("EXTENSION");break;case "OBJECT_FOREIGN_SERVER":e.push("SERVER");break;case "OBJECT_FOREIGN_TABLE":e.push("FOREIGN TABLE");break;case "OBJECT_LANGUAGE":e.push("LANGUAGE");break;case "OBJECT_MATVIEW":e.push("MATERIALIZED VIEW");break;case "OBJECT_OPCLASS":e.push("OPERATOR CLASS");break;case "OBJECT_OPERATOR":e.push("OPERATOR");break;case "OBJECT_OPFAMILY":e.push("OPERATOR FAMILY");break;case "OBJECT_POLICY":e.push("POLICY"),t.subname&&e.push(h.quoteIdentifier(t.subname));break;case "OBJECT_PUBLICATION":e.push("PUBLICATION");break;case "OBJECT_ROLE":e.push("ROLE");break;case "OBJECT_RULE":e.push("RULE");break;case "OBJECT_SUBSCRIPTION":e.push("SUBSCRIPTION");break;case "OBJECT_TABLESPACE":e.push("TABLESPACE");break;case "OBJECT_TRIGGER":e.push("TRIGGER");break;case "OBJECT_TSCONFIGURATION":e.push("TEXT SEARCH CONFIGURATION");break;case "OBJECT_TSDICTIONARY":e.push("TEXT SEARCH DICTIONARY");break;case "OBJECT_TSPARSER":e.push("TEXT SEARCH PARSER");break;case "OBJECT_TSTEMPLATE":e.push("TEXT SEARCH TEMPLATE");break;case "OBJECT_FDW":e.push("FOREIGN DATA WRAPPER");break;case "OBJECT_EVENT_TRIGGER":e.push("EVENT TRIGGER");break;case "OBJECT_ATTRIBUTE":t.relationType==="OBJECT_TYPE"?e.push("TYPE"):e.push("TABLE");break;case "OBJECT_ROUTINE":e.push("ROUTINE");break;default:throw new Error(`Unsupported RenameStmt renameType: ${t.renameType}`)}if(t.missing_ok&&e.push("IF EXISTS"),t.renameType==="OBJECT_RULE"&&t.subname&&t.relation)e.push(h.quoteIdentifier(t.subname)),e.push("ON"),e.push(this.RangeVar(t.relation,s));else if(t.relation){let i=s.spawn("RenameStmt",{objtype:t.relationType});t.renameType==="OBJECT_POLICY"&&e.push("ON"),e.push(this.RangeVar(t.relation,i));}else if(t.object)if((t.renameType==="OBJECT_OPFAMILY"||t.renameType==="OBJECT_OPCLASS")&&t.object.List){let i=c.unwrapList(t.object);if(i.length===2){let r=i[0].String?.sval||"",n=i[1].String?.sval||"";e.push(`${h.quoteIdentifier(n)} USING ${r}`);}else e.push(this.visit(t.object,s));}else if(t.renameType==="OBJECT_SCHEMA"&&t.object.List){let i=c.unwrapList(t.object);i.length>0&&i[0].String?e.push(this.quoteIfNeeded(i[0].String.sval)):e.push(this.visit(t.object,s));}else e.push(this.visit(t.object,s));if(t.renameType==="OBJECT_COLUMN"&&t.subname?e.push("RENAME COLUMN",h.quoteIdentifier(t.subname),"TO"):t.renameType==="OBJECT_DOMCONSTRAINT"&&t.subname?e.push("RENAME CONSTRAINT",h.quoteIdentifier(t.subname),"TO"):t.renameType==="OBJECT_TABCONSTRAINT"&&t.subname?e.push("RENAME CONSTRAINT",h.quoteIdentifier(t.subname),"TO"):t.renameType==="OBJECT_ATTRIBUTE"&&t.subname?e.push("RENAME ATTRIBUTE",h.quoteIdentifier(t.subname),"TO"):t.renameType==="OBJECT_ROLE"&&t.subname?e.push(h.quoteIdentifier(t.subname),"RENAME TO"):t.renameType==="OBJECT_SCHEMA"&&t.subname?e.push(this.quoteIfNeeded(t.subname),"RENAME TO"):(t.renameType,e.push("RENAME TO")),!t.newname)throw new Error("RenameStmt requires newname");return e.push(h.quoteIdentifier(t.newname)),t.behavior==="DROP_CASCADE"&&e.push("CASCADE"),e.join(" ")}AlterOwnerStmt(t,s){let e=["ALTER"];if(!t.objectType)throw new Error("AlterOwnerStmt requires objectType");if(e.push(this.getObjectTypeKeyword(t.objectType)),t.relation)e.push(this.RangeVar(t.relation,s));else if(t.object)if((t.objectType==="OBJECT_OPFAMILY"||t.objectType==="OBJECT_OPCLASS")&&t.object.List){let i=c.unwrapList(t.object);if(i.length===2){let r=i[0].String?.sval||"",n=i[1].String?.sval||"";e.push(`${h.quoteIdentifier(n)} USING ${r}`);}else e.push(this.visit(t.object,s));}else e.push(this.visit(t.object,s));if(e.push("OWNER TO"),!t.newowner)throw new Error("AlterOwnerStmt requires newowner");return e.push(this.RoleSpec(t.newowner,s)),e.join(" ")}GrantStmt(t,s){let e=[];if(t.is_grant?e.push("GRANT"):(e.push("REVOKE"),t.grant_option&&e.push("GRANT OPTION FOR")),t.privileges&&t.privileges.length>0){let i=s.spawn("GrantStmt"),r=c.unwrapList(t.privileges).map(n=>this.visit(n,i)).join(", ");e.push(r);}else e.push("ALL");if(e.push("ON"),t.objtype&&t.targtype==="ACL_TARGET_DEFAULTS")switch(t.objtype){case "OBJECT_TABLE":e.push("TABLES");break;case "OBJECT_SEQUENCE":e.push("SEQUENCES");break;case "OBJECT_FUNCTION":e.push("FUNCTIONS");break;case "OBJECT_PROCEDURE":e.push("PROCEDURES");break;case "OBJECT_ROUTINE":e.push("ROUTINES");break;case "OBJECT_TYPE":e.push("TYPES");break;case "OBJECT_SCHEMA":e.push("SCHEMAS");break;}switch(t.targtype){case "ACL_TARGET_OBJECT":if(t.objtype==="OBJECT_SCHEMA"?e.push("SCHEMA"):t.objtype==="OBJECT_LANGUAGE"?e.push("LANGUAGE"):t.objtype==="OBJECT_FUNCTION"?e.push("FUNCTION"):t.objtype==="OBJECT_PROCEDURE"?e.push("PROCEDURE"):t.objtype==="OBJECT_TYPE"?e.push("TYPE"):t.objtype==="OBJECT_DOMAIN"?e.push("DOMAIN"):t.objtype==="OBJECT_LARGEOBJECT"?e.push("LARGE OBJECT"):t.objtype==="OBJECT_FDW"?e.push("FOREIGN","DATA","WRAPPER"):t.objtype==="OBJECT_FOREIGN_SERVER"?e.push("FOREIGN","SERVER"):t.objtype==="OBJECT_DATABASE"&&e.push("DATABASE"),t.objects&&t.objects.length>0){let i=c.unwrapList(t.objects).map(r=>this.visit(r,s)).join(", ");e.push(i);}break;case "ACL_TARGET_ALL_IN_SCHEMA":switch(t.objtype){case "OBJECT_TABLE":e.push("ALL TABLES IN SCHEMA");break;case "OBJECT_SEQUENCE":e.push("ALL SEQUENCES IN SCHEMA");break;case "OBJECT_FUNCTION":e.push("ALL FUNCTIONS IN SCHEMA");break;case "OBJECT_PROCEDURE":e.push("ALL PROCEDURES IN SCHEMA");break;case "OBJECT_ROUTINE":e.push("ALL ROUTINES IN SCHEMA");break;case "OBJECT_TYPE":e.push("ALL TYPES IN SCHEMA");break;default:e.push("ALL TABLES IN SCHEMA");break}if(t.objects&&t.objects.length>0){let i=c.unwrapList(t.objects).map(r=>this.visit(r,s)).join(", ");e.push(i);}break;default:if(t.objects&&t.objects.length>0){let i=c.unwrapList(t.objects).map(r=>this.visit(r,s)).join(", ");e.push(i);}}if(t.is_grant?e.push("TO"):e.push("FROM"),t.grantees&&t.grantees.length>0){let i=c.unwrapList(t.grantees).map(r=>this.visit(r,s)).join(", ");e.push(i);}return t.grant_option&&t.is_grant&&e.push("WITH GRANT OPTION"),t.is_grant||(t.behavior==="DROP_CASCADE"?e.push("CASCADE"):t.behavior==="DROP_RESTRICT"&&e.push("RESTRICT")),e.join(" ")}GrantRoleStmt(t,s){let e=[],i=false,r=false,n=false,a,u,l;if(t.opt&&t.opt.length>0){let p=c.unwrapList(t.opt),f=p.find(E=>E.DefElem&&E.DefElem.defname==="inherit"),m=p.find(E=>E.String&&E.String.sval==="admin"||E.DefElem&&E.DefElem.defname==="admin"),T=p.find(E=>E.DefElem&&E.DefElem.defname==="set");f&&f.DefElem&&(i=true,a=f.DefElem.arg?.Boolean?.boolval),m&&(r=true,m.DefElem&&m.DefElem.arg&&(u=m.DefElem.arg.Boolean?.boolval)),T&&T.DefElem&&(n=true,l=T.DefElem.arg?.Boolean?.boolval);}if(t.is_grant?e.push("GRANT"):(e.push("REVOKE"),i?e.push("INHERIT OPTION FOR"):r&&e.push("ADMIN OPTION FOR")),t.granted_roles&&t.granted_roles.length>0){let p=c.unwrapList(t.granted_roles).map(f=>this.visit(f,s)).join(", ");e.push(p);}if(t.is_grant?e.push("TO"):e.push("FROM"),t.grantee_roles&&t.grantee_roles.length>0){let p=c.unwrapList(t.grantee_roles).map(f=>this.visit(f,s)).join(", ");e.push(p);}if(t.is_grant){let p=[];r&&(u===true?p.push("ADMIN OPTION"):u===false?p.push("ADMIN FALSE"):p.push("ADMIN OPTION")),i&&(a===true?p.push("INHERIT OPTION"):a===false&&p.push("INHERIT FALSE")),n&&(l===true?p.push("SET TRUE"):l===false&&p.push("SET FALSE")),p.length>0&&e.push("WITH",p.join(", "));}return e.join(" ")}SecLabelStmt(t,s){let e=["SECURITY LABEL"];if(t.provider&&e.push("FOR",h.quoteIdentifier(t.provider)),e.push("ON"),t.objtype)switch(t.objtype){case "OBJECT_TABLE":e.push("TABLE");break;case "OBJECT_COLUMN":e.push("COLUMN");break;case "OBJECT_FUNCTION":e.push("FUNCTION");break;case "OBJECT_SCHEMA":e.push("SCHEMA");break;case "OBJECT_DATABASE":e.push("DATABASE");break;case "OBJECT_ROLE":e.push("ROLE");break;default:e.push(t.objtype.replace("OBJECT_",""));}return t.object&&e.push(this.visit(t.object,s)),e.push("IS"),t.label?e.push(`'${t.label}'`):e.push("NULL"),e.join(" ")}AlterDefaultPrivilegesStmt(t,s){let e=["ALTER DEFAULT PRIVILEGES"];if(t.options&&t.options.length>0){let i=c.unwrapList(t.options);for(let r of i){let n=this.getNodeData(r);if(n.defname==="schemas"){if(e.push("IN SCHEMA"),n.arg){let a=c.unwrapList(n.arg).map(u=>this.visit(u,s)).join(", ");e.push(a);}}else if(n.defname==="roles"&&(e.push("FOR ROLE"),n.arg)){let a=c.unwrapList(n.arg).map(u=>this.visit(u,s)).join(", ");e.push(a);}}}if(t.action){let i=this.GrantStmt(t.action,s);if(s.isPretty())return e.join(" ")+s.newline()+s.indent(i);e.push(i);}return e.join(" ")}CreateConversionStmt(t,s){let e=["CREATE"];if(t.def&&e.push("DEFAULT"),e.push("CONVERSION"),t.conversion_name&&t.conversion_name.length>0){let i=c.unwrapList(t.conversion_name).map(r=>this.visit(r,s)).join(".");e.push(i);}if(t.for_encoding_name&&e.push("FOR",`'${t.for_encoding_name}'`),t.to_encoding_name&&e.push("TO",`'${t.to_encoding_name}'`),t.func_name&&t.func_name.length>0){e.push("FROM");let i=c.unwrapList(t.func_name).map(r=>this.visit(r,s)).join(".");e.push(i);}return e.join(" ")}CreateCastStmt(t,s){let e=["CREATE CAST"];if(e.push("("),t.sourcetype&&e.push(this.TypeName(t.sourcetype,s)),e.push("AS"),t.targettype&&e.push(this.TypeName(t.targettype,s)),e.push(")"),t.func?(e.push("WITH FUNCTION"),e.push(this.ObjectWithArgs(t.func,s))):t.inout?e.push("WITH INOUT"):e.push("WITHOUT FUNCTION"),t.context)switch(t.context){case "COERCION_IMPLICIT":e.push("AS IMPLICIT");break;case "COERCION_ASSIGNMENT":e.push("AS ASSIGNMENT");break;case "COERCION_EXPLICIT":break;default:throw new Error(`Unsupported CreateCastStmt context: ${t.context}`)}else t.context==="COERCION_ASSIGNMENT"&&e.push("AS ASSIGNMENT");return e.join(" ")}CreatePLangStmt(t,s){let e=["CREATE"];if(t.replace&&e.push("OR REPLACE"),t.pltrusted&&e.push("TRUSTED"),e.push("LANGUAGE"),t.plname&&e.push(h.quoteIdentifier(t.plname)),t.plhandler&&t.plhandler.length>0){e.push("HANDLER");let i=c.unwrapList(t.plhandler).map(r=>this.visit(r,s)).join(".");e.push(i);}if(t.plinline&&t.plinline.length>0){e.push("INLINE");let i=c.unwrapList(t.plinline).map(r=>this.visit(r,s)).join(".");e.push(i);}if(t.plvalidator&&t.plvalidator.length>0){e.push("VALIDATOR");let i=c.unwrapList(t.plvalidator).map(r=>this.visit(r,s)).join(".");e.push(i);}return e.join(" ")}CreateTransformStmt(t,s){let e=["CREATE"];t.replace&&e.push("OR REPLACE"),e.push("TRANSFORM FOR"),t.type_name&&e.push(this.TypeName(t.type_name,s)),e.push("LANGUAGE"),t.lang&&e.push(h.quoteIdentifier(t.lang)),e.push("(");let i=[];if(t.fromsql){let r=this.ObjectWithArgs(t.fromsql,s);i.push(`FROM SQL WITH FUNCTION ${r}`);}if(t.tosql){let r=this.ObjectWithArgs(t.tosql,s);i.push(`TO SQL WITH FUNCTION ${r}`);}return e.push(i.join(", ")),e.push(")"),e.join(" ")}CreateTrigStmt(t,s){let e=["CREATE"];if(t.replace&&e.push("OR REPLACE"),t.isconstraint&&e.push("CONSTRAINT"),e.push("TRIGGER"),t.trigname&&e.push(h.quoteIdentifier(t.trigname)),s.isPretty()){let i=[],r=[];t.timing&2?r.push("BEFORE"):t.timing&64?r.push("INSTEAD OF"):r.push("AFTER");let n=[];if(t.events&4&&n.push("INSERT"),t.events&8&&n.push("DELETE"),t.events&16){let u="UPDATE";if(t.columns&&t.columns.length>0){let l=c.unwrapList(t.columns).map(p=>this.visit(p,s)).join(", ");u+=" OF "+l;}n.push(u);}if(t.events&32&&n.push("TRUNCATE"),i.push(s.indent(r.join(" ")+" "+n.join(" OR "))),t.relation&&i.push(s.indent("ON "+this.RangeVar(t.relation,s))),t.transitionRels&&t.transitionRels.length>0){let u=c.unwrapList(t.transitionRels).map(l=>this.visit(l,s)).join(" ");i.push(s.indent("REFERENCING "+u));}if(t.deferrable&&i.push(s.indent("DEFERRABLE")),t.initdeferred&&i.push(s.indent("INITIALLY DEFERRED")),t.row?i.push(s.indent("FOR EACH ROW")):i.push(s.indent("FOR EACH STATEMENT")),t.whenClause){let u="WHEN ("+this.visit(t.whenClause,s)+")";i.push(s.indent(u));}let a="EXECUTE";if(t.funcname&&t.funcname.length>0){let u=c.unwrapList(t.funcname).map(l=>this.visit(l,s)).join(".");a+=" PROCEDURE "+u;}if(t.args&&t.args.length>0){let u=s.spawn("CreateTrigStmt",{isStringLiteral:true}),l=c.unwrapList(t.args).map(p=>this.visit(p,u)).join(", ");a+="("+l+")";}else a+="()";return i.push(s.indent(a)),e.join(" ")+s.newline()+i.join(s.newline())}else {let i=[];t.timing&2?i.push("BEFORE"):t.timing&64?i.push("INSTEAD OF"):i.push("AFTER"),e.push(i.join(" "));let r=[];if(t.events&4&&r.push("INSERT"),t.events&8&&r.push("DELETE"),t.events&16&&r.push("UPDATE"),t.events&32&&r.push("TRUNCATE"),e.push(r.join(" OR ")),t.columns&&t.columns.length>0){e.push("OF");let n=c.unwrapList(t.columns).map(a=>this.visit(a,s)).join(", ");e.push(n);}if(e.push("ON"),t.relation&&e.push(this.RangeVar(t.relation,s)),t.constrrel&&(e.push("FROM"),e.push(this.RangeVar(t.constrrel,s))),t.deferrable&&e.push("DEFERRABLE"),t.initdeferred&&e.push("INITIALLY DEFERRED"),t.transitionRels&&t.transitionRels.length>0){e.push("REFERENCING");let n=c.unwrapList(t.transitionRels).map(a=>this.visit(a,s)).join(" ");e.push(n);}if(t.row?e.push("FOR EACH ROW"):e.push("FOR EACH STATEMENT"),t.whenClause&&(e.push("WHEN"),e.push("("),e.push(this.visit(t.whenClause,s)),e.push(")")),e.push("EXECUTE"),t.funcname&&t.funcname.length>0){let n=c.unwrapList(t.funcname).map(a=>this.visit(a,s)).join(".");e.push("FUNCTION",n);}if(t.args&&t.args.length>0){e.push("(");let n=s.spawn("CreateTrigStmt",{isStringLiteral:true}),a=c.unwrapList(t.args).map(u=>this.visit(u,n)).join(", ");e.push(a),e.push(")");}else e.push("()");return e.join(" ")}}TriggerTransition(t,s){let e=[];return t.isNew?e.push("NEW TABLE AS"):e.push("OLD TABLE AS"),t.name&&e.push(h.quoteIdentifier(t.name)),e.join(" ")}CreateEventTrigStmt(t,s){let e=["CREATE EVENT TRIGGER"];if(t.trigname&&e.push(h.quoteIdentifier(t.trigname)),e.push("ON"),t.eventname&&e.push(t.eventname),t.whenclause&&t.whenclause.length>0){e.push("WHEN");let i=s.spawn("CreateEventTrigStmt"),r=c.unwrapList(t.whenclause).map(n=>this.visit(n,i)).join(" AND ");e.push(r);}if(e.push("EXECUTE"),t.funcname&&t.funcname.length>0){let i=c.unwrapList(t.funcname).map(r=>this.visit(r,s)).join(".");e.push("PROCEDURE",i+"()");}return e.join(" ")}AlterEventTrigStmt(t,s){let e=["ALTER EVENT TRIGGER"];if(t.trigname&&e.push(h.quoteIdentifier(t.trigname)),t.tgenabled)switch(t.tgenabled){case "O":e.push("ENABLE");break;case "D":e.push("DISABLE");break;case "R":e.push("ENABLE REPLICA");break;case "A":e.push("ENABLE ALWAYS");break;default:throw new Error(`Unsupported trigger enable state: ${t.tgenabled}`)}return e.join(" ")}CreateOpClassStmt(t,s){let e=["CREATE OPERATOR CLASS"];if(t.opclassname&&t.opclassname.length>0){let i=c.unwrapList(t.opclassname).map(r=>this.visit(r,s)).join(".");e.push(i);}if(t.isDefault&&e.push("DEFAULT"),e.push("FOR TYPE"),t.datatype&&e.push(this.TypeName(t.datatype,s)),e.push("USING"),t.amname&&e.push(t.amname),t.opfamilyname&&t.opfamilyname.length>0){e.push("FAMILY");let i=c.unwrapList(t.opfamilyname).map(r=>this.visit(r,s)).join(".");e.push(i);}if(e.push("AS"),t.items&&t.items.length>0){let i=c.unwrapList(t.items).map(r=>this.visit(r,s)).join(", ");e.push(i);}return e.join(" ")}CreateOpFamilyStmt(t,s){let e=["CREATE OPERATOR FAMILY"];if(t.opfamilyname&&t.opfamilyname.length>0){let i=c.unwrapList(t.opfamilyname).map(r=>this.visit(r,s)).join(".");e.push(i);}return e.push("USING"),t.amname&&e.push(t.amname),e.join(" ")}AlterOpFamilyStmt(t,s){let e=["ALTER OPERATOR FAMILY"];if(t.opfamilyname&&t.opfamilyname.length>0){let i=c.unwrapList(t.opfamilyname).map(r=>this.visit(r,s)).join(".");e.push(i);}if(e.push("USING"),t.amname&&e.push(t.amname),t.isDrop?e.push("DROP"):e.push("ADD"),t.items&&t.items.length>0){let i=c.unwrapList(t.items).map(r=>this.visit(r,s)).join(", ");e.push(i);}return e.join(" ")}MergeStmt(t,s){let e=[];if(t.withClause&&e.push(this.WithClause(t.withClause,s)),e.push("MERGE INTO"),t.relation&&e.push(this.RangeVar(t.relation,s)),t.sourceRelation&&(e.push("USING"),e.push(this.visit(t.sourceRelation,s))),t.joinCondition&&(e.push("ON"),e.push(this.visit(t.joinCondition,s))),t.mergeWhenClauses&&t.mergeWhenClauses.length>0){let i=c.unwrapList(t.mergeWhenClauses).map(r=>this.visit(r,s)).join(" ");e.push(i);}return e.join(" ")}AlterTableMoveAllStmt(t,s){let e=["ALTER"];return t.objtype==="OBJECT_TABLE"?e.push("TABLE"):t.objtype==="OBJECT_INDEX"?e.push("INDEX"):e.push("TABLE"),e.push("ALL","IN","TABLESPACE"),t.orig_tablespacename&&e.push(h.quoteIdentifier(t.orig_tablespacename)),e.push("SET","TABLESPACE"),t.new_tablespacename&&e.push(h.quoteIdentifier(t.new_tablespacename)),t.nowait&&e.push("NOWAIT"),e.join(" ")}CreateSeqStmt(t,s){let e=["CREATE"];if(t.sequence&&t.sequence.relpersistence==="t"&&e.push("TEMPORARY"),e.push("SEQUENCE"),t.if_not_exists&&e.push("IF NOT EXISTS"),t.sequence){let i=[],r=t.sequence;r.schemaname&&i.push(h.quoteIdentifier(r.schemaname)),r.relname&&i.push(h.quoteIdentifier(r.relname)),e.push(i.join("."));}if(t.options&&t.options.length>0){let i=s.spawn("CreateSeqStmt"),r=c.unwrapList(t.options).filter(n=>n!=null&&this.getNodeType(n)!=="undefined").map(n=>{try{return this.visit(n,i)}catch(a){return console.warn(`Error processing option in CreateSeqStmt: ${a instanceof Error?a.message:String(a)}`),""}}).filter(n=>n!=="").join(" ");r&&e.push(r);}return e.join(" ")}AlterSeqStmt(t,s){let e=["ALTER","SEQUENCE"];if(t.missing_ok&&e.push("IF EXISTS"),t.sequence){let i=[],r=t.sequence;r.schemaname&&i.push(h.quoteIdentifier(r.schemaname)),r.relname&&i.push(h.quoteIdentifier(r.relname)),e.push(i.join("."));}if(t.options&&t.options.length>0){let i=s.spawn("AlterSeqStmt"),r=c.unwrapList(t.options).filter(n=>n&&n!==void 0).map(n=>{try{return !n||this.getNodeType(n)==="undefined"?"":this.visit(n,i)}catch(a){return console.warn(`Error processing option in AlterSeqStmt: ${a instanceof Error?a.message:String(a)}`),""}}).filter(n=>n&&n.trim().length>0).join(" ");r&&e.push(r);}return t.for_identity&&e.push("FOR IDENTITY"),e.join(" ")}CompositeTypeStmt(t,s){let e=["CREATE","TYPE"];if(t.typevar){let i=s.spawn("CompositeTypeStmt");e.push(this.RangeVar(t.typevar,i));}if(e.push("AS"),t.coldeflist&&t.coldeflist.length>0){let i=c.unwrapList(t.coldeflist).map(r=>this.visit(r,s)).join(", ");e.push(`(${i})`);}else e.push("()");return e.join(" ")}CreateRangeStmt(t,s){let e=["CREATE","TYPE"];if(t.typeName&&t.typeName.length>0){let i=c.unwrapList(t.typeName).map(r=>this.visit(r,s)).join(".");e.push(i);}if(e.push("AS","RANGE"),t.params&&t.params.length>0){let i=c.unwrapList(t.params).map(r=>{let n=this.getNodeData(r);if(n.defname&&n.arg){let a=this.visit(n.arg,s);return `${n.defname} = ${a}`}return this.visit(r,s)});e.push(`(${i.join(", ")})`);}return e.join(" ")}AlterEnumStmt(t,s){let e=["ALTER","TYPE"];if(t.typeName&&t.typeName.length>0){let i=c.unwrapList(t.typeName).map(r=>this.visit(r,s)).join(".");e.push(i);}if(t.oldVal&&t.newVal){let i=t.oldVal.replace(/'/g,"''"),r=t.newVal.replace(/'/g,"''");e.push("RENAME","VALUE",`'${i}'`,"TO",`'${r}'`);}else if(t.newVal){e.push("ADD","VALUE"),t.skipIfNewValExists&&e.push("IF NOT EXISTS");let i=t.newVal.replace(/'/g,"''");if(e.push(`'${i}'`),t.newValNeighbor){let r=t.newValNeighbor.replace(/'/g,"''");t.newValIsAfter?e.push("AFTER",`'${r}'`):e.push("BEFORE",`'${r}'`);}}return e.join(" ")}AlterTypeStmt(t,s){let e=["ALTER","TYPE"];if(t.typeName&&t.typeName.length>0){let i=c.unwrapList(t.typeName).map(r=>this.visit(r,s)).join(".");e.push(i);}if(e.push("SET"),t.options&&t.options.length>0){let i=c.unwrapList(t.options).map(r=>{let n=this.getNodeData(r);if(n.defname&&n.arg){let a=this.visit(n.arg,s);return `${n.defname} = ${a}`}return this.visit(r,s)});e.push(`(${i.join(", ")})`);}return e.join(" ")}AlterRoleStmt(t,s){let e=t.options&&c.unwrapList(t.options).some(r=>r.DefElem&&r.DefElem.defname==="rolemembers"),i=["ALTER",e?"GROUP":"ROLE"];if(t.role&&i.push(this.RoleSpec(t.role,s)),t.options){let r=s.spawn("AlterRoleStmt");if(e){let n=c.unwrapList(t.options).find(a=>a.DefElem&&a.DefElem.defname==="rolemembers");if(n&&n.DefElem){let a=t.action===1?"ADD":"DROP";if(i.push(a,"USER"),n.DefElem.arg&&n.DefElem.arg.List){let u=c.unwrapList(n.DefElem.arg.List.items).map(l=>this.visit(l,r)).join(", ");i.push(u);}}}else {let n=c.unwrapList(t.options).map(a=>this.visit(a,r)).join(" ");n&&i.push(n);}}return i.join(" ")}DropRoleStmt(t,s){let e=["DROP","ROLE"];if(t.missing_ok&&e.push("IF EXISTS"),t.roles){let i=c.unwrapList(t.roles).map(r=>this.visit(r,s)).join(", ");e.push(i);}return e.join(" ")}targetList(t,s){return !t||!Array.isArray(t)?"":t.map(e=>this.visit(e,s)).join(", ")}CreateAggregateStmt(t,s){let e=["CREATE"];if(t.replace&&e.push("OR REPLACE"),e.push("AGGREGATE"),t.defnames&&t.defnames.length>0){let r=c.unwrapList(t.defnames).map(n=>this.visit(n,s)).join(".");e.push(r);}if(e.push("("),t.args&&t.args.length>0){let r=c.unwrapList(t.args).map(n=>this.visit(n,s)).join(", ");e.push(r);}else e.push("*");e.push(")"),e.push("(");let i=[];if(t.definition&&t.definition.length>0){let r=c.unwrapList(t.definition).map(n=>{let a=this.getNodeData(n);return a.defname==="sfunc"||a.defname==="sfunc1"?`SFUNC = ${this.visit(a.arg,s)}`:a.defname==="stype"||a.defname==="stype1"?`STYPE = ${this.visit(a.arg,s)}`:a.defname==="basetype"?`BASETYPE = ${this.visit(a.arg,s)}`:a.defname==="finalfunc"?`FINALFUNC = ${this.visit(a.arg,s)}`:a.defname==="initcond"||a.defname==="initcond1"?`INITCOND = ${this.visit(a.arg,s)}`:a.defname==="combinefunc"?`COMBINEFUNC = ${this.visit(a.arg,s)}`:a.defname==="serialfunc"?`SERIALFUNC = ${this.visit(a.arg,s)}`:a.defname==="deserialfunc"?`DESERIALFUNC = ${this.visit(a.arg,s)}`:a.defname==="parallel"?`PARALLEL = ${this.visit(a.arg,s)}`:this.visit(n,s)});i.push(...r);}return e.push(i.join(", ")),e.push(")"),e.join(" ")}CreateTableAsStmt(t,s){let e=["CREATE"];if(t.objtype==="OBJECT_MATVIEW"?e.push("MATERIALIZED VIEW"):t.into&&t.into.rel&&t.into.rel.relpersistence==="t"?e.push("TEMPORARY TABLE"):e.push("TABLE"),t.if_not_exists&&e.push("IF NOT EXISTS"),t.into&&t.into.rel&&e.push(this.RangeVar(t.into.rel,s)),t.into&&t.into.colNames&&t.into.colNames.length>0){e.push("(");let i=c.unwrapList(t.into.colNames).map(r=>this.visit(r,s)).join(", ");e.push(i),e.push(")");}if(t.into&&t.into.accessMethod&&(e.push("USING"),e.push(t.into.accessMethod)),t.into&&t.into.onCommit&&t.into.onCommit!=="ONCOMMIT_NOOP")switch(e.push("ON COMMIT"),t.into.onCommit){case "ONCOMMIT_PRESERVE_ROWS":e.push("PRESERVE ROWS");break;case "ONCOMMIT_DELETE_ROWS":e.push("DELETE ROWS");break;case "ONCOMMIT_DROP":e.push("DROP");break}if(e.push("AS"),t.query&&e.push(this.visit(t.query,s)),t.into&&t.into.options&&t.into.options.length>0){e.push("WITH");let i=c.unwrapList(t.into.options).map(r=>this.visit(r,s)).join(", ");e.push(`(${i})`);}return t.into&&t.into.skipData&&e.push("WITH NO DATA"),e.join(" ")}RefreshMatViewStmt(t,s){let e=["REFRESH","MATERIALIZED","VIEW"];return t.concurrent&&e.push("CONCURRENTLY"),t.relation&&e.push(this.visit(t.relation,s)),t.skipData&&e.push("WITH NO DATA"),e.join(" ")}AccessPriv(t,s){let e=[];if(t.priv_name?e.push(t.priv_name.toUpperCase()):e.push("ALL"),t.cols&&t.cols.length>0){e.push("(");let i=s.spawn("AccessPriv"),r=c.unwrapList(t.cols).map(n=>this.visit(n,i));e.push(r.join(", ")),e.push(")");}return e.join(" ")}aliasname(t,s){return typeof t=="string"?h.quoteIdentifier(t):this.visit(t,s)}DefineStmt(t,s){let e=[];if(!t.kind)throw new Error("DefineStmt requires kind property");switch(t.kind){case "OBJECT_OPERATOR":if(e.push("CREATE OPERATOR"),t.defnames&&t.defnames.length>0){let i=c.unwrapList(t.defnames).map((r,n)=>{if(n===t.defnames.length-1){let a=this.getNodeData(r);if(a&&a.sval)return a.sval}return this.visit(r,s)});e.push(i.join("."));}if(t.definition&&t.definition.length>0){e.push("(");let i=c.unwrapList(t.definition).map(r=>{if(r.DefElem){let n=r.DefElem,a=n.defname,u=n.arg;if(a&&u){let l=h.quoteIdentifier(a),p=l!==a?l:this.preserveOperatorDefElemCase(a);if((a.toLowerCase()==="commutator"||a.toLowerCase()==="negator")&&u.List){let f=c.unwrapList(u.List.items);if(f.length===1&&f[0].String)return `${p} = ${f[0].String.sval}`}return a.toLowerCase()==="commutator"||a.toLowerCase()==="negator"?`${p} = ${this.visit(u,s)}`:`${p} = ${this.visit(u,s)}`}else if(a&&!u)return a==="Hashes"||a==="Merges"?h.quoteIdentifier(a):this.preserveOperatorDefElemCase(a).toUpperCase()}return this.visit(r,s)});e.push(i.join(", ")),e.push(")");}break;case "OBJECT_TYPE":if(e.push("CREATE TYPE"),t.defnames&&t.defnames.length>0&&e.push(c.unwrapList(t.defnames).map(i=>this.visit(i,s)).join(".")),t.definition&&t.definition.length>0){let i=s.spawn("DefineStmt"),r=c.unwrapList(t.definition).map(n=>this.visit(n,i));e.push(`(${r.join(", ")})`);}break;case "OBJECT_AGGREGATE":if(e.push("CREATE"),t.replace&&e.push("OR REPLACE"),e.push("AGGREGATE"),t.defnames&&t.defnames.length>0){let i=c.unwrapList(t.defnames).map(r=>this.visit(r,s));e.push(i.join("."));}if(t.args&&t.args.length>0){let i=c.unwrapList(t.args),r=i.some(u=>u.Integer&&u.Integer.ival===1),n=i.length>=2&&i[0].List&&i[0].List.items&&i[0].List.items.length===1&&i[0].List.items[0].FunctionParameter&&i[0].List.items[0].FunctionParameter.mode==="FUNC_PARAM_DEFAULT"&&i[1].Integer&&Object.keys(i[1].Integer).length===0,a=i.filter(u=>!(u.Integer&&(u.Integer.ival===-1||u.Integer.ival===1)||u.Integer&&Object.keys(u.Integer).length===0&&n));if(a.length>0)if(n){let u=a[0];if(u.List&&u.List.items&&u.List.items[0].FunctionParameter){let l=u.List.items[0].FunctionParameter,p;if(l.argType&&l.argType.names){let f=l.argType.names;f.length>=2&&f[0].String&&f[0].String.sval==="pg_catalog"?p=f[1].String.sval:f.length>=1&&f[0].String?p=f[0].String.sval:p="unknown";}else p=this.visit({TypeName:l.argType},s);e.push(`(ORDER BY ${p})`);}else {let l=this.visit(u,s);e.push(`(ORDER BY ${l})`);}}else if(r&&a.length===1&&a[0].List){let u=a[0].List;if(u.items&&u.items.length>=2){let l=c.unwrapList(u.items),p=this.visit(l[0],s),f=l.slice(1).map(m=>this.visit(m,s));e.push(`(${p} ORDER BY ${f.join(", ")})`);}else if(u.items&&u.items.length===1){let l=u.items[0];if(l.FunctionParameter&&l.FunctionParameter.mode==="FUNC_PARAM_VARIADIC"){let p=this.visit(l,s);e.push(`(${p} ORDER BY ${p})`);}else {let p=this.visit(l,s);e.push(`(${p})`);}}else {let l=a.map(p=>Object.keys(p).length===0?"*":this.visit(p,s));e.push(`(${l.join(", ")})`);}}else {let u=a.map(l=>Object.keys(l).length===0?"*":this.visit(l,s));e.push(`(${u.join(", ")})`);}}if(t.definition&&t.definition.length>0){let i=c.unwrapList(t.definition).map(r=>{if(r.DefElem){let n=r.DefElem,a=n.defname,u=n.arg;if(a&&u){let l=h.quoteIdentifier(a),p=l!==a?l:a;return u.String?`${p} = '${u.String.sval}'`:`${p} = ${this.visit(u,s)}`}}return this.visit(r,s)});e.push(`(${i.join(", ")})`);}break;case "OBJECT_TSDICTIONARY":if(e.push("CREATE TEXT SEARCH DICTIONARY"),t.defnames&&t.defnames.length>0&&e.push(c.unwrapList(t.defnames).map(i=>this.visit(i,s)).join(".")),t.definition&&t.definition.length>0){e.push("(");let i=c.unwrapList(t.definition).map(r=>{if(r.DefElem){let n=r.DefElem,a=n.defname,u=n.arg;if(a&&u)return `${a} = ${this.visit(u,s)}`}return this.visit(r,s)});e.push(i.join(", ")),e.push(")");}break;case "OBJECT_TSCONFIGURATION":if(e.push("CREATE TEXT SEARCH CONFIGURATION"),t.defnames&&t.defnames.length>0&&e.push(c.unwrapList(t.defnames).map(i=>this.visit(i,s)).join(".")),t.definition&&t.definition.length>0){e.push("(");let i=c.unwrapList(t.definition).map(r=>{if(r.DefElem){let n=r.DefElem,a=n.defname,u=n.arg;if(a&&u)return `${a} = ${this.visit(u,s)}`}return this.visit(r,s)});e.push(i.join(", ")),e.push(")");}break;case "OBJECT_TSPARSER":if(e.push("CREATE TEXT SEARCH PARSER"),t.defnames&&t.defnames.length>0){let i=c.unwrapList(t.defnames).map(r=>this.visit(r,s)).join(".");e.push(i);}if(t.definition&&t.definition.length>0){e.push("(");let i=c.unwrapList(t.definition).map(r=>{if(r.DefElem){let n=r.DefElem,a=n.defname,u=n.arg;if(a&&u)return `${a} = ${this.visit(u,s)}`}return this.visit(r,s)});e.push(i.join(", ")),e.push(")");}break;case "OBJECT_TSTEMPLATE":if(e.push("CREATE TEXT SEARCH TEMPLATE"),t.defnames&&t.defnames.length>0){let i=c.unwrapList(t.defnames).map(r=>this.visit(r,s)).join(".");e.push(i);}if(t.definition&&t.definition.length>0){e.push("(");let i=c.unwrapList(t.definition).map(r=>{if(r.DefElem){let n=r.DefElem,a=n.defname,u=n.arg;if(a&&u)return `${a} = ${this.visit(u,s)}`}return this.visit(r,s)});e.push(i.join(", ")),e.push(")");}break;case "OBJECT_COLLATION":if(e.push("CREATE COLLATION"),t.defnames&&t.defnames.length>0&&e.push(c.unwrapList(t.defnames).map(i=>this.visit(i,s)).join(".")),t.definition&&t.definition.length>0){let i=c.unwrapList(t.definition).map(n=>{if(n.DefElem){let a=n.DefElem,u=a.defname,l=a.arg;if(u&&l){if(u==="from")return `FROM ${this.visit(l,s)}`;let p;return l.String?p=`'${l.String.sval}'`:p=this.visit(l,s),`${u} = ${p}`}}return this.visit(n,s)});i.some(n=>n.startsWith("FROM "))?e.push(i.join(" ")):e.push(`(${i.join(", ")})`);}break;default:throw new Error(`Unsupported DefineStmt kind: ${t.kind}`)}return e.join(" ")}AlterDatabaseStmt(t,s){let e=["ALTER","DATABASE"];if(t.dbname&&e.push(h.quoteIdentifier(t.dbname)),t.options&&t.options.length>0){let i=c.unwrapList(t.options).map(r=>this.visit(r,s));e.push(i.join(" "));}return e.join(" ")}AlterDatabaseRefreshCollStmt(t,s){let e=["ALTER","DATABASE"];return t.dbname&&e.push(h.quoteIdentifier(t.dbname)),e.push("REFRESH","COLLATION","VERSION"),e.join(" ")}AlterDatabaseSetStmt(t,s){let e=["ALTER","DATABASE"];if(t.dbname&&e.push(h.quoteIdentifier(t.dbname)),t.setstmt){let i=this.VariableSetStmt(t.setstmt,s);e.push(i);}return e.join(" ")}DeclareCursorStmt(t,s){let e=["DECLARE"];t.portalname&&e.push(h.quoteIdentifier(t.portalname));let i=[];return t.options&&(t.options&2?i.push("SCROLL"):t.options&4&&i.push("NO SCROLL"),t.options&1&&i.push("BINARY"),t.options&8&&i.push("INSENSITIVE")),i.length>0&&e.push(...i),e.push("CURSOR"),t.options&&t.options&32&&e.push("WITH HOLD"),e.push("FOR"),t.query&&e.push(this.visit(t.query,s)),e.join(" ")}PublicationObjSpec(t,s){let e=[];return t.pubobjtype==="PUBLICATIONOBJ_TABLE"?(e.push("TABLE"),t.pubtable&&e.push(this.PublicationTable(t.pubtable,s))):t.pubobjtype==="PUBLICATIONOBJ_TABLES_IN_SCHEMA"?(e.push("TABLES IN SCHEMA"),t.name&&e.push(h.quoteIdentifier(t.name))):t.pubobjtype==="PUBLICATIONOBJ_TABLES_IN_CUR_SCHEMA"&&e.push("TABLES IN SCHEMA CURRENT_SCHEMA"),e.join(" ")}PublicationTable(t,s){let e=[];if(t.relation&&e.push(this.RangeVar(t.relation,s)),t.columns&&t.columns.length>0){let i=c.unwrapList(t.columns).map(r=>this.visit(r,s));e.push(`(${i.join(", ")})`);}return t.whereClause&&(e.push("WHERE"),e.push(this.visit(t.whereClause,s))),e.join(" ")}CreateAmStmt(t,s){let e=["CREATE","ACCESS","METHOD"];switch(t.amname&&e.push(h.quoteIdentifier(t.amname)),e.push("TYPE"),t.amtype){case "i":e.push("INDEX");break;case "t":e.push("TABLE");break;default:e.push(t.amtype||"");break}if(t.handler_name&&t.handler_name.length>0){e.push("HANDLER");let i=c.unwrapList(t.handler_name).map(r=>this.visit(r,s)).join(".");e.push(i);}return e.join(" ")}IntoClause(t,s){let e=[];if(t.rel&&e.push(this.RangeVar(t.rel,s)),t.colNames&&t.colNames.length>0){let i=c.unwrapList(t.colNames).map(r=>this.visit(r,s)).join(", ");e.push(`(${i})`);}if(t.accessMethod&&e.push("USING",t.accessMethod),t.options&&t.options.length>0){e.push("WITH");let i=c.unwrapList(t.options).map(r=>this.visit(r,s)).join(", ");e.push(`(${i})`);}if(t.onCommit&&t.onCommit!=="ONCOMMIT_NOOP")switch(e.push("ON COMMIT"),t.onCommit){case "ONCOMMIT_PRESERVE_ROWS":e.push("PRESERVE ROWS");break;case "ONCOMMIT_DELETE_ROWS":e.push("DELETE ROWS");break;case "ONCOMMIT_DROP":e.push("DROP");break}return t.tableSpaceName&&e.push("TABLESPACE",h.quoteIdentifier(t.tableSpaceName)),e.join(" ")}OnConflictExpr(t,s){let e=["ON CONFLICT"];if(t.arbiterElems&&t.arbiterElems.length>0){let i=c.unwrapList(t.arbiterElems).map(r=>this.visit(r,s)).join(", ");e.push(`(${i})`);}if(t.arbiterWhere&&(e.push("WHERE"),e.push(this.visit(t.arbiterWhere,s))),t.action==="ONCONFLICT_NOTHING")e.push("DO NOTHING");else if(t.action==="ONCONFLICT_UPDATE"){if(e.push("DO UPDATE SET"),t.onConflictSet&&t.onConflictSet.length>0){let i=c.unwrapList(t.onConflictSet).map(r=>this.visit(r,s)).join(", ");e.push(i);}t.onConflictWhere&&(e.push("WHERE"),e.push(this.visit(t.onConflictWhere,s)));}return e.join(" ")}ScanToken(t,s){return ""}CreateOpClassItem(t,s){let e=[];if(t.itemtype===1){e.push("OPERATOR");let i=t.number!==void 0?t.number:0;if(e.push(i.toString()),t.name){let r=s.spawn("CreateOpClassItem");e.push(this.ObjectWithArgs(t.name,r));}}else if(t.itemtype===2){e.push("FUNCTION");let i=t.number!==void 0?t.number:0;if(e.push(i.toString()),t.name){let r=s.spawn("CreateOpClassItem");e.push(this.ObjectWithArgs(t.name,r));}}else t.itemtype===3&&(e.push("STORAGE"),t.storedtype&&e.push(this.TypeName(t.storedtype,s)));if(t.order_family&&t.order_family.length>0){e.push("FOR ORDER BY");let i=c.unwrapList(t.order_family).map(r=>this.visit(r,s)).join(".");e.push(i);}if(t.class_args&&t.class_args.length>0){let i=c.unwrapList(t.class_args).map(r=>this.visit(r,s)).join(", ");e.push(`(${i})`);}return e.join(" ")}Var(t,s){return t.varno&&t.varattno?`$${t.varno}.${t.varattno}`:"$var"}TableFunc(t,s){let e=[];if(t.functype==="TFT_XMLTABLE"){if(e.push("XMLTABLE"),t.ns_names&&t.ns_names.length>0){e.push("XMLNAMESPACES");let i=c.unwrapList(t.ns_names).map(r=>this.visit(r,s)).join(", ");e.push(`(${i})`);}if(t.rowexpr&&e.push(`(${this.visit(t.rowexpr,s)})`),t.docexpr&&(e.push("PASSING"),e.push(this.visit(t.docexpr,s))),t.colexprs&&t.colexprs.length>0){e.push("COLUMNS");let i=c.unwrapList(t.colexprs).map(r=>this.visit(r,s)).join(", ");e.push(i);}}else if(t.functype==="TFT_JSON_TABLE"&&(e.push("JSON_TABLE"),t.docexpr&&e.push(`(${this.visit(t.docexpr,s)})`),t.rowexpr&&(e.push(","),e.push(`'${this.visit(t.rowexpr,s)}'`)),t.colexprs&&t.colexprs.length>0)){e.push("COLUMNS");let i=c.unwrapList(t.colexprs).map(r=>this.visit(r,s)).join(", ");e.push(`(${i})`);}return e.join(" ")}RangeTableFunc(t,s){let e=[];if(t.lateral&&e.push("LATERAL"),t.docexpr&&e.push(this.visit(t.docexpr,s)),t.rowexpr&&(e.push("PASSING"),e.push(this.visit(t.rowexpr,s))),t.columns&&t.columns.length>0){e.push("COLUMNS");let i=c.unwrapList(t.columns).map(r=>this.visit(r,s)).join(", ");e.push(`(${i})`);}return t.alias&&e.push(this.Alias(t.alias,s)),e.join(" ")}RangeTableFuncCol(t,s){let e=[];return t.colname&&e.push(h.quoteIdentifier(t.colname)),t.for_ordinality?e.push("FOR ORDINALITY"):t.typeName&&e.push(this.TypeName(t.typeName,s)),t.colexpr&&(e.push("PATH"),e.push(`'${this.visit(t.colexpr,s)}'`)),t.coldefexpr&&(e.push("DEFAULT"),e.push(this.visit(t.coldefexpr,s))),e.join(" ")}JsonArrayQueryConstructor(t,s){let e=["JSON_ARRAYAGG"];return t.query&&e.push(`(${this.visit(t.query,s)})`),t.format&&e.push("FORMAT JSON"),t.output&&e.push("RETURNING TEXT"),t.absent_on_null?e.push("ABSENT ON NULL"):e.push("NULL ON NULL"),e.join(" ")}RangeFunction(t,s){let e=[];if(t.lateral&&e.push("LATERAL"),t.is_rowsfrom){if(e.push("ROWS FROM"),t.functions&&t.functions.length>0){let i=c.unwrapList(t.functions).filter(r=>r!=null).map(r=>{try{if(this.getNodeType(r)==="List"){let a=this.getNodeData(r);if(a&&a.items&&Array.isArray(a.items)){let u=a.items;if(u.length>=2){let l=this.visit(u[0],s),p=this.getNodeData(u[1]);if(p&&p.items&&Array.isArray(p.items)){let f=p.items.map(m=>this.visit(m,s)).filter(m=>m&&m.trim());if(f.length>0)return `${l} AS (${f.join(", ")})`}return l}else if(u.length===1)return this.visit(u[0],s)}}return this.visit(r,s)}catch(n){return console.warn(`Error processing function in RangeFunction: ${n instanceof Error?n.message:String(n)}`),""}}).filter(r=>r&&r.trim());i.length>0&&e.push(`(${i.join(", ")})`);}}else if(t.functions&&t.functions.length>0){let i=c.unwrapList(t.functions).filter(r=>r!=null).map(r=>{try{if(this.getNodeType(r)==="List"){let a=this.getNodeData(r);if(a&&a.items&&Array.isArray(a.items)){let u=a.items;if(u.length>=1)return this.visit(u[0],s)}}return this.visit(r,s)}catch(n){return console.warn(`Error processing function in RangeFunction: ${n instanceof Error?n.message:String(n)}`),""}}).filter(r=>r&&r.trim());i.length>0&&e.push(i.join(", "));}if(t.ordinality&&e.push("WITH ORDINALITY"),t.alias)if(t.coldeflist&&t.coldeflist.length>0){let i=t.alias.aliasname,r=c.unwrapList(t.coldeflist).map(n=>this.visit(n,s)).filter(n=>n&&n.trim());e.push(`${i} (${r.join(", ")})`);}else e.push(this.Alias(t.alias,s));else if(t.coldeflist&&t.coldeflist.length>0){let i=c.unwrapList(t.coldeflist).map(r=>this.visit(r,s)).filter(r=>r&&r.trim());e.push(`AS (${i.join(", ")})`);}return e.join(" ")}XmlExpr(t,s){if(t.op==="IS_XMLPI")if(t.name&&t.args&&t.args.length>0){let i=c.unwrapList(t.args).map(r=>this.visit(r,s));return `xmlpi(name ${h.quoteIdentifier(t.name)}, ${i.join(", ")})`}else return t.name?`xmlpi(name ${h.quoteIdentifier(t.name)})`:"XMLPI()";let e=[];switch(t.op){case "IS_XMLCONCAT":e.push("XMLCONCAT");break;case "IS_XMLELEMENT":e.push("XMLELEMENT");let i=[];if(t.name&&i.push(`NAME ${h.quoteIdentifier(t.name)}`),t.named_args&&t.named_args.length>0){let n=c.unwrapList(t.named_args).map(a=>this.visit(a,s));i.push(`XMLATTRIBUTES(${n.join(", ")})`);}if(t.args&&t.args.length>0){let n=c.unwrapList(t.args).map(a=>this.visit(a,s));i.push(...n);}i.length>0&&e.push(`(${i.join(", ")})`);break;case "IS_XMLFOREST":e.push("XMLFOREST");break;case "IS_XMLPARSE":e.push("XMLPARSE");let r=[];if(t.xmloption&&(t.xmloption==="XMLOPTION_DOCUMENT"?r.push("DOCUMENT"):t.xmloption==="XMLOPTION_CONTENT"&&r.push("CONTENT")),t.args&&t.args.length>0){let n=c.unwrapList(t.args).map(a=>this.visit(a,s));n.length>0&&r.push(n[0]);}r.length>0&&e.push(`(${r.join(" ")})`);break;case "IS_XMLROOT":if(e.push("XMLROOT"),t.args&&t.args.length>0){let n=c.unwrapList(t.args),a=[];if(n[0]&&a.push(this.visit(n[0],s)),n[1]){let u=n[1];u.A_Const&&u.A_Const.isnull?a.push("version NO VALUE"):a.push(`version ${this.visit(u,s)}`);}if(n[2]){let u=n[2];u.A_Const&&u.A_Const.ival!==void 0?u.A_Const.ival.ival===1?a.push("STANDALONE NO"):u.A_Const.ival.ival===2?a.push("STANDALONE NO VALUE"):u.A_Const.ival.ival===3||(Object.keys(u.A_Const.ival).length===0?a.push("STANDALONE YES"):a.push(`STANDALONE ${this.visit(u,s)}`)):a.push(`STANDALONE ${this.visit(u,s)}`);}a.length>0&&e.push(`(${a.join(", ")})`);}break;case "IS_XMLSERIALIZE":e.push("XMLSERIALIZE");break;case "IS_DOCUMENT":if(t.args&&t.args.length>0){let n=c.unwrapList(t.args).map(a=>this.visit(a,s));e.push(`${n[0]} IS DOCUMENT`);}else e.push("IS DOCUMENT");break;default:throw new Error(`Unsupported XmlExpr op: ${t.op}`)}if(t.op!=="IS_XMLELEMENT"&&t.op!=="IS_XMLPARSE"&&t.op!=="IS_XMLROOT"&&t.op!=="IS_DOCUMENT"){if(t.name){let i=h.quoteIdentifier(t.name);e.push(`NAME ${i}`);}if(t.args&&t.args.length>0){let i=c.unwrapList(t.args).map(r=>this.visit(r,s));e.push(`(${i.join(", ")})`);}}if(t.named_args&&t.named_args.length>0&&t.op!=="IS_XMLELEMENT"){let i=c.unwrapList(t.named_args).map(r=>this.visit(r,s));t.op==="IS_XMLFOREST"?e.push(`(${i.join(", ")})`):e.push(`XMLATTRIBUTES(${i.join(", ")})`);}return e.join(" ")}schemaname(t,s){if(typeof t=="string")return h.quoteIdentifier(t);if(t&&t.String&&t.String.sval)return h.quoteIdentifier(t.String.sval);if(t&&typeof t=="object"){if(t.sval!==void 0)return h.quoteIdentifier(t.sval);if(t.List&&Array.isArray(t.List.items)){let e=t.List.items;if(e.length>0&&e[0].String&&e[0].String.sval)return h.quoteIdentifier(e[0].String.sval)}return t.val!==void 0?h.quoteIdentifier(t.val):""}return ""}RangeTableSample(t,s){let e=[];if(t.relation&&e.push(this.visit(t.relation,s)),e.push("TABLESAMPLE"),t.method&&t.method.length>0){let i=t.method.map(r=>this.visit(r,s));e.push(i.join("."));}if(t.args&&t.args.length>0){let i=t.args.map(r=>this.visit(r,s));e.push(`(${i.join(", ")})`);}return t.repeatable&&(e.push("REPEATABLE"),e.push(`(${this.visit(t.repeatable,s)})`)),e.join(" ")}XmlSerialize(t,s){let e=["XMLSERIALIZE"];return e.push("("),t.typeName&&(t.xmloption==="XMLOPTION_DOCUMENT"?e.push("DOCUMENT"):e.push("CONTENT"),e.push(this.visit(t.expr,s)),e.push("AS"),e.push(this.TypeName(t.typeName,s))),e.push(")"),e.join(" ")}ctes(t,s){if(!t||!Array.isArray(t))return "";let e=["WITH"];t.length>0&&t[0]&&t[0].CommonTableExpr&&t[0].CommonTableExpr.recursive&&e.push("RECURSIVE");let i=t.map(r=>this.visit(r,s));return e.push(i.join(", ")),e.join(" ")}RuleStmt(t,s){let e=["CREATE"];if(t.replace&&e.push("OR REPLACE"),e.push("RULE"),t.rulename&&e.push(h.quoteIdentifier(t.rulename)),e.push("AS ON"),t.event)switch(t.event){case "CMD_SELECT":e.push("SELECT");break;case "CMD_INSERT":e.push("INSERT");break;case "CMD_UPDATE":e.push("UPDATE");break;case "CMD_DELETE":e.push("DELETE");break;default:e.push(t.event.toString());}if(e.push("TO"),t.relation&&e.push(this.RangeVar(t.relation,s)),t.whereClause&&(e.push("WHERE"),e.push(this.visit(t.whereClause,s))),e.push("DO"),t.instead&&e.push("INSTEAD"),t.actions&&t.actions.length>0)if(t.actions.length===1)e.push(this.visit(t.actions[0],s));else {e.push("(");let i=c.unwrapList(t.actions).map(r=>this.visit(r,s));e.push(i.join("; ")),e.push(")");}else e.push("NOTHING");return e.join(" ")}RangeSubselect(t,s){let e=[];return t.lateral&&e.push("LATERAL"),t.subquery&&(e.push("("),e.push(this.visit(t.subquery,s)),e.push(")")),t.alias&&e.push(this.Alias(t.alias,s)),e.join(" ")}relname(t,s){return typeof t=="string"?h.quoteIdentifier(t):t&&t.String&&t.String.sval?h.quoteIdentifier(t.String.sval):t&&typeof t=="object"&&t.relname?h.quoteIdentifier(t.relname):this.visit(t,s)}rel(t,s){return typeof t=="string"?h.quoteIdentifier(t):t&&t.String&&t.String.sval?h.quoteIdentifier(t.String.sval):t&&t.RangeVar?this.RangeVar(t.RangeVar,s):t&&typeof t=="object"&&t.relname?h.quoteIdentifier(t.relname):this.visit(t,s)}objname(t,s){return typeof t=="string"?h.quoteIdentifier(t):t&&t.String&&t.String.sval?h.quoteIdentifier(t.String.sval):Array.isArray(t)?t.map(i=>i&&i.String&&i.String.sval?h.quoteIdentifier(i.String.sval):this.visit(i,s)).join("."):this.visit(t,s)}SQLValueFunction(t,s){switch(t.op){case "SVFOP_CURRENT_DATE":return "CURRENT_DATE";case "SVFOP_CURRENT_TIME":return "CURRENT_TIME";case "SVFOP_CURRENT_TIME_N":return `CURRENT_TIME(${t.typmod||0})`;case "SVFOP_CURRENT_TIMESTAMP":return "CURRENT_TIMESTAMP";case "SVFOP_CURRENT_TIMESTAMP_N":return `CURRENT_TIMESTAMP(${t.typmod||0})`;case "SVFOP_LOCALTIME":return "LOCALTIME";case "SVFOP_LOCALTIME_N":return `LOCALTIME(${t.typmod||0})`;case "SVFOP_LOCALTIMESTAMP":return "LOCALTIMESTAMP";case "SVFOP_LOCALTIMESTAMP_N":return `LOCALTIMESTAMP(${t.typmod||0})`;case "SVFOP_CURRENT_ROLE":return "CURRENT_ROLE";case "SVFOP_CURRENT_USER":return "CURRENT_USER";case "SVFOP_USER":return "USER";case "SVFOP_SESSION_USER":return "SESSION_USER";case "SVFOP_CURRENT_CATALOG":return "CURRENT_CATALOG";case "SVFOP_CURRENT_SCHEMA":return "CURRENT_SCHEMA";default:throw new Error(`Unsupported SQLValueFunction op: ${t.op}`)}}GroupingFunc(t,s){let e=["GROUPING"];if(t.args&&t.args.length>0){let i=c.unwrapList(t.args).map(r=>this.visit(r,s));e.push(`(${i.join(", ")})`);}else e.push("()");return e.join("")}MultiAssignRef(t,s){let e=[];return t.source&&e.push(this.visit(t.source,s)),t.colno>0&&e.push(`[${t.colno}]`),e.join("")}SetToDefault(t,s){return "DEFAULT"}CurrentOfExpr(t,s){let e=["CURRENT OF"];return t.cursor_name&&e.push(h.quoteIdentifier(t.cursor_name)),t.cursor_param>0&&e.push(`$${t.cursor_param}`),e.join(" ")}TableLikeClause(t,s){let e=["LIKE"];if(t.relation&&e.push(this.visit(t.relation,s)),t.options&&typeof t.options=="number")if(t.options===2147483647||t.options===2147483647)e.push("INCLUDING ALL");else {let i=[];t.options&1&&i.push("INCLUDING COMMENTS"),t.options&4&&i.push("INCLUDING CONSTRAINTS"),t.options&8&&i.push("INCLUDING DEFAULTS"),t.options&16&&i.push("INCLUDING GENERATED"),t.options&32&&i.push("INCLUDING IDENTITY"),t.options&64&&i.push("INCLUDING INDEXES"),t.options&128&&i.push("INCLUDING STATISTICS"),t.options&256&&i.push("INCLUDING STORAGE"),i.length>0&&e.push(i.join(" "));}return e.join(" ")}AlterFunctionStmt(t,s){let e=["ALTER"];if(t.objtype==="OBJECT_PROCEDURE"?e.push("PROCEDURE"):e.push("FUNCTION"),t.func&&e.push(this.ObjectWithArgs(t.func,s)),t.actions&&t.actions.length>0){let i=s.spawn("AlterFunctionStmt"),r=c.unwrapList(t.actions).map(n=>this.visit(n,i));e.push(r.join(" "));}return e.join(" ")}AlterObjectSchemaStmt(t,s){let e=["ALTER"];try{e.push(this.getObjectTypeKeyword(t.objectType));}catch{e.push(t.objectType.toString());}if(t.missing_ok&&e.push("IF EXISTS"),t.relation&&(t.objectType==="OBJECT_TABLE"||t.objectType==="OBJECT_FOREIGN_TABLE"||t.objectType==="OBJECT_MATVIEW"))e.push(this.RangeVar(t.relation,s));else if(t.object)if(t.objectType==="OBJECT_DOMAIN"&&t.object.List){let i=c.unwrapList(t.object);if(i.length===2){let r=i[0].String?.sval||"",n=i[1].String?.sval||"";e.push(h.quoteQualifiedIdentifier(r,n));}else e.push(this.visit(t.object,s));}else if(t.objectType==="OBJECT_TYPE"&&t.object.List){let i=c.unwrapList(t.object);if(i.length===2){let r=i[0].String?.sval||"",n=i[1].String?.sval||"";e.push(h.quoteQualifiedIdentifier(r,n));}else e.push(this.visit(t.object,s));}else if(t.objectType==="OBJECT_CONVERSION"&&t.object.List){let i=c.unwrapList(t.object);if(i.length===2){let r=i[0].String?.sval||"",n=i[1].String?.sval||"";e.push(h.quoteQualifiedIdentifier(r,n));}else e.push(this.visit(t.object,s));}else if(t.objectType==="OBJECT_TSPARSER"&&t.object.List){let i=c.unwrapList(t.object);if(i.length===2){let r=i[0].String?.sval||"",n=i[1].String?.sval||"";e.push(h.quoteQualifiedIdentifier(r,n));}else e.push(this.visit(t.object,s));}else if(t.objectType==="OBJECT_TSCONFIGURATION"&&t.object.List){let i=c.unwrapList(t.object);if(i.length===2){let r=i[0].String?.sval||"",n=i[1].String?.sval||"";e.push(h.quoteQualifiedIdentifier(r,n));}else e.push(this.visit(t.object,s));}else if(t.objectType==="OBJECT_TSTEMPLATE"&&t.object.List){let i=c.unwrapList(t.object);if(i.length===2){let r=i[0].String?.sval||"",n=i[1].String?.sval||"";e.push(h.quoteQualifiedIdentifier(r,n));}else e.push(this.visit(t.object,s));}else if(t.objectType==="OBJECT_TSDICTIONARY"&&t.object.List){let i=c.unwrapList(t.object);if(i.length===2){let r=i[0].String?.sval||"",n=i[1].String?.sval||"";e.push(h.quoteQualifiedIdentifier(r,n));}else e.push(this.visit(t.object,s));}else if(t.objectType==="OBJECT_OPCLASS"&&t.object.List){let i=c.unwrapList(t.object);if(i.length===2){let r=i[0].String?.sval||"",n=i[1].String?.sval||"";e.push(`${h.quoteIdentifier(n)} USING ${r}`);}else if(i.length===3){let r=i[0].String?.sval||"",n=i[1].String?.sval||"",a=i[2].String?.sval||"";e.push(`${h.quoteQualifiedIdentifier(n,a)} USING ${r}`);}else e.push(this.visit(t.object,s));}else if(t.objectType==="OBJECT_OPFAMILY"&&t.object.List){let i=c.unwrapList(t.object);if(i.length===2){let r=i[0].String?.sval||"",n=i[1].String?.sval||"";e.push(`${h.quoteIdentifier(n)} USING ${r}`);}else if(i.length===3){let r=i[0].String?.sval||"",n=i[1].String?.sval||"",a=i[2].String?.sval||"";e.push(`${h.quoteQualifiedIdentifier(n,a)} USING ${r}`);}else e.push(this.visit(t.object,s));}else e.push(this.visit(t.object,s));return e.push("SET SCHEMA"),t.newschema&&e.push(h.quoteIdentifier(t.newschema)),e.join(" ")}AlterRoleSetStmt(t,s){let e=["ALTER","ROLE"];if(t.role?e.push(this.RoleSpec(t.role,s)):e.push("ALL"),t.database&&(e.push("IN DATABASE"),e.push(this.quoteIfNeeded(t.database))),t.setstmt){if(t.setstmt.kind==="VAR_RESET")e.push("RESET"),t.setstmt.name&&e.push(t.setstmt.name);else if(e.push("SET"),t.setstmt.name&&e.push(t.setstmt.name),t.setstmt.args&&t.setstmt.args.length>0){e.push("TO");let i=c.unwrapList(t.setstmt.args).map(r=>this.visit(r,s)).join(", ");e.push(i);}}return e.join(" ")}CreateForeignTableStmt(t,s){let e=["CREATE FOREIGN TABLE"];if(t.base&&t.base.relation){let i=s.spawn("CreateForeignTableStmt");e.push(this.RangeVar(t.base.relation,i));}if(t.base&&t.base.tableElts){let i=c.unwrapList(t.base.tableElts).map(r=>this.visit(r,s));e.push(`(${i.join(", ")})`);}else t.base?.partbound||e.push("()");if(t.base&&t.base.inhRelations&&t.base.inhRelations.length>0)if(t.base.partbound){let i=c.unwrapList(t.base.inhRelations).map(r=>this.visit(r,s));e.push(`PARTITION OF ${i.join(", ")}`),t.base.partbound.is_default&&e.push("DEFAULT");}else {let i=c.unwrapList(t.base.inhRelations).map(r=>this.visit(r,s));e.push(`INHERITS (${i.join(", ")})`);}if(t.servername&&(e.push("SERVER"),e.push(h.quoteIdentifier(t.servername))),t.options&&t.options.length>0){let i=s.spawn("CreateForeignTableStmt"),r=c.unwrapList(t.options).map(n=>this.visit(n,i));e.push(`OPTIONS (${r.join(", ")})`);}return e.join(" ")}containsMultilineStringLiteral(t){return /'[^']*\n[^']*'/g.test(t)}};});var ae=C(()=>{fs();ne();Z.deparse;});function lt(o){if("String"in o)return o.String.sval}function M(o){return o.map(lt).filter(t=>t!=null)}function q(o){return o==null?[]:o.List!==void 0?o.List.items||[]:Array.isArray(o)?o:[o]}function kt(o){return h.quoteIdentifier(o)}function tt(o){return Object.keys(o)[0]}function hs(o){if("A_Const"in o){if(o.A_Const.ival)return o.A_Const.ival.ival;if(o.A_Const.fval)return o.A_Const.fval.fval;if(o.A_Const.sval)return o.A_Const.sval.sval;if(o.A_Const.boolval)return o.A_Const.boolval.boolval;if(o.A_Const.isnull)return null}}var V=C(()=>{ae();});function Es(o){let t=o.toLowerCase().trim();if(t.startsWith("_")||t.endsWith("[]"))return "TEXT";let s=Ai[t];if(!s)throw new G(`Unsupported PostgreSQL type: "${o}"`);return s}function jt(o){let t=o.toLowerCase();return ["serial","serial4","bigserial","serial8","smallserial","serial2"].includes(t)}function $t(o){let t=o.toLowerCase();return ["varchar","character varying","char","character","bpchar"].includes(t)}function Ut(o){let t=o.toLowerCase();return ["numeric","decimal"].includes(t)}var G,R,Ai,ms,Ni,Ft,et=C(()=>{V();G=class extends Error{},R=class extends G{constructor(s,e){super(e??`Unsupported node type: ${tt(s)}`);this.node=s;}},Ai={int2:"INTEGER",smallint:"INTEGER",int4:"INTEGER",integer:"INTEGER",int:"INTEGER",int8:"INTEGER",bigint:"INTEGER",serial:"INTEGER",serial4:"INTEGER",bigserial:"INTEGER",serial8:"INTEGER",smallserial:"INTEGER",serial2:"INTEGER",float4:"REAL",real:"REAL",float8:"REAL","double precision":"REAL",numeric:"REAL",decimal:"REAL",text:"TEXT",varchar:"TEXT","character varying":"TEXT",char:"TEXT",character:"TEXT",bpchar:"TEXT",name:"TEXT",bytea:"BLOB",bool:"INTEGER",boolean:"INTEGER",date:"TEXT",time:"TEXT","time without time zone":"TEXT",timetz:"TEXT","time with time zone":"TEXT",timestamp:"TEXT","timestamp without time zone":"TEXT",timestamptz:"TEXT","timestamp with time zone":"TEXT",interval:"TEXT",json:"TEXT",jsonb:"TEXT",uuid:"TEXT",inet:"TEXT"},ms=["<",">","<=",">=","=","<>","!=","+","-","*","/","%","&","|","<<",">>","||","BETWEEN","NOT BETWEEN","IN","NOT IN","LIKE","NOT LIKE","IS NULL","IS NOT NULL","IS TRUE","IS NOT TRUE","IS FALSE","IS NOT FALSE","IS UNKNOWN","IS NOT UNKNOWN","AND","OR","NOT","->>"];Ni={CreateEnumStmt:{react:"ignore"},CreateDomainStmt:{react:"warn"},CreateSeqStmt:{react:"error"},AlterSeqStmt:{react:"error"},CreateSchemaStmt:{react:"warn"},CreatePolicyStmt:{react:"ignore"},PartitionElem:{react:"error"},PartitionCmd:{react:"error"},VariableSetStmt:{react:"ignore"},CompositeTypeStmt:{react:"error"},AlterEnumStmt:{react:"error"},AlterObjectSchemaStmt:{react:"error"},AlterOwnerStmt:{react:"error"},AlterTypeStmt:{react:"error"},AlterFunctionStmt:{react:"error"},AlterDefaultPrivilegesStmt:{react:"error"},GrantStmt:{react:"error"},GrantRoleStmt:{react:"error"},CopyStmt:{react:"error"},CreateCastStmt:{react:"error"},AlterOpFamilyStmt:{react:"error"},AlterOperatorStmt:{react:"error"},TruncateStmt:{react:"error"},A_Indirection:{react:"error"},XmlExpr:{react:"error"},XmlSerialize:{react:"error"},RangeTableSample:{react:"error"},GroupingSet:{react:"error"}},Ft=new Map(Object.entries(Ni));});var le=Fe(Bt=>{Object.defineProperty(Bt,"__esModule",{value:true});Bt.SqlFormatter=void 0;var ue=class{newlineChar;tabChar;prettyMode;constructor(t=`
|
|
44
|
-
`,s=" ",e=true){this.newlineChar=t,this.tabChar=s,this.prettyMode=e;}format(t,s=" "){return t.filter(e=>e!=null&&e!=="").join(s)}indent(t,s=1){if(!this.prettyMode)return t;let e=this.tabChar.repeat(s);return t.split(this.newlineChar).map(i=>i.trim()?e+i:i).join(this.newlineChar)}parens(t){return `(${t})`}newline(){return this.newlineChar}tab(){return this.tabChar}isPretty(){return this.prettyMode}};Bt.SqlFormatter=ue;});var gs=Fe(st=>{Object.defineProperty(st,"__esModule",{value:true});st.BaseVisitor=st.DeparserContext=void 0;var Ri=le(),oe=class o{indentLevel;prettyMode;isStringLiteral;parentNodeTypes;formatter;select;from;group;sort;insertColumns;update;bool;isColumnConstraint;isDomainConstraint;alterColumnOptions;alterTableOptions;isEnumValue;objtype;subtype;constructor({indentLevel:t=0,prettyMode:s=true,isStringLiteral:e,parentNodeTypes:i=[],formatter:r,select:n,from:a,group:u,sort:l,insertColumns:p,update:f,bool:m,isColumnConstraint:T,isDomainConstraint:E,alterColumnOptions:g,alterTableOptions:A,isEnumValue:S,objtype:b,subtype:_,...y}={}){this.indentLevel=t,this.prettyMode=s,this.isStringLiteral=e,this.parentNodeTypes=i,this.formatter=r||new Ri.SqlFormatter(`
|
|
45
|
-
`," ",s),this.select=n,this.from=a,this.group=u,this.sort=l,this.insertColumns=p,this.update=f,this.bool=m,this.isColumnConstraint=T,this.isDomainConstraint=E,this.alterColumnOptions=g,this.alterTableOptions=A,this.isEnumValue=S,this.objtype=b,this.subtype=_,Object.assign(this,y);}spawn(t,s={}){return new o({indentLevel:this.indentLevel,prettyMode:this.prettyMode,isStringLiteral:this.isStringLiteral,parentNodeTypes:[...this.parentNodeTypes,t],formatter:this.formatter,select:this.select,from:this.from,group:this.group,sort:this.sort,insertColumns:this.insertColumns,update:this.update,bool:this.bool,isColumnConstraint:this.isColumnConstraint,isDomainConstraint:this.isDomainConstraint,alterColumnOptions:this.alterColumnOptions,alterTableOptions:this.alterTableOptions,isEnumValue:this.isEnumValue,objtype:this.objtype,subtype:this.subtype,...s})}indent(t,s){if(!this.prettyMode)return t;let e=s!==void 0?s:this.indentLevel+1;return this.formatter.indent(t,e)}newline(){return this.formatter.newline()}parens(t){return this.formatter.parens(t)}format(t,s){return this.formatter.format(t,s)}isPretty(){return this.formatter.isPretty()}};st.DeparserContext=oe;var pe=class{getNodeType(t){return Object.keys(t)[0]}getNodeData(t){let s=this.getNodeType(t);return t[s]}formatList(t,s=", ",e="",i){return !t||t.length===0?"":t.map(r=>`${e}${i(r)}`).join(s)}formatParts(t,s=" "){return t.filter(e=>e!=null&&e!=="").join(s)}formatParens(t){return `(${t})`}formatIndent(t,s=1){return t}};st.BaseVisitor=pe;});var Mt,Ts=C(()=>{et();V();Mt=class{constructor(t){this.ast=t;this.result=[...this.walk(this.ast,[],{trackPaths:["returningList"]})];}result=[];*walk(t=this.ast,s=[],e={}){if(!t||typeof t!="object")return;let{trackPaths:i=[]}=e;if(Array.isArray(t)){for(let n=0;n<t.length;n++)yield*this.walk(t[n],s,e);return}let r=Object.keys(t);if(r.length===1&&r[0][0]>="A"&&r[0][0]<="Z"){let n=r[0];yield {node:t,path:s},yield*this.walk(t[n],[...s,n],e);}else for(let[n,a]of Object.entries(t))if(a&&typeof a=="object"){let u=i.includes(n)?[...s,n]:s;yield*this.walk(a,u,e);}}containsUnsupportedNode(){for(let{node:t}of this.result){let s=tt(t),e=Ft.get(s);if(e&&e.react==="error")return true}}hasFuncCall(){for(let{node:t}of this.result)if("FuncCall"in t)return true;return false}getFuncCalls(){return Array.from(this.result).map(({node:t})=>t).filter(t=>"FuncCall"in t).map(t=>t.FuncCall)}getFuncCallNames(){return this.getFuncCalls().flatMap(t=>t.funcname?.map(s=>s.String?.sval||s.String?.str))}hasSqlValueFunction(){for(let{node:t}of this.result)if("SQLValueFunction"in t)return true;return false}getSqlValueFunctions(){return Array.from(this.result).map(({node:t})=>t).filter(t=>"SQLValueFunction"in t).map(t=>t.SQLValueFunction)}getSqlValueFunctionNames(){return this.getSqlValueFunctions().map(t=>t.op)}hasUnsafeStar(){let t=this.result.filter(({node:s})=>"A_Star"in s);if(t.length===0)return false;for(let{path:s}of t)if(!s.includes("SelectStmt")&&!s.includes("returningList"))return true;return false}getRelationDefinitions(){return this.result.filter(({node:s})=>"CreateStmt"in s).map(({node:s})=>s.CreateStmt).map(s=>({relation:{relname:s.relation?.relname??"",inh:s.relation?.inh,relpersistence:s.relation?.relpersistence},columns:s.tableElts?.map(e=>{let i=e.ColumnDef?.typeName?.names?.map(n=>"String"in n?n.String.sval:""),r=i?.some(n=>n.toLowerCase().includes("pg_catalog"));return {name:e.ColumnDef?.colname??"",is_local:e.ColumnDef?.is_local,pg_catalog:r,type:i?.filter(n=>!n.toLowerCase().includes("pg_catalog"))[0]??"",types:i,constraints:e.ColumnDef?.constraints}})}))}getRelationColumnTypes(){return {has_non_pg_catalog_types:this.getRelationDefinitions().some(t=>t.columns?.some(s=>!s.pg_catalog)),types:Array.from(new Set(this.getRelationDefinitions().flatMap(t=>t.columns?.map(s=>s.type))))}}};});var Oi,yi,bi,Ii,it,qt,Ss=C(()=>{et();Oi=["DECLARE","IF","ELSIF","ELSE","LOOP","WHILE","FOR","FOREACH","EXCEPTION","RAISE","PERFORM","EXECUTE","SELECT"],yi=/^NEW\.(\w+)\s*(?::=|=)\s*(.+)$/is,bi=/^RETURN\s+(NEW|OLD)$/i,Ii=/^(INSERT|UPDATE|DELETE)\b/i,it=class extends G{constructor(s,e,i){super(i??`Unsupported PL/pgSQL: ${s}`);this.hint=s;this.body=e;}},qt=class{parse(t){let s=this.extractBlock(t),e=this.splitStatements(s),i=[],r=null;for(let n of e){let a=n.trim();if(!a)continue;this.rejectUnsupported(a);let u=a.match(bi);if(u){r=u[1].toUpperCase(),i.push({type:"return",value:r});continue}let l=a.match(yi);if(l){i.push({type:"assignment",column:l[1],expression:l[2].trim()});continue}if(Ii.test(a)){i.push({type:"dml",sql:a});continue}throw new it(`"${a.substring(0,80)}" is not translatable to SQLite`,s)}if(!r)throw new G("Trigger function body must end with RETURN NEW or RETURN OLD");return {statements:i,returnValue:r}}extractBlock(t){let s=t.trim(),e=s.toUpperCase();if(/^\s*DECLARE\b/i.test(s))throw new it('"DECLARE" is not translatable to SQLite',t);let i=e.indexOf("BEGIN"),r=e.lastIndexOf("END");if(i===-1||r===-1||r<=i)throw new it("Expected BEGIN ... END block in trigger function body",t);return s.slice(i+5,r).trim()}splitStatements(t){let s=[],e="",i=0,r=false,n="";for(let u=0;u<t.length;u++){let l=t[u];if(r){e+=l,l===n&&(u+1<t.length&&t[u+1]===n?e+=t[++u]:r=false);continue}if(l==="'"||l==='"'){r=true,n=l,e+=l;continue}if(l==="("){i++,e+=l;continue}if(l===")"){i--,e+=l;continue}if(l===";"&&i===0){s.push(e.trim()),e="";continue}e+=l;}let a=e.trim();return a&&s.push(a),s}rejectUnsupported(t){let s=t.match(/^(\w+)/)?.[1]?.toUpperCase();if(s&&Oi.includes(s))throw new it(`"${s}" is not translatable to SQLite`,t)}};});var ot,ce=C(()=>{ot=class extends Error{constructor(s,e,i,r){super(`check constraint "${i}" violated for ${s}.${e}`);this.table=s;this.column=e;this.constraint=i;this.value=r;this.name="CheckConstraintError";}};});var L,k=C(()=>{ce();L=class{context;constructor(t){this.context=t;}get isShimBacked(){return false}checkConstraint(){return null}serialize(t){return t}deserialize(t){return t}validateStorage(t){return {status:"pass",message:null}}validationFail(t,s){return {status:"fail",message:t,action:s}}validationPass(){return {status:"pass",message:null}}isNullish(t){return t==null}toColumnDDL(t){let{includeNullable:s=true}=t??{},e=[],i=this.context.column;e.push(this.quoteIfNeeded(i)),e.push(this.sqliteType),this.context.isPrimaryKey&&e.push("PRIMARY KEY"),this.context.isSerial&&this.context.isPrimaryKey&&e.push("AUTOINCREMENT"),s&&!this.context.nullable&&!this.context.isPrimaryKey&&e.push("NOT NULL"),this.context.isUnique&&!this.context.isPrimaryKey&&e.push("UNIQUE"),this.context.defaultValue!==null&&e.push(`DEFAULT ${this.context.defaultValue}`);let r=this.checkConstraint();return r&&e.push(`CHECK (${r})`),e.join(" ")}checkError(t,s){return new ot(this.context.table,this.context.column,t,s)}quoteIfNeeded(t){return /^[a-zA-Z_][a-zA-Z0-9_]*$/.test(t)?t:`"${t}"`}};});var W,Vt=C(()=>{k();W=class extends L{get sqliteType(){return "INTEGER"}};});var pt,fe=C(()=>{Vt();pt=class extends W{constructor(t){super({...t,isSerial:true});}};});function Li(o,t){let{precision:s,scale:e}=t,i=10**e,r=10**(s-e);return Math.abs(Math.round(o*i)-o*i)<1e-4&&Math.abs(o)<r}var ct,he=C(()=>{k();ct=class extends L{numericPrecision;constructor(t,s){super(t),this.numericPrecision=s;}get isShimBacked(){return this.numericPrecision!==void 0}get sqliteType(){return "REAL"}checkConstraint(){if(this.numericPrecision){let{precision:t,scale:s}=this.numericPrecision,e=this.context.column,i=10**s,r=10**(t-s);return `ABS(ROUND(${e} * ${i}) - ${e} * ${i}) < 0.0001 AND ABS(${e}) < ${r}`}return null}validateStorage(t){if(this.isNullish(t))return this.validationPass();if(typeof t!="number"||!Number.isFinite(t))return this.validationFail("Expected finite number.","Patch rows with finite numbers.");if(this.numericPrecision){let{precision:s,scale:e}=this.numericPrecision;if(!Li(t,this.numericPrecision))return this.validationFail(`Does not fit numeric(${s}, ${e}).`,"Patch rows within numeric precision.")}return this.validationPass()}};});var I,v=C(()=>{k();I=class extends L{lengthConstraint;constructor(t,s){super(t),this.lengthConstraint=s;}get isShimBacked(){return this.lengthConstraint!==void 0}get sqliteType(){return "TEXT"}checkConstraint(){return this.lengthConstraint!==void 0?`length(${this.context.column}) <= ${this.lengthConstraint}`:null}validateStorage(t){return this.isNullish(t)?this.validationPass():typeof t!="string"?this.validationFail("Expected text.","Patch rows with text values."):this.lengthConstraint!==void 0&&Array.from(t).length>this.lengthConstraint?this.validationFail(`Exceeds length ${this.lengthConstraint}.`,"Patch rows with shorter text."):this.validationPass()}};});var ft,me=C(()=>{k();ft=class extends L{get sqliteType(){return "BLOB"}};});var ht,Ee=C(()=>{k();ht=class extends L{get isShimBacked(){return true}get sqliteType(){return "INTEGER"}checkConstraint(){return `${this.context.column} IN (0, 1)`}serialize(t){if(this.isNullish(t))return t;if(t===true||t===1)return 1;if(t===false||t===0)return 0;throw this.checkError("boolean_range",t)}deserialize(t){return this.isNullish(t)?t:t===1?true:t===0?false:t}validateStorage(t){return this.isNullish(t)?this.validationPass():t===1||t===0?this.validationPass():this.validationFail("Expected 0 or 1.","Patch rows with boolean values.")}};});function Cs(o){try{return {ok:!0,value:JSON.parse(o)}}catch{return {ok:false}}}var mt,ge=C(()=>{k();mt=class extends L{get isShimBacked(){return true}get sqliteType(){return "TEXT"}checkConstraint(){let t=this.context.column;return `${t} IS NULL OR json_valid(${t})`}serialize(t){if(this.isNullish(t))return t;try{return JSON.stringify(t)}catch{throw this.checkError("json_valid",t)}}deserialize(t){if(this.isNullish(t))return t;if(typeof t=="string"){let s=Cs(t);return s.ok?s.value:t}return t}validateStorage(t){return this.isNullish(t)?this.validationPass():typeof t!="string"?this.validationFail("Expected JSON text.","Patch rows with JSON values."):Cs(t).ok?this.validationPass():this.validationFail("Invalid JSON text.","Patch rows with valid JSON.")}};});function _i(o){if(!/^\d{4}-\d{2}-\d{2}$/.test(o))return false;let t=new Date(`${o}T00:00:00.000Z`);return !Number.isNaN(t.getTime())&&t.toISOString().slice(0,10)===o}var Et,Te=C(()=>{v();Et=class extends I{get isShimBacked(){return true}checkConstraint(){let t=this.context.column;return `${t} IS NULL OR date(${t}) IS NOT NULL`}validateStorage(t){return this.isNullish(t)?this.validationPass():typeof t!="string"||!_i(t)?this.validationFail("Invalid date.","Patch rows with YYYY-MM-DD dates."):this.validationPass()}};});function wi(o){let t=o.match(/^(\d{2}):(\d{2})(?::(\d{2})(?:\.\d{1,6})?)?([+-](\d{2}):?(\d{2}))?$/);if(!t)return false;let s=Number(t[1]),e=Number(t[2]),i=t[3]===void 0?0:Number(t[3]),r=t[5]===void 0?null:Number(t[5]),n=t[6]===void 0?null:Number(t[6]),a=r===null||n!==null&&r<=15&&n<=59;return s<=24&&e<=59&&i<=59&&(s!==24||e===0&&i===0)&&a}var gt,Se=C(()=>{v();gt=class extends I{get isShimBacked(){return true}checkConstraint(){let t=this.context.column;return `${t} IS NULL OR time(${t}) IS NOT NULL`}validateStorage(t){return this.isNullish(t)?this.validationPass():typeof t!="string"||!wi(t)?this.validationFail("Invalid time.","Patch rows with HH:MM[:SS] times."):this.validationPass()}};});function vi(o){let t=o.match(/^(\d{4})-(\d{2})-(\d{2})[ T](\d{2}):(\d{2})(?::(\d{2})(?:\.\d{1,6})?)?(?:Z|([+-](\d{2}):?(\d{2})))?$/);if(!t)return false;let s=Number(t[1]),e=Number(t[2]),i=Number(t[3]),r=Number(t[4]),n=Number(t[5]),a=t[6]===void 0?0:Number(t[6]),u=t[8]===void 0?null:Number(t[8]),l=t[9]===void 0?null:Number(t[9]),p=new Date(Date.UTC(s,e-1,i)),f=p.getUTCFullYear()===s&&p.getUTCMonth()===e-1&&p.getUTCDate()===i,m=r<=24&&n<=59&&a<=59&&(r!==24||n===0&&a===0),T=u===null||l!==null&&u<=15&&l<=59;return f&&m&&T}var Tt,Ce=C(()=>{v();Tt=class extends I{get isShimBacked(){return true}checkConstraint(){let t=this.context.column;return `${t} IS NULL OR datetime(${t}) IS NOT NULL`}validateStorage(t){return this.isNullish(t)?this.validationPass():typeof t!="string"||!vi(t)?this.validationFail("Invalid timestamp.","Patch rows with ISO timestamps."):this.validationPass()}};});var St,Ae=C(()=>{v();St=class extends I{get isShimBacked(){return true}validateStorage(t){return this.isNullish(t)?this.validationPass():typeof t!="string"||t.trim().length===0?this.validationFail("Expected interval text.","Patch rows with interval strings."):/^-?\d+(?:\.\d+)?$/.test(t.trim())?this.validationFail("Ambiguous numeric interval.","Patch rows with explicit interval strings."):this.validationPass()}};});var Ct,Ne=C(()=>{v();Ct=class extends I{enumValues;constructor(t,s){super(t),this.enumValues=s;}get isShimBacked(){return true}checkConstraint(){let t=this.context.column,s=this.enumValues.map(e=>`'${e.replace(/'/g,"''")}'`).join(", ");return `${t} IN (${s})`}serialize(t){if(this.isNullish(t))return t;if(typeof t!="string"||!this.enumValues.includes(t))throw this.checkError("enum_membership",t);return t}validateStorage(t){return this.isNullish(t)?this.validationPass():typeof t!="string"||!this.enumValues.includes(t)?this.validationFail("Invalid enum value.","Patch rows with declared enum values."):this.validationPass()}};});function As(o){try{return {ok:!0,value:JSON.parse(o)}}catch{return {ok:false}}}var rt,Re=C(()=>{k();rt=class extends L{elementField;constructor(t,s){super(t),this.elementField=s;}get sqliteType(){return "TEXT"}get isShimBacked(){return true}checkConstraint(){let t=this.context.column;return `${t} IS NULL OR (json_valid(${t}) AND json_type(${t}) = 'array')`}serialize(t){if(this.isNullish(t))return t;if(!Array.isArray(t))throw this.checkError("array_type",t);return this.elementField?JSON.stringify(t.map(s=>this.elementField.serialize(s))):JSON.stringify(t)}deserialize(t){if(this.isNullish(t))return t;if(typeof t=="string"){let s=As(t);if(s.ok&&Array.isArray(s.value))return this.elementField?s.value.map(e=>this.elementField.deserialize(e)):s.value}return t}validateStorage(t){if(this.isNullish(t))return this.validationPass();if(typeof t!="string")return this.validationFail("Expected JSON array text.","Patch rows with array values.");let s=As(t);if(!s.ok)return this.validationFail("Invalid JSON array text.","Patch rows with array values.");if(!Array.isArray(s.value))return this.validationFail("Expected JSON array.","Patch rows with array values.");if(this.elementField)for(let e of s.value){let i=this.elementField.validateStorage(e);if(i.status==="fail")return this.validationFail(`Invalid ${this.elementField.context.pgTypeName} array element.`,i.action??"Patch rows with valid array elements.")}return this.validationPass()}};});function Ns(o){return Di.test(o.toLowerCase())}var di,Di,At,Oe=C(()=>{v();di="????????-????-????-????-????????????",Di=/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/;At=class extends I{get isShimBacked(){return true}checkConstraint(){let t=this.quoteIfNeeded(this.context.column);return `${t} IS NULL OR ${t} GLOB '${di}'`}serialize(t){if(this.isNullish(t))return t;if(typeof t!="string")throw this.checkError("uuid_format",t);let s=t.toLowerCase();if(!Ns(s))throw this.checkError("uuid_format",t);return s}validateStorage(t){return this.isNullish(t)?this.validationPass():typeof t!="string"||!Ns(t)?this.validationFail("Invalid UUID.","Patch rows with valid UUIDs."):this.validationPass()}};});function Pi(o){let t=o.split("/");if(t.length>2)return null;let s=t[0];if(!s)return null;if(t.length===1)return {address:s,prefix:null};let e=t[1];return !e||!/^\d+$/.test(e)?null:{address:s,prefix:Number(e)}}function ki(o){let t=o.split(".");return t.length!==4?false:t.every(s=>{if(!/^\d+$/.test(s))return false;let e=Number(s);return e>=0&&e<=255})}function ji(o){if(!o.includes(":"))return false;try{return new URL(`http://[${o}]/`),!0}catch{return false}}function Rs(o){let t=Pi(o);return t?ki(t.address)?t.prefix===null||t.prefix>=0&&t.prefix<=32:ji(t.address)?t.prefix===null||t.prefix>=0&&t.prefix<=128:false:false}var Nt,ye=C(()=>{v();Nt=class extends I{get isShimBacked(){return true}checkConstraint(){let t=this.quoteIfNeeded(this.context.column);return `${t} IS NULL OR (length(${t}) BETWEEN 3 AND 49 AND (instr(${t}, '.') > 0 OR instr(${t}, ':') > 0))`}serialize(t){if(this.isNullish(t))return t;if(typeof t!="string")throw this.checkError("inet_format",t);let s=t.trim();if(!Rs(s))throw this.checkError("inet_format",t);return s}validateStorage(t){return this.isNullish(t)?this.validationPass():typeof t!="string"||!Rs(t.trim())?this.validationFail("Invalid inet address.","Patch rows with valid inet strings."):this.validationPass()}};});var Rt,be=C(()=>{v();Rt=class extends I{serialize(t){throw new Error(`Unsupported type "${this.context.pgTypeName}" for ${this.context.table}.${this.context.column}`)}deserialize(t){throw new Error(`Unsupported type "${this.context.pgTypeName}" for ${this.context.table}.${this.context.column}`)}toColumnDDL(){throw new Error(`Unsupported type "${this.context.pgTypeName}" for ${this.context.table}.${this.context.column}`)}};});function J(o,t){if(t?.isArray){let e=J(o,{...t,isArray:false});return new rt(o,e)}if(t?.enumValues)return new Ct(o,t.enumValues);let s=o.pgTypeName.toLowerCase().trim();if(s.startsWith("_")||s.endsWith("[]")){let e=s.startsWith("_")?s.slice(1):s.slice(0,-2),i={...o,pgTypeName:e},r=J(i);return new rt(o,r)}return Ui.has(s)?new pt(o):$i.has(s)?new W(o):qi.has(s)?new ht(o):Vi.has(s)?new mt(o):xi.has(s)?new Et(o):Yi.has(s)?new gt(o):Hi.has(s)?new Tt(o):Xi.has(s)?new St(o):Mi.has(s)?new ft(o):Fi.has(s)?new ct(o,t?.numericPrecision):Gi.has(s)?new At(o):Wi.has(s)?new I(o,63):Ji.has(s)?new Nt(o):Bi.has(s)?new I(o,t?.lengthConstraint):new Rt(o)}var $i,Ui,Fi,Bi,Mi,qi,Vi,Gi,Wi,Ji,xi,Yi,Hi,Xi,Ie=C(()=>{Vt();fe();he();v();me();Ee();ge();Te();Se();Ce();Ae();Ne();Re();Oe();ye();be();$i=new Set(["int2","smallint","int4","integer","int","int8","bigint"]),Ui=new Set(["serial","serial4","bigserial","serial8","smallserial","serial2"]),Fi=new Set(["float4","real","float8","double precision","numeric","decimal"]),Bi=new Set(["text","varchar","character varying","char","character","bpchar"]),Mi=new Set(["bytea"]),qi=new Set(["bool","boolean"]),Vi=new Set(["json","jsonb"]),Gi=new Set(["uuid"]),Wi=new Set(["name"]),Ji=new Set(["inet"]),xi=new Set(["date"]),Yi=new Set(["time","timetz","time without time zone","time with time zone"]),Hi=new Set(["timestamp","timestamptz","timestamp without time zone","timestamp with time zone"]),Xi=new Set(["interval"]);});function Le(o,t="auto"){let s=o.toLowerCase(),e=Gt[s];if(!e)return null;switch(t){case "translate":{if(!e.sqlite)throw new Error(`No SQLite translation for function "${o}"`);return {sqliteExpr:e.sqlite(),jsFn:null}}case "synthetic":{if(!e.js)throw new Error(`No JS implementation for function "${o}"`);return {sqliteExpr:null,jsFn:e.js}}case "auto":return e.js?{sqliteExpr:null,jsFn:e.js}:e.sqlite?{sqliteExpr:e.sqlite(),jsFn:null}:null}}var Os,Gt,_e=C(()=>{Os="lower(hex(randomblob(4))) || '-' || lower(hex(randomblob(2))) || '-4' || substr(lower(hex(randomblob(2))),2) || '-' || substr('89ab',abs(random()) % 4 + 1, 1) || substr(lower(hex(randomblob(2))),2) || '-' || lower(hex(randomblob(6)))",Gt={gen_random_uuid:{sqlite:()=>Os,js:()=>crypto.randomUUID()},uuid_generate_v4:{sqlite:()=>Os,js:()=>crypto.randomUUID()},now:{sqlite:()=>"datetime('now')",js:()=>new Date().toISOString()},current_timestamp:{sqlite:()=>"datetime('now')",js:()=>new Date().toISOString()},current_date:{sqlite:()=>"date('now')",js:()=>new Date().toISOString().split("T")[0]},current_time:{sqlite:()=>"time('now')",js:()=>new Date().toISOString().split("T")[1].replace("Z","")},random:{sqlite:()=>"random()",js:()=>Math.random()},length:{sqlite:()=>"length",js:null},lower:{sqlite:()=>"lower",js:null},upper:{sqlite:()=>"upper",js:null},substr:{sqlite:()=>"substr",js:null},substring:{sqlite:()=>"substr",js:null},trim:{sqlite:()=>"trim",js:null},ltrim:{sqlite:()=>"ltrim",js:null},rtrim:{sqlite:()=>"rtrim",js:null},replace:{sqlite:()=>"replace",js:null},coalesce:{sqlite:()=>"coalesce",js:null},nullif:{sqlite:()=>"nullif",js:null},count:{sqlite:()=>"count",js:null},sum:{sqlite:()=>"sum",js:null},avg:{sqlite:()=>"avg",js:null},min:{sqlite:()=>"min",js:null},max:{sqlite:()=>"max",js:null},localtime:{sqlite:()=>"time('now', 'localtime')",js:null},localtimestamp:{sqlite:()=>"datetime('now', 'localtime')",js:null}};});var ys,bs,Wt,Is=C(()=>{ae();et();ys=Be(gs());V();bs=Be(le());V();Ts();zt();Ss();ee();te();se();bt();Ie();_e();Wt=class extends Z{enums;schemaHandling;warnings=[];helper;config;triggerFunctions=new Map;plpgsqlParser=new qt;introspection;functionResolution;constructor(t,{enums:s,schemaHandling:e,introspection:i,...r}={}){super(t,r),this.schemaHandling=e??"default",this.enums=s??new Map,this.helper=new Mt(t),this.config=r,this.introspection=i,this.functionResolution=r?.functionResolution??"translate";}visit(t,s){let e=tt(t),i=Ft.get(e);if(i){if(i.react==="error")throw new R({[e]:t},`Unsupported node type: ${e}`);return i.react==="warn"&&this.warnings.push({type:e,node:t}),""}return super.visit(t,s)}deparse(t,s){if(t==null)return null;if(!s){let e=new bs.SqlFormatter;s=new ys.DeparserContext({formatter:e});}return typeof t=="number"||t instanceof Number?t.toString():this.visit(t,s)}RawStmt(t,s){if(!t.stmt||t.stmt.CommentStmt)return "";let e=this.deparse(t.stmt,s);return !e||e.length===0?"":t.stmt_len?e+";":e}RangeVar(t,s){this.ensureRelation(t);let e=this.effectiveSchema(t.schemaname),i=t.relname,r=this.quoteBareIfNeeded(i);e&&(this.schemaHandling==="prefix"?r=`${e}__${i}`:r=`"${e}.${i}"`);let n=t.alias?" "+this.Alias(t.alias,s):"";return r+n}getRelationName(t){this.ensureRelation(t);let s=this.effectiveSchema(t.schemaname),e=t.relname;return s?this.schemaHandling==="prefix"?`${s}__${e}`:`${s}.${e}`:e}quoteBareIfNeeded(t){return /^[A-Za-z_][A-Za-z0-9_]*$/.test(t)?t:`"${t.replace(/"/g,'""')}"`}effectiveSchema(t){if(t){if(this.config.forceDefaultSchema||this.schemaHandling!=="default")return t;if(t!=="public")return t}}ensureRelation(t){let s=this.config.forceDefaultSchema;s&&(!t||typeof t!="object"||s.length===0||t.schemaname||(t.schemaname=s));}CreateStmt(t,s){if(t.inhRelations&&t.inhRelations.length>0)throw new R({CreateStmt:t},"Inheritance is not supported in SQLite");if(t.ofTypename!==void 0)throw new R({CreateStmt:t},"Typed tables (CREATE TABLE ... OF type_name) are not supported. Define columns directly in the CREATE TABLE statement instead.");if(t.options&&t.options.length>0&&(t.options=void 0),!t.tableElts||t.tableElts.length===0)throw new R({CreateStmt:t},"Empty tables are not supported in SQLite. Define at least one column.");return t.accessMethod&&(t.accessMethod=void 0),super.CreateStmt(t,s)+" STRICT"}TableLikeClause(t,s){throw new R({TableLikeClause:t},"CREATE TABLE ... (LIKE ...) is not supported in SQLite. Define the table columns explicitly instead.")}DefElem(t,s){if(["oids","fillfactor",/^autovacuum_/i,"toast_tuple_target","parallel_workers","user_catalog_table"].some(r=>Je(t.defname??"",r)))return "";let i=super.DefElem(t,s);throw new R({DefElem:t},`DefElem "${t.defname}" (${i}) not supported`)}TypeName(t,s){if(!t.names)return "";let e=t.names.map(r=>r.String?r.String.sval||r.String.str:"").filter(Boolean);if(e.length===0)return "";let i=e.length===2&&e[0]==="pg_catalog"?e[1]:e.join(".");return t.arrayBounds&&t.arrayBounds.length>0||this.enums.has(i.toLowerCase())?"TEXT":Es(i)}ColumnDef(t,s){let e=[],i=t.colname;i&&e.push(this.quoteIfNeeded(i));let r=false,n=false,a=null,u=null,l=null,p=false;if(t.typeName){let f=t.typeName.names?.map(E=>E.String?.sval||E.String?.str).filter(Boolean);l=f&&(f.length===2&&f[0]==="pg_catalog"?f[1]:f[0]),r=!!(l&&jt(l)),p=!!(t.typeName.arrayBounds&&t.typeName.arrayBounds.length>0);let m=Array.isArray(t.typeName.typmods)?t.typeName.typmods:[],T=E=>m[E]?.A_Const?.ival?.ival??m[E]?.A_Const?.val?.ival?.ival;if(l&&$t(l)&&m.length>0){let E=T(0);typeof E=="number"&&E>0&&(a={maxLen:E});}if(l&&Ut(l)&&m.length>=2){let E=T(0),g=T(1);typeof E=="number"&&typeof g=="number"&&E>0&&g>=0&&(u={precision:E,scale:g});}if(t.constraints){let E=Array.isArray(t.constraints)?t.constraints:[];n=E.some(g=>g.Constraint?.contype==="CONSTR_PRIMARY"),E.some(g=>g.Constraint?.contype==="CONSTR_IDENTITY")&&(r=true);}e.push(this.TypeName(t.typeName,s));}if(t.constraints){let f=Array.isArray(t.constraints)?t.constraints:[],m=f.map(E=>this.visit(E,s));e.push(...m.filter(Boolean));let T=f.some(E=>E.Constraint?.contype==="CONSTR_CHECK");r&&n&&!T&&e.push("AUTOINCREMENT");}if(i&&l){let f={isArray:p};a&&(f.lengthConstraint=a.maxLen),u&&(f.numericPrecision=u);let m=this.enums.get(l.toLowerCase());m&&(f.enumValues=m);let g=J({schema:"public",table:"",column:i,pgTypeName:l,nullable:true,defaultValue:null,defaultFn:null,isPrimaryKey:n,isUnique:false,isSerial:r},f).checkConstraint();g&&e.push(`CHECK (${g})`);}return e.join(" ")}Constraint(t,s){let e=t.contype;if(e==="CONSTR_IDENTITY"||e==="CONSTR_ATTR_DEFERRABLE"||e==="CONSTR_ATTR_NOT_DEFERRABLE"||e==="CONSTR_ATTR_DEFERRED"||e==="CONSTR_ATTR_IMMEDIATE")return "";if(e==="CONSTR_NULL")return "NULL";if(e==="CONSTR_NOTNULL")return "NOT NULL";if(e==="CONSTR_DEFAULT"&&t.raw_expr){let i=this.visit(t.raw_expr,s);return i.includes("(")&&!i.startsWith("(")?`DEFAULT (${i})`:`DEFAULT ${i}`}if(e==="CONSTR_CHECK"&&t.raw_expr){let i=[];t.conname&&i.push("CONSTRAINT",kt(t.conname)),i.push("CHECK");let r=this.visit(t.raw_expr,s);return i.push(`(${r})`),i.join(" ")}if(e==="CONSTR_PRIMARY")return t.keys&&t.keys.length>0?`PRIMARY KEY (${q(t.keys).map(r=>this.visit(r,s)).join(", ")})`:"PRIMARY KEY";if(e==="CONSTR_UNIQUE")return t.keys&&t.keys.length>0?`UNIQUE (${q(t.keys).map(r=>this.visit(r,s)).join(", ")})`:"UNIQUE";if(e==="CONSTR_FOREIGN")return super.Constraint(t,s).replace(/FOREIGN\s+KEY\s+REFERENCES/gi,"REFERENCES");if(e==="CONSTR_GENERATED"&&t.raw_expr)return `GENERATED ALWAYS AS (${this.visit(t.raw_expr,s)}) STORED`;if(e==="CONSTR_EXCLUSION")throw new R({Constraint:t},"EXCLUSION constraints are not supported in SQLite");return ""}FuncCall(t,s){let i=(t.funcname||[]).map(l=>l.String?.sval||l.String?.str).filter(Boolean);if(i.length===0)throw new Error("Function call has no name");let r=i[i.length-1].toLowerCase();if(r==="extract"&&t.args&&t.args.length>=2){let l=t.args[0];if((l?.A_Const?.sval?.sval||l?.String?.sval)==="epoch")return `strftime('%s', ${this.visit(t.args[1],s)})`}let a=(t.args??[]).map(l=>this.visit(l,s));if(t.agg_star)return `${r}(*)`;if(t.agg_distinct)return `${r}(DISTINCT ${a.join(", ")})`;let u=Le(r,this.functionResolution);if(u){if(u.sqliteExpr!==null){let l=u.sqliteExpr;return l.includes("(")?l:`${l}(${a.join(", ")})`}if(u.jsFn!==null){let l=Gt[r];if(l?.sqlite){let p=l.sqlite();return p.includes("(")?p:`${p}(${a.join(", ")})`}}}throw new R({FuncCall:t},`Function call "${r}" not supported`)}SQLValueFunction(t,s){switch(t.op){case "SVFOP_CURRENT_TIMESTAMP":return "datetime('now')";case "SVFOP_CURRENT_DATE":return "date('now')";case "SVFOP_CURRENT_TIME":return "time('now')";default:throw new R({SQLValueFunction:t},`SQLValueFunction "${t.op}" not supported`)}}ResTarget(t,s){if(t.indirection&&t.indirection.length>0)throw new R({ResTarget:t},"Indirections are not supported in SQLite");let e=[];return s.update&&t.name?(e.push(this.quoteIfNeeded(t.name)),e.push("="),t.val&&e.push(this.deparse(t.val,s))):s.insertColumns&&t.name?e.push(this.quoteIfNeeded(t.name)):(t.val&&e.push(this.deparse(t.val,s)),t.name&&e.push(this.Alias({aliasname:t.name},s))),e.join(" ")}A_Expr(t,s){if(["AEXPR_OP_ALL","AEXPR_OP_ANY"].includes(t.kind))throw new R({A_Expr:t},"ALL/ANY/SOME comparison operators are not supported. Use NOT EXISTS or IN instead");if(t.name&&t.name.length>0){if(t.name.length>1)throw new R({A_Expr:t},"Schema-qualified OPERATOR() syntax is not supported in SQLite");let e=t.name[0]?.String?.sval||t.name[0]?.String?.str;if(e){if(!t.lexpr||!t.rexpr)throw new R({A_Expr:t},"A_Expr missing left or right expression");if(!ms.includes(e.toUpperCase()))throw new R({A_Expr:t},`Operator "${e}" is not supported in SQLite`);if(e==="~~"||e==="~~*"){let i=this.visit(t.lexpr,s),r=this.visit(t.rexpr,s);return `${i} LIKE ${r}`}if(e==="!~~"||e==="!~~*"){let i=this.visit(t.lexpr,s),r=this.visit(t.rexpr,s);return `${i} NOT LIKE ${r}`}if(e==="~"||e==="~*"){let i=this.visit(t.lexpr,s),r=this.visit(t.rexpr,s);return `${i} GLOB ${r}`}}}return super.A_Expr(t,s)}IndexStmt(t,s){let e=["CREATE"];t.unique&&e.push("UNIQUE"),e.push("INDEX"),t.if_not_exists&&e.push("IF NOT EXISTS"),t.idxname&&e.push(kt(t.idxname)),e.push("ON"),t.relation&&e.push(this.RangeVar(t.relation,s));let i=(t.indexParams??[]).map(r=>"IndexElem"in r?this.IndexElem(r.IndexElem,s):this.visit(r,s)).filter(Boolean);return e.push(`(${i.join(", ")})`),e.join(" ")}IndexElem(t,s){let e=[];return t.name?e.push(kt(t.name)):t.expr&&e.push(`(${this.visit(t.expr,s)})`),t.ordering==="SORTBY_ASC"&&e.push("ASC"),t.ordering==="SORTBY_DESC"&&e.push("DESC"),t.nulls_ordering==="SORTBY_NULLS_FIRST"&&e.push("NULLS FIRST"),t.nulls_ordering==="SORTBY_NULLS_LAST"&&e.push("NULLS LAST"),e.join(" ")}TypeCast(t,s){if(!t.arg||!t.typeName)return super.TypeCast(t,s);if([...this.helper.walk(t)].filter(({node:n})=>"A_Star"in n).length>0)throw new R({TypeCast:t},"A.* in type casts are not supported in SQLite");if(t.typeName.arrayBounds&&t.typeName.arrayBounds.length>0){if("A_Const"in t.arg&&t.arg.A_Const.sval){let n=t.arg.A_Const.sval.sval;if(n.startsWith("{")&&n.endsWith("}")){let a=t.typeName.names?.map(f=>f.String?.sval).filter(Boolean)??[],u=a.length===2&&a[0]==="pg_catalog"?a[1]:a[0],p=["text","varchar","character varying","char","bpchar","name","uuid"].includes(u?.toLowerCase());try{let f=this.parsePgArrayLiteral(n,p);return `'${JSON.stringify(f).replace(/'/g,"''")}'`}catch{}}}return this.visit(t.arg,s)}let i=this.visit(t.arg,s),r=this.TypeName(t.typeName,s);return `CAST(${i} AS ${r})`}A_ArrayExpr(t,s){let e=q(t.elements),i=this.tryExtractStaticArray(e);return i!==void 0?`'${JSON.stringify(i).replace(/'/g,"''")}'`:`json_array(${e.map(n=>this.visit(n,s)).join(", ")})`}tryExtractStaticArray(t){let s=[];for(let e of t)if("A_ArrayExpr"in e){let i=q(e.A_ArrayExpr.elements),r=this.tryExtractStaticArray(i);if(r===void 0)return;s.push(r);}else if("A_Const"in e){let i=e.A_Const;if(i.isnull)s.push(null);else if(i.ival)s.push(i.ival.ival);else if(i.fval)s.push(parseFloat(i.fval.fval));else if(i.sval)s.push(i.sval.sval);else if("boolval"in i)s.push(i.boolval.boolval===true);else return}else return;return s}parsePgArrayLiteral(t,s){if(!t.startsWith("{")||!t.endsWith("}"))throw new Error("Not a PG array literal");let e=t.slice(1,-1);if(e.length===0)return [];let i=[],r=0;for(;r<e.length;)if(e[r]==="{"){let n=0,a=r;for(;a<e.length;){if(e[a]==="{")n++;else if(e[a]==="}"&&(n--,n===0))break;a++;}i.push(this.parsePgArrayLiteral(e.slice(r,a+1),s)),r=a+1,e[r]===","&&r++;}else if(e[r]==='"'){let n=r+1,a="";for(;n<e.length&&e[n]!=='"';)e[n]==="\\"&&n++,a+=e[n],n++;i.push(a),r=n+1,e[r]===","&&r++;}else {let n=r;for(;n<e.length&&e[n]!==","&&e[n]!=="}";)n++;if(n===r)throw new Error("Malformed PG array literal");let a=e.slice(r,n);if(a==="NULL")i.push(null);else if(s)i.push(a);else {let u=Number(a);i.push(isNaN(u)?a:u);}r=n,e[r]===","&&r++;}return i}BetweenExpr(t,s){return super.A_Expr(t,s)}AlterTableStmt(t,s){let e=t.cmds??[],i=["AT_EnableRowSecurity","AT_ForceRowSecurity"],r=e.filter(p=>"AlterTableCmd"in p&&!i.includes(p.AlterTableCmd.subtype));if(r.length===0)return "";if(!["OBJECT_TABLE","OBJECT_INDEX","OBJECT_VIEW"].includes(t.objtype))throw new R({AlterTableStmt:t},`AlterTableStmt with objtype ${t.objtype} is not supported`);let n=["AT_AddColumn","AT_DropColumn"],a=["AT_AlterColumnType","AT_SetNotNull","AT_DropNotNull","AT_ColumnDefault","AT_AddConstraint","AT_DropConstraint"],u=[],l=[];for(let p of r){let f=p.AlterTableCmd.subtype;if(n.includes(f)){let m={...t,cmds:[p]};u.push(super.AlterTableStmt(m,s));}else if(a.includes(f))l.push(p.AlterTableCmd);else throw new R({AlterTableStmt:t},`AlterTableCmd with subtype ${f} is not supported in SQLite`)}if(l.length>0){let p=this.getRelationName(t.relation);u.push(this.generateRebuildSql(p,l));}return u.join(`;
|
|
46
|
-
`)}AlterTableCmd(t,s){if(!["AT_AddColumn","AT_DropColumn"].includes(t.subtype))throw new R({AlterTableCmd:t},`AlterTableCmd with subtype ${t.subtype} is not supported`);return t.subtype==="AT_DropColumn"&&t.behavior?super.AlterTableCmd({...t,behavior:void 0},s):super.AlterTableCmd(t,s)}DefineStmt(t,s){if(t.kind==="OBJECT_AGGREGATE")throw new Error("AGGREGATE definitions are not supported in SQLite");return super.DefineStmt(t,s)}InsertStmt(t,s){if("selectStmt"in t){let i=(t.selectStmt?.SelectStmt?.valuesLists??[]).map(r=>r.List?.items?.map(n=>"SetToDefault"in n));if(i.length===1&&i[0]?.every(r=>r===true))return super.InsertStmt({...t,selectStmt:void 0,cols:void 0},s);if(i.some(r=>r.some(n=>n===true)))throw new R({InsertStmt:t},"Insert with partial DEFAULT values is not supported")}return super.InsertStmt(t,s)}SelectStmt(t,s){if(this.helper.hasUnsafeStar())throw new R({SelectStmt:t},"Row-wise comparison using .* is not supported in SQLite. Expand to explicit per-column comparisons instead.");if(t.intoClause)throw new R({SelectStmt:t},"SELECT ... INTO clause is not supported in SQLite");if(t.distinctClause){let i=q(t.distinctClause);if(i.length>0&&Object.keys(i[0]).length>0)throw new R({SelectStmt:t},"DISTINCT ON clause is not supported in SQLite. Use window functions instead.")}if(t.limitOffset&&!t.limitCount)throw new R({SelectStmt:t},"OFFSET without LIMIT is not supported in SQLite");let e=super.SelectStmt(t,s);if(/^SELECT\s+FROM/.test(e))throw new R({SelectStmt:t},"SELECT without a target list is not supported in SQLite");return e}JoinExpr(t,s){return t.alias&&this.Alias(t.alias,s),super.JoinExpr(t,s)}A_Const(t,s){if(t.bsval!==void 0)throw new R({A_Const:t},"Bit string literals are not supported in SQLite");let e=super.A_Const(t,s);return typeof e=="string"&&e.startsWith("E'")?e.substring(2,e.length-1):e}SortBy(t,s){if(t.sortby_dir==="SORTBY_USING"){let e=q(t.useOp),i=e[0]?.String?.sval;if(e.length>1||!["<",">"].includes(i??""))throw new R({SortBy:t},"Only `USING <` or `USING >` are supported.");t.sortby_dir=i==="<"?"SORTBY_DESC":"SORTBY_ASC",t.useOp=void 0;}return super.SortBy(t,s)}RangeSubselect(t,s){if(t.lateral)throw new R({RangeSubselect:t},"LATERAL subqueries are not supported in SQLite");return super.RangeSubselect(t,s)}SubLink(t,s){if(["ANY_SUBLINK","ALL_SUBLINK"].includes(t.subLinkType))throw new R({SubLink:t},"ANY/ALL/SOME subqueries are not supported. Use NOT EXISTS or IN instead");if(t.subLinkType==="ARRAY_SUBLINK")throw new R({SubLink:t},"ARRAY subqueries are not supported in SQLite");return super.SubLink(t,s)}LockingClause(t,s){return ""}UpdateStmt(t,s){if(s.parentNodeTypes.includes("SelectStmt"))throw new R({UpdateStmt:t},"UPDATE ... FROM (SELECT ...) is not supported in SQLite");return super.UpdateStmt(t,s)}Alias(t,s){if(t.colnames&&t.colnames.length>0)throw new R({Alias:t},"Aliasing with column names is not supported in SQLite");return `AS "${t.aliasname}"`}CreateFunctionStmt(t,s){let e=t.options??[],i=t.returnType?.names?.map(l=>l.String?.sval).filter(Boolean).join("."),r=e.find(l=>l.DefElem?.defname==="language")?.DefElem?.arg?.String?.sval;if(i!=="trigger"||r!=="plpgsql")throw new R({CreateFunctionStmt:t},"Only trigger functions with LANGUAGE plpgsql are supported");let n=t.funcname?.map(l=>l.String?.sval).filter(Boolean).pop();if(!n)throw new Error("Function has no name");let a=e.find(l=>l.DefElem?.defname==="as")?.DefElem?.arg?.List?.items?.[0]?.String?.sval;if(!a)throw new Error("Function has no body");let u=this.plpgsqlParser.parse(a);return this.triggerFunctions.set(n,u),""}CreateTrigStmt(t,s){let e=t.trigname,i=this.RangeVar(t.relation,s),r=t.funcname?.map(f=>f.String?.sval).filter(Boolean).pop();if(!r)throw new Error(`Trigger "${e}" has no function reference`);let n=this.triggerFunctions.get(r);if(!n)throw new R({CreateTrigStmt:t},`Trigger "${e}" references unknown function "${r}"`);let a=t.timing===2?"BEFORE":t.timing===64?"INSTEAD OF":"AFTER",u=[];if(t.events&4&&u.push("INSERT"),t.events&8&&u.push("DELETE"),t.events&16)if(t.columns?.length){let f=t.columns.map(m=>m.String?.sval).filter(Boolean);u.push(`UPDATE OF ${f.join(", ")}`);}else u.push("UPDATE");let l=u.join(" OR "),p=this.buildTriggerBody(n,i,s);return [`CREATE TRIGGER ${e}`,`${a} ${l} ON ${i}`,"FOR EACH ROW","BEGIN",...p.map(f=>` ${f};`),"END"].join(`
|
|
47
|
-
`)}buildTriggerBody(t,s,e){let i=[],r=[];for(let n of t.statements)if(n.type!=="return"){if(n.type==="assignment"){r.push(n);continue}r.length>0&&(i.push(this.buildAssignmentUpdate(r,s,e)),r.length=0),n.type==="dml"&&i.push(this.translateDml(n.sql,e));}return r.length>0&&i.push(this.buildAssignmentUpdate(r,s,e)),i}buildAssignmentUpdate(t,s,e){let i=t.map(r=>{let n=this.translateExpression(r.expression,e);return `${r.column} = ${n}`});return `UPDATE ${s} SET ${i.join(", ")} WHERE rowid = NEW.rowid`}translateExpression(t,s){try{let e=`SELECT ${t}`,i=t.trim().toLowerCase();return i==="now()"||i==="current_timestamp"?"datetime('now')":t}catch{return t}}translateDml(t,s){return t.replace(/\bnow\(\)/gi,"datetime('now')").replace(/\bcurrent_timestamp\b/gi,"datetime('now')").replace(/\bgen_random_uuid\(\)/gi,this.uuidExpression()).replace(/\buuid_generate_v4\(\)/gi,this.uuidExpression())}uuidExpression(){return "lower(hex(randomblob(4))) || '-' || lower(hex(randomblob(2))) || '-4' || substr(lower(hex(randomblob(2))),2) || '-' || substr('89ab',abs(random()) % 4 + 1, 1) || substr(lower(hex(randomblob(2))),2) || '-' || lower(hex(randomblob(6)))"}NullTest(t,s){if(t.arg?.ColumnRef?.fields?.length>1)throw new R({NullTest:t},"row-level NULL tests are not supported in SQLite");return super.NullTest(t,s)}RenameStmt(t,s){if(!t.renameType)throw new Error("RenameStmt requires renameType");let e=["OBJECT_TABLE","OBJECT_VIEW","OBJECT_COLUMN"];if(t.renameType==="OBJECT_COLUMN"&&(t.relationType==="OBJECT_FOREIGN_TABLE"||t.relationType==="OBJECT_VIEW"))throw new R({RenameStmt:t},`RenameStmt with relationType ${t.relationType} is not supported`);if(!e.includes(t.renameType))throw new R({RenameStmt:t},`RenameStmt with renameType ${t.renameType} is not supported in SQLite`);return super.RenameStmt(t,s)}DropStmt(t,s){let e=t.removeType;if(["OBJECT_TABLE","OBJECT_VIEW","OBJECT_INDEX","OBJECT_TRIGGER"].includes(e))return super.DropStmt(t,s);if(["OBJECT_POLICY"].includes(e))return "";throw new R({DropStmt:t},`DROP with removeType ${e} is not supported in SQLite`)}generateRebuildSql(t,s){if(!this.introspection)throw new Error(`ALTER TABLE on "${t}" requires 12-step rebuild but no introspection was provided. Pass introspection in DeparseOptions to enable column type changes, NOT NULL, defaults, and constraint modifications.`);let e=this.buildDesiredSchema(this.introspection,t,s),i=new X,r=new K,n=i.diff(this.introspection,e);return n.has_changes?r.plan(n,this.introspection,e).steps.filter(u=>!["disable_foreign_keys","begin_transaction","commit_transaction","enable_foreign_keys"].includes(u.type)).map(u=>u.sql).join(`
|
|
48
|
-
`):""}buildDesiredSchema(t,s,e){let i={...t,tables:t.tables.map(r=>({...r})),columns:t.columns.map(r=>({...r})),indexes:t.indexes.map(r=>({...r})),foreign_keys:t.foreign_keys.map(r=>({...r})),primary_keys:t.primary_keys.map(r=>({...r})),views:t.views.map(r=>({...r})),triggers:(t.triggers??[]).map(r=>({...r})),check_constraints:t.check_constraints.map(r=>({...r})),unique_constraints:(t.unique_constraints??[]).map(r=>({...r})),comments:(t.comments??[]).map(r=>({...r})),custom_types:t.custom_types.map(r=>({...r}))};for(let r of e){let n=i.columns.findIndex(a=>a.table===s&&a.name===r.name);switch(r.subtype){case "AT_AlterColumnType":{if(n===-1)break;let a=this.extractTypeName(r);a&&(i.columns[n]={...i.columns[n],type:a.toLowerCase()});break}case "AT_SetNotNull":{if(n===-1)break;i.columns[n]={...i.columns[n],nullable:false};break}case "AT_DropNotNull":{if(n===-1)break;i.columns[n]={...i.columns[n],nullable:true};break}case "AT_ColumnDefault":{if(n===-1)break;if(r.def){let a=this.extractDefaultValue(r);i.columns[n]={...i.columns[n],default_value:a};}else i.columns[n]={...i.columns[n],default_value:null};break}case "AT_AddConstraint":case "AT_DropConstraint":{let a=i.tables.findIndex(u=>u.name===s);a!==-1&&(i.tables[a]={...i.tables[a],sql:i.tables[a].sql+" /* modified */"});break}}}return this.rebuildTableSql(i,s),i}rebuildTableSql(t,s){let e=t.tables.findIndex(f=>f.name===s);if(e===-1)return;let i=t.columns.filter(f=>f.table===s),r=t.foreign_keys.filter(f=>f.table===s),n=t.check_constraints.filter(f=>f.table===s),a=i.map(f=>{let m=`${N(f.name)} ${f.type||"TEXT"}`;return f.is_primary_key&&(m+=" PRIMARY KEY"),f.nullable||(m+=" NOT NULL"),f.default_value!=null&&(m+=` DEFAULT ${f.default_value}`),m}),u=r.map(f=>`FOREIGN KEY (${N(f.column)}) REFERENCES ${N(f.ref_table)}(${N(f.ref_column)}) ON UPDATE ${f.on_update} ON DELETE ${f.on_delete}`),l=n.map(f=>`CHECK (${f.expression})`),p=[...a,...u,...l];t.tables[e]={...t.tables[e],sql:`CREATE TABLE ${N(s)} (${p.join(", ")}) STRICT`};}extractTypeName(t){let s=t.def?.ColumnDef;return s?.typeName?.TypeName?(s.typeName.TypeName.names??[]).map(i=>i.String?.sval).filter(Boolean).pop()??null:null}extractDefaultValue(t){return t.def?"Integer"in t.def?String(t.def.Integer.ival):"Float"in t.def?t.def.Float.fval:"String"in t.def?`'${t.def.String.sval}'`:null:null}};});var w,x,we=C(()=>{V();et();w=class extends R{constructor(t,s){super(t,`Unsupported expression: ${s}`);}},x=class{deparse(t){if("A_Const"in t){let i=t.A_Const;if(i.boolval!==void 0)return i.boolval.boolval?{}:{$always:false}}let s=Object.keys(t)[0],e=this[s];if(!e)throw new w({[s]:t},`Unsupported expression: ${s}`);return e.call(this,t[s])}deparseValue(t){if("A_Const"in t)return this.A_Const(t.A_Const);if("ColumnRef"in t)return this.ColumnRef(t.ColumnRef);if("FuncCall"in t)return this.FuncCall(t.FuncCall);if("SubLink"in t)return this.SubLink(t.SubLink);if("TypeCast"in t)return this.TypeCast(t.TypeCast);if("A_Expr"in t){let e=this.isJwtAccessor(t.A_Expr);return e||this.A_Expr(t.A_Expr)}if("BoolExpr"in t)return this.BoolExpr(t.BoolExpr);let s=Object.keys(t)[0];throw new w({[s]:t},`deparseValue: ${s}`)}A_Expr(t){if(t.kind==="AEXPR_OP"){let s=t.name?.[0],e=s?lt(s):void 0;if(!e)throw new w({A_Expr:t},"A_Expr missing operator");let i=this.isJwtAccessor(t);if(i)return {[i]:{}};let r=t.lexpr?this.deparseValue(t.lexpr):void 0,n=t.rexpr?this.deparseValue(t.rexpr):void 0,a=this.mapOperator(e);if(!a)throw new w({A_Expr:t},`Unsupported operator: ${e}`);let u=t.rexpr!=null&&"ColumnRef"in t.rexpr;if(typeof r=="string"&&r.startsWith("{{")&&u)return {[n]:{[a]:r}};let l=u&&typeof n=="string"?{$ref:n}:n;return {[r]:{[a]:l}}}if(t.kind==="AEXPR_LIKE"||t.kind==="AEXPR_ILIKE"){let s=t.lexpr?this.deparseValue(t.lexpr):void 0,e=t.rexpr?this.deparseValue(t.rexpr):void 0,r=(t.name?.[0]?lt(t.name[0]):"~~")==="!~~"?"$notLike":"$like";return {[s]:{[r]:e}}}if(t.kind==="AEXPR_IN"){let s=t.lexpr?this.deparseValue(t.lexpr):void 0,e=t.rexpr&&"List"in t.rexpr&&t.rexpr.List.items?t.rexpr.List.items.map(i=>this.deparseValue(i)):[];return {[s]:{$in:e}}}throw new w({A_Expr:t},`A_Expr kind: ${t.kind}`)}BoolExpr(t){let s=t.args??[];switch(t.boolop){case "AND_EXPR":return {$and:s.map(e=>this.deparse(e))};case "OR_EXPR":return {$or:s.map(e=>this.deparse(e))};case "NOT_EXPR":return {$not:this.deparse(s[0])};default:throw new w({BoolExpr:t},`BoolExpr op: ${t.boolop}`)}}NullTest(t){let s=t.arg?this.deparseValue(t.arg):void 0;return t.nulltesttype==="IS_NULL"?{[s]:{$is:null}}:{[s]:{$isNot:null}}}SubLink(t){if(t.subLinkType==="ANY_SUBLINK"){let s=t.testexpr?this.deparseValue(t.testexpr):void 0,e=t.subselect?this.SelectStmt(t.subselect.SelectStmt):void 0;return {[s]:{$in:e}}}if(t.subLinkType==="EXISTS_SUBLINK")return {$exists:t.subselect?this.SelectStmt(t.subselect.SelectStmt):void 0};if(t.subLinkType==="EXPR_SUBLINK"){let s=t.subselect?t.subselect.SelectStmt:void 0;if(s?.fromClause?.length)return this.SelectStmt(s);if(s?.targetList?.[0]){let e=s.targetList[0],i="ResTarget"in e?e.ResTarget:void 0;if(i?.val){let r=this.deparseValue(i.val);return r}}}throw new w({SubLink:t},`SubLink type: ${t.subLinkType}`)}SelectStmt(t){let{from:s,schema:e,join:i}=this.deparseFromClause(t.fromClause??[]),r=[];for(let m of t.targetList??[]){let T="ResTarget"in m?m.ResTarget:void 0;if(T?.val){let E=this.deparseValue(T.val);Array.isArray(E)?r.push(...E.map(String)):E!=null&&E!==""&&r.push(String(E));}}let n=t.whereClause?this.deparse(t.whereClause):void 0,a=this.deparseSortClause(t.sortClause),u=this.deparseLimit(t.limitCount),l=this.deparseLimit(t.limitOffset),p=this.deparseGroupClause(t.groupClause),f={type:"query",from:s,select:r};return e&&(f.schema=e),Object.keys(i).length>0&&(f.join=i),n&&(f.where=n),a.length>0&&(f.order=a),u!==void 0&&(f.limit=u),l!==void 0&&(f.offset=l),p.length>0&&(f.group=p),f}FuncCall(t){let s=this.isAuthFunc(t.funcname??[]);if(s)return s;throw new w({FuncCall:t},`FuncCall: ${M(t.funcname??[]).join(".")}`)}ColumnRef(t){let s=M(t.fields??[]);return s.length===1?s[0]:s.join(".")}A_Const(t){if(t.boolval!==void 0)return t.boolval.boolval;if(t.ival!==void 0)return t.ival.ival??0;if(t.fval!==void 0)return parseFloat(t.fval.fval??"0");if(t.sval!==void 0)return t.sval.sval??"";if(t.isnull)return null;throw new w({A_Const:t},"A_Const: unknown variant")}TypeCast(t){if(!t.arg)throw new w({TypeCast:t},"TypeCast: missing arg");return this.deparseValue(t.arg)}BooleanTest(t){let s=t.arg?this.deparseValue(t.arg):void 0;return t.booltesttype==="IS_TRUE"?{[s]:{$eq:true}}:{[s]:{$eq:false}}}deparseFromClause(t){let s={};if(t.length===0)return {from:"",join:s};let e=t[0];if("RangeVar"in e){let i=e.RangeVar;return {from:i.relname??"",schema:i.schemaname,join:s}}if("JoinExpr"in e){let{from:i,schema:r}=this.walkJoinExpr(e.JoinExpr,s);return {from:i,schema:r,join:s}}return {from:"",join:s}}walkJoinExpr(t,s){let e={from:""};if(t.larg)if("RangeVar"in t.larg){let i=t.larg.RangeVar;e={from:i.relname??"",schema:i.schemaname};}else "JoinExpr"in t.larg&&(e=this.walkJoinExpr(t.larg.JoinExpr,s));if(t.rarg&&"RangeVar"in t.rarg){let i=t.rarg.RangeVar,r=i.relname??"",n=i.alias?.aliasname??r,a=t.jointype==="JOIN_LEFT"?"left":"inner",u={from:r,type:a};t.quals&&(u.on=this.deparse(t.quals));let l=n;if(l in s){let p=2;for(;`${l}_${p}`in s;)p++;l=`${l}_${p}`;}s[l]=u;}return e}deparseSortClause(t){if(!t)return [];let s=[];for(let e of t){if(!("SortBy"in e))continue;let i=e.SortBy;if(!i.node)continue;let r=String(this.deparseValue(i.node)),n=i.sortby_dir==="SORTBY_DESC"?"desc":"asc",a={column:r,direction:n};i.sortby_nulls==="SORTBY_NULLS_FIRST"?a.nullsFirst=true:i.sortby_nulls==="SORTBY_NULLS_LAST"&&(a.nullsFirst=false),s.push(a);}return s}deparseLimit(t){if(!t)return;let s=this.deparseValue(t);return typeof s=="number"?s:Number(s)}deparseGroupClause(t){return t?t.map(s=>String(this.deparseValue(s))):[]}isAuthFunc(t){let s=M(t);if(s.length===2&&s[0]==="auth"){if(s[1]==="uid")return "{{auth.uid}}";if(s[1]==="jwt")return "{{auth.jwt}}";if(s[1]==="role")return "{{auth.role}}";throw new Error(`Unsupported auth function: "${s.slice(1).join(".")}"`)}return null}isJwtAccessor(t){if(t.kind!=="AEXPR_OP")return null;let s=t.name?.[0]?lt(t.name[0]):void 0;if(s!=="->"&&s!=="->>")return null;let e=t.rexpr&&"A_Const"in t.rexpr?t.rexpr.A_Const.sval?.sval:void 0;if(e===void 0)return null;if(t.lexpr&&"FuncCall"in t.lexpr)return this.isAuthFunc(t.lexpr.FuncCall.funcname??[])==="{{auth.jwt}}"?`{{auth.jwt.${e}}}`:null;if(t.lexpr&&"A_Expr"in t.lexpr){let i=this.isJwtAccessor(t.lexpr.A_Expr);if(i)return `${i.slice(0,-2)}.${e}}}`}return null}mapOperator(t){switch(t){case "=":return "$eq";case "<>":case "!=":return "$neq";case ">":return "$gt";case ">=":return "$gte";case "<":return "$lt";case "<=":return "$lte";case "~~":return "$like";case "!~~":return "$notLike";default:return}}};});var Ot,Ls=C(()=>{Ot=class{table;schema;fields;constructor(t,s="public",e=new Map){this.table=t,this.schema=s,this.fields=e;}get(t){return this.fields.get(t)}has(t){return this.fields.has(t)}set(t,s){this.fields.set(t,s);}columns(){return Array.from(this.fields.keys())}all(){return Array.from(this.fields.values())}serializeRow(t){let s={};for(let[e,i]of Object.entries(t)){let r=this.fields.get(e);s[e]=r?r.serialize(i):i;}return s}deserializeRow(t){let s={};for(let[e,i]of Object.entries(t)){let r=this.fields.get(e);s[e]=r?r.deserialize(i):i;}return s}applyDefaults(t){let s={...t};for(let[e,i]of this.fields)!(e in s)&&i.context.defaultFn&&(s[e]=i.context.defaultFn());return s}};});var _s=C(()=>{k();ce();Vt();fe();he();v();me();Ee();ge();Te();Se();Ce();Ae();Ne();Re();Oe();ye();be();Ie();_e();Ls();});function vs(o){let t=new Map;for(let s of o.stmts??[]){if(!s.stmt||!("CreateEnumStmt"in s.stmt))continue;let e=s.stmt.CreateEnumStmt,i=M(e.typeName??[]).join(".");if(!i||!e.vals)continue;let r=M(e.vals);t.set(i.toLowerCase(),r);}return t}function ds(o){let t=new Map;for(let s of o.stmts??[]){if(!s.stmt||!("VariableSetStmt"in s.stmt))continue;let e=s.stmt.VariableSetStmt,i=e.name,r=hs(e.args?.[0]??{});t.set(i,{value:r,local:e.is_local});}return t}function Ds(o){let t=new x,s=new Set,e=[];for(let i of o.stmts??[])if(i.stmt){if("CreatePolicyStmt"in i.stmt){let r=i.stmt.CreatePolicyStmt,n=r.table?.relname??"",a=r.table?.schemaname,u={select:"SELECT",insert:"INSERT",update:"UPDATE",delete:"DELETE"},l=r.cmd_name?u[r.cmd_name]??"ALL":"ALL",p=r.permissive===true,f=[],m=false;for(let A of r.roles??[])if("RoleSpec"in A){let S=A.RoleSpec;S.roletype==="ROLESPEC_PUBLIC"?S.location===-1&&(m=true):S.roletype==="ROLESPEC_CSTRING"&&S.rolename&&f.push(S.rolename);}if(m){let A=a?`${a}.${n}`:n,S=r.policy_name??"",b=`${A}::${S}`;ws.has(b)||(ws.add(b),console.warn(`[supalite] policy "${S}" on "${A}" has no TO clause \u2014 applies to all roles (PUBLIC). For clarity, prefer an explicit \`TO <role>\` clause (e.g. \`TO authenticated\`).`));}let T=r.qual?t.deparse(r.qual):void 0,E=r.with_check?t.deparse(r.with_check):void 0,g=new $({name:r.policy_name??"",table:n,schema:a,command:l,permissive:p,roles:f,using:T,withCheck:E});e.push(g);}if("AlterTableStmt"in i.stmt){let r=i.stmt.AlterTableStmt;if((r.cmds??[]).some(u=>"AlterTableCmd"in u&&(u.AlterTableCmd.subtype==="AT_EnableRowSecurity"||u.AlterTableCmd.subtype==="AT_ForceRowSecurity"))){let u=r.relation?.relname??"";s.add(u);}}}return {policies:e,tables:s}}function Ps(o,t){let s=new Map;for(let e of o.stmts??[]){if(!e.stmt||!("CreateStmt"in e.stmt))continue;let i=e.stmt.CreateStmt,r=i.relation?.relname??"",n=i.relation?.schemaname??"public";if(!r)continue;let a=new Ot(r,n);for(let u of i.tableElts??[]){if(!("ColumnDef"in u))continue;let l=u.ColumnDef,p=l.colname;if(!p)continue;let f=l.typeName?.names?.map(O=>O.String?.sval||O.String?.str).filter(Boolean),m=f&&(f.length===2&&f[0]==="pg_catalog"?f[1]:f[0]);if(!m)continue;let T=!!l.typeName?.arrayBounds?.length,E=Array.isArray(l.typeName?.typmods)?l.typeName.typmods:[],g=O=>E[O]?.A_Const?.ival?.ival??E[O]?.A_Const?.val?.ival?.ival,A={isArray:T};if($t(m)&&E.length>0){let O=g(0);typeof O=="number"&&O>0&&(A.lengthConstraint=O);}if(Ut(m)&&E.length>=2){let O=g(0),H=g(1);typeof O=="number"&&typeof H=="number"&&O>0&&H>=0&&(A.numericPrecision={precision:O,scale:H});}let S=t.get(m.toLowerCase());S&&(A.enumValues=S);let b=Array.isArray(l.constraints)?l.constraints:[],_=b.some(O=>O.Constraint?.contype==="CONSTR_PRIMARY"),y=jt(m)||b.some(O=>O.Constraint?.contype==="CONSTR_IDENTITY"),d=b.some(O=>O.Constraint?.contype==="CONSTR_NOTNULL"),D=b.find(O=>O.Constraint?.contype==="CONSTR_UNIQUE"),F=b.find(O=>O.Constraint?.contype==="CONSTR_GENERATED"),ke=b.find(O=>O.Constraint?.contype==="CONSTR_FOREIGN"),je=b.find(O=>O.Constraint?.contype==="CONSTR_CHECK"),$e;if(ke){let O=ke.Constraint,H=O.pktable?.relname,Gs=O.pktable?.schemaname,Ue=O.pk_attrs?.[0]?.String?.sval;H&&Ue&&($e={refSchema:Gs,refTable:H,refColumn:Ue,constraintName:O.conname||void 0});}let Vs={schema:n,table:r,column:p,pgTypeName:m,nullable:!d&&!_,defaultValue:null,defaultFn:null,isPrimaryKey:_,isUnique:!!D,isSerial:y,isGenerated:!!F,fkRef:$e,hasCheck:!!je,checkConstraintName:je?.Constraint?.conname||void 0,uniqueConstraintName:D?.Constraint?.conname||void 0};a.set(p,J(Vs,A));}s.set(`${n}.${r}`,a);}return s}function ks(o){let t=[];for(let s of o.stmts??[]){if(!s.stmt||!("CreateStmt"in s.stmt))continue;let e=s.stmt.CreateStmt,i=e.relation?.relname??"",r=e.relation?.schemaname??"public";if(i)for(let n of e.tableElts??[]){if("ColumnDef"in n)continue;let a=n;if(!a.Constraint)continue;let u=a.Constraint,l=u.contype;if(l==="CONSTR_UNIQUE"){let p=(u.keys??[]).map(f=>f.String?.sval??f.String?.str).filter(Boolean);if(p.length===0)continue;t.push({schema:r,table:i,kind:"unique",name:u.conname||void 0,columns:p});}else if(l==="CONSTR_CHECK")t.push({schema:r,table:i,kind:"check",name:u.conname||void 0,columns:[]});else if(l==="CONSTR_FOREIGN"){let p=(u.fk_attrs??[]).map(T=>T.String?.sval??T.String?.str).filter(Boolean),f=(u.pk_attrs??[]).map(T=>T.String?.sval??T.String?.str).filter(Boolean),m=u.pktable?.relname;if(!m)continue;t.push({schema:r,table:i,kind:"foreign_key",name:u.conname||void 0,columns:p,refSchema:u.pktable?.schemaname,refTable:m,refColumns:f});}}}return t}function js(o){let t=[];for(let s of o.stmts??[]){if(!s.stmt||!("CommentStmt"in s.stmt))continue;let e=s.stmt.CommentStmt,i=e.comment??"";if(!i)continue;let r=e.objtype,n=(e.object?.List?.items??e.object?.items??[]).map(a=>a.String?.sval??a.String?.str).filter(Boolean);if(n.length!==0){if(r==="OBJECT_TABLE"||r==="OBJECT_VIEW"){let[a,u]=n.length>=2?n:["public",n[0]];t.push({schema:a,table:u,text:i});}else if(r==="OBJECT_COLUMN"){let a="public",u,l;n.length>=3?[a,u,l]=n:[u,l]=n,t.push({schema:a,table:u,column:l,text:i});}}}return t}var ws,$s=C(()=>{we();V();Lt();_s();et();ws=new Set;});var Fs={};Xs(Fs,{Policy:()=>$,deparseDdl:()=>ve,deparseExpression:()=>Zi,deparsePostgresDdl:()=>zi,deparseSelect:()=>tr,parse:()=>Q,parseExpression:()=>Us,translatePostgresDdl:()=>Qi});async function Qi(o,t={}){let s=await Q(o);return ve(s,t).ddl}async function zi(o,t={}){let s=await Q(o);return {ast:s,...ve(s,t)}}function ve(o,t={}){let s=vs(o),e=Ps(o,s),i=ds(o),r=ks(o),n=js(o),a=new Wt(o,{...t,enums:s}),{policies:u,tables:l}=Ds(o);if(t.strict)for(let p of u){if(!e.get(`${p.data.schema??"public"}.${p.data.table}`))throw new Error(`Policy "${p.data.name}" references unknown table "${p.data.table}"`);if(!l.has(p.data.table))throw new Error(`RLS is not enabled on table "${p.data.table}"`)}return {ddl:a.deparseQuery(),enums:s,rls:{tables:l,policies:u},schema:e,vars:i,tableConstraints:r,comments:n}}async function Us(o){let s=(await Q(`SELECT 1 WHERE ${o}`)).stmts?.[0]?.stmt;if(!s||!("SelectStmt"in s))throw new Error("expected SelectStmt");let e=s.SelectStmt.whereClause;if(!e)throw new Error("no whereClause");return e}async function Zi(o){let t=await Us(o);return new x().deparse(t)}async function tr(o){let s=(await Q(o)).stmts?.[0]?.stmt;if(!s||!("SelectStmt"in s))throw new Error("expected SelectStmt");return new x().deparse(s)}var Bs=C(()=>{rs();Is();we();$s();Lt();});zt();var Zs=(o={})=>{let t=(s="m")=>[...o.exclude_tables??[],"sqlite_%"].map(e=>e.includes("%")?`${s}.name NOT LIKE '${e}'`:`${s}.name != '${e}'`).join(" AND ");return `WITH table_info AS (SELECT
|
|
12
|
+
var dn=Object.defineProperty;var g=(i,e)=>()=>(i&&(e=i(i=0)),e);var hn=(i,e)=>{for(var t in e)dn(i,t,{get:e[t],enumerable:true});};var bt=g(()=>{});var Tt=g(()=>{});function gn(i){return Object.prototype.toString.call(i)==="[object Object]"}function yn(i){return i!==null&&typeof i=="object"}function Z(i,e,t=void 0){let n=typeof e=="string"?e.split(/[.[\]"]+/).filter(r=>r):e;if(n.length===0)return i;try{let[r,...s]=n;return !r||!(r in i)?t:Z(i[r],s,t)}catch{if(typeof t<"u")return t;throw new Error(`Invalid path: ${n.join(".")}`)}}function Fe(i,...e){for(let t of e)for(let[n,r]of Object.entries(t))r!==void 0&&(!gn(r)&&!Array.isArray(r)||Array.isArray(r)&&!Array.isArray(i[n])?i[n]=r:yn(i[n])?Fe(i[n],r):i[n]=r);return i}var ye=g(()=>{});var wt=g(()=>{});function Ct(i,e){if(!i)throw new Error(e)}var xt=g(()=>{});function qe(i){return (i??"").trim().toLowerCase()}function Ue(i){return (i??"").replace(/\s+/g," ").replace(/"/g,"").trim().toLowerCase()}function je(i){if(i==null)return null;let e=i.trim();for(;e.startsWith("(")&&e.endsWith(")");)e=e.slice(1,-1).trim();return (e.startsWith("'")&&e.endsWith("'")||e.startsWith('"')&&e.endsWith('"'))&&(e=e.slice(1,-1)),e}var Be=g(()=>{});function h(i,e='"'){return `${e}${i}${e}`}function _t(i,e,t){if(e instanceof RegExp)return e.test(i);if(typeof e=="string")switch(!t&&e.startsWith("/")&&(t="regex"),t){case "regex":return new RegExp(e).test(i);case "sql":return new RegExp(e.replace("%",".*").replace("_",".")).test(i);case "wildcard":return new RegExp(e.replace("*",".*")).test(i);default:return i.includes(e)}return false}var Se=g(()=>{});var Nt=g(()=>{});var Rt=g(()=>{});var Me=g(()=>{bt();Tt();ye();wt();xt();Be();Se();Nt();Rt();});var L,be=g(()=>{L=class i{constructor(e){this.data=e;}appliesTo(e){return this.data.command==="ALL"||this.data.command===e}appliesToRole(e){return this.data.roles.length===0||this.data.roles.includes(e)}toJSON(){return this.data}static fromJSON(e){return new i(e)}};});var G,Ke=g(()=>{Be();G=class{makeIndexKey(e){return `${e.table}:${e.name}:${e.unique}:${e.columns.join(",")}`}makeForeignKeyKey(e){return `${e.table}:${e.column}:${e.ref_table}:${e.ref_column}`}diff(e,t){let n=[],r=[],s=[],o=[],a=new Set(e.tables.map(m=>m.name)),l=new Set(t.tables.map(m=>m.name));for(let m of t.tables)a.has(m.name)||n.push({type:"added",name:m.name,sql:m.sql});for(let m of e.tables)l.has(m.name)||n.push({type:"removed",name:m.name});for(let m of e.tables){let T=t.tables.find(N=>N.name===m.name);if(!T)continue;let f=Ue(m.sql),C=Ue(T.sql);f!==C&&n.push({type:"modified",name:m.name,sql:T.sql});}let u=e.tables.filter(m=>l.has(m.name));for(let m of u){let T=e.columns.filter(w=>w.table===m.name),f=t.columns.filter(w=>w.table===m.name),C=new Map(T.map(w=>[w.name,w])),N=new Map(f.map(w=>[w.name,w]));for(let[w,k]of N)C.has(w)||r.push({type:"added",table:m.name,name:w,column:k});for(let[w]of C)N.has(w)||r.push({type:"removed",table:m.name,name:w});for(let[w,k]of C){let I=N.get(w);if(!I)continue;let P={};qe(k.type)!==qe(I.type)&&(P.type={from:k.type,to:I.type}),k.nullable!==I.nullable&&(P.nullable={from:k.nullable,to:I.nullable}),je(k.default_value)!==je(I.default_value)&&(P.default_value={from:k.default_value,to:I.default_value}),Object.keys(P).length>0&&r.push({type:"modified",table:m.name,name:w,changes:P});}}let p=new Map(e.indexes.map(m=>[this.makeIndexKey(m),m])),c=new Map(t.indexes.map(m=>[this.makeIndexKey(m),m]));for(let[m,T]of c)p.has(m)||s.push({type:"added",...T});for(let[m,T]of p)c.has(m)||s.push({type:"removed",...T});let d=new Map(e.foreign_keys.map(m=>[this.makeForeignKeyKey(m),m])),E=new Map(t.foreign_keys.map(m=>[this.makeForeignKeyKey(m),m]));for(let[m,T]of E)d.has(m)||o.push({type:"added",...T});for(let[m,T]of d)E.has(m)||o.push({type:"removed",...T});let y=n.length>0||r.length>0||s.length>0||o.length>0;return {tables:n,columns:r,indexes:s,foreign_keys:o,has_changes:y}}};});var Ve=g(()=>{});var Rn,Q,Ge=g(()=>{Ve();Se();Rn=["CURRENT_TIMESTAMP","CURRENT_TIME","CURRENT_DATE"],Q=class{plan(e,t,n,r){if(!e.has_changes)return {steps:[],warnings:[],unsafe:false};let s=[],o=[];s.push({sql:"PRAGMA foreign_keys=OFF;",description:"Disable foreign key checks",type:"disable_foreign_keys"}),s.push({sql:"BEGIN;",description:"Begin transaction",type:"begin_transaction"});for(let c of e.tables.filter(d=>d.type==="added")){s.push({sql:`${c.sql};`,description:`CREATE TABLE ${h(c.name)}`,type:"create_table"});let d=n.indexes.filter(E=>E.table===c.name);for(let E of d){let y=E.unique?"UNIQUE ":"",m=E.columns.map(T=>h(T)).join(", ");s.push({sql:`CREATE ${y}INDEX ${h(E.name)} ON ${h(c.name)} (${m});`,description:`Create index ${h(E.name)} on ${h(c.name)}`,type:"add_index"});}}let a=new Set(t.tables.map(c=>c.name)),l=new Set(n.tables.map(c=>c.name)),u=new Set(e.tables.filter(c=>c.type==="modified").map(c=>c.name)),p=[...a].filter(c=>l.has(c));for(let c of p){if(!(u.has(c)||e.columns.some(m=>m.table===c)||e.indexes.some(m=>m.table===c)||e.foreign_keys.some(m=>m.table===c)))continue;let{canAlter:E,addedCols:y}=this.canSimpleAlter(c,e,n);if(E){for(let f of y)s.push({sql:`ALTER TABLE ${h(c)} ADD COLUMN ${this.columnDef(f)};`,description:`Add column ${h(f.name)} to ${h(c)}`,type:"add_column"});let m=e.indexes.filter(f=>f.table===c&&f.type==="added"),T=e.indexes.filter(f=>f.table===c&&f.type==="removed");for(let f of T)s.push({sql:`DROP INDEX IF EXISTS ${h(f.name)};`,description:`Drop index ${h(f.name)}`,type:"drop_index"});for(let f of m){let C=f.unique?"UNIQUE ":"",N=f.columns.map(w=>h(w)).join(", ");s.push({sql:`CREATE ${C}INDEX ${h(f.name)} ON ${h(c)} (${N});`,description:`Create index ${h(f.name)} on ${h(c)}`,type:"add_index"});}}else {let m=this.rebuildTable(c,t,n,e);s.push(...m.steps),o.push(...m.warnings);}}for(let c of e.tables.filter(d=>d.type==="removed"))s.push({sql:`DROP TABLE ${h(c.name)};`,description:`Drop table ${h(c.name)}`,type:"drop_table"}),o.push({table:c.name,reason:"table will be dropped"});return s.push({sql:"COMMIT;",description:"Commit transaction",type:"commit_transaction"}),s.push({sql:"PRAGMA foreign_keys=ON;",description:"Re-enable foreign key checks",type:"enable_foreign_keys"}),{steps:s,warnings:o,unsafe:o.length>0}}rebuildTable(e,t,n,r){let s=[],o=[],a=n.tables.find(f=>f.name===e);if(!a)return {steps:s,warnings:o};let l=`_${e}_migrate_new`,u=a.sql.replace(new RegExp(`(CREATE\\s+TABLE\\s+)(?:"${e}"|${e})`,"i"),`$1${h(l)}`);s.push({sql:`${u};`,description:`Create temporary table ${h(l)}`,type:"create_table"});let p=t.columns.filter(f=>f.table===e).map(f=>f.name),c=n.columns.filter(f=>f.table===e).map(f=>f.name),d=p.filter(f=>c.includes(f));if(d.length>0){let f=d.map(C=>h(C)).join(", ");s.push({sql:`INSERT INTO ${h(l)} (${f})
|
|
13
|
+
SELECT ${f}
|
|
14
|
+
FROM ${h(e)};`,description:`Copy data from ${h(e)} to ${h(l)}`,type:"copy_data"});}s.push({sql:`DROP TABLE ${h(e)};`,description:`Drop old table ${h(e)}`,type:"drop_table"}),s.push({sql:`ALTER TABLE ${h(l)} RENAME TO ${h(e)};`,description:`Rename ${h(l)} to ${h(e)}`,type:"rename_table"});let E=n.indexes.filter(f=>f.table===e);for(let f of E){let C=f.unique?"UNIQUE ":"",N=f.columns.map(w=>h(w)).join(", ");s.push({sql:`CREATE ${C}INDEX ${h(f.name)} ON ${h(e)} (${N});`,description:`Recreate index ${h(f.name)} on ${h(e)}`,type:"add_index"});}let y=n.triggers?.filter(f=>f.table===e)??[];for(let f of y)s.push({sql:`${f.sql};`,description:`Recreate trigger ${h(f.name)} on ${h(e)}`,type:"create_trigger"});let m=r.columns.filter(f=>f.table===e&&f.type==="removed");for(let f of m)o.push({table:e,reason:`column "${f.name}" will be dropped`});let T=r.columns.filter(f=>f.table===e&&f.type==="modified");for(let f of T)f.changes?.type&&o.push({table:e,reason:`column "${f.name}" type changes from ${f.changes.type.from} to ${f.changes.type.to}`}),f.changes?.nullable&&!f.changes.nullable.to&&o.push({table:e,reason:`column "${f.name}" becomes NOT NULL`});return {steps:s,warnings:o}}canSimpleAlter(e,t,n){let r=t.columns.filter(c=>c.table===e),s=r.filter(c=>c.type==="added"),o=r.filter(c=>c.type==="removed"),a=r.filter(c=>c.type==="modified"),l=t.foreign_keys.some(c=>c.table===e);if(o.length>0||a.length>0||l)return {canAlter:false,addedCols:s};let u=n.tables.find(c=>c.name===e);return u&&/\bCHECK\s*\(/i.test(u.sql)?{canAlter:false,addedCols:s}:{canAlter:s.every(c=>{let d=c.column;return this.hasNonConstantDefault(d.default_value)?false:d.nullable||d.default_value!=null})&&s.length>0,addedCols:s}}hasNonConstantDefault(e){if(e==null)return false;let t=e.trim().toUpperCase();return Rn.includes(t)}columnDef(e){let t=e.column,n=`${h(t.name)} ${t.type||"TEXT"}`;return t.nullable||(n+=" NOT NULL"),t.default_value!=null&&(n+=` DEFAULT ${t.default_value}`),n}};});async function J(i){let{parse:e}=await import('pgsql-parser');return e(i)}var qt=g(()=>{});function te(i){if("String"in i)return i.String.sval}function F(i){return i.map(te).filter(e=>e!=null)}function q(i){return i==null?[]:i.List!==void 0?i.List.items||[]:Array.isArray(i)?i:[i]}function Ne(i){return QuoteUtils.quoteIdentifier(i)}function Y(i){return Object.keys(i)[0]}function Ut(i){if("A_Const"in i){if(i.A_Const.ival)return i.A_Const.ival.ival;if(i.A_Const.fval)return i.A_Const.fval.fval;if(i.A_Const.sval)return i.A_Const.sval.sval;if(i.A_Const.boolval)return i.A_Const.boolval.boolval;if(i.A_Const.isnull)return null}}var U=g(()=>{});function Bt(i){let e=i.toLowerCase().trim();if(e.startsWith("_")||e.endsWith("[]"))return "TEXT";let t=Fn[e];if(!t)throw new j(`Unsupported PostgreSQL type: "${i}"`);return t}function Re(i){let e=i.toLowerCase();return ["serial","serial4","bigserial","serial8","smallserial","serial2"].includes(e)}function Ae(i){let e=i.toLowerCase();return ["varchar","character varying","char","character","bpchar"].includes(e)}function ke(i){let e=i.toLowerCase();return ["numeric","decimal"].includes(e)}var j,S,Fn,jt,qn,Ie,X=g(()=>{U();j=class extends Error{},S=class extends j{constructor(t,n){super(n??`Unsupported node type: ${Y(t)}`);this.node=t;}},Fn={int2:"INTEGER",smallint:"INTEGER",int4:"INTEGER",integer:"INTEGER",int:"INTEGER",int8:"INTEGER",bigint:"INTEGER",serial:"INTEGER",serial4:"INTEGER",bigserial:"INTEGER",serial8:"INTEGER",smallserial:"INTEGER",serial2:"INTEGER",float4:"REAL",real:"REAL",float8:"REAL","double precision":"REAL",numeric:"REAL",decimal:"REAL",text:"TEXT",varchar:"TEXT","character varying":"TEXT",char:"TEXT",character:"TEXT",bpchar:"TEXT",name:"TEXT",bytea:"BLOB",bool:"INTEGER",boolean:"INTEGER",date:"TEXT",time:"TEXT","time without time zone":"TEXT",timetz:"TEXT","time with time zone":"TEXT",timestamp:"TEXT","timestamp without time zone":"TEXT",timestamptz:"TEXT","timestamp with time zone":"TEXT",interval:"TEXT",json:"TEXT",jsonb:"TEXT",uuid:"TEXT",inet:"TEXT"},jt=["<",">","<=",">=","=","<>","!=","+","-","*","/","%","&","|","<<",">>","||","BETWEEN","NOT BETWEEN","IN","NOT IN","LIKE","NOT LIKE","IS NULL","IS NOT NULL","IS TRUE","IS NOT TRUE","IS FALSE","IS NOT FALSE","IS UNKNOWN","IS NOT UNKNOWN","AND","OR","NOT","->>"];qn={CreateEnumStmt:{react:"ignore"},CreateDomainStmt:{react:"warn"},CreateSeqStmt:{react:"error"},AlterSeqStmt:{react:"error"},CreateSchemaStmt:{react:"warn"},CreatePolicyStmt:{react:"ignore"},PartitionElem:{react:"error"},PartitionCmd:{react:"error"},VariableSetStmt:{react:"ignore"},CompositeTypeStmt:{react:"error"},AlterEnumStmt:{react:"error"},AlterObjectSchemaStmt:{react:"error"},AlterOwnerStmt:{react:"error"},AlterTypeStmt:{react:"error"},AlterFunctionStmt:{react:"error"},AlterDefaultPrivilegesStmt:{react:"error"},GrantStmt:{react:"error"},GrantRoleStmt:{react:"error"},CopyStmt:{react:"error"},CreateCastStmt:{react:"error"},AlterOpFamilyStmt:{react:"error"},AlterOperatorStmt:{react:"error"},TruncateStmt:{react:"error"},A_Indirection:{react:"error"},XmlExpr:{react:"error"},XmlSerialize:{react:"error"},RangeTableSample:{react:"error"},GroupingSet:{react:"error"}},Ie=new Map(Object.entries(qn));});var ve,Mt=g(()=>{X();U();ve=class{constructor(e){this.ast=e;this.result=[...this.walk(this.ast,[],{trackPaths:["returningList"]})];}result=[];*walk(e=this.ast,t=[],n={}){if(!e||typeof e!="object")return;let{trackPaths:r=[]}=n;if(Array.isArray(e)){for(let o=0;o<e.length;o++)yield*this.walk(e[o],t,n);return}let s=Object.keys(e);if(s.length===1&&s[0][0]>="A"&&s[0][0]<="Z"){let o=s[0];yield {node:e,path:t},yield*this.walk(e[o],[...t,o],n);}else for(let[o,a]of Object.entries(e))if(a&&typeof a=="object"){let l=r.includes(o)?[...t,o]:t;yield*this.walk(a,l,n);}}containsUnsupportedNode(){for(let{node:e}of this.result){let t=Y(e),n=Ie.get(t);if(n&&n.react==="error")return true}}hasFuncCall(){for(let{node:e}of this.result)if("FuncCall"in e)return true;return false}getFuncCalls(){return Array.from(this.result).map(({node:e})=>e).filter(e=>"FuncCall"in e).map(e=>e.FuncCall)}getFuncCallNames(){return this.getFuncCalls().flatMap(e=>e.funcname?.map(t=>t.String?.sval||t.String?.str))}hasSqlValueFunction(){for(let{node:e}of this.result)if("SQLValueFunction"in e)return true;return false}getSqlValueFunctions(){return Array.from(this.result).map(({node:e})=>e).filter(e=>"SQLValueFunction"in e).map(e=>e.SQLValueFunction)}getSqlValueFunctionNames(){return this.getSqlValueFunctions().map(e=>e.op)}hasUnsafeStar(){let e=this.result.filter(({node:t})=>"A_Star"in t);if(e.length===0)return false;for(let{path:t}of e)if(!t.includes("SelectStmt")&&!t.includes("returningList"))return true;return false}getRelationDefinitions(){return this.result.filter(({node:t})=>"CreateStmt"in t).map(({node:t})=>t.CreateStmt).map(t=>({relation:{relname:t.relation?.relname??"",inh:t.relation?.inh,relpersistence:t.relation?.relpersistence},columns:t.tableElts?.map(n=>{let r=n.ColumnDef?.typeName?.names?.map(o=>"String"in o?o.String.sval:""),s=r?.some(o=>o.toLowerCase().includes("pg_catalog"));return {name:n.ColumnDef?.colname??"",is_local:n.ColumnDef?.is_local,pg_catalog:s,type:r?.filter(o=>!o.toLowerCase().includes("pg_catalog"))[0]??"",types:r,constraints:n.ColumnDef?.constraints}})}))}getRelationColumnTypes(){return {has_non_pg_catalog_types:this.getRelationDefinitions().some(e=>e.columns?.some(t=>!t.pg_catalog)),types:Array.from(new Set(this.getRelationDefinitions().flatMap(e=>e.columns?.map(t=>t.type))))}}};});var Un,jn,Bn,Mn,z,Oe,Wt=g(()=>{X();Un=["DECLARE","IF","ELSIF","ELSE","LOOP","WHILE","FOR","FOREACH","EXCEPTION","RAISE","PERFORM","EXECUTE","SELECT"],jn=/^NEW\.(\w+)\s*(?::=|=)\s*(.+)$/is,Bn=/^RETURN\s+(NEW|OLD)$/i,Mn=/^(INSERT|UPDATE|DELETE)\b/i,z=class extends j{constructor(t,n,r){super(r??`Unsupported PL/pgSQL: ${t}`);this.hint=t;this.body=n;}},Oe=class{parse(e){let t=this.extractBlock(e),n=this.splitStatements(t),r=[],s=null;for(let o of n){let a=o.trim();if(!a)continue;this.rejectUnsupported(a);let l=a.match(Bn);if(l){s=l[1].toUpperCase(),r.push({type:"return",value:s});continue}let u=a.match(jn);if(u){r.push({type:"assignment",column:u[1],expression:u[2].trim()});continue}if(Mn.test(a)){r.push({type:"dml",sql:a});continue}throw new z(`"${a.substring(0,80)}" is not translatable to SQLite`,t)}if(!s)throw new j("Trigger function body must end with RETURN NEW or RETURN OLD");return {statements:r,returnValue:s}}extractBlock(e){let t=e.trim(),n=t.toUpperCase();if(/^\s*DECLARE\b/i.test(t))throw new z('"DECLARE" is not translatable to SQLite',e);let r=n.indexOf("BEGIN"),s=n.lastIndexOf("END");if(r===-1||s===-1||s<=r)throw new z("Expected BEGIN ... END block in trigger function body",e);return t.slice(r+5,s).trim()}splitStatements(e){let t=[],n="",r=0,s=false,o="";for(let l=0;l<e.length;l++){let u=e[l];if(s){n+=u,u===o&&(l+1<e.length&&e[l+1]===o?n+=e[++l]:s=false);continue}if(u==="'"||u==='"'){s=true,o=u,n+=u;continue}if(u==="("){r++,n+=u;continue}if(u===")"){r--,n+=u;continue}if(u===";"&&r===0){t.push(n.trim()),n="";continue}n+=u;}let a=n.trim();return a&&t.push(a),t}rejectUnsupported(e){let t=e.match(/^(\w+)/)?.[1]?.toUpperCase();if(t&&Un.includes(t))throw new z(`"${t}" is not translatable to SQLite`,e)}};});var ne,Qe=g(()=>{ne=class extends Error{constructor(t,n,r,s){super(`check constraint "${r}" violated for ${t}.${n}`);this.table=t;this.column=n;this.constraint=r;this.value=s;this.name="CheckConstraintError";}};});var _,O=g(()=>{Qe();_=class{context;constructor(e){this.context=e;}get isShimBacked(){return false}checkConstraint(){return null}serialize(e){return e}deserialize(e){return e}validateStorage(e){return {status:"pass",message:null}}validationFail(e,t){return {status:"fail",message:e,action:t}}validationPass(){return {status:"pass",message:null}}isNullish(e){return e==null}toColumnDDL(e){let{includeNullable:t=true}=e??{},n=[],r=this.context.column;n.push(this.quoteIfNeeded(r)),n.push(this.sqliteType),this.context.isPrimaryKey&&n.push("PRIMARY KEY"),this.context.isSerial&&this.context.isPrimaryKey&&n.push("AUTOINCREMENT"),t&&!this.context.nullable&&!this.context.isPrimaryKey&&n.push("NOT NULL"),this.context.isUnique&&!this.context.isPrimaryKey&&n.push("UNIQUE"),this.context.defaultValue!==null&&n.push(`DEFAULT ${this.context.defaultValue}`);let s=this.checkConstraint();return s&&n.push(`CHECK (${s})`),n.join(" ")}checkError(e,t){return new ne(this.context.table,this.context.column,e,t)}quoteIfNeeded(e){return /^[a-zA-Z_][a-zA-Z0-9_]*$/.test(e)?e:`"${e}"`}};});var B,De=g(()=>{O();B=class extends _{get sqliteType(){return "INTEGER"}};});var re,Je=g(()=>{De();re=class extends B{constructor(e){super({...e,isSerial:true});}};});function Wn(i,e){let{precision:t,scale:n}=e,r=10**n,s=10**(t-n);return Math.abs(Math.round(i*r)-i*r)<1e-4&&Math.abs(i)<s}var se,Ye=g(()=>{O();se=class extends _{numericPrecision;constructor(e,t){super(e),this.numericPrecision=t;}get isShimBacked(){return this.numericPrecision!==void 0}get sqliteType(){return "REAL"}checkConstraint(){if(this.numericPrecision){let{precision:e,scale:t}=this.numericPrecision,n=this.context.column,r=10**t,s=10**(e-t);return `ABS(ROUND(${n} * ${r}) - ${n} * ${r}) < 0.0001 AND ABS(${n}) < ${s}`}return null}validateStorage(e){if(this.isNullish(e))return this.validationPass();if(typeof e!="number"||!Number.isFinite(e))return this.validationFail("Expected finite number.","Patch rows with finite numbers.");if(this.numericPrecision){let{precision:t,scale:n}=this.numericPrecision;if(!Wn(e,this.numericPrecision))return this.validationFail(`Does not fit numeric(${t}, ${n}).`,"Patch rows within numeric precision.")}return this.validationPass()}};});var x,A=g(()=>{O();x=class extends _{lengthConstraint;constructor(e,t){super(e),this.lengthConstraint=t;}get isShimBacked(){return this.lengthConstraint!==void 0}get sqliteType(){return "TEXT"}checkConstraint(){return this.lengthConstraint!==void 0?`length(${this.context.column}) <= ${this.lengthConstraint}`:null}validateStorage(e){return this.isNullish(e)?this.validationPass():typeof e!="string"?this.validationFail("Expected text.","Patch rows with text values."):this.lengthConstraint!==void 0&&Array.from(e).length>this.lengthConstraint?this.validationFail(`Exceeds length ${this.lengthConstraint}.`,"Patch rows with shorter text."):this.validationPass()}};});var ie,Xe=g(()=>{O();ie=class extends _{get sqliteType(){return "BLOB"}};});var oe,ze=g(()=>{O();oe=class extends _{get isShimBacked(){return true}get sqliteType(){return "INTEGER"}checkConstraint(){return `${this.context.column} IN (0, 1)`}serialize(e){if(this.isNullish(e))return e;if(e===true||e===1)return 1;if(e===false||e===0)return 0;throw this.checkError("boolean_range",e)}deserialize(e){return this.isNullish(e)?e:e===1?true:e===0?false:e}validateStorage(e){return this.isNullish(e)?this.validationPass():e===1||e===0?this.validationPass():this.validationFail("Expected 0 or 1.","Patch rows with boolean values.")}};});function Kt(i){try{return {ok:!0,value:JSON.parse(i)}}catch{return {ok:false}}}var ae,He=g(()=>{O();ae=class extends _{get isShimBacked(){return true}get sqliteType(){return "TEXT"}checkConstraint(){let e=this.context.column;return `${e} IS NULL OR json_valid(${e})`}serialize(e){if(this.isNullish(e))return e;try{return JSON.stringify(e)}catch{throw this.checkError("json_valid",e)}}deserialize(e){if(this.isNullish(e))return e;if(typeof e=="string"){let t=Kt(e);return t.ok?t.value:e}return e}validateStorage(e){return this.isNullish(e)?this.validationPass():typeof e!="string"?this.validationFail("Expected JSON text.","Patch rows with JSON values."):Kt(e).ok?this.validationPass():this.validationFail("Invalid JSON text.","Patch rows with valid JSON.")}};});function Kn(i){if(!/^\d{4}-\d{2}-\d{2}$/.test(i))return false;let e=new Date(`${i}T00:00:00.000Z`);return !Number.isNaN(e.getTime())&&e.toISOString().slice(0,10)===i}var le,Ze=g(()=>{A();le=class extends x{get isShimBacked(){return true}checkConstraint(){let e=this.context.column;return `${e} IS NULL OR date(${e}) IS NOT NULL`}validateStorage(e){return this.isNullish(e)?this.validationPass():typeof e!="string"||!Kn(e)?this.validationFail("Invalid date.","Patch rows with YYYY-MM-DD dates."):this.validationPass()}};});function Vn(i){let e=i.match(/^(\d{2}):(\d{2})(?::(\d{2})(?:\.\d{1,6})?)?([+-](\d{2}):?(\d{2}))?$/);if(!e)return false;let t=Number(e[1]),n=Number(e[2]),r=e[3]===void 0?0:Number(e[3]),s=e[5]===void 0?null:Number(e[5]),o=e[6]===void 0?null:Number(e[6]),a=s===null||o!==null&&s<=15&&o<=59;return t<=24&&n<=59&&r<=59&&(t!==24||n===0&&r===0)&&a}var ce,et=g(()=>{A();ce=class extends x{get isShimBacked(){return true}checkConstraint(){let e=this.context.column;return `${e} IS NULL OR time(${e}) IS NOT NULL`}validateStorage(e){return this.isNullish(e)?this.validationPass():typeof e!="string"||!Vn(e)?this.validationFail("Invalid time.","Patch rows with HH:MM[:SS] times."):this.validationPass()}};});function Gn(i){let e=i.match(/^(\d{4})-(\d{2})-(\d{2})[ T](\d{2}):(\d{2})(?::(\d{2})(?:\.\d{1,6})?)?(?:Z|([+-](\d{2}):?(\d{2})))?$/);if(!e)return false;let t=Number(e[1]),n=Number(e[2]),r=Number(e[3]),s=Number(e[4]),o=Number(e[5]),a=e[6]===void 0?0:Number(e[6]),l=e[8]===void 0?null:Number(e[8]),u=e[9]===void 0?null:Number(e[9]),p=new Date(Date.UTC(t,n-1,r)),c=p.getUTCFullYear()===t&&p.getUTCMonth()===n-1&&p.getUTCDate()===r,d=s<=24&&o<=59&&a<=59&&(s!==24||o===0&&a===0),E=l===null||u!==null&&l<=15&&u<=59;return c&&d&&E}var ue,tt=g(()=>{A();ue=class extends x{get isShimBacked(){return true}checkConstraint(){let e=this.context.column;return `${e} IS NULL OR datetime(${e}) IS NOT NULL`}validateStorage(e){return this.isNullish(e)?this.validationPass():typeof e!="string"||!Gn(e)?this.validationFail("Invalid timestamp.","Patch rows with ISO timestamps."):this.validationPass()}};});var pe,nt=g(()=>{A();pe=class extends x{get isShimBacked(){return true}validateStorage(e){return this.isNullish(e)?this.validationPass():typeof e!="string"||e.trim().length===0?this.validationFail("Expected interval text.","Patch rows with interval strings."):/^-?\d+(?:\.\d+)?$/.test(e.trim())?this.validationFail("Ambiguous numeric interval.","Patch rows with explicit interval strings."):this.validationPass()}};});var fe,rt=g(()=>{A();fe=class extends x{enumValues;constructor(e,t){super(e),this.enumValues=t;}get isShimBacked(){return true}checkConstraint(){let e=this.context.column,t=this.enumValues.map(n=>`'${n.replace(/'/g,"''")}'`).join(", ");return `${e} IN (${t})`}serialize(e){if(this.isNullish(e))return e;if(typeof e!="string"||!this.enumValues.includes(e))throw this.checkError("enum_membership",e);return e}validateStorage(e){return this.isNullish(e)?this.validationPass():typeof e!="string"||!this.enumValues.includes(e)?this.validationFail("Invalid enum value.","Patch rows with declared enum values."):this.validationPass()}};});function Vt(i){try{return {ok:!0,value:JSON.parse(i)}}catch{return {ok:false}}}var H,st=g(()=>{O();H=class extends _{elementField;constructor(e,t){super(e),this.elementField=t;}get sqliteType(){return "TEXT"}get isShimBacked(){return true}checkConstraint(){let e=this.context.column;return `${e} IS NULL OR (json_valid(${e}) AND json_type(${e}) = 'array')`}serialize(e){if(this.isNullish(e))return e;if(!Array.isArray(e))throw this.checkError("array_type",e);return this.elementField?JSON.stringify(e.map(t=>this.elementField.serialize(t))):JSON.stringify(e)}deserialize(e){if(this.isNullish(e))return e;if(typeof e=="string"){let t=Vt(e);if(t.ok&&Array.isArray(t.value))return this.elementField?t.value.map(n=>this.elementField.deserialize(n)):t.value}return e}validateStorage(e){if(this.isNullish(e))return this.validationPass();if(typeof e!="string")return this.validationFail("Expected JSON array text.","Patch rows with array values.");let t=Vt(e);if(!t.ok)return this.validationFail("Invalid JSON array text.","Patch rows with array values.");if(!Array.isArray(t.value))return this.validationFail("Expected JSON array.","Patch rows with array values.");if(this.elementField)for(let n of t.value){let r=this.elementField.validateStorage(n);if(r.status==="fail")return this.validationFail(`Invalid ${this.elementField.context.pgTypeName} array element.`,r.action??"Patch rows with valid array elements.")}return this.validationPass()}};});function Gt(i){return Jn.test(i.toLowerCase())}var Qn,Jn,me,it=g(()=>{A();Qn="????????-????-????-????-????????????",Jn=/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/;me=class extends x{get isShimBacked(){return true}checkConstraint(){let e=this.quoteIfNeeded(this.context.column);return `${e} IS NULL OR ${e} GLOB '${Qn}'`}serialize(e){if(this.isNullish(e))return e;if(typeof e!="string")throw this.checkError("uuid_format",e);let t=e.toLowerCase();if(!Gt(t))throw this.checkError("uuid_format",e);return t}validateStorage(e){return this.isNullish(e)?this.validationPass():typeof e!="string"||!Gt(e)?this.validationFail("Invalid UUID.","Patch rows with valid UUIDs."):this.validationPass()}};});function Yn(i){let e=i.split("/");if(e.length>2)return null;let t=e[0];if(!t)return null;if(e.length===1)return {address:t,prefix:null};let n=e[1];return !n||!/^\d+$/.test(n)?null:{address:t,prefix:Number(n)}}function Xn(i){let e=i.split(".");return e.length!==4?false:e.every(t=>{if(!/^\d+$/.test(t))return false;let n=Number(t);return n>=0&&n<=255})}function zn(i){if(!i.includes(":"))return false;try{return new URL(`http://[${i}]/`),!0}catch{return false}}function Qt(i){let e=Yn(i);return e?Xn(e.address)?e.prefix===null||e.prefix>=0&&e.prefix<=32:zn(e.address)?e.prefix===null||e.prefix>=0&&e.prefix<=128:false:false}var de,ot=g(()=>{A();de=class extends x{get isShimBacked(){return true}checkConstraint(){let e=this.quoteIfNeeded(this.context.column);return `${e} IS NULL OR (length(${e}) BETWEEN 3 AND 49 AND (instr(${e}, '.') > 0 OR instr(${e}, ':') > 0))`}serialize(e){if(this.isNullish(e))return e;if(typeof e!="string")throw this.checkError("inet_format",e);let t=e.trim();if(!Qt(t))throw this.checkError("inet_format",e);return t}validateStorage(e){return this.isNullish(e)?this.validationPass():typeof e!="string"||!Qt(e.trim())?this.validationFail("Invalid inet address.","Patch rows with valid inet strings."):this.validationPass()}};});var he,at=g(()=>{A();he=class extends x{serialize(e){throw new Error(`Unsupported type "${this.context.pgTypeName}" for ${this.context.table}.${this.context.column}`)}deserialize(e){throw new Error(`Unsupported type "${this.context.pgTypeName}" for ${this.context.table}.${this.context.column}`)}toColumnDDL(){throw new Error(`Unsupported type "${this.context.pgTypeName}" for ${this.context.table}.${this.context.column}`)}};});function M(i,e){if(e?.isArray){let n=M(i,{...e,isArray:false});return new H(i,n)}if(e?.enumValues)return new fe(i,e.enumValues);let t=i.pgTypeName.toLowerCase().trim();if(t.startsWith("_")||t.endsWith("[]")){let n=t.startsWith("_")?t.slice(1):t.slice(0,-2),r={...i,pgTypeName:n},s=M(r);return new H(i,s)}return Zn.has(t)?new re(i):Hn.has(t)?new B(i):rr.has(t)?new oe(i):sr.has(t)?new ae(i):lr.has(t)?new le(i):cr.has(t)?new ce(i):ur.has(t)?new ue(i):pr.has(t)?new pe(i):nr.has(t)?new ie(i):er.has(t)?new se(i,e?.numericPrecision):ir.has(t)?new me(i):or.has(t)?new x(i,63):ar.has(t)?new de(i):tr.has(t)?new x(i,e?.lengthConstraint):new he(i)}var Hn,Zn,er,tr,nr,rr,sr,ir,or,ar,lr,cr,ur,pr,lt=g(()=>{De();Je();Ye();A();Xe();ze();He();Ze();et();tt();nt();rt();st();it();ot();at();Hn=new Set(["int2","smallint","int4","integer","int","int8","bigint"]),Zn=new Set(["serial","serial4","bigserial","serial8","smallserial","serial2"]),er=new Set(["float4","real","float8","double precision","numeric","decimal"]),tr=new Set(["text","varchar","character varying","char","character","bpchar"]),nr=new Set(["bytea"]),rr=new Set(["bool","boolean"]),sr=new Set(["json","jsonb"]),ir=new Set(["uuid"]),or=new Set(["name"]),ar=new Set(["inet"]),lr=new Set(["date"]),cr=new Set(["time","timetz","time without time zone","time with time zone"]),ur=new Set(["timestamp","timestamptz","timestamp without time zone","timestamp with time zone"]),pr=new Set(["interval"]);});function ct(i,e="auto"){let t=i.toLowerCase(),n=Le[t];if(!n)return null;switch(e){case "translate":{if(!n.sqlite)throw new Error(`No SQLite translation for function "${i}"`);return {sqliteExpr:n.sqlite(),jsFn:null}}case "synthetic":{if(!n.js)throw new Error(`No JS implementation for function "${i}"`);return {sqliteExpr:null,jsFn:n.js}}case "auto":return n.js?{sqliteExpr:null,jsFn:n.js}:n.sqlite?{sqliteExpr:n.sqlite(),jsFn:null}:null}}var Jt,Le,ut=g(()=>{Jt="lower(hex(randomblob(4))) || '-' || lower(hex(randomblob(2))) || '-4' || substr(lower(hex(randomblob(2))),2) || '-' || substr('89ab',abs(random()) % 4 + 1, 1) || substr(lower(hex(randomblob(2))),2) || '-' || lower(hex(randomblob(6)))",Le={gen_random_uuid:{sqlite:()=>Jt,js:()=>crypto.randomUUID()},uuid_generate_v4:{sqlite:()=>Jt,js:()=>crypto.randomUUID()},now:{sqlite:()=>"datetime('now')",js:()=>new Date().toISOString()},current_timestamp:{sqlite:()=>"datetime('now')",js:()=>new Date().toISOString()},current_date:{sqlite:()=>"date('now')",js:()=>new Date().toISOString().split("T")[0]},current_time:{sqlite:()=>"time('now')",js:()=>new Date().toISOString().split("T")[1].replace("Z","")},random:{sqlite:()=>"random()",js:()=>Math.random()},length:{sqlite:()=>"length",js:null},lower:{sqlite:()=>"lower",js:null},upper:{sqlite:()=>"upper",js:null},substr:{sqlite:()=>"substr",js:null},substring:{sqlite:()=>"substr",js:null},trim:{sqlite:()=>"trim",js:null},ltrim:{sqlite:()=>"ltrim",js:null},rtrim:{sqlite:()=>"rtrim",js:null},replace:{sqlite:()=>"replace",js:null},coalesce:{sqlite:()=>"coalesce",js:null},nullif:{sqlite:()=>"nullif",js:null},count:{sqlite:()=>"count",js:null},sum:{sqlite:()=>"sum",js:null},avg:{sqlite:()=>"avg",js:null},min:{sqlite:()=>"min",js:null},max:{sqlite:()=>"max",js:null},localtime:{sqlite:()=>"time('now', 'localtime')",js:null},localtimestamp:{sqlite:()=>"datetime('now', 'localtime')",js:null}};});var Pe,Yt=g(()=>{X();U();U();Mt();Me();Wt();Ve();Ke();Ge();Se();lt();ut();Pe=class extends Deparser{enums;schemaHandling;warnings=[];helper;config;triggerFunctions=new Map;plpgsqlParser=new Oe;introspection;functionResolution;constructor(e,{enums:t,schemaHandling:n,introspection:r,...s}={}){super(e,s),this.schemaHandling=n??"default",this.enums=t??new Map,this.helper=new ve(e),this.config=s,this.introspection=r,this.functionResolution=s?.functionResolution??"translate";}visit(e,t){let n=Y(e),r=Ie.get(n);if(r){if(r.react==="error")throw new S({[n]:e},`Unsupported node type: ${n}`);return r.react==="warn"&&this.warnings.push({type:n,node:e}),""}return super.visit(e,t)}deparse(e,t){if(e==null)return null;if(!t){let n=new SqlFormatter;t=new DeparserContext({formatter:n});}return typeof e=="number"||e instanceof Number?e.toString():this.visit(e,t)}RawStmt(e,t){if(!e.stmt||e.stmt.CommentStmt)return "";let n=this.deparse(e.stmt,t);return !n||n.length===0?"":e.stmt_len?n+";":n}RangeVar(e,t){this.ensureRelation(e);let n=this.effectiveSchema(e.schemaname),r=e.relname,s=this.quoteBareIfNeeded(r);n&&(this.schemaHandling==="prefix"?s=`${n}__${r}`:s=`"${n}.${r}"`);let o=e.alias?" "+this.Alias(e.alias,t):"";return s+o}getRelationName(e){this.ensureRelation(e);let t=this.effectiveSchema(e.schemaname),n=e.relname;return t?this.schemaHandling==="prefix"?`${t}__${n}`:`${t}.${n}`:n}quoteBareIfNeeded(e){return /^[A-Za-z_][A-Za-z0-9_]*$/.test(e)?e:`"${e.replace(/"/g,'""')}"`}effectiveSchema(e){if(e){if(this.config.forceDefaultSchema||this.schemaHandling!=="default")return e;if(e!=="public")return e}}ensureRelation(e){let t=this.config.forceDefaultSchema;t&&(!e||typeof e!="object"||t.length===0||e.schemaname||(e.schemaname=t));}CreateStmt(e,t){if(e.inhRelations&&e.inhRelations.length>0)throw new S({CreateStmt:e},"Inheritance is not supported in SQLite");if(e.ofTypename!==void 0)throw new S({CreateStmt:e},"Typed tables (CREATE TABLE ... OF type_name) are not supported. Define columns directly in the CREATE TABLE statement instead.");if(e.options&&e.options.length>0&&(e.options=void 0),!e.tableElts||e.tableElts.length===0)throw new S({CreateStmt:e},"Empty tables are not supported in SQLite. Define at least one column.");return e.accessMethod&&(e.accessMethod=void 0),super.CreateStmt(e,t)+" STRICT"}TableLikeClause(e,t){throw new S({TableLikeClause:e},"CREATE TABLE ... (LIKE ...) is not supported in SQLite. Define the table columns explicitly instead.")}DefElem(e,t){if(["oids","fillfactor",/^autovacuum_/i,"toast_tuple_target","parallel_workers","user_catalog_table"].some(s=>_t(e.defname??"",s)))return "";let r=super.DefElem(e,t);throw new S({DefElem:e},`DefElem "${e.defname}" (${r}) not supported`)}TypeName(e,t){if(!e.names)return "";let n=e.names.map(s=>s.String?s.String.sval||s.String.str:"").filter(Boolean);if(n.length===0)return "";let r=n.length===2&&n[0]==="pg_catalog"?n[1]:n.join(".");return e.arrayBounds&&e.arrayBounds.length>0||this.enums.has(r.toLowerCase())?"TEXT":Bt(r)}ColumnDef(e,t){let n=[],r=e.colname;r&&n.push(this.quoteIfNeeded(r));let s=false,o=false,a=null,l=null,u=null,p=false;if(e.typeName){let c=e.typeName.names?.map(y=>y.String?.sval||y.String?.str).filter(Boolean);u=c&&(c.length===2&&c[0]==="pg_catalog"?c[1]:c[0]),s=!!(u&&Re(u)),p=!!(e.typeName.arrayBounds&&e.typeName.arrayBounds.length>0);let d=Array.isArray(e.typeName.typmods)?e.typeName.typmods:[],E=y=>d[y]?.A_Const?.ival?.ival??d[y]?.A_Const?.val?.ival?.ival;if(u&&Ae(u)&&d.length>0){let y=E(0);typeof y=="number"&&y>0&&(a={maxLen:y});}if(u&&ke(u)&&d.length>=2){let y=E(0),m=E(1);typeof y=="number"&&typeof m=="number"&&y>0&&m>=0&&(l={precision:y,scale:m});}if(e.constraints){let y=Array.isArray(e.constraints)?e.constraints:[];o=y.some(m=>m.Constraint?.contype==="CONSTR_PRIMARY"),y.some(m=>m.Constraint?.contype==="CONSTR_IDENTITY")&&(s=true);}n.push(this.TypeName(e.typeName,t));}if(e.constraints){let c=Array.isArray(e.constraints)?e.constraints:[],d=c.map(y=>this.visit(y,t));n.push(...d.filter(Boolean));let E=c.some(y=>y.Constraint?.contype==="CONSTR_CHECK");s&&o&&!E&&n.push("AUTOINCREMENT");}if(r&&u){let c={isArray:p};a&&(c.lengthConstraint=a.maxLen),l&&(c.numericPrecision=l);let d=this.enums.get(u.toLowerCase());d&&(c.enumValues=d);let m=M({schema:"public",table:"",column:r,pgTypeName:u,nullable:true,defaultValue:null,defaultFn:null,isPrimaryKey:o,isUnique:false,isSerial:s},c).checkConstraint();m&&n.push(`CHECK (${m})`);}return n.join(" ")}Constraint(e,t){let n=e.contype;if(n==="CONSTR_IDENTITY"||n==="CONSTR_ATTR_DEFERRABLE"||n==="CONSTR_ATTR_NOT_DEFERRABLE"||n==="CONSTR_ATTR_DEFERRED"||n==="CONSTR_ATTR_IMMEDIATE")return "";if(n==="CONSTR_NULL")return "NULL";if(n==="CONSTR_NOTNULL")return "NOT NULL";if(n==="CONSTR_DEFAULT"&&e.raw_expr){let r=this.visit(e.raw_expr,t);return r.includes("(")&&!r.startsWith("(")?`DEFAULT (${r})`:`DEFAULT ${r}`}if(n==="CONSTR_CHECK"&&e.raw_expr){let r=[];e.conname&&r.push("CONSTRAINT",Ne(e.conname)),r.push("CHECK");let s=this.visit(e.raw_expr,t);return r.push(`(${s})`),r.join(" ")}if(n==="CONSTR_PRIMARY")return e.keys&&e.keys.length>0?`PRIMARY KEY (${q(e.keys).map(s=>this.visit(s,t)).join(", ")})`:"PRIMARY KEY";if(n==="CONSTR_UNIQUE")return e.keys&&e.keys.length>0?`UNIQUE (${q(e.keys).map(s=>this.visit(s,t)).join(", ")})`:"UNIQUE";if(n==="CONSTR_FOREIGN")return super.Constraint(e,t).replace(/FOREIGN\s+KEY\s+REFERENCES/gi,"REFERENCES");if(n==="CONSTR_GENERATED"&&e.raw_expr)return `GENERATED ALWAYS AS (${this.visit(e.raw_expr,t)}) STORED`;if(n==="CONSTR_EXCLUSION")throw new S({Constraint:e},"EXCLUSION constraints are not supported in SQLite");return ""}FuncCall(e,t){let r=(e.funcname||[]).map(u=>u.String?.sval||u.String?.str).filter(Boolean);if(r.length===0)throw new Error("Function call has no name");let s=r[r.length-1].toLowerCase();if(s==="extract"&&e.args&&e.args.length>=2){let u=e.args[0];if((u?.A_Const?.sval?.sval||u?.String?.sval)==="epoch")return `strftime('%s', ${this.visit(e.args[1],t)})`}let a=(e.args??[]).map(u=>this.visit(u,t));if(e.agg_star)return `${s}(*)`;if(e.agg_distinct)return `${s}(DISTINCT ${a.join(", ")})`;let l=ct(s,this.functionResolution);if(l){if(l.sqliteExpr!==null){let u=l.sqliteExpr;return u.includes("(")?u:`${u}(${a.join(", ")})`}if(l.jsFn!==null){let u=Le[s];if(u?.sqlite){let p=u.sqlite();return p.includes("(")?p:`${p}(${a.join(", ")})`}}}throw new S({FuncCall:e},`Function call "${s}" not supported`)}SQLValueFunction(e,t){switch(e.op){case "SVFOP_CURRENT_TIMESTAMP":return "datetime('now')";case "SVFOP_CURRENT_DATE":return "date('now')";case "SVFOP_CURRENT_TIME":return "time('now')";default:throw new S({SQLValueFunction:e},`SQLValueFunction "${e.op}" not supported`)}}ResTarget(e,t){if(e.indirection&&e.indirection.length>0)throw new S({ResTarget:e},"Indirections are not supported in SQLite");let n=[];return t.update&&e.name?(n.push(this.quoteIfNeeded(e.name)),n.push("="),e.val&&n.push(this.deparse(e.val,t))):t.insertColumns&&e.name?n.push(this.quoteIfNeeded(e.name)):(e.val&&n.push(this.deparse(e.val,t)),e.name&&n.push(this.Alias({aliasname:e.name},t))),n.join(" ")}A_Expr(e,t){if(["AEXPR_OP_ALL","AEXPR_OP_ANY"].includes(e.kind))throw new S({A_Expr:e},"ALL/ANY/SOME comparison operators are not supported. Use NOT EXISTS or IN instead");if(e.name&&e.name.length>0){if(e.name.length>1)throw new S({A_Expr:e},"Schema-qualified OPERATOR() syntax is not supported in SQLite");let n=e.name[0]?.String?.sval||e.name[0]?.String?.str;if(n){if(!e.lexpr||!e.rexpr)throw new S({A_Expr:e},"A_Expr missing left or right expression");if(!jt.includes(n.toUpperCase()))throw new S({A_Expr:e},`Operator "${n}" is not supported in SQLite`);if(n==="~~"||n==="~~*"){let r=this.visit(e.lexpr,t),s=this.visit(e.rexpr,t);return `${r} LIKE ${s}`}if(n==="!~~"||n==="!~~*"){let r=this.visit(e.lexpr,t),s=this.visit(e.rexpr,t);return `${r} NOT LIKE ${s}`}if(n==="~"||n==="~*"){let r=this.visit(e.lexpr,t),s=this.visit(e.rexpr,t);return `${r} GLOB ${s}`}}}return super.A_Expr(e,t)}IndexStmt(e,t){let n=["CREATE"];e.unique&&n.push("UNIQUE"),n.push("INDEX"),e.if_not_exists&&n.push("IF NOT EXISTS"),e.idxname&&n.push(Ne(e.idxname)),n.push("ON"),e.relation&&n.push(this.RangeVar(e.relation,t));let r=(e.indexParams??[]).map(s=>"IndexElem"in s?this.IndexElem(s.IndexElem,t):this.visit(s,t)).filter(Boolean);return n.push(`(${r.join(", ")})`),n.join(" ")}IndexElem(e,t){let n=[];return e.name?n.push(Ne(e.name)):e.expr&&n.push(`(${this.visit(e.expr,t)})`),e.ordering==="SORTBY_ASC"&&n.push("ASC"),e.ordering==="SORTBY_DESC"&&n.push("DESC"),e.nulls_ordering==="SORTBY_NULLS_FIRST"&&n.push("NULLS FIRST"),e.nulls_ordering==="SORTBY_NULLS_LAST"&&n.push("NULLS LAST"),n.join(" ")}TypeCast(e,t){if(!e.arg||!e.typeName)return super.TypeCast(e,t);if([...this.helper.walk(e)].filter(({node:o})=>"A_Star"in o).length>0)throw new S({TypeCast:e},"A.* in type casts are not supported in SQLite");if(e.typeName.arrayBounds&&e.typeName.arrayBounds.length>0){if("A_Const"in e.arg&&e.arg.A_Const.sval){let o=e.arg.A_Const.sval.sval;if(o.startsWith("{")&&o.endsWith("}")){let a=e.typeName.names?.map(c=>c.String?.sval).filter(Boolean)??[],l=a.length===2&&a[0]==="pg_catalog"?a[1]:a[0],p=["text","varchar","character varying","char","bpchar","name","uuid"].includes(l?.toLowerCase());try{let c=this.parsePgArrayLiteral(o,p);return `'${JSON.stringify(c).replace(/'/g,"''")}'`}catch{}}}return this.visit(e.arg,t)}let r=this.visit(e.arg,t),s=this.TypeName(e.typeName,t);return `CAST(${r} AS ${s})`}A_ArrayExpr(e,t){let n=q(e.elements),r=this.tryExtractStaticArray(n);return r!==void 0?`'${JSON.stringify(r).replace(/'/g,"''")}'`:`json_array(${n.map(o=>this.visit(o,t)).join(", ")})`}tryExtractStaticArray(e){let t=[];for(let n of e)if("A_ArrayExpr"in n){let r=q(n.A_ArrayExpr.elements),s=this.tryExtractStaticArray(r);if(s===void 0)return;t.push(s);}else if("A_Const"in n){let r=n.A_Const;if(r.isnull)t.push(null);else if(r.ival)t.push(r.ival.ival);else if(r.fval)t.push(parseFloat(r.fval.fval));else if(r.sval)t.push(r.sval.sval);else if("boolval"in r)t.push(r.boolval.boolval===true);else return}else return;return t}parsePgArrayLiteral(e,t){if(!e.startsWith("{")||!e.endsWith("}"))throw new Error("Not a PG array literal");let n=e.slice(1,-1);if(n.length===0)return [];let r=[],s=0;for(;s<n.length;)if(n[s]==="{"){let o=0,a=s;for(;a<n.length;){if(n[a]==="{")o++;else if(n[a]==="}"&&(o--,o===0))break;a++;}r.push(this.parsePgArrayLiteral(n.slice(s,a+1),t)),s=a+1,n[s]===","&&s++;}else if(n[s]==='"'){let o=s+1,a="";for(;o<n.length&&n[o]!=='"';)n[o]==="\\"&&o++,a+=n[o],o++;r.push(a),s=o+1,n[s]===","&&s++;}else {let o=s;for(;o<n.length&&n[o]!==","&&n[o]!=="}";)o++;if(o===s)throw new Error("Malformed PG array literal");let a=n.slice(s,o);if(a==="NULL")r.push(null);else if(t)r.push(a);else {let l=Number(a);r.push(isNaN(l)?a:l);}s=o,n[s]===","&&s++;}return r}BetweenExpr(e,t){return super.A_Expr(e,t)}AlterTableStmt(e,t){let n=e.cmds??[],r=["AT_EnableRowSecurity","AT_ForceRowSecurity"],s=n.filter(p=>"AlterTableCmd"in p&&!r.includes(p.AlterTableCmd.subtype));if(s.length===0)return "";if(!["OBJECT_TABLE","OBJECT_INDEX","OBJECT_VIEW"].includes(e.objtype))throw new S({AlterTableStmt:e},`AlterTableStmt with objtype ${e.objtype} is not supported`);let o=["AT_AddColumn","AT_DropColumn"],a=["AT_AlterColumnType","AT_SetNotNull","AT_DropNotNull","AT_ColumnDefault","AT_AddConstraint","AT_DropConstraint"],l=[],u=[];for(let p of s){let c=p.AlterTableCmd.subtype;if(o.includes(c)){let d={...e,cmds:[p]};l.push(super.AlterTableStmt(d,t));}else if(a.includes(c))u.push(p.AlterTableCmd);else throw new S({AlterTableStmt:e},`AlterTableCmd with subtype ${c} is not supported in SQLite`)}if(u.length>0){let p=this.getRelationName(e.relation);l.push(this.generateRebuildSql(p,u));}return l.join(`;
|
|
15
|
+
`)}AlterTableCmd(e,t){if(!["AT_AddColumn","AT_DropColumn"].includes(e.subtype))throw new S({AlterTableCmd:e},`AlterTableCmd with subtype ${e.subtype} is not supported`);return e.subtype==="AT_DropColumn"&&e.behavior?super.AlterTableCmd({...e,behavior:void 0},t):super.AlterTableCmd(e,t)}DefineStmt(e,t){if(e.kind==="OBJECT_AGGREGATE")throw new Error("AGGREGATE definitions are not supported in SQLite");return super.DefineStmt(e,t)}InsertStmt(e,t){if("selectStmt"in e){let r=(e.selectStmt?.SelectStmt?.valuesLists??[]).map(s=>s.List?.items?.map(o=>"SetToDefault"in o));if(r.length===1&&r[0]?.every(s=>s===true))return super.InsertStmt({...e,selectStmt:void 0,cols:void 0},t);if(r.some(s=>s.some(o=>o===true)))throw new S({InsertStmt:e},"Insert with partial DEFAULT values is not supported")}return super.InsertStmt(e,t)}SelectStmt(e,t){if(this.helper.hasUnsafeStar())throw new S({SelectStmt:e},"Row-wise comparison using .* is not supported in SQLite. Expand to explicit per-column comparisons instead.");if(e.intoClause)throw new S({SelectStmt:e},"SELECT ... INTO clause is not supported in SQLite");if(e.distinctClause){let r=q(e.distinctClause);if(r.length>0&&Object.keys(r[0]).length>0)throw new S({SelectStmt:e},"DISTINCT ON clause is not supported in SQLite. Use window functions instead.")}if(e.limitOffset&&!e.limitCount)throw new S({SelectStmt:e},"OFFSET without LIMIT is not supported in SQLite");let n=super.SelectStmt(e,t);if(/^SELECT\s+FROM/.test(n))throw new S({SelectStmt:e},"SELECT without a target list is not supported in SQLite");return n}JoinExpr(e,t){return e.alias&&this.Alias(e.alias,t),super.JoinExpr(e,t)}A_Const(e,t){if(e.bsval!==void 0)throw new S({A_Const:e},"Bit string literals are not supported in SQLite");let n=super.A_Const(e,t);return typeof n=="string"&&n.startsWith("E'")?n.substring(2,n.length-1):n}SortBy(e,t){if(e.sortby_dir==="SORTBY_USING"){let n=q(e.useOp),r=n[0]?.String?.sval;if(n.length>1||!["<",">"].includes(r??""))throw new S({SortBy:e},"Only `USING <` or `USING >` are supported.");e.sortby_dir=r==="<"?"SORTBY_DESC":"SORTBY_ASC",e.useOp=void 0;}return super.SortBy(e,t)}RangeSubselect(e,t){if(e.lateral)throw new S({RangeSubselect:e},"LATERAL subqueries are not supported in SQLite");return super.RangeSubselect(e,t)}SubLink(e,t){if(["ANY_SUBLINK","ALL_SUBLINK"].includes(e.subLinkType))throw new S({SubLink:e},"ANY/ALL/SOME subqueries are not supported. Use NOT EXISTS or IN instead");if(e.subLinkType==="ARRAY_SUBLINK")throw new S({SubLink:e},"ARRAY subqueries are not supported in SQLite");return super.SubLink(e,t)}LockingClause(e,t){return ""}UpdateStmt(e,t){if(t.parentNodeTypes.includes("SelectStmt"))throw new S({UpdateStmt:e},"UPDATE ... FROM (SELECT ...) is not supported in SQLite");return super.UpdateStmt(e,t)}Alias(e,t){if(e.colnames&&e.colnames.length>0)throw new S({Alias:e},"Aliasing with column names is not supported in SQLite");return `AS "${e.aliasname}"`}CreateFunctionStmt(e,t){let n=e.options??[],r=e.returnType?.names?.map(u=>u.String?.sval).filter(Boolean).join("."),s=n.find(u=>u.DefElem?.defname==="language")?.DefElem?.arg?.String?.sval;if(r!=="trigger"||s!=="plpgsql")throw new S({CreateFunctionStmt:e},"Only trigger functions with LANGUAGE plpgsql are supported");let o=e.funcname?.map(u=>u.String?.sval).filter(Boolean).pop();if(!o)throw new Error("Function has no name");let a=n.find(u=>u.DefElem?.defname==="as")?.DefElem?.arg?.List?.items?.[0]?.String?.sval;if(!a)throw new Error("Function has no body");let l=this.plpgsqlParser.parse(a);return this.triggerFunctions.set(o,l),""}CreateTrigStmt(e,t){let n=e.trigname,r=this.RangeVar(e.relation,t),s=e.funcname?.map(c=>c.String?.sval).filter(Boolean).pop();if(!s)throw new Error(`Trigger "${n}" has no function reference`);let o=this.triggerFunctions.get(s);if(!o)throw new S({CreateTrigStmt:e},`Trigger "${n}" references unknown function "${s}"`);let a=e.timing===2?"BEFORE":e.timing===64?"INSTEAD OF":"AFTER",l=[];if(e.events&4&&l.push("INSERT"),e.events&8&&l.push("DELETE"),e.events&16)if(e.columns?.length){let c=e.columns.map(d=>d.String?.sval).filter(Boolean);l.push(`UPDATE OF ${c.join(", ")}`);}else l.push("UPDATE");let u=l.join(" OR "),p=this.buildTriggerBody(o,r,t);return [`CREATE TRIGGER ${n}`,`${a} ${u} ON ${r}`,"FOR EACH ROW","BEGIN",...p.map(c=>` ${c};`),"END"].join(`
|
|
16
|
+
`)}buildTriggerBody(e,t,n){let r=[],s=[];for(let o of e.statements)if(o.type!=="return"){if(o.type==="assignment"){s.push(o);continue}s.length>0&&(r.push(this.buildAssignmentUpdate(s,t,n)),s.length=0),o.type==="dml"&&r.push(this.translateDml(o.sql,n));}return s.length>0&&r.push(this.buildAssignmentUpdate(s,t,n)),r}buildAssignmentUpdate(e,t,n){let r=e.map(s=>{let o=this.translateExpression(s.expression,n);return `${s.column} = ${o}`});return `UPDATE ${t} SET ${r.join(", ")} WHERE rowid = NEW.rowid`}translateExpression(e,t){try{let n=`SELECT ${e}`,r=e.trim().toLowerCase();return r==="now()"||r==="current_timestamp"?"datetime('now')":e}catch{return e}}translateDml(e,t){return e.replace(/\bnow\(\)/gi,"datetime('now')").replace(/\bcurrent_timestamp\b/gi,"datetime('now')").replace(/\bgen_random_uuid\(\)/gi,this.uuidExpression()).replace(/\buuid_generate_v4\(\)/gi,this.uuidExpression())}uuidExpression(){return "lower(hex(randomblob(4))) || '-' || lower(hex(randomblob(2))) || '-4' || substr(lower(hex(randomblob(2))),2) || '-' || substr('89ab',abs(random()) % 4 + 1, 1) || substr(lower(hex(randomblob(2))),2) || '-' || lower(hex(randomblob(6)))"}NullTest(e,t){if(e.arg?.ColumnRef?.fields?.length>1)throw new S({NullTest:e},"row-level NULL tests are not supported in SQLite");return super.NullTest(e,t)}RenameStmt(e,t){if(!e.renameType)throw new Error("RenameStmt requires renameType");let n=["OBJECT_TABLE","OBJECT_VIEW","OBJECT_COLUMN"];if(e.renameType==="OBJECT_COLUMN"&&(e.relationType==="OBJECT_FOREIGN_TABLE"||e.relationType==="OBJECT_VIEW"))throw new S({RenameStmt:e},`RenameStmt with relationType ${e.relationType} is not supported`);if(!n.includes(e.renameType))throw new S({RenameStmt:e},`RenameStmt with renameType ${e.renameType} is not supported in SQLite`);return super.RenameStmt(e,t)}DropStmt(e,t){let n=e.removeType;if(["OBJECT_TABLE","OBJECT_VIEW","OBJECT_INDEX","OBJECT_TRIGGER"].includes(n))return super.DropStmt(e,t);if(["OBJECT_POLICY"].includes(n))return "";throw new S({DropStmt:e},`DROP with removeType ${n} is not supported in SQLite`)}generateRebuildSql(e,t){if(!this.introspection)throw new Error(`ALTER TABLE on "${e}" requires 12-step rebuild but no introspection was provided. Pass introspection in DeparseOptions to enable column type changes, NOT NULL, defaults, and constraint modifications.`);let n=this.buildDesiredSchema(this.introspection,e,t),r=new G,s=new Q,o=r.diff(this.introspection,n);return o.has_changes?s.plan(o,this.introspection,n).steps.filter(l=>!["disable_foreign_keys","begin_transaction","commit_transaction","enable_foreign_keys"].includes(l.type)).map(l=>l.sql).join(`
|
|
17
|
+
`):""}buildDesiredSchema(e,t,n){let r={...e,tables:e.tables.map(s=>({...s})),columns:e.columns.map(s=>({...s})),indexes:e.indexes.map(s=>({...s})),foreign_keys:e.foreign_keys.map(s=>({...s})),primary_keys:e.primary_keys.map(s=>({...s})),views:e.views.map(s=>({...s})),triggers:(e.triggers??[]).map(s=>({...s})),check_constraints:e.check_constraints.map(s=>({...s})),unique_constraints:(e.unique_constraints??[]).map(s=>({...s})),comments:(e.comments??[]).map(s=>({...s})),custom_types:e.custom_types.map(s=>({...s}))};for(let s of n){let o=r.columns.findIndex(a=>a.table===t&&a.name===s.name);switch(s.subtype){case "AT_AlterColumnType":{if(o===-1)break;let a=this.extractTypeName(s);a&&(r.columns[o]={...r.columns[o],type:a.toLowerCase()});break}case "AT_SetNotNull":{if(o===-1)break;r.columns[o]={...r.columns[o],nullable:false};break}case "AT_DropNotNull":{if(o===-1)break;r.columns[o]={...r.columns[o],nullable:true};break}case "AT_ColumnDefault":{if(o===-1)break;if(s.def){let a=this.extractDefaultValue(s);r.columns[o]={...r.columns[o],default_value:a};}else r.columns[o]={...r.columns[o],default_value:null};break}case "AT_AddConstraint":case "AT_DropConstraint":{let a=r.tables.findIndex(l=>l.name===t);a!==-1&&(r.tables[a]={...r.tables[a],sql:r.tables[a].sql+" /* modified */"});break}}}return this.rebuildTableSql(r,t),r}rebuildTableSql(e,t){let n=e.tables.findIndex(c=>c.name===t);if(n===-1)return;let r=e.columns.filter(c=>c.table===t),s=e.foreign_keys.filter(c=>c.table===t),o=e.check_constraints.filter(c=>c.table===t),a=r.map(c=>{let d=`${h(c.name)} ${c.type||"TEXT"}`;return c.is_primary_key&&(d+=" PRIMARY KEY"),c.nullable||(d+=" NOT NULL"),c.default_value!=null&&(d+=` DEFAULT ${c.default_value}`),d}),l=s.map(c=>`FOREIGN KEY (${h(c.column)}) REFERENCES ${h(c.ref_table)}(${h(c.ref_column)}) ON UPDATE ${c.on_update} ON DELETE ${c.on_delete}`),u=o.map(c=>`CHECK (${c.expression})`),p=[...a,...l,...u];e.tables[n]={...e.tables[n],sql:`CREATE TABLE ${h(t)} (${p.join(", ")}) STRICT`};}extractTypeName(e){let t=e.def?.ColumnDef;return t?.typeName?.TypeName?(t.typeName.TypeName.names??[]).map(r=>r.String?.sval).filter(Boolean).pop()??null:null}extractDefaultValue(e){return e.def?"Integer"in e.def?String(e.def.Integer.ival):"Float"in e.def?e.def.Float.fval:"String"in e.def?`'${e.def.String.sval}'`:null:null}};});var R,W,pt=g(()=>{U();X();R=class extends S{constructor(e,t){super(e,`Unsupported expression: ${t}`);}},W=class{deparse(e){if("A_Const"in e){let r=e.A_Const;if(r.boolval!==void 0)return r.boolval.boolval?{}:{$always:false}}let t=Object.keys(e)[0],n=this[t];if(!n)throw new R({[t]:e},`Unsupported expression: ${t}`);return n.call(this,e[t])}deparseValue(e){if("A_Const"in e)return this.A_Const(e.A_Const);if("ColumnRef"in e)return this.ColumnRef(e.ColumnRef);if("FuncCall"in e)return this.FuncCall(e.FuncCall);if("SubLink"in e)return this.SubLink(e.SubLink);if("TypeCast"in e)return this.TypeCast(e.TypeCast);if("A_Expr"in e){let n=this.isJwtAccessor(e.A_Expr);return n||this.A_Expr(e.A_Expr)}if("BoolExpr"in e)return this.BoolExpr(e.BoolExpr);let t=Object.keys(e)[0];throw new R({[t]:e},`deparseValue: ${t}`)}A_Expr(e){if(e.kind==="AEXPR_OP"){let t=e.name?.[0],n=t?te(t):void 0;if(!n)throw new R({A_Expr:e},"A_Expr missing operator");let r=this.isJwtAccessor(e);if(r)return {[r]:{}};let s=e.lexpr?this.deparseValue(e.lexpr):void 0,o=e.rexpr?this.deparseValue(e.rexpr):void 0,a=this.mapOperator(n);if(!a)throw new R({A_Expr:e},`Unsupported operator: ${n}`);let l=e.rexpr!=null&&"ColumnRef"in e.rexpr;if(typeof s=="string"&&s.startsWith("{{")&&l)return {[o]:{[a]:s}};let u=l&&typeof o=="string"?{$ref:o}:o;return {[s]:{[a]:u}}}if(e.kind==="AEXPR_LIKE"||e.kind==="AEXPR_ILIKE"){let t=e.lexpr?this.deparseValue(e.lexpr):void 0,n=e.rexpr?this.deparseValue(e.rexpr):void 0,s=(e.name?.[0]?te(e.name[0]):"~~")==="!~~"?"$notLike":"$like";return {[t]:{[s]:n}}}if(e.kind==="AEXPR_IN"){let t=e.lexpr?this.deparseValue(e.lexpr):void 0,n=e.rexpr&&"List"in e.rexpr&&e.rexpr.List.items?e.rexpr.List.items.map(r=>this.deparseValue(r)):[];return {[t]:{$in:n}}}throw new R({A_Expr:e},`A_Expr kind: ${e.kind}`)}BoolExpr(e){let t=e.args??[];switch(e.boolop){case "AND_EXPR":return {$and:t.map(n=>this.deparse(n))};case "OR_EXPR":return {$or:t.map(n=>this.deparse(n))};case "NOT_EXPR":return {$not:this.deparse(t[0])};default:throw new R({BoolExpr:e},`BoolExpr op: ${e.boolop}`)}}NullTest(e){let t=e.arg?this.deparseValue(e.arg):void 0;return e.nulltesttype==="IS_NULL"?{[t]:{$is:null}}:{[t]:{$isNot:null}}}SubLink(e){if(e.subLinkType==="ANY_SUBLINK"){let t=e.testexpr?this.deparseValue(e.testexpr):void 0,n=e.subselect?this.SelectStmt(e.subselect.SelectStmt):void 0;return {[t]:{$in:n}}}if(e.subLinkType==="EXISTS_SUBLINK")return {$exists:e.subselect?this.SelectStmt(e.subselect.SelectStmt):void 0};if(e.subLinkType==="EXPR_SUBLINK"){let t=e.subselect?e.subselect.SelectStmt:void 0;if(t?.fromClause?.length)return this.SelectStmt(t);if(t?.targetList?.[0]){let n=t.targetList[0],r="ResTarget"in n?n.ResTarget:void 0;if(r?.val){let s=this.deparseValue(r.val);return s}}}throw new R({SubLink:e},`SubLink type: ${e.subLinkType}`)}SelectStmt(e){let{from:t,schema:n,join:r}=this.deparseFromClause(e.fromClause??[]),s=[];for(let d of e.targetList??[]){let E="ResTarget"in d?d.ResTarget:void 0;if(E?.val){let y=this.deparseValue(E.val);Array.isArray(y)?s.push(...y.map(String)):y!=null&&y!==""&&s.push(String(y));}}let o=e.whereClause?this.deparse(e.whereClause):void 0,a=this.deparseSortClause(e.sortClause),l=this.deparseLimit(e.limitCount),u=this.deparseLimit(e.limitOffset),p=this.deparseGroupClause(e.groupClause),c={type:"query",from:t,select:s};return n&&(c.schema=n),Object.keys(r).length>0&&(c.join=r),o&&(c.where=o),a.length>0&&(c.order=a),l!==void 0&&(c.limit=l),u!==void 0&&(c.offset=u),p.length>0&&(c.group=p),c}FuncCall(e){let t=this.isAuthFunc(e.funcname??[]);if(t)return t;throw new R({FuncCall:e},`FuncCall: ${F(e.funcname??[]).join(".")}`)}ColumnRef(e){let t=F(e.fields??[]);return t.length===1?t[0]:t.join(".")}A_Const(e){if(e.boolval!==void 0)return e.boolval.boolval;if(e.ival!==void 0)return e.ival.ival??0;if(e.fval!==void 0)return parseFloat(e.fval.fval??"0");if(e.sval!==void 0)return e.sval.sval??"";if(e.isnull)return null;throw new R({A_Const:e},"A_Const: unknown variant")}TypeCast(e){if(!e.arg)throw new R({TypeCast:e},"TypeCast: missing arg");return this.deparseValue(e.arg)}BooleanTest(e){let t=e.arg?this.deparseValue(e.arg):void 0;return e.booltesttype==="IS_TRUE"?{[t]:{$eq:true}}:{[t]:{$eq:false}}}deparseFromClause(e){let t={};if(e.length===0)return {from:"",join:t};let n=e[0];if("RangeVar"in n){let r=n.RangeVar;return {from:r.relname??"",schema:r.schemaname,join:t}}if("JoinExpr"in n){let{from:r,schema:s}=this.walkJoinExpr(n.JoinExpr,t);return {from:r,schema:s,join:t}}return {from:"",join:t}}walkJoinExpr(e,t){let n={from:""};if(e.larg)if("RangeVar"in e.larg){let r=e.larg.RangeVar;n={from:r.relname??"",schema:r.schemaname};}else "JoinExpr"in e.larg&&(n=this.walkJoinExpr(e.larg.JoinExpr,t));if(e.rarg&&"RangeVar"in e.rarg){let r=e.rarg.RangeVar,s=r.relname??"",o=r.alias?.aliasname??s,a=e.jointype==="JOIN_LEFT"?"left":"inner",l={from:s,type:a};e.quals&&(l.on=this.deparse(e.quals));let u=o;if(u in t){let p=2;for(;`${u}_${p}`in t;)p++;u=`${u}_${p}`;}t[u]=l;}return n}deparseSortClause(e){if(!e)return [];let t=[];for(let n of e){if(!("SortBy"in n))continue;let r=n.SortBy;if(!r.node)continue;let s=String(this.deparseValue(r.node)),o=r.sortby_dir==="SORTBY_DESC"?"desc":"asc",a={column:s,direction:o};r.sortby_nulls==="SORTBY_NULLS_FIRST"?a.nullsFirst=true:r.sortby_nulls==="SORTBY_NULLS_LAST"&&(a.nullsFirst=false),t.push(a);}return t}deparseLimit(e){if(!e)return;let t=this.deparseValue(e);return typeof t=="number"?t:Number(t)}deparseGroupClause(e){return e?e.map(t=>String(this.deparseValue(t))):[]}isAuthFunc(e){let t=F(e);if(t.length===2&&t[0]==="auth"){if(t[1]==="uid")return "{{auth.uid}}";if(t[1]==="jwt")return "{{auth.jwt}}";if(t[1]==="role")return "{{auth.role}}";throw new Error(`Unsupported auth function: "${t.slice(1).join(".")}"`)}return null}isJwtAccessor(e){if(e.kind!=="AEXPR_OP")return null;let t=e.name?.[0]?te(e.name[0]):void 0;if(t!=="->"&&t!=="->>")return null;let n=e.rexpr&&"A_Const"in e.rexpr?e.rexpr.A_Const.sval?.sval:void 0;if(n===void 0)return null;if(e.lexpr&&"FuncCall"in e.lexpr)return this.isAuthFunc(e.lexpr.FuncCall.funcname??[])==="{{auth.jwt}}"?`{{auth.jwt.${n}}}`:null;if(e.lexpr&&"A_Expr"in e.lexpr){let r=this.isJwtAccessor(e.lexpr.A_Expr);if(r)return `${r.slice(0,-2)}.${n}}}`}return null}mapOperator(e){switch(e){case "=":return "$eq";case "<>":case "!=":return "$neq";case ">":return "$gt";case ">=":return "$gte";case "<":return "$lt";case "<=":return "$lte";case "~~":return "$like";case "!~~":return "$notLike";default:return}}};});var ge,Xt=g(()=>{ge=class{table;schema;fields;constructor(e,t="public",n=new Map){this.table=e,this.schema=t,this.fields=n;}get(e){return this.fields.get(e)}has(e){return this.fields.has(e)}set(e,t){this.fields.set(e,t);}columns(){return Array.from(this.fields.keys())}all(){return Array.from(this.fields.values())}serializeRow(e){let t={};for(let[n,r]of Object.entries(e)){let s=this.fields.get(n);t[n]=s?s.serialize(r):r;}return t}deserializeRow(e){let t={};for(let[n,r]of Object.entries(e)){let s=this.fields.get(n);t[n]=s?s.deserialize(r):r;}return t}applyDefaults(e){let t={...e};for(let[n,r]of this.fields)!(n in t)&&r.context.defaultFn&&(t[n]=r.context.defaultFn());return t}};});var zt=g(()=>{O();Qe();De();Je();Ye();A();Xe();ze();He();Ze();et();tt();nt();rt();st();it();ot();at();lt();ut();Xt();});function Zt(i){let e=new Map;for(let t of i.stmts??[]){if(!t.stmt||!("CreateEnumStmt"in t.stmt))continue;let n=t.stmt.CreateEnumStmt,r=F(n.typeName??[]).join(".");if(!r||!n.vals)continue;let s=F(n.vals);e.set(r.toLowerCase(),s);}return e}function en(i){let e=new Map;for(let t of i.stmts??[]){if(!t.stmt||!("VariableSetStmt"in t.stmt))continue;let n=t.stmt.VariableSetStmt,r=n.name,s=Ut(n.args?.[0]??{});e.set(r,{value:s,local:n.is_local});}return e}function tn(i){let e=new W,t=new Set,n=[];for(let r of i.stmts??[])if(r.stmt){if("CreatePolicyStmt"in r.stmt){let s=r.stmt.CreatePolicyStmt,o=s.table?.relname??"",a=s.table?.schemaname,l={select:"SELECT",insert:"INSERT",update:"UPDATE",delete:"DELETE"},u=s.cmd_name?l[s.cmd_name]??"ALL":"ALL",p=s.permissive===true,c=[],d=false;for(let T of s.roles??[])if("RoleSpec"in T){let f=T.RoleSpec;f.roletype==="ROLESPEC_PUBLIC"?f.location===-1&&(d=true):f.roletype==="ROLESPEC_CSTRING"&&f.rolename&&c.push(f.rolename);}if(d){let T=a?`${a}.${o}`:o,f=s.policy_name??"",C=`${T}::${f}`;Ht.has(C)||(Ht.add(C),console.warn(`[supalite] policy "${f}" on "${T}" has no TO clause \u2014 applies to all roles (PUBLIC). For clarity, prefer an explicit \`TO <role>\` clause (e.g. \`TO authenticated\`).`));}let E=s.qual?e.deparse(s.qual):void 0,y=s.with_check?e.deparse(s.with_check):void 0,m=new L({name:s.policy_name??"",table:o,schema:a,command:u,permissive:p,roles:c,using:E,withCheck:y});n.push(m);}if("AlterTableStmt"in r.stmt){let s=r.stmt.AlterTableStmt;if((s.cmds??[]).some(l=>"AlterTableCmd"in l&&(l.AlterTableCmd.subtype==="AT_EnableRowSecurity"||l.AlterTableCmd.subtype==="AT_ForceRowSecurity"))){let l=s.relation?.relname??"";t.add(l);}}}return {policies:n,tables:t}}function nn(i,e){let t=new Map;for(let n of i.stmts??[]){if(!n.stmt||!("CreateStmt"in n.stmt))continue;let r=n.stmt.CreateStmt,s=r.relation?.relname??"",o=r.relation?.schemaname??"public";if(!s)continue;let a=new ge(s,o);for(let l of r.tableElts??[]){if(!("ColumnDef"in l))continue;let u=l.ColumnDef,p=u.colname;if(!p)continue;let c=u.typeName?.names?.map(b=>b.String?.sval||b.String?.str).filter(Boolean),d=c&&(c.length===2&&c[0]==="pg_catalog"?c[1]:c[0]);if(!d)continue;let E=!!u.typeName?.arrayBounds?.length,y=Array.isArray(u.typeName?.typmods)?u.typeName.typmods:[],m=b=>y[b]?.A_Const?.ival?.ival??y[b]?.A_Const?.val?.ival?.ival,T={isArray:E};if(Ae(d)&&y.length>0){let b=m(0);typeof b=="number"&&b>0&&(T.lengthConstraint=b);}if(ke(d)&&y.length>=2){let b=m(0),V=m(1);typeof b=="number"&&typeof V=="number"&&b>0&&V>=0&&(T.numericPrecision={precision:b,scale:V});}let f=e.get(d.toLowerCase());f&&(T.enumValues=f);let C=Array.isArray(u.constraints)?u.constraints:[],N=C.some(b=>b.Constraint?.contype==="CONSTR_PRIMARY"),w=Re(d)||C.some(b=>b.Constraint?.contype==="CONSTR_IDENTITY"),k=C.some(b=>b.Constraint?.contype==="CONSTR_NOTNULL"),I=C.find(b=>b.Constraint?.contype==="CONSTR_UNIQUE"),P=C.find(b=>b.Constraint?.contype==="CONSTR_GENERATED"),gt=C.find(b=>b.Constraint?.contype==="CONSTR_FOREIGN"),yt=C.find(b=>b.Constraint?.contype==="CONSTR_CHECK"),St;if(gt){let b=gt.Constraint,V=b.pktable?.relname,mn=b.pktable?.schemaname,Et=b.pk_attrs?.[0]?.String?.sval;V&&Et&&(St={refSchema:mn,refTable:V,refColumn:Et,constraintName:b.conname||void 0});}let fn={schema:o,table:s,column:p,pgTypeName:d,nullable:!k&&!N,defaultValue:null,defaultFn:null,isPrimaryKey:N,isUnique:!!I,isSerial:w,isGenerated:!!P,fkRef:St,hasCheck:!!yt,checkConstraintName:yt?.Constraint?.conname||void 0,uniqueConstraintName:I?.Constraint?.conname||void 0};a.set(p,M(fn,T));}t.set(`${o}.${s}`,a);}return t}function rn(i){let e=[];for(let t of i.stmts??[]){if(!t.stmt||!("CreateStmt"in t.stmt))continue;let n=t.stmt.CreateStmt,r=n.relation?.relname??"",s=n.relation?.schemaname??"public";if(r)for(let o of n.tableElts??[]){if("ColumnDef"in o)continue;let a=o;if(!a.Constraint)continue;let l=a.Constraint,u=l.contype;if(u==="CONSTR_UNIQUE"){let p=(l.keys??[]).map(c=>c.String?.sval??c.String?.str).filter(Boolean);if(p.length===0)continue;e.push({schema:s,table:r,kind:"unique",name:l.conname||void 0,columns:p});}else if(u==="CONSTR_CHECK")e.push({schema:s,table:r,kind:"check",name:l.conname||void 0,columns:[]});else if(u==="CONSTR_FOREIGN"){let p=(l.fk_attrs??[]).map(E=>E.String?.sval??E.String?.str).filter(Boolean),c=(l.pk_attrs??[]).map(E=>E.String?.sval??E.String?.str).filter(Boolean),d=l.pktable?.relname;if(!d)continue;e.push({schema:s,table:r,kind:"foreign_key",name:l.conname||void 0,columns:p,refSchema:l.pktable?.schemaname,refTable:d,refColumns:c});}}}return e}function sn(i){let e=[];for(let t of i.stmts??[]){if(!t.stmt||!("CommentStmt"in t.stmt))continue;let n=t.stmt.CommentStmt,r=n.comment??"";if(!r)continue;let s=n.objtype,o=(n.object?.List?.items??n.object?.items??[]).map(a=>a.String?.sval??a.String?.str).filter(Boolean);if(o.length!==0){if(s==="OBJECT_TABLE"||s==="OBJECT_VIEW"){let[a,l]=o.length>=2?o:["public",o[0]];e.push({schema:a,table:l,text:r});}else if(s==="OBJECT_COLUMN"){let a="public",l,u;o.length>=3?[a,l,u]=o:[l,u]=o,e.push({schema:a,table:l,column:u,text:r});}}}return e}var Ht,on=g(()=>{pt();U();be();zt();X();Ht=new Set;});var ln={};hn(ln,{Policy:()=>L,deparseDdl:()=>ft,deparseExpression:()=>Sr,deparsePostgresDdl:()=>yr,deparseSelect:()=>Er,parse:()=>J,parseExpression:()=>an,translatePostgresDdl:()=>gr});async function gr(i,e={}){let t=await J(i);return ft(t,e).ddl}async function yr(i,e={}){let t=await J(i);return {ast:t,...ft(t,e)}}function ft(i,e={}){let t=Zt(i),n=nn(i,t),r=en(i),s=rn(i),o=sn(i),a=new Pe(i,{...e,enums:t}),{policies:l,tables:u}=tn(i);if(e.strict)for(let p of l){if(!n.get(`${p.data.schema??"public"}.${p.data.table}`))throw new Error(`Policy "${p.data.name}" references unknown table "${p.data.table}"`);if(!u.has(p.data.table))throw new Error(`RLS is not enabled on table "${p.data.table}"`)}return {ddl:a.deparseQuery(),enums:t,rls:{tables:u,policies:l},schema:n,vars:r,tableConstraints:s,comments:o}}async function an(i){let t=(await J(`SELECT 1 WHERE ${i}`)).stmts?.[0]?.stmt;if(!t||!("SelectStmt"in t))throw new Error("expected SelectStmt");let n=t.SelectStmt.whereClause;if(!n)throw new Error("no whereClause");return n}async function Sr(i){let e=await an(i);return new W().deparse(e)}async function Er(i){let t=(await J(i)).stmts?.[0]?.stmt;if(!t||!("SelectStmt"in t))throw new Error("expected SelectStmt");return new W().deparse(t)}var cn=g(()=>{qt();Yt();pt();on();be();});Me();var Sn=(i={})=>{let e=(t="m")=>[...i.exclude_tables??[],"sqlite_%"].map(n=>n.includes("%")?`${t}.name NOT LIKE '${n}'`:`${t}.name != '${n}'`).join(" AND ");return `WITH table_info AS (SELECT
|
|
49
18
|
json_group_array(
|
|
50
19
|
json_object(
|
|
51
20
|
'name', m.name,
|
|
@@ -58,7 +27,7 @@ var Ws=Object.create;var xt=Object.defineProperty;var Js=Object.getOwnPropertyDe
|
|
|
58
27
|
)
|
|
59
28
|
) AS data
|
|
60
29
|
FROM sqlite_master m
|
|
61
|
-
WHERE m.type IN ('table', 'view') AND ${
|
|
30
|
+
WHERE m.type IN ('table', 'view') AND ${e()}),
|
|
62
31
|
column_info AS (SELECT
|
|
63
32
|
json_group_array(
|
|
64
33
|
json_object(
|
|
@@ -130,7 +99,7 @@ var Ws=Object.create;var xt=Object.defineProperty;var Js=Object.getOwnPropertyDe
|
|
|
130
99
|
) AS data
|
|
131
100
|
FROM sqlite_master m
|
|
132
101
|
JOIN pragma_table_xinfo(m.name) p
|
|
133
|
-
ON m.type IN ('table', 'view') AND ${
|
|
102
|
+
ON m.type IN ('table', 'view') AND ${e()}
|
|
134
103
|
WHERE p.hidden != 1),
|
|
135
104
|
index_info AS (SELECT
|
|
136
105
|
json_group_array(
|
|
@@ -151,7 +120,7 @@ var Ws=Object.create;var xt=Object.defineProperty;var Js=Object.getOwnPropertyDe
|
|
|
151
120
|
json_group_array(ic.name ORDER BY ic.seqno) AS cols
|
|
152
121
|
FROM sqlite_master m
|
|
153
122
|
JOIN pragma_index_list(m.name) idx
|
|
154
|
-
ON m.type = 'table' AND ${
|
|
123
|
+
ON m.type = 'table' AND ${e()}
|
|
155
124
|
JOIN pragma_index_info(idx.name) ic
|
|
156
125
|
-- only include explicit CREATE INDEX objects; skip autoindexes from PK/UNIQUE constraints
|
|
157
126
|
WHERE idx.origin = 'c' AND idx.name NOT LIKE 'sqlite_autoindex_%'
|
|
@@ -177,7 +146,7 @@ var Ws=Object.create;var xt=Object.defineProperty;var Js=Object.getOwnPropertyDe
|
|
|
177
146
|
) AS data
|
|
178
147
|
FROM sqlite_master m
|
|
179
148
|
JOIN pragma_foreign_key_list(m.name) fk
|
|
180
|
-
ON m.type = 'table' AND ${
|
|
149
|
+
ON m.type = 'table' AND ${e()}),
|
|
181
150
|
pk_info AS (SELECT
|
|
182
151
|
json_group_array(
|
|
183
152
|
json_object(
|
|
@@ -193,14 +162,14 @@ var Ws=Object.create;var xt=Object.defineProperty;var Js=Object.getOwnPropertyDe
|
|
|
193
162
|
COUNT(p.name) AS field_count
|
|
194
163
|
FROM sqlite_master m
|
|
195
164
|
JOIN pragma_table_info(m.name) p
|
|
196
|
-
ON m.type = 'table' AND ${
|
|
165
|
+
ON m.type = 'table' AND ${e()} AND p.pk > 0
|
|
197
166
|
GROUP BY m.name) pk),
|
|
198
167
|
view_info AS (SELECT
|
|
199
168
|
json_group_array(
|
|
200
169
|
json_object('name', m.name, 'sql', m.sql, 'schema', '')
|
|
201
170
|
) AS data
|
|
202
171
|
FROM sqlite_master m
|
|
203
|
-
WHERE m.type = 'view' AND ${
|
|
172
|
+
WHERE m.type = 'view' AND ${e()}),
|
|
204
173
|
trigger_info AS (SELECT
|
|
205
174
|
json_group_array(
|
|
206
175
|
json_object(
|
|
@@ -211,7 +180,7 @@ var Ws=Object.create;var xt=Object.defineProperty;var Js=Object.getOwnPropertyDe
|
|
|
211
180
|
)
|
|
212
181
|
) AS data
|
|
213
182
|
FROM sqlite_master m
|
|
214
|
-
WHERE m.type = 'trigger' AND ${
|
|
183
|
+
WHERE m.type = 'trigger' AND ${e("m")}),
|
|
215
184
|
unique_info AS (SELECT
|
|
216
185
|
json_group_array(
|
|
217
186
|
json_object(
|
|
@@ -227,7 +196,7 @@ var Ws=Object.create;var xt=Object.defineProperty;var Js=Object.getOwnPropertyDe
|
|
|
227
196
|
json_group_array(ic.name ORDER BY ic.seqno) AS cols
|
|
228
197
|
FROM sqlite_master m
|
|
229
198
|
JOIN pragma_index_list(m.name) idx
|
|
230
|
-
ON m.type = 'table' AND ${
|
|
199
|
+
ON m.type = 'table' AND ${e()}
|
|
231
200
|
JOIN pragma_index_info(idx.name) ic
|
|
232
201
|
WHERE idx.origin = 'u'
|
|
233
202
|
GROUP BY m.name, idx.name) uc)
|
|
@@ -240,8 +209,8 @@ var Ws=Object.create;var xt=Object.defineProperty;var Js=Object.getOwnPropertyDe
|
|
|
240
209
|
(SELECT data FROM view_info) AS views,
|
|
241
210
|
(SELECT data FROM trigger_info) AS triggers,
|
|
242
211
|
(SELECT data FROM unique_info) AS unique_constraints,
|
|
243
|
-
${
|
|
244
|
-
${o.version?`'${o.version}'`:"sqlite_version()"} AS version;`};function j(o){if(!o)return [];try{return Array.isArray(o)?o:JSON.parse(o)}catch{return []}}async function He(o,t={}){let e=(await o.exec(Zs(t)))?.rows?.[0]||{};return {tables:j(e.tables),columns:j(e.columns),indexes:j(e.indexes),foreign_keys:j(e.foreign_keys),primary_keys:j(e.primary_keys),views:j(e.views),triggers:j(e.triggers),check_constraints:[],unique_constraints:j(e.unique_constraints),comments:[],custom_types:[],database_name:e.database_name??"sqlite",version:e.version??""}}var ai=new Set(["AlterTableNode","CreateIndexNode","CreateSchemaNode","CreateTableNode","CreateTypeNode","CreateViewNode","RefreshMaterializedViewNode","DeleteQueryNode","DropIndexNode","DropSchemaNode","DropTableNode","DropTypeNode","DropViewNode","InsertQueryNode","RawNode","SelectQueryNode","UpdateQueryNode","MergeQueryNode"]),Zt=class extends OperationNodeTransformer{constructor(s){super();this.config=s;}#e=new Set;#s=new Set;transformNodeImpl(s,e){if(!ai.has(s.kind))return super.transformNodeImpl(s,e);let i=this.#n(s);for(let n of i)this.#s.add(n);let r=this.#r(s);for(let n of r)this.#e.add(n);try{return super.transformNodeImpl(s,e)}finally{for(let n of r)this.#e.delete(n);for(let n of i)this.#s.delete(n);}}transformSchemableIdentifier(s,e){let i=s.identifier.name,r=s.schema?.name,n=!r&&this.config.appendDefaultSchema&&this.config.defaultSchema&&!this.#s.has(i)&&this.#e.has(i),a=r??(n?this.config.defaultSchema:void 0);if(!a)return {kind:"SchemableIdentifierNode",schema:void 0,identifier:{kind:"IdentifierNode",name:i}};let u=this.config.approach==="snake_case"?"__":".";return {kind:"SchemableIdentifierNode",schema:void 0,identifier:{kind:"IdentifierNode",name:`${a}${u}${i}`}}}#r(s){let e=new Set;if(s?.name&&SchemableIdentifierNode.is(s.name)&&this.#i(s.name,e),s?.from?.froms)for(let i of s.from.froms)this.#t(i,e);if(s?.into&&this.#t(s.into,e),s?.table&&this.#t(s.table,e),s?.joins)for(let i of s.joins)this.#t(i.table,e);return s?.using&&(JoinNode.is(s.using)?this.#t(s.using.table,e):this.#t(s.using,e)),e}#t(s,e){if(TableNode.is(s)){this.#i(s.table,e);return}if(AliasNode.is(s)&&TableNode.is(s.node)){this.#i(s.node.table,e);return}if(ListNode.is(s)){for(let i of s.items)this.#t(i,e);return}if(UsingNode.is(s))for(let i of s.tables)this.#t(i,e);}#i(s,e){let i=s.identifier.name;this.#s.has(i)||e.add(i);}#n(s){let e=new Set;if(s?.with?.expressions)for(let i of s.with.expressions){let r=i?.name?.table?.table?.identifier?.name;r&&e.add(r);}return e}},It=class{#e;constructor(t){this.#e=new Zt(t);}transformQuery(t){return this.#e.transformNode(t.node)}async transformResult(t){return t.result}};Lt();te();se();function at(o){return o==="migrations"||o==="supabase_migrations.schema_migrations"||o==="supabase_migrations.seed_files"}function Ke(o){return {...o,tables:o.tables.filter(t=>!at(t.name)),columns:o.columns.filter(t=>!at(t.table)),indexes:o.indexes.filter(t=>!at(t.table)),foreign_keys:o.foreign_keys.filter(t=>!at(t.table)),primary_keys:o.primary_keys.filter(t=>!at(t.table))}}var _t=class{constructor(t,s,e={}){this.conn=t;this.desiredSchema=s;this.options=e;this.differ=new X,this.planner=new K;}differ;planner;translationResult;async getDesiredSchema(){let t=await this.conn.translateDdl(this.desiredSchema);return this.translationResult=t,await this.options.onTranslation?.(t),t.ddl}async diff(){let t=await this.conn.introspect({postprocess:false}),s=await this.getDesiredSchema();if(!s||s.trim().length===0)return {current:t,desired:t,diff:{tables:[],columns:[],indexes:[],foreign_keys:[],has_changes:false},plan:{steps:[],warnings:[],unsafe:false}};let{createConnection:e}=await import('@supabase/lite/sqlite'),i=await e({url:":memory:"});try{await i.exec(s);let r=await i.introspect({postprocess:!1}),n=Ke(t),a=Ke(r),u=this.differ.diff(n,a),l=this.planner.plan(u,n,a);return {current:t,desired:r,diff:u,plan:l}}finally{await i.close();}}safeSortPlanSteps(t){return invariant(Array.isArray(t),"steps must be an array"),t.sort((s,e)=>{let i=r=>r===PlanStepType.DROP_COLUMN?1:r===PlanStepType.DROP_TABLE?2:r===PlanStepType.RENAME_TABLE?3:0;return i(s.type)-i(e.type)})}async migratePlan(t,s){if(t.steps.length===0)return;if(t.unsafe&&!s?.force)throw new DataLossError(t.warnings??[]);let e=this.safeSortPlanSteps(t.steps).filter(i=>![PlanStepType.DISABLE_FOREIGN_KEYS,PlanStepType.BEGIN_TRANSACTION,PlanStepType.COMMIT_TRANSACTION,PlanStepType.ENABLE_FOREIGN_KEYS].includes(i.type));await this.conn.transaction(e.map(i=>i.sql),{intent:"migration"});}async migrate(t){let s=await this.diff();return await this.migratePlan(s.plan,t),s}};yt();var ze=/^\{\{(.+)\}\}$/;function Ze(o){return typeof o=="string"&&ze.test(o)}function ci(o){return ze.exec(o)[1]}var Qe=Symbol("unresolved");function ts(o,t){let s=ci(o),e=nt(t,s,Qe);if(e===Qe)throw new Error(`Unresolved variable: {{${s}}}`);return e}function P(o,t){let s={};for(let[e,i]of Object.entries(o)){if(e==="$or"||e==="$and"){s[e]=i.map(r=>P(r,t));continue}if(e==="$not"){s[e]=P(i,t);continue}if(e==="$always"){s[e]=i;continue}if(e==="$exists"){let r=i;s[e]={...r,where:r?.where?P(r.where,t):r?.where};continue}if(Ze(e)){let r=ts(e,t),a=hi(r,i);s.$always=a;continue}if(i!=null&&typeof i=="object"&&!Array.isArray(i)){s[e]=es(i,t);continue}s[e]=i;}return s}function es(o,t){let s={};for(let[e,i]of Object.entries(o))e==="$not"&&i!=null&&typeof i=="object"?s[e]=es(i,t):fi(i)?s[e]={...i,where:i?.where?P(i?.where,t):void 0}:Ze(i)?s[e]=ts(i,t):s[e]=i;return s}function fi(o){return o!=null&&typeof o=="object"&&o.type==="query"}function hi(o,t){for(let[s,e]of Object.entries(t))switch(s){case "$eq":if(o!==e)return false;break;case "$neq":if(o===e)return false;break;case "$in":if(!Array.isArray(e)||!e.includes(o))return false;break;case "$notIn":if(Array.isArray(e)&&e.includes(o))return false;break;default:throw new Error(`Cannot statically evaluate operator ${s} on placeholder key`)}return true}yt();var wt=class extends Error{constructor(s){super(`new row violates row-level security policy for table "${s.data.table}"`);this.policy=s;this.name="PolicyViolation";}};var dt=class{constructor(t,s,e){this.tables=t;this.policies=s;this.defaultSchema=e;}enforce(t,s){let e=t.from;if(!e||!this.isRlsEnabled(e,t.schema))return t;let i=mi(t.type);if(!i)return t;let r=nt(s,"auth.role")??"anon",{permissive:n,restrictive:a}=this.resolvePolicies(e,t.schema,i,r);switch(i){case "SELECT":case "DELETE":{let u=this.combineUsing(n,a,s);return {...t,where:ss(t.where,u)}}case "UPDATE":{let u=this.combineUsing(n,a,s),l={...t,where:ss(t.where,u)};if(u.$always===false)return l;let p=this.combineWithCheck(n,a,s,i);if(t.values&&Object.keys(p).length>0){let f=new Set(Object.keys(t.values));this.validateWithCheck(p,t.values,n,a,f);}return l}case "INSERT":{let u=this.combineWithCheck(n,a,s,i);if(t.values){let l=Array.isArray(t.values)?t.values:[t.values];for(let p of l)this.validateWithCheck(u,p,n,a);}return t}default:return t}}isRlsEnabled(t,s){return this.tables.has(t)}resolvePolicies(t,s,e,i){let r=this.policies.filter(n=>n.data.table===t&&this.schemasMatch(n.data.schema,s)&&n.appliesTo(e)&&n.appliesToRole(i));return {permissive:r.filter(n=>n.data.permissive),restrictive:r.filter(n=>!n.data.permissive)}}schemasMatch(t,s){let e=t||this.defaultSchema,i=s||this.defaultSchema;return e===i}combineUsing(t,s,e){if(t.length===0)return {$always:false};let i=t.map(n=>n.data.using).filter(n=>n!=null&&Object.keys(n).length>0).map(n=>P(n,e)),r;i.length===0?r={}:i.length===1?r=i[0]:r={$or:i};for(let n of s)if(n.data.using&&Object.keys(n.data.using).length>0){let a=P(n.data.using,e);r=Object.keys(r).length===0?a:{$and:[r,a]};}return r}combineWithCheck(t,s,e,i){if(t.length===0)return {$always:false};let r=t.map(a=>a.data.withCheck??(i==="UPDATE"?a.data.using:void 0)).filter(a=>a!=null&&Object.keys(a).length>0).map(a=>P(a,e)),n;r.length===0?n={}:r.length===1?n=r[0]:n={$or:r};for(let a of s){let u=a.data.withCheck??(i==="UPDATE"?a.data.using:void 0);if(u&&Object.keys(u).length>0){let l=P(u,e);n=Object.keys(n).length===0?l:{$and:[n,l]};}}return n}validateWithCheck(t,s,e,i,r){if(Object.keys(t).length===0)return;if(!vt(t,s,r)){let a=e[0]??i[0];throw a?new wt(a):new Error("RLS policy violation")}}};function mi(o){switch(o){case "query":return "SELECT";case "insert":case "upsert":case "put":return "INSERT";case "update":return "UPDATE";case "delete":return "DELETE";default:return}}function ss(o,t){return !o||Object.keys(o).length===0?t:Object.keys(t).length===0?o:{$and:[o,t]}}function vt(o,t,s){for(let[e,i]of Object.entries(o)){if(e==="$always"){if(i===false)return false;continue}if(e==="$and"){if(!i.every(u=>vt(u,t,s)))return false;continue}if(e==="$or"){if(!i.some(u=>vt(u,t,s)))return false;continue}if(e==="$not"){if(vt(i,t,s))return false;continue}if(s&&!s.has(e))continue;let r=i,n=t[e];for(let[a,u]of Object.entries(r))if(!Ei(n,a,u))return false}return true}function Ei(o,t,s){switch(t){case "$eq":return o===s;case "$neq":return o!==s;case "$gt":return o>s;case "$gte":return o>=s;case "$lt":return o<s;case "$lte":return o<=s;case "$in":return Array.isArray(s)&&s.includes(o);case "$notIn":return !Array.isArray(s)||!s.includes(o);case "$is":return o===s;case "$isNot":return o!==s;default:throw new Error(`Cannot evaluate operator "${t}" client-side for WITH CHECK`)}}var Dt=class{transformQuery(t){return t.node}transformResult(t){return t.result.rows?Promise.resolve({...t.result,rows:t.result.rows.map(s=>{let e={};for(let i in s){let r=s[i];if(typeof r=="string"&&(r[0]==="{"||r[0]==="["))try{e[i]=JSON.parse(r);}catch{e[i]=r;}else e[i]=r;}return e})}):Promise.resolve(t.result)}};function is(o){let t={};for(let s in o){let e=o[s];if(typeof e=="string"&&(e[0]==="["||e[0]==="{"))try{t[s]=JSON.parse(e);}catch{t[s]=e;}else t[s]=e;}return t}var Y=class o extends Connection{dialect="sqlite";deserializeRow(t){return this.config.ddlDialect==="postgres"?is(t):t}constructor(t={}){super({...t,translation:{...t.translation,schemas:{appendDefaultSchema:false,approach:"quote",defaultSchema:"public",...t.translation?.schemas},deparse:o.parseDeparseInfo(t.translation?.deparse)},introspection:{name:"sqlite",...t.introspection,exclude_tables:Array.from(new Set([...t.introspection?.exclude_tables??[],"sqlite_%","supabase_migrations.%","migrations"]))}});}static parseDeparseInfo(t){try{if(typeof t!="object"||t===null)return {};let s=t?.rls?.tables instanceof Set?t.rls.tables:new Set(t.rls?.tables??[]),e=t?.rls?.policies.map(r=>new $(JSON.parse(JSON.stringify(r)))),i=t?.vars instanceof Map?t.vars:new Map(Object.entries(t.vars??{}));return {rls:{tables:s,policies:e},vars:i}}catch(s){return console.log("error parsing deparse info",s),{}}}updateDeparseInfo(t){this.config.translation={...this.config.translation,deparse:t};}withSqlitePlugins(t=[]){let s=[];return this.config.ddlDialect==="sqlite"&&s.push(new Dt),s.push(new It(Yt({appendDefaultSchema:false,approach:"quote",defaultSchema:"public"},{...this.config.translation?.schemas}))),[...s,...t]}async translateDdl(t){if(t.trim().length===0)return {ddl:t};if(this.config.ddlDialect==="sqlite")return {ddl:t};let s=this.config.translation?.schemas?.defaultSchema&&this.config.translation?.schemas?.appendDefaultSchema?this.config.translation?.schemas?.defaultSchema:false,e=await this.introspect({postprocess:false}).catch(()=>{}),{deparsePostgresDdl:i}=await Promise.resolve().then(()=>(Bs(),Fs));return await i(t,{forceDefaultSchema:s,introspection:e,schemaHandling:this.config.translation?.schemas?.approach==="snake_case"?"prefix":"default"})}async introspect(t){Ge(typeof t=="object"||t===void 0,"options must be an object");let s=t?.useCache??false;if(t?.postprocess!==false){let r=await this.readCachedIntrospection({useCache:s});if(r)return r}let e=await He(this,this.config.introspection),i=this.config.translation?.schemas?.approach==="snake_case"?"__":".";if(this.config.ddlDialect==="postgres"&&t?.postprocess!==false){let r=this.config.translation?.schemas?.defaultSchema??this.config.translation?.schemas?.appendDefaultSchema?"public":void 0,n=(u="table")=>l=>{let p=l[u],f=l.schema??r;return !f&&r&&p.includes(i)&&([f,p]=p.split(i)),{...l,[u]:p,schema:f??r}},a=u=>{let l=n()(u),p=l.ref_table,f=l.ref_schema??r;return p?.includes(i)&&([f,p]=p.split(i)),{...l,ref_table:p,ref_schema:f??r}};e={...e,tables:e.tables.map(n("name")),columns:e.columns.map(n()),indexes:e.indexes.map(n()),primary_keys:e.primary_keys.map(n()),foreign_keys:e.foreign_keys.map(a),views:e.views.map(n("name")),check_constraints:e.check_constraints.map(n("table"))};}return this.config.ddlDialect==="postgres"&&t?.postprocess!==false&&(e=this.mergeDeparseMetadata(e)),e=this.markForeignKeyVisibility(e),e={...e,ddl_dialect:this.config.ddlDialect??"postgres",schema_separator:i},t?.postprocess!==false&&await this.writeCachedIntrospection(e,{useDriver:s}),e}async transaction(t,s){s?.intent==="migration"&&await this.exec("PRAGMA foreign_keys=OFF;"),await this.exec("BEGIN");try{for(let e of t)try{await this.exec(e);}catch(i){throw console.error(`Failed to execute statement: ${e}`),i}await this.exec("COMMIT");}catch(e){throw await this.exec("ROLLBACK"),e}finally{s?.intent==="migration"&&(await this.exec("PRAGMA foreign_keys=ON;"),await this.clearSchemaCache());}}async close(){}mergeDeparseMetadata(t){let s=this.config.translation?.deparse;if(!s?.schema)return t;let e=t.columns.map(u=>({...u})),i=t.foreign_keys.map(u=>({...u})),r=[...t.unique_constraints??[]],n=[...t.check_constraints??[]];for(let[,u]of s.schema)for(let l of u.all()){let p=l.context,f=e.find(m=>m.table===p.table&&m.name===p.column);if(f&&(f.pg_type=p.pgTypeName,p.isGenerated!==void 0&&(f.is_generated=p.isGenerated)),p.fkRef?.constraintName){let m=i.find(T=>T.table===p.table&&T.column===p.column&&T.ref_table===p.fkRef.refTable&&T.ref_column===p.fkRef.refColumn);m&&(m.foreign_key_name=p.fkRef.constraintName);}p.uniqueConstraintName&&r.push({schema:p.schema,table:p.table,name:p.uniqueConstraintName,columns:[p.column]}),p.hasCheck&&n.push({schema:p.schema,table:p.table,expression:"",name:p.checkConstraintName,column:p.column});}for(let u of s.tableConstraints??[])if(u.kind==="unique")r.push({schema:u.schema,table:u.table,name:u.name??"",columns:u.columns});else if(u.kind==="check")n.push({schema:u.schema,table:u.table,expression:"",name:u.name});else if(u.kind==="foreign_key"&&u.name){let l=u.refTable;for(let p=0;p<u.columns.length;p++){let f=i.find(m=>m.table===u.table&&m.column===u.columns[p]&&m.ref_table===l&&m.ref_column===(u.refColumns?.[p]??""));f&&(f.foreign_key_name=u.name);}}let a=[...t.comments??[],...s.comments??[]];return {...t,columns:e,foreign_keys:i,unique_constraints:r,check_constraints:n,comments:a}}markForeignKeyVisibility(t){let s=new Set(t.views.map(i=>i.name)),e=i=>i.startsWith("private_")?s.has(i.slice(8)):true;return {...t,foreign_keys:t.foreign_keys.map(i=>({...i,is_visible:e(i.table)&&e(i.ref_table)}))}}createMigrator(t){let s=[this.config.baseSchema,t].filter(Boolean).join(`
|
|
212
|
+
${i.name?`'${i.name}'`:"'sqlite'"} AS database_name,
|
|
213
|
+
${i.version?`'${i.version}'`:"sqlite_version()"} AS version;`};function D(i){if(!i)return [];try{return Array.isArray(i)?i:JSON.parse(i)}catch{return []}}async function At(i,e={}){let n=(await i.exec(Sn(e)))?.rows?.[0]||{};return {tables:D(n.tables),columns:D(n.columns),indexes:D(n.indexes),foreign_keys:D(n.foreign_keys),primary_keys:D(n.primary_keys),views:D(n.views),triggers:D(n.triggers),check_constraints:[],unique_constraints:D(n.unique_constraints),comments:[],custom_types:[],database_name:n.database_name??"sqlite",version:n.version??""}}var _n=new Set(["AlterTableNode","CreateIndexNode","CreateSchemaNode","CreateTableNode","CreateTypeNode","CreateViewNode","RefreshMaterializedViewNode","DeleteQueryNode","DropIndexNode","DropSchemaNode","DropTableNode","DropTypeNode","DropViewNode","InsertQueryNode","RawNode","SelectQueryNode","UpdateQueryNode","MergeQueryNode"]),We=class extends OperationNodeTransformer{constructor(t){super();this.config=t;}#t=new Set;#n=new Set;transformNodeImpl(t,n){if(!_n.has(t.kind))return super.transformNodeImpl(t,n);let r=this.#i(t);for(let o of r)this.#n.add(o);let s=this.#s(t);for(let o of s)this.#t.add(o);try{return super.transformNodeImpl(t,n)}finally{for(let o of s)this.#t.delete(o);for(let o of r)this.#n.delete(o);}}transformSchemableIdentifier(t,n){let r=t.identifier.name,s=t.schema?.name,o=!s&&this.config.appendDefaultSchema&&this.config.defaultSchema&&!this.#n.has(r)&&this.#t.has(r),a=s??(o?this.config.defaultSchema:void 0);if(!a)return {kind:"SchemableIdentifierNode",schema:void 0,identifier:{kind:"IdentifierNode",name:r}};let l=this.config.approach==="snake_case"?"__":".";return {kind:"SchemableIdentifierNode",schema:void 0,identifier:{kind:"IdentifierNode",name:`${a}${l}${r}`}}}#s(t){let n=new Set;if(t?.name&&SchemableIdentifierNode.is(t.name)&&this.#r(t.name,n),t?.from?.froms)for(let r of t.from.froms)this.#e(r,n);if(t?.into&&this.#e(t.into,n),t?.table&&this.#e(t.table,n),t?.joins)for(let r of t.joins)this.#e(r.table,n);return t?.using&&(JoinNode.is(t.using)?this.#e(t.using.table,n):this.#e(t.using,n)),n}#e(t,n){if(TableNode.is(t)){this.#r(t.table,n);return}if(AliasNode.is(t)&&TableNode.is(t.node)){this.#r(t.node.table,n);return}if(ListNode.is(t)){for(let r of t.items)this.#e(r,n);return}if(UsingNode.is(t))for(let r of t.tables)this.#e(r,n);}#r(t,n){let r=t.identifier.name;this.#n.has(r)||n.add(r);}#i(t){let n=new Set;if(t?.with?.expressions)for(let r of t.with.expressions){let s=r?.name?.table?.table?.identifier?.name;s&&n.add(s);}return n}},Ee=class{#t;constructor(e){this.#t=new We(e);}transformQuery(e){return this.#t.transformNode(e.node)}async transformResult(e){return e.result}};be();Ke();Ge();function ee(i){return i==="migrations"||i==="supabase_migrations.schema_migrations"||i==="supabase_migrations.seed_files"}function It(i){return {...i,tables:i.tables.filter(e=>!ee(e.name)),columns:i.columns.filter(e=>!ee(e.table)),indexes:i.indexes.filter(e=>!ee(e.table)),foreign_keys:i.foreign_keys.filter(e=>!ee(e.table)),primary_keys:i.primary_keys.filter(e=>!ee(e.table))}}var Te=class{constructor(e,t,n={}){this.conn=e;this.desiredSchema=t;this.options=n;this.differ=new G,this.planner=new Q;}differ;planner;translationResult;async getDesiredSchema(){let e=await this.conn.translateDdl(this.desiredSchema);return this.translationResult=e,await this.options.onTranslation?.(e),e.ddl}async diff(){let e=await this.conn.introspect({postprocess:false}),t=await this.getDesiredSchema();if(!t||t.trim().length===0)return {current:e,desired:e,diff:{tables:[],columns:[],indexes:[],foreign_keys:[],has_changes:false},plan:{steps:[],warnings:[],unsafe:false}};let{createConnection:n}=await import('@supabase/lite/sqlite'),r=await n({url:":memory:"});try{await r.exec(t);let s=await r.introspect({postprocess:!1}),o=It(e),a=It(s),l=this.differ.diff(o,a),u=this.planner.plan(l,o,a);return {current:e,desired:s,diff:l,plan:u}}finally{await r.close();}}safeSortPlanSteps(e){return invariant(Array.isArray(e),"steps must be an array"),e.sort((t,n)=>{let r=s=>s===PlanStepType.DROP_COLUMN?1:s===PlanStepType.DROP_TABLE?2:s===PlanStepType.RENAME_TABLE?3:0;return r(t.type)-r(n.type)})}async migratePlan(e,t){if(e.steps.length===0)return;if(e.unsafe&&!t?.force)throw new DataLossError(e.warnings??[]);let n=this.safeSortPlanSteps(e.steps).filter(r=>![PlanStepType.DISABLE_FOREIGN_KEYS,PlanStepType.BEGIN_TRANSACTION,PlanStepType.COMMIT_TRANSACTION,PlanStepType.ENABLE_FOREIGN_KEYS].includes(r.type));await this.conn.transaction(n.map(r=>r.sql),{intent:"migration"});}async migrate(e){let t=await this.diff();return await this.migratePlan(t.plan,e),t}};ye();var Ot=/^\{\{(.+)\}\}$/;function Dt(i){return typeof i=="string"&&Ot.test(i)}function In(i){return Ot.exec(i)[1]}var vt=Symbol("unresolved");function Lt(i,e){let t=In(i),n=Z(e,t,vt);if(n===vt)throw new Error(`Unresolved variable: {{${t}}}`);return n}function v(i,e){let t={};for(let[n,r]of Object.entries(i)){if(n==="$or"||n==="$and"){t[n]=r.map(s=>v(s,e));continue}if(n==="$not"){t[n]=v(r,e);continue}if(n==="$always"){t[n]=r;continue}if(n==="$exists"){let s=r;t[n]={...s,where:s?.where?v(s.where,e):s?.where};continue}if(Dt(n)){let s=Lt(n,e),a=On(s,r);t.$always=a;continue}if(r!=null&&typeof r=="object"&&!Array.isArray(r)){t[n]=Pt(r,e);continue}t[n]=r;}return t}function Pt(i,e){let t={};for(let[n,r]of Object.entries(i))n==="$not"&&r!=null&&typeof r=="object"?t[n]=Pt(r,e):vn(r)?t[n]={...r,where:r?.where?v(r?.where,e):void 0}:Dt(r)?t[n]=Lt(r,e):t[n]=r;return t}function vn(i){return i!=null&&typeof i=="object"&&i.type==="query"}function On(i,e){for(let[t,n]of Object.entries(e))switch(t){case "$eq":if(i!==n)return false;break;case "$neq":if(i===n)return false;break;case "$in":if(!Array.isArray(n)||!n.includes(i))return false;break;case "$notIn":if(Array.isArray(n)&&n.includes(i))return false;break;default:throw new Error(`Cannot statically evaluate operator ${t} on placeholder key`)}return true}ye();var we=class extends Error{constructor(t){super(`new row violates row-level security policy for table "${t.data.table}"`);this.policy=t;this.name="PolicyViolation";}};var xe=class{constructor(e,t,n){this.tables=e;this.policies=t;this.defaultSchema=n;}enforce(e,t){let n=e.from;if(!n||!this.isRlsEnabled(n,e.schema))return e;let r=Dn(e.type);if(!r)return e;let s=Z(t,"auth.role")??"anon",{permissive:o,restrictive:a}=this.resolvePolicies(n,e.schema,r,s);switch(r){case "SELECT":case "DELETE":{let l=this.combineUsing(o,a,t);return {...e,where:$t(e.where,l)}}case "UPDATE":{let l=this.combineUsing(o,a,t),u={...e,where:$t(e.where,l)};if(l.$always===false)return u;let p=this.combineWithCheck(o,a,t,r);if(e.values&&Object.keys(p).length>0){let c=new Set(Object.keys(e.values));this.validateWithCheck(p,e.values,o,a,c);}return u}case "INSERT":{let l=this.combineWithCheck(o,a,t,r);if(e.values){let u=Array.isArray(e.values)?e.values:[e.values];for(let p of u)this.validateWithCheck(l,p,o,a);}return e}default:return e}}isRlsEnabled(e,t){return this.tables.has(e)}resolvePolicies(e,t,n,r){let s=this.policies.filter(o=>o.data.table===e&&this.schemasMatch(o.data.schema,t)&&o.appliesTo(n)&&o.appliesToRole(r));return {permissive:s.filter(o=>o.data.permissive),restrictive:s.filter(o=>!o.data.permissive)}}schemasMatch(e,t){let n=e||this.defaultSchema,r=t||this.defaultSchema;return n===r}combineUsing(e,t,n){if(e.length===0)return {$always:false};let r=e.map(o=>o.data.using).filter(o=>o!=null&&Object.keys(o).length>0).map(o=>v(o,n)),s;r.length===0?s={}:r.length===1?s=r[0]:s={$or:r};for(let o of t)if(o.data.using&&Object.keys(o.data.using).length>0){let a=v(o.data.using,n);s=Object.keys(s).length===0?a:{$and:[s,a]};}return s}combineWithCheck(e,t,n,r){if(e.length===0)return {$always:false};let s=e.map(a=>a.data.withCheck??(r==="UPDATE"?a.data.using:void 0)).filter(a=>a!=null&&Object.keys(a).length>0).map(a=>v(a,n)),o;s.length===0?o={}:s.length===1?o=s[0]:o={$or:s};for(let a of t){let l=a.data.withCheck??(r==="UPDATE"?a.data.using:void 0);if(l&&Object.keys(l).length>0){let u=v(l,n);o=Object.keys(o).length===0?u:{$and:[o,u]};}}return o}validateWithCheck(e,t,n,r,s){if(Object.keys(e).length===0)return;if(!Ce(e,t,s)){let a=n[0]??r[0];throw a?new we(a):new Error("RLS policy violation")}}};function Dn(i){switch(i){case "query":return "SELECT";case "insert":case "upsert":case "put":return "INSERT";case "update":return "UPDATE";case "delete":return "DELETE";default:return}}function $t(i,e){return !i||Object.keys(i).length===0?e:Object.keys(e).length===0?i:{$and:[i,e]}}function Ce(i,e,t){for(let[n,r]of Object.entries(i)){if(n==="$always"){if(r===false)return false;continue}if(n==="$and"){if(!r.every(l=>Ce(l,e,t)))return false;continue}if(n==="$or"){if(!r.some(l=>Ce(l,e,t)))return false;continue}if(n==="$not"){if(Ce(r,e,t))return false;continue}if(t&&!t.has(n))continue;let s=r,o=e[n];for(let[a,l]of Object.entries(s))if(!Ln(o,a,l))return false}return true}function Ln(i,e,t){switch(e){case "$eq":return i===t;case "$neq":return i!==t;case "$gt":return i>t;case "$gte":return i>=t;case "$lt":return i<t;case "$lte":return i<=t;case "$in":return Array.isArray(t)&&t.includes(i);case "$notIn":return !Array.isArray(t)||!t.includes(i);case "$is":return i===t;case "$isNot":return i!==t;default:throw new Error(`Cannot evaluate operator "${e}" client-side for WITH CHECK`)}}var _e=class{transformQuery(e){return e.node}transformResult(e){return e.result.rows?Promise.resolve({...e.result,rows:e.result.rows.map(t=>{let n={};for(let r in t){let s=t[r];if(typeof s=="string"&&(s[0]==="{"||s[0]==="["))try{n[r]=JSON.parse(s);}catch{n[r]=s;}else n[r]=s;}return n})}):Promise.resolve(e.result)}};function Ft(i){let e={};for(let t in i){let n=i[t];if(typeof n=="string"&&(n[0]==="["||n[0]==="{"))try{e[t]=JSON.parse(n);}catch{e[t]=n;}else e[t]=n;}return e}var K=class i extends Connection{dialect="sqlite";deserializeRow(e){return this.config.ddlDialect==="postgres"?Ft(e):e}constructor(e={}){super({...e,translation:{...e.translation,schemas:{appendDefaultSchema:false,approach:"quote",defaultSchema:"public",...e.translation?.schemas},deparse:i.parseDeparseInfo(e.translation?.deparse)},introspection:{name:"sqlite",...e.introspection,exclude_tables:Array.from(new Set([...e.introspection?.exclude_tables??[],"sqlite_%","supabase_migrations.%","migrations"]))}});}static parseDeparseInfo(e){try{if(typeof e!="object"||e===null)return {};let t=e?.rls?.tables instanceof Set?e.rls.tables:new Set(e.rls?.tables??[]),n=e?.rls?.policies.map(s=>new L(JSON.parse(JSON.stringify(s)))),r=e?.vars instanceof Map?e.vars:new Map(Object.entries(e.vars??{}));return {rls:{tables:t,policies:n},vars:r}}catch(t){return console.log("error parsing deparse info",t),{}}}updateDeparseInfo(e){this.config.translation={...this.config.translation,deparse:e};}withSqlitePlugins(e=[]){let t=[];return this.config.ddlDialect==="sqlite"&&t.push(new _e),t.push(new Ee(Fe({appendDefaultSchema:false,approach:"quote",defaultSchema:"public"},{...this.config.translation?.schemas}))),[...t,...e]}async translateDdl(e){if(e.trim().length===0)return {ddl:e};if(this.config.ddlDialect==="sqlite")return {ddl:e};let t=this.config.translation?.schemas?.defaultSchema&&this.config.translation?.schemas?.appendDefaultSchema?this.config.translation?.schemas?.defaultSchema:false,n=await this.introspect({postprocess:false}).catch(()=>{}),{deparsePostgresDdl:r}=await Promise.resolve().then(()=>(cn(),ln));return await r(e,{forceDefaultSchema:t,introspection:n,schemaHandling:this.config.translation?.schemas?.approach==="snake_case"?"prefix":"default"})}async introspect(e){Ct(typeof e=="object"||e===void 0,"options must be an object");let t=e?.useCache??false;if(e?.postprocess!==false){let s=await this.readCachedIntrospection({useCache:t});if(s)return s}let n=await At(this,this.config.introspection),r=this.config.translation?.schemas?.approach==="snake_case"?"__":".";if(this.config.ddlDialect==="postgres"&&e?.postprocess!==false){let s=this.config.translation?.schemas?.defaultSchema??this.config.translation?.schemas?.appendDefaultSchema?"public":void 0,o=(l="table")=>u=>{let p=u[l],c=u.schema??s;return !c&&s&&p.includes(r)&&([c,p]=p.split(r)),{...u,[l]:p,schema:c??s}},a=l=>{let u=o()(l),p=u.ref_table,c=u.ref_schema??s;return p?.includes(r)&&([c,p]=p.split(r)),{...u,ref_table:p,ref_schema:c??s}};n={...n,tables:n.tables.map(o("name")),columns:n.columns.map(o()),indexes:n.indexes.map(o()),primary_keys:n.primary_keys.map(o()),foreign_keys:n.foreign_keys.map(a),views:n.views.map(o("name")),check_constraints:n.check_constraints.map(o("table"))};}return this.config.ddlDialect==="postgres"&&e?.postprocess!==false&&(n=this.mergeDeparseMetadata(n)),n=this.markForeignKeyVisibility(n),n={...n,ddl_dialect:this.config.ddlDialect??"postgres",schema_separator:r},e?.postprocess!==false&&await this.writeCachedIntrospection(n,{useDriver:t}),n}async transaction(e,t){t?.intent==="migration"&&await this.exec("PRAGMA foreign_keys=OFF;"),await this.exec("BEGIN");try{for(let n of e)try{await this.exec(n);}catch(r){throw console.error(`Failed to execute statement: ${n}`),r}await this.exec("COMMIT");}catch(n){throw await this.exec("ROLLBACK"),n}finally{t?.intent==="migration"&&(await this.exec("PRAGMA foreign_keys=ON;"),await this.clearSchemaCache());}}async close(){}mergeDeparseMetadata(e){let t=this.config.translation?.deparse;if(!t?.schema)return e;let n=e.columns.map(l=>({...l})),r=e.foreign_keys.map(l=>({...l})),s=[...e.unique_constraints??[]],o=[...e.check_constraints??[]];for(let[,l]of t.schema)for(let u of l.all()){let p=u.context,c=n.find(d=>d.table===p.table&&d.name===p.column);if(c&&(c.pg_type=p.pgTypeName,p.isGenerated!==void 0&&(c.is_generated=p.isGenerated)),p.fkRef?.constraintName){let d=r.find(E=>E.table===p.table&&E.column===p.column&&E.ref_table===p.fkRef.refTable&&E.ref_column===p.fkRef.refColumn);d&&(d.foreign_key_name=p.fkRef.constraintName);}p.uniqueConstraintName&&s.push({schema:p.schema,table:p.table,name:p.uniqueConstraintName,columns:[p.column]}),p.hasCheck&&o.push({schema:p.schema,table:p.table,expression:"",name:p.checkConstraintName,column:p.column});}for(let l of t.tableConstraints??[])if(l.kind==="unique")s.push({schema:l.schema,table:l.table,name:l.name??"",columns:l.columns});else if(l.kind==="check")o.push({schema:l.schema,table:l.table,expression:"",name:l.name});else if(l.kind==="foreign_key"&&l.name){let u=l.refTable;for(let p=0;p<l.columns.length;p++){let c=r.find(d=>d.table===l.table&&d.column===l.columns[p]&&d.ref_table===u&&d.ref_column===(l.refColumns?.[p]??""));c&&(c.foreign_key_name=l.name);}}let a=[...e.comments??[],...t.comments??[]];return {...e,columns:n,foreign_keys:r,unique_constraints:s,check_constraints:o,comments:a}}markForeignKeyVisibility(e){let t=new Set(e.views.map(r=>r.name)),n=r=>r.startsWith("private_")?t.has(r.slice(8)):true;return {...e,foreign_keys:e.foreign_keys.map(r=>({...r,is_visible:n(r.table)&&n(r.ref_table)}))}}createMigrator(e){let t=[this.config.baseSchema,e].filter(Boolean).join(`
|
|
245
214
|
|
|
246
|
-
`);return new
|
|
247
|
-
export{
|
|
215
|
+
`);return new Te(this,t,{onTranslation:async n=>{if(this.config.translation){let r={enums:n.enums,rls:n.rls,schema:n.schema,vars:n.vars,tableConstraints:n.tableConstraints??[],comments:n.comments??[]};this.config.translation.deparse=r;}}})}get maxBoundParameters(){return this.config.maxBoundParameters??100}assertParamLimit(e){let t=e?.length??0,n=this.maxBoundParameters;if(!(t<=n))throw Object.assign(new Error(`Query exceeds max bound parameters (${t} > ${n}). SQLite drivers vary in how many parameters they accept per statement; @supabase/lite enforces a conservative limit of ${n} for portability. Split the query (e.g. chunk large .in() filters or batch INSERTs) on the caller.`),{code:"54000"})}prepareBindParams(e){return this.assertParamLimit(e),this.normalizeBindParams(e)}normalizeBindParams(e){if(!e||e.length===0)return [];let t=[];for(let n=0;n<e.length;n++){let r=e[n];if(r===void 0)continue;if(r===null){t.push(r);continue}let s=typeof r;if(s==="boolean"){t.push(r?1:0);continue}if(s==="number"||s==="bigint"||s==="string"){t.push(r);continue}if(r instanceof Uint8Array||r instanceof ArrayBuffer||r instanceof Date){t.push(r);continue}throw new Error(`Cannot bind value at parameter ${n+1}: unsupported type ${Array.isArray(r)?"array":s}`)}return t}normalizeDbError(e){let t=e,n=t?.cause?.code??t?.code,r=t?.cause?.message??t?.message??String(e);if(n==="SQLITE_CONSTRAINT_NOTNULL")return Object.assign(new Error(r),{code:"23502",detail:r});if(n==="SQLITE_CONSTRAINT_UNIQUE"||n==="SQLITE_CONSTRAINT_PRIMARYKEY")return Object.assign(new Error(r),{code:"23505",detail:r});if(n==="SQLITE_CONSTRAINT_FOREIGNKEY")return Object.assign(new Error(r),{code:"23503",detail:r});if(typeof r=="string"){if(/too many SQL variables/i.test(r)){let a=this.maxBoundParameters;return Object.assign(new Error(`Query exceeds SQLite bound-parameter limit. @supabase/lite enforces a conservative limit of ${a} for portability across drivers. Split the query (e.g. chunk large .in() filters or batch INSERTs) on the caller.`),{code:"54000",detail:r})}let s=r.match(/no such table:\s*([A-Za-z0-9_.]+)/i);if(s){let a=s[1],l=a.lastIndexOf("."),u=l>=0?a.slice(0,l):void 0,p=l>=0?a.slice(l+1):a;return new RelationNotFoundError(u,p)}let o=r.match(/no such column:\s*([A-Za-z0-9_.]+)/i);if(o)return Object.assign(new Error(`column ${o[1]} does not exist`),{code:"42703",detail:r})}return e}async onPostgrestAST(e,t){if(this.config.ddlDialect==="sqlite")return e.schema=void 0,this.applyRls(e,t);let n=this.config.translation?.schemas?.appendDefaultSchema,r=this.config.translation?.schemas?.defaultSchema;if(e.schema&&e.schema===r&&!n?e.schema=void 0:!e.schema&&r&&n&&(e.schema=r),!e.from)return e;let s=await this.introspect({useCache:true}),o=e.schema??(n&&r?r:""),a=e.from;if(!(s.tables.some(u=>u.name===a&&(u.schema??"")===o)||s.views.some(u=>u.name===a&&(u.schema??"")===o))){if(!(s.tables.some(p=>p.name===a&&["","public",r].includes(p.schema??""))||s.views.some(p=>p.name===a&&["","public",r].includes(p.schema??""))))throw new RelationNotFoundError(o,a);e.schema=void 0;}return this.applyRls(e,t)}applyRls(e,t){let n=this.config.translation?.deparse?.rls;if(!n||!t)return e;let r=this.config.translation?.schemas?.defaultSchema||void 0;return new xe(n.tables,n.policies,r).enforce(e,t)}};var _r=createRequire(import.meta.url),mt=null;function Nr(i){if(!i||i===":memory:"||i==="file::memory:")return ":memory:";if(!i.startsWith("file:"))return i;let e=i.startsWith("file://")?i.slice(7):i.slice(5);return !e||e===":memory:"?":memory:":dt.isAbsolute(e)?e:dt.resolve(process.cwd(),e)}function Rr(){return mt||(mt=_r("node:sqlite").DatabaseSync),mt}function Ar(i,e){let t=n=>{try{return i.prepare(n)}catch(r){throw console.error(r),new Error(`Failed to prepare statement: ${n}`)}};return {db:i,query:buildQueryFn({all:(n,r=[])=>{let s=e(r);return t(n).all(...s)},run:(n,r=[])=>{let s=e(r),{changes:o,lastInsertRowid:a}=t(n).run(...s);return {insertId:Number.parseInt(a.toString(),10),numAffectedRows:Number.parseInt(o.toString(),10)}}}),close:()=>i.close(),iterator:(n,r,s=[])=>{if(!n)throw new Error("Only support select in stream()");let o=e(s);return t(r).iterate(...o)}}}var ht=class extends K{kysely;driver;constructor(e={}){super(e);let t=Rr(),n=Nr(e.url);if(n!==":memory:"){let s=dt.dirname(n);pn.existsSync(s)||pn.mkdirSync(s,{recursive:true});}this.driver=new t(n);let r=new GenericSqliteDialect(()=>Ar(this.driver,s=>this.prepareBindParams(s)),s=>{this.driver.exec("pragma foreign_keys = on");});this.kysely=new Kysely({dialect:r,plugins:this.withSqlitePlugins()});}async exec(e,...t){let n=e.trimStart().toUpperCase(),r=this.prepareBindParams(t);if(n.startsWith("SELECT")||n.startsWith("WITH"))return {rows:this.driver.prepare(e).all(...r)};r.length>0?this.driver.prepare(e).run(...r):this.driver.exec(e);}async close(){await this.exec("PRAGMA wal_checkpoint(FULL)"),this.driver.close();}};function kr(i={}){return new ht(i)}var $e=class extends K{constructor(t){super({...t,introspection:{...t.introspection,version:"3.47.0"}});this.config=t;}dialect="sqlite";driver=null;kysely=null;fetch(t,n){let r=t instanceof URL?new URL(t.toString(),this.config.host):new URL(t,this.config.host);return fetch(r,{...n,headers:{"Content-Type":"application/json",Accept:"application/json",Authorization:`Bearer ${this.config.token}`,...n?.headers}})}async introspect(t){let n=new URLSearchParams({useCache:t?.useCache?"1":"0",postprocess:t?.postprocess?"1":"0"}),r=await this.fetch(`/v1/projects/${this.config.projectRef}/db/introspect?${n}`),s=await r.text();if(!r.ok)throw console.error(s),new Error(`Failed to get project introspect: ${r.status} ${r.statusText}`);try{let o=JSON.parse(s);if(!o)throw new Error("Failed to get project introspect");return o}catch(o){throw console.error(o),console.log(s),new Error(`Failed to parse introspect response: "${s}"`)}}async transaction(t,n){let r=await this.fetch(`/v1/projects/${this.config.projectRef}/db/transaction?intent=${n?.intent??"migration"}`,{method:"POST",body:JSON.stringify({statements:t})});if(!r.ok)throw new Error(`Failed to execute transaction: ${r.status} ${r.statusText}`)}async exec(t,...n){let r=await this.fetch(`/v1/projects/${this.config.projectRef}/db/exec`,{method:"POST",body:JSON.stringify({statement:t,parameters:n})}),s=await r.text();if(!r.ok)throw console.error(s),new Error(`Failed to execute statement: ${r.status} ${r.statusText}`);try{return JSON.parse(s)}catch(o){throw console.error(o),new Error(`Failed to parse exec response: "${s}"`)}}async close(){}};function Ir(i){return new $e(i)}
|
|
216
|
+
export{$e as CloudConnection,K as SqliteConnection,Ir as cloud,kr as createConnection};
|