@supabase/lite 0.2.0 → 0.2.1-next.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,4 +1,4 @@
1
- import {Kysely,OperationNodeTransformer,SchemableIdentifierNode,JoinNode,TableNode,AliasNode,ListNode,UsingNode}from'kysely';import {GenericSqliteDialect}from'kysely-generic-sqlite';import {Connection,RelationNotFoundError,invariant,DataLossError,PlanStepType}from'@supabase/lite';try {
1
+ import {Deparser,QuoteUtils}from'pgsql-deparser';import {DeparserContext}from'pgsql-deparser/visitors/base.js';import {SqlFormatter}from'pgsql-deparser/utils/sql-formatter.js';import {Kysely,OperationNodeTransformer,SchemableIdentifierNode,JoinNode,TableNode,AliasNode,ListNode,UsingNode}from'kysely';import {GenericSqliteDialect}from'kysely-generic-sqlite';import {Connection,RelationNotFoundError,invariant,DataLossError,PlanStepType}from'@supabase/lite';try {
2
2
  /**
3
3
  * Adding this to avoid warnings from node:sqlite being experimental
4
4
  */
@@ -9,43 +9,12 @@ import {Kysely,OperationNodeTransformer,SchemableIdentifierNode,JoinNode,TableNo
9
9
  };
10
10
  } catch {}
11
11
 
12
- var qs=Object.create;var Yt=Object.defineProperty;var Vs=Object.getOwnPropertyDescriptor;var Gs=Object.getOwnPropertyNames;var Ws=Object.getPrototypeOf,Js=Object.prototype.hasOwnProperty;var C=(p,t)=>()=>(p&&(t=p(p=0)),t);var $e=(p,t)=>()=>(t||p((t={exports:{}}).exports,t),t.exports),xs=(p,t)=>{for(var s in t)Yt(p,s,{get:t[s],enumerable:true});},Ys=(p,t,s,e)=>{if(t&&typeof t=="object"||typeof t=="function")for(let i of Gs(t))!Js.call(p,i)&&i!==s&&Yt(p,i,{get:()=>t[i],enumerable:!(e=Vs(t,i))||e.enumerable});return p};var Ue=(p,t,s)=>(s=p!=null?qs(Ws(p)):{},Ys(Yt(s,"default",{value:p,enumerable:true}),p));var Fe=C(()=>{});var Be=C(()=>{});function Hs(p){return Object.prototype.toString.call(p)==="[object Object]"}function Xs(p){return p!==null&&typeof p=="object"}function nt(p,t,s=void 0){let e=typeof t=="string"?t.split(/[.[\]"]+/).filter(i=>i):t;if(e.length===0)return p;try{let[i,...r]=e;return !i||!(i in p)?s:nt(p[i],r,s)}catch{if(typeof s<"u")return s;throw new Error(`Invalid path: ${e.join(".")}`)}}function Ht(p,...t){for(let s of t)for(let[e,i]of Object.entries(s))i!==void 0&&(!Hs(i)&&!Array.isArray(i)||Array.isArray(i)&&!Array.isArray(p[e])?p[e]=i:Xs(p[e])?Ht(p[e],i):p[e]=i);return p}var yt=C(()=>{});var Me=C(()=>{});function qe(p,t){if(!p)throw new Error(t)}var Ve=C(()=>{});function Xt(p){return (p??"").trim().toLowerCase()}function Kt(p){return (p??"").replace(/\s+/g," ").replace(/"/g,"").trim().toLowerCase()}function Qt(p){if(p==null)return null;let t=p.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 zt=C(()=>{});function N(p,t='"'){return `${t}${p}${t}`}function Ge(p,t,s){if(t instanceof RegExp)return t.test(p);if(typeof t=="string")switch(!s&&t.startsWith("/")&&(s="regex"),s){case "regex":return new RegExp(t).test(p);case "sql":return new RegExp(t.replace("%",".*").replace("_",".")).test(p);case "wildcard":return new RegExp(t.replace("*",".*")).test(p);default:return p.includes(t)}return false}var bt=C(()=>{});var We=C(()=>{});var Je=C(()=>{});var Zt=C(()=>{Fe();Be();yt();Me();Ve();zt();bt();We();Je();});var $,Lt=C(()=>{$=class p{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 p(t)}};});var X,ee=C(()=>{zt();X=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=Kt(g.sql),b=Kt(A.sql);S!==b&&e.push({type:"modified",name:g.name,sql:A.sql});}let o=t.tables.filter(g=>u.has(g.name));for(let g of o){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={};Xt(d.type)!==Xt(D.type)&&(F.type={from:d.type,to:D.type}),d.nullable!==D.nullable&&(F.nullable={from:d.nullable,to:D.nullable}),Qt(d.default_value)!==Qt(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 l=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)l.has(g)||r.push({type:"added",...A});for(let[g,A]of l)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 se=C(()=>{});var ni,K,ie=C(()=>{se();bt();ni=["CURRENT_TIMESTAMP","CURRENT_TIME","CURRENT_DATE"],K=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)),o=new Set(t.tables.filter(f=>f.type==="modified").map(f=>f.name)),l=[...a].filter(f=>u.has(f));for(let f of l){if(!(o.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`,o=a.sql.replace(new RegExp(`(CREATE\\s+TABLE\\s+)(?:"${t}"|${t})`,"i"),`$1${N(u)}`);r.push({sql:`${o};`,description:`Create temporary table ${N(u)}`,type:"create_table"});let l=s.columns.filter(S=>S.table===t).map(S=>S.name),f=e.columns.filter(S=>S.table===t).map(S=>S.name),m=l.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 o=e.tables.find(f=>f.name===t);return o&&/\bCHECK\s*\(/i.test(o.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 ni.includes(s)}columnDef(t){let s=t.column,e=`${N(s.name)} ${s.type||"TEXT"}`;return s.nullable||(e+=" NOT NULL"),s.default_value!=null&&(e+=` DEFAULT ${s.default_value}`),e}};});async function Q(p){let{parse:t}=await import('pgsql-parser');return t(p)}var ss=C(()=>{});var U,re=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 z,is=C(()=>{re();z=class p{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:o,insertColumns:l,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=o,this.insertColumns=l,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 p({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(p){let t=p.toLowerCase();return rs.has(t)?"RESERVED_KEYWORD":us.has(t)?"TYPE_FUNC_NAME_KEYWORD":as.has(t)?"COL_NAME_KEYWORD":ns.has(t)?"UNRESERVED_KEYWORD":"NO_KEYWORD"}var ut,rs,ns,as,us,ne=C(()=>{ut={UNRESERVED_KEYWORD:["abort","absent","absolute","access","action","add","admin","after","aggregate","also","alter","always","asensitive","assertion","assignment","at","atomic","attach","attribute","backward","before","begin","breadth","by","cache","call","called","cascade","cascaded","catalog","chain","characteristics","checkpoint","class","close","cluster","columns","comment","comments","commit","committed","compression","conditional","configuration","conflict","connection","constraints","content","continue","conversion","copy","cost","csv","cube","current","cursor","cycle","data","database","day","deallocate","declare","defaults","deferred","definer","delete","delimiter","delimiters","depends","depth","detach","dictionary","disable","discard","document","domain","double","drop","each","empty","enable","encoding","encrypted","enforced","enum","error","escape","event","exclude","excluding","exclusive","execute","explain","expression","extension","external","family","filter","finalize","first","following","force","format","forward","function","functions","generated","global","granted","groups","handler","header","hold","hour","identity","if","ignore","immediate","immutable","implicit","import","include","including","increment","indent","index","indexes","inherit","inherits","inline","input","insensitive","insert","instead","invoker","isolation","keep","key","keys","label","language","large","last","leakproof","level","listen","load","local","location","lock","locked","logged","lsn","mapping","match","matched","materialized","maxvalue","merge","method","minute","minvalue","mode","month","move","name","names","nested","new","next","nfc","nfd","nfkc","nfkd","no","normalized","nothing","notify","nowait","nulls","object","objects","of","off","oids","old","omit","operator","option","options","ordinality","others","over","overriding","owned","owner","parallel","parameter","parser","partial","partition","partitions","passing","password","path","period","plan","plans","policy","preceding","prepare","prepared","preserve","prior","privileges","procedural","procedure","procedures","program","publication","quote","quotes","range","read","reassign","recursive","ref","referencing","refresh","reindex","relative","release","rename","repeatable","replace","replica","reset","respect","restart","restrict","return","returns","revoke","role","rollback","rollup","routine","routines","rows","rule","savepoint","scalar","schema","schemas","scroll","search","second","security","sequence","sequences","serializable","server","session","set","sets","share","show","simple","skip","snapshot","source","split","sql","stable","standalone","start","statement","statistics","stdin","stdout","storage","stored","strict","string","strip","subscription","support","sysid","system","tables","tablespace","target","temp","template","temporary","text","ties","transaction","transform","trigger","truncate","trusted","type","types","uescape","unbounded","uncommitted","unconditional","unencrypted","unknown","unlisten","unlogged","until","update","vacuum","valid","validate","validator","value","varying","version","view","views","virtual","volatile","wait","whitespace","within","without","work","wrapper","write","xml","year","yes","zone"],RESERVED_KEYWORD:["all","analyse","analyze","and","any","array","as","asc","asymmetric","both","case","cast","check","collate","column","constraint","create","current_catalog","current_date","current_role","current_time","current_timestamp","current_user","default","deferrable","desc","distinct","do","else","end","except","false","fetch","for","foreign","from","grant","group","having","in","initially","intersect","into","lateral","leading","limit","localtime","localtimestamp","not","null","offset","on","only","or","order","placing","primary","references","returning","select","session_user","some","symmetric","system_user","table","then","to","trailing","true","union","unique","user","using","variadic","when","where","window","with"],TYPE_FUNC_NAME_KEYWORD:["authorization","binary","collation","concurrently","cross","current_schema","freeze","full","ilike","inner","is","isnull","join","left","like","natural","notnull","outer","overlaps","right","similar","tablesample","verbose"],COL_NAME_KEYWORD:["between","bigint","bit","boolean","char","character","coalesce","dec","decimal","exists","extract","float","greatest","grouping","inout","int","integer","interval","json","json_array","json_arrayagg","json_exists","json_object","json_objectagg","json_query","json_scalar","json_serialize","json_table","json_value","least","merge_action","national","nchar","none","normalize","nullif","numeric","out","overlay","position","precision","real","row","setof","smallint","substring","time","timestamp","treat","trim","values","varchar","xmlattributes","xmlconcat","xmlelement","xmlexists","xmlforest","xmlnamespaces","xmlparse","xmlpi","xmlroot","xmlserialize","xmltable"]},rs=new Set(ut.RESERVED_KEYWORD??[]),ns=new Set(ut.UNRESERVED_KEYWORD??[]),as=new Set(ut.COL_NAME_KEYWORD??[]),us=new Set(ut.TYPE_FUNC_NAME_KEYWORD??[]);});var h,os=C(()=>{ne();h=class p{static escape(t){return `'${t.replace(/'/g,"''")}'`}static escapeEString(t){return t.replace(/\\/g,"\\\\").replace(/'/g,"''")}static formatEString(t){return p.needsEscapePrefix(t)?`E'${p.escapeEString(t)}'`:p.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?p.quoteIdentifier(t[0]):t.map((s,e)=>e===0?p.quoteIdentifier(s):p.quoteIdentifierAfterDot(s)).join(".")}static quoteQualifiedIdentifier(t,s){return t?`${p.quoteIdentifier(t)}.${p.quoteIdentifierAfterDot(s)}`:p.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=>p.quoteIdentifierTypeName(s)).join(".")}};});var ae=C(()=>{os();ne();});var c,ls=C(()=>{c=class{static unwrapList(t){return t==null?[]:t.List!==void 0?t.List.items||[]:Array.isArray(t)?t:[t]}static formatList(t,s=", ",e="",i){return !t||t.length===0?"":t.map(r=>`${e}${i(r)}`).join(s)}};});function Ei(p){return p&&typeof p=="object"&&!Array.isArray(p)&&!("ParseResult"in p)&&!("RawStmt"in p)&&("stmts"in p||"version"in p)}var hi,mi,Z,ps=C(()=>{is();re();ae();ls();hi=["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"],mi=[["numeric",["decimal","dec"]],["int4",["int","integer"]],["float8",["float"]],["bpchar",["character"]],["varchar",["character varying"]]];Z=class p{tree;options;constructor(t,s={}){this.options={functionDelimiter:"$$",functionDelimiterFallback:"$EOFCODE$",...s},Ei(t)?this.tree=[{ParseResult:t}]:Array.isArray(t)?this.tree=t:this.tree=[t];}static deparse(t,s={}){return new p(t,s).deparseQuery()}deparseQuery(){let t=new U(this.options.newline,this.options.tab,this.options.pretty),s=new z({formatter:t,prettyMode:this.options.pretty});return this.tree.map(e=>this.deparse(e,s)||"").filter(e=>e!=="").join(s.newline()+s.newline())}getFunctionDelimiter(t){let s=this.options.functionDelimiter||"$$";return t.includes(s)?this.options.functionDelimiterFallback||"$EOFCODE$":s}getObjectTypeKeyword(t){switch(t){case "OBJECT_TABLE":return "TABLE";case "OBJECT_VIEW":return "VIEW";case "OBJECT_INDEX":return "INDEX";case "OBJECT_SEQUENCE":return "SEQUENCE";case "OBJECT_FUNCTION":return "FUNCTION";case "OBJECT_PROCEDURE":return "PROCEDURE";case "OBJECT_SCHEMA":return "SCHEMA";case "OBJECT_DATABASE":return "DATABASE";case "OBJECT_DOMAIN":return "DOMAIN";case "OBJECT_AGGREGATE":return "AGGREGATE";case "OBJECT_CONVERSION":return "CONVERSION";case "OBJECT_LANGUAGE":return "LANGUAGE";case "OBJECT_OPERATOR":return "OPERATOR";case "OBJECT_OPFAMILY":return "OPERATOR FAMILY";case "OBJECT_OPCLASS":return "OPERATOR CLASS";case "OBJECT_TSDICTIONARY":return "TEXT SEARCH DICTIONARY";case "OBJECT_TSCONFIGURATION":return "TEXT SEARCH CONFIGURATION";case "OBJECT_EVENT_TRIGGER":return "EVENT TRIGGER";case "OBJECT_FDW":return "FOREIGN DATA WRAPPER";case "OBJECT_FOREIGN_SERVER":return "SERVER";case "OBJECT_TYPE":return "TYPE";case "OBJECT_COLLATION":return "COLLATION";case "OBJECT_PUBLICATION":return "PUBLICATION";case "OBJECT_ACCESS_METHOD":return "ACCESS METHOD";case "OBJECT_AMOP":return "OPERATOR CLASS";case "OBJECT_AMPROC":return "OPERATOR CLASS";case "OBJECT_ATTRIBUTE":return "ATTRIBUTE";case "OBJECT_CAST":return "CAST";case "OBJECT_COLUMN":return "COLUMN";case "OBJECT_DEFAULT":return "DEFAULT";case "OBJECT_DEFACL":return "DEFAULT PRIVILEGES";case "OBJECT_DOMCONSTRAINT":return "DOMAIN";case "OBJECT_EXTENSION":return "EXTENSION";case "OBJECT_FOREIGN_TABLE":return "FOREIGN TABLE";case "OBJECT_LARGEOBJECT":return "LARGE OBJECT";case "OBJECT_MATVIEW":return "MATERIALIZED VIEW";case "OBJECT_PARAMETER_ACL":return "PARAMETER";case "OBJECT_POLICY":return "POLICY";case "OBJECT_PUBLICATION_NAMESPACE":return "PUBLICATION";case "OBJECT_PUBLICATION_REL":return "PUBLICATION";case "OBJECT_ROLE":return "ROLE";case "OBJECT_ROUTINE":return "ROUTINE";case "OBJECT_RULE":return "RULE";case "OBJECT_STATISTIC_EXT":return "STATISTICS";case "OBJECT_SUBSCRIPTION":return "SUBSCRIPTION";case "OBJECT_TABCONSTRAINT":return "CONSTRAINT";case "OBJECT_TABLESPACE":return "TABLESPACE";case "OBJECT_TRANSFORM":return "TRANSFORM";case "OBJECT_TRIGGER":return "TRIGGER";case "OBJECT_TSPARSER":return "TEXT SEARCH PARSER";case "OBJECT_TSTEMPLATE":return "TEXT SEARCH TEMPLATE";case "OBJECT_USER_MAPPING":return "USER MAPPING";default:throw new Error(`Unsupported objectType: ${t}`)}}deparse(t,s){if(t==null)return null;if(!s){let e=new U(this.options.newline,this.options.tab,this.options.pretty);s=new z({formatter:e,prettyMode:this.options.pretty});}if(typeof t=="number"||t instanceof Number)return t.toString();try{return this.visit(t,s)}catch(e){let i=Object.keys(t)[0];throw new Error(`Error deparsing ${i}: ${e.message}`)}}visit(t,s){if(!s){let n=new U(this.options.newline,this.options.tab,this.options.pretty);s=new z({formatter:n,prettyMode:this.options.pretty});}let e=this.getNodeType(t);if(!e)return "";let i=this.getNodeData(t),r=e;if(typeof this[r]=="function")return this[r](i,s);throw new Error(`Deparser does not handle node type: ${e}`)}getNodeType(t){return Object.keys(t)[0]}getNodeData(t){let s=Object.keys(t);return s.length===1&&typeof t[s[0]]=="object"?t[s[0]]:t}ParseResult(t,s){return !t.stmts||t.stmts.length===0?"":t.stmts.filter(e=>e!=null).map(e=>this.RawStmt(e,s)).filter(e=>e!=="").join(s.newline()+s.newline())}RawStmt(t,s){if(!t.stmt)return "";let e=this.deparse(t.stmt,s);return t.stmt_len?e+";":e}SelectStmt(t,s){let e=[];if(t.withClause&&e.push(this.WithClause(t.withClause,s)),!t.op||t.op==="SETOP_NONE")t.valuesLists==null&&(!s.isPretty()||!t.targetList)&&e.push("SELECT");else {let r=this.SelectStmt(t.larg,s),n=this.SelectStmt(t.rarg,s),a=t.larg&&(t.larg.op&&t.larg.op!=="SETOP_NONE"||t.larg.sortClause||t.larg.limitCount||t.larg.limitOffset||t.larg.withClause),u=t.rarg&&(t.rarg.op&&t.rarg.op!=="SETOP_NONE"||t.rarg.sortClause||t.rarg.limitCount||t.rarg.limitOffset||t.rarg.withClause);switch(a?e.push(s.parens(r)):e.push(r),t.op){case "SETOP_UNION":e.push("UNION");break;case "SETOP_INTERSECT":e.push("INTERSECT");break;case "SETOP_EXCEPT":e.push("EXCEPT");break;default:throw new Error(`Bad SelectStmt op: ${t.op}`)}t.all&&e.push("ALL"),u?e.push(s.parens(n)):e.push(n);}let i="";if(t.distinctClause){let r=c.unwrapList(t.distinctClause);if(r.length>0&&Object.keys(r[0]).length>0){let n=r.map(a=>this.visit(a,s.spawn("SelectStmt",{select:true}))).join(", ");i=" DISTINCT ON "+s.parens(n);}else i=" DISTINCT";if(!s.isPretty())if(r.length>0&&Object.keys(r[0]).length>0){e.push("DISTINCT ON");let n=r.map(a=>this.visit(a,s.spawn("SelectStmt",{select:true}))).join(", ");e.push(s.parens(n));}else e.push("DISTINCT");}if(t.targetList){let r=c.unwrapList(t.targetList);if(s.isPretty())if(r.length===1){let n=r[0],a=this.visit(n,s.spawn("SelectStmt",{select:true}));this.isComplexSelectTarget(n)?(e.push("SELECT"+i),this.containsMultilineStringLiteral(a)?e.push(a):e.push(s.indent(a))):e.push("SELECT"+i+" "+a);}else {let a=r.map(u=>{let o=this.visit(u,s.spawn("SelectStmt",{select:true}));return this.containsMultilineStringLiteral(o)?o:s.indent(o)}).join(","+s.newline());e.push("SELECT"+i),e.push(a);}else {let n=r.map(a=>this.visit(a,s.spawn("SelectStmt",{select:true}))).join(", ");e.push(n);}}if(t.intoClause&&(e.push("INTO"),e.push(this.IntoClause(t.intoClause,s))),t.fromClause){let n=c.unwrapList(t.fromClause).map(a=>this.deparse(a,s.spawn("SelectStmt",{from:true}))).join(", ");e.push("FROM "+n.trim());}if(t.whereClause)if(s.isPretty()){e.push("WHERE");let a=this.visit(t.whereClause,s).split(s.newline()).map((u,o)=>o===0?s.indent(u):u);e.push(a.join(s.newline()));}else e.push("WHERE"),e.push(this.visit(t.whereClause,s));if(t.valuesLists)if(s.isPretty()){e.push("VALUES");let n=c.unwrapList(t.valuesLists).map(a=>{let u=c.unwrapList(a).map(o=>this.visit(o,s));return s.parens(u.join(", "))}).map(a=>this.containsMultilineStringLiteral(a)?a:s.indent(a));e.push(n.join(`,
17
- `));}else {e.push("VALUES");let r=c.unwrapList(t.valuesLists).map(n=>{let a=c.unwrapList(n).map(u=>this.visit(u,s));return s.parens(a.join(", "))});e.push(r.join(", "));}if(t.groupClause){let r=c.unwrapList(t.groupClause);if(s.isPretty()){let n=r.map(a=>{let u=this.visit(a,s.spawn("SelectStmt",{group:true,indentLevel:s.indentLevel+1}));return this.containsMultilineStringLiteral(u)?u:s.indent(u)}).join(","+s.newline());e.push("GROUP BY"),e.push(n);}else {e.push("GROUP BY");let n=r.map(a=>this.visit(a,s.spawn("SelectStmt",{group:true}))).join(", ");e.push(n);}}if(t.havingClause)if(s.isPretty()){e.push("HAVING");let r=this.visit(t.havingClause,s);this.containsMultilineStringLiteral(r)?e.push(r):e.push(s.indent(r));}else e.push("HAVING"),e.push(this.visit(t.havingClause,s));if(t.windowClause){e.push("WINDOW");let n=c.unwrapList(t.windowClause).map(a=>this.visit(a,s)).join(", ");e.push(n);}if(t.sortClause){let r=c.unwrapList(t.sortClause);if(s.isPretty()){let n=r.map(a=>{let u=this.visit(a,s.spawn("SelectStmt",{sort:true,indentLevel:s.indentLevel+1}));return this.containsMultilineStringLiteral(u)?u:s.indent(u)}).join(","+s.newline());e.push("ORDER BY"),e.push(n);}else {e.push("ORDER BY");let n=r.map(a=>this.visit(a,s.spawn("SelectStmt",{sort:true}))).join(", ");e.push(n);}}if(t.limitCount&&e.push("LIMIT "+this.visit(t.limitCount,s)),t.limitOffset&&e.push("OFFSET "+this.visit(t.limitOffset,s)),t.lockingClause){let n=c.unwrapList(t.lockingClause).map(a=>this.visit(a,s)).join(" ");e.push(n);}return s.isPretty()?e.filter(n=>n.trim()!=="").join(s.newline()):e.join(" ")}A_Expr(t,s){let e=t.kind,i=c.unwrapList(t.name),r=t.lexpr,n=t.rexpr;switch(e){case "AEXPR_OP":if(r&&n){let m=this.deparseOperatorName(i,s),T=this.visit(r,s),E=this.visit(n,s),g=false;if(r&&"A_Expr"in r&&r.A_Expr?.kind==="AEXPR_OP"){let S=this.deparseOperatorName(c.unwrapList(r.A_Expr.name),s);this.needsParentheses(S,m,"left")&&(g=true);}r&&this.isComplexExpression(r)&&(g=true),g&&(T=s.parens(T));let A=false;if(n&&"A_Expr"in n&&n.A_Expr?.kind==="AEXPR_OP"){let S=this.deparseOperatorName(c.unwrapList(n.A_Expr.name),s);this.needsParentheses(S,m,"right")&&(A=true);}return n&&this.isComplexExpression(n)&&(A=true),A&&(E=s.parens(E)),s.format([T,m,E])}else if(n){let m=this.deparseOperatorName(i,s),T=this.visit(n,s);return n&&"A_Expr"in n&&n.A_Expr?.kind==="AEXPR_OP"&&n.A_Expr?.lexpr&&(T=s.parens(T)),s.format([m,T])}break;case "AEXPR_OP_ANY":return s.format([this.visit(r,s),this.deparseOperatorName(i,s),"ANY",s.parens(this.visit(n,s))]);case "AEXPR_OP_ALL":return s.format([this.visit(r,s),this.deparseOperatorName(i,s),"ALL",s.parens(this.visit(n,s))]);case "AEXPR_DISTINCT":{let m=this.visit(r,s),T=this.visit(n,s);return r&&this.isComplexExpression(r)&&(m=s.parens(m)),n&&this.isComplexExpression(n)&&(T=s.parens(T)),s.format([m,"IS DISTINCT FROM",T])}case "AEXPR_NOT_DISTINCT":{let m=this.visit(r,s),T=this.visit(n,s);return r&&this.isComplexExpression(r)&&(m=s.parens(m)),n&&this.isComplexExpression(n)&&(T=s.parens(T)),s.format([m,"IS NOT DISTINCT FROM",T])}case "AEXPR_NULLIF":return s.format(["NULLIF",s.parens([this.visit(r,s),this.visit(n,s)].join(", "))]);case "AEXPR_IN":let a=this.deparseOperatorName(i,s);return a==="<>"||a==="!="?s.format([this.visit(r,s),"NOT IN",s.parens(this.visit(n,s))]):s.format([this.visit(r,s),"IN",s.parens(this.visit(n,s))]);case "AEXPR_LIKE":return this.deparseOperatorName(i,s)==="!~~"?s.format([this.visit(r,s),"NOT LIKE",this.visit(n,s)]):s.format([this.visit(r,s),"LIKE",this.visit(n,s)]);case "AEXPR_ILIKE":return this.deparseOperatorName(i,s)==="!~~*"?s.format([this.visit(r,s),"NOT ILIKE",this.visit(n,s)]):s.format([this.visit(r,s),"ILIKE",this.visit(n,s)]);case "AEXPR_SIMILAR":let l=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 l==="!~"?s.format([this.visit(r,s),"NOT SIMILAR TO",f]):s.format([this.visit(r,s),"SIMILAR TO",f]);case "AEXPR_BETWEEN":return s.format([this.visit(r,s),"BETWEEN",this.visitBetweenRange(n,s)]);case "AEXPR_NOT_BETWEEN":return s.format([this.visit(r,s),"NOT BETWEEN",this.visitBetweenRange(n,s)]);case "AEXPR_BETWEEN_SYM":return s.format([this.visit(r,s),"BETWEEN SYMMETRIC",this.visitBetweenRange(n,s)]);case "AEXPR_NOT_BETWEEN_SYM":return s.format([this.visit(r,s),"NOT BETWEEN SYMMETRIC",this.visitBetweenRange(n,s)])}throw new Error(`Unhandled A_Expr kind: ${e}`)}deparseOperatorName(t,s){if(!t||t.length===0)return "";let e=t.map(i=>i.String?i.String.sval||i.String.str:this.visit(i,s));return e.length>1?`OPERATOR(${e.join(".")})`:e.join(".")}getOperatorPrecedence(t){return {"||":1,OR:2,AND:3,NOT:4,IS:5,IN:5,BETWEEN:5,LIKE:5,ILIKE:5,SIMILAR:5,"<":6,"<=":6,">":6,">=":6,"=":6,"<>":6,"!=":6,"+":7,"-":7,"*":8,"/":8,"%":8,"^":9,"~":10,"&":10,"|":10,"#":10,"<<":10,">>":10}[t]||0}needsParentheses(t,s,e){let i=this.getOperatorPrecedence(t),r=this.getOperatorPrecedence(s);return i<r||i===r&&e==="right"&&(s==="-"||s==="/")}isComplexExpression(t){return !!(t.NullTest||t.BooleanTest||t.BoolExpr||t.CaseExpr||t.CoalesceExpr||t.SubLink||t.A_Expr)}isComplexSelectTarget(t){if(!t)return false;if(t.ResTarget?.val)return this.isComplexExpression(t.ResTarget.val);if(t.CaseExpr||t.SubLink||t.NullTest||t.BooleanTest||t.BoolExpr)return true;if(t.CoalesceExpr){let s=t.CoalesceExpr.args;if(s&&Array.isArray(s)&&s.length>1)return true}if(t.FuncCall){let s=t.FuncCall,e=s.args?Array.isArray(s.args)?s.args:[s.args]:[];if(s.over||s.agg_filter||s.agg_order||s.agg_distinct||e.length>1)return true;if(e.length===1)return this.isComplexSelectTarget(e[0])}if(t.A_Expr){let s=t.A_Expr;return !!(s.lexpr&&this.isComplexSelectTarget(s.lexpr)||s.rexpr&&this.isComplexSelectTarget(s.rexpr))}return t.TypeCast?this.isComplexSelectTarget(t.TypeCast.arg):t.A_ArrayExpr?true:t.A_Indirection?this.isComplexSelectTarget(t.A_Indirection.arg):(t.A_Const||t.ColumnRef||t.ParamRef||t.A_Star,false)}visitBetweenRange(t,s){return t&&"List"in t&&t.List?.items?t.List.items.map(i=>this.visit(i,s)).join(" AND "):this.visit(t,s)}InsertStmt(t,s){let e=[];if(t.withClause&&e.push(this.WithClause(t.withClause,s)),e.push("INSERT INTO"),e.push(this.RangeVar(t.relation,s)),t.cols){let i=c.unwrapList(t.cols),r=s.spawn("InsertStmt",{insertColumns:true}),n=i.map(a=>this.visit(a,r));if(s.isPretty()){let a=n.map(u=>s.indent(u));e.push(`(
18
- `+a.join(`,
19
- `)+`
20
- )`);}else e.push(s.parens(n.join(", ")));}if(t.selectStmt?e.push(this.visit(t.selectStmt,s)):(!t.cols||t.cols&&c.unwrapList(t.cols).length===0)&&e.push("DEFAULT VALUES"),t.onConflictClause){if(e.push("ON CONFLICT"),t.onConflictClause.infer){let i=t.onConflictClause.infer;if(i.conname)e.push("ON CONSTRAINT"),e.push(i.conname);else if(i.indexElems){let n=c.unwrapList(i.indexElems).map(a=>this.visit(a,s));e.push(s.parens(n.join(", ")));}i.whereClause&&(e.push("WHERE"),e.push(this.visit(i.whereClause,s)));}if(t.onConflictClause.action==="ONCONFLICT_UPDATE"){e.push("DO UPDATE SET");let i=c.unwrapList(t.onConflictClause.targetList);if(i&&i.length){let r=i[0];if(r.ResTarget?.val?.MultiAssignRef&&i.every(n=>n.ResTarget?.val?.MultiAssignRef)){let a=i.sort((u,o)=>u.ResTarget.val.MultiAssignRef.colno-o.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(o=>s.indent(o));e.push(`
21
- `+u.join(`,
22
- `));}else e.push(a.join(", "));}}t.onConflictClause.whereClause&&(e.push("WHERE"),e.push(this.visit(t.onConflictClause.whereClause,s)));}else t.onConflictClause.action==="ONCONFLICT_NOTHING"&&e.push("DO NOTHING");}if(t.returningList){e.push("RETURNING");let r=c.unwrapList(t.returningList).map(n=>this.visit(n,s));e.push(r.join(", "));}return e.join(" ")}UpdateStmt(t,s){let e=[];t.withClause&&e.push(this.WithClause(t.withClause,s)),e.push("UPDATE"),t.relation&&e.push(this.RangeVar(t.relation,s)),e.push("SET");let i=c.unwrapList(t.targetList);if(i&&i.length){i[0];let n=new Set,a=[];for(let u=0;u<i.length;u++){if(n.has(u))continue;let o=i[u],l=o.ResTarget?.val?.MultiAssignRef;if(l){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(l.source)&&(f.push(g),n.add(E));}let m=f.map(E=>E.ResTarget.name),T=`${s.parens(m.join(", "))} = ${this.visit(l.source,s)}`;a.push(T);}else a.push(this.visit(o,s.spawn("UpdateStmt",{update:true}))),n.add(u);}e.push(a.join(","));}if(t.fromClause){e.push("FROM");let n=c.unwrapList(t.fromClause).map(a=>this.visit(a,s));e.push(n.join(", "));}return t.whereClause&&(e.push("WHERE"),e.push(this.visit(t.whereClause,s))),t.returningList&&(e.push("RETURNING"),e.push(this.deparseReturningList(t.returningList,s))),e.join(" ")}DeleteStmt(t,s){try{let e=[];if(t.withClause)try{e.push(this.WithClause(t.withClause,s));}catch(i){throw console.warn(`Error processing withClause in DeleteStmt: ${i instanceof Error?i.message:String(i)}`),new Error(`Error deparsing DeleteStmt: ${i instanceof Error?i.message:String(i)}`)}if(e.push("DELETE"),e.push("FROM"),!t.relation)throw new Error("DeleteStmt requires a relation");if(e.push(this.RangeVar(t.relation,s)),t.usingClause){e.push("USING");let r=c.unwrapList(t.usingClause).filter(n=>n!=null&&this.getNodeType(n)!=="undefined").map(n=>{try{return this.visit(n,s)}catch(a){return console.warn(`Error processing usingClause item in DeleteStmt: ${a instanceof Error?a.message:String(a)}`),""}}).filter(n=>n&&n.trim());r.length>0&&e.push(r.join(", "));}if(t.whereClause){e.push("WHERE");try{e.push(this.visit(t.whereClause,s));}catch(i){throw console.warn(`Error processing whereClause in DeleteStmt: ${i instanceof Error?i.message:String(i)}`),new Error(`Error deparsing DeleteStmt: ${i instanceof Error?i.message:String(i)}`)}}if(t.returningList){e.push("RETURNING");try{e.push(this.deparseReturningList(t.returningList,s));}catch(i){throw console.warn(`Error processing returningList in DeleteStmt: ${i instanceof Error?i.message:String(i)}`),new Error(`Error deparsing DeleteStmt: ${i instanceof Error?i.message:String(i)}`)}}return e.join(" ")}catch(e){throw new Error(`Error deparsing DeleteStmt: ${e instanceof Error?e.message:String(e)}`)}}WithClause(t,s){let e=["WITH"];if(t.recursive&&e.push("RECURSIVE"),t.ctes&&t.ctes.length>0){let i=c.unwrapList(t.ctes);if(s.isPretty()){let r=i.map((n,a)=>{let u=this.visit(n,s),o=a===0?s.newline():","+s.newline();return this.containsMultilineStringLiteral(u)?o+u:o+s.indent(u)});e.push(r.join(""));}else {let r=i.map(n=>this.visit(n,s));e.push(r.join(", "));}}return e.join(" ")}ResTarget(t,s){let e=[];if(s.update&&t.name){if(e.push(h.quoteIdentifier(t.name)),t.indirection&&t.indirection.length>0){let i=c.unwrapList(t.indirection).map(r=>r.String?`.${h.quoteIdentifierAfterDot(r.String.sval||r.String.str)}`:this.visit(r,s));e.push(i.join(""));}e.push("="),t.val&&e.push(this.deparse(t.val,s));}else if(s.insertColumns&&t.name){if(e.push(h.quoteIdentifier(t.name)),t.indirection&&t.indirection.length>0){let i=c.unwrapList(t.indirection).map(r=>r.String?`.${h.quoteIdentifierAfterDot(r.String.sval||r.String.str)}`:this.visit(r,s));e.push(i.join(""));}}else t.val&&e.push(this.deparse(t.val,s)),t.name&&(e.push("AS"),e.push(h.quoteIdentifier(t.name)));return e.join(" ")}deparseReturningList(t,s){return c.unwrapList(t).filter(e=>e!=null&&this.getNodeType(e)!=="undefined").map(e=>{try{if(this.getNodeType(e)==="ResTarget"){let i=this.getNodeData(e),r=i.val?this.visit(i.val,s):"",n=i.name?` AS ${h.quoteIdentifier(i.name)}`:"";return r+n}else return this.visit(e,s)}catch(i){return console.warn(`Error processing returning item: ${i instanceof Error?i.message:String(i)}`),""}}).filter(e=>e&&e.trim()).join(", ")}BoolExpr(t,s){let e=t.boolop,i=c.unwrapList(t.args),r="%s";s.bool&&(r="(%s)");let n=s.spawn("BoolExpr",{bool:true});switch(e){case "AND_EXPR":if(s.isPretty()&&i.length>1){let a=i.map(u=>this.visit(u,n)).join(s.newline()+s.indent("AND "));return r.replace("%s",()=>a)}else {let a=i.map(u=>this.visit(u,n)).join(" AND ");return r.replace("%s",()=>a)}case "OR_EXPR":if(s.isPretty()&&i.length>1){let a=i.map(u=>this.visit(u,n)).join(s.newline()+s.indent("OR "));return r.replace("%s",()=>a)}else {let a=i.map(u=>this.visit(u,n)).join(" OR ");return r.replace("%s",()=>a)}case "NOT_EXPR":return `NOT (${this.visit(i[0],s)})`;default:throw new Error(`Unhandled BoolExpr boolop: ${e}`)}}FuncCall(t,s){let e=c.unwrapList(t.funcname),i=c.unwrapList(t.args),r=e.map(l=>l.String?.sval||l.String?.str||"").filter(l=>l),n=h.quoteDottedName(r);if(t.funcformat==="COERCE_SQL_SYNTAX"&&n==="pg_catalog.xmlexists"&&i.length>=2){let l=this.visit(i[0],s),f=this.visit(i[1],s);return `xmlexists (${l} PASSING ${f})`}if(t.funcformat==="COERCE_SQL_SYNTAX"&&n==="pg_catalog.extract"&&i.length>=2){let l=this.visit(i[0],s),f=this.visit(i[1],s);return l.startsWith("'")&&l.endsWith("'")&&(l=l.slice(1,-1).toUpperCase()),`EXTRACT(${l} FROM ${f})`}if(t.funcformat==="COERCE_SQL_SYNTAX"&&(n==="pg_catalog.rtrim"||n==="pg_catalog.ltrim"||n==="pg_catalog.btrim")&&i.length>=1){let l=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 ${l})`;if(n==="pg_catalog.ltrim")return `TRIM(LEADING${f} FROM ${l})`;if(n==="pg_catalog.btrim")return `TRIM(BOTH${f} FROM ${l})`}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 l=this.visit(i[0],s);if(i.length===3){let f=this.visit(i[1],s),m=this.visit(i[2],s);return `SUBSTRING(${l} FROM ${f} FOR ${m})`}else if(i.length===2){let f=this.visit(i[1],s);return `SUBSTRING(${l} FROM ${f})`}}if(t.funcformat==="COERCE_SQL_SYNTAX"&&n==="pg_catalog.position"&&i.length===2){let l=this.visit(i[0],s);return `POSITION(${this.visit(i[1],s)} IN ${l})`}if(t.funcformat==="COERCE_SQL_SYNTAX"&&n==="pg_catalog.overlay"){if(i.length===4){let l=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(${l} PLACING ${f} FROM ${m} FOR ${T})`}else if(i.length===3){let l=this.visit(i[0],s),f=this.visit(i[1],s),m=this.visit(i[2],s);return `OVERLAY(${l} PLACING ${f} FROM ${m})`}}if(t.funcformat==="COERCE_SQL_SYNTAX"&&n==="pg_catalog.is_normalized"){let l=this.visit(i[0],s);if(i.length===2){let m=this.visit(i[1],s).replace(/'/g,"");return `${l} IS ${m} NORMALIZED`}else return `${l} IS NORMALIZED`}if(t.funcformat==="COERCE_SQL_SYNTAX"&&n==="pg_catalog.normalize"){let l=this.visit(i[0],s);if(i.length===2){let m=this.visit(i[1],s).replace(/'/g,"");return `normalize(${l}, ${m})`}else return `normalize(${l})`}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 l=this.visit(i[0],s),f=this.visit(i[1],s),m=this.visit(i[2],s),T=this.visit(i[3],s);return `(${l}, ${f}) OVERLAPS (${m}, ${T})`}if(n==="pg_catalog.timezone"&&i.length===2){let l=this.visit(i[1],s),f=this.visit(i[0],s);if(i[1]&&"A_Expr"in i[1]&&i[1].A_Expr?.kind==="AEXPR_OP"){let m=this.deparseOperatorName(c.unwrapList(i[1].A_Expr.name),s);(m==="+"||m==="-"||m==="*"||m==="/")&&(l=s.parens(l));}return `${l} AT TIME ZONE ${f}`}let a=[];if(t.agg_star)t.agg_distinct?a.push("DISTINCT *"):a.push("*");else {let l=i.map(f=>this.visit(f,s));if(t.func_variadic&&l.length>0){let f=l.length-1;l[f]=`VARIADIC ${l[f]}`;}t.agg_distinct&&l.length>0?a.push("DISTINCT "+l.join(", ")):a.push(...l);}let u="";if(t.agg_order&&t.agg_order.length>0){let f=c.unwrapList(t.agg_order).map(m=>this.visit(m,s));t.agg_within_group?u=` WITHIN GROUP (ORDER BY ${f.join(", ")})`:u=` ORDER BY ${f.join(", ")}`;}let o;if(t.agg_within_group&&u?o=`${n}(${a.join(", ")})${u}`:o=`${n}(${a.join(", ")}${u})`,t.agg_filter&&(o+=` FILTER (WHERE ${this.visit(t.agg_filter,s)})`),t.over)if(t.over.name)o+=` OVER ${t.over.name}`;else {let l=[];if(t.over.partitionClause){let T=c.unwrapList(t.over.partitionClause).map(E=>this.visit(E,s));l.push(`PARTITION BY ${T.join(", ")}`);}if(t.over.orderClause){let T=c.unwrapList(t.over.orderClause).map(E=>this.visit(E,s));l.push(`ORDER BY ${T.join(", ")}`);}let f=this.formatWindowFrame(t.over,s.spawn("FuncCall"));if(f&&l.push(f),l.length>0)if(s.isPretty()&&l.length>1){let m=l.map(T=>s.indent(T));o+=` OVER (${s.newline()}${m.join(s.newline())}${s.newline()})`;}else o+=` OVER (${l.join(" ")})`;else o+=" OVER ()";}return o}FuncExpr(t,s){let e=`func_${t.funcid}`,i=t.args?c.unwrapList(t.args).map(r=>this.visit(r,s)).join(", "):"";return `${e}(${i})`}A_Const(t,s){let e=t;if(e.ival!==void 0)return typeof e.ival=="object"&&e.ival!==null?e.ival.ival!==void 0?e.ival.ival.toString():Object.keys(e.ival).length===0?"0":e.ival.toString():e.ival===null?"NULL":e.ival.toString();if(e.fval!==void 0)return typeof e.fval=="object"&&e.fval!==null?e.fval.fval!==void 0?e.fval.fval.toString():Object.keys(e.fval).length===0?"0.0":e.fval.toString():e.fval===null?"NULL":e.fval.toString();if(e.sval!==void 0)return typeof e.sval=="object"&&e.sval!==null?e.sval.sval!==void 0?h.formatEString(e.sval.sval):e.sval.String&&e.sval.String.sval!==void 0?h.formatEString(e.sval.String.sval):Object.keys(e.sval).length===0?"''":h.formatEString(e.sval.toString()):e.sval===null?"NULL":h.formatEString(e.sval);if(e.boolval!==void 0)return typeof e.boolval=="object"&&e.boolval!==null?e.boolval.boolval!==void 0?e.boolval.boolval?"true":"false":Object.keys(e.boolval).length===0?"false":e.boolval?"true":"false":e.boolval===null?"NULL":e.boolval?"true":"false";if(e.bsval!==void 0)if(typeof e.bsval=="object"&&e.bsval!==null)if(e.bsval.bsval!==void 0){let i=e.bsval.bsval;return i.startsWith("x")&&/^x[0-9A-Fa-f]+$/.test(i)?`x'${i.substring(1)}'`:i.startsWith("b")?`b'${i.substring(1)}'`:`b'${i}'`}else return Object.keys(e.bsval).length===0?"''":e.bsval.toString();else {if(e.bsval===null)return "NULL";{let i=e.bsval;return i.startsWith("x")&&/^x[0-9A-Fa-f]+$/.test(i)?`x'${i.substring(1)}'`:i.startsWith("b")?`b'${i.substring(1)}'`:`b'${i}'`}}if(e.val){if(e.val.Integer?.ival!==void 0)return e.val.Integer.ival.toString();if(e.val.Float?.fval!==void 0)return e.val.Float.fval.toString();if(e.val.String?.sval!==void 0)return h.escape(e.val.String.sval);if(e.val.Boolean?.boolval!==void 0)return e.val.Boolean.boolval?"true":"false";if(e.val.BitString?.bsval!==void 0)return e.val.BitString.bsval}return e.isnull===true?"NULL":typeof e=="object"&&e!==null?e.Boolean!==void 0?e.Boolean?"true":"false":e.Integer!==void 0?typeof e.Integer=="object"&&e.Integer.ival!==void 0?e.Integer.ival.toString():e.Integer.toString():e.Float!==void 0?typeof e.Float=="object"&&e.Float.fval!==void 0?e.Float.fval.toString():e.Float.toString():e.String!==void 0?typeof e.String=="object"&&e.String.sval!==void 0?h.escape(e.String.sval):h.escape(e.String):(Object.keys(e).length===0||console.warn("A_Const: Unhandled object structure:",JSON.stringify(e,null,2)),"NULL"):"NULL"}ColumnRef(t,s){return c.unwrapList(t.fields).map(i=>i.String?h.quoteIdentifier(i.String.sval||i.String.str):i.A_Star?"*":this.visit(i,s)).join(".")}TypeName(t,s){if(!t.names)return "";let e=[];t.setof&&e.push("SETOF");let i=t.names.map(o=>o.String?o.String.sval||o.String.str:"").filter(Boolean);if(i.length===0)return "";let r=null;t.typmods?i.some(l=>(typeof l=="string"?l:l.String?.sval||l.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=(o,l)=>l!=null?o==="interval"?l.startsWith("(")?`${o}${l}`:`${o} ${l}`:`${o}(${l})`:o,a=o=>o.map(l=>l.Integer&&l.Integer.ival!==void 0&&l.Integer.ival!==-1?`[${l.Integer.ival}]`:"[]").join("");if(i.length===1){let o=i[0];if(o==="char")return s.parentNodeTypes.includes("TypeCast")&&r==="1"?e.push('"char"'):e.push(n('"char"',r)),e.join(" ");let l=n(h.quoteIdentifierTypeName(o),r);return t.arrayBounds&&t.arrayBounds.length>0&&(l+=a(t.arrayBounds)),e.push(l),e.join(" ")}if(i.length===2){let[o,l]=i;if(o==="pg_catalog"&&l==="char")return e.push(n("pg_catalog.char",r)),e.join(" ");if(o==="pg_catalog"){let f=`${o}.${l}`;l==="bpchar"&&r?f="char":l==="varchar"?f="varchar":l==="numeric"?f="numeric":l==="int4"?f="int":l==="float8"?f="double precision":l==="float4"?f="real":l==="int8"?f="bigint":l==="int2"?f="smallint":l==="bool"?f="boolean":l==="interval"?(s.parentNodeTypes.includes("TypeCast"),f="interval"):l==="timestamptz"?r?(f=`timestamp(${r}) with time zone`,r=null):f="timestamp with time zone":l==="timetz"?r?(f=`time(${r}) with time zone`,r=null):f="time with time zone":l==="timestamp"?r?(f=`timestamp(${r})`,r=null):f="timestamp":l==="time"&&(r?(f=`time(${r})`,r=null):f="time");let m=n(f,r);return t.arrayBounds&&t.arrayBounds.length>0&&(m+=a(t.arrayBounds)),e.push(m),e.join(" ")}}let u=n(h.quoteTypeDottedName(i),r);return t.arrayBounds&&t.arrayBounds.length>0&&(u+=a(t.arrayBounds)),e.push(u),e.join(" ")}Alias(t,s){let e=t.aliasname,i=[];if(t.colnames){let n=c.unwrapList(t.colnames).map(a=>{let u=this.deparse(a,s);return u.startsWith('"')&&u.endsWith('"')?u:this.quoteIfNeeded(u)});i.push("AS",this.quoteIfNeeded(e)+s.parens(n.join(", ")));}else i.push("AS",this.quoteIfNeeded(e));return i.join(" ")}RangeVar(t,s){let e=[];t&&(!("inh"in t)||t.inh===void 0)&&!s.parentNodeTypes.includes("CompositeTypeStmt")&&!s.parentNodeTypes.includes("AlterTypeStmt")&&s.objtype!=="OBJECT_TYPE"&&!s.parentNodeTypes.includes("CreateForeignTableStmt")&&e.push("ONLY");let i="";if(t.catalogname?(i=h.quoteIdentifier(t.catalogname),t.schemaname&&(i+="."+h.quoteIdentifierAfterDot(t.schemaname)),i+="."+h.quoteIdentifierAfterDot(t.relname)):t.schemaname?i=h.quoteQualifiedIdentifier(t.schemaname,t.relname):i=h.quoteIdentifier(t.relname),e.push(i),t.alias){let n=this.Alias(t.alias,s);e.push(n);}return e.join(" ")}formatIntervalTypeMods(t,s){if(!t||t.length===0)return null;let e=c.unwrapList(t),i={4:"year",2:"month",8:"day",1024:"hour",2048:"minute",4096:"second",6:"year to month",1032:"day to hour",3080:"day to minute",7176:"day to second",3072:"hour to minute",7168:"hour to second",6144:"minute to second"};if(e.length===1){let n=e[0];if(n&&typeof n=="object"){let a=n.A_Const;if(a&&a.ival!==void 0){let u=typeof a.ival=="object"?a.ival.ival:a.ival;if(u!==void 0)return i[u]?i[u]:`(${u})`}}}if(e.length===2){let n=e[0],a=e[1];if(n&&typeof n=="object"){let u=n.A_Const;if(u&&u.ival!==void 0){let o=typeof u.ival=="object"?u.ival.ival:u.ival;if(a&&typeof a=="object"){let l=a.A_Const;if(l&&l.ival!==void 0){let f=typeof l.ival=="object"?l.ival.ival!==void 0?l.ival.ival:0:l.ival;if(o===32767&&f>=0)return `(${f})`;if(i[o]&&f>=0)return `${i[o]}(${f})`}}}}}let r=e.map(n=>{if(n&&typeof n=="object"){let u=n.A_Const;if(u&&u.ival!==void 0){let o=typeof u.ival=="object"?u.ival.ival:u.ival;if(o!==void 0)return i[o]||o.toString()}}return this.visit(n,s)||""}).filter(Boolean);return r.length>0?r.join(" "):null}formatTypeMods(t,s){if(!t||t.length===0)return null;let i=c.unwrapList(t).filter(r=>{if(r&&typeof r=="object"){let n=r.A_Const;if(n&&n.ival&&(typeof n.ival=="object"?n.ival.ival:n.ival)===32767)return false}return true});return i.length===0?null:i.map(r=>this.deparse(r,s)).join(", ")}formatSingleTypeMod(t,s){switch(s){case "varchar":case "bpchar":case "char":if(t>4)return (t-64).toString();break;case "numeric":case "decimal":if(t>4){let e=t-4,i=e>>16&65535,r=e&65535;return r>0?`${i},${r}`:i.toString()}break;case "time":case "timetz":case "timestamp":case "timestamptz":case "interval":if(t>=0)return t.toString();break}return null}getPgCatalogTypeName(t,s){switch(t){case "bpchar":return s!=null?"char":"bpchar";case "varchar":return "varchar";case "numeric":return "numeric";case "bool":return "boolean";case "int2":return "smallint";case "int4":return "int";case "int8":return "bigint";case "real":return "float4";case "time":return "time";case "timestamp":return "timestamp";case "interval":return "interval";case "bit":return "bit";default:return t}}isPgCatalogType(t){let s=t.replace(/^pg_catalog\./,"");if(hi.includes(s))return true;for(let[e,i]of mi)if(i.includes(s))return true;return false}A_ArrayExpr(t,s){return `ARRAY[${c.unwrapList(t.elements).map(r=>this.visit(r,s)).join(", ")}]`}A_Indices(t,s){let e=[];return t.is_slice?(t.lidx&&e.push(this.visit(t.lidx,s)),e.push(":"),t.uidx&&e.push(this.visit(t.uidx,s))):t.uidx&&e.push(this.visit(t.uidx,s)),`[${e.join("")}]`}A_Indirection(t,s){let e=this.visit(t.arg,s),i=this.getNodeType(t.arg);(i==="TypeCast"||i==="SubLink"||i==="A_Expr"||i==="FuncCall"||i==="A_Indirection"||i==="ColumnRef"||i==="RowExpr")&&(e=`(${e})`);let r=[e],n=c.unwrapList(t.indirection);for(let a of n)if(a.String||a.A_Star){let u=a.A_Star?"*":h.quoteIdentifier(a.String.sval||a.String.str);r.push(`.${u}`);}else r.push(this.visit(a,s));return r.join("")}A_Star(t,s){return "*"}CaseExpr(t,s){let e=["CASE"];t.arg&&e.push(this.visit(t.arg,s));let i=c.unwrapList(t.args);if(s.isPretty()&&i.length>0){for(let r of i){let n=this.visit(r,s);this.containsMultilineStringLiteral(n)?e.push(s.newline()+n):e.push(s.newline()+s.indent(n));}if(t.defresult){let r=this.visit(t.defresult,s);this.containsMultilineStringLiteral(r)?e.push(s.newline()+"ELSE "+r):e.push(s.newline()+s.indent("ELSE "+r));}return e.push(s.newline()+"END"),e.join(" ")}else {for(let r of i)e.push(this.visit(r,s));return t.defresult&&(e.push("ELSE"),e.push(this.visit(t.defresult,s))),e.push("END"),e.join(" ")}}CoalesceExpr(t,s){return `COALESCE(${c.unwrapList(t.args).map(r=>this.visit(r,s)).join(", ")})`}TypeCast(t,s){let e=this.visit(t.arg,s),i=this.TypeName(t.typeName,s);if(i==="bpchar"||i==="pg_catalog.bpchar"){let r=t.typeName?.names;if(r&&r.length===2&&r[0]?.String?.sval==="pg_catalog"&&r[1]?.String?.sval==="bpchar")return `CAST(${e} AS ${i})`}if(this.isPgCatalogType(i)){let r=this.getNodeType(t.arg),n=r==="A_Const"||r==="ColumnRef",a=r==="FuncCall";if((n||a)&&!(n&&(e.includes("(")||e.startsWith("-")))){let o=i.replace("pg_catalog.","");return a?`${s.parens(e)}::${o}`:`${e}::${o}`}}return `CAST(${e} AS ${i})`}CollateClause(t,s){let e=[];if(t.arg){let i=this.visit(t.arg,s),r=this.getNodeType(t.arg);(r==="A_Expr"||r==="FuncCall"||r==="SubLink")&&(i=`(${i})`),e.push(i);}if(e.push("COLLATE"),t.collname){let i=c.unwrapList(t.collname);e.push(i.map(r=>this.visit(r,s)).join("."));}return e.join(" ")}BooleanTest(t,s){let e=[],i=s.spawn("BooleanTest",{bool:true});switch(e.push(this.visit(t.arg,i)),t.booltesttype){case "IS_TRUE":e.push("IS TRUE");break;case "IS_NOT_TRUE":e.push("IS NOT TRUE");break;case "IS_FALSE":e.push("IS FALSE");break;case "IS_NOT_FALSE":e.push("IS NOT FALSE");break;case "IS_UNKNOWN":e.push("IS UNKNOWN");break;case "IS_NOT_UNKNOWN":e.push("IS NOT UNKNOWN");break}return e.join(" ")}NullTest(t,s){let e=[];switch(e.push(this.visit(t.arg,s)),t.nulltesttype){case "IS_NULL":e.push("IS NULL");break;case "IS_NOT_NULL":e.push("IS NOT NULL");break}return e.join(" ")}quoteIfNeeded(t){return h.quoteIdentifier(t)}preserveOperatorDefElemCase(t){return {leftarg:"Leftarg",rightarg:"Rightarg",procedure:"Procedure",function:"Function",commutator:"Commutator",negator:"Negator",restrict:"Restrict",join:"Join",hashes:"Hashes",merges:"Merges"}[t.toLowerCase()]||t}String(t,s){if(s.isStringLiteral||s.isEnumValue)return h.formatEString(t.sval||"");let e=t.sval||"";return s.parentNodeTypes.includes("DefElem")||s.parentNodeTypes.includes("CreateOpClassItem")||s.parentNodeTypes.includes("ObjectWithArgs")&&/^[+\-*/<>=~!@#%^&|`?]+$/.test(e)?e:h.quoteIdentifier(e)}Integer(t,s){return t.ival?.toString()||"0"}Float(t,s){return t.fval||"0.0"}Boolean(t,s){return t.boolval?"true":"false"}BitString(t,s){return t.bsval.startsWith("x")?`x'${t.bsval.substring(1)}'`:t.bsval.startsWith("b")?`b'${t.bsval.substring(1)}'`:`b'${t.bsval}'`}Null(t,s){return "NULL"}List(t,s){return !t.items||t.items.length===0?"":t.items.map(e=>this.visit(e,s)).join(", ")}CreateStmt(t,s){let e=["CREATE"];if(t.relation&&t.relation.relpersistence==="t"?e.push("TEMPORARY"):t.relation&&t.relation.relpersistence==="u"&&e.push("UNLOGGED"),t.if_not_exists?e.push("TABLE IF NOT EXISTS"):e.push("TABLE"),e.push(this.RangeVar(t.relation,s)),t.ofTypename){if(e.push("OF"),e.push(this.TypeName(t.ofTypename,s)),t.tableElts){let r=c.unwrapList(t.tableElts).map(n=>this.deparse(n,s));e.push(s.parens(r.join(", ")));}}else if(t.tableElts){let r=c.unwrapList(t.tableElts).map(n=>this.deparse(n,s.spawn("CreateStmt")));if(s.isPretty()){let n=r.map(a=>{let u=a.trim();return u.startsWith(`
23
- `)?s.indent(u.substring(1)):s.indent(u)}).join(","+s.newline());e.push("("+s.newline()+n+s.newline()+")");}else e.push(s.parens(r.join(", ")));}else t.partbound||e.push(s.parens(""));if(t.partbound&&t.inhRelations&&t.inhRelations.length>0){e.push("PARTITION OF");let r=c.unwrapList(t.inhRelations).map(n=>this.visit(n,s));if(e.push(r[0]),t.partbound.strategy==="l"&&t.partbound.listdatums){e.push("FOR VALUES IN");let n=c.unwrapList(t.partbound.listdatums).map(a=>this.visit(a,s)).join(", ");e.push(`(${n})`);}else if(t.partbound.strategy==="r"&&(t.partbound.lowerdatums||t.partbound.upperdatums)){if(e.push("FOR VALUES FROM"),t.partbound.lowerdatums){let n=c.unwrapList(t.partbound.lowerdatums).map(a=>this.visit(a,s)).join(", ");e.push(`(${n})`);}if(t.partbound.upperdatums){e.push("TO");let n=c.unwrapList(t.partbound.upperdatums).map(a=>this.visit(a,s)).join(", ");e.push(`(${n})`);}}else if(t.partbound.strategy==="h"&&t.partbound.modulus!==void 0){e.push("FOR VALUES WITH");let n=t.partbound.remainder!==void 0?t.partbound.remainder:0;e.push(`(MODULUS ${t.partbound.modulus}, REMAINDER ${n})`);}else t.partbound.is_default&&e.push("DEFAULT");}else if(t.inhRelations){e.push("INHERITS");let r=c.unwrapList(t.inhRelations).map(n=>this.visit(n,s));e.push(s.parens(r.join(", ")));}if(t.partspec){switch(e.push("PARTITION BY"),t.partspec.strategy){case "PARTITION_STRATEGY_HASH":e.push("HASH");break;case "PARTITION_STRATEGY_LIST":e.push("LIST");break;case "PARTITION_STRATEGY_RANGE":e.push("RANGE");break}if(t.partspec.partParams&&t.partspec.partParams.length>0){let i=c.unwrapList(t.partspec.partParams).map(r=>this.visit(r,s)).join(", ");e.push(`(${i})`);}}if(t.oncommit&&t.oncommit!=="ONCOMMIT_NOOP")switch(e.push("ON COMMIT"),t.oncommit){case "ONCOMMIT_PRESERVE_ROWS":e.push("PRESERVE ROWS");break;case "ONCOMMIT_DELETE_ROWS":e.push("DELETE ROWS");break;case "ONCOMMIT_DROP":e.push("DROP");break}if(t.options&&t.options.length>0){let i=s.spawn("CreateStmt"),r=t.options.map(n=>this.deparse(n,i));e.push("WITH",`(${r.join(", ")})`);}return t.accessMethod&&(e.push("USING"),e.push(this.quoteIfNeeded(t.accessMethod))),e.join(" ")}ColumnDef(t,s){let e=[];if(t.colname&&e.push(h.quoteIdentifier(t.colname)),t.typeName&&e.push(this.TypeName(t.typeName,s)),t.fdwoptions&&t.fdwoptions.length>0){e.push("OPTIONS");let i=s.spawn("ColumnDef"),r=c.unwrapList(t.fdwoptions).map(n=>this.visit(n,i));e.push(`(${r.join(", ")})`);}if(t.collClause&&e.push(this.CollateClause(t.collClause,s)),t.constraints){let r=c.unwrapList(t.constraints).map(n=>{let a=s.spawn("ColumnDef",{isColumnConstraint:true});return this.visit(n,a)});e.push(...r);}return t.raw_default&&(e.push("DEFAULT"),e.push(this.visit(t.raw_default,s))),t.generated&&(e.push("GENERATED ALWAYS AS"),e.push(`(${t.generated})`),e.push("STORED")),t.is_not_null&&e.push("NOT NULL"),e.join(" ")}Constraint(t,s){let e=[];switch(t.conname&&(t.contype==="CONSTR_CHECK"||t.contype==="CONSTR_UNIQUE"||t.contype==="CONSTR_PRIMARY"||t.contype==="CONSTR_FOREIGN")&&(e.push("CONSTRAINT"),e.push(h.quoteIdentifier(t.conname))),t.contype){case "CONSTR_NULL":e.push("NULL");break;case "CONSTR_NOTNULL":e.push("NOT NULL");break;case "CONSTR_DEFAULT":e.push("DEFAULT"),t.raw_expr&&e.push(this.visit(t.raw_expr,s));break;case "CONSTR_CHECK":if(s.isPretty()&&!s.isColumnConstraint?e.push(`
24
- `+s.indent("CHECK")):e.push("CHECK"),t.raw_expr)if(s.isPretty()){let i=this.visit(t.raw_expr,s);i.includes(`
25
- `)?e.push(`(
26
- `+s.indent(i)+`
27
- )`):e.push(`(${i})`);}else e.push(s.parens(this.visit(t.raw_expr,s)));t.skip_validation&&e.push("NOT VALID"),t.is_no_inherit&&!s.isDomainConstraint&&e.push("NO INHERIT");break;case "CONSTR_GENERATED":e.push("GENERATED"),t.generated_when==="a"?e.push("ALWAYS"):t.generated_when==="s"&&e.push("BY DEFAULT"),e.push("AS"),t.raw_expr&&e.push(s.parens(this.visit(t.raw_expr,s))),e.push("STORED");break;case "CONSTR_IDENTITY":if(e.push("GENERATED"),t.generated_when==="a"?e.push("ALWAYS"):(t.generated_when==="d"||t.generated_when==="s")&&e.push("BY DEFAULT"),e.push("AS IDENTITY"),t.options&&t.options.length>0){let i=c.unwrapList(t.options).map(r=>{if(r.DefElem){let n=r.DefElem;if(n.defname==="sequence_name")return n.arg&&n.arg.List?`SEQUENCE NAME ${c.unwrapList(n.arg).map(o=>this.visit(o,s)).join(".")}`:"SEQUENCE NAME";if(n.defname==="start")return `START WITH ${n.arg?this.visit(n.arg,s):""}`;if(n.defname==="increment")return `INCREMENT BY ${n.arg?this.visit(n.arg,s):""}`;if(n.defname==="minvalue")return n.arg?`MINVALUE ${this.visit(n.arg,s)}`:"NO MINVALUE";if(n.defname==="maxvalue")return n.arg?`MAXVALUE ${this.visit(n.arg,s)}`:"NO MAXVALUE";if(n.defname==="cache")return `CACHE ${n.arg?this.visit(n.arg,s):""}`;if(n.defname==="cycle")return (n.arg?this.visit(n.arg,s):"")==="true"?"CYCLE":"NO CYCLE";let a=n.arg?this.visit(n.arg,s):"";return `${n.defname.toUpperCase()} ${a}`}return this.visit(r,s)});if(s.isPretty()){let r=i.map(n=>s.indent(n));e.push(`(
28
- `+r.join(`
29
- `)+`
30
- )`);}else e.push(`(${i.join(" ")})`);}break;case "CONSTR_PRIMARY":if(e.push("PRIMARY KEY"),t.keys&&t.keys.length>0){let i=c.unwrapList(t.keys).map(r=>this.visit(r,s)).join(", ");e.push(`(${i})`);}t.indexname&&(e.push("USING INDEX"),e.push(t.indexname));break;case "CONSTR_UNIQUE":if(s.isPretty()&&!s.isColumnConstraint?e.push(`
31
- `+s.indent("UNIQUE")):e.push("UNIQUE"),t.nulls_not_distinct&&e.push("NULLS NOT DISTINCT"),t.keys&&t.keys.length>0){let i=c.unwrapList(t.keys).map(r=>this.visit(r,s)).join(", ");e.push(`(${i})`);}t.indexname&&(e.push("USING INDEX"),e.push(t.indexname));break;case "CONSTR_FOREIGN":if(s.isColumnConstraint)e.push("REFERENCES");else if(s.isPretty()){if(e.push(`
32
- `+s.indent("FOREIGN KEY")),t.fk_attrs&&t.fk_attrs.length>0){let i=c.unwrapList(t.fk_attrs).map(r=>this.visit(r,s)).join(", ");e.push(`(${i})`);}e.push(`
33
- `+s.indent("REFERENCES"));}else {if(e.push("FOREIGN KEY"),t.fk_attrs&&t.fk_attrs.length>0){let i=c.unwrapList(t.fk_attrs).map(r=>this.visit(r,s)).join(", ");e.push(`(${i})`);}e.push("REFERENCES");}if(t.pktable)if(s.isPretty()&&!s.isColumnConstraint){let i=e.length-1;i>=0&&e[i].includes("REFERENCES")?e[i]+=" "+this.RangeVar(t.pktable,s):e.push(this.RangeVar(t.pktable,s));}else e.push(this.RangeVar(t.pktable,s));if(t.pk_attrs&&t.pk_attrs.length>0){let i=c.unwrapList(t.pk_attrs).map(r=>this.visit(r,s)).join(", ");if(s.isPretty()&&!s.isColumnConstraint){let r=e.length-1;r>=0?e[r]+=` (${i})`:e.push(`(${i})`);}else e.push(`(${i})`);}if(t.fk_matchtype&&t.fk_matchtype!=="s"){let i="";switch(t.fk_matchtype){case "f":i="MATCH FULL";break;case "p":i="MATCH PARTIAL";break}s.isPretty()&&!s.isColumnConstraint?e.push(`
34
- `+s.indent(i)):e.push(i);}if(t.fk_upd_action&&t.fk_upd_action!=="a"){let i="ON UPDATE ";switch(t.fk_upd_action){case "r":i+="RESTRICT";break;case "c":i+="CASCADE";break;case "n":i+="SET NULL";break;case "d":i+="SET DEFAULT";break}s.isPretty()?e.push(`
35
- `+s.indent(i)):(e.push("ON UPDATE"),e.push(i.replace("ON UPDATE ","")));}if(t.fk_del_action&&t.fk_del_action!=="a"){let i="ON DELETE ";switch(t.fk_del_action){case "r":i+="RESTRICT";break;case "c":i+="CASCADE";break;case "n":i+="SET NULL";break;case "d":i+="SET DEFAULT";break}s.isPretty()?e.push(`
36
- `+s.indent(i)):(e.push("ON DELETE"),e.push(i.replace("ON DELETE ","")));}t.skip_validation&&!s.isDomainConstraint&&(s.isPretty()&&!s.isColumnConstraint?e.push(`
37
- `+s.indent("NOT VALID")):e.push("NOT VALID"));break;case "CONSTR_ATTR_DEFERRABLE":e.push("DEFERRABLE");break;case "CONSTR_ATTR_NOT_DEFERRABLE":e.push("NOT DEFERRABLE");break;case "CONSTR_ATTR_DEFERRED":e.push("INITIALLY DEFERRED");break;case "CONSTR_ATTR_IMMEDIATE":e.push("INITIALLY IMMEDIATE");break;case "CONSTR_EXCLUSION":if(e.push("EXCLUDE"),t.access_method&&(e.push("USING"),e.push(t.access_method)),t.exclusions&&t.exclusions.length>0){let i=c.unwrapList(t.exclusions).map(r=>{if(this.getNodeType(r)==="List"){let n=c.unwrapList(r);if(n.length>=2){let a=this.visit(n[0],s),u=n[1],o="";if(this.getNodeType(u)==="List"){let l=c.unwrapList(u);l.length>0&&l[0].String&&(o=l[0].String.sval);}else u.String?o=u.String.sval:o=this.visit(u,s);return `${a} WITH ${o}`}}return this.visit(r,s)});e.push(`(${i.join(", ")})`);}t.where_clause&&(e.push("WHERE"),e.push(s.parens(this.visit(t.where_clause,s))));break}if((t.contype==="CONSTR_PRIMARY"||t.contype==="CONSTR_UNIQUE"||t.contype==="CONSTR_FOREIGN")&&(t.deferrable?s.isPretty()&&t.contype==="CONSTR_FOREIGN"?(e.push(`
38
- `+s.indent("DEFERRABLE")),t.initdeferred===true?e.push(`
39
- `+s.indent("INITIALLY DEFERRED")):t.initdeferred===false&&e.push(`
40
- `+s.indent("INITIALLY IMMEDIATE"))):(e.push("DEFERRABLE"),t.initdeferred===true?e.push("INITIALLY DEFERRED"):t.initdeferred===false&&e.push("INITIALLY IMMEDIATE")):t.deferrable===false&&(s.isPretty()&&t.contype==="CONSTR_FOREIGN"?e.push(`
41
- `+s.indent("NOT DEFERRABLE")):e.push("NOT DEFERRABLE"))),s.isPretty()&&t.contype==="CONSTR_FOREIGN"){let i="";for(let r=0;r<e.length;r++)e[r].startsWith(`
42
- `)||r>0&&!e[r-1].startsWith(`
43
- `)&&(i+=" "),i+=e[r];return i}return e.join(" ")}SubLink(t,s){let e=s.parens(this.visit(t.subselect,s));switch(t.subLinkType){case "ANY_SUBLINK":if(t.testexpr&&t.operName){let i=this.visit(t.testexpr,s),r=this.deparseOperatorName(t.operName,s);return `${i} ${r} ANY ${e}`}else if(t.testexpr)return `${this.visit(t.testexpr,s)} IN ${e}`;return e;case "ALL_SUBLINK":if(t.testexpr&&t.operName){let i=this.visit(t.testexpr,s),r=this.deparseOperatorName(t.operName,s);return `${i} ${r} ALL ${e}`}return e;case "EXISTS_SUBLINK":return `EXISTS ${e}`;case "ARRAY_SUBLINK":return `ARRAY${e}`;default:return e}}CaseWhen(t,s){let e=["WHEN"];return t.expr&&e.push(this.visit(t.expr,s)),e.push("THEN"),t.result&&e.push(this.visit(t.result,s)),e.join(" ")}WindowDef(t,s){let e=[];t.name&&e.push(t.name);let i=[];if(t.partitionClause){let n=c.unwrapList(t.partitionClause).map(a=>this.visit(a,s));i.push(`PARTITION BY ${n.join(", ")}`);}if(t.orderClause){let n=c.unwrapList(t.orderClause).map(a=>this.visit(a,s));i.push(`ORDER BY ${n.join(", ")}`);}if(t.frameOptions&&t.frameOptions!==1058){let r=this.formatWindowFrame(t,s.spawn("WindowDef"));r&&i.push(r);}return i.length>0?(t.name&&e.push("AS"),e.push(`(${i.join(" ")})`)):t.name?(e.push("AS"),e.push("()")):e.length===0&&e.push("()"),e.join(" ")}formatWindowFrame(t,s){if(!t.frameOptions)return null;let e=t.frameOptions,r=e&-229377,n=[];if(e&1&&(e&2?n.push("RANGE"):e&4?n.push("ROWS"):e&8&&n.push("GROUPS")),n.length===0)return null;let a=[];if(r===789)a.push("CURRENT ROW"),a.push("AND UNBOUNDED FOLLOWING");else if(r===1077)a.push("UNBOUNDED PRECEDING"),a.push("AND CURRENT ROW");else if(r===18453)t.startOffset&&t.endOffset&&(a.push(`${this.visit(t.startOffset,s)} PRECEDING`),a.push(`AND ${this.visit(t.endOffset,s)} FOLLOWING`));else if(r===1557)a.push("CURRENT ROW"),a.push("AND CURRENT ROW");else if(r===16917)a.push("CURRENT ROW"),t.endOffset&&a.push(`AND ${this.visit(t.endOffset,s)} FOLLOWING`);else {if(r===1058)return null;t.startOffset?e&1024?a.push(`${this.visit(t.startOffset,s)} PRECEDING`):e&2048?a.push(`${this.visit(t.startOffset,s)} FOLLOWING`):a.push(`${this.visit(t.startOffset,s)} PRECEDING`):e&16?a.push("UNBOUNDED PRECEDING"):e&32&&a.push("CURRENT ROW"),t.endOffset?a.length>0&&(e&4096?a.push(`AND ${this.visit(t.endOffset,s)} PRECEDING`):e&8192?a.push(`AND ${this.visit(t.endOffset,s)} FOLLOWING`):a.push(`AND ${this.visit(t.endOffset,s)} FOLLOWING`)):e&128?a.length>0&&a.push("AND UNBOUNDED FOLLOWING"):(a.length>0&&a.push("AND CURRENT ROW"));}return a.length>0&&(n.push("BETWEEN"),n.push(a.join(" "))),e&32768?n.push("EXCLUDE CURRENT ROW"):e&65536?n.push("EXCLUDE GROUP"):e&131072&&n.push("EXCLUDE TIES"),n.join(" ")}SortBy(t,s){let e=[];if(t.node&&e.push(this.visit(t.node,s)),t.sortby_dir==="SORTBY_USING"&&t.useOp){e.push("USING");let i=c.unwrapList(t.useOp);e.push(i.map(r=>r.String&&r.String.sval?r.String.sval:this.visit(r,s)).join("."));}else t.sortby_dir==="SORTBY_ASC"?e.push("ASC"):t.sortby_dir==="SORTBY_DESC"&&e.push("DESC");return t.sortby_nulls==="SORTBY_NULLS_FIRST"?e.push("NULLS FIRST"):t.sortby_nulls==="SORTBY_NULLS_LAST"&&e.push("NULLS LAST"),e.join(" ")}GroupingSet(t,s){switch(t.kind){case "GROUPING_SET_EMPTY":return "()";case "GROUPING_SET_SIMPLE":return "";case "GROUPING_SET_ROLLUP":return `ROLLUP (${c.unwrapList(t.content).map(o=>this.visit(o,s)).join(", ")})`;case "GROUPING_SET_CUBE":return `CUBE (${c.unwrapList(t.content).map(o=>this.visit(o,s)).join(", ")})`;case "GROUPING_SET_SETS":return `GROUPING SETS (${c.unwrapList(t.content).map(o=>this.visit(o,s)).join(", ")})`;default:return ""}}CommonTableExpr(t,s){let e=[];if(t.ctename&&e.push(t.ctename),t.aliascolnames){let r=c.unwrapList(t.aliascolnames).map(n=>this.visit(n,s));e[e.length-1]+=s.parens(r.join(", "));}return e.push("AS"),t.ctematerialized==="CTEMaterializeNever"?e.push("NOT MATERIALIZED"):t.ctematerialized==="CTEMaterializeAlways"&&e.push("MATERIALIZED"),t.ctequery&&e.push(s.parens(this.visit(t.ctequery,s))),e.join(" ")}ParamRef(t,s){return `$${t.number}`}LockingClause(t,s){let e=[];switch(t.strength){case "LCS_FORUPDATE":e.push("FOR UPDATE");break;case "LCS_FORSHARE":e.push("FOR SHARE");break;case "LCS_FORKEYSHARE":e.push("FOR KEY SHARE");break;case "LCS_FORNOKEYUPDATE":e.push("FOR NO KEY UPDATE");break;default:throw new Error(`Unsupported locking strength: ${t.strength}`)}if(t.lockedRels&&t.lockedRels.length>0){e.push("OF");let i=c.unwrapList(t.lockedRels).map(r=>this.visit(r,s)).join(", ");e.push(i);}return t.waitPolicy==="LockWaitSkip"?e.push("SKIP LOCKED"):t.waitPolicy==="LockWaitError"&&e.push("NOWAIT"),e.join(" ")}MinMaxExpr(t,s){let i=c.unwrapList(t.args).map(r=>this.visit(r,s));return t.op==="IS_GREATEST"?`GREATEST(${i.join(", ")})`:`LEAST(${i.join(", ")})`}RowExpr(t,s){let i=c.unwrapList(t.args).map(r=>this.visit(r,s));return t.row_format==="COERCE_IMPLICIT_CAST"?`(${i.join(", ")})`:`ROW(${i.join(", ")})`}OpExpr(t,s){let e=c.unwrapList(t.args);if(e.length===2){let i=this.visit(e[0],s),r=this.visit(e[1],s),n=this.getOperatorName(t.opno);return `${i} ${n} ${r}`}else if(e.length===1){let i=this.visit(e[0],s);return `${this.getOperatorName(t.opno)} ${i}`}throw new Error(`Unsupported OpExpr with ${e.length} arguments`)}DistinctExpr(t,s){let e=c.unwrapList(t.args);if(e.length===2){let i=s.spawn("DistinctExpr",{isStringLiteral:true}),r=this.visit(e[0],i),n=this.visit(e[1],i);return `${r} IS DISTINCT FROM ${n}`}throw new Error(`DistinctExpr requires exactly 2 arguments, got ${e.length}`)}NullIfExpr(t,s){let e=c.unwrapList(t.args);if(e.length===2){let i=s.spawn("NullIfExpr",{isStringLiteral:true}),r=this.visit(e[0],i),n=this.visit(e[1],i);return `NULLIF(${r}, ${n})`}throw new Error(`NullIfExpr requires exactly 2 arguments, got ${e.length}`)}ScalarArrayOpExpr(t,s){let e=c.unwrapList(t.args);if(e.length===2){let i=this.visit(e[0],s),r=this.visit(e[1],s),n=t.useOr?"ANY":"ALL",a=this.getOperatorName(t.opno);return `${i} ${a} ${n}(${r})`}throw new Error(`ScalarArrayOpExpr requires exactly 2 arguments, got ${e.length}`)}Aggref(t,s){let e=this.getAggFunctionName(t.aggfnoid),i=e+"(",r=t.aggdistinct&&t.aggdistinct.length>0;if(t.args&&t.args.length>0){let a=c.unwrapList(t.args).map(u=>this.visit(u,s));r?i+="DISTINCT "+a.join(", "):i+=a.join(", ");}else e.toUpperCase()==="COUNT"&&(r?i+="DISTINCT *":i+="*");if(i+=")",t.aggorder&&t.aggorder.length>0){i+=" ORDER BY ";let a=c.unwrapList(t.aggorder).map(u=>this.visit(u,s));i+=a.join(", ");}return i}WindowFunc(t,s){let i=this.getWindowFunctionName(t.winfnoid)+"(";if(t.args&&t.args.length>0){let n=c.unwrapList(t.args).map(a=>this.visit(a,s));i+=n.join(", ");}return i+=") OVER (",t.winref&&typeof t.winref=="object"?i+=this.visit(t.winref,s):t.winref&&(i+="ORDER BY created_at ASC"),i+=")",i}FieldSelect(t,s){let e=[];return t.arg&&e.push(this.visit(t.arg,s)),t.fieldnum!==void 0&&e.push(`.field_${t.fieldnum}`),e.join("")}RelabelType(t,s){if(t.arg){let e=s.spawn("RelabelType",{isStringLiteral:true});return this.visit(t.arg,e)}return ""}CoerceViaIO(t,s){return t.arg?this.visit(t.arg,s):""}ArrayCoerceExpr(t,s){return t.arg?this.visit(t.arg,s):""}ConvertRowtypeExpr(t,s){if(t.arg){let e=s.spawn("ConvertRowtypeExpr",{isStringLiteral:true});return this.visit(t.arg,e)}return ""}NamedArgExpr(t,s){let e=[];return t.name&&(e.push(t.name),e.push("=>")),t.arg&&e.push(this.visit(t.arg,s)),e.join(" ")}ViewStmt(t,s){let e=[];if(e.push("CREATE"),t.replace&&e.push("OR REPLACE"),t.view&&t.view.relpersistence==="t"&&e.push("TEMPORARY"),e.push("VIEW"),t.view&&e.push(this.RangeVar(t.view,s)),t.aliases&&t.aliases.length>0){let i=c.unwrapList(t.aliases).map(r=>this.visit(r,s));e.push(s.parens(i.join(", ")));}if(t.options&&t.options.length>0){let i=s.spawn("ViewStmt"),r=c.unwrapList(t.options).map(n=>this.visit(n,i));e.push(`WITH (${r.join(", ")})`);}if(e.push("AS"),t.query&&e.push(this.visit(t.query,s)),t.withCheckOption)switch(t.withCheckOption){case "CASCADED_CHECK_OPTION":e.push("WITH CASCADED CHECK OPTION");break;case "LOCAL_CHECK_OPTION":e.push("WITH LOCAL CHECK OPTION");break}return e.join(" ")}IndexStmt(t,s){let e=[];if(e.push("CREATE"),t.unique&&e.push("UNIQUE"),e.push("INDEX"),t.concurrent&&e.push("CONCURRENTLY"),t.if_not_exists&&e.push("IF NOT EXISTS"),t.idxname&&e.push(h.quoteIdentifier(t.idxname)),e.push("ON"),t.relation&&e.push(this.RangeVar(t.relation,s)),t.accessMethod&&t.accessMethod!=="btree"&&(e.push("USING"),e.push(t.accessMethod)),t.indexParams&&t.indexParams.length>0){let i=c.unwrapList(t.indexParams).map(r=>this.visit(r,s));e.push(s.parens(i.join(", ")));}if(t.indexIncludingParams&&t.indexIncludingParams.length>0){let i=c.unwrapList(t.indexIncludingParams).map(r=>this.visit(r,s));e.push("INCLUDE"),e.push(s.parens(i.join(", ")));}if(t.whereClause&&(e.push("WHERE"),e.push(this.visit(t.whereClause,s))),t.options&&t.options.length>0){let i=s.spawn("IndexStmt"),r=c.unwrapList(t.options).map(n=>this.visit(n,i));e.push("WITH"),e.push(s.parens(r.join(", ")));}return t.nulls_not_distinct&&e.push("NULLS NOT DISTINCT"),t.tableSpace&&(e.push("TABLESPACE"),e.push(h.quoteIdentifier(t.tableSpace))),e.join(" ")}IndexElem(t,s){let e=[];if(t.name?e.push(h.quoteIdentifier(t.name)):t.expr&&e.push(s.parens(this.visit(t.expr,s))),t.collation&&t.collation.length>0){let i=c.unwrapList(t.collation).map(r=>this.visit(r,s));e.push("COLLATE"),e.push(i.join("."));}if(t.opclass&&t.opclass.length>0){let r=c.unwrapList(t.opclass).map(n=>this.visit(n,s)).join(".");if(t.opclassopts&&t.opclassopts.length>0){let n=c.unwrapList(t.opclassopts).map(a=>{if(a.DefElem&&a.DefElem.arg&&this.getNodeType(a.DefElem.arg)==="String"){let u=this.getNodeData(a.DefElem.arg);return `${a.DefElem.defname}='${u.sval}'`}return this.visit(a,s.spawn("IndexElem"))});r+=`(${n.join(", ")})`;}e.push(r);}if(t.ordering)switch(t.ordering){case "SORTBY_ASC":e.push("ASC");break;case "SORTBY_DESC":e.push("DESC");break}if(t.nulls_ordering)switch(t.nulls_ordering){case "SORTBY_NULLS_FIRST":e.push("NULLS FIRST");break;case "SORTBY_NULLS_LAST":e.push("NULLS LAST");break}return e.join(" ")}PartitionElem(t,s){let e=[];if(t.name?e.push(h.quoteIdentifier(t.name)):t.expr&&e.push(s.parens(this.visit(t.expr,s))),t.collation&&t.collation.length>0){let i=c.unwrapList(t.collation).map(r=>this.visit(r,s));e.push("COLLATE"),e.push(i.join("."));}if(t.opclass&&t.opclass.length>0){let i=c.unwrapList(t.opclass).map(r=>this.visit(r,s));e.push(i.join("."));}return e.join(" ")}PartitionCmd(t,s){let e=[];if(t.concurrent&&e.push("CONCURRENTLY"),t.name&&e.push(this.visit(t.name,s)),t.bound)if(t.bound.strategy==="l"&&t.bound.listdatums){e.push("FOR VALUES IN");let i=c.unwrapList(t.bound.listdatums).map(r=>this.visit(r,s)).join(", ");e.push(`(${i})`);}else if(t.bound.strategy==="r"&&(t.bound.lowerdatums||t.bound.upperdatums)){if(e.push("FOR VALUES FROM"),t.bound.lowerdatums){let i=c.unwrapList(t.bound.lowerdatums).map(r=>this.visit(r,s)).join(", ");e.push(`(${i})`);}if(t.bound.upperdatums){e.push("TO");let i=c.unwrapList(t.bound.upperdatums).map(r=>this.visit(r,s)).join(", ");e.push(`(${i})`);}}else t.bound.strategy==="h"&&t.bound.modulus!==void 0&&t.bound.remainder!==void 0?(e.push("FOR VALUES WITH"),e.push(`(modulus ${t.bound.modulus}, remainder ${t.bound.remainder})`)):t.bound.is_default&&e.push("DEFAULT");return e.join(" ")}getAggFunctionName(t){return {2100:"avg",2101:"count",2102:"max",2103:"min",2104:"sum",2105:"stddev",2106:"variance",2107:"array_agg",2108:"string_agg"}[t||0]||"unknown_agg"}getWindowFunctionName(t){return {3100:"row_number",3101:"rank",3102:"dense_rank",3103:"percent_rank",3104:"cume_dist",3105:"ntile",3106:"lag",3107:"lead",3108:"first_value",3109:"last_value"}[t||0]||"unknown_window_func"}getOperatorName(t){return {96:"=",518:"<>",97:"<",521:">",523:"<=",525:">=",551:"+",552:"-",553:"*",554:"/",555:"%",484:"-",1752:"~~",1753:"!~~",1754:"~~*",1755:"!~~*",15:"=",58:"<",59:"<=",61:">",62:">="}[t||0]||"="}JoinExpr(t,s){let e=[];t.larg&&e.push(this.visit(t.larg,s));let i="";switch(t.isNatural&&(i="NATURAL "),t.jointype){case "JOIN_INNER":t.isNatural?i+="JOIN":!t.quals&&(!t.usingClause||t.usingClause.length===0)?i+="CROSS JOIN":i+="JOIN";break;case "JOIN_LEFT":i+="LEFT JOIN";break;case "JOIN_FULL":i+="FULL JOIN";break;case "JOIN_RIGHT":i+="RIGHT JOIN";break;default:i+="JOIN";}if(t.rarg){let n=this.visit(t.rarg,s);t.rarg&&"JoinExpr"in t.rarg&&!t.rarg.JoinExpr.alias&&(n=`(${n})`),s.isPretty()?e.push(s.newline()+i+" "+n):e.push(i+" "+n);}else s.isPretty()?e.push(s.newline()+i):e.push(i);if(t.usingClause&&t.usingClause.length>0){let a=c.unwrapList(t.usingClause).map(u=>this.visit(u,s));s.isPretty()?e.push(` USING (${a.join(", ")})`):e.push(`USING (${a.join(", ")})`);}else if(t.quals){let n=this.visit(t.quals,s);s.isPretty()?n.includes("AND")||n.includes("OR")||n.length>50?this.containsMultilineStringLiteral(n)?e.push(` ON ${n}`):e.push(` ON${s.newline()}${s.indent(n)}`):e.push(` ON ${n}`):e.push(`ON ${n}`);}let r;if(s.isPretty()?r=e.join(""):r=e.join(" "),t.join_using_alias&&t.join_using_alias.aliasname){let n=t.join_using_alias.aliasname;if(t.join_using_alias.colnames&&t.join_using_alias.colnames.length>0){let u=c.unwrapList(t.join_using_alias.colnames).map(o=>this.visit(o,s)).join(", ");n+=`(${u})`;}r+=` AS ${n}`;}if(t.alias&&t.alias.aliasname){let n=t.alias.aliasname;if(t.alias.colnames&&t.alias.colnames.length>0){let u=c.unwrapList(t.alias.colnames).map(o=>this.visit(o,s)).join(", ");n+=`(${u})`;}r=`(${r}) ${n}`;}return r}FromExpr(t,s){let r=c.unwrapList(t.fromlist).map(n=>this.visit(n,s)).join(", ");return t.quals&&(r+=` WHERE ${this.visit(t.quals,s)}`),r}TransactionStmt(t,s){let e=[];switch(t.kind){case "TRANS_STMT_BEGIN":e.push("BEGIN");break;case "TRANS_STMT_START":e.push("START TRANSACTION");break;case "TRANS_STMT_COMMIT":e.push("COMMIT");break;case "TRANS_STMT_ROLLBACK":e.push("ROLLBACK");break;case "TRANS_STMT_SAVEPOINT":e.push("SAVEPOINT"),t.savepoint_name&&e.push(h.quoteIdentifier(t.savepoint_name));break;case "TRANS_STMT_RELEASE":e.push("RELEASE SAVEPOINT"),t.savepoint_name&&e.push(h.quoteIdentifier(t.savepoint_name));break;case "TRANS_STMT_ROLLBACK_TO":e.push("ROLLBACK TO"),t.savepoint_name&&e.push(h.quoteIdentifier(t.savepoint_name));break;case "TRANS_STMT_PREPARE":e.push("PREPARE TRANSACTION"),t.gid&&e.push(`'${t.gid}'`);break;case "TRANS_STMT_COMMIT_PREPARED":e.push("COMMIT PREPARED"),t.gid&&e.push(`'${t.gid}'`);break;case "TRANS_STMT_ROLLBACK_PREPARED":e.push("ROLLBACK PREPARED"),t.gid&&e.push(`'${t.gid}'`);break;default:throw new Error(`Unsupported TransactionStmt kind: ${t.kind}`)}if(t.options&&t.options.length>0){let i=c.unwrapList(t.options).map(r=>{if(r.DefElem){let n=r.DefElem;if(n.defname==="transaction_read_only"){let a=false;if(n.arg){let u=this.getNodeData(n.arg);if(u.ival!==void 0)a=(typeof u.ival=="object"?u.ival.ival:u.ival)===1;else if(u.sval!==void 0){let l=(typeof u.sval=="object"?u.sval.sval:u.sval).replace(/'/g,"");a=l.toLowerCase()==="on"||l.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 l=(typeof u.sval=="object"?u.sval.sval:u.sval).replace(/'/g,"");a=l.toLowerCase()==="on"||l.toLowerCase()==="true";}}return a?"DEFERRABLE":"NOT DEFERRABLE"}}return this.visit(r,s)}).filter(Boolean);i.length>0&&e.push(i.join(", "));}return e.join(" ")}VariableSetStmt(t,s){switch(t.kind){case "VAR_SET_VALUE":let e=t.is_local?"LOCAL ":"",i=t.args?c.unwrapList(t.args).map(o=>{let l=this.getNodeData(o);if(l.sval!==void 0){let f=typeof l.sval=="object"?l.sval.sval:l.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(o,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 o=[];if(t.args){let l=c.unwrapList(t.args);for(let f of l)if(f.DefElem){let m=f.DefElem;if(m.defname==="transaction_isolation"){let T=m.arg?this.visit(m.arg,s):"";o.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";}}o.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";}}o.push(T?"DEFERRABLE":"NOT DEFERRABLE");}}}return t.name==="SESSION CHARACTERISTICS"?`SET SESSION CHARACTERISTICS AS TRANSACTION ${o.join(", ")}`:`SET TRANSACTION ${o.join(", ")}`}else return `SET ${t.args?c.unwrapList(t.args).map(l=>l.VariableSetStmt?this.VariableSetStmt(l.VariableSetStmt,s):this.visit(l,s)).join(", "):""}`;case "VAR_RESET":return `RESET ${h.quoteIdentifier(t.name)}`;case "VAR_RESET_ALL":return "RESET ALL";default:throw new Error(`Unsupported VariableSetStmt kind: ${t.kind}`)}}VariableShowStmt(t,s){return t.name==="ALL"?"SHOW ALL":`SHOW ${t.name}`}CreateSchemaStmt(t,s){let e=["CREATE SCHEMA"];if(t.if_not_exists&&e.push("IF NOT EXISTS"),t.schemaname&&e.push(h.quoteIdentifier(t.schemaname)),t.authrole&&(e.push("AUTHORIZATION"),e.push(this.RoleSpec(t.authrole,s))),t.schemaElts&&t.schemaElts.length>0){let i=c.unwrapList(t.schemaElts).map(r=>this.visit(r,s)).join(" ");e.push(i);}return e.join(" ")}RoleSpec(t,s){if(t.rolename)return this.quoteIfNeeded(t.rolename);switch(t.roletype){case "ROLESPEC_PUBLIC":return "PUBLIC";case "ROLESPEC_CURRENT_USER":return "CURRENT_USER";case "ROLESPEC_SESSION_USER":return "SESSION_USER";case "ROLESPEC_CURRENT_ROLE":return "CURRENT_ROLE";default:return "PUBLIC"}}roletype(t,s){return t.rolename?t.rolename:""}DropStmt(t,s){let e=["DROP"];if(t.removeType)switch(t.removeType){case "OBJECT_TABLE":e.push("TABLE");break;case "OBJECT_VIEW":e.push("VIEW");break;case "OBJECT_INDEX":e.push("INDEX");break;case "OBJECT_SEQUENCE":e.push("SEQUENCE");break;case "OBJECT_SCHEMA":e.push("SCHEMA");break;case "OBJECT_FUNCTION":e.push("FUNCTION");break;case "OBJECT_PROCEDURE":e.push("PROCEDURE");break;case "OBJECT_DATABASE":e.push("DATABASE");break;case "OBJECT_EXTENSION":e.push("EXTENSION");break;case "OBJECT_TYPE":e.push("TYPE");break;case "OBJECT_DOMAIN":e.push("DOMAIN");break;case "OBJECT_TRIGGER":e.push("TRIGGER");break;case "OBJECT_RULE":e.push("RULE");break;case "OBJECT_POLICY":e.push("POLICY");break;case "OBJECT_ROLE":e.push("ROLE");break;case "OBJECT_TABLESPACE":e.push("TABLESPACE");break;case "OBJECT_FOREIGN_SERVER":e.push("SERVER");break;case "OBJECT_FDW":e.push("FOREIGN DATA WRAPPER");break;case "OBJECT_PUBLICATION":e.push("PUBLICATION");break;case "OBJECT_SUBSCRIPTION":e.push("SUBSCRIPTION");break;case "OBJECT_CAST":e.push("CAST");break;case "OBJECT_TRANSFORM":e.push("TRANSFORM");break;case "OBJECT_ACCESS_METHOD":e.push("ACCESS METHOD");break;case "OBJECT_OPERATOR":e.push("OPERATOR");break;case "OBJECT_FOREIGN_TABLE":e.push("FOREIGN TABLE");break;case "OBJECT_MATVIEW":e.push("MATERIALIZED VIEW");break;case "OBJECT_OPCLASS":e.push("OPERATOR CLASS");break;case "OBJECT_OPFAMILY":e.push("OPERATOR FAMILY");break;case "OBJECT_COLLATION":e.push("COLLATION");break;case "OBJECT_CONVERSION":e.push("CONVERSION");break;case "OBJECT_LANGUAGE":e.push("LANGUAGE");break;case "OBJECT_LARGEOBJECT":e.push("LARGE OBJECT");break;case "OBJECT_AGGREGATE":e.push("AGGREGATE");break;case "OBJECT_STATISTIC_EXT":e.push("STATISTICS");break;case "OBJECT_EVENT_TRIGGER":e.push("EVENT TRIGGER");break;case "OBJECT_AMOP":e.push("OPERATOR CLASS");break;case "OBJECT_AMPROC":e.push("OPERATOR CLASS");break;case "OBJECT_ATTRIBUTE":e.push("ATTRIBUTE");break;case "OBJECT_DEFAULT":e.push("DEFAULT");break;case "OBJECT_DEFACL":e.push("DEFAULT PRIVILEGES");break;case "OBJECT_PARAMETER_ACL":e.push("PARAMETER");break;case "OBJECT_PUBLICATION_NAMESPACE":e.push("PUBLICATION");break;case "OBJECT_PUBLICATION_REL":e.push("PUBLICATION");break;case "OBJECT_ROUTINE":e.push("ROUTINE");break;case "OBJECT_TABCONSTRAINT":e.push("CONSTRAINT");break;case "OBJECT_TSCONFIGURATION":e.push("TEXT SEARCH CONFIGURATION");break;case "OBJECT_TSDICTIONARY":e.push("TEXT SEARCH DICTIONARY");break;case "OBJECT_TSPARSER":e.push("TEXT SEARCH PARSER");break;case "OBJECT_TSTEMPLATE":e.push("TEXT SEARCH TEMPLATE");break;case "OBJECT_USER_MAPPING":e.push("USER MAPPING");break;default:throw new Error(`Unsupported DROP object type: ${t.removeType}`)}if(t.concurrent&&e.push("CONCURRENTLY"),t.missing_ok&&e.push("IF EXISTS"),t.objects&&t.objects.length>0)if(t.removeType==="OBJECT_POLICY"){let i=t.objects[0];if(i&&i.List&&i.List.items){let r=i.List.items.map(n=>n.String&&n.String.sval?n.String.sval:this.visit(n,s));if(r.length===3){let[n,a,u]=r;e.push(`${u} ON ${n}.${a}`);}else if(r.length===2){let[n,a]=r;e.push(`${a} ON ${n}`);}else e.push(r.join(", "));}}else if(t.removeType==="OBJECT_CAST"){let i=t.objects.map(r=>{if(r&&r.List&&r.List.items){let a=r.List.items.map(u=>this.visit(u,s)).filter(u=>u&&u.trim());if(a.length===2){let[u,o]=a;return `(${u} AS ${o})`}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,o]=a;return `${o} ON ${u}`}else if(a.length===3){let[u,o,l]=a;return `${l} ON ${u}.${o}`}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],o=a[1];return `${h.quoteIdentifier(o)} USING ${u}`}else if(a.length===3){let u=a[0],o=a[1],l=a[2];return `${h.quoteQualifiedIdentifier(o,l)} 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,o]=a;return `FOR ${u} LANGUAGE ${o}`}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(o=>this.visit(o,s)).filter(o=>o&&o.trim()).join(".");if(r&&r.List&&r.List.items)return r.List.items.map(o=>o.String&&o.String.sval?h.quoteIdentifier(o.String.sval):this.visit(o,s)).filter(o=>o&&o.trim()).join(".");let n=s.spawn("DropStmt",{objtype:t.removeType});return this.visit(r,n)}).filter(r=>r&&r.trim()).join(", ");i&&e.push(i);}return t.behavior==="DROP_CASCADE"&&e.push("CASCADE"),e.join(" ")}TruncateStmt(t,s){let e=["TRUNCATE"];if(t.relations&&t.relations.length>0){let i=t.relations.map(r=>this.visit(r,s)).join(", ");e.push(i);}return t.restart_seqs&&e.push("RESTART IDENTITY"),t.behavior==="DROP_CASCADE"&&e.push("CASCADE"),e.join(" ")}ReturnStmt(t,s){let e=["RETURN"];if(t.returnval){let i=this.visit(t.returnval,s);e.push(i);}return e.join(" ")}PLAssignStmt(t,s){let e=[];if(t.name){let i=h.quoteIdentifier(t.name);if(t.indirection&&t.indirection.length>0){let r=t.indirection.map(n=>this.visit(n,s)).join("");i+=r;}e.push(i);}if(e.push(":="),t.val){let i=t.val;if(i.targetList){e.push("SELECT");let r=this.targetList(i.targetList,s);e.push(r);}else {let r=this.visit(t.val,s);e.push(r);}}return e.join(" ")}CopyStmt(t,s){let e=["COPY"];if(t.relation){let i=this.RangeVar(t.relation,s);e.push(i);}else if(t.query){let i=this.visit(t.query,s);e.push(`(${i})`);}if(t.attlist&&t.attlist.length>0){let i=c.unwrapList(t.attlist).map(r=>this.visit(r,s)).join(", ");e.push(`(${i})`);}if(t.is_from?e.push("FROM"):e.push("TO"),t.is_program&&e.push("PROGRAM"),t.filename?e.push(`'${t.filename}'`):e.push("STDIN"),t.options&&t.options.length>0){e.push("WITH");let i=c.unwrapList(t.options).map(r=>this.visit(r,s.spawn("CopyStmt"))).join(", ");e.push(`(${i})`);}if(t.whereClause){e.push("WHERE");let i=this.visit(t.whereClause,s);e.push(i);}return e.join(" ")}AlterTableStmt(t,s){let e=["ALTER"];if(t.objtype)switch(t.objtype){case "OBJECT_TABLE":e.push("TABLE");break;case "OBJECT_INDEX":e.push("INDEX");break;case "OBJECT_SEQUENCE":e.push("SEQUENCE");break;case "OBJECT_VIEW":e.push("VIEW");break;case "OBJECT_MATVIEW":e.push("MATERIALIZED VIEW");break;case "OBJECT_FOREIGN_TABLE":e.push("FOREIGN TABLE");break;case "OBJECT_TYPE":e.push("TYPE");break;default:e.push("TABLE");}else e.push("TABLE");t.missing_ok&&e.push("IF EXISTS");let i=s.spawn("AlterTableStmt",{objtype:t.objtype});if(t.relation){let r=this.RangeVar(t.relation,i);e.push(r);}if(t.cmds&&t.cmds.length>0){let r=c.unwrapList(t.cmds);if(s.isPretty()){let n=r.map(a=>{let u=this.visit(a,i);return s.newline()+s.indent(u)}).join(",");e.push(n);}else {let n=r.map(a=>this.visit(a,i)).join(", ");e.push(n);}}return e.join(" ")}AlterTableCmd(t,s){let e=[];if(t.subtype)switch(t.subtype){case "AT_AddColumn":if(s.objtype==="OBJECT_TYPE"?e.push("ADD ATTRIBUTE"):e.push("ADD COLUMN"),t.missing_ok&&e.push("IF NOT EXISTS"),t.def){let i=this.getNodeData(t.def);if(s.isPretty()){let r=[],n=[];if(i.colname&&r.push(h.quoteIdentifier(i.colname)),i.typeName&&r.push(this.TypeName(i.typeName,s)),i.is_not_null&&n.push("NOT NULL"),i.collClause&&n.push(this.CollateClause(i.collClause,s)),i.constraints&&c.unwrapList(i.constraints).forEach(o=>{let l=s.spawn("ColumnDef",{isColumnConstraint:true}),f=this.visit(o,l);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"),o=c.unwrapList(i.fdwoptions).map(l=>this.visit(l,u));n.push(`(${o.join(", ")})`);}let a=r.join(" ");if(n.length>0){let u=n.map(o=>s.indent(o)).join(s.newline());a+=s.newline()+u;}e.push(a);}else {let r=[];if(i.colname&&r.push(h.quoteIdentifier(i.colname)),i.typeName&&r.push(this.TypeName(i.typeName,s)),i.collClause&&r.push(this.CollateClause(i.collClause,s)),i.fdwoptions&&i.fdwoptions.length>0){r.push("OPTIONS");let n=s.spawn("ColumnDef"),a=c.unwrapList(i.fdwoptions).map(u=>this.visit(u,n));r.push(`(${a.join(", ")})`);}if(i.constraints){let a=c.unwrapList(i.constraints).map(u=>{let o=s.spawn("ColumnDef",{isColumnConstraint:true});return this.visit(u,o)});r.push(...a);}i.raw_default&&(r.push("DEFAULT"),r.push(this.visit(i.raw_default,s))),i.is_not_null&&r.push("NOT NULL"),e.push(r.join(" "));}}t.behavior==="DROP_CASCADE"&&e.push("CASCADE");break;case "AT_DropColumn":t.missing_ok?s.objtype==="OBJECT_TYPE"?e.push("DROP ATTRIBUTE IF EXISTS"):e.push("DROP COLUMN IF EXISTS"):s.objtype==="OBJECT_TYPE"?e.push("DROP ATTRIBUTE"):e.push("DROP COLUMN"),t.name&&e.push(h.quoteIdentifier(t.name)),t.behavior==="DROP_CASCADE"?e.push("CASCADE"):t.behavior==="DROP_RESTRICT"&&e.push("RESTRICT");break;case "AT_AlterColumnType":if(s.objtype==="OBJECT_TYPE"?e.push("ALTER ATTRIBUTE"):e.push("ALTER COLUMN"),t.name&&e.push(h.quoteIdentifier(t.name)),e.push("TYPE"),t.def){let i=this.getNodeData(t.def);if(i&&i.typeName)e.push(this.TypeName(i.typeName,s)),i.raw_default&&(e.push("USING"),e.push(this.visit(i.raw_default,s)));else {let r=this.visit(t.def,s);e.push(r);}}t.behavior==="DROP_CASCADE"&&e.push("CASCADE");break;case "AT_SetTableSpace":e.push("SET TABLESPACE"),t.name&&e.push(h.quoteIdentifier(t.name));break;case "AT_AddConstraint":if(e.push("ADD"),t.def){let i=this.visit(t.def,s);e.push(i);}break;case "AT_DropConstraint":t.missing_ok?e.push("DROP CONSTRAINT IF EXISTS"):e.push("DROP CONSTRAINT"),t.name&&e.push(h.quoteIdentifier(t.name)),t.behavior==="DROP_CASCADE"?e.push("CASCADE"):t.behavior==="DROP_RESTRICT"&&e.push("RESTRICT");break;case "AT_SetRelOptions":if(e.push("SET"),t.def){let i=s.spawn("AlterTableCmd",{subtype:"AT_SetRelOptions"}),r=c.unwrapList(t.def).map(n=>this.visit(n,i)).join(", ");e.push(`(${r})`);}else e.push("()");break;case "AT_ResetRelOptions":if(e.push("RESET"),t.def){let i=s.spawn("AlterTableCmd",{subtype:"AT_ResetRelOptions"}),r=c.unwrapList(t.def).map(n=>this.visit(n,i)).join(", ");e.push(`(${r})`);}else e.push("()");break;case "AT_ColumnDefault":e.push("ALTER COLUMN"),t.name&&e.push(h.quoteIdentifier(t.name)),t.def?(e.push("SET DEFAULT"),e.push(this.visit(t.def,s))):e.push("DROP DEFAULT");break;case "AT_SetStorage":if(e.push("ALTER COLUMN"),t.name&&e.push(h.quoteIdentifier(t.name)),e.push("SET STORAGE"),t.def){let i=this.visit(t.def,s);e.push(i);}break;case "AT_ClusterOn":e.push("CLUSTER ON"),t.name&&e.push(h.quoteIdentifier(t.name));break;case "AT_DropCluster":e.push("SET WITHOUT CLUSTER");break;case "AT_ChangeOwner":e.push("OWNER TO"),t.newowner&&e.push(this.RoleSpec(t.newowner,s));break;case "AT_AddInherit":e.push("INHERIT"),t.def&&e.push(this.visit(t.def,s));break;case "AT_DropInherit":e.push("NO INHERIT"),t.def&&e.push(this.visit(t.def,s));break;case "AT_SetNotNull":e.push("ALTER COLUMN"),t.name&&e.push(h.quoteIdentifier(t.name)),e.push("SET NOT NULL");break;case "AT_DropNotNull":e.push("ALTER COLUMN"),t.name&&e.push(h.quoteIdentifier(t.name)),e.push("DROP NOT NULL");break;case "AT_SetStatistics":e.push("ALTER COLUMN"),t.name?e.push(h.quoteIdentifier(t.name)):t.num!==void 0&&t.num!==null&&e.push(t.num.toString()),e.push("SET STATISTICS"),t.def&&e.push(this.visit(t.def,s));break;case "AT_SetOptions":if(e.push("ALTER COLUMN"),t.name&&e.push(h.quoteIdentifier(t.name)),e.push("SET"),t.def){let i=s.spawn("AlterTableCmd",{subtype:"AT_SetOptions"}),r=c.unwrapList(t.def).map(n=>this.visit(n,i)).join(", ");e.push(`(${r})`);}else e.push("()");break;case "AT_ResetOptions":if(e.push("ALTER COLUMN"),t.name&&e.push(h.quoteIdentifier(t.name)),e.push("RESET"),t.def){let i=s.spawn("AlterTableCmd",{subtype:"AT_ResetOptions"}),r=c.unwrapList(t.def).map(n=>this.visit(n,i)).join(", ");e.push(`(${r})`);}else e.push("()");break;case "AT_SetCompression":e.push("ALTER COLUMN"),t.name&&e.push(h.quoteIdentifier(t.name)),e.push("SET COMPRESSION"),t.def&&e.push(this.visit(t.def,s));break;case "AT_ValidateConstraint":e.push("VALIDATE CONSTRAINT"),t.name&&e.push(h.quoteIdentifier(t.name));break;case "AT_EnableTrig":e.push("ENABLE TRIGGER"),t.name&&e.push(h.quoteIdentifier(t.name));break;case "AT_EnableAlwaysTrig":e.push("ENABLE ALWAYS TRIGGER"),t.name&&e.push(h.quoteIdentifier(t.name));break;case "AT_EnableReplicaTrig":e.push("ENABLE REPLICA TRIGGER"),t.name&&e.push(h.quoteIdentifier(t.name));break;case "AT_DisableTrig":e.push("DISABLE TRIGGER"),t.name&&e.push(h.quoteIdentifier(t.name));break;case "AT_EnableTrigAll":e.push("ENABLE TRIGGER ALL");break;case "AT_DisableTrigAll":e.push("DISABLE TRIGGER ALL");break;case "AT_EnableTrigUser":e.push("ENABLE TRIGGER USER");break;case "AT_DisableTrigUser":e.push("DISABLE TRIGGER USER");break;case "AT_EnableRule":e.push("ENABLE RULE"),t.name&&e.push(h.quoteIdentifier(t.name));break;case "AT_EnableAlwaysRule":e.push("ENABLE ALWAYS RULE"),t.name&&e.push(h.quoteIdentifier(t.name));break;case "AT_EnableReplicaRule":e.push("ENABLE REPLICA RULE"),t.name&&e.push(h.quoteIdentifier(t.name));break;case "AT_DisableRule":e.push("DISABLE RULE"),t.name&&e.push(h.quoteIdentifier(t.name));break;case "AT_SetAccessMethod":e.push("SET ACCESS METHOD"),t.name?e.push(h.quoteIdentifier(t.name)):e.push("DEFAULT");break;case "AT_EnableRowSecurity":e.push("ENABLE ROW LEVEL SECURITY");break;case "AT_DisableRowSecurity":e.push("DISABLE ROW LEVEL SECURITY");break;case "AT_ForceRowSecurity":e.push("FORCE ROW LEVEL SECURITY");break;case "AT_NoForceRowSecurity":e.push("NO FORCE ROW LEVEL SECURITY");break;case "AT_AttachPartition":e.push("ATTACH PARTITION"),t.def&&e.push(this.visit(t.def,s));break;case "AT_DetachPartition":e.push("DETACH PARTITION"),t.def&&e.push(this.visit(t.def,s));break;case "AT_DetachPartitionFinalize":e.push("DETACH PARTITION"),t.def&&e.push(this.visit(t.def,s)),e.push("FINALIZE");break;case "AT_SetLogged":e.push("SET LOGGED");break;case "AT_SetUnLogged":e.push("SET UNLOGGED");break;case "AT_AddColumnToView":if(e.push("ADD COLUMN"),t.def){let i=this.visit(t.def,s);e.push(i);}break;case "AT_CookedColumnDefault":e.push("ALTER COLUMN"),t.name&&e.push(h.quoteIdentifier(t.name)),t.def?(e.push("SET DEFAULT"),e.push(this.visit(t.def,s))):e.push("DROP DEFAULT");break;case "AT_SetExpression":e.push("ALTER COLUMN"),t.name&&e.push(h.quoteIdentifier(t.name)),e.push("SET EXPRESSION"),t.def&&e.push(this.visit(t.def,s));break;case "AT_DropExpression":e.push("ALTER COLUMN"),t.name&&e.push(h.quoteIdentifier(t.name)),e.push("DROP EXPRESSION");break;case "AT_CheckNotNull":e.push("ALTER COLUMN"),t.name&&e.push(h.quoteIdentifier(t.name)),e.push("SET NOT NULL");break;case "AT_AddIndex":e.push("ADD"),t.def&&e.push(this.visit(t.def,s));break;case "AT_ReAddIndex":e.push("ADD"),t.def&&e.push(this.visit(t.def,s));break;case "AT_ReAddConstraint":e.push("ADD"),t.def&&e.push(this.visit(t.def,s));break;case "AT_ReAddDomainConstraint":e.push("ADD"),t.def&&e.push(this.visit(t.def,s));break;case "AT_AlterConstraint":if(e.push("ALTER CONSTRAINT"),t.def&&this.getNodeType(t.def)==="Constraint"){let i=this.getNodeData(t.def);i.conname&&(e.push(h.quoteIdentifier(i.conname)),i.deferrable!==void 0&&e.push(i.deferrable?"DEFERRABLE":"NOT DEFERRABLE"),i.initdeferred!==void 0&&e.push(i.initdeferred?"INITIALLY DEFERRED":"INITIALLY IMMEDIATE"));}else t.name&&(e.push(h.quoteIdentifier(t.name)),t.def&&e.push(this.visit(t.def,s)));break;case "AT_AddIndexConstraint":e.push("ADD"),t.def&&e.push(this.visit(t.def,s));break;case "AT_ReAddComment":e.push("COMMENT"),t.def&&e.push(this.visit(t.def,s));break;case "AT_AlterColumnGenericOptions":if(e.push("ALTER COLUMN"),t.name&&e.push(h.quoteIdentifier(t.name)),e.push("OPTIONS"),t.def){let i=s.spawn("AlterTableCmd",{alterColumnOptions:true}),r=c.unwrapList(t.def).map(n=>this.visit(n,i)).join(", ");e.push(`(${r})`);}break;case "AT_DropOids":e.push("SET WITHOUT OIDS");break;case "AT_ReplaceRelOptions":if(e.push("REPLACE"),t.def&&Array.isArray(t.def)){let i=c.unwrapList(t.def).map(r=>this.visit(r,s)).join(", ");e.push(`(${i})`);}else e.push("()");break;case "AT_AddOf":e.push("OF"),t.def&&e.push(this.visit(t.def,s));break;case "AT_DropOf":e.push("NOT OF");break;case "AT_ReplicaIdentity":e.push("REPLICA IDENTITY"),t.def&&e.push(this.visit(t.def,s));break;case "AT_GenericOptions":if(e.push("OPTIONS"),t.def){let i=s.spawn("AlterTableCmd",{alterTableOptions:true}),r=c.unwrapList(t.def).map(n=>this.visit(n,i)).join(", ");e.push(`(${r})`);}break;case "AT_AddIdentity":e.push("ALTER COLUMN"),t.name&&e.push(h.quoteIdentifier(t.name)),e.push("ADD"),t.def&&e.push(this.visit(t.def,s));break;case "AT_SetIdentity":e.push("ALTER COLUMN"),t.name&&e.push(h.quoteIdentifier(t.name)),e.push("SET"),t.def&&e.push(this.visit(t.def,s));break;case "AT_DropIdentity":e.push("ALTER COLUMN"),t.name&&e.push(h.quoteIdentifier(t.name)),e.push("DROP IDENTITY"),t.behavior==="DROP_CASCADE"?e.push("CASCADE"):t.behavior==="DROP_RESTRICT"&&e.push("RESTRICT");break;case "AT_ReAddStatistics":e.push("ADD"),t.def&&e.push(this.visit(t.def,s));break;default:throw new Error(`Unsupported AlterTableCmd subtype: ${t.subtype}`)}return e.join(" ")}CreateFunctionStmt(t,s){let e=["CREATE"];if(t.replace&&e.push("OR REPLACE"),t.is_procedure?e.push("PROCEDURE"):e.push("FUNCTION"),t.funcname&&t.funcname.length>0){let r=t.funcname.map(a=>a.String?.sval||a.String?.str||"").filter(a=>a),n=h.quoteDottedName(r);if(t.parameters&&t.parameters.length>0){let a=t.parameters.filter(u=>this.getNodeData(u).mode!=="FUNC_PARAM_TABLE").map(u=>this.visit(u,s));if(a.length>0)if(s.isPretty()){let u=a.map(o=>s.indent(o)).join(","+s.newline());e.push(n+"("+s.newline()+u+s.newline()+")");}else e.push(n+"("+a.join(", ")+")");else e.push(n+"()");}else e.push(n+"()");}if(t.parameters&&t.parameters.some(r=>this.getNodeData(r).mode==="FUNC_PARAM_TABLE")){let r=t.parameters.filter(n=>this.getNodeData(n).mode==="FUNC_PARAM_TABLE").map(n=>this.visit(n,s));if(s.isPretty()){let n=r.map(a=>s.indent(a)).join(","+s.newline());e.push("RETURNS TABLE ("+s.newline()+n+s.newline()+")");}else e.push("RETURNS TABLE ("),e.push(r.join(", ")),e.push(")");}else t.returnType&&(e.push("RETURNS"),e.push(this.TypeName(t.returnType,s)));if(t.options&&t.options.length>0){let r=s.spawn("CreateFunctionStmt"),n=t.options.map(a=>this.visit(a,r));e.push(...n);}if(t.sql_body){let r=this.getNodeType(t.sql_body);if(r==="ReturnStmt")e.push(this.visit(t.sql_body,s));else {if(e.push("BEGIN ATOMIC"),r==="List"){let n=c.unwrapList(t.sql_body);if(!(n.length===0||n.length===1&&Object.keys(n[0]).length===0)){let a=n;n.length===1&&n[0].List&&(a=c.unwrapList(n[0]));let u=a.filter(o=>o&&Object.keys(o).length>0).map(o=>{let l=this.visit(o,s);return l.endsWith(";")?l:l+";"});u.length>0&&e.push(u.join(" "));}}else {let n=this.visit(t.sql_body,s);n&&!n.endsWith(";")?e.push(n+";"):e.push(n);}e.push("END");}}return e.join(" ")}FunctionParameter(t,s){let e=[];if(t.mode)switch(t.mode){case "FUNC_PARAM_IN":e.push("IN");break;case "FUNC_PARAM_OUT":e.push("OUT");break;case "FUNC_PARAM_INOUT":e.push("INOUT");break;case "FUNC_PARAM_VARIADIC":e.push("VARIADIC");break}return t.name&&e.push(h.quoteIdentifier(t.name)),t.argType&&e.push(this.TypeName(t.argType,s)),t.defexpr&&(e.push("DEFAULT"),e.push(this.visit(t.defexpr,s))),e.join(" ")}CreateEnumStmt(t,s){let e=["CREATE","TYPE"];if(t.typeName){let i=c.unwrapList(t.typeName).map(r=>this.visit(r,s)).join(".");e.push(i);}if(e.push("AS","ENUM"),t.vals&&t.vals.length>0){let i=s.spawn("CreateEnumStmt",{isEnumValue:true}),r=c.unwrapList(t.vals).map(n=>this.visit(n,i)).join(", ");e.push(`(${r})`);}else e.push("()");return e.join(" ")}CreateDomainStmt(t,s){let e=["CREATE","DOMAIN"];if(t.domainname){let i=c.unwrapList(t.domainname).map(r=>this.visit(r,s)).join(".");e.push(i);}if(t.typeName&&(e.push("AS"),e.push(this.TypeName(t.typeName,s))),t.collClause&&e.push(this.CollateClause(t.collClause,s)),t.constraints){let i=c.unwrapList(t.constraints).map(r=>this.visit(r,s)).join(" ");i&&e.push(i);}return e.join(" ")}CreateRoleStmt(t,s){let e=["CREATE"];if(t.stmt_type==="ROLESTMT_ROLE"?e.push("ROLE"):t.stmt_type==="ROLESTMT_USER"?e.push("USER"):t.stmt_type==="ROLESTMT_GROUP"?e.push("GROUP"):e.push("ROLE"),t.role){let i=h.quoteIdentifier(t.role);e.push(i);}if(t.options){let i=c.unwrapList(t.options).map(r=>this.visit(r,s.spawn("CreateRoleStmt"))).join(" ");i&&(e.push("WITH"),e.push(i));}return e.join(" ")}DefElem(t,s){if(!t.defname)return "";if(s.parentNodeTypes.includes("DefineStmt")&&["commutator","negator"].includes(t.defname.toLowerCase())&&t.arg&&this.getNodeType(t.arg)==="List"){let e=this.getNodeData(t.arg),i=c.unwrapList(e.items);if(i.length===1&&i[0].String)return `${this.preserveOperatorDefElemCase(t.defname)} = ${i[0].String.sval}`}if(s.parentNodeTypes.includes("IndexElem")){if(t.arg&&this.getNodeType(t.arg)==="String"){let e=this.getNodeData(t.arg);return `${t.defname}='${e.sval}'`}return `${t.defname}=${this.visit(t.arg,s.spawn("DefElem"))}`}if(s.parentNodeTypes.includes("DefineStmt")&&["hashes","merges"].includes(t.defname.toLowerCase())&&!t.arg)return t.defname!==t.defname.toLowerCase()&&t.defname!==t.defname.toUpperCase()?h.quoteIdentifier(t.defname):t.defname.charAt(0).toUpperCase()+t.defname.slice(1).toLowerCase();if(s.parentNodeTypes.includes("AlterFdwStmt")||s.parentNodeTypes.includes("CreateFdwStmt")||s.parentNodeTypes.includes("CreateForeignServerStmt")||s.parentNodeTypes.includes("AlterForeignServerStmt")||s.parentNodeTypes.includes("CreateUserMappingStmt")||s.parentNodeTypes.includes("AlterUserMappingStmt")||s.parentNodeTypes.includes("ColumnDef")||s.parentNodeTypes.includes("CreateForeignTableStmt")||s.parentNodeTypes.includes("ImportForeignSchemaStmt")||s.alterColumnOptions||s.alterTableOptions){if(["handler","validator"].includes(t.defname)){if(!t.arg)return `NO ${t.defname.toUpperCase()}`;let e=s.spawn("DefElem"),i=this.visit(t.arg,e);return `${t.defname.toUpperCase()} ${i}`}if(t.arg){let e=s.spawn("DefElem"),i=this.visit(t.arg,e);if(s.parentNodeTypes.includes("CreateFdwStmt")||s.parentNodeTypes.includes("AlterFdwStmt")){let a=typeof i=="string"&&!i.startsWith("'")?`'${i}'`:i,u=h.quoteIdentifier(t.defname);return t.defaction==="DEFELEM_ADD"?`ADD ${u} ${a}`:t.defaction==="DEFELEM_DROP"?`DROP ${u}`:t.defaction==="DEFELEM_SET"?`SET ${u} ${a}`:`${u} ${a}`}let r=typeof i=="string"&&!i.startsWith("'")?`'${i}'`:i;return t.defaction==="DEFELEM_ADD"?`ADD ${t.defname} ${r}`:t.defaction==="DEFELEM_DROP"?`DROP ${t.defname}`:t.defaction==="DEFELEM_SET"?`SET ${t.defname} ${r}`:`${h.quoteIdentifier(t.defname)} ${r}`}else if(t.defaction==="DEFELEM_DROP")return `DROP ${t.defname}`}if((s.parentNodeTypes.includes("CreateSeqStmt")||s.parentNodeTypes.includes("AlterSeqStmt"))&&(t.defname==="minvalue"||t.defname==="maxvalue")&&!t.arg)return `NO ${t.defname.toUpperCase()}`;if((s.parentNodeTypes.includes("CreateRoleStmt")||s.parentNodeTypes.includes("AlterRoleStmt"))&&t.defname==="password"){if(!t.arg)return "PASSWORD NULL";let e=s.spawn("DefElem"),i=this.visit(t.arg,e);return `PASSWORD ${typeof i=="string"&&!i.startsWith("'")?`'${i}'`:i}`}if(t.arg){let e=s.spawn("DefElem"),i=this.visit(t.arg,e);if(s.parentNodeTypes.includes("AlterOperatorStmt")){if(t.arg&&this.getNodeType(t.arg)==="TypeName"){let n=this.getNodeData(t.arg);if(n.names){let a=c.unwrapList(n.names);if(a.length===1&&a[0].String)return `${t.defname} = ${a[0].String.sval}`}}if(t.arg&&this.getNodeType(t.arg)==="List"){let n=this.getNodeData(t.arg),a=c.unwrapList(n.items);if(a.length===1&&a[0].String)return `${t.defname} = ${a[0].String.sval}`}}if(s.parentNodeTypes.includes("CreatedbStmt")||s.parentNodeTypes.includes("DropdbStmt")){let n=typeof i=="string"?h.escape(i):i;return `${t.defname} = ${n}`}if(s.parentNodeTypes.includes("CreateForeignServerStmt")||s.parentNodeTypes.includes("AlterForeignServerStmt")){let n=typeof i=="string"?h.escape(i):i;return `${h.quoteIdentifier(t.defname)} ${n}`}if(s.parentNodeTypes.includes("CreateRoleStmt")||s.parentNodeTypes.includes("AlterRoleStmt")){if(t.defname==="rolemembers"&&t.arg&&this.getNodeType(t.arg)==="List"){let n=this.getNodeData(t.arg),u=c.unwrapList(n.items).map(o=>this.visit(o,s));return s.parentNodeTypes.includes("CreateRoleStmt")?`ROLE ${u.join(", ")}`:`ADD USER ${u.join(", ")}`}if(t.defname==="addroleto"&&t.arg&&this.getNodeType(t.arg)==="List"){let n=this.getNodeData(t.arg);return `IN ROLE ${c.unwrapList(n.items).map(o=>this.visit(o,s)).join(", ")}`}if(t.defname==="validUntil")return `VALID UNTIL ${typeof i=="string"&&!i.startsWith("'")?`'${i}'`:i}`;if(t.defname==="adminmembers")return `ADMIN ${i}`;if(t.defname==="connectionlimit")return `CONNECTION LIMIT ${i}`;if(t.defname==="sysid")return `SYSID ${i}`;if(String(i)==="true")return t.defname==="isreplication"?"REPLICATION":t.defname==="canlogin"?"LOGIN":t.defname.toUpperCase();if(String(i)==="false")return t.defname==="canlogin"?"NOLOGIN":t.defname==="isreplication"?"NOREPLICATION":`NO${t.defname.toUpperCase()}`}if(s.parentNodeTypes.includes("CreateSeqStmt")||s.parentNodeTypes.includes("AlterSeqStmt")){if(t.defname==="owned_by")if(t.arg&&this.getNodeType(t.arg)==="List"){let n=this.getNodeData(t.arg);return `OWNED BY ${c.unwrapList(n.items).map(o=>{let l=this.getNodeData(o);if(this.getNodeType(o)==="String"){let f=l.sval;return h.quoteIdentifier(f)}return this.visit(o,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 o=a.join(""),l=this.getFunctionDelimiter(o);return `${l}${o}${l}`}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(o=>o.String?o.String.sval:this.visit(o,s));if(u.length===1){let o=u[0],l=this.getFunctionDelimiter(o);return `AS ${l}${o}${l}`}else return `AS ${u.map(o=>{let l=this.getFunctionDelimiter(o);return `${l}${o}${l}`}).join(", ")}`}else if(Array.isArray(i)){let n=i;if(n.length===1){let a=n[0],u=this.getFunctionDelimiter(a);return `AS ${u}${a}${u}`}else return `AS ${n.map(a=>{let u=this.getFunctionDelimiter(a);return `${u}${a}${u}`}).join(", ")}`}else {let n=this.getFunctionDelimiter(i);return `AS ${n}${i}${n}`}return t.defname==="language"?`LANGUAGE ${i}`:t.defname==="volatility"?i.toUpperCase():t.defname==="strict"?i==="true"?"STRICT":"CALLED ON NULL INPUT":t.defname==="security"?i==="true"?"SECURITY DEFINER":"SECURITY INVOKER":t.defname==="leakproof"?i==="true"?"LEAKPROOF":"NOT LEAKPROOF":t.defname==="cost"?`COST ${i}`:t.defname==="rows"?`ROWS ${i}`:t.defname==="window"?i==="true"?"WINDOW":"":t.defname==="set"?this.visit(t.arg,s):`${t.defname.toUpperCase()} ${i}`}if(s.parentNodeTypes.includes("CreateExtensionStmt")||s.parentNodeTypes.includes("AlterExtensionStmt")||s.parentNodeTypes.includes("CreateFdwStmt")||s.parentNodeTypes.includes("AlterFdwStmt")){if(s.parentNodeTypes.includes("AlterExtensionStmt")){if(t.defname==="new_version")return `UPDATE TO ${typeof i=="string"&&!i.startsWith("'")?`'${i}'`:i}`;if(t.defname==="schema")return `SET SCHEMA ${i}`}if(s.parentNodeTypes.includes("CreateFdwStmt")){if(["handler","validator"].includes(t.defname))return `${t.defname.toUpperCase()} ${i}`;let n=typeof i=="string"?h.escape(i):i;return `${t.defname} ${n}`}return t.defname==="cascade"?i==="true"?"CASCADE":"":`${t.defname.toUpperCase()} ${i}`}if(s.parentNodeTypes.includes("IndexStmt"))return `${t.defname}=${i}`;if(s.parentNodeTypes.includes("IndexElem")){if(t.arg&&this.getNodeType(t.arg)==="String"){let n=this.getNodeData(t.arg);return `${t.defname}='${n.sval}'`}return `${t.defname}=${i}`}if(s.parentNodeTypes.includes("CreateStmt")){if(t.arg&&this.getNodeType(t.arg)==="Integer"){let n=this.getNodeData(t.arg);return `${t.defname}=${n.ival}`}return `${t.defname}=${i}`}if(s.parentNodeTypes.includes("CreateEventTrigStmt")){if(t.arg&&this.getNodeType(t.arg)==="List"){let n=this.getNodeData(t.arg),u=c.unwrapList(n.items).map(o=>this.getNodeType(o)==="String"?`'${this.getNodeData(o).sval||""}'`:this.visit(o,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 o=this.getNodeData(t.arg),l=c.unwrapList(o.items);if(l.length===1&&l[0].String)return `${n} = ${l[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 o=c.unwrapList(u.names);if(o.length===1&&o[0].String)return `${t.defname} = ${o[0].String.sval}`}return `${t.defname} = ${i}`}}let r=typeof i=="string"?h.escape(i):i;return `${t.defname} = ${r}`}return s.parentNodeTypes.includes("DefineStmt")&&!t.arg&&t.defname!==t.defname.toLowerCase()&&t.defname!==t.defname.toUpperCase()?h.quoteIdentifier(t.defname):t.defname.toUpperCase()}CreateTableSpaceStmt(t,s){let e=["CREATE","TABLESPACE"];if(t.tablespacename&&e.push(t.tablespacename),t.owner&&(e.push("OWNER"),e.push(this.RoleSpec(t.owner,s))),t.location&&(e.push("LOCATION"),e.push(`'${t.location}'`)),t.options&&t.options.length>0){e.push("WITH");let i=s.spawn("CreateTableSpaceStmt"),r=c.unwrapList(t.options).map(n=>this.visit(n,i)).join(", ");e.push(`(${r})`);}return e.join(" ")}DropTableSpaceStmt(t,s){let e=["DROP","TABLESPACE"];return t.missing_ok&&e.push("IF","EXISTS"),t.tablespacename&&e.push(t.tablespacename),e.join(" ")}AlterTableSpaceOptionsStmt(t,s){let e=["ALTER","TABLESPACE"];if(t.tablespacename&&e.push(t.tablespacename),t.isReset?e.push("RESET"):e.push("SET"),t.options&&t.options.length>0){let i=s.spawn("AlterTableSpaceOptionsStmt"),r=c.unwrapList(t.options).map(n=>this.visit(n,i)).join(", ");e.push(`(${r})`);}return e.join(" ")}CreateExtensionStmt(t,s){let e=["CREATE","EXTENSION"];if(t.if_not_exists&&e.push("IF","NOT","EXISTS"),t.extname&&e.push(this.quoteIfNeeded(t.extname)),t.options&&t.options.length>0){let i=s.spawn("CreateExtensionStmt"),r=c.unwrapList(t.options).map(n=>this.visit(n,i)).join(" ");e.push(r);}return e.join(" ")}AlterExtensionStmt(t,s){let e=["ALTER","EXTENSION"];if(t.extname&&e.push(this.quoteIfNeeded(t.extname)),t.options&&t.options.length>0){let i=s.spawn("AlterExtensionStmt"),r=c.unwrapList(t.options).map(n=>this.visit(n,i)).join(" ");e.push(r);}return e.join(" ")}AlterExtensionContentsStmt(t,s){let e=["ALTER","EXTENSION"];if(t.extname&&e.push(this.quoteIfNeeded(t.extname)),t.action===1?e.push("ADD"):t.action===-1&&e.push("DROP"),t.objtype)try{e.push(this.getObjectTypeKeyword(t.objtype));}catch{e.push(t.objtype.toString());}return t.object&&e.push(this.visit(t.object,s)),e.join(" ")}CreateFdwStmt(t,s){let e=["CREATE","FOREIGN","DATA","WRAPPER"];if(t.fdwname&&e.push(t.fdwname),t.func_options&&t.func_options.length>0){let i=s.spawn("CreateFdwStmt"),r=c.unwrapList(t.func_options).map(n=>this.visit(n,i)).join(" ");e.push(r);}if(t.options&&t.options.length>0){e.push("OPTIONS");let i=s.spawn("CreateFdwStmt"),r=c.unwrapList(t.options).map(n=>this.visit(n,i)).join(", ");e.push(`(${r})`);}return e.join(" ")}SetOperationStmt(t,s){let e=[];if(t.larg&&e.push(this.visit(t.larg,s)),t.op)switch(t.op){case "SETOP_UNION":e.push(t.all?"UNION ALL":"UNION");break;case "SETOP_INTERSECT":e.push(t.all?"INTERSECT ALL":"INTERSECT");break;case "SETOP_EXCEPT":e.push(t.all?"EXCEPT ALL":"EXCEPT");break;default:throw new Error(`Unsupported SetOperation: ${t.op}`)}return t.rarg&&e.push(this.visit(t.rarg,s)),e.join(" ")}ReplicaIdentityStmt(t,s){let e=[];if(t.identity_type)switch(t.identity_type){case "d":case "REPLICA_IDENTITY_DEFAULT":e.push("DEFAULT");break;case "f":case "REPLICA_IDENTITY_FULL":e.push("FULL");break;case "n":case "REPLICA_IDENTITY_NOTHING":e.push("NOTHING");break;case "i":case "REPLICA_IDENTITY_INDEX":e.push("USING","INDEX"),t.name&&e.push(h.quoteIdentifier(t.name));break;default:throw new Error(`Unsupported replica identity type: ${t.identity_type}`)}return e.join(" ")}AlterCollationStmt(t,s){let e=["ALTER","COLLATION"];if(t.collname&&t.collname.length>0){let i=c.unwrapList(t.collname).map(r=>this.visit(r,s)).join(".");e.push(i);}return e.push("REFRESH","VERSION"),e.join(" ")}AlterDomainStmt(t,s){let e=["ALTER","DOMAIN"];if(t.typeName&&t.typeName.length>0){let i=c.unwrapList(t.typeName).map(r=>this.visit(r,s)).join(".");e.push(i);}if(t.subtype)switch(t.subtype){case "AT_SetNotNull":e.push("SET","NOT","NULL");break;case "AT_DropNotNull":e.push("DROP","NOT","NULL");break;case "AT_SetDefault":e.push("SET","DEFAULT"),t.def&&e.push(this.visit(t.def,s));break;case "AT_DropDefault":e.push("DROP","DEFAULT");break;case "AT_AddConstraint":if(e.push("ADD"),t.def){let i=s.spawn("CreateDomainStmt",{isDomainConstraint:true});e.push(this.visit(t.def,i));}break;case "AT_DropConstraint":e.push("DROP","CONSTRAINT"),t.missing_ok&&e.push("IF","EXISTS"),t.name&&e.push(h.quoteIdentifier(t.name)),t.behavior==="DROP_CASCADE"&&e.push("CASCADE");break;case "AT_ValidateConstraint":e.push("VALIDATE","CONSTRAINT"),t.name&&e.push(h.quoteIdentifier(t.name));break;case "C":if(e.push("ADD"),t.def){let i=s.spawn("CreateDomainStmt",{isDomainConstraint:true});e.push(this.visit(t.def,i));}break;case "X":e.push("DROP","CONSTRAINT"),t.missing_ok&&e.push("IF","EXISTS"),t.name&&e.push(h.quoteIdentifier(t.name)),t.behavior==="DROP_CASCADE"&&e.push("CASCADE");break;case "V":e.push("VALIDATE","CONSTRAINT"),t.name&&e.push(h.quoteIdentifier(t.name));break;case "O":e.push("SET","NOT","NULL");break;case "N":e.push("DROP","NOT","NULL");break;case "T":t.def?(e.push("SET","DEFAULT"),e.push(this.visit(t.def,s))):e.push("DROP","DEFAULT");break;default:throw new Error(`Unsupported AlterDomainStmt subtype: ${t.subtype}`)}return e.join(" ")}PrepareStmt(t,s){let e=["PREPARE"];if(t.name&&e.push(t.name),t.argtypes&&t.argtypes.length>0){let i=c.unwrapList(t.argtypes).map(r=>this.visit(r,s)).join(", ");e.push(`(${i})`);}return e.push("AS"),t.query&&e.push(this.visit(t.query,s)),e.join(" ")}ExecuteStmt(t,s){let e=["EXECUTE"];if(t.name&&e.push(t.name),t.params&&t.params.length>0){let i=c.unwrapList(t.params).map(r=>this.visit(r,s)).join(", ");e.push(`(${i})`);}return e.join(" ")}DeallocateStmt(t,s){let e=["DEALLOCATE"];return t.isall?e.push("ALL"):t.name&&e.push(t.name),e.join(" ")}NotifyStmt(t,s){let e=["NOTIFY"];return t.conditionname&&e.push(t.conditionname),t.payload!==null&&t.payload!==void 0&&(e.push(","),e.push(`'${t.payload}'`)),e.join(" ")}ListenStmt(t,s){let e=["LISTEN"];return t.conditionname&&e.push(t.conditionname),e.join(" ")}UnlistenStmt(t,s){let e=["UNLISTEN"];return t.conditionname?e.push(t.conditionname):e.push("*"),e.join(" ")}CheckPointStmt(t,s){return "CHECKPOINT"}LoadStmt(t,s){if(!t.filename)throw new Error("LoadStmt requires filename");return `LOAD '${t.filename}'`}DiscardStmt(t,s){switch(t.target){case "DISCARD_ALL":return "DISCARD ALL";case "DISCARD_PLANS":return "DISCARD PLANS";case "DISCARD_SEQUENCES":return "DISCARD SEQUENCES";case "DISCARD_TEMP":return "DISCARD TEMP";default:throw new Error(`Unsupported DiscardStmt target: ${t.target}`)}}CommentStmt(t,s){let e=["COMMENT ON"];if(t.objtype)switch(t.objtype){case "OBJECT_TABLE":e.push("TABLE");break;case "OBJECT_COLUMN":e.push("COLUMN");break;case "OBJECT_INDEX":e.push("INDEX");break;case "OBJECT_FUNCTION":e.push("FUNCTION");break;case "OBJECT_VIEW":e.push("VIEW");break;case "OBJECT_SCHEMA":e.push("SCHEMA");break;case "OBJECT_DATABASE":e.push("DATABASE");break;case "OBJECT_MATVIEW":e.push("MATERIALIZED VIEW");break;case "OBJECT_TABCONSTRAINT":e.push("CONSTRAINT");break;case "OBJECT_TRIGGER":e.push("TRIGGER");break;case "OBJECT_FDW":e.push("FOREIGN DATA WRAPPER");break;case "OBJECT_EVENT_TRIGGER":e.push("EVENT TRIGGER");break;case "OBJECT_FOREIGN_SERVER":e.push("SERVER");break;case "OBJECT_FOREIGN_TABLE":e.push("FOREIGN TABLE");break;case "OBJECT_STATISTIC_EXT":e.push("STATISTICS");break;case "OBJECT_LARGEOBJECT":e.push("LARGE OBJECT");break;case "OBJECT_OPERATOR":e.push("OPERATOR");break;case "OBJECT_OPCLASS":e.push("OPERATOR CLASS");break;case "OBJECT_OPFAMILY":e.push("OPERATOR FAMILY");break;case "OBJECT_POLICY":e.push("POLICY");break;case "OBJECT_TSPARSER":e.push("TEXT SEARCH PARSER");break;case "OBJECT_TSDICTIONARY":e.push("TEXT SEARCH DICTIONARY");break;case "OBJECT_TSTEMPLATE":e.push("TEXT SEARCH TEMPLATE");break;case "OBJECT_TSCONFIGURATION":e.push("TEXT SEARCH CONFIGURATION");break;case "OBJECT_TRANSFORM":e.push("TRANSFORM");break;default:e.push(t.objtype.replace("OBJECT_",""));}if(t.object)if(t.object&&typeof t.object=="object"&&"List"in t.object){let i=t.object.List;if(i.items&&i.items.length>0){let r=c.unwrapList(i.items).map(n=>this.visit(n,s));if(t.objtype==="OBJECT_TABCONSTRAINT")if(r.length===3){let[n,a,u]=r;e.push(u),e.push("ON"),e.push(`${n}.${a}`);}else if(r.length===2){let[n,a]=r;e.push(a),e.push("ON"),e.push(n);}else e.push(r.join("."));else if(t.objtype==="OBJECT_TRIGGER")if(r.length===2){let[n,a]=r;e.push(a),e.push("ON"),e.push(n);}else e.push(r.join("."));else if(t.objtype==="OBJECT_RULE")if(r.length===2){let[n,a]=r;e.push(a),e.push("ON"),e.push(n);}else e.push(r.join("."));else if(t.objtype==="OBJECT_OPERATOR")if(t.object&&t.object.ObjectWithArgs){let n=t.object.ObjectWithArgs,a=n.objname&&n.objname[0]&&n.objname[0].String?n.objname[0].String.sval:"unknown";a.startsWith('"')&&a.endsWith('"')&&(a=a.slice(1,-1));let u=[];n.objargs&&n.objargs.forEach(o=>{if(!o||Object.keys(o).length===0)u.push("NONE");else if(o.TypeName){let l=this.visit(o,s);u.push(l);}else u.push("unknown");}),e.push(`${a} (${u.join(", ")})`);}else e.push(r.join("."));else if(t.objtype==="OBJECT_OPCLASS"||t.objtype==="OBJECT_OPFAMILY")if(r.length>=2){let n=r[r.length-1],a=r[r.length-2];e.push(`${n} USING ${a}`);}else e.push(r.join(" USING "));else if(t.objtype==="OBJECT_POLICY")if(r.length===2){let[n,a]=r;e.push(a),e.push("ON"),e.push(n);}else e.push(r.join("."));else if(t.objtype==="OBJECT_TRANSFORM")if(r.length===2){let[n,a]=r;e.push("FOR"),e.push(n),e.push("LANGUAGE"),e.push(a);}else e.push(r.join("."));else e.push(r.join("."));}}else if(t.objtype==="OBJECT_OPERATOR"&&t.object&&t.object.ObjectWithArgs){let i=t.object.ObjectWithArgs,r=i.objname&&i.objname[0]&&i.objname[0].String?i.objname[0].String.sval:"unknown";r.startsWith('"')&&r.endsWith('"')&&(r=r.slice(1,-1));let n=[];i.objargs&&i.objargs.forEach(a=>{if(!a||Object.keys(a).length===0)n.push("NONE");else if(a.TypeName){let u=this.visit(a,s);n.push(u);}else n.push("unknown");}),e.push(`${r}(${n.join(", ")})`);}else {let i=s.spawn("CommentStmt",{objtype:t.objtype});e.push(this.visit(t.object,i));}return e.push("IS"),t.comment===null||t.comment===void 0?e.push("NULL"):t.comment&&e.push(h.formatEString(t.comment)),e.join(" ")}LockStmt(t,s){let e=["LOCK","TABLE"];if(t.relations&&t.relations.length>0){let i=c.unwrapList(t.relations).map(r=>this.visit(r,s)).join(", ");e.push(i);}if(t.mode!==void 0){let i=["","ACCESS SHARE","ROW SHARE","ROW EXCLUSIVE","SHARE UPDATE EXCLUSIVE","SHARE","SHARE ROW EXCLUSIVE","EXCLUSIVE","ACCESS EXCLUSIVE"];t.mode>=1&&t.mode<i.length&&e.push("IN",i[t.mode],"MODE");}return t.nowait&&e.push("NOWAIT"),e.join(" ")}CreatePolicyStmt(t,s){let e=[],i=["CREATE","POLICY"];if(t.policy_name&&i.push(h.quoteIdentifier(t.policy_name)),e.push(i.join(" ")),t.table&&(s.isPretty()?e.push(s.newline()+s.indent(`ON ${this.RangeVar(t.table,s)}`)):(e.push("ON"),e.push(this.RangeVar(t.table,s)))),t.permissive===void 0?s.isPretty()?e.push(s.newline()+s.indent("AS RESTRICTIVE")):e.push("AS","RESTRICTIVE"):t.permissive===true&&(s.isPretty()?e.push(s.newline()+s.indent("AS PERMISSIVE")):e.push("AS","PERMISSIVE")),t.cmd_name&&(s.isPretty()?e.push(s.newline()+s.indent(`FOR ${t.cmd_name.toUpperCase()}`)):e.push("FOR",t.cmd_name.toUpperCase())),t.roles&&t.roles.length>0){let r=c.unwrapList(t.roles).map(n=>this.visit(n,s));s.isPretty()?e.push(s.newline()+s.indent(`TO ${r.join(", ")}`)):(e.push("TO"),e.push(r.join(", ")));}if(t.qual)if(s.isPretty()){let r=this.visit(t.qual,s);e.push(s.newline()+s.indent("USING (")),e.push(s.newline()+s.indent(s.indent(r))),e.push(s.newline()+s.indent(")"));}else e.push("USING"),e.push(`(${this.visit(t.qual,s)})`);if(t.with_check)if(s.isPretty()){let r=this.visit(t.with_check,s);e.push(s.newline()+s.indent("WITH CHECK (")),e.push(s.newline()+s.indent(s.indent(r))),e.push(s.newline()+s.indent(")"));}else e.push("WITH CHECK"),e.push(`(${this.visit(t.with_check,s)})`);return s.isPretty()?e.join(""):e.join(" ")}AlterPolicyStmt(t,s){let e=["ALTER","POLICY"];if(t.policy_name&&e.push(h.quoteIdentifier(t.policy_name)),t.table&&(e.push("ON"),e.push(this.RangeVar(t.table,s))),t.roles&&t.roles.length>0){e.push("TO");let i=c.unwrapList(t.roles).map(r=>this.visit(r,s));e.push(i.join(", "));}return t.qual&&(e.push("USING"),e.push(`(${this.visit(t.qual,s)})`)),t.with_check&&(e.push("WITH CHECK"),e.push(`(${this.visit(t.with_check,s)})`)),e.join(" ")}CreateUserMappingStmt(t,s){let e=["CREATE"];if(t.if_not_exists&&e.push("IF","NOT","EXISTS"),e.push("USER","MAPPING"),e.push("FOR"),t.user?e.push(this.RoleSpec(t.user,s)):e.push("CURRENT_USER"),e.push("SERVER"),t.servername&&e.push(h.quoteIdentifier(t.servername)),t.options&&t.options.length>0){e.push("OPTIONS");let i=s.spawn("CreateUserMappingStmt"),r=c.unwrapList(t.options).map(n=>this.visit(n,i));e.push(`(${r.join(", ")})`);}return e.join(" ")}CreateStatsStmt(t,s){let e=["CREATE"];if(t.if_not_exists&&e.push("IF","NOT","EXISTS"),e.push("STATISTICS"),t.defnames&&t.defnames.length>0){let i=c.unwrapList(t.defnames).map(r=>this.visit(r,s));e.push(i.join("."));}if(t.stat_types&&t.stat_types.length>0){let i=c.unwrapList(t.stat_types).map(r=>this.visit(r,s));e.push(`(${i.join(", ")})`);}if(e.push("ON"),t.exprs&&t.exprs.length>0){let i=c.unwrapList(t.exprs).map(r=>this.visit(r,s));e.push(i.join(", "));}if(t.relations&&t.relations.length>0){e.push("FROM");let i=c.unwrapList(t.relations).map(r=>this.visit(r,s));e.push(i.join(", "));}return e.join(" ")}StatsElem(t,s){return t.name?this.quoteIfNeeded(t.name):t.expr?`(${this.visit(t.expr,s)})`:""}CreatePublicationStmt(t,s){let e=["CREATE","PUBLICATION"];if(t.pubname&&e.push(h.quoteIdentifier(t.pubname)),t.pubobjects&&t.pubobjects.length>0){e.push("FOR","TABLE");let i=c.unwrapList(t.pubobjects).map(r=>this.visit(r,s));e.push(i.join(", "));}else t.for_all_tables&&e.push("FOR","ALL","TABLES");if(t.options&&t.options.length>0){e.push("WITH");let i=c.unwrapList(t.options).map(r=>this.visit(r,s));e.push(`(${i.join(", ")})`);}return e.join(" ")}CreateSubscriptionStmt(t,s){let e=["CREATE","SUBSCRIPTION"];if(t.subname&&e.push(h.quoteIdentifier(t.subname)),e.push("CONNECTION"),t.conninfo&&e.push(`'${t.conninfo}'`),e.push("PUBLICATION"),t.publication&&t.publication.length>0){let i=c.unwrapList(t.publication).map(r=>this.visit(r,s));e.push(i.join(", "));}if(t.options&&t.options.length>0){e.push("WITH");let i=c.unwrapList(t.options).map(r=>this.visit(r,s));e.push(`(${i.join(", ")})`);}return e.join(" ")}AlterPublicationStmt(t,s){let e=["ALTER","PUBLICATION"];if(t.pubname&&e.push(h.quoteIdentifier(t.pubname)),t.action)switch(t.action){case "AP_AddObjects":e.push("ADD");break;case "AP_DropObjects":e.push("DROP");break;case "AP_SetObjects":e.push("SET");break;default:throw new Error(`Unsupported AlterPublicationStmt action: ${t.action}`)}if(t.for_all_tables)e.push("FOR ALL TABLES");else if(t.pubobjects&&t.pubobjects.length>0){e.push("FOR TABLE");let i=c.unwrapList(t.pubobjects).map(r=>this.visit(r,s));e.push(i.join(", "));}if(t.options&&t.options.length>0){e.push("WITH");let i=c.unwrapList(t.options).map(r=>this.visit(r,s));e.push(`(${i.join(", ")})`);}return e.join(" ")}AlterSubscriptionStmt(t,s){let e=["ALTER","SUBSCRIPTION"];if(t.subname&&e.push(h.quoteIdentifier(t.subname)),t.kind)switch(t.kind){case "ALTER_SUBSCRIPTION_OPTIONS":e.push("SET");break;case "ALTER_SUBSCRIPTION_CONNECTION":e.push("CONNECTION"),t.conninfo&&e.push(`'${t.conninfo}'`);break;case "ALTER_SUBSCRIPTION_SET_PUBLICATION":if(e.push("SET PUBLICATION"),t.publication&&t.publication.length>0){let i=c.unwrapList(t.publication).map(r=>this.visit(r,s));e.push(i.join(", "));}break;case "ALTER_SUBSCRIPTION_REFRESH":e.push("REFRESH PUBLICATION");break;case "ALTER_SUBSCRIPTION_ENABLED":e.push("ENABLE");break;case "ALTER_SUBSCRIPTION_SKIP":e.push("SKIP");break;default:throw new Error(`Unsupported AlterSubscriptionStmt kind: ${t.kind}`)}if(t.options&&t.options.length>0){e.push("WITH");let i=c.unwrapList(t.options).map(r=>this.visit(r,s));e.push(`(${i.join(", ")})`);}return e.join(" ")}DropSubscriptionStmt(t,s){let e=["DROP","SUBSCRIPTION"];if(t.missing_ok&&e.push("IF EXISTS"),t.subname&&e.push(h.quoteIdentifier(t.subname)),t.behavior)switch(t.behavior){case "DROP_CASCADE":e.push("CASCADE");break;case "DROP_RESTRICT":e.push("RESTRICT");break}return e.join(" ")}DoStmt(t,s){let e=["DO"];if(t.args&&t.args.length>0){let i=s.spawn("DoStmt"),r=c.unwrapList(t.args),n=[];for(let a of r)if(this.getNodeType(a)==="DefElem"){let o=this.getNodeData(a);if(o.defname==="language"){let l=this.visit(o.arg,i);n.push(`LANGUAGE ${l}`);}else if(o.defname==="as")if(this.getNodeType(o.arg)==="String"){let f=this.getNodeData(o.arg),m=this.getFunctionDelimiter(f.sval);n.push(`${m}${f.sval}${m}`);}else n.push(this.visit(o.arg,i));}e.push(...n);}return e.join(" ")}generateUniqueDollarTag(t){let s=/\$[a-zA-Z0-9_]*\$/g,e=t.match(s)||[];if(e.length===0)return "$$";let i=new Set(e);if(i.has("$$")){let r=1,n=`$do${r}$`;for(;i.has(n);)r++,n=`$do${r}$`;return n}return "$$"}InlineCodeBlock(t,s){if(t.source_text){let i=this.getFunctionDelimiter(t.source_text);return `${i}${t.source_text}${i}`}let e=this.options.functionDelimiter||"$$";return `${e}${e}`}CallContext(t,s){return t.atomic!==void 0?t.atomic?"ATOMIC":"NOT ATOMIC":""}ConstraintsSetStmt(t,s){let e=["SET","CONSTRAINTS"];if(t.constraints&&t.constraints.length>0){let i=c.unwrapList(t.constraints).map(r=>this.visit(r,s));e.push(i.join(", "));}else e.push("ALL");return e.push(t.deferred?"DEFERRED":"IMMEDIATE"),e.join(" ")}AlterSystemStmt(t,s){let e=["ALTER","SYSTEM"];if(t.setstmt){let r=this.VariableSetStmt(t.setstmt,s).replace(/^SET\s+/,"");e.push("SET",r);}return e.join(" ")}VacuumRelation(t,s){let e=[];if(t.relation&&e.push(this.RangeVar(t.relation,s)),t.va_cols&&t.va_cols.length>0){e.push("(");let i=c.unwrapList(t.va_cols).map(r=>this.visit(r,s));e.push(i.join(", ")),e.push(")");}return e.join(" ")}DropOwnedStmt(t,s){let e=["DROP","OWNED","BY"];if(t.roles&&t.roles.length>0){let i=c.unwrapList(t.roles).map(r=>this.visit(r,s));e.push(i.join(", "));}if(t.behavior)switch(t.behavior){case "DROP_CASCADE":e.push("CASCADE");break;case "DROP_RESTRICT":e.push("RESTRICT");break}return e.join(" ")}ReassignOwnedStmt(t,s){let e=["REASSIGN","OWNED","BY"];if(t.roles&&t.roles.length>0){let i=c.unwrapList(t.roles).map(r=>this.visit(r,s));e.push(i.join(", "));}return e.push("TO"),t.newrole&&e.push(this.RoleSpec(t.newrole,s)),e.join(" ")}AlterTSDictionaryStmt(t,s){let e=["ALTER","TEXT","SEARCH","DICTIONARY"];if(t.dictname&&t.dictname.length>0){let i=c.unwrapList(t.dictname).map(r=>this.visit(r,s));e.push(i.join("."));}if(t.options&&t.options.length>0){e.push("(");let i=c.unwrapList(t.options).map(r=>this.visit(r,s));e.push(i.join(", ")),e.push(")");}return e.join(" ")}AlterTSConfigurationStmt(t,s){let e=["ALTER","TEXT","SEARCH","CONFIGURATION"];if(t.cfgname&&t.cfgname.length>0){let i=c.unwrapList(t.cfgname).map(r=>this.visit(r,s));e.push(i.join("."));}if(t.kind)switch(t.kind){case "ALTER_TSCONFIG_ADD_MAPPING":if(e.push("ADD","MAPPING","FOR"),t.tokentype&&t.tokentype.length>0){let i=c.unwrapList(t.tokentype).map(r=>this.visit(r,s));e.push(i.join(", "));}if(t.dicts&&t.dicts.length>0){e.push("WITH");let i=c.unwrapList(t.dicts).map(r=>r.List&&r.List.items?c.unwrapList(r.List.items).map(n=>this.visit(n,s)).join("."):this.visit(r,s));e.push(i.join(", "));}break;case "ALTER_TSCONFIG_ALTER_MAPPING_FOR_TOKEN":if(e.push("ALTER","MAPPING","FOR"),t.tokentype&&t.tokentype.length>0){let i=c.unwrapList(t.tokentype).map(r=>this.visit(r,s));e.push(i.join(", "));}if(t.dicts&&t.dicts.length>0){e.push("WITH");let i=c.unwrapList(t.dicts).map(r=>r.List&&r.List.items?c.unwrapList(r.List.items).map(n=>this.visit(n,s)).join("."):this.visit(r,s));e.push(i.join(", "));}break;case "ALTER_TSCONFIG_REPLACE_DICT":if(e.push("ALTER","MAPPING","REPLACE"),t.dicts&&t.dicts.length>=2){let i=c.unwrapList(t.dicts).map(r=>r.List&&r.List.items?c.unwrapList(r.List.items).map(n=>this.visit(n,s)).join("."):this.visit(r,s));e.push(i[0],"WITH",i.slice(1).join(", "));}break;case "ALTER_TSCONFIG_REPLACE_DICT_FOR_TOKEN":if(e.push("ALTER","MAPPING","FOR"),t.tokentype&&t.tokentype.length>0){let i=c.unwrapList(t.tokentype).map(r=>this.visit(r,s));e.push(i.join(", "));}if(t.dicts&&t.dicts.length>=2){e.push("REPLACE");let i=c.unwrapList(t.dicts).map(r=>r.List&&r.List.items?c.unwrapList(r.List.items).map(n=>this.visit(n,s)).join("."):this.visit(r,s));e.push(i[0],"WITH",i.slice(1).join(", "));}break;case "ALTER_TSCONFIG_DROP_MAPPING":if(e.push("DROP","MAPPING","FOR"),t.tokentype&&t.tokentype.length>0){let i=c.unwrapList(t.tokentype).map(r=>this.visit(r,s));e.push(i.join(", "));}break;default:throw new Error(`Unsupported AlterTSConfigurationStmt kind: ${t.kind}`)}return e.join(" ")}ClosePortalStmt(t,s){let e=["CLOSE"];return t.portalname?e.push(h.quoteIdentifier(t.portalname)):e.push("ALL"),e.join(" ")}FetchStmt(t,s){let e=[t.ismove?"MOVE":"FETCH"],i=t.howMany===9223372036854776e3;if(t.direction)switch(t.direction){case "FETCH_FORWARD":i?e.push("FORWARD","ALL"):t.howMany!==void 0&&t.howMany!==null?e.push("FORWARD",t.howMany.toString()):e.push("FORWARD");break;case "FETCH_BACKWARD":i?e.push("BACKWARD","ALL"):t.howMany!==void 0&&t.howMany!==null?e.push("BACKWARD",t.howMany.toString()):e.push("BACKWARD");break;case "FETCH_ABSOLUTE":t.howMany!==void 0&&t.howMany!==null&&e.push("ABSOLUTE",t.howMany.toString());break;case "FETCH_RELATIVE":t.howMany!==void 0&&t.howMany!==null?e.push("RELATIVE",t.howMany.toString()):e.push("RELATIVE","0");break;default:throw new Error(`Unsupported FetchStmt direction: ${t.direction}`)}else i&&e.push("ALL");return t.portalname&&e.push(h.quoteIdentifier(t.portalname)),e.join(" ")}AlterStatsStmt(t,s){let e=["ALTER","STATISTICS"];if(t.defnames&&t.defnames.length>0){let i=c.unwrapList(t.defnames).map(r=>this.visit(r,s));e.push(i.join("."));}return e.push("SET","STATISTICS"),t.stxstattarget&&e.push(this.visit(t.stxstattarget,s)),e.join(" ")}ObjectWithArgs(t,s){let e="";if(t.objname&&t.objname.length>0){let i=s.spawn("ObjectWithArgs");e=c.unwrapList(t.objname).map(n=>this.visit(n,i)).join(".");}if(t.objfuncargs&&t.objfuncargs.length>0){let i=c.unwrapList(t.objfuncargs).map(r=>this.visit(r,s));e+=`(${i.join(", ")})`;}else if(t.objargs&&t.objargs.length>0){let i=c.unwrapList(t.objargs).map(r=>!r||Object.keys(r).length===0?"NONE":this.visit(r,s));e+=`(${i.join(", ")})`;}else t.args_unspecified||((s.parentNodeTypes.includes("CommentStmt")||s.parentNodeTypes.includes("DropStmt"))&&s.objtype==="OBJECT_AGGREGATE"?e+="(*)":s.parentNodeTypes.includes("CreateOpClassItem")||(e+="()"));return e}AlterOperatorStmt(t,s){let e=["ALTER","OPERATOR"];if(t.opername&&e.push(this.ObjectWithArgs(t.opername,s)),e.push("SET"),t.options&&t.options.length>0){let i=s.spawn("AlterOperatorStmt"),r=c.unwrapList(t.options).map(n=>this.visit(n,i));e.push(`(${r.join(", ")})`);}return e.join(" ")}AlterFdwStmt(t,s){let e=["ALTER","FOREIGN","DATA","WRAPPER"];if(t.fdwname&&e.push(h.quoteIdentifier(t.fdwname)),t.func_options&&t.func_options.length>0){let i=s.spawn("AlterFdwStmt"),r=c.unwrapList(t.func_options).map(n=>this.visit(n,i));e.push(r.join(" "));}if(t.options&&t.options.length>0){e.push("OPTIONS");let i=s.spawn("AlterFdwStmt"),r=c.unwrapList(t.options).map(n=>this.visit(n,i));e.push(`(${r.join(", ")})`);}return e.join(" ")}CreateForeignServerStmt(t,s){let e=["CREATE","SERVER"];if(t.if_not_exists&&e.push("IF","NOT","EXISTS"),t.servername&&e.push(h.quoteIdentifier(t.servername)),t.servertype&&e.push("TYPE",h.escape(t.servertype)),t.version&&e.push("VERSION",h.escape(t.version)),t.fdwname&&e.push("FOREIGN","DATA","WRAPPER",h.quoteIdentifier(t.fdwname)),t.options&&t.options.length>0){e.push("OPTIONS"),e.push("(");let i=s.spawn("CreateForeignServerStmt"),r=c.unwrapList(t.options).map(n=>this.visit(n,i));e.push(r.join(", ")),e.push(")");}return e.join(" ")}AlterForeignServerStmt(t,s){let e=["ALTER","SERVER"];if(t.servername&&e.push(h.quoteIdentifier(t.servername)),t.version&&e.push("VERSION",h.escape(t.version)),t.options&&t.options.length>0){e.push("OPTIONS"),e.push("(");let i=s.spawn("AlterForeignServerStmt"),r=c.unwrapList(t.options).map(n=>this.visit(n,i));e.push(r.join(", ")),e.push(")");}return e.join(" ")}AlterUserMappingStmt(t,s){let e=["ALTER","USER","MAPPING","FOR"];if(t.user?e.push(this.RoleSpec(t.user,s)):e.push("CURRENT_USER"),e.push("SERVER"),t.servername&&e.push(h.quoteIdentifier(t.servername)),t.options&&t.options.length>0){e.push("OPTIONS");let i=s.spawn("AlterUserMappingStmt"),r=c.unwrapList(t.options).map(n=>this.visit(n,i));e.push(`(${r.join(", ")})`);}return e.join(" ")}DropUserMappingStmt(t,s){let e=["DROP","USER","MAPPING"];return t.missing_ok&&e.push("IF","EXISTS"),e.push("FOR"),t.user?e.push(this.RoleSpec(t.user,s)):e.push("CURRENT_USER"),e.push("SERVER"),t.servername&&e.push(h.quoteIdentifier(t.servername)),e.join(" ")}ImportForeignSchemaStmt(t,s){let e=["IMPORT","FOREIGN","SCHEMA"];if(t.remote_schema&&e.push(h.quoteIdentifier(t.remote_schema)),t.list_type)switch(t.list_type){case "FDW_IMPORT_SCHEMA_ALL":break;case "FDW_IMPORT_SCHEMA_LIMIT_TO":if(e.push("LIMIT","TO"),t.table_list&&t.table_list.length>0){let i=c.unwrapList(t.table_list).map(r=>this.visit(r,s));e.push(`(${i.join(", ")})`);}break;case "FDW_IMPORT_SCHEMA_EXCEPT":if(e.push("EXCEPT"),t.table_list&&t.table_list.length>0){let i=c.unwrapList(t.table_list).map(r=>this.visit(r,s));e.push(`(${i.join(", ")})`);}break;default:throw new Error(`Unsupported ImportForeignSchemaStmt list_type: ${t.list_type}`)}if(e.push("FROM","SERVER"),t.server_name&&e.push(h.quoteIdentifier(t.server_name)),e.push("INTO"),t.local_schema&&e.push(h.quoteIdentifier(t.local_schema)),t.options&&t.options.length>0){let i=s.spawn("ImportForeignSchemaStmt"),r=c.unwrapList(t.options).map(n=>this.visit(n,i));e.push(`OPTIONS (${r.join(", ")})`);}return e.join(" ")}ClusterStmt(t,s){let e=["CLUSTER"];if(t.relation&&(e.push(this.RangeVar(t.relation,s)),t.indexname&&e.push("USING",h.quoteIdentifier(t.indexname))),t.params&&t.params.length>0){let i=c.unwrapList(t.params).map(r=>this.visit(r,s));e.push(`(${i.join(", ")})`);}return e.join(" ")}VacuumStmt(t,s){let e=[t.is_vacuumcmd?"VACUUM":"ANALYZE"];if(t.options&&t.options.length>0){let i=c.unwrapList(t.options).map(r=>this.visit(r,s));e.push(`(${i.join(", ")})`);}if(t.rels&&t.rels.length>0){let i=c.unwrapList(t.rels).map(r=>this.visit(r,s));e.push(i.join(", "));}return e.join(" ")}ExplainStmt(t,s){let e=["EXPLAIN"];if(t.options&&t.options.length>0){let i=s.spawn("ExplainStmt"),r=c.unwrapList(t.options).map(n=>this.visit(n,i));e.push(`(${r.join(", ")})`);}return t.query&&e.push(this.visit(t.query,s)),e.join(" ")}ReindexStmt(t,s){let e=["REINDEX"];if(t.params&&t.params.length>0){let i=c.unwrapList(t.params).map(r=>this.visit(r,s));e.push(`(${i.join(", ")})`);}if(t.kind)switch(t.kind){case "REINDEX_OBJECT_INDEX":e.push("INDEX");break;case "REINDEX_OBJECT_TABLE":e.push("TABLE");break;case "REINDEX_OBJECT_SCHEMA":e.push("SCHEMA");break;case "REINDEX_OBJECT_SYSTEM":e.push("SYSTEM");break;case "REINDEX_OBJECT_DATABASE":e.push("DATABASE");break;default:throw new Error(`Unsupported ReindexStmt kind: ${t.kind}`)}return t.relation&&e.push(this.RangeVar(t.relation,s)),t.name&&e.push(h.quoteIdentifier(t.name)),e.join(" ")}CallStmt(t,s){let e=["CALL"];if(t.funccall){let i=t.funccall;if(i.funcname&&i.funcname.length>0){let n=i.funcname.map(u=>u.String?u.String.sval:this.visit(u,s)).join("."),a="";i.args&&i.args.length>0?a=`(${i.args.map(o=>this.visit(o,s)).join(", ")})`:a="()",e.push(`${n}${a}`);}}else if(t.funcexpr)e.push(this.FuncExpr(t.funcexpr,s));else throw new Error("CallStmt requires either funccall or funcexpr");return e.join(" ")}CreatedbStmt(t,s){let e=["CREATE DATABASE"];if(!t.dbname)throw new Error("CreatedbStmt requires dbname");if(e.push(h.quoteIdentifier(t.dbname)),t.options&&t.options.length>0){let i=c.unwrapList(t.options).map(r=>this.visit(r,s)).join(" ");e.push("WITH",i);}return e.join(" ")}DropdbStmt(t,s){let e=["DROP DATABASE"];if(t.missing_ok&&e.push("IF EXISTS"),!t.dbname)throw new Error("DropdbStmt requires dbname");if(e.push(h.quoteIdentifier(t.dbname)),t.options&&t.options.length>0){let i=c.unwrapList(t.options).map(r=>this.visit(r,s)).join(" ");e.push("WITH",i);}return e.join(" ")}RenameStmt(t,s){let e=["ALTER"];if(!t.renameType)throw new Error("RenameStmt requires renameType");switch(t.renameType){case "OBJECT_TABLE":e.push("TABLE");break;case "OBJECT_VIEW":e.push("VIEW");break;case "OBJECT_INDEX":e.push("INDEX");break;case "OBJECT_SEQUENCE":e.push("SEQUENCE");break;case "OBJECT_FUNCTION":e.push("FUNCTION");break;case "OBJECT_PROCEDURE":e.push("PROCEDURE");break;case "OBJECT_SCHEMA":e.push("SCHEMA");break;case "OBJECT_DATABASE":e.push("DATABASE");break;case "OBJECT_COLUMN":t.relationType==="OBJECT_FOREIGN_TABLE"?e.push("FOREIGN TABLE"):t.relationType==="OBJECT_VIEW"?e.push("VIEW"):e.push("TABLE");break;case "OBJECT_DOMAIN":e.push("DOMAIN");break;case "OBJECT_TYPE":e.push("TYPE");break;case "OBJECT_DOMCONSTRAINT":e.push("DOMAIN");break;case "OBJECT_TABCONSTRAINT":e.push("TABLE");break;case "OBJECT_AGGREGATE":e.push("AGGREGATE");break;case "OBJECT_COLLATION":e.push("COLLATION");break;case "OBJECT_CONVERSION":e.push("CONVERSION");break;case "OBJECT_EXTENSION":e.push("EXTENSION");break;case "OBJECT_FOREIGN_SERVER":e.push("SERVER");break;case "OBJECT_FOREIGN_TABLE":e.push("FOREIGN TABLE");break;case "OBJECT_LANGUAGE":e.push("LANGUAGE");break;case "OBJECT_MATVIEW":e.push("MATERIALIZED VIEW");break;case "OBJECT_OPCLASS":e.push("OPERATOR CLASS");break;case "OBJECT_OPERATOR":e.push("OPERATOR");break;case "OBJECT_OPFAMILY":e.push("OPERATOR FAMILY");break;case "OBJECT_POLICY":e.push("POLICY"),t.subname&&e.push(h.quoteIdentifier(t.subname));break;case "OBJECT_PUBLICATION":e.push("PUBLICATION");break;case "OBJECT_ROLE":e.push("ROLE");break;case "OBJECT_RULE":e.push("RULE");break;case "OBJECT_SUBSCRIPTION":e.push("SUBSCRIPTION");break;case "OBJECT_TABLESPACE":e.push("TABLESPACE");break;case "OBJECT_TRIGGER":e.push("TRIGGER");break;case "OBJECT_TSCONFIGURATION":e.push("TEXT SEARCH CONFIGURATION");break;case "OBJECT_TSDICTIONARY":e.push("TEXT SEARCH DICTIONARY");break;case "OBJECT_TSPARSER":e.push("TEXT SEARCH PARSER");break;case "OBJECT_TSTEMPLATE":e.push("TEXT SEARCH TEMPLATE");break;case "OBJECT_FDW":e.push("FOREIGN DATA WRAPPER");break;case "OBJECT_EVENT_TRIGGER":e.push("EVENT TRIGGER");break;case "OBJECT_ATTRIBUTE":t.relationType==="OBJECT_TYPE"?e.push("TYPE"):e.push("TABLE");break;case "OBJECT_ROUTINE":e.push("ROUTINE");break;default:throw new Error(`Unsupported RenameStmt renameType: ${t.renameType}`)}if(t.missing_ok&&e.push("IF EXISTS"),t.renameType==="OBJECT_RULE"&&t.subname&&t.relation)e.push(h.quoteIdentifier(t.subname)),e.push("ON"),e.push(this.RangeVar(t.relation,s));else if(t.relation){let i=s.spawn("RenameStmt",{objtype:t.relationType});t.renameType==="OBJECT_POLICY"&&e.push("ON"),e.push(this.RangeVar(t.relation,i));}else if(t.object)if((t.renameType==="OBJECT_OPFAMILY"||t.renameType==="OBJECT_OPCLASS")&&t.object.List){let i=c.unwrapList(t.object);if(i.length===2){let r=i[0].String?.sval||"",n=i[1].String?.sval||"";e.push(`${h.quoteIdentifier(n)} USING ${r}`);}else e.push(this.visit(t.object,s));}else if(t.renameType==="OBJECT_SCHEMA"&&t.object.List){let i=c.unwrapList(t.object);i.length>0&&i[0].String?e.push(this.quoteIfNeeded(i[0].String.sval)):e.push(this.visit(t.object,s));}else e.push(this.visit(t.object,s));if(t.renameType==="OBJECT_COLUMN"&&t.subname?e.push("RENAME COLUMN",h.quoteIdentifier(t.subname),"TO"):t.renameType==="OBJECT_DOMCONSTRAINT"&&t.subname?e.push("RENAME CONSTRAINT",h.quoteIdentifier(t.subname),"TO"):t.renameType==="OBJECT_TABCONSTRAINT"&&t.subname?e.push("RENAME CONSTRAINT",h.quoteIdentifier(t.subname),"TO"):t.renameType==="OBJECT_ATTRIBUTE"&&t.subname?e.push("RENAME ATTRIBUTE",h.quoteIdentifier(t.subname),"TO"):t.renameType==="OBJECT_ROLE"&&t.subname?e.push(h.quoteIdentifier(t.subname),"RENAME TO"):t.renameType==="OBJECT_SCHEMA"&&t.subname?e.push(this.quoteIfNeeded(t.subname),"RENAME TO"):(t.renameType,e.push("RENAME TO")),!t.newname)throw new Error("RenameStmt requires newname");return e.push(h.quoteIdentifier(t.newname)),t.behavior==="DROP_CASCADE"&&e.push("CASCADE"),e.join(" ")}AlterOwnerStmt(t,s){let e=["ALTER"];if(!t.objectType)throw new Error("AlterOwnerStmt requires objectType");if(e.push(this.getObjectTypeKeyword(t.objectType)),t.relation)e.push(this.RangeVar(t.relation,s));else if(t.object)if((t.objectType==="OBJECT_OPFAMILY"||t.objectType==="OBJECT_OPCLASS")&&t.object.List){let i=c.unwrapList(t.object);if(i.length===2){let r=i[0].String?.sval||"",n=i[1].String?.sval||"";e.push(`${h.quoteIdentifier(n)} USING ${r}`);}else e.push(this.visit(t.object,s));}else e.push(this.visit(t.object,s));if(e.push("OWNER TO"),!t.newowner)throw new Error("AlterOwnerStmt requires newowner");return e.push(this.RoleSpec(t.newowner,s)),e.join(" ")}GrantStmt(t,s){let e=[];if(t.is_grant?e.push("GRANT"):(e.push("REVOKE"),t.grant_option&&e.push("GRANT OPTION FOR")),t.privileges&&t.privileges.length>0){let i=s.spawn("GrantStmt"),r=c.unwrapList(t.privileges).map(n=>this.visit(n,i)).join(", ");e.push(r);}else e.push("ALL");if(e.push("ON"),t.objtype&&t.targtype==="ACL_TARGET_DEFAULTS")switch(t.objtype){case "OBJECT_TABLE":e.push("TABLES");break;case "OBJECT_SEQUENCE":e.push("SEQUENCES");break;case "OBJECT_FUNCTION":e.push("FUNCTIONS");break;case "OBJECT_PROCEDURE":e.push("PROCEDURES");break;case "OBJECT_ROUTINE":e.push("ROUTINES");break;case "OBJECT_TYPE":e.push("TYPES");break;case "OBJECT_SCHEMA":e.push("SCHEMAS");break;}switch(t.targtype){case "ACL_TARGET_OBJECT":if(t.objtype==="OBJECT_SCHEMA"?e.push("SCHEMA"):t.objtype==="OBJECT_LANGUAGE"?e.push("LANGUAGE"):t.objtype==="OBJECT_FUNCTION"?e.push("FUNCTION"):t.objtype==="OBJECT_PROCEDURE"?e.push("PROCEDURE"):t.objtype==="OBJECT_TYPE"?e.push("TYPE"):t.objtype==="OBJECT_DOMAIN"?e.push("DOMAIN"):t.objtype==="OBJECT_LARGEOBJECT"?e.push("LARGE OBJECT"):t.objtype==="OBJECT_FDW"?e.push("FOREIGN","DATA","WRAPPER"):t.objtype==="OBJECT_FOREIGN_SERVER"?e.push("FOREIGN","SERVER"):t.objtype==="OBJECT_DATABASE"&&e.push("DATABASE"),t.objects&&t.objects.length>0){let i=c.unwrapList(t.objects).map(r=>this.visit(r,s)).join(", ");e.push(i);}break;case "ACL_TARGET_ALL_IN_SCHEMA":switch(t.objtype){case "OBJECT_TABLE":e.push("ALL TABLES IN SCHEMA");break;case "OBJECT_SEQUENCE":e.push("ALL SEQUENCES IN SCHEMA");break;case "OBJECT_FUNCTION":e.push("ALL FUNCTIONS IN SCHEMA");break;case "OBJECT_PROCEDURE":e.push("ALL PROCEDURES IN SCHEMA");break;case "OBJECT_ROUTINE":e.push("ALL ROUTINES IN SCHEMA");break;case "OBJECT_TYPE":e.push("ALL TYPES IN SCHEMA");break;default:e.push("ALL TABLES IN SCHEMA");break}if(t.objects&&t.objects.length>0){let i=c.unwrapList(t.objects).map(r=>this.visit(r,s)).join(", ");e.push(i);}break;default:if(t.objects&&t.objects.length>0){let i=c.unwrapList(t.objects).map(r=>this.visit(r,s)).join(", ");e.push(i);}}if(t.is_grant?e.push("TO"):e.push("FROM"),t.grantees&&t.grantees.length>0){let i=c.unwrapList(t.grantees).map(r=>this.visit(r,s)).join(", ");e.push(i);}return t.grant_option&&t.is_grant&&e.push("WITH GRANT OPTION"),t.is_grant||(t.behavior==="DROP_CASCADE"?e.push("CASCADE"):t.behavior==="DROP_RESTRICT"&&e.push("RESTRICT")),e.join(" ")}GrantRoleStmt(t,s){let e=[],i=false,r=false,n=false,a,u,o;if(t.opt&&t.opt.length>0){let l=c.unwrapList(t.opt),f=l.find(E=>E.DefElem&&E.DefElem.defname==="inherit"),m=l.find(E=>E.String&&E.String.sval==="admin"||E.DefElem&&E.DefElem.defname==="admin"),T=l.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,o=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 l=c.unwrapList(t.granted_roles).map(f=>this.visit(f,s)).join(", ");e.push(l);}if(t.is_grant?e.push("TO"):e.push("FROM"),t.grantee_roles&&t.grantee_roles.length>0){let l=c.unwrapList(t.grantee_roles).map(f=>this.visit(f,s)).join(", ");e.push(l);}if(t.is_grant){let l=[];r&&(u===true?l.push("ADMIN OPTION"):u===false?l.push("ADMIN FALSE"):l.push("ADMIN OPTION")),i&&(a===true?l.push("INHERIT OPTION"):a===false&&l.push("INHERIT FALSE")),n&&(o===true?l.push("SET TRUE"):o===false&&l.push("SET FALSE")),l.length>0&&e.push("WITH",l.join(", "));}return e.join(" ")}SecLabelStmt(t,s){let e=["SECURITY LABEL"];if(t.provider&&e.push("FOR",h.quoteIdentifier(t.provider)),e.push("ON"),t.objtype)switch(t.objtype){case "OBJECT_TABLE":e.push("TABLE");break;case "OBJECT_COLUMN":e.push("COLUMN");break;case "OBJECT_FUNCTION":e.push("FUNCTION");break;case "OBJECT_SCHEMA":e.push("SCHEMA");break;case "OBJECT_DATABASE":e.push("DATABASE");break;case "OBJECT_ROLE":e.push("ROLE");break;default:e.push(t.objtype.replace("OBJECT_",""));}return t.object&&e.push(this.visit(t.object,s)),e.push("IS"),t.label?e.push(`'${t.label}'`):e.push("NULL"),e.join(" ")}AlterDefaultPrivilegesStmt(t,s){let e=["ALTER DEFAULT PRIVILEGES"];if(t.options&&t.options.length>0){let i=c.unwrapList(t.options);for(let r of i){let n=this.getNodeData(r);if(n.defname==="schemas"){if(e.push("IN SCHEMA"),n.arg){let a=c.unwrapList(n.arg).map(u=>this.visit(u,s)).join(", ");e.push(a);}}else if(n.defname==="roles"&&(e.push("FOR ROLE"),n.arg)){let a=c.unwrapList(n.arg).map(u=>this.visit(u,s)).join(", ");e.push(a);}}}if(t.action){let i=this.GrantStmt(t.action,s);if(s.isPretty())return e.join(" ")+s.newline()+s.indent(i);e.push(i);}return e.join(" ")}CreateConversionStmt(t,s){let e=["CREATE"];if(t.def&&e.push("DEFAULT"),e.push("CONVERSION"),t.conversion_name&&t.conversion_name.length>0){let i=c.unwrapList(t.conversion_name).map(r=>this.visit(r,s)).join(".");e.push(i);}if(t.for_encoding_name&&e.push("FOR",`'${t.for_encoding_name}'`),t.to_encoding_name&&e.push("TO",`'${t.to_encoding_name}'`),t.func_name&&t.func_name.length>0){e.push("FROM");let i=c.unwrapList(t.func_name).map(r=>this.visit(r,s)).join(".");e.push(i);}return e.join(" ")}CreateCastStmt(t,s){let e=["CREATE CAST"];if(e.push("("),t.sourcetype&&e.push(this.TypeName(t.sourcetype,s)),e.push("AS"),t.targettype&&e.push(this.TypeName(t.targettype,s)),e.push(")"),t.func?(e.push("WITH FUNCTION"),e.push(this.ObjectWithArgs(t.func,s))):t.inout?e.push("WITH INOUT"):e.push("WITHOUT FUNCTION"),t.context)switch(t.context){case "COERCION_IMPLICIT":e.push("AS IMPLICIT");break;case "COERCION_ASSIGNMENT":e.push("AS ASSIGNMENT");break;case "COERCION_EXPLICIT":break;default:throw new Error(`Unsupported CreateCastStmt context: ${t.context}`)}else t.context==="COERCION_ASSIGNMENT"&&e.push("AS ASSIGNMENT");return e.join(" ")}CreatePLangStmt(t,s){let e=["CREATE"];if(t.replace&&e.push("OR REPLACE"),t.pltrusted&&e.push("TRUSTED"),e.push("LANGUAGE"),t.plname&&e.push(h.quoteIdentifier(t.plname)),t.plhandler&&t.plhandler.length>0){e.push("HANDLER");let i=c.unwrapList(t.plhandler).map(r=>this.visit(r,s)).join(".");e.push(i);}if(t.plinline&&t.plinline.length>0){e.push("INLINE");let i=c.unwrapList(t.plinline).map(r=>this.visit(r,s)).join(".");e.push(i);}if(t.plvalidator&&t.plvalidator.length>0){e.push("VALIDATOR");let i=c.unwrapList(t.plvalidator).map(r=>this.visit(r,s)).join(".");e.push(i);}return e.join(" ")}CreateTransformStmt(t,s){let e=["CREATE"];t.replace&&e.push("OR REPLACE"),e.push("TRANSFORM FOR"),t.type_name&&e.push(this.TypeName(t.type_name,s)),e.push("LANGUAGE"),t.lang&&e.push(h.quoteIdentifier(t.lang)),e.push("(");let i=[];if(t.fromsql){let r=this.ObjectWithArgs(t.fromsql,s);i.push(`FROM SQL WITH FUNCTION ${r}`);}if(t.tosql){let r=this.ObjectWithArgs(t.tosql,s);i.push(`TO SQL WITH FUNCTION ${r}`);}return e.push(i.join(", ")),e.push(")"),e.join(" ")}CreateTrigStmt(t,s){let e=["CREATE"];if(t.replace&&e.push("OR REPLACE"),t.isconstraint&&e.push("CONSTRAINT"),e.push("TRIGGER"),t.trigname&&e.push(h.quoteIdentifier(t.trigname)),s.isPretty()){let i=[],r=[];t.timing&2?r.push("BEFORE"):t.timing&64?r.push("INSTEAD OF"):r.push("AFTER");let n=[];if(t.events&4&&n.push("INSERT"),t.events&8&&n.push("DELETE"),t.events&16){let u="UPDATE";if(t.columns&&t.columns.length>0){let o=c.unwrapList(t.columns).map(l=>this.visit(l,s)).join(", ");u+=" OF "+o;}n.push(u);}if(t.events&32&&n.push("TRUNCATE"),i.push(s.indent(r.join(" ")+" "+n.join(" OR "))),t.relation&&i.push(s.indent("ON "+this.RangeVar(t.relation,s))),t.transitionRels&&t.transitionRels.length>0){let u=c.unwrapList(t.transitionRels).map(o=>this.visit(o,s)).join(" ");i.push(s.indent("REFERENCING "+u));}if(t.deferrable&&i.push(s.indent("DEFERRABLE")),t.initdeferred&&i.push(s.indent("INITIALLY DEFERRED")),t.row?i.push(s.indent("FOR EACH ROW")):i.push(s.indent("FOR EACH STATEMENT")),t.whenClause){let u="WHEN ("+this.visit(t.whenClause,s)+")";i.push(s.indent(u));}let a="EXECUTE";if(t.funcname&&t.funcname.length>0){let u=c.unwrapList(t.funcname).map(o=>this.visit(o,s)).join(".");a+=" PROCEDURE "+u;}if(t.args&&t.args.length>0){let u=s.spawn("CreateTrigStmt",{isStringLiteral:true}),o=c.unwrapList(t.args).map(l=>this.visit(l,u)).join(", ");a+="("+o+")";}else a+="()";return i.push(s.indent(a)),e.join(" ")+s.newline()+i.join(s.newline())}else {let i=[];t.timing&2?i.push("BEFORE"):t.timing&64?i.push("INSTEAD OF"):i.push("AFTER"),e.push(i.join(" "));let r=[];if(t.events&4&&r.push("INSERT"),t.events&8&&r.push("DELETE"),t.events&16&&r.push("UPDATE"),t.events&32&&r.push("TRUNCATE"),e.push(r.join(" OR ")),t.columns&&t.columns.length>0){e.push("OF");let n=c.unwrapList(t.columns).map(a=>this.visit(a,s)).join(", ");e.push(n);}if(e.push("ON"),t.relation&&e.push(this.RangeVar(t.relation,s)),t.constrrel&&(e.push("FROM"),e.push(this.RangeVar(t.constrrel,s))),t.deferrable&&e.push("DEFERRABLE"),t.initdeferred&&e.push("INITIALLY DEFERRED"),t.transitionRels&&t.transitionRels.length>0){e.push("REFERENCING");let n=c.unwrapList(t.transitionRels).map(a=>this.visit(a,s)).join(" ");e.push(n);}if(t.row?e.push("FOR EACH ROW"):e.push("FOR EACH STATEMENT"),t.whenClause&&(e.push("WHEN"),e.push("("),e.push(this.visit(t.whenClause,s)),e.push(")")),e.push("EXECUTE"),t.funcname&&t.funcname.length>0){let n=c.unwrapList(t.funcname).map(a=>this.visit(a,s)).join(".");e.push("FUNCTION",n);}if(t.args&&t.args.length>0){e.push("(");let n=s.spawn("CreateTrigStmt",{isStringLiteral:true}),a=c.unwrapList(t.args).map(u=>this.visit(u,n)).join(", ");e.push(a),e.push(")");}else e.push("()");return e.join(" ")}}TriggerTransition(t,s){let e=[];return t.isNew?e.push("NEW TABLE AS"):e.push("OLD TABLE AS"),t.name&&e.push(h.quoteIdentifier(t.name)),e.join(" ")}CreateEventTrigStmt(t,s){let e=["CREATE EVENT TRIGGER"];if(t.trigname&&e.push(h.quoteIdentifier(t.trigname)),e.push("ON"),t.eventname&&e.push(t.eventname),t.whenclause&&t.whenclause.length>0){e.push("WHEN");let i=s.spawn("CreateEventTrigStmt"),r=c.unwrapList(t.whenclause).map(n=>this.visit(n,i)).join(" AND ");e.push(r);}if(e.push("EXECUTE"),t.funcname&&t.funcname.length>0){let i=c.unwrapList(t.funcname).map(r=>this.visit(r,s)).join(".");e.push("PROCEDURE",i+"()");}return e.join(" ")}AlterEventTrigStmt(t,s){let e=["ALTER EVENT TRIGGER"];if(t.trigname&&e.push(h.quoteIdentifier(t.trigname)),t.tgenabled)switch(t.tgenabled){case "O":e.push("ENABLE");break;case "D":e.push("DISABLE");break;case "R":e.push("ENABLE REPLICA");break;case "A":e.push("ENABLE ALWAYS");break;default:throw new Error(`Unsupported trigger enable state: ${t.tgenabled}`)}return e.join(" ")}CreateOpClassStmt(t,s){let e=["CREATE OPERATOR CLASS"];if(t.opclassname&&t.opclassname.length>0){let i=c.unwrapList(t.opclassname).map(r=>this.visit(r,s)).join(".");e.push(i);}if(t.isDefault&&e.push("DEFAULT"),e.push("FOR TYPE"),t.datatype&&e.push(this.TypeName(t.datatype,s)),e.push("USING"),t.amname&&e.push(t.amname),t.opfamilyname&&t.opfamilyname.length>0){e.push("FAMILY");let i=c.unwrapList(t.opfamilyname).map(r=>this.visit(r,s)).join(".");e.push(i);}if(e.push("AS"),t.items&&t.items.length>0){let i=c.unwrapList(t.items).map(r=>this.visit(r,s)).join(", ");e.push(i);}return e.join(" ")}CreateOpFamilyStmt(t,s){let e=["CREATE OPERATOR FAMILY"];if(t.opfamilyname&&t.opfamilyname.length>0){let i=c.unwrapList(t.opfamilyname).map(r=>this.visit(r,s)).join(".");e.push(i);}return e.push("USING"),t.amname&&e.push(t.amname),e.join(" ")}AlterOpFamilyStmt(t,s){let e=["ALTER OPERATOR FAMILY"];if(t.opfamilyname&&t.opfamilyname.length>0){let i=c.unwrapList(t.opfamilyname).map(r=>this.visit(r,s)).join(".");e.push(i);}if(e.push("USING"),t.amname&&e.push(t.amname),t.isDrop?e.push("DROP"):e.push("ADD"),t.items&&t.items.length>0){let i=c.unwrapList(t.items).map(r=>this.visit(r,s)).join(", ");e.push(i);}return e.join(" ")}MergeStmt(t,s){let e=[];if(t.withClause&&e.push(this.WithClause(t.withClause,s)),e.push("MERGE INTO"),t.relation&&e.push(this.RangeVar(t.relation,s)),t.sourceRelation&&(e.push("USING"),e.push(this.visit(t.sourceRelation,s))),t.joinCondition&&(e.push("ON"),e.push(this.visit(t.joinCondition,s))),t.mergeWhenClauses&&t.mergeWhenClauses.length>0){let i=c.unwrapList(t.mergeWhenClauses).map(r=>this.visit(r,s)).join(" ");e.push(i);}return e.join(" ")}AlterTableMoveAllStmt(t,s){let e=["ALTER"];return t.objtype==="OBJECT_TABLE"?e.push("TABLE"):t.objtype==="OBJECT_INDEX"?e.push("INDEX"):e.push("TABLE"),e.push("ALL","IN","TABLESPACE"),t.orig_tablespacename&&e.push(h.quoteIdentifier(t.orig_tablespacename)),e.push("SET","TABLESPACE"),t.new_tablespacename&&e.push(h.quoteIdentifier(t.new_tablespacename)),t.nowait&&e.push("NOWAIT"),e.join(" ")}CreateSeqStmt(t,s){let e=["CREATE"];if(t.sequence&&t.sequence.relpersistence==="t"&&e.push("TEMPORARY"),e.push("SEQUENCE"),t.if_not_exists&&e.push("IF NOT EXISTS"),t.sequence){let i=[],r=t.sequence;r.schemaname&&i.push(h.quoteIdentifier(r.schemaname)),r.relname&&i.push(h.quoteIdentifier(r.relname)),e.push(i.join("."));}if(t.options&&t.options.length>0){let i=s.spawn("CreateSeqStmt"),r=c.unwrapList(t.options).filter(n=>n!=null&&this.getNodeType(n)!=="undefined").map(n=>{try{return this.visit(n,i)}catch(a){return console.warn(`Error processing option in CreateSeqStmt: ${a instanceof Error?a.message:String(a)}`),""}}).filter(n=>n!=="").join(" ");r&&e.push(r);}return e.join(" ")}AlterSeqStmt(t,s){let e=["ALTER","SEQUENCE"];if(t.missing_ok&&e.push("IF EXISTS"),t.sequence){let i=[],r=t.sequence;r.schemaname&&i.push(h.quoteIdentifier(r.schemaname)),r.relname&&i.push(h.quoteIdentifier(r.relname)),e.push(i.join("."));}if(t.options&&t.options.length>0){let i=s.spawn("AlterSeqStmt"),r=c.unwrapList(t.options).filter(n=>n&&n!==void 0).map(n=>{try{return !n||this.getNodeType(n)==="undefined"?"":this.visit(n,i)}catch(a){return console.warn(`Error processing option in AlterSeqStmt: ${a instanceof Error?a.message:String(a)}`),""}}).filter(n=>n&&n.trim().length>0).join(" ");r&&e.push(r);}return t.for_identity&&e.push("FOR IDENTITY"),e.join(" ")}CompositeTypeStmt(t,s){let e=["CREATE","TYPE"];if(t.typevar){let i=s.spawn("CompositeTypeStmt");e.push(this.RangeVar(t.typevar,i));}if(e.push("AS"),t.coldeflist&&t.coldeflist.length>0){let i=c.unwrapList(t.coldeflist).map(r=>this.visit(r,s)).join(", ");e.push(`(${i})`);}else e.push("()");return e.join(" ")}CreateRangeStmt(t,s){let e=["CREATE","TYPE"];if(t.typeName&&t.typeName.length>0){let i=c.unwrapList(t.typeName).map(r=>this.visit(r,s)).join(".");e.push(i);}if(e.push("AS","RANGE"),t.params&&t.params.length>0){let i=c.unwrapList(t.params).map(r=>{let n=this.getNodeData(r);if(n.defname&&n.arg){let a=this.visit(n.arg,s);return `${n.defname} = ${a}`}return this.visit(r,s)});e.push(`(${i.join(", ")})`);}return e.join(" ")}AlterEnumStmt(t,s){let e=["ALTER","TYPE"];if(t.typeName&&t.typeName.length>0){let i=c.unwrapList(t.typeName).map(r=>this.visit(r,s)).join(".");e.push(i);}if(t.oldVal&&t.newVal){let i=t.oldVal.replace(/'/g,"''"),r=t.newVal.replace(/'/g,"''");e.push("RENAME","VALUE",`'${i}'`,"TO",`'${r}'`);}else if(t.newVal){e.push("ADD","VALUE"),t.skipIfNewValExists&&e.push("IF NOT EXISTS");let i=t.newVal.replace(/'/g,"''");if(e.push(`'${i}'`),t.newValNeighbor){let r=t.newValNeighbor.replace(/'/g,"''");t.newValIsAfter?e.push("AFTER",`'${r}'`):e.push("BEFORE",`'${r}'`);}}return e.join(" ")}AlterTypeStmt(t,s){let e=["ALTER","TYPE"];if(t.typeName&&t.typeName.length>0){let i=c.unwrapList(t.typeName).map(r=>this.visit(r,s)).join(".");e.push(i);}if(e.push("SET"),t.options&&t.options.length>0){let i=c.unwrapList(t.options).map(r=>{let n=this.getNodeData(r);if(n.defname&&n.arg){let a=this.visit(n.arg,s);return `${n.defname} = ${a}`}return this.visit(r,s)});e.push(`(${i.join(", ")})`);}return e.join(" ")}AlterRoleStmt(t,s){let e=t.options&&c.unwrapList(t.options).some(r=>r.DefElem&&r.DefElem.defname==="rolemembers"),i=["ALTER",e?"GROUP":"ROLE"];if(t.role&&i.push(this.RoleSpec(t.role,s)),t.options){let r=s.spawn("AlterRoleStmt");if(e){let n=c.unwrapList(t.options).find(a=>a.DefElem&&a.DefElem.defname==="rolemembers");if(n&&n.DefElem){let a=t.action===1?"ADD":"DROP";if(i.push(a,"USER"),n.DefElem.arg&&n.DefElem.arg.List){let u=c.unwrapList(n.DefElem.arg.List.items).map(o=>this.visit(o,r)).join(", ");i.push(u);}}}else {let n=c.unwrapList(t.options).map(a=>this.visit(a,r)).join(" ");n&&i.push(n);}}return i.join(" ")}DropRoleStmt(t,s){let e=["DROP","ROLE"];if(t.missing_ok&&e.push("IF EXISTS"),t.roles){let i=c.unwrapList(t.roles).map(r=>this.visit(r,s)).join(", ");e.push(i);}return e.join(" ")}targetList(t,s){return !t||!Array.isArray(t)?"":t.map(e=>this.visit(e,s)).join(", ")}CreateAggregateStmt(t,s){let e=["CREATE"];if(t.replace&&e.push("OR REPLACE"),e.push("AGGREGATE"),t.defnames&&t.defnames.length>0){let r=c.unwrapList(t.defnames).map(n=>this.visit(n,s)).join(".");e.push(r);}if(e.push("("),t.args&&t.args.length>0){let r=c.unwrapList(t.args).map(n=>this.visit(n,s)).join(", ");e.push(r);}else e.push("*");e.push(")"),e.push("(");let i=[];if(t.definition&&t.definition.length>0){let r=c.unwrapList(t.definition).map(n=>{let a=this.getNodeData(n);return a.defname==="sfunc"||a.defname==="sfunc1"?`SFUNC = ${this.visit(a.arg,s)}`:a.defname==="stype"||a.defname==="stype1"?`STYPE = ${this.visit(a.arg,s)}`:a.defname==="basetype"?`BASETYPE = ${this.visit(a.arg,s)}`:a.defname==="finalfunc"?`FINALFUNC = ${this.visit(a.arg,s)}`:a.defname==="initcond"||a.defname==="initcond1"?`INITCOND = ${this.visit(a.arg,s)}`:a.defname==="combinefunc"?`COMBINEFUNC = ${this.visit(a.arg,s)}`:a.defname==="serialfunc"?`SERIALFUNC = ${this.visit(a.arg,s)}`:a.defname==="deserialfunc"?`DESERIALFUNC = ${this.visit(a.arg,s)}`:a.defname==="parallel"?`PARALLEL = ${this.visit(a.arg,s)}`:this.visit(n,s)});i.push(...r);}return e.push(i.join(", ")),e.push(")"),e.join(" ")}CreateTableAsStmt(t,s){let e=["CREATE"];if(t.objtype==="OBJECT_MATVIEW"?e.push("MATERIALIZED VIEW"):t.into&&t.into.rel&&t.into.rel.relpersistence==="t"?e.push("TEMPORARY TABLE"):e.push("TABLE"),t.if_not_exists&&e.push("IF NOT EXISTS"),t.into&&t.into.rel&&e.push(this.RangeVar(t.into.rel,s)),t.into&&t.into.colNames&&t.into.colNames.length>0){e.push("(");let i=c.unwrapList(t.into.colNames).map(r=>this.visit(r,s)).join(", ");e.push(i),e.push(")");}if(t.into&&t.into.accessMethod&&(e.push("USING"),e.push(t.into.accessMethod)),t.into&&t.into.onCommit&&t.into.onCommit!=="ONCOMMIT_NOOP")switch(e.push("ON COMMIT"),t.into.onCommit){case "ONCOMMIT_PRESERVE_ROWS":e.push("PRESERVE ROWS");break;case "ONCOMMIT_DELETE_ROWS":e.push("DELETE ROWS");break;case "ONCOMMIT_DROP":e.push("DROP");break}if(e.push("AS"),t.query&&e.push(this.visit(t.query,s)),t.into&&t.into.options&&t.into.options.length>0){e.push("WITH");let i=c.unwrapList(t.into.options).map(r=>this.visit(r,s)).join(", ");e.push(`(${i})`);}return t.into&&t.into.skipData&&e.push("WITH NO DATA"),e.join(" ")}RefreshMatViewStmt(t,s){let e=["REFRESH","MATERIALIZED","VIEW"];return t.concurrent&&e.push("CONCURRENTLY"),t.relation&&e.push(this.visit(t.relation,s)),t.skipData&&e.push("WITH NO DATA"),e.join(" ")}AccessPriv(t,s){let e=[];if(t.priv_name?e.push(t.priv_name.toUpperCase()):e.push("ALL"),t.cols&&t.cols.length>0){e.push("(");let i=s.spawn("AccessPriv"),r=c.unwrapList(t.cols).map(n=>this.visit(n,i));e.push(r.join(", ")),e.push(")");}return e.join(" ")}aliasname(t,s){return typeof t=="string"?h.quoteIdentifier(t):this.visit(t,s)}DefineStmt(t,s){let e=[];if(!t.kind)throw new Error("DefineStmt requires kind property");switch(t.kind){case "OBJECT_OPERATOR":if(e.push("CREATE OPERATOR"),t.defnames&&t.defnames.length>0){let i=c.unwrapList(t.defnames).map((r,n)=>{if(n===t.defnames.length-1){let a=this.getNodeData(r);if(a&&a.sval)return a.sval}return this.visit(r,s)});e.push(i.join("."));}if(t.definition&&t.definition.length>0){e.push("(");let i=c.unwrapList(t.definition).map(r=>{if(r.DefElem){let n=r.DefElem,a=n.defname,u=n.arg;if(a&&u){let o=h.quoteIdentifier(a),l=o!==a?o:this.preserveOperatorDefElemCase(a);if((a.toLowerCase()==="commutator"||a.toLowerCase()==="negator")&&u.List){let f=c.unwrapList(u.List.items);if(f.length===1&&f[0].String)return `${l} = ${f[0].String.sval}`}return a.toLowerCase()==="commutator"||a.toLowerCase()==="negator"?`${l} = ${this.visit(u,s)}`:`${l} = ${this.visit(u,s)}`}else if(a&&!u)return a==="Hashes"||a==="Merges"?h.quoteIdentifier(a):this.preserveOperatorDefElemCase(a).toUpperCase()}return this.visit(r,s)});e.push(i.join(", ")),e.push(")");}break;case "OBJECT_TYPE":if(e.push("CREATE TYPE"),t.defnames&&t.defnames.length>0&&e.push(c.unwrapList(t.defnames).map(i=>this.visit(i,s)).join(".")),t.definition&&t.definition.length>0){let i=s.spawn("DefineStmt"),r=c.unwrapList(t.definition).map(n=>this.visit(n,i));e.push(`(${r.join(", ")})`);}break;case "OBJECT_AGGREGATE":if(e.push("CREATE"),t.replace&&e.push("OR REPLACE"),e.push("AGGREGATE"),t.defnames&&t.defnames.length>0){let i=c.unwrapList(t.defnames).map(r=>this.visit(r,s));e.push(i.join("."));}if(t.args&&t.args.length>0){let i=c.unwrapList(t.args),r=i.some(u=>u.Integer&&u.Integer.ival===1),n=i.length>=2&&i[0].List&&i[0].List.items&&i[0].List.items.length===1&&i[0].List.items[0].FunctionParameter&&i[0].List.items[0].FunctionParameter.mode==="FUNC_PARAM_DEFAULT"&&i[1].Integer&&Object.keys(i[1].Integer).length===0,a=i.filter(u=>!(u.Integer&&(u.Integer.ival===-1||u.Integer.ival===1)||u.Integer&&Object.keys(u.Integer).length===0&&n));if(a.length>0)if(n){let u=a[0];if(u.List&&u.List.items&&u.List.items[0].FunctionParameter){let o=u.List.items[0].FunctionParameter,l;if(o.argType&&o.argType.names){let f=o.argType.names;f.length>=2&&f[0].String&&f[0].String.sval==="pg_catalog"?l=f[1].String.sval:f.length>=1&&f[0].String?l=f[0].String.sval:l="unknown";}else l=this.visit({TypeName:o.argType},s);e.push(`(ORDER BY ${l})`);}else {let o=this.visit(u,s);e.push(`(ORDER BY ${o})`);}}else if(r&&a.length===1&&a[0].List){let u=a[0].List;if(u.items&&u.items.length>=2){let o=c.unwrapList(u.items),l=this.visit(o[0],s),f=o.slice(1).map(m=>this.visit(m,s));e.push(`(${l} ORDER BY ${f.join(", ")})`);}else if(u.items&&u.items.length===1){let o=u.items[0];if(o.FunctionParameter&&o.FunctionParameter.mode==="FUNC_PARAM_VARIADIC"){let l=this.visit(o,s);e.push(`(${l} ORDER BY ${l})`);}else {let l=this.visit(o,s);e.push(`(${l})`);}}else {let o=a.map(l=>Object.keys(l).length===0?"*":this.visit(l,s));e.push(`(${o.join(", ")})`);}}else {let u=a.map(o=>Object.keys(o).length===0?"*":this.visit(o,s));e.push(`(${u.join(", ")})`);}}if(t.definition&&t.definition.length>0){let i=c.unwrapList(t.definition).map(r=>{if(r.DefElem){let n=r.DefElem,a=n.defname,u=n.arg;if(a&&u){let o=h.quoteIdentifier(a),l=o!==a?o:a;return u.String?`${l} = '${u.String.sval}'`:`${l} = ${this.visit(u,s)}`}}return this.visit(r,s)});e.push(`(${i.join(", ")})`);}break;case "OBJECT_TSDICTIONARY":if(e.push("CREATE TEXT SEARCH DICTIONARY"),t.defnames&&t.defnames.length>0&&e.push(c.unwrapList(t.defnames).map(i=>this.visit(i,s)).join(".")),t.definition&&t.definition.length>0){e.push("(");let i=c.unwrapList(t.definition).map(r=>{if(r.DefElem){let n=r.DefElem,a=n.defname,u=n.arg;if(a&&u)return `${a} = ${this.visit(u,s)}`}return this.visit(r,s)});e.push(i.join(", ")),e.push(")");}break;case "OBJECT_TSCONFIGURATION":if(e.push("CREATE TEXT SEARCH CONFIGURATION"),t.defnames&&t.defnames.length>0&&e.push(c.unwrapList(t.defnames).map(i=>this.visit(i,s)).join(".")),t.definition&&t.definition.length>0){e.push("(");let i=c.unwrapList(t.definition).map(r=>{if(r.DefElem){let n=r.DefElem,a=n.defname,u=n.arg;if(a&&u)return `${a} = ${this.visit(u,s)}`}return this.visit(r,s)});e.push(i.join(", ")),e.push(")");}break;case "OBJECT_TSPARSER":if(e.push("CREATE TEXT SEARCH PARSER"),t.defnames&&t.defnames.length>0){let i=c.unwrapList(t.defnames).map(r=>this.visit(r,s)).join(".");e.push(i);}if(t.definition&&t.definition.length>0){e.push("(");let i=c.unwrapList(t.definition).map(r=>{if(r.DefElem){let n=r.DefElem,a=n.defname,u=n.arg;if(a&&u)return `${a} = ${this.visit(u,s)}`}return this.visit(r,s)});e.push(i.join(", ")),e.push(")");}break;case "OBJECT_TSTEMPLATE":if(e.push("CREATE TEXT SEARCH TEMPLATE"),t.defnames&&t.defnames.length>0){let i=c.unwrapList(t.defnames).map(r=>this.visit(r,s)).join(".");e.push(i);}if(t.definition&&t.definition.length>0){e.push("(");let i=c.unwrapList(t.definition).map(r=>{if(r.DefElem){let n=r.DefElem,a=n.defname,u=n.arg;if(a&&u)return `${a} = ${this.visit(u,s)}`}return this.visit(r,s)});e.push(i.join(", ")),e.push(")");}break;case "OBJECT_COLLATION":if(e.push("CREATE COLLATION"),t.defnames&&t.defnames.length>0&&e.push(c.unwrapList(t.defnames).map(i=>this.visit(i,s)).join(".")),t.definition&&t.definition.length>0){let i=c.unwrapList(t.definition).map(n=>{if(n.DefElem){let a=n.DefElem,u=a.defname,o=a.arg;if(u&&o){if(u==="from")return `FROM ${this.visit(o,s)}`;let l;return o.String?l=`'${o.String.sval}'`:l=this.visit(o,s),`${u} = ${l}`}}return this.visit(n,s)});i.some(n=>n.startsWith("FROM "))?e.push(i.join(" ")):e.push(`(${i.join(", ")})`);}break;default:throw new Error(`Unsupported DefineStmt kind: ${t.kind}`)}return e.join(" ")}AlterDatabaseStmt(t,s){let e=["ALTER","DATABASE"];if(t.dbname&&e.push(h.quoteIdentifier(t.dbname)),t.options&&t.options.length>0){let i=c.unwrapList(t.options).map(r=>this.visit(r,s));e.push(i.join(" "));}return e.join(" ")}AlterDatabaseRefreshCollStmt(t,s){let e=["ALTER","DATABASE"];return t.dbname&&e.push(h.quoteIdentifier(t.dbname)),e.push("REFRESH","COLLATION","VERSION"),e.join(" ")}AlterDatabaseSetStmt(t,s){let e=["ALTER","DATABASE"];if(t.dbname&&e.push(h.quoteIdentifier(t.dbname)),t.setstmt){let i=this.VariableSetStmt(t.setstmt,s);e.push(i);}return e.join(" ")}DeclareCursorStmt(t,s){let e=["DECLARE"];t.portalname&&e.push(h.quoteIdentifier(t.portalname));let i=[];return t.options&&(t.options&2?i.push("SCROLL"):t.options&4&&i.push("NO SCROLL"),t.options&1&&i.push("BINARY"),t.options&8&&i.push("INSENSITIVE")),i.length>0&&e.push(...i),e.push("CURSOR"),t.options&&t.options&32&&e.push("WITH HOLD"),e.push("FOR"),t.query&&e.push(this.visit(t.query,s)),e.join(" ")}PublicationObjSpec(t,s){let e=[];return t.pubobjtype==="PUBLICATIONOBJ_TABLE"?(e.push("TABLE"),t.pubtable&&e.push(this.PublicationTable(t.pubtable,s))):t.pubobjtype==="PUBLICATIONOBJ_TABLES_IN_SCHEMA"?(e.push("TABLES IN SCHEMA"),t.name&&e.push(h.quoteIdentifier(t.name))):t.pubobjtype==="PUBLICATIONOBJ_TABLES_IN_CUR_SCHEMA"&&e.push("TABLES IN SCHEMA CURRENT_SCHEMA"),e.join(" ")}PublicationTable(t,s){let e=[];if(t.relation&&e.push(this.RangeVar(t.relation,s)),t.columns&&t.columns.length>0){let i=c.unwrapList(t.columns).map(r=>this.visit(r,s));e.push(`(${i.join(", ")})`);}return t.whereClause&&(e.push("WHERE"),e.push(this.visit(t.whereClause,s))),e.join(" ")}CreateAmStmt(t,s){let e=["CREATE","ACCESS","METHOD"];switch(t.amname&&e.push(h.quoteIdentifier(t.amname)),e.push("TYPE"),t.amtype){case "i":e.push("INDEX");break;case "t":e.push("TABLE");break;default:e.push(t.amtype||"");break}if(t.handler_name&&t.handler_name.length>0){e.push("HANDLER");let i=c.unwrapList(t.handler_name).map(r=>this.visit(r,s)).join(".");e.push(i);}return e.join(" ")}IntoClause(t,s){let e=[];if(t.rel&&e.push(this.RangeVar(t.rel,s)),t.colNames&&t.colNames.length>0){let i=c.unwrapList(t.colNames).map(r=>this.visit(r,s)).join(", ");e.push(`(${i})`);}if(t.accessMethod&&e.push("USING",t.accessMethod),t.options&&t.options.length>0){e.push("WITH");let i=c.unwrapList(t.options).map(r=>this.visit(r,s)).join(", ");e.push(`(${i})`);}if(t.onCommit&&t.onCommit!=="ONCOMMIT_NOOP")switch(e.push("ON COMMIT"),t.onCommit){case "ONCOMMIT_PRESERVE_ROWS":e.push("PRESERVE ROWS");break;case "ONCOMMIT_DELETE_ROWS":e.push("DELETE ROWS");break;case "ONCOMMIT_DROP":e.push("DROP");break}return t.tableSpaceName&&e.push("TABLESPACE",h.quoteIdentifier(t.tableSpaceName)),e.join(" ")}OnConflictExpr(t,s){let e=["ON CONFLICT"];if(t.arbiterElems&&t.arbiterElems.length>0){let i=c.unwrapList(t.arbiterElems).map(r=>this.visit(r,s)).join(", ");e.push(`(${i})`);}if(t.arbiterWhere&&(e.push("WHERE"),e.push(this.visit(t.arbiterWhere,s))),t.action==="ONCONFLICT_NOTHING")e.push("DO NOTHING");else if(t.action==="ONCONFLICT_UPDATE"){if(e.push("DO UPDATE SET"),t.onConflictSet&&t.onConflictSet.length>0){let i=c.unwrapList(t.onConflictSet).map(r=>this.visit(r,s)).join(", ");e.push(i);}t.onConflictWhere&&(e.push("WHERE"),e.push(this.visit(t.onConflictWhere,s)));}return e.join(" ")}ScanToken(t,s){return ""}CreateOpClassItem(t,s){let e=[];if(t.itemtype===1){e.push("OPERATOR");let i=t.number!==void 0?t.number:0;if(e.push(i.toString()),t.name){let r=s.spawn("CreateOpClassItem");e.push(this.ObjectWithArgs(t.name,r));}}else if(t.itemtype===2){e.push("FUNCTION");let i=t.number!==void 0?t.number:0;if(e.push(i.toString()),t.name){let r=s.spawn("CreateOpClassItem");e.push(this.ObjectWithArgs(t.name,r));}}else t.itemtype===3&&(e.push("STORAGE"),t.storedtype&&e.push(this.TypeName(t.storedtype,s)));if(t.order_family&&t.order_family.length>0){e.push("FOR ORDER BY");let i=c.unwrapList(t.order_family).map(r=>this.visit(r,s)).join(".");e.push(i);}if(t.class_args&&t.class_args.length>0){let i=c.unwrapList(t.class_args).map(r=>this.visit(r,s)).join(", ");e.push(`(${i})`);}return e.join(" ")}Var(t,s){return t.varno&&t.varattno?`$${t.varno}.${t.varattno}`:"$var"}TableFunc(t,s){let e=[];if(t.functype==="TFT_XMLTABLE"){if(e.push("XMLTABLE"),t.ns_names&&t.ns_names.length>0){e.push("XMLNAMESPACES");let i=c.unwrapList(t.ns_names).map(r=>this.visit(r,s)).join(", ");e.push(`(${i})`);}if(t.rowexpr&&e.push(`(${this.visit(t.rowexpr,s)})`),t.docexpr&&(e.push("PASSING"),e.push(this.visit(t.docexpr,s))),t.colexprs&&t.colexprs.length>0){e.push("COLUMNS");let i=c.unwrapList(t.colexprs).map(r=>this.visit(r,s)).join(", ");e.push(i);}}else if(t.functype==="TFT_JSON_TABLE"&&(e.push("JSON_TABLE"),t.docexpr&&e.push(`(${this.visit(t.docexpr,s)})`),t.rowexpr&&(e.push(","),e.push(`'${this.visit(t.rowexpr,s)}'`)),t.colexprs&&t.colexprs.length>0)){e.push("COLUMNS");let i=c.unwrapList(t.colexprs).map(r=>this.visit(r,s)).join(", ");e.push(`(${i})`);}return e.join(" ")}RangeTableFunc(t,s){let e=[];if(t.lateral&&e.push("LATERAL"),t.docexpr&&e.push(this.visit(t.docexpr,s)),t.rowexpr&&(e.push("PASSING"),e.push(this.visit(t.rowexpr,s))),t.columns&&t.columns.length>0){e.push("COLUMNS");let i=c.unwrapList(t.columns).map(r=>this.visit(r,s)).join(", ");e.push(`(${i})`);}return t.alias&&e.push(this.Alias(t.alias,s)),e.join(" ")}RangeTableFuncCol(t,s){let e=[];return t.colname&&e.push(h.quoteIdentifier(t.colname)),t.for_ordinality?e.push("FOR ORDINALITY"):t.typeName&&e.push(this.TypeName(t.typeName,s)),t.colexpr&&(e.push("PATH"),e.push(`'${this.visit(t.colexpr,s)}'`)),t.coldefexpr&&(e.push("DEFAULT"),e.push(this.visit(t.coldefexpr,s))),e.join(" ")}JsonArrayQueryConstructor(t,s){let e=["JSON_ARRAYAGG"];return t.query&&e.push(`(${this.visit(t.query,s)})`),t.format&&e.push("FORMAT JSON"),t.output&&e.push("RETURNING TEXT"),t.absent_on_null?e.push("ABSENT ON NULL"):e.push("NULL ON NULL"),e.join(" ")}RangeFunction(t,s){let e=[];if(t.lateral&&e.push("LATERAL"),t.is_rowsfrom){if(e.push("ROWS FROM"),t.functions&&t.functions.length>0){let i=c.unwrapList(t.functions).filter(r=>r!=null).map(r=>{try{if(this.getNodeType(r)==="List"){let a=this.getNodeData(r);if(a&&a.items&&Array.isArray(a.items)){let u=a.items;if(u.length>=2){let o=this.visit(u[0],s),l=this.getNodeData(u[1]);if(l&&l.items&&Array.isArray(l.items)){let f=l.items.map(m=>this.visit(m,s)).filter(m=>m&&m.trim());if(f.length>0)return `${o} AS (${f.join(", ")})`}return o}else if(u.length===1)return this.visit(u[0],s)}}return this.visit(r,s)}catch(n){return console.warn(`Error processing function in RangeFunction: ${n instanceof Error?n.message:String(n)}`),""}}).filter(r=>r&&r.trim());i.length>0&&e.push(`(${i.join(", ")})`);}}else if(t.functions&&t.functions.length>0){let i=c.unwrapList(t.functions).filter(r=>r!=null).map(r=>{try{if(this.getNodeType(r)==="List"){let a=this.getNodeData(r);if(a&&a.items&&Array.isArray(a.items)){let u=a.items;if(u.length>=1)return this.visit(u[0],s)}}return this.visit(r,s)}catch(n){return console.warn(`Error processing function in RangeFunction: ${n instanceof Error?n.message:String(n)}`),""}}).filter(r=>r&&r.trim());i.length>0&&e.push(i.join(", "));}if(t.ordinality&&e.push("WITH ORDINALITY"),t.alias)if(t.coldeflist&&t.coldeflist.length>0){let i=t.alias.aliasname,r=c.unwrapList(t.coldeflist).map(n=>this.visit(n,s)).filter(n=>n&&n.trim());e.push(`${i} (${r.join(", ")})`);}else e.push(this.Alias(t.alias,s));else if(t.coldeflist&&t.coldeflist.length>0){let i=c.unwrapList(t.coldeflist).map(r=>this.visit(r,s)).filter(r=>r&&r.trim());e.push(`AS (${i.join(", ")})`);}return e.join(" ")}XmlExpr(t,s){if(t.op==="IS_XMLPI")if(t.name&&t.args&&t.args.length>0){let i=c.unwrapList(t.args).map(r=>this.visit(r,s));return `xmlpi(name ${h.quoteIdentifier(t.name)}, ${i.join(", ")})`}else return t.name?`xmlpi(name ${h.quoteIdentifier(t.name)})`:"XMLPI()";let e=[];switch(t.op){case "IS_XMLCONCAT":e.push("XMLCONCAT");break;case "IS_XMLELEMENT":e.push("XMLELEMENT");let i=[];if(t.name&&i.push(`NAME ${h.quoteIdentifier(t.name)}`),t.named_args&&t.named_args.length>0){let n=c.unwrapList(t.named_args).map(a=>this.visit(a,s));i.push(`XMLATTRIBUTES(${n.join(", ")})`);}if(t.args&&t.args.length>0){let n=c.unwrapList(t.args).map(a=>this.visit(a,s));i.push(...n);}i.length>0&&e.push(`(${i.join(", ")})`);break;case "IS_XMLFOREST":e.push("XMLFOREST");break;case "IS_XMLPARSE":e.push("XMLPARSE");let r=[];if(t.xmloption&&(t.xmloption==="XMLOPTION_DOCUMENT"?r.push("DOCUMENT"):t.xmloption==="XMLOPTION_CONTENT"&&r.push("CONTENT")),t.args&&t.args.length>0){let n=c.unwrapList(t.args).map(a=>this.visit(a,s));n.length>0&&r.push(n[0]);}r.length>0&&e.push(`(${r.join(" ")})`);break;case "IS_XMLROOT":if(e.push("XMLROOT"),t.args&&t.args.length>0){let n=c.unwrapList(t.args),a=[];if(n[0]&&a.push(this.visit(n[0],s)),n[1]){let u=n[1];u.A_Const&&u.A_Const.isnull?a.push("version NO VALUE"):a.push(`version ${this.visit(u,s)}`);}if(n[2]){let u=n[2];u.A_Const&&u.A_Const.ival!==void 0?u.A_Const.ival.ival===1?a.push("STANDALONE NO"):u.A_Const.ival.ival===2?a.push("STANDALONE NO VALUE"):u.A_Const.ival.ival===3||(Object.keys(u.A_Const.ival).length===0?a.push("STANDALONE YES"):a.push(`STANDALONE ${this.visit(u,s)}`)):a.push(`STANDALONE ${this.visit(u,s)}`);}a.length>0&&e.push(`(${a.join(", ")})`);}break;case "IS_XMLSERIALIZE":e.push("XMLSERIALIZE");break;case "IS_DOCUMENT":if(t.args&&t.args.length>0){let n=c.unwrapList(t.args).map(a=>this.visit(a,s));e.push(`${n[0]} IS DOCUMENT`);}else e.push("IS DOCUMENT");break;default:throw new Error(`Unsupported XmlExpr op: ${t.op}`)}if(t.op!=="IS_XMLELEMENT"&&t.op!=="IS_XMLPARSE"&&t.op!=="IS_XMLROOT"&&t.op!=="IS_DOCUMENT"){if(t.name){let i=h.quoteIdentifier(t.name);e.push(`NAME ${i}`);}if(t.args&&t.args.length>0){let i=c.unwrapList(t.args).map(r=>this.visit(r,s));e.push(`(${i.join(", ")})`);}}if(t.named_args&&t.named_args.length>0&&t.op!=="IS_XMLELEMENT"){let i=c.unwrapList(t.named_args).map(r=>this.visit(r,s));t.op==="IS_XMLFOREST"?e.push(`(${i.join(", ")})`):e.push(`XMLATTRIBUTES(${i.join(", ")})`);}return e.join(" ")}schemaname(t,s){if(typeof t=="string")return h.quoteIdentifier(t);if(t&&t.String&&t.String.sval)return h.quoteIdentifier(t.String.sval);if(t&&typeof t=="object"){if(t.sval!==void 0)return h.quoteIdentifier(t.sval);if(t.List&&Array.isArray(t.List.items)){let e=t.List.items;if(e.length>0&&e[0].String&&e[0].String.sval)return h.quoteIdentifier(e[0].String.sval)}return t.val!==void 0?h.quoteIdentifier(t.val):""}return ""}RangeTableSample(t,s){let e=[];if(t.relation&&e.push(this.visit(t.relation,s)),e.push("TABLESAMPLE"),t.method&&t.method.length>0){let i=t.method.map(r=>this.visit(r,s));e.push(i.join("."));}if(t.args&&t.args.length>0){let i=t.args.map(r=>this.visit(r,s));e.push(`(${i.join(", ")})`);}return t.repeatable&&(e.push("REPEATABLE"),e.push(`(${this.visit(t.repeatable,s)})`)),e.join(" ")}XmlSerialize(t,s){let e=["XMLSERIALIZE"];return e.push("("),t.typeName&&(t.xmloption==="XMLOPTION_DOCUMENT"?e.push("DOCUMENT"):e.push("CONTENT"),e.push(this.visit(t.expr,s)),e.push("AS"),e.push(this.TypeName(t.typeName,s))),e.push(")"),e.join(" ")}ctes(t,s){if(!t||!Array.isArray(t))return "";let e=["WITH"];t.length>0&&t[0]&&t[0].CommonTableExpr&&t[0].CommonTableExpr.recursive&&e.push("RECURSIVE");let i=t.map(r=>this.visit(r,s));return e.push(i.join(", ")),e.join(" ")}RuleStmt(t,s){let e=["CREATE"];if(t.replace&&e.push("OR REPLACE"),e.push("RULE"),t.rulename&&e.push(h.quoteIdentifier(t.rulename)),e.push("AS ON"),t.event)switch(t.event){case "CMD_SELECT":e.push("SELECT");break;case "CMD_INSERT":e.push("INSERT");break;case "CMD_UPDATE":e.push("UPDATE");break;case "CMD_DELETE":e.push("DELETE");break;default:e.push(t.event.toString());}if(e.push("TO"),t.relation&&e.push(this.RangeVar(t.relation,s)),t.whereClause&&(e.push("WHERE"),e.push(this.visit(t.whereClause,s))),e.push("DO"),t.instead&&e.push("INSTEAD"),t.actions&&t.actions.length>0)if(t.actions.length===1)e.push(this.visit(t.actions[0],s));else {e.push("(");let i=c.unwrapList(t.actions).map(r=>this.visit(r,s));e.push(i.join("; ")),e.push(")");}else e.push("NOTHING");return e.join(" ")}RangeSubselect(t,s){let e=[];return t.lateral&&e.push("LATERAL"),t.subquery&&(e.push("("),e.push(this.visit(t.subquery,s)),e.push(")")),t.alias&&e.push(this.Alias(t.alias,s)),e.join(" ")}relname(t,s){return typeof t=="string"?h.quoteIdentifier(t):t&&t.String&&t.String.sval?h.quoteIdentifier(t.String.sval):t&&typeof t=="object"&&t.relname?h.quoteIdentifier(t.relname):this.visit(t,s)}rel(t,s){return typeof t=="string"?h.quoteIdentifier(t):t&&t.String&&t.String.sval?h.quoteIdentifier(t.String.sval):t&&t.RangeVar?this.RangeVar(t.RangeVar,s):t&&typeof t=="object"&&t.relname?h.quoteIdentifier(t.relname):this.visit(t,s)}objname(t,s){return typeof t=="string"?h.quoteIdentifier(t):t&&t.String&&t.String.sval?h.quoteIdentifier(t.String.sval):Array.isArray(t)?t.map(i=>i&&i.String&&i.String.sval?h.quoteIdentifier(i.String.sval):this.visit(i,s)).join("."):this.visit(t,s)}SQLValueFunction(t,s){switch(t.op){case "SVFOP_CURRENT_DATE":return "CURRENT_DATE";case "SVFOP_CURRENT_TIME":return "CURRENT_TIME";case "SVFOP_CURRENT_TIME_N":return `CURRENT_TIME(${t.typmod||0})`;case "SVFOP_CURRENT_TIMESTAMP":return "CURRENT_TIMESTAMP";case "SVFOP_CURRENT_TIMESTAMP_N":return `CURRENT_TIMESTAMP(${t.typmod||0})`;case "SVFOP_LOCALTIME":return "LOCALTIME";case "SVFOP_LOCALTIME_N":return `LOCALTIME(${t.typmod||0})`;case "SVFOP_LOCALTIMESTAMP":return "LOCALTIMESTAMP";case "SVFOP_LOCALTIMESTAMP_N":return `LOCALTIMESTAMP(${t.typmod||0})`;case "SVFOP_CURRENT_ROLE":return "CURRENT_ROLE";case "SVFOP_CURRENT_USER":return "CURRENT_USER";case "SVFOP_USER":return "USER";case "SVFOP_SESSION_USER":return "SESSION_USER";case "SVFOP_CURRENT_CATALOG":return "CURRENT_CATALOG";case "SVFOP_CURRENT_SCHEMA":return "CURRENT_SCHEMA";default:throw new Error(`Unsupported SQLValueFunction op: ${t.op}`)}}GroupingFunc(t,s){let e=["GROUPING"];if(t.args&&t.args.length>0){let i=c.unwrapList(t.args).map(r=>this.visit(r,s));e.push(`(${i.join(", ")})`);}else e.push("()");return e.join("")}MultiAssignRef(t,s){let e=[];return t.source&&e.push(this.visit(t.source,s)),t.colno>0&&e.push(`[${t.colno}]`),e.join("")}SetToDefault(t,s){return "DEFAULT"}CurrentOfExpr(t,s){let e=["CURRENT OF"];return t.cursor_name&&e.push(h.quoteIdentifier(t.cursor_name)),t.cursor_param>0&&e.push(`$${t.cursor_param}`),e.join(" ")}TableLikeClause(t,s){let e=["LIKE"];if(t.relation&&e.push(this.visit(t.relation,s)),t.options&&typeof t.options=="number")if(t.options===2147483647||t.options===2147483647)e.push("INCLUDING ALL");else {let i=[];t.options&1&&i.push("INCLUDING COMMENTS"),t.options&4&&i.push("INCLUDING CONSTRAINTS"),t.options&8&&i.push("INCLUDING DEFAULTS"),t.options&16&&i.push("INCLUDING GENERATED"),t.options&32&&i.push("INCLUDING IDENTITY"),t.options&64&&i.push("INCLUDING INDEXES"),t.options&128&&i.push("INCLUDING STATISTICS"),t.options&256&&i.push("INCLUDING STORAGE"),i.length>0&&e.push(i.join(" "));}return e.join(" ")}AlterFunctionStmt(t,s){let e=["ALTER"];if(t.objtype==="OBJECT_PROCEDURE"?e.push("PROCEDURE"):e.push("FUNCTION"),t.func&&e.push(this.ObjectWithArgs(t.func,s)),t.actions&&t.actions.length>0){let i=s.spawn("AlterFunctionStmt"),r=c.unwrapList(t.actions).map(n=>this.visit(n,i));e.push(r.join(" "));}return e.join(" ")}AlterObjectSchemaStmt(t,s){let e=["ALTER"];try{e.push(this.getObjectTypeKeyword(t.objectType));}catch{e.push(t.objectType.toString());}if(t.missing_ok&&e.push("IF EXISTS"),t.relation&&(t.objectType==="OBJECT_TABLE"||t.objectType==="OBJECT_FOREIGN_TABLE"||t.objectType==="OBJECT_MATVIEW"))e.push(this.RangeVar(t.relation,s));else if(t.object)if(t.objectType==="OBJECT_DOMAIN"&&t.object.List){let i=c.unwrapList(t.object);if(i.length===2){let r=i[0].String?.sval||"",n=i[1].String?.sval||"";e.push(h.quoteQualifiedIdentifier(r,n));}else e.push(this.visit(t.object,s));}else if(t.objectType==="OBJECT_TYPE"&&t.object.List){let i=c.unwrapList(t.object);if(i.length===2){let r=i[0].String?.sval||"",n=i[1].String?.sval||"";e.push(h.quoteQualifiedIdentifier(r,n));}else e.push(this.visit(t.object,s));}else if(t.objectType==="OBJECT_CONVERSION"&&t.object.List){let i=c.unwrapList(t.object);if(i.length===2){let r=i[0].String?.sval||"",n=i[1].String?.sval||"";e.push(h.quoteQualifiedIdentifier(r,n));}else e.push(this.visit(t.object,s));}else if(t.objectType==="OBJECT_TSPARSER"&&t.object.List){let i=c.unwrapList(t.object);if(i.length===2){let r=i[0].String?.sval||"",n=i[1].String?.sval||"";e.push(h.quoteQualifiedIdentifier(r,n));}else e.push(this.visit(t.object,s));}else if(t.objectType==="OBJECT_TSCONFIGURATION"&&t.object.List){let i=c.unwrapList(t.object);if(i.length===2){let r=i[0].String?.sval||"",n=i[1].String?.sval||"";e.push(h.quoteQualifiedIdentifier(r,n));}else e.push(this.visit(t.object,s));}else if(t.objectType==="OBJECT_TSTEMPLATE"&&t.object.List){let i=c.unwrapList(t.object);if(i.length===2){let r=i[0].String?.sval||"",n=i[1].String?.sval||"";e.push(h.quoteQualifiedIdentifier(r,n));}else e.push(this.visit(t.object,s));}else if(t.objectType==="OBJECT_TSDICTIONARY"&&t.object.List){let i=c.unwrapList(t.object);if(i.length===2){let r=i[0].String?.sval||"",n=i[1].String?.sval||"";e.push(h.quoteQualifiedIdentifier(r,n));}else e.push(this.visit(t.object,s));}else if(t.objectType==="OBJECT_OPCLASS"&&t.object.List){let i=c.unwrapList(t.object);if(i.length===2){let r=i[0].String?.sval||"",n=i[1].String?.sval||"";e.push(`${h.quoteIdentifier(n)} USING ${r}`);}else if(i.length===3){let r=i[0].String?.sval||"",n=i[1].String?.sval||"",a=i[2].String?.sval||"";e.push(`${h.quoteQualifiedIdentifier(n,a)} USING ${r}`);}else e.push(this.visit(t.object,s));}else if(t.objectType==="OBJECT_OPFAMILY"&&t.object.List){let i=c.unwrapList(t.object);if(i.length===2){let r=i[0].String?.sval||"",n=i[1].String?.sval||"";e.push(`${h.quoteIdentifier(n)} USING ${r}`);}else if(i.length===3){let r=i[0].String?.sval||"",n=i[1].String?.sval||"",a=i[2].String?.sval||"";e.push(`${h.quoteQualifiedIdentifier(n,a)} USING ${r}`);}else e.push(this.visit(t.object,s));}else e.push(this.visit(t.object,s));return e.push("SET SCHEMA"),t.newschema&&e.push(h.quoteIdentifier(t.newschema)),e.join(" ")}AlterRoleSetStmt(t,s){let e=["ALTER","ROLE"];if(t.role?e.push(this.RoleSpec(t.role,s)):e.push("ALL"),t.database&&(e.push("IN DATABASE"),e.push(this.quoteIfNeeded(t.database))),t.setstmt){if(t.setstmt.kind==="VAR_RESET")e.push("RESET"),t.setstmt.name&&e.push(t.setstmt.name);else if(e.push("SET"),t.setstmt.name&&e.push(t.setstmt.name),t.setstmt.args&&t.setstmt.args.length>0){e.push("TO");let i=c.unwrapList(t.setstmt.args).map(r=>this.visit(r,s)).join(", ");e.push(i);}}return e.join(" ")}CreateForeignTableStmt(t,s){let e=["CREATE FOREIGN TABLE"];if(t.base&&t.base.relation){let i=s.spawn("CreateForeignTableStmt");e.push(this.RangeVar(t.base.relation,i));}if(t.base&&t.base.tableElts){let i=c.unwrapList(t.base.tableElts).map(r=>this.visit(r,s));e.push(`(${i.join(", ")})`);}else t.base?.partbound||e.push("()");if(t.base&&t.base.inhRelations&&t.base.inhRelations.length>0)if(t.base.partbound){let i=c.unwrapList(t.base.inhRelations).map(r=>this.visit(r,s));e.push(`PARTITION OF ${i.join(", ")}`),t.base.partbound.is_default&&e.push("DEFAULT");}else {let i=c.unwrapList(t.base.inhRelations).map(r=>this.visit(r,s));e.push(`INHERITS (${i.join(", ")})`);}if(t.servername&&(e.push("SERVER"),e.push(h.quoteIdentifier(t.servername))),t.options&&t.options.length>0){let i=s.spawn("CreateForeignTableStmt"),r=c.unwrapList(t.options).map(n=>this.visit(n,i));e.push(`OPTIONS (${r.join(", ")})`);}return e.join(" ")}containsMultilineStringLiteral(t){return /'[^']*\n[^']*'/g.test(t)}};});var ue=C(()=>{ps();ae();Z.deparse;});function ot(p){if("String"in p)return p.String.sval}function M(p){return p.map(ot).filter(t=>t!=null)}function q(p){return p==null?[]:p.List!==void 0?p.List.items||[]:Array.isArray(p)?p:[p]}function kt(p){return h.quoteIdentifier(p)}function tt(p){return Object.keys(p)[0]}function cs(p){if("A_Const"in p){if(p.A_Const.ival)return p.A_Const.ival.ival;if(p.A_Const.fval)return p.A_Const.fval.fval;if(p.A_Const.sval)return p.A_Const.sval.sval;if(p.A_Const.boolval)return p.A_Const.boolval.boolval;if(p.A_Const.isnull)return null}}var V=C(()=>{ue();});function hs(p){let t=p.toLowerCase().trim();if(t.startsWith("_")||t.endsWith("[]"))return "TEXT";let s=Ti[t];if(!s)throw new G(`Unsupported PostgreSQL type: "${p}"`);return s}function jt(p){let t=p.toLowerCase();return ["serial","serial4","bigserial","serial8","smallserial","serial2"].includes(t)}function $t(p){let t=p.toLowerCase();return ["varchar","character varying","char","character","bpchar"].includes(t)}function Ut(p){let t=p.toLowerCase();return ["numeric","decimal"].includes(t)}var G,R,Ti,fs,Si,Ft,et=C(()=>{V();G=class extends Error{},R=class extends G{constructor(s,e){super(e??`Unsupported node type: ${tt(s)}`);this.node=s;}},Ti={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"},fs=["<",">","<=",">=","=","<>","!=","+","-","*","/","%","&","|","<<",">>","||","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","->>"];Si={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(Si));});var le=$e(Bt=>{Object.defineProperty(Bt,"__esModule",{value:true});Bt.SqlFormatter=void 0;var oe=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=oe;});var ms=$e(st=>{Object.defineProperty(st,"__esModule",{value:true});st.BaseVisitor=st.DeparserContext=void 0;var Ci=le(),pe=class p{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:o,insertColumns:l,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 Ci.SqlFormatter(`
45
- `," ",s),this.select=n,this.from=a,this.group=u,this.sort=o,this.insertColumns=l,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 p({indentLevel:this.indentLevel,prettyMode:this.prettyMode,isStringLiteral:this.isStringLiteral,parentNodeTypes:[...this.parentNodeTypes,t],formatter:this.formatter,select:this.select,from:this.from,group:this.group,sort:this.sort,insertColumns:this.insertColumns,update:this.update,bool:this.bool,isColumnConstraint:this.isColumnConstraint,isDomainConstraint:this.isDomainConstraint,alterColumnOptions:this.alterColumnOptions,alterTableOptions:this.alterTableOptions,isEnumValue:this.isEnumValue,objtype:this.objtype,subtype:this.subtype,...s})}indent(t,s){if(!this.prettyMode)return t;let e=s!==void 0?s:this.indentLevel+1;return this.formatter.indent(t,e)}newline(){return this.formatter.newline()}parens(t){return this.formatter.parens(t)}format(t,s){return this.formatter.format(t,s)}isPretty(){return this.formatter.isPretty()}};st.DeparserContext=pe;var ce=class{getNodeType(t){return Object.keys(t)[0]}getNodeData(t){let s=this.getNodeType(t);return t[s]}formatList(t,s=", ",e="",i){return !t||t.length===0?"":t.map(r=>`${e}${i(r)}`).join(s)}formatParts(t,s=" "){return t.filter(e=>e!=null&&e!=="").join(s)}formatParens(t){return `(${t})`}formatIndent(t,s=1){return t}};st.BaseVisitor=ce;});var Mt,Es=C(()=>{et();V();Mt=class{constructor(t){this.ast=t;this.result=[...this.walk(this.ast,[],{trackPaths:["returningList"]})];}result=[];*walk(t=this.ast,s=[],e={}){if(!t||typeof t!="object")return;let{trackPaths:i=[]}=e;if(Array.isArray(t)){for(let n=0;n<t.length;n++)yield*this.walk(t[n],s,e);return}let r=Object.keys(t);if(r.length===1&&r[0][0]>="A"&&r[0][0]<="Z"){let n=r[0];yield {node:t,path:s},yield*this.walk(t[n],[...s,n],e);}else for(let[n,a]of Object.entries(t))if(a&&typeof a=="object"){let u=i.includes(n)?[...s,n]:s;yield*this.walk(a,u,e);}}containsUnsupportedNode(){for(let{node:t}of this.result){let s=tt(t),e=Ft.get(s);if(e&&e.react==="error")return true}}hasFuncCall(){for(let{node:t}of this.result)if("FuncCall"in t)return true;return false}getFuncCalls(){return Array.from(this.result).map(({node:t})=>t).filter(t=>"FuncCall"in t).map(t=>t.FuncCall)}getFuncCallNames(){return this.getFuncCalls().flatMap(t=>t.funcname?.map(s=>s.String?.sval||s.String?.str))}hasSqlValueFunction(){for(let{node:t}of this.result)if("SQLValueFunction"in t)return true;return false}getSqlValueFunctions(){return Array.from(this.result).map(({node:t})=>t).filter(t=>"SQLValueFunction"in t).map(t=>t.SQLValueFunction)}getSqlValueFunctionNames(){return this.getSqlValueFunctions().map(t=>t.op)}hasUnsafeStar(){let t=this.result.filter(({node:s})=>"A_Star"in s);if(t.length===0)return false;for(let{path:s}of t)if(!s.includes("SelectStmt")&&!s.includes("returningList"))return true;return false}getRelationDefinitions(){return this.result.filter(({node:s})=>"CreateStmt"in s).map(({node:s})=>s.CreateStmt).map(s=>({relation:{relname:s.relation?.relname??"",inh:s.relation?.inh,relpersistence:s.relation?.relpersistence},columns:s.tableElts?.map(e=>{let i=e.ColumnDef?.typeName?.names?.map(n=>"String"in n?n.String.sval:""),r=i?.some(n=>n.toLowerCase().includes("pg_catalog"));return {name:e.ColumnDef?.colname??"",is_local:e.ColumnDef?.is_local,pg_catalog:r,type:i?.filter(n=>!n.toLowerCase().includes("pg_catalog"))[0]??"",types:i,constraints:e.ColumnDef?.constraints}})}))}getRelationColumnTypes(){return {has_non_pg_catalog_types:this.getRelationDefinitions().some(t=>t.columns?.some(s=>!s.pg_catalog)),types:Array.from(new Set(this.getRelationDefinitions().flatMap(t=>t.columns?.map(s=>s.type))))}}};});var Ai,Ni,Ri,Oi,it,qt,gs=C(()=>{et();Ai=["DECLARE","IF","ELSIF","ELSE","LOOP","WHILE","FOR","FOREACH","EXCEPTION","RAISE","PERFORM","EXECUTE","SELECT"],Ni=/^NEW\.(\w+)\s*(?::=|=)\s*(.+)$/is,Ri=/^RETURN\s+(NEW|OLD)$/i,Oi=/^(INSERT|UPDATE|DELETE)\b/i,it=class extends G{constructor(s,e,i){super(i??`Unsupported PL/pgSQL: ${s}`);this.hint=s;this.body=e;}},qt=class{parse(t){let s=this.extractBlock(t),e=this.splitStatements(s),i=[],r=null;for(let n of e){let a=n.trim();if(!a)continue;this.rejectUnsupported(a);let u=a.match(Ri);if(u){r=u[1].toUpperCase(),i.push({type:"return",value:r});continue}let o=a.match(Ni);if(o){i.push({type:"assignment",column:o[1],expression:o[2].trim()});continue}if(Oi.test(a)){i.push({type:"dml",sql:a});continue}throw new it(`"${a.substring(0,80)}" is not translatable to SQLite`,s)}if(!r)throw new G("Trigger function body must end with RETURN NEW or RETURN OLD");return {statements:i,returnValue:r}}extractBlock(t){let s=t.trim(),e=s.toUpperCase();if(/^\s*DECLARE\b/i.test(s))throw new it('"DECLARE" is not translatable to SQLite',t);let i=e.indexOf("BEGIN"),r=e.lastIndexOf("END");if(i===-1||r===-1||r<=i)throw new it("Expected BEGIN ... END block in trigger function body",t);return s.slice(i+5,r).trim()}splitStatements(t){let s=[],e="",i=0,r=false,n="";for(let u=0;u<t.length;u++){let o=t[u];if(r){e+=o,o===n&&(u+1<t.length&&t[u+1]===n?e+=t[++u]:r=false);continue}if(o==="'"||o==='"'){r=true,n=o,e+=o;continue}if(o==="("){i++,e+=o;continue}if(o===")"){i--,e+=o;continue}if(o===";"&&i===0){s.push(e.trim()),e="";continue}e+=o;}let a=e.trim();return a&&s.push(a),s}rejectUnsupported(t){let s=t.match(/^(\w+)/)?.[1]?.toUpperCase();if(s&&Ai.includes(s))throw new it(`"${s}" is not translatable to SQLite`,t)}};});var lt,fe=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(()=>{fe();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 pt,he=C(()=>{Vt();pt=class extends W{constructor(t){super({...t,isSerial:true});}};});function yi(p,t){let{precision:s,scale:e}=t,i=10**e,r=10**(s-e);return Math.abs(Math.round(p*i)-p*i)<1e-4&&Math.abs(p)<r}var ct,me=C(()=>{k();ct=class extends L{numericPrecision;constructor(t,s){super(t),this.numericPrecision=s;}get isShimBacked(){return this.numericPrecision!==void 0}get sqliteType(){return "REAL"}checkConstraint(){if(this.numericPrecision){let{precision:t,scale:s}=this.numericPrecision,e=this.context.column,i=10**s,r=10**(t-s);return `ABS(ROUND(${e} * ${i}) - ${e} * ${i}) < 0.0001 AND ABS(${e}) < ${r}`}return null}validateStorage(t){if(this.isNullish(t))return this.validationPass();if(typeof t!="number"||!Number.isFinite(t))return this.validationFail("Expected finite number.","Patch rows with finite numbers.");if(this.numericPrecision){let{precision:s,scale:e}=this.numericPrecision;if(!yi(t,this.numericPrecision))return this.validationFail(`Does not fit numeric(${s}, ${e}).`,"Patch rows within numeric precision.")}return this.validationPass()}};});var I,v=C(()=>{k();I=class extends L{lengthConstraint;constructor(t,s){super(t),this.lengthConstraint=s;}get isShimBacked(){return this.lengthConstraint!==void 0}get sqliteType(){return "TEXT"}checkConstraint(){return this.lengthConstraint!==void 0?`length(${this.context.column}) <= ${this.lengthConstraint}`:null}validateStorage(t){return this.isNullish(t)?this.validationPass():typeof t!="string"?this.validationFail("Expected text.","Patch rows with text values."):this.lengthConstraint!==void 0&&Array.from(t).length>this.lengthConstraint?this.validationFail(`Exceeds length ${this.lengthConstraint}.`,"Patch rows with shorter text."):this.validationPass()}};});var ft,Ee=C(()=>{k();ft=class extends L{get sqliteType(){return "BLOB"}};});var ht,ge=C(()=>{k();ht=class extends L{get isShimBacked(){return true}get sqliteType(){return "INTEGER"}checkConstraint(){return `${this.context.column} IN (0, 1)`}serialize(t){if(this.isNullish(t))return t;if(t===true||t===1)return 1;if(t===false||t===0)return 0;throw this.checkError("boolean_range",t)}deserialize(t){return this.isNullish(t)?t:t===1?true:t===0?false:t}validateStorage(t){return this.isNullish(t)?this.validationPass():t===1||t===0?this.validationPass():this.validationFail("Expected 0 or 1.","Patch rows with boolean values.")}};});function Ts(p){try{return {ok:!0,value:JSON.parse(p)}}catch{return {ok:false}}}var mt,Te=C(()=>{k();mt=class extends L{get isShimBacked(){return true}get sqliteType(){return "TEXT"}checkConstraint(){let t=this.context.column;return `${t} IS NULL OR json_valid(${t})`}serialize(t){if(this.isNullish(t))return t;try{return JSON.stringify(t)}catch{throw this.checkError("json_valid",t)}}deserialize(t){if(this.isNullish(t))return t;if(typeof t=="string"){let s=Ts(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."):Ts(t).ok?this.validationPass():this.validationFail("Invalid JSON text.","Patch rows with valid JSON.")}};});function bi(p){if(!/^\d{4}-\d{2}-\d{2}$/.test(p))return false;let t=new Date(`${p}T00:00:00.000Z`);return !Number.isNaN(t.getTime())&&t.toISOString().slice(0,10)===p}var Et,Se=C(()=>{v();Et=class extends I{get isShimBacked(){return true}checkConstraint(){let t=this.context.column;return `${t} IS NULL OR date(${t}) IS NOT NULL`}validateStorage(t){return this.isNullish(t)?this.validationPass():typeof t!="string"||!bi(t)?this.validationFail("Invalid date.","Patch rows with YYYY-MM-DD dates."):this.validationPass()}};});function Ii(p){let t=p.match(/^(\d{2}):(\d{2})(?::(\d{2})(?:\.\d{1,6})?)?([+-](\d{2}):?(\d{2}))?$/);if(!t)return false;let s=Number(t[1]),e=Number(t[2]),i=t[3]===void 0?0:Number(t[3]),r=t[5]===void 0?null:Number(t[5]),n=t[6]===void 0?null:Number(t[6]),a=r===null||n!==null&&r<=15&&n<=59;return s<=24&&e<=59&&i<=59&&(s!==24||e===0&&i===0)&&a}var gt,Ce=C(()=>{v();gt=class extends I{get isShimBacked(){return true}checkConstraint(){let t=this.context.column;return `${t} IS NULL OR time(${t}) IS NOT NULL`}validateStorage(t){return this.isNullish(t)?this.validationPass():typeof t!="string"||!Ii(t)?this.validationFail("Invalid time.","Patch rows with HH:MM[:SS] times."):this.validationPass()}};});function Li(p){let t=p.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]),o=t[9]===void 0?null:Number(t[9]),l=new Date(Date.UTC(s,e-1,i)),f=l.getUTCFullYear()===s&&l.getUTCMonth()===e-1&&l.getUTCDate()===i,m=r<=24&&n<=59&&a<=59&&(r!==24||n===0&&a===0),T=u===null||o!==null&&u<=15&&o<=59;return f&&m&&T}var Tt,Ae=C(()=>{v();Tt=class extends I{get isShimBacked(){return true}checkConstraint(){let t=this.context.column;return `${t} IS NULL OR datetime(${t}) IS NOT NULL`}validateStorage(t){return this.isNullish(t)?this.validationPass():typeof t!="string"||!Li(t)?this.validationFail("Invalid timestamp.","Patch rows with ISO timestamps."):this.validationPass()}};});var St,Ne=C(()=>{v();St=class extends I{get isShimBacked(){return true}validateStorage(t){return this.isNullish(t)?this.validationPass():typeof t!="string"||t.trim().length===0?this.validationFail("Expected interval text.","Patch rows with interval strings."):/^-?\d+(?:\.\d+)?$/.test(t.trim())?this.validationFail("Ambiguous numeric interval.","Patch rows with explicit interval strings."):this.validationPass()}};});var Ct,Re=C(()=>{v();Ct=class extends I{enumValues;constructor(t,s){super(t),this.enumValues=s;}get isShimBacked(){return true}checkConstraint(){let t=this.context.column,s=this.enumValues.map(e=>`'${e.replace(/'/g,"''")}'`).join(", ");return `${t} IN (${s})`}serialize(t){if(this.isNullish(t))return t;if(typeof t!="string"||!this.enumValues.includes(t))throw this.checkError("enum_membership",t);return t}validateStorage(t){return this.isNullish(t)?this.validationPass():typeof t!="string"||!this.enumValues.includes(t)?this.validationFail("Invalid enum value.","Patch rows with declared enum values."):this.validationPass()}};});function Ss(p){try{return {ok:!0,value:JSON.parse(p)}}catch{return {ok:false}}}var rt,Oe=C(()=>{k();rt=class extends L{elementField;constructor(t,s){super(t),this.elementField=s;}get sqliteType(){return "TEXT"}get isShimBacked(){return true}checkConstraint(){let t=this.context.column;return `${t} IS NULL OR (json_valid(${t}) AND json_type(${t}) = 'array')`}serialize(t){if(this.isNullish(t))return t;if(!Array.isArray(t))throw this.checkError("array_type",t);return this.elementField?JSON.stringify(t.map(s=>this.elementField.serialize(s))):JSON.stringify(t)}deserialize(t){if(this.isNullish(t))return t;if(typeof t=="string"){let s=Ss(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=Ss(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 Cs(p){return wi.test(p.toLowerCase())}var _i,wi,At,ye=C(()=>{v();_i="????????-????-????-????-????????????",wi=/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/;At=class extends I{get isShimBacked(){return true}checkConstraint(){let t=this.quoteIfNeeded(this.context.column);return `${t} IS NULL OR ${t} GLOB '${_i}'`}serialize(t){if(this.isNullish(t))return t;if(typeof t!="string")throw this.checkError("uuid_format",t);let s=t.toLowerCase();if(!Cs(s))throw this.checkError("uuid_format",t);return s}validateStorage(t){return this.isNullish(t)?this.validationPass():typeof t!="string"||!Cs(t)?this.validationFail("Invalid UUID.","Patch rows with valid UUIDs."):this.validationPass()}};});function vi(p){let t=p.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 di(p){let t=p.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(p){if(!p.includes(":"))return false;try{return new URL(`http://[${p}]/`),!0}catch{return false}}function As(p){let t=vi(p);return t?di(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 Nt,be=C(()=>{v();Nt=class extends I{get isShimBacked(){return true}checkConstraint(){let t=this.quoteIfNeeded(this.context.column);return `${t} IS NULL OR (length(${t}) BETWEEN 3 AND 49 AND (instr(${t}, '.') > 0 OR instr(${t}, ':') > 0))`}serialize(t){if(this.isNullish(t))return t;if(typeof t!="string")throw this.checkError("inet_format",t);let s=t.trim();if(!As(s))throw this.checkError("inet_format",t);return s}validateStorage(t){return this.isNullish(t)?this.validationPass():typeof t!="string"||!As(t.trim())?this.validationFail("Invalid inet address.","Patch rows with valid inet strings."):this.validationPass()}};});var Rt,Ie=C(()=>{v();Rt=class extends I{serialize(t){throw new Error(`Unsupported type "${this.context.pgTypeName}" for ${this.context.table}.${this.context.column}`)}deserialize(t){throw new Error(`Unsupported type "${this.context.pgTypeName}" for ${this.context.table}.${this.context.column}`)}toColumnDDL(){throw new Error(`Unsupported type "${this.context.pgTypeName}" for ${this.context.table}.${this.context.column}`)}};});function J(p,t){if(t?.isArray){let e=J(p,{...t,isArray:false});return new rt(p,e)}if(t?.enumValues)return new Ct(p,t.enumValues);let s=p.pgTypeName.toLowerCase().trim();if(s.startsWith("_")||s.endsWith("[]")){let e=s.startsWith("_")?s.slice(1):s.slice(0,-2),i={...p,pgTypeName:e},r=J(i);return new rt(p,r)}return ki.has(s)?new pt(p):Pi.has(s)?new W(p):Fi.has(s)?new ht(p):Bi.has(s)?new mt(p):Gi.has(s)?new Et(p):Wi.has(s)?new gt(p):Ji.has(s)?new Tt(p):xi.has(s)?new St(p):Ui.has(s)?new ft(p):ji.has(s)?new ct(p,t?.numericPrecision):Mi.has(s)?new At(p):qi.has(s)?new I(p,63):Vi.has(s)?new Nt(p):$i.has(s)?new I(p,t?.lengthConstraint):new Rt(p)}var Pi,ki,ji,$i,Ui,Fi,Bi,Mi,qi,Vi,Gi,Wi,Ji,xi,Le=C(()=>{Vt();he();me();v();Ee();ge();Te();Se();Ce();Ae();Ne();Re();Oe();ye();be();Ie();Pi=new Set(["int2","smallint","int4","integer","int","int8","bigint"]),ki=new Set(["serial","serial4","bigserial","serial8","smallserial","serial2"]),ji=new Set(["float4","real","float8","double precision","numeric","decimal"]),$i=new Set(["text","varchar","character varying","char","character","bpchar"]),Ui=new Set(["bytea"]),Fi=new Set(["bool","boolean"]),Bi=new Set(["json","jsonb"]),Mi=new Set(["uuid"]),qi=new Set(["name"]),Vi=new Set(["inet"]),Gi=new Set(["date"]),Wi=new Set(["time","timetz","time without time zone","time with time zone"]),Ji=new Set(["timestamp","timestamptz","timestamp without time zone","timestamp with time zone"]),xi=new Set(["interval"]);});function _e(p,t="auto"){let s=p.toLowerCase(),e=Gt[s];if(!e)return null;switch(t){case "translate":{if(!e.sqlite)throw new Error(`No SQLite translation for function "${p}"`);return {sqliteExpr:e.sqlite(),jsFn:null}}case "synthetic":{if(!e.js)throw new Error(`No JS implementation for function "${p}"`);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 Ns,Gt,we=C(()=>{Ns="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:()=>Ns,js:()=>crypto.randomUUID()},uuid_generate_v4:{sqlite:()=>Ns,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 Rs,Os,Wt,ys=C(()=>{ue();et();Rs=Ue(ms());V();Os=Ue(le());V();Es();Zt();gs();se();ee();ie();bt();Le();we();Wt=class extends Z{enums;schemaHandling;warnings=[];helper;config;triggerFunctions=new Map;plpgsqlParser=new qt;introspection;functionResolution;constructor(t,{enums:s,schemaHandling:e,introspection:i,...r}={}){super(t,r),this.schemaHandling=e??"default",this.enums=s??new Map,this.helper=new Mt(t),this.config=r,this.introspection=i,this.functionResolution=r?.functionResolution??"translate";}visit(t,s){let e=tt(t),i=Ft.get(e);if(i){if(i.react==="error")throw new R({[e]:t},`Unsupported node type: ${e}`);return i.react==="warn"&&this.warnings.push({type:e,node:t}),""}return super.visit(t,s)}deparse(t,s){if(t==null)return null;if(!s){let e=new Os.SqlFormatter;s=new Rs.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=>Ge(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":hs(i)}ColumnDef(t,s){let e=[],i=t.colname;i&&e.push(this.quoteIfNeeded(i));let r=false,n=false,a=null,u=null,o=null,l=false;if(t.typeName){let f=t.typeName.names?.map(E=>E.String?.sval||E.String?.str).filter(Boolean);o=f&&(f.length===2&&f[0]==="pg_catalog"?f[1]:f[0]),r=!!(o&&jt(o)),l=!!(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(o&&$t(o)&&m.length>0){let E=T(0);typeof E=="number"&&E>0&&(a={maxLen:E});}if(o&&Ut(o)&&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&&o){let f={isArray:l};a&&(f.lengthConstraint=a.maxLen),u&&(f.numericPrecision=u);let m=this.enums.get(o.toLowerCase());m&&(f.enumValues=m);let g=J({schema:"public",table:"",column:i,pgTypeName:o,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(o=>o.String?.sval||o.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 o=t.args[0];if((o?.A_Const?.sval?.sval||o?.String?.sval)==="epoch")return `strftime('%s', ${this.visit(t.args[1],s)})`}let a=(t.args??[]).map(o=>this.visit(o,s));if(t.agg_star)return `${r}(*)`;if(t.agg_distinct)return `${r}(DISTINCT ${a.join(", ")})`;let u=_e(r,this.functionResolution);if(u){if(u.sqliteExpr!==null){let o=u.sqliteExpr;return o.includes("(")?o:`${o}(${a.join(", ")})`}if(u.jsFn!==null){let o=Gt[r];if(o?.sqlite){let l=o.sqlite();return l.includes("(")?l:`${l}(${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(!fs.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],l=["text","varchar","character varying","char","bpchar","name","uuid"].includes(u?.toLowerCase());try{let f=this.parsePgArrayLiteral(n,l);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(l=>"AlterTableCmd"in l&&!i.includes(l.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=[],o=[];for(let l of r){let f=l.AlterTableCmd.subtype;if(n.includes(f)){let m={...t,cmds:[l]};u.push(super.AlterTableStmt(m,s));}else if(a.includes(f))o.push(l.AlterTableCmd);else throw new R({AlterTableStmt:t},`AlterTableCmd with subtype ${f} is not supported in SQLite`)}if(o.length>0){let l=this.getRelationName(t.relation);u.push(this.generateRebuildSql(l,o));}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(o=>o.String?.sval).filter(Boolean).join("."),r=e.find(o=>o.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(o=>o.String?.sval).filter(Boolean).pop();if(!n)throw new Error("Function has no name");let a=e.find(o=>o.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 o=u.join(" OR "),l=this.buildTriggerBody(n,i,s);return [`CREATE TRIGGER ${e}`,`${a} ${o} ON ${i}`,"FOR EACH ROW","BEGIN",...l.map(f=>` ${f};`),"END"].join(`
47
- `)}buildTriggerBody(t,s,e){let i=[],r=[];for(let n of t.statements)if(n.type!=="return"){if(n.type==="assignment"){r.push(n);continue}r.length>0&&(i.push(this.buildAssignmentUpdate(r,s,e)),r.length=0),n.type==="dml"&&i.push(this.translateDml(n.sql,e));}return r.length>0&&i.push(this.buildAssignmentUpdate(r,s,e)),i}buildAssignmentUpdate(t,s,e){let i=t.map(r=>{let n=this.translateExpression(r.expression,e);return `${r.column} = ${n}`});return `UPDATE ${s} SET ${i.join(", ")} WHERE rowid = NEW.rowid`}translateExpression(t,s){try{let e=`SELECT ${t}`,i=t.trim().toLowerCase();return i==="now()"||i==="current_timestamp"?"datetime('now')":t}catch{return t}}translateDml(t,s){return t.replace(/\bnow\(\)/gi,"datetime('now')").replace(/\bcurrent_timestamp\b/gi,"datetime('now')").replace(/\bgen_random_uuid\(\)/gi,this.uuidExpression()).replace(/\buuid_generate_v4\(\)/gi,this.uuidExpression())}uuidExpression(){return "lower(hex(randomblob(4))) || '-' || lower(hex(randomblob(2))) || '-4' || substr(lower(hex(randomblob(2))),2) || '-' || substr('89ab',abs(random()) % 4 + 1, 1) || substr(lower(hex(randomblob(2))),2) || '-' || lower(hex(randomblob(6)))"}NullTest(t,s){if(t.arg?.ColumnRef?.fields?.length>1)throw new R({NullTest:t},"row-level NULL tests are not supported in SQLite");return super.NullTest(t,s)}RenameStmt(t,s){if(!t.renameType)throw new Error("RenameStmt requires renameType");let e=["OBJECT_TABLE","OBJECT_VIEW","OBJECT_COLUMN"];if(t.renameType==="OBJECT_COLUMN"&&(t.relationType==="OBJECT_FOREIGN_TABLE"||t.relationType==="OBJECT_VIEW"))throw new R({RenameStmt:t},`RenameStmt with relationType ${t.relationType} is not supported`);if(!e.includes(t.renameType))throw new R({RenameStmt:t},`RenameStmt with renameType ${t.renameType} is not supported in SQLite`);return super.RenameStmt(t,s)}DropStmt(t,s){let e=t.removeType;if(["OBJECT_TABLE","OBJECT_VIEW","OBJECT_INDEX","OBJECT_TRIGGER"].includes(e))return super.DropStmt(t,s);if(["OBJECT_POLICY"].includes(e))return "";throw new R({DropStmt:t},`DROP with removeType ${e} is not supported in SQLite`)}generateRebuildSql(t,s){if(!this.introspection)throw new Error(`ALTER TABLE on "${t}" requires 12-step rebuild but no introspection was provided. Pass introspection in DeparseOptions to enable column type changes, NOT NULL, defaults, and constraint modifications.`);let e=this.buildDesiredSchema(this.introspection,t,s),i=new X,r=new K,n=i.diff(this.introspection,e);return n.has_changes?r.plan(n,this.introspection,e).steps.filter(u=>!["disable_foreign_keys","begin_transaction","commit_transaction","enable_foreign_keys"].includes(u.type)).map(u=>u.sql).join(`
48
- `):""}buildDesiredSchema(t,s,e){let i={...t,tables:t.tables.map(r=>({...r})),columns:t.columns.map(r=>({...r})),indexes:t.indexes.map(r=>({...r})),foreign_keys:t.foreign_keys.map(r=>({...r})),primary_keys:t.primary_keys.map(r=>({...r})),views:t.views.map(r=>({...r})),triggers:(t.triggers??[]).map(r=>({...r})),check_constraints:t.check_constraints.map(r=>({...r})),unique_constraints:(t.unique_constraints??[]).map(r=>({...r})),comments:(t.comments??[]).map(r=>({...r})),custom_types:t.custom_types.map(r=>({...r}))};for(let r of e){let n=i.columns.findIndex(a=>a.table===s&&a.name===r.name);switch(r.subtype){case "AT_AlterColumnType":{if(n===-1)break;let a=this.extractTypeName(r);a&&(i.columns[n]={...i.columns[n],type:a.toLowerCase()});break}case "AT_SetNotNull":{if(n===-1)break;i.columns[n]={...i.columns[n],nullable:false};break}case "AT_DropNotNull":{if(n===-1)break;i.columns[n]={...i.columns[n],nullable:true};break}case "AT_ColumnDefault":{if(n===-1)break;if(r.def){let a=this.extractDefaultValue(r);i.columns[n]={...i.columns[n],default_value:a};}else i.columns[n]={...i.columns[n],default_value:null};break}case "AT_AddConstraint":case "AT_DropConstraint":{let a=i.tables.findIndex(u=>u.name===s);a!==-1&&(i.tables[a]={...i.tables[a],sql:i.tables[a].sql+" /* modified */"});break}}}return this.rebuildTableSql(i,s),i}rebuildTableSql(t,s){let e=t.tables.findIndex(f=>f.name===s);if(e===-1)return;let i=t.columns.filter(f=>f.table===s),r=t.foreign_keys.filter(f=>f.table===s),n=t.check_constraints.filter(f=>f.table===s),a=i.map(f=>{let m=`${N(f.name)} ${f.type||"TEXT"}`;return f.is_primary_key&&(m+=" PRIMARY KEY"),f.nullable||(m+=" NOT NULL"),f.default_value!=null&&(m+=` DEFAULT ${f.default_value}`),m}),u=r.map(f=>`FOREIGN KEY (${N(f.column)}) REFERENCES ${N(f.ref_table)}(${N(f.ref_column)}) ON UPDATE ${f.on_update} ON DELETE ${f.on_delete}`),o=n.map(f=>`CHECK (${f.expression})`),l=[...a,...u,...o];t.tables[e]={...t.tables[e],sql:`CREATE TABLE ${N(s)} (${l.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,ve=C(()=>{V();et();w=class extends R{constructor(t,s){super(t,`Unsupported expression: ${s}`);}},x=class{deparse(t){if("A_Const"in t){let i=t.A_Const;if(i.boolval!==void 0)return i.boolval.boolval?{}:{$always:false}}let s=Object.keys(t)[0],e=this[s];if(!e)throw new w({[s]:t},`Unsupported expression: ${s}`);return e.call(this,t[s])}deparseValue(t){if("A_Const"in t)return this.A_Const(t.A_Const);if("ColumnRef"in t)return this.ColumnRef(t.ColumnRef);if("FuncCall"in t)return this.FuncCall(t.FuncCall);if("SubLink"in t)return this.SubLink(t.SubLink);if("TypeCast"in t)return this.TypeCast(t.TypeCast);if("A_Expr"in t){let e=this.isJwtAccessor(t.A_Expr);return e||this.A_Expr(t.A_Expr)}if("BoolExpr"in t)return this.BoolExpr(t.BoolExpr);let s=Object.keys(t)[0];throw new w({[s]:t},`deparseValue: ${s}`)}A_Expr(t){if(t.kind==="AEXPR_OP"){let s=t.name?.[0],e=s?ot(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 o=u&&typeof n=="string"?{$ref:n}:n;return {[r]:{[a]:o}}}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]?ot(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),o=this.deparseLimit(t.limitOffset),l=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),o!==void 0&&(f.offset=o),l.length>0&&(f.group=l),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 o=n;if(o in s){let l=2;for(;`${o}_${l}`in s;)l++;o=`${o}_${l}`;}s[o]=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]?ot(t.name[0]):void 0;if(s!=="->"&&s!=="->>")return null;let e=t.rexpr&&"A_Const"in t.rexpr?t.rexpr.A_Const.sval?.sval:void 0;if(e===void 0)return null;if(t.lexpr&&"FuncCall"in t.lexpr)return this.isAuthFunc(t.lexpr.FuncCall.funcname??[])==="{{auth.jwt}}"?`{{auth.jwt.${e}}}`:null;if(t.lexpr&&"A_Expr"in t.lexpr){let i=this.isJwtAccessor(t.lexpr.A_Expr);if(i)return `${i.slice(0,-2)}.${e}}}`}return null}mapOperator(t){switch(t){case "=":return "$eq";case "<>":case "!=":return "$neq";case ">":return "$gt";case ">=":return "$gte";case "<":return "$lt";case "<=":return "$lte";case "~~":return "$like";case "!~~":return "$notLike";default:return}}};});var Ot,bs=C(()=>{Ot=class{table;schema;fields;constructor(t,s="public",e=new Map){this.table=t,this.schema=s,this.fields=e;}get(t){return this.fields.get(t)}has(t){return this.fields.has(t)}set(t,s){this.fields.set(t,s);}columns(){return Array.from(this.fields.keys())}all(){return Array.from(this.fields.values())}serializeRow(t){let s={};for(let[e,i]of Object.entries(t)){let r=this.fields.get(e);s[e]=r?r.serialize(i):i;}return s}deserializeRow(t){let s={};for(let[e,i]of Object.entries(t)){let r=this.fields.get(e);s[e]=r?r.deserialize(i):i;}return s}applyDefaults(t){let s={...t};for(let[e,i]of this.fields)!(e in s)&&i.context.defaultFn&&(s[e]=i.context.defaultFn());return s}};});var Is=C(()=>{k();fe();Vt();he();me();v();Ee();ge();Te();Se();Ce();Ae();Ne();Re();Oe();ye();be();Ie();Le();we();bs();});function _s(p){let t=new Map;for(let s of p.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 ws(p){let t=new Map;for(let s of p.stmts??[]){if(!s.stmt||!("VariableSetStmt"in s.stmt))continue;let e=s.stmt.VariableSetStmt,i=e.name,r=cs(e.args?.[0]??{});t.set(i,{value:r,local:e.is_local});}return t}function vs(p){let t=new x,s=new Set,e=[];for(let i of p.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"},o=r.cmd_name?u[r.cmd_name]??"ALL":"ALL",l=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}`;Ls.has(b)||(Ls.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:o,permissive:l,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 ds(p,t){let s=new Map;for(let e of p.stmts??[]){if(!e.stmt||!("CreateStmt"in e.stmt))continue;let i=e.stmt.CreateStmt,r=i.relation?.relname??"",n=i.relation?.schemaname??"public";if(!r)continue;let a=new Ot(r,n);for(let u of i.tableElts??[]){if(!("ColumnDef"in u))continue;let o=u.ColumnDef,l=o.colname;if(!l)continue;let f=o.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=!!o.typeName?.arrayBounds?.length,E=Array.isArray(o.typeName?.typmods)?o.typeName.typmods:[],g=O=>E[O]?.A_Const?.ival?.ival??E[O]?.A_Const?.val?.ival?.ival,A={isArray:T};if($t(m)&&E.length>0){let O=g(0);typeof O=="number"&&O>0&&(A.lengthConstraint=O);}if(Ut(m)&&E.length>=2){let O=g(0),H=g(1);typeof O=="number"&&typeof H=="number"&&O>0&&H>=0&&(A.numericPrecision={precision:O,scale:H});}let S=t.get(m.toLowerCase());S&&(A.enumValues=S);let b=Array.isArray(o.constraints)?o.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"),Pe=b.find(O=>O.Constraint?.contype==="CONSTR_CHECK"),ke;if(De){let O=De.Constraint,H=O.pktable?.relname,Ms=O.pktable?.schemaname,je=O.pk_attrs?.[0]?.String?.sval;H&&je&&(ke={refSchema:Ms,refTable:H,refColumn:je,constraintName:O.conname||void 0});}let Bs={schema:n,table:r,column:l,pgTypeName:m,nullable:!d&&!_,defaultValue:null,defaultFn:null,isPrimaryKey:_,isUnique:!!D,isSerial:y,isGenerated:!!F,fkRef:ke,hasCheck:!!Pe,checkConstraintName:Pe?.Constraint?.conname||void 0,uniqueConstraintName:D?.Constraint?.conname||void 0};a.set(l,J(Bs,A));}s.set(`${n}.${r}`,a);}return s}function Ds(p){let t=[];for(let s of p.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,o=u.contype;if(o==="CONSTR_UNIQUE"){let l=(u.keys??[]).map(f=>f.String?.sval??f.String?.str).filter(Boolean);if(l.length===0)continue;t.push({schema:r,table:i,kind:"unique",name:u.conname||void 0,columns:l});}else if(o==="CONSTR_CHECK")t.push({schema:r,table:i,kind:"check",name:u.conname||void 0,columns:[]});else if(o==="CONSTR_FOREIGN"){let l=(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:l,refSchema:u.pktable?.schemaname,refTable:m,refColumns:f});}}}return t}function Ps(p){let t=[];for(let s of p.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,o;n.length>=3?[a,u,o]=n:[u,o]=n,t.push({schema:a,table:u,column:o,text:i});}}}return t}var Ls,ks=C(()=>{ve();V();Lt();Is();et();Ls=new Set;});var $s={};xs($s,{Policy:()=>$,deparseDdl:()=>de,deparseExpression:()=>Ki,deparsePostgresDdl:()=>Xi,deparseSelect:()=>Qi,parse:()=>Q,parseExpression:()=>js,translatePostgresDdl:()=>Hi});async function Hi(p,t={}){let s=await Q(p);return de(s,t).ddl}async function Xi(p,t={}){let s=await Q(p);return {ast:s,...de(s,t)}}function de(p,t={}){let s=_s(p),e=ds(p,s),i=ws(p),r=Ds(p),n=Ps(p),a=new Wt(p,{...t,enums:s}),{policies:u,tables:o}=vs(p);if(t.strict)for(let l of u){if(!e.get(`${l.data.schema??"public"}.${l.data.table}`))throw new Error(`Policy "${l.data.name}" references unknown table "${l.data.table}"`);if(!o.has(l.data.table))throw new Error(`RLS is not enabled on table "${l.data.table}"`)}return {ddl:a.deparseQuery(),enums:s,rls:{tables:o,policies:u},schema:e,vars:i,tableConstraints:r,comments:n}}async function js(p){let s=(await Q(`SELECT 1 WHERE ${p}`)).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 Ki(p){let t=await js(p);return new x().deparse(t)}async function Qi(p){let s=(await Q(p)).stmts?.[0]?.stmt;if(!s||!("SelectStmt"in s))throw new Error("expected SelectStmt");return new x().deparse(s)}var Us=C(()=>{ss();ys();ve();ks();Lt();});Zt();var Ks=(p={})=>{let t=(s="m")=>[...p.exclude_tables??[],"sqlite_%"].map(e=>e.includes("%")?`${s}.name NOT LIKE '${e}'`:`${s}.name != '${e}'`).join(" AND ");return `WITH table_info AS (SELECT
12
+ var pn=Object.defineProperty;var g=(i,e)=>()=>(i&&(e=i(i=0)),e);var fn=(i,e)=>{for(var t in e)pn(i,t,{get:e[t],enumerable:true});};var St=g(()=>{});var Et=g(()=>{});function mn(i){return Object.prototype.toString.call(i)==="[object Object]"}function dn(i){return i!==null&&typeof i=="object"}function Z(i,e,t=void 0){let n=typeof e=="string"?e.split(/[.[\]"]+/).filter(r=>r):e;if(n.length===0)return i;try{let[r,...s]=n;return !r||!(r in i)?t:Z(i[r],s,t)}catch{if(typeof t<"u")return t;throw new Error(`Invalid path: ${n.join(".")}`)}}function qe(i,...e){for(let t of e)for(let[n,r]of Object.entries(t))r!==void 0&&(!mn(r)&&!Array.isArray(r)||Array.isArray(r)&&!Array.isArray(i[n])?i[n]=r:dn(i[n])?qe(i[n],r):i[n]=r);return i}var ye=g(()=>{});var bt=g(()=>{});function Tt(i,e){if(!i)throw new Error(e)}var wt=g(()=>{});function Ue(i){return (i??"").trim().toLowerCase()}function je(i){return (i??"").replace(/\s+/g," ").replace(/"/g,"").trim().toLowerCase()}function Be(i){if(i==null)return null;let e=i.trim();for(;e.startsWith("(")&&e.endsWith(")");)e=e.slice(1,-1).trim();return (e.startsWith("'")&&e.endsWith("'")||e.startsWith('"')&&e.endsWith('"'))&&(e=e.slice(1,-1)),e}var Me=g(()=>{});function h(i,e='"'){return `${e}${i}${e}`}function Ct(i,e,t){if(e instanceof RegExp)return e.test(i);if(typeof e=="string")switch(!t&&e.startsWith("/")&&(t="regex"),t){case "regex":return new RegExp(e).test(i);case "sql":return new RegExp(e.replace("%",".*").replace("_",".")).test(i);case "wildcard":return new RegExp(e.replace("*",".*")).test(i);default:return i.includes(e)}return false}var Se=g(()=>{});var xt=g(()=>{});var _t=g(()=>{});var We=g(()=>{St();Et();ye();bt();wt();Me();Se();xt();_t();});var D,be=g(()=>{D=class i{constructor(e){this.data=e;}appliesTo(e){return this.data.command==="ALL"||this.data.command===e}appliesToRole(e){return this.data.roles.length===0||this.data.roles.includes(e)}toJSON(){return this.data}static fromJSON(e){return new i(e)}};});var G,Ve=g(()=>{Me();G=class{makeIndexKey(e){return `${e.table}:${e.name}:${e.unique}:${e.columns.join(",")}`}makeForeignKeyKey(e){return `${e.table}:${e.column}:${e.ref_table}:${e.ref_column}`}diff(e,t){let n=[],r=[],s=[],o=[],a=new Set(e.tables.map(m=>m.name)),l=new Set(t.tables.map(m=>m.name));for(let m of t.tables)a.has(m.name)||n.push({type:"added",name:m.name,sql:m.sql});for(let m of e.tables)l.has(m.name)||n.push({type:"removed",name:m.name});for(let m of e.tables){let T=t.tables.find(N=>N.name===m.name);if(!T)continue;let f=je(m.sql),C=je(T.sql);f!==C&&n.push({type:"modified",name:m.name,sql:T.sql});}let u=e.tables.filter(m=>l.has(m.name));for(let m of u){let T=e.columns.filter(w=>w.table===m.name),f=t.columns.filter(w=>w.table===m.name),C=new Map(T.map(w=>[w.name,w])),N=new Map(f.map(w=>[w.name,w]));for(let[w,k]of N)C.has(w)||r.push({type:"added",table:m.name,name:w,column:k});for(let[w]of C)N.has(w)||r.push({type:"removed",table:m.name,name:w});for(let[w,k]of C){let I=N.get(w);if(!I)continue;let P={};Ue(k.type)!==Ue(I.type)&&(P.type={from:k.type,to:I.type}),k.nullable!==I.nullable&&(P.nullable={from:k.nullable,to:I.nullable}),Be(k.default_value)!==Be(I.default_value)&&(P.default_value={from:k.default_value,to:I.default_value}),Object.keys(P).length>0&&r.push({type:"modified",table:m.name,name:w,changes:P});}}let p=new Map(e.indexes.map(m=>[this.makeIndexKey(m),m])),c=new Map(t.indexes.map(m=>[this.makeIndexKey(m),m]));for(let[m,T]of c)p.has(m)||s.push({type:"added",...T});for(let[m,T]of p)c.has(m)||s.push({type:"removed",...T});let d=new Map(e.foreign_keys.map(m=>[this.makeForeignKeyKey(m),m])),E=new Map(t.foreign_keys.map(m=>[this.makeForeignKeyKey(m),m]));for(let[m,T]of E)d.has(m)||o.push({type:"added",...T});for(let[m,T]of d)E.has(m)||o.push({type:"removed",...T});let y=n.length>0||r.length>0||s.length>0||o.length>0;return {tables:n,columns:r,indexes:s,foreign_keys:o,has_changes:y}}};});var Ge=g(()=>{});var xn,Q,Qe=g(()=>{Ge();Se();xn=["CURRENT_TIMESTAMP","CURRENT_TIME","CURRENT_DATE"],Q=class{plan(e,t,n,r){if(!e.has_changes)return {steps:[],warnings:[],unsafe:false};let s=[],o=[];s.push({sql:"PRAGMA foreign_keys=OFF;",description:"Disable foreign key checks",type:"disable_foreign_keys"}),s.push({sql:"BEGIN;",description:"Begin transaction",type:"begin_transaction"});for(let c of e.tables.filter(d=>d.type==="added")){s.push({sql:`${c.sql};`,description:`CREATE TABLE ${h(c.name)}`,type:"create_table"});let d=n.indexes.filter(E=>E.table===c.name);for(let E of d){let y=E.unique?"UNIQUE ":"",m=E.columns.map(T=>h(T)).join(", ");s.push({sql:`CREATE ${y}INDEX ${h(E.name)} ON ${h(c.name)} (${m});`,description:`Create index ${h(E.name)} on ${h(c.name)}`,type:"add_index"});}}let a=new Set(t.tables.map(c=>c.name)),l=new Set(n.tables.map(c=>c.name)),u=new Set(e.tables.filter(c=>c.type==="modified").map(c=>c.name)),p=[...a].filter(c=>l.has(c));for(let c of p){if(!(u.has(c)||e.columns.some(m=>m.table===c)||e.indexes.some(m=>m.table===c)||e.foreign_keys.some(m=>m.table===c)))continue;let{canAlter:E,addedCols:y}=this.canSimpleAlter(c,e,n);if(E){for(let f of y)s.push({sql:`ALTER TABLE ${h(c)} ADD COLUMN ${this.columnDef(f)};`,description:`Add column ${h(f.name)} to ${h(c)}`,type:"add_column"});let m=e.indexes.filter(f=>f.table===c&&f.type==="added"),T=e.indexes.filter(f=>f.table===c&&f.type==="removed");for(let f of T)s.push({sql:`DROP INDEX IF EXISTS ${h(f.name)};`,description:`Drop index ${h(f.name)}`,type:"drop_index"});for(let f of m){let C=f.unique?"UNIQUE ":"",N=f.columns.map(w=>h(w)).join(", ");s.push({sql:`CREATE ${C}INDEX ${h(f.name)} ON ${h(c)} (${N});`,description:`Create index ${h(f.name)} on ${h(c)}`,type:"add_index"});}}else {let m=this.rebuildTable(c,t,n,e);s.push(...m.steps),o.push(...m.warnings);}}for(let c of e.tables.filter(d=>d.type==="removed"))s.push({sql:`DROP TABLE ${h(c.name)};`,description:`Drop table ${h(c.name)}`,type:"drop_table"}),o.push({table:c.name,reason:"table will be dropped"});return s.push({sql:"COMMIT;",description:"Commit transaction",type:"commit_transaction"}),s.push({sql:"PRAGMA foreign_keys=ON;",description:"Re-enable foreign key checks",type:"enable_foreign_keys"}),{steps:s,warnings:o,unsafe:o.length>0}}rebuildTable(e,t,n,r){let s=[],o=[],a=n.tables.find(f=>f.name===e);if(!a)return {steps:s,warnings:o};let l=`_${e}_migrate_new`,u=a.sql.replace(new RegExp(`(CREATE\\s+TABLE\\s+)(?:"${e}"|${e})`,"i"),`$1${h(l)}`);s.push({sql:`${u};`,description:`Create temporary table ${h(l)}`,type:"create_table"});let p=t.columns.filter(f=>f.table===e).map(f=>f.name),c=n.columns.filter(f=>f.table===e).map(f=>f.name),d=p.filter(f=>c.includes(f));if(d.length>0){let f=d.map(C=>h(C)).join(", ");s.push({sql:`INSERT INTO ${h(l)} (${f})
13
+ SELECT ${f}
14
+ FROM ${h(e)};`,description:`Copy data from ${h(e)} to ${h(l)}`,type:"copy_data"});}s.push({sql:`DROP TABLE ${h(e)};`,description:`Drop old table ${h(e)}`,type:"drop_table"}),s.push({sql:`ALTER TABLE ${h(l)} RENAME TO ${h(e)};`,description:`Rename ${h(l)} to ${h(e)}`,type:"rename_table"});let E=n.indexes.filter(f=>f.table===e);for(let f of E){let C=f.unique?"UNIQUE ":"",N=f.columns.map(w=>h(w)).join(", ");s.push({sql:`CREATE ${C}INDEX ${h(f.name)} ON ${h(e)} (${N});`,description:`Recreate index ${h(f.name)} on ${h(e)}`,type:"add_index"});}let y=n.triggers?.filter(f=>f.table===e)??[];for(let f of y)s.push({sql:`${f.sql};`,description:`Recreate trigger ${h(f.name)} on ${h(e)}`,type:"create_trigger"});let m=r.columns.filter(f=>f.table===e&&f.type==="removed");for(let f of m)o.push({table:e,reason:`column "${f.name}" will be dropped`});let T=r.columns.filter(f=>f.table===e&&f.type==="modified");for(let f of T)f.changes?.type&&o.push({table:e,reason:`column "${f.name}" type changes from ${f.changes.type.from} to ${f.changes.type.to}`}),f.changes?.nullable&&!f.changes.nullable.to&&o.push({table:e,reason:`column "${f.name}" becomes NOT NULL`});return {steps:s,warnings:o}}canSimpleAlter(e,t,n){let r=t.columns.filter(c=>c.table===e),s=r.filter(c=>c.type==="added"),o=r.filter(c=>c.type==="removed"),a=r.filter(c=>c.type==="modified"),l=t.foreign_keys.some(c=>c.table===e);if(o.length>0||a.length>0||l)return {canAlter:false,addedCols:s};let u=n.tables.find(c=>c.name===e);return u&&/\bCHECK\s*\(/i.test(u.sql)?{canAlter:false,addedCols:s}:{canAlter:s.every(c=>{let d=c.column;return this.hasNonConstantDefault(d.default_value)?false:d.nullable||d.default_value!=null})&&s.length>0,addedCols:s}}hasNonConstantDefault(e){if(e==null)return false;let t=e.trim().toUpperCase();return xn.includes(t)}columnDef(e){let t=e.column,n=`${h(t.name)} ${t.type||"TEXT"}`;return t.nullable||(n+=" NOT NULL"),t.default_value!=null&&(n+=` DEFAULT ${t.default_value}`),n}};});async function J(i){let{parse:e}=await import('pgsql-parser');return e(i)}var $t=g(()=>{});function te(i){if("String"in i)return i.String.sval}function F(i){return i.map(te).filter(e=>e!=null)}function q(i){return i==null?[]:i.List!==void 0?i.List.items||[]:Array.isArray(i)?i:[i]}function Ne(i){return QuoteUtils.quoteIdentifier(i)}function Y(i){return Object.keys(i)[0]}function Ft(i){if("A_Const"in i){if(i.A_Const.ival)return i.A_Const.ival.ival;if(i.A_Const.fval)return i.A_Const.fval.fval;if(i.A_Const.sval)return i.A_Const.sval.sval;if(i.A_Const.boolval)return i.A_Const.boolval.boolval;if(i.A_Const.isnull)return null}}var U=g(()=>{});function Ut(i){let e=i.toLowerCase().trim();if(e.startsWith("_")||e.endsWith("[]"))return "TEXT";let t=Dn[e];if(!t)throw new j(`Unsupported PostgreSQL type: "${i}"`);return t}function Re(i){let e=i.toLowerCase();return ["serial","serial4","bigserial","serial8","smallserial","serial2"].includes(e)}function Ae(i){let e=i.toLowerCase();return ["varchar","character varying","char","character","bpchar"].includes(e)}function ke(i){let e=i.toLowerCase();return ["numeric","decimal"].includes(e)}var j,S,Dn,qt,Pn,Ie,X=g(()=>{U();j=class extends Error{},S=class extends j{constructor(t,n){super(n??`Unsupported node type: ${Y(t)}`);this.node=t;}},Dn={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"},qt=["<",">","<=",">=","=","<>","!=","+","-","*","/","%","&","|","<<",">>","||","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","->>"];Pn={CreateEnumStmt:{react:"ignore"},CreateDomainStmt:{react:"warn"},CreateSeqStmt:{react:"error"},AlterSeqStmt:{react:"error"},CreateSchemaStmt:{react:"warn"},CreatePolicyStmt:{react:"ignore"},PartitionElem:{react:"error"},PartitionCmd:{react:"error"},VariableSetStmt:{react:"ignore"},CompositeTypeStmt:{react:"error"},AlterEnumStmt:{react:"error"},AlterObjectSchemaStmt:{react:"error"},AlterOwnerStmt:{react:"error"},AlterTypeStmt:{react:"error"},AlterFunctionStmt:{react:"error"},AlterDefaultPrivilegesStmt:{react:"error"},GrantStmt:{react:"error"},GrantRoleStmt:{react:"error"},CopyStmt:{react:"error"},CreateCastStmt:{react:"error"},AlterOpFamilyStmt:{react:"error"},AlterOperatorStmt:{react:"error"},TruncateStmt:{react:"error"},A_Indirection:{react:"error"},XmlExpr:{react:"error"},XmlSerialize:{react:"error"},RangeTableSample:{react:"error"},GroupingSet:{react:"error"}},Ie=new Map(Object.entries(Pn));});var ve,jt=g(()=>{X();U();ve=class{constructor(e){this.ast=e;this.result=[...this.walk(this.ast,[],{trackPaths:["returningList"]})];}result=[];*walk(e=this.ast,t=[],n={}){if(!e||typeof e!="object")return;let{trackPaths:r=[]}=n;if(Array.isArray(e)){for(let o=0;o<e.length;o++)yield*this.walk(e[o],t,n);return}let s=Object.keys(e);if(s.length===1&&s[0][0]>="A"&&s[0][0]<="Z"){let o=s[0];yield {node:e,path:t},yield*this.walk(e[o],[...t,o],n);}else for(let[o,a]of Object.entries(e))if(a&&typeof a=="object"){let l=r.includes(o)?[...t,o]:t;yield*this.walk(a,l,n);}}containsUnsupportedNode(){for(let{node:e}of this.result){let t=Y(e),n=Ie.get(t);if(n&&n.react==="error")return true}}hasFuncCall(){for(let{node:e}of this.result)if("FuncCall"in e)return true;return false}getFuncCalls(){return Array.from(this.result).map(({node:e})=>e).filter(e=>"FuncCall"in e).map(e=>e.FuncCall)}getFuncCallNames(){return this.getFuncCalls().flatMap(e=>e.funcname?.map(t=>t.String?.sval||t.String?.str))}hasSqlValueFunction(){for(let{node:e}of this.result)if("SQLValueFunction"in e)return true;return false}getSqlValueFunctions(){return Array.from(this.result).map(({node:e})=>e).filter(e=>"SQLValueFunction"in e).map(e=>e.SQLValueFunction)}getSqlValueFunctionNames(){return this.getSqlValueFunctions().map(e=>e.op)}hasUnsafeStar(){let e=this.result.filter(({node:t})=>"A_Star"in t);if(e.length===0)return false;for(let{path:t}of e)if(!t.includes("SelectStmt")&&!t.includes("returningList"))return true;return false}getRelationDefinitions(){return this.result.filter(({node:t})=>"CreateStmt"in t).map(({node:t})=>t.CreateStmt).map(t=>({relation:{relname:t.relation?.relname??"",inh:t.relation?.inh,relpersistence:t.relation?.relpersistence},columns:t.tableElts?.map(n=>{let r=n.ColumnDef?.typeName?.names?.map(o=>"String"in o?o.String.sval:""),s=r?.some(o=>o.toLowerCase().includes("pg_catalog"));return {name:n.ColumnDef?.colname??"",is_local:n.ColumnDef?.is_local,pg_catalog:s,type:r?.filter(o=>!o.toLowerCase().includes("pg_catalog"))[0]??"",types:r,constraints:n.ColumnDef?.constraints}})}))}getRelationColumnTypes(){return {has_non_pg_catalog_types:this.getRelationDefinitions().some(e=>e.columns?.some(t=>!t.pg_catalog)),types:Array.from(new Set(this.getRelationDefinitions().flatMap(e=>e.columns?.map(t=>t.type))))}}};});var $n,Fn,qn,Un,z,Oe,Bt=g(()=>{X();$n=["DECLARE","IF","ELSIF","ELSE","LOOP","WHILE","FOR","FOREACH","EXCEPTION","RAISE","PERFORM","EXECUTE","SELECT"],Fn=/^NEW\.(\w+)\s*(?::=|=)\s*(.+)$/is,qn=/^RETURN\s+(NEW|OLD)$/i,Un=/^(INSERT|UPDATE|DELETE)\b/i,z=class extends j{constructor(t,n,r){super(r??`Unsupported PL/pgSQL: ${t}`);this.hint=t;this.body=n;}},Oe=class{parse(e){let t=this.extractBlock(e),n=this.splitStatements(t),r=[],s=null;for(let o of n){let a=o.trim();if(!a)continue;this.rejectUnsupported(a);let l=a.match(qn);if(l){s=l[1].toUpperCase(),r.push({type:"return",value:s});continue}let u=a.match(Fn);if(u){r.push({type:"assignment",column:u[1],expression:u[2].trim()});continue}if(Un.test(a)){r.push({type:"dml",sql:a});continue}throw new z(`"${a.substring(0,80)}" is not translatable to SQLite`,t)}if(!s)throw new j("Trigger function body must end with RETURN NEW or RETURN OLD");return {statements:r,returnValue:s}}extractBlock(e){let t=e.trim(),n=t.toUpperCase();if(/^\s*DECLARE\b/i.test(t))throw new z('"DECLARE" is not translatable to SQLite',e);let r=n.indexOf("BEGIN"),s=n.lastIndexOf("END");if(r===-1||s===-1||s<=r)throw new z("Expected BEGIN ... END block in trigger function body",e);return t.slice(r+5,s).trim()}splitStatements(e){let t=[],n="",r=0,s=false,o="";for(let l=0;l<e.length;l++){let u=e[l];if(s){n+=u,u===o&&(l+1<e.length&&e[l+1]===o?n+=e[++l]:s=false);continue}if(u==="'"||u==='"'){s=true,o=u,n+=u;continue}if(u==="("){r++,n+=u;continue}if(u===")"){r--,n+=u;continue}if(u===";"&&r===0){t.push(n.trim()),n="";continue}n+=u;}let a=n.trim();return a&&t.push(a),t}rejectUnsupported(e){let t=e.match(/^(\w+)/)?.[1]?.toUpperCase();if(t&&$n.includes(t))throw new z(`"${t}" is not translatable to SQLite`,e)}};});var ne,Je=g(()=>{ne=class extends Error{constructor(t,n,r,s){super(`check constraint "${r}" violated for ${t}.${n}`);this.table=t;this.column=n;this.constraint=r;this.value=s;this.name="CheckConstraintError";}};});var _,O=g(()=>{Je();_=class{context;constructor(e){this.context=e;}get isShimBacked(){return false}checkConstraint(){return null}serialize(e){return e}deserialize(e){return e}validateStorage(e){return {status:"pass",message:null}}validationFail(e,t){return {status:"fail",message:e,action:t}}validationPass(){return {status:"pass",message:null}}isNullish(e){return e==null}toColumnDDL(e){let{includeNullable:t=true}=e??{},n=[],r=this.context.column;n.push(this.quoteIfNeeded(r)),n.push(this.sqliteType),this.context.isPrimaryKey&&n.push("PRIMARY KEY"),this.context.isSerial&&this.context.isPrimaryKey&&n.push("AUTOINCREMENT"),t&&!this.context.nullable&&!this.context.isPrimaryKey&&n.push("NOT NULL"),this.context.isUnique&&!this.context.isPrimaryKey&&n.push("UNIQUE"),this.context.defaultValue!==null&&n.push(`DEFAULT ${this.context.defaultValue}`);let s=this.checkConstraint();return s&&n.push(`CHECK (${s})`),n.join(" ")}checkError(e,t){return new ne(this.context.table,this.context.column,e,t)}quoteIfNeeded(e){return /^[a-zA-Z_][a-zA-Z0-9_]*$/.test(e)?e:`"${e}"`}};});var B,Le=g(()=>{O();B=class extends _{get sqliteType(){return "INTEGER"}};});var re,Ye=g(()=>{Le();re=class extends B{constructor(e){super({...e,isSerial:true});}};});function jn(i,e){let{precision:t,scale:n}=e,r=10**n,s=10**(t-n);return Math.abs(Math.round(i*r)-i*r)<1e-4&&Math.abs(i)<s}var se,Xe=g(()=>{O();se=class extends _{numericPrecision;constructor(e,t){super(e),this.numericPrecision=t;}get isShimBacked(){return this.numericPrecision!==void 0}get sqliteType(){return "REAL"}checkConstraint(){if(this.numericPrecision){let{precision:e,scale:t}=this.numericPrecision,n=this.context.column,r=10**t,s=10**(e-t);return `ABS(ROUND(${n} * ${r}) - ${n} * ${r}) < 0.0001 AND ABS(${n}) < ${s}`}return null}validateStorage(e){if(this.isNullish(e))return this.validationPass();if(typeof e!="number"||!Number.isFinite(e))return this.validationFail("Expected finite number.","Patch rows with finite numbers.");if(this.numericPrecision){let{precision:t,scale:n}=this.numericPrecision;if(!jn(e,this.numericPrecision))return this.validationFail(`Does not fit numeric(${t}, ${n}).`,"Patch rows within numeric precision.")}return this.validationPass()}};});var x,A=g(()=>{O();x=class extends _{lengthConstraint;constructor(e,t){super(e),this.lengthConstraint=t;}get isShimBacked(){return this.lengthConstraint!==void 0}get sqliteType(){return "TEXT"}checkConstraint(){return this.lengthConstraint!==void 0?`length(${this.context.column}) <= ${this.lengthConstraint}`:null}validateStorage(e){return this.isNullish(e)?this.validationPass():typeof e!="string"?this.validationFail("Expected text.","Patch rows with text values."):this.lengthConstraint!==void 0&&Array.from(e).length>this.lengthConstraint?this.validationFail(`Exceeds length ${this.lengthConstraint}.`,"Patch rows with shorter text."):this.validationPass()}};});var ie,ze=g(()=>{O();ie=class extends _{get sqliteType(){return "BLOB"}};});var oe,He=g(()=>{O();oe=class extends _{get isShimBacked(){return true}get sqliteType(){return "INTEGER"}checkConstraint(){return `${this.context.column} IN (0, 1)`}serialize(e){if(this.isNullish(e))return e;if(e===true||e===1)return 1;if(e===false||e===0)return 0;throw this.checkError("boolean_range",e)}deserialize(e){return this.isNullish(e)?e:e===1?true:e===0?false:e}validateStorage(e){return this.isNullish(e)?this.validationPass():e===1||e===0?this.validationPass():this.validationFail("Expected 0 or 1.","Patch rows with boolean values.")}};});function Mt(i){try{return {ok:!0,value:JSON.parse(i)}}catch{return {ok:false}}}var ae,Ze=g(()=>{O();ae=class extends _{get isShimBacked(){return true}get sqliteType(){return "TEXT"}checkConstraint(){let e=this.context.column;return `${e} IS NULL OR json_valid(${e})`}serialize(e){if(this.isNullish(e))return e;try{return JSON.stringify(e)}catch{throw this.checkError("json_valid",e)}}deserialize(e){if(this.isNullish(e))return e;if(typeof e=="string"){let t=Mt(e);return t.ok?t.value:e}return e}validateStorage(e){return this.isNullish(e)?this.validationPass():typeof e!="string"?this.validationFail("Expected JSON text.","Patch rows with JSON values."):Mt(e).ok?this.validationPass():this.validationFail("Invalid JSON text.","Patch rows with valid JSON.")}};});function Bn(i){if(!/^\d{4}-\d{2}-\d{2}$/.test(i))return false;let e=new Date(`${i}T00:00:00.000Z`);return !Number.isNaN(e.getTime())&&e.toISOString().slice(0,10)===i}var le,et=g(()=>{A();le=class extends x{get isShimBacked(){return true}checkConstraint(){let e=this.context.column;return `${e} IS NULL OR date(${e}) IS NOT NULL`}validateStorage(e){return this.isNullish(e)?this.validationPass():typeof e!="string"||!Bn(e)?this.validationFail("Invalid date.","Patch rows with YYYY-MM-DD dates."):this.validationPass()}};});function Mn(i){let e=i.match(/^(\d{2}):(\d{2})(?::(\d{2})(?:\.\d{1,6})?)?([+-](\d{2}):?(\d{2}))?$/);if(!e)return false;let t=Number(e[1]),n=Number(e[2]),r=e[3]===void 0?0:Number(e[3]),s=e[5]===void 0?null:Number(e[5]),o=e[6]===void 0?null:Number(e[6]),a=s===null||o!==null&&s<=15&&o<=59;return t<=24&&n<=59&&r<=59&&(t!==24||n===0&&r===0)&&a}var ce,tt=g(()=>{A();ce=class extends x{get isShimBacked(){return true}checkConstraint(){let e=this.context.column;return `${e} IS NULL OR time(${e}) IS NOT NULL`}validateStorage(e){return this.isNullish(e)?this.validationPass():typeof e!="string"||!Mn(e)?this.validationFail("Invalid time.","Patch rows with HH:MM[:SS] times."):this.validationPass()}};});function Wn(i){let e=i.match(/^(\d{4})-(\d{2})-(\d{2})[ T](\d{2}):(\d{2})(?::(\d{2})(?:\.\d{1,6})?)?(?:Z|([+-](\d{2}):?(\d{2})))?$/);if(!e)return false;let t=Number(e[1]),n=Number(e[2]),r=Number(e[3]),s=Number(e[4]),o=Number(e[5]),a=e[6]===void 0?0:Number(e[6]),l=e[8]===void 0?null:Number(e[8]),u=e[9]===void 0?null:Number(e[9]),p=new Date(Date.UTC(t,n-1,r)),c=p.getUTCFullYear()===t&&p.getUTCMonth()===n-1&&p.getUTCDate()===r,d=s<=24&&o<=59&&a<=59&&(s!==24||o===0&&a===0),E=l===null||u!==null&&l<=15&&u<=59;return c&&d&&E}var ue,nt=g(()=>{A();ue=class extends x{get isShimBacked(){return true}checkConstraint(){let e=this.context.column;return `${e} IS NULL OR datetime(${e}) IS NOT NULL`}validateStorage(e){return this.isNullish(e)?this.validationPass():typeof e!="string"||!Wn(e)?this.validationFail("Invalid timestamp.","Patch rows with ISO timestamps."):this.validationPass()}};});var pe,rt=g(()=>{A();pe=class extends x{get isShimBacked(){return true}validateStorage(e){return this.isNullish(e)?this.validationPass():typeof e!="string"||e.trim().length===0?this.validationFail("Expected interval text.","Patch rows with interval strings."):/^-?\d+(?:\.\d+)?$/.test(e.trim())?this.validationFail("Ambiguous numeric interval.","Patch rows with explicit interval strings."):this.validationPass()}};});var fe,st=g(()=>{A();fe=class extends x{enumValues;constructor(e,t){super(e),this.enumValues=t;}get isShimBacked(){return true}checkConstraint(){let e=this.context.column,t=this.enumValues.map(n=>`'${n.replace(/'/g,"''")}'`).join(", ");return `${e} IN (${t})`}serialize(e){if(this.isNullish(e))return e;if(typeof e!="string"||!this.enumValues.includes(e))throw this.checkError("enum_membership",e);return e}validateStorage(e){return this.isNullish(e)?this.validationPass():typeof e!="string"||!this.enumValues.includes(e)?this.validationFail("Invalid enum value.","Patch rows with declared enum values."):this.validationPass()}};});function Wt(i){try{return {ok:!0,value:JSON.parse(i)}}catch{return {ok:false}}}var H,it=g(()=>{O();H=class extends _{elementField;constructor(e,t){super(e),this.elementField=t;}get sqliteType(){return "TEXT"}get isShimBacked(){return true}checkConstraint(){let e=this.context.column;return `${e} IS NULL OR (json_valid(${e}) AND json_type(${e}) = 'array')`}serialize(e){if(this.isNullish(e))return e;if(!Array.isArray(e))throw this.checkError("array_type",e);return this.elementField?JSON.stringify(e.map(t=>this.elementField.serialize(t))):JSON.stringify(e)}deserialize(e){if(this.isNullish(e))return e;if(typeof e=="string"){let t=Wt(e);if(t.ok&&Array.isArray(t.value))return this.elementField?t.value.map(n=>this.elementField.deserialize(n)):t.value}return e}validateStorage(e){if(this.isNullish(e))return this.validationPass();if(typeof e!="string")return this.validationFail("Expected JSON array text.","Patch rows with array values.");let t=Wt(e);if(!t.ok)return this.validationFail("Invalid JSON array text.","Patch rows with array values.");if(!Array.isArray(t.value))return this.validationFail("Expected JSON array.","Patch rows with array values.");if(this.elementField)for(let n of t.value){let r=this.elementField.validateStorage(n);if(r.status==="fail")return this.validationFail(`Invalid ${this.elementField.context.pgTypeName} array element.`,r.action??"Patch rows with valid array elements.")}return this.validationPass()}};});function Kt(i){return Vn.test(i.toLowerCase())}var Kn,Vn,me,ot=g(()=>{A();Kn="????????-????-????-????-????????????",Vn=/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/;me=class extends x{get isShimBacked(){return true}checkConstraint(){let e=this.quoteIfNeeded(this.context.column);return `${e} IS NULL OR ${e} GLOB '${Kn}'`}serialize(e){if(this.isNullish(e))return e;if(typeof e!="string")throw this.checkError("uuid_format",e);let t=e.toLowerCase();if(!Kt(t))throw this.checkError("uuid_format",e);return t}validateStorage(e){return this.isNullish(e)?this.validationPass():typeof e!="string"||!Kt(e)?this.validationFail("Invalid UUID.","Patch rows with valid UUIDs."):this.validationPass()}};});function Gn(i){let e=i.split("/");if(e.length>2)return null;let t=e[0];if(!t)return null;if(e.length===1)return {address:t,prefix:null};let n=e[1];return !n||!/^\d+$/.test(n)?null:{address:t,prefix:Number(n)}}function Qn(i){let e=i.split(".");return e.length!==4?false:e.every(t=>{if(!/^\d+$/.test(t))return false;let n=Number(t);return n>=0&&n<=255})}function Jn(i){if(!i.includes(":"))return false;try{return new URL(`http://[${i}]/`),!0}catch{return false}}function Vt(i){let e=Gn(i);return e?Qn(e.address)?e.prefix===null||e.prefix>=0&&e.prefix<=32:Jn(e.address)?e.prefix===null||e.prefix>=0&&e.prefix<=128:false:false}var de,at=g(()=>{A();de=class extends x{get isShimBacked(){return true}checkConstraint(){let e=this.quoteIfNeeded(this.context.column);return `${e} IS NULL OR (length(${e}) BETWEEN 3 AND 49 AND (instr(${e}, '.') > 0 OR instr(${e}, ':') > 0))`}serialize(e){if(this.isNullish(e))return e;if(typeof e!="string")throw this.checkError("inet_format",e);let t=e.trim();if(!Vt(t))throw this.checkError("inet_format",e);return t}validateStorage(e){return this.isNullish(e)?this.validationPass():typeof e!="string"||!Vt(e.trim())?this.validationFail("Invalid inet address.","Patch rows with valid inet strings."):this.validationPass()}};});var he,lt=g(()=>{A();he=class extends x{serialize(e){throw new Error(`Unsupported type "${this.context.pgTypeName}" for ${this.context.table}.${this.context.column}`)}deserialize(e){throw new Error(`Unsupported type "${this.context.pgTypeName}" for ${this.context.table}.${this.context.column}`)}toColumnDDL(){throw new Error(`Unsupported type "${this.context.pgTypeName}" for ${this.context.table}.${this.context.column}`)}};});function M(i,e){if(e?.isArray){let n=M(i,{...e,isArray:false});return new H(i,n)}if(e?.enumValues)return new fe(i,e.enumValues);let t=i.pgTypeName.toLowerCase().trim();if(t.startsWith("_")||t.endsWith("[]")){let n=t.startsWith("_")?t.slice(1):t.slice(0,-2),r={...i,pgTypeName:n},s=M(r);return new H(i,s)}return Xn.has(t)?new re(i):Yn.has(t)?new B(i):er.has(t)?new oe(i):tr.has(t)?new ae(i):ir.has(t)?new le(i):or.has(t)?new ce(i):ar.has(t)?new ue(i):lr.has(t)?new pe(i):Zn.has(t)?new ie(i):zn.has(t)?new se(i,e?.numericPrecision):nr.has(t)?new me(i):rr.has(t)?new x(i,63):sr.has(t)?new de(i):Hn.has(t)?new x(i,e?.lengthConstraint):new he(i)}var Yn,Xn,zn,Hn,Zn,er,tr,nr,rr,sr,ir,or,ar,lr,ct=g(()=>{Le();Ye();Xe();A();ze();He();Ze();et();tt();nt();rt();st();it();ot();at();lt();Yn=new Set(["int2","smallint","int4","integer","int","int8","bigint"]),Xn=new Set(["serial","serial4","bigserial","serial8","smallserial","serial2"]),zn=new Set(["float4","real","float8","double precision","numeric","decimal"]),Hn=new Set(["text","varchar","character varying","char","character","bpchar"]),Zn=new Set(["bytea"]),er=new Set(["bool","boolean"]),tr=new Set(["json","jsonb"]),nr=new Set(["uuid"]),rr=new Set(["name"]),sr=new Set(["inet"]),ir=new Set(["date"]),or=new Set(["time","timetz","time without time zone","time with time zone"]),ar=new Set(["timestamp","timestamptz","timestamp without time zone","timestamp with time zone"]),lr=new Set(["interval"]);});function ut(i,e="auto"){let t=i.toLowerCase(),n=De[t];if(!n)return null;switch(e){case "translate":{if(!n.sqlite)throw new Error(`No SQLite translation for function "${i}"`);return {sqliteExpr:n.sqlite(),jsFn:null}}case "synthetic":{if(!n.js)throw new Error(`No JS implementation for function "${i}"`);return {sqliteExpr:null,jsFn:n.js}}case "auto":return n.js?{sqliteExpr:null,jsFn:n.js}:n.sqlite?{sqliteExpr:n.sqlite(),jsFn:null}:null}}var Gt,De,pt=g(()=>{Gt="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)))",De={gen_random_uuid:{sqlite:()=>Gt,js:()=>crypto.randomUUID()},uuid_generate_v4:{sqlite:()=>Gt,js:()=>crypto.randomUUID()},now:{sqlite:()=>"datetime('now')",js:()=>new Date().toISOString()},current_timestamp:{sqlite:()=>"datetime('now')",js:()=>new Date().toISOString()},current_date:{sqlite:()=>"date('now')",js:()=>new Date().toISOString().split("T")[0]},current_time:{sqlite:()=>"time('now')",js:()=>new Date().toISOString().split("T")[1].replace("Z","")},random:{sqlite:()=>"random()",js:()=>Math.random()},length:{sqlite:()=>"length",js:null},lower:{sqlite:()=>"lower",js:null},upper:{sqlite:()=>"upper",js:null},substr:{sqlite:()=>"substr",js:null},substring:{sqlite:()=>"substr",js:null},trim:{sqlite:()=>"trim",js:null},ltrim:{sqlite:()=>"ltrim",js:null},rtrim:{sqlite:()=>"rtrim",js:null},replace:{sqlite:()=>"replace",js:null},coalesce:{sqlite:()=>"coalesce",js:null},nullif:{sqlite:()=>"nullif",js:null},count:{sqlite:()=>"count",js:null},sum:{sqlite:()=>"sum",js:null},avg:{sqlite:()=>"avg",js:null},min:{sqlite:()=>"min",js:null},max:{sqlite:()=>"max",js:null},localtime:{sqlite:()=>"time('now', 'localtime')",js:null},localtimestamp:{sqlite:()=>"datetime('now', 'localtime')",js:null}};});var Pe,Qt=g(()=>{X();U();U();jt();We();Bt();Ge();Ve();Qe();Se();ct();pt();Pe=class extends Deparser{enums;schemaHandling;warnings=[];helper;config;triggerFunctions=new Map;plpgsqlParser=new Oe;introspection;functionResolution;constructor(e,{enums:t,schemaHandling:n,introspection:r,...s}={}){super(e,s),this.schemaHandling=n??"default",this.enums=t??new Map,this.helper=new ve(e),this.config=s,this.introspection=r,this.functionResolution=s?.functionResolution??"translate";}visit(e,t){let n=Y(e),r=Ie.get(n);if(r){if(r.react==="error")throw new S({[n]:e},`Unsupported node type: ${n}`);return r.react==="warn"&&this.warnings.push({type:n,node:e}),""}return super.visit(e,t)}deparse(e,t){if(e==null)return null;if(!t){let n=new SqlFormatter;t=new DeparserContext({formatter:n});}return typeof e=="number"||e instanceof Number?e.toString():this.visit(e,t)}RawStmt(e,t){if(!e.stmt||e.stmt.CommentStmt)return "";let n=this.deparse(e.stmt,t);return !n||n.length===0?"":e.stmt_len?n+";":n}RangeVar(e,t){this.ensureRelation(e);let n=this.effectiveSchema(e.schemaname),r=e.relname,s=this.quoteBareIfNeeded(r);n&&(this.schemaHandling==="prefix"?s=`${n}__${r}`:s=`"${n}.${r}"`);let o=e.alias?" "+this.Alias(e.alias,t):"";return s+o}getRelationName(e){this.ensureRelation(e);let t=this.effectiveSchema(e.schemaname),n=e.relname;return t?this.schemaHandling==="prefix"?`${t}__${n}`:`${t}.${n}`:n}quoteBareIfNeeded(e){return /^[A-Za-z_][A-Za-z0-9_]*$/.test(e)?e:`"${e.replace(/"/g,'""')}"`}effectiveSchema(e){if(e){if(this.config.forceDefaultSchema||this.schemaHandling!=="default")return e;if(e!=="public")return e}}ensureRelation(e){let t=this.config.forceDefaultSchema;t&&(!e||typeof e!="object"||t.length===0||e.schemaname||(e.schemaname=t));}CreateStmt(e,t){if(e.inhRelations&&e.inhRelations.length>0)throw new S({CreateStmt:e},"Inheritance is not supported in SQLite");if(e.ofTypename!==void 0)throw new S({CreateStmt:e},"Typed tables (CREATE TABLE ... OF type_name) are not supported. Define columns directly in the CREATE TABLE statement instead.");if(e.options&&e.options.length>0&&(e.options=void 0),!e.tableElts||e.tableElts.length===0)throw new S({CreateStmt:e},"Empty tables are not supported in SQLite. Define at least one column.");return e.accessMethod&&(e.accessMethod=void 0),super.CreateStmt(e,t)+" STRICT"}TableLikeClause(e,t){throw new S({TableLikeClause:e},"CREATE TABLE ... (LIKE ...) is not supported in SQLite. Define the table columns explicitly instead.")}DefElem(e,t){if(["oids","fillfactor",/^autovacuum_/i,"toast_tuple_target","parallel_workers","user_catalog_table"].some(s=>Ct(e.defname??"",s)))return "";let r=super.DefElem(e,t);throw new S({DefElem:e},`DefElem "${e.defname}" (${r}) not supported`)}TypeName(e,t){if(!e.names)return "";let n=e.names.map(s=>s.String?s.String.sval||s.String.str:"").filter(Boolean);if(n.length===0)return "";let r=n.length===2&&n[0]==="pg_catalog"?n[1]:n.join(".");return e.arrayBounds&&e.arrayBounds.length>0||this.enums.has(r.toLowerCase())?"TEXT":Ut(r)}ColumnDef(e,t){let n=[],r=e.colname;r&&n.push(this.quoteIfNeeded(r));let s=false,o=false,a=null,l=null,u=null,p=false;if(e.typeName){let c=e.typeName.names?.map(y=>y.String?.sval||y.String?.str).filter(Boolean);u=c&&(c.length===2&&c[0]==="pg_catalog"?c[1]:c[0]),s=!!(u&&Re(u)),p=!!(e.typeName.arrayBounds&&e.typeName.arrayBounds.length>0);let d=Array.isArray(e.typeName.typmods)?e.typeName.typmods:[],E=y=>d[y]?.A_Const?.ival?.ival??d[y]?.A_Const?.val?.ival?.ival;if(u&&Ae(u)&&d.length>0){let y=E(0);typeof y=="number"&&y>0&&(a={maxLen:y});}if(u&&ke(u)&&d.length>=2){let y=E(0),m=E(1);typeof y=="number"&&typeof m=="number"&&y>0&&m>=0&&(l={precision:y,scale:m});}if(e.constraints){let y=Array.isArray(e.constraints)?e.constraints:[];o=y.some(m=>m.Constraint?.contype==="CONSTR_PRIMARY"),y.some(m=>m.Constraint?.contype==="CONSTR_IDENTITY")&&(s=true);}n.push(this.TypeName(e.typeName,t));}if(e.constraints){let c=Array.isArray(e.constraints)?e.constraints:[],d=c.map(y=>this.visit(y,t));n.push(...d.filter(Boolean));let E=c.some(y=>y.Constraint?.contype==="CONSTR_CHECK");s&&o&&!E&&n.push("AUTOINCREMENT");}if(r&&u){let c={isArray:p};a&&(c.lengthConstraint=a.maxLen),l&&(c.numericPrecision=l);let d=this.enums.get(u.toLowerCase());d&&(c.enumValues=d);let m=M({schema:"public",table:"",column:r,pgTypeName:u,nullable:true,defaultValue:null,defaultFn:null,isPrimaryKey:o,isUnique:false,isSerial:s},c).checkConstraint();m&&n.push(`CHECK (${m})`);}return n.join(" ")}Constraint(e,t){let n=e.contype;if(n==="CONSTR_IDENTITY"||n==="CONSTR_ATTR_DEFERRABLE"||n==="CONSTR_ATTR_NOT_DEFERRABLE"||n==="CONSTR_ATTR_DEFERRED"||n==="CONSTR_ATTR_IMMEDIATE")return "";if(n==="CONSTR_NULL")return "NULL";if(n==="CONSTR_NOTNULL")return "NOT NULL";if(n==="CONSTR_DEFAULT"&&e.raw_expr){let r=this.visit(e.raw_expr,t);return r.includes("(")&&!r.startsWith("(")?`DEFAULT (${r})`:`DEFAULT ${r}`}if(n==="CONSTR_CHECK"&&e.raw_expr){let r=[];e.conname&&r.push("CONSTRAINT",Ne(e.conname)),r.push("CHECK");let s=this.visit(e.raw_expr,t);return r.push(`(${s})`),r.join(" ")}if(n==="CONSTR_PRIMARY")return e.keys&&e.keys.length>0?`PRIMARY KEY (${q(e.keys).map(s=>this.visit(s,t)).join(", ")})`:"PRIMARY KEY";if(n==="CONSTR_UNIQUE")return e.keys&&e.keys.length>0?`UNIQUE (${q(e.keys).map(s=>this.visit(s,t)).join(", ")})`:"UNIQUE";if(n==="CONSTR_FOREIGN")return super.Constraint(e,t).replace(/FOREIGN\s+KEY\s+REFERENCES/gi,"REFERENCES");if(n==="CONSTR_GENERATED"&&e.raw_expr)return `GENERATED ALWAYS AS (${this.visit(e.raw_expr,t)}) STORED`;if(n==="CONSTR_EXCLUSION")throw new S({Constraint:e},"EXCLUSION constraints are not supported in SQLite");return ""}FuncCall(e,t){let r=(e.funcname||[]).map(u=>u.String?.sval||u.String?.str).filter(Boolean);if(r.length===0)throw new Error("Function call has no name");let s=r[r.length-1].toLowerCase();if(s==="extract"&&e.args&&e.args.length>=2){let u=e.args[0];if((u?.A_Const?.sval?.sval||u?.String?.sval)==="epoch")return `strftime('%s', ${this.visit(e.args[1],t)})`}let a=(e.args??[]).map(u=>this.visit(u,t));if(e.agg_star)return `${s}(*)`;if(e.agg_distinct)return `${s}(DISTINCT ${a.join(", ")})`;let l=ut(s,this.functionResolution);if(l){if(l.sqliteExpr!==null){let u=l.sqliteExpr;return u.includes("(")?u:`${u}(${a.join(", ")})`}if(l.jsFn!==null){let u=De[s];if(u?.sqlite){let p=u.sqlite();return p.includes("(")?p:`${p}(${a.join(", ")})`}}}throw new S({FuncCall:e},`Function call "${s}" not supported`)}SQLValueFunction(e,t){switch(e.op){case "SVFOP_CURRENT_TIMESTAMP":return "datetime('now')";case "SVFOP_CURRENT_DATE":return "date('now')";case "SVFOP_CURRENT_TIME":return "time('now')";default:throw new S({SQLValueFunction:e},`SQLValueFunction "${e.op}" not supported`)}}ResTarget(e,t){if(e.indirection&&e.indirection.length>0)throw new S({ResTarget:e},"Indirections are not supported in SQLite");let n=[];return t.update&&e.name?(n.push(this.quoteIfNeeded(e.name)),n.push("="),e.val&&n.push(this.deparse(e.val,t))):t.insertColumns&&e.name?n.push(this.quoteIfNeeded(e.name)):(e.val&&n.push(this.deparse(e.val,t)),e.name&&n.push(this.Alias({aliasname:e.name},t))),n.join(" ")}A_Expr(e,t){if(["AEXPR_OP_ALL","AEXPR_OP_ANY"].includes(e.kind))throw new S({A_Expr:e},"ALL/ANY/SOME comparison operators are not supported. Use NOT EXISTS or IN instead");if(e.name&&e.name.length>0){if(e.name.length>1)throw new S({A_Expr:e},"Schema-qualified OPERATOR() syntax is not supported in SQLite");let n=e.name[0]?.String?.sval||e.name[0]?.String?.str;if(n){if(!e.lexpr||!e.rexpr)throw new S({A_Expr:e},"A_Expr missing left or right expression");if(!qt.includes(n.toUpperCase()))throw new S({A_Expr:e},`Operator "${n}" is not supported in SQLite`);if(n==="~~"||n==="~~*"){let r=this.visit(e.lexpr,t),s=this.visit(e.rexpr,t);return `${r} LIKE ${s}`}if(n==="!~~"||n==="!~~*"){let r=this.visit(e.lexpr,t),s=this.visit(e.rexpr,t);return `${r} NOT LIKE ${s}`}if(n==="~"||n==="~*"){let r=this.visit(e.lexpr,t),s=this.visit(e.rexpr,t);return `${r} GLOB ${s}`}}}return super.A_Expr(e,t)}IndexStmt(e,t){let n=["CREATE"];e.unique&&n.push("UNIQUE"),n.push("INDEX"),e.if_not_exists&&n.push("IF NOT EXISTS"),e.idxname&&n.push(Ne(e.idxname)),n.push("ON"),e.relation&&n.push(this.RangeVar(e.relation,t));let r=(e.indexParams??[]).map(s=>"IndexElem"in s?this.IndexElem(s.IndexElem,t):this.visit(s,t)).filter(Boolean);return n.push(`(${r.join(", ")})`),n.join(" ")}IndexElem(e,t){let n=[];return e.name?n.push(Ne(e.name)):e.expr&&n.push(`(${this.visit(e.expr,t)})`),e.ordering==="SORTBY_ASC"&&n.push("ASC"),e.ordering==="SORTBY_DESC"&&n.push("DESC"),e.nulls_ordering==="SORTBY_NULLS_FIRST"&&n.push("NULLS FIRST"),e.nulls_ordering==="SORTBY_NULLS_LAST"&&n.push("NULLS LAST"),n.join(" ")}TypeCast(e,t){if(!e.arg||!e.typeName)return super.TypeCast(e,t);if([...this.helper.walk(e)].filter(({node:o})=>"A_Star"in o).length>0)throw new S({TypeCast:e},"A.* in type casts are not supported in SQLite");if(e.typeName.arrayBounds&&e.typeName.arrayBounds.length>0){if("A_Const"in e.arg&&e.arg.A_Const.sval){let o=e.arg.A_Const.sval.sval;if(o.startsWith("{")&&o.endsWith("}")){let a=e.typeName.names?.map(c=>c.String?.sval).filter(Boolean)??[],l=a.length===2&&a[0]==="pg_catalog"?a[1]:a[0],p=["text","varchar","character varying","char","bpchar","name","uuid"].includes(l?.toLowerCase());try{let c=this.parsePgArrayLiteral(o,p);return `'${JSON.stringify(c).replace(/'/g,"''")}'`}catch{}}}return this.visit(e.arg,t)}let r=this.visit(e.arg,t),s=this.TypeName(e.typeName,t);return `CAST(${r} AS ${s})`}A_ArrayExpr(e,t){let n=q(e.elements),r=this.tryExtractStaticArray(n);return r!==void 0?`'${JSON.stringify(r).replace(/'/g,"''")}'`:`json_array(${n.map(o=>this.visit(o,t)).join(", ")})`}tryExtractStaticArray(e){let t=[];for(let n of e)if("A_ArrayExpr"in n){let r=q(n.A_ArrayExpr.elements),s=this.tryExtractStaticArray(r);if(s===void 0)return;t.push(s);}else if("A_Const"in n){let r=n.A_Const;if(r.isnull)t.push(null);else if(r.ival)t.push(r.ival.ival);else if(r.fval)t.push(parseFloat(r.fval.fval));else if(r.sval)t.push(r.sval.sval);else if("boolval"in r)t.push(r.boolval.boolval===true);else return}else return;return t}parsePgArrayLiteral(e,t){if(!e.startsWith("{")||!e.endsWith("}"))throw new Error("Not a PG array literal");let n=e.slice(1,-1);if(n.length===0)return [];let r=[],s=0;for(;s<n.length;)if(n[s]==="{"){let o=0,a=s;for(;a<n.length;){if(n[a]==="{")o++;else if(n[a]==="}"&&(o--,o===0))break;a++;}r.push(this.parsePgArrayLiteral(n.slice(s,a+1),t)),s=a+1,n[s]===","&&s++;}else if(n[s]==='"'){let o=s+1,a="";for(;o<n.length&&n[o]!=='"';)n[o]==="\\"&&o++,a+=n[o],o++;r.push(a),s=o+1,n[s]===","&&s++;}else {let o=s;for(;o<n.length&&n[o]!==","&&n[o]!=="}";)o++;if(o===s)throw new Error("Malformed PG array literal");let a=n.slice(s,o);if(a==="NULL")r.push(null);else if(t)r.push(a);else {let l=Number(a);r.push(isNaN(l)?a:l);}s=o,n[s]===","&&s++;}return r}BetweenExpr(e,t){return super.A_Expr(e,t)}AlterTableStmt(e,t){let n=e.cmds??[],r=["AT_EnableRowSecurity","AT_ForceRowSecurity"],s=n.filter(p=>"AlterTableCmd"in p&&!r.includes(p.AlterTableCmd.subtype));if(s.length===0)return "";if(!["OBJECT_TABLE","OBJECT_INDEX","OBJECT_VIEW"].includes(e.objtype))throw new S({AlterTableStmt:e},`AlterTableStmt with objtype ${e.objtype} is not supported`);let o=["AT_AddColumn","AT_DropColumn"],a=["AT_AlterColumnType","AT_SetNotNull","AT_DropNotNull","AT_ColumnDefault","AT_AddConstraint","AT_DropConstraint"],l=[],u=[];for(let p of s){let c=p.AlterTableCmd.subtype;if(o.includes(c)){let d={...e,cmds:[p]};l.push(super.AlterTableStmt(d,t));}else if(a.includes(c))u.push(p.AlterTableCmd);else throw new S({AlterTableStmt:e},`AlterTableCmd with subtype ${c} is not supported in SQLite`)}if(u.length>0){let p=this.getRelationName(e.relation);l.push(this.generateRebuildSql(p,u));}return l.join(`;
15
+ `)}AlterTableCmd(e,t){if(!["AT_AddColumn","AT_DropColumn"].includes(e.subtype))throw new S({AlterTableCmd:e},`AlterTableCmd with subtype ${e.subtype} is not supported`);return e.subtype==="AT_DropColumn"&&e.behavior?super.AlterTableCmd({...e,behavior:void 0},t):super.AlterTableCmd(e,t)}DefineStmt(e,t){if(e.kind==="OBJECT_AGGREGATE")throw new Error("AGGREGATE definitions are not supported in SQLite");return super.DefineStmt(e,t)}InsertStmt(e,t){if("selectStmt"in e){let r=(e.selectStmt?.SelectStmt?.valuesLists??[]).map(s=>s.List?.items?.map(o=>"SetToDefault"in o));if(r.length===1&&r[0]?.every(s=>s===true))return super.InsertStmt({...e,selectStmt:void 0,cols:void 0},t);if(r.some(s=>s.some(o=>o===true)))throw new S({InsertStmt:e},"Insert with partial DEFAULT values is not supported")}return super.InsertStmt(e,t)}SelectStmt(e,t){if(this.helper.hasUnsafeStar())throw new S({SelectStmt:e},"Row-wise comparison using .* is not supported in SQLite. Expand to explicit per-column comparisons instead.");if(e.intoClause)throw new S({SelectStmt:e},"SELECT ... INTO clause is not supported in SQLite");if(e.distinctClause){let r=q(e.distinctClause);if(r.length>0&&Object.keys(r[0]).length>0)throw new S({SelectStmt:e},"DISTINCT ON clause is not supported in SQLite. Use window functions instead.")}if(e.limitOffset&&!e.limitCount)throw new S({SelectStmt:e},"OFFSET without LIMIT is not supported in SQLite");let n=super.SelectStmt(e,t);if(/^SELECT\s+FROM/.test(n))throw new S({SelectStmt:e},"SELECT without a target list is not supported in SQLite");return n}JoinExpr(e,t){return e.alias&&this.Alias(e.alias,t),super.JoinExpr(e,t)}A_Const(e,t){if(e.bsval!==void 0)throw new S({A_Const:e},"Bit string literals are not supported in SQLite");let n=super.A_Const(e,t);return typeof n=="string"&&n.startsWith("E'")?n.substring(2,n.length-1):n}SortBy(e,t){if(e.sortby_dir==="SORTBY_USING"){let n=q(e.useOp),r=n[0]?.String?.sval;if(n.length>1||!["<",">"].includes(r??""))throw new S({SortBy:e},"Only `USING <` or `USING >` are supported.");e.sortby_dir=r==="<"?"SORTBY_DESC":"SORTBY_ASC",e.useOp=void 0;}return super.SortBy(e,t)}RangeSubselect(e,t){if(e.lateral)throw new S({RangeSubselect:e},"LATERAL subqueries are not supported in SQLite");return super.RangeSubselect(e,t)}SubLink(e,t){if(["ANY_SUBLINK","ALL_SUBLINK"].includes(e.subLinkType))throw new S({SubLink:e},"ANY/ALL/SOME subqueries are not supported. Use NOT EXISTS or IN instead");if(e.subLinkType==="ARRAY_SUBLINK")throw new S({SubLink:e},"ARRAY subqueries are not supported in SQLite");return super.SubLink(e,t)}LockingClause(e,t){return ""}UpdateStmt(e,t){if(t.parentNodeTypes.includes("SelectStmt"))throw new S({UpdateStmt:e},"UPDATE ... FROM (SELECT ...) is not supported in SQLite");return super.UpdateStmt(e,t)}Alias(e,t){if(e.colnames&&e.colnames.length>0)throw new S({Alias:e},"Aliasing with column names is not supported in SQLite");return `AS "${e.aliasname}"`}CreateFunctionStmt(e,t){let n=e.options??[],r=e.returnType?.names?.map(u=>u.String?.sval).filter(Boolean).join("."),s=n.find(u=>u.DefElem?.defname==="language")?.DefElem?.arg?.String?.sval;if(r!=="trigger"||s!=="plpgsql")throw new S({CreateFunctionStmt:e},"Only trigger functions with LANGUAGE plpgsql are supported");let o=e.funcname?.map(u=>u.String?.sval).filter(Boolean).pop();if(!o)throw new Error("Function has no name");let a=n.find(u=>u.DefElem?.defname==="as")?.DefElem?.arg?.List?.items?.[0]?.String?.sval;if(!a)throw new Error("Function has no body");let l=this.plpgsqlParser.parse(a);return this.triggerFunctions.set(o,l),""}CreateTrigStmt(e,t){let n=e.trigname,r=this.RangeVar(e.relation,t),s=e.funcname?.map(c=>c.String?.sval).filter(Boolean).pop();if(!s)throw new Error(`Trigger "${n}" has no function reference`);let o=this.triggerFunctions.get(s);if(!o)throw new S({CreateTrigStmt:e},`Trigger "${n}" references unknown function "${s}"`);let a=e.timing===2?"BEFORE":e.timing===64?"INSTEAD OF":"AFTER",l=[];if(e.events&4&&l.push("INSERT"),e.events&8&&l.push("DELETE"),e.events&16)if(e.columns?.length){let c=e.columns.map(d=>d.String?.sval).filter(Boolean);l.push(`UPDATE OF ${c.join(", ")}`);}else l.push("UPDATE");let u=l.join(" OR "),p=this.buildTriggerBody(o,r,t);return [`CREATE TRIGGER ${n}`,`${a} ${u} ON ${r}`,"FOR EACH ROW","BEGIN",...p.map(c=>` ${c};`),"END"].join(`
16
+ `)}buildTriggerBody(e,t,n){let r=[],s=[];for(let o of e.statements)if(o.type!=="return"){if(o.type==="assignment"){s.push(o);continue}s.length>0&&(r.push(this.buildAssignmentUpdate(s,t,n)),s.length=0),o.type==="dml"&&r.push(this.translateDml(o.sql,n));}return s.length>0&&r.push(this.buildAssignmentUpdate(s,t,n)),r}buildAssignmentUpdate(e,t,n){let r=e.map(s=>{let o=this.translateExpression(s.expression,n);return `${s.column} = ${o}`});return `UPDATE ${t} SET ${r.join(", ")} WHERE rowid = NEW.rowid`}translateExpression(e,t){try{let n=`SELECT ${e}`,r=e.trim().toLowerCase();return r==="now()"||r==="current_timestamp"?"datetime('now')":e}catch{return e}}translateDml(e,t){return e.replace(/\bnow\(\)/gi,"datetime('now')").replace(/\bcurrent_timestamp\b/gi,"datetime('now')").replace(/\bgen_random_uuid\(\)/gi,this.uuidExpression()).replace(/\buuid_generate_v4\(\)/gi,this.uuidExpression())}uuidExpression(){return "lower(hex(randomblob(4))) || '-' || lower(hex(randomblob(2))) || '-4' || substr(lower(hex(randomblob(2))),2) || '-' || substr('89ab',abs(random()) % 4 + 1, 1) || substr(lower(hex(randomblob(2))),2) || '-' || lower(hex(randomblob(6)))"}NullTest(e,t){if(e.arg?.ColumnRef?.fields?.length>1)throw new S({NullTest:e},"row-level NULL tests are not supported in SQLite");return super.NullTest(e,t)}RenameStmt(e,t){if(!e.renameType)throw new Error("RenameStmt requires renameType");let n=["OBJECT_TABLE","OBJECT_VIEW","OBJECT_COLUMN"];if(e.renameType==="OBJECT_COLUMN"&&(e.relationType==="OBJECT_FOREIGN_TABLE"||e.relationType==="OBJECT_VIEW"))throw new S({RenameStmt:e},`RenameStmt with relationType ${e.relationType} is not supported`);if(!n.includes(e.renameType))throw new S({RenameStmt:e},`RenameStmt with renameType ${e.renameType} is not supported in SQLite`);return super.RenameStmt(e,t)}DropStmt(e,t){let n=e.removeType;if(["OBJECT_TABLE","OBJECT_VIEW","OBJECT_INDEX","OBJECT_TRIGGER"].includes(n))return super.DropStmt(e,t);if(["OBJECT_POLICY"].includes(n))return "";throw new S({DropStmt:e},`DROP with removeType ${n} is not supported in SQLite`)}generateRebuildSql(e,t){if(!this.introspection)throw new Error(`ALTER TABLE on "${e}" requires 12-step rebuild but no introspection was provided. Pass introspection in DeparseOptions to enable column type changes, NOT NULL, defaults, and constraint modifications.`);let n=this.buildDesiredSchema(this.introspection,e,t),r=new G,s=new Q,o=r.diff(this.introspection,n);return o.has_changes?s.plan(o,this.introspection,n).steps.filter(l=>!["disable_foreign_keys","begin_transaction","commit_transaction","enable_foreign_keys"].includes(l.type)).map(l=>l.sql).join(`
17
+ `):""}buildDesiredSchema(e,t,n){let r={...e,tables:e.tables.map(s=>({...s})),columns:e.columns.map(s=>({...s})),indexes:e.indexes.map(s=>({...s})),foreign_keys:e.foreign_keys.map(s=>({...s})),primary_keys:e.primary_keys.map(s=>({...s})),views:e.views.map(s=>({...s})),triggers:(e.triggers??[]).map(s=>({...s})),check_constraints:e.check_constraints.map(s=>({...s})),unique_constraints:(e.unique_constraints??[]).map(s=>({...s})),comments:(e.comments??[]).map(s=>({...s})),custom_types:e.custom_types.map(s=>({...s}))};for(let s of n){let o=r.columns.findIndex(a=>a.table===t&&a.name===s.name);switch(s.subtype){case "AT_AlterColumnType":{if(o===-1)break;let a=this.extractTypeName(s);a&&(r.columns[o]={...r.columns[o],type:a.toLowerCase()});break}case "AT_SetNotNull":{if(o===-1)break;r.columns[o]={...r.columns[o],nullable:false};break}case "AT_DropNotNull":{if(o===-1)break;r.columns[o]={...r.columns[o],nullable:true};break}case "AT_ColumnDefault":{if(o===-1)break;if(s.def){let a=this.extractDefaultValue(s);r.columns[o]={...r.columns[o],default_value:a};}else r.columns[o]={...r.columns[o],default_value:null};break}case "AT_AddConstraint":case "AT_DropConstraint":{let a=r.tables.findIndex(l=>l.name===t);a!==-1&&(r.tables[a]={...r.tables[a],sql:r.tables[a].sql+" /* modified */"});break}}}return this.rebuildTableSql(r,t),r}rebuildTableSql(e,t){let n=e.tables.findIndex(c=>c.name===t);if(n===-1)return;let r=e.columns.filter(c=>c.table===t),s=e.foreign_keys.filter(c=>c.table===t),o=e.check_constraints.filter(c=>c.table===t),a=r.map(c=>{let d=`${h(c.name)} ${c.type||"TEXT"}`;return c.is_primary_key&&(d+=" PRIMARY KEY"),c.nullable||(d+=" NOT NULL"),c.default_value!=null&&(d+=` DEFAULT ${c.default_value}`),d}),l=s.map(c=>`FOREIGN KEY (${h(c.column)}) REFERENCES ${h(c.ref_table)}(${h(c.ref_column)}) ON UPDATE ${c.on_update} ON DELETE ${c.on_delete}`),u=o.map(c=>`CHECK (${c.expression})`),p=[...a,...l,...u];e.tables[n]={...e.tables[n],sql:`CREATE TABLE ${h(t)} (${p.join(", ")}) STRICT`};}extractTypeName(e){let t=e.def?.ColumnDef;return t?.typeName?.TypeName?(t.typeName.TypeName.names??[]).map(r=>r.String?.sval).filter(Boolean).pop()??null:null}extractDefaultValue(e){return e.def?"Integer"in e.def?String(e.def.Integer.ival):"Float"in e.def?e.def.Float.fval:"String"in e.def?`'${e.def.String.sval}'`:null:null}};});var R,W,ft=g(()=>{U();X();R=class extends S{constructor(e,t){super(e,`Unsupported expression: ${t}`);}},W=class{deparse(e){if("A_Const"in e){let r=e.A_Const;if(r.boolval!==void 0)return r.boolval.boolval?{}:{$always:false}}let t=Object.keys(e)[0],n=this[t];if(!n)throw new R({[t]:e},`Unsupported expression: ${t}`);return n.call(this,e[t])}deparseValue(e){if("A_Const"in e)return this.A_Const(e.A_Const);if("ColumnRef"in e)return this.ColumnRef(e.ColumnRef);if("FuncCall"in e)return this.FuncCall(e.FuncCall);if("SubLink"in e)return this.SubLink(e.SubLink);if("TypeCast"in e)return this.TypeCast(e.TypeCast);if("A_Expr"in e){let n=this.isJwtAccessor(e.A_Expr);return n||this.A_Expr(e.A_Expr)}if("BoolExpr"in e)return this.BoolExpr(e.BoolExpr);let t=Object.keys(e)[0];throw new R({[t]:e},`deparseValue: ${t}`)}A_Expr(e){if(e.kind==="AEXPR_OP"){let t=e.name?.[0],n=t?te(t):void 0;if(!n)throw new R({A_Expr:e},"A_Expr missing operator");let r=this.isJwtAccessor(e);if(r)return {[r]:{}};let s=e.lexpr?this.deparseValue(e.lexpr):void 0,o=e.rexpr?this.deparseValue(e.rexpr):void 0,a=this.mapOperator(n);if(!a)throw new R({A_Expr:e},`Unsupported operator: ${n}`);let l=e.rexpr!=null&&"ColumnRef"in e.rexpr;if(typeof s=="string"&&s.startsWith("{{")&&l)return {[o]:{[a]:s}};let u=l&&typeof o=="string"?{$ref:o}:o;return {[s]:{[a]:u}}}if(e.kind==="AEXPR_LIKE"||e.kind==="AEXPR_ILIKE"){let t=e.lexpr?this.deparseValue(e.lexpr):void 0,n=e.rexpr?this.deparseValue(e.rexpr):void 0,s=(e.name?.[0]?te(e.name[0]):"~~")==="!~~"?"$notLike":"$like";return {[t]:{[s]:n}}}if(e.kind==="AEXPR_IN"){let t=e.lexpr?this.deparseValue(e.lexpr):void 0,n=e.rexpr&&"List"in e.rexpr&&e.rexpr.List.items?e.rexpr.List.items.map(r=>this.deparseValue(r)):[];return {[t]:{$in:n}}}throw new R({A_Expr:e},`A_Expr kind: ${e.kind}`)}BoolExpr(e){let t=e.args??[];switch(e.boolop){case "AND_EXPR":return {$and:t.map(n=>this.deparse(n))};case "OR_EXPR":return {$or:t.map(n=>this.deparse(n))};case "NOT_EXPR":return {$not:this.deparse(t[0])};default:throw new R({BoolExpr:e},`BoolExpr op: ${e.boolop}`)}}NullTest(e){let t=e.arg?this.deparseValue(e.arg):void 0;return e.nulltesttype==="IS_NULL"?{[t]:{$is:null}}:{[t]:{$isNot:null}}}SubLink(e){if(e.subLinkType==="ANY_SUBLINK"){let t=e.testexpr?this.deparseValue(e.testexpr):void 0,n=e.subselect?this.SelectStmt(e.subselect.SelectStmt):void 0;return {[t]:{$in:n}}}if(e.subLinkType==="EXISTS_SUBLINK")return {$exists:e.subselect?this.SelectStmt(e.subselect.SelectStmt):void 0};if(e.subLinkType==="EXPR_SUBLINK"){let t=e.subselect?e.subselect.SelectStmt:void 0;if(t?.fromClause?.length)return this.SelectStmt(t);if(t?.targetList?.[0]){let n=t.targetList[0],r="ResTarget"in n?n.ResTarget:void 0;if(r?.val){let s=this.deparseValue(r.val);return s}}}throw new R({SubLink:e},`SubLink type: ${e.subLinkType}`)}SelectStmt(e){let{from:t,schema:n,join:r}=this.deparseFromClause(e.fromClause??[]),s=[];for(let d of e.targetList??[]){let E="ResTarget"in d?d.ResTarget:void 0;if(E?.val){let y=this.deparseValue(E.val);Array.isArray(y)?s.push(...y.map(String)):y!=null&&y!==""&&s.push(String(y));}}let o=e.whereClause?this.deparse(e.whereClause):void 0,a=this.deparseSortClause(e.sortClause),l=this.deparseLimit(e.limitCount),u=this.deparseLimit(e.limitOffset),p=this.deparseGroupClause(e.groupClause),c={type:"query",from:t,select:s};return n&&(c.schema=n),Object.keys(r).length>0&&(c.join=r),o&&(c.where=o),a.length>0&&(c.order=a),l!==void 0&&(c.limit=l),u!==void 0&&(c.offset=u),p.length>0&&(c.group=p),c}FuncCall(e){let t=this.isAuthFunc(e.funcname??[]);if(t)return t;throw new R({FuncCall:e},`FuncCall: ${F(e.funcname??[]).join(".")}`)}ColumnRef(e){let t=F(e.fields??[]);return t.length===1?t[0]:t.join(".")}A_Const(e){if(e.boolval!==void 0)return e.boolval.boolval;if(e.ival!==void 0)return e.ival.ival??0;if(e.fval!==void 0)return parseFloat(e.fval.fval??"0");if(e.sval!==void 0)return e.sval.sval??"";if(e.isnull)return null;throw new R({A_Const:e},"A_Const: unknown variant")}TypeCast(e){if(!e.arg)throw new R({TypeCast:e},"TypeCast: missing arg");return this.deparseValue(e.arg)}BooleanTest(e){let t=e.arg?this.deparseValue(e.arg):void 0;return e.booltesttype==="IS_TRUE"?{[t]:{$eq:true}}:{[t]:{$eq:false}}}deparseFromClause(e){let t={};if(e.length===0)return {from:"",join:t};let n=e[0];if("RangeVar"in n){let r=n.RangeVar;return {from:r.relname??"",schema:r.schemaname,join:t}}if("JoinExpr"in n){let{from:r,schema:s}=this.walkJoinExpr(n.JoinExpr,t);return {from:r,schema:s,join:t}}return {from:"",join:t}}walkJoinExpr(e,t){let n={from:""};if(e.larg)if("RangeVar"in e.larg){let r=e.larg.RangeVar;n={from:r.relname??"",schema:r.schemaname};}else "JoinExpr"in e.larg&&(n=this.walkJoinExpr(e.larg.JoinExpr,t));if(e.rarg&&"RangeVar"in e.rarg){let r=e.rarg.RangeVar,s=r.relname??"",o=r.alias?.aliasname??s,a=e.jointype==="JOIN_LEFT"?"left":"inner",l={from:s,type:a};e.quals&&(l.on=this.deparse(e.quals));let u=o;if(u in t){let p=2;for(;`${u}_${p}`in t;)p++;u=`${u}_${p}`;}t[u]=l;}return n}deparseSortClause(e){if(!e)return [];let t=[];for(let n of e){if(!("SortBy"in n))continue;let r=n.SortBy;if(!r.node)continue;let s=String(this.deparseValue(r.node)),o=r.sortby_dir==="SORTBY_DESC"?"desc":"asc",a={column:s,direction:o};r.sortby_nulls==="SORTBY_NULLS_FIRST"?a.nullsFirst=true:r.sortby_nulls==="SORTBY_NULLS_LAST"&&(a.nullsFirst=false),t.push(a);}return t}deparseLimit(e){if(!e)return;let t=this.deparseValue(e);return typeof t=="number"?t:Number(t)}deparseGroupClause(e){return e?e.map(t=>String(this.deparseValue(t))):[]}isAuthFunc(e){let t=F(e);if(t.length===2&&t[0]==="auth"){if(t[1]==="uid")return "{{auth.uid}}";if(t[1]==="jwt")return "{{auth.jwt}}";if(t[1]==="role")return "{{auth.role}}";throw new Error(`Unsupported auth function: "${t.slice(1).join(".")}"`)}return null}isJwtAccessor(e){if(e.kind!=="AEXPR_OP")return null;let t=e.name?.[0]?te(e.name[0]):void 0;if(t!=="->"&&t!=="->>")return null;let n=e.rexpr&&"A_Const"in e.rexpr?e.rexpr.A_Const.sval?.sval:void 0;if(n===void 0)return null;if(e.lexpr&&"FuncCall"in e.lexpr)return this.isAuthFunc(e.lexpr.FuncCall.funcname??[])==="{{auth.jwt}}"?`{{auth.jwt.${n}}}`:null;if(e.lexpr&&"A_Expr"in e.lexpr){let r=this.isJwtAccessor(e.lexpr.A_Expr);if(r)return `${r.slice(0,-2)}.${n}}}`}return null}mapOperator(e){switch(e){case "=":return "$eq";case "<>":case "!=":return "$neq";case ">":return "$gt";case ">=":return "$gte";case "<":return "$lt";case "<=":return "$lte";case "~~":return "$like";case "!~~":return "$notLike";default:return}}};});var ge,Jt=g(()=>{ge=class{table;schema;fields;constructor(e,t="public",n=new Map){this.table=e,this.schema=t,this.fields=n;}get(e){return this.fields.get(e)}has(e){return this.fields.has(e)}set(e,t){this.fields.set(e,t);}columns(){return Array.from(this.fields.keys())}all(){return Array.from(this.fields.values())}serializeRow(e){let t={};for(let[n,r]of Object.entries(e)){let s=this.fields.get(n);t[n]=s?s.serialize(r):r;}return t}deserializeRow(e){let t={};for(let[n,r]of Object.entries(e)){let s=this.fields.get(n);t[n]=s?s.deserialize(r):r;}return t}applyDefaults(e){let t={...e};for(let[n,r]of this.fields)!(n in t)&&r.context.defaultFn&&(t[n]=r.context.defaultFn());return t}};});var Yt=g(()=>{O();Je();Le();Ye();Xe();A();ze();He();Ze();et();tt();nt();rt();st();it();ot();at();lt();ct();pt();Jt();});function zt(i){let e=new Map;for(let t of i.stmts??[]){if(!t.stmt||!("CreateEnumStmt"in t.stmt))continue;let n=t.stmt.CreateEnumStmt,r=F(n.typeName??[]).join(".");if(!r||!n.vals)continue;let s=F(n.vals);e.set(r.toLowerCase(),s);}return e}function Ht(i){let e=new Map;for(let t of i.stmts??[]){if(!t.stmt||!("VariableSetStmt"in t.stmt))continue;let n=t.stmt.VariableSetStmt,r=n.name,s=Ft(n.args?.[0]??{});e.set(r,{value:s,local:n.is_local});}return e}function Zt(i){let e=new W,t=new Set,n=[];for(let r of i.stmts??[])if(r.stmt){if("CreatePolicyStmt"in r.stmt){let s=r.stmt.CreatePolicyStmt,o=s.table?.relname??"",a=s.table?.schemaname,l={select:"SELECT",insert:"INSERT",update:"UPDATE",delete:"DELETE"},u=s.cmd_name?l[s.cmd_name]??"ALL":"ALL",p=s.permissive===true,c=[],d=false;for(let T of s.roles??[])if("RoleSpec"in T){let f=T.RoleSpec;f.roletype==="ROLESPEC_PUBLIC"?f.location===-1&&(d=true):f.roletype==="ROLESPEC_CSTRING"&&f.rolename&&c.push(f.rolename);}if(d){let T=a?`${a}.${o}`:o,f=s.policy_name??"",C=`${T}::${f}`;Xt.has(C)||(Xt.add(C),console.warn(`[supalite] policy "${f}" on "${T}" has no TO clause \u2014 applies to all roles (PUBLIC). For clarity, prefer an explicit \`TO <role>\` clause (e.g. \`TO authenticated\`).`));}let E=s.qual?e.deparse(s.qual):void 0,y=s.with_check?e.deparse(s.with_check):void 0,m=new D({name:s.policy_name??"",table:o,schema:a,command:u,permissive:p,roles:c,using:E,withCheck:y});n.push(m);}if("AlterTableStmt"in r.stmt){let s=r.stmt.AlterTableStmt;if((s.cmds??[]).some(l=>"AlterTableCmd"in l&&(l.AlterTableCmd.subtype==="AT_EnableRowSecurity"||l.AlterTableCmd.subtype==="AT_ForceRowSecurity"))){let l=s.relation?.relname??"";t.add(l);}}}return {policies:n,tables:t}}function en(i,e){let t=new Map;for(let n of i.stmts??[]){if(!n.stmt||!("CreateStmt"in n.stmt))continue;let r=n.stmt.CreateStmt,s=r.relation?.relname??"",o=r.relation?.schemaname??"public";if(!s)continue;let a=new ge(s,o);for(let l of r.tableElts??[]){if(!("ColumnDef"in l))continue;let u=l.ColumnDef,p=u.colname;if(!p)continue;let c=u.typeName?.names?.map(b=>b.String?.sval||b.String?.str).filter(Boolean),d=c&&(c.length===2&&c[0]==="pg_catalog"?c[1]:c[0]);if(!d)continue;let E=!!u.typeName?.arrayBounds?.length,y=Array.isArray(u.typeName?.typmods)?u.typeName.typmods:[],m=b=>y[b]?.A_Const?.ival?.ival??y[b]?.A_Const?.val?.ival?.ival,T={isArray:E};if(Ae(d)&&y.length>0){let b=m(0);typeof b=="number"&&b>0&&(T.lengthConstraint=b);}if(ke(d)&&y.length>=2){let b=m(0),V=m(1);typeof b=="number"&&typeof V=="number"&&b>0&&V>=0&&(T.numericPrecision={precision:b,scale:V});}let f=e.get(d.toLowerCase());f&&(T.enumValues=f);let C=Array.isArray(u.constraints)?u.constraints:[],N=C.some(b=>b.Constraint?.contype==="CONSTR_PRIMARY"),w=Re(d)||C.some(b=>b.Constraint?.contype==="CONSTR_IDENTITY"),k=C.some(b=>b.Constraint?.contype==="CONSTR_NOTNULL"),I=C.find(b=>b.Constraint?.contype==="CONSTR_UNIQUE"),P=C.find(b=>b.Constraint?.contype==="CONSTR_GENERATED"),dt=C.find(b=>b.Constraint?.contype==="CONSTR_FOREIGN"),ht=C.find(b=>b.Constraint?.contype==="CONSTR_CHECK"),gt;if(dt){let b=dt.Constraint,V=b.pktable?.relname,un=b.pktable?.schemaname,yt=b.pk_attrs?.[0]?.String?.sval;V&&yt&&(gt={refSchema:un,refTable:V,refColumn:yt,constraintName:b.conname||void 0});}let cn={schema:o,table:s,column:p,pgTypeName:d,nullable:!k&&!N,defaultValue:null,defaultFn:null,isPrimaryKey:N,isUnique:!!I,isSerial:w,isGenerated:!!P,fkRef:gt,hasCheck:!!ht,checkConstraintName:ht?.Constraint?.conname||void 0,uniqueConstraintName:I?.Constraint?.conname||void 0};a.set(p,M(cn,T));}t.set(`${o}.${s}`,a);}return t}function tn(i){let e=[];for(let t of i.stmts??[]){if(!t.stmt||!("CreateStmt"in t.stmt))continue;let n=t.stmt.CreateStmt,r=n.relation?.relname??"",s=n.relation?.schemaname??"public";if(r)for(let o of n.tableElts??[]){if("ColumnDef"in o)continue;let a=o;if(!a.Constraint)continue;let l=a.Constraint,u=l.contype;if(u==="CONSTR_UNIQUE"){let p=(l.keys??[]).map(c=>c.String?.sval??c.String?.str).filter(Boolean);if(p.length===0)continue;e.push({schema:s,table:r,kind:"unique",name:l.conname||void 0,columns:p});}else if(u==="CONSTR_CHECK")e.push({schema:s,table:r,kind:"check",name:l.conname||void 0,columns:[]});else if(u==="CONSTR_FOREIGN"){let p=(l.fk_attrs??[]).map(E=>E.String?.sval??E.String?.str).filter(Boolean),c=(l.pk_attrs??[]).map(E=>E.String?.sval??E.String?.str).filter(Boolean),d=l.pktable?.relname;if(!d)continue;e.push({schema:s,table:r,kind:"foreign_key",name:l.conname||void 0,columns:p,refSchema:l.pktable?.schemaname,refTable:d,refColumns:c});}}}return e}function nn(i){let e=[];for(let t of i.stmts??[]){if(!t.stmt||!("CommentStmt"in t.stmt))continue;let n=t.stmt.CommentStmt,r=n.comment??"";if(!r)continue;let s=n.objtype,o=(n.object?.List?.items??n.object?.items??[]).map(a=>a.String?.sval??a.String?.str).filter(Boolean);if(o.length!==0){if(s==="OBJECT_TABLE"||s==="OBJECT_VIEW"){let[a,l]=o.length>=2?o:["public",o[0]];e.push({schema:a,table:l,text:r});}else if(s==="OBJECT_COLUMN"){let a="public",l,u;o.length>=3?[a,l,u]=o:[l,u]=o,e.push({schema:a,table:l,column:u,text:r});}}}return e}var Xt,rn=g(()=>{ft();U();be();Yt();X();Xt=new Set;});var on={};fn(on,{Policy:()=>D,deparseDdl:()=>mt,deparseExpression:()=>hr,deparsePostgresDdl:()=>dr,deparseSelect:()=>gr,parse:()=>J,parseExpression:()=>sn,translatePostgresDdl:()=>mr});async function mr(i,e={}){let t=await J(i);return mt(t,e).ddl}async function dr(i,e={}){let t=await J(i);return {ast:t,...mt(t,e)}}function mt(i,e={}){let t=zt(i),n=en(i,t),r=Ht(i),s=tn(i),o=nn(i),a=new Pe(i,{...e,enums:t}),{policies:l,tables:u}=Zt(i);if(e.strict)for(let p of l){if(!n.get(`${p.data.schema??"public"}.${p.data.table}`))throw new Error(`Policy "${p.data.name}" references unknown table "${p.data.table}"`);if(!u.has(p.data.table))throw new Error(`RLS is not enabled on table "${p.data.table}"`)}return {ddl:a.deparseQuery(),enums:t,rls:{tables:u,policies:l},schema:n,vars:r,tableConstraints:s,comments:o}}async function sn(i){let t=(await J(`SELECT 1 WHERE ${i}`)).stmts?.[0]?.stmt;if(!t||!("SelectStmt"in t))throw new Error("expected SelectStmt");let n=t.SelectStmt.whereClause;if(!n)throw new Error("no whereClause");return n}async function hr(i){let e=await sn(i);return new W().deparse(e)}async function gr(i){let t=(await J(i)).stmts?.[0]?.stmt;if(!t||!("SelectStmt"in t))throw new Error("expected SelectStmt");return new W().deparse(t)}var an=g(()=>{$t();Qt();ft();rn();be();});We();var hn=(i={})=>{let e=(t="m")=>[...i.exclude_tables??[],"sqlite_%"].map(n=>n.includes("%")?`${t}.name NOT LIKE '${n}'`:`${t}.name != '${n}'`).join(" AND ");return `WITH table_info AS (SELECT
49
18
  json_group_array(
50
19
  json_object(
51
20
  'name', m.name,
@@ -58,7 +27,7 @@ var qs=Object.create;var Yt=Object.defineProperty;var Vs=Object.getOwnPropertyDe
58
27
  )
59
28
  ) AS data
60
29
  FROM sqlite_master m
61
- WHERE m.type IN ('table', 'view') AND ${t()}),
30
+ WHERE m.type IN ('table', 'view') AND ${e()}),
62
31
  column_info AS (SELECT
63
32
  json_group_array(
64
33
  json_object(
@@ -130,7 +99,7 @@ var qs=Object.create;var Yt=Object.defineProperty;var Vs=Object.getOwnPropertyDe
130
99
  ) AS data
131
100
  FROM sqlite_master m
132
101
  JOIN pragma_table_xinfo(m.name) p
133
- ON m.type IN ('table', 'view') AND ${t()}
102
+ ON m.type IN ('table', 'view') AND ${e()}
134
103
  WHERE p.hidden != 1),
135
104
  index_info AS (SELECT
136
105
  json_group_array(
@@ -151,7 +120,7 @@ var qs=Object.create;var Yt=Object.defineProperty;var Vs=Object.getOwnPropertyDe
151
120
  json_group_array(ic.name ORDER BY ic.seqno) AS cols
152
121
  FROM sqlite_master m
153
122
  JOIN pragma_index_list(m.name) idx
154
- ON m.type = 'table' AND ${t()}
123
+ ON m.type = 'table' AND ${e()}
155
124
  JOIN pragma_index_info(idx.name) ic
156
125
  -- only include explicit CREATE INDEX objects; skip autoindexes from PK/UNIQUE constraints
157
126
  WHERE idx.origin = 'c' AND idx.name NOT LIKE 'sqlite_autoindex_%'
@@ -177,7 +146,7 @@ var qs=Object.create;var Yt=Object.defineProperty;var Vs=Object.getOwnPropertyDe
177
146
  ) AS data
178
147
  FROM sqlite_master m
179
148
  JOIN pragma_foreign_key_list(m.name) fk
180
- ON m.type = 'table' AND ${t()}),
149
+ ON m.type = 'table' AND ${e()}),
181
150
  pk_info AS (SELECT
182
151
  json_group_array(
183
152
  json_object(
@@ -193,14 +162,14 @@ var qs=Object.create;var Yt=Object.defineProperty;var Vs=Object.getOwnPropertyDe
193
162
  COUNT(p.name) AS field_count
194
163
  FROM sqlite_master m
195
164
  JOIN pragma_table_info(m.name) p
196
- ON m.type = 'table' AND ${t()} AND p.pk > 0
165
+ ON m.type = 'table' AND ${e()} AND p.pk > 0
197
166
  GROUP BY m.name) pk),
198
167
  view_info AS (SELECT
199
168
  json_group_array(
200
169
  json_object('name', m.name, 'sql', m.sql, 'schema', '')
201
170
  ) AS data
202
171
  FROM sqlite_master m
203
- WHERE m.type = 'view' AND ${t()}),
172
+ WHERE m.type = 'view' AND ${e()}),
204
173
  trigger_info AS (SELECT
205
174
  json_group_array(
206
175
  json_object(
@@ -211,7 +180,7 @@ var qs=Object.create;var Yt=Object.defineProperty;var Vs=Object.getOwnPropertyDe
211
180
  )
212
181
  ) AS data
213
182
  FROM sqlite_master m
214
- WHERE m.type = 'trigger' AND ${t("m")}),
183
+ WHERE m.type = 'trigger' AND ${e("m")}),
215
184
  unique_info AS (SELECT
216
185
  json_group_array(
217
186
  json_object(
@@ -227,7 +196,7 @@ var qs=Object.create;var Yt=Object.defineProperty;var Vs=Object.getOwnPropertyDe
227
196
  json_group_array(ic.name ORDER BY ic.seqno) AS cols
228
197
  FROM sqlite_master m
229
198
  JOIN pragma_index_list(m.name) idx
230
- ON m.type = 'table' AND ${t()}
199
+ ON m.type = 'table' AND ${e()}
231
200
  JOIN pragma_index_info(idx.name) ic
232
201
  WHERE idx.origin = 'u'
233
202
  GROUP BY m.name, idx.name) uc)
@@ -240,8 +209,8 @@ var qs=Object.create;var Yt=Object.defineProperty;var Vs=Object.getOwnPropertyDe
240
209
  (SELECT data FROM view_info) AS views,
241
210
  (SELECT data FROM trigger_info) AS triggers,
242
211
  (SELECT data FROM unique_info) AS unique_constraints,
243
- ${p.name?`'${p.name}'`:"'sqlite'"} AS database_name,
244
- ${p.version?`'${p.version}'`:"sqlite_version()"} AS version;`};function j(p){if(!p)return [];try{return Array.isArray(p)?p:JSON.parse(p)}catch{return []}}async function xe(p,t={}){let e=(await p.exec(Ks(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 ii=new Set(["AlterTableNode","CreateIndexNode","CreateSchemaNode","CreateTableNode","CreateTypeNode","CreateViewNode","RefreshMaterializedViewNode","DeleteQueryNode","DropIndexNode","DropSchemaNode","DropTableNode","DropTypeNode","DropViewNode","InsertQueryNode","RawNode","SelectQueryNode","UpdateQueryNode","MergeQueryNode"]),te=class extends OperationNodeTransformer{constructor(s){super();this.config=s;}#e=new Set;#s=new Set;transformNodeImpl(s,e){if(!ii.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 te(t);}transformQuery(t){return this.#e.transformNode(t.node)}async transformResult(t){return t.result}};Lt();ee();ie();function at(p){return p==="migrations"||p==="supabase_migrations.schema_migrations"||p==="supabase_migrations.seed_files"}function He(p){return {...p,tables:p.tables.filter(t=>!at(t.name)),columns:p.columns.filter(t=>!at(t.table)),indexes:p.indexes.filter(t=>!at(t.table)),foreign_keys:p.foreign_keys.filter(t=>!at(t.table)),primary_keys:p.primary_keys.filter(t=>!at(t.table))}}var _t=class{constructor(t,s,e={}){this.conn=t;this.desiredSchema=s;this.options=e;this.differ=new X,this.planner=new K;}differ;planner;translationResult;async getDesiredSchema(){let t=await this.conn.translateDdl(this.desiredSchema);return this.translationResult=t,await this.options.onTranslation?.(t),t.ddl}async diff(){let t=await this.conn.introspect({postprocess:false}),s=await this.getDesiredSchema();if(!s||s.trim().length===0)return {current:t,desired:t,diff:{tables:[],columns:[],indexes:[],foreign_keys:[],has_changes:false},plan:{steps:[],warnings:[],unsafe:false}};let{createConnection:e}=await import('@supabase/lite/sqlite'),i=await e({url:":memory:"});try{await i.exec(s);let r=await i.introspect({postprocess:!1}),n=He(t),a=He(r),u=this.differ.diff(n,a),o=this.planner.plan(u,n,a);return {current:t,desired:r,diff:u,plan:o}}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 Ke=/^\{\{(.+)\}\}$/;function Qe(p){return typeof p=="string"&&Ke.test(p)}function oi(p){return Ke.exec(p)[1]}var Xe=Symbol("unresolved");function ze(p,t){let s=oi(p),e=nt(t,s,Xe);if(e===Xe)throw new Error(`Unresolved variable: {{${s}}}`);return e}function P(p,t){let s={};for(let[e,i]of Object.entries(p)){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(Qe(e)){let r=ze(e,t),a=pi(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(p,t){let s={};for(let[e,i]of Object.entries(p))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}:Qe(i)?s[e]=ze(i,t):s[e]=i;return s}function li(p){return p!=null&&typeof p=="object"&&p.type==="query"}function pi(p,t){for(let[s,e]of Object.entries(t))switch(s){case "$eq":if(p!==e)return false;break;case "$neq":if(p===e)return false;break;case "$in":if(!Array.isArray(e)||!e.includes(p))return false;break;case "$notIn":if(Array.isArray(e)&&e.includes(p))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=ci(t.type);if(!i)return t;let r=nt(s,"auth.role")??"anon",{permissive:n,restrictive:a}=this.resolvePolicies(e,t.schema,i,r);switch(i){case "SELECT":case "DELETE":{let u=this.combineUsing(n,a,s);return {...t,where:ts(t.where,u)}}case "UPDATE":{let u=this.combineUsing(n,a,s),o={...t,where:ts(t.where,u)};if(u.$always===false)return o;let l=this.combineWithCheck(n,a,s,i);if(t.values&&Object.keys(l).length>0){let f=new Set(Object.keys(t.values));this.validateWithCheck(l,t.values,n,a,f);}return o}case "INSERT":{let u=this.combineWithCheck(n,a,s,i);if(t.values){let o=Array.isArray(t.values)?t.values:[t.values];for(let l of o)this.validateWithCheck(u,l,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 o=P(u,e);n=Object.keys(n).length===0?o:{$and:[n,o]};}}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 ci(p){switch(p){case "query":return "SELECT";case "insert":case "upsert":case "put":return "INSERT";case "update":return "UPDATE";case "delete":return "DELETE";default:return}}function ts(p,t){return !p||Object.keys(p).length===0?t:Object.keys(t).length===0?p:{$and:[p,t]}}function vt(p,t,s){for(let[e,i]of Object.entries(p)){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(!fi(n,a,u))return false}return true}function fi(p,t,s){switch(t){case "$eq":return p===s;case "$neq":return p!==s;case "$gt":return p>s;case "$gte":return p>=s;case "$lt":return p<s;case "$lte":return p<=s;case "$in":return Array.isArray(s)&&s.includes(p);case "$notIn":return !Array.isArray(s)||!s.includes(p);case "$is":return p===s;case "$isNot":return p!==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 es(p){let t={};for(let s in p){let e=p[s];if(typeof e=="string"&&(e[0]==="["||e[0]==="{"))try{t[s]=JSON.parse(e);}catch{t[s]=e;}else t[s]=e;}return t}var Y=class p extends Connection{dialect="sqlite";deserializeRow(t){return this.config.ddlDialect==="postgres"?es(t):t}constructor(t={}){super({...t,translation:{...t.translation,schemas:{appendDefaultSchema:false,approach:"quote",defaultSchema:"public",...t.translation?.schemas},deparse:p.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(Ht({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(()=>(Us(),$s));return await i(t,{forceDefaultSchema:s,introspection:e,schemaHandling:this.config.translation?.schemas?.approach==="snake_case"?"prefix":"default"})}async introspect(t){qe(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 xe(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")=>o=>{let l=o[u],f=o.schema??r;return !f&&r&&l.includes(i)&&([f,l]=l.split(i)),{...o,[u]:l,schema:f??r}},a=u=>{let o=n()(u),l=o.ref_table,f=o.ref_schema??r;return l?.includes(i)&&([f,l]=l.split(i)),{...o,ref_table:l,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 o of u.all()){let l=o.context,f=e.find(m=>m.table===l.table&&m.name===l.column);if(f&&(f.pg_type=l.pgTypeName,l.isGenerated!==void 0&&(f.is_generated=l.isGenerated)),l.fkRef?.constraintName){let m=i.find(T=>T.table===l.table&&T.column===l.column&&T.ref_table===l.fkRef.refTable&&T.ref_column===l.fkRef.refColumn);m&&(m.foreign_key_name=l.fkRef.constraintName);}l.uniqueConstraintName&&r.push({schema:l.schema,table:l.table,name:l.uniqueConstraintName,columns:[l.column]}),l.hasCheck&&n.push({schema:l.schema,table:l.table,expression:"",name:l.checkConstraintName,column:l.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 o=u.refTable;for(let l=0;l<u.columns.length;l++){let f=i.find(m=>m.table===u.table&&m.column===u.columns[l]&&m.ref_table===o&&m.ref_column===(u.refColumns?.[l]??""));f&&(f.foreign_key_name=u.name);}}let a=[...t.comments??[],...s.comments??[]];return {...t,columns:e,foreign_keys:i,unique_constraints:r,check_constraints:n,comments:a}}markForeignKeyVisibility(t){let s=new Set(t.views.map(i=>i.name)),e=i=>i.startsWith("private_")?s.has(i.slice(8)):true;return {...t,foreign_keys:t.foreign_keys.map(i=>({...i,is_visible:e(i.table)&&e(i.ref_table)}))}}createMigrator(t){let s=[this.config.baseSchema,t].filter(Boolean).join(`
212
+ ${i.name?`'${i.name}'`:"'sqlite'"} AS database_name,
213
+ ${i.version?`'${i.version}'`:"sqlite_version()"} AS version;`};function L(i){if(!i)return [];try{return Array.isArray(i)?i:JSON.parse(i)}catch{return []}}async function Nt(i,e={}){let n=(await i.exec(hn(e)))?.rows?.[0]||{};return {tables:L(n.tables),columns:L(n.columns),indexes:L(n.indexes),foreign_keys:L(n.foreign_keys),primary_keys:L(n.primary_keys),views:L(n.views),triggers:L(n.triggers),check_constraints:[],unique_constraints:L(n.unique_constraints),comments:[],custom_types:[],database_name:n.database_name??"sqlite",version:n.version??""}}var wn=new Set(["AlterTableNode","CreateIndexNode","CreateSchemaNode","CreateTableNode","CreateTypeNode","CreateViewNode","RefreshMaterializedViewNode","DeleteQueryNode","DropIndexNode","DropSchemaNode","DropTableNode","DropTypeNode","DropViewNode","InsertQueryNode","RawNode","SelectQueryNode","UpdateQueryNode","MergeQueryNode"]),Ke=class extends OperationNodeTransformer{constructor(t){super();this.config=t;}#t=new Set;#n=new Set;transformNodeImpl(t,n){if(!wn.has(t.kind))return super.transformNodeImpl(t,n);let r=this.#i(t);for(let o of r)this.#n.add(o);let s=this.#s(t);for(let o of s)this.#t.add(o);try{return super.transformNodeImpl(t,n)}finally{for(let o of s)this.#t.delete(o);for(let o of r)this.#n.delete(o);}}transformSchemableIdentifier(t,n){let r=t.identifier.name,s=t.schema?.name,o=!s&&this.config.appendDefaultSchema&&this.config.defaultSchema&&!this.#n.has(r)&&this.#t.has(r),a=s??(o?this.config.defaultSchema:void 0);if(!a)return {kind:"SchemableIdentifierNode",schema:void 0,identifier:{kind:"IdentifierNode",name:r}};let l=this.config.approach==="snake_case"?"__":".";return {kind:"SchemableIdentifierNode",schema:void 0,identifier:{kind:"IdentifierNode",name:`${a}${l}${r}`}}}#s(t){let n=new Set;if(t?.name&&SchemableIdentifierNode.is(t.name)&&this.#r(t.name,n),t?.from?.froms)for(let r of t.from.froms)this.#e(r,n);if(t?.into&&this.#e(t.into,n),t?.table&&this.#e(t.table,n),t?.joins)for(let r of t.joins)this.#e(r.table,n);return t?.using&&(JoinNode.is(t.using)?this.#e(t.using.table,n):this.#e(t.using,n)),n}#e(t,n){if(TableNode.is(t)){this.#r(t.table,n);return}if(AliasNode.is(t)&&TableNode.is(t.node)){this.#r(t.node.table,n);return}if(ListNode.is(t)){for(let r of t.items)this.#e(r,n);return}if(UsingNode.is(t))for(let r of t.tables)this.#e(r,n);}#r(t,n){let r=t.identifier.name;this.#n.has(r)||n.add(r);}#i(t){let n=new Set;if(t?.with?.expressions)for(let r of t.with.expressions){let s=r?.name?.table?.table?.identifier?.name;s&&n.add(s);}return n}},Ee=class{#t;constructor(e){this.#t=new Ke(e);}transformQuery(e){return this.#t.transformNode(e.node)}async transformResult(e){return e.result}};be();Ve();Qe();function ee(i){return i==="migrations"||i==="supabase_migrations.schema_migrations"||i==="supabase_migrations.seed_files"}function At(i){return {...i,tables:i.tables.filter(e=>!ee(e.name)),columns:i.columns.filter(e=>!ee(e.table)),indexes:i.indexes.filter(e=>!ee(e.table)),foreign_keys:i.foreign_keys.filter(e=>!ee(e.table)),primary_keys:i.primary_keys.filter(e=>!ee(e.table))}}var Te=class{constructor(e,t,n={}){this.conn=e;this.desiredSchema=t;this.options=n;this.differ=new G,this.planner=new Q;}differ;planner;translationResult;async getDesiredSchema(){let e=await this.conn.translateDdl(this.desiredSchema);return this.translationResult=e,await this.options.onTranslation?.(e),e.ddl}async diff(){let e=await this.conn.introspect({postprocess:false}),t=await this.getDesiredSchema();if(!t||t.trim().length===0)return {current:e,desired:e,diff:{tables:[],columns:[],indexes:[],foreign_keys:[],has_changes:false},plan:{steps:[],warnings:[],unsafe:false}};let{createConnection:n}=await import('@supabase/lite/sqlite'),r=await n({url:":memory:"});try{await r.exec(t);let s=await r.introspect({postprocess:!1}),o=At(e),a=At(s),l=this.differ.diff(o,a),u=this.planner.plan(l,o,a);return {current:e,desired:s,diff:l,plan:u}}finally{await r.close();}}safeSortPlanSteps(e){return invariant(Array.isArray(e),"steps must be an array"),e.sort((t,n)=>{let r=s=>s===PlanStepType.DROP_COLUMN?1:s===PlanStepType.DROP_TABLE?2:s===PlanStepType.RENAME_TABLE?3:0;return r(t.type)-r(n.type)})}async migratePlan(e,t){if(e.steps.length===0)return;if(e.unsafe&&!t?.force)throw new DataLossError(e.warnings??[]);let n=this.safeSortPlanSteps(e.steps).filter(r=>![PlanStepType.DISABLE_FOREIGN_KEYS,PlanStepType.BEGIN_TRANSACTION,PlanStepType.COMMIT_TRANSACTION,PlanStepType.ENABLE_FOREIGN_KEYS].includes(r.type));await this.conn.transaction(n.map(r=>r.sql),{intent:"migration"});}async migrate(e){let t=await this.diff();return await this.migratePlan(t.plan,e),t}};ye();var It=/^\{\{(.+)\}\}$/;function vt(i){return typeof i=="string"&&It.test(i)}function Rn(i){return It.exec(i)[1]}var kt=Symbol("unresolved");function Ot(i,e){let t=Rn(i),n=Z(e,t,kt);if(n===kt)throw new Error(`Unresolved variable: {{${t}}}`);return n}function v(i,e){let t={};for(let[n,r]of Object.entries(i)){if(n==="$or"||n==="$and"){t[n]=r.map(s=>v(s,e));continue}if(n==="$not"){t[n]=v(r,e);continue}if(n==="$always"){t[n]=r;continue}if(n==="$exists"){let s=r;t[n]={...s,where:s?.where?v(s.where,e):s?.where};continue}if(vt(n)){let s=Ot(n,e),a=kn(s,r);t.$always=a;continue}if(r!=null&&typeof r=="object"&&!Array.isArray(r)){t[n]=Lt(r,e);continue}t[n]=r;}return t}function Lt(i,e){let t={};for(let[n,r]of Object.entries(i))n==="$not"&&r!=null&&typeof r=="object"?t[n]=Lt(r,e):An(r)?t[n]={...r,where:r?.where?v(r?.where,e):void 0}:vt(r)?t[n]=Ot(r,e):t[n]=r;return t}function An(i){return i!=null&&typeof i=="object"&&i.type==="query"}function kn(i,e){for(let[t,n]of Object.entries(e))switch(t){case "$eq":if(i!==n)return false;break;case "$neq":if(i===n)return false;break;case "$in":if(!Array.isArray(n)||!n.includes(i))return false;break;case "$notIn":if(Array.isArray(n)&&n.includes(i))return false;break;default:throw new Error(`Cannot statically evaluate operator ${t} on placeholder key`)}return true}ye();var we=class extends Error{constructor(t){super(`new row violates row-level security policy for table "${t.data.table}"`);this.policy=t;this.name="PolicyViolation";}};var xe=class{constructor(e,t,n){this.tables=e;this.policies=t;this.defaultSchema=n;}enforce(e,t){let n=e.from;if(!n||!this.isRlsEnabled(n,e.schema))return e;let r=In(e.type);if(!r)return e;let s=Z(t,"auth.role")??"anon",{permissive:o,restrictive:a}=this.resolvePolicies(n,e.schema,r,s);switch(r){case "SELECT":case "DELETE":{let l=this.combineUsing(o,a,t);return {...e,where:Dt(e.where,l)}}case "UPDATE":{let l=this.combineUsing(o,a,t),u={...e,where:Dt(e.where,l)};if(l.$always===false)return u;let p=this.combineWithCheck(o,a,t,r);if(e.values&&Object.keys(p).length>0){let c=new Set(Object.keys(e.values));this.validateWithCheck(p,e.values,o,a,c);}return u}case "INSERT":{let l=this.combineWithCheck(o,a,t,r);if(e.values){let u=Array.isArray(e.values)?e.values:[e.values];for(let p of u)this.validateWithCheck(l,p,o,a);}return e}default:return e}}isRlsEnabled(e,t){return this.tables.has(e)}resolvePolicies(e,t,n,r){let s=this.policies.filter(o=>o.data.table===e&&this.schemasMatch(o.data.schema,t)&&o.appliesTo(n)&&o.appliesToRole(r));return {permissive:s.filter(o=>o.data.permissive),restrictive:s.filter(o=>!o.data.permissive)}}schemasMatch(e,t){let n=e||this.defaultSchema,r=t||this.defaultSchema;return n===r}combineUsing(e,t,n){if(e.length===0)return {$always:false};let r=e.map(o=>o.data.using).filter(o=>o!=null&&Object.keys(o).length>0).map(o=>v(o,n)),s;r.length===0?s={}:r.length===1?s=r[0]:s={$or:r};for(let o of t)if(o.data.using&&Object.keys(o.data.using).length>0){let a=v(o.data.using,n);s=Object.keys(s).length===0?a:{$and:[s,a]};}return s}combineWithCheck(e,t,n,r){if(e.length===0)return {$always:false};let s=e.map(a=>a.data.withCheck??(r==="UPDATE"?a.data.using:void 0)).filter(a=>a!=null&&Object.keys(a).length>0).map(a=>v(a,n)),o;s.length===0?o={}:s.length===1?o=s[0]:o={$or:s};for(let a of t){let l=a.data.withCheck??(r==="UPDATE"?a.data.using:void 0);if(l&&Object.keys(l).length>0){let u=v(l,n);o=Object.keys(o).length===0?u:{$and:[o,u]};}}return o}validateWithCheck(e,t,n,r,s){if(Object.keys(e).length===0)return;if(!Ce(e,t,s)){let a=n[0]??r[0];throw a?new we(a):new Error("RLS policy violation")}}};function In(i){switch(i){case "query":return "SELECT";case "insert":case "upsert":case "put":return "INSERT";case "update":return "UPDATE";case "delete":return "DELETE";default:return}}function Dt(i,e){return !i||Object.keys(i).length===0?e:Object.keys(e).length===0?i:{$and:[i,e]}}function Ce(i,e,t){for(let[n,r]of Object.entries(i)){if(n==="$always"){if(r===false)return false;continue}if(n==="$and"){if(!r.every(l=>Ce(l,e,t)))return false;continue}if(n==="$or"){if(!r.some(l=>Ce(l,e,t)))return false;continue}if(n==="$not"){if(Ce(r,e,t))return false;continue}if(t&&!t.has(n))continue;let s=r,o=e[n];for(let[a,l]of Object.entries(s))if(!vn(o,a,l))return false}return true}function vn(i,e,t){switch(e){case "$eq":return i===t;case "$neq":return i!==t;case "$gt":return i>t;case "$gte":return i>=t;case "$lt":return i<t;case "$lte":return i<=t;case "$in":return Array.isArray(t)&&t.includes(i);case "$notIn":return !Array.isArray(t)||!t.includes(i);case "$is":return i===t;case "$isNot":return i!==t;default:throw new Error(`Cannot evaluate operator "${e}" client-side for WITH CHECK`)}}var _e=class{transformQuery(e){return e.node}transformResult(e){return e.result.rows?Promise.resolve({...e.result,rows:e.result.rows.map(t=>{let n={};for(let r in t){let s=t[r];if(typeof s=="string"&&(s[0]==="{"||s[0]==="["))try{n[r]=JSON.parse(s);}catch{n[r]=s;}else n[r]=s;}return n})}):Promise.resolve(e.result)}};function Pt(i){let e={};for(let t in i){let n=i[t];if(typeof n=="string"&&(n[0]==="["||n[0]==="{"))try{e[t]=JSON.parse(n);}catch{e[t]=n;}else e[t]=n;}return e}var K=class i extends Connection{dialect="sqlite";deserializeRow(e){return this.config.ddlDialect==="postgres"?Pt(e):e}constructor(e={}){super({...e,translation:{...e.translation,schemas:{appendDefaultSchema:false,approach:"quote",defaultSchema:"public",...e.translation?.schemas},deparse:i.parseDeparseInfo(e.translation?.deparse)},introspection:{name:"sqlite",...e.introspection,exclude_tables:Array.from(new Set([...e.introspection?.exclude_tables??[],"sqlite_%","supabase_migrations.%","migrations"]))}});}static parseDeparseInfo(e){try{if(typeof e!="object"||e===null)return {};let t=e?.rls?.tables instanceof Set?e.rls.tables:new Set(e.rls?.tables??[]),n=e?.rls?.policies.map(s=>new D(JSON.parse(JSON.stringify(s)))),r=e?.vars instanceof Map?e.vars:new Map(Object.entries(e.vars??{}));return {rls:{tables:t,policies:n},vars:r}}catch(t){return console.log("error parsing deparse info",t),{}}}updateDeparseInfo(e){this.config.translation={...this.config.translation,deparse:e};}withSqlitePlugins(e=[]){let t=[];return this.config.ddlDialect==="sqlite"&&t.push(new _e),t.push(new Ee(qe({appendDefaultSchema:false,approach:"quote",defaultSchema:"public"},{...this.config.translation?.schemas}))),[...t,...e]}async translateDdl(e){if(e.trim().length===0)return {ddl:e};if(this.config.ddlDialect==="sqlite")return {ddl:e};let t=this.config.translation?.schemas?.defaultSchema&&this.config.translation?.schemas?.appendDefaultSchema?this.config.translation?.schemas?.defaultSchema:false,n=await this.introspect({postprocess:false}).catch(()=>{}),{deparsePostgresDdl:r}=await Promise.resolve().then(()=>(an(),on));return await r(e,{forceDefaultSchema:t,introspection:n,schemaHandling:this.config.translation?.schemas?.approach==="snake_case"?"prefix":"default"})}async introspect(e){Tt(typeof e=="object"||e===void 0,"options must be an object");let t=e?.useCache??false;if(e?.postprocess!==false){let s=await this.readCachedIntrospection({useCache:t});if(s)return s}let n=await Nt(this,this.config.introspection),r=this.config.translation?.schemas?.approach==="snake_case"?"__":".";if(this.config.ddlDialect==="postgres"&&e?.postprocess!==false){let s=this.config.translation?.schemas?.defaultSchema??this.config.translation?.schemas?.appendDefaultSchema?"public":void 0,o=(l="table")=>u=>{let p=u[l],c=u.schema??s;return !c&&s&&p.includes(r)&&([c,p]=p.split(r)),{...u,[l]:p,schema:c??s}},a=l=>{let u=o()(l),p=u.ref_table,c=u.ref_schema??s;return p?.includes(r)&&([c,p]=p.split(r)),{...u,ref_table:p,ref_schema:c??s}};n={...n,tables:n.tables.map(o("name")),columns:n.columns.map(o()),indexes:n.indexes.map(o()),primary_keys:n.primary_keys.map(o()),foreign_keys:n.foreign_keys.map(a),views:n.views.map(o("name")),check_constraints:n.check_constraints.map(o("table"))};}return this.config.ddlDialect==="postgres"&&e?.postprocess!==false&&(n=this.mergeDeparseMetadata(n)),n=this.markForeignKeyVisibility(n),n={...n,ddl_dialect:this.config.ddlDialect??"postgres",schema_separator:r},e?.postprocess!==false&&await this.writeCachedIntrospection(n,{useDriver:t}),n}async transaction(e,t){t?.intent==="migration"&&await this.exec("PRAGMA foreign_keys=OFF;"),await this.exec("BEGIN");try{for(let n of e)try{await this.exec(n);}catch(r){throw console.error(`Failed to execute statement: ${n}`),r}await this.exec("COMMIT");}catch(n){throw await this.exec("ROLLBACK"),n}finally{t?.intent==="migration"&&(await this.exec("PRAGMA foreign_keys=ON;"),await this.clearSchemaCache());}}async close(){}mergeDeparseMetadata(e){let t=this.config.translation?.deparse;if(!t?.schema)return e;let n=e.columns.map(l=>({...l})),r=e.foreign_keys.map(l=>({...l})),s=[...e.unique_constraints??[]],o=[...e.check_constraints??[]];for(let[,l]of t.schema)for(let u of l.all()){let p=u.context,c=n.find(d=>d.table===p.table&&d.name===p.column);if(c&&(c.pg_type=p.pgTypeName,p.isGenerated!==void 0&&(c.is_generated=p.isGenerated)),p.fkRef?.constraintName){let d=r.find(E=>E.table===p.table&&E.column===p.column&&E.ref_table===p.fkRef.refTable&&E.ref_column===p.fkRef.refColumn);d&&(d.foreign_key_name=p.fkRef.constraintName);}p.uniqueConstraintName&&s.push({schema:p.schema,table:p.table,name:p.uniqueConstraintName,columns:[p.column]}),p.hasCheck&&o.push({schema:p.schema,table:p.table,expression:"",name:p.checkConstraintName,column:p.column});}for(let l of t.tableConstraints??[])if(l.kind==="unique")s.push({schema:l.schema,table:l.table,name:l.name??"",columns:l.columns});else if(l.kind==="check")o.push({schema:l.schema,table:l.table,expression:"",name:l.name});else if(l.kind==="foreign_key"&&l.name){let u=l.refTable;for(let p=0;p<l.columns.length;p++){let c=r.find(d=>d.table===l.table&&d.column===l.columns[p]&&d.ref_table===u&&d.ref_column===(l.refColumns?.[p]??""));c&&(c.foreign_key_name=l.name);}}let a=[...e.comments??[],...t.comments??[]];return {...e,columns:n,foreign_keys:r,unique_constraints:s,check_constraints:o,comments:a}}markForeignKeyVisibility(e){let t=new Set(e.views.map(r=>r.name)),n=r=>r.startsWith("private_")?t.has(r.slice(8)):true;return {...e,foreign_keys:e.foreign_keys.map(r=>({...r,is_visible:n(r.table)&&n(r.ref_table)}))}}createMigrator(e){let t=[this.config.baseSchema,e].filter(Boolean).join(`
245
214
 
246
- `);return new _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("."),o=u>=0?a.slice(0,u):void 0,l=u>=0?a.slice(u+1):a;return new RelationNotFoundError(o,l)}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(o=>o.name===a&&(o.schema??"")===n)||r.views.some(o=>o.name===a&&(o.schema??"")===n))){if(!(r.tables.some(l=>l.name===a&&["","public",i].includes(l.schema??""))||r.views.some(l=>l.name===a&&["","public",i].includes(l.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)}};function er(p,t,s){return {db:p,query:(e,i,r)=>{let n=s(r);try{t.debug&&console.log("[browser:sqlite] query",i,n);let a=i.trimStart().toUpperCase();if(a.startsWith("SELECT")||a.startsWith("WITH"))return {rows:p.exec(i,{bind:n,returnValue:"resultRows",rowMode:"object"})};let o=p.prepare(i);try{n.length>0&&o.bind(n),o.stepReset();}finally{o.finalize();}let l=p.changes?.()??0;return {numAffectedRows:l,insertId:l>0?Number(p.lastInsertRowid?.()??0):void 0}}catch(a){let u=new Error(`Failed to execute query: ${i}
247
- ${JSON.stringify(n)}`);throw u.cause=a,u.code=a?.code,u}},close:()=>p.close(),iterator:()=>{throw new Error("Browser sqlite-wasm does not support streaming iteration")}}}var Jt=class extends Y{kysely;driver;constructor(t){super(t),this.driver=t.db;let s=new GenericSqliteDialect(()=>er(this.driver,t,e=>this.prepareBindParams(e)),e=>{this.driver.exec("pragma foreign_keys = on");});this.kysely=new Kysely({dialect:s,plugins:this.withSqlitePlugins()});}async exec(t,...s){let e=t.trimStart().toUpperCase(),i=this.prepareBindParams(s);if(e.startsWith("SELECT")||e.startsWith("WITH"))return {rows:this.driver.exec(t,{bind:i,returnValue:"resultRows",rowMode:"object"})};if(i.length>0){let n=this.driver.prepare(t);try{n.bind(i),n.stepReset();}finally{n.finalize();}}else this.driver.exec(t);}async close(){this.driver.close();}async transaction(t){this.driver.exec("BEGIN");try{for(let s of t)await this.exec(s);this.driver.exec("COMMIT");}catch(s){try{this.driver.exec("ROLLBACK");}catch{}throw s}}};async function sr(p={}){let s=await(await import('@sqlite.org/sqlite-wasm').then(i=>i.default))({print:()=>{},printErr:()=>{}}),e=new s.oo1.DB(p.url??":memory:");return new Jt({...p,db:e})}var xt=class extends Y{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 ir(p){return new xt(p)}export{Jt as BrowserSqliteConnection,xt as CloudConnection,Y as SqliteConnection,ir as cloud,sr as createConnection};
215
+ `);return new Te(this,t,{onTranslation:async n=>{if(this.config.translation){let r={enums:n.enums,rls:n.rls,schema:n.schema,vars:n.vars,tableConstraints:n.tableConstraints??[],comments:n.comments??[]};this.config.translation.deparse=r;}}})}get maxBoundParameters(){return this.config.maxBoundParameters??100}assertParamLimit(e){let t=e?.length??0,n=this.maxBoundParameters;if(!(t<=n))throw Object.assign(new Error(`Query exceeds max bound parameters (${t} > ${n}). SQLite drivers vary in how many parameters they accept per statement; @supabase/lite enforces a conservative limit of ${n} for portability. Split the query (e.g. chunk large .in() filters or batch INSERTs) on the caller.`),{code:"54000"})}prepareBindParams(e){return this.assertParamLimit(e),this.normalizeBindParams(e)}normalizeBindParams(e){if(!e||e.length===0)return [];let t=[];for(let n=0;n<e.length;n++){let r=e[n];if(r===void 0)continue;if(r===null){t.push(r);continue}let s=typeof r;if(s==="boolean"){t.push(r?1:0);continue}if(s==="number"||s==="bigint"||s==="string"){t.push(r);continue}if(r instanceof Uint8Array||r instanceof ArrayBuffer||r instanceof Date){t.push(r);continue}throw new Error(`Cannot bind value at parameter ${n+1}: unsupported type ${Array.isArray(r)?"array":s}`)}return t}normalizeDbError(e){let t=e,n=t?.cause?.code??t?.code,r=t?.cause?.message??t?.message??String(e);if(n==="SQLITE_CONSTRAINT_NOTNULL")return Object.assign(new Error(r),{code:"23502",detail:r});if(n==="SQLITE_CONSTRAINT_UNIQUE"||n==="SQLITE_CONSTRAINT_PRIMARYKEY")return Object.assign(new Error(r),{code:"23505",detail:r});if(n==="SQLITE_CONSTRAINT_FOREIGNKEY")return Object.assign(new Error(r),{code:"23503",detail:r});if(typeof r=="string"){if(/too many SQL variables/i.test(r)){let a=this.maxBoundParameters;return Object.assign(new Error(`Query exceeds SQLite bound-parameter limit. @supabase/lite enforces a conservative limit of ${a} for portability across drivers. Split the query (e.g. chunk large .in() filters or batch INSERTs) on the caller.`),{code:"54000",detail:r})}let s=r.match(/no such table:\s*([A-Za-z0-9_.]+)/i);if(s){let a=s[1],l=a.lastIndexOf("."),u=l>=0?a.slice(0,l):void 0,p=l>=0?a.slice(l+1):a;return new RelationNotFoundError(u,p)}let o=r.match(/no such column:\s*([A-Za-z0-9_.]+)/i);if(o)return Object.assign(new Error(`column ${o[1]} does not exist`),{code:"42703",detail:r})}return e}async onPostgrestAST(e,t){if(this.config.ddlDialect==="sqlite")return e.schema=void 0,this.applyRls(e,t);let n=this.config.translation?.schemas?.appendDefaultSchema,r=this.config.translation?.schemas?.defaultSchema;if(e.schema&&e.schema===r&&!n?e.schema=void 0:!e.schema&&r&&n&&(e.schema=r),!e.from)return e;let s=await this.introspect({useCache:true}),o=e.schema??(n&&r?r:""),a=e.from;if(!(s.tables.some(u=>u.name===a&&(u.schema??"")===o)||s.views.some(u=>u.name===a&&(u.schema??"")===o))){if(!(s.tables.some(p=>p.name===a&&["","public",r].includes(p.schema??""))||s.views.some(p=>p.name===a&&["","public",r].includes(p.schema??""))))throw new RelationNotFoundError(o,a);e.schema=void 0;}return this.applyRls(e,t)}applyRls(e,t){let n=this.config.translation?.deparse?.rls;if(!n||!t)return e;let r=this.config.translation?.schemas?.defaultSchema||void 0;return new xe(n.tables,n.policies,r).enforce(e,t)}};function br(i,e,t){return {db:i,query:(n,r,s)=>{let o=t(s);try{e.debug&&console.log("[browser:sqlite] query",r,o);let a=r.trimStart().toUpperCase();if(a.startsWith("SELECT")||a.startsWith("WITH"))return {rows:i.exec(r,{bind:o,returnValue:"resultRows",rowMode:"object"})};let u=i.prepare(r);try{o.length>0&&u.bind(o),u.stepReset();}finally{u.finalize();}let p=i.changes?.()??0;return {numAffectedRows:p,insertId:p>0?Number(i.lastInsertRowid?.()??0):void 0}}catch(a){let l=new Error(`Failed to execute query: ${r}
216
+ ${JSON.stringify(o)}`);throw l.cause=a,l.code=a?.code,l}},close:()=>i.close(),iterator:()=>{throw new Error("Browser sqlite-wasm does not support streaming iteration")}}}var $e=class extends K{kysely;driver;constructor(e){super(e),this.driver=e.db;let t=new GenericSqliteDialect(()=>br(this.driver,e,n=>this.prepareBindParams(n)),n=>{this.driver.exec("pragma foreign_keys = on");});this.kysely=new Kysely({dialect:t,plugins:this.withSqlitePlugins()});}async exec(e,...t){let n=e.trimStart().toUpperCase(),r=this.prepareBindParams(t);if(n.startsWith("SELECT")||n.startsWith("WITH"))return {rows:this.driver.exec(e,{bind:r,returnValue:"resultRows",rowMode:"object"})};if(r.length>0){let o=this.driver.prepare(e);try{o.bind(r),o.stepReset();}finally{o.finalize();}}else this.driver.exec(e);}async close(){this.driver.close();}async transaction(e){this.driver.exec("BEGIN");try{for(let t of e)await this.exec(t);this.driver.exec("COMMIT");}catch(t){try{this.driver.exec("ROLLBACK");}catch{}throw t}}};async function Tr(i={}){let t=await(await import('@sqlite.org/sqlite-wasm').then(r=>r.default))({print:()=>{},printErr:()=>{}}),n=new t.oo1.DB(i.url??":memory:");return new $e({...i,db:n})}var Fe=class extends K{constructor(t){super({...t,introspection:{...t.introspection,version:"3.47.0"}});this.config=t;}dialect="sqlite";driver=null;kysely=null;fetch(t,n){let r=t instanceof URL?new URL(t.toString(),this.config.host):new URL(t,this.config.host);return fetch(r,{...n,headers:{"Content-Type":"application/json",Accept:"application/json",Authorization:`Bearer ${this.config.token}`,...n?.headers}})}async introspect(t){let n=new URLSearchParams({useCache:t?.useCache?"1":"0",postprocess:t?.postprocess?"1":"0"}),r=await this.fetch(`/v1/projects/${this.config.projectRef}/db/introspect?${n}`),s=await r.text();if(!r.ok)throw console.error(s),new Error(`Failed to get project introspect: ${r.status} ${r.statusText}`);try{let o=JSON.parse(s);if(!o)throw new Error("Failed to get project introspect");return o}catch(o){throw console.error(o),console.log(s),new Error(`Failed to parse introspect response: "${s}"`)}}async transaction(t,n){let r=await this.fetch(`/v1/projects/${this.config.projectRef}/db/transaction?intent=${n?.intent??"migration"}`,{method:"POST",body:JSON.stringify({statements:t})});if(!r.ok)throw new Error(`Failed to execute transaction: ${r.status} ${r.statusText}`)}async exec(t,...n){let r=await this.fetch(`/v1/projects/${this.config.projectRef}/db/exec`,{method:"POST",body:JSON.stringify({statement:t,parameters:n})}),s=await r.text();if(!r.ok)throw console.error(s),new Error(`Failed to execute statement: ${r.status} ${r.statusText}`);try{return JSON.parse(s)}catch(o){throw console.error(o),new Error(`Failed to parse exec response: "${s}"`)}}async close(){}};function wr(i){return new Fe(i)}export{$e as BrowserSqliteConnection,Fe as CloudConnection,K as SqliteConnection,wr as cloud,Tr as createConnection};