@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 {Connection,RelationNotFoundError,invariant,DataLossError,PlanStepType}from'@supabase/lite';import {OperationNodeTransformer,SchemableIdentifierNode,JoinNode,TableNode,AliasNode,ListNode,UsingNode}from'kysely';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 {Connection,RelationNotFoundError,invariant,DataLossError,PlanStepType}from'@supabase/lite';import {OperationNodeTransformer,SchemableIdentifierNode,JoinNode,TableNode,AliasNode,ListNode,UsingNode}from'kysely';try {
2
2
  /**
3
3
  * Adding this to avoid warnings from node:sqlite being experimental
4
4
  */
@@ -9,43 +9,12 @@ import {Connection,RelationNotFoundError,invariant,DataLossError,PlanStepType}fr
9
9
  };
10
10
  } catch {}
11
11
 
12
- var Ms=Object.create;var xt=Object.defineProperty;var qs=Object.getOwnPropertyDescriptor;var Vs=Object.getOwnPropertyNames;var Gs=Object.getPrototypeOf,Ws=Object.prototype.hasOwnProperty;var C=(c,t)=>()=>(c&&(t=c(c=0)),t);var je=(c,t)=>()=>(t||c((t={exports:{}}).exports,t),t.exports),Js=(c,t)=>{for(var s in t)xt(c,s,{get:t[s],enumerable:true});},xs=(c,t,s,e)=>{if(t&&typeof t=="object"||typeof t=="function")for(let i of Vs(t))!Ws.call(c,i)&&i!==s&&xt(c,i,{get:()=>t[i],enumerable:!(e=qs(t,i))||e.enumerable});return c};var $e=(c,t,s)=>(s=c!=null?Ms(Gs(c)):{},xs(xt(s,"default",{value:c,enumerable:true}),c));var Ue=C(()=>{});var Fe=C(()=>{});function Ys(c){return Object.prototype.toString.call(c)==="[object Object]"}function Hs(c){return c!==null&&typeof c=="object"}function rt(c,t,s=void 0){let e=typeof t=="string"?t.split(/[.[\]"]+/).filter(i=>i):t;if(e.length===0)return c;try{let[i,...r]=e;return !i||!(i in c)?s:rt(c[i],r,s)}catch{if(typeof s<"u")return s;throw new Error(`Invalid path: ${e.join(".")}`)}}function Yt(c,...t){for(let s of t)for(let[e,i]of Object.entries(s))i!==void 0&&(!Ys(i)&&!Array.isArray(i)||Array.isArray(i)&&!Array.isArray(c[e])?c[e]=i:Hs(c[e])?Yt(c[e],i):c[e]=i);return c}var yt=C(()=>{});var Be=C(()=>{});function Me(c,t){if(!c)throw new Error(t)}var qe=C(()=>{});function Ht(c){return (c??"").trim().toLowerCase()}function Xt(c){return (c??"").replace(/\s+/g," ").replace(/"/g,"").trim().toLowerCase()}function Kt(c){if(c==null)return null;let t=c.trim();for(;t.startsWith("(")&&t.endsWith(")");)t=t.slice(1,-1).trim();return (t.startsWith("'")&&t.endsWith("'")||t.startsWith('"')&&t.endsWith('"'))&&(t=t.slice(1,-1)),t}var Qt=C(()=>{});function N(c,t='"'){return `${t}${c}${t}`}function Ve(c,t,s){if(t instanceof RegExp)return t.test(c);if(typeof t=="string")switch(!s&&t.startsWith("/")&&(s="regex"),s){case "regex":return new RegExp(t).test(c);case "sql":return new RegExp(t.replace("%",".*").replace("_",".")).test(c);case "wildcard":return new RegExp(t.replace("*",".*")).test(c);default:return c.includes(t)}return false}var bt=C(()=>{});var Ge=C(()=>{});var We=C(()=>{});var zt=C(()=>{Ue();Fe();yt();Be();qe();Qt();bt();Ge();We();});var $,Lt=C(()=>{$=class c{constructor(t){this.data=t;}appliesTo(t){return this.data.command==="ALL"||this.data.command===t}appliesToRole(t){return this.data.roles.length===0||this.data.roles.includes(t)}toJSON(){return this.data}static fromJSON(t){return new c(t)}};});var H,te=C(()=>{Qt();H=class{makeIndexKey(t){return `${t.table}:${t.name}:${t.unique}:${t.columns.join(",")}`}makeForeignKeyKey(t){return `${t.table}:${t.column}:${t.ref_table}:${t.ref_column}`}diff(t,s){let e=[],i=[],r=[],n=[],a=new Set(t.tables.map(g=>g.name)),u=new Set(s.tables.map(g=>g.name));for(let g of s.tables)a.has(g.name)||e.push({type:"added",name:g.name,sql:g.sql});for(let g of t.tables)u.has(g.name)||e.push({type:"removed",name:g.name});for(let g of t.tables){let A=s.tables.find(_=>_.name===g.name);if(!A)continue;let S=Xt(g.sql),b=Xt(A.sql);S!==b&&e.push({type:"modified",name:g.name,sql:A.sql});}let l=t.tables.filter(g=>u.has(g.name));for(let g of l){let A=t.columns.filter(y=>y.table===g.name),S=s.columns.filter(y=>y.table===g.name),b=new Map(A.map(y=>[y.name,y])),_=new Map(S.map(y=>[y.name,y]));for(let[y,d]of _)b.has(y)||i.push({type:"added",table:g.name,name:y,column:d});for(let[y]of b)_.has(y)||i.push({type:"removed",table:g.name,name:y});for(let[y,d]of b){let D=_.get(y);if(!D)continue;let F={};Ht(d.type)!==Ht(D.type)&&(F.type={from:d.type,to:D.type}),d.nullable!==D.nullable&&(F.nullable={from:d.nullable,to:D.nullable}),Kt(d.default_value)!==Kt(D.default_value)&&(F.default_value={from:d.default_value,to:D.default_value}),Object.keys(F).length>0&&i.push({type:"modified",table:g.name,name:y,changes:F});}}let o=new Map(t.indexes.map(g=>[this.makeIndexKey(g),g])),f=new Map(s.indexes.map(g=>[this.makeIndexKey(g),g]));for(let[g,A]of f)o.has(g)||r.push({type:"added",...A});for(let[g,A]of o)f.has(g)||r.push({type:"removed",...A});let m=new Map(t.foreign_keys.map(g=>[this.makeForeignKeyKey(g),g])),T=new Map(s.foreign_keys.map(g=>[this.makeForeignKeyKey(g),g]));for(let[g,A]of T)m.has(g)||n.push({type:"added",...A});for(let[g,A]of m)T.has(g)||n.push({type:"removed",...A});let E=e.length>0||i.length>0||r.length>0||n.length>0;return {tables:e,columns:i,indexes:r,foreign_keys:n,has_changes:E}}};});var ee=C(()=>{});var ri,X,se=C(()=>{ee();bt();ri=["CURRENT_TIMESTAMP","CURRENT_TIME","CURRENT_DATE"],X=class{plan(t,s,e,i){if(!t.has_changes)return {steps:[],warnings:[],unsafe:false};let r=[],n=[];r.push({sql:"PRAGMA foreign_keys=OFF;",description:"Disable foreign key checks",type:"disable_foreign_keys"}),r.push({sql:"BEGIN;",description:"Begin transaction",type:"begin_transaction"});for(let f of t.tables.filter(m=>m.type==="added")){r.push({sql:`${f.sql};`,description:`CREATE TABLE ${N(f.name)}`,type:"create_table"});let m=e.indexes.filter(T=>T.table===f.name);for(let T of m){let E=T.unique?"UNIQUE ":"",g=T.columns.map(A=>N(A)).join(", ");r.push({sql:`CREATE ${E}INDEX ${N(T.name)} ON ${N(f.name)} (${g});`,description:`Create index ${N(T.name)} on ${N(f.name)}`,type:"add_index"});}}let a=new Set(s.tables.map(f=>f.name)),u=new Set(e.tables.map(f=>f.name)),l=new Set(t.tables.filter(f=>f.type==="modified").map(f=>f.name)),o=[...a].filter(f=>u.has(f));for(let f of o){if(!(l.has(f)||t.columns.some(g=>g.table===f)||t.indexes.some(g=>g.table===f)||t.foreign_keys.some(g=>g.table===f)))continue;let{canAlter:T,addedCols:E}=this.canSimpleAlter(f,t,e);if(T){for(let S of E)r.push({sql:`ALTER TABLE ${N(f)} ADD COLUMN ${this.columnDef(S)};`,description:`Add column ${N(S.name)} to ${N(f)}`,type:"add_column"});let g=t.indexes.filter(S=>S.table===f&&S.type==="added"),A=t.indexes.filter(S=>S.table===f&&S.type==="removed");for(let S of A)r.push({sql:`DROP INDEX IF EXISTS ${N(S.name)};`,description:`Drop index ${N(S.name)}`,type:"drop_index"});for(let S of g){let b=S.unique?"UNIQUE ":"",_=S.columns.map(y=>N(y)).join(", ");r.push({sql:`CREATE ${b}INDEX ${N(S.name)} ON ${N(f)} (${_});`,description:`Create index ${N(S.name)} on ${N(f)}`,type:"add_index"});}}else {let g=this.rebuildTable(f,s,e,t);r.push(...g.steps),n.push(...g.warnings);}}for(let f of t.tables.filter(m=>m.type==="removed"))r.push({sql:`DROP TABLE ${N(f.name)};`,description:`Drop table ${N(f.name)}`,type:"drop_table"}),n.push({table:f.name,reason:"table will be dropped"});return r.push({sql:"COMMIT;",description:"Commit transaction",type:"commit_transaction"}),r.push({sql:"PRAGMA foreign_keys=ON;",description:"Re-enable foreign key checks",type:"enable_foreign_keys"}),{steps:r,warnings:n,unsafe:n.length>0}}rebuildTable(t,s,e,i){let r=[],n=[],a=e.tables.find(S=>S.name===t);if(!a)return {steps:r,warnings:n};let u=`_${t}_migrate_new`,l=a.sql.replace(new RegExp(`(CREATE\\s+TABLE\\s+)(?:"${t}"|${t})`,"i"),`$1${N(u)}`);r.push({sql:`${l};`,description:`Create temporary table ${N(u)}`,type:"create_table"});let o=s.columns.filter(S=>S.table===t).map(S=>S.name),f=e.columns.filter(S=>S.table===t).map(S=>S.name),m=o.filter(S=>f.includes(S));if(m.length>0){let S=m.map(b=>N(b)).join(", ");r.push({sql:`INSERT INTO ${N(u)} (${S})
13
- SELECT ${S}
14
- FROM ${N(t)};`,description:`Copy data from ${N(t)} to ${N(u)}`,type:"copy_data"});}r.push({sql:`DROP TABLE ${N(t)};`,description:`Drop old table ${N(t)}`,type:"drop_table"}),r.push({sql:`ALTER TABLE ${N(u)} RENAME TO ${N(t)};`,description:`Rename ${N(u)} to ${N(t)}`,type:"rename_table"});let T=e.indexes.filter(S=>S.table===t);for(let S of T){let b=S.unique?"UNIQUE ":"",_=S.columns.map(y=>N(y)).join(", ");r.push({sql:`CREATE ${b}INDEX ${N(S.name)} ON ${N(t)} (${_});`,description:`Recreate index ${N(S.name)} on ${N(t)}`,type:"add_index"});}let E=e.triggers?.filter(S=>S.table===t)??[];for(let S of E)r.push({sql:`${S.sql};`,description:`Recreate trigger ${N(S.name)} on ${N(t)}`,type:"create_trigger"});let g=i.columns.filter(S=>S.table===t&&S.type==="removed");for(let S of g)n.push({table:t,reason:`column "${S.name}" will be dropped`});let A=i.columns.filter(S=>S.table===t&&S.type==="modified");for(let S of A)S.changes?.type&&n.push({table:t,reason:`column "${S.name}" type changes from ${S.changes.type.from} to ${S.changes.type.to}`}),S.changes?.nullable&&!S.changes.nullable.to&&n.push({table:t,reason:`column "${S.name}" becomes NOT NULL`});return {steps:r,warnings:n}}canSimpleAlter(t,s,e){let i=s.columns.filter(f=>f.table===t),r=i.filter(f=>f.type==="added"),n=i.filter(f=>f.type==="removed"),a=i.filter(f=>f.type==="modified"),u=s.foreign_keys.some(f=>f.table===t);if(n.length>0||a.length>0||u)return {canAlter:false,addedCols:r};let l=e.tables.find(f=>f.name===t);return l&&/\bCHECK\s*\(/i.test(l.sql)?{canAlter:false,addedCols:r}:{canAlter:r.every(f=>{let m=f.column;return this.hasNonConstantDefault(m.default_value)?false:m.nullable||m.default_value!=null})&&r.length>0,addedCols:r}}hasNonConstantDefault(t){if(t==null)return false;let s=t.trim().toUpperCase();return ri.includes(s)}columnDef(t){let s=t.column,e=`${N(s.name)} ${s.type||"TEXT"}`;return s.nullable||(e+=" NOT NULL"),s.default_value!=null&&(e+=` DEFAULT ${s.default_value}`),e}};});async function K(c){let{parse:t}=await import('pgsql-parser');return t(c)}var es=C(()=>{});var U,ie=C(()=>{U=class{newlineChar;tabChar;prettyMode;constructor(t=`
15
- `,s=" ",e=true){this.newlineChar=t,this.tabChar=s,this.prettyMode=e;}format(t,s=" "){return t.filter(e=>e!=null&&e!=="").join(s)}indent(t,s=1){if(!this.prettyMode)return t;let e=this.tabChar.repeat(s);return t.split(this.newlineChar).map(i=>i.trim()?e+i:i).join(this.newlineChar)}parens(t){return `(${t})`}newline(){return this.newlineChar}tab(){return this.tabChar}isPretty(){return this.prettyMode}};});var Q,ss=C(()=>{ie();Q=class c{indentLevel;prettyMode;isStringLiteral;parentNodeTypes;formatter;select;from;group;sort;insertColumns;update;bool;isColumnConstraint;isDomainConstraint;alterColumnOptions;alterTableOptions;isEnumValue;objtype;subtype;constructor({indentLevel:t=0,prettyMode:s=true,isStringLiteral:e,parentNodeTypes:i=[],formatter:r,select:n,from:a,group:u,sort:l,insertColumns:o,update:f,bool:m,isColumnConstraint:T,isDomainConstraint:E,alterColumnOptions:g,alterTableOptions:A,isEnumValue:S,objtype:b,subtype:_,...y}={}){this.indentLevel=t,this.prettyMode=s,this.isStringLiteral=e,this.parentNodeTypes=i,this.formatter=r||new U(`
16
- `," ",s),this.select=n,this.from=a,this.group=u,this.sort=l,this.insertColumns=o,this.update=f,this.bool=m,this.isColumnConstraint=T,this.isDomainConstraint=E,this.alterColumnOptions=g,this.alterTableOptions=A,this.isEnumValue=S,this.objtype=b,this.subtype=_,Object.assign(this,y);}spawn(t,s={}){return new c({indentLevel:this.indentLevel,prettyMode:this.prettyMode,isStringLiteral:this.isStringLiteral,parentNodeTypes:[...this.parentNodeTypes,t],formatter:this.formatter,select:this.select,from:this.from,group:this.group,sort:this.sort,insertColumns:this.insertColumns,update:this.update,bool:this.bool,isColumnConstraint:this.isColumnConstraint,isDomainConstraint:this.isDomainConstraint,alterColumnOptions:this.alterColumnOptions,alterTableOptions:this.alterTableOptions,isEnumValue:this.isEnumValue,objtype:this.objtype,subtype:this.subtype,...s})}indent(t,s){if(!this.prettyMode)return t;let e=s!==void 0?s:this.indentLevel+1;return this.formatter.indent(t,e)}newline(){return this.formatter.newline()}parens(t){return this.formatter.parens(t)}format(t,s){return this.formatter.format(t,s)}isPretty(){return this.formatter.isPretty()}};});function Pt(c){let t=c.toLowerCase();return is.has(t)?"RESERVED_KEYWORD":as.has(t)?"TYPE_FUNC_NAME_KEYWORD":ns.has(t)?"COL_NAME_KEYWORD":rs.has(t)?"UNRESERVED_KEYWORD":"NO_KEYWORD"}var at,is,rs,ns,as,re=C(()=>{at={UNRESERVED_KEYWORD:["abort","absent","absolute","access","action","add","admin","after","aggregate","also","alter","always","asensitive","assertion","assignment","at","atomic","attach","attribute","backward","before","begin","breadth","by","cache","call","called","cascade","cascaded","catalog","chain","characteristics","checkpoint","class","close","cluster","columns","comment","comments","commit","committed","compression","conditional","configuration","conflict","connection","constraints","content","continue","conversion","copy","cost","csv","cube","current","cursor","cycle","data","database","day","deallocate","declare","defaults","deferred","definer","delete","delimiter","delimiters","depends","depth","detach","dictionary","disable","discard","document","domain","double","drop","each","empty","enable","encoding","encrypted","enforced","enum","error","escape","event","exclude","excluding","exclusive","execute","explain","expression","extension","external","family","filter","finalize","first","following","force","format","forward","function","functions","generated","global","granted","groups","handler","header","hold","hour","identity","if","ignore","immediate","immutable","implicit","import","include","including","increment","indent","index","indexes","inherit","inherits","inline","input","insensitive","insert","instead","invoker","isolation","keep","key","keys","label","language","large","last","leakproof","level","listen","load","local","location","lock","locked","logged","lsn","mapping","match","matched","materialized","maxvalue","merge","method","minute","minvalue","mode","month","move","name","names","nested","new","next","nfc","nfd","nfkc","nfkd","no","normalized","nothing","notify","nowait","nulls","object","objects","of","off","oids","old","omit","operator","option","options","ordinality","others","over","overriding","owned","owner","parallel","parameter","parser","partial","partition","partitions","passing","password","path","period","plan","plans","policy","preceding","prepare","prepared","preserve","prior","privileges","procedural","procedure","procedures","program","publication","quote","quotes","range","read","reassign","recursive","ref","referencing","refresh","reindex","relative","release","rename","repeatable","replace","replica","reset","respect","restart","restrict","return","returns","revoke","role","rollback","rollup","routine","routines","rows","rule","savepoint","scalar","schema","schemas","scroll","search","second","security","sequence","sequences","serializable","server","session","set","sets","share","show","simple","skip","snapshot","source","split","sql","stable","standalone","start","statement","statistics","stdin","stdout","storage","stored","strict","string","strip","subscription","support","sysid","system","tables","tablespace","target","temp","template","temporary","text","ties","transaction","transform","trigger","truncate","trusted","type","types","uescape","unbounded","uncommitted","unconditional","unencrypted","unknown","unlisten","unlogged","until","update","vacuum","valid","validate","validator","value","varying","version","view","views","virtual","volatile","wait","whitespace","within","without","work","wrapper","write","xml","year","yes","zone"],RESERVED_KEYWORD:["all","analyse","analyze","and","any","array","as","asc","asymmetric","both","case","cast","check","collate","column","constraint","create","current_catalog","current_date","current_role","current_time","current_timestamp","current_user","default","deferrable","desc","distinct","do","else","end","except","false","fetch","for","foreign","from","grant","group","having","in","initially","intersect","into","lateral","leading","limit","localtime","localtimestamp","not","null","offset","on","only","or","order","placing","primary","references","returning","select","session_user","some","symmetric","system_user","table","then","to","trailing","true","union","unique","user","using","variadic","when","where","window","with"],TYPE_FUNC_NAME_KEYWORD:["authorization","binary","collation","concurrently","cross","current_schema","freeze","full","ilike","inner","is","isnull","join","left","like","natural","notnull","outer","overlaps","right","similar","tablesample","verbose"],COL_NAME_KEYWORD:["between","bigint","bit","boolean","char","character","coalesce","dec","decimal","exists","extract","float","greatest","grouping","inout","int","integer","interval","json","json_array","json_arrayagg","json_exists","json_object","json_objectagg","json_query","json_scalar","json_serialize","json_table","json_value","least","merge_action","national","nchar","none","normalize","nullif","numeric","out","overlay","position","precision","real","row","setof","smallint","substring","time","timestamp","treat","trim","values","varchar","xmlattributes","xmlconcat","xmlelement","xmlexists","xmlforest","xmlnamespaces","xmlparse","xmlpi","xmlroot","xmlserialize","xmltable"]},is=new Set(at.RESERVED_KEYWORD??[]),rs=new Set(at.UNRESERVED_KEYWORD??[]),ns=new Set(at.COL_NAME_KEYWORD??[]),as=new Set(at.TYPE_FUNC_NAME_KEYWORD??[]);});var h,us=C(()=>{re();h=class c{static escape(t){return `'${t.replace(/'/g,"''")}'`}static escapeEString(t){return t.replace(/\\/g,"\\\\").replace(/'/g,"''")}static formatEString(t){return c.needsEscapePrefix(t)?`E'${c.escapeEString(t)}'`:c.escape(t)}static needsEscapePrefix(t){return !/^\\x[0-9a-fA-F]+$/i.test(t)&&t.includes("\\")}static quoteIdentifier(t){if(!t)return t;let s=true,e=t[0];e>="a"&&e<="z"||e==="_"||(s=false);for(let r=0;r<t.length;r++){let n=t[r];n>="a"&&n<="z"||n>="0"&&n<="9"||n==="_"||(s=false);}if(s){let r=Pt(t);r!=="NO_KEYWORD"&&r!=="UNRESERVED_KEYWORD"&&(s=false);}if(s)return t;let i='"';for(let r=0;r<t.length;r++){let n=t[r];n==='"'&&(i+='"'),i+=n;}return i+='"',i}static quoteIdentifierAfterDot(t){if(!t)return t;let s=true,e=t[0];e>="a"&&e<="z"||e==="_"||(s=false);for(let r=0;r<t.length;r++){let n=t[r];n>="a"&&n<="z"||n>="0"&&n<="9"||n==="_"||(s=false);}if(s)return t;let i='"';for(let r=0;r<t.length;r++){let n=t[r];n==='"'&&(i+='"'),i+=n;}return i+='"',i}static quoteDottedName(t){return !t||t.length===0?"":t.length===1?c.quoteIdentifier(t[0]):t.map((s,e)=>e===0?c.quoteIdentifier(s):c.quoteIdentifierAfterDot(s)).join(".")}static quoteQualifiedIdentifier(t,s){return t?`${c.quoteIdentifier(t)}.${c.quoteIdentifierAfterDot(s)}`:c.quoteIdentifier(s)}static quoteIdentifierTypeName(t){if(!t)return t;let s=true,e=t[0];e>="a"&&e<="z"||e==="_"||(s=false);for(let r=0;r<t.length;r++){let n=t[r];n>="a"&&n<="z"||n>="0"&&n<="9"||n==="_"||(s=false);}if(s&&Pt(t)==="RESERVED_KEYWORD"&&(s=false),s)return t;let i='"';for(let r=0;r<t.length;r++){let n=t[r];n==='"'&&(i+='"'),i+=n;}return i+='"',i}static quoteTypeDottedName(t){return !t||t.length===0?"":t.map(s=>c.quoteIdentifierTypeName(s)).join(".")}};});var ne=C(()=>{us();re();});var p,ls=C(()=>{p=class{static unwrapList(t){return t==null?[]:t.List!==void 0?t.List.items||[]:Array.isArray(t)?t:[t]}static formatList(t,s=", ",e="",i){return !t||t.length===0?"":t.map(r=>`${e}${i(r)}`).join(s)}};});function mi(c){return c&&typeof c=="object"&&!Array.isArray(c)&&!("ParseResult"in c)&&!("RawStmt"in c)&&("stmts"in c||"version"in c)}var fi,hi,z,os=C(()=>{ss();ie();ne();ls();fi=["int2","int4","int8","float4","float8","numeric","varchar","char","bpchar","text","bool","date","time","timetz","timestamp","timestamptz","interval","bytea","uuid","json","jsonb","xml","money","bit","varbit","inet","cidr","macaddr","macaddr8"],hi=[["numeric",["decimal","dec"]],["int4",["int","integer"]],["float8",["float"]],["bpchar",["character"]],["varchar",["character varying"]]];z=class c{tree;options;constructor(t,s={}){this.options={functionDelimiter:"$$",functionDelimiterFallback:"$EOFCODE$",...s},mi(t)?this.tree=[{ParseResult:t}]:Array.isArray(t)?this.tree=t:this.tree=[t];}static deparse(t,s={}){return new c(t,s).deparseQuery()}deparseQuery(){let t=new U(this.options.newline,this.options.tab,this.options.pretty),s=new Q({formatter:t,prettyMode:this.options.pretty});return this.tree.map(e=>this.deparse(e,s)||"").filter(e=>e!=="").join(s.newline()+s.newline())}getFunctionDelimiter(t){let s=this.options.functionDelimiter||"$$";return t.includes(s)?this.options.functionDelimiterFallback||"$EOFCODE$":s}getObjectTypeKeyword(t){switch(t){case "OBJECT_TABLE":return "TABLE";case "OBJECT_VIEW":return "VIEW";case "OBJECT_INDEX":return "INDEX";case "OBJECT_SEQUENCE":return "SEQUENCE";case "OBJECT_FUNCTION":return "FUNCTION";case "OBJECT_PROCEDURE":return "PROCEDURE";case "OBJECT_SCHEMA":return "SCHEMA";case "OBJECT_DATABASE":return "DATABASE";case "OBJECT_DOMAIN":return "DOMAIN";case "OBJECT_AGGREGATE":return "AGGREGATE";case "OBJECT_CONVERSION":return "CONVERSION";case "OBJECT_LANGUAGE":return "LANGUAGE";case "OBJECT_OPERATOR":return "OPERATOR";case "OBJECT_OPFAMILY":return "OPERATOR FAMILY";case "OBJECT_OPCLASS":return "OPERATOR CLASS";case "OBJECT_TSDICTIONARY":return "TEXT SEARCH DICTIONARY";case "OBJECT_TSCONFIGURATION":return "TEXT SEARCH CONFIGURATION";case "OBJECT_EVENT_TRIGGER":return "EVENT TRIGGER";case "OBJECT_FDW":return "FOREIGN DATA WRAPPER";case "OBJECT_FOREIGN_SERVER":return "SERVER";case "OBJECT_TYPE":return "TYPE";case "OBJECT_COLLATION":return "COLLATION";case "OBJECT_PUBLICATION":return "PUBLICATION";case "OBJECT_ACCESS_METHOD":return "ACCESS METHOD";case "OBJECT_AMOP":return "OPERATOR CLASS";case "OBJECT_AMPROC":return "OPERATOR CLASS";case "OBJECT_ATTRIBUTE":return "ATTRIBUTE";case "OBJECT_CAST":return "CAST";case "OBJECT_COLUMN":return "COLUMN";case "OBJECT_DEFAULT":return "DEFAULT";case "OBJECT_DEFACL":return "DEFAULT PRIVILEGES";case "OBJECT_DOMCONSTRAINT":return "DOMAIN";case "OBJECT_EXTENSION":return "EXTENSION";case "OBJECT_FOREIGN_TABLE":return "FOREIGN TABLE";case "OBJECT_LARGEOBJECT":return "LARGE OBJECT";case "OBJECT_MATVIEW":return "MATERIALIZED VIEW";case "OBJECT_PARAMETER_ACL":return "PARAMETER";case "OBJECT_POLICY":return "POLICY";case "OBJECT_PUBLICATION_NAMESPACE":return "PUBLICATION";case "OBJECT_PUBLICATION_REL":return "PUBLICATION";case "OBJECT_ROLE":return "ROLE";case "OBJECT_ROUTINE":return "ROUTINE";case "OBJECT_RULE":return "RULE";case "OBJECT_STATISTIC_EXT":return "STATISTICS";case "OBJECT_SUBSCRIPTION":return "SUBSCRIPTION";case "OBJECT_TABCONSTRAINT":return "CONSTRAINT";case "OBJECT_TABLESPACE":return "TABLESPACE";case "OBJECT_TRANSFORM":return "TRANSFORM";case "OBJECT_TRIGGER":return "TRIGGER";case "OBJECT_TSPARSER":return "TEXT SEARCH PARSER";case "OBJECT_TSTEMPLATE":return "TEXT SEARCH TEMPLATE";case "OBJECT_USER_MAPPING":return "USER MAPPING";default:throw new Error(`Unsupported objectType: ${t}`)}}deparse(t,s){if(t==null)return null;if(!s){let e=new U(this.options.newline,this.options.tab,this.options.pretty);s=new Q({formatter:e,prettyMode:this.options.pretty});}if(typeof t=="number"||t instanceof Number)return t.toString();try{return this.visit(t,s)}catch(e){let i=Object.keys(t)[0];throw new Error(`Error deparsing ${i}: ${e.message}`)}}visit(t,s){if(!s){let n=new U(this.options.newline,this.options.tab,this.options.pretty);s=new Q({formatter:n,prettyMode:this.options.pretty});}let e=this.getNodeType(t);if(!e)return "";let i=this.getNodeData(t),r=e;if(typeof this[r]=="function")return this[r](i,s);throw new Error(`Deparser does not handle node type: ${e}`)}getNodeType(t){return Object.keys(t)[0]}getNodeData(t){let s=Object.keys(t);return s.length===1&&typeof t[s[0]]=="object"?t[s[0]]:t}ParseResult(t,s){return !t.stmts||t.stmts.length===0?"":t.stmts.filter(e=>e!=null).map(e=>this.RawStmt(e,s)).filter(e=>e!=="").join(s.newline()+s.newline())}RawStmt(t,s){if(!t.stmt)return "";let e=this.deparse(t.stmt,s);return t.stmt_len?e+";":e}SelectStmt(t,s){let e=[];if(t.withClause&&e.push(this.WithClause(t.withClause,s)),!t.op||t.op==="SETOP_NONE")t.valuesLists==null&&(!s.isPretty()||!t.targetList)&&e.push("SELECT");else {let r=this.SelectStmt(t.larg,s),n=this.SelectStmt(t.rarg,s),a=t.larg&&(t.larg.op&&t.larg.op!=="SETOP_NONE"||t.larg.sortClause||t.larg.limitCount||t.larg.limitOffset||t.larg.withClause),u=t.rarg&&(t.rarg.op&&t.rarg.op!=="SETOP_NONE"||t.rarg.sortClause||t.rarg.limitCount||t.rarg.limitOffset||t.rarg.withClause);switch(a?e.push(s.parens(r)):e.push(r),t.op){case "SETOP_UNION":e.push("UNION");break;case "SETOP_INTERSECT":e.push("INTERSECT");break;case "SETOP_EXCEPT":e.push("EXCEPT");break;default:throw new Error(`Bad SelectStmt op: ${t.op}`)}t.all&&e.push("ALL"),u?e.push(s.parens(n)):e.push(n);}let i="";if(t.distinctClause){let r=p.unwrapList(t.distinctClause);if(r.length>0&&Object.keys(r[0]).length>0){let n=r.map(a=>this.visit(a,s.spawn("SelectStmt",{select:true}))).join(", ");i=" DISTINCT ON "+s.parens(n);}else i=" DISTINCT";if(!s.isPretty())if(r.length>0&&Object.keys(r[0]).length>0){e.push("DISTINCT ON");let n=r.map(a=>this.visit(a,s.spawn("SelectStmt",{select:true}))).join(", ");e.push(s.parens(n));}else e.push("DISTINCT");}if(t.targetList){let r=p.unwrapList(t.targetList);if(s.isPretty())if(r.length===1){let n=r[0],a=this.visit(n,s.spawn("SelectStmt",{select:true}));this.isComplexSelectTarget(n)?(e.push("SELECT"+i),this.containsMultilineStringLiteral(a)?e.push(a):e.push(s.indent(a))):e.push("SELECT"+i+" "+a);}else {let a=r.map(u=>{let l=this.visit(u,s.spawn("SelectStmt",{select:true}));return this.containsMultilineStringLiteral(l)?l:s.indent(l)}).join(","+s.newline());e.push("SELECT"+i),e.push(a);}else {let n=r.map(a=>this.visit(a,s.spawn("SelectStmt",{select:true}))).join(", ");e.push(n);}}if(t.intoClause&&(e.push("INTO"),e.push(this.IntoClause(t.intoClause,s))),t.fromClause){let n=p.unwrapList(t.fromClause).map(a=>this.deparse(a,s.spawn("SelectStmt",{from:true}))).join(", ");e.push("FROM "+n.trim());}if(t.whereClause)if(s.isPretty()){e.push("WHERE");let a=this.visit(t.whereClause,s).split(s.newline()).map((u,l)=>l===0?s.indent(u):u);e.push(a.join(s.newline()));}else e.push("WHERE"),e.push(this.visit(t.whereClause,s));if(t.valuesLists)if(s.isPretty()){e.push("VALUES");let n=p.unwrapList(t.valuesLists).map(a=>{let u=p.unwrapList(a).map(l=>this.visit(l,s));return s.parens(u.join(", "))}).map(a=>this.containsMultilineStringLiteral(a)?a:s.indent(a));e.push(n.join(`,
17
- `));}else {e.push("VALUES");let r=p.unwrapList(t.valuesLists).map(n=>{let a=p.unwrapList(n).map(u=>this.visit(u,s));return s.parens(a.join(", "))});e.push(r.join(", "));}if(t.groupClause){let r=p.unwrapList(t.groupClause);if(s.isPretty()){let n=r.map(a=>{let u=this.visit(a,s.spawn("SelectStmt",{group:true,indentLevel:s.indentLevel+1}));return this.containsMultilineStringLiteral(u)?u:s.indent(u)}).join(","+s.newline());e.push("GROUP BY"),e.push(n);}else {e.push("GROUP BY");let n=r.map(a=>this.visit(a,s.spawn("SelectStmt",{group:true}))).join(", ");e.push(n);}}if(t.havingClause)if(s.isPretty()){e.push("HAVING");let r=this.visit(t.havingClause,s);this.containsMultilineStringLiteral(r)?e.push(r):e.push(s.indent(r));}else e.push("HAVING"),e.push(this.visit(t.havingClause,s));if(t.windowClause){e.push("WINDOW");let n=p.unwrapList(t.windowClause).map(a=>this.visit(a,s)).join(", ");e.push(n);}if(t.sortClause){let r=p.unwrapList(t.sortClause);if(s.isPretty()){let n=r.map(a=>{let u=this.visit(a,s.spawn("SelectStmt",{sort:true,indentLevel:s.indentLevel+1}));return this.containsMultilineStringLiteral(u)?u:s.indent(u)}).join(","+s.newline());e.push("ORDER BY"),e.push(n);}else {e.push("ORDER BY");let n=r.map(a=>this.visit(a,s.spawn("SelectStmt",{sort:true}))).join(", ");e.push(n);}}if(t.limitCount&&e.push("LIMIT "+this.visit(t.limitCount,s)),t.limitOffset&&e.push("OFFSET "+this.visit(t.limitOffset,s)),t.lockingClause){let n=p.unwrapList(t.lockingClause).map(a=>this.visit(a,s)).join(" ");e.push(n);}return s.isPretty()?e.filter(n=>n.trim()!=="").join(s.newline()):e.join(" ")}A_Expr(t,s){let e=t.kind,i=p.unwrapList(t.name),r=t.lexpr,n=t.rexpr;switch(e){case "AEXPR_OP":if(r&&n){let m=this.deparseOperatorName(i,s),T=this.visit(r,s),E=this.visit(n,s),g=false;if(r&&"A_Expr"in r&&r.A_Expr?.kind==="AEXPR_OP"){let S=this.deparseOperatorName(p.unwrapList(r.A_Expr.name),s);this.needsParentheses(S,m,"left")&&(g=true);}r&&this.isComplexExpression(r)&&(g=true),g&&(T=s.parens(T));let A=false;if(n&&"A_Expr"in n&&n.A_Expr?.kind==="AEXPR_OP"){let S=this.deparseOperatorName(p.unwrapList(n.A_Expr.name),s);this.needsParentheses(S,m,"right")&&(A=true);}return n&&this.isComplexExpression(n)&&(A=true),A&&(E=s.parens(E)),s.format([T,m,E])}else if(n){let m=this.deparseOperatorName(i,s),T=this.visit(n,s);return n&&"A_Expr"in n&&n.A_Expr?.kind==="AEXPR_OP"&&n.A_Expr?.lexpr&&(T=s.parens(T)),s.format([m,T])}break;case "AEXPR_OP_ANY":return s.format([this.visit(r,s),this.deparseOperatorName(i,s),"ANY",s.parens(this.visit(n,s))]);case "AEXPR_OP_ALL":return s.format([this.visit(r,s),this.deparseOperatorName(i,s),"ALL",s.parens(this.visit(n,s))]);case "AEXPR_DISTINCT":{let m=this.visit(r,s),T=this.visit(n,s);return r&&this.isComplexExpression(r)&&(m=s.parens(m)),n&&this.isComplexExpression(n)&&(T=s.parens(T)),s.format([m,"IS DISTINCT FROM",T])}case "AEXPR_NOT_DISTINCT":{let m=this.visit(r,s),T=this.visit(n,s);return r&&this.isComplexExpression(r)&&(m=s.parens(m)),n&&this.isComplexExpression(n)&&(T=s.parens(T)),s.format([m,"IS NOT DISTINCT FROM",T])}case "AEXPR_NULLIF":return s.format(["NULLIF",s.parens([this.visit(r,s),this.visit(n,s)].join(", "))]);case "AEXPR_IN":let a=this.deparseOperatorName(i,s);return a==="<>"||a==="!="?s.format([this.visit(r,s),"NOT IN",s.parens(this.visit(n,s))]):s.format([this.visit(r,s),"IN",s.parens(this.visit(n,s))]);case "AEXPR_LIKE":return this.deparseOperatorName(i,s)==="!~~"?s.format([this.visit(r,s),"NOT LIKE",this.visit(n,s)]):s.format([this.visit(r,s),"LIKE",this.visit(n,s)]);case "AEXPR_ILIKE":return this.deparseOperatorName(i,s)==="!~~*"?s.format([this.visit(r,s),"NOT ILIKE",this.visit(n,s)]):s.format([this.visit(r,s),"ILIKE",this.visit(n,s)]);case "AEXPR_SIMILAR":let o=this.deparseOperatorName(i,s),f;if(n&&"FuncCall"in n&&n.FuncCall?.funcname?.length===2&&n.FuncCall.funcname[0]?.String?.sval==="pg_catalog"&&n.FuncCall.funcname[1]?.String?.sval==="similar_to_escape"){let m=n.FuncCall.args||[];f=this.visit(m[0],s),m.length>1&&(f+=` ESCAPE ${this.visit(m[1],s)}`);}else f=this.visit(n,s);return o==="!~"?s.format([this.visit(r,s),"NOT SIMILAR TO",f]):s.format([this.visit(r,s),"SIMILAR TO",f]);case "AEXPR_BETWEEN":return s.format([this.visit(r,s),"BETWEEN",this.visitBetweenRange(n,s)]);case "AEXPR_NOT_BETWEEN":return s.format([this.visit(r,s),"NOT BETWEEN",this.visitBetweenRange(n,s)]);case "AEXPR_BETWEEN_SYM":return s.format([this.visit(r,s),"BETWEEN SYMMETRIC",this.visitBetweenRange(n,s)]);case "AEXPR_NOT_BETWEEN_SYM":return s.format([this.visit(r,s),"NOT BETWEEN SYMMETRIC",this.visitBetweenRange(n,s)])}throw new Error(`Unhandled A_Expr kind: ${e}`)}deparseOperatorName(t,s){if(!t||t.length===0)return "";let e=t.map(i=>i.String?i.String.sval||i.String.str:this.visit(i,s));return e.length>1?`OPERATOR(${e.join(".")})`:e.join(".")}getOperatorPrecedence(t){return {"||":1,OR:2,AND:3,NOT:4,IS:5,IN:5,BETWEEN:5,LIKE:5,ILIKE:5,SIMILAR:5,"<":6,"<=":6,">":6,">=":6,"=":6,"<>":6,"!=":6,"+":7,"-":7,"*":8,"/":8,"%":8,"^":9,"~":10,"&":10,"|":10,"#":10,"<<":10,">>":10}[t]||0}needsParentheses(t,s,e){let i=this.getOperatorPrecedence(t),r=this.getOperatorPrecedence(s);return i<r||i===r&&e==="right"&&(s==="-"||s==="/")}isComplexExpression(t){return !!(t.NullTest||t.BooleanTest||t.BoolExpr||t.CaseExpr||t.CoalesceExpr||t.SubLink||t.A_Expr)}isComplexSelectTarget(t){if(!t)return false;if(t.ResTarget?.val)return this.isComplexExpression(t.ResTarget.val);if(t.CaseExpr||t.SubLink||t.NullTest||t.BooleanTest||t.BoolExpr)return true;if(t.CoalesceExpr){let s=t.CoalesceExpr.args;if(s&&Array.isArray(s)&&s.length>1)return true}if(t.FuncCall){let s=t.FuncCall,e=s.args?Array.isArray(s.args)?s.args:[s.args]:[];if(s.over||s.agg_filter||s.agg_order||s.agg_distinct||e.length>1)return true;if(e.length===1)return this.isComplexSelectTarget(e[0])}if(t.A_Expr){let s=t.A_Expr;return !!(s.lexpr&&this.isComplexSelectTarget(s.lexpr)||s.rexpr&&this.isComplexSelectTarget(s.rexpr))}return t.TypeCast?this.isComplexSelectTarget(t.TypeCast.arg):t.A_ArrayExpr?true:t.A_Indirection?this.isComplexSelectTarget(t.A_Indirection.arg):(t.A_Const||t.ColumnRef||t.ParamRef||t.A_Star,false)}visitBetweenRange(t,s){return t&&"List"in t&&t.List?.items?t.List.items.map(i=>this.visit(i,s)).join(" AND "):this.visit(t,s)}InsertStmt(t,s){let e=[];if(t.withClause&&e.push(this.WithClause(t.withClause,s)),e.push("INSERT INTO"),e.push(this.RangeVar(t.relation,s)),t.cols){let i=p.unwrapList(t.cols),r=s.spawn("InsertStmt",{insertColumns:true}),n=i.map(a=>this.visit(a,r));if(s.isPretty()){let a=n.map(u=>s.indent(u));e.push(`(
18
- `+a.join(`,
19
- `)+`
20
- )`);}else e.push(s.parens(n.join(", ")));}if(t.selectStmt?e.push(this.visit(t.selectStmt,s)):(!t.cols||t.cols&&p.unwrapList(t.cols).length===0)&&e.push("DEFAULT VALUES"),t.onConflictClause){if(e.push("ON CONFLICT"),t.onConflictClause.infer){let i=t.onConflictClause.infer;if(i.conname)e.push("ON CONSTRAINT"),e.push(i.conname);else if(i.indexElems){let n=p.unwrapList(i.indexElems).map(a=>this.visit(a,s));e.push(s.parens(n.join(", ")));}i.whereClause&&(e.push("WHERE"),e.push(this.visit(i.whereClause,s)));}if(t.onConflictClause.action==="ONCONFLICT_UPDATE"){e.push("DO UPDATE SET");let i=p.unwrapList(t.onConflictClause.targetList);if(i&&i.length){let r=i[0];if(r.ResTarget?.val?.MultiAssignRef&&i.every(n=>n.ResTarget?.val?.MultiAssignRef)){let a=i.sort((u,l)=>u.ResTarget.val.MultiAssignRef.colno-l.ResTarget.val.MultiAssignRef.colno).map(u=>u.ResTarget.name);e.push(s.parens(a.join(", "))),e.push("="),e.push(this.visit(r.ResTarget.val.MultiAssignRef.source,s));}else {let n=s.spawn("UpdateStmt",{update:true}),a=i.map(u=>this.visit(u,n));if(s.isPretty()){let u=a.map(l=>s.indent(l));e.push(`
21
- `+u.join(`,
22
- `));}else e.push(a.join(", "));}}t.onConflictClause.whereClause&&(e.push("WHERE"),e.push(this.visit(t.onConflictClause.whereClause,s)));}else t.onConflictClause.action==="ONCONFLICT_NOTHING"&&e.push("DO NOTHING");}if(t.returningList){e.push("RETURNING");let r=p.unwrapList(t.returningList).map(n=>this.visit(n,s));e.push(r.join(", "));}return e.join(" ")}UpdateStmt(t,s){let e=[];t.withClause&&e.push(this.WithClause(t.withClause,s)),e.push("UPDATE"),t.relation&&e.push(this.RangeVar(t.relation,s)),e.push("SET");let i=p.unwrapList(t.targetList);if(i&&i.length){i[0];let n=new Set,a=[];for(let u=0;u<i.length;u++){if(n.has(u))continue;let l=i[u],o=l.ResTarget?.val?.MultiAssignRef;if(o){let f=[];for(let E=u;E<i.length;E++){let g=i[E],A=g.ResTarget?.val?.MultiAssignRef;A&&JSON.stringify(A.source)===JSON.stringify(o.source)&&(f.push(g),n.add(E));}let m=f.map(E=>E.ResTarget.name),T=`${s.parens(m.join(", "))} = ${this.visit(o.source,s)}`;a.push(T);}else a.push(this.visit(l,s.spawn("UpdateStmt",{update:true}))),n.add(u);}e.push(a.join(","));}if(t.fromClause){e.push("FROM");let n=p.unwrapList(t.fromClause).map(a=>this.visit(a,s));e.push(n.join(", "));}return t.whereClause&&(e.push("WHERE"),e.push(this.visit(t.whereClause,s))),t.returningList&&(e.push("RETURNING"),e.push(this.deparseReturningList(t.returningList,s))),e.join(" ")}DeleteStmt(t,s){try{let e=[];if(t.withClause)try{e.push(this.WithClause(t.withClause,s));}catch(i){throw console.warn(`Error processing withClause in DeleteStmt: ${i instanceof Error?i.message:String(i)}`),new Error(`Error deparsing DeleteStmt: ${i instanceof Error?i.message:String(i)}`)}if(e.push("DELETE"),e.push("FROM"),!t.relation)throw new Error("DeleteStmt requires a relation");if(e.push(this.RangeVar(t.relation,s)),t.usingClause){e.push("USING");let r=p.unwrapList(t.usingClause).filter(n=>n!=null&&this.getNodeType(n)!=="undefined").map(n=>{try{return this.visit(n,s)}catch(a){return console.warn(`Error processing usingClause item in DeleteStmt: ${a instanceof Error?a.message:String(a)}`),""}}).filter(n=>n&&n.trim());r.length>0&&e.push(r.join(", "));}if(t.whereClause){e.push("WHERE");try{e.push(this.visit(t.whereClause,s));}catch(i){throw console.warn(`Error processing whereClause in DeleteStmt: ${i instanceof Error?i.message:String(i)}`),new Error(`Error deparsing DeleteStmt: ${i instanceof Error?i.message:String(i)}`)}}if(t.returningList){e.push("RETURNING");try{e.push(this.deparseReturningList(t.returningList,s));}catch(i){throw console.warn(`Error processing returningList in DeleteStmt: ${i instanceof Error?i.message:String(i)}`),new Error(`Error deparsing DeleteStmt: ${i instanceof Error?i.message:String(i)}`)}}return e.join(" ")}catch(e){throw new Error(`Error deparsing DeleteStmt: ${e instanceof Error?e.message:String(e)}`)}}WithClause(t,s){let e=["WITH"];if(t.recursive&&e.push("RECURSIVE"),t.ctes&&t.ctes.length>0){let i=p.unwrapList(t.ctes);if(s.isPretty()){let r=i.map((n,a)=>{let u=this.visit(n,s),l=a===0?s.newline():","+s.newline();return this.containsMultilineStringLiteral(u)?l+u:l+s.indent(u)});e.push(r.join(""));}else {let r=i.map(n=>this.visit(n,s));e.push(r.join(", "));}}return e.join(" ")}ResTarget(t,s){let e=[];if(s.update&&t.name){if(e.push(h.quoteIdentifier(t.name)),t.indirection&&t.indirection.length>0){let i=p.unwrapList(t.indirection).map(r=>r.String?`.${h.quoteIdentifierAfterDot(r.String.sval||r.String.str)}`:this.visit(r,s));e.push(i.join(""));}e.push("="),t.val&&e.push(this.deparse(t.val,s));}else if(s.insertColumns&&t.name){if(e.push(h.quoteIdentifier(t.name)),t.indirection&&t.indirection.length>0){let i=p.unwrapList(t.indirection).map(r=>r.String?`.${h.quoteIdentifierAfterDot(r.String.sval||r.String.str)}`:this.visit(r,s));e.push(i.join(""));}}else t.val&&e.push(this.deparse(t.val,s)),t.name&&(e.push("AS"),e.push(h.quoteIdentifier(t.name)));return e.join(" ")}deparseReturningList(t,s){return p.unwrapList(t).filter(e=>e!=null&&this.getNodeType(e)!=="undefined").map(e=>{try{if(this.getNodeType(e)==="ResTarget"){let i=this.getNodeData(e),r=i.val?this.visit(i.val,s):"",n=i.name?` AS ${h.quoteIdentifier(i.name)}`:"";return r+n}else return this.visit(e,s)}catch(i){return console.warn(`Error processing returning item: ${i instanceof Error?i.message:String(i)}`),""}}).filter(e=>e&&e.trim()).join(", ")}BoolExpr(t,s){let e=t.boolop,i=p.unwrapList(t.args),r="%s";s.bool&&(r="(%s)");let n=s.spawn("BoolExpr",{bool:true});switch(e){case "AND_EXPR":if(s.isPretty()&&i.length>1){let a=i.map(u=>this.visit(u,n)).join(s.newline()+s.indent("AND "));return r.replace("%s",()=>a)}else {let a=i.map(u=>this.visit(u,n)).join(" AND ");return r.replace("%s",()=>a)}case "OR_EXPR":if(s.isPretty()&&i.length>1){let a=i.map(u=>this.visit(u,n)).join(s.newline()+s.indent("OR "));return r.replace("%s",()=>a)}else {let a=i.map(u=>this.visit(u,n)).join(" OR ");return r.replace("%s",()=>a)}case "NOT_EXPR":return `NOT (${this.visit(i[0],s)})`;default:throw new Error(`Unhandled BoolExpr boolop: ${e}`)}}FuncCall(t,s){let e=p.unwrapList(t.funcname),i=p.unwrapList(t.args),r=e.map(o=>o.String?.sval||o.String?.str||"").filter(o=>o),n=h.quoteDottedName(r);if(t.funcformat==="COERCE_SQL_SYNTAX"&&n==="pg_catalog.xmlexists"&&i.length>=2){let o=this.visit(i[0],s),f=this.visit(i[1],s);return `xmlexists (${o} PASSING ${f})`}if(t.funcformat==="COERCE_SQL_SYNTAX"&&n==="pg_catalog.extract"&&i.length>=2){let o=this.visit(i[0],s),f=this.visit(i[1],s);return o.startsWith("'")&&o.endsWith("'")&&(o=o.slice(1,-1).toUpperCase()),`EXTRACT(${o} FROM ${f})`}if(t.funcformat==="COERCE_SQL_SYNTAX"&&(n==="pg_catalog.rtrim"||n==="pg_catalog.ltrim"||n==="pg_catalog.btrim")&&i.length>=1){let o=this.visit(i[0],s),f="";if(i.length>=2&&(f=` ${this.visit(i[1],s)}`),n==="pg_catalog.rtrim")return `TRIM(TRAILING${f} FROM ${o})`;if(n==="pg_catalog.ltrim")return `TRIM(LEADING${f} FROM ${o})`;if(n==="pg_catalog.btrim")return `TRIM(BOTH${f} FROM ${o})`}if(t.funcformat==="COERCE_SQL_SYNTAX"&&n==="pg_catalog.pg_collation_for")return `COLLATION FOR (${i.map(f=>this.visit(f,s)).join(", ")})`;if(t.funcformat==="COERCE_SQL_SYNTAX"&&n==="pg_catalog.substring"){let o=this.visit(i[0],s);if(i.length===3){let f=this.visit(i[1],s),m=this.visit(i[2],s);return `SUBSTRING(${o} FROM ${f} FOR ${m})`}else if(i.length===2){let f=this.visit(i[1],s);return `SUBSTRING(${o} FROM ${f})`}}if(t.funcformat==="COERCE_SQL_SYNTAX"&&n==="pg_catalog.position"&&i.length===2){let o=this.visit(i[0],s);return `POSITION(${this.visit(i[1],s)} IN ${o})`}if(t.funcformat==="COERCE_SQL_SYNTAX"&&n==="pg_catalog.overlay"){if(i.length===4){let o=this.visit(i[0],s),f=this.visit(i[1],s),m=this.visit(i[2],s),T=this.visit(i[3],s);return `OVERLAY(${o} PLACING ${f} FROM ${m} FOR ${T})`}else if(i.length===3){let o=this.visit(i[0],s),f=this.visit(i[1],s),m=this.visit(i[2],s);return `OVERLAY(${o} PLACING ${f} FROM ${m})`}}if(t.funcformat==="COERCE_SQL_SYNTAX"&&n==="pg_catalog.is_normalized"){let o=this.visit(i[0],s);if(i.length===2){let m=this.visit(i[1],s).replace(/'/g,"");return `${o} IS ${m} NORMALIZED`}else return `${o} IS NORMALIZED`}if(t.funcformat==="COERCE_SQL_SYNTAX"&&n==="pg_catalog.normalize"){let o=this.visit(i[0],s);if(i.length===2){let m=this.visit(i[1],s).replace(/'/g,"");return `normalize(${o}, ${m})`}else return `normalize(${o})`}if(t.funcformat==="COERCE_SQL_SYNTAX"&&n==="pg_catalog.system_user"&&i.length===0)return "SYSTEM_USER";if(n==="pg_catalog.overlaps"&&i.length===4){let o=this.visit(i[0],s),f=this.visit(i[1],s),m=this.visit(i[2],s),T=this.visit(i[3],s);return `(${o}, ${f}) OVERLAPS (${m}, ${T})`}if(n==="pg_catalog.timezone"&&i.length===2){let o=this.visit(i[1],s),f=this.visit(i[0],s);if(i[1]&&"A_Expr"in i[1]&&i[1].A_Expr?.kind==="AEXPR_OP"){let m=this.deparseOperatorName(p.unwrapList(i[1].A_Expr.name),s);(m==="+"||m==="-"||m==="*"||m==="/")&&(o=s.parens(o));}return `${o} AT TIME ZONE ${f}`}let a=[];if(t.agg_star)t.agg_distinct?a.push("DISTINCT *"):a.push("*");else {let o=i.map(f=>this.visit(f,s));if(t.func_variadic&&o.length>0){let f=o.length-1;o[f]=`VARIADIC ${o[f]}`;}t.agg_distinct&&o.length>0?a.push("DISTINCT "+o.join(", ")):a.push(...o);}let u="";if(t.agg_order&&t.agg_order.length>0){let f=p.unwrapList(t.agg_order).map(m=>this.visit(m,s));t.agg_within_group?u=` WITHIN GROUP (ORDER BY ${f.join(", ")})`:u=` ORDER BY ${f.join(", ")}`;}let l;if(t.agg_within_group&&u?l=`${n}(${a.join(", ")})${u}`:l=`${n}(${a.join(", ")}${u})`,t.agg_filter&&(l+=` FILTER (WHERE ${this.visit(t.agg_filter,s)})`),t.over)if(t.over.name)l+=` OVER ${t.over.name}`;else {let o=[];if(t.over.partitionClause){let T=p.unwrapList(t.over.partitionClause).map(E=>this.visit(E,s));o.push(`PARTITION BY ${T.join(", ")}`);}if(t.over.orderClause){let T=p.unwrapList(t.over.orderClause).map(E=>this.visit(E,s));o.push(`ORDER BY ${T.join(", ")}`);}let f=this.formatWindowFrame(t.over,s.spawn("FuncCall"));if(f&&o.push(f),o.length>0)if(s.isPretty()&&o.length>1){let m=o.map(T=>s.indent(T));l+=` OVER (${s.newline()}${m.join(s.newline())}${s.newline()})`;}else l+=` OVER (${o.join(" ")})`;else l+=" OVER ()";}return l}FuncExpr(t,s){let e=`func_${t.funcid}`,i=t.args?p.unwrapList(t.args).map(r=>this.visit(r,s)).join(", "):"";return `${e}(${i})`}A_Const(t,s){let e=t;if(e.ival!==void 0)return typeof e.ival=="object"&&e.ival!==null?e.ival.ival!==void 0?e.ival.ival.toString():Object.keys(e.ival).length===0?"0":e.ival.toString():e.ival===null?"NULL":e.ival.toString();if(e.fval!==void 0)return typeof e.fval=="object"&&e.fval!==null?e.fval.fval!==void 0?e.fval.fval.toString():Object.keys(e.fval).length===0?"0.0":e.fval.toString():e.fval===null?"NULL":e.fval.toString();if(e.sval!==void 0)return typeof e.sval=="object"&&e.sval!==null?e.sval.sval!==void 0?h.formatEString(e.sval.sval):e.sval.String&&e.sval.String.sval!==void 0?h.formatEString(e.sval.String.sval):Object.keys(e.sval).length===0?"''":h.formatEString(e.sval.toString()):e.sval===null?"NULL":h.formatEString(e.sval);if(e.boolval!==void 0)return typeof e.boolval=="object"&&e.boolval!==null?e.boolval.boolval!==void 0?e.boolval.boolval?"true":"false":Object.keys(e.boolval).length===0?"false":e.boolval?"true":"false":e.boolval===null?"NULL":e.boolval?"true":"false";if(e.bsval!==void 0)if(typeof e.bsval=="object"&&e.bsval!==null)if(e.bsval.bsval!==void 0){let i=e.bsval.bsval;return i.startsWith("x")&&/^x[0-9A-Fa-f]+$/.test(i)?`x'${i.substring(1)}'`:i.startsWith("b")?`b'${i.substring(1)}'`:`b'${i}'`}else return Object.keys(e.bsval).length===0?"''":e.bsval.toString();else {if(e.bsval===null)return "NULL";{let i=e.bsval;return i.startsWith("x")&&/^x[0-9A-Fa-f]+$/.test(i)?`x'${i.substring(1)}'`:i.startsWith("b")?`b'${i.substring(1)}'`:`b'${i}'`}}if(e.val){if(e.val.Integer?.ival!==void 0)return e.val.Integer.ival.toString();if(e.val.Float?.fval!==void 0)return e.val.Float.fval.toString();if(e.val.String?.sval!==void 0)return h.escape(e.val.String.sval);if(e.val.Boolean?.boolval!==void 0)return e.val.Boolean.boolval?"true":"false";if(e.val.BitString?.bsval!==void 0)return e.val.BitString.bsval}return e.isnull===true?"NULL":typeof e=="object"&&e!==null?e.Boolean!==void 0?e.Boolean?"true":"false":e.Integer!==void 0?typeof e.Integer=="object"&&e.Integer.ival!==void 0?e.Integer.ival.toString():e.Integer.toString():e.Float!==void 0?typeof e.Float=="object"&&e.Float.fval!==void 0?e.Float.fval.toString():e.Float.toString():e.String!==void 0?typeof e.String=="object"&&e.String.sval!==void 0?h.escape(e.String.sval):h.escape(e.String):(Object.keys(e).length===0||console.warn("A_Const: Unhandled object structure:",JSON.stringify(e,null,2)),"NULL"):"NULL"}ColumnRef(t,s){return p.unwrapList(t.fields).map(i=>i.String?h.quoteIdentifier(i.String.sval||i.String.str):i.A_Star?"*":this.visit(i,s)).join(".")}TypeName(t,s){if(!t.names)return "";let e=[];t.setof&&e.push("SETOF");let i=t.names.map(l=>l.String?l.String.sval||l.String.str:"").filter(Boolean);if(i.length===0)return "";let r=null;t.typmods?i.some(o=>(typeof o=="string"?o:o.String?.sval||o.String?.str)==="interval")?r=this.formatIntervalTypeMods(t.typmods,s):r=this.formatTypeMods(t.typmods,s):t.typemod&&t.typemod!==-1&&(r=this.formatSingleTypeMod(t.typemod,i[0]));let n=(l,o)=>o!=null?l==="interval"?o.startsWith("(")?`${l}${o}`:`${l} ${o}`:`${l}(${o})`:l,a=l=>l.map(o=>o.Integer&&o.Integer.ival!==void 0&&o.Integer.ival!==-1?`[${o.Integer.ival}]`:"[]").join("");if(i.length===1){let l=i[0];if(l==="char")return s.parentNodeTypes.includes("TypeCast")&&r==="1"?e.push('"char"'):e.push(n('"char"',r)),e.join(" ");let o=n(h.quoteIdentifierTypeName(l),r);return t.arrayBounds&&t.arrayBounds.length>0&&(o+=a(t.arrayBounds)),e.push(o),e.join(" ")}if(i.length===2){let[l,o]=i;if(l==="pg_catalog"&&o==="char")return e.push(n("pg_catalog.char",r)),e.join(" ");if(l==="pg_catalog"){let f=`${l}.${o}`;o==="bpchar"&&r?f="char":o==="varchar"?f="varchar":o==="numeric"?f="numeric":o==="int4"?f="int":o==="float8"?f="double precision":o==="float4"?f="real":o==="int8"?f="bigint":o==="int2"?f="smallint":o==="bool"?f="boolean":o==="interval"?(s.parentNodeTypes.includes("TypeCast"),f="interval"):o==="timestamptz"?r?(f=`timestamp(${r}) with time zone`,r=null):f="timestamp with time zone":o==="timetz"?r?(f=`time(${r}) with time zone`,r=null):f="time with time zone":o==="timestamp"?r?(f=`timestamp(${r})`,r=null):f="timestamp":o==="time"&&(r?(f=`time(${r})`,r=null):f="time");let m=n(f,r);return t.arrayBounds&&t.arrayBounds.length>0&&(m+=a(t.arrayBounds)),e.push(m),e.join(" ")}}let u=n(h.quoteTypeDottedName(i),r);return t.arrayBounds&&t.arrayBounds.length>0&&(u+=a(t.arrayBounds)),e.push(u),e.join(" ")}Alias(t,s){let e=t.aliasname,i=[];if(t.colnames){let n=p.unwrapList(t.colnames).map(a=>{let u=this.deparse(a,s);return u.startsWith('"')&&u.endsWith('"')?u:this.quoteIfNeeded(u)});i.push("AS",this.quoteIfNeeded(e)+s.parens(n.join(", ")));}else i.push("AS",this.quoteIfNeeded(e));return i.join(" ")}RangeVar(t,s){let e=[];t&&(!("inh"in t)||t.inh===void 0)&&!s.parentNodeTypes.includes("CompositeTypeStmt")&&!s.parentNodeTypes.includes("AlterTypeStmt")&&s.objtype!=="OBJECT_TYPE"&&!s.parentNodeTypes.includes("CreateForeignTableStmt")&&e.push("ONLY");let i="";if(t.catalogname?(i=h.quoteIdentifier(t.catalogname),t.schemaname&&(i+="."+h.quoteIdentifierAfterDot(t.schemaname)),i+="."+h.quoteIdentifierAfterDot(t.relname)):t.schemaname?i=h.quoteQualifiedIdentifier(t.schemaname,t.relname):i=h.quoteIdentifier(t.relname),e.push(i),t.alias){let n=this.Alias(t.alias,s);e.push(n);}return e.join(" ")}formatIntervalTypeMods(t,s){if(!t||t.length===0)return null;let e=p.unwrapList(t),i={4:"year",2:"month",8:"day",1024:"hour",2048:"minute",4096:"second",6:"year to month",1032:"day to hour",3080:"day to minute",7176:"day to second",3072:"hour to minute",7168:"hour to second",6144:"minute to second"};if(e.length===1){let n=e[0];if(n&&typeof n=="object"){let a=n.A_Const;if(a&&a.ival!==void 0){let u=typeof a.ival=="object"?a.ival.ival:a.ival;if(u!==void 0)return i[u]?i[u]:`(${u})`}}}if(e.length===2){let n=e[0],a=e[1];if(n&&typeof n=="object"){let u=n.A_Const;if(u&&u.ival!==void 0){let l=typeof u.ival=="object"?u.ival.ival:u.ival;if(a&&typeof a=="object"){let o=a.A_Const;if(o&&o.ival!==void 0){let f=typeof o.ival=="object"?o.ival.ival!==void 0?o.ival.ival:0:o.ival;if(l===32767&&f>=0)return `(${f})`;if(i[l]&&f>=0)return `${i[l]}(${f})`}}}}}let r=e.map(n=>{if(n&&typeof n=="object"){let u=n.A_Const;if(u&&u.ival!==void 0){let l=typeof u.ival=="object"?u.ival.ival:u.ival;if(l!==void 0)return i[l]||l.toString()}}return this.visit(n,s)||""}).filter(Boolean);return r.length>0?r.join(" "):null}formatTypeMods(t,s){if(!t||t.length===0)return null;let i=p.unwrapList(t).filter(r=>{if(r&&typeof r=="object"){let n=r.A_Const;if(n&&n.ival&&(typeof n.ival=="object"?n.ival.ival:n.ival)===32767)return false}return true});return i.length===0?null:i.map(r=>this.deparse(r,s)).join(", ")}formatSingleTypeMod(t,s){switch(s){case "varchar":case "bpchar":case "char":if(t>4)return (t-64).toString();break;case "numeric":case "decimal":if(t>4){let e=t-4,i=e>>16&65535,r=e&65535;return r>0?`${i},${r}`:i.toString()}break;case "time":case "timetz":case "timestamp":case "timestamptz":case "interval":if(t>=0)return t.toString();break}return null}getPgCatalogTypeName(t,s){switch(t){case "bpchar":return s!=null?"char":"bpchar";case "varchar":return "varchar";case "numeric":return "numeric";case "bool":return "boolean";case "int2":return "smallint";case "int4":return "int";case "int8":return "bigint";case "real":return "float4";case "time":return "time";case "timestamp":return "timestamp";case "interval":return "interval";case "bit":return "bit";default:return t}}isPgCatalogType(t){let s=t.replace(/^pg_catalog\./,"");if(fi.includes(s))return true;for(let[e,i]of hi)if(i.includes(s))return true;return false}A_ArrayExpr(t,s){return `ARRAY[${p.unwrapList(t.elements).map(r=>this.visit(r,s)).join(", ")}]`}A_Indices(t,s){let e=[];return t.is_slice?(t.lidx&&e.push(this.visit(t.lidx,s)),e.push(":"),t.uidx&&e.push(this.visit(t.uidx,s))):t.uidx&&e.push(this.visit(t.uidx,s)),`[${e.join("")}]`}A_Indirection(t,s){let e=this.visit(t.arg,s),i=this.getNodeType(t.arg);(i==="TypeCast"||i==="SubLink"||i==="A_Expr"||i==="FuncCall"||i==="A_Indirection"||i==="ColumnRef"||i==="RowExpr")&&(e=`(${e})`);let r=[e],n=p.unwrapList(t.indirection);for(let a of n)if(a.String||a.A_Star){let u=a.A_Star?"*":h.quoteIdentifier(a.String.sval||a.String.str);r.push(`.${u}`);}else r.push(this.visit(a,s));return r.join("")}A_Star(t,s){return "*"}CaseExpr(t,s){let e=["CASE"];t.arg&&e.push(this.visit(t.arg,s));let i=p.unwrapList(t.args);if(s.isPretty()&&i.length>0){for(let r of i){let n=this.visit(r,s);this.containsMultilineStringLiteral(n)?e.push(s.newline()+n):e.push(s.newline()+s.indent(n));}if(t.defresult){let r=this.visit(t.defresult,s);this.containsMultilineStringLiteral(r)?e.push(s.newline()+"ELSE "+r):e.push(s.newline()+s.indent("ELSE "+r));}return e.push(s.newline()+"END"),e.join(" ")}else {for(let r of i)e.push(this.visit(r,s));return t.defresult&&(e.push("ELSE"),e.push(this.visit(t.defresult,s))),e.push("END"),e.join(" ")}}CoalesceExpr(t,s){return `COALESCE(${p.unwrapList(t.args).map(r=>this.visit(r,s)).join(", ")})`}TypeCast(t,s){let e=this.visit(t.arg,s),i=this.TypeName(t.typeName,s);if(i==="bpchar"||i==="pg_catalog.bpchar"){let r=t.typeName?.names;if(r&&r.length===2&&r[0]?.String?.sval==="pg_catalog"&&r[1]?.String?.sval==="bpchar")return `CAST(${e} AS ${i})`}if(this.isPgCatalogType(i)){let r=this.getNodeType(t.arg),n=r==="A_Const"||r==="ColumnRef",a=r==="FuncCall";if((n||a)&&!(n&&(e.includes("(")||e.startsWith("-")))){let l=i.replace("pg_catalog.","");return a?`${s.parens(e)}::${l}`:`${e}::${l}`}}return `CAST(${e} AS ${i})`}CollateClause(t,s){let e=[];if(t.arg){let i=this.visit(t.arg,s),r=this.getNodeType(t.arg);(r==="A_Expr"||r==="FuncCall"||r==="SubLink")&&(i=`(${i})`),e.push(i);}if(e.push("COLLATE"),t.collname){let i=p.unwrapList(t.collname);e.push(i.map(r=>this.visit(r,s)).join("."));}return e.join(" ")}BooleanTest(t,s){let e=[],i=s.spawn("BooleanTest",{bool:true});switch(e.push(this.visit(t.arg,i)),t.booltesttype){case "IS_TRUE":e.push("IS TRUE");break;case "IS_NOT_TRUE":e.push("IS NOT TRUE");break;case "IS_FALSE":e.push("IS FALSE");break;case "IS_NOT_FALSE":e.push("IS NOT FALSE");break;case "IS_UNKNOWN":e.push("IS UNKNOWN");break;case "IS_NOT_UNKNOWN":e.push("IS NOT UNKNOWN");break}return e.join(" ")}NullTest(t,s){let e=[];switch(e.push(this.visit(t.arg,s)),t.nulltesttype){case "IS_NULL":e.push("IS NULL");break;case "IS_NOT_NULL":e.push("IS NOT NULL");break}return e.join(" ")}quoteIfNeeded(t){return h.quoteIdentifier(t)}preserveOperatorDefElemCase(t){return {leftarg:"Leftarg",rightarg:"Rightarg",procedure:"Procedure",function:"Function",commutator:"Commutator",negator:"Negator",restrict:"Restrict",join:"Join",hashes:"Hashes",merges:"Merges"}[t.toLowerCase()]||t}String(t,s){if(s.isStringLiteral||s.isEnumValue)return h.formatEString(t.sval||"");let e=t.sval||"";return s.parentNodeTypes.includes("DefElem")||s.parentNodeTypes.includes("CreateOpClassItem")||s.parentNodeTypes.includes("ObjectWithArgs")&&/^[+\-*/<>=~!@#%^&|`?]+$/.test(e)?e:h.quoteIdentifier(e)}Integer(t,s){return t.ival?.toString()||"0"}Float(t,s){return t.fval||"0.0"}Boolean(t,s){return t.boolval?"true":"false"}BitString(t,s){return t.bsval.startsWith("x")?`x'${t.bsval.substring(1)}'`:t.bsval.startsWith("b")?`b'${t.bsval.substring(1)}'`:`b'${t.bsval}'`}Null(t,s){return "NULL"}List(t,s){return !t.items||t.items.length===0?"":t.items.map(e=>this.visit(e,s)).join(", ")}CreateStmt(t,s){let e=["CREATE"];if(t.relation&&t.relation.relpersistence==="t"?e.push("TEMPORARY"):t.relation&&t.relation.relpersistence==="u"&&e.push("UNLOGGED"),t.if_not_exists?e.push("TABLE IF NOT EXISTS"):e.push("TABLE"),e.push(this.RangeVar(t.relation,s)),t.ofTypename){if(e.push("OF"),e.push(this.TypeName(t.ofTypename,s)),t.tableElts){let r=p.unwrapList(t.tableElts).map(n=>this.deparse(n,s));e.push(s.parens(r.join(", ")));}}else if(t.tableElts){let r=p.unwrapList(t.tableElts).map(n=>this.deparse(n,s.spawn("CreateStmt")));if(s.isPretty()){let n=r.map(a=>{let u=a.trim();return u.startsWith(`
23
- `)?s.indent(u.substring(1)):s.indent(u)}).join(","+s.newline());e.push("("+s.newline()+n+s.newline()+")");}else e.push(s.parens(r.join(", ")));}else t.partbound||e.push(s.parens(""));if(t.partbound&&t.inhRelations&&t.inhRelations.length>0){e.push("PARTITION OF");let r=p.unwrapList(t.inhRelations).map(n=>this.visit(n,s));if(e.push(r[0]),t.partbound.strategy==="l"&&t.partbound.listdatums){e.push("FOR VALUES IN");let n=p.unwrapList(t.partbound.listdatums).map(a=>this.visit(a,s)).join(", ");e.push(`(${n})`);}else if(t.partbound.strategy==="r"&&(t.partbound.lowerdatums||t.partbound.upperdatums)){if(e.push("FOR VALUES FROM"),t.partbound.lowerdatums){let n=p.unwrapList(t.partbound.lowerdatums).map(a=>this.visit(a,s)).join(", ");e.push(`(${n})`);}if(t.partbound.upperdatums){e.push("TO");let n=p.unwrapList(t.partbound.upperdatums).map(a=>this.visit(a,s)).join(", ");e.push(`(${n})`);}}else if(t.partbound.strategy==="h"&&t.partbound.modulus!==void 0){e.push("FOR VALUES WITH");let n=t.partbound.remainder!==void 0?t.partbound.remainder:0;e.push(`(MODULUS ${t.partbound.modulus}, REMAINDER ${n})`);}else t.partbound.is_default&&e.push("DEFAULT");}else if(t.inhRelations){e.push("INHERITS");let r=p.unwrapList(t.inhRelations).map(n=>this.visit(n,s));e.push(s.parens(r.join(", ")));}if(t.partspec){switch(e.push("PARTITION BY"),t.partspec.strategy){case "PARTITION_STRATEGY_HASH":e.push("HASH");break;case "PARTITION_STRATEGY_LIST":e.push("LIST");break;case "PARTITION_STRATEGY_RANGE":e.push("RANGE");break}if(t.partspec.partParams&&t.partspec.partParams.length>0){let i=p.unwrapList(t.partspec.partParams).map(r=>this.visit(r,s)).join(", ");e.push(`(${i})`);}}if(t.oncommit&&t.oncommit!=="ONCOMMIT_NOOP")switch(e.push("ON COMMIT"),t.oncommit){case "ONCOMMIT_PRESERVE_ROWS":e.push("PRESERVE ROWS");break;case "ONCOMMIT_DELETE_ROWS":e.push("DELETE ROWS");break;case "ONCOMMIT_DROP":e.push("DROP");break}if(t.options&&t.options.length>0){let i=s.spawn("CreateStmt"),r=t.options.map(n=>this.deparse(n,i));e.push("WITH",`(${r.join(", ")})`);}return t.accessMethod&&(e.push("USING"),e.push(this.quoteIfNeeded(t.accessMethod))),e.join(" ")}ColumnDef(t,s){let e=[];if(t.colname&&e.push(h.quoteIdentifier(t.colname)),t.typeName&&e.push(this.TypeName(t.typeName,s)),t.fdwoptions&&t.fdwoptions.length>0){e.push("OPTIONS");let i=s.spawn("ColumnDef"),r=p.unwrapList(t.fdwoptions).map(n=>this.visit(n,i));e.push(`(${r.join(", ")})`);}if(t.collClause&&e.push(this.CollateClause(t.collClause,s)),t.constraints){let r=p.unwrapList(t.constraints).map(n=>{let a=s.spawn("ColumnDef",{isColumnConstraint:true});return this.visit(n,a)});e.push(...r);}return t.raw_default&&(e.push("DEFAULT"),e.push(this.visit(t.raw_default,s))),t.generated&&(e.push("GENERATED ALWAYS AS"),e.push(`(${t.generated})`),e.push("STORED")),t.is_not_null&&e.push("NOT NULL"),e.join(" ")}Constraint(t,s){let e=[];switch(t.conname&&(t.contype==="CONSTR_CHECK"||t.contype==="CONSTR_UNIQUE"||t.contype==="CONSTR_PRIMARY"||t.contype==="CONSTR_FOREIGN")&&(e.push("CONSTRAINT"),e.push(h.quoteIdentifier(t.conname))),t.contype){case "CONSTR_NULL":e.push("NULL");break;case "CONSTR_NOTNULL":e.push("NOT NULL");break;case "CONSTR_DEFAULT":e.push("DEFAULT"),t.raw_expr&&e.push(this.visit(t.raw_expr,s));break;case "CONSTR_CHECK":if(s.isPretty()&&!s.isColumnConstraint?e.push(`
24
- `+s.indent("CHECK")):e.push("CHECK"),t.raw_expr)if(s.isPretty()){let i=this.visit(t.raw_expr,s);i.includes(`
25
- `)?e.push(`(
26
- `+s.indent(i)+`
27
- )`):e.push(`(${i})`);}else e.push(s.parens(this.visit(t.raw_expr,s)));t.skip_validation&&e.push("NOT VALID"),t.is_no_inherit&&!s.isDomainConstraint&&e.push("NO INHERIT");break;case "CONSTR_GENERATED":e.push("GENERATED"),t.generated_when==="a"?e.push("ALWAYS"):t.generated_when==="s"&&e.push("BY DEFAULT"),e.push("AS"),t.raw_expr&&e.push(s.parens(this.visit(t.raw_expr,s))),e.push("STORED");break;case "CONSTR_IDENTITY":if(e.push("GENERATED"),t.generated_when==="a"?e.push("ALWAYS"):(t.generated_when==="d"||t.generated_when==="s")&&e.push("BY DEFAULT"),e.push("AS IDENTITY"),t.options&&t.options.length>0){let i=p.unwrapList(t.options).map(r=>{if(r.DefElem){let n=r.DefElem;if(n.defname==="sequence_name")return n.arg&&n.arg.List?`SEQUENCE NAME ${p.unwrapList(n.arg).map(l=>this.visit(l,s)).join(".")}`:"SEQUENCE NAME";if(n.defname==="start")return `START WITH ${n.arg?this.visit(n.arg,s):""}`;if(n.defname==="increment")return `INCREMENT BY ${n.arg?this.visit(n.arg,s):""}`;if(n.defname==="minvalue")return n.arg?`MINVALUE ${this.visit(n.arg,s)}`:"NO MINVALUE";if(n.defname==="maxvalue")return n.arg?`MAXVALUE ${this.visit(n.arg,s)}`:"NO MAXVALUE";if(n.defname==="cache")return `CACHE ${n.arg?this.visit(n.arg,s):""}`;if(n.defname==="cycle")return (n.arg?this.visit(n.arg,s):"")==="true"?"CYCLE":"NO CYCLE";let a=n.arg?this.visit(n.arg,s):"";return `${n.defname.toUpperCase()} ${a}`}return this.visit(r,s)});if(s.isPretty()){let r=i.map(n=>s.indent(n));e.push(`(
28
- `+r.join(`
29
- `)+`
30
- )`);}else e.push(`(${i.join(" ")})`);}break;case "CONSTR_PRIMARY":if(e.push("PRIMARY KEY"),t.keys&&t.keys.length>0){let i=p.unwrapList(t.keys).map(r=>this.visit(r,s)).join(", ");e.push(`(${i})`);}t.indexname&&(e.push("USING INDEX"),e.push(t.indexname));break;case "CONSTR_UNIQUE":if(s.isPretty()&&!s.isColumnConstraint?e.push(`
31
- `+s.indent("UNIQUE")):e.push("UNIQUE"),t.nulls_not_distinct&&e.push("NULLS NOT DISTINCT"),t.keys&&t.keys.length>0){let i=p.unwrapList(t.keys).map(r=>this.visit(r,s)).join(", ");e.push(`(${i})`);}t.indexname&&(e.push("USING INDEX"),e.push(t.indexname));break;case "CONSTR_FOREIGN":if(s.isColumnConstraint)e.push("REFERENCES");else if(s.isPretty()){if(e.push(`
32
- `+s.indent("FOREIGN KEY")),t.fk_attrs&&t.fk_attrs.length>0){let i=p.unwrapList(t.fk_attrs).map(r=>this.visit(r,s)).join(", ");e.push(`(${i})`);}e.push(`
33
- `+s.indent("REFERENCES"));}else {if(e.push("FOREIGN KEY"),t.fk_attrs&&t.fk_attrs.length>0){let i=p.unwrapList(t.fk_attrs).map(r=>this.visit(r,s)).join(", ");e.push(`(${i})`);}e.push("REFERENCES");}if(t.pktable)if(s.isPretty()&&!s.isColumnConstraint){let i=e.length-1;i>=0&&e[i].includes("REFERENCES")?e[i]+=" "+this.RangeVar(t.pktable,s):e.push(this.RangeVar(t.pktable,s));}else e.push(this.RangeVar(t.pktable,s));if(t.pk_attrs&&t.pk_attrs.length>0){let i=p.unwrapList(t.pk_attrs).map(r=>this.visit(r,s)).join(", ");if(s.isPretty()&&!s.isColumnConstraint){let r=e.length-1;r>=0?e[r]+=` (${i})`:e.push(`(${i})`);}else e.push(`(${i})`);}if(t.fk_matchtype&&t.fk_matchtype!=="s"){let i="";switch(t.fk_matchtype){case "f":i="MATCH FULL";break;case "p":i="MATCH PARTIAL";break}s.isPretty()&&!s.isColumnConstraint?e.push(`
34
- `+s.indent(i)):e.push(i);}if(t.fk_upd_action&&t.fk_upd_action!=="a"){let i="ON UPDATE ";switch(t.fk_upd_action){case "r":i+="RESTRICT";break;case "c":i+="CASCADE";break;case "n":i+="SET NULL";break;case "d":i+="SET DEFAULT";break}s.isPretty()?e.push(`
35
- `+s.indent(i)):(e.push("ON UPDATE"),e.push(i.replace("ON UPDATE ","")));}if(t.fk_del_action&&t.fk_del_action!=="a"){let i="ON DELETE ";switch(t.fk_del_action){case "r":i+="RESTRICT";break;case "c":i+="CASCADE";break;case "n":i+="SET NULL";break;case "d":i+="SET DEFAULT";break}s.isPretty()?e.push(`
36
- `+s.indent(i)):(e.push("ON DELETE"),e.push(i.replace("ON DELETE ","")));}t.skip_validation&&!s.isDomainConstraint&&(s.isPretty()&&!s.isColumnConstraint?e.push(`
37
- `+s.indent("NOT VALID")):e.push("NOT VALID"));break;case "CONSTR_ATTR_DEFERRABLE":e.push("DEFERRABLE");break;case "CONSTR_ATTR_NOT_DEFERRABLE":e.push("NOT DEFERRABLE");break;case "CONSTR_ATTR_DEFERRED":e.push("INITIALLY DEFERRED");break;case "CONSTR_ATTR_IMMEDIATE":e.push("INITIALLY IMMEDIATE");break;case "CONSTR_EXCLUSION":if(e.push("EXCLUDE"),t.access_method&&(e.push("USING"),e.push(t.access_method)),t.exclusions&&t.exclusions.length>0){let i=p.unwrapList(t.exclusions).map(r=>{if(this.getNodeType(r)==="List"){let n=p.unwrapList(r);if(n.length>=2){let a=this.visit(n[0],s),u=n[1],l="";if(this.getNodeType(u)==="List"){let o=p.unwrapList(u);o.length>0&&o[0].String&&(l=o[0].String.sval);}else u.String?l=u.String.sval:l=this.visit(u,s);return `${a} WITH ${l}`}}return this.visit(r,s)});e.push(`(${i.join(", ")})`);}t.where_clause&&(e.push("WHERE"),e.push(s.parens(this.visit(t.where_clause,s))));break}if((t.contype==="CONSTR_PRIMARY"||t.contype==="CONSTR_UNIQUE"||t.contype==="CONSTR_FOREIGN")&&(t.deferrable?s.isPretty()&&t.contype==="CONSTR_FOREIGN"?(e.push(`
38
- `+s.indent("DEFERRABLE")),t.initdeferred===true?e.push(`
39
- `+s.indent("INITIALLY DEFERRED")):t.initdeferred===false&&e.push(`
40
- `+s.indent("INITIALLY IMMEDIATE"))):(e.push("DEFERRABLE"),t.initdeferred===true?e.push("INITIALLY DEFERRED"):t.initdeferred===false&&e.push("INITIALLY IMMEDIATE")):t.deferrable===false&&(s.isPretty()&&t.contype==="CONSTR_FOREIGN"?e.push(`
41
- `+s.indent("NOT DEFERRABLE")):e.push("NOT DEFERRABLE"))),s.isPretty()&&t.contype==="CONSTR_FOREIGN"){let i="";for(let r=0;r<e.length;r++)e[r].startsWith(`
42
- `)||r>0&&!e[r-1].startsWith(`
43
- `)&&(i+=" "),i+=e[r];return i}return e.join(" ")}SubLink(t,s){let e=s.parens(this.visit(t.subselect,s));switch(t.subLinkType){case "ANY_SUBLINK":if(t.testexpr&&t.operName){let i=this.visit(t.testexpr,s),r=this.deparseOperatorName(t.operName,s);return `${i} ${r} ANY ${e}`}else if(t.testexpr)return `${this.visit(t.testexpr,s)} IN ${e}`;return e;case "ALL_SUBLINK":if(t.testexpr&&t.operName){let i=this.visit(t.testexpr,s),r=this.deparseOperatorName(t.operName,s);return `${i} ${r} ALL ${e}`}return e;case "EXISTS_SUBLINK":return `EXISTS ${e}`;case "ARRAY_SUBLINK":return `ARRAY${e}`;default:return e}}CaseWhen(t,s){let e=["WHEN"];return t.expr&&e.push(this.visit(t.expr,s)),e.push("THEN"),t.result&&e.push(this.visit(t.result,s)),e.join(" ")}WindowDef(t,s){let e=[];t.name&&e.push(t.name);let i=[];if(t.partitionClause){let n=p.unwrapList(t.partitionClause).map(a=>this.visit(a,s));i.push(`PARTITION BY ${n.join(", ")}`);}if(t.orderClause){let n=p.unwrapList(t.orderClause).map(a=>this.visit(a,s));i.push(`ORDER BY ${n.join(", ")}`);}if(t.frameOptions&&t.frameOptions!==1058){let r=this.formatWindowFrame(t,s.spawn("WindowDef"));r&&i.push(r);}return i.length>0?(t.name&&e.push("AS"),e.push(`(${i.join(" ")})`)):t.name?(e.push("AS"),e.push("()")):e.length===0&&e.push("()"),e.join(" ")}formatWindowFrame(t,s){if(!t.frameOptions)return null;let e=t.frameOptions,r=e&-229377,n=[];if(e&1&&(e&2?n.push("RANGE"):e&4?n.push("ROWS"):e&8&&n.push("GROUPS")),n.length===0)return null;let a=[];if(r===789)a.push("CURRENT ROW"),a.push("AND UNBOUNDED FOLLOWING");else if(r===1077)a.push("UNBOUNDED PRECEDING"),a.push("AND CURRENT ROW");else if(r===18453)t.startOffset&&t.endOffset&&(a.push(`${this.visit(t.startOffset,s)} PRECEDING`),a.push(`AND ${this.visit(t.endOffset,s)} FOLLOWING`));else if(r===1557)a.push("CURRENT ROW"),a.push("AND CURRENT ROW");else if(r===16917)a.push("CURRENT ROW"),t.endOffset&&a.push(`AND ${this.visit(t.endOffset,s)} FOLLOWING`);else {if(r===1058)return null;t.startOffset?e&1024?a.push(`${this.visit(t.startOffset,s)} PRECEDING`):e&2048?a.push(`${this.visit(t.startOffset,s)} FOLLOWING`):a.push(`${this.visit(t.startOffset,s)} PRECEDING`):e&16?a.push("UNBOUNDED PRECEDING"):e&32&&a.push("CURRENT ROW"),t.endOffset?a.length>0&&(e&4096?a.push(`AND ${this.visit(t.endOffset,s)} PRECEDING`):e&8192?a.push(`AND ${this.visit(t.endOffset,s)} FOLLOWING`):a.push(`AND ${this.visit(t.endOffset,s)} FOLLOWING`)):e&128?a.length>0&&a.push("AND UNBOUNDED FOLLOWING"):(a.length>0&&a.push("AND CURRENT ROW"));}return a.length>0&&(n.push("BETWEEN"),n.push(a.join(" "))),e&32768?n.push("EXCLUDE CURRENT ROW"):e&65536?n.push("EXCLUDE GROUP"):e&131072&&n.push("EXCLUDE TIES"),n.join(" ")}SortBy(t,s){let e=[];if(t.node&&e.push(this.visit(t.node,s)),t.sortby_dir==="SORTBY_USING"&&t.useOp){e.push("USING");let i=p.unwrapList(t.useOp);e.push(i.map(r=>r.String&&r.String.sval?r.String.sval:this.visit(r,s)).join("."));}else t.sortby_dir==="SORTBY_ASC"?e.push("ASC"):t.sortby_dir==="SORTBY_DESC"&&e.push("DESC");return t.sortby_nulls==="SORTBY_NULLS_FIRST"?e.push("NULLS FIRST"):t.sortby_nulls==="SORTBY_NULLS_LAST"&&e.push("NULLS LAST"),e.join(" ")}GroupingSet(t,s){switch(t.kind){case "GROUPING_SET_EMPTY":return "()";case "GROUPING_SET_SIMPLE":return "";case "GROUPING_SET_ROLLUP":return `ROLLUP (${p.unwrapList(t.content).map(l=>this.visit(l,s)).join(", ")})`;case "GROUPING_SET_CUBE":return `CUBE (${p.unwrapList(t.content).map(l=>this.visit(l,s)).join(", ")})`;case "GROUPING_SET_SETS":return `GROUPING SETS (${p.unwrapList(t.content).map(l=>this.visit(l,s)).join(", ")})`;default:return ""}}CommonTableExpr(t,s){let e=[];if(t.ctename&&e.push(t.ctename),t.aliascolnames){let r=p.unwrapList(t.aliascolnames).map(n=>this.visit(n,s));e[e.length-1]+=s.parens(r.join(", "));}return e.push("AS"),t.ctematerialized==="CTEMaterializeNever"?e.push("NOT MATERIALIZED"):t.ctematerialized==="CTEMaterializeAlways"&&e.push("MATERIALIZED"),t.ctequery&&e.push(s.parens(this.visit(t.ctequery,s))),e.join(" ")}ParamRef(t,s){return `$${t.number}`}LockingClause(t,s){let e=[];switch(t.strength){case "LCS_FORUPDATE":e.push("FOR UPDATE");break;case "LCS_FORSHARE":e.push("FOR SHARE");break;case "LCS_FORKEYSHARE":e.push("FOR KEY SHARE");break;case "LCS_FORNOKEYUPDATE":e.push("FOR NO KEY UPDATE");break;default:throw new Error(`Unsupported locking strength: ${t.strength}`)}if(t.lockedRels&&t.lockedRels.length>0){e.push("OF");let i=p.unwrapList(t.lockedRels).map(r=>this.visit(r,s)).join(", ");e.push(i);}return t.waitPolicy==="LockWaitSkip"?e.push("SKIP LOCKED"):t.waitPolicy==="LockWaitError"&&e.push("NOWAIT"),e.join(" ")}MinMaxExpr(t,s){let i=p.unwrapList(t.args).map(r=>this.visit(r,s));return t.op==="IS_GREATEST"?`GREATEST(${i.join(", ")})`:`LEAST(${i.join(", ")})`}RowExpr(t,s){let i=p.unwrapList(t.args).map(r=>this.visit(r,s));return t.row_format==="COERCE_IMPLICIT_CAST"?`(${i.join(", ")})`:`ROW(${i.join(", ")})`}OpExpr(t,s){let e=p.unwrapList(t.args);if(e.length===2){let i=this.visit(e[0],s),r=this.visit(e[1],s),n=this.getOperatorName(t.opno);return `${i} ${n} ${r}`}else if(e.length===1){let i=this.visit(e[0],s);return `${this.getOperatorName(t.opno)} ${i}`}throw new Error(`Unsupported OpExpr with ${e.length} arguments`)}DistinctExpr(t,s){let e=p.unwrapList(t.args);if(e.length===2){let i=s.spawn("DistinctExpr",{isStringLiteral:true}),r=this.visit(e[0],i),n=this.visit(e[1],i);return `${r} IS DISTINCT FROM ${n}`}throw new Error(`DistinctExpr requires exactly 2 arguments, got ${e.length}`)}NullIfExpr(t,s){let e=p.unwrapList(t.args);if(e.length===2){let i=s.spawn("NullIfExpr",{isStringLiteral:true}),r=this.visit(e[0],i),n=this.visit(e[1],i);return `NULLIF(${r}, ${n})`}throw new Error(`NullIfExpr requires exactly 2 arguments, got ${e.length}`)}ScalarArrayOpExpr(t,s){let e=p.unwrapList(t.args);if(e.length===2){let i=this.visit(e[0],s),r=this.visit(e[1],s),n=t.useOr?"ANY":"ALL",a=this.getOperatorName(t.opno);return `${i} ${a} ${n}(${r})`}throw new Error(`ScalarArrayOpExpr requires exactly 2 arguments, got ${e.length}`)}Aggref(t,s){let e=this.getAggFunctionName(t.aggfnoid),i=e+"(",r=t.aggdistinct&&t.aggdistinct.length>0;if(t.args&&t.args.length>0){let a=p.unwrapList(t.args).map(u=>this.visit(u,s));r?i+="DISTINCT "+a.join(", "):i+=a.join(", ");}else e.toUpperCase()==="COUNT"&&(r?i+="DISTINCT *":i+="*");if(i+=")",t.aggorder&&t.aggorder.length>0){i+=" ORDER BY ";let a=p.unwrapList(t.aggorder).map(u=>this.visit(u,s));i+=a.join(", ");}return i}WindowFunc(t,s){let i=this.getWindowFunctionName(t.winfnoid)+"(";if(t.args&&t.args.length>0){let n=p.unwrapList(t.args).map(a=>this.visit(a,s));i+=n.join(", ");}return i+=") OVER (",t.winref&&typeof t.winref=="object"?i+=this.visit(t.winref,s):t.winref&&(i+="ORDER BY created_at ASC"),i+=")",i}FieldSelect(t,s){let e=[];return t.arg&&e.push(this.visit(t.arg,s)),t.fieldnum!==void 0&&e.push(`.field_${t.fieldnum}`),e.join("")}RelabelType(t,s){if(t.arg){let e=s.spawn("RelabelType",{isStringLiteral:true});return this.visit(t.arg,e)}return ""}CoerceViaIO(t,s){return t.arg?this.visit(t.arg,s):""}ArrayCoerceExpr(t,s){return t.arg?this.visit(t.arg,s):""}ConvertRowtypeExpr(t,s){if(t.arg){let e=s.spawn("ConvertRowtypeExpr",{isStringLiteral:true});return this.visit(t.arg,e)}return ""}NamedArgExpr(t,s){let e=[];return t.name&&(e.push(t.name),e.push("=>")),t.arg&&e.push(this.visit(t.arg,s)),e.join(" ")}ViewStmt(t,s){let e=[];if(e.push("CREATE"),t.replace&&e.push("OR REPLACE"),t.view&&t.view.relpersistence==="t"&&e.push("TEMPORARY"),e.push("VIEW"),t.view&&e.push(this.RangeVar(t.view,s)),t.aliases&&t.aliases.length>0){let i=p.unwrapList(t.aliases).map(r=>this.visit(r,s));e.push(s.parens(i.join(", ")));}if(t.options&&t.options.length>0){let i=s.spawn("ViewStmt"),r=p.unwrapList(t.options).map(n=>this.visit(n,i));e.push(`WITH (${r.join(", ")})`);}if(e.push("AS"),t.query&&e.push(this.visit(t.query,s)),t.withCheckOption)switch(t.withCheckOption){case "CASCADED_CHECK_OPTION":e.push("WITH CASCADED CHECK OPTION");break;case "LOCAL_CHECK_OPTION":e.push("WITH LOCAL CHECK OPTION");break}return e.join(" ")}IndexStmt(t,s){let e=[];if(e.push("CREATE"),t.unique&&e.push("UNIQUE"),e.push("INDEX"),t.concurrent&&e.push("CONCURRENTLY"),t.if_not_exists&&e.push("IF NOT EXISTS"),t.idxname&&e.push(h.quoteIdentifier(t.idxname)),e.push("ON"),t.relation&&e.push(this.RangeVar(t.relation,s)),t.accessMethod&&t.accessMethod!=="btree"&&(e.push("USING"),e.push(t.accessMethod)),t.indexParams&&t.indexParams.length>0){let i=p.unwrapList(t.indexParams).map(r=>this.visit(r,s));e.push(s.parens(i.join(", ")));}if(t.indexIncludingParams&&t.indexIncludingParams.length>0){let i=p.unwrapList(t.indexIncludingParams).map(r=>this.visit(r,s));e.push("INCLUDE"),e.push(s.parens(i.join(", ")));}if(t.whereClause&&(e.push("WHERE"),e.push(this.visit(t.whereClause,s))),t.options&&t.options.length>0){let i=s.spawn("IndexStmt"),r=p.unwrapList(t.options).map(n=>this.visit(n,i));e.push("WITH"),e.push(s.parens(r.join(", ")));}return t.nulls_not_distinct&&e.push("NULLS NOT DISTINCT"),t.tableSpace&&(e.push("TABLESPACE"),e.push(h.quoteIdentifier(t.tableSpace))),e.join(" ")}IndexElem(t,s){let e=[];if(t.name?e.push(h.quoteIdentifier(t.name)):t.expr&&e.push(s.parens(this.visit(t.expr,s))),t.collation&&t.collation.length>0){let i=p.unwrapList(t.collation).map(r=>this.visit(r,s));e.push("COLLATE"),e.push(i.join("."));}if(t.opclass&&t.opclass.length>0){let r=p.unwrapList(t.opclass).map(n=>this.visit(n,s)).join(".");if(t.opclassopts&&t.opclassopts.length>0){let n=p.unwrapList(t.opclassopts).map(a=>{if(a.DefElem&&a.DefElem.arg&&this.getNodeType(a.DefElem.arg)==="String"){let u=this.getNodeData(a.DefElem.arg);return `${a.DefElem.defname}='${u.sval}'`}return this.visit(a,s.spawn("IndexElem"))});r+=`(${n.join(", ")})`;}e.push(r);}if(t.ordering)switch(t.ordering){case "SORTBY_ASC":e.push("ASC");break;case "SORTBY_DESC":e.push("DESC");break}if(t.nulls_ordering)switch(t.nulls_ordering){case "SORTBY_NULLS_FIRST":e.push("NULLS FIRST");break;case "SORTBY_NULLS_LAST":e.push("NULLS LAST");break}return e.join(" ")}PartitionElem(t,s){let e=[];if(t.name?e.push(h.quoteIdentifier(t.name)):t.expr&&e.push(s.parens(this.visit(t.expr,s))),t.collation&&t.collation.length>0){let i=p.unwrapList(t.collation).map(r=>this.visit(r,s));e.push("COLLATE"),e.push(i.join("."));}if(t.opclass&&t.opclass.length>0){let i=p.unwrapList(t.opclass).map(r=>this.visit(r,s));e.push(i.join("."));}return e.join(" ")}PartitionCmd(t,s){let e=[];if(t.concurrent&&e.push("CONCURRENTLY"),t.name&&e.push(this.visit(t.name,s)),t.bound)if(t.bound.strategy==="l"&&t.bound.listdatums){e.push("FOR VALUES IN");let i=p.unwrapList(t.bound.listdatums).map(r=>this.visit(r,s)).join(", ");e.push(`(${i})`);}else if(t.bound.strategy==="r"&&(t.bound.lowerdatums||t.bound.upperdatums)){if(e.push("FOR VALUES FROM"),t.bound.lowerdatums){let i=p.unwrapList(t.bound.lowerdatums).map(r=>this.visit(r,s)).join(", ");e.push(`(${i})`);}if(t.bound.upperdatums){e.push("TO");let i=p.unwrapList(t.bound.upperdatums).map(r=>this.visit(r,s)).join(", ");e.push(`(${i})`);}}else t.bound.strategy==="h"&&t.bound.modulus!==void 0&&t.bound.remainder!==void 0?(e.push("FOR VALUES WITH"),e.push(`(modulus ${t.bound.modulus}, remainder ${t.bound.remainder})`)):t.bound.is_default&&e.push("DEFAULT");return e.join(" ")}getAggFunctionName(t){return {2100:"avg",2101:"count",2102:"max",2103:"min",2104:"sum",2105:"stddev",2106:"variance",2107:"array_agg",2108:"string_agg"}[t||0]||"unknown_agg"}getWindowFunctionName(t){return {3100:"row_number",3101:"rank",3102:"dense_rank",3103:"percent_rank",3104:"cume_dist",3105:"ntile",3106:"lag",3107:"lead",3108:"first_value",3109:"last_value"}[t||0]||"unknown_window_func"}getOperatorName(t){return {96:"=",518:"<>",97:"<",521:">",523:"<=",525:">=",551:"+",552:"-",553:"*",554:"/",555:"%",484:"-",1752:"~~",1753:"!~~",1754:"~~*",1755:"!~~*",15:"=",58:"<",59:"<=",61:">",62:">="}[t||0]||"="}JoinExpr(t,s){let e=[];t.larg&&e.push(this.visit(t.larg,s));let i="";switch(t.isNatural&&(i="NATURAL "),t.jointype){case "JOIN_INNER":t.isNatural?i+="JOIN":!t.quals&&(!t.usingClause||t.usingClause.length===0)?i+="CROSS JOIN":i+="JOIN";break;case "JOIN_LEFT":i+="LEFT JOIN";break;case "JOIN_FULL":i+="FULL JOIN";break;case "JOIN_RIGHT":i+="RIGHT JOIN";break;default:i+="JOIN";}if(t.rarg){let n=this.visit(t.rarg,s);t.rarg&&"JoinExpr"in t.rarg&&!t.rarg.JoinExpr.alias&&(n=`(${n})`),s.isPretty()?e.push(s.newline()+i+" "+n):e.push(i+" "+n);}else s.isPretty()?e.push(s.newline()+i):e.push(i);if(t.usingClause&&t.usingClause.length>0){let a=p.unwrapList(t.usingClause).map(u=>this.visit(u,s));s.isPretty()?e.push(` USING (${a.join(", ")})`):e.push(`USING (${a.join(", ")})`);}else if(t.quals){let n=this.visit(t.quals,s);s.isPretty()?n.includes("AND")||n.includes("OR")||n.length>50?this.containsMultilineStringLiteral(n)?e.push(` ON ${n}`):e.push(` ON${s.newline()}${s.indent(n)}`):e.push(` ON ${n}`):e.push(`ON ${n}`);}let r;if(s.isPretty()?r=e.join(""):r=e.join(" "),t.join_using_alias&&t.join_using_alias.aliasname){let n=t.join_using_alias.aliasname;if(t.join_using_alias.colnames&&t.join_using_alias.colnames.length>0){let u=p.unwrapList(t.join_using_alias.colnames).map(l=>this.visit(l,s)).join(", ");n+=`(${u})`;}r+=` AS ${n}`;}if(t.alias&&t.alias.aliasname){let n=t.alias.aliasname;if(t.alias.colnames&&t.alias.colnames.length>0){let u=p.unwrapList(t.alias.colnames).map(l=>this.visit(l,s)).join(", ");n+=`(${u})`;}r=`(${r}) ${n}`;}return r}FromExpr(t,s){let r=p.unwrapList(t.fromlist).map(n=>this.visit(n,s)).join(", ");return t.quals&&(r+=` WHERE ${this.visit(t.quals,s)}`),r}TransactionStmt(t,s){let e=[];switch(t.kind){case "TRANS_STMT_BEGIN":e.push("BEGIN");break;case "TRANS_STMT_START":e.push("START TRANSACTION");break;case "TRANS_STMT_COMMIT":e.push("COMMIT");break;case "TRANS_STMT_ROLLBACK":e.push("ROLLBACK");break;case "TRANS_STMT_SAVEPOINT":e.push("SAVEPOINT"),t.savepoint_name&&e.push(h.quoteIdentifier(t.savepoint_name));break;case "TRANS_STMT_RELEASE":e.push("RELEASE SAVEPOINT"),t.savepoint_name&&e.push(h.quoteIdentifier(t.savepoint_name));break;case "TRANS_STMT_ROLLBACK_TO":e.push("ROLLBACK TO"),t.savepoint_name&&e.push(h.quoteIdentifier(t.savepoint_name));break;case "TRANS_STMT_PREPARE":e.push("PREPARE TRANSACTION"),t.gid&&e.push(`'${t.gid}'`);break;case "TRANS_STMT_COMMIT_PREPARED":e.push("COMMIT PREPARED"),t.gid&&e.push(`'${t.gid}'`);break;case "TRANS_STMT_ROLLBACK_PREPARED":e.push("ROLLBACK PREPARED"),t.gid&&e.push(`'${t.gid}'`);break;default:throw new Error(`Unsupported TransactionStmt kind: ${t.kind}`)}if(t.options&&t.options.length>0){let i=p.unwrapList(t.options).map(r=>{if(r.DefElem){let n=r.DefElem;if(n.defname==="transaction_read_only"){let a=false;if(n.arg){let u=this.getNodeData(n.arg);if(u.ival!==void 0)a=(typeof u.ival=="object"?u.ival.ival:u.ival)===1;else if(u.sval!==void 0){let o=(typeof u.sval=="object"?u.sval.sval:u.sval).replace(/'/g,"");a=o.toLowerCase()==="on"||o.toLowerCase()==="true";}}return a?"READ ONLY":"READ WRITE"}else if(n.defname==="transaction_isolation"){if(n.arg&&n.arg.A_Const&&n.arg.A_Const.sval)return `ISOLATION LEVEL ${n.arg.A_Const.sval.sval.toUpperCase()}`}else if(n.defname==="transaction_deferrable"){let a=false;if(n.arg){let u=this.getNodeData(n.arg);if(u.ival!==void 0)a=(typeof u.ival=="object"?u.ival.ival:u.ival)===1;else if(u.sval!==void 0){let o=(typeof u.sval=="object"?u.sval.sval:u.sval).replace(/'/g,"");a=o.toLowerCase()==="on"||o.toLowerCase()==="true";}}return a?"DEFERRABLE":"NOT DEFERRABLE"}}return this.visit(r,s)}).filter(Boolean);i.length>0&&e.push(i.join(", "));}return e.join(" ")}VariableSetStmt(t,s){switch(t.kind){case "VAR_SET_VALUE":let e=t.is_local?"LOCAL ":"",i=t.args?p.unwrapList(t.args).map(l=>{let o=this.getNodeData(l);if(o.sval!==void 0){let f=typeof o.sval=="object"?o.sval.sval:o.sval;return f===""||f.includes(" ")||f.includes("-")||/[A-Z]/.test(f)||/^\d/.test(f)||f.includes(".")||f.includes("$")||f.toLowerCase()==="all"||/^[+-]\d/.test(f)?`'${f}'`:f}return this.visit(l,s)}).join(", "):"",r=h.quoteIdentifier(t.name);return !t.args||t.args.length===0?`SET ${e}${r}`:`SET ${e}${r} TO ${i}`;case "VAR_SET_DEFAULT":return `SET ${h.quoteIdentifier(t.name)} TO DEFAULT`;case "VAR_SET_CURRENT":return `SET ${h.quoteIdentifier(t.name)} FROM CURRENT`;case "VAR_SET_MULTI":if(t.name==="TRANSACTION"||t.name==="SESSION CHARACTERISTICS"){let l=[];if(t.args){let o=p.unwrapList(t.args);for(let f of o)if(f.DefElem){let m=f.DefElem;if(m.defname==="transaction_isolation"){let T=m.arg?this.visit(m.arg,s):"";l.push(`ISOLATION LEVEL ${T.replace(/'/g,"").toUpperCase()}`);}else if(m.defname==="transaction_read_only"){let T=false;if(m.arg){let E=this.getNodeData(m.arg);if(E.ival!==void 0)T=(typeof E.ival=="object"?E.ival.ival:E.ival)===1;else if(E.sval!==void 0){let A=(typeof E.sval=="object"?E.sval.sval:E.sval).replace(/'/g,"");T=A.toLowerCase()==="on"||A.toLowerCase()==="true";}}l.push(T?"READ ONLY":"READ WRITE");}else if(m.defname==="transaction_deferrable"){let T=false;if(m.arg){let E=this.getNodeData(m.arg);if(E.ival!==void 0)T=(typeof E.ival=="object"?E.ival.ival:E.ival)===1;else if(E.sval!==void 0){let A=(typeof E.sval=="object"?E.sval.sval:E.sval).replace(/'/g,"");T=A.toLowerCase()==="on"||A.toLowerCase()==="true";}}l.push(T?"DEFERRABLE":"NOT DEFERRABLE");}}}return t.name==="SESSION CHARACTERISTICS"?`SET SESSION CHARACTERISTICS AS TRANSACTION ${l.join(", ")}`:`SET TRANSACTION ${l.join(", ")}`}else return `SET ${t.args?p.unwrapList(t.args).map(o=>o.VariableSetStmt?this.VariableSetStmt(o.VariableSetStmt,s):this.visit(o,s)).join(", "):""}`;case "VAR_RESET":return `RESET ${h.quoteIdentifier(t.name)}`;case "VAR_RESET_ALL":return "RESET ALL";default:throw new Error(`Unsupported VariableSetStmt kind: ${t.kind}`)}}VariableShowStmt(t,s){return t.name==="ALL"?"SHOW ALL":`SHOW ${t.name}`}CreateSchemaStmt(t,s){let e=["CREATE SCHEMA"];if(t.if_not_exists&&e.push("IF NOT EXISTS"),t.schemaname&&e.push(h.quoteIdentifier(t.schemaname)),t.authrole&&(e.push("AUTHORIZATION"),e.push(this.RoleSpec(t.authrole,s))),t.schemaElts&&t.schemaElts.length>0){let i=p.unwrapList(t.schemaElts).map(r=>this.visit(r,s)).join(" ");e.push(i);}return e.join(" ")}RoleSpec(t,s){if(t.rolename)return this.quoteIfNeeded(t.rolename);switch(t.roletype){case "ROLESPEC_PUBLIC":return "PUBLIC";case "ROLESPEC_CURRENT_USER":return "CURRENT_USER";case "ROLESPEC_SESSION_USER":return "SESSION_USER";case "ROLESPEC_CURRENT_ROLE":return "CURRENT_ROLE";default:return "PUBLIC"}}roletype(t,s){return t.rolename?t.rolename:""}DropStmt(t,s){let e=["DROP"];if(t.removeType)switch(t.removeType){case "OBJECT_TABLE":e.push("TABLE");break;case "OBJECT_VIEW":e.push("VIEW");break;case "OBJECT_INDEX":e.push("INDEX");break;case "OBJECT_SEQUENCE":e.push("SEQUENCE");break;case "OBJECT_SCHEMA":e.push("SCHEMA");break;case "OBJECT_FUNCTION":e.push("FUNCTION");break;case "OBJECT_PROCEDURE":e.push("PROCEDURE");break;case "OBJECT_DATABASE":e.push("DATABASE");break;case "OBJECT_EXTENSION":e.push("EXTENSION");break;case "OBJECT_TYPE":e.push("TYPE");break;case "OBJECT_DOMAIN":e.push("DOMAIN");break;case "OBJECT_TRIGGER":e.push("TRIGGER");break;case "OBJECT_RULE":e.push("RULE");break;case "OBJECT_POLICY":e.push("POLICY");break;case "OBJECT_ROLE":e.push("ROLE");break;case "OBJECT_TABLESPACE":e.push("TABLESPACE");break;case "OBJECT_FOREIGN_SERVER":e.push("SERVER");break;case "OBJECT_FDW":e.push("FOREIGN DATA WRAPPER");break;case "OBJECT_PUBLICATION":e.push("PUBLICATION");break;case "OBJECT_SUBSCRIPTION":e.push("SUBSCRIPTION");break;case "OBJECT_CAST":e.push("CAST");break;case "OBJECT_TRANSFORM":e.push("TRANSFORM");break;case "OBJECT_ACCESS_METHOD":e.push("ACCESS METHOD");break;case "OBJECT_OPERATOR":e.push("OPERATOR");break;case "OBJECT_FOREIGN_TABLE":e.push("FOREIGN TABLE");break;case "OBJECT_MATVIEW":e.push("MATERIALIZED VIEW");break;case "OBJECT_OPCLASS":e.push("OPERATOR CLASS");break;case "OBJECT_OPFAMILY":e.push("OPERATOR FAMILY");break;case "OBJECT_COLLATION":e.push("COLLATION");break;case "OBJECT_CONVERSION":e.push("CONVERSION");break;case "OBJECT_LANGUAGE":e.push("LANGUAGE");break;case "OBJECT_LARGEOBJECT":e.push("LARGE OBJECT");break;case "OBJECT_AGGREGATE":e.push("AGGREGATE");break;case "OBJECT_STATISTIC_EXT":e.push("STATISTICS");break;case "OBJECT_EVENT_TRIGGER":e.push("EVENT TRIGGER");break;case "OBJECT_AMOP":e.push("OPERATOR CLASS");break;case "OBJECT_AMPROC":e.push("OPERATOR CLASS");break;case "OBJECT_ATTRIBUTE":e.push("ATTRIBUTE");break;case "OBJECT_DEFAULT":e.push("DEFAULT");break;case "OBJECT_DEFACL":e.push("DEFAULT PRIVILEGES");break;case "OBJECT_PARAMETER_ACL":e.push("PARAMETER");break;case "OBJECT_PUBLICATION_NAMESPACE":e.push("PUBLICATION");break;case "OBJECT_PUBLICATION_REL":e.push("PUBLICATION");break;case "OBJECT_ROUTINE":e.push("ROUTINE");break;case "OBJECT_TABCONSTRAINT":e.push("CONSTRAINT");break;case "OBJECT_TSCONFIGURATION":e.push("TEXT SEARCH CONFIGURATION");break;case "OBJECT_TSDICTIONARY":e.push("TEXT SEARCH DICTIONARY");break;case "OBJECT_TSPARSER":e.push("TEXT SEARCH PARSER");break;case "OBJECT_TSTEMPLATE":e.push("TEXT SEARCH TEMPLATE");break;case "OBJECT_USER_MAPPING":e.push("USER MAPPING");break;default:throw new Error(`Unsupported DROP object type: ${t.removeType}`)}if(t.concurrent&&e.push("CONCURRENTLY"),t.missing_ok&&e.push("IF EXISTS"),t.objects&&t.objects.length>0)if(t.removeType==="OBJECT_POLICY"){let i=t.objects[0];if(i&&i.List&&i.List.items){let r=i.List.items.map(n=>n.String&&n.String.sval?n.String.sval:this.visit(n,s));if(r.length===3){let[n,a,u]=r;e.push(`${u} ON ${n}.${a}`);}else if(r.length===2){let[n,a]=r;e.push(`${a} ON ${n}`);}else e.push(r.join(", "));}}else if(t.removeType==="OBJECT_CAST"){let i=t.objects.map(r=>{if(r&&r.List&&r.List.items){let a=r.List.items.map(u=>this.visit(u,s)).filter(u=>u&&u.trim());if(a.length===2){let[u,l]=a;return `(${u} AS ${l})`}return a.join(".")}return this.visit(r,s)}).filter(r=>r&&r.trim()).join(", ");i&&e.push(i);}else if(t.removeType==="OBJECT_TRIGGER"||t.removeType==="OBJECT_RULE"){let i=t.objects.map(r=>{if(r&&r.List&&r.List.items){let a=r.List.items.map(u=>u.String&&u.String.sval?h.quoteIdentifier(u.String.sval):this.visit(u,s)).filter(u=>u&&u.trim());if(a.length===2){let[u,l]=a;return `${l} ON ${u}`}else if(a.length===3){let[u,l,o]=a;return `${o} ON ${u}.${l}`}return a.join(".")}return this.visit(r,s)}).filter(r=>r&&r.trim()).join(", ");i&&e.push(i);}else if(t.removeType==="OBJECT_OPFAMILY"||t.removeType==="OBJECT_OPCLASS"){let i=t.objects.map(r=>{if(r&&r.List&&r.List.items){let a=r.List.items.map(u=>u.String&&u.String.sval?u.String.sval:this.visit(u,s)).filter(u=>u&&u.trim());if(a.length===2){let u=a[0],l=a[1];return `${h.quoteIdentifier(l)} USING ${u}`}else if(a.length===3){let u=a[0],l=a[1],o=a[2];return `${h.quoteQualifiedIdentifier(l,o)} USING ${u}`}return a.join(".")}return this.visit(r,s)}).filter(r=>r&&r.trim()).join(", ");i&&e.push(i);}else if(t.removeType==="OBJECT_TRANSFORM"){let i=t.objects.map(r=>{if(r&&r.List&&r.List.items){let a=r.List.items.map(u=>u.String&&u.String.sval?u.String.sval:this.visit(u,s)).filter(u=>u&&u.trim());if(a.length===2){let[u,l]=a;return `FOR ${u} LANGUAGE ${l}`}return a.join(".")}return this.visit(r,s)}).filter(r=>r&&r.trim()).join(", ");i&&e.push(i);}else {let i=t.objects.map(r=>{if(Array.isArray(r))return r.map(l=>this.visit(l,s)).filter(l=>l&&l.trim()).join(".");if(r&&r.List&&r.List.items)return r.List.items.map(l=>l.String&&l.String.sval?h.quoteIdentifier(l.String.sval):this.visit(l,s)).filter(l=>l&&l.trim()).join(".");let n=s.spawn("DropStmt",{objtype:t.removeType});return this.visit(r,n)}).filter(r=>r&&r.trim()).join(", ");i&&e.push(i);}return t.behavior==="DROP_CASCADE"&&e.push("CASCADE"),e.join(" ")}TruncateStmt(t,s){let e=["TRUNCATE"];if(t.relations&&t.relations.length>0){let i=t.relations.map(r=>this.visit(r,s)).join(", ");e.push(i);}return t.restart_seqs&&e.push("RESTART IDENTITY"),t.behavior==="DROP_CASCADE"&&e.push("CASCADE"),e.join(" ")}ReturnStmt(t,s){let e=["RETURN"];if(t.returnval){let i=this.visit(t.returnval,s);e.push(i);}return e.join(" ")}PLAssignStmt(t,s){let e=[];if(t.name){let i=h.quoteIdentifier(t.name);if(t.indirection&&t.indirection.length>0){let r=t.indirection.map(n=>this.visit(n,s)).join("");i+=r;}e.push(i);}if(e.push(":="),t.val){let i=t.val;if(i.targetList){e.push("SELECT");let r=this.targetList(i.targetList,s);e.push(r);}else {let r=this.visit(t.val,s);e.push(r);}}return e.join(" ")}CopyStmt(t,s){let e=["COPY"];if(t.relation){let i=this.RangeVar(t.relation,s);e.push(i);}else if(t.query){let i=this.visit(t.query,s);e.push(`(${i})`);}if(t.attlist&&t.attlist.length>0){let i=p.unwrapList(t.attlist).map(r=>this.visit(r,s)).join(", ");e.push(`(${i})`);}if(t.is_from?e.push("FROM"):e.push("TO"),t.is_program&&e.push("PROGRAM"),t.filename?e.push(`'${t.filename}'`):e.push("STDIN"),t.options&&t.options.length>0){e.push("WITH");let i=p.unwrapList(t.options).map(r=>this.visit(r,s.spawn("CopyStmt"))).join(", ");e.push(`(${i})`);}if(t.whereClause){e.push("WHERE");let i=this.visit(t.whereClause,s);e.push(i);}return e.join(" ")}AlterTableStmt(t,s){let e=["ALTER"];if(t.objtype)switch(t.objtype){case "OBJECT_TABLE":e.push("TABLE");break;case "OBJECT_INDEX":e.push("INDEX");break;case "OBJECT_SEQUENCE":e.push("SEQUENCE");break;case "OBJECT_VIEW":e.push("VIEW");break;case "OBJECT_MATVIEW":e.push("MATERIALIZED VIEW");break;case "OBJECT_FOREIGN_TABLE":e.push("FOREIGN TABLE");break;case "OBJECT_TYPE":e.push("TYPE");break;default:e.push("TABLE");}else e.push("TABLE");t.missing_ok&&e.push("IF EXISTS");let i=s.spawn("AlterTableStmt",{objtype:t.objtype});if(t.relation){let r=this.RangeVar(t.relation,i);e.push(r);}if(t.cmds&&t.cmds.length>0){let r=p.unwrapList(t.cmds);if(s.isPretty()){let n=r.map(a=>{let u=this.visit(a,i);return s.newline()+s.indent(u)}).join(",");e.push(n);}else {let n=r.map(a=>this.visit(a,i)).join(", ");e.push(n);}}return e.join(" ")}AlterTableCmd(t,s){let e=[];if(t.subtype)switch(t.subtype){case "AT_AddColumn":if(s.objtype==="OBJECT_TYPE"?e.push("ADD ATTRIBUTE"):e.push("ADD COLUMN"),t.missing_ok&&e.push("IF NOT EXISTS"),t.def){let i=this.getNodeData(t.def);if(s.isPretty()){let r=[],n=[];if(i.colname&&r.push(h.quoteIdentifier(i.colname)),i.typeName&&r.push(this.TypeName(i.typeName,s)),i.is_not_null&&n.push("NOT NULL"),i.collClause&&n.push(this.CollateClause(i.collClause,s)),i.constraints&&p.unwrapList(i.constraints).forEach(l=>{let o=s.spawn("ColumnDef",{isColumnConstraint:true}),f=this.visit(l,o);if(f.includes("REFERENCES")&&f.includes("ON DELETE")){let m=f.match(/^(.*REFERENCES[^)]*\([^)]*\))\s*(ON\s+DELETE\s+CASCADE.*)$/);m?(n.push(m[1]),n.push(m[2])):n.push(f);}else if(f==="UNIQUE"&&i.raw_default){let m="DEFAULT "+this.visit(i.raw_default,s);n.push("UNIQUE "+m);}else n.push(f);}),i.raw_default&&!i.constraints?.some(u=>this.visit(u,s.spawn("ColumnDef",{isColumnConstraint:true}))==="UNIQUE")){let u="DEFAULT "+this.visit(i.raw_default,s);n.push(u);}if(i.fdwoptions&&i.fdwoptions.length>0){n.push("OPTIONS");let u=s.spawn("ColumnDef"),l=p.unwrapList(i.fdwoptions).map(o=>this.visit(o,u));n.push(`(${l.join(", ")})`);}let a=r.join(" ");if(n.length>0){let u=n.map(l=>s.indent(l)).join(s.newline());a+=s.newline()+u;}e.push(a);}else {let r=[];if(i.colname&&r.push(h.quoteIdentifier(i.colname)),i.typeName&&r.push(this.TypeName(i.typeName,s)),i.collClause&&r.push(this.CollateClause(i.collClause,s)),i.fdwoptions&&i.fdwoptions.length>0){r.push("OPTIONS");let n=s.spawn("ColumnDef"),a=p.unwrapList(i.fdwoptions).map(u=>this.visit(u,n));r.push(`(${a.join(", ")})`);}if(i.constraints){let a=p.unwrapList(i.constraints).map(u=>{let l=s.spawn("ColumnDef",{isColumnConstraint:true});return this.visit(u,l)});r.push(...a);}i.raw_default&&(r.push("DEFAULT"),r.push(this.visit(i.raw_default,s))),i.is_not_null&&r.push("NOT NULL"),e.push(r.join(" "));}}t.behavior==="DROP_CASCADE"&&e.push("CASCADE");break;case "AT_DropColumn":t.missing_ok?s.objtype==="OBJECT_TYPE"?e.push("DROP ATTRIBUTE IF EXISTS"):e.push("DROP COLUMN IF EXISTS"):s.objtype==="OBJECT_TYPE"?e.push("DROP ATTRIBUTE"):e.push("DROP COLUMN"),t.name&&e.push(h.quoteIdentifier(t.name)),t.behavior==="DROP_CASCADE"?e.push("CASCADE"):t.behavior==="DROP_RESTRICT"&&e.push("RESTRICT");break;case "AT_AlterColumnType":if(s.objtype==="OBJECT_TYPE"?e.push("ALTER ATTRIBUTE"):e.push("ALTER COLUMN"),t.name&&e.push(h.quoteIdentifier(t.name)),e.push("TYPE"),t.def){let i=this.getNodeData(t.def);if(i&&i.typeName)e.push(this.TypeName(i.typeName,s)),i.raw_default&&(e.push("USING"),e.push(this.visit(i.raw_default,s)));else {let r=this.visit(t.def,s);e.push(r);}}t.behavior==="DROP_CASCADE"&&e.push("CASCADE");break;case "AT_SetTableSpace":e.push("SET TABLESPACE"),t.name&&e.push(h.quoteIdentifier(t.name));break;case "AT_AddConstraint":if(e.push("ADD"),t.def){let i=this.visit(t.def,s);e.push(i);}break;case "AT_DropConstraint":t.missing_ok?e.push("DROP CONSTRAINT IF EXISTS"):e.push("DROP CONSTRAINT"),t.name&&e.push(h.quoteIdentifier(t.name)),t.behavior==="DROP_CASCADE"?e.push("CASCADE"):t.behavior==="DROP_RESTRICT"&&e.push("RESTRICT");break;case "AT_SetRelOptions":if(e.push("SET"),t.def){let i=s.spawn("AlterTableCmd",{subtype:"AT_SetRelOptions"}),r=p.unwrapList(t.def).map(n=>this.visit(n,i)).join(", ");e.push(`(${r})`);}else e.push("()");break;case "AT_ResetRelOptions":if(e.push("RESET"),t.def){let i=s.spawn("AlterTableCmd",{subtype:"AT_ResetRelOptions"}),r=p.unwrapList(t.def).map(n=>this.visit(n,i)).join(", ");e.push(`(${r})`);}else e.push("()");break;case "AT_ColumnDefault":e.push("ALTER COLUMN"),t.name&&e.push(h.quoteIdentifier(t.name)),t.def?(e.push("SET DEFAULT"),e.push(this.visit(t.def,s))):e.push("DROP DEFAULT");break;case "AT_SetStorage":if(e.push("ALTER COLUMN"),t.name&&e.push(h.quoteIdentifier(t.name)),e.push("SET STORAGE"),t.def){let i=this.visit(t.def,s);e.push(i);}break;case "AT_ClusterOn":e.push("CLUSTER ON"),t.name&&e.push(h.quoteIdentifier(t.name));break;case "AT_DropCluster":e.push("SET WITHOUT CLUSTER");break;case "AT_ChangeOwner":e.push("OWNER TO"),t.newowner&&e.push(this.RoleSpec(t.newowner,s));break;case "AT_AddInherit":e.push("INHERIT"),t.def&&e.push(this.visit(t.def,s));break;case "AT_DropInherit":e.push("NO INHERIT"),t.def&&e.push(this.visit(t.def,s));break;case "AT_SetNotNull":e.push("ALTER COLUMN"),t.name&&e.push(h.quoteIdentifier(t.name)),e.push("SET NOT NULL");break;case "AT_DropNotNull":e.push("ALTER COLUMN"),t.name&&e.push(h.quoteIdentifier(t.name)),e.push("DROP NOT NULL");break;case "AT_SetStatistics":e.push("ALTER COLUMN"),t.name?e.push(h.quoteIdentifier(t.name)):t.num!==void 0&&t.num!==null&&e.push(t.num.toString()),e.push("SET STATISTICS"),t.def&&e.push(this.visit(t.def,s));break;case "AT_SetOptions":if(e.push("ALTER COLUMN"),t.name&&e.push(h.quoteIdentifier(t.name)),e.push("SET"),t.def){let i=s.spawn("AlterTableCmd",{subtype:"AT_SetOptions"}),r=p.unwrapList(t.def).map(n=>this.visit(n,i)).join(", ");e.push(`(${r})`);}else e.push("()");break;case "AT_ResetOptions":if(e.push("ALTER COLUMN"),t.name&&e.push(h.quoteIdentifier(t.name)),e.push("RESET"),t.def){let i=s.spawn("AlterTableCmd",{subtype:"AT_ResetOptions"}),r=p.unwrapList(t.def).map(n=>this.visit(n,i)).join(", ");e.push(`(${r})`);}else e.push("()");break;case "AT_SetCompression":e.push("ALTER COLUMN"),t.name&&e.push(h.quoteIdentifier(t.name)),e.push("SET COMPRESSION"),t.def&&e.push(this.visit(t.def,s));break;case "AT_ValidateConstraint":e.push("VALIDATE CONSTRAINT"),t.name&&e.push(h.quoteIdentifier(t.name));break;case "AT_EnableTrig":e.push("ENABLE TRIGGER"),t.name&&e.push(h.quoteIdentifier(t.name));break;case "AT_EnableAlwaysTrig":e.push("ENABLE ALWAYS TRIGGER"),t.name&&e.push(h.quoteIdentifier(t.name));break;case "AT_EnableReplicaTrig":e.push("ENABLE REPLICA TRIGGER"),t.name&&e.push(h.quoteIdentifier(t.name));break;case "AT_DisableTrig":e.push("DISABLE TRIGGER"),t.name&&e.push(h.quoteIdentifier(t.name));break;case "AT_EnableTrigAll":e.push("ENABLE TRIGGER ALL");break;case "AT_DisableTrigAll":e.push("DISABLE TRIGGER ALL");break;case "AT_EnableTrigUser":e.push("ENABLE TRIGGER USER");break;case "AT_DisableTrigUser":e.push("DISABLE TRIGGER USER");break;case "AT_EnableRule":e.push("ENABLE RULE"),t.name&&e.push(h.quoteIdentifier(t.name));break;case "AT_EnableAlwaysRule":e.push("ENABLE ALWAYS RULE"),t.name&&e.push(h.quoteIdentifier(t.name));break;case "AT_EnableReplicaRule":e.push("ENABLE REPLICA RULE"),t.name&&e.push(h.quoteIdentifier(t.name));break;case "AT_DisableRule":e.push("DISABLE RULE"),t.name&&e.push(h.quoteIdentifier(t.name));break;case "AT_SetAccessMethod":e.push("SET ACCESS METHOD"),t.name?e.push(h.quoteIdentifier(t.name)):e.push("DEFAULT");break;case "AT_EnableRowSecurity":e.push("ENABLE ROW LEVEL SECURITY");break;case "AT_DisableRowSecurity":e.push("DISABLE ROW LEVEL SECURITY");break;case "AT_ForceRowSecurity":e.push("FORCE ROW LEVEL SECURITY");break;case "AT_NoForceRowSecurity":e.push("NO FORCE ROW LEVEL SECURITY");break;case "AT_AttachPartition":e.push("ATTACH PARTITION"),t.def&&e.push(this.visit(t.def,s));break;case "AT_DetachPartition":e.push("DETACH PARTITION"),t.def&&e.push(this.visit(t.def,s));break;case "AT_DetachPartitionFinalize":e.push("DETACH PARTITION"),t.def&&e.push(this.visit(t.def,s)),e.push("FINALIZE");break;case "AT_SetLogged":e.push("SET LOGGED");break;case "AT_SetUnLogged":e.push("SET UNLOGGED");break;case "AT_AddColumnToView":if(e.push("ADD COLUMN"),t.def){let i=this.visit(t.def,s);e.push(i);}break;case "AT_CookedColumnDefault":e.push("ALTER COLUMN"),t.name&&e.push(h.quoteIdentifier(t.name)),t.def?(e.push("SET DEFAULT"),e.push(this.visit(t.def,s))):e.push("DROP DEFAULT");break;case "AT_SetExpression":e.push("ALTER COLUMN"),t.name&&e.push(h.quoteIdentifier(t.name)),e.push("SET EXPRESSION"),t.def&&e.push(this.visit(t.def,s));break;case "AT_DropExpression":e.push("ALTER COLUMN"),t.name&&e.push(h.quoteIdentifier(t.name)),e.push("DROP EXPRESSION");break;case "AT_CheckNotNull":e.push("ALTER COLUMN"),t.name&&e.push(h.quoteIdentifier(t.name)),e.push("SET NOT NULL");break;case "AT_AddIndex":e.push("ADD"),t.def&&e.push(this.visit(t.def,s));break;case "AT_ReAddIndex":e.push("ADD"),t.def&&e.push(this.visit(t.def,s));break;case "AT_ReAddConstraint":e.push("ADD"),t.def&&e.push(this.visit(t.def,s));break;case "AT_ReAddDomainConstraint":e.push("ADD"),t.def&&e.push(this.visit(t.def,s));break;case "AT_AlterConstraint":if(e.push("ALTER CONSTRAINT"),t.def&&this.getNodeType(t.def)==="Constraint"){let i=this.getNodeData(t.def);i.conname&&(e.push(h.quoteIdentifier(i.conname)),i.deferrable!==void 0&&e.push(i.deferrable?"DEFERRABLE":"NOT DEFERRABLE"),i.initdeferred!==void 0&&e.push(i.initdeferred?"INITIALLY DEFERRED":"INITIALLY IMMEDIATE"));}else t.name&&(e.push(h.quoteIdentifier(t.name)),t.def&&e.push(this.visit(t.def,s)));break;case "AT_AddIndexConstraint":e.push("ADD"),t.def&&e.push(this.visit(t.def,s));break;case "AT_ReAddComment":e.push("COMMENT"),t.def&&e.push(this.visit(t.def,s));break;case "AT_AlterColumnGenericOptions":if(e.push("ALTER COLUMN"),t.name&&e.push(h.quoteIdentifier(t.name)),e.push("OPTIONS"),t.def){let i=s.spawn("AlterTableCmd",{alterColumnOptions:true}),r=p.unwrapList(t.def).map(n=>this.visit(n,i)).join(", ");e.push(`(${r})`);}break;case "AT_DropOids":e.push("SET WITHOUT OIDS");break;case "AT_ReplaceRelOptions":if(e.push("REPLACE"),t.def&&Array.isArray(t.def)){let i=p.unwrapList(t.def).map(r=>this.visit(r,s)).join(", ");e.push(`(${i})`);}else e.push("()");break;case "AT_AddOf":e.push("OF"),t.def&&e.push(this.visit(t.def,s));break;case "AT_DropOf":e.push("NOT OF");break;case "AT_ReplicaIdentity":e.push("REPLICA IDENTITY"),t.def&&e.push(this.visit(t.def,s));break;case "AT_GenericOptions":if(e.push("OPTIONS"),t.def){let i=s.spawn("AlterTableCmd",{alterTableOptions:true}),r=p.unwrapList(t.def).map(n=>this.visit(n,i)).join(", ");e.push(`(${r})`);}break;case "AT_AddIdentity":e.push("ALTER COLUMN"),t.name&&e.push(h.quoteIdentifier(t.name)),e.push("ADD"),t.def&&e.push(this.visit(t.def,s));break;case "AT_SetIdentity":e.push("ALTER COLUMN"),t.name&&e.push(h.quoteIdentifier(t.name)),e.push("SET"),t.def&&e.push(this.visit(t.def,s));break;case "AT_DropIdentity":e.push("ALTER COLUMN"),t.name&&e.push(h.quoteIdentifier(t.name)),e.push("DROP IDENTITY"),t.behavior==="DROP_CASCADE"?e.push("CASCADE"):t.behavior==="DROP_RESTRICT"&&e.push("RESTRICT");break;case "AT_ReAddStatistics":e.push("ADD"),t.def&&e.push(this.visit(t.def,s));break;default:throw new Error(`Unsupported AlterTableCmd subtype: ${t.subtype}`)}return e.join(" ")}CreateFunctionStmt(t,s){let e=["CREATE"];if(t.replace&&e.push("OR REPLACE"),t.is_procedure?e.push("PROCEDURE"):e.push("FUNCTION"),t.funcname&&t.funcname.length>0){let r=t.funcname.map(a=>a.String?.sval||a.String?.str||"").filter(a=>a),n=h.quoteDottedName(r);if(t.parameters&&t.parameters.length>0){let a=t.parameters.filter(u=>this.getNodeData(u).mode!=="FUNC_PARAM_TABLE").map(u=>this.visit(u,s));if(a.length>0)if(s.isPretty()){let u=a.map(l=>s.indent(l)).join(","+s.newline());e.push(n+"("+s.newline()+u+s.newline()+")");}else e.push(n+"("+a.join(", ")+")");else e.push(n+"()");}else e.push(n+"()");}if(t.parameters&&t.parameters.some(r=>this.getNodeData(r).mode==="FUNC_PARAM_TABLE")){let r=t.parameters.filter(n=>this.getNodeData(n).mode==="FUNC_PARAM_TABLE").map(n=>this.visit(n,s));if(s.isPretty()){let n=r.map(a=>s.indent(a)).join(","+s.newline());e.push("RETURNS TABLE ("+s.newline()+n+s.newline()+")");}else e.push("RETURNS TABLE ("),e.push(r.join(", ")),e.push(")");}else t.returnType&&(e.push("RETURNS"),e.push(this.TypeName(t.returnType,s)));if(t.options&&t.options.length>0){let r=s.spawn("CreateFunctionStmt"),n=t.options.map(a=>this.visit(a,r));e.push(...n);}if(t.sql_body){let r=this.getNodeType(t.sql_body);if(r==="ReturnStmt")e.push(this.visit(t.sql_body,s));else {if(e.push("BEGIN ATOMIC"),r==="List"){let n=p.unwrapList(t.sql_body);if(!(n.length===0||n.length===1&&Object.keys(n[0]).length===0)){let a=n;n.length===1&&n[0].List&&(a=p.unwrapList(n[0]));let u=a.filter(l=>l&&Object.keys(l).length>0).map(l=>{let o=this.visit(l,s);return o.endsWith(";")?o:o+";"});u.length>0&&e.push(u.join(" "));}}else {let n=this.visit(t.sql_body,s);n&&!n.endsWith(";")?e.push(n+";"):e.push(n);}e.push("END");}}return e.join(" ")}FunctionParameter(t,s){let e=[];if(t.mode)switch(t.mode){case "FUNC_PARAM_IN":e.push("IN");break;case "FUNC_PARAM_OUT":e.push("OUT");break;case "FUNC_PARAM_INOUT":e.push("INOUT");break;case "FUNC_PARAM_VARIADIC":e.push("VARIADIC");break}return t.name&&e.push(h.quoteIdentifier(t.name)),t.argType&&e.push(this.TypeName(t.argType,s)),t.defexpr&&(e.push("DEFAULT"),e.push(this.visit(t.defexpr,s))),e.join(" ")}CreateEnumStmt(t,s){let e=["CREATE","TYPE"];if(t.typeName){let i=p.unwrapList(t.typeName).map(r=>this.visit(r,s)).join(".");e.push(i);}if(e.push("AS","ENUM"),t.vals&&t.vals.length>0){let i=s.spawn("CreateEnumStmt",{isEnumValue:true}),r=p.unwrapList(t.vals).map(n=>this.visit(n,i)).join(", ");e.push(`(${r})`);}else e.push("()");return e.join(" ")}CreateDomainStmt(t,s){let e=["CREATE","DOMAIN"];if(t.domainname){let i=p.unwrapList(t.domainname).map(r=>this.visit(r,s)).join(".");e.push(i);}if(t.typeName&&(e.push("AS"),e.push(this.TypeName(t.typeName,s))),t.collClause&&e.push(this.CollateClause(t.collClause,s)),t.constraints){let i=p.unwrapList(t.constraints).map(r=>this.visit(r,s)).join(" ");i&&e.push(i);}return e.join(" ")}CreateRoleStmt(t,s){let e=["CREATE"];if(t.stmt_type==="ROLESTMT_ROLE"?e.push("ROLE"):t.stmt_type==="ROLESTMT_USER"?e.push("USER"):t.stmt_type==="ROLESTMT_GROUP"?e.push("GROUP"):e.push("ROLE"),t.role){let i=h.quoteIdentifier(t.role);e.push(i);}if(t.options){let i=p.unwrapList(t.options).map(r=>this.visit(r,s.spawn("CreateRoleStmt"))).join(" ");i&&(e.push("WITH"),e.push(i));}return e.join(" ")}DefElem(t,s){if(!t.defname)return "";if(s.parentNodeTypes.includes("DefineStmt")&&["commutator","negator"].includes(t.defname.toLowerCase())&&t.arg&&this.getNodeType(t.arg)==="List"){let e=this.getNodeData(t.arg),i=p.unwrapList(e.items);if(i.length===1&&i[0].String)return `${this.preserveOperatorDefElemCase(t.defname)} = ${i[0].String.sval}`}if(s.parentNodeTypes.includes("IndexElem")){if(t.arg&&this.getNodeType(t.arg)==="String"){let e=this.getNodeData(t.arg);return `${t.defname}='${e.sval}'`}return `${t.defname}=${this.visit(t.arg,s.spawn("DefElem"))}`}if(s.parentNodeTypes.includes("DefineStmt")&&["hashes","merges"].includes(t.defname.toLowerCase())&&!t.arg)return t.defname!==t.defname.toLowerCase()&&t.defname!==t.defname.toUpperCase()?h.quoteIdentifier(t.defname):t.defname.charAt(0).toUpperCase()+t.defname.slice(1).toLowerCase();if(s.parentNodeTypes.includes("AlterFdwStmt")||s.parentNodeTypes.includes("CreateFdwStmt")||s.parentNodeTypes.includes("CreateForeignServerStmt")||s.parentNodeTypes.includes("AlterForeignServerStmt")||s.parentNodeTypes.includes("CreateUserMappingStmt")||s.parentNodeTypes.includes("AlterUserMappingStmt")||s.parentNodeTypes.includes("ColumnDef")||s.parentNodeTypes.includes("CreateForeignTableStmt")||s.parentNodeTypes.includes("ImportForeignSchemaStmt")||s.alterColumnOptions||s.alterTableOptions){if(["handler","validator"].includes(t.defname)){if(!t.arg)return `NO ${t.defname.toUpperCase()}`;let e=s.spawn("DefElem"),i=this.visit(t.arg,e);return `${t.defname.toUpperCase()} ${i}`}if(t.arg){let e=s.spawn("DefElem"),i=this.visit(t.arg,e);if(s.parentNodeTypes.includes("CreateFdwStmt")||s.parentNodeTypes.includes("AlterFdwStmt")){let a=typeof i=="string"&&!i.startsWith("'")?`'${i}'`:i,u=h.quoteIdentifier(t.defname);return t.defaction==="DEFELEM_ADD"?`ADD ${u} ${a}`:t.defaction==="DEFELEM_DROP"?`DROP ${u}`:t.defaction==="DEFELEM_SET"?`SET ${u} ${a}`:`${u} ${a}`}let r=typeof i=="string"&&!i.startsWith("'")?`'${i}'`:i;return t.defaction==="DEFELEM_ADD"?`ADD ${t.defname} ${r}`:t.defaction==="DEFELEM_DROP"?`DROP ${t.defname}`:t.defaction==="DEFELEM_SET"?`SET ${t.defname} ${r}`:`${h.quoteIdentifier(t.defname)} ${r}`}else if(t.defaction==="DEFELEM_DROP")return `DROP ${t.defname}`}if((s.parentNodeTypes.includes("CreateSeqStmt")||s.parentNodeTypes.includes("AlterSeqStmt"))&&(t.defname==="minvalue"||t.defname==="maxvalue")&&!t.arg)return `NO ${t.defname.toUpperCase()}`;if((s.parentNodeTypes.includes("CreateRoleStmt")||s.parentNodeTypes.includes("AlterRoleStmt"))&&t.defname==="password"){if(!t.arg)return "PASSWORD NULL";let e=s.spawn("DefElem"),i=this.visit(t.arg,e);return `PASSWORD ${typeof i=="string"&&!i.startsWith("'")?`'${i}'`:i}`}if(t.arg){let e=s.spawn("DefElem"),i=this.visit(t.arg,e);if(s.parentNodeTypes.includes("AlterOperatorStmt")){if(t.arg&&this.getNodeType(t.arg)==="TypeName"){let n=this.getNodeData(t.arg);if(n.names){let a=p.unwrapList(n.names);if(a.length===1&&a[0].String)return `${t.defname} = ${a[0].String.sval}`}}if(t.arg&&this.getNodeType(t.arg)==="List"){let n=this.getNodeData(t.arg),a=p.unwrapList(n.items);if(a.length===1&&a[0].String)return `${t.defname} = ${a[0].String.sval}`}}if(s.parentNodeTypes.includes("CreatedbStmt")||s.parentNodeTypes.includes("DropdbStmt")){let n=typeof i=="string"?h.escape(i):i;return `${t.defname} = ${n}`}if(s.parentNodeTypes.includes("CreateForeignServerStmt")||s.parentNodeTypes.includes("AlterForeignServerStmt")){let n=typeof i=="string"?h.escape(i):i;return `${h.quoteIdentifier(t.defname)} ${n}`}if(s.parentNodeTypes.includes("CreateRoleStmt")||s.parentNodeTypes.includes("AlterRoleStmt")){if(t.defname==="rolemembers"&&t.arg&&this.getNodeType(t.arg)==="List"){let n=this.getNodeData(t.arg),u=p.unwrapList(n.items).map(l=>this.visit(l,s));return s.parentNodeTypes.includes("CreateRoleStmt")?`ROLE ${u.join(", ")}`:`ADD USER ${u.join(", ")}`}if(t.defname==="addroleto"&&t.arg&&this.getNodeType(t.arg)==="List"){let n=this.getNodeData(t.arg);return `IN ROLE ${p.unwrapList(n.items).map(l=>this.visit(l,s)).join(", ")}`}if(t.defname==="validUntil")return `VALID UNTIL ${typeof i=="string"&&!i.startsWith("'")?`'${i}'`:i}`;if(t.defname==="adminmembers")return `ADMIN ${i}`;if(t.defname==="connectionlimit")return `CONNECTION LIMIT ${i}`;if(t.defname==="sysid")return `SYSID ${i}`;if(String(i)==="true")return t.defname==="isreplication"?"REPLICATION":t.defname==="canlogin"?"LOGIN":t.defname.toUpperCase();if(String(i)==="false")return t.defname==="canlogin"?"NOLOGIN":t.defname==="isreplication"?"NOREPLICATION":`NO${t.defname.toUpperCase()}`}if(s.parentNodeTypes.includes("CreateSeqStmt")||s.parentNodeTypes.includes("AlterSeqStmt")){if(t.defname==="owned_by")if(t.arg&&this.getNodeType(t.arg)==="List"){let n=this.getNodeData(t.arg);return `OWNED BY ${p.unwrapList(n.items).map(l=>{let o=this.getNodeData(l);if(this.getNodeType(l)==="String"){let f=o.sval;return h.quoteIdentifier(f)}return this.visit(l,s)}).join(".")}`}else return `OWNED BY ${i}`;if(t.defname==="cycle"){let n=String(i).toLowerCase();if(n==="true"||n==="1")return "CYCLE";if(n==="false"||n==="0")return "NO CYCLE"}return (t.defname==="minvalue"||t.defname==="maxvalue")&&!t.arg?`NO ${t.defname.toUpperCase()}`:`${t.defname.toUpperCase()} ${i}`}if(s.parentNodeTypes.includes("CreateTableSpaceStmt")||s.parentNodeTypes.includes("AlterTableSpaceOptionsStmt"))return `${t.defname.toUpperCase()} ${i}`;if(s.parentNodeTypes.includes("ExplainStmt"))return i?`${t.defname.toUpperCase()} ${i.toUpperCase()}`:t.defname.toUpperCase();if(s.parentNodeTypes.includes("DoStmt")){if(t.defname==="as"){let n=s.spawn("DefElem"),a=t.arg?this.visit(t.arg,n):"";if(Array.isArray(a)){let l=a.join(""),o=this.getFunctionDelimiter(l);return `${o}${l}${o}`}else {let u=this.getFunctionDelimiter(a);return `${u}${a}${u}`}}return ""}if(s.parentNodeTypes.includes("CreateFunctionStmt")||s.parentNodeTypes.includes("AlterFunctionStmt")){if(t.defname==="as")if(t.arg&&t.arg.List){let u=(t.arg.List.items||[]).map(l=>l.String?l.String.sval:this.visit(l,s));if(u.length===1){let l=u[0],o=this.getFunctionDelimiter(l);return `AS ${o}${l}${o}`}else return `AS ${u.map(l=>{let o=this.getFunctionDelimiter(l);return `${o}${l}${o}`}).join(", ")}`}else if(Array.isArray(i)){let n=i;if(n.length===1){let a=n[0],u=this.getFunctionDelimiter(a);return `AS ${u}${a}${u}`}else return `AS ${n.map(a=>{let u=this.getFunctionDelimiter(a);return `${u}${a}${u}`}).join(", ")}`}else {let n=this.getFunctionDelimiter(i);return `AS ${n}${i}${n}`}return t.defname==="language"?`LANGUAGE ${i}`:t.defname==="volatility"?i.toUpperCase():t.defname==="strict"?i==="true"?"STRICT":"CALLED ON NULL INPUT":t.defname==="security"?i==="true"?"SECURITY DEFINER":"SECURITY INVOKER":t.defname==="leakproof"?i==="true"?"LEAKPROOF":"NOT LEAKPROOF":t.defname==="cost"?`COST ${i}`:t.defname==="rows"?`ROWS ${i}`:t.defname==="window"?i==="true"?"WINDOW":"":t.defname==="set"?this.visit(t.arg,s):`${t.defname.toUpperCase()} ${i}`}if(s.parentNodeTypes.includes("CreateExtensionStmt")||s.parentNodeTypes.includes("AlterExtensionStmt")||s.parentNodeTypes.includes("CreateFdwStmt")||s.parentNodeTypes.includes("AlterFdwStmt")){if(s.parentNodeTypes.includes("AlterExtensionStmt")){if(t.defname==="new_version")return `UPDATE TO ${typeof i=="string"&&!i.startsWith("'")?`'${i}'`:i}`;if(t.defname==="schema")return `SET SCHEMA ${i}`}if(s.parentNodeTypes.includes("CreateFdwStmt")){if(["handler","validator"].includes(t.defname))return `${t.defname.toUpperCase()} ${i}`;let n=typeof i=="string"?h.escape(i):i;return `${t.defname} ${n}`}return t.defname==="cascade"?i==="true"?"CASCADE":"":`${t.defname.toUpperCase()} ${i}`}if(s.parentNodeTypes.includes("IndexStmt"))return `${t.defname}=${i}`;if(s.parentNodeTypes.includes("IndexElem")){if(t.arg&&this.getNodeType(t.arg)==="String"){let n=this.getNodeData(t.arg);return `${t.defname}='${n.sval}'`}return `${t.defname}=${i}`}if(s.parentNodeTypes.includes("CreateStmt")){if(t.arg&&this.getNodeType(t.arg)==="Integer"){let n=this.getNodeData(t.arg);return `${t.defname}=${n.ival}`}return `${t.defname}=${i}`}if(s.parentNodeTypes.includes("CreateEventTrigStmt")){if(t.arg&&this.getNodeType(t.arg)==="List"){let n=this.getNodeData(t.arg),u=p.unwrapList(n.items).map(l=>this.getNodeType(l)==="String"?`'${this.getNodeData(l).sval||""}'`:this.visit(l,s));return `${t.defname} IN (${u.join(", ")})`}return `${t.defname} = ${i}`}if((s.parentNodeTypes.includes("AlterTableCmd")||s.parentNodeTypes.includes("AlterTableStmt"))&&!s.parentNodeTypes.includes("ColumnDef")){let n=t.defnamespace?`${t.defnamespace}.${t.defname}`:t.defname;return t.arg&&this.getNodeType(t.arg)==="TypeName"?`${n} = ${i}`:`${n} = ${i}`}if(s.parentNodeTypes.includes("ViewStmt")){if(typeof i=="string"&&/^\d+$/.test(i))return `${t.defname}=${i}`;let n=typeof i=="string"?h.escape(i):i;return `${t.defname} = ${n}`}if(s.parentNodeTypes.includes("CopyStmt"))return t.defname==="format"&&t.arg&&this.getNodeType(t.arg)==="String"?`FORMAT ${this.getNodeData(t.arg).sval.toUpperCase()}`:t.arg?`${t.defname.toUpperCase()} ${i}`:t.defname.toUpperCase();if(s.parentNodeTypes.includes("DefineStmt")){let n=this.preserveOperatorDefElemCase(t.defname);if(["commutator","negator"].includes(t.defname.toLowerCase())){if(t.arg){if(t.arg&&this.getNodeType(t.arg)==="List"){let l=this.getNodeData(t.arg),o=p.unwrapList(l.items);if(o.length===1&&o[0].String)return `${n} = ${o[0].String.sval}`}let u=i.replace(/^"(.*)"$/,"$1");return `${n} = ${u}`}return n}if(["hashes","merges"].includes(t.defname.toLowerCase()))return t.defname!==t.defname.toLowerCase()&&t.defname!==t.defname.toUpperCase()?h.quoteIdentifier(t.defname):n.toUpperCase();let a=h.quoteIdentifier(t.defname);if(a!==t.defname){if(t.arg){if(this.getNodeType(t.arg)==="String"){let u=this.getNodeData(t.arg);return u.sval==="true"||u.sval==="false"?`${a} = ${u.sval}`:`${a} = '${u.sval}'`}return `${a} = ${i}`}return a}if(n!==t.defname)return t.arg?`${n} = ${i}`:n;if(t.arg&&this.getNodeType(t.arg)==="String"){let u=this.getNodeData(t.arg);return u.sval==="true"||u.sval==="false"?`${t.defname} = ${u.sval}`:`${t.defname} = '${u.sval}'`}if(t.arg&&this.getNodeType(t.arg)==="Boolean"){let u=this.getNodeData(t.arg);return `${t.defname} = ${u.boolval?"true":"false"}`}if(t.arg&&this.getNodeType(t.arg)==="Integer"){let u=this.getNodeData(t.arg);return `${t.defname} = ${u.ival}`}if(t.arg&&this.getNodeType(t.arg)==="TypeName"){let u=this.getNodeData(t.arg);if(u.names){let l=p.unwrapList(u.names);if(l.length===1&&l[0].String)return `${t.defname} = ${l[0].String.sval}`}return `${t.defname} = ${i}`}}let r=typeof i=="string"?h.escape(i):i;return `${t.defname} = ${r}`}return s.parentNodeTypes.includes("DefineStmt")&&!t.arg&&t.defname!==t.defname.toLowerCase()&&t.defname!==t.defname.toUpperCase()?h.quoteIdentifier(t.defname):t.defname.toUpperCase()}CreateTableSpaceStmt(t,s){let e=["CREATE","TABLESPACE"];if(t.tablespacename&&e.push(t.tablespacename),t.owner&&(e.push("OWNER"),e.push(this.RoleSpec(t.owner,s))),t.location&&(e.push("LOCATION"),e.push(`'${t.location}'`)),t.options&&t.options.length>0){e.push("WITH");let i=s.spawn("CreateTableSpaceStmt"),r=p.unwrapList(t.options).map(n=>this.visit(n,i)).join(", ");e.push(`(${r})`);}return e.join(" ")}DropTableSpaceStmt(t,s){let e=["DROP","TABLESPACE"];return t.missing_ok&&e.push("IF","EXISTS"),t.tablespacename&&e.push(t.tablespacename),e.join(" ")}AlterTableSpaceOptionsStmt(t,s){let e=["ALTER","TABLESPACE"];if(t.tablespacename&&e.push(t.tablespacename),t.isReset?e.push("RESET"):e.push("SET"),t.options&&t.options.length>0){let i=s.spawn("AlterTableSpaceOptionsStmt"),r=p.unwrapList(t.options).map(n=>this.visit(n,i)).join(", ");e.push(`(${r})`);}return e.join(" ")}CreateExtensionStmt(t,s){let e=["CREATE","EXTENSION"];if(t.if_not_exists&&e.push("IF","NOT","EXISTS"),t.extname&&e.push(this.quoteIfNeeded(t.extname)),t.options&&t.options.length>0){let i=s.spawn("CreateExtensionStmt"),r=p.unwrapList(t.options).map(n=>this.visit(n,i)).join(" ");e.push(r);}return e.join(" ")}AlterExtensionStmt(t,s){let e=["ALTER","EXTENSION"];if(t.extname&&e.push(this.quoteIfNeeded(t.extname)),t.options&&t.options.length>0){let i=s.spawn("AlterExtensionStmt"),r=p.unwrapList(t.options).map(n=>this.visit(n,i)).join(" ");e.push(r);}return e.join(" ")}AlterExtensionContentsStmt(t,s){let e=["ALTER","EXTENSION"];if(t.extname&&e.push(this.quoteIfNeeded(t.extname)),t.action===1?e.push("ADD"):t.action===-1&&e.push("DROP"),t.objtype)try{e.push(this.getObjectTypeKeyword(t.objtype));}catch{e.push(t.objtype.toString());}return t.object&&e.push(this.visit(t.object,s)),e.join(" ")}CreateFdwStmt(t,s){let e=["CREATE","FOREIGN","DATA","WRAPPER"];if(t.fdwname&&e.push(t.fdwname),t.func_options&&t.func_options.length>0){let i=s.spawn("CreateFdwStmt"),r=p.unwrapList(t.func_options).map(n=>this.visit(n,i)).join(" ");e.push(r);}if(t.options&&t.options.length>0){e.push("OPTIONS");let i=s.spawn("CreateFdwStmt"),r=p.unwrapList(t.options).map(n=>this.visit(n,i)).join(", ");e.push(`(${r})`);}return e.join(" ")}SetOperationStmt(t,s){let e=[];if(t.larg&&e.push(this.visit(t.larg,s)),t.op)switch(t.op){case "SETOP_UNION":e.push(t.all?"UNION ALL":"UNION");break;case "SETOP_INTERSECT":e.push(t.all?"INTERSECT ALL":"INTERSECT");break;case "SETOP_EXCEPT":e.push(t.all?"EXCEPT ALL":"EXCEPT");break;default:throw new Error(`Unsupported SetOperation: ${t.op}`)}return t.rarg&&e.push(this.visit(t.rarg,s)),e.join(" ")}ReplicaIdentityStmt(t,s){let e=[];if(t.identity_type)switch(t.identity_type){case "d":case "REPLICA_IDENTITY_DEFAULT":e.push("DEFAULT");break;case "f":case "REPLICA_IDENTITY_FULL":e.push("FULL");break;case "n":case "REPLICA_IDENTITY_NOTHING":e.push("NOTHING");break;case "i":case "REPLICA_IDENTITY_INDEX":e.push("USING","INDEX"),t.name&&e.push(h.quoteIdentifier(t.name));break;default:throw new Error(`Unsupported replica identity type: ${t.identity_type}`)}return e.join(" ")}AlterCollationStmt(t,s){let e=["ALTER","COLLATION"];if(t.collname&&t.collname.length>0){let i=p.unwrapList(t.collname).map(r=>this.visit(r,s)).join(".");e.push(i);}return e.push("REFRESH","VERSION"),e.join(" ")}AlterDomainStmt(t,s){let e=["ALTER","DOMAIN"];if(t.typeName&&t.typeName.length>0){let i=p.unwrapList(t.typeName).map(r=>this.visit(r,s)).join(".");e.push(i);}if(t.subtype)switch(t.subtype){case "AT_SetNotNull":e.push("SET","NOT","NULL");break;case "AT_DropNotNull":e.push("DROP","NOT","NULL");break;case "AT_SetDefault":e.push("SET","DEFAULT"),t.def&&e.push(this.visit(t.def,s));break;case "AT_DropDefault":e.push("DROP","DEFAULT");break;case "AT_AddConstraint":if(e.push("ADD"),t.def){let i=s.spawn("CreateDomainStmt",{isDomainConstraint:true});e.push(this.visit(t.def,i));}break;case "AT_DropConstraint":e.push("DROP","CONSTRAINT"),t.missing_ok&&e.push("IF","EXISTS"),t.name&&e.push(h.quoteIdentifier(t.name)),t.behavior==="DROP_CASCADE"&&e.push("CASCADE");break;case "AT_ValidateConstraint":e.push("VALIDATE","CONSTRAINT"),t.name&&e.push(h.quoteIdentifier(t.name));break;case "C":if(e.push("ADD"),t.def){let i=s.spawn("CreateDomainStmt",{isDomainConstraint:true});e.push(this.visit(t.def,i));}break;case "X":e.push("DROP","CONSTRAINT"),t.missing_ok&&e.push("IF","EXISTS"),t.name&&e.push(h.quoteIdentifier(t.name)),t.behavior==="DROP_CASCADE"&&e.push("CASCADE");break;case "V":e.push("VALIDATE","CONSTRAINT"),t.name&&e.push(h.quoteIdentifier(t.name));break;case "O":e.push("SET","NOT","NULL");break;case "N":e.push("DROP","NOT","NULL");break;case "T":t.def?(e.push("SET","DEFAULT"),e.push(this.visit(t.def,s))):e.push("DROP","DEFAULT");break;default:throw new Error(`Unsupported AlterDomainStmt subtype: ${t.subtype}`)}return e.join(" ")}PrepareStmt(t,s){let e=["PREPARE"];if(t.name&&e.push(t.name),t.argtypes&&t.argtypes.length>0){let i=p.unwrapList(t.argtypes).map(r=>this.visit(r,s)).join(", ");e.push(`(${i})`);}return e.push("AS"),t.query&&e.push(this.visit(t.query,s)),e.join(" ")}ExecuteStmt(t,s){let e=["EXECUTE"];if(t.name&&e.push(t.name),t.params&&t.params.length>0){let i=p.unwrapList(t.params).map(r=>this.visit(r,s)).join(", ");e.push(`(${i})`);}return e.join(" ")}DeallocateStmt(t,s){let e=["DEALLOCATE"];return t.isall?e.push("ALL"):t.name&&e.push(t.name),e.join(" ")}NotifyStmt(t,s){let e=["NOTIFY"];return t.conditionname&&e.push(t.conditionname),t.payload!==null&&t.payload!==void 0&&(e.push(","),e.push(`'${t.payload}'`)),e.join(" ")}ListenStmt(t,s){let e=["LISTEN"];return t.conditionname&&e.push(t.conditionname),e.join(" ")}UnlistenStmt(t,s){let e=["UNLISTEN"];return t.conditionname?e.push(t.conditionname):e.push("*"),e.join(" ")}CheckPointStmt(t,s){return "CHECKPOINT"}LoadStmt(t,s){if(!t.filename)throw new Error("LoadStmt requires filename");return `LOAD '${t.filename}'`}DiscardStmt(t,s){switch(t.target){case "DISCARD_ALL":return "DISCARD ALL";case "DISCARD_PLANS":return "DISCARD PLANS";case "DISCARD_SEQUENCES":return "DISCARD SEQUENCES";case "DISCARD_TEMP":return "DISCARD TEMP";default:throw new Error(`Unsupported DiscardStmt target: ${t.target}`)}}CommentStmt(t,s){let e=["COMMENT ON"];if(t.objtype)switch(t.objtype){case "OBJECT_TABLE":e.push("TABLE");break;case "OBJECT_COLUMN":e.push("COLUMN");break;case "OBJECT_INDEX":e.push("INDEX");break;case "OBJECT_FUNCTION":e.push("FUNCTION");break;case "OBJECT_VIEW":e.push("VIEW");break;case "OBJECT_SCHEMA":e.push("SCHEMA");break;case "OBJECT_DATABASE":e.push("DATABASE");break;case "OBJECT_MATVIEW":e.push("MATERIALIZED VIEW");break;case "OBJECT_TABCONSTRAINT":e.push("CONSTRAINT");break;case "OBJECT_TRIGGER":e.push("TRIGGER");break;case "OBJECT_FDW":e.push("FOREIGN DATA WRAPPER");break;case "OBJECT_EVENT_TRIGGER":e.push("EVENT TRIGGER");break;case "OBJECT_FOREIGN_SERVER":e.push("SERVER");break;case "OBJECT_FOREIGN_TABLE":e.push("FOREIGN TABLE");break;case "OBJECT_STATISTIC_EXT":e.push("STATISTICS");break;case "OBJECT_LARGEOBJECT":e.push("LARGE OBJECT");break;case "OBJECT_OPERATOR":e.push("OPERATOR");break;case "OBJECT_OPCLASS":e.push("OPERATOR CLASS");break;case "OBJECT_OPFAMILY":e.push("OPERATOR FAMILY");break;case "OBJECT_POLICY":e.push("POLICY");break;case "OBJECT_TSPARSER":e.push("TEXT SEARCH PARSER");break;case "OBJECT_TSDICTIONARY":e.push("TEXT SEARCH DICTIONARY");break;case "OBJECT_TSTEMPLATE":e.push("TEXT SEARCH TEMPLATE");break;case "OBJECT_TSCONFIGURATION":e.push("TEXT SEARCH CONFIGURATION");break;case "OBJECT_TRANSFORM":e.push("TRANSFORM");break;default:e.push(t.objtype.replace("OBJECT_",""));}if(t.object)if(t.object&&typeof t.object=="object"&&"List"in t.object){let i=t.object.List;if(i.items&&i.items.length>0){let r=p.unwrapList(i.items).map(n=>this.visit(n,s));if(t.objtype==="OBJECT_TABCONSTRAINT")if(r.length===3){let[n,a,u]=r;e.push(u),e.push("ON"),e.push(`${n}.${a}`);}else if(r.length===2){let[n,a]=r;e.push(a),e.push("ON"),e.push(n);}else e.push(r.join("."));else if(t.objtype==="OBJECT_TRIGGER")if(r.length===2){let[n,a]=r;e.push(a),e.push("ON"),e.push(n);}else e.push(r.join("."));else if(t.objtype==="OBJECT_RULE")if(r.length===2){let[n,a]=r;e.push(a),e.push("ON"),e.push(n);}else e.push(r.join("."));else if(t.objtype==="OBJECT_OPERATOR")if(t.object&&t.object.ObjectWithArgs){let n=t.object.ObjectWithArgs,a=n.objname&&n.objname[0]&&n.objname[0].String?n.objname[0].String.sval:"unknown";a.startsWith('"')&&a.endsWith('"')&&(a=a.slice(1,-1));let u=[];n.objargs&&n.objargs.forEach(l=>{if(!l||Object.keys(l).length===0)u.push("NONE");else if(l.TypeName){let o=this.visit(l,s);u.push(o);}else u.push("unknown");}),e.push(`${a} (${u.join(", ")})`);}else e.push(r.join("."));else if(t.objtype==="OBJECT_OPCLASS"||t.objtype==="OBJECT_OPFAMILY")if(r.length>=2){let n=r[r.length-1],a=r[r.length-2];e.push(`${n} USING ${a}`);}else e.push(r.join(" USING "));else if(t.objtype==="OBJECT_POLICY")if(r.length===2){let[n,a]=r;e.push(a),e.push("ON"),e.push(n);}else e.push(r.join("."));else if(t.objtype==="OBJECT_TRANSFORM")if(r.length===2){let[n,a]=r;e.push("FOR"),e.push(n),e.push("LANGUAGE"),e.push(a);}else e.push(r.join("."));else e.push(r.join("."));}}else if(t.objtype==="OBJECT_OPERATOR"&&t.object&&t.object.ObjectWithArgs){let i=t.object.ObjectWithArgs,r=i.objname&&i.objname[0]&&i.objname[0].String?i.objname[0].String.sval:"unknown";r.startsWith('"')&&r.endsWith('"')&&(r=r.slice(1,-1));let n=[];i.objargs&&i.objargs.forEach(a=>{if(!a||Object.keys(a).length===0)n.push("NONE");else if(a.TypeName){let u=this.visit(a,s);n.push(u);}else n.push("unknown");}),e.push(`${r}(${n.join(", ")})`);}else {let i=s.spawn("CommentStmt",{objtype:t.objtype});e.push(this.visit(t.object,i));}return e.push("IS"),t.comment===null||t.comment===void 0?e.push("NULL"):t.comment&&e.push(h.formatEString(t.comment)),e.join(" ")}LockStmt(t,s){let e=["LOCK","TABLE"];if(t.relations&&t.relations.length>0){let i=p.unwrapList(t.relations).map(r=>this.visit(r,s)).join(", ");e.push(i);}if(t.mode!==void 0){let i=["","ACCESS SHARE","ROW SHARE","ROW EXCLUSIVE","SHARE UPDATE EXCLUSIVE","SHARE","SHARE ROW EXCLUSIVE","EXCLUSIVE","ACCESS EXCLUSIVE"];t.mode>=1&&t.mode<i.length&&e.push("IN",i[t.mode],"MODE");}return t.nowait&&e.push("NOWAIT"),e.join(" ")}CreatePolicyStmt(t,s){let e=[],i=["CREATE","POLICY"];if(t.policy_name&&i.push(h.quoteIdentifier(t.policy_name)),e.push(i.join(" ")),t.table&&(s.isPretty()?e.push(s.newline()+s.indent(`ON ${this.RangeVar(t.table,s)}`)):(e.push("ON"),e.push(this.RangeVar(t.table,s)))),t.permissive===void 0?s.isPretty()?e.push(s.newline()+s.indent("AS RESTRICTIVE")):e.push("AS","RESTRICTIVE"):t.permissive===true&&(s.isPretty()?e.push(s.newline()+s.indent("AS PERMISSIVE")):e.push("AS","PERMISSIVE")),t.cmd_name&&(s.isPretty()?e.push(s.newline()+s.indent(`FOR ${t.cmd_name.toUpperCase()}`)):e.push("FOR",t.cmd_name.toUpperCase())),t.roles&&t.roles.length>0){let r=p.unwrapList(t.roles).map(n=>this.visit(n,s));s.isPretty()?e.push(s.newline()+s.indent(`TO ${r.join(", ")}`)):(e.push("TO"),e.push(r.join(", ")));}if(t.qual)if(s.isPretty()){let r=this.visit(t.qual,s);e.push(s.newline()+s.indent("USING (")),e.push(s.newline()+s.indent(s.indent(r))),e.push(s.newline()+s.indent(")"));}else e.push("USING"),e.push(`(${this.visit(t.qual,s)})`);if(t.with_check)if(s.isPretty()){let r=this.visit(t.with_check,s);e.push(s.newline()+s.indent("WITH CHECK (")),e.push(s.newline()+s.indent(s.indent(r))),e.push(s.newline()+s.indent(")"));}else e.push("WITH CHECK"),e.push(`(${this.visit(t.with_check,s)})`);return s.isPretty()?e.join(""):e.join(" ")}AlterPolicyStmt(t,s){let e=["ALTER","POLICY"];if(t.policy_name&&e.push(h.quoteIdentifier(t.policy_name)),t.table&&(e.push("ON"),e.push(this.RangeVar(t.table,s))),t.roles&&t.roles.length>0){e.push("TO");let i=p.unwrapList(t.roles).map(r=>this.visit(r,s));e.push(i.join(", "));}return t.qual&&(e.push("USING"),e.push(`(${this.visit(t.qual,s)})`)),t.with_check&&(e.push("WITH CHECK"),e.push(`(${this.visit(t.with_check,s)})`)),e.join(" ")}CreateUserMappingStmt(t,s){let e=["CREATE"];if(t.if_not_exists&&e.push("IF","NOT","EXISTS"),e.push("USER","MAPPING"),e.push("FOR"),t.user?e.push(this.RoleSpec(t.user,s)):e.push("CURRENT_USER"),e.push("SERVER"),t.servername&&e.push(h.quoteIdentifier(t.servername)),t.options&&t.options.length>0){e.push("OPTIONS");let i=s.spawn("CreateUserMappingStmt"),r=p.unwrapList(t.options).map(n=>this.visit(n,i));e.push(`(${r.join(", ")})`);}return e.join(" ")}CreateStatsStmt(t,s){let e=["CREATE"];if(t.if_not_exists&&e.push("IF","NOT","EXISTS"),e.push("STATISTICS"),t.defnames&&t.defnames.length>0){let i=p.unwrapList(t.defnames).map(r=>this.visit(r,s));e.push(i.join("."));}if(t.stat_types&&t.stat_types.length>0){let i=p.unwrapList(t.stat_types).map(r=>this.visit(r,s));e.push(`(${i.join(", ")})`);}if(e.push("ON"),t.exprs&&t.exprs.length>0){let i=p.unwrapList(t.exprs).map(r=>this.visit(r,s));e.push(i.join(", "));}if(t.relations&&t.relations.length>0){e.push("FROM");let i=p.unwrapList(t.relations).map(r=>this.visit(r,s));e.push(i.join(", "));}return e.join(" ")}StatsElem(t,s){return t.name?this.quoteIfNeeded(t.name):t.expr?`(${this.visit(t.expr,s)})`:""}CreatePublicationStmt(t,s){let e=["CREATE","PUBLICATION"];if(t.pubname&&e.push(h.quoteIdentifier(t.pubname)),t.pubobjects&&t.pubobjects.length>0){e.push("FOR","TABLE");let i=p.unwrapList(t.pubobjects).map(r=>this.visit(r,s));e.push(i.join(", "));}else t.for_all_tables&&e.push("FOR","ALL","TABLES");if(t.options&&t.options.length>0){e.push("WITH");let i=p.unwrapList(t.options).map(r=>this.visit(r,s));e.push(`(${i.join(", ")})`);}return e.join(" ")}CreateSubscriptionStmt(t,s){let e=["CREATE","SUBSCRIPTION"];if(t.subname&&e.push(h.quoteIdentifier(t.subname)),e.push("CONNECTION"),t.conninfo&&e.push(`'${t.conninfo}'`),e.push("PUBLICATION"),t.publication&&t.publication.length>0){let i=p.unwrapList(t.publication).map(r=>this.visit(r,s));e.push(i.join(", "));}if(t.options&&t.options.length>0){e.push("WITH");let i=p.unwrapList(t.options).map(r=>this.visit(r,s));e.push(`(${i.join(", ")})`);}return e.join(" ")}AlterPublicationStmt(t,s){let e=["ALTER","PUBLICATION"];if(t.pubname&&e.push(h.quoteIdentifier(t.pubname)),t.action)switch(t.action){case "AP_AddObjects":e.push("ADD");break;case "AP_DropObjects":e.push("DROP");break;case "AP_SetObjects":e.push("SET");break;default:throw new Error(`Unsupported AlterPublicationStmt action: ${t.action}`)}if(t.for_all_tables)e.push("FOR ALL TABLES");else if(t.pubobjects&&t.pubobjects.length>0){e.push("FOR TABLE");let i=p.unwrapList(t.pubobjects).map(r=>this.visit(r,s));e.push(i.join(", "));}if(t.options&&t.options.length>0){e.push("WITH");let i=p.unwrapList(t.options).map(r=>this.visit(r,s));e.push(`(${i.join(", ")})`);}return e.join(" ")}AlterSubscriptionStmt(t,s){let e=["ALTER","SUBSCRIPTION"];if(t.subname&&e.push(h.quoteIdentifier(t.subname)),t.kind)switch(t.kind){case "ALTER_SUBSCRIPTION_OPTIONS":e.push("SET");break;case "ALTER_SUBSCRIPTION_CONNECTION":e.push("CONNECTION"),t.conninfo&&e.push(`'${t.conninfo}'`);break;case "ALTER_SUBSCRIPTION_SET_PUBLICATION":if(e.push("SET PUBLICATION"),t.publication&&t.publication.length>0){let i=p.unwrapList(t.publication).map(r=>this.visit(r,s));e.push(i.join(", "));}break;case "ALTER_SUBSCRIPTION_REFRESH":e.push("REFRESH PUBLICATION");break;case "ALTER_SUBSCRIPTION_ENABLED":e.push("ENABLE");break;case "ALTER_SUBSCRIPTION_SKIP":e.push("SKIP");break;default:throw new Error(`Unsupported AlterSubscriptionStmt kind: ${t.kind}`)}if(t.options&&t.options.length>0){e.push("WITH");let i=p.unwrapList(t.options).map(r=>this.visit(r,s));e.push(`(${i.join(", ")})`);}return e.join(" ")}DropSubscriptionStmt(t,s){let e=["DROP","SUBSCRIPTION"];if(t.missing_ok&&e.push("IF EXISTS"),t.subname&&e.push(h.quoteIdentifier(t.subname)),t.behavior)switch(t.behavior){case "DROP_CASCADE":e.push("CASCADE");break;case "DROP_RESTRICT":e.push("RESTRICT");break}return e.join(" ")}DoStmt(t,s){let e=["DO"];if(t.args&&t.args.length>0){let i=s.spawn("DoStmt"),r=p.unwrapList(t.args),n=[];for(let a of r)if(this.getNodeType(a)==="DefElem"){let l=this.getNodeData(a);if(l.defname==="language"){let o=this.visit(l.arg,i);n.push(`LANGUAGE ${o}`);}else if(l.defname==="as")if(this.getNodeType(l.arg)==="String"){let f=this.getNodeData(l.arg),m=this.getFunctionDelimiter(f.sval);n.push(`${m}${f.sval}${m}`);}else n.push(this.visit(l.arg,i));}e.push(...n);}return e.join(" ")}generateUniqueDollarTag(t){let s=/\$[a-zA-Z0-9_]*\$/g,e=t.match(s)||[];if(e.length===0)return "$$";let i=new Set(e);if(i.has("$$")){let r=1,n=`$do${r}$`;for(;i.has(n);)r++,n=`$do${r}$`;return n}return "$$"}InlineCodeBlock(t,s){if(t.source_text){let i=this.getFunctionDelimiter(t.source_text);return `${i}${t.source_text}${i}`}let e=this.options.functionDelimiter||"$$";return `${e}${e}`}CallContext(t,s){return t.atomic!==void 0?t.atomic?"ATOMIC":"NOT ATOMIC":""}ConstraintsSetStmt(t,s){let e=["SET","CONSTRAINTS"];if(t.constraints&&t.constraints.length>0){let i=p.unwrapList(t.constraints).map(r=>this.visit(r,s));e.push(i.join(", "));}else e.push("ALL");return e.push(t.deferred?"DEFERRED":"IMMEDIATE"),e.join(" ")}AlterSystemStmt(t,s){let e=["ALTER","SYSTEM"];if(t.setstmt){let r=this.VariableSetStmt(t.setstmt,s).replace(/^SET\s+/,"");e.push("SET",r);}return e.join(" ")}VacuumRelation(t,s){let e=[];if(t.relation&&e.push(this.RangeVar(t.relation,s)),t.va_cols&&t.va_cols.length>0){e.push("(");let i=p.unwrapList(t.va_cols).map(r=>this.visit(r,s));e.push(i.join(", ")),e.push(")");}return e.join(" ")}DropOwnedStmt(t,s){let e=["DROP","OWNED","BY"];if(t.roles&&t.roles.length>0){let i=p.unwrapList(t.roles).map(r=>this.visit(r,s));e.push(i.join(", "));}if(t.behavior)switch(t.behavior){case "DROP_CASCADE":e.push("CASCADE");break;case "DROP_RESTRICT":e.push("RESTRICT");break}return e.join(" ")}ReassignOwnedStmt(t,s){let e=["REASSIGN","OWNED","BY"];if(t.roles&&t.roles.length>0){let i=p.unwrapList(t.roles).map(r=>this.visit(r,s));e.push(i.join(", "));}return e.push("TO"),t.newrole&&e.push(this.RoleSpec(t.newrole,s)),e.join(" ")}AlterTSDictionaryStmt(t,s){let e=["ALTER","TEXT","SEARCH","DICTIONARY"];if(t.dictname&&t.dictname.length>0){let i=p.unwrapList(t.dictname).map(r=>this.visit(r,s));e.push(i.join("."));}if(t.options&&t.options.length>0){e.push("(");let i=p.unwrapList(t.options).map(r=>this.visit(r,s));e.push(i.join(", ")),e.push(")");}return e.join(" ")}AlterTSConfigurationStmt(t,s){let e=["ALTER","TEXT","SEARCH","CONFIGURATION"];if(t.cfgname&&t.cfgname.length>0){let i=p.unwrapList(t.cfgname).map(r=>this.visit(r,s));e.push(i.join("."));}if(t.kind)switch(t.kind){case "ALTER_TSCONFIG_ADD_MAPPING":if(e.push("ADD","MAPPING","FOR"),t.tokentype&&t.tokentype.length>0){let i=p.unwrapList(t.tokentype).map(r=>this.visit(r,s));e.push(i.join(", "));}if(t.dicts&&t.dicts.length>0){e.push("WITH");let i=p.unwrapList(t.dicts).map(r=>r.List&&r.List.items?p.unwrapList(r.List.items).map(n=>this.visit(n,s)).join("."):this.visit(r,s));e.push(i.join(", "));}break;case "ALTER_TSCONFIG_ALTER_MAPPING_FOR_TOKEN":if(e.push("ALTER","MAPPING","FOR"),t.tokentype&&t.tokentype.length>0){let i=p.unwrapList(t.tokentype).map(r=>this.visit(r,s));e.push(i.join(", "));}if(t.dicts&&t.dicts.length>0){e.push("WITH");let i=p.unwrapList(t.dicts).map(r=>r.List&&r.List.items?p.unwrapList(r.List.items).map(n=>this.visit(n,s)).join("."):this.visit(r,s));e.push(i.join(", "));}break;case "ALTER_TSCONFIG_REPLACE_DICT":if(e.push("ALTER","MAPPING","REPLACE"),t.dicts&&t.dicts.length>=2){let i=p.unwrapList(t.dicts).map(r=>r.List&&r.List.items?p.unwrapList(r.List.items).map(n=>this.visit(n,s)).join("."):this.visit(r,s));e.push(i[0],"WITH",i.slice(1).join(", "));}break;case "ALTER_TSCONFIG_REPLACE_DICT_FOR_TOKEN":if(e.push("ALTER","MAPPING","FOR"),t.tokentype&&t.tokentype.length>0){let i=p.unwrapList(t.tokentype).map(r=>this.visit(r,s));e.push(i.join(", "));}if(t.dicts&&t.dicts.length>=2){e.push("REPLACE");let i=p.unwrapList(t.dicts).map(r=>r.List&&r.List.items?p.unwrapList(r.List.items).map(n=>this.visit(n,s)).join("."):this.visit(r,s));e.push(i[0],"WITH",i.slice(1).join(", "));}break;case "ALTER_TSCONFIG_DROP_MAPPING":if(e.push("DROP","MAPPING","FOR"),t.tokentype&&t.tokentype.length>0){let i=p.unwrapList(t.tokentype).map(r=>this.visit(r,s));e.push(i.join(", "));}break;default:throw new Error(`Unsupported AlterTSConfigurationStmt kind: ${t.kind}`)}return e.join(" ")}ClosePortalStmt(t,s){let e=["CLOSE"];return t.portalname?e.push(h.quoteIdentifier(t.portalname)):e.push("ALL"),e.join(" ")}FetchStmt(t,s){let e=[t.ismove?"MOVE":"FETCH"],i=t.howMany===9223372036854776e3;if(t.direction)switch(t.direction){case "FETCH_FORWARD":i?e.push("FORWARD","ALL"):t.howMany!==void 0&&t.howMany!==null?e.push("FORWARD",t.howMany.toString()):e.push("FORWARD");break;case "FETCH_BACKWARD":i?e.push("BACKWARD","ALL"):t.howMany!==void 0&&t.howMany!==null?e.push("BACKWARD",t.howMany.toString()):e.push("BACKWARD");break;case "FETCH_ABSOLUTE":t.howMany!==void 0&&t.howMany!==null&&e.push("ABSOLUTE",t.howMany.toString());break;case "FETCH_RELATIVE":t.howMany!==void 0&&t.howMany!==null?e.push("RELATIVE",t.howMany.toString()):e.push("RELATIVE","0");break;default:throw new Error(`Unsupported FetchStmt direction: ${t.direction}`)}else i&&e.push("ALL");return t.portalname&&e.push(h.quoteIdentifier(t.portalname)),e.join(" ")}AlterStatsStmt(t,s){let e=["ALTER","STATISTICS"];if(t.defnames&&t.defnames.length>0){let i=p.unwrapList(t.defnames).map(r=>this.visit(r,s));e.push(i.join("."));}return e.push("SET","STATISTICS"),t.stxstattarget&&e.push(this.visit(t.stxstattarget,s)),e.join(" ")}ObjectWithArgs(t,s){let e="";if(t.objname&&t.objname.length>0){let i=s.spawn("ObjectWithArgs");e=p.unwrapList(t.objname).map(n=>this.visit(n,i)).join(".");}if(t.objfuncargs&&t.objfuncargs.length>0){let i=p.unwrapList(t.objfuncargs).map(r=>this.visit(r,s));e+=`(${i.join(", ")})`;}else if(t.objargs&&t.objargs.length>0){let i=p.unwrapList(t.objargs).map(r=>!r||Object.keys(r).length===0?"NONE":this.visit(r,s));e+=`(${i.join(", ")})`;}else t.args_unspecified||((s.parentNodeTypes.includes("CommentStmt")||s.parentNodeTypes.includes("DropStmt"))&&s.objtype==="OBJECT_AGGREGATE"?e+="(*)":s.parentNodeTypes.includes("CreateOpClassItem")||(e+="()"));return e}AlterOperatorStmt(t,s){let e=["ALTER","OPERATOR"];if(t.opername&&e.push(this.ObjectWithArgs(t.opername,s)),e.push("SET"),t.options&&t.options.length>0){let i=s.spawn("AlterOperatorStmt"),r=p.unwrapList(t.options).map(n=>this.visit(n,i));e.push(`(${r.join(", ")})`);}return e.join(" ")}AlterFdwStmt(t,s){let e=["ALTER","FOREIGN","DATA","WRAPPER"];if(t.fdwname&&e.push(h.quoteIdentifier(t.fdwname)),t.func_options&&t.func_options.length>0){let i=s.spawn("AlterFdwStmt"),r=p.unwrapList(t.func_options).map(n=>this.visit(n,i));e.push(r.join(" "));}if(t.options&&t.options.length>0){e.push("OPTIONS");let i=s.spawn("AlterFdwStmt"),r=p.unwrapList(t.options).map(n=>this.visit(n,i));e.push(`(${r.join(", ")})`);}return e.join(" ")}CreateForeignServerStmt(t,s){let e=["CREATE","SERVER"];if(t.if_not_exists&&e.push("IF","NOT","EXISTS"),t.servername&&e.push(h.quoteIdentifier(t.servername)),t.servertype&&e.push("TYPE",h.escape(t.servertype)),t.version&&e.push("VERSION",h.escape(t.version)),t.fdwname&&e.push("FOREIGN","DATA","WRAPPER",h.quoteIdentifier(t.fdwname)),t.options&&t.options.length>0){e.push("OPTIONS"),e.push("(");let i=s.spawn("CreateForeignServerStmt"),r=p.unwrapList(t.options).map(n=>this.visit(n,i));e.push(r.join(", ")),e.push(")");}return e.join(" ")}AlterForeignServerStmt(t,s){let e=["ALTER","SERVER"];if(t.servername&&e.push(h.quoteIdentifier(t.servername)),t.version&&e.push("VERSION",h.escape(t.version)),t.options&&t.options.length>0){e.push("OPTIONS"),e.push("(");let i=s.spawn("AlterForeignServerStmt"),r=p.unwrapList(t.options).map(n=>this.visit(n,i));e.push(r.join(", ")),e.push(")");}return e.join(" ")}AlterUserMappingStmt(t,s){let e=["ALTER","USER","MAPPING","FOR"];if(t.user?e.push(this.RoleSpec(t.user,s)):e.push("CURRENT_USER"),e.push("SERVER"),t.servername&&e.push(h.quoteIdentifier(t.servername)),t.options&&t.options.length>0){e.push("OPTIONS");let i=s.spawn("AlterUserMappingStmt"),r=p.unwrapList(t.options).map(n=>this.visit(n,i));e.push(`(${r.join(", ")})`);}return e.join(" ")}DropUserMappingStmt(t,s){let e=["DROP","USER","MAPPING"];return t.missing_ok&&e.push("IF","EXISTS"),e.push("FOR"),t.user?e.push(this.RoleSpec(t.user,s)):e.push("CURRENT_USER"),e.push("SERVER"),t.servername&&e.push(h.quoteIdentifier(t.servername)),e.join(" ")}ImportForeignSchemaStmt(t,s){let e=["IMPORT","FOREIGN","SCHEMA"];if(t.remote_schema&&e.push(h.quoteIdentifier(t.remote_schema)),t.list_type)switch(t.list_type){case "FDW_IMPORT_SCHEMA_ALL":break;case "FDW_IMPORT_SCHEMA_LIMIT_TO":if(e.push("LIMIT","TO"),t.table_list&&t.table_list.length>0){let i=p.unwrapList(t.table_list).map(r=>this.visit(r,s));e.push(`(${i.join(", ")})`);}break;case "FDW_IMPORT_SCHEMA_EXCEPT":if(e.push("EXCEPT"),t.table_list&&t.table_list.length>0){let i=p.unwrapList(t.table_list).map(r=>this.visit(r,s));e.push(`(${i.join(", ")})`);}break;default:throw new Error(`Unsupported ImportForeignSchemaStmt list_type: ${t.list_type}`)}if(e.push("FROM","SERVER"),t.server_name&&e.push(h.quoteIdentifier(t.server_name)),e.push("INTO"),t.local_schema&&e.push(h.quoteIdentifier(t.local_schema)),t.options&&t.options.length>0){let i=s.spawn("ImportForeignSchemaStmt"),r=p.unwrapList(t.options).map(n=>this.visit(n,i));e.push(`OPTIONS (${r.join(", ")})`);}return e.join(" ")}ClusterStmt(t,s){let e=["CLUSTER"];if(t.relation&&(e.push(this.RangeVar(t.relation,s)),t.indexname&&e.push("USING",h.quoteIdentifier(t.indexname))),t.params&&t.params.length>0){let i=p.unwrapList(t.params).map(r=>this.visit(r,s));e.push(`(${i.join(", ")})`);}return e.join(" ")}VacuumStmt(t,s){let e=[t.is_vacuumcmd?"VACUUM":"ANALYZE"];if(t.options&&t.options.length>0){let i=p.unwrapList(t.options).map(r=>this.visit(r,s));e.push(`(${i.join(", ")})`);}if(t.rels&&t.rels.length>0){let i=p.unwrapList(t.rels).map(r=>this.visit(r,s));e.push(i.join(", "));}return e.join(" ")}ExplainStmt(t,s){let e=["EXPLAIN"];if(t.options&&t.options.length>0){let i=s.spawn("ExplainStmt"),r=p.unwrapList(t.options).map(n=>this.visit(n,i));e.push(`(${r.join(", ")})`);}return t.query&&e.push(this.visit(t.query,s)),e.join(" ")}ReindexStmt(t,s){let e=["REINDEX"];if(t.params&&t.params.length>0){let i=p.unwrapList(t.params).map(r=>this.visit(r,s));e.push(`(${i.join(", ")})`);}if(t.kind)switch(t.kind){case "REINDEX_OBJECT_INDEX":e.push("INDEX");break;case "REINDEX_OBJECT_TABLE":e.push("TABLE");break;case "REINDEX_OBJECT_SCHEMA":e.push("SCHEMA");break;case "REINDEX_OBJECT_SYSTEM":e.push("SYSTEM");break;case "REINDEX_OBJECT_DATABASE":e.push("DATABASE");break;default:throw new Error(`Unsupported ReindexStmt kind: ${t.kind}`)}return t.relation&&e.push(this.RangeVar(t.relation,s)),t.name&&e.push(h.quoteIdentifier(t.name)),e.join(" ")}CallStmt(t,s){let e=["CALL"];if(t.funccall){let i=t.funccall;if(i.funcname&&i.funcname.length>0){let n=i.funcname.map(u=>u.String?u.String.sval:this.visit(u,s)).join("."),a="";i.args&&i.args.length>0?a=`(${i.args.map(l=>this.visit(l,s)).join(", ")})`:a="()",e.push(`${n}${a}`);}}else if(t.funcexpr)e.push(this.FuncExpr(t.funcexpr,s));else throw new Error("CallStmt requires either funccall or funcexpr");return e.join(" ")}CreatedbStmt(t,s){let e=["CREATE DATABASE"];if(!t.dbname)throw new Error("CreatedbStmt requires dbname");if(e.push(h.quoteIdentifier(t.dbname)),t.options&&t.options.length>0){let i=p.unwrapList(t.options).map(r=>this.visit(r,s)).join(" ");e.push("WITH",i);}return e.join(" ")}DropdbStmt(t,s){let e=["DROP DATABASE"];if(t.missing_ok&&e.push("IF EXISTS"),!t.dbname)throw new Error("DropdbStmt requires dbname");if(e.push(h.quoteIdentifier(t.dbname)),t.options&&t.options.length>0){let i=p.unwrapList(t.options).map(r=>this.visit(r,s)).join(" ");e.push("WITH",i);}return e.join(" ")}RenameStmt(t,s){let e=["ALTER"];if(!t.renameType)throw new Error("RenameStmt requires renameType");switch(t.renameType){case "OBJECT_TABLE":e.push("TABLE");break;case "OBJECT_VIEW":e.push("VIEW");break;case "OBJECT_INDEX":e.push("INDEX");break;case "OBJECT_SEQUENCE":e.push("SEQUENCE");break;case "OBJECT_FUNCTION":e.push("FUNCTION");break;case "OBJECT_PROCEDURE":e.push("PROCEDURE");break;case "OBJECT_SCHEMA":e.push("SCHEMA");break;case "OBJECT_DATABASE":e.push("DATABASE");break;case "OBJECT_COLUMN":t.relationType==="OBJECT_FOREIGN_TABLE"?e.push("FOREIGN TABLE"):t.relationType==="OBJECT_VIEW"?e.push("VIEW"):e.push("TABLE");break;case "OBJECT_DOMAIN":e.push("DOMAIN");break;case "OBJECT_TYPE":e.push("TYPE");break;case "OBJECT_DOMCONSTRAINT":e.push("DOMAIN");break;case "OBJECT_TABCONSTRAINT":e.push("TABLE");break;case "OBJECT_AGGREGATE":e.push("AGGREGATE");break;case "OBJECT_COLLATION":e.push("COLLATION");break;case "OBJECT_CONVERSION":e.push("CONVERSION");break;case "OBJECT_EXTENSION":e.push("EXTENSION");break;case "OBJECT_FOREIGN_SERVER":e.push("SERVER");break;case "OBJECT_FOREIGN_TABLE":e.push("FOREIGN TABLE");break;case "OBJECT_LANGUAGE":e.push("LANGUAGE");break;case "OBJECT_MATVIEW":e.push("MATERIALIZED VIEW");break;case "OBJECT_OPCLASS":e.push("OPERATOR CLASS");break;case "OBJECT_OPERATOR":e.push("OPERATOR");break;case "OBJECT_OPFAMILY":e.push("OPERATOR FAMILY");break;case "OBJECT_POLICY":e.push("POLICY"),t.subname&&e.push(h.quoteIdentifier(t.subname));break;case "OBJECT_PUBLICATION":e.push("PUBLICATION");break;case "OBJECT_ROLE":e.push("ROLE");break;case "OBJECT_RULE":e.push("RULE");break;case "OBJECT_SUBSCRIPTION":e.push("SUBSCRIPTION");break;case "OBJECT_TABLESPACE":e.push("TABLESPACE");break;case "OBJECT_TRIGGER":e.push("TRIGGER");break;case "OBJECT_TSCONFIGURATION":e.push("TEXT SEARCH CONFIGURATION");break;case "OBJECT_TSDICTIONARY":e.push("TEXT SEARCH DICTIONARY");break;case "OBJECT_TSPARSER":e.push("TEXT SEARCH PARSER");break;case "OBJECT_TSTEMPLATE":e.push("TEXT SEARCH TEMPLATE");break;case "OBJECT_FDW":e.push("FOREIGN DATA WRAPPER");break;case "OBJECT_EVENT_TRIGGER":e.push("EVENT TRIGGER");break;case "OBJECT_ATTRIBUTE":t.relationType==="OBJECT_TYPE"?e.push("TYPE"):e.push("TABLE");break;case "OBJECT_ROUTINE":e.push("ROUTINE");break;default:throw new Error(`Unsupported RenameStmt renameType: ${t.renameType}`)}if(t.missing_ok&&e.push("IF EXISTS"),t.renameType==="OBJECT_RULE"&&t.subname&&t.relation)e.push(h.quoteIdentifier(t.subname)),e.push("ON"),e.push(this.RangeVar(t.relation,s));else if(t.relation){let i=s.spawn("RenameStmt",{objtype:t.relationType});t.renameType==="OBJECT_POLICY"&&e.push("ON"),e.push(this.RangeVar(t.relation,i));}else if(t.object)if((t.renameType==="OBJECT_OPFAMILY"||t.renameType==="OBJECT_OPCLASS")&&t.object.List){let i=p.unwrapList(t.object);if(i.length===2){let r=i[0].String?.sval||"",n=i[1].String?.sval||"";e.push(`${h.quoteIdentifier(n)} USING ${r}`);}else e.push(this.visit(t.object,s));}else if(t.renameType==="OBJECT_SCHEMA"&&t.object.List){let i=p.unwrapList(t.object);i.length>0&&i[0].String?e.push(this.quoteIfNeeded(i[0].String.sval)):e.push(this.visit(t.object,s));}else e.push(this.visit(t.object,s));if(t.renameType==="OBJECT_COLUMN"&&t.subname?e.push("RENAME COLUMN",h.quoteIdentifier(t.subname),"TO"):t.renameType==="OBJECT_DOMCONSTRAINT"&&t.subname?e.push("RENAME CONSTRAINT",h.quoteIdentifier(t.subname),"TO"):t.renameType==="OBJECT_TABCONSTRAINT"&&t.subname?e.push("RENAME CONSTRAINT",h.quoteIdentifier(t.subname),"TO"):t.renameType==="OBJECT_ATTRIBUTE"&&t.subname?e.push("RENAME ATTRIBUTE",h.quoteIdentifier(t.subname),"TO"):t.renameType==="OBJECT_ROLE"&&t.subname?e.push(h.quoteIdentifier(t.subname),"RENAME TO"):t.renameType==="OBJECT_SCHEMA"&&t.subname?e.push(this.quoteIfNeeded(t.subname),"RENAME TO"):(t.renameType,e.push("RENAME TO")),!t.newname)throw new Error("RenameStmt requires newname");return e.push(h.quoteIdentifier(t.newname)),t.behavior==="DROP_CASCADE"&&e.push("CASCADE"),e.join(" ")}AlterOwnerStmt(t,s){let e=["ALTER"];if(!t.objectType)throw new Error("AlterOwnerStmt requires objectType");if(e.push(this.getObjectTypeKeyword(t.objectType)),t.relation)e.push(this.RangeVar(t.relation,s));else if(t.object)if((t.objectType==="OBJECT_OPFAMILY"||t.objectType==="OBJECT_OPCLASS")&&t.object.List){let i=p.unwrapList(t.object);if(i.length===2){let r=i[0].String?.sval||"",n=i[1].String?.sval||"";e.push(`${h.quoteIdentifier(n)} USING ${r}`);}else e.push(this.visit(t.object,s));}else e.push(this.visit(t.object,s));if(e.push("OWNER TO"),!t.newowner)throw new Error("AlterOwnerStmt requires newowner");return e.push(this.RoleSpec(t.newowner,s)),e.join(" ")}GrantStmt(t,s){let e=[];if(t.is_grant?e.push("GRANT"):(e.push("REVOKE"),t.grant_option&&e.push("GRANT OPTION FOR")),t.privileges&&t.privileges.length>0){let i=s.spawn("GrantStmt"),r=p.unwrapList(t.privileges).map(n=>this.visit(n,i)).join(", ");e.push(r);}else e.push("ALL");if(e.push("ON"),t.objtype&&t.targtype==="ACL_TARGET_DEFAULTS")switch(t.objtype){case "OBJECT_TABLE":e.push("TABLES");break;case "OBJECT_SEQUENCE":e.push("SEQUENCES");break;case "OBJECT_FUNCTION":e.push("FUNCTIONS");break;case "OBJECT_PROCEDURE":e.push("PROCEDURES");break;case "OBJECT_ROUTINE":e.push("ROUTINES");break;case "OBJECT_TYPE":e.push("TYPES");break;case "OBJECT_SCHEMA":e.push("SCHEMAS");break;}switch(t.targtype){case "ACL_TARGET_OBJECT":if(t.objtype==="OBJECT_SCHEMA"?e.push("SCHEMA"):t.objtype==="OBJECT_LANGUAGE"?e.push("LANGUAGE"):t.objtype==="OBJECT_FUNCTION"?e.push("FUNCTION"):t.objtype==="OBJECT_PROCEDURE"?e.push("PROCEDURE"):t.objtype==="OBJECT_TYPE"?e.push("TYPE"):t.objtype==="OBJECT_DOMAIN"?e.push("DOMAIN"):t.objtype==="OBJECT_LARGEOBJECT"?e.push("LARGE OBJECT"):t.objtype==="OBJECT_FDW"?e.push("FOREIGN","DATA","WRAPPER"):t.objtype==="OBJECT_FOREIGN_SERVER"?e.push("FOREIGN","SERVER"):t.objtype==="OBJECT_DATABASE"&&e.push("DATABASE"),t.objects&&t.objects.length>0){let i=p.unwrapList(t.objects).map(r=>this.visit(r,s)).join(", ");e.push(i);}break;case "ACL_TARGET_ALL_IN_SCHEMA":switch(t.objtype){case "OBJECT_TABLE":e.push("ALL TABLES IN SCHEMA");break;case "OBJECT_SEQUENCE":e.push("ALL SEQUENCES IN SCHEMA");break;case "OBJECT_FUNCTION":e.push("ALL FUNCTIONS IN SCHEMA");break;case "OBJECT_PROCEDURE":e.push("ALL PROCEDURES IN SCHEMA");break;case "OBJECT_ROUTINE":e.push("ALL ROUTINES IN SCHEMA");break;case "OBJECT_TYPE":e.push("ALL TYPES IN SCHEMA");break;default:e.push("ALL TABLES IN SCHEMA");break}if(t.objects&&t.objects.length>0){let i=p.unwrapList(t.objects).map(r=>this.visit(r,s)).join(", ");e.push(i);}break;default:if(t.objects&&t.objects.length>0){let i=p.unwrapList(t.objects).map(r=>this.visit(r,s)).join(", ");e.push(i);}}if(t.is_grant?e.push("TO"):e.push("FROM"),t.grantees&&t.grantees.length>0){let i=p.unwrapList(t.grantees).map(r=>this.visit(r,s)).join(", ");e.push(i);}return t.grant_option&&t.is_grant&&e.push("WITH GRANT OPTION"),t.is_grant||(t.behavior==="DROP_CASCADE"?e.push("CASCADE"):t.behavior==="DROP_RESTRICT"&&e.push("RESTRICT")),e.join(" ")}GrantRoleStmt(t,s){let e=[],i=false,r=false,n=false,a,u,l;if(t.opt&&t.opt.length>0){let o=p.unwrapList(t.opt),f=o.find(E=>E.DefElem&&E.DefElem.defname==="inherit"),m=o.find(E=>E.String&&E.String.sval==="admin"||E.DefElem&&E.DefElem.defname==="admin"),T=o.find(E=>E.DefElem&&E.DefElem.defname==="set");f&&f.DefElem&&(i=true,a=f.DefElem.arg?.Boolean?.boolval),m&&(r=true,m.DefElem&&m.DefElem.arg&&(u=m.DefElem.arg.Boolean?.boolval)),T&&T.DefElem&&(n=true,l=T.DefElem.arg?.Boolean?.boolval);}if(t.is_grant?e.push("GRANT"):(e.push("REVOKE"),i?e.push("INHERIT OPTION FOR"):r&&e.push("ADMIN OPTION FOR")),t.granted_roles&&t.granted_roles.length>0){let o=p.unwrapList(t.granted_roles).map(f=>this.visit(f,s)).join(", ");e.push(o);}if(t.is_grant?e.push("TO"):e.push("FROM"),t.grantee_roles&&t.grantee_roles.length>0){let o=p.unwrapList(t.grantee_roles).map(f=>this.visit(f,s)).join(", ");e.push(o);}if(t.is_grant){let o=[];r&&(u===true?o.push("ADMIN OPTION"):u===false?o.push("ADMIN FALSE"):o.push("ADMIN OPTION")),i&&(a===true?o.push("INHERIT OPTION"):a===false&&o.push("INHERIT FALSE")),n&&(l===true?o.push("SET TRUE"):l===false&&o.push("SET FALSE")),o.length>0&&e.push("WITH",o.join(", "));}return e.join(" ")}SecLabelStmt(t,s){let e=["SECURITY LABEL"];if(t.provider&&e.push("FOR",h.quoteIdentifier(t.provider)),e.push("ON"),t.objtype)switch(t.objtype){case "OBJECT_TABLE":e.push("TABLE");break;case "OBJECT_COLUMN":e.push("COLUMN");break;case "OBJECT_FUNCTION":e.push("FUNCTION");break;case "OBJECT_SCHEMA":e.push("SCHEMA");break;case "OBJECT_DATABASE":e.push("DATABASE");break;case "OBJECT_ROLE":e.push("ROLE");break;default:e.push(t.objtype.replace("OBJECT_",""));}return t.object&&e.push(this.visit(t.object,s)),e.push("IS"),t.label?e.push(`'${t.label}'`):e.push("NULL"),e.join(" ")}AlterDefaultPrivilegesStmt(t,s){let e=["ALTER DEFAULT PRIVILEGES"];if(t.options&&t.options.length>0){let i=p.unwrapList(t.options);for(let r of i){let n=this.getNodeData(r);if(n.defname==="schemas"){if(e.push("IN SCHEMA"),n.arg){let a=p.unwrapList(n.arg).map(u=>this.visit(u,s)).join(", ");e.push(a);}}else if(n.defname==="roles"&&(e.push("FOR ROLE"),n.arg)){let a=p.unwrapList(n.arg).map(u=>this.visit(u,s)).join(", ");e.push(a);}}}if(t.action){let i=this.GrantStmt(t.action,s);if(s.isPretty())return e.join(" ")+s.newline()+s.indent(i);e.push(i);}return e.join(" ")}CreateConversionStmt(t,s){let e=["CREATE"];if(t.def&&e.push("DEFAULT"),e.push("CONVERSION"),t.conversion_name&&t.conversion_name.length>0){let i=p.unwrapList(t.conversion_name).map(r=>this.visit(r,s)).join(".");e.push(i);}if(t.for_encoding_name&&e.push("FOR",`'${t.for_encoding_name}'`),t.to_encoding_name&&e.push("TO",`'${t.to_encoding_name}'`),t.func_name&&t.func_name.length>0){e.push("FROM");let i=p.unwrapList(t.func_name).map(r=>this.visit(r,s)).join(".");e.push(i);}return e.join(" ")}CreateCastStmt(t,s){let e=["CREATE CAST"];if(e.push("("),t.sourcetype&&e.push(this.TypeName(t.sourcetype,s)),e.push("AS"),t.targettype&&e.push(this.TypeName(t.targettype,s)),e.push(")"),t.func?(e.push("WITH FUNCTION"),e.push(this.ObjectWithArgs(t.func,s))):t.inout?e.push("WITH INOUT"):e.push("WITHOUT FUNCTION"),t.context)switch(t.context){case "COERCION_IMPLICIT":e.push("AS IMPLICIT");break;case "COERCION_ASSIGNMENT":e.push("AS ASSIGNMENT");break;case "COERCION_EXPLICIT":break;default:throw new Error(`Unsupported CreateCastStmt context: ${t.context}`)}else t.context==="COERCION_ASSIGNMENT"&&e.push("AS ASSIGNMENT");return e.join(" ")}CreatePLangStmt(t,s){let e=["CREATE"];if(t.replace&&e.push("OR REPLACE"),t.pltrusted&&e.push("TRUSTED"),e.push("LANGUAGE"),t.plname&&e.push(h.quoteIdentifier(t.plname)),t.plhandler&&t.plhandler.length>0){e.push("HANDLER");let i=p.unwrapList(t.plhandler).map(r=>this.visit(r,s)).join(".");e.push(i);}if(t.plinline&&t.plinline.length>0){e.push("INLINE");let i=p.unwrapList(t.plinline).map(r=>this.visit(r,s)).join(".");e.push(i);}if(t.plvalidator&&t.plvalidator.length>0){e.push("VALIDATOR");let i=p.unwrapList(t.plvalidator).map(r=>this.visit(r,s)).join(".");e.push(i);}return e.join(" ")}CreateTransformStmt(t,s){let e=["CREATE"];t.replace&&e.push("OR REPLACE"),e.push("TRANSFORM FOR"),t.type_name&&e.push(this.TypeName(t.type_name,s)),e.push("LANGUAGE"),t.lang&&e.push(h.quoteIdentifier(t.lang)),e.push("(");let i=[];if(t.fromsql){let r=this.ObjectWithArgs(t.fromsql,s);i.push(`FROM SQL WITH FUNCTION ${r}`);}if(t.tosql){let r=this.ObjectWithArgs(t.tosql,s);i.push(`TO SQL WITH FUNCTION ${r}`);}return e.push(i.join(", ")),e.push(")"),e.join(" ")}CreateTrigStmt(t,s){let e=["CREATE"];if(t.replace&&e.push("OR REPLACE"),t.isconstraint&&e.push("CONSTRAINT"),e.push("TRIGGER"),t.trigname&&e.push(h.quoteIdentifier(t.trigname)),s.isPretty()){let i=[],r=[];t.timing&2?r.push("BEFORE"):t.timing&64?r.push("INSTEAD OF"):r.push("AFTER");let n=[];if(t.events&4&&n.push("INSERT"),t.events&8&&n.push("DELETE"),t.events&16){let u="UPDATE";if(t.columns&&t.columns.length>0){let l=p.unwrapList(t.columns).map(o=>this.visit(o,s)).join(", ");u+=" OF "+l;}n.push(u);}if(t.events&32&&n.push("TRUNCATE"),i.push(s.indent(r.join(" ")+" "+n.join(" OR "))),t.relation&&i.push(s.indent("ON "+this.RangeVar(t.relation,s))),t.transitionRels&&t.transitionRels.length>0){let u=p.unwrapList(t.transitionRels).map(l=>this.visit(l,s)).join(" ");i.push(s.indent("REFERENCING "+u));}if(t.deferrable&&i.push(s.indent("DEFERRABLE")),t.initdeferred&&i.push(s.indent("INITIALLY DEFERRED")),t.row?i.push(s.indent("FOR EACH ROW")):i.push(s.indent("FOR EACH STATEMENT")),t.whenClause){let u="WHEN ("+this.visit(t.whenClause,s)+")";i.push(s.indent(u));}let a="EXECUTE";if(t.funcname&&t.funcname.length>0){let u=p.unwrapList(t.funcname).map(l=>this.visit(l,s)).join(".");a+=" PROCEDURE "+u;}if(t.args&&t.args.length>0){let u=s.spawn("CreateTrigStmt",{isStringLiteral:true}),l=p.unwrapList(t.args).map(o=>this.visit(o,u)).join(", ");a+="("+l+")";}else a+="()";return i.push(s.indent(a)),e.join(" ")+s.newline()+i.join(s.newline())}else {let i=[];t.timing&2?i.push("BEFORE"):t.timing&64?i.push("INSTEAD OF"):i.push("AFTER"),e.push(i.join(" "));let r=[];if(t.events&4&&r.push("INSERT"),t.events&8&&r.push("DELETE"),t.events&16&&r.push("UPDATE"),t.events&32&&r.push("TRUNCATE"),e.push(r.join(" OR ")),t.columns&&t.columns.length>0){e.push("OF");let n=p.unwrapList(t.columns).map(a=>this.visit(a,s)).join(", ");e.push(n);}if(e.push("ON"),t.relation&&e.push(this.RangeVar(t.relation,s)),t.constrrel&&(e.push("FROM"),e.push(this.RangeVar(t.constrrel,s))),t.deferrable&&e.push("DEFERRABLE"),t.initdeferred&&e.push("INITIALLY DEFERRED"),t.transitionRels&&t.transitionRels.length>0){e.push("REFERENCING");let n=p.unwrapList(t.transitionRels).map(a=>this.visit(a,s)).join(" ");e.push(n);}if(t.row?e.push("FOR EACH ROW"):e.push("FOR EACH STATEMENT"),t.whenClause&&(e.push("WHEN"),e.push("("),e.push(this.visit(t.whenClause,s)),e.push(")")),e.push("EXECUTE"),t.funcname&&t.funcname.length>0){let n=p.unwrapList(t.funcname).map(a=>this.visit(a,s)).join(".");e.push("FUNCTION",n);}if(t.args&&t.args.length>0){e.push("(");let n=s.spawn("CreateTrigStmt",{isStringLiteral:true}),a=p.unwrapList(t.args).map(u=>this.visit(u,n)).join(", ");e.push(a),e.push(")");}else e.push("()");return e.join(" ")}}TriggerTransition(t,s){let e=[];return t.isNew?e.push("NEW TABLE AS"):e.push("OLD TABLE AS"),t.name&&e.push(h.quoteIdentifier(t.name)),e.join(" ")}CreateEventTrigStmt(t,s){let e=["CREATE EVENT TRIGGER"];if(t.trigname&&e.push(h.quoteIdentifier(t.trigname)),e.push("ON"),t.eventname&&e.push(t.eventname),t.whenclause&&t.whenclause.length>0){e.push("WHEN");let i=s.spawn("CreateEventTrigStmt"),r=p.unwrapList(t.whenclause).map(n=>this.visit(n,i)).join(" AND ");e.push(r);}if(e.push("EXECUTE"),t.funcname&&t.funcname.length>0){let i=p.unwrapList(t.funcname).map(r=>this.visit(r,s)).join(".");e.push("PROCEDURE",i+"()");}return e.join(" ")}AlterEventTrigStmt(t,s){let e=["ALTER EVENT TRIGGER"];if(t.trigname&&e.push(h.quoteIdentifier(t.trigname)),t.tgenabled)switch(t.tgenabled){case "O":e.push("ENABLE");break;case "D":e.push("DISABLE");break;case "R":e.push("ENABLE REPLICA");break;case "A":e.push("ENABLE ALWAYS");break;default:throw new Error(`Unsupported trigger enable state: ${t.tgenabled}`)}return e.join(" ")}CreateOpClassStmt(t,s){let e=["CREATE OPERATOR CLASS"];if(t.opclassname&&t.opclassname.length>0){let i=p.unwrapList(t.opclassname).map(r=>this.visit(r,s)).join(".");e.push(i);}if(t.isDefault&&e.push("DEFAULT"),e.push("FOR TYPE"),t.datatype&&e.push(this.TypeName(t.datatype,s)),e.push("USING"),t.amname&&e.push(t.amname),t.opfamilyname&&t.opfamilyname.length>0){e.push("FAMILY");let i=p.unwrapList(t.opfamilyname).map(r=>this.visit(r,s)).join(".");e.push(i);}if(e.push("AS"),t.items&&t.items.length>0){let i=p.unwrapList(t.items).map(r=>this.visit(r,s)).join(", ");e.push(i);}return e.join(" ")}CreateOpFamilyStmt(t,s){let e=["CREATE OPERATOR FAMILY"];if(t.opfamilyname&&t.opfamilyname.length>0){let i=p.unwrapList(t.opfamilyname).map(r=>this.visit(r,s)).join(".");e.push(i);}return e.push("USING"),t.amname&&e.push(t.amname),e.join(" ")}AlterOpFamilyStmt(t,s){let e=["ALTER OPERATOR FAMILY"];if(t.opfamilyname&&t.opfamilyname.length>0){let i=p.unwrapList(t.opfamilyname).map(r=>this.visit(r,s)).join(".");e.push(i);}if(e.push("USING"),t.amname&&e.push(t.amname),t.isDrop?e.push("DROP"):e.push("ADD"),t.items&&t.items.length>0){let i=p.unwrapList(t.items).map(r=>this.visit(r,s)).join(", ");e.push(i);}return e.join(" ")}MergeStmt(t,s){let e=[];if(t.withClause&&e.push(this.WithClause(t.withClause,s)),e.push("MERGE INTO"),t.relation&&e.push(this.RangeVar(t.relation,s)),t.sourceRelation&&(e.push("USING"),e.push(this.visit(t.sourceRelation,s))),t.joinCondition&&(e.push("ON"),e.push(this.visit(t.joinCondition,s))),t.mergeWhenClauses&&t.mergeWhenClauses.length>0){let i=p.unwrapList(t.mergeWhenClauses).map(r=>this.visit(r,s)).join(" ");e.push(i);}return e.join(" ")}AlterTableMoveAllStmt(t,s){let e=["ALTER"];return t.objtype==="OBJECT_TABLE"?e.push("TABLE"):t.objtype==="OBJECT_INDEX"?e.push("INDEX"):e.push("TABLE"),e.push("ALL","IN","TABLESPACE"),t.orig_tablespacename&&e.push(h.quoteIdentifier(t.orig_tablespacename)),e.push("SET","TABLESPACE"),t.new_tablespacename&&e.push(h.quoteIdentifier(t.new_tablespacename)),t.nowait&&e.push("NOWAIT"),e.join(" ")}CreateSeqStmt(t,s){let e=["CREATE"];if(t.sequence&&t.sequence.relpersistence==="t"&&e.push("TEMPORARY"),e.push("SEQUENCE"),t.if_not_exists&&e.push("IF NOT EXISTS"),t.sequence){let i=[],r=t.sequence;r.schemaname&&i.push(h.quoteIdentifier(r.schemaname)),r.relname&&i.push(h.quoteIdentifier(r.relname)),e.push(i.join("."));}if(t.options&&t.options.length>0){let i=s.spawn("CreateSeqStmt"),r=p.unwrapList(t.options).filter(n=>n!=null&&this.getNodeType(n)!=="undefined").map(n=>{try{return this.visit(n,i)}catch(a){return console.warn(`Error processing option in CreateSeqStmt: ${a instanceof Error?a.message:String(a)}`),""}}).filter(n=>n!=="").join(" ");r&&e.push(r);}return e.join(" ")}AlterSeqStmt(t,s){let e=["ALTER","SEQUENCE"];if(t.missing_ok&&e.push("IF EXISTS"),t.sequence){let i=[],r=t.sequence;r.schemaname&&i.push(h.quoteIdentifier(r.schemaname)),r.relname&&i.push(h.quoteIdentifier(r.relname)),e.push(i.join("."));}if(t.options&&t.options.length>0){let i=s.spawn("AlterSeqStmt"),r=p.unwrapList(t.options).filter(n=>n&&n!==void 0).map(n=>{try{return !n||this.getNodeType(n)==="undefined"?"":this.visit(n,i)}catch(a){return console.warn(`Error processing option in AlterSeqStmt: ${a instanceof Error?a.message:String(a)}`),""}}).filter(n=>n&&n.trim().length>0).join(" ");r&&e.push(r);}return t.for_identity&&e.push("FOR IDENTITY"),e.join(" ")}CompositeTypeStmt(t,s){let e=["CREATE","TYPE"];if(t.typevar){let i=s.spawn("CompositeTypeStmt");e.push(this.RangeVar(t.typevar,i));}if(e.push("AS"),t.coldeflist&&t.coldeflist.length>0){let i=p.unwrapList(t.coldeflist).map(r=>this.visit(r,s)).join(", ");e.push(`(${i})`);}else e.push("()");return e.join(" ")}CreateRangeStmt(t,s){let e=["CREATE","TYPE"];if(t.typeName&&t.typeName.length>0){let i=p.unwrapList(t.typeName).map(r=>this.visit(r,s)).join(".");e.push(i);}if(e.push("AS","RANGE"),t.params&&t.params.length>0){let i=p.unwrapList(t.params).map(r=>{let n=this.getNodeData(r);if(n.defname&&n.arg){let a=this.visit(n.arg,s);return `${n.defname} = ${a}`}return this.visit(r,s)});e.push(`(${i.join(", ")})`);}return e.join(" ")}AlterEnumStmt(t,s){let e=["ALTER","TYPE"];if(t.typeName&&t.typeName.length>0){let i=p.unwrapList(t.typeName).map(r=>this.visit(r,s)).join(".");e.push(i);}if(t.oldVal&&t.newVal){let i=t.oldVal.replace(/'/g,"''"),r=t.newVal.replace(/'/g,"''");e.push("RENAME","VALUE",`'${i}'`,"TO",`'${r}'`);}else if(t.newVal){e.push("ADD","VALUE"),t.skipIfNewValExists&&e.push("IF NOT EXISTS");let i=t.newVal.replace(/'/g,"''");if(e.push(`'${i}'`),t.newValNeighbor){let r=t.newValNeighbor.replace(/'/g,"''");t.newValIsAfter?e.push("AFTER",`'${r}'`):e.push("BEFORE",`'${r}'`);}}return e.join(" ")}AlterTypeStmt(t,s){let e=["ALTER","TYPE"];if(t.typeName&&t.typeName.length>0){let i=p.unwrapList(t.typeName).map(r=>this.visit(r,s)).join(".");e.push(i);}if(e.push("SET"),t.options&&t.options.length>0){let i=p.unwrapList(t.options).map(r=>{let n=this.getNodeData(r);if(n.defname&&n.arg){let a=this.visit(n.arg,s);return `${n.defname} = ${a}`}return this.visit(r,s)});e.push(`(${i.join(", ")})`);}return e.join(" ")}AlterRoleStmt(t,s){let e=t.options&&p.unwrapList(t.options).some(r=>r.DefElem&&r.DefElem.defname==="rolemembers"),i=["ALTER",e?"GROUP":"ROLE"];if(t.role&&i.push(this.RoleSpec(t.role,s)),t.options){let r=s.spawn("AlterRoleStmt");if(e){let n=p.unwrapList(t.options).find(a=>a.DefElem&&a.DefElem.defname==="rolemembers");if(n&&n.DefElem){let a=t.action===1?"ADD":"DROP";if(i.push(a,"USER"),n.DefElem.arg&&n.DefElem.arg.List){let u=p.unwrapList(n.DefElem.arg.List.items).map(l=>this.visit(l,r)).join(", ");i.push(u);}}}else {let n=p.unwrapList(t.options).map(a=>this.visit(a,r)).join(" ");n&&i.push(n);}}return i.join(" ")}DropRoleStmt(t,s){let e=["DROP","ROLE"];if(t.missing_ok&&e.push("IF EXISTS"),t.roles){let i=p.unwrapList(t.roles).map(r=>this.visit(r,s)).join(", ");e.push(i);}return e.join(" ")}targetList(t,s){return !t||!Array.isArray(t)?"":t.map(e=>this.visit(e,s)).join(", ")}CreateAggregateStmt(t,s){let e=["CREATE"];if(t.replace&&e.push("OR REPLACE"),e.push("AGGREGATE"),t.defnames&&t.defnames.length>0){let r=p.unwrapList(t.defnames).map(n=>this.visit(n,s)).join(".");e.push(r);}if(e.push("("),t.args&&t.args.length>0){let r=p.unwrapList(t.args).map(n=>this.visit(n,s)).join(", ");e.push(r);}else e.push("*");e.push(")"),e.push("(");let i=[];if(t.definition&&t.definition.length>0){let r=p.unwrapList(t.definition).map(n=>{let a=this.getNodeData(n);return a.defname==="sfunc"||a.defname==="sfunc1"?`SFUNC = ${this.visit(a.arg,s)}`:a.defname==="stype"||a.defname==="stype1"?`STYPE = ${this.visit(a.arg,s)}`:a.defname==="basetype"?`BASETYPE = ${this.visit(a.arg,s)}`:a.defname==="finalfunc"?`FINALFUNC = ${this.visit(a.arg,s)}`:a.defname==="initcond"||a.defname==="initcond1"?`INITCOND = ${this.visit(a.arg,s)}`:a.defname==="combinefunc"?`COMBINEFUNC = ${this.visit(a.arg,s)}`:a.defname==="serialfunc"?`SERIALFUNC = ${this.visit(a.arg,s)}`:a.defname==="deserialfunc"?`DESERIALFUNC = ${this.visit(a.arg,s)}`:a.defname==="parallel"?`PARALLEL = ${this.visit(a.arg,s)}`:this.visit(n,s)});i.push(...r);}return e.push(i.join(", ")),e.push(")"),e.join(" ")}CreateTableAsStmt(t,s){let e=["CREATE"];if(t.objtype==="OBJECT_MATVIEW"?e.push("MATERIALIZED VIEW"):t.into&&t.into.rel&&t.into.rel.relpersistence==="t"?e.push("TEMPORARY TABLE"):e.push("TABLE"),t.if_not_exists&&e.push("IF NOT EXISTS"),t.into&&t.into.rel&&e.push(this.RangeVar(t.into.rel,s)),t.into&&t.into.colNames&&t.into.colNames.length>0){e.push("(");let i=p.unwrapList(t.into.colNames).map(r=>this.visit(r,s)).join(", ");e.push(i),e.push(")");}if(t.into&&t.into.accessMethod&&(e.push("USING"),e.push(t.into.accessMethod)),t.into&&t.into.onCommit&&t.into.onCommit!=="ONCOMMIT_NOOP")switch(e.push("ON COMMIT"),t.into.onCommit){case "ONCOMMIT_PRESERVE_ROWS":e.push("PRESERVE ROWS");break;case "ONCOMMIT_DELETE_ROWS":e.push("DELETE ROWS");break;case "ONCOMMIT_DROP":e.push("DROP");break}if(e.push("AS"),t.query&&e.push(this.visit(t.query,s)),t.into&&t.into.options&&t.into.options.length>0){e.push("WITH");let i=p.unwrapList(t.into.options).map(r=>this.visit(r,s)).join(", ");e.push(`(${i})`);}return t.into&&t.into.skipData&&e.push("WITH NO DATA"),e.join(" ")}RefreshMatViewStmt(t,s){let e=["REFRESH","MATERIALIZED","VIEW"];return t.concurrent&&e.push("CONCURRENTLY"),t.relation&&e.push(this.visit(t.relation,s)),t.skipData&&e.push("WITH NO DATA"),e.join(" ")}AccessPriv(t,s){let e=[];if(t.priv_name?e.push(t.priv_name.toUpperCase()):e.push("ALL"),t.cols&&t.cols.length>0){e.push("(");let i=s.spawn("AccessPriv"),r=p.unwrapList(t.cols).map(n=>this.visit(n,i));e.push(r.join(", ")),e.push(")");}return e.join(" ")}aliasname(t,s){return typeof t=="string"?h.quoteIdentifier(t):this.visit(t,s)}DefineStmt(t,s){let e=[];if(!t.kind)throw new Error("DefineStmt requires kind property");switch(t.kind){case "OBJECT_OPERATOR":if(e.push("CREATE OPERATOR"),t.defnames&&t.defnames.length>0){let i=p.unwrapList(t.defnames).map((r,n)=>{if(n===t.defnames.length-1){let a=this.getNodeData(r);if(a&&a.sval)return a.sval}return this.visit(r,s)});e.push(i.join("."));}if(t.definition&&t.definition.length>0){e.push("(");let i=p.unwrapList(t.definition).map(r=>{if(r.DefElem){let n=r.DefElem,a=n.defname,u=n.arg;if(a&&u){let l=h.quoteIdentifier(a),o=l!==a?l:this.preserveOperatorDefElemCase(a);if((a.toLowerCase()==="commutator"||a.toLowerCase()==="negator")&&u.List){let f=p.unwrapList(u.List.items);if(f.length===1&&f[0].String)return `${o} = ${f[0].String.sval}`}return a.toLowerCase()==="commutator"||a.toLowerCase()==="negator"?`${o} = ${this.visit(u,s)}`:`${o} = ${this.visit(u,s)}`}else if(a&&!u)return a==="Hashes"||a==="Merges"?h.quoteIdentifier(a):this.preserveOperatorDefElemCase(a).toUpperCase()}return this.visit(r,s)});e.push(i.join(", ")),e.push(")");}break;case "OBJECT_TYPE":if(e.push("CREATE TYPE"),t.defnames&&t.defnames.length>0&&e.push(p.unwrapList(t.defnames).map(i=>this.visit(i,s)).join(".")),t.definition&&t.definition.length>0){let i=s.spawn("DefineStmt"),r=p.unwrapList(t.definition).map(n=>this.visit(n,i));e.push(`(${r.join(", ")})`);}break;case "OBJECT_AGGREGATE":if(e.push("CREATE"),t.replace&&e.push("OR REPLACE"),e.push("AGGREGATE"),t.defnames&&t.defnames.length>0){let i=p.unwrapList(t.defnames).map(r=>this.visit(r,s));e.push(i.join("."));}if(t.args&&t.args.length>0){let i=p.unwrapList(t.args),r=i.some(u=>u.Integer&&u.Integer.ival===1),n=i.length>=2&&i[0].List&&i[0].List.items&&i[0].List.items.length===1&&i[0].List.items[0].FunctionParameter&&i[0].List.items[0].FunctionParameter.mode==="FUNC_PARAM_DEFAULT"&&i[1].Integer&&Object.keys(i[1].Integer).length===0,a=i.filter(u=>!(u.Integer&&(u.Integer.ival===-1||u.Integer.ival===1)||u.Integer&&Object.keys(u.Integer).length===0&&n));if(a.length>0)if(n){let u=a[0];if(u.List&&u.List.items&&u.List.items[0].FunctionParameter){let l=u.List.items[0].FunctionParameter,o;if(l.argType&&l.argType.names){let f=l.argType.names;f.length>=2&&f[0].String&&f[0].String.sval==="pg_catalog"?o=f[1].String.sval:f.length>=1&&f[0].String?o=f[0].String.sval:o="unknown";}else o=this.visit({TypeName:l.argType},s);e.push(`(ORDER BY ${o})`);}else {let l=this.visit(u,s);e.push(`(ORDER BY ${l})`);}}else if(r&&a.length===1&&a[0].List){let u=a[0].List;if(u.items&&u.items.length>=2){let l=p.unwrapList(u.items),o=this.visit(l[0],s),f=l.slice(1).map(m=>this.visit(m,s));e.push(`(${o} ORDER BY ${f.join(", ")})`);}else if(u.items&&u.items.length===1){let l=u.items[0];if(l.FunctionParameter&&l.FunctionParameter.mode==="FUNC_PARAM_VARIADIC"){let o=this.visit(l,s);e.push(`(${o} ORDER BY ${o})`);}else {let o=this.visit(l,s);e.push(`(${o})`);}}else {let l=a.map(o=>Object.keys(o).length===0?"*":this.visit(o,s));e.push(`(${l.join(", ")})`);}}else {let u=a.map(l=>Object.keys(l).length===0?"*":this.visit(l,s));e.push(`(${u.join(", ")})`);}}if(t.definition&&t.definition.length>0){let i=p.unwrapList(t.definition).map(r=>{if(r.DefElem){let n=r.DefElem,a=n.defname,u=n.arg;if(a&&u){let l=h.quoteIdentifier(a),o=l!==a?l:a;return u.String?`${o} = '${u.String.sval}'`:`${o} = ${this.visit(u,s)}`}}return this.visit(r,s)});e.push(`(${i.join(", ")})`);}break;case "OBJECT_TSDICTIONARY":if(e.push("CREATE TEXT SEARCH DICTIONARY"),t.defnames&&t.defnames.length>0&&e.push(p.unwrapList(t.defnames).map(i=>this.visit(i,s)).join(".")),t.definition&&t.definition.length>0){e.push("(");let i=p.unwrapList(t.definition).map(r=>{if(r.DefElem){let n=r.DefElem,a=n.defname,u=n.arg;if(a&&u)return `${a} = ${this.visit(u,s)}`}return this.visit(r,s)});e.push(i.join(", ")),e.push(")");}break;case "OBJECT_TSCONFIGURATION":if(e.push("CREATE TEXT SEARCH CONFIGURATION"),t.defnames&&t.defnames.length>0&&e.push(p.unwrapList(t.defnames).map(i=>this.visit(i,s)).join(".")),t.definition&&t.definition.length>0){e.push("(");let i=p.unwrapList(t.definition).map(r=>{if(r.DefElem){let n=r.DefElem,a=n.defname,u=n.arg;if(a&&u)return `${a} = ${this.visit(u,s)}`}return this.visit(r,s)});e.push(i.join(", ")),e.push(")");}break;case "OBJECT_TSPARSER":if(e.push("CREATE TEXT SEARCH PARSER"),t.defnames&&t.defnames.length>0){let i=p.unwrapList(t.defnames).map(r=>this.visit(r,s)).join(".");e.push(i);}if(t.definition&&t.definition.length>0){e.push("(");let i=p.unwrapList(t.definition).map(r=>{if(r.DefElem){let n=r.DefElem,a=n.defname,u=n.arg;if(a&&u)return `${a} = ${this.visit(u,s)}`}return this.visit(r,s)});e.push(i.join(", ")),e.push(")");}break;case "OBJECT_TSTEMPLATE":if(e.push("CREATE TEXT SEARCH TEMPLATE"),t.defnames&&t.defnames.length>0){let i=p.unwrapList(t.defnames).map(r=>this.visit(r,s)).join(".");e.push(i);}if(t.definition&&t.definition.length>0){e.push("(");let i=p.unwrapList(t.definition).map(r=>{if(r.DefElem){let n=r.DefElem,a=n.defname,u=n.arg;if(a&&u)return `${a} = ${this.visit(u,s)}`}return this.visit(r,s)});e.push(i.join(", ")),e.push(")");}break;case "OBJECT_COLLATION":if(e.push("CREATE COLLATION"),t.defnames&&t.defnames.length>0&&e.push(p.unwrapList(t.defnames).map(i=>this.visit(i,s)).join(".")),t.definition&&t.definition.length>0){let i=p.unwrapList(t.definition).map(n=>{if(n.DefElem){let a=n.DefElem,u=a.defname,l=a.arg;if(u&&l){if(u==="from")return `FROM ${this.visit(l,s)}`;let o;return l.String?o=`'${l.String.sval}'`:o=this.visit(l,s),`${u} = ${o}`}}return this.visit(n,s)});i.some(n=>n.startsWith("FROM "))?e.push(i.join(" ")):e.push(`(${i.join(", ")})`);}break;default:throw new Error(`Unsupported DefineStmt kind: ${t.kind}`)}return e.join(" ")}AlterDatabaseStmt(t,s){let e=["ALTER","DATABASE"];if(t.dbname&&e.push(h.quoteIdentifier(t.dbname)),t.options&&t.options.length>0){let i=p.unwrapList(t.options).map(r=>this.visit(r,s));e.push(i.join(" "));}return e.join(" ")}AlterDatabaseRefreshCollStmt(t,s){let e=["ALTER","DATABASE"];return t.dbname&&e.push(h.quoteIdentifier(t.dbname)),e.push("REFRESH","COLLATION","VERSION"),e.join(" ")}AlterDatabaseSetStmt(t,s){let e=["ALTER","DATABASE"];if(t.dbname&&e.push(h.quoteIdentifier(t.dbname)),t.setstmt){let i=this.VariableSetStmt(t.setstmt,s);e.push(i);}return e.join(" ")}DeclareCursorStmt(t,s){let e=["DECLARE"];t.portalname&&e.push(h.quoteIdentifier(t.portalname));let i=[];return t.options&&(t.options&2?i.push("SCROLL"):t.options&4&&i.push("NO SCROLL"),t.options&1&&i.push("BINARY"),t.options&8&&i.push("INSENSITIVE")),i.length>0&&e.push(...i),e.push("CURSOR"),t.options&&t.options&32&&e.push("WITH HOLD"),e.push("FOR"),t.query&&e.push(this.visit(t.query,s)),e.join(" ")}PublicationObjSpec(t,s){let e=[];return t.pubobjtype==="PUBLICATIONOBJ_TABLE"?(e.push("TABLE"),t.pubtable&&e.push(this.PublicationTable(t.pubtable,s))):t.pubobjtype==="PUBLICATIONOBJ_TABLES_IN_SCHEMA"?(e.push("TABLES IN SCHEMA"),t.name&&e.push(h.quoteIdentifier(t.name))):t.pubobjtype==="PUBLICATIONOBJ_TABLES_IN_CUR_SCHEMA"&&e.push("TABLES IN SCHEMA CURRENT_SCHEMA"),e.join(" ")}PublicationTable(t,s){let e=[];if(t.relation&&e.push(this.RangeVar(t.relation,s)),t.columns&&t.columns.length>0){let i=p.unwrapList(t.columns).map(r=>this.visit(r,s));e.push(`(${i.join(", ")})`);}return t.whereClause&&(e.push("WHERE"),e.push(this.visit(t.whereClause,s))),e.join(" ")}CreateAmStmt(t,s){let e=["CREATE","ACCESS","METHOD"];switch(t.amname&&e.push(h.quoteIdentifier(t.amname)),e.push("TYPE"),t.amtype){case "i":e.push("INDEX");break;case "t":e.push("TABLE");break;default:e.push(t.amtype||"");break}if(t.handler_name&&t.handler_name.length>0){e.push("HANDLER");let i=p.unwrapList(t.handler_name).map(r=>this.visit(r,s)).join(".");e.push(i);}return e.join(" ")}IntoClause(t,s){let e=[];if(t.rel&&e.push(this.RangeVar(t.rel,s)),t.colNames&&t.colNames.length>0){let i=p.unwrapList(t.colNames).map(r=>this.visit(r,s)).join(", ");e.push(`(${i})`);}if(t.accessMethod&&e.push("USING",t.accessMethod),t.options&&t.options.length>0){e.push("WITH");let i=p.unwrapList(t.options).map(r=>this.visit(r,s)).join(", ");e.push(`(${i})`);}if(t.onCommit&&t.onCommit!=="ONCOMMIT_NOOP")switch(e.push("ON COMMIT"),t.onCommit){case "ONCOMMIT_PRESERVE_ROWS":e.push("PRESERVE ROWS");break;case "ONCOMMIT_DELETE_ROWS":e.push("DELETE ROWS");break;case "ONCOMMIT_DROP":e.push("DROP");break}return t.tableSpaceName&&e.push("TABLESPACE",h.quoteIdentifier(t.tableSpaceName)),e.join(" ")}OnConflictExpr(t,s){let e=["ON CONFLICT"];if(t.arbiterElems&&t.arbiterElems.length>0){let i=p.unwrapList(t.arbiterElems).map(r=>this.visit(r,s)).join(", ");e.push(`(${i})`);}if(t.arbiterWhere&&(e.push("WHERE"),e.push(this.visit(t.arbiterWhere,s))),t.action==="ONCONFLICT_NOTHING")e.push("DO NOTHING");else if(t.action==="ONCONFLICT_UPDATE"){if(e.push("DO UPDATE SET"),t.onConflictSet&&t.onConflictSet.length>0){let i=p.unwrapList(t.onConflictSet).map(r=>this.visit(r,s)).join(", ");e.push(i);}t.onConflictWhere&&(e.push("WHERE"),e.push(this.visit(t.onConflictWhere,s)));}return e.join(" ")}ScanToken(t,s){return ""}CreateOpClassItem(t,s){let e=[];if(t.itemtype===1){e.push("OPERATOR");let i=t.number!==void 0?t.number:0;if(e.push(i.toString()),t.name){let r=s.spawn("CreateOpClassItem");e.push(this.ObjectWithArgs(t.name,r));}}else if(t.itemtype===2){e.push("FUNCTION");let i=t.number!==void 0?t.number:0;if(e.push(i.toString()),t.name){let r=s.spawn("CreateOpClassItem");e.push(this.ObjectWithArgs(t.name,r));}}else t.itemtype===3&&(e.push("STORAGE"),t.storedtype&&e.push(this.TypeName(t.storedtype,s)));if(t.order_family&&t.order_family.length>0){e.push("FOR ORDER BY");let i=p.unwrapList(t.order_family).map(r=>this.visit(r,s)).join(".");e.push(i);}if(t.class_args&&t.class_args.length>0){let i=p.unwrapList(t.class_args).map(r=>this.visit(r,s)).join(", ");e.push(`(${i})`);}return e.join(" ")}Var(t,s){return t.varno&&t.varattno?`$${t.varno}.${t.varattno}`:"$var"}TableFunc(t,s){let e=[];if(t.functype==="TFT_XMLTABLE"){if(e.push("XMLTABLE"),t.ns_names&&t.ns_names.length>0){e.push("XMLNAMESPACES");let i=p.unwrapList(t.ns_names).map(r=>this.visit(r,s)).join(", ");e.push(`(${i})`);}if(t.rowexpr&&e.push(`(${this.visit(t.rowexpr,s)})`),t.docexpr&&(e.push("PASSING"),e.push(this.visit(t.docexpr,s))),t.colexprs&&t.colexprs.length>0){e.push("COLUMNS");let i=p.unwrapList(t.colexprs).map(r=>this.visit(r,s)).join(", ");e.push(i);}}else if(t.functype==="TFT_JSON_TABLE"&&(e.push("JSON_TABLE"),t.docexpr&&e.push(`(${this.visit(t.docexpr,s)})`),t.rowexpr&&(e.push(","),e.push(`'${this.visit(t.rowexpr,s)}'`)),t.colexprs&&t.colexprs.length>0)){e.push("COLUMNS");let i=p.unwrapList(t.colexprs).map(r=>this.visit(r,s)).join(", ");e.push(`(${i})`);}return e.join(" ")}RangeTableFunc(t,s){let e=[];if(t.lateral&&e.push("LATERAL"),t.docexpr&&e.push(this.visit(t.docexpr,s)),t.rowexpr&&(e.push("PASSING"),e.push(this.visit(t.rowexpr,s))),t.columns&&t.columns.length>0){e.push("COLUMNS");let i=p.unwrapList(t.columns).map(r=>this.visit(r,s)).join(", ");e.push(`(${i})`);}return t.alias&&e.push(this.Alias(t.alias,s)),e.join(" ")}RangeTableFuncCol(t,s){let e=[];return t.colname&&e.push(h.quoteIdentifier(t.colname)),t.for_ordinality?e.push("FOR ORDINALITY"):t.typeName&&e.push(this.TypeName(t.typeName,s)),t.colexpr&&(e.push("PATH"),e.push(`'${this.visit(t.colexpr,s)}'`)),t.coldefexpr&&(e.push("DEFAULT"),e.push(this.visit(t.coldefexpr,s))),e.join(" ")}JsonArrayQueryConstructor(t,s){let e=["JSON_ARRAYAGG"];return t.query&&e.push(`(${this.visit(t.query,s)})`),t.format&&e.push("FORMAT JSON"),t.output&&e.push("RETURNING TEXT"),t.absent_on_null?e.push("ABSENT ON NULL"):e.push("NULL ON NULL"),e.join(" ")}RangeFunction(t,s){let e=[];if(t.lateral&&e.push("LATERAL"),t.is_rowsfrom){if(e.push("ROWS FROM"),t.functions&&t.functions.length>0){let i=p.unwrapList(t.functions).filter(r=>r!=null).map(r=>{try{if(this.getNodeType(r)==="List"){let a=this.getNodeData(r);if(a&&a.items&&Array.isArray(a.items)){let u=a.items;if(u.length>=2){let l=this.visit(u[0],s),o=this.getNodeData(u[1]);if(o&&o.items&&Array.isArray(o.items)){let f=o.items.map(m=>this.visit(m,s)).filter(m=>m&&m.trim());if(f.length>0)return `${l} AS (${f.join(", ")})`}return l}else if(u.length===1)return this.visit(u[0],s)}}return this.visit(r,s)}catch(n){return console.warn(`Error processing function in RangeFunction: ${n instanceof Error?n.message:String(n)}`),""}}).filter(r=>r&&r.trim());i.length>0&&e.push(`(${i.join(", ")})`);}}else if(t.functions&&t.functions.length>0){let i=p.unwrapList(t.functions).filter(r=>r!=null).map(r=>{try{if(this.getNodeType(r)==="List"){let a=this.getNodeData(r);if(a&&a.items&&Array.isArray(a.items)){let u=a.items;if(u.length>=1)return this.visit(u[0],s)}}return this.visit(r,s)}catch(n){return console.warn(`Error processing function in RangeFunction: ${n instanceof Error?n.message:String(n)}`),""}}).filter(r=>r&&r.trim());i.length>0&&e.push(i.join(", "));}if(t.ordinality&&e.push("WITH ORDINALITY"),t.alias)if(t.coldeflist&&t.coldeflist.length>0){let i=t.alias.aliasname,r=p.unwrapList(t.coldeflist).map(n=>this.visit(n,s)).filter(n=>n&&n.trim());e.push(`${i} (${r.join(", ")})`);}else e.push(this.Alias(t.alias,s));else if(t.coldeflist&&t.coldeflist.length>0){let i=p.unwrapList(t.coldeflist).map(r=>this.visit(r,s)).filter(r=>r&&r.trim());e.push(`AS (${i.join(", ")})`);}return e.join(" ")}XmlExpr(t,s){if(t.op==="IS_XMLPI")if(t.name&&t.args&&t.args.length>0){let i=p.unwrapList(t.args).map(r=>this.visit(r,s));return `xmlpi(name ${h.quoteIdentifier(t.name)}, ${i.join(", ")})`}else return t.name?`xmlpi(name ${h.quoteIdentifier(t.name)})`:"XMLPI()";let e=[];switch(t.op){case "IS_XMLCONCAT":e.push("XMLCONCAT");break;case "IS_XMLELEMENT":e.push("XMLELEMENT");let i=[];if(t.name&&i.push(`NAME ${h.quoteIdentifier(t.name)}`),t.named_args&&t.named_args.length>0){let n=p.unwrapList(t.named_args).map(a=>this.visit(a,s));i.push(`XMLATTRIBUTES(${n.join(", ")})`);}if(t.args&&t.args.length>0){let n=p.unwrapList(t.args).map(a=>this.visit(a,s));i.push(...n);}i.length>0&&e.push(`(${i.join(", ")})`);break;case "IS_XMLFOREST":e.push("XMLFOREST");break;case "IS_XMLPARSE":e.push("XMLPARSE");let r=[];if(t.xmloption&&(t.xmloption==="XMLOPTION_DOCUMENT"?r.push("DOCUMENT"):t.xmloption==="XMLOPTION_CONTENT"&&r.push("CONTENT")),t.args&&t.args.length>0){let n=p.unwrapList(t.args).map(a=>this.visit(a,s));n.length>0&&r.push(n[0]);}r.length>0&&e.push(`(${r.join(" ")})`);break;case "IS_XMLROOT":if(e.push("XMLROOT"),t.args&&t.args.length>0){let n=p.unwrapList(t.args),a=[];if(n[0]&&a.push(this.visit(n[0],s)),n[1]){let u=n[1];u.A_Const&&u.A_Const.isnull?a.push("version NO VALUE"):a.push(`version ${this.visit(u,s)}`);}if(n[2]){let u=n[2];u.A_Const&&u.A_Const.ival!==void 0?u.A_Const.ival.ival===1?a.push("STANDALONE NO"):u.A_Const.ival.ival===2?a.push("STANDALONE NO VALUE"):u.A_Const.ival.ival===3||(Object.keys(u.A_Const.ival).length===0?a.push("STANDALONE YES"):a.push(`STANDALONE ${this.visit(u,s)}`)):a.push(`STANDALONE ${this.visit(u,s)}`);}a.length>0&&e.push(`(${a.join(", ")})`);}break;case "IS_XMLSERIALIZE":e.push("XMLSERIALIZE");break;case "IS_DOCUMENT":if(t.args&&t.args.length>0){let n=p.unwrapList(t.args).map(a=>this.visit(a,s));e.push(`${n[0]} IS DOCUMENT`);}else e.push("IS DOCUMENT");break;default:throw new Error(`Unsupported XmlExpr op: ${t.op}`)}if(t.op!=="IS_XMLELEMENT"&&t.op!=="IS_XMLPARSE"&&t.op!=="IS_XMLROOT"&&t.op!=="IS_DOCUMENT"){if(t.name){let i=h.quoteIdentifier(t.name);e.push(`NAME ${i}`);}if(t.args&&t.args.length>0){let i=p.unwrapList(t.args).map(r=>this.visit(r,s));e.push(`(${i.join(", ")})`);}}if(t.named_args&&t.named_args.length>0&&t.op!=="IS_XMLELEMENT"){let i=p.unwrapList(t.named_args).map(r=>this.visit(r,s));t.op==="IS_XMLFOREST"?e.push(`(${i.join(", ")})`):e.push(`XMLATTRIBUTES(${i.join(", ")})`);}return e.join(" ")}schemaname(t,s){if(typeof t=="string")return h.quoteIdentifier(t);if(t&&t.String&&t.String.sval)return h.quoteIdentifier(t.String.sval);if(t&&typeof t=="object"){if(t.sval!==void 0)return h.quoteIdentifier(t.sval);if(t.List&&Array.isArray(t.List.items)){let e=t.List.items;if(e.length>0&&e[0].String&&e[0].String.sval)return h.quoteIdentifier(e[0].String.sval)}return t.val!==void 0?h.quoteIdentifier(t.val):""}return ""}RangeTableSample(t,s){let e=[];if(t.relation&&e.push(this.visit(t.relation,s)),e.push("TABLESAMPLE"),t.method&&t.method.length>0){let i=t.method.map(r=>this.visit(r,s));e.push(i.join("."));}if(t.args&&t.args.length>0){let i=t.args.map(r=>this.visit(r,s));e.push(`(${i.join(", ")})`);}return t.repeatable&&(e.push("REPEATABLE"),e.push(`(${this.visit(t.repeatable,s)})`)),e.join(" ")}XmlSerialize(t,s){let e=["XMLSERIALIZE"];return e.push("("),t.typeName&&(t.xmloption==="XMLOPTION_DOCUMENT"?e.push("DOCUMENT"):e.push("CONTENT"),e.push(this.visit(t.expr,s)),e.push("AS"),e.push(this.TypeName(t.typeName,s))),e.push(")"),e.join(" ")}ctes(t,s){if(!t||!Array.isArray(t))return "";let e=["WITH"];t.length>0&&t[0]&&t[0].CommonTableExpr&&t[0].CommonTableExpr.recursive&&e.push("RECURSIVE");let i=t.map(r=>this.visit(r,s));return e.push(i.join(", ")),e.join(" ")}RuleStmt(t,s){let e=["CREATE"];if(t.replace&&e.push("OR REPLACE"),e.push("RULE"),t.rulename&&e.push(h.quoteIdentifier(t.rulename)),e.push("AS ON"),t.event)switch(t.event){case "CMD_SELECT":e.push("SELECT");break;case "CMD_INSERT":e.push("INSERT");break;case "CMD_UPDATE":e.push("UPDATE");break;case "CMD_DELETE":e.push("DELETE");break;default:e.push(t.event.toString());}if(e.push("TO"),t.relation&&e.push(this.RangeVar(t.relation,s)),t.whereClause&&(e.push("WHERE"),e.push(this.visit(t.whereClause,s))),e.push("DO"),t.instead&&e.push("INSTEAD"),t.actions&&t.actions.length>0)if(t.actions.length===1)e.push(this.visit(t.actions[0],s));else {e.push("(");let i=p.unwrapList(t.actions).map(r=>this.visit(r,s));e.push(i.join("; ")),e.push(")");}else e.push("NOTHING");return e.join(" ")}RangeSubselect(t,s){let e=[];return t.lateral&&e.push("LATERAL"),t.subquery&&(e.push("("),e.push(this.visit(t.subquery,s)),e.push(")")),t.alias&&e.push(this.Alias(t.alias,s)),e.join(" ")}relname(t,s){return typeof t=="string"?h.quoteIdentifier(t):t&&t.String&&t.String.sval?h.quoteIdentifier(t.String.sval):t&&typeof t=="object"&&t.relname?h.quoteIdentifier(t.relname):this.visit(t,s)}rel(t,s){return typeof t=="string"?h.quoteIdentifier(t):t&&t.String&&t.String.sval?h.quoteIdentifier(t.String.sval):t&&t.RangeVar?this.RangeVar(t.RangeVar,s):t&&typeof t=="object"&&t.relname?h.quoteIdentifier(t.relname):this.visit(t,s)}objname(t,s){return typeof t=="string"?h.quoteIdentifier(t):t&&t.String&&t.String.sval?h.quoteIdentifier(t.String.sval):Array.isArray(t)?t.map(i=>i&&i.String&&i.String.sval?h.quoteIdentifier(i.String.sval):this.visit(i,s)).join("."):this.visit(t,s)}SQLValueFunction(t,s){switch(t.op){case "SVFOP_CURRENT_DATE":return "CURRENT_DATE";case "SVFOP_CURRENT_TIME":return "CURRENT_TIME";case "SVFOP_CURRENT_TIME_N":return `CURRENT_TIME(${t.typmod||0})`;case "SVFOP_CURRENT_TIMESTAMP":return "CURRENT_TIMESTAMP";case "SVFOP_CURRENT_TIMESTAMP_N":return `CURRENT_TIMESTAMP(${t.typmod||0})`;case "SVFOP_LOCALTIME":return "LOCALTIME";case "SVFOP_LOCALTIME_N":return `LOCALTIME(${t.typmod||0})`;case "SVFOP_LOCALTIMESTAMP":return "LOCALTIMESTAMP";case "SVFOP_LOCALTIMESTAMP_N":return `LOCALTIMESTAMP(${t.typmod||0})`;case "SVFOP_CURRENT_ROLE":return "CURRENT_ROLE";case "SVFOP_CURRENT_USER":return "CURRENT_USER";case "SVFOP_USER":return "USER";case "SVFOP_SESSION_USER":return "SESSION_USER";case "SVFOP_CURRENT_CATALOG":return "CURRENT_CATALOG";case "SVFOP_CURRENT_SCHEMA":return "CURRENT_SCHEMA";default:throw new Error(`Unsupported SQLValueFunction op: ${t.op}`)}}GroupingFunc(t,s){let e=["GROUPING"];if(t.args&&t.args.length>0){let i=p.unwrapList(t.args).map(r=>this.visit(r,s));e.push(`(${i.join(", ")})`);}else e.push("()");return e.join("")}MultiAssignRef(t,s){let e=[];return t.source&&e.push(this.visit(t.source,s)),t.colno>0&&e.push(`[${t.colno}]`),e.join("")}SetToDefault(t,s){return "DEFAULT"}CurrentOfExpr(t,s){let e=["CURRENT OF"];return t.cursor_name&&e.push(h.quoteIdentifier(t.cursor_name)),t.cursor_param>0&&e.push(`$${t.cursor_param}`),e.join(" ")}TableLikeClause(t,s){let e=["LIKE"];if(t.relation&&e.push(this.visit(t.relation,s)),t.options&&typeof t.options=="number")if(t.options===2147483647||t.options===2147483647)e.push("INCLUDING ALL");else {let i=[];t.options&1&&i.push("INCLUDING COMMENTS"),t.options&4&&i.push("INCLUDING CONSTRAINTS"),t.options&8&&i.push("INCLUDING DEFAULTS"),t.options&16&&i.push("INCLUDING GENERATED"),t.options&32&&i.push("INCLUDING IDENTITY"),t.options&64&&i.push("INCLUDING INDEXES"),t.options&128&&i.push("INCLUDING STATISTICS"),t.options&256&&i.push("INCLUDING STORAGE"),i.length>0&&e.push(i.join(" "));}return e.join(" ")}AlterFunctionStmt(t,s){let e=["ALTER"];if(t.objtype==="OBJECT_PROCEDURE"?e.push("PROCEDURE"):e.push("FUNCTION"),t.func&&e.push(this.ObjectWithArgs(t.func,s)),t.actions&&t.actions.length>0){let i=s.spawn("AlterFunctionStmt"),r=p.unwrapList(t.actions).map(n=>this.visit(n,i));e.push(r.join(" "));}return e.join(" ")}AlterObjectSchemaStmt(t,s){let e=["ALTER"];try{e.push(this.getObjectTypeKeyword(t.objectType));}catch{e.push(t.objectType.toString());}if(t.missing_ok&&e.push("IF EXISTS"),t.relation&&(t.objectType==="OBJECT_TABLE"||t.objectType==="OBJECT_FOREIGN_TABLE"||t.objectType==="OBJECT_MATVIEW"))e.push(this.RangeVar(t.relation,s));else if(t.object)if(t.objectType==="OBJECT_DOMAIN"&&t.object.List){let i=p.unwrapList(t.object);if(i.length===2){let r=i[0].String?.sval||"",n=i[1].String?.sval||"";e.push(h.quoteQualifiedIdentifier(r,n));}else e.push(this.visit(t.object,s));}else if(t.objectType==="OBJECT_TYPE"&&t.object.List){let i=p.unwrapList(t.object);if(i.length===2){let r=i[0].String?.sval||"",n=i[1].String?.sval||"";e.push(h.quoteQualifiedIdentifier(r,n));}else e.push(this.visit(t.object,s));}else if(t.objectType==="OBJECT_CONVERSION"&&t.object.List){let i=p.unwrapList(t.object);if(i.length===2){let r=i[0].String?.sval||"",n=i[1].String?.sval||"";e.push(h.quoteQualifiedIdentifier(r,n));}else e.push(this.visit(t.object,s));}else if(t.objectType==="OBJECT_TSPARSER"&&t.object.List){let i=p.unwrapList(t.object);if(i.length===2){let r=i[0].String?.sval||"",n=i[1].String?.sval||"";e.push(h.quoteQualifiedIdentifier(r,n));}else e.push(this.visit(t.object,s));}else if(t.objectType==="OBJECT_TSCONFIGURATION"&&t.object.List){let i=p.unwrapList(t.object);if(i.length===2){let r=i[0].String?.sval||"",n=i[1].String?.sval||"";e.push(h.quoteQualifiedIdentifier(r,n));}else e.push(this.visit(t.object,s));}else if(t.objectType==="OBJECT_TSTEMPLATE"&&t.object.List){let i=p.unwrapList(t.object);if(i.length===2){let r=i[0].String?.sval||"",n=i[1].String?.sval||"";e.push(h.quoteQualifiedIdentifier(r,n));}else e.push(this.visit(t.object,s));}else if(t.objectType==="OBJECT_TSDICTIONARY"&&t.object.List){let i=p.unwrapList(t.object);if(i.length===2){let r=i[0].String?.sval||"",n=i[1].String?.sval||"";e.push(h.quoteQualifiedIdentifier(r,n));}else e.push(this.visit(t.object,s));}else if(t.objectType==="OBJECT_OPCLASS"&&t.object.List){let i=p.unwrapList(t.object);if(i.length===2){let r=i[0].String?.sval||"",n=i[1].String?.sval||"";e.push(`${h.quoteIdentifier(n)} USING ${r}`);}else if(i.length===3){let r=i[0].String?.sval||"",n=i[1].String?.sval||"",a=i[2].String?.sval||"";e.push(`${h.quoteQualifiedIdentifier(n,a)} USING ${r}`);}else e.push(this.visit(t.object,s));}else if(t.objectType==="OBJECT_OPFAMILY"&&t.object.List){let i=p.unwrapList(t.object);if(i.length===2){let r=i[0].String?.sval||"",n=i[1].String?.sval||"";e.push(`${h.quoteIdentifier(n)} USING ${r}`);}else if(i.length===3){let r=i[0].String?.sval||"",n=i[1].String?.sval||"",a=i[2].String?.sval||"";e.push(`${h.quoteQualifiedIdentifier(n,a)} USING ${r}`);}else e.push(this.visit(t.object,s));}else e.push(this.visit(t.object,s));return e.push("SET SCHEMA"),t.newschema&&e.push(h.quoteIdentifier(t.newschema)),e.join(" ")}AlterRoleSetStmt(t,s){let e=["ALTER","ROLE"];if(t.role?e.push(this.RoleSpec(t.role,s)):e.push("ALL"),t.database&&(e.push("IN DATABASE"),e.push(this.quoteIfNeeded(t.database))),t.setstmt){if(t.setstmt.kind==="VAR_RESET")e.push("RESET"),t.setstmt.name&&e.push(t.setstmt.name);else if(e.push("SET"),t.setstmt.name&&e.push(t.setstmt.name),t.setstmt.args&&t.setstmt.args.length>0){e.push("TO");let i=p.unwrapList(t.setstmt.args).map(r=>this.visit(r,s)).join(", ");e.push(i);}}return e.join(" ")}CreateForeignTableStmt(t,s){let e=["CREATE FOREIGN TABLE"];if(t.base&&t.base.relation){let i=s.spawn("CreateForeignTableStmt");e.push(this.RangeVar(t.base.relation,i));}if(t.base&&t.base.tableElts){let i=p.unwrapList(t.base.tableElts).map(r=>this.visit(r,s));e.push(`(${i.join(", ")})`);}else t.base?.partbound||e.push("()");if(t.base&&t.base.inhRelations&&t.base.inhRelations.length>0)if(t.base.partbound){let i=p.unwrapList(t.base.inhRelations).map(r=>this.visit(r,s));e.push(`PARTITION OF ${i.join(", ")}`),t.base.partbound.is_default&&e.push("DEFAULT");}else {let i=p.unwrapList(t.base.inhRelations).map(r=>this.visit(r,s));e.push(`INHERITS (${i.join(", ")})`);}if(t.servername&&(e.push("SERVER"),e.push(h.quoteIdentifier(t.servername))),t.options&&t.options.length>0){let i=s.spawn("CreateForeignTableStmt"),r=p.unwrapList(t.options).map(n=>this.visit(n,i));e.push(`OPTIONS (${r.join(", ")})`);}return e.join(" ")}containsMultilineStringLiteral(t){return /'[^']*\n[^']*'/g.test(t)}};});var ae=C(()=>{os();ne();z.deparse;});function ut(c){if("String"in c)return c.String.sval}function M(c){return c.map(ut).filter(t=>t!=null)}function q(c){return c==null?[]:c.List!==void 0?c.List.items||[]:Array.isArray(c)?c:[c]}function kt(c){return h.quoteIdentifier(c)}function Z(c){return Object.keys(c)[0]}function ps(c){if("A_Const"in c){if(c.A_Const.ival)return c.A_Const.ival.ival;if(c.A_Const.fval)return c.A_Const.fval.fval;if(c.A_Const.sval)return c.A_Const.sval.sval;if(c.A_Const.boolval)return c.A_Const.boolval.boolval;if(c.A_Const.isnull)return null}}var V=C(()=>{ae();});function fs(c){let t=c.toLowerCase().trim();if(t.startsWith("_")||t.endsWith("[]"))return "TEXT";let s=gi[t];if(!s)throw new G(`Unsupported PostgreSQL type: "${c}"`);return s}function jt(c){let t=c.toLowerCase();return ["serial","serial4","bigserial","serial8","smallserial","serial2"].includes(t)}function $t(c){let t=c.toLowerCase();return ["varchar","character varying","char","character","bpchar"].includes(t)}function Ut(c){let t=c.toLowerCase();return ["numeric","decimal"].includes(t)}var G,R,gi,cs,Ti,Ft,tt=C(()=>{V();G=class extends Error{},R=class extends G{constructor(s,e){super(e??`Unsupported node type: ${Z(s)}`);this.node=s;}},gi={int2:"INTEGER",smallint:"INTEGER",int4:"INTEGER",integer:"INTEGER",int:"INTEGER",int8:"INTEGER",bigint:"INTEGER",serial:"INTEGER",serial4:"INTEGER",bigserial:"INTEGER",serial8:"INTEGER",smallserial:"INTEGER",serial2:"INTEGER",float4:"REAL",real:"REAL",float8:"REAL","double precision":"REAL",numeric:"REAL",decimal:"REAL",text:"TEXT",varchar:"TEXT","character varying":"TEXT",char:"TEXT",character:"TEXT",bpchar:"TEXT",name:"TEXT",bytea:"BLOB",bool:"INTEGER",boolean:"INTEGER",date:"TEXT",time:"TEXT","time without time zone":"TEXT",timetz:"TEXT","time with time zone":"TEXT",timestamp:"TEXT","timestamp without time zone":"TEXT",timestamptz:"TEXT","timestamp with time zone":"TEXT",interval:"TEXT",json:"TEXT",jsonb:"TEXT",uuid:"TEXT",inet:"TEXT"},cs=["<",">","<=",">=","=","<>","!=","+","-","*","/","%","&","|","<<",">>","||","BETWEEN","NOT BETWEEN","IN","NOT IN","LIKE","NOT LIKE","IS NULL","IS NOT NULL","IS TRUE","IS NOT TRUE","IS FALSE","IS NOT FALSE","IS UNKNOWN","IS NOT UNKNOWN","AND","OR","NOT","->>"];Ti={CreateEnumStmt:{react:"ignore"},CreateDomainStmt:{react:"warn"},CreateSeqStmt:{react:"error"},AlterSeqStmt:{react:"error"},CreateSchemaStmt:{react:"warn"},CreatePolicyStmt:{react:"ignore"},PartitionElem:{react:"error"},PartitionCmd:{react:"error"},VariableSetStmt:{react:"ignore"},CompositeTypeStmt:{react:"error"},AlterEnumStmt:{react:"error"},AlterObjectSchemaStmt:{react:"error"},AlterOwnerStmt:{react:"error"},AlterTypeStmt:{react:"error"},AlterFunctionStmt:{react:"error"},AlterDefaultPrivilegesStmt:{react:"error"},GrantStmt:{react:"error"},GrantRoleStmt:{react:"error"},CopyStmt:{react:"error"},CreateCastStmt:{react:"error"},AlterOpFamilyStmt:{react:"error"},AlterOperatorStmt:{react:"error"},TruncateStmt:{react:"error"},A_Indirection:{react:"error"},XmlExpr:{react:"error"},XmlSerialize:{react:"error"},RangeTableSample:{react:"error"},GroupingSet:{react:"error"}},Ft=new Map(Object.entries(Ti));});var le=je(Bt=>{Object.defineProperty(Bt,"__esModule",{value:true});Bt.SqlFormatter=void 0;var ue=class{newlineChar;tabChar;prettyMode;constructor(t=`
44
- `,s=" ",e=true){this.newlineChar=t,this.tabChar=s,this.prettyMode=e;}format(t,s=" "){return t.filter(e=>e!=null&&e!=="").join(s)}indent(t,s=1){if(!this.prettyMode)return t;let e=this.tabChar.repeat(s);return t.split(this.newlineChar).map(i=>i.trim()?e+i:i).join(this.newlineChar)}parens(t){return `(${t})`}newline(){return this.newlineChar}tab(){return this.tabChar}isPretty(){return this.prettyMode}};Bt.SqlFormatter=ue;});var hs=je(et=>{Object.defineProperty(et,"__esModule",{value:true});et.BaseVisitor=et.DeparserContext=void 0;var Si=le(),oe=class c{indentLevel;prettyMode;isStringLiteral;parentNodeTypes;formatter;select;from;group;sort;insertColumns;update;bool;isColumnConstraint;isDomainConstraint;alterColumnOptions;alterTableOptions;isEnumValue;objtype;subtype;constructor({indentLevel:t=0,prettyMode:s=true,isStringLiteral:e,parentNodeTypes:i=[],formatter:r,select:n,from:a,group:u,sort:l,insertColumns:o,update:f,bool:m,isColumnConstraint:T,isDomainConstraint:E,alterColumnOptions:g,alterTableOptions:A,isEnumValue:S,objtype:b,subtype:_,...y}={}){this.indentLevel=t,this.prettyMode=s,this.isStringLiteral=e,this.parentNodeTypes=i,this.formatter=r||new Si.SqlFormatter(`
45
- `," ",s),this.select=n,this.from=a,this.group=u,this.sort=l,this.insertColumns=o,this.update=f,this.bool=m,this.isColumnConstraint=T,this.isDomainConstraint=E,this.alterColumnOptions=g,this.alterTableOptions=A,this.isEnumValue=S,this.objtype=b,this.subtype=_,Object.assign(this,y);}spawn(t,s={}){return new c({indentLevel:this.indentLevel,prettyMode:this.prettyMode,isStringLiteral:this.isStringLiteral,parentNodeTypes:[...this.parentNodeTypes,t],formatter:this.formatter,select:this.select,from:this.from,group:this.group,sort:this.sort,insertColumns:this.insertColumns,update:this.update,bool:this.bool,isColumnConstraint:this.isColumnConstraint,isDomainConstraint:this.isDomainConstraint,alterColumnOptions:this.alterColumnOptions,alterTableOptions:this.alterTableOptions,isEnumValue:this.isEnumValue,objtype:this.objtype,subtype:this.subtype,...s})}indent(t,s){if(!this.prettyMode)return t;let e=s!==void 0?s:this.indentLevel+1;return this.formatter.indent(t,e)}newline(){return this.formatter.newline()}parens(t){return this.formatter.parens(t)}format(t,s){return this.formatter.format(t,s)}isPretty(){return this.formatter.isPretty()}};et.DeparserContext=oe;var pe=class{getNodeType(t){return Object.keys(t)[0]}getNodeData(t){let s=this.getNodeType(t);return t[s]}formatList(t,s=", ",e="",i){return !t||t.length===0?"":t.map(r=>`${e}${i(r)}`).join(s)}formatParts(t,s=" "){return t.filter(e=>e!=null&&e!=="").join(s)}formatParens(t){return `(${t})`}formatIndent(t,s=1){return t}};et.BaseVisitor=pe;});var Mt,ms=C(()=>{tt();V();Mt=class{constructor(t){this.ast=t;this.result=[...this.walk(this.ast,[],{trackPaths:["returningList"]})];}result=[];*walk(t=this.ast,s=[],e={}){if(!t||typeof t!="object")return;let{trackPaths:i=[]}=e;if(Array.isArray(t)){for(let n=0;n<t.length;n++)yield*this.walk(t[n],s,e);return}let r=Object.keys(t);if(r.length===1&&r[0][0]>="A"&&r[0][0]<="Z"){let n=r[0];yield {node:t,path:s},yield*this.walk(t[n],[...s,n],e);}else for(let[n,a]of Object.entries(t))if(a&&typeof a=="object"){let u=i.includes(n)?[...s,n]:s;yield*this.walk(a,u,e);}}containsUnsupportedNode(){for(let{node:t}of this.result){let s=Z(t),e=Ft.get(s);if(e&&e.react==="error")return true}}hasFuncCall(){for(let{node:t}of this.result)if("FuncCall"in t)return true;return false}getFuncCalls(){return Array.from(this.result).map(({node:t})=>t).filter(t=>"FuncCall"in t).map(t=>t.FuncCall)}getFuncCallNames(){return this.getFuncCalls().flatMap(t=>t.funcname?.map(s=>s.String?.sval||s.String?.str))}hasSqlValueFunction(){for(let{node:t}of this.result)if("SQLValueFunction"in t)return true;return false}getSqlValueFunctions(){return Array.from(this.result).map(({node:t})=>t).filter(t=>"SQLValueFunction"in t).map(t=>t.SQLValueFunction)}getSqlValueFunctionNames(){return this.getSqlValueFunctions().map(t=>t.op)}hasUnsafeStar(){let t=this.result.filter(({node:s})=>"A_Star"in s);if(t.length===0)return false;for(let{path:s}of t)if(!s.includes("SelectStmt")&&!s.includes("returningList"))return true;return false}getRelationDefinitions(){return this.result.filter(({node:s})=>"CreateStmt"in s).map(({node:s})=>s.CreateStmt).map(s=>({relation:{relname:s.relation?.relname??"",inh:s.relation?.inh,relpersistence:s.relation?.relpersistence},columns:s.tableElts?.map(e=>{let i=e.ColumnDef?.typeName?.names?.map(n=>"String"in n?n.String.sval:""),r=i?.some(n=>n.toLowerCase().includes("pg_catalog"));return {name:e.ColumnDef?.colname??"",is_local:e.ColumnDef?.is_local,pg_catalog:r,type:i?.filter(n=>!n.toLowerCase().includes("pg_catalog"))[0]??"",types:i,constraints:e.ColumnDef?.constraints}})}))}getRelationColumnTypes(){return {has_non_pg_catalog_types:this.getRelationDefinitions().some(t=>t.columns?.some(s=>!s.pg_catalog)),types:Array.from(new Set(this.getRelationDefinitions().flatMap(t=>t.columns?.map(s=>s.type))))}}};});var Ci,Ai,Ni,Ri,st,qt,Es=C(()=>{tt();Ci=["DECLARE","IF","ELSIF","ELSE","LOOP","WHILE","FOR","FOREACH","EXCEPTION","RAISE","PERFORM","EXECUTE","SELECT"],Ai=/^NEW\.(\w+)\s*(?::=|=)\s*(.+)$/is,Ni=/^RETURN\s+(NEW|OLD)$/i,Ri=/^(INSERT|UPDATE|DELETE)\b/i,st=class extends G{constructor(s,e,i){super(i??`Unsupported PL/pgSQL: ${s}`);this.hint=s;this.body=e;}},qt=class{parse(t){let s=this.extractBlock(t),e=this.splitStatements(s),i=[],r=null;for(let n of e){let a=n.trim();if(!a)continue;this.rejectUnsupported(a);let u=a.match(Ni);if(u){r=u[1].toUpperCase(),i.push({type:"return",value:r});continue}let l=a.match(Ai);if(l){i.push({type:"assignment",column:l[1],expression:l[2].trim()});continue}if(Ri.test(a)){i.push({type:"dml",sql:a});continue}throw new st(`"${a.substring(0,80)}" is not translatable to SQLite`,s)}if(!r)throw new G("Trigger function body must end with RETURN NEW or RETURN OLD");return {statements:i,returnValue:r}}extractBlock(t){let s=t.trim(),e=s.toUpperCase();if(/^\s*DECLARE\b/i.test(s))throw new st('"DECLARE" is not translatable to SQLite',t);let i=e.indexOf("BEGIN"),r=e.lastIndexOf("END");if(i===-1||r===-1||r<=i)throw new st("Expected BEGIN ... END block in trigger function body",t);return s.slice(i+5,r).trim()}splitStatements(t){let s=[],e="",i=0,r=false,n="";for(let u=0;u<t.length;u++){let l=t[u];if(r){e+=l,l===n&&(u+1<t.length&&t[u+1]===n?e+=t[++u]:r=false);continue}if(l==="'"||l==='"'){r=true,n=l,e+=l;continue}if(l==="("){i++,e+=l;continue}if(l===")"){i--,e+=l;continue}if(l===";"&&i===0){s.push(e.trim()),e="";continue}e+=l;}let a=e.trim();return a&&s.push(a),s}rejectUnsupported(t){let s=t.match(/^(\w+)/)?.[1]?.toUpperCase();if(s&&Ci.includes(s))throw new st(`"${s}" is not translatable to SQLite`,t)}};});var lt,ce=C(()=>{lt=class extends Error{constructor(s,e,i,r){super(`check constraint "${i}" violated for ${s}.${e}`);this.table=s;this.column=e;this.constraint=i;this.value=r;this.name="CheckConstraintError";}};});var L,k=C(()=>{ce();L=class{context;constructor(t){this.context=t;}get isShimBacked(){return false}checkConstraint(){return null}serialize(t){return t}deserialize(t){return t}validateStorage(t){return {status:"pass",message:null}}validationFail(t,s){return {status:"fail",message:t,action:s}}validationPass(){return {status:"pass",message:null}}isNullish(t){return t==null}toColumnDDL(t){let{includeNullable:s=true}=t??{},e=[],i=this.context.column;e.push(this.quoteIfNeeded(i)),e.push(this.sqliteType),this.context.isPrimaryKey&&e.push("PRIMARY KEY"),this.context.isSerial&&this.context.isPrimaryKey&&e.push("AUTOINCREMENT"),s&&!this.context.nullable&&!this.context.isPrimaryKey&&e.push("NOT NULL"),this.context.isUnique&&!this.context.isPrimaryKey&&e.push("UNIQUE"),this.context.defaultValue!==null&&e.push(`DEFAULT ${this.context.defaultValue}`);let r=this.checkConstraint();return r&&e.push(`CHECK (${r})`),e.join(" ")}checkError(t,s){return new lt(this.context.table,this.context.column,t,s)}quoteIfNeeded(t){return /^[a-zA-Z_][a-zA-Z0-9_]*$/.test(t)?t:`"${t}"`}};});var W,Vt=C(()=>{k();W=class extends L{get sqliteType(){return "INTEGER"}};});var ot,fe=C(()=>{Vt();ot=class extends W{constructor(t){super({...t,isSerial:true});}};});function Oi(c,t){let{precision:s,scale:e}=t,i=10**e,r=10**(s-e);return Math.abs(Math.round(c*i)-c*i)<1e-4&&Math.abs(c)<r}var pt,he=C(()=>{k();pt=class extends L{numericPrecision;constructor(t,s){super(t),this.numericPrecision=s;}get isShimBacked(){return this.numericPrecision!==void 0}get sqliteType(){return "REAL"}checkConstraint(){if(this.numericPrecision){let{precision:t,scale:s}=this.numericPrecision,e=this.context.column,i=10**s,r=10**(t-s);return `ABS(ROUND(${e} * ${i}) - ${e} * ${i}) < 0.0001 AND ABS(${e}) < ${r}`}return null}validateStorage(t){if(this.isNullish(t))return this.validationPass();if(typeof t!="number"||!Number.isFinite(t))return this.validationFail("Expected finite number.","Patch rows with finite numbers.");if(this.numericPrecision){let{precision:s,scale:e}=this.numericPrecision;if(!Oi(t,this.numericPrecision))return this.validationFail(`Does not fit numeric(${s}, ${e}).`,"Patch rows within numeric precision.")}return this.validationPass()}};});var I,v=C(()=>{k();I=class extends L{lengthConstraint;constructor(t,s){super(t),this.lengthConstraint=s;}get isShimBacked(){return this.lengthConstraint!==void 0}get sqliteType(){return "TEXT"}checkConstraint(){return this.lengthConstraint!==void 0?`length(${this.context.column}) <= ${this.lengthConstraint}`:null}validateStorage(t){return this.isNullish(t)?this.validationPass():typeof t!="string"?this.validationFail("Expected text.","Patch rows with text values."):this.lengthConstraint!==void 0&&Array.from(t).length>this.lengthConstraint?this.validationFail(`Exceeds length ${this.lengthConstraint}.`,"Patch rows with shorter text."):this.validationPass()}};});var ct,me=C(()=>{k();ct=class extends L{get sqliteType(){return "BLOB"}};});var ft,Ee=C(()=>{k();ft=class extends L{get isShimBacked(){return true}get sqliteType(){return "INTEGER"}checkConstraint(){return `${this.context.column} IN (0, 1)`}serialize(t){if(this.isNullish(t))return t;if(t===true||t===1)return 1;if(t===false||t===0)return 0;throw this.checkError("boolean_range",t)}deserialize(t){return this.isNullish(t)?t:t===1?true:t===0?false:t}validateStorage(t){return this.isNullish(t)?this.validationPass():t===1||t===0?this.validationPass():this.validationFail("Expected 0 or 1.","Patch rows with boolean values.")}};});function gs(c){try{return {ok:!0,value:JSON.parse(c)}}catch{return {ok:false}}}var ht,ge=C(()=>{k();ht=class extends L{get isShimBacked(){return true}get sqliteType(){return "TEXT"}checkConstraint(){let t=this.context.column;return `${t} IS NULL OR json_valid(${t})`}serialize(t){if(this.isNullish(t))return t;try{return JSON.stringify(t)}catch{throw this.checkError("json_valid",t)}}deserialize(t){if(this.isNullish(t))return t;if(typeof t=="string"){let s=gs(t);return s.ok?s.value:t}return t}validateStorage(t){return this.isNullish(t)?this.validationPass():typeof t!="string"?this.validationFail("Expected JSON text.","Patch rows with JSON values."):gs(t).ok?this.validationPass():this.validationFail("Invalid JSON text.","Patch rows with valid JSON.")}};});function yi(c){if(!/^\d{4}-\d{2}-\d{2}$/.test(c))return false;let t=new Date(`${c}T00:00:00.000Z`);return !Number.isNaN(t.getTime())&&t.toISOString().slice(0,10)===c}var mt,Te=C(()=>{v();mt=class extends I{get isShimBacked(){return true}checkConstraint(){let t=this.context.column;return `${t} IS NULL OR date(${t}) IS NOT NULL`}validateStorage(t){return this.isNullish(t)?this.validationPass():typeof t!="string"||!yi(t)?this.validationFail("Invalid date.","Patch rows with YYYY-MM-DD dates."):this.validationPass()}};});function bi(c){let t=c.match(/^(\d{2}):(\d{2})(?::(\d{2})(?:\.\d{1,6})?)?([+-](\d{2}):?(\d{2}))?$/);if(!t)return false;let s=Number(t[1]),e=Number(t[2]),i=t[3]===void 0?0:Number(t[3]),r=t[5]===void 0?null:Number(t[5]),n=t[6]===void 0?null:Number(t[6]),a=r===null||n!==null&&r<=15&&n<=59;return s<=24&&e<=59&&i<=59&&(s!==24||e===0&&i===0)&&a}var Et,Se=C(()=>{v();Et=class extends I{get isShimBacked(){return true}checkConstraint(){let t=this.context.column;return `${t} IS NULL OR time(${t}) IS NOT NULL`}validateStorage(t){return this.isNullish(t)?this.validationPass():typeof t!="string"||!bi(t)?this.validationFail("Invalid time.","Patch rows with HH:MM[:SS] times."):this.validationPass()}};});function Ii(c){let t=c.match(/^(\d{4})-(\d{2})-(\d{2})[ T](\d{2}):(\d{2})(?::(\d{2})(?:\.\d{1,6})?)?(?:Z|([+-](\d{2}):?(\d{2})))?$/);if(!t)return false;let s=Number(t[1]),e=Number(t[2]),i=Number(t[3]),r=Number(t[4]),n=Number(t[5]),a=t[6]===void 0?0:Number(t[6]),u=t[8]===void 0?null:Number(t[8]),l=t[9]===void 0?null:Number(t[9]),o=new Date(Date.UTC(s,e-1,i)),f=o.getUTCFullYear()===s&&o.getUTCMonth()===e-1&&o.getUTCDate()===i,m=r<=24&&n<=59&&a<=59&&(r!==24||n===0&&a===0),T=u===null||l!==null&&u<=15&&l<=59;return f&&m&&T}var gt,Ce=C(()=>{v();gt=class extends I{get isShimBacked(){return true}checkConstraint(){let t=this.context.column;return `${t} IS NULL OR datetime(${t}) IS NOT NULL`}validateStorage(t){return this.isNullish(t)?this.validationPass():typeof t!="string"||!Ii(t)?this.validationFail("Invalid timestamp.","Patch rows with ISO timestamps."):this.validationPass()}};});var Tt,Ae=C(()=>{v();Tt=class extends I{get isShimBacked(){return true}validateStorage(t){return this.isNullish(t)?this.validationPass():typeof t!="string"||t.trim().length===0?this.validationFail("Expected interval text.","Patch rows with interval strings."):/^-?\d+(?:\.\d+)?$/.test(t.trim())?this.validationFail("Ambiguous numeric interval.","Patch rows with explicit interval strings."):this.validationPass()}};});var St,Ne=C(()=>{v();St=class extends I{enumValues;constructor(t,s){super(t),this.enumValues=s;}get isShimBacked(){return true}checkConstraint(){let t=this.context.column,s=this.enumValues.map(e=>`'${e.replace(/'/g,"''")}'`).join(", ");return `${t} IN (${s})`}serialize(t){if(this.isNullish(t))return t;if(typeof t!="string"||!this.enumValues.includes(t))throw this.checkError("enum_membership",t);return t}validateStorage(t){return this.isNullish(t)?this.validationPass():typeof t!="string"||!this.enumValues.includes(t)?this.validationFail("Invalid enum value.","Patch rows with declared enum values."):this.validationPass()}};});function Ts(c){try{return {ok:!0,value:JSON.parse(c)}}catch{return {ok:false}}}var it,Re=C(()=>{k();it=class extends L{elementField;constructor(t,s){super(t),this.elementField=s;}get sqliteType(){return "TEXT"}get isShimBacked(){return true}checkConstraint(){let t=this.context.column;return `${t} IS NULL OR (json_valid(${t}) AND json_type(${t}) = 'array')`}serialize(t){if(this.isNullish(t))return t;if(!Array.isArray(t))throw this.checkError("array_type",t);return this.elementField?JSON.stringify(t.map(s=>this.elementField.serialize(s))):JSON.stringify(t)}deserialize(t){if(this.isNullish(t))return t;if(typeof t=="string"){let s=Ts(t);if(s.ok&&Array.isArray(s.value))return this.elementField?s.value.map(e=>this.elementField.deserialize(e)):s.value}return t}validateStorage(t){if(this.isNullish(t))return this.validationPass();if(typeof t!="string")return this.validationFail("Expected JSON array text.","Patch rows with array values.");let s=Ts(t);if(!s.ok)return this.validationFail("Invalid JSON array text.","Patch rows with array values.");if(!Array.isArray(s.value))return this.validationFail("Expected JSON array.","Patch rows with array values.");if(this.elementField)for(let e of s.value){let i=this.elementField.validateStorage(e);if(i.status==="fail")return this.validationFail(`Invalid ${this.elementField.context.pgTypeName} array element.`,i.action??"Patch rows with valid array elements.")}return this.validationPass()}};});function Ss(c){return _i.test(c.toLowerCase())}var Li,_i,Ct,Oe=C(()=>{v();Li="????????-????-????-????-????????????",_i=/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/;Ct=class extends I{get isShimBacked(){return true}checkConstraint(){let t=this.quoteIfNeeded(this.context.column);return `${t} IS NULL OR ${t} GLOB '${Li}'`}serialize(t){if(this.isNullish(t))return t;if(typeof t!="string")throw this.checkError("uuid_format",t);let s=t.toLowerCase();if(!Ss(s))throw this.checkError("uuid_format",t);return s}validateStorage(t){return this.isNullish(t)?this.validationPass():typeof t!="string"||!Ss(t)?this.validationFail("Invalid UUID.","Patch rows with valid UUIDs."):this.validationPass()}};});function wi(c){let t=c.split("/");if(t.length>2)return null;let s=t[0];if(!s)return null;if(t.length===1)return {address:s,prefix:null};let e=t[1];return !e||!/^\d+$/.test(e)?null:{address:s,prefix:Number(e)}}function vi(c){let t=c.split(".");return t.length!==4?false:t.every(s=>{if(!/^\d+$/.test(s))return false;let e=Number(s);return e>=0&&e<=255})}function di(c){if(!c.includes(":"))return false;try{return new URL(`http://[${c}]/`),!0}catch{return false}}function Cs(c){let t=wi(c);return t?vi(t.address)?t.prefix===null||t.prefix>=0&&t.prefix<=32:di(t.address)?t.prefix===null||t.prefix>=0&&t.prefix<=128:false:false}var At,ye=C(()=>{v();At=class extends I{get isShimBacked(){return true}checkConstraint(){let t=this.quoteIfNeeded(this.context.column);return `${t} IS NULL OR (length(${t}) BETWEEN 3 AND 49 AND (instr(${t}, '.') > 0 OR instr(${t}, ':') > 0))`}serialize(t){if(this.isNullish(t))return t;if(typeof t!="string")throw this.checkError("inet_format",t);let s=t.trim();if(!Cs(s))throw this.checkError("inet_format",t);return s}validateStorage(t){return this.isNullish(t)?this.validationPass():typeof t!="string"||!Cs(t.trim())?this.validationFail("Invalid inet address.","Patch rows with valid inet strings."):this.validationPass()}};});var Nt,be=C(()=>{v();Nt=class extends I{serialize(t){throw new Error(`Unsupported type "${this.context.pgTypeName}" for ${this.context.table}.${this.context.column}`)}deserialize(t){throw new Error(`Unsupported type "${this.context.pgTypeName}" for ${this.context.table}.${this.context.column}`)}toColumnDDL(){throw new Error(`Unsupported type "${this.context.pgTypeName}" for ${this.context.table}.${this.context.column}`)}};});function J(c,t){if(t?.isArray){let e=J(c,{...t,isArray:false});return new it(c,e)}if(t?.enumValues)return new St(c,t.enumValues);let s=c.pgTypeName.toLowerCase().trim();if(s.startsWith("_")||s.endsWith("[]")){let e=s.startsWith("_")?s.slice(1):s.slice(0,-2),i={...c,pgTypeName:e},r=J(i);return new it(c,r)}return Pi.has(s)?new ot(c):Di.has(s)?new W(c):Ui.has(s)?new ft(c):Fi.has(s)?new ht(c):Vi.has(s)?new mt(c):Gi.has(s)?new Et(c):Wi.has(s)?new gt(c):Ji.has(s)?new Tt(c):$i.has(s)?new ct(c):ki.has(s)?new pt(c,t?.numericPrecision):Bi.has(s)?new Ct(c):Mi.has(s)?new I(c,63):qi.has(s)?new At(c):ji.has(s)?new I(c,t?.lengthConstraint):new Nt(c)}var Di,Pi,ki,ji,$i,Ui,Fi,Bi,Mi,qi,Vi,Gi,Wi,Ji,Ie=C(()=>{Vt();fe();he();v();me();Ee();ge();Te();Se();Ce();Ae();Ne();Re();Oe();ye();be();Di=new Set(["int2","smallint","int4","integer","int","int8","bigint"]),Pi=new Set(["serial","serial4","bigserial","serial8","smallserial","serial2"]),ki=new Set(["float4","real","float8","double precision","numeric","decimal"]),ji=new Set(["text","varchar","character varying","char","character","bpchar"]),$i=new Set(["bytea"]),Ui=new Set(["bool","boolean"]),Fi=new Set(["json","jsonb"]),Bi=new Set(["uuid"]),Mi=new Set(["name"]),qi=new Set(["inet"]),Vi=new Set(["date"]),Gi=new Set(["time","timetz","time without time zone","time with time zone"]),Wi=new Set(["timestamp","timestamptz","timestamp without time zone","timestamp with time zone"]),Ji=new Set(["interval"]);});function Le(c,t="auto"){let s=c.toLowerCase(),e=Gt[s];if(!e)return null;switch(t){case "translate":{if(!e.sqlite)throw new Error(`No SQLite translation for function "${c}"`);return {sqliteExpr:e.sqlite(),jsFn:null}}case "synthetic":{if(!e.js)throw new Error(`No JS implementation for function "${c}"`);return {sqliteExpr:null,jsFn:e.js}}case "auto":return e.js?{sqliteExpr:null,jsFn:e.js}:e.sqlite?{sqliteExpr:e.sqlite(),jsFn:null}:null}}var As,Gt,_e=C(()=>{As="lower(hex(randomblob(4))) || '-' || lower(hex(randomblob(2))) || '-4' || substr(lower(hex(randomblob(2))),2) || '-' || substr('89ab',abs(random()) % 4 + 1, 1) || substr(lower(hex(randomblob(2))),2) || '-' || lower(hex(randomblob(6)))",Gt={gen_random_uuid:{sqlite:()=>As,js:()=>crypto.randomUUID()},uuid_generate_v4:{sqlite:()=>As,js:()=>crypto.randomUUID()},now:{sqlite:()=>"datetime('now')",js:()=>new Date().toISOString()},current_timestamp:{sqlite:()=>"datetime('now')",js:()=>new Date().toISOString()},current_date:{sqlite:()=>"date('now')",js:()=>new Date().toISOString().split("T")[0]},current_time:{sqlite:()=>"time('now')",js:()=>new Date().toISOString().split("T")[1].replace("Z","")},random:{sqlite:()=>"random()",js:()=>Math.random()},length:{sqlite:()=>"length",js:null},lower:{sqlite:()=>"lower",js:null},upper:{sqlite:()=>"upper",js:null},substr:{sqlite:()=>"substr",js:null},substring:{sqlite:()=>"substr",js:null},trim:{sqlite:()=>"trim",js:null},ltrim:{sqlite:()=>"ltrim",js:null},rtrim:{sqlite:()=>"rtrim",js:null},replace:{sqlite:()=>"replace",js:null},coalesce:{sqlite:()=>"coalesce",js:null},nullif:{sqlite:()=>"nullif",js:null},count:{sqlite:()=>"count",js:null},sum:{sqlite:()=>"sum",js:null},avg:{sqlite:()=>"avg",js:null},min:{sqlite:()=>"min",js:null},max:{sqlite:()=>"max",js:null},localtime:{sqlite:()=>"time('now', 'localtime')",js:null},localtimestamp:{sqlite:()=>"datetime('now', 'localtime')",js:null}};});var Ns,Rs,Wt,Os=C(()=>{ae();tt();Ns=$e(hs());V();Rs=$e(le());V();ms();zt();Es();ee();te();se();bt();Ie();_e();Wt=class extends z{enums;schemaHandling;warnings=[];helper;config;triggerFunctions=new Map;plpgsqlParser=new qt;introspection;functionResolution;constructor(t,{enums:s,schemaHandling:e,introspection:i,...r}={}){super(t,r),this.schemaHandling=e??"default",this.enums=s??new Map,this.helper=new Mt(t),this.config=r,this.introspection=i,this.functionResolution=r?.functionResolution??"translate";}visit(t,s){let e=Z(t),i=Ft.get(e);if(i){if(i.react==="error")throw new R({[e]:t},`Unsupported node type: ${e}`);return i.react==="warn"&&this.warnings.push({type:e,node:t}),""}return super.visit(t,s)}deparse(t,s){if(t==null)return null;if(!s){let e=new Rs.SqlFormatter;s=new Ns.DeparserContext({formatter:e});}return typeof t=="number"||t instanceof Number?t.toString():this.visit(t,s)}RawStmt(t,s){if(!t.stmt||t.stmt.CommentStmt)return "";let e=this.deparse(t.stmt,s);return !e||e.length===0?"":t.stmt_len?e+";":e}RangeVar(t,s){this.ensureRelation(t);let e=this.effectiveSchema(t.schemaname),i=t.relname,r=this.quoteBareIfNeeded(i);e&&(this.schemaHandling==="prefix"?r=`${e}__${i}`:r=`"${e}.${i}"`);let n=t.alias?" "+this.Alias(t.alias,s):"";return r+n}getRelationName(t){this.ensureRelation(t);let s=this.effectiveSchema(t.schemaname),e=t.relname;return s?this.schemaHandling==="prefix"?`${s}__${e}`:`${s}.${e}`:e}quoteBareIfNeeded(t){return /^[A-Za-z_][A-Za-z0-9_]*$/.test(t)?t:`"${t.replace(/"/g,'""')}"`}effectiveSchema(t){if(t){if(this.config.forceDefaultSchema||this.schemaHandling!=="default")return t;if(t!=="public")return t}}ensureRelation(t){let s=this.config.forceDefaultSchema;s&&(!t||typeof t!="object"||s.length===0||t.schemaname||(t.schemaname=s));}CreateStmt(t,s){if(t.inhRelations&&t.inhRelations.length>0)throw new R({CreateStmt:t},"Inheritance is not supported in SQLite");if(t.ofTypename!==void 0)throw new R({CreateStmt:t},"Typed tables (CREATE TABLE ... OF type_name) are not supported. Define columns directly in the CREATE TABLE statement instead.");if(t.options&&t.options.length>0&&(t.options=void 0),!t.tableElts||t.tableElts.length===0)throw new R({CreateStmt:t},"Empty tables are not supported in SQLite. Define at least one column.");return t.accessMethod&&(t.accessMethod=void 0),super.CreateStmt(t,s)+" STRICT"}TableLikeClause(t,s){throw new R({TableLikeClause:t},"CREATE TABLE ... (LIKE ...) is not supported in SQLite. Define the table columns explicitly instead.")}DefElem(t,s){if(["oids","fillfactor",/^autovacuum_/i,"toast_tuple_target","parallel_workers","user_catalog_table"].some(r=>Ve(t.defname??"",r)))return "";let i=super.DefElem(t,s);throw new R({DefElem:t},`DefElem "${t.defname}" (${i}) not supported`)}TypeName(t,s){if(!t.names)return "";let e=t.names.map(r=>r.String?r.String.sval||r.String.str:"").filter(Boolean);if(e.length===0)return "";let i=e.length===2&&e[0]==="pg_catalog"?e[1]:e.join(".");return t.arrayBounds&&t.arrayBounds.length>0||this.enums.has(i.toLowerCase())?"TEXT":fs(i)}ColumnDef(t,s){let e=[],i=t.colname;i&&e.push(this.quoteIfNeeded(i));let r=false,n=false,a=null,u=null,l=null,o=false;if(t.typeName){let f=t.typeName.names?.map(E=>E.String?.sval||E.String?.str).filter(Boolean);l=f&&(f.length===2&&f[0]==="pg_catalog"?f[1]:f[0]),r=!!(l&&jt(l)),o=!!(t.typeName.arrayBounds&&t.typeName.arrayBounds.length>0);let m=Array.isArray(t.typeName.typmods)?t.typeName.typmods:[],T=E=>m[E]?.A_Const?.ival?.ival??m[E]?.A_Const?.val?.ival?.ival;if(l&&$t(l)&&m.length>0){let E=T(0);typeof E=="number"&&E>0&&(a={maxLen:E});}if(l&&Ut(l)&&m.length>=2){let E=T(0),g=T(1);typeof E=="number"&&typeof g=="number"&&E>0&&g>=0&&(u={precision:E,scale:g});}if(t.constraints){let E=Array.isArray(t.constraints)?t.constraints:[];n=E.some(g=>g.Constraint?.contype==="CONSTR_PRIMARY"),E.some(g=>g.Constraint?.contype==="CONSTR_IDENTITY")&&(r=true);}e.push(this.TypeName(t.typeName,s));}if(t.constraints){let f=Array.isArray(t.constraints)?t.constraints:[],m=f.map(E=>this.visit(E,s));e.push(...m.filter(Boolean));let T=f.some(E=>E.Constraint?.contype==="CONSTR_CHECK");r&&n&&!T&&e.push("AUTOINCREMENT");}if(i&&l){let f={isArray:o};a&&(f.lengthConstraint=a.maxLen),u&&(f.numericPrecision=u);let m=this.enums.get(l.toLowerCase());m&&(f.enumValues=m);let g=J({schema:"public",table:"",column:i,pgTypeName:l,nullable:true,defaultValue:null,defaultFn:null,isPrimaryKey:n,isUnique:false,isSerial:r},f).checkConstraint();g&&e.push(`CHECK (${g})`);}return e.join(" ")}Constraint(t,s){let e=t.contype;if(e==="CONSTR_IDENTITY"||e==="CONSTR_ATTR_DEFERRABLE"||e==="CONSTR_ATTR_NOT_DEFERRABLE"||e==="CONSTR_ATTR_DEFERRED"||e==="CONSTR_ATTR_IMMEDIATE")return "";if(e==="CONSTR_NULL")return "NULL";if(e==="CONSTR_NOTNULL")return "NOT NULL";if(e==="CONSTR_DEFAULT"&&t.raw_expr){let i=this.visit(t.raw_expr,s);return i.includes("(")&&!i.startsWith("(")?`DEFAULT (${i})`:`DEFAULT ${i}`}if(e==="CONSTR_CHECK"&&t.raw_expr){let i=[];t.conname&&i.push("CONSTRAINT",kt(t.conname)),i.push("CHECK");let r=this.visit(t.raw_expr,s);return i.push(`(${r})`),i.join(" ")}if(e==="CONSTR_PRIMARY")return t.keys&&t.keys.length>0?`PRIMARY KEY (${q(t.keys).map(r=>this.visit(r,s)).join(", ")})`:"PRIMARY KEY";if(e==="CONSTR_UNIQUE")return t.keys&&t.keys.length>0?`UNIQUE (${q(t.keys).map(r=>this.visit(r,s)).join(", ")})`:"UNIQUE";if(e==="CONSTR_FOREIGN")return super.Constraint(t,s).replace(/FOREIGN\s+KEY\s+REFERENCES/gi,"REFERENCES");if(e==="CONSTR_GENERATED"&&t.raw_expr)return `GENERATED ALWAYS AS (${this.visit(t.raw_expr,s)}) STORED`;if(e==="CONSTR_EXCLUSION")throw new R({Constraint:t},"EXCLUSION constraints are not supported in SQLite");return ""}FuncCall(t,s){let i=(t.funcname||[]).map(l=>l.String?.sval||l.String?.str).filter(Boolean);if(i.length===0)throw new Error("Function call has no name");let r=i[i.length-1].toLowerCase();if(r==="extract"&&t.args&&t.args.length>=2){let l=t.args[0];if((l?.A_Const?.sval?.sval||l?.String?.sval)==="epoch")return `strftime('%s', ${this.visit(t.args[1],s)})`}let a=(t.args??[]).map(l=>this.visit(l,s));if(t.agg_star)return `${r}(*)`;if(t.agg_distinct)return `${r}(DISTINCT ${a.join(", ")})`;let u=Le(r,this.functionResolution);if(u){if(u.sqliteExpr!==null){let l=u.sqliteExpr;return l.includes("(")?l:`${l}(${a.join(", ")})`}if(u.jsFn!==null){let l=Gt[r];if(l?.sqlite){let o=l.sqlite();return o.includes("(")?o:`${o}(${a.join(", ")})`}}}throw new R({FuncCall:t},`Function call "${r}" not supported`)}SQLValueFunction(t,s){switch(t.op){case "SVFOP_CURRENT_TIMESTAMP":return "datetime('now')";case "SVFOP_CURRENT_DATE":return "date('now')";case "SVFOP_CURRENT_TIME":return "time('now')";default:throw new R({SQLValueFunction:t},`SQLValueFunction "${t.op}" not supported`)}}ResTarget(t,s){if(t.indirection&&t.indirection.length>0)throw new R({ResTarget:t},"Indirections are not supported in SQLite");let e=[];return s.update&&t.name?(e.push(this.quoteIfNeeded(t.name)),e.push("="),t.val&&e.push(this.deparse(t.val,s))):s.insertColumns&&t.name?e.push(this.quoteIfNeeded(t.name)):(t.val&&e.push(this.deparse(t.val,s)),t.name&&e.push(this.Alias({aliasname:t.name},s))),e.join(" ")}A_Expr(t,s){if(["AEXPR_OP_ALL","AEXPR_OP_ANY"].includes(t.kind))throw new R({A_Expr:t},"ALL/ANY/SOME comparison operators are not supported. Use NOT EXISTS or IN instead");if(t.name&&t.name.length>0){if(t.name.length>1)throw new R({A_Expr:t},"Schema-qualified OPERATOR() syntax is not supported in SQLite");let e=t.name[0]?.String?.sval||t.name[0]?.String?.str;if(e){if(!t.lexpr||!t.rexpr)throw new R({A_Expr:t},"A_Expr missing left or right expression");if(!cs.includes(e.toUpperCase()))throw new R({A_Expr:t},`Operator "${e}" is not supported in SQLite`);if(e==="~~"||e==="~~*"){let i=this.visit(t.lexpr,s),r=this.visit(t.rexpr,s);return `${i} LIKE ${r}`}if(e==="!~~"||e==="!~~*"){let i=this.visit(t.lexpr,s),r=this.visit(t.rexpr,s);return `${i} NOT LIKE ${r}`}if(e==="~"||e==="~*"){let i=this.visit(t.lexpr,s),r=this.visit(t.rexpr,s);return `${i} GLOB ${r}`}}}return super.A_Expr(t,s)}IndexStmt(t,s){let e=["CREATE"];t.unique&&e.push("UNIQUE"),e.push("INDEX"),t.if_not_exists&&e.push("IF NOT EXISTS"),t.idxname&&e.push(kt(t.idxname)),e.push("ON"),t.relation&&e.push(this.RangeVar(t.relation,s));let i=(t.indexParams??[]).map(r=>"IndexElem"in r?this.IndexElem(r.IndexElem,s):this.visit(r,s)).filter(Boolean);return e.push(`(${i.join(", ")})`),e.join(" ")}IndexElem(t,s){let e=[];return t.name?e.push(kt(t.name)):t.expr&&e.push(`(${this.visit(t.expr,s)})`),t.ordering==="SORTBY_ASC"&&e.push("ASC"),t.ordering==="SORTBY_DESC"&&e.push("DESC"),t.nulls_ordering==="SORTBY_NULLS_FIRST"&&e.push("NULLS FIRST"),t.nulls_ordering==="SORTBY_NULLS_LAST"&&e.push("NULLS LAST"),e.join(" ")}TypeCast(t,s){if(!t.arg||!t.typeName)return super.TypeCast(t,s);if([...this.helper.walk(t)].filter(({node:n})=>"A_Star"in n).length>0)throw new R({TypeCast:t},"A.* in type casts are not supported in SQLite");if(t.typeName.arrayBounds&&t.typeName.arrayBounds.length>0){if("A_Const"in t.arg&&t.arg.A_Const.sval){let n=t.arg.A_Const.sval.sval;if(n.startsWith("{")&&n.endsWith("}")){let a=t.typeName.names?.map(f=>f.String?.sval).filter(Boolean)??[],u=a.length===2&&a[0]==="pg_catalog"?a[1]:a[0],o=["text","varchar","character varying","char","bpchar","name","uuid"].includes(u?.toLowerCase());try{let f=this.parsePgArrayLiteral(n,o);return `'${JSON.stringify(f).replace(/'/g,"''")}'`}catch{}}}return this.visit(t.arg,s)}let i=this.visit(t.arg,s),r=this.TypeName(t.typeName,s);return `CAST(${i} AS ${r})`}A_ArrayExpr(t,s){let e=q(t.elements),i=this.tryExtractStaticArray(e);return i!==void 0?`'${JSON.stringify(i).replace(/'/g,"''")}'`:`json_array(${e.map(n=>this.visit(n,s)).join(", ")})`}tryExtractStaticArray(t){let s=[];for(let e of t)if("A_ArrayExpr"in e){let i=q(e.A_ArrayExpr.elements),r=this.tryExtractStaticArray(i);if(r===void 0)return;s.push(r);}else if("A_Const"in e){let i=e.A_Const;if(i.isnull)s.push(null);else if(i.ival)s.push(i.ival.ival);else if(i.fval)s.push(parseFloat(i.fval.fval));else if(i.sval)s.push(i.sval.sval);else if("boolval"in i)s.push(i.boolval.boolval===true);else return}else return;return s}parsePgArrayLiteral(t,s){if(!t.startsWith("{")||!t.endsWith("}"))throw new Error("Not a PG array literal");let e=t.slice(1,-1);if(e.length===0)return [];let i=[],r=0;for(;r<e.length;)if(e[r]==="{"){let n=0,a=r;for(;a<e.length;){if(e[a]==="{")n++;else if(e[a]==="}"&&(n--,n===0))break;a++;}i.push(this.parsePgArrayLiteral(e.slice(r,a+1),s)),r=a+1,e[r]===","&&r++;}else if(e[r]==='"'){let n=r+1,a="";for(;n<e.length&&e[n]!=='"';)e[n]==="\\"&&n++,a+=e[n],n++;i.push(a),r=n+1,e[r]===","&&r++;}else {let n=r;for(;n<e.length&&e[n]!==","&&e[n]!=="}";)n++;if(n===r)throw new Error("Malformed PG array literal");let a=e.slice(r,n);if(a==="NULL")i.push(null);else if(s)i.push(a);else {let u=Number(a);i.push(isNaN(u)?a:u);}r=n,e[r]===","&&r++;}return i}BetweenExpr(t,s){return super.A_Expr(t,s)}AlterTableStmt(t,s){let e=t.cmds??[],i=["AT_EnableRowSecurity","AT_ForceRowSecurity"],r=e.filter(o=>"AlterTableCmd"in o&&!i.includes(o.AlterTableCmd.subtype));if(r.length===0)return "";if(!["OBJECT_TABLE","OBJECT_INDEX","OBJECT_VIEW"].includes(t.objtype))throw new R({AlterTableStmt:t},`AlterTableStmt with objtype ${t.objtype} is not supported`);let n=["AT_AddColumn","AT_DropColumn"],a=["AT_AlterColumnType","AT_SetNotNull","AT_DropNotNull","AT_ColumnDefault","AT_AddConstraint","AT_DropConstraint"],u=[],l=[];for(let o of r){let f=o.AlterTableCmd.subtype;if(n.includes(f)){let m={...t,cmds:[o]};u.push(super.AlterTableStmt(m,s));}else if(a.includes(f))l.push(o.AlterTableCmd);else throw new R({AlterTableStmt:t},`AlterTableCmd with subtype ${f} is not supported in SQLite`)}if(l.length>0){let o=this.getRelationName(t.relation);u.push(this.generateRebuildSql(o,l));}return u.join(`;
46
- `)}AlterTableCmd(t,s){if(!["AT_AddColumn","AT_DropColumn"].includes(t.subtype))throw new R({AlterTableCmd:t},`AlterTableCmd with subtype ${t.subtype} is not supported`);return t.subtype==="AT_DropColumn"&&t.behavior?super.AlterTableCmd({...t,behavior:void 0},s):super.AlterTableCmd(t,s)}DefineStmt(t,s){if(t.kind==="OBJECT_AGGREGATE")throw new Error("AGGREGATE definitions are not supported in SQLite");return super.DefineStmt(t,s)}InsertStmt(t,s){if("selectStmt"in t){let i=(t.selectStmt?.SelectStmt?.valuesLists??[]).map(r=>r.List?.items?.map(n=>"SetToDefault"in n));if(i.length===1&&i[0]?.every(r=>r===true))return super.InsertStmt({...t,selectStmt:void 0,cols:void 0},s);if(i.some(r=>r.some(n=>n===true)))throw new R({InsertStmt:t},"Insert with partial DEFAULT values is not supported")}return super.InsertStmt(t,s)}SelectStmt(t,s){if(this.helper.hasUnsafeStar())throw new R({SelectStmt:t},"Row-wise comparison using .* is not supported in SQLite. Expand to explicit per-column comparisons instead.");if(t.intoClause)throw new R({SelectStmt:t},"SELECT ... INTO clause is not supported in SQLite");if(t.distinctClause){let i=q(t.distinctClause);if(i.length>0&&Object.keys(i[0]).length>0)throw new R({SelectStmt:t},"DISTINCT ON clause is not supported in SQLite. Use window functions instead.")}if(t.limitOffset&&!t.limitCount)throw new R({SelectStmt:t},"OFFSET without LIMIT is not supported in SQLite");let e=super.SelectStmt(t,s);if(/^SELECT\s+FROM/.test(e))throw new R({SelectStmt:t},"SELECT without a target list is not supported in SQLite");return e}JoinExpr(t,s){return t.alias&&this.Alias(t.alias,s),super.JoinExpr(t,s)}A_Const(t,s){if(t.bsval!==void 0)throw new R({A_Const:t},"Bit string literals are not supported in SQLite");let e=super.A_Const(t,s);return typeof e=="string"&&e.startsWith("E'")?e.substring(2,e.length-1):e}SortBy(t,s){if(t.sortby_dir==="SORTBY_USING"){let e=q(t.useOp),i=e[0]?.String?.sval;if(e.length>1||!["<",">"].includes(i??""))throw new R({SortBy:t},"Only `USING <` or `USING >` are supported.");t.sortby_dir=i==="<"?"SORTBY_DESC":"SORTBY_ASC",t.useOp=void 0;}return super.SortBy(t,s)}RangeSubselect(t,s){if(t.lateral)throw new R({RangeSubselect:t},"LATERAL subqueries are not supported in SQLite");return super.RangeSubselect(t,s)}SubLink(t,s){if(["ANY_SUBLINK","ALL_SUBLINK"].includes(t.subLinkType))throw new R({SubLink:t},"ANY/ALL/SOME subqueries are not supported. Use NOT EXISTS or IN instead");if(t.subLinkType==="ARRAY_SUBLINK")throw new R({SubLink:t},"ARRAY subqueries are not supported in SQLite");return super.SubLink(t,s)}LockingClause(t,s){return ""}UpdateStmt(t,s){if(s.parentNodeTypes.includes("SelectStmt"))throw new R({UpdateStmt:t},"UPDATE ... FROM (SELECT ...) is not supported in SQLite");return super.UpdateStmt(t,s)}Alias(t,s){if(t.colnames&&t.colnames.length>0)throw new R({Alias:t},"Aliasing with column names is not supported in SQLite");return `AS "${t.aliasname}"`}CreateFunctionStmt(t,s){let e=t.options??[],i=t.returnType?.names?.map(l=>l.String?.sval).filter(Boolean).join("."),r=e.find(l=>l.DefElem?.defname==="language")?.DefElem?.arg?.String?.sval;if(i!=="trigger"||r!=="plpgsql")throw new R({CreateFunctionStmt:t},"Only trigger functions with LANGUAGE plpgsql are supported");let n=t.funcname?.map(l=>l.String?.sval).filter(Boolean).pop();if(!n)throw new Error("Function has no name");let a=e.find(l=>l.DefElem?.defname==="as")?.DefElem?.arg?.List?.items?.[0]?.String?.sval;if(!a)throw new Error("Function has no body");let u=this.plpgsqlParser.parse(a);return this.triggerFunctions.set(n,u),""}CreateTrigStmt(t,s){let e=t.trigname,i=this.RangeVar(t.relation,s),r=t.funcname?.map(f=>f.String?.sval).filter(Boolean).pop();if(!r)throw new Error(`Trigger "${e}" has no function reference`);let n=this.triggerFunctions.get(r);if(!n)throw new R({CreateTrigStmt:t},`Trigger "${e}" references unknown function "${r}"`);let a=t.timing===2?"BEFORE":t.timing===64?"INSTEAD OF":"AFTER",u=[];if(t.events&4&&u.push("INSERT"),t.events&8&&u.push("DELETE"),t.events&16)if(t.columns?.length){let f=t.columns.map(m=>m.String?.sval).filter(Boolean);u.push(`UPDATE OF ${f.join(", ")}`);}else u.push("UPDATE");let l=u.join(" OR "),o=this.buildTriggerBody(n,i,s);return [`CREATE TRIGGER ${e}`,`${a} ${l} ON ${i}`,"FOR EACH ROW","BEGIN",...o.map(f=>` ${f};`),"END"].join(`
47
- `)}buildTriggerBody(t,s,e){let i=[],r=[];for(let n of t.statements)if(n.type!=="return"){if(n.type==="assignment"){r.push(n);continue}r.length>0&&(i.push(this.buildAssignmentUpdate(r,s,e)),r.length=0),n.type==="dml"&&i.push(this.translateDml(n.sql,e));}return r.length>0&&i.push(this.buildAssignmentUpdate(r,s,e)),i}buildAssignmentUpdate(t,s,e){let i=t.map(r=>{let n=this.translateExpression(r.expression,e);return `${r.column} = ${n}`});return `UPDATE ${s} SET ${i.join(", ")} WHERE rowid = NEW.rowid`}translateExpression(t,s){try{let e=`SELECT ${t}`,i=t.trim().toLowerCase();return i==="now()"||i==="current_timestamp"?"datetime('now')":t}catch{return t}}translateDml(t,s){return t.replace(/\bnow\(\)/gi,"datetime('now')").replace(/\bcurrent_timestamp\b/gi,"datetime('now')").replace(/\bgen_random_uuid\(\)/gi,this.uuidExpression()).replace(/\buuid_generate_v4\(\)/gi,this.uuidExpression())}uuidExpression(){return "lower(hex(randomblob(4))) || '-' || lower(hex(randomblob(2))) || '-4' || substr(lower(hex(randomblob(2))),2) || '-' || substr('89ab',abs(random()) % 4 + 1, 1) || substr(lower(hex(randomblob(2))),2) || '-' || lower(hex(randomblob(6)))"}NullTest(t,s){if(t.arg?.ColumnRef?.fields?.length>1)throw new R({NullTest:t},"row-level NULL tests are not supported in SQLite");return super.NullTest(t,s)}RenameStmt(t,s){if(!t.renameType)throw new Error("RenameStmt requires renameType");let e=["OBJECT_TABLE","OBJECT_VIEW","OBJECT_COLUMN"];if(t.renameType==="OBJECT_COLUMN"&&(t.relationType==="OBJECT_FOREIGN_TABLE"||t.relationType==="OBJECT_VIEW"))throw new R({RenameStmt:t},`RenameStmt with relationType ${t.relationType} is not supported`);if(!e.includes(t.renameType))throw new R({RenameStmt:t},`RenameStmt with renameType ${t.renameType} is not supported in SQLite`);return super.RenameStmt(t,s)}DropStmt(t,s){let e=t.removeType;if(["OBJECT_TABLE","OBJECT_VIEW","OBJECT_INDEX","OBJECT_TRIGGER"].includes(e))return super.DropStmt(t,s);if(["OBJECT_POLICY"].includes(e))return "";throw new R({DropStmt:t},`DROP with removeType ${e} is not supported in SQLite`)}generateRebuildSql(t,s){if(!this.introspection)throw new Error(`ALTER TABLE on "${t}" requires 12-step rebuild but no introspection was provided. Pass introspection in DeparseOptions to enable column type changes, NOT NULL, defaults, and constraint modifications.`);let e=this.buildDesiredSchema(this.introspection,t,s),i=new H,r=new X,n=i.diff(this.introspection,e);return n.has_changes?r.plan(n,this.introspection,e).steps.filter(u=>!["disable_foreign_keys","begin_transaction","commit_transaction","enable_foreign_keys"].includes(u.type)).map(u=>u.sql).join(`
48
- `):""}buildDesiredSchema(t,s,e){let i={...t,tables:t.tables.map(r=>({...r})),columns:t.columns.map(r=>({...r})),indexes:t.indexes.map(r=>({...r})),foreign_keys:t.foreign_keys.map(r=>({...r})),primary_keys:t.primary_keys.map(r=>({...r})),views:t.views.map(r=>({...r})),triggers:(t.triggers??[]).map(r=>({...r})),check_constraints:t.check_constraints.map(r=>({...r})),unique_constraints:(t.unique_constraints??[]).map(r=>({...r})),comments:(t.comments??[]).map(r=>({...r})),custom_types:t.custom_types.map(r=>({...r}))};for(let r of e){let n=i.columns.findIndex(a=>a.table===s&&a.name===r.name);switch(r.subtype){case "AT_AlterColumnType":{if(n===-1)break;let a=this.extractTypeName(r);a&&(i.columns[n]={...i.columns[n],type:a.toLowerCase()});break}case "AT_SetNotNull":{if(n===-1)break;i.columns[n]={...i.columns[n],nullable:false};break}case "AT_DropNotNull":{if(n===-1)break;i.columns[n]={...i.columns[n],nullable:true};break}case "AT_ColumnDefault":{if(n===-1)break;if(r.def){let a=this.extractDefaultValue(r);i.columns[n]={...i.columns[n],default_value:a};}else i.columns[n]={...i.columns[n],default_value:null};break}case "AT_AddConstraint":case "AT_DropConstraint":{let a=i.tables.findIndex(u=>u.name===s);a!==-1&&(i.tables[a]={...i.tables[a],sql:i.tables[a].sql+" /* modified */"});break}}}return this.rebuildTableSql(i,s),i}rebuildTableSql(t,s){let e=t.tables.findIndex(f=>f.name===s);if(e===-1)return;let i=t.columns.filter(f=>f.table===s),r=t.foreign_keys.filter(f=>f.table===s),n=t.check_constraints.filter(f=>f.table===s),a=i.map(f=>{let m=`${N(f.name)} ${f.type||"TEXT"}`;return f.is_primary_key&&(m+=" PRIMARY KEY"),f.nullable||(m+=" NOT NULL"),f.default_value!=null&&(m+=` DEFAULT ${f.default_value}`),m}),u=r.map(f=>`FOREIGN KEY (${N(f.column)}) REFERENCES ${N(f.ref_table)}(${N(f.ref_column)}) ON UPDATE ${f.on_update} ON DELETE ${f.on_delete}`),l=n.map(f=>`CHECK (${f.expression})`),o=[...a,...u,...l];t.tables[e]={...t.tables[e],sql:`CREATE TABLE ${N(s)} (${o.join(", ")}) STRICT`};}extractTypeName(t){let s=t.def?.ColumnDef;return s?.typeName?.TypeName?(s.typeName.TypeName.names??[]).map(i=>i.String?.sval).filter(Boolean).pop()??null:null}extractDefaultValue(t){return t.def?"Integer"in t.def?String(t.def.Integer.ival):"Float"in t.def?t.def.Float.fval:"String"in t.def?`'${t.def.String.sval}'`:null:null}};});var w,x,we=C(()=>{V();tt();w=class extends R{constructor(t,s){super(t,`Unsupported expression: ${s}`);}},x=class{deparse(t){if("A_Const"in t){let i=t.A_Const;if(i.boolval!==void 0)return i.boolval.boolval?{}:{$always:false}}let s=Object.keys(t)[0],e=this[s];if(!e)throw new w({[s]:t},`Unsupported expression: ${s}`);return e.call(this,t[s])}deparseValue(t){if("A_Const"in t)return this.A_Const(t.A_Const);if("ColumnRef"in t)return this.ColumnRef(t.ColumnRef);if("FuncCall"in t)return this.FuncCall(t.FuncCall);if("SubLink"in t)return this.SubLink(t.SubLink);if("TypeCast"in t)return this.TypeCast(t.TypeCast);if("A_Expr"in t){let e=this.isJwtAccessor(t.A_Expr);return e||this.A_Expr(t.A_Expr)}if("BoolExpr"in t)return this.BoolExpr(t.BoolExpr);let s=Object.keys(t)[0];throw new w({[s]:t},`deparseValue: ${s}`)}A_Expr(t){if(t.kind==="AEXPR_OP"){let s=t.name?.[0],e=s?ut(s):void 0;if(!e)throw new w({A_Expr:t},"A_Expr missing operator");let i=this.isJwtAccessor(t);if(i)return {[i]:{}};let r=t.lexpr?this.deparseValue(t.lexpr):void 0,n=t.rexpr?this.deparseValue(t.rexpr):void 0,a=this.mapOperator(e);if(!a)throw new w({A_Expr:t},`Unsupported operator: ${e}`);let u=t.rexpr!=null&&"ColumnRef"in t.rexpr;if(typeof r=="string"&&r.startsWith("{{")&&u)return {[n]:{[a]:r}};let l=u&&typeof n=="string"?{$ref:n}:n;return {[r]:{[a]:l}}}if(t.kind==="AEXPR_LIKE"||t.kind==="AEXPR_ILIKE"){let s=t.lexpr?this.deparseValue(t.lexpr):void 0,e=t.rexpr?this.deparseValue(t.rexpr):void 0,r=(t.name?.[0]?ut(t.name[0]):"~~")==="!~~"?"$notLike":"$like";return {[s]:{[r]:e}}}if(t.kind==="AEXPR_IN"){let s=t.lexpr?this.deparseValue(t.lexpr):void 0,e=t.rexpr&&"List"in t.rexpr&&t.rexpr.List.items?t.rexpr.List.items.map(i=>this.deparseValue(i)):[];return {[s]:{$in:e}}}throw new w({A_Expr:t},`A_Expr kind: ${t.kind}`)}BoolExpr(t){let s=t.args??[];switch(t.boolop){case "AND_EXPR":return {$and:s.map(e=>this.deparse(e))};case "OR_EXPR":return {$or:s.map(e=>this.deparse(e))};case "NOT_EXPR":return {$not:this.deparse(s[0])};default:throw new w({BoolExpr:t},`BoolExpr op: ${t.boolop}`)}}NullTest(t){let s=t.arg?this.deparseValue(t.arg):void 0;return t.nulltesttype==="IS_NULL"?{[s]:{$is:null}}:{[s]:{$isNot:null}}}SubLink(t){if(t.subLinkType==="ANY_SUBLINK"){let s=t.testexpr?this.deparseValue(t.testexpr):void 0,e=t.subselect?this.SelectStmt(t.subselect.SelectStmt):void 0;return {[s]:{$in:e}}}if(t.subLinkType==="EXISTS_SUBLINK")return {$exists:t.subselect?this.SelectStmt(t.subselect.SelectStmt):void 0};if(t.subLinkType==="EXPR_SUBLINK"){let s=t.subselect?t.subselect.SelectStmt:void 0;if(s?.fromClause?.length)return this.SelectStmt(s);if(s?.targetList?.[0]){let e=s.targetList[0],i="ResTarget"in e?e.ResTarget:void 0;if(i?.val){let r=this.deparseValue(i.val);return r}}}throw new w({SubLink:t},`SubLink type: ${t.subLinkType}`)}SelectStmt(t){let{from:s,schema:e,join:i}=this.deparseFromClause(t.fromClause??[]),r=[];for(let m of t.targetList??[]){let T="ResTarget"in m?m.ResTarget:void 0;if(T?.val){let E=this.deparseValue(T.val);Array.isArray(E)?r.push(...E.map(String)):E!=null&&E!==""&&r.push(String(E));}}let n=t.whereClause?this.deparse(t.whereClause):void 0,a=this.deparseSortClause(t.sortClause),u=this.deparseLimit(t.limitCount),l=this.deparseLimit(t.limitOffset),o=this.deparseGroupClause(t.groupClause),f={type:"query",from:s,select:r};return e&&(f.schema=e),Object.keys(i).length>0&&(f.join=i),n&&(f.where=n),a.length>0&&(f.order=a),u!==void 0&&(f.limit=u),l!==void 0&&(f.offset=l),o.length>0&&(f.group=o),f}FuncCall(t){let s=this.isAuthFunc(t.funcname??[]);if(s)return s;throw new w({FuncCall:t},`FuncCall: ${M(t.funcname??[]).join(".")}`)}ColumnRef(t){let s=M(t.fields??[]);return s.length===1?s[0]:s.join(".")}A_Const(t){if(t.boolval!==void 0)return t.boolval.boolval;if(t.ival!==void 0)return t.ival.ival??0;if(t.fval!==void 0)return parseFloat(t.fval.fval??"0");if(t.sval!==void 0)return t.sval.sval??"";if(t.isnull)return null;throw new w({A_Const:t},"A_Const: unknown variant")}TypeCast(t){if(!t.arg)throw new w({TypeCast:t},"TypeCast: missing arg");return this.deparseValue(t.arg)}BooleanTest(t){let s=t.arg?this.deparseValue(t.arg):void 0;return t.booltesttype==="IS_TRUE"?{[s]:{$eq:true}}:{[s]:{$eq:false}}}deparseFromClause(t){let s={};if(t.length===0)return {from:"",join:s};let e=t[0];if("RangeVar"in e){let i=e.RangeVar;return {from:i.relname??"",schema:i.schemaname,join:s}}if("JoinExpr"in e){let{from:i,schema:r}=this.walkJoinExpr(e.JoinExpr,s);return {from:i,schema:r,join:s}}return {from:"",join:s}}walkJoinExpr(t,s){let e={from:""};if(t.larg)if("RangeVar"in t.larg){let i=t.larg.RangeVar;e={from:i.relname??"",schema:i.schemaname};}else "JoinExpr"in t.larg&&(e=this.walkJoinExpr(t.larg.JoinExpr,s));if(t.rarg&&"RangeVar"in t.rarg){let i=t.rarg.RangeVar,r=i.relname??"",n=i.alias?.aliasname??r,a=t.jointype==="JOIN_LEFT"?"left":"inner",u={from:r,type:a};t.quals&&(u.on=this.deparse(t.quals));let l=n;if(l in s){let o=2;for(;`${l}_${o}`in s;)o++;l=`${l}_${o}`;}s[l]=u;}return e}deparseSortClause(t){if(!t)return [];let s=[];for(let e of t){if(!("SortBy"in e))continue;let i=e.SortBy;if(!i.node)continue;let r=String(this.deparseValue(i.node)),n=i.sortby_dir==="SORTBY_DESC"?"desc":"asc",a={column:r,direction:n};i.sortby_nulls==="SORTBY_NULLS_FIRST"?a.nullsFirst=true:i.sortby_nulls==="SORTBY_NULLS_LAST"&&(a.nullsFirst=false),s.push(a);}return s}deparseLimit(t){if(!t)return;let s=this.deparseValue(t);return typeof s=="number"?s:Number(s)}deparseGroupClause(t){return t?t.map(s=>String(this.deparseValue(s))):[]}isAuthFunc(t){let s=M(t);if(s.length===2&&s[0]==="auth"){if(s[1]==="uid")return "{{auth.uid}}";if(s[1]==="jwt")return "{{auth.jwt}}";if(s[1]==="role")return "{{auth.role}}";throw new Error(`Unsupported auth function: "${s.slice(1).join(".")}"`)}return null}isJwtAccessor(t){if(t.kind!=="AEXPR_OP")return null;let s=t.name?.[0]?ut(t.name[0]):void 0;if(s!=="->"&&s!=="->>")return null;let e=t.rexpr&&"A_Const"in t.rexpr?t.rexpr.A_Const.sval?.sval:void 0;if(e===void 0)return null;if(t.lexpr&&"FuncCall"in t.lexpr)return this.isAuthFunc(t.lexpr.FuncCall.funcname??[])==="{{auth.jwt}}"?`{{auth.jwt.${e}}}`:null;if(t.lexpr&&"A_Expr"in t.lexpr){let i=this.isJwtAccessor(t.lexpr.A_Expr);if(i)return `${i.slice(0,-2)}.${e}}}`}return null}mapOperator(t){switch(t){case "=":return "$eq";case "<>":case "!=":return "$neq";case ">":return "$gt";case ">=":return "$gte";case "<":return "$lt";case "<=":return "$lte";case "~~":return "$like";case "!~~":return "$notLike";default:return}}};});var Rt,ys=C(()=>{Rt=class{table;schema;fields;constructor(t,s="public",e=new Map){this.table=t,this.schema=s,this.fields=e;}get(t){return this.fields.get(t)}has(t){return this.fields.has(t)}set(t,s){this.fields.set(t,s);}columns(){return Array.from(this.fields.keys())}all(){return Array.from(this.fields.values())}serializeRow(t){let s={};for(let[e,i]of Object.entries(t)){let r=this.fields.get(e);s[e]=r?r.serialize(i):i;}return s}deserializeRow(t){let s={};for(let[e,i]of Object.entries(t)){let r=this.fields.get(e);s[e]=r?r.deserialize(i):i;}return s}applyDefaults(t){let s={...t};for(let[e,i]of this.fields)!(e in s)&&i.context.defaultFn&&(s[e]=i.context.defaultFn());return s}};});var bs=C(()=>{k();ce();Vt();fe();he();v();me();Ee();ge();Te();Se();Ce();Ae();Ne();Re();Oe();ye();be();Ie();_e();ys();});function Ls(c){let t=new Map;for(let s of c.stmts??[]){if(!s.stmt||!("CreateEnumStmt"in s.stmt))continue;let e=s.stmt.CreateEnumStmt,i=M(e.typeName??[]).join(".");if(!i||!e.vals)continue;let r=M(e.vals);t.set(i.toLowerCase(),r);}return t}function _s(c){let t=new Map;for(let s of c.stmts??[]){if(!s.stmt||!("VariableSetStmt"in s.stmt))continue;let e=s.stmt.VariableSetStmt,i=e.name,r=ps(e.args?.[0]??{});t.set(i,{value:r,local:e.is_local});}return t}function ws(c){let t=new x,s=new Set,e=[];for(let i of c.stmts??[])if(i.stmt){if("CreatePolicyStmt"in i.stmt){let r=i.stmt.CreatePolicyStmt,n=r.table?.relname??"",a=r.table?.schemaname,u={select:"SELECT",insert:"INSERT",update:"UPDATE",delete:"DELETE"},l=r.cmd_name?u[r.cmd_name]??"ALL":"ALL",o=r.permissive===true,f=[],m=false;for(let A of r.roles??[])if("RoleSpec"in A){let S=A.RoleSpec;S.roletype==="ROLESPEC_PUBLIC"?S.location===-1&&(m=true):S.roletype==="ROLESPEC_CSTRING"&&S.rolename&&f.push(S.rolename);}if(m){let A=a?`${a}.${n}`:n,S=r.policy_name??"",b=`${A}::${S}`;Is.has(b)||(Is.add(b),console.warn(`[supalite] policy "${S}" on "${A}" has no TO clause \u2014 applies to all roles (PUBLIC). For clarity, prefer an explicit \`TO <role>\` clause (e.g. \`TO authenticated\`).`));}let T=r.qual?t.deparse(r.qual):void 0,E=r.with_check?t.deparse(r.with_check):void 0,g=new $({name:r.policy_name??"",table:n,schema:a,command:l,permissive:o,roles:f,using:T,withCheck:E});e.push(g);}if("AlterTableStmt"in i.stmt){let r=i.stmt.AlterTableStmt;if((r.cmds??[]).some(u=>"AlterTableCmd"in u&&(u.AlterTableCmd.subtype==="AT_EnableRowSecurity"||u.AlterTableCmd.subtype==="AT_ForceRowSecurity"))){let u=r.relation?.relname??"";s.add(u);}}}return {policies:e,tables:s}}function vs(c,t){let s=new Map;for(let e of c.stmts??[]){if(!e.stmt||!("CreateStmt"in e.stmt))continue;let i=e.stmt.CreateStmt,r=i.relation?.relname??"",n=i.relation?.schemaname??"public";if(!r)continue;let a=new Rt(r,n);for(let u of i.tableElts??[]){if(!("ColumnDef"in u))continue;let l=u.ColumnDef,o=l.colname;if(!o)continue;let f=l.typeName?.names?.map(O=>O.String?.sval||O.String?.str).filter(Boolean),m=f&&(f.length===2&&f[0]==="pg_catalog"?f[1]:f[0]);if(!m)continue;let T=!!l.typeName?.arrayBounds?.length,E=Array.isArray(l.typeName?.typmods)?l.typeName.typmods:[],g=O=>E[O]?.A_Const?.ival?.ival??E[O]?.A_Const?.val?.ival?.ival,A={isArray:T};if($t(m)&&E.length>0){let O=g(0);typeof O=="number"&&O>0&&(A.lengthConstraint=O);}if(Ut(m)&&E.length>=2){let O=g(0),Y=g(1);typeof O=="number"&&typeof Y=="number"&&O>0&&Y>=0&&(A.numericPrecision={precision:O,scale:Y});}let S=t.get(m.toLowerCase());S&&(A.enumValues=S);let b=Array.isArray(l.constraints)?l.constraints:[],_=b.some(O=>O.Constraint?.contype==="CONSTR_PRIMARY"),y=jt(m)||b.some(O=>O.Constraint?.contype==="CONSTR_IDENTITY"),d=b.some(O=>O.Constraint?.contype==="CONSTR_NOTNULL"),D=b.find(O=>O.Constraint?.contype==="CONSTR_UNIQUE"),F=b.find(O=>O.Constraint?.contype==="CONSTR_GENERATED"),de=b.find(O=>O.Constraint?.contype==="CONSTR_FOREIGN"),De=b.find(O=>O.Constraint?.contype==="CONSTR_CHECK"),Pe;if(de){let O=de.Constraint,Y=O.pktable?.relname,Bs=O.pktable?.schemaname,ke=O.pk_attrs?.[0]?.String?.sval;Y&&ke&&(Pe={refSchema:Bs,refTable:Y,refColumn:ke,constraintName:O.conname||void 0});}let Fs={schema:n,table:r,column:o,pgTypeName:m,nullable:!d&&!_,defaultValue:null,defaultFn:null,isPrimaryKey:_,isUnique:!!D,isSerial:y,isGenerated:!!F,fkRef:Pe,hasCheck:!!De,checkConstraintName:De?.Constraint?.conname||void 0,uniqueConstraintName:D?.Constraint?.conname||void 0};a.set(o,J(Fs,A));}s.set(`${n}.${r}`,a);}return s}function ds(c){let t=[];for(let s of c.stmts??[]){if(!s.stmt||!("CreateStmt"in s.stmt))continue;let e=s.stmt.CreateStmt,i=e.relation?.relname??"",r=e.relation?.schemaname??"public";if(i)for(let n of e.tableElts??[]){if("ColumnDef"in n)continue;let a=n;if(!a.Constraint)continue;let u=a.Constraint,l=u.contype;if(l==="CONSTR_UNIQUE"){let o=(u.keys??[]).map(f=>f.String?.sval??f.String?.str).filter(Boolean);if(o.length===0)continue;t.push({schema:r,table:i,kind:"unique",name:u.conname||void 0,columns:o});}else if(l==="CONSTR_CHECK")t.push({schema:r,table:i,kind:"check",name:u.conname||void 0,columns:[]});else if(l==="CONSTR_FOREIGN"){let o=(u.fk_attrs??[]).map(T=>T.String?.sval??T.String?.str).filter(Boolean),f=(u.pk_attrs??[]).map(T=>T.String?.sval??T.String?.str).filter(Boolean),m=u.pktable?.relname;if(!m)continue;t.push({schema:r,table:i,kind:"foreign_key",name:u.conname||void 0,columns:o,refSchema:u.pktable?.schemaname,refTable:m,refColumns:f});}}}return t}function Ds(c){let t=[];for(let s of c.stmts??[]){if(!s.stmt||!("CommentStmt"in s.stmt))continue;let e=s.stmt.CommentStmt,i=e.comment??"";if(!i)continue;let r=e.objtype,n=(e.object?.List?.items??e.object?.items??[]).map(a=>a.String?.sval??a.String?.str).filter(Boolean);if(n.length!==0){if(r==="OBJECT_TABLE"||r==="OBJECT_VIEW"){let[a,u]=n.length>=2?n:["public",n[0]];t.push({schema:a,table:u,text:i});}else if(r==="OBJECT_COLUMN"){let a="public",u,l;n.length>=3?[a,u,l]=n:[u,l]=n,t.push({schema:a,table:u,column:l,text:i});}}}return t}var Is,Ps=C(()=>{we();V();Lt();bs();tt();Is=new Set;});var js={};Js(js,{Policy:()=>$,deparseDdl:()=>ve,deparseExpression:()=>Xi,deparsePostgresDdl:()=>Hi,deparseSelect:()=>Ki,parse:()=>K,parseExpression:()=>ks,translatePostgresDdl:()=>Yi});async function Yi(c,t={}){let s=await K(c);return ve(s,t).ddl}async function Hi(c,t={}){let s=await K(c);return {ast:s,...ve(s,t)}}function ve(c,t={}){let s=Ls(c),e=vs(c,s),i=_s(c),r=ds(c),n=Ds(c),a=new Wt(c,{...t,enums:s}),{policies:u,tables:l}=ws(c);if(t.strict)for(let o of u){if(!e.get(`${o.data.schema??"public"}.${o.data.table}`))throw new Error(`Policy "${o.data.name}" references unknown table "${o.data.table}"`);if(!l.has(o.data.table))throw new Error(`RLS is not enabled on table "${o.data.table}"`)}return {ddl:a.deparseQuery(),enums:s,rls:{tables:l,policies:u},schema:e,vars:i,tableConstraints:r,comments:n}}async function ks(c){let s=(await K(`SELECT 1 WHERE ${c}`)).stmts?.[0]?.stmt;if(!s||!("SelectStmt"in s))throw new Error("expected SelectStmt");let e=s.SelectStmt.whereClause;if(!e)throw new Error("no whereClause");return e}async function Xi(c){let t=await ks(c);return new x().deparse(t)}async function Ki(c){let s=(await K(c)).stmts?.[0]?.stmt;if(!s||!("SelectStmt"in s))throw new Error("expected SelectStmt");return new x().deparse(s)}var $s=C(()=>{es();Os();we();Ps();Lt();});zt();var Xs=(c={})=>{let t=(s="m")=>[...c.exclude_tables??[],"sqlite_%"].map(e=>e.includes("%")?`${s}.name NOT LIKE '${e}'`:`${s}.name != '${e}'`).join(" AND ");return `WITH table_info AS (SELECT
12
+ var un=Object.defineProperty;var g=(i,e)=>()=>(i&&(e=i(i=0)),e);var pn=(i,e)=>{for(var t in e)un(i,t,{get:e[t],enumerable:true});};var yt=g(()=>{});var St=g(()=>{});function fn(i){return Object.prototype.toString.call(i)==="[object Object]"}function mn(i){return i!==null&&typeof i=="object"}function H(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:H(i[r],s,t)}catch{if(typeof t<"u")return t;throw new Error(`Invalid path: ${n.join(".")}`)}}function Fe(i,...e){for(let t of e)for(let[n,r]of Object.entries(t))r!==void 0&&(!fn(r)&&!Array.isArray(r)||Array.isArray(r)&&!Array.isArray(i[n])?i[n]=r:mn(i[n])?Fe(i[n],r):i[n]=r);return i}var ye=g(()=>{});var Et=g(()=>{});function bt(i,e){if(!i)throw new Error(e)}var Tt=g(()=>{});function qe(i){return (i??"").trim().toLowerCase()}function Ue(i){return (i??"").replace(/\s+/g," ").replace(/"/g,"").trim().toLowerCase()}function je(i){if(i==null)return null;let e=i.trim();for(;e.startsWith("(")&&e.endsWith(")");)e=e.slice(1,-1).trim();return (e.startsWith("'")&&e.endsWith("'")||e.startsWith('"')&&e.endsWith('"'))&&(e=e.slice(1,-1)),e}var Be=g(()=>{});function h(i,e='"'){return `${e}${i}${e}`}function wt(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 Ct=g(()=>{});var xt=g(()=>{});var Me=g(()=>{yt();St();ye();Et();Tt();Be();Se();Ct();xt();});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 V,Ke=g(()=>{Be();V=class{makeIndexKey(e){return `${e.table}:${e.name}:${e.unique}:${e.columns.join(",")}`}makeForeignKeyKey(e){return `${e.table}:${e.column}:${e.ref_table}:${e.ref_column}`}diff(e,t){let n=[],r=[],s=[],o=[],a=new Set(e.tables.map(m=>m.name)),l=new Set(t.tables.map(m=>m.name));for(let m of t.tables)a.has(m.name)||n.push({type:"added",name:m.name,sql:m.sql});for(let m of e.tables)l.has(m.name)||n.push({type:"removed",name:m.name});for(let m of e.tables){let T=t.tables.find(N=>N.name===m.name);if(!T)continue;let f=Ue(m.sql),C=Ue(T.sql);f!==C&&n.push({type:"modified",name:m.name,sql:T.sql});}let u=e.tables.filter(m=>l.has(m.name));for(let m of u){let T=e.columns.filter(w=>w.table===m.name),f=t.columns.filter(w=>w.table===m.name),C=new Map(T.map(w=>[w.name,w])),N=new Map(f.map(w=>[w.name,w]));for(let[w,k]of N)C.has(w)||r.push({type:"added",table:m.name,name:w,column:k});for(let[w]of C)N.has(w)||r.push({type:"removed",table:m.name,name:w});for(let[w,k]of C){let I=N.get(w);if(!I)continue;let P={};qe(k.type)!==qe(I.type)&&(P.type={from:k.type,to:I.type}),k.nullable!==I.nullable&&(P.nullable={from:k.nullable,to:I.nullable}),je(k.default_value)!==je(I.default_value)&&(P.default_value={from:k.default_value,to:I.default_value}),Object.keys(P).length>0&&r.push({type:"modified",table:m.name,name:w,changes:P});}}let p=new Map(e.indexes.map(m=>[this.makeIndexKey(m),m])),c=new Map(t.indexes.map(m=>[this.makeIndexKey(m),m]));for(let[m,T]of c)p.has(m)||s.push({type:"added",...T});for(let[m,T]of p)c.has(m)||s.push({type:"removed",...T});let d=new Map(e.foreign_keys.map(m=>[this.makeForeignKeyKey(m),m])),E=new Map(t.foreign_keys.map(m=>[this.makeForeignKeyKey(m),m]));for(let[m,T]of E)d.has(m)||o.push({type:"added",...T});for(let[m,T]of d)E.has(m)||o.push({type:"removed",...T});let y=n.length>0||r.length>0||s.length>0||o.length>0;return {tables:n,columns:r,indexes:s,foreign_keys:o,has_changes:y}}};});var Ve=g(()=>{});var Cn,G,Ge=g(()=>{Ve();Se();Cn=["CURRENT_TIMESTAMP","CURRENT_TIME","CURRENT_DATE"],G=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 Cn.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 Q(i){let{parse:e}=await import('pgsql-parser');return e(i)}var Pt=g(()=>{});function ee(i){if("String"in i)return i.String.sval}function F(i){return i.map(ee).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 J(i){return Object.keys(i)[0]}function $t(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 qt(i){let e=i.toLowerCase().trim();if(e.startsWith("_")||e.endsWith("[]"))return "TEXT";let t=Ln[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,Ln,Ft,Dn,Ie,Y=g(()=>{U();j=class extends Error{},S=class extends j{constructor(t,n){super(n??`Unsupported node type: ${J(t)}`);this.node=t;}},Ln={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"},Ft=["<",">","<=",">=","=","<>","!=","+","-","*","/","%","&","|","<<",">>","||","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","->>"];Dn={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(Dn));});var Oe,Ut=g(()=>{Y();U();Oe=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=J(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 Pn,$n,Fn,qn,X,ve,jt=g(()=>{Y();Pn=["DECLARE","IF","ELSIF","ELSE","LOOP","WHILE","FOR","FOREACH","EXCEPTION","RAISE","PERFORM","EXECUTE","SELECT"],$n=/^NEW\.(\w+)\s*(?::=|=)\s*(.+)$/is,Fn=/^RETURN\s+(NEW|OLD)$/i,qn=/^(INSERT|UPDATE|DELETE)\b/i,X=class extends j{constructor(t,n,r){super(r??`Unsupported PL/pgSQL: ${t}`);this.hint=t;this.body=n;}},ve=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(Fn);if(l){s=l[1].toUpperCase(),r.push({type:"return",value:s});continue}let u=a.match($n);if(u){r.push({type:"assignment",column:u[1],expression:u[2].trim()});continue}if(qn.test(a)){r.push({type:"dml",sql:a});continue}throw new X(`"${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 X('"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 X("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&&Pn.includes(t))throw new X(`"${t}" is not translatable to SQLite`,e)}};});var te,Qe=g(()=>{te=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 _,v=g(()=>{Qe();_=class{context;constructor(e){this.context=e;}get isShimBacked(){return false}checkConstraint(){return null}serialize(e){return e}deserialize(e){return e}validateStorage(e){return {status:"pass",message:null}}validationFail(e,t){return {status:"fail",message:e,action:t}}validationPass(){return {status:"pass",message:null}}isNullish(e){return e==null}toColumnDDL(e){let{includeNullable:t=true}=e??{},n=[],r=this.context.column;n.push(this.quoteIfNeeded(r)),n.push(this.sqliteType),this.context.isPrimaryKey&&n.push("PRIMARY KEY"),this.context.isSerial&&this.context.isPrimaryKey&&n.push("AUTOINCREMENT"),t&&!this.context.nullable&&!this.context.isPrimaryKey&&n.push("NOT NULL"),this.context.isUnique&&!this.context.isPrimaryKey&&n.push("UNIQUE"),this.context.defaultValue!==null&&n.push(`DEFAULT ${this.context.defaultValue}`);let s=this.checkConstraint();return s&&n.push(`CHECK (${s})`),n.join(" ")}checkError(e,t){return new te(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(()=>{v();B=class extends _{get sqliteType(){return "INTEGER"}};});var ne,Je=g(()=>{Le();ne=class extends B{constructor(e){super({...e,isSerial:true});}};});function Un(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 re,Ye=g(()=>{v();re=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(!Un(e,this.numericPrecision))return this.validationFail(`Does not fit numeric(${t}, ${n}).`,"Patch rows within numeric precision.")}return this.validationPass()}};});var x,A=g(()=>{v();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 se,Xe=g(()=>{v();se=class extends _{get sqliteType(){return "BLOB"}};});var ie,ze=g(()=>{v();ie=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 Bt(i){try{return {ok:!0,value:JSON.parse(i)}}catch{return {ok:false}}}var oe,He=g(()=>{v();oe=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=Bt(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."):Bt(e).ok?this.validationPass():this.validationFail("Invalid JSON text.","Patch rows with valid JSON.")}};});function jn(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 ae,Ze=g(()=>{A();ae=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"||!jn(e)?this.validationFail("Invalid date.","Patch rows with YYYY-MM-DD dates."):this.validationPass()}};});function Bn(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 le,et=g(()=>{A();le=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"||!Bn(e)?this.validationFail("Invalid time.","Patch rows with HH:MM[:SS] times."):this.validationPass()}};});function Mn(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 ce,tt=g(()=>{A();ce=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"||!Mn(e)?this.validationFail("Invalid timestamp.","Patch rows with ISO timestamps."):this.validationPass()}};});var ue,nt=g(()=>{A();ue=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 pe,rt=g(()=>{A();pe=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 Mt(i){try{return {ok:!0,value:JSON.parse(i)}}catch{return {ok:false}}}var z,st=g(()=>{v();z=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=Mt(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=Mt(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 Wt(i){return Kn.test(i.toLowerCase())}var Wn,Kn,fe,it=g(()=>{A();Wn="????????-????-????-????-????????????",Kn=/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/;fe=class extends x{get isShimBacked(){return true}checkConstraint(){let e=this.quoteIfNeeded(this.context.column);return `${e} IS NULL OR ${e} GLOB '${Wn}'`}serialize(e){if(this.isNullish(e))return e;if(typeof e!="string")throw this.checkError("uuid_format",e);let t=e.toLowerCase();if(!Wt(t))throw this.checkError("uuid_format",e);return t}validateStorage(e){return this.isNullish(e)?this.validationPass():typeof e!="string"||!Wt(e)?this.validationFail("Invalid UUID.","Patch rows with valid UUIDs."):this.validationPass()}};});function Vn(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 Gn(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 Qn(i){if(!i.includes(":"))return false;try{return new URL(`http://[${i}]/`),!0}catch{return false}}function Kt(i){let e=Vn(i);return e?Gn(e.address)?e.prefix===null||e.prefix>=0&&e.prefix<=32:Qn(e.address)?e.prefix===null||e.prefix>=0&&e.prefix<=128:false:false}var me,ot=g(()=>{A();me=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(!Kt(t))throw this.checkError("inet_format",e);return t}validateStorage(e){return this.isNullish(e)?this.validationPass():typeof e!="string"||!Kt(e.trim())?this.validationFail("Invalid inet address.","Patch rows with valid inet strings."):this.validationPass()}};});var de,at=g(()=>{A();de=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 z(i,n)}if(e?.enumValues)return new pe(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 z(i,s)}return Yn.has(t)?new ne(i):Jn.has(t)?new B(i):Zn.has(t)?new ie(i):er.has(t)?new oe(i):sr.has(t)?new ae(i):ir.has(t)?new le(i):or.has(t)?new ce(i):ar.has(t)?new ue(i):Hn.has(t)?new se(i):Xn.has(t)?new re(i,e?.numericPrecision):tr.has(t)?new fe(i):nr.has(t)?new x(i,63):rr.has(t)?new me(i):zn.has(t)?new x(i,e?.lengthConstraint):new de(i)}var Jn,Yn,Xn,zn,Hn,Zn,er,tr,nr,rr,sr,ir,or,ar,lt=g(()=>{Le();Je();Ye();A();Xe();ze();He();Ze();et();tt();nt();rt();st();it();ot();at();Jn=new Set(["int2","smallint","int4","integer","int","int8","bigint"]),Yn=new Set(["serial","serial4","bigserial","serial8","smallserial","serial2"]),Xn=new Set(["float4","real","float8","double precision","numeric","decimal"]),zn=new Set(["text","varchar","character varying","char","character","bpchar"]),Hn=new Set(["bytea"]),Zn=new Set(["bool","boolean"]),er=new Set(["json","jsonb"]),tr=new Set(["uuid"]),nr=new Set(["name"]),rr=new Set(["inet"]),sr=new Set(["date"]),ir=new Set(["time","timetz","time without time zone","time with time zone"]),or=new Set(["timestamp","timestamptz","timestamp without time zone","timestamp with time zone"]),ar=new Set(["interval"]);});function ct(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 Vt,De,ut=g(()=>{Vt="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:()=>Vt,js:()=>crypto.randomUUID()},uuid_generate_v4:{sqlite:()=>Vt,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,Gt=g(()=>{Y();U();U();Ut();Me();jt();Ve();Ke();Ge();Se();lt();ut();Pe=class extends Deparser{enums;schemaHandling;warnings=[];helper;config;triggerFunctions=new Map;plpgsqlParser=new ve;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 Oe(e),this.config=s,this.introspection=r,this.functionResolution=s?.functionResolution??"translate";}visit(e,t){let n=J(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=>wt(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":qt(r)}ColumnDef(e,t){let n=[],r=e.colname;r&&n.push(this.quoteIfNeeded(r));let s=false,o=false,a=null,l=null,u=null,p=false;if(e.typeName){let c=e.typeName.names?.map(y=>y.String?.sval||y.String?.str).filter(Boolean);u=c&&(c.length===2&&c[0]==="pg_catalog"?c[1]:c[0]),s=!!(u&&Re(u)),p=!!(e.typeName.arrayBounds&&e.typeName.arrayBounds.length>0);let d=Array.isArray(e.typeName.typmods)?e.typeName.typmods:[],E=y=>d[y]?.A_Const?.ival?.ival??d[y]?.A_Const?.val?.ival?.ival;if(u&&Ae(u)&&d.length>0){let y=E(0);typeof y=="number"&&y>0&&(a={maxLen:y});}if(u&&ke(u)&&d.length>=2){let y=E(0),m=E(1);typeof y=="number"&&typeof m=="number"&&y>0&&m>=0&&(l={precision:y,scale:m});}if(e.constraints){let y=Array.isArray(e.constraints)?e.constraints:[];o=y.some(m=>m.Constraint?.contype==="CONSTR_PRIMARY"),y.some(m=>m.Constraint?.contype==="CONSTR_IDENTITY")&&(s=true);}n.push(this.TypeName(e.typeName,t));}if(e.constraints){let c=Array.isArray(e.constraints)?e.constraints:[],d=c.map(y=>this.visit(y,t));n.push(...d.filter(Boolean));let E=c.some(y=>y.Constraint?.contype==="CONSTR_CHECK");s&&o&&!E&&n.push("AUTOINCREMENT");}if(r&&u){let c={isArray:p};a&&(c.lengthConstraint=a.maxLen),l&&(c.numericPrecision=l);let d=this.enums.get(u.toLowerCase());d&&(c.enumValues=d);let m=M({schema:"public",table:"",column:r,pgTypeName:u,nullable:true,defaultValue:null,defaultFn:null,isPrimaryKey:o,isUnique:false,isSerial:s},c).checkConstraint();m&&n.push(`CHECK (${m})`);}return n.join(" ")}Constraint(e,t){let n=e.contype;if(n==="CONSTR_IDENTITY"||n==="CONSTR_ATTR_DEFERRABLE"||n==="CONSTR_ATTR_NOT_DEFERRABLE"||n==="CONSTR_ATTR_DEFERRED"||n==="CONSTR_ATTR_IMMEDIATE")return "";if(n==="CONSTR_NULL")return "NULL";if(n==="CONSTR_NOTNULL")return "NOT NULL";if(n==="CONSTR_DEFAULT"&&e.raw_expr){let r=this.visit(e.raw_expr,t);return r.includes("(")&&!r.startsWith("(")?`DEFAULT (${r})`:`DEFAULT ${r}`}if(n==="CONSTR_CHECK"&&e.raw_expr){let r=[];e.conname&&r.push("CONSTRAINT",Ne(e.conname)),r.push("CHECK");let s=this.visit(e.raw_expr,t);return r.push(`(${s})`),r.join(" ")}if(n==="CONSTR_PRIMARY")return e.keys&&e.keys.length>0?`PRIMARY KEY (${q(e.keys).map(s=>this.visit(s,t)).join(", ")})`:"PRIMARY KEY";if(n==="CONSTR_UNIQUE")return e.keys&&e.keys.length>0?`UNIQUE (${q(e.keys).map(s=>this.visit(s,t)).join(", ")})`:"UNIQUE";if(n==="CONSTR_FOREIGN")return super.Constraint(e,t).replace(/FOREIGN\s+KEY\s+REFERENCES/gi,"REFERENCES");if(n==="CONSTR_GENERATED"&&e.raw_expr)return `GENERATED ALWAYS AS (${this.visit(e.raw_expr,t)}) STORED`;if(n==="CONSTR_EXCLUSION")throw new S({Constraint:e},"EXCLUSION constraints are not supported in SQLite");return ""}FuncCall(e,t){let r=(e.funcname||[]).map(u=>u.String?.sval||u.String?.str).filter(Boolean);if(r.length===0)throw new Error("Function call has no name");let s=r[r.length-1].toLowerCase();if(s==="extract"&&e.args&&e.args.length>=2){let u=e.args[0];if((u?.A_Const?.sval?.sval||u?.String?.sval)==="epoch")return `strftime('%s', ${this.visit(e.args[1],t)})`}let a=(e.args??[]).map(u=>this.visit(u,t));if(e.agg_star)return `${s}(*)`;if(e.agg_distinct)return `${s}(DISTINCT ${a.join(", ")})`;let l=ct(s,this.functionResolution);if(l){if(l.sqliteExpr!==null){let u=l.sqliteExpr;return u.includes("(")?u:`${u}(${a.join(", ")})`}if(l.jsFn!==null){let u=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(!Ft.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 V,s=new G,o=r.diff(this.introspection,n);return o.has_changes?s.plan(o,this.introspection,n).steps.filter(l=>!["disable_foreign_keys","begin_transaction","commit_transaction","enable_foreign_keys"].includes(l.type)).map(l=>l.sql).join(`
17
+ `):""}buildDesiredSchema(e,t,n){let r={...e,tables:e.tables.map(s=>({...s})),columns:e.columns.map(s=>({...s})),indexes:e.indexes.map(s=>({...s})),foreign_keys:e.foreign_keys.map(s=>({...s})),primary_keys:e.primary_keys.map(s=>({...s})),views:e.views.map(s=>({...s})),triggers:(e.triggers??[]).map(s=>({...s})),check_constraints:e.check_constraints.map(s=>({...s})),unique_constraints:(e.unique_constraints??[]).map(s=>({...s})),comments:(e.comments??[]).map(s=>({...s})),custom_types:e.custom_types.map(s=>({...s}))};for(let s of n){let o=r.columns.findIndex(a=>a.table===t&&a.name===s.name);switch(s.subtype){case "AT_AlterColumnType":{if(o===-1)break;let a=this.extractTypeName(s);a&&(r.columns[o]={...r.columns[o],type:a.toLowerCase()});break}case "AT_SetNotNull":{if(o===-1)break;r.columns[o]={...r.columns[o],nullable:false};break}case "AT_DropNotNull":{if(o===-1)break;r.columns[o]={...r.columns[o],nullable:true};break}case "AT_ColumnDefault":{if(o===-1)break;if(s.def){let a=this.extractDefaultValue(s);r.columns[o]={...r.columns[o],default_value:a};}else r.columns[o]={...r.columns[o],default_value:null};break}case "AT_AddConstraint":case "AT_DropConstraint":{let a=r.tables.findIndex(l=>l.name===t);a!==-1&&(r.tables[a]={...r.tables[a],sql:r.tables[a].sql+" /* modified */"});break}}}return this.rebuildTableSql(r,t),r}rebuildTableSql(e,t){let n=e.tables.findIndex(c=>c.name===t);if(n===-1)return;let r=e.columns.filter(c=>c.table===t),s=e.foreign_keys.filter(c=>c.table===t),o=e.check_constraints.filter(c=>c.table===t),a=r.map(c=>{let d=`${h(c.name)} ${c.type||"TEXT"}`;return c.is_primary_key&&(d+=" PRIMARY KEY"),c.nullable||(d+=" NOT NULL"),c.default_value!=null&&(d+=` DEFAULT ${c.default_value}`),d}),l=s.map(c=>`FOREIGN KEY (${h(c.column)}) REFERENCES ${h(c.ref_table)}(${h(c.ref_column)}) ON UPDATE ${c.on_update} ON DELETE ${c.on_delete}`),u=o.map(c=>`CHECK (${c.expression})`),p=[...a,...l,...u];e.tables[n]={...e.tables[n],sql:`CREATE TABLE ${h(t)} (${p.join(", ")}) STRICT`};}extractTypeName(e){let t=e.def?.ColumnDef;return t?.typeName?.TypeName?(t.typeName.TypeName.names??[]).map(r=>r.String?.sval).filter(Boolean).pop()??null:null}extractDefaultValue(e){return e.def?"Integer"in e.def?String(e.def.Integer.ival):"Float"in e.def?e.def.Float.fval:"String"in e.def?`'${e.def.String.sval}'`:null:null}};});var R,W,pt=g(()=>{U();Y();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?ee(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]?ee(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]?ee(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 he,Qt=g(()=>{he=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 Jt=g(()=>{v();Qe();Le();Je();Ye();A();Xe();ze();He();Ze();et();tt();nt();rt();st();it();ot();at();lt();ut();Qt();});function Xt(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 zt(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=$t(n.args?.[0]??{});e.set(r,{value:s,local:n.is_local});}return e}function Ht(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}`;Yt.has(C)||(Yt.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 Zt(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 he(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),K=m(1);typeof b=="number"&&typeof K=="number"&&b>0&&K>=0&&(T.numericPrecision={precision:b,scale:K});}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"),mt=C.find(b=>b.Constraint?.contype==="CONSTR_FOREIGN"),dt=C.find(b=>b.Constraint?.contype==="CONSTR_CHECK"),ht;if(mt){let b=mt.Constraint,K=b.pktable?.relname,cn=b.pktable?.schemaname,gt=b.pk_attrs?.[0]?.String?.sval;K&&gt&&(ht={refSchema:cn,refTable:K,refColumn:gt,constraintName:b.conname||void 0});}let ln={schema:o,table:s,column:p,pgTypeName:d,nullable:!k&&!N,defaultValue:null,defaultFn:null,isPrimaryKey:N,isUnique:!!I,isSerial:w,isGenerated:!!P,fkRef:ht,hasCheck:!!dt,checkConstraintName:dt?.Constraint?.conname||void 0,uniqueConstraintName:I?.Constraint?.conname||void 0};a.set(p,M(ln,T));}t.set(`${o}.${s}`,a);}return t}function en(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 tn(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 Yt,nn=g(()=>{pt();U();be();Jt();Y();Yt=new Set;});var sn={};pn(sn,{Policy:()=>D,deparseDdl:()=>ft,deparseExpression:()=>dr,deparsePostgresDdl:()=>mr,deparseSelect:()=>hr,parse:()=>Q,parseExpression:()=>rn,translatePostgresDdl:()=>fr});async function fr(i,e={}){let t=await Q(i);return ft(t,e).ddl}async function mr(i,e={}){let t=await Q(i);return {ast:t,...ft(t,e)}}function ft(i,e={}){let t=Xt(i),n=Zt(i,t),r=zt(i),s=en(i),o=tn(i),a=new Pe(i,{...e,enums:t}),{policies:l,tables:u}=Ht(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 rn(i){let t=(await Q(`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 dr(i){let e=await rn(i);return new W().deparse(e)}async function hr(i){let t=(await Q(i)).stmts?.[0]?.stmt;if(!t||!("SelectStmt"in t))throw new Error("expected SelectStmt");return new W().deparse(t)}var on=g(()=>{Pt();Gt();pt();nn();be();});Me();var dn=(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 Ms=Object.create;var xt=Object.defineProperty;var qs=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 Ms=Object.create;var xt=Object.defineProperty;var qs=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 Ms=Object.create;var xt=Object.defineProperty;var qs=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 Ms=Object.create;var xt=Object.defineProperty;var qs=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 Ms=Object.create;var xt=Object.defineProperty;var qs=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 Ms=Object.create;var xt=Object.defineProperty;var qs=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 Ms=Object.create;var xt=Object.defineProperty;var qs=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,7 +209,7 @@ var Ms=Object.create;var xt=Object.defineProperty;var qs=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
- ${c.name?`'${c.name}'`:"'sqlite'"} AS database_name,
244
- ${c.version?`'${c.version}'`:"sqlite_version()"} AS version;`};function j(c){if(!c)return [];try{return Array.isArray(c)?c:JSON.parse(c)}catch{return []}}async function Je(c,t={}){let e=(await c.exec(Xs(t)))?.rows?.[0]||{};return {tables:j(e.tables),columns:j(e.columns),indexes:j(e.indexes),foreign_keys:j(e.foreign_keys),primary_keys:j(e.primary_keys),views:j(e.views),triggers:j(e.triggers),check_constraints:[],unique_constraints:j(e.unique_constraints),comments:[],custom_types:[],database_name:e.database_name??"sqlite",version:e.version??""}}var si=new Set(["AlterTableNode","CreateIndexNode","CreateSchemaNode","CreateTableNode","CreateTypeNode","CreateViewNode","RefreshMaterializedViewNode","DeleteQueryNode","DropIndexNode","DropSchemaNode","DropTableNode","DropTypeNode","DropViewNode","InsertQueryNode","RawNode","SelectQueryNode","UpdateQueryNode","MergeQueryNode"]),Zt=class extends OperationNodeTransformer{constructor(s){super();this.config=s;}#e=new Set;#s=new Set;transformNodeImpl(s,e){if(!si.has(s.kind))return super.transformNodeImpl(s,e);let i=this.#n(s);for(let n of i)this.#s.add(n);let r=this.#r(s);for(let n of r)this.#e.add(n);try{return super.transformNodeImpl(s,e)}finally{for(let n of r)this.#e.delete(n);for(let n of i)this.#s.delete(n);}}transformSchemableIdentifier(s,e){let i=s.identifier.name,r=s.schema?.name,n=!r&&this.config.appendDefaultSchema&&this.config.defaultSchema&&!this.#s.has(i)&&this.#e.has(i),a=r??(n?this.config.defaultSchema:void 0);if(!a)return {kind:"SchemableIdentifierNode",schema:void 0,identifier:{kind:"IdentifierNode",name:i}};let u=this.config.approach==="snake_case"?"__":".";return {kind:"SchemableIdentifierNode",schema:void 0,identifier:{kind:"IdentifierNode",name:`${a}${u}${i}`}}}#r(s){let e=new Set;if(s?.name&&SchemableIdentifierNode.is(s.name)&&this.#i(s.name,e),s?.from?.froms)for(let i of s.from.froms)this.#t(i,e);if(s?.into&&this.#t(s.into,e),s?.table&&this.#t(s.table,e),s?.joins)for(let i of s.joins)this.#t(i.table,e);return s?.using&&(JoinNode.is(s.using)?this.#t(s.using.table,e):this.#t(s.using,e)),e}#t(s,e){if(TableNode.is(s)){this.#i(s.table,e);return}if(AliasNode.is(s)&&TableNode.is(s.node)){this.#i(s.node.table,e);return}if(ListNode.is(s)){for(let i of s.items)this.#t(i,e);return}if(UsingNode.is(s))for(let i of s.tables)this.#t(i,e);}#i(s,e){let i=s.identifier.name;this.#s.has(i)||e.add(i);}#n(s){let e=new Set;if(s?.with?.expressions)for(let i of s.with.expressions){let r=i?.name?.table?.table?.identifier?.name;r&&e.add(r);}return e}},It=class{#e;constructor(t){this.#e=new Zt(t);}transformQuery(t){return this.#e.transformNode(t.node)}async transformResult(t){return t.result}};Lt();te();se();function nt(c){return c==="migrations"||c==="supabase_migrations.schema_migrations"||c==="supabase_migrations.seed_files"}function Ye(c){return {...c,tables:c.tables.filter(t=>!nt(t.name)),columns:c.columns.filter(t=>!nt(t.table)),indexes:c.indexes.filter(t=>!nt(t.table)),foreign_keys:c.foreign_keys.filter(t=>!nt(t.table)),primary_keys:c.primary_keys.filter(t=>!nt(t.table))}}var _t=class{constructor(t,s,e={}){this.conn=t;this.desiredSchema=s;this.options=e;this.differ=new H,this.planner=new X;}differ;planner;translationResult;async getDesiredSchema(){let t=await this.conn.translateDdl(this.desiredSchema);return this.translationResult=t,await this.options.onTranslation?.(t),t.ddl}async diff(){let t=await this.conn.introspect({postprocess:false}),s=await this.getDesiredSchema();if(!s||s.trim().length===0)return {current:t,desired:t,diff:{tables:[],columns:[],indexes:[],foreign_keys:[],has_changes:false},plan:{steps:[],warnings:[],unsafe:false}};let{createConnection:e}=await import('@supabase/lite/sqlite'),i=await e({url:":memory:"});try{await i.exec(s);let r=await i.introspect({postprocess:!1}),n=Ye(t),a=Ye(r),u=this.differ.diff(n,a),l=this.planner.plan(u,n,a);return {current:t,desired:r,diff:u,plan:l}}finally{await i.close();}}safeSortPlanSteps(t){return invariant(Array.isArray(t),"steps must be an array"),t.sort((s,e)=>{let i=r=>r===PlanStepType.DROP_COLUMN?1:r===PlanStepType.DROP_TABLE?2:r===PlanStepType.RENAME_TABLE?3:0;return i(s.type)-i(e.type)})}async migratePlan(t,s){if(t.steps.length===0)return;if(t.unsafe&&!s?.force)throw new DataLossError(t.warnings??[]);let e=this.safeSortPlanSteps(t.steps).filter(i=>![PlanStepType.DISABLE_FOREIGN_KEYS,PlanStepType.BEGIN_TRANSACTION,PlanStepType.COMMIT_TRANSACTION,PlanStepType.ENABLE_FOREIGN_KEYS].includes(i.type));await this.conn.transaction(e.map(i=>i.sql),{intent:"migration"});}async migrate(t){let s=await this.diff();return await this.migratePlan(s.plan,t),s}};yt();var Xe=/^\{\{(.+)\}\}$/;function Ke(c){return typeof c=="string"&&Xe.test(c)}function ui(c){return Xe.exec(c)[1]}var He=Symbol("unresolved");function Qe(c,t){let s=ui(c),e=rt(t,s,He);if(e===He)throw new Error(`Unresolved variable: {{${s}}}`);return e}function P(c,t){let s={};for(let[e,i]of Object.entries(c)){if(e==="$or"||e==="$and"){s[e]=i.map(r=>P(r,t));continue}if(e==="$not"){s[e]=P(i,t);continue}if(e==="$always"){s[e]=i;continue}if(e==="$exists"){let r=i;s[e]={...r,where:r?.where?P(r.where,t):r?.where};continue}if(Ke(e)){let r=Qe(e,t),a=oi(r,i);s.$always=a;continue}if(i!=null&&typeof i=="object"&&!Array.isArray(i)){s[e]=ze(i,t);continue}s[e]=i;}return s}function ze(c,t){let s={};for(let[e,i]of Object.entries(c))e==="$not"&&i!=null&&typeof i=="object"?s[e]=ze(i,t):li(i)?s[e]={...i,where:i?.where?P(i?.where,t):void 0}:Ke(i)?s[e]=Qe(i,t):s[e]=i;return s}function li(c){return c!=null&&typeof c=="object"&&c.type==="query"}function oi(c,t){for(let[s,e]of Object.entries(t))switch(s){case "$eq":if(c!==e)return false;break;case "$neq":if(c===e)return false;break;case "$in":if(!Array.isArray(e)||!e.includes(c))return false;break;case "$notIn":if(Array.isArray(e)&&e.includes(c))return false;break;default:throw new Error(`Cannot statically evaluate operator ${s} on placeholder key`)}return true}yt();var wt=class extends Error{constructor(s){super(`new row violates row-level security policy for table "${s.data.table}"`);this.policy=s;this.name="PolicyViolation";}};var dt=class{constructor(t,s,e){this.tables=t;this.policies=s;this.defaultSchema=e;}enforce(t,s){let e=t.from;if(!e||!this.isRlsEnabled(e,t.schema))return t;let i=pi(t.type);if(!i)return t;let r=rt(s,"auth.role")??"anon",{permissive:n,restrictive:a}=this.resolvePolicies(e,t.schema,i,r);switch(i){case "SELECT":case "DELETE":{let u=this.combineUsing(n,a,s);return {...t,where:Ze(t.where,u)}}case "UPDATE":{let u=this.combineUsing(n,a,s),l={...t,where:Ze(t.where,u)};if(u.$always===false)return l;let o=this.combineWithCheck(n,a,s,i);if(t.values&&Object.keys(o).length>0){let f=new Set(Object.keys(t.values));this.validateWithCheck(o,t.values,n,a,f);}return l}case "INSERT":{let u=this.combineWithCheck(n,a,s,i);if(t.values){let l=Array.isArray(t.values)?t.values:[t.values];for(let o of l)this.validateWithCheck(u,o,n,a);}return t}default:return t}}isRlsEnabled(t,s){return this.tables.has(t)}resolvePolicies(t,s,e,i){let r=this.policies.filter(n=>n.data.table===t&&this.schemasMatch(n.data.schema,s)&&n.appliesTo(e)&&n.appliesToRole(i));return {permissive:r.filter(n=>n.data.permissive),restrictive:r.filter(n=>!n.data.permissive)}}schemasMatch(t,s){let e=t||this.defaultSchema,i=s||this.defaultSchema;return e===i}combineUsing(t,s,e){if(t.length===0)return {$always:false};let i=t.map(n=>n.data.using).filter(n=>n!=null&&Object.keys(n).length>0).map(n=>P(n,e)),r;i.length===0?r={}:i.length===1?r=i[0]:r={$or:i};for(let n of s)if(n.data.using&&Object.keys(n.data.using).length>0){let a=P(n.data.using,e);r=Object.keys(r).length===0?a:{$and:[r,a]};}return r}combineWithCheck(t,s,e,i){if(t.length===0)return {$always:false};let r=t.map(a=>a.data.withCheck??(i==="UPDATE"?a.data.using:void 0)).filter(a=>a!=null&&Object.keys(a).length>0).map(a=>P(a,e)),n;r.length===0?n={}:r.length===1?n=r[0]:n={$or:r};for(let a of s){let u=a.data.withCheck??(i==="UPDATE"?a.data.using:void 0);if(u&&Object.keys(u).length>0){let l=P(u,e);n=Object.keys(n).length===0?l:{$and:[n,l]};}}return n}validateWithCheck(t,s,e,i,r){if(Object.keys(t).length===0)return;if(!vt(t,s,r)){let a=e[0]??i[0];throw a?new wt(a):new Error("RLS policy violation")}}};function pi(c){switch(c){case "query":return "SELECT";case "insert":case "upsert":case "put":return "INSERT";case "update":return "UPDATE";case "delete":return "DELETE";default:return}}function Ze(c,t){return !c||Object.keys(c).length===0?t:Object.keys(t).length===0?c:{$and:[c,t]}}function vt(c,t,s){for(let[e,i]of Object.entries(c)){if(e==="$always"){if(i===false)return false;continue}if(e==="$and"){if(!i.every(u=>vt(u,t,s)))return false;continue}if(e==="$or"){if(!i.some(u=>vt(u,t,s)))return false;continue}if(e==="$not"){if(vt(i,t,s))return false;continue}if(s&&!s.has(e))continue;let r=i,n=t[e];for(let[a,u]of Object.entries(r))if(!ci(n,a,u))return false}return true}function ci(c,t,s){switch(t){case "$eq":return c===s;case "$neq":return c!==s;case "$gt":return c>s;case "$gte":return c>=s;case "$lt":return c<s;case "$lte":return c<=s;case "$in":return Array.isArray(s)&&s.includes(c);case "$notIn":return !Array.isArray(s)||!s.includes(c);case "$is":return c===s;case "$isNot":return c!==s;default:throw new Error(`Cannot evaluate operator "${t}" client-side for WITH CHECK`)}}var Dt=class{transformQuery(t){return t.node}transformResult(t){return t.result.rows?Promise.resolve({...t.result,rows:t.result.rows.map(s=>{let e={};for(let i in s){let r=s[i];if(typeof r=="string"&&(r[0]==="{"||r[0]==="["))try{e[i]=JSON.parse(r);}catch{e[i]=r;}else e[i]=r;}return e})}):Promise.resolve(t.result)}};function ts(c){let t={};for(let s in c){let e=c[s];if(typeof e=="string"&&(e[0]==="["||e[0]==="{"))try{t[s]=JSON.parse(e);}catch{t[s]=e;}else t[s]=e;}return t}var Ot=class c extends Connection{dialect="sqlite";deserializeRow(t){return this.config.ddlDialect==="postgres"?ts(t):t}constructor(t={}){super({...t,translation:{...t.translation,schemas:{appendDefaultSchema:false,approach:"quote",defaultSchema:"public",...t.translation?.schemas},deparse:c.parseDeparseInfo(t.translation?.deparse)},introspection:{name:"sqlite",...t.introspection,exclude_tables:Array.from(new Set([...t.introspection?.exclude_tables??[],"sqlite_%","supabase_migrations.%","migrations"]))}});}static parseDeparseInfo(t){try{if(typeof t!="object"||t===null)return {};let s=t?.rls?.tables instanceof Set?t.rls.tables:new Set(t.rls?.tables??[]),e=t?.rls?.policies.map(r=>new $(JSON.parse(JSON.stringify(r)))),i=t?.vars instanceof Map?t.vars:new Map(Object.entries(t.vars??{}));return {rls:{tables:s,policies:e},vars:i}}catch(s){return console.log("error parsing deparse info",s),{}}}updateDeparseInfo(t){this.config.translation={...this.config.translation,deparse:t};}withSqlitePlugins(t=[]){let s=[];return this.config.ddlDialect==="sqlite"&&s.push(new Dt),s.push(new It(Yt({appendDefaultSchema:false,approach:"quote",defaultSchema:"public"},{...this.config.translation?.schemas}))),[...s,...t]}async translateDdl(t){if(t.trim().length===0)return {ddl:t};if(this.config.ddlDialect==="sqlite")return {ddl:t};let s=this.config.translation?.schemas?.defaultSchema&&this.config.translation?.schemas?.appendDefaultSchema?this.config.translation?.schemas?.defaultSchema:false,e=await this.introspect({postprocess:false}).catch(()=>{}),{deparsePostgresDdl:i}=await Promise.resolve().then(()=>($s(),js));return await i(t,{forceDefaultSchema:s,introspection:e,schemaHandling:this.config.translation?.schemas?.approach==="snake_case"?"prefix":"default"})}async introspect(t){Me(typeof t=="object"||t===void 0,"options must be an object");let s=t?.useCache??false;if(t?.postprocess!==false){let r=await this.readCachedIntrospection({useCache:s});if(r)return r}let e=await Je(this,this.config.introspection),i=this.config.translation?.schemas?.approach==="snake_case"?"__":".";if(this.config.ddlDialect==="postgres"&&t?.postprocess!==false){let r=this.config.translation?.schemas?.defaultSchema??this.config.translation?.schemas?.appendDefaultSchema?"public":void 0,n=(u="table")=>l=>{let o=l[u],f=l.schema??r;return !f&&r&&o.includes(i)&&([f,o]=o.split(i)),{...l,[u]:o,schema:f??r}},a=u=>{let l=n()(u),o=l.ref_table,f=l.ref_schema??r;return o?.includes(i)&&([f,o]=o.split(i)),{...l,ref_table:o,ref_schema:f??r}};e={...e,tables:e.tables.map(n("name")),columns:e.columns.map(n()),indexes:e.indexes.map(n()),primary_keys:e.primary_keys.map(n()),foreign_keys:e.foreign_keys.map(a),views:e.views.map(n("name")),check_constraints:e.check_constraints.map(n("table"))};}return this.config.ddlDialect==="postgres"&&t?.postprocess!==false&&(e=this.mergeDeparseMetadata(e)),e=this.markForeignKeyVisibility(e),e={...e,ddl_dialect:this.config.ddlDialect??"postgres",schema_separator:i},t?.postprocess!==false&&await this.writeCachedIntrospection(e,{useDriver:s}),e}async transaction(t,s){s?.intent==="migration"&&await this.exec("PRAGMA foreign_keys=OFF;"),await this.exec("BEGIN");try{for(let e of t)try{await this.exec(e);}catch(i){throw console.error(`Failed to execute statement: ${e}`),i}await this.exec("COMMIT");}catch(e){throw await this.exec("ROLLBACK"),e}finally{s?.intent==="migration"&&(await this.exec("PRAGMA foreign_keys=ON;"),await this.clearSchemaCache());}}async close(){}mergeDeparseMetadata(t){let s=this.config.translation?.deparse;if(!s?.schema)return t;let e=t.columns.map(u=>({...u})),i=t.foreign_keys.map(u=>({...u})),r=[...t.unique_constraints??[]],n=[...t.check_constraints??[]];for(let[,u]of s.schema)for(let l of u.all()){let o=l.context,f=e.find(m=>m.table===o.table&&m.name===o.column);if(f&&(f.pg_type=o.pgTypeName,o.isGenerated!==void 0&&(f.is_generated=o.isGenerated)),o.fkRef?.constraintName){let m=i.find(T=>T.table===o.table&&T.column===o.column&&T.ref_table===o.fkRef.refTable&&T.ref_column===o.fkRef.refColumn);m&&(m.foreign_key_name=o.fkRef.constraintName);}o.uniqueConstraintName&&r.push({schema:o.schema,table:o.table,name:o.uniqueConstraintName,columns:[o.column]}),o.hasCheck&&n.push({schema:o.schema,table:o.table,expression:"",name:o.checkConstraintName,column:o.column});}for(let u of s.tableConstraints??[])if(u.kind==="unique")r.push({schema:u.schema,table:u.table,name:u.name??"",columns:u.columns});else if(u.kind==="check")n.push({schema:u.schema,table:u.table,expression:"",name:u.name});else if(u.kind==="foreign_key"&&u.name){let l=u.refTable;for(let o=0;o<u.columns.length;o++){let f=i.find(m=>m.table===u.table&&m.column===u.columns[o]&&m.ref_table===l&&m.ref_column===(u.refColumns?.[o]??""));f&&(f.foreign_key_name=u.name);}}let a=[...t.comments??[],...s.comments??[]];return {...t,columns:e,foreign_keys:i,unique_constraints:r,check_constraints:n,comments:a}}markForeignKeyVisibility(t){let s=new Set(t.views.map(i=>i.name)),e=i=>i.startsWith("private_")?s.has(i.slice(8)):true;return {...t,foreign_keys:t.foreign_keys.map(i=>({...i,is_visible:e(i.table)&&e(i.ref_table)}))}}createMigrator(t){let s=[this.config.baseSchema,t].filter(Boolean).join(`
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 _t(i,e={}){let n=(await i.exec(dn(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 Tn=new Set(["AlterTableNode","CreateIndexNode","CreateSchemaNode","CreateTableNode","CreateTypeNode","CreateViewNode","RefreshMaterializedViewNode","DeleteQueryNode","DropIndexNode","DropSchemaNode","DropTableNode","DropTypeNode","DropViewNode","InsertQueryNode","RawNode","SelectQueryNode","UpdateQueryNode","MergeQueryNode"]),We=class extends OperationNodeTransformer{constructor(t){super();this.config=t;}#t=new Set;#n=new Set;transformNodeImpl(t,n){if(!Tn.has(t.kind))return super.transformNodeImpl(t,n);let r=this.#i(t);for(let o of r)this.#n.add(o);let s=this.#s(t);for(let o of s)this.#t.add(o);try{return super.transformNodeImpl(t,n)}finally{for(let o of s)this.#t.delete(o);for(let o of r)this.#n.delete(o);}}transformSchemableIdentifier(t,n){let r=t.identifier.name,s=t.schema?.name,o=!s&&this.config.appendDefaultSchema&&this.config.defaultSchema&&!this.#n.has(r)&&this.#t.has(r),a=s??(o?this.config.defaultSchema:void 0);if(!a)return {kind:"SchemableIdentifierNode",schema:void 0,identifier:{kind:"IdentifierNode",name:r}};let l=this.config.approach==="snake_case"?"__":".";return {kind:"SchemableIdentifierNode",schema:void 0,identifier:{kind:"IdentifierNode",name:`${a}${l}${r}`}}}#s(t){let n=new Set;if(t?.name&&SchemableIdentifierNode.is(t.name)&&this.#r(t.name,n),t?.from?.froms)for(let r of t.from.froms)this.#e(r,n);if(t?.into&&this.#e(t.into,n),t?.table&&this.#e(t.table,n),t?.joins)for(let r of t.joins)this.#e(r.table,n);return t?.using&&(JoinNode.is(t.using)?this.#e(t.using.table,n):this.#e(t.using,n)),n}#e(t,n){if(TableNode.is(t)){this.#r(t.table,n);return}if(AliasNode.is(t)&&TableNode.is(t.node)){this.#r(t.node.table,n);return}if(ListNode.is(t)){for(let r of t.items)this.#e(r,n);return}if(UsingNode.is(t))for(let r of t.tables)this.#e(r,n);}#r(t,n){let r=t.identifier.name;this.#n.has(r)||n.add(r);}#i(t){let n=new Set;if(t?.with?.expressions)for(let r of t.with.expressions){let s=r?.name?.table?.table?.identifier?.name;s&&n.add(s);}return n}},Ee=class{#t;constructor(e){this.#t=new We(e);}transformQuery(e){return this.#t.transformNode(e.node)}async transformResult(e){return e.result}};be();Ke();Ge();function Z(i){return i==="migrations"||i==="supabase_migrations.schema_migrations"||i==="supabase_migrations.seed_files"}function Rt(i){return {...i,tables:i.tables.filter(e=>!Z(e.name)),columns:i.columns.filter(e=>!Z(e.table)),indexes:i.indexes.filter(e=>!Z(e.table)),foreign_keys:i.foreign_keys.filter(e=>!Z(e.table)),primary_keys:i.primary_keys.filter(e=>!Z(e.table))}}var Te=class{constructor(e,t,n={}){this.conn=e;this.desiredSchema=t;this.options=n;this.differ=new V,this.planner=new G;}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=Rt(e),a=Rt(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 kt=/^\{\{(.+)\}\}$/;function It(i){return typeof i=="string"&&kt.test(i)}function Nn(i){return kt.exec(i)[1]}var At=Symbol("unresolved");function Ot(i,e){let t=Nn(i),n=H(e,t,At);if(n===At)throw new Error(`Unresolved variable: {{${t}}}`);return n}function O(i,e){let t={};for(let[n,r]of Object.entries(i)){if(n==="$or"||n==="$and"){t[n]=r.map(s=>O(s,e));continue}if(n==="$not"){t[n]=O(r,e);continue}if(n==="$always"){t[n]=r;continue}if(n==="$exists"){let s=r;t[n]={...s,where:s?.where?O(s.where,e):s?.where};continue}if(It(n)){let s=Ot(n,e),a=An(s,r);t.$always=a;continue}if(r!=null&&typeof r=="object"&&!Array.isArray(r)){t[n]=vt(r,e);continue}t[n]=r;}return t}function vt(i,e){let t={};for(let[n,r]of Object.entries(i))n==="$not"&&r!=null&&typeof r=="object"?t[n]=vt(r,e):Rn(r)?t[n]={...r,where:r?.where?O(r?.where,e):void 0}:It(r)?t[n]=Ot(r,e):t[n]=r;return t}function Rn(i){return i!=null&&typeof i=="object"&&i.type==="query"}function An(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=kn(e.type);if(!r)return e;let s=H(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:Lt(e.where,l)}}case "UPDATE":{let l=this.combineUsing(o,a,t),u={...e,where:Lt(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=>O(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=O(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=>O(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=O(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 kn(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 Lt(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(!In(o,a,l))return false}return true}function In(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 Dt(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 ge=class i extends Connection{dialect="sqlite";deserializeRow(e){return this.config.ddlDialect==="postgres"?Dt(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(Fe({appendDefaultSchema:false,approach:"quote",defaultSchema:"public"},{...this.config.translation?.schemas}))),[...t,...e]}async translateDdl(e){if(e.trim().length===0)return {ddl:e};if(this.config.ddlDialect==="sqlite")return {ddl:e};let t=this.config.translation?.schemas?.defaultSchema&&this.config.translation?.schemas?.appendDefaultSchema?this.config.translation?.schemas?.defaultSchema:false,n=await this.introspect({postprocess:false}).catch(()=>{}),{deparsePostgresDdl:r}=await Promise.resolve().then(()=>(on(),sn));return await r(e,{forceDefaultSchema:t,introspection:n,schemaHandling:this.config.translation?.schemas?.approach==="snake_case"?"prefix":"default"})}async introspect(e){bt(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 _t(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("."),l=u>=0?a.slice(0,u):void 0,o=u>=0?a.slice(u+1):a;return new RelationNotFoundError(l,o)}let n=i.match(/no such column:\s*([A-Za-z0-9_.]+)/i);if(n)return Object.assign(new Error(`column ${n[1]} does not exist`),{code:"42703",detail:i})}return t}async onPostgrestAST(t,s){if(this.config.ddlDialect==="sqlite")return t.schema=void 0,this.applyRls(t,s);let e=this.config.translation?.schemas?.appendDefaultSchema,i=this.config.translation?.schemas?.defaultSchema;if(t.schema&&t.schema===i&&!e?t.schema=void 0:!t.schema&&i&&e&&(t.schema=i),!t.from)return t;let r=await this.introspect({useCache:true}),n=t.schema??(e&&i?i:""),a=t.from;if(!(r.tables.some(l=>l.name===a&&(l.schema??"")===n)||r.views.some(l=>l.name===a&&(l.schema??"")===n))){if(!(r.tables.some(o=>o.name===a&&["","public",i].includes(o.schema??""))||r.views.some(o=>o.name===a&&["","public",i].includes(o.schema??""))))throw new RelationNotFoundError(n,a);t.schema=void 0;}return this.applyRls(t,s)}applyRls(t,s){let e=this.config.translation?.deparse?.rls;if(!e||!s)return t;let i=this.config.translation?.schemas?.defaultSchema||void 0;return new dt(e.tables,e.policies,i).enforce(t,s)}};var Jt=class extends Ot{constructor(s){super({...s,introspection:{...s.introspection,version:"3.47.0"}});this.config=s;}dialect="sqlite";driver=null;kysely=null;fetch(s,e){let i=s instanceof URL?new URL(s.toString(),this.config.host):new URL(s,this.config.host);return fetch(i,{...e,headers:{"Content-Type":"application/json",Accept:"application/json",Authorization:`Bearer ${this.config.token}`,...e?.headers}})}async introspect(s){let e=new URLSearchParams({useCache:s?.useCache?"1":"0",postprocess:s?.postprocess?"1":"0"}),i=await this.fetch(`/v1/projects/${this.config.projectRef}/db/introspect?${e}`),r=await i.text();if(!i.ok)throw console.error(r),new Error(`Failed to get project introspect: ${i.status} ${i.statusText}`);try{let n=JSON.parse(r);if(!n)throw new Error("Failed to get project introspect");return n}catch(n){throw console.error(n),console.log(r),new Error(`Failed to parse introspect response: "${r}"`)}}async transaction(s,e){let i=await this.fetch(`/v1/projects/${this.config.projectRef}/db/transaction?intent=${e?.intent??"migration"}`,{method:"POST",body:JSON.stringify({statements:s})});if(!i.ok)throw new Error(`Failed to execute transaction: ${i.status} ${i.statusText}`)}async exec(s,...e){let i=await this.fetch(`/v1/projects/${this.config.projectRef}/db/exec`,{method:"POST",body:JSON.stringify({statement:s,parameters:e})}),r=await i.text();if(!i.ok)throw console.error(r),new Error(`Failed to execute statement: ${i.status} ${i.statusText}`);try{return JSON.parse(r)}catch(n){throw console.error(n),new Error(`Failed to parse exec response: "${r}"`)}}async close(){}};function zi(c){return new Jt(c)}async function bu(c){throw new Error("Unknown runtime")}export{Jt as CloudConnection,Ot as SqliteConnection,zi as cloud,bu as createConnection};
215
+ `);return new Te(this,t,{onTranslation:async n=>{if(this.config.translation){let r={enums:n.enums,rls:n.rls,schema:n.schema,vars:n.vars,tableConstraints:n.tableConstraints??[],comments:n.comments??[]};this.config.translation.deparse=r;}}})}get maxBoundParameters(){return this.config.maxBoundParameters??100}assertParamLimit(e){let t=e?.length??0,n=this.maxBoundParameters;if(!(t<=n))throw Object.assign(new Error(`Query exceeds max bound parameters (${t} > ${n}). SQLite drivers vary in how many parameters they accept per statement; @supabase/lite enforces a conservative limit of ${n} for portability. Split the query (e.g. chunk large .in() filters or batch INSERTs) on the caller.`),{code:"54000"})}prepareBindParams(e){return this.assertParamLimit(e),this.normalizeBindParams(e)}normalizeBindParams(e){if(!e||e.length===0)return [];let t=[];for(let n=0;n<e.length;n++){let r=e[n];if(r===void 0)continue;if(r===null){t.push(r);continue}let s=typeof r;if(s==="boolean"){t.push(r?1:0);continue}if(s==="number"||s==="bigint"||s==="string"){t.push(r);continue}if(r instanceof Uint8Array||r instanceof ArrayBuffer||r instanceof Date){t.push(r);continue}throw new Error(`Cannot bind value at parameter ${n+1}: unsupported type ${Array.isArray(r)?"array":s}`)}return t}normalizeDbError(e){let t=e,n=t?.cause?.code??t?.code,r=t?.cause?.message??t?.message??String(e);if(n==="SQLITE_CONSTRAINT_NOTNULL")return Object.assign(new Error(r),{code:"23502",detail:r});if(n==="SQLITE_CONSTRAINT_UNIQUE"||n==="SQLITE_CONSTRAINT_PRIMARYKEY")return Object.assign(new Error(r),{code:"23505",detail:r});if(n==="SQLITE_CONSTRAINT_FOREIGNKEY")return Object.assign(new Error(r),{code:"23503",detail:r});if(typeof r=="string"){if(/too many SQL variables/i.test(r)){let a=this.maxBoundParameters;return Object.assign(new Error(`Query exceeds SQLite bound-parameter limit. @supabase/lite enforces a conservative limit of ${a} for portability across drivers. Split the query (e.g. chunk large .in() filters or batch INSERTs) on the caller.`),{code:"54000",detail:r})}let s=r.match(/no such table:\s*([A-Za-z0-9_.]+)/i);if(s){let a=s[1],l=a.lastIndexOf("."),u=l>=0?a.slice(0,l):void 0,p=l>=0?a.slice(l+1):a;return new RelationNotFoundError(u,p)}let o=r.match(/no such column:\s*([A-Za-z0-9_.]+)/i);if(o)return Object.assign(new Error(`column ${o[1]} does not exist`),{code:"42703",detail:r})}return e}async onPostgrestAST(e,t){if(this.config.ddlDialect==="sqlite")return e.schema=void 0,this.applyRls(e,t);let n=this.config.translation?.schemas?.appendDefaultSchema,r=this.config.translation?.schemas?.defaultSchema;if(e.schema&&e.schema===r&&!n?e.schema=void 0:!e.schema&&r&&n&&(e.schema=r),!e.from)return e;let s=await this.introspect({useCache:true}),o=e.schema??(n&&r?r:""),a=e.from;if(!(s.tables.some(u=>u.name===a&&(u.schema??"")===o)||s.views.some(u=>u.name===a&&(u.schema??"")===o))){if(!(s.tables.some(p=>p.name===a&&["","public",r].includes(p.schema??""))||s.views.some(p=>p.name===a&&["","public",r].includes(p.schema??""))))throw new RelationNotFoundError(o,a);e.schema=void 0;}return this.applyRls(e,t)}applyRls(e,t){let n=this.config.translation?.deparse?.rls;if(!n||!t)return e;let r=this.config.translation?.schemas?.defaultSchema||void 0;return new xe(n.tables,n.policies,r).enforce(e,t)}};var $e=class extends ge{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 yr(i){return new $e(i)}async function _o(i){throw new Error("Unknown runtime")}export{$e as CloudConnection,ge as SqliteConnection,yr as cloud,_o as createConnection};