@supabase/lite 0.2.0 → 0.2.1-next.2

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.
@@ -1,4 +1,4 @@
1
- import {Connection,RelationNotFoundError,invariant,DataLossError,PlanStepType}from'@supabase/lite';import {OperationNodeTransformer,SchemableIdentifierNode,JoinNode,TableNode,AliasNode,ListNode,UsingNode}from'kysely';try {
1
+ try {
2
2
  /**
3
3
  * Adding this to avoid warnings from node:sqlite being experimental
4
4
  */
@@ -9,238 +9,4 @@ import {Connection,RelationNotFoundError,invariant,DataLossError,PlanStepType}fr
9
9
  };
10
10
  } catch {}
11
11
 
12
- var Ms=Object.create;var xt=Object.defineProperty;var qs=Object.getOwnPropertyDescriptor;var Vs=Object.getOwnPropertyNames;var Gs=Object.getPrototypeOf,Ws=Object.prototype.hasOwnProperty;var C=(c,t)=>()=>(c&&(t=c(c=0)),t);var je=(c,t)=>()=>(t||c((t={exports:{}}).exports,t),t.exports),Js=(c,t)=>{for(var s in t)xt(c,s,{get:t[s],enumerable:true});},xs=(c,t,s,e)=>{if(t&&typeof t=="object"||typeof t=="function")for(let i of Vs(t))!Ws.call(c,i)&&i!==s&&xt(c,i,{get:()=>t[i],enumerable:!(e=qs(t,i))||e.enumerable});return c};var $e=(c,t,s)=>(s=c!=null?Ms(Gs(c)):{},xs(xt(s,"default",{value:c,enumerable:true}),c));var Ue=C(()=>{});var Fe=C(()=>{});function Ys(c){return Object.prototype.toString.call(c)==="[object Object]"}function Hs(c){return c!==null&&typeof c=="object"}function rt(c,t,s=void 0){let e=typeof t=="string"?t.split(/[.[\]"]+/).filter(i=>i):t;if(e.length===0)return c;try{let[i,...r]=e;return !i||!(i in c)?s:rt(c[i],r,s)}catch{if(typeof s<"u")return s;throw new Error(`Invalid path: ${e.join(".")}`)}}function Yt(c,...t){for(let s of t)for(let[e,i]of Object.entries(s))i!==void 0&&(!Ys(i)&&!Array.isArray(i)||Array.isArray(i)&&!Array.isArray(c[e])?c[e]=i:Hs(c[e])?Yt(c[e],i):c[e]=i);return c}var yt=C(()=>{});var Be=C(()=>{});function Me(c,t){if(!c)throw new Error(t)}var qe=C(()=>{});function Ht(c){return (c??"").trim().toLowerCase()}function Xt(c){return (c??"").replace(/\s+/g," ").replace(/"/g,"").trim().toLowerCase()}function Kt(c){if(c==null)return null;let t=c.trim();for(;t.startsWith("(")&&t.endsWith(")");)t=t.slice(1,-1).trim();return (t.startsWith("'")&&t.endsWith("'")||t.startsWith('"')&&t.endsWith('"'))&&(t=t.slice(1,-1)),t}var Qt=C(()=>{});function N(c,t='"'){return `${t}${c}${t}`}function Ve(c,t,s){if(t instanceof RegExp)return t.test(c);if(typeof t=="string")switch(!s&&t.startsWith("/")&&(s="regex"),s){case "regex":return new RegExp(t).test(c);case "sql":return new RegExp(t.replace("%",".*").replace("_",".")).test(c);case "wildcard":return new RegExp(t.replace("*",".*")).test(c);default:return c.includes(t)}return false}var bt=C(()=>{});var Ge=C(()=>{});var We=C(()=>{});var zt=C(()=>{Ue();Fe();yt();Be();qe();Qt();bt();Ge();We();});var $,Lt=C(()=>{$=class c{constructor(t){this.data=t;}appliesTo(t){return this.data.command==="ALL"||this.data.command===t}appliesToRole(t){return this.data.roles.length===0||this.data.roles.includes(t)}toJSON(){return this.data}static fromJSON(t){return new c(t)}};});var H,te=C(()=>{Qt();H=class{makeIndexKey(t){return `${t.table}:${t.name}:${t.unique}:${t.columns.join(",")}`}makeForeignKeyKey(t){return `${t.table}:${t.column}:${t.ref_table}:${t.ref_column}`}diff(t,s){let e=[],i=[],r=[],n=[],a=new Set(t.tables.map(g=>g.name)),u=new Set(s.tables.map(g=>g.name));for(let g of s.tables)a.has(g.name)||e.push({type:"added",name:g.name,sql:g.sql});for(let g of t.tables)u.has(g.name)||e.push({type:"removed",name:g.name});for(let g of t.tables){let A=s.tables.find(_=>_.name===g.name);if(!A)continue;let S=Xt(g.sql),b=Xt(A.sql);S!==b&&e.push({type:"modified",name:g.name,sql:A.sql});}let l=t.tables.filter(g=>u.has(g.name));for(let g of l){let A=t.columns.filter(y=>y.table===g.name),S=s.columns.filter(y=>y.table===g.name),b=new Map(A.map(y=>[y.name,y])),_=new Map(S.map(y=>[y.name,y]));for(let[y,d]of _)b.has(y)||i.push({type:"added",table:g.name,name:y,column:d});for(let[y]of b)_.has(y)||i.push({type:"removed",table:g.name,name:y});for(let[y,d]of b){let D=_.get(y);if(!D)continue;let F={};Ht(d.type)!==Ht(D.type)&&(F.type={from:d.type,to:D.type}),d.nullable!==D.nullable&&(F.nullable={from:d.nullable,to:D.nullable}),Kt(d.default_value)!==Kt(D.default_value)&&(F.default_value={from:d.default_value,to:D.default_value}),Object.keys(F).length>0&&i.push({type:"modified",table:g.name,name:y,changes:F});}}let o=new Map(t.indexes.map(g=>[this.makeIndexKey(g),g])),f=new Map(s.indexes.map(g=>[this.makeIndexKey(g),g]));for(let[g,A]of f)o.has(g)||r.push({type:"added",...A});for(let[g,A]of o)f.has(g)||r.push({type:"removed",...A});let m=new Map(t.foreign_keys.map(g=>[this.makeForeignKeyKey(g),g])),T=new Map(s.foreign_keys.map(g=>[this.makeForeignKeyKey(g),g]));for(let[g,A]of T)m.has(g)||n.push({type:"added",...A});for(let[g,A]of m)T.has(g)||n.push({type:"removed",...A});let E=e.length>0||i.length>0||r.length>0||n.length>0;return {tables:e,columns:i,indexes:r,foreign_keys:n,has_changes:E}}};});var ee=C(()=>{});var ri,X,se=C(()=>{ee();bt();ri=["CURRENT_TIMESTAMP","CURRENT_TIME","CURRENT_DATE"],X=class{plan(t,s,e,i){if(!t.has_changes)return {steps:[],warnings:[],unsafe:false};let r=[],n=[];r.push({sql:"PRAGMA foreign_keys=OFF;",description:"Disable foreign key checks",type:"disable_foreign_keys"}),r.push({sql:"BEGIN;",description:"Begin transaction",type:"begin_transaction"});for(let f of t.tables.filter(m=>m.type==="added")){r.push({sql:`${f.sql};`,description:`CREATE TABLE ${N(f.name)}`,type:"create_table"});let m=e.indexes.filter(T=>T.table===f.name);for(let T of m){let E=T.unique?"UNIQUE ":"",g=T.columns.map(A=>N(A)).join(", ");r.push({sql:`CREATE ${E}INDEX ${N(T.name)} ON ${N(f.name)} (${g});`,description:`Create index ${N(T.name)} on ${N(f.name)}`,type:"add_index"});}}let a=new Set(s.tables.map(f=>f.name)),u=new Set(e.tables.map(f=>f.name)),l=new Set(t.tables.filter(f=>f.type==="modified").map(f=>f.name)),o=[...a].filter(f=>u.has(f));for(let f of o){if(!(l.has(f)||t.columns.some(g=>g.table===f)||t.indexes.some(g=>g.table===f)||t.foreign_keys.some(g=>g.table===f)))continue;let{canAlter:T,addedCols:E}=this.canSimpleAlter(f,t,e);if(T){for(let S of E)r.push({sql:`ALTER TABLE ${N(f)} ADD COLUMN ${this.columnDef(S)};`,description:`Add column ${N(S.name)} to ${N(f)}`,type:"add_column"});let g=t.indexes.filter(S=>S.table===f&&S.type==="added"),A=t.indexes.filter(S=>S.table===f&&S.type==="removed");for(let S of A)r.push({sql:`DROP INDEX IF EXISTS ${N(S.name)};`,description:`Drop index ${N(S.name)}`,type:"drop_index"});for(let S of g){let b=S.unique?"UNIQUE ":"",_=S.columns.map(y=>N(y)).join(", ");r.push({sql:`CREATE ${b}INDEX ${N(S.name)} ON ${N(f)} (${_});`,description:`Create index ${N(S.name)} on ${N(f)}`,type:"add_index"});}}else {let g=this.rebuildTable(f,s,e,t);r.push(...g.steps),n.push(...g.warnings);}}for(let f of t.tables.filter(m=>m.type==="removed"))r.push({sql:`DROP TABLE ${N(f.name)};`,description:`Drop table ${N(f.name)}`,type:"drop_table"}),n.push({table:f.name,reason:"table will be dropped"});return r.push({sql:"COMMIT;",description:"Commit transaction",type:"commit_transaction"}),r.push({sql:"PRAGMA foreign_keys=ON;",description:"Re-enable foreign key checks",type:"enable_foreign_keys"}),{steps:r,warnings:n,unsafe:n.length>0}}rebuildTable(t,s,e,i){let r=[],n=[],a=e.tables.find(S=>S.name===t);if(!a)return {steps:r,warnings:n};let u=`_${t}_migrate_new`,l=a.sql.replace(new RegExp(`(CREATE\\s+TABLE\\s+)(?:"${t}"|${t})`,"i"),`$1${N(u)}`);r.push({sql:`${l};`,description:`Create temporary table ${N(u)}`,type:"create_table"});let o=s.columns.filter(S=>S.table===t).map(S=>S.name),f=e.columns.filter(S=>S.table===t).map(S=>S.name),m=o.filter(S=>f.includes(S));if(m.length>0){let S=m.map(b=>N(b)).join(", ");r.push({sql:`INSERT INTO ${N(u)} (${S})
13
- SELECT ${S}
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 ri.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 K(c){let{parse:t}=await import('pgsql-parser');return t(c)}var es=C(()=>{});var U,ie=C(()=>{U=class{newlineChar;tabChar;prettyMode;constructor(t=`
15
- `,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}};});var Q,ss=C(()=>{ie();Q=class c{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:o,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 U(`
16
- `," ",s),this.select=n,this.from=a,this.group=u,this.sort=l,this.insertColumns=o,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 c({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(c){let t=c.toLowerCase();return is.has(t)?"RESERVED_KEYWORD":as.has(t)?"TYPE_FUNC_NAME_KEYWORD":ns.has(t)?"COL_NAME_KEYWORD":rs.has(t)?"UNRESERVED_KEYWORD":"NO_KEYWORD"}var at,is,rs,ns,as,re=C(()=>{at={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"]},is=new Set(at.RESERVED_KEYWORD??[]),rs=new Set(at.UNRESERVED_KEYWORD??[]),ns=new Set(at.COL_NAME_KEYWORD??[]),as=new Set(at.TYPE_FUNC_NAME_KEYWORD??[]);});var h,us=C(()=>{re();h=class c{static escape(t){return `'${t.replace(/'/g,"''")}'`}static escapeEString(t){return t.replace(/\\/g,"\\\\").replace(/'/g,"''")}static formatEString(t){return c.needsEscapePrefix(t)?`E'${c.escapeEString(t)}'`:c.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?c.quoteIdentifier(t[0]):t.map((s,e)=>e===0?c.quoteIdentifier(s):c.quoteIdentifierAfterDot(s)).join(".")}static quoteQualifiedIdentifier(t,s){return t?`${c.quoteIdentifier(t)}.${c.quoteIdentifierAfterDot(s)}`:c.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=>c.quoteIdentifierTypeName(s)).join(".")}};});var ne=C(()=>{us();re();});var p,ls=C(()=>{p=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 mi(c){return c&&typeof c=="object"&&!Array.isArray(c)&&!("ParseResult"in c)&&!("RawStmt"in c)&&("stmts"in c||"version"in c)}var fi,hi,z,os=C(()=>{ss();ie();ne();ls();fi=["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"],hi=[["numeric",["decimal","dec"]],["int4",["int","integer"]],["float8",["float"]],["bpchar",["character"]],["varchar",["character varying"]]];z=class c{tree;options;constructor(t,s={}){this.options={functionDelimiter:"$$",functionDelimiterFallback:"$EOFCODE$",...s},mi(t)?this.tree=[{ParseResult:t}]:Array.isArray(t)?this.tree=t:this.tree=[t];}static deparse(t,s={}){return new c(t,s).deparseQuery()}deparseQuery(){let t=new U(this.options.newline,this.options.tab,this.options.pretty),s=new Q({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 Q({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 Q({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=p.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=p.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=p.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=p.unwrapList(t.valuesLists).map(a=>{let u=p.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=p.unwrapList(t.valuesLists).map(n=>{let a=p.unwrapList(n).map(u=>this.visit(u,s));return s.parens(a.join(", "))});e.push(r.join(", "));}if(t.groupClause){let r=p.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=p.unwrapList(t.windowClause).map(a=>this.visit(a,s)).join(", ");e.push(n);}if(t.sortClause){let r=p.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=p.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=p.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(p.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(p.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 o=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 o==="!~"?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=p.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&&p.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=p.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=p.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=p.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=p.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],o=l.ResTarget?.val?.MultiAssignRef;if(o){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(o.source)&&(f.push(g),n.add(E));}let m=f.map(E=>E.ResTarget.name),T=`${s.parens(m.join(", "))} = ${this.visit(o.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=p.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=p.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=p.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=p.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=p.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 p.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=p.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=p.unwrapList(t.funcname),i=p.unwrapList(t.args),r=e.map(o=>o.String?.sval||o.String?.str||"").filter(o=>o),n=h.quoteDottedName(r);if(t.funcformat==="COERCE_SQL_SYNTAX"&&n==="pg_catalog.xmlexists"&&i.length>=2){let o=this.visit(i[0],s),f=this.visit(i[1],s);return `xmlexists (${o} PASSING ${f})`}if(t.funcformat==="COERCE_SQL_SYNTAX"&&n==="pg_catalog.extract"&&i.length>=2){let o=this.visit(i[0],s),f=this.visit(i[1],s);return o.startsWith("'")&&o.endsWith("'")&&(o=o.slice(1,-1).toUpperCase()),`EXTRACT(${o} FROM ${f})`}if(t.funcformat==="COERCE_SQL_SYNTAX"&&(n==="pg_catalog.rtrim"||n==="pg_catalog.ltrim"||n==="pg_catalog.btrim")&&i.length>=1){let o=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 ${o})`;if(n==="pg_catalog.ltrim")return `TRIM(LEADING${f} FROM ${o})`;if(n==="pg_catalog.btrim")return `TRIM(BOTH${f} FROM ${o})`}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 o=this.visit(i[0],s);if(i.length===3){let f=this.visit(i[1],s),m=this.visit(i[2],s);return `SUBSTRING(${o} FROM ${f} FOR ${m})`}else if(i.length===2){let f=this.visit(i[1],s);return `SUBSTRING(${o} FROM ${f})`}}if(t.funcformat==="COERCE_SQL_SYNTAX"&&n==="pg_catalog.position"&&i.length===2){let o=this.visit(i[0],s);return `POSITION(${this.visit(i[1],s)} IN ${o})`}if(t.funcformat==="COERCE_SQL_SYNTAX"&&n==="pg_catalog.overlay"){if(i.length===4){let o=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(${o} PLACING ${f} FROM ${m} FOR ${T})`}else if(i.length===3){let o=this.visit(i[0],s),f=this.visit(i[1],s),m=this.visit(i[2],s);return `OVERLAY(${o} PLACING ${f} FROM ${m})`}}if(t.funcformat==="COERCE_SQL_SYNTAX"&&n==="pg_catalog.is_normalized"){let o=this.visit(i[0],s);if(i.length===2){let m=this.visit(i[1],s).replace(/'/g,"");return `${o} IS ${m} NORMALIZED`}else return `${o} IS NORMALIZED`}if(t.funcformat==="COERCE_SQL_SYNTAX"&&n==="pg_catalog.normalize"){let o=this.visit(i[0],s);if(i.length===2){let m=this.visit(i[1],s).replace(/'/g,"");return `normalize(${o}, ${m})`}else return `normalize(${o})`}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 o=this.visit(i[0],s),f=this.visit(i[1],s),m=this.visit(i[2],s),T=this.visit(i[3],s);return `(${o}, ${f}) OVERLAPS (${m}, ${T})`}if(n==="pg_catalog.timezone"&&i.length===2){let o=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(p.unwrapList(i[1].A_Expr.name),s);(m==="+"||m==="-"||m==="*"||m==="/")&&(o=s.parens(o));}return `${o} AT TIME ZONE ${f}`}let a=[];if(t.agg_star)t.agg_distinct?a.push("DISTINCT *"):a.push("*");else {let o=i.map(f=>this.visit(f,s));if(t.func_variadic&&o.length>0){let f=o.length-1;o[f]=`VARIADIC ${o[f]}`;}t.agg_distinct&&o.length>0?a.push("DISTINCT "+o.join(", ")):a.push(...o);}let u="";if(t.agg_order&&t.agg_order.length>0){let f=p.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 o=[];if(t.over.partitionClause){let T=p.unwrapList(t.over.partitionClause).map(E=>this.visit(E,s));o.push(`PARTITION BY ${T.join(", ")}`);}if(t.over.orderClause){let T=p.unwrapList(t.over.orderClause).map(E=>this.visit(E,s));o.push(`ORDER BY ${T.join(", ")}`);}let f=this.formatWindowFrame(t.over,s.spawn("FuncCall"));if(f&&o.push(f),o.length>0)if(s.isPretty()&&o.length>1){let m=o.map(T=>s.indent(T));l+=` OVER (${s.newline()}${m.join(s.newline())}${s.newline()})`;}else l+=` OVER (${o.join(" ")})`;else l+=" OVER ()";}return l}FuncExpr(t,s){let e=`func_${t.funcid}`,i=t.args?p.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 p.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(o=>(typeof o=="string"?o:o.String?.sval||o.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,o)=>o!=null?l==="interval"?o.startsWith("(")?`${l}${o}`:`${l} ${o}`:`${l}(${o})`:l,a=l=>l.map(o=>o.Integer&&o.Integer.ival!==void 0&&o.Integer.ival!==-1?`[${o.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 o=n(h.quoteIdentifierTypeName(l),r);return t.arrayBounds&&t.arrayBounds.length>0&&(o+=a(t.arrayBounds)),e.push(o),e.join(" ")}if(i.length===2){let[l,o]=i;if(l==="pg_catalog"&&o==="char")return e.push(n("pg_catalog.char",r)),e.join(" ");if(l==="pg_catalog"){let f=`${l}.${o}`;o==="bpchar"&&r?f="char":o==="varchar"?f="varchar":o==="numeric"?f="numeric":o==="int4"?f="int":o==="float8"?f="double precision":o==="float4"?f="real":o==="int8"?f="bigint":o==="int2"?f="smallint":o==="bool"?f="boolean":o==="interval"?(s.parentNodeTypes.includes("TypeCast"),f="interval"):o==="timestamptz"?r?(f=`timestamp(${r}) with time zone`,r=null):f="timestamp with time zone":o==="timetz"?r?(f=`time(${r}) with time zone`,r=null):f="time with time zone":o==="timestamp"?r?(f=`timestamp(${r})`,r=null):f="timestamp":o==="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=p.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=p.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 o=a.A_Const;if(o&&o.ival!==void 0){let f=typeof o.ival=="object"?o.ival.ival!==void 0?o.ival.ival:0:o.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=p.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(fi.includes(s))return true;for(let[e,i]of hi)if(i.includes(s))return true;return false}A_ArrayExpr(t,s){return `ARRAY[${p.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=p.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=p.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(${p.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=p.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=p.unwrapList(t.tableElts).map(n=>this.deparse(n,s));e.push(s.parens(r.join(", ")));}}else if(t.tableElts){let r=p.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=p.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=p.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=p.unwrapList(t.partbound.lowerdatums).map(a=>this.visit(a,s)).join(", ");e.push(`(${n})`);}if(t.partbound.upperdatums){e.push("TO");let n=p.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=p.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=p.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=p.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=p.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=p.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 ${p.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=p.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=p.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=p.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=p.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=p.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=p.unwrapList(t.exclusions).map(r=>{if(this.getNodeType(r)==="List"){let n=p.unwrapList(r);if(n.length>=2){let a=this.visit(n[0],s),u=n[1],l="";if(this.getNodeType(u)==="List"){let o=p.unwrapList(u);o.length>0&&o[0].String&&(l=o[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=p.unwrapList(t.partitionClause).map(a=>this.visit(a,s));i.push(`PARTITION BY ${n.join(", ")}`);}if(t.orderClause){let n=p.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=p.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 (${p.unwrapList(t.content).map(l=>this.visit(l,s)).join(", ")})`;case "GROUPING_SET_CUBE":return `CUBE (${p.unwrapList(t.content).map(l=>this.visit(l,s)).join(", ")})`;case "GROUPING_SET_SETS":return `GROUPING SETS (${p.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=p.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=p.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=p.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=p.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=p.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=p.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=p.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=p.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=p.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=p.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=p.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=p.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=p.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=p.unwrapList(t.indexParams).map(r=>this.visit(r,s));e.push(s.parens(i.join(", ")));}if(t.indexIncludingParams&&t.indexIncludingParams.length>0){let i=p.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=p.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=p.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=p.unwrapList(t.opclass).map(n=>this.visit(n,s)).join(".");if(t.opclassopts&&t.opclassopts.length>0){let n=p.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=p.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=p.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=p.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=p.unwrapList(t.bound.lowerdatums).map(r=>this.visit(r,s)).join(", ");e.push(`(${i})`);}if(t.bound.upperdatums){e.push("TO");let i=p.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=p.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=p.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=p.unwrapList(t.alias.colnames).map(l=>this.visit(l,s)).join(", ");n+=`(${u})`;}r=`(${r}) ${n}`;}return r}FromExpr(t,s){let r=p.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=p.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 o=(typeof u.sval=="object"?u.sval.sval:u.sval).replace(/'/g,"");a=o.toLowerCase()==="on"||o.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 o=(typeof u.sval=="object"?u.sval.sval:u.sval).replace(/'/g,"");a=o.toLowerCase()==="on"||o.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?p.unwrapList(t.args).map(l=>{let o=this.getNodeData(l);if(o.sval!==void 0){let f=typeof o.sval=="object"?o.sval.sval:o.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 o=p.unwrapList(t.args);for(let f of o)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?p.unwrapList(t.args).map(o=>o.VariableSetStmt?this.VariableSetStmt(o.VariableSetStmt,s):this.visit(o,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=p.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,o]=a;return `${o} 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],o=a[2];return `${h.quoteQualifiedIdentifier(l,o)} 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=p.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=p.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=p.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&&p.unwrapList(i.constraints).forEach(l=>{let o=s.spawn("ColumnDef",{isColumnConstraint:true}),f=this.visit(l,o);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=p.unwrapList(i.fdwoptions).map(o=>this.visit(o,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=p.unwrapList(i.fdwoptions).map(u=>this.visit(u,n));r.push(`(${a.join(", ")})`);}if(i.constraints){let a=p.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=p.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=p.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=p.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=p.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=p.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=p.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=p.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=p.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=p.unwrapList(n[0]));let u=a.filter(l=>l&&Object.keys(l).length>0).map(l=>{let o=this.visit(l,s);return o.endsWith(";")?o:o+";"});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=p.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=p.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=p.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=p.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=p.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=p.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=p.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=p.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=p.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 ${p.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 ${p.unwrapList(n.items).map(l=>{let o=this.getNodeData(l);if(this.getNodeType(l)==="String"){let f=o.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(""),o=this.getFunctionDelimiter(l);return `${o}${l}${o}`}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],o=this.getFunctionDelimiter(l);return `AS ${o}${l}${o}`}else return `AS ${u.map(l=>{let o=this.getFunctionDelimiter(l);return `${o}${l}${o}`}).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=p.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),o=p.unwrapList(l.items);if(o.length===1&&o[0].String)return `${n} = ${o[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=p.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=p.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=p.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=p.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=p.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=p.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=p.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=p.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=p.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=p.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=p.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=p.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 o=this.visit(l,s);u.push(o);}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=p.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=p.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=p.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=p.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=p.unwrapList(t.defnames).map(r=>this.visit(r,s));e.push(i.join("."));}if(t.stat_types&&t.stat_types.length>0){let i=p.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=p.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=p.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=p.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=p.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=p.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=p.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=p.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=p.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=p.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=p.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=p.unwrapList(t.args),n=[];for(let a of r)if(this.getNodeType(a)==="DefElem"){let l=this.getNodeData(a);if(l.defname==="language"){let o=this.visit(l.arg,i);n.push(`LANGUAGE ${o}`);}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=p.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=p.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=p.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=p.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=p.unwrapList(t.dictname).map(r=>this.visit(r,s));e.push(i.join("."));}if(t.options&&t.options.length>0){e.push("(");let i=p.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=p.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=p.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=p.unwrapList(t.dicts).map(r=>r.List&&r.List.items?p.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=p.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=p.unwrapList(t.dicts).map(r=>r.List&&r.List.items?p.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=p.unwrapList(t.dicts).map(r=>r.List&&r.List.items?p.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=p.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=p.unwrapList(t.dicts).map(r=>r.List&&r.List.items?p.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=p.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=p.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=p.unwrapList(t.objname).map(n=>this.visit(n,i)).join(".");}if(t.objfuncargs&&t.objfuncargs.length>0){let i=p.unwrapList(t.objfuncargs).map(r=>this.visit(r,s));e+=`(${i.join(", ")})`;}else if(t.objargs&&t.objargs.length>0){let i=p.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=p.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=p.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=p.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=p.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=p.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=p.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=p.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=p.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=p.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=p.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=p.unwrapList(t.options).map(r=>this.visit(r,s));e.push(`(${i.join(", ")})`);}if(t.rels&&t.rels.length>0){let i=p.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=p.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=p.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=p.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=p.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=p.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=p.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=p.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=p.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=p.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=p.unwrapList(t.objects).map(r=>this.visit(r,s)).join(", ");e.push(i);}break;default:if(t.objects&&t.objects.length>0){let i=p.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=p.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 o=p.unwrapList(t.opt),f=o.find(E=>E.DefElem&&E.DefElem.defname==="inherit"),m=o.find(E=>E.String&&E.String.sval==="admin"||E.DefElem&&E.DefElem.defname==="admin"),T=o.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 o=p.unwrapList(t.granted_roles).map(f=>this.visit(f,s)).join(", ");e.push(o);}if(t.is_grant?e.push("TO"):e.push("FROM"),t.grantee_roles&&t.grantee_roles.length>0){let o=p.unwrapList(t.grantee_roles).map(f=>this.visit(f,s)).join(", ");e.push(o);}if(t.is_grant){let o=[];r&&(u===true?o.push("ADMIN OPTION"):u===false?o.push("ADMIN FALSE"):o.push("ADMIN OPTION")),i&&(a===true?o.push("INHERIT OPTION"):a===false&&o.push("INHERIT FALSE")),n&&(l===true?o.push("SET TRUE"):l===false&&o.push("SET FALSE")),o.length>0&&e.push("WITH",o.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=p.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=p.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=p.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=p.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=p.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=p.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=p.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=p.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=p.unwrapList(t.columns).map(o=>this.visit(o,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=p.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=p.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=p.unwrapList(t.args).map(o=>this.visit(o,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=p.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=p.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=p.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=p.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=p.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=p.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=p.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=p.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=p.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=p.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=p.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=p.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=p.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=p.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=p.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=p.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=p.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=p.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=p.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=p.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=p.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&&p.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=p.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=p.unwrapList(n.DefElem.arg.List.items).map(l=>this.visit(l,r)).join(", ");i.push(u);}}}else {let n=p.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=p.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=p.unwrapList(t.defnames).map(n=>this.visit(n,s)).join(".");e.push(r);}if(e.push("("),t.args&&t.args.length>0){let r=p.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=p.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=p.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=p.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=p.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=p.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=p.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),o=l!==a?l:this.preserveOperatorDefElemCase(a);if((a.toLowerCase()==="commutator"||a.toLowerCase()==="negator")&&u.List){let f=p.unwrapList(u.List.items);if(f.length===1&&f[0].String)return `${o} = ${f[0].String.sval}`}return a.toLowerCase()==="commutator"||a.toLowerCase()==="negator"?`${o} = ${this.visit(u,s)}`:`${o} = ${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(p.unwrapList(t.defnames).map(i=>this.visit(i,s)).join(".")),t.definition&&t.definition.length>0){let i=s.spawn("DefineStmt"),r=p.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=p.unwrapList(t.defnames).map(r=>this.visit(r,s));e.push(i.join("."));}if(t.args&&t.args.length>0){let i=p.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,o;if(l.argType&&l.argType.names){let f=l.argType.names;f.length>=2&&f[0].String&&f[0].String.sval==="pg_catalog"?o=f[1].String.sval:f.length>=1&&f[0].String?o=f[0].String.sval:o="unknown";}else o=this.visit({TypeName:l.argType},s);e.push(`(ORDER BY ${o})`);}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=p.unwrapList(u.items),o=this.visit(l[0],s),f=l.slice(1).map(m=>this.visit(m,s));e.push(`(${o} 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 o=this.visit(l,s);e.push(`(${o} ORDER BY ${o})`);}else {let o=this.visit(l,s);e.push(`(${o})`);}}else {let l=a.map(o=>Object.keys(o).length===0?"*":this.visit(o,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=p.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),o=l!==a?l:a;return u.String?`${o} = '${u.String.sval}'`:`${o} = ${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(p.unwrapList(t.defnames).map(i=>this.visit(i,s)).join(".")),t.definition&&t.definition.length>0){e.push("(");let i=p.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(p.unwrapList(t.defnames).map(i=>this.visit(i,s)).join(".")),t.definition&&t.definition.length>0){e.push("(");let i=p.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=p.unwrapList(t.defnames).map(r=>this.visit(r,s)).join(".");e.push(i);}if(t.definition&&t.definition.length>0){e.push("(");let i=p.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=p.unwrapList(t.defnames).map(r=>this.visit(r,s)).join(".");e.push(i);}if(t.definition&&t.definition.length>0){e.push("(");let i=p.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(p.unwrapList(t.defnames).map(i=>this.visit(i,s)).join(".")),t.definition&&t.definition.length>0){let i=p.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 o;return l.String?o=`'${l.String.sval}'`:o=this.visit(l,s),`${u} = ${o}`}}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=p.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=p.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=p.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=p.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=p.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=p.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=p.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=p.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=p.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=p.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=p.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=p.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=p.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=p.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),o=this.getNodeData(u[1]);if(o&&o.items&&Array.isArray(o.items)){let f=o.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=p.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=p.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=p.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=p.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=p.unwrapList(t.named_args).map(a=>this.visit(a,s));i.push(`XMLATTRIBUTES(${n.join(", ")})`);}if(t.args&&t.args.length>0){let n=p.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=p.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=p.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=p.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=p.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=p.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=p.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=p.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=p.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=p.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=p.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=p.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=p.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=p.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=p.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=p.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=p.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=p.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=p.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=p.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=p.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=p.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=p.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(()=>{os();ne();z.deparse;});function ut(c){if("String"in c)return c.String.sval}function M(c){return c.map(ut).filter(t=>t!=null)}function q(c){return c==null?[]:c.List!==void 0?c.List.items||[]:Array.isArray(c)?c:[c]}function kt(c){return h.quoteIdentifier(c)}function Z(c){return Object.keys(c)[0]}function ps(c){if("A_Const"in c){if(c.A_Const.ival)return c.A_Const.ival.ival;if(c.A_Const.fval)return c.A_Const.fval.fval;if(c.A_Const.sval)return c.A_Const.sval.sval;if(c.A_Const.boolval)return c.A_Const.boolval.boolval;if(c.A_Const.isnull)return null}}var V=C(()=>{ae();});function fs(c){let t=c.toLowerCase().trim();if(t.startsWith("_")||t.endsWith("[]"))return "TEXT";let s=gi[t];if(!s)throw new G(`Unsupported PostgreSQL type: "${c}"`);return s}function jt(c){let t=c.toLowerCase();return ["serial","serial4","bigserial","serial8","smallserial","serial2"].includes(t)}function $t(c){let t=c.toLowerCase();return ["varchar","character varying","char","character","bpchar"].includes(t)}function Ut(c){let t=c.toLowerCase();return ["numeric","decimal"].includes(t)}var G,R,gi,cs,Ti,Ft,tt=C(()=>{V();G=class extends Error{},R=class extends G{constructor(s,e){super(e??`Unsupported node type: ${Z(s)}`);this.node=s;}},gi={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"},cs=["<",">","<=",">=","=","<>","!=","+","-","*","/","%","&","|","<<",">>","||","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","->>"];Ti={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(Ti));});var le=je(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 hs=je(et=>{Object.defineProperty(et,"__esModule",{value:true});et.BaseVisitor=et.DeparserContext=void 0;var Si=le(),oe=class c{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:o,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 Si.SqlFormatter(`
45
- `," ",s),this.select=n,this.from=a,this.group=u,this.sort=l,this.insertColumns=o,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 c({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()}};et.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}};et.BaseVisitor=pe;});var Mt,ms=C(()=>{tt();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=Z(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 Ci,Ai,Ni,Ri,st,qt,Es=C(()=>{tt();Ci=["DECLARE","IF","ELSIF","ELSE","LOOP","WHILE","FOR","FOREACH","EXCEPTION","RAISE","PERFORM","EXECUTE","SELECT"],Ai=/^NEW\.(\w+)\s*(?::=|=)\s*(.+)$/is,Ni=/^RETURN\s+(NEW|OLD)$/i,Ri=/^(INSERT|UPDATE|DELETE)\b/i,st=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(Ni);if(u){r=u[1].toUpperCase(),i.push({type:"return",value:r});continue}let l=a.match(Ai);if(l){i.push({type:"assignment",column:l[1],expression:l[2].trim()});continue}if(Ri.test(a)){i.push({type:"dml",sql:a});continue}throw new st(`"${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 st('"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 st("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&&Ci.includes(s))throw new st(`"${s}" is not translatable to SQLite`,t)}};});var lt,ce=C(()=>{lt=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 lt(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 ot,fe=C(()=>{Vt();ot=class extends W{constructor(t){super({...t,isSerial:true});}};});function Oi(c,t){let{precision:s,scale:e}=t,i=10**e,r=10**(s-e);return Math.abs(Math.round(c*i)-c*i)<1e-4&&Math.abs(c)<r}var pt,he=C(()=>{k();pt=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(!Oi(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 ct,me=C(()=>{k();ct=class extends L{get sqliteType(){return "BLOB"}};});var ft,Ee=C(()=>{k();ft=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 gs(c){try{return {ok:!0,value:JSON.parse(c)}}catch{return {ok:false}}}var ht,ge=C(()=>{k();ht=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=gs(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."):gs(t).ok?this.validationPass():this.validationFail("Invalid JSON text.","Patch rows with valid JSON.")}};});function yi(c){if(!/^\d{4}-\d{2}-\d{2}$/.test(c))return false;let t=new Date(`${c}T00:00:00.000Z`);return !Number.isNaN(t.getTime())&&t.toISOString().slice(0,10)===c}var mt,Te=C(()=>{v();mt=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"||!yi(t)?this.validationFail("Invalid date.","Patch rows with YYYY-MM-DD dates."):this.validationPass()}};});function bi(c){let t=c.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 Et,Se=C(()=>{v();Et=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"||!bi(t)?this.validationFail("Invalid time.","Patch rows with HH:MM[:SS] times."):this.validationPass()}};});function Ii(c){let t=c.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]),o=new Date(Date.UTC(s,e-1,i)),f=o.getUTCFullYear()===s&&o.getUTCMonth()===e-1&&o.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 gt,Ce=C(()=>{v();gt=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"||!Ii(t)?this.validationFail("Invalid timestamp.","Patch rows with ISO timestamps."):this.validationPass()}};});var Tt,Ae=C(()=>{v();Tt=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 St,Ne=C(()=>{v();St=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 Ts(c){try{return {ok:!0,value:JSON.parse(c)}}catch{return {ok:false}}}var it,Re=C(()=>{k();it=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=Ts(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=Ts(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 Ss(c){return _i.test(c.toLowerCase())}var Li,_i,Ct,Oe=C(()=>{v();Li="????????-????-????-????-????????????",_i=/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/;Ct=class extends I{get isShimBacked(){return true}checkConstraint(){let t=this.quoteIfNeeded(this.context.column);return `${t} IS NULL OR ${t} GLOB '${Li}'`}serialize(t){if(this.isNullish(t))return t;if(typeof t!="string")throw this.checkError("uuid_format",t);let s=t.toLowerCase();if(!Ss(s))throw this.checkError("uuid_format",t);return s}validateStorage(t){return this.isNullish(t)?this.validationPass():typeof t!="string"||!Ss(t)?this.validationFail("Invalid UUID.","Patch rows with valid UUIDs."):this.validationPass()}};});function wi(c){let t=c.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 vi(c){let t=c.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 di(c){if(!c.includes(":"))return false;try{return new URL(`http://[${c}]/`),!0}catch{return false}}function Cs(c){let t=wi(c);return t?vi(t.address)?t.prefix===null||t.prefix>=0&&t.prefix<=32:di(t.address)?t.prefix===null||t.prefix>=0&&t.prefix<=128:false:false}var At,ye=C(()=>{v();At=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(!Cs(s))throw this.checkError("inet_format",t);return s}validateStorage(t){return this.isNullish(t)?this.validationPass():typeof t!="string"||!Cs(t.trim())?this.validationFail("Invalid inet address.","Patch rows with valid inet strings."):this.validationPass()}};});var Nt,be=C(()=>{v();Nt=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(c,t){if(t?.isArray){let e=J(c,{...t,isArray:false});return new it(c,e)}if(t?.enumValues)return new St(c,t.enumValues);let s=c.pgTypeName.toLowerCase().trim();if(s.startsWith("_")||s.endsWith("[]")){let e=s.startsWith("_")?s.slice(1):s.slice(0,-2),i={...c,pgTypeName:e},r=J(i);return new it(c,r)}return Pi.has(s)?new ot(c):Di.has(s)?new W(c):Ui.has(s)?new ft(c):Fi.has(s)?new ht(c):Vi.has(s)?new mt(c):Gi.has(s)?new Et(c):Wi.has(s)?new gt(c):Ji.has(s)?new Tt(c):$i.has(s)?new ct(c):ki.has(s)?new pt(c,t?.numericPrecision):Bi.has(s)?new Ct(c):Mi.has(s)?new I(c,63):qi.has(s)?new At(c):ji.has(s)?new I(c,t?.lengthConstraint):new Nt(c)}var Di,Pi,ki,ji,$i,Ui,Fi,Bi,Mi,qi,Vi,Gi,Wi,Ji,Ie=C(()=>{Vt();fe();he();v();me();Ee();ge();Te();Se();Ce();Ae();Ne();Re();Oe();ye();be();Di=new Set(["int2","smallint","int4","integer","int","int8","bigint"]),Pi=new Set(["serial","serial4","bigserial","serial8","smallserial","serial2"]),ki=new Set(["float4","real","float8","double precision","numeric","decimal"]),ji=new Set(["text","varchar","character varying","char","character","bpchar"]),$i=new Set(["bytea"]),Ui=new Set(["bool","boolean"]),Fi=new Set(["json","jsonb"]),Bi=new Set(["uuid"]),Mi=new Set(["name"]),qi=new Set(["inet"]),Vi=new Set(["date"]),Gi=new Set(["time","timetz","time without time zone","time with time zone"]),Wi=new Set(["timestamp","timestamptz","timestamp without time zone","timestamp with time zone"]),Ji=new Set(["interval"]);});function Le(c,t="auto"){let s=c.toLowerCase(),e=Gt[s];if(!e)return null;switch(t){case "translate":{if(!e.sqlite)throw new Error(`No SQLite translation for function "${c}"`);return {sqliteExpr:e.sqlite(),jsFn:null}}case "synthetic":{if(!e.js)throw new Error(`No JS implementation for function "${c}"`);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 As,Gt,_e=C(()=>{As="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:()=>As,js:()=>crypto.randomUUID()},uuid_generate_v4:{sqlite:()=>As,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 Ns,Rs,Wt,Os=C(()=>{ae();tt();Ns=$e(hs());V();Rs=$e(le());V();ms();zt();Es();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=Z(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 Rs.SqlFormatter;s=new Ns.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=>Ve(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":fs(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,o=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)),o=!!(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:o};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 o=l.sqlite();return o.includes("(")?o:`${o}(${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(!cs.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],o=["text","varchar","character varying","char","bpchar","name","uuid"].includes(u?.toLowerCase());try{let f=this.parsePgArrayLiteral(n,o);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(o=>"AlterTableCmd"in o&&!i.includes(o.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 o of r){let f=o.AlterTableCmd.subtype;if(n.includes(f)){let m={...t,cmds:[o]};u.push(super.AlterTableStmt(m,s));}else if(a.includes(f))l.push(o.AlterTableCmd);else throw new R({AlterTableStmt:t},`AlterTableCmd with subtype ${f} is not supported in SQLite`)}if(l.length>0){let o=this.getRelationName(t.relation);u.push(this.generateRebuildSql(o,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 "),o=this.buildTriggerBody(n,i,s);return [`CREATE TRIGGER ${e}`,`${a} ${l} ON ${i}`,"FOR EACH ROW","BEGIN",...o.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 H,r=new X,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})`),o=[...a,...u,...l];t.tables[e]={...t.tables[e],sql:`CREATE TABLE ${N(s)} (${o.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();tt();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?ut(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]?ut(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),o=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),o.length>0&&(f.group=o),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 o=2;for(;`${l}_${o}`in s;)o++;l=`${l}_${o}`;}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]?ut(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 Rt,ys=C(()=>{Rt=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 bs=C(()=>{k();ce();Vt();fe();he();v();me();Ee();ge();Te();Se();Ce();Ae();Ne();Re();Oe();ye();be();Ie();_e();ys();});function Ls(c){let t=new Map;for(let s of c.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 _s(c){let t=new Map;for(let s of c.stmts??[]){if(!s.stmt||!("VariableSetStmt"in s.stmt))continue;let e=s.stmt.VariableSetStmt,i=e.name,r=ps(e.args?.[0]??{});t.set(i,{value:r,local:e.is_local});}return t}function ws(c){let t=new x,s=new Set,e=[];for(let i of c.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",o=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}`;Is.has(b)||(Is.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:o,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 vs(c,t){let s=new Map;for(let e of c.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 Rt(r,n);for(let u of i.tableElts??[]){if(!("ColumnDef"in u))continue;let l=u.ColumnDef,o=l.colname;if(!o)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),Y=g(1);typeof O=="number"&&typeof Y=="number"&&O>0&&Y>=0&&(A.numericPrecision={precision:O,scale:Y});}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"),de=b.find(O=>O.Constraint?.contype==="CONSTR_FOREIGN"),De=b.find(O=>O.Constraint?.contype==="CONSTR_CHECK"),Pe;if(de){let O=de.Constraint,Y=O.pktable?.relname,Bs=O.pktable?.schemaname,ke=O.pk_attrs?.[0]?.String?.sval;Y&&ke&&(Pe={refSchema:Bs,refTable:Y,refColumn:ke,constraintName:O.conname||void 0});}let Fs={schema:n,table:r,column:o,pgTypeName:m,nullable:!d&&!_,defaultValue:null,defaultFn:null,isPrimaryKey:_,isUnique:!!D,isSerial:y,isGenerated:!!F,fkRef:Pe,hasCheck:!!De,checkConstraintName:De?.Constraint?.conname||void 0,uniqueConstraintName:D?.Constraint?.conname||void 0};a.set(o,J(Fs,A));}s.set(`${n}.${r}`,a);}return s}function ds(c){let t=[];for(let s of c.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 o=(u.keys??[]).map(f=>f.String?.sval??f.String?.str).filter(Boolean);if(o.length===0)continue;t.push({schema:r,table:i,kind:"unique",name:u.conname||void 0,columns:o});}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 o=(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:o,refSchema:u.pktable?.schemaname,refTable:m,refColumns:f});}}}return t}function Ds(c){let t=[];for(let s of c.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 Is,Ps=C(()=>{we();V();Lt();bs();tt();Is=new Set;});var js={};Js(js,{Policy:()=>$,deparseDdl:()=>ve,deparseExpression:()=>Xi,deparsePostgresDdl:()=>Hi,deparseSelect:()=>Ki,parse:()=>K,parseExpression:()=>ks,translatePostgresDdl:()=>Yi});async function Yi(c,t={}){let s=await K(c);return ve(s,t).ddl}async function Hi(c,t={}){let s=await K(c);return {ast:s,...ve(s,t)}}function ve(c,t={}){let s=Ls(c),e=vs(c,s),i=_s(c),r=ds(c),n=Ds(c),a=new Wt(c,{...t,enums:s}),{policies:u,tables:l}=ws(c);if(t.strict)for(let o of u){if(!e.get(`${o.data.schema??"public"}.${o.data.table}`))throw new Error(`Policy "${o.data.name}" references unknown table "${o.data.table}"`);if(!l.has(o.data.table))throw new Error(`RLS is not enabled on table "${o.data.table}"`)}return {ddl:a.deparseQuery(),enums:s,rls:{tables:l,policies:u},schema:e,vars:i,tableConstraints:r,comments:n}}async function ks(c){let s=(await K(`SELECT 1 WHERE ${c}`)).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 Xi(c){let t=await ks(c);return new x().deparse(t)}async function Ki(c){let s=(await K(c)).stmts?.[0]?.stmt;if(!s||!("SelectStmt"in s))throw new Error("expected SelectStmt");return new x().deparse(s)}var $s=C(()=>{es();Os();we();Ps();Lt();});zt();var Xs=(c={})=>{let t=(s="m")=>[...c.exclude_tables??[],"sqlite_%"].map(e=>e.includes("%")?`${s}.name NOT LIKE '${e}'`:`${s}.name != '${e}'`).join(" AND ");return `WITH table_info AS (SELECT
49
- json_group_array(
50
- json_object(
51
- 'name', m.name,
52
- 'sql', m.sql,
53
- 'schema', '',
54
- 'type', m.type,
55
- 'rows', -1,
56
- 'engine', '',
57
- 'collation', ''
58
- )
59
- ) AS data
60
- FROM sqlite_master m
61
- WHERE m.type IN ('table', 'view') AND ${t()}),
62
- column_info AS (SELECT
63
- json_group_array(
64
- json_object(
65
- 'table', m.name,
66
- 'name', p.name,
67
- 'type', CASE
68
- WHEN INSTR(LOWER(p.type), '(') > 0
69
- THEN SUBSTR(LOWER(p.type), 1,
70
- INSTR(LOWER(p.type), '(') - 1)
71
- ELSE LOWER(p.type)
72
- END,
73
- 'nullable', CASE
74
- WHEN p."notnull" = 0 THEN json('true')
75
- ELSE json('false') END,
76
- 'default_value', p.dflt_value,
77
- 'is_primary_key',
78
- CASE WHEN p.pk > 0 THEN json('true') ELSE json('false') END,
79
- 'schema', '',
80
- 'ordinal_position', p.cid,
81
- 'collation', '',
82
- 'character_maximum_length',
83
- CASE
84
- WHEN LOWER(p.type) LIKE 'char%' OR
85
- LOWER(p.type) LIKE 'varchar%' THEN
86
- CASE
87
- WHEN INSTR(p.type, '(') > 0 THEN
88
- REPLACE(SUBSTR(p.type, INSTR(p.type, '(') + 1,
89
- LENGTH(p.type) -
90
- INSTR(p.type, '(') - 1), ')', '')
91
- ELSE null
92
- END
93
- ELSE null
94
- END,
95
- 'precision',
96
- CASE
97
- WHEN LOWER(p.type) LIKE 'decimal%' OR
98
- LOWER(p.type) LIKE 'numeric%' THEN
99
- CASE
100
- WHEN INSTR(p.type, '(') > 0 THEN
101
- json_object(
102
- 'precision',
103
- CAST(SUBSTR(p.type, INSTR(p.type, '(') + 1,
104
- INSTR(p.type, ',') -
105
- INSTR(p.type, '(') -
106
- 1) AS INTEGER),
107
- 'scale',
108
- CAST(SUBSTR(p.type, INSTR(p.type, ',') + 1,
109
- INSTR(p.type, ')') -
110
- INSTR(p.type, ',') -
111
- 1) AS INTEGER)
112
- )
113
- ELSE null
114
- END
115
- ELSE null
116
- END,
117
- 'is_identity',
118
- CASE
119
- WHEN p.pk = 1 AND LOWER(p.type) LIKE '%int%'
120
- THEN json('true')
121
- WHEN LOWER((SELECT sql FROM sqlite_master WHERE
122
- name = m.name)) LIKE
123
- '%' || p.name || '%autoincrement%' THEN json('true')
124
- ELSE json('false')
125
- END,
126
- 'is_generated',
127
- CASE WHEN p.hidden IN (2, 3)
128
- THEN json('true') ELSE json('false') END
129
- )
130
- ) AS data
131
- FROM sqlite_master m
132
- JOIN pragma_table_xinfo(m.name) p
133
- ON m.type IN ('table', 'view') AND ${t()}
134
- WHERE p.hidden != 1),
135
- index_info AS (SELECT
136
- json_group_array(
137
- json_object(
138
- 'table', idx_data.tbl,
139
- 'name', idx_data.idx_name,
140
- 'unique', CASE
141
- WHEN idx_data.is_unique = 1 THEN json('true')
142
- ELSE json('false') END,
143
- 'columns', json(idx_data.cols),
144
- 'schema', ''
145
- )
146
- ) AS data
147
- FROM (SELECT
148
- m.name AS tbl,
149
- idx.name AS idx_name,
150
- idx."unique" AS is_unique,
151
- json_group_array(ic.name ORDER BY ic.seqno) AS cols
152
- FROM sqlite_master m
153
- JOIN pragma_index_list(m.name) idx
154
- ON m.type = 'table' AND ${t()}
155
- JOIN pragma_index_info(idx.name) ic
156
- -- only include explicit CREATE INDEX objects; skip autoindexes from PK/UNIQUE constraints
157
- WHERE idx.origin = 'c' AND idx.name NOT LIKE 'sqlite_autoindex_%'
158
- GROUP BY m.name, idx.name, idx."unique") idx_data),
159
- fk_info AS (SELECT
160
- json_group_array(
161
- json_object(
162
- 'table', m.name,
163
- 'column', fk."from",
164
- 'ref_table', fk."table",
165
- 'ref_column', fk."to",
166
- 'on_update', fk.on_update,
167
- 'on_delete', fk.on_delete,
168
- 'schema', '',
169
- 'is_visible', true,
170
- 'foreign_key_name',
171
- 'fk_' || m.name || '_' || fk.id || '_' || fk."table",
172
- 'fk_def',
173
- 'FOREIGN KEY (' || fk."from" || ') REFERENCES ' || fk."table" ||
174
- '(' || fk."to" || ')' ||
175
- ' ON UPDATE ' || fk.on_update || ' ON DELETE ' || fk.on_delete
176
- )
177
- ) AS data
178
- FROM sqlite_master m
179
- JOIN pragma_foreign_key_list(m.name) fk
180
- ON m.type = 'table' AND ${t()}),
181
- pk_info AS (SELECT
182
- json_group_array(
183
- json_object(
184
- 'table', pk.tbl,
185
- 'columns', json(pk.cols),
186
- 'schema', '',
187
- 'field_count', pk.field_count
188
- )
189
- ) AS data
190
- FROM (SELECT
191
- m.name AS tbl,
192
- json_group_array(p.name ORDER BY p.pk) AS cols,
193
- COUNT(p.name) AS field_count
194
- FROM sqlite_master m
195
- JOIN pragma_table_info(m.name) p
196
- ON m.type = 'table' AND ${t()} AND p.pk > 0
197
- GROUP BY m.name) pk),
198
- view_info AS (SELECT
199
- json_group_array(
200
- json_object('name', m.name, 'sql', m.sql, 'schema', '')
201
- ) AS data
202
- FROM sqlite_master m
203
- WHERE m.type = 'view' AND ${t()}),
204
- trigger_info AS (SELECT
205
- json_group_array(
206
- json_object(
207
- 'table', m.tbl_name,
208
- 'name', m.name,
209
- 'sql', m.sql,
210
- 'schema', ''
211
- )
212
- ) AS data
213
- FROM sqlite_master m
214
- WHERE m.type = 'trigger' AND ${t("m")}),
215
- unique_info AS (SELECT
216
- json_group_array(
217
- json_object(
218
- 'table', uc.tbl,
219
- 'name', uc.idx_name,
220
- 'columns', json(uc.cols),
221
- 'schema', ''
222
- )
223
- ) AS data
224
- FROM (SELECT
225
- m.name AS tbl,
226
- idx.name AS idx_name,
227
- json_group_array(ic.name ORDER BY ic.seqno) AS cols
228
- FROM sqlite_master m
229
- JOIN pragma_index_list(m.name) idx
230
- ON m.type = 'table' AND ${t()}
231
- JOIN pragma_index_info(idx.name) ic
232
- WHERE idx.origin = 'u'
233
- GROUP BY m.name, idx.name) uc)
234
- SELECT
235
- (SELECT data FROM table_info) AS tables,
236
- (SELECT data FROM column_info) AS columns,
237
- (SELECT data FROM index_info) AS indexes,
238
- (SELECT data FROM fk_info) AS foreign_keys,
239
- (SELECT data FROM pk_info) AS primary_keys,
240
- (SELECT data FROM view_info) AS views,
241
- (SELECT data FROM trigger_info) AS triggers,
242
- (SELECT data FROM unique_info) AS unique_constraints,
243
- ${c.name?`'${c.name}'`:"'sqlite'"} AS database_name,
244
- ${c.version?`'${c.version}'`:"sqlite_version()"} AS version;`};function j(c){if(!c)return [];try{return Array.isArray(c)?c:JSON.parse(c)}catch{return []}}async function Je(c,t={}){let e=(await c.exec(Xs(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 si=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(!si.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 nt(c){return c==="migrations"||c==="supabase_migrations.schema_migrations"||c==="supabase_migrations.seed_files"}function Ye(c){return {...c,tables:c.tables.filter(t=>!nt(t.name)),columns:c.columns.filter(t=>!nt(t.table)),indexes:c.indexes.filter(t=>!nt(t.table)),foreign_keys:c.foreign_keys.filter(t=>!nt(t.table)),primary_keys:c.primary_keys.filter(t=>!nt(t.table))}}var _t=class{constructor(t,s,e={}){this.conn=t;this.desiredSchema=s;this.options=e;this.differ=new H,this.planner=new X;}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=Ye(t),a=Ye(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 Xe=/^\{\{(.+)\}\}$/;function Ke(c){return typeof c=="string"&&Xe.test(c)}function ui(c){return Xe.exec(c)[1]}var He=Symbol("unresolved");function Qe(c,t){let s=ui(c),e=rt(t,s,He);if(e===He)throw new Error(`Unresolved variable: {{${s}}}`);return e}function P(c,t){let s={};for(let[e,i]of Object.entries(c)){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(Ke(e)){let r=Qe(e,t),a=oi(r,i);s.$always=a;continue}if(i!=null&&typeof i=="object"&&!Array.isArray(i)){s[e]=ze(i,t);continue}s[e]=i;}return s}function ze(c,t){let s={};for(let[e,i]of Object.entries(c))e==="$not"&&i!=null&&typeof i=="object"?s[e]=ze(i,t):li(i)?s[e]={...i,where:i?.where?P(i?.where,t):void 0}:Ke(i)?s[e]=Qe(i,t):s[e]=i;return s}function li(c){return c!=null&&typeof c=="object"&&c.type==="query"}function oi(c,t){for(let[s,e]of Object.entries(t))switch(s){case "$eq":if(c!==e)return false;break;case "$neq":if(c===e)return false;break;case "$in":if(!Array.isArray(e)||!e.includes(c))return false;break;case "$notIn":if(Array.isArray(e)&&e.includes(c))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=pi(t.type);if(!i)return t;let r=rt(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:Ze(t.where,u)}}case "UPDATE":{let u=this.combineUsing(n,a,s),l={...t,where:Ze(t.where,u)};if(u.$always===false)return l;let o=this.combineWithCheck(n,a,s,i);if(t.values&&Object.keys(o).length>0){let f=new Set(Object.keys(t.values));this.validateWithCheck(o,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 o of l)this.validateWithCheck(u,o,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 pi(c){switch(c){case "query":return "SELECT";case "insert":case "upsert":case "put":return "INSERT";case "update":return "UPDATE";case "delete":return "DELETE";default:return}}function Ze(c,t){return !c||Object.keys(c).length===0?t:Object.keys(t).length===0?c:{$and:[c,t]}}function vt(c,t,s){for(let[e,i]of Object.entries(c)){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(!ci(n,a,u))return false}return true}function ci(c,t,s){switch(t){case "$eq":return c===s;case "$neq":return c!==s;case "$gt":return c>s;case "$gte":return c>=s;case "$lt":return c<s;case "$lte":return c<=s;case "$in":return Array.isArray(s)&&s.includes(c);case "$notIn":return !Array.isArray(s)||!s.includes(c);case "$is":return c===s;case "$isNot":return c!==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 ts(c){let t={};for(let s in c){let e=c[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 Ot=class c extends Connection{dialect="sqlite";deserializeRow(t){return this.config.ddlDialect==="postgres"?ts(t):t}constructor(t={}){super({...t,translation:{...t.translation,schemas:{appendDefaultSchema:false,approach:"quote",defaultSchema:"public",...t.translation?.schemas},deparse:c.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(()=>($s(),js));return await i(t,{forceDefaultSchema:s,introspection:e,schemaHandling:this.config.translation?.schemas?.approach==="snake_case"?"prefix":"default"})}async introspect(t){Me(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 Je(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 o=l[u],f=l.schema??r;return !f&&r&&o.includes(i)&&([f,o]=o.split(i)),{...l,[u]:o,schema:f??r}},a=u=>{let l=n()(u),o=l.ref_table,f=l.ref_schema??r;return o?.includes(i)&&([f,o]=o.split(i)),{...l,ref_table:o,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 o=l.context,f=e.find(m=>m.table===o.table&&m.name===o.column);if(f&&(f.pg_type=o.pgTypeName,o.isGenerated!==void 0&&(f.is_generated=o.isGenerated)),o.fkRef?.constraintName){let m=i.find(T=>T.table===o.table&&T.column===o.column&&T.ref_table===o.fkRef.refTable&&T.ref_column===o.fkRef.refColumn);m&&(m.foreign_key_name=o.fkRef.constraintName);}o.uniqueConstraintName&&r.push({schema:o.schema,table:o.table,name:o.uniqueConstraintName,columns:[o.column]}),o.hasCheck&&n.push({schema:o.schema,table:o.table,expression:"",name:o.checkConstraintName,column:o.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 o=0;o<u.columns.length;o++){let f=i.find(m=>m.table===u.table&&m.column===u.columns[o]&&m.ref_table===l&&m.ref_column===(u.refColumns?.[o]??""));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(`
245
-
246
- `);return new _t(this,s,{onTranslation:async e=>{if(this.config.translation){let i={enums:e.enums,rls:e.rls,schema:e.schema,vars:e.vars,tableConstraints:e.tableConstraints??[],comments:e.comments??[]};this.config.translation.deparse=i;}}})}get maxBoundParameters(){return this.config.maxBoundParameters??100}assertParamLimit(t){let s=t?.length??0,e=this.maxBoundParameters;if(!(s<=e))throw Object.assign(new Error(`Query exceeds max bound parameters (${s} > ${e}). SQLite drivers vary in how many parameters they accept per statement; @supabase/lite enforces a conservative limit of ${e} for portability. Split the query (e.g. chunk large .in() filters or batch INSERTs) on the caller.`),{code:"54000"})}prepareBindParams(t){return this.assertParamLimit(t),this.normalizeBindParams(t)}normalizeBindParams(t){if(!t||t.length===0)return [];let s=[];for(let e=0;e<t.length;e++){let i=t[e];if(i===void 0)continue;if(i===null){s.push(i);continue}let r=typeof i;if(r==="boolean"){s.push(i?1:0);continue}if(r==="number"||r==="bigint"||r==="string"){s.push(i);continue}if(i instanceof Uint8Array||i instanceof ArrayBuffer||i instanceof Date){s.push(i);continue}throw new Error(`Cannot bind value at parameter ${e+1}: unsupported type ${Array.isArray(i)?"array":r}`)}return s}normalizeDbError(t){let s=t,e=s?.cause?.code??s?.code,i=s?.cause?.message??s?.message??String(t);if(e==="SQLITE_CONSTRAINT_NOTNULL")return Object.assign(new Error(i),{code:"23502",detail:i});if(e==="SQLITE_CONSTRAINT_UNIQUE"||e==="SQLITE_CONSTRAINT_PRIMARYKEY")return Object.assign(new Error(i),{code:"23505",detail:i});if(e==="SQLITE_CONSTRAINT_FOREIGNKEY")return Object.assign(new Error(i),{code:"23503",detail:i});if(typeof i=="string"){if(/too many SQL variables/i.test(i)){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:i})}let r=i.match(/no such table:\s*([A-Za-z0-9_.]+)/i);if(r){let a=r[1],u=a.lastIndexOf("."),l=u>=0?a.slice(0,u):void 0,o=u>=0?a.slice(u+1):a;return new RelationNotFoundError(l,o)}let n=i.match(/no such column:\s*([A-Za-z0-9_.]+)/i);if(n)return Object.assign(new Error(`column ${n[1]} does not exist`),{code:"42703",detail:i})}return t}async onPostgrestAST(t,s){if(this.config.ddlDialect==="sqlite")return t.schema=void 0,this.applyRls(t,s);let e=this.config.translation?.schemas?.appendDefaultSchema,i=this.config.translation?.schemas?.defaultSchema;if(t.schema&&t.schema===i&&!e?t.schema=void 0:!t.schema&&i&&e&&(t.schema=i),!t.from)return t;let r=await this.introspect({useCache:true}),n=t.schema??(e&&i?i:""),a=t.from;if(!(r.tables.some(l=>l.name===a&&(l.schema??"")===n)||r.views.some(l=>l.name===a&&(l.schema??"")===n))){if(!(r.tables.some(o=>o.name===a&&["","public",i].includes(o.schema??""))||r.views.some(o=>o.name===a&&["","public",i].includes(o.schema??""))))throw new RelationNotFoundError(n,a);t.schema=void 0;}return this.applyRls(t,s)}applyRls(t,s){let e=this.config.translation?.deparse?.rls;if(!e||!s)return t;let i=this.config.translation?.schemas?.defaultSchema||void 0;return new dt(e.tables,e.policies,i).enforce(t,s)}};var Jt=class extends Ot{constructor(s){super({...s,introspection:{...s.introspection,version:"3.47.0"}});this.config=s;}dialect="sqlite";driver=null;kysely=null;fetch(s,e){let i=s instanceof URL?new URL(s.toString(),this.config.host):new URL(s,this.config.host);return fetch(i,{...e,headers:{"Content-Type":"application/json",Accept:"application/json",Authorization:`Bearer ${this.config.token}`,...e?.headers}})}async introspect(s){let e=new URLSearchParams({useCache:s?.useCache?"1":"0",postprocess:s?.postprocess?"1":"0"}),i=await this.fetch(`/v1/projects/${this.config.projectRef}/db/introspect?${e}`),r=await i.text();if(!i.ok)throw console.error(r),new Error(`Failed to get project introspect: ${i.status} ${i.statusText}`);try{let n=JSON.parse(r);if(!n)throw new Error("Failed to get project introspect");return n}catch(n){throw console.error(n),console.log(r),new Error(`Failed to parse introspect response: "${r}"`)}}async transaction(s,e){let i=await this.fetch(`/v1/projects/${this.config.projectRef}/db/transaction?intent=${e?.intent??"migration"}`,{method:"POST",body:JSON.stringify({statements:s})});if(!i.ok)throw new Error(`Failed to execute transaction: ${i.status} ${i.statusText}`)}async exec(s,...e){let i=await this.fetch(`/v1/projects/${this.config.projectRef}/db/exec`,{method:"POST",body:JSON.stringify({statement:s,parameters:e})}),r=await i.text();if(!i.ok)throw console.error(r),new Error(`Failed to execute statement: ${i.status} ${i.statusText}`);try{return JSON.parse(r)}catch(n){throw console.error(n),new Error(`Failed to parse exec response: "${r}"`)}}async close(){}};function zi(c){return new Jt(c)}async function bu(c){throw new Error("Unknown runtime")}export{Jt as CloudConnection,Ot as SqliteConnection,zi as cloud,bu as createConnection};
12
+ async function o(n){throw new Error("Unknown runtime")}export{o as createConnection};