@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 er from'bun:sqlite';import Ms from'node:fs';import de from'node:path';import {Kysely,OperationNodeTransformer,SchemableIdentifierNode,JoinNode,TableNode,AliasNode,ListNode,UsingNode}from'kysely';import {GenericSqliteDialect}from'kysely-generic-sqlite';import {Connection,RelationNotFoundError,invariant,DataLossError,PlanStepType}from'@supabase/lite';try {
1
+ import {Deparser,QuoteUtils}from'pgsql-deparser';import {DeparserContext}from'pgsql-deparser/visitors/base.js';import {SqlFormatter}from'pgsql-deparser/utils/sql-formatter.js';import br from'bun:sqlite';import un from'node:fs';import mt from'node:path';import {Kysely,OperationNodeTransformer,SchemableIdentifierNode,JoinNode,TableNode,AliasNode,ListNode,UsingNode}from'kysely';import {GenericSqliteDialect}from'kysely-generic-sqlite';import {Connection,RelationNotFoundError,invariant,DataLossError,PlanStepType}from'@supabase/lite';try {
2
2
  /**
3
3
  * Adding this to avoid warnings from node:sqlite being experimental
4
4
  */
@@ -9,43 +9,12 @@ import er from'bun:sqlite';import Ms from'node:fs';import de from'node:path';imp
9
9
  };
10
10
  } catch {}
11
11
 
12
- var Gs=Object.create;var xt=Object.defineProperty;var Ws=Object.getOwnPropertyDescriptor;var Js=Object.getOwnPropertyNames;var xs=Object.getPrototypeOf,Ys=Object.prototype.hasOwnProperty;var C=(l,t)=>()=>(l&&(t=l(l=0)),t);var Ue=(l,t)=>()=>(t||l((t={exports:{}}).exports,t),t.exports),Hs=(l,t)=>{for(var s in t)xt(l,s,{get:t[s],enumerable:true});},Xs=(l,t,s,e)=>{if(t&&typeof t=="object"||typeof t=="function")for(let i of Js(t))!Ys.call(l,i)&&i!==s&&xt(l,i,{get:()=>t[i],enumerable:!(e=Ws(t,i))||e.enumerable});return l};var Fe=(l,t,s)=>(s=l!=null?Gs(xs(l)):{},Xs(xt(s,"default",{value:l,enumerable:true}),l));var Be=C(()=>{});var Me=C(()=>{});function Ks(l){return Object.prototype.toString.call(l)==="[object Object]"}function Qs(l){return l!==null&&typeof l=="object"}function nt(l,t,s=void 0){let e=typeof t=="string"?t.split(/[.[\]"]+/).filter(i=>i):t;if(e.length===0)return l;try{let[i,...r]=e;return !i||!(i in l)?s:nt(l[i],r,s)}catch{if(typeof s<"u")return s;throw new Error(`Invalid path: ${e.join(".")}`)}}function Yt(l,...t){for(let s of t)for(let[e,i]of Object.entries(s))i!==void 0&&(!Ks(i)&&!Array.isArray(i)||Array.isArray(i)&&!Array.isArray(l[e])?l[e]=i:Qs(l[e])?Yt(l[e],i):l[e]=i);return l}var yt=C(()=>{});var qe=C(()=>{});function Ve(l,t){if(!l)throw new Error(t)}var Ge=C(()=>{});function Ht(l){return (l??"").trim().toLowerCase()}function Xt(l){return (l??"").replace(/\s+/g," ").replace(/"/g,"").trim().toLowerCase()}function Kt(l){if(l==null)return null;let t=l.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(l,t='"'){return `${t}${l}${t}`}function We(l,t,s){if(t instanceof RegExp)return t.test(l);if(typeof t=="string")switch(!s&&t.startsWith("/")&&(s="regex"),s){case "regex":return new RegExp(t).test(l);case "sql":return new RegExp(t.replace("%",".*").replace("_",".")).test(l);case "wildcard":return new RegExp(t.replace("*",".*")).test(l);default:return l.includes(t)}return false}var bt=C(()=>{});var Je=C(()=>{});var xe=C(()=>{});var zt=C(()=>{Be();Me();yt();qe();Ge();Qt();bt();Je();xe();});var $,Lt=C(()=>{$=class l{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 l(t)}};});var X,te=C(()=>{Qt();X=class{makeIndexKey(t){return `${t.table}:${t.name}:${t.unique}:${t.columns.join(",")}`}makeForeignKeyKey(t){return `${t.table}:${t.column}:${t.ref_table}:${t.ref_column}`}diff(t,s){let e=[],i=[],r=[],n=[],a=new Set(t.tables.map(g=>g.name)),u=new Set(s.tables.map(g=>g.name));for(let g of s.tables)a.has(g.name)||e.push({type:"added",name:g.name,sql:g.sql});for(let g of t.tables)u.has(g.name)||e.push({type:"removed",name:g.name});for(let g of t.tables){let A=s.tables.find(_=>_.name===g.name);if(!A)continue;let S=Xt(g.sql),b=Xt(A.sql);S!==b&&e.push({type:"modified",name:g.name,sql:A.sql});}let o=t.tables.filter(g=>u.has(g.name));for(let g of o){let A=t.columns.filter(y=>y.table===g.name),S=s.columns.filter(y=>y.table===g.name),b=new Map(A.map(y=>[y.name,y])),_=new Map(S.map(y=>[y.name,y]));for(let[y,d]of _)b.has(y)||i.push({type:"added",table:g.name,name:y,column:d});for(let[y]of b)_.has(y)||i.push({type:"removed",table:g.name,name:y});for(let[y,d]of b){let D=_.get(y);if(!D)continue;let F={};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 p=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)p.has(g)||r.push({type:"added",...A});for(let[g,A]of p)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 ui,K,se=C(()=>{ee();bt();ui=["CURRENT_TIMESTAMP","CURRENT_TIME","CURRENT_DATE"],K=class{plan(t,s,e,i){if(!t.has_changes)return {steps:[],warnings:[],unsafe:false};let r=[],n=[];r.push({sql:"PRAGMA foreign_keys=OFF;",description:"Disable foreign key checks",type:"disable_foreign_keys"}),r.push({sql:"BEGIN;",description:"Begin transaction",type:"begin_transaction"});for(let f of t.tables.filter(m=>m.type==="added")){r.push({sql:`${f.sql};`,description:`CREATE TABLE ${N(f.name)}`,type:"create_table"});let m=e.indexes.filter(T=>T.table===f.name);for(let T of m){let E=T.unique?"UNIQUE ":"",g=T.columns.map(A=>N(A)).join(", ");r.push({sql:`CREATE ${E}INDEX ${N(T.name)} ON ${N(f.name)} (${g});`,description:`Create index ${N(T.name)} on ${N(f.name)}`,type:"add_index"});}}let a=new Set(s.tables.map(f=>f.name)),u=new Set(e.tables.map(f=>f.name)),o=new Set(t.tables.filter(f=>f.type==="modified").map(f=>f.name)),p=[...a].filter(f=>u.has(f));for(let f of p){if(!(o.has(f)||t.columns.some(g=>g.table===f)||t.indexes.some(g=>g.table===f)||t.foreign_keys.some(g=>g.table===f)))continue;let{canAlter:T,addedCols:E}=this.canSimpleAlter(f,t,e);if(T){for(let S of E)r.push({sql:`ALTER TABLE ${N(f)} ADD COLUMN ${this.columnDef(S)};`,description:`Add column ${N(S.name)} to ${N(f)}`,type:"add_column"});let g=t.indexes.filter(S=>S.table===f&&S.type==="added"),A=t.indexes.filter(S=>S.table===f&&S.type==="removed");for(let S of A)r.push({sql:`DROP INDEX IF EXISTS ${N(S.name)};`,description:`Drop index ${N(S.name)}`,type:"drop_index"});for(let S of g){let b=S.unique?"UNIQUE ":"",_=S.columns.map(y=>N(y)).join(", ");r.push({sql:`CREATE ${b}INDEX ${N(S.name)} ON ${N(f)} (${_});`,description:`Create index ${N(S.name)} on ${N(f)}`,type:"add_index"});}}else {let g=this.rebuildTable(f,s,e,t);r.push(...g.steps),n.push(...g.warnings);}}for(let f of t.tables.filter(m=>m.type==="removed"))r.push({sql:`DROP TABLE ${N(f.name)};`,description:`Drop table ${N(f.name)}`,type:"drop_table"}),n.push({table:f.name,reason:"table will be dropped"});return r.push({sql:"COMMIT;",description:"Commit transaction",type:"commit_transaction"}),r.push({sql:"PRAGMA foreign_keys=ON;",description:"Re-enable foreign key checks",type:"enable_foreign_keys"}),{steps:r,warnings:n,unsafe:n.length>0}}rebuildTable(t,s,e,i){let r=[],n=[],a=e.tables.find(S=>S.name===t);if(!a)return {steps:r,warnings:n};let u=`_${t}_migrate_new`,o=a.sql.replace(new RegExp(`(CREATE\\s+TABLE\\s+)(?:"${t}"|${t})`,"i"),`$1${N(u)}`);r.push({sql:`${o};`,description:`Create temporary table ${N(u)}`,type:"create_table"});let p=s.columns.filter(S=>S.table===t).map(S=>S.name),f=e.columns.filter(S=>S.table===t).map(S=>S.name),m=p.filter(S=>f.includes(S));if(m.length>0){let S=m.map(b=>N(b)).join(", ");r.push({sql:`INSERT INTO ${N(u)} (${S})
13
- SELECT ${S}
14
- FROM ${N(t)};`,description:`Copy data from ${N(t)} to ${N(u)}`,type:"copy_data"});}r.push({sql:`DROP TABLE ${N(t)};`,description:`Drop old table ${N(t)}`,type:"drop_table"}),r.push({sql:`ALTER TABLE ${N(u)} RENAME TO ${N(t)};`,description:`Rename ${N(u)} to ${N(t)}`,type:"rename_table"});let T=e.indexes.filter(S=>S.table===t);for(let S of T){let b=S.unique?"UNIQUE ":"",_=S.columns.map(y=>N(y)).join(", ");r.push({sql:`CREATE ${b}INDEX ${N(S.name)} ON ${N(t)} (${_});`,description:`Recreate index ${N(S.name)} on ${N(t)}`,type:"add_index"});}let E=e.triggers?.filter(S=>S.table===t)??[];for(let S of E)r.push({sql:`${S.sql};`,description:`Recreate trigger ${N(S.name)} on ${N(t)}`,type:"create_trigger"});let g=i.columns.filter(S=>S.table===t&&S.type==="removed");for(let S of g)n.push({table:t,reason:`column "${S.name}" will be dropped`});let A=i.columns.filter(S=>S.table===t&&S.type==="modified");for(let S of A)S.changes?.type&&n.push({table:t,reason:`column "${S.name}" type changes from ${S.changes.type.from} to ${S.changes.type.to}`}),S.changes?.nullable&&!S.changes.nullable.to&&n.push({table:t,reason:`column "${S.name}" becomes NOT NULL`});return {steps:r,warnings:n}}canSimpleAlter(t,s,e){let i=s.columns.filter(f=>f.table===t),r=i.filter(f=>f.type==="added"),n=i.filter(f=>f.type==="removed"),a=i.filter(f=>f.type==="modified"),u=s.foreign_keys.some(f=>f.table===t);if(n.length>0||a.length>0||u)return {canAlter:false,addedCols:r};let o=e.tables.find(f=>f.name===t);return o&&/\bCHECK\s*\(/i.test(o.sql)?{canAlter:false,addedCols:r}:{canAlter:r.every(f=>{let m=f.column;return this.hasNonConstantDefault(m.default_value)?false:m.nullable||m.default_value!=null})&&r.length>0,addedCols:r}}hasNonConstantDefault(t){if(t==null)return false;let s=t.trim().toUpperCase();return ui.includes(s)}columnDef(t){let s=t.column,e=`${N(s.name)} ${s.type||"TEXT"}`;return s.nullable||(e+=" NOT NULL"),s.default_value!=null&&(e+=` DEFAULT ${s.default_value}`),e}};});async function Q(l){let{parse:t}=await import('pgsql-parser');return t(l)}var is=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 z,rs=C(()=>{ie();z=class l{indentLevel;prettyMode;isStringLiteral;parentNodeTypes;formatter;select;from;group;sort;insertColumns;update;bool;isColumnConstraint;isDomainConstraint;alterColumnOptions;alterTableOptions;isEnumValue;objtype;subtype;constructor({indentLevel:t=0,prettyMode:s=true,isStringLiteral:e,parentNodeTypes:i=[],formatter:r,select:n,from:a,group:u,sort:o,insertColumns:p,update:f,bool:m,isColumnConstraint:T,isDomainConstraint:E,alterColumnOptions:g,alterTableOptions:A,isEnumValue:S,objtype:b,subtype:_,...y}={}){this.indentLevel=t,this.prettyMode=s,this.isStringLiteral=e,this.parentNodeTypes=i,this.formatter=r||new U(`
16
- `," ",s),this.select=n,this.from=a,this.group=u,this.sort=o,this.insertColumns=p,this.update=f,this.bool=m,this.isColumnConstraint=T,this.isDomainConstraint=E,this.alterColumnOptions=g,this.alterTableOptions=A,this.isEnumValue=S,this.objtype=b,this.subtype=_,Object.assign(this,y);}spawn(t,s={}){return new l({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(l){let t=l.toLowerCase();return ns.has(t)?"RESERVED_KEYWORD":os.has(t)?"TYPE_FUNC_NAME_KEYWORD":us.has(t)?"COL_NAME_KEYWORD":as.has(t)?"UNRESERVED_KEYWORD":"NO_KEYWORD"}var ut,ns,as,us,os,re=C(()=>{ut={UNRESERVED_KEYWORD:["abort","absent","absolute","access","action","add","admin","after","aggregate","also","alter","always","asensitive","assertion","assignment","at","atomic","attach","attribute","backward","before","begin","breadth","by","cache","call","called","cascade","cascaded","catalog","chain","characteristics","checkpoint","class","close","cluster","columns","comment","comments","commit","committed","compression","conditional","configuration","conflict","connection","constraints","content","continue","conversion","copy","cost","csv","cube","current","cursor","cycle","data","database","day","deallocate","declare","defaults","deferred","definer","delete","delimiter","delimiters","depends","depth","detach","dictionary","disable","discard","document","domain","double","drop","each","empty","enable","encoding","encrypted","enforced","enum","error","escape","event","exclude","excluding","exclusive","execute","explain","expression","extension","external","family","filter","finalize","first","following","force","format","forward","function","functions","generated","global","granted","groups","handler","header","hold","hour","identity","if","ignore","immediate","immutable","implicit","import","include","including","increment","indent","index","indexes","inherit","inherits","inline","input","insensitive","insert","instead","invoker","isolation","keep","key","keys","label","language","large","last","leakproof","level","listen","load","local","location","lock","locked","logged","lsn","mapping","match","matched","materialized","maxvalue","merge","method","minute","minvalue","mode","month","move","name","names","nested","new","next","nfc","nfd","nfkc","nfkd","no","normalized","nothing","notify","nowait","nulls","object","objects","of","off","oids","old","omit","operator","option","options","ordinality","others","over","overriding","owned","owner","parallel","parameter","parser","partial","partition","partitions","passing","password","path","period","plan","plans","policy","preceding","prepare","prepared","preserve","prior","privileges","procedural","procedure","procedures","program","publication","quote","quotes","range","read","reassign","recursive","ref","referencing","refresh","reindex","relative","release","rename","repeatable","replace","replica","reset","respect","restart","restrict","return","returns","revoke","role","rollback","rollup","routine","routines","rows","rule","savepoint","scalar","schema","schemas","scroll","search","second","security","sequence","sequences","serializable","server","session","set","sets","share","show","simple","skip","snapshot","source","split","sql","stable","standalone","start","statement","statistics","stdin","stdout","storage","stored","strict","string","strip","subscription","support","sysid","system","tables","tablespace","target","temp","template","temporary","text","ties","transaction","transform","trigger","truncate","trusted","type","types","uescape","unbounded","uncommitted","unconditional","unencrypted","unknown","unlisten","unlogged","until","update","vacuum","valid","validate","validator","value","varying","version","view","views","virtual","volatile","wait","whitespace","within","without","work","wrapper","write","xml","year","yes","zone"],RESERVED_KEYWORD:["all","analyse","analyze","and","any","array","as","asc","asymmetric","both","case","cast","check","collate","column","constraint","create","current_catalog","current_date","current_role","current_time","current_timestamp","current_user","default","deferrable","desc","distinct","do","else","end","except","false","fetch","for","foreign","from","grant","group","having","in","initially","intersect","into","lateral","leading","limit","localtime","localtimestamp","not","null","offset","on","only","or","order","placing","primary","references","returning","select","session_user","some","symmetric","system_user","table","then","to","trailing","true","union","unique","user","using","variadic","when","where","window","with"],TYPE_FUNC_NAME_KEYWORD:["authorization","binary","collation","concurrently","cross","current_schema","freeze","full","ilike","inner","is","isnull","join","left","like","natural","notnull","outer","overlaps","right","similar","tablesample","verbose"],COL_NAME_KEYWORD:["between","bigint","bit","boolean","char","character","coalesce","dec","decimal","exists","extract","float","greatest","grouping","inout","int","integer","interval","json","json_array","json_arrayagg","json_exists","json_object","json_objectagg","json_query","json_scalar","json_serialize","json_table","json_value","least","merge_action","national","nchar","none","normalize","nullif","numeric","out","overlay","position","precision","real","row","setof","smallint","substring","time","timestamp","treat","trim","values","varchar","xmlattributes","xmlconcat","xmlelement","xmlexists","xmlforest","xmlnamespaces","xmlparse","xmlpi","xmlroot","xmlserialize","xmltable"]},ns=new Set(ut.RESERVED_KEYWORD??[]),as=new Set(ut.UNRESERVED_KEYWORD??[]),us=new Set(ut.COL_NAME_KEYWORD??[]),os=new Set(ut.TYPE_FUNC_NAME_KEYWORD??[]);});var h,ls=C(()=>{re();h=class l{static escape(t){return `'${t.replace(/'/g,"''")}'`}static escapeEString(t){return t.replace(/\\/g,"\\\\").replace(/'/g,"''")}static formatEString(t){return l.needsEscapePrefix(t)?`E'${l.escapeEString(t)}'`:l.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?l.quoteIdentifier(t[0]):t.map((s,e)=>e===0?l.quoteIdentifier(s):l.quoteIdentifierAfterDot(s)).join(".")}static quoteQualifiedIdentifier(t,s){return t?`${l.quoteIdentifier(t)}.${l.quoteIdentifierAfterDot(s)}`:l.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=>l.quoteIdentifierTypeName(s)).join(".")}};});var ne=C(()=>{ls();re();});var c,ps=C(()=>{c=class{static unwrapList(t){return t==null?[]:t.List!==void 0?t.List.items||[]:Array.isArray(t)?t:[t]}static formatList(t,s=", ",e="",i){return !t||t.length===0?"":t.map(r=>`${e}${i(r)}`).join(s)}};});function Ti(l){return l&&typeof l=="object"&&!Array.isArray(l)&&!("ParseResult"in l)&&!("RawStmt"in l)&&("stmts"in l||"version"in l)}var Ei,gi,Z,cs=C(()=>{rs();ie();ne();ps();Ei=["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"],gi=[["numeric",["decimal","dec"]],["int4",["int","integer"]],["float8",["float"]],["bpchar",["character"]],["varchar",["character varying"]]];Z=class l{tree;options;constructor(t,s={}){this.options={functionDelimiter:"$$",functionDelimiterFallback:"$EOFCODE$",...s},Ti(t)?this.tree=[{ParseResult:t}]:Array.isArray(t)?this.tree=t:this.tree=[t];}static deparse(t,s={}){return new l(t,s).deparseQuery()}deparseQuery(){let t=new U(this.options.newline,this.options.tab,this.options.pretty),s=new z({formatter:t,prettyMode:this.options.pretty});return this.tree.map(e=>this.deparse(e,s)||"").filter(e=>e!=="").join(s.newline()+s.newline())}getFunctionDelimiter(t){let s=this.options.functionDelimiter||"$$";return t.includes(s)?this.options.functionDelimiterFallback||"$EOFCODE$":s}getObjectTypeKeyword(t){switch(t){case "OBJECT_TABLE":return "TABLE";case "OBJECT_VIEW":return "VIEW";case "OBJECT_INDEX":return "INDEX";case "OBJECT_SEQUENCE":return "SEQUENCE";case "OBJECT_FUNCTION":return "FUNCTION";case "OBJECT_PROCEDURE":return "PROCEDURE";case "OBJECT_SCHEMA":return "SCHEMA";case "OBJECT_DATABASE":return "DATABASE";case "OBJECT_DOMAIN":return "DOMAIN";case "OBJECT_AGGREGATE":return "AGGREGATE";case "OBJECT_CONVERSION":return "CONVERSION";case "OBJECT_LANGUAGE":return "LANGUAGE";case "OBJECT_OPERATOR":return "OPERATOR";case "OBJECT_OPFAMILY":return "OPERATOR FAMILY";case "OBJECT_OPCLASS":return "OPERATOR CLASS";case "OBJECT_TSDICTIONARY":return "TEXT SEARCH DICTIONARY";case "OBJECT_TSCONFIGURATION":return "TEXT SEARCH CONFIGURATION";case "OBJECT_EVENT_TRIGGER":return "EVENT TRIGGER";case "OBJECT_FDW":return "FOREIGN DATA WRAPPER";case "OBJECT_FOREIGN_SERVER":return "SERVER";case "OBJECT_TYPE":return "TYPE";case "OBJECT_COLLATION":return "COLLATION";case "OBJECT_PUBLICATION":return "PUBLICATION";case "OBJECT_ACCESS_METHOD":return "ACCESS METHOD";case "OBJECT_AMOP":return "OPERATOR CLASS";case "OBJECT_AMPROC":return "OPERATOR CLASS";case "OBJECT_ATTRIBUTE":return "ATTRIBUTE";case "OBJECT_CAST":return "CAST";case "OBJECT_COLUMN":return "COLUMN";case "OBJECT_DEFAULT":return "DEFAULT";case "OBJECT_DEFACL":return "DEFAULT PRIVILEGES";case "OBJECT_DOMCONSTRAINT":return "DOMAIN";case "OBJECT_EXTENSION":return "EXTENSION";case "OBJECT_FOREIGN_TABLE":return "FOREIGN TABLE";case "OBJECT_LARGEOBJECT":return "LARGE OBJECT";case "OBJECT_MATVIEW":return "MATERIALIZED VIEW";case "OBJECT_PARAMETER_ACL":return "PARAMETER";case "OBJECT_POLICY":return "POLICY";case "OBJECT_PUBLICATION_NAMESPACE":return "PUBLICATION";case "OBJECT_PUBLICATION_REL":return "PUBLICATION";case "OBJECT_ROLE":return "ROLE";case "OBJECT_ROUTINE":return "ROUTINE";case "OBJECT_RULE":return "RULE";case "OBJECT_STATISTIC_EXT":return "STATISTICS";case "OBJECT_SUBSCRIPTION":return "SUBSCRIPTION";case "OBJECT_TABCONSTRAINT":return "CONSTRAINT";case "OBJECT_TABLESPACE":return "TABLESPACE";case "OBJECT_TRANSFORM":return "TRANSFORM";case "OBJECT_TRIGGER":return "TRIGGER";case "OBJECT_TSPARSER":return "TEXT SEARCH PARSER";case "OBJECT_TSTEMPLATE":return "TEXT SEARCH TEMPLATE";case "OBJECT_USER_MAPPING":return "USER MAPPING";default:throw new Error(`Unsupported objectType: ${t}`)}}deparse(t,s){if(t==null)return null;if(!s){let e=new U(this.options.newline,this.options.tab,this.options.pretty);s=new z({formatter:e,prettyMode:this.options.pretty});}if(typeof t=="number"||t instanceof Number)return t.toString();try{return this.visit(t,s)}catch(e){let i=Object.keys(t)[0];throw new Error(`Error deparsing ${i}: ${e.message}`)}}visit(t,s){if(!s){let n=new U(this.options.newline,this.options.tab,this.options.pretty);s=new z({formatter:n,prettyMode:this.options.pretty});}let e=this.getNodeType(t);if(!e)return "";let i=this.getNodeData(t),r=e;if(typeof this[r]=="function")return this[r](i,s);throw new Error(`Deparser does not handle node type: ${e}`)}getNodeType(t){return Object.keys(t)[0]}getNodeData(t){let s=Object.keys(t);return s.length===1&&typeof t[s[0]]=="object"?t[s[0]]:t}ParseResult(t,s){return !t.stmts||t.stmts.length===0?"":t.stmts.filter(e=>e!=null).map(e=>this.RawStmt(e,s)).filter(e=>e!=="").join(s.newline()+s.newline())}RawStmt(t,s){if(!t.stmt)return "";let e=this.deparse(t.stmt,s);return t.stmt_len?e+";":e}SelectStmt(t,s){let e=[];if(t.withClause&&e.push(this.WithClause(t.withClause,s)),!t.op||t.op==="SETOP_NONE")t.valuesLists==null&&(!s.isPretty()||!t.targetList)&&e.push("SELECT");else {let r=this.SelectStmt(t.larg,s),n=this.SelectStmt(t.rarg,s),a=t.larg&&(t.larg.op&&t.larg.op!=="SETOP_NONE"||t.larg.sortClause||t.larg.limitCount||t.larg.limitOffset||t.larg.withClause),u=t.rarg&&(t.rarg.op&&t.rarg.op!=="SETOP_NONE"||t.rarg.sortClause||t.rarg.limitCount||t.rarg.limitOffset||t.rarg.withClause);switch(a?e.push(s.parens(r)):e.push(r),t.op){case "SETOP_UNION":e.push("UNION");break;case "SETOP_INTERSECT":e.push("INTERSECT");break;case "SETOP_EXCEPT":e.push("EXCEPT");break;default:throw new Error(`Bad SelectStmt op: ${t.op}`)}t.all&&e.push("ALL"),u?e.push(s.parens(n)):e.push(n);}let i="";if(t.distinctClause){let r=c.unwrapList(t.distinctClause);if(r.length>0&&Object.keys(r[0]).length>0){let n=r.map(a=>this.visit(a,s.spawn("SelectStmt",{select:true}))).join(", ");i=" DISTINCT ON "+s.parens(n);}else i=" DISTINCT";if(!s.isPretty())if(r.length>0&&Object.keys(r[0]).length>0){e.push("DISTINCT ON");let n=r.map(a=>this.visit(a,s.spawn("SelectStmt",{select:true}))).join(", ");e.push(s.parens(n));}else e.push("DISTINCT");}if(t.targetList){let r=c.unwrapList(t.targetList);if(s.isPretty())if(r.length===1){let n=r[0],a=this.visit(n,s.spawn("SelectStmt",{select:true}));this.isComplexSelectTarget(n)?(e.push("SELECT"+i),this.containsMultilineStringLiteral(a)?e.push(a):e.push(s.indent(a))):e.push("SELECT"+i+" "+a);}else {let a=r.map(u=>{let o=this.visit(u,s.spawn("SelectStmt",{select:true}));return this.containsMultilineStringLiteral(o)?o:s.indent(o)}).join(","+s.newline());e.push("SELECT"+i),e.push(a);}else {let n=r.map(a=>this.visit(a,s.spawn("SelectStmt",{select:true}))).join(", ");e.push(n);}}if(t.intoClause&&(e.push("INTO"),e.push(this.IntoClause(t.intoClause,s))),t.fromClause){let n=c.unwrapList(t.fromClause).map(a=>this.deparse(a,s.spawn("SelectStmt",{from:true}))).join(", ");e.push("FROM "+n.trim());}if(t.whereClause)if(s.isPretty()){e.push("WHERE");let a=this.visit(t.whereClause,s).split(s.newline()).map((u,o)=>o===0?s.indent(u):u);e.push(a.join(s.newline()));}else e.push("WHERE"),e.push(this.visit(t.whereClause,s));if(t.valuesLists)if(s.isPretty()){e.push("VALUES");let n=c.unwrapList(t.valuesLists).map(a=>{let u=c.unwrapList(a).map(o=>this.visit(o,s));return s.parens(u.join(", "))}).map(a=>this.containsMultilineStringLiteral(a)?a:s.indent(a));e.push(n.join(`,
17
- `));}else {e.push("VALUES");let r=c.unwrapList(t.valuesLists).map(n=>{let a=c.unwrapList(n).map(u=>this.visit(u,s));return s.parens(a.join(", "))});e.push(r.join(", "));}if(t.groupClause){let r=c.unwrapList(t.groupClause);if(s.isPretty()){let n=r.map(a=>{let u=this.visit(a,s.spawn("SelectStmt",{group:true,indentLevel:s.indentLevel+1}));return this.containsMultilineStringLiteral(u)?u:s.indent(u)}).join(","+s.newline());e.push("GROUP BY"),e.push(n);}else {e.push("GROUP BY");let n=r.map(a=>this.visit(a,s.spawn("SelectStmt",{group:true}))).join(", ");e.push(n);}}if(t.havingClause)if(s.isPretty()){e.push("HAVING");let r=this.visit(t.havingClause,s);this.containsMultilineStringLiteral(r)?e.push(r):e.push(s.indent(r));}else e.push("HAVING"),e.push(this.visit(t.havingClause,s));if(t.windowClause){e.push("WINDOW");let n=c.unwrapList(t.windowClause).map(a=>this.visit(a,s)).join(", ");e.push(n);}if(t.sortClause){let r=c.unwrapList(t.sortClause);if(s.isPretty()){let n=r.map(a=>{let u=this.visit(a,s.spawn("SelectStmt",{sort:true,indentLevel:s.indentLevel+1}));return this.containsMultilineStringLiteral(u)?u:s.indent(u)}).join(","+s.newline());e.push("ORDER BY"),e.push(n);}else {e.push("ORDER BY");let n=r.map(a=>this.visit(a,s.spawn("SelectStmt",{sort:true}))).join(", ");e.push(n);}}if(t.limitCount&&e.push("LIMIT "+this.visit(t.limitCount,s)),t.limitOffset&&e.push("OFFSET "+this.visit(t.limitOffset,s)),t.lockingClause){let n=c.unwrapList(t.lockingClause).map(a=>this.visit(a,s)).join(" ");e.push(n);}return s.isPretty()?e.filter(n=>n.trim()!=="").join(s.newline()):e.join(" ")}A_Expr(t,s){let e=t.kind,i=c.unwrapList(t.name),r=t.lexpr,n=t.rexpr;switch(e){case "AEXPR_OP":if(r&&n){let m=this.deparseOperatorName(i,s),T=this.visit(r,s),E=this.visit(n,s),g=false;if(r&&"A_Expr"in r&&r.A_Expr?.kind==="AEXPR_OP"){let S=this.deparseOperatorName(c.unwrapList(r.A_Expr.name),s);this.needsParentheses(S,m,"left")&&(g=true);}r&&this.isComplexExpression(r)&&(g=true),g&&(T=s.parens(T));let A=false;if(n&&"A_Expr"in n&&n.A_Expr?.kind==="AEXPR_OP"){let S=this.deparseOperatorName(c.unwrapList(n.A_Expr.name),s);this.needsParentheses(S,m,"right")&&(A=true);}return n&&this.isComplexExpression(n)&&(A=true),A&&(E=s.parens(E)),s.format([T,m,E])}else if(n){let m=this.deparseOperatorName(i,s),T=this.visit(n,s);return n&&"A_Expr"in n&&n.A_Expr?.kind==="AEXPR_OP"&&n.A_Expr?.lexpr&&(T=s.parens(T)),s.format([m,T])}break;case "AEXPR_OP_ANY":return s.format([this.visit(r,s),this.deparseOperatorName(i,s),"ANY",s.parens(this.visit(n,s))]);case "AEXPR_OP_ALL":return s.format([this.visit(r,s),this.deparseOperatorName(i,s),"ALL",s.parens(this.visit(n,s))]);case "AEXPR_DISTINCT":{let m=this.visit(r,s),T=this.visit(n,s);return r&&this.isComplexExpression(r)&&(m=s.parens(m)),n&&this.isComplexExpression(n)&&(T=s.parens(T)),s.format([m,"IS DISTINCT FROM",T])}case "AEXPR_NOT_DISTINCT":{let m=this.visit(r,s),T=this.visit(n,s);return r&&this.isComplexExpression(r)&&(m=s.parens(m)),n&&this.isComplexExpression(n)&&(T=s.parens(T)),s.format([m,"IS NOT DISTINCT FROM",T])}case "AEXPR_NULLIF":return s.format(["NULLIF",s.parens([this.visit(r,s),this.visit(n,s)].join(", "))]);case "AEXPR_IN":let a=this.deparseOperatorName(i,s);return a==="<>"||a==="!="?s.format([this.visit(r,s),"NOT IN",s.parens(this.visit(n,s))]):s.format([this.visit(r,s),"IN",s.parens(this.visit(n,s))]);case "AEXPR_LIKE":return this.deparseOperatorName(i,s)==="!~~"?s.format([this.visit(r,s),"NOT LIKE",this.visit(n,s)]):s.format([this.visit(r,s),"LIKE",this.visit(n,s)]);case "AEXPR_ILIKE":return this.deparseOperatorName(i,s)==="!~~*"?s.format([this.visit(r,s),"NOT ILIKE",this.visit(n,s)]):s.format([this.visit(r,s),"ILIKE",this.visit(n,s)]);case "AEXPR_SIMILAR":let p=this.deparseOperatorName(i,s),f;if(n&&"FuncCall"in n&&n.FuncCall?.funcname?.length===2&&n.FuncCall.funcname[0]?.String?.sval==="pg_catalog"&&n.FuncCall.funcname[1]?.String?.sval==="similar_to_escape"){let m=n.FuncCall.args||[];f=this.visit(m[0],s),m.length>1&&(f+=` ESCAPE ${this.visit(m[1],s)}`);}else f=this.visit(n,s);return p==="!~"?s.format([this.visit(r,s),"NOT SIMILAR TO",f]):s.format([this.visit(r,s),"SIMILAR TO",f]);case "AEXPR_BETWEEN":return s.format([this.visit(r,s),"BETWEEN",this.visitBetweenRange(n,s)]);case "AEXPR_NOT_BETWEEN":return s.format([this.visit(r,s),"NOT BETWEEN",this.visitBetweenRange(n,s)]);case "AEXPR_BETWEEN_SYM":return s.format([this.visit(r,s),"BETWEEN SYMMETRIC",this.visitBetweenRange(n,s)]);case "AEXPR_NOT_BETWEEN_SYM":return s.format([this.visit(r,s),"NOT BETWEEN SYMMETRIC",this.visitBetweenRange(n,s)])}throw new Error(`Unhandled A_Expr kind: ${e}`)}deparseOperatorName(t,s){if(!t||t.length===0)return "";let e=t.map(i=>i.String?i.String.sval||i.String.str:this.visit(i,s));return e.length>1?`OPERATOR(${e.join(".")})`:e.join(".")}getOperatorPrecedence(t){return {"||":1,OR:2,AND:3,NOT:4,IS:5,IN:5,BETWEEN:5,LIKE:5,ILIKE:5,SIMILAR:5,"<":6,"<=":6,">":6,">=":6,"=":6,"<>":6,"!=":6,"+":7,"-":7,"*":8,"/":8,"%":8,"^":9,"~":10,"&":10,"|":10,"#":10,"<<":10,">>":10}[t]||0}needsParentheses(t,s,e){let i=this.getOperatorPrecedence(t),r=this.getOperatorPrecedence(s);return i<r||i===r&&e==="right"&&(s==="-"||s==="/")}isComplexExpression(t){return !!(t.NullTest||t.BooleanTest||t.BoolExpr||t.CaseExpr||t.CoalesceExpr||t.SubLink||t.A_Expr)}isComplexSelectTarget(t){if(!t)return false;if(t.ResTarget?.val)return this.isComplexExpression(t.ResTarget.val);if(t.CaseExpr||t.SubLink||t.NullTest||t.BooleanTest||t.BoolExpr)return true;if(t.CoalesceExpr){let s=t.CoalesceExpr.args;if(s&&Array.isArray(s)&&s.length>1)return true}if(t.FuncCall){let s=t.FuncCall,e=s.args?Array.isArray(s.args)?s.args:[s.args]:[];if(s.over||s.agg_filter||s.agg_order||s.agg_distinct||e.length>1)return true;if(e.length===1)return this.isComplexSelectTarget(e[0])}if(t.A_Expr){let s=t.A_Expr;return !!(s.lexpr&&this.isComplexSelectTarget(s.lexpr)||s.rexpr&&this.isComplexSelectTarget(s.rexpr))}return t.TypeCast?this.isComplexSelectTarget(t.TypeCast.arg):t.A_ArrayExpr?true:t.A_Indirection?this.isComplexSelectTarget(t.A_Indirection.arg):(t.A_Const||t.ColumnRef||t.ParamRef||t.A_Star,false)}visitBetweenRange(t,s){return t&&"List"in t&&t.List?.items?t.List.items.map(i=>this.visit(i,s)).join(" AND "):this.visit(t,s)}InsertStmt(t,s){let e=[];if(t.withClause&&e.push(this.WithClause(t.withClause,s)),e.push("INSERT INTO"),e.push(this.RangeVar(t.relation,s)),t.cols){let i=c.unwrapList(t.cols),r=s.spawn("InsertStmt",{insertColumns:true}),n=i.map(a=>this.visit(a,r));if(s.isPretty()){let a=n.map(u=>s.indent(u));e.push(`(
18
- `+a.join(`,
19
- `)+`
20
- )`);}else e.push(s.parens(n.join(", ")));}if(t.selectStmt?e.push(this.visit(t.selectStmt,s)):(!t.cols||t.cols&&c.unwrapList(t.cols).length===0)&&e.push("DEFAULT VALUES"),t.onConflictClause){if(e.push("ON CONFLICT"),t.onConflictClause.infer){let i=t.onConflictClause.infer;if(i.conname)e.push("ON CONSTRAINT"),e.push(i.conname);else if(i.indexElems){let n=c.unwrapList(i.indexElems).map(a=>this.visit(a,s));e.push(s.parens(n.join(", ")));}i.whereClause&&(e.push("WHERE"),e.push(this.visit(i.whereClause,s)));}if(t.onConflictClause.action==="ONCONFLICT_UPDATE"){e.push("DO UPDATE SET");let i=c.unwrapList(t.onConflictClause.targetList);if(i&&i.length){let r=i[0];if(r.ResTarget?.val?.MultiAssignRef&&i.every(n=>n.ResTarget?.val?.MultiAssignRef)){let a=i.sort((u,o)=>u.ResTarget.val.MultiAssignRef.colno-o.ResTarget.val.MultiAssignRef.colno).map(u=>u.ResTarget.name);e.push(s.parens(a.join(", "))),e.push("="),e.push(this.visit(r.ResTarget.val.MultiAssignRef.source,s));}else {let n=s.spawn("UpdateStmt",{update:true}),a=i.map(u=>this.visit(u,n));if(s.isPretty()){let u=a.map(o=>s.indent(o));e.push(`
21
- `+u.join(`,
22
- `));}else e.push(a.join(", "));}}t.onConflictClause.whereClause&&(e.push("WHERE"),e.push(this.visit(t.onConflictClause.whereClause,s)));}else t.onConflictClause.action==="ONCONFLICT_NOTHING"&&e.push("DO NOTHING");}if(t.returningList){e.push("RETURNING");let r=c.unwrapList(t.returningList).map(n=>this.visit(n,s));e.push(r.join(", "));}return e.join(" ")}UpdateStmt(t,s){let e=[];t.withClause&&e.push(this.WithClause(t.withClause,s)),e.push("UPDATE"),t.relation&&e.push(this.RangeVar(t.relation,s)),e.push("SET");let i=c.unwrapList(t.targetList);if(i&&i.length){i[0];let n=new Set,a=[];for(let u=0;u<i.length;u++){if(n.has(u))continue;let o=i[u],p=o.ResTarget?.val?.MultiAssignRef;if(p){let f=[];for(let E=u;E<i.length;E++){let g=i[E],A=g.ResTarget?.val?.MultiAssignRef;A&&JSON.stringify(A.source)===JSON.stringify(p.source)&&(f.push(g),n.add(E));}let m=f.map(E=>E.ResTarget.name),T=`${s.parens(m.join(", "))} = ${this.visit(p.source,s)}`;a.push(T);}else a.push(this.visit(o,s.spawn("UpdateStmt",{update:true}))),n.add(u);}e.push(a.join(","));}if(t.fromClause){e.push("FROM");let n=c.unwrapList(t.fromClause).map(a=>this.visit(a,s));e.push(n.join(", "));}return t.whereClause&&(e.push("WHERE"),e.push(this.visit(t.whereClause,s))),t.returningList&&(e.push("RETURNING"),e.push(this.deparseReturningList(t.returningList,s))),e.join(" ")}DeleteStmt(t,s){try{let e=[];if(t.withClause)try{e.push(this.WithClause(t.withClause,s));}catch(i){throw console.warn(`Error processing withClause in DeleteStmt: ${i instanceof Error?i.message:String(i)}`),new Error(`Error deparsing DeleteStmt: ${i instanceof Error?i.message:String(i)}`)}if(e.push("DELETE"),e.push("FROM"),!t.relation)throw new Error("DeleteStmt requires a relation");if(e.push(this.RangeVar(t.relation,s)),t.usingClause){e.push("USING");let r=c.unwrapList(t.usingClause).filter(n=>n!=null&&this.getNodeType(n)!=="undefined").map(n=>{try{return this.visit(n,s)}catch(a){return console.warn(`Error processing usingClause item in DeleteStmt: ${a instanceof Error?a.message:String(a)}`),""}}).filter(n=>n&&n.trim());r.length>0&&e.push(r.join(", "));}if(t.whereClause){e.push("WHERE");try{e.push(this.visit(t.whereClause,s));}catch(i){throw console.warn(`Error processing whereClause in DeleteStmt: ${i instanceof Error?i.message:String(i)}`),new Error(`Error deparsing DeleteStmt: ${i instanceof Error?i.message:String(i)}`)}}if(t.returningList){e.push("RETURNING");try{e.push(this.deparseReturningList(t.returningList,s));}catch(i){throw console.warn(`Error processing returningList in DeleteStmt: ${i instanceof Error?i.message:String(i)}`),new Error(`Error deparsing DeleteStmt: ${i instanceof Error?i.message:String(i)}`)}}return e.join(" ")}catch(e){throw new Error(`Error deparsing DeleteStmt: ${e instanceof Error?e.message:String(e)}`)}}WithClause(t,s){let e=["WITH"];if(t.recursive&&e.push("RECURSIVE"),t.ctes&&t.ctes.length>0){let i=c.unwrapList(t.ctes);if(s.isPretty()){let r=i.map((n,a)=>{let u=this.visit(n,s),o=a===0?s.newline():","+s.newline();return this.containsMultilineStringLiteral(u)?o+u:o+s.indent(u)});e.push(r.join(""));}else {let r=i.map(n=>this.visit(n,s));e.push(r.join(", "));}}return e.join(" ")}ResTarget(t,s){let e=[];if(s.update&&t.name){if(e.push(h.quoteIdentifier(t.name)),t.indirection&&t.indirection.length>0){let i=c.unwrapList(t.indirection).map(r=>r.String?`.${h.quoteIdentifierAfterDot(r.String.sval||r.String.str)}`:this.visit(r,s));e.push(i.join(""));}e.push("="),t.val&&e.push(this.deparse(t.val,s));}else if(s.insertColumns&&t.name){if(e.push(h.quoteIdentifier(t.name)),t.indirection&&t.indirection.length>0){let i=c.unwrapList(t.indirection).map(r=>r.String?`.${h.quoteIdentifierAfterDot(r.String.sval||r.String.str)}`:this.visit(r,s));e.push(i.join(""));}}else t.val&&e.push(this.deparse(t.val,s)),t.name&&(e.push("AS"),e.push(h.quoteIdentifier(t.name)));return e.join(" ")}deparseReturningList(t,s){return c.unwrapList(t).filter(e=>e!=null&&this.getNodeType(e)!=="undefined").map(e=>{try{if(this.getNodeType(e)==="ResTarget"){let i=this.getNodeData(e),r=i.val?this.visit(i.val,s):"",n=i.name?` AS ${h.quoteIdentifier(i.name)}`:"";return r+n}else return this.visit(e,s)}catch(i){return console.warn(`Error processing returning item: ${i instanceof Error?i.message:String(i)}`),""}}).filter(e=>e&&e.trim()).join(", ")}BoolExpr(t,s){let e=t.boolop,i=c.unwrapList(t.args),r="%s";s.bool&&(r="(%s)");let n=s.spawn("BoolExpr",{bool:true});switch(e){case "AND_EXPR":if(s.isPretty()&&i.length>1){let a=i.map(u=>this.visit(u,n)).join(s.newline()+s.indent("AND "));return r.replace("%s",()=>a)}else {let a=i.map(u=>this.visit(u,n)).join(" AND ");return r.replace("%s",()=>a)}case "OR_EXPR":if(s.isPretty()&&i.length>1){let a=i.map(u=>this.visit(u,n)).join(s.newline()+s.indent("OR "));return r.replace("%s",()=>a)}else {let a=i.map(u=>this.visit(u,n)).join(" OR ");return r.replace("%s",()=>a)}case "NOT_EXPR":return `NOT (${this.visit(i[0],s)})`;default:throw new Error(`Unhandled BoolExpr boolop: ${e}`)}}FuncCall(t,s){let e=c.unwrapList(t.funcname),i=c.unwrapList(t.args),r=e.map(p=>p.String?.sval||p.String?.str||"").filter(p=>p),n=h.quoteDottedName(r);if(t.funcformat==="COERCE_SQL_SYNTAX"&&n==="pg_catalog.xmlexists"&&i.length>=2){let p=this.visit(i[0],s),f=this.visit(i[1],s);return `xmlexists (${p} PASSING ${f})`}if(t.funcformat==="COERCE_SQL_SYNTAX"&&n==="pg_catalog.extract"&&i.length>=2){let p=this.visit(i[0],s),f=this.visit(i[1],s);return p.startsWith("'")&&p.endsWith("'")&&(p=p.slice(1,-1).toUpperCase()),`EXTRACT(${p} FROM ${f})`}if(t.funcformat==="COERCE_SQL_SYNTAX"&&(n==="pg_catalog.rtrim"||n==="pg_catalog.ltrim"||n==="pg_catalog.btrim")&&i.length>=1){let p=this.visit(i[0],s),f="";if(i.length>=2&&(f=` ${this.visit(i[1],s)}`),n==="pg_catalog.rtrim")return `TRIM(TRAILING${f} FROM ${p})`;if(n==="pg_catalog.ltrim")return `TRIM(LEADING${f} FROM ${p})`;if(n==="pg_catalog.btrim")return `TRIM(BOTH${f} FROM ${p})`}if(t.funcformat==="COERCE_SQL_SYNTAX"&&n==="pg_catalog.pg_collation_for")return `COLLATION FOR (${i.map(f=>this.visit(f,s)).join(", ")})`;if(t.funcformat==="COERCE_SQL_SYNTAX"&&n==="pg_catalog.substring"){let p=this.visit(i[0],s);if(i.length===3){let f=this.visit(i[1],s),m=this.visit(i[2],s);return `SUBSTRING(${p} FROM ${f} FOR ${m})`}else if(i.length===2){let f=this.visit(i[1],s);return `SUBSTRING(${p} FROM ${f})`}}if(t.funcformat==="COERCE_SQL_SYNTAX"&&n==="pg_catalog.position"&&i.length===2){let p=this.visit(i[0],s);return `POSITION(${this.visit(i[1],s)} IN ${p})`}if(t.funcformat==="COERCE_SQL_SYNTAX"&&n==="pg_catalog.overlay"){if(i.length===4){let p=this.visit(i[0],s),f=this.visit(i[1],s),m=this.visit(i[2],s),T=this.visit(i[3],s);return `OVERLAY(${p} PLACING ${f} FROM ${m} FOR ${T})`}else if(i.length===3){let p=this.visit(i[0],s),f=this.visit(i[1],s),m=this.visit(i[2],s);return `OVERLAY(${p} PLACING ${f} FROM ${m})`}}if(t.funcformat==="COERCE_SQL_SYNTAX"&&n==="pg_catalog.is_normalized"){let p=this.visit(i[0],s);if(i.length===2){let m=this.visit(i[1],s).replace(/'/g,"");return `${p} IS ${m} NORMALIZED`}else return `${p} IS NORMALIZED`}if(t.funcformat==="COERCE_SQL_SYNTAX"&&n==="pg_catalog.normalize"){let p=this.visit(i[0],s);if(i.length===2){let m=this.visit(i[1],s).replace(/'/g,"");return `normalize(${p}, ${m})`}else return `normalize(${p})`}if(t.funcformat==="COERCE_SQL_SYNTAX"&&n==="pg_catalog.system_user"&&i.length===0)return "SYSTEM_USER";if(n==="pg_catalog.overlaps"&&i.length===4){let p=this.visit(i[0],s),f=this.visit(i[1],s),m=this.visit(i[2],s),T=this.visit(i[3],s);return `(${p}, ${f}) OVERLAPS (${m}, ${T})`}if(n==="pg_catalog.timezone"&&i.length===2){let p=this.visit(i[1],s),f=this.visit(i[0],s);if(i[1]&&"A_Expr"in i[1]&&i[1].A_Expr?.kind==="AEXPR_OP"){let m=this.deparseOperatorName(c.unwrapList(i[1].A_Expr.name),s);(m==="+"||m==="-"||m==="*"||m==="/")&&(p=s.parens(p));}return `${p} AT TIME ZONE ${f}`}let a=[];if(t.agg_star)t.agg_distinct?a.push("DISTINCT *"):a.push("*");else {let p=i.map(f=>this.visit(f,s));if(t.func_variadic&&p.length>0){let f=p.length-1;p[f]=`VARIADIC ${p[f]}`;}t.agg_distinct&&p.length>0?a.push("DISTINCT "+p.join(", ")):a.push(...p);}let u="";if(t.agg_order&&t.agg_order.length>0){let f=c.unwrapList(t.agg_order).map(m=>this.visit(m,s));t.agg_within_group?u=` WITHIN GROUP (ORDER BY ${f.join(", ")})`:u=` ORDER BY ${f.join(", ")}`;}let o;if(t.agg_within_group&&u?o=`${n}(${a.join(", ")})${u}`:o=`${n}(${a.join(", ")}${u})`,t.agg_filter&&(o+=` FILTER (WHERE ${this.visit(t.agg_filter,s)})`),t.over)if(t.over.name)o+=` OVER ${t.over.name}`;else {let p=[];if(t.over.partitionClause){let T=c.unwrapList(t.over.partitionClause).map(E=>this.visit(E,s));p.push(`PARTITION BY ${T.join(", ")}`);}if(t.over.orderClause){let T=c.unwrapList(t.over.orderClause).map(E=>this.visit(E,s));p.push(`ORDER BY ${T.join(", ")}`);}let f=this.formatWindowFrame(t.over,s.spawn("FuncCall"));if(f&&p.push(f),p.length>0)if(s.isPretty()&&p.length>1){let m=p.map(T=>s.indent(T));o+=` OVER (${s.newline()}${m.join(s.newline())}${s.newline()})`;}else o+=` OVER (${p.join(" ")})`;else o+=" OVER ()";}return o}FuncExpr(t,s){let e=`func_${t.funcid}`,i=t.args?c.unwrapList(t.args).map(r=>this.visit(r,s)).join(", "):"";return `${e}(${i})`}A_Const(t,s){let e=t;if(e.ival!==void 0)return typeof e.ival=="object"&&e.ival!==null?e.ival.ival!==void 0?e.ival.ival.toString():Object.keys(e.ival).length===0?"0":e.ival.toString():e.ival===null?"NULL":e.ival.toString();if(e.fval!==void 0)return typeof e.fval=="object"&&e.fval!==null?e.fval.fval!==void 0?e.fval.fval.toString():Object.keys(e.fval).length===0?"0.0":e.fval.toString():e.fval===null?"NULL":e.fval.toString();if(e.sval!==void 0)return typeof e.sval=="object"&&e.sval!==null?e.sval.sval!==void 0?h.formatEString(e.sval.sval):e.sval.String&&e.sval.String.sval!==void 0?h.formatEString(e.sval.String.sval):Object.keys(e.sval).length===0?"''":h.formatEString(e.sval.toString()):e.sval===null?"NULL":h.formatEString(e.sval);if(e.boolval!==void 0)return typeof e.boolval=="object"&&e.boolval!==null?e.boolval.boolval!==void 0?e.boolval.boolval?"true":"false":Object.keys(e.boolval).length===0?"false":e.boolval?"true":"false":e.boolval===null?"NULL":e.boolval?"true":"false";if(e.bsval!==void 0)if(typeof e.bsval=="object"&&e.bsval!==null)if(e.bsval.bsval!==void 0){let i=e.bsval.bsval;return i.startsWith("x")&&/^x[0-9A-Fa-f]+$/.test(i)?`x'${i.substring(1)}'`:i.startsWith("b")?`b'${i.substring(1)}'`:`b'${i}'`}else return Object.keys(e.bsval).length===0?"''":e.bsval.toString();else {if(e.bsval===null)return "NULL";{let i=e.bsval;return i.startsWith("x")&&/^x[0-9A-Fa-f]+$/.test(i)?`x'${i.substring(1)}'`:i.startsWith("b")?`b'${i.substring(1)}'`:`b'${i}'`}}if(e.val){if(e.val.Integer?.ival!==void 0)return e.val.Integer.ival.toString();if(e.val.Float?.fval!==void 0)return e.val.Float.fval.toString();if(e.val.String?.sval!==void 0)return h.escape(e.val.String.sval);if(e.val.Boolean?.boolval!==void 0)return e.val.Boolean.boolval?"true":"false";if(e.val.BitString?.bsval!==void 0)return e.val.BitString.bsval}return e.isnull===true?"NULL":typeof e=="object"&&e!==null?e.Boolean!==void 0?e.Boolean?"true":"false":e.Integer!==void 0?typeof e.Integer=="object"&&e.Integer.ival!==void 0?e.Integer.ival.toString():e.Integer.toString():e.Float!==void 0?typeof e.Float=="object"&&e.Float.fval!==void 0?e.Float.fval.toString():e.Float.toString():e.String!==void 0?typeof e.String=="object"&&e.String.sval!==void 0?h.escape(e.String.sval):h.escape(e.String):(Object.keys(e).length===0||console.warn("A_Const: Unhandled object structure:",JSON.stringify(e,null,2)),"NULL"):"NULL"}ColumnRef(t,s){return c.unwrapList(t.fields).map(i=>i.String?h.quoteIdentifier(i.String.sval||i.String.str):i.A_Star?"*":this.visit(i,s)).join(".")}TypeName(t,s){if(!t.names)return "";let e=[];t.setof&&e.push("SETOF");let i=t.names.map(o=>o.String?o.String.sval||o.String.str:"").filter(Boolean);if(i.length===0)return "";let r=null;t.typmods?i.some(p=>(typeof p=="string"?p:p.String?.sval||p.String?.str)==="interval")?r=this.formatIntervalTypeMods(t.typmods,s):r=this.formatTypeMods(t.typmods,s):t.typemod&&t.typemod!==-1&&(r=this.formatSingleTypeMod(t.typemod,i[0]));let n=(o,p)=>p!=null?o==="interval"?p.startsWith("(")?`${o}${p}`:`${o} ${p}`:`${o}(${p})`:o,a=o=>o.map(p=>p.Integer&&p.Integer.ival!==void 0&&p.Integer.ival!==-1?`[${p.Integer.ival}]`:"[]").join("");if(i.length===1){let o=i[0];if(o==="char")return s.parentNodeTypes.includes("TypeCast")&&r==="1"?e.push('"char"'):e.push(n('"char"',r)),e.join(" ");let p=n(h.quoteIdentifierTypeName(o),r);return t.arrayBounds&&t.arrayBounds.length>0&&(p+=a(t.arrayBounds)),e.push(p),e.join(" ")}if(i.length===2){let[o,p]=i;if(o==="pg_catalog"&&p==="char")return e.push(n("pg_catalog.char",r)),e.join(" ");if(o==="pg_catalog"){let f=`${o}.${p}`;p==="bpchar"&&r?f="char":p==="varchar"?f="varchar":p==="numeric"?f="numeric":p==="int4"?f="int":p==="float8"?f="double precision":p==="float4"?f="real":p==="int8"?f="bigint":p==="int2"?f="smallint":p==="bool"?f="boolean":p==="interval"?(s.parentNodeTypes.includes("TypeCast"),f="interval"):p==="timestamptz"?r?(f=`timestamp(${r}) with time zone`,r=null):f="timestamp with time zone":p==="timetz"?r?(f=`time(${r}) with time zone`,r=null):f="time with time zone":p==="timestamp"?r?(f=`timestamp(${r})`,r=null):f="timestamp":p==="time"&&(r?(f=`time(${r})`,r=null):f="time");let m=n(f,r);return t.arrayBounds&&t.arrayBounds.length>0&&(m+=a(t.arrayBounds)),e.push(m),e.join(" ")}}let u=n(h.quoteTypeDottedName(i),r);return t.arrayBounds&&t.arrayBounds.length>0&&(u+=a(t.arrayBounds)),e.push(u),e.join(" ")}Alias(t,s){let e=t.aliasname,i=[];if(t.colnames){let n=c.unwrapList(t.colnames).map(a=>{let u=this.deparse(a,s);return u.startsWith('"')&&u.endsWith('"')?u:this.quoteIfNeeded(u)});i.push("AS",this.quoteIfNeeded(e)+s.parens(n.join(", ")));}else i.push("AS",this.quoteIfNeeded(e));return i.join(" ")}RangeVar(t,s){let e=[];t&&(!("inh"in t)||t.inh===void 0)&&!s.parentNodeTypes.includes("CompositeTypeStmt")&&!s.parentNodeTypes.includes("AlterTypeStmt")&&s.objtype!=="OBJECT_TYPE"&&!s.parentNodeTypes.includes("CreateForeignTableStmt")&&e.push("ONLY");let i="";if(t.catalogname?(i=h.quoteIdentifier(t.catalogname),t.schemaname&&(i+="."+h.quoteIdentifierAfterDot(t.schemaname)),i+="."+h.quoteIdentifierAfterDot(t.relname)):t.schemaname?i=h.quoteQualifiedIdentifier(t.schemaname,t.relname):i=h.quoteIdentifier(t.relname),e.push(i),t.alias){let n=this.Alias(t.alias,s);e.push(n);}return e.join(" ")}formatIntervalTypeMods(t,s){if(!t||t.length===0)return null;let e=c.unwrapList(t),i={4:"year",2:"month",8:"day",1024:"hour",2048:"minute",4096:"second",6:"year to month",1032:"day to hour",3080:"day to minute",7176:"day to second",3072:"hour to minute",7168:"hour to second",6144:"minute to second"};if(e.length===1){let n=e[0];if(n&&typeof n=="object"){let a=n.A_Const;if(a&&a.ival!==void 0){let u=typeof a.ival=="object"?a.ival.ival:a.ival;if(u!==void 0)return i[u]?i[u]:`(${u})`}}}if(e.length===2){let n=e[0],a=e[1];if(n&&typeof n=="object"){let u=n.A_Const;if(u&&u.ival!==void 0){let o=typeof u.ival=="object"?u.ival.ival:u.ival;if(a&&typeof a=="object"){let p=a.A_Const;if(p&&p.ival!==void 0){let f=typeof p.ival=="object"?p.ival.ival!==void 0?p.ival.ival:0:p.ival;if(o===32767&&f>=0)return `(${f})`;if(i[o]&&f>=0)return `${i[o]}(${f})`}}}}}let r=e.map(n=>{if(n&&typeof n=="object"){let u=n.A_Const;if(u&&u.ival!==void 0){let o=typeof u.ival=="object"?u.ival.ival:u.ival;if(o!==void 0)return i[o]||o.toString()}}return this.visit(n,s)||""}).filter(Boolean);return r.length>0?r.join(" "):null}formatTypeMods(t,s){if(!t||t.length===0)return null;let i=c.unwrapList(t).filter(r=>{if(r&&typeof r=="object"){let n=r.A_Const;if(n&&n.ival&&(typeof n.ival=="object"?n.ival.ival:n.ival)===32767)return false}return true});return i.length===0?null:i.map(r=>this.deparse(r,s)).join(", ")}formatSingleTypeMod(t,s){switch(s){case "varchar":case "bpchar":case "char":if(t>4)return (t-64).toString();break;case "numeric":case "decimal":if(t>4){let e=t-4,i=e>>16&65535,r=e&65535;return r>0?`${i},${r}`:i.toString()}break;case "time":case "timetz":case "timestamp":case "timestamptz":case "interval":if(t>=0)return t.toString();break}return null}getPgCatalogTypeName(t,s){switch(t){case "bpchar":return s!=null?"char":"bpchar";case "varchar":return "varchar";case "numeric":return "numeric";case "bool":return "boolean";case "int2":return "smallint";case "int4":return "int";case "int8":return "bigint";case "real":return "float4";case "time":return "time";case "timestamp":return "timestamp";case "interval":return "interval";case "bit":return "bit";default:return t}}isPgCatalogType(t){let s=t.replace(/^pg_catalog\./,"");if(Ei.includes(s))return true;for(let[e,i]of gi)if(i.includes(s))return true;return false}A_ArrayExpr(t,s){return `ARRAY[${c.unwrapList(t.elements).map(r=>this.visit(r,s)).join(", ")}]`}A_Indices(t,s){let e=[];return t.is_slice?(t.lidx&&e.push(this.visit(t.lidx,s)),e.push(":"),t.uidx&&e.push(this.visit(t.uidx,s))):t.uidx&&e.push(this.visit(t.uidx,s)),`[${e.join("")}]`}A_Indirection(t,s){let e=this.visit(t.arg,s),i=this.getNodeType(t.arg);(i==="TypeCast"||i==="SubLink"||i==="A_Expr"||i==="FuncCall"||i==="A_Indirection"||i==="ColumnRef"||i==="RowExpr")&&(e=`(${e})`);let r=[e],n=c.unwrapList(t.indirection);for(let a of n)if(a.String||a.A_Star){let u=a.A_Star?"*":h.quoteIdentifier(a.String.sval||a.String.str);r.push(`.${u}`);}else r.push(this.visit(a,s));return r.join("")}A_Star(t,s){return "*"}CaseExpr(t,s){let e=["CASE"];t.arg&&e.push(this.visit(t.arg,s));let i=c.unwrapList(t.args);if(s.isPretty()&&i.length>0){for(let r of i){let n=this.visit(r,s);this.containsMultilineStringLiteral(n)?e.push(s.newline()+n):e.push(s.newline()+s.indent(n));}if(t.defresult){let r=this.visit(t.defresult,s);this.containsMultilineStringLiteral(r)?e.push(s.newline()+"ELSE "+r):e.push(s.newline()+s.indent("ELSE "+r));}return e.push(s.newline()+"END"),e.join(" ")}else {for(let r of i)e.push(this.visit(r,s));return t.defresult&&(e.push("ELSE"),e.push(this.visit(t.defresult,s))),e.push("END"),e.join(" ")}}CoalesceExpr(t,s){return `COALESCE(${c.unwrapList(t.args).map(r=>this.visit(r,s)).join(", ")})`}TypeCast(t,s){let e=this.visit(t.arg,s),i=this.TypeName(t.typeName,s);if(i==="bpchar"||i==="pg_catalog.bpchar"){let r=t.typeName?.names;if(r&&r.length===2&&r[0]?.String?.sval==="pg_catalog"&&r[1]?.String?.sval==="bpchar")return `CAST(${e} AS ${i})`}if(this.isPgCatalogType(i)){let r=this.getNodeType(t.arg),n=r==="A_Const"||r==="ColumnRef",a=r==="FuncCall";if((n||a)&&!(n&&(e.includes("(")||e.startsWith("-")))){let o=i.replace("pg_catalog.","");return a?`${s.parens(e)}::${o}`:`${e}::${o}`}}return `CAST(${e} AS ${i})`}CollateClause(t,s){let e=[];if(t.arg){let i=this.visit(t.arg,s),r=this.getNodeType(t.arg);(r==="A_Expr"||r==="FuncCall"||r==="SubLink")&&(i=`(${i})`),e.push(i);}if(e.push("COLLATE"),t.collname){let i=c.unwrapList(t.collname);e.push(i.map(r=>this.visit(r,s)).join("."));}return e.join(" ")}BooleanTest(t,s){let e=[],i=s.spawn("BooleanTest",{bool:true});switch(e.push(this.visit(t.arg,i)),t.booltesttype){case "IS_TRUE":e.push("IS TRUE");break;case "IS_NOT_TRUE":e.push("IS NOT TRUE");break;case "IS_FALSE":e.push("IS FALSE");break;case "IS_NOT_FALSE":e.push("IS NOT FALSE");break;case "IS_UNKNOWN":e.push("IS UNKNOWN");break;case "IS_NOT_UNKNOWN":e.push("IS NOT UNKNOWN");break}return e.join(" ")}NullTest(t,s){let e=[];switch(e.push(this.visit(t.arg,s)),t.nulltesttype){case "IS_NULL":e.push("IS NULL");break;case "IS_NOT_NULL":e.push("IS NOT NULL");break}return e.join(" ")}quoteIfNeeded(t){return h.quoteIdentifier(t)}preserveOperatorDefElemCase(t){return {leftarg:"Leftarg",rightarg:"Rightarg",procedure:"Procedure",function:"Function",commutator:"Commutator",negator:"Negator",restrict:"Restrict",join:"Join",hashes:"Hashes",merges:"Merges"}[t.toLowerCase()]||t}String(t,s){if(s.isStringLiteral||s.isEnumValue)return h.formatEString(t.sval||"");let e=t.sval||"";return s.parentNodeTypes.includes("DefElem")||s.parentNodeTypes.includes("CreateOpClassItem")||s.parentNodeTypes.includes("ObjectWithArgs")&&/^[+\-*/<>=~!@#%^&|`?]+$/.test(e)?e:h.quoteIdentifier(e)}Integer(t,s){return t.ival?.toString()||"0"}Float(t,s){return t.fval||"0.0"}Boolean(t,s){return t.boolval?"true":"false"}BitString(t,s){return t.bsval.startsWith("x")?`x'${t.bsval.substring(1)}'`:t.bsval.startsWith("b")?`b'${t.bsval.substring(1)}'`:`b'${t.bsval}'`}Null(t,s){return "NULL"}List(t,s){return !t.items||t.items.length===0?"":t.items.map(e=>this.visit(e,s)).join(", ")}CreateStmt(t,s){let e=["CREATE"];if(t.relation&&t.relation.relpersistence==="t"?e.push("TEMPORARY"):t.relation&&t.relation.relpersistence==="u"&&e.push("UNLOGGED"),t.if_not_exists?e.push("TABLE IF NOT EXISTS"):e.push("TABLE"),e.push(this.RangeVar(t.relation,s)),t.ofTypename){if(e.push("OF"),e.push(this.TypeName(t.ofTypename,s)),t.tableElts){let r=c.unwrapList(t.tableElts).map(n=>this.deparse(n,s));e.push(s.parens(r.join(", ")));}}else if(t.tableElts){let r=c.unwrapList(t.tableElts).map(n=>this.deparse(n,s.spawn("CreateStmt")));if(s.isPretty()){let n=r.map(a=>{let u=a.trim();return u.startsWith(`
23
- `)?s.indent(u.substring(1)):s.indent(u)}).join(","+s.newline());e.push("("+s.newline()+n+s.newline()+")");}else e.push(s.parens(r.join(", ")));}else t.partbound||e.push(s.parens(""));if(t.partbound&&t.inhRelations&&t.inhRelations.length>0){e.push("PARTITION OF");let r=c.unwrapList(t.inhRelations).map(n=>this.visit(n,s));if(e.push(r[0]),t.partbound.strategy==="l"&&t.partbound.listdatums){e.push("FOR VALUES IN");let n=c.unwrapList(t.partbound.listdatums).map(a=>this.visit(a,s)).join(", ");e.push(`(${n})`);}else if(t.partbound.strategy==="r"&&(t.partbound.lowerdatums||t.partbound.upperdatums)){if(e.push("FOR VALUES FROM"),t.partbound.lowerdatums){let n=c.unwrapList(t.partbound.lowerdatums).map(a=>this.visit(a,s)).join(", ");e.push(`(${n})`);}if(t.partbound.upperdatums){e.push("TO");let n=c.unwrapList(t.partbound.upperdatums).map(a=>this.visit(a,s)).join(", ");e.push(`(${n})`);}}else if(t.partbound.strategy==="h"&&t.partbound.modulus!==void 0){e.push("FOR VALUES WITH");let n=t.partbound.remainder!==void 0?t.partbound.remainder:0;e.push(`(MODULUS ${t.partbound.modulus}, REMAINDER ${n})`);}else t.partbound.is_default&&e.push("DEFAULT");}else if(t.inhRelations){e.push("INHERITS");let r=c.unwrapList(t.inhRelations).map(n=>this.visit(n,s));e.push(s.parens(r.join(", ")));}if(t.partspec){switch(e.push("PARTITION BY"),t.partspec.strategy){case "PARTITION_STRATEGY_HASH":e.push("HASH");break;case "PARTITION_STRATEGY_LIST":e.push("LIST");break;case "PARTITION_STRATEGY_RANGE":e.push("RANGE");break}if(t.partspec.partParams&&t.partspec.partParams.length>0){let i=c.unwrapList(t.partspec.partParams).map(r=>this.visit(r,s)).join(", ");e.push(`(${i})`);}}if(t.oncommit&&t.oncommit!=="ONCOMMIT_NOOP")switch(e.push("ON COMMIT"),t.oncommit){case "ONCOMMIT_PRESERVE_ROWS":e.push("PRESERVE ROWS");break;case "ONCOMMIT_DELETE_ROWS":e.push("DELETE ROWS");break;case "ONCOMMIT_DROP":e.push("DROP");break}if(t.options&&t.options.length>0){let i=s.spawn("CreateStmt"),r=t.options.map(n=>this.deparse(n,i));e.push("WITH",`(${r.join(", ")})`);}return t.accessMethod&&(e.push("USING"),e.push(this.quoteIfNeeded(t.accessMethod))),e.join(" ")}ColumnDef(t,s){let e=[];if(t.colname&&e.push(h.quoteIdentifier(t.colname)),t.typeName&&e.push(this.TypeName(t.typeName,s)),t.fdwoptions&&t.fdwoptions.length>0){e.push("OPTIONS");let i=s.spawn("ColumnDef"),r=c.unwrapList(t.fdwoptions).map(n=>this.visit(n,i));e.push(`(${r.join(", ")})`);}if(t.collClause&&e.push(this.CollateClause(t.collClause,s)),t.constraints){let r=c.unwrapList(t.constraints).map(n=>{let a=s.spawn("ColumnDef",{isColumnConstraint:true});return this.visit(n,a)});e.push(...r);}return t.raw_default&&(e.push("DEFAULT"),e.push(this.visit(t.raw_default,s))),t.generated&&(e.push("GENERATED ALWAYS AS"),e.push(`(${t.generated})`),e.push("STORED")),t.is_not_null&&e.push("NOT NULL"),e.join(" ")}Constraint(t,s){let e=[];switch(t.conname&&(t.contype==="CONSTR_CHECK"||t.contype==="CONSTR_UNIQUE"||t.contype==="CONSTR_PRIMARY"||t.contype==="CONSTR_FOREIGN")&&(e.push("CONSTRAINT"),e.push(h.quoteIdentifier(t.conname))),t.contype){case "CONSTR_NULL":e.push("NULL");break;case "CONSTR_NOTNULL":e.push("NOT NULL");break;case "CONSTR_DEFAULT":e.push("DEFAULT"),t.raw_expr&&e.push(this.visit(t.raw_expr,s));break;case "CONSTR_CHECK":if(s.isPretty()&&!s.isColumnConstraint?e.push(`
24
- `+s.indent("CHECK")):e.push("CHECK"),t.raw_expr)if(s.isPretty()){let i=this.visit(t.raw_expr,s);i.includes(`
25
- `)?e.push(`(
26
- `+s.indent(i)+`
27
- )`):e.push(`(${i})`);}else e.push(s.parens(this.visit(t.raw_expr,s)));t.skip_validation&&e.push("NOT VALID"),t.is_no_inherit&&!s.isDomainConstraint&&e.push("NO INHERIT");break;case "CONSTR_GENERATED":e.push("GENERATED"),t.generated_when==="a"?e.push("ALWAYS"):t.generated_when==="s"&&e.push("BY DEFAULT"),e.push("AS"),t.raw_expr&&e.push(s.parens(this.visit(t.raw_expr,s))),e.push("STORED");break;case "CONSTR_IDENTITY":if(e.push("GENERATED"),t.generated_when==="a"?e.push("ALWAYS"):(t.generated_when==="d"||t.generated_when==="s")&&e.push("BY DEFAULT"),e.push("AS IDENTITY"),t.options&&t.options.length>0){let i=c.unwrapList(t.options).map(r=>{if(r.DefElem){let n=r.DefElem;if(n.defname==="sequence_name")return n.arg&&n.arg.List?`SEQUENCE NAME ${c.unwrapList(n.arg).map(o=>this.visit(o,s)).join(".")}`:"SEQUENCE NAME";if(n.defname==="start")return `START WITH ${n.arg?this.visit(n.arg,s):""}`;if(n.defname==="increment")return `INCREMENT BY ${n.arg?this.visit(n.arg,s):""}`;if(n.defname==="minvalue")return n.arg?`MINVALUE ${this.visit(n.arg,s)}`:"NO MINVALUE";if(n.defname==="maxvalue")return n.arg?`MAXVALUE ${this.visit(n.arg,s)}`:"NO MAXVALUE";if(n.defname==="cache")return `CACHE ${n.arg?this.visit(n.arg,s):""}`;if(n.defname==="cycle")return (n.arg?this.visit(n.arg,s):"")==="true"?"CYCLE":"NO CYCLE";let a=n.arg?this.visit(n.arg,s):"";return `${n.defname.toUpperCase()} ${a}`}return this.visit(r,s)});if(s.isPretty()){let r=i.map(n=>s.indent(n));e.push(`(
28
- `+r.join(`
29
- `)+`
30
- )`);}else e.push(`(${i.join(" ")})`);}break;case "CONSTR_PRIMARY":if(e.push("PRIMARY KEY"),t.keys&&t.keys.length>0){let i=c.unwrapList(t.keys).map(r=>this.visit(r,s)).join(", ");e.push(`(${i})`);}t.indexname&&(e.push("USING INDEX"),e.push(t.indexname));break;case "CONSTR_UNIQUE":if(s.isPretty()&&!s.isColumnConstraint?e.push(`
31
- `+s.indent("UNIQUE")):e.push("UNIQUE"),t.nulls_not_distinct&&e.push("NULLS NOT DISTINCT"),t.keys&&t.keys.length>0){let i=c.unwrapList(t.keys).map(r=>this.visit(r,s)).join(", ");e.push(`(${i})`);}t.indexname&&(e.push("USING INDEX"),e.push(t.indexname));break;case "CONSTR_FOREIGN":if(s.isColumnConstraint)e.push("REFERENCES");else if(s.isPretty()){if(e.push(`
32
- `+s.indent("FOREIGN KEY")),t.fk_attrs&&t.fk_attrs.length>0){let i=c.unwrapList(t.fk_attrs).map(r=>this.visit(r,s)).join(", ");e.push(`(${i})`);}e.push(`
33
- `+s.indent("REFERENCES"));}else {if(e.push("FOREIGN KEY"),t.fk_attrs&&t.fk_attrs.length>0){let i=c.unwrapList(t.fk_attrs).map(r=>this.visit(r,s)).join(", ");e.push(`(${i})`);}e.push("REFERENCES");}if(t.pktable)if(s.isPretty()&&!s.isColumnConstraint){let i=e.length-1;i>=0&&e[i].includes("REFERENCES")?e[i]+=" "+this.RangeVar(t.pktable,s):e.push(this.RangeVar(t.pktable,s));}else e.push(this.RangeVar(t.pktable,s));if(t.pk_attrs&&t.pk_attrs.length>0){let i=c.unwrapList(t.pk_attrs).map(r=>this.visit(r,s)).join(", ");if(s.isPretty()&&!s.isColumnConstraint){let r=e.length-1;r>=0?e[r]+=` (${i})`:e.push(`(${i})`);}else e.push(`(${i})`);}if(t.fk_matchtype&&t.fk_matchtype!=="s"){let i="";switch(t.fk_matchtype){case "f":i="MATCH FULL";break;case "p":i="MATCH PARTIAL";break}s.isPretty()&&!s.isColumnConstraint?e.push(`
34
- `+s.indent(i)):e.push(i);}if(t.fk_upd_action&&t.fk_upd_action!=="a"){let i="ON UPDATE ";switch(t.fk_upd_action){case "r":i+="RESTRICT";break;case "c":i+="CASCADE";break;case "n":i+="SET NULL";break;case "d":i+="SET DEFAULT";break}s.isPretty()?e.push(`
35
- `+s.indent(i)):(e.push("ON UPDATE"),e.push(i.replace("ON UPDATE ","")));}if(t.fk_del_action&&t.fk_del_action!=="a"){let i="ON DELETE ";switch(t.fk_del_action){case "r":i+="RESTRICT";break;case "c":i+="CASCADE";break;case "n":i+="SET NULL";break;case "d":i+="SET DEFAULT";break}s.isPretty()?e.push(`
36
- `+s.indent(i)):(e.push("ON DELETE"),e.push(i.replace("ON DELETE ","")));}t.skip_validation&&!s.isDomainConstraint&&(s.isPretty()&&!s.isColumnConstraint?e.push(`
37
- `+s.indent("NOT VALID")):e.push("NOT VALID"));break;case "CONSTR_ATTR_DEFERRABLE":e.push("DEFERRABLE");break;case "CONSTR_ATTR_NOT_DEFERRABLE":e.push("NOT DEFERRABLE");break;case "CONSTR_ATTR_DEFERRED":e.push("INITIALLY DEFERRED");break;case "CONSTR_ATTR_IMMEDIATE":e.push("INITIALLY IMMEDIATE");break;case "CONSTR_EXCLUSION":if(e.push("EXCLUDE"),t.access_method&&(e.push("USING"),e.push(t.access_method)),t.exclusions&&t.exclusions.length>0){let i=c.unwrapList(t.exclusions).map(r=>{if(this.getNodeType(r)==="List"){let n=c.unwrapList(r);if(n.length>=2){let a=this.visit(n[0],s),u=n[1],o="";if(this.getNodeType(u)==="List"){let p=c.unwrapList(u);p.length>0&&p[0].String&&(o=p[0].String.sval);}else u.String?o=u.String.sval:o=this.visit(u,s);return `${a} WITH ${o}`}}return this.visit(r,s)});e.push(`(${i.join(", ")})`);}t.where_clause&&(e.push("WHERE"),e.push(s.parens(this.visit(t.where_clause,s))));break}if((t.contype==="CONSTR_PRIMARY"||t.contype==="CONSTR_UNIQUE"||t.contype==="CONSTR_FOREIGN")&&(t.deferrable?s.isPretty()&&t.contype==="CONSTR_FOREIGN"?(e.push(`
38
- `+s.indent("DEFERRABLE")),t.initdeferred===true?e.push(`
39
- `+s.indent("INITIALLY DEFERRED")):t.initdeferred===false&&e.push(`
40
- `+s.indent("INITIALLY IMMEDIATE"))):(e.push("DEFERRABLE"),t.initdeferred===true?e.push("INITIALLY DEFERRED"):t.initdeferred===false&&e.push("INITIALLY IMMEDIATE")):t.deferrable===false&&(s.isPretty()&&t.contype==="CONSTR_FOREIGN"?e.push(`
41
- `+s.indent("NOT DEFERRABLE")):e.push("NOT DEFERRABLE"))),s.isPretty()&&t.contype==="CONSTR_FOREIGN"){let i="";for(let r=0;r<e.length;r++)e[r].startsWith(`
42
- `)||r>0&&!e[r-1].startsWith(`
43
- `)&&(i+=" "),i+=e[r];return i}return e.join(" ")}SubLink(t,s){let e=s.parens(this.visit(t.subselect,s));switch(t.subLinkType){case "ANY_SUBLINK":if(t.testexpr&&t.operName){let i=this.visit(t.testexpr,s),r=this.deparseOperatorName(t.operName,s);return `${i} ${r} ANY ${e}`}else if(t.testexpr)return `${this.visit(t.testexpr,s)} IN ${e}`;return e;case "ALL_SUBLINK":if(t.testexpr&&t.operName){let i=this.visit(t.testexpr,s),r=this.deparseOperatorName(t.operName,s);return `${i} ${r} ALL ${e}`}return e;case "EXISTS_SUBLINK":return `EXISTS ${e}`;case "ARRAY_SUBLINK":return `ARRAY${e}`;default:return e}}CaseWhen(t,s){let e=["WHEN"];return t.expr&&e.push(this.visit(t.expr,s)),e.push("THEN"),t.result&&e.push(this.visit(t.result,s)),e.join(" ")}WindowDef(t,s){let e=[];t.name&&e.push(t.name);let i=[];if(t.partitionClause){let n=c.unwrapList(t.partitionClause).map(a=>this.visit(a,s));i.push(`PARTITION BY ${n.join(", ")}`);}if(t.orderClause){let n=c.unwrapList(t.orderClause).map(a=>this.visit(a,s));i.push(`ORDER BY ${n.join(", ")}`);}if(t.frameOptions&&t.frameOptions!==1058){let r=this.formatWindowFrame(t,s.spawn("WindowDef"));r&&i.push(r);}return i.length>0?(t.name&&e.push("AS"),e.push(`(${i.join(" ")})`)):t.name?(e.push("AS"),e.push("()")):e.length===0&&e.push("()"),e.join(" ")}formatWindowFrame(t,s){if(!t.frameOptions)return null;let e=t.frameOptions,r=e&-229377,n=[];if(e&1&&(e&2?n.push("RANGE"):e&4?n.push("ROWS"):e&8&&n.push("GROUPS")),n.length===0)return null;let a=[];if(r===789)a.push("CURRENT ROW"),a.push("AND UNBOUNDED FOLLOWING");else if(r===1077)a.push("UNBOUNDED PRECEDING"),a.push("AND CURRENT ROW");else if(r===18453)t.startOffset&&t.endOffset&&(a.push(`${this.visit(t.startOffset,s)} PRECEDING`),a.push(`AND ${this.visit(t.endOffset,s)} FOLLOWING`));else if(r===1557)a.push("CURRENT ROW"),a.push("AND CURRENT ROW");else if(r===16917)a.push("CURRENT ROW"),t.endOffset&&a.push(`AND ${this.visit(t.endOffset,s)} FOLLOWING`);else {if(r===1058)return null;t.startOffset?e&1024?a.push(`${this.visit(t.startOffset,s)} PRECEDING`):e&2048?a.push(`${this.visit(t.startOffset,s)} FOLLOWING`):a.push(`${this.visit(t.startOffset,s)} PRECEDING`):e&16?a.push("UNBOUNDED PRECEDING"):e&32&&a.push("CURRENT ROW"),t.endOffset?a.length>0&&(e&4096?a.push(`AND ${this.visit(t.endOffset,s)} PRECEDING`):e&8192?a.push(`AND ${this.visit(t.endOffset,s)} FOLLOWING`):a.push(`AND ${this.visit(t.endOffset,s)} FOLLOWING`)):e&128?a.length>0&&a.push("AND UNBOUNDED FOLLOWING"):(a.length>0&&a.push("AND CURRENT ROW"));}return a.length>0&&(n.push("BETWEEN"),n.push(a.join(" "))),e&32768?n.push("EXCLUDE CURRENT ROW"):e&65536?n.push("EXCLUDE GROUP"):e&131072&&n.push("EXCLUDE TIES"),n.join(" ")}SortBy(t,s){let e=[];if(t.node&&e.push(this.visit(t.node,s)),t.sortby_dir==="SORTBY_USING"&&t.useOp){e.push("USING");let i=c.unwrapList(t.useOp);e.push(i.map(r=>r.String&&r.String.sval?r.String.sval:this.visit(r,s)).join("."));}else t.sortby_dir==="SORTBY_ASC"?e.push("ASC"):t.sortby_dir==="SORTBY_DESC"&&e.push("DESC");return t.sortby_nulls==="SORTBY_NULLS_FIRST"?e.push("NULLS FIRST"):t.sortby_nulls==="SORTBY_NULLS_LAST"&&e.push("NULLS LAST"),e.join(" ")}GroupingSet(t,s){switch(t.kind){case "GROUPING_SET_EMPTY":return "()";case "GROUPING_SET_SIMPLE":return "";case "GROUPING_SET_ROLLUP":return `ROLLUP (${c.unwrapList(t.content).map(o=>this.visit(o,s)).join(", ")})`;case "GROUPING_SET_CUBE":return `CUBE (${c.unwrapList(t.content).map(o=>this.visit(o,s)).join(", ")})`;case "GROUPING_SET_SETS":return `GROUPING SETS (${c.unwrapList(t.content).map(o=>this.visit(o,s)).join(", ")})`;default:return ""}}CommonTableExpr(t,s){let e=[];if(t.ctename&&e.push(t.ctename),t.aliascolnames){let r=c.unwrapList(t.aliascolnames).map(n=>this.visit(n,s));e[e.length-1]+=s.parens(r.join(", "));}return e.push("AS"),t.ctematerialized==="CTEMaterializeNever"?e.push("NOT MATERIALIZED"):t.ctematerialized==="CTEMaterializeAlways"&&e.push("MATERIALIZED"),t.ctequery&&e.push(s.parens(this.visit(t.ctequery,s))),e.join(" ")}ParamRef(t,s){return `$${t.number}`}LockingClause(t,s){let e=[];switch(t.strength){case "LCS_FORUPDATE":e.push("FOR UPDATE");break;case "LCS_FORSHARE":e.push("FOR SHARE");break;case "LCS_FORKEYSHARE":e.push("FOR KEY SHARE");break;case "LCS_FORNOKEYUPDATE":e.push("FOR NO KEY UPDATE");break;default:throw new Error(`Unsupported locking strength: ${t.strength}`)}if(t.lockedRels&&t.lockedRels.length>0){e.push("OF");let i=c.unwrapList(t.lockedRels).map(r=>this.visit(r,s)).join(", ");e.push(i);}return t.waitPolicy==="LockWaitSkip"?e.push("SKIP LOCKED"):t.waitPolicy==="LockWaitError"&&e.push("NOWAIT"),e.join(" ")}MinMaxExpr(t,s){let i=c.unwrapList(t.args).map(r=>this.visit(r,s));return t.op==="IS_GREATEST"?`GREATEST(${i.join(", ")})`:`LEAST(${i.join(", ")})`}RowExpr(t,s){let i=c.unwrapList(t.args).map(r=>this.visit(r,s));return t.row_format==="COERCE_IMPLICIT_CAST"?`(${i.join(", ")})`:`ROW(${i.join(", ")})`}OpExpr(t,s){let e=c.unwrapList(t.args);if(e.length===2){let i=this.visit(e[0],s),r=this.visit(e[1],s),n=this.getOperatorName(t.opno);return `${i} ${n} ${r}`}else if(e.length===1){let i=this.visit(e[0],s);return `${this.getOperatorName(t.opno)} ${i}`}throw new Error(`Unsupported OpExpr with ${e.length} arguments`)}DistinctExpr(t,s){let e=c.unwrapList(t.args);if(e.length===2){let i=s.spawn("DistinctExpr",{isStringLiteral:true}),r=this.visit(e[0],i),n=this.visit(e[1],i);return `${r} IS DISTINCT FROM ${n}`}throw new Error(`DistinctExpr requires exactly 2 arguments, got ${e.length}`)}NullIfExpr(t,s){let e=c.unwrapList(t.args);if(e.length===2){let i=s.spawn("NullIfExpr",{isStringLiteral:true}),r=this.visit(e[0],i),n=this.visit(e[1],i);return `NULLIF(${r}, ${n})`}throw new Error(`NullIfExpr requires exactly 2 arguments, got ${e.length}`)}ScalarArrayOpExpr(t,s){let e=c.unwrapList(t.args);if(e.length===2){let i=this.visit(e[0],s),r=this.visit(e[1],s),n=t.useOr?"ANY":"ALL",a=this.getOperatorName(t.opno);return `${i} ${a} ${n}(${r})`}throw new Error(`ScalarArrayOpExpr requires exactly 2 arguments, got ${e.length}`)}Aggref(t,s){let e=this.getAggFunctionName(t.aggfnoid),i=e+"(",r=t.aggdistinct&&t.aggdistinct.length>0;if(t.args&&t.args.length>0){let a=c.unwrapList(t.args).map(u=>this.visit(u,s));r?i+="DISTINCT "+a.join(", "):i+=a.join(", ");}else e.toUpperCase()==="COUNT"&&(r?i+="DISTINCT *":i+="*");if(i+=")",t.aggorder&&t.aggorder.length>0){i+=" ORDER BY ";let a=c.unwrapList(t.aggorder).map(u=>this.visit(u,s));i+=a.join(", ");}return i}WindowFunc(t,s){let i=this.getWindowFunctionName(t.winfnoid)+"(";if(t.args&&t.args.length>0){let n=c.unwrapList(t.args).map(a=>this.visit(a,s));i+=n.join(", ");}return i+=") OVER (",t.winref&&typeof t.winref=="object"?i+=this.visit(t.winref,s):t.winref&&(i+="ORDER BY created_at ASC"),i+=")",i}FieldSelect(t,s){let e=[];return t.arg&&e.push(this.visit(t.arg,s)),t.fieldnum!==void 0&&e.push(`.field_${t.fieldnum}`),e.join("")}RelabelType(t,s){if(t.arg){let e=s.spawn("RelabelType",{isStringLiteral:true});return this.visit(t.arg,e)}return ""}CoerceViaIO(t,s){return t.arg?this.visit(t.arg,s):""}ArrayCoerceExpr(t,s){return t.arg?this.visit(t.arg,s):""}ConvertRowtypeExpr(t,s){if(t.arg){let e=s.spawn("ConvertRowtypeExpr",{isStringLiteral:true});return this.visit(t.arg,e)}return ""}NamedArgExpr(t,s){let e=[];return t.name&&(e.push(t.name),e.push("=>")),t.arg&&e.push(this.visit(t.arg,s)),e.join(" ")}ViewStmt(t,s){let e=[];if(e.push("CREATE"),t.replace&&e.push("OR REPLACE"),t.view&&t.view.relpersistence==="t"&&e.push("TEMPORARY"),e.push("VIEW"),t.view&&e.push(this.RangeVar(t.view,s)),t.aliases&&t.aliases.length>0){let i=c.unwrapList(t.aliases).map(r=>this.visit(r,s));e.push(s.parens(i.join(", ")));}if(t.options&&t.options.length>0){let i=s.spawn("ViewStmt"),r=c.unwrapList(t.options).map(n=>this.visit(n,i));e.push(`WITH (${r.join(", ")})`);}if(e.push("AS"),t.query&&e.push(this.visit(t.query,s)),t.withCheckOption)switch(t.withCheckOption){case "CASCADED_CHECK_OPTION":e.push("WITH CASCADED CHECK OPTION");break;case "LOCAL_CHECK_OPTION":e.push("WITH LOCAL CHECK OPTION");break}return e.join(" ")}IndexStmt(t,s){let e=[];if(e.push("CREATE"),t.unique&&e.push("UNIQUE"),e.push("INDEX"),t.concurrent&&e.push("CONCURRENTLY"),t.if_not_exists&&e.push("IF NOT EXISTS"),t.idxname&&e.push(h.quoteIdentifier(t.idxname)),e.push("ON"),t.relation&&e.push(this.RangeVar(t.relation,s)),t.accessMethod&&t.accessMethod!=="btree"&&(e.push("USING"),e.push(t.accessMethod)),t.indexParams&&t.indexParams.length>0){let i=c.unwrapList(t.indexParams).map(r=>this.visit(r,s));e.push(s.parens(i.join(", ")));}if(t.indexIncludingParams&&t.indexIncludingParams.length>0){let i=c.unwrapList(t.indexIncludingParams).map(r=>this.visit(r,s));e.push("INCLUDE"),e.push(s.parens(i.join(", ")));}if(t.whereClause&&(e.push("WHERE"),e.push(this.visit(t.whereClause,s))),t.options&&t.options.length>0){let i=s.spawn("IndexStmt"),r=c.unwrapList(t.options).map(n=>this.visit(n,i));e.push("WITH"),e.push(s.parens(r.join(", ")));}return t.nulls_not_distinct&&e.push("NULLS NOT DISTINCT"),t.tableSpace&&(e.push("TABLESPACE"),e.push(h.quoteIdentifier(t.tableSpace))),e.join(" ")}IndexElem(t,s){let e=[];if(t.name?e.push(h.quoteIdentifier(t.name)):t.expr&&e.push(s.parens(this.visit(t.expr,s))),t.collation&&t.collation.length>0){let i=c.unwrapList(t.collation).map(r=>this.visit(r,s));e.push("COLLATE"),e.push(i.join("."));}if(t.opclass&&t.opclass.length>0){let r=c.unwrapList(t.opclass).map(n=>this.visit(n,s)).join(".");if(t.opclassopts&&t.opclassopts.length>0){let n=c.unwrapList(t.opclassopts).map(a=>{if(a.DefElem&&a.DefElem.arg&&this.getNodeType(a.DefElem.arg)==="String"){let u=this.getNodeData(a.DefElem.arg);return `${a.DefElem.defname}='${u.sval}'`}return this.visit(a,s.spawn("IndexElem"))});r+=`(${n.join(", ")})`;}e.push(r);}if(t.ordering)switch(t.ordering){case "SORTBY_ASC":e.push("ASC");break;case "SORTBY_DESC":e.push("DESC");break}if(t.nulls_ordering)switch(t.nulls_ordering){case "SORTBY_NULLS_FIRST":e.push("NULLS FIRST");break;case "SORTBY_NULLS_LAST":e.push("NULLS LAST");break}return e.join(" ")}PartitionElem(t,s){let e=[];if(t.name?e.push(h.quoteIdentifier(t.name)):t.expr&&e.push(s.parens(this.visit(t.expr,s))),t.collation&&t.collation.length>0){let i=c.unwrapList(t.collation).map(r=>this.visit(r,s));e.push("COLLATE"),e.push(i.join("."));}if(t.opclass&&t.opclass.length>0){let i=c.unwrapList(t.opclass).map(r=>this.visit(r,s));e.push(i.join("."));}return e.join(" ")}PartitionCmd(t,s){let e=[];if(t.concurrent&&e.push("CONCURRENTLY"),t.name&&e.push(this.visit(t.name,s)),t.bound)if(t.bound.strategy==="l"&&t.bound.listdatums){e.push("FOR VALUES IN");let i=c.unwrapList(t.bound.listdatums).map(r=>this.visit(r,s)).join(", ");e.push(`(${i})`);}else if(t.bound.strategy==="r"&&(t.bound.lowerdatums||t.bound.upperdatums)){if(e.push("FOR VALUES FROM"),t.bound.lowerdatums){let i=c.unwrapList(t.bound.lowerdatums).map(r=>this.visit(r,s)).join(", ");e.push(`(${i})`);}if(t.bound.upperdatums){e.push("TO");let i=c.unwrapList(t.bound.upperdatums).map(r=>this.visit(r,s)).join(", ");e.push(`(${i})`);}}else t.bound.strategy==="h"&&t.bound.modulus!==void 0&&t.bound.remainder!==void 0?(e.push("FOR VALUES WITH"),e.push(`(modulus ${t.bound.modulus}, remainder ${t.bound.remainder})`)):t.bound.is_default&&e.push("DEFAULT");return e.join(" ")}getAggFunctionName(t){return {2100:"avg",2101:"count",2102:"max",2103:"min",2104:"sum",2105:"stddev",2106:"variance",2107:"array_agg",2108:"string_agg"}[t||0]||"unknown_agg"}getWindowFunctionName(t){return {3100:"row_number",3101:"rank",3102:"dense_rank",3103:"percent_rank",3104:"cume_dist",3105:"ntile",3106:"lag",3107:"lead",3108:"first_value",3109:"last_value"}[t||0]||"unknown_window_func"}getOperatorName(t){return {96:"=",518:"<>",97:"<",521:">",523:"<=",525:">=",551:"+",552:"-",553:"*",554:"/",555:"%",484:"-",1752:"~~",1753:"!~~",1754:"~~*",1755:"!~~*",15:"=",58:"<",59:"<=",61:">",62:">="}[t||0]||"="}JoinExpr(t,s){let e=[];t.larg&&e.push(this.visit(t.larg,s));let i="";switch(t.isNatural&&(i="NATURAL "),t.jointype){case "JOIN_INNER":t.isNatural?i+="JOIN":!t.quals&&(!t.usingClause||t.usingClause.length===0)?i+="CROSS JOIN":i+="JOIN";break;case "JOIN_LEFT":i+="LEFT JOIN";break;case "JOIN_FULL":i+="FULL JOIN";break;case "JOIN_RIGHT":i+="RIGHT JOIN";break;default:i+="JOIN";}if(t.rarg){let n=this.visit(t.rarg,s);t.rarg&&"JoinExpr"in t.rarg&&!t.rarg.JoinExpr.alias&&(n=`(${n})`),s.isPretty()?e.push(s.newline()+i+" "+n):e.push(i+" "+n);}else s.isPretty()?e.push(s.newline()+i):e.push(i);if(t.usingClause&&t.usingClause.length>0){let a=c.unwrapList(t.usingClause).map(u=>this.visit(u,s));s.isPretty()?e.push(` USING (${a.join(", ")})`):e.push(`USING (${a.join(", ")})`);}else if(t.quals){let n=this.visit(t.quals,s);s.isPretty()?n.includes("AND")||n.includes("OR")||n.length>50?this.containsMultilineStringLiteral(n)?e.push(` ON ${n}`):e.push(` ON${s.newline()}${s.indent(n)}`):e.push(` ON ${n}`):e.push(`ON ${n}`);}let r;if(s.isPretty()?r=e.join(""):r=e.join(" "),t.join_using_alias&&t.join_using_alias.aliasname){let n=t.join_using_alias.aliasname;if(t.join_using_alias.colnames&&t.join_using_alias.colnames.length>0){let u=c.unwrapList(t.join_using_alias.colnames).map(o=>this.visit(o,s)).join(", ");n+=`(${u})`;}r+=` AS ${n}`;}if(t.alias&&t.alias.aliasname){let n=t.alias.aliasname;if(t.alias.colnames&&t.alias.colnames.length>0){let u=c.unwrapList(t.alias.colnames).map(o=>this.visit(o,s)).join(", ");n+=`(${u})`;}r=`(${r}) ${n}`;}return r}FromExpr(t,s){let r=c.unwrapList(t.fromlist).map(n=>this.visit(n,s)).join(", ");return t.quals&&(r+=` WHERE ${this.visit(t.quals,s)}`),r}TransactionStmt(t,s){let e=[];switch(t.kind){case "TRANS_STMT_BEGIN":e.push("BEGIN");break;case "TRANS_STMT_START":e.push("START TRANSACTION");break;case "TRANS_STMT_COMMIT":e.push("COMMIT");break;case "TRANS_STMT_ROLLBACK":e.push("ROLLBACK");break;case "TRANS_STMT_SAVEPOINT":e.push("SAVEPOINT"),t.savepoint_name&&e.push(h.quoteIdentifier(t.savepoint_name));break;case "TRANS_STMT_RELEASE":e.push("RELEASE SAVEPOINT"),t.savepoint_name&&e.push(h.quoteIdentifier(t.savepoint_name));break;case "TRANS_STMT_ROLLBACK_TO":e.push("ROLLBACK TO"),t.savepoint_name&&e.push(h.quoteIdentifier(t.savepoint_name));break;case "TRANS_STMT_PREPARE":e.push("PREPARE TRANSACTION"),t.gid&&e.push(`'${t.gid}'`);break;case "TRANS_STMT_COMMIT_PREPARED":e.push("COMMIT PREPARED"),t.gid&&e.push(`'${t.gid}'`);break;case "TRANS_STMT_ROLLBACK_PREPARED":e.push("ROLLBACK PREPARED"),t.gid&&e.push(`'${t.gid}'`);break;default:throw new Error(`Unsupported TransactionStmt kind: ${t.kind}`)}if(t.options&&t.options.length>0){let i=c.unwrapList(t.options).map(r=>{if(r.DefElem){let n=r.DefElem;if(n.defname==="transaction_read_only"){let a=false;if(n.arg){let u=this.getNodeData(n.arg);if(u.ival!==void 0)a=(typeof u.ival=="object"?u.ival.ival:u.ival)===1;else if(u.sval!==void 0){let p=(typeof u.sval=="object"?u.sval.sval:u.sval).replace(/'/g,"");a=p.toLowerCase()==="on"||p.toLowerCase()==="true";}}return a?"READ ONLY":"READ WRITE"}else if(n.defname==="transaction_isolation"){if(n.arg&&n.arg.A_Const&&n.arg.A_Const.sval)return `ISOLATION LEVEL ${n.arg.A_Const.sval.sval.toUpperCase()}`}else if(n.defname==="transaction_deferrable"){let a=false;if(n.arg){let u=this.getNodeData(n.arg);if(u.ival!==void 0)a=(typeof u.ival=="object"?u.ival.ival:u.ival)===1;else if(u.sval!==void 0){let p=(typeof u.sval=="object"?u.sval.sval:u.sval).replace(/'/g,"");a=p.toLowerCase()==="on"||p.toLowerCase()==="true";}}return a?"DEFERRABLE":"NOT DEFERRABLE"}}return this.visit(r,s)}).filter(Boolean);i.length>0&&e.push(i.join(", "));}return e.join(" ")}VariableSetStmt(t,s){switch(t.kind){case "VAR_SET_VALUE":let e=t.is_local?"LOCAL ":"",i=t.args?c.unwrapList(t.args).map(o=>{let p=this.getNodeData(o);if(p.sval!==void 0){let f=typeof p.sval=="object"?p.sval.sval:p.sval;return f===""||f.includes(" ")||f.includes("-")||/[A-Z]/.test(f)||/^\d/.test(f)||f.includes(".")||f.includes("$")||f.toLowerCase()==="all"||/^[+-]\d/.test(f)?`'${f}'`:f}return this.visit(o,s)}).join(", "):"",r=h.quoteIdentifier(t.name);return !t.args||t.args.length===0?`SET ${e}${r}`:`SET ${e}${r} TO ${i}`;case "VAR_SET_DEFAULT":return `SET ${h.quoteIdentifier(t.name)} TO DEFAULT`;case "VAR_SET_CURRENT":return `SET ${h.quoteIdentifier(t.name)} FROM CURRENT`;case "VAR_SET_MULTI":if(t.name==="TRANSACTION"||t.name==="SESSION CHARACTERISTICS"){let o=[];if(t.args){let p=c.unwrapList(t.args);for(let f of p)if(f.DefElem){let m=f.DefElem;if(m.defname==="transaction_isolation"){let T=m.arg?this.visit(m.arg,s):"";o.push(`ISOLATION LEVEL ${T.replace(/'/g,"").toUpperCase()}`);}else if(m.defname==="transaction_read_only"){let T=false;if(m.arg){let E=this.getNodeData(m.arg);if(E.ival!==void 0)T=(typeof E.ival=="object"?E.ival.ival:E.ival)===1;else if(E.sval!==void 0){let A=(typeof E.sval=="object"?E.sval.sval:E.sval).replace(/'/g,"");T=A.toLowerCase()==="on"||A.toLowerCase()==="true";}}o.push(T?"READ ONLY":"READ WRITE");}else if(m.defname==="transaction_deferrable"){let T=false;if(m.arg){let E=this.getNodeData(m.arg);if(E.ival!==void 0)T=(typeof E.ival=="object"?E.ival.ival:E.ival)===1;else if(E.sval!==void 0){let A=(typeof E.sval=="object"?E.sval.sval:E.sval).replace(/'/g,"");T=A.toLowerCase()==="on"||A.toLowerCase()==="true";}}o.push(T?"DEFERRABLE":"NOT DEFERRABLE");}}}return t.name==="SESSION CHARACTERISTICS"?`SET SESSION CHARACTERISTICS AS TRANSACTION ${o.join(", ")}`:`SET TRANSACTION ${o.join(", ")}`}else return `SET ${t.args?c.unwrapList(t.args).map(p=>p.VariableSetStmt?this.VariableSetStmt(p.VariableSetStmt,s):this.visit(p,s)).join(", "):""}`;case "VAR_RESET":return `RESET ${h.quoteIdentifier(t.name)}`;case "VAR_RESET_ALL":return "RESET ALL";default:throw new Error(`Unsupported VariableSetStmt kind: ${t.kind}`)}}VariableShowStmt(t,s){return t.name==="ALL"?"SHOW ALL":`SHOW ${t.name}`}CreateSchemaStmt(t,s){let e=["CREATE SCHEMA"];if(t.if_not_exists&&e.push("IF NOT EXISTS"),t.schemaname&&e.push(h.quoteIdentifier(t.schemaname)),t.authrole&&(e.push("AUTHORIZATION"),e.push(this.RoleSpec(t.authrole,s))),t.schemaElts&&t.schemaElts.length>0){let i=c.unwrapList(t.schemaElts).map(r=>this.visit(r,s)).join(" ");e.push(i);}return e.join(" ")}RoleSpec(t,s){if(t.rolename)return this.quoteIfNeeded(t.rolename);switch(t.roletype){case "ROLESPEC_PUBLIC":return "PUBLIC";case "ROLESPEC_CURRENT_USER":return "CURRENT_USER";case "ROLESPEC_SESSION_USER":return "SESSION_USER";case "ROLESPEC_CURRENT_ROLE":return "CURRENT_ROLE";default:return "PUBLIC"}}roletype(t,s){return t.rolename?t.rolename:""}DropStmt(t,s){let e=["DROP"];if(t.removeType)switch(t.removeType){case "OBJECT_TABLE":e.push("TABLE");break;case "OBJECT_VIEW":e.push("VIEW");break;case "OBJECT_INDEX":e.push("INDEX");break;case "OBJECT_SEQUENCE":e.push("SEQUENCE");break;case "OBJECT_SCHEMA":e.push("SCHEMA");break;case "OBJECT_FUNCTION":e.push("FUNCTION");break;case "OBJECT_PROCEDURE":e.push("PROCEDURE");break;case "OBJECT_DATABASE":e.push("DATABASE");break;case "OBJECT_EXTENSION":e.push("EXTENSION");break;case "OBJECT_TYPE":e.push("TYPE");break;case "OBJECT_DOMAIN":e.push("DOMAIN");break;case "OBJECT_TRIGGER":e.push("TRIGGER");break;case "OBJECT_RULE":e.push("RULE");break;case "OBJECT_POLICY":e.push("POLICY");break;case "OBJECT_ROLE":e.push("ROLE");break;case "OBJECT_TABLESPACE":e.push("TABLESPACE");break;case "OBJECT_FOREIGN_SERVER":e.push("SERVER");break;case "OBJECT_FDW":e.push("FOREIGN DATA WRAPPER");break;case "OBJECT_PUBLICATION":e.push("PUBLICATION");break;case "OBJECT_SUBSCRIPTION":e.push("SUBSCRIPTION");break;case "OBJECT_CAST":e.push("CAST");break;case "OBJECT_TRANSFORM":e.push("TRANSFORM");break;case "OBJECT_ACCESS_METHOD":e.push("ACCESS METHOD");break;case "OBJECT_OPERATOR":e.push("OPERATOR");break;case "OBJECT_FOREIGN_TABLE":e.push("FOREIGN TABLE");break;case "OBJECT_MATVIEW":e.push("MATERIALIZED VIEW");break;case "OBJECT_OPCLASS":e.push("OPERATOR CLASS");break;case "OBJECT_OPFAMILY":e.push("OPERATOR FAMILY");break;case "OBJECT_COLLATION":e.push("COLLATION");break;case "OBJECT_CONVERSION":e.push("CONVERSION");break;case "OBJECT_LANGUAGE":e.push("LANGUAGE");break;case "OBJECT_LARGEOBJECT":e.push("LARGE OBJECT");break;case "OBJECT_AGGREGATE":e.push("AGGREGATE");break;case "OBJECT_STATISTIC_EXT":e.push("STATISTICS");break;case "OBJECT_EVENT_TRIGGER":e.push("EVENT TRIGGER");break;case "OBJECT_AMOP":e.push("OPERATOR CLASS");break;case "OBJECT_AMPROC":e.push("OPERATOR CLASS");break;case "OBJECT_ATTRIBUTE":e.push("ATTRIBUTE");break;case "OBJECT_DEFAULT":e.push("DEFAULT");break;case "OBJECT_DEFACL":e.push("DEFAULT PRIVILEGES");break;case "OBJECT_PARAMETER_ACL":e.push("PARAMETER");break;case "OBJECT_PUBLICATION_NAMESPACE":e.push("PUBLICATION");break;case "OBJECT_PUBLICATION_REL":e.push("PUBLICATION");break;case "OBJECT_ROUTINE":e.push("ROUTINE");break;case "OBJECT_TABCONSTRAINT":e.push("CONSTRAINT");break;case "OBJECT_TSCONFIGURATION":e.push("TEXT SEARCH CONFIGURATION");break;case "OBJECT_TSDICTIONARY":e.push("TEXT SEARCH DICTIONARY");break;case "OBJECT_TSPARSER":e.push("TEXT SEARCH PARSER");break;case "OBJECT_TSTEMPLATE":e.push("TEXT SEARCH TEMPLATE");break;case "OBJECT_USER_MAPPING":e.push("USER MAPPING");break;default:throw new Error(`Unsupported DROP object type: ${t.removeType}`)}if(t.concurrent&&e.push("CONCURRENTLY"),t.missing_ok&&e.push("IF EXISTS"),t.objects&&t.objects.length>0)if(t.removeType==="OBJECT_POLICY"){let i=t.objects[0];if(i&&i.List&&i.List.items){let r=i.List.items.map(n=>n.String&&n.String.sval?n.String.sval:this.visit(n,s));if(r.length===3){let[n,a,u]=r;e.push(`${u} ON ${n}.${a}`);}else if(r.length===2){let[n,a]=r;e.push(`${a} ON ${n}`);}else e.push(r.join(", "));}}else if(t.removeType==="OBJECT_CAST"){let i=t.objects.map(r=>{if(r&&r.List&&r.List.items){let a=r.List.items.map(u=>this.visit(u,s)).filter(u=>u&&u.trim());if(a.length===2){let[u,o]=a;return `(${u} AS ${o})`}return a.join(".")}return this.visit(r,s)}).filter(r=>r&&r.trim()).join(", ");i&&e.push(i);}else if(t.removeType==="OBJECT_TRIGGER"||t.removeType==="OBJECT_RULE"){let i=t.objects.map(r=>{if(r&&r.List&&r.List.items){let a=r.List.items.map(u=>u.String&&u.String.sval?h.quoteIdentifier(u.String.sval):this.visit(u,s)).filter(u=>u&&u.trim());if(a.length===2){let[u,o]=a;return `${o} ON ${u}`}else if(a.length===3){let[u,o,p]=a;return `${p} ON ${u}.${o}`}return a.join(".")}return this.visit(r,s)}).filter(r=>r&&r.trim()).join(", ");i&&e.push(i);}else if(t.removeType==="OBJECT_OPFAMILY"||t.removeType==="OBJECT_OPCLASS"){let i=t.objects.map(r=>{if(r&&r.List&&r.List.items){let a=r.List.items.map(u=>u.String&&u.String.sval?u.String.sval:this.visit(u,s)).filter(u=>u&&u.trim());if(a.length===2){let u=a[0],o=a[1];return `${h.quoteIdentifier(o)} USING ${u}`}else if(a.length===3){let u=a[0],o=a[1],p=a[2];return `${h.quoteQualifiedIdentifier(o,p)} USING ${u}`}return a.join(".")}return this.visit(r,s)}).filter(r=>r&&r.trim()).join(", ");i&&e.push(i);}else if(t.removeType==="OBJECT_TRANSFORM"){let i=t.objects.map(r=>{if(r&&r.List&&r.List.items){let a=r.List.items.map(u=>u.String&&u.String.sval?u.String.sval:this.visit(u,s)).filter(u=>u&&u.trim());if(a.length===2){let[u,o]=a;return `FOR ${u} LANGUAGE ${o}`}return a.join(".")}return this.visit(r,s)}).filter(r=>r&&r.trim()).join(", ");i&&e.push(i);}else {let i=t.objects.map(r=>{if(Array.isArray(r))return r.map(o=>this.visit(o,s)).filter(o=>o&&o.trim()).join(".");if(r&&r.List&&r.List.items)return r.List.items.map(o=>o.String&&o.String.sval?h.quoteIdentifier(o.String.sval):this.visit(o,s)).filter(o=>o&&o.trim()).join(".");let n=s.spawn("DropStmt",{objtype:t.removeType});return this.visit(r,n)}).filter(r=>r&&r.trim()).join(", ");i&&e.push(i);}return t.behavior==="DROP_CASCADE"&&e.push("CASCADE"),e.join(" ")}TruncateStmt(t,s){let e=["TRUNCATE"];if(t.relations&&t.relations.length>0){let i=t.relations.map(r=>this.visit(r,s)).join(", ");e.push(i);}return t.restart_seqs&&e.push("RESTART IDENTITY"),t.behavior==="DROP_CASCADE"&&e.push("CASCADE"),e.join(" ")}ReturnStmt(t,s){let e=["RETURN"];if(t.returnval){let i=this.visit(t.returnval,s);e.push(i);}return e.join(" ")}PLAssignStmt(t,s){let e=[];if(t.name){let i=h.quoteIdentifier(t.name);if(t.indirection&&t.indirection.length>0){let r=t.indirection.map(n=>this.visit(n,s)).join("");i+=r;}e.push(i);}if(e.push(":="),t.val){let i=t.val;if(i.targetList){e.push("SELECT");let r=this.targetList(i.targetList,s);e.push(r);}else {let r=this.visit(t.val,s);e.push(r);}}return e.join(" ")}CopyStmt(t,s){let e=["COPY"];if(t.relation){let i=this.RangeVar(t.relation,s);e.push(i);}else if(t.query){let i=this.visit(t.query,s);e.push(`(${i})`);}if(t.attlist&&t.attlist.length>0){let i=c.unwrapList(t.attlist).map(r=>this.visit(r,s)).join(", ");e.push(`(${i})`);}if(t.is_from?e.push("FROM"):e.push("TO"),t.is_program&&e.push("PROGRAM"),t.filename?e.push(`'${t.filename}'`):e.push("STDIN"),t.options&&t.options.length>0){e.push("WITH");let i=c.unwrapList(t.options).map(r=>this.visit(r,s.spawn("CopyStmt"))).join(", ");e.push(`(${i})`);}if(t.whereClause){e.push("WHERE");let i=this.visit(t.whereClause,s);e.push(i);}return e.join(" ")}AlterTableStmt(t,s){let e=["ALTER"];if(t.objtype)switch(t.objtype){case "OBJECT_TABLE":e.push("TABLE");break;case "OBJECT_INDEX":e.push("INDEX");break;case "OBJECT_SEQUENCE":e.push("SEQUENCE");break;case "OBJECT_VIEW":e.push("VIEW");break;case "OBJECT_MATVIEW":e.push("MATERIALIZED VIEW");break;case "OBJECT_FOREIGN_TABLE":e.push("FOREIGN TABLE");break;case "OBJECT_TYPE":e.push("TYPE");break;default:e.push("TABLE");}else e.push("TABLE");t.missing_ok&&e.push("IF EXISTS");let i=s.spawn("AlterTableStmt",{objtype:t.objtype});if(t.relation){let r=this.RangeVar(t.relation,i);e.push(r);}if(t.cmds&&t.cmds.length>0){let r=c.unwrapList(t.cmds);if(s.isPretty()){let n=r.map(a=>{let u=this.visit(a,i);return s.newline()+s.indent(u)}).join(",");e.push(n);}else {let n=r.map(a=>this.visit(a,i)).join(", ");e.push(n);}}return e.join(" ")}AlterTableCmd(t,s){let e=[];if(t.subtype)switch(t.subtype){case "AT_AddColumn":if(s.objtype==="OBJECT_TYPE"?e.push("ADD ATTRIBUTE"):e.push("ADD COLUMN"),t.missing_ok&&e.push("IF NOT EXISTS"),t.def){let i=this.getNodeData(t.def);if(s.isPretty()){let r=[],n=[];if(i.colname&&r.push(h.quoteIdentifier(i.colname)),i.typeName&&r.push(this.TypeName(i.typeName,s)),i.is_not_null&&n.push("NOT NULL"),i.collClause&&n.push(this.CollateClause(i.collClause,s)),i.constraints&&c.unwrapList(i.constraints).forEach(o=>{let p=s.spawn("ColumnDef",{isColumnConstraint:true}),f=this.visit(o,p);if(f.includes("REFERENCES")&&f.includes("ON DELETE")){let m=f.match(/^(.*REFERENCES[^)]*\([^)]*\))\s*(ON\s+DELETE\s+CASCADE.*)$/);m?(n.push(m[1]),n.push(m[2])):n.push(f);}else if(f==="UNIQUE"&&i.raw_default){let m="DEFAULT "+this.visit(i.raw_default,s);n.push("UNIQUE "+m);}else n.push(f);}),i.raw_default&&!i.constraints?.some(u=>this.visit(u,s.spawn("ColumnDef",{isColumnConstraint:true}))==="UNIQUE")){let u="DEFAULT "+this.visit(i.raw_default,s);n.push(u);}if(i.fdwoptions&&i.fdwoptions.length>0){n.push("OPTIONS");let u=s.spawn("ColumnDef"),o=c.unwrapList(i.fdwoptions).map(p=>this.visit(p,u));n.push(`(${o.join(", ")})`);}let a=r.join(" ");if(n.length>0){let u=n.map(o=>s.indent(o)).join(s.newline());a+=s.newline()+u;}e.push(a);}else {let r=[];if(i.colname&&r.push(h.quoteIdentifier(i.colname)),i.typeName&&r.push(this.TypeName(i.typeName,s)),i.collClause&&r.push(this.CollateClause(i.collClause,s)),i.fdwoptions&&i.fdwoptions.length>0){r.push("OPTIONS");let n=s.spawn("ColumnDef"),a=c.unwrapList(i.fdwoptions).map(u=>this.visit(u,n));r.push(`(${a.join(", ")})`);}if(i.constraints){let a=c.unwrapList(i.constraints).map(u=>{let o=s.spawn("ColumnDef",{isColumnConstraint:true});return this.visit(u,o)});r.push(...a);}i.raw_default&&(r.push("DEFAULT"),r.push(this.visit(i.raw_default,s))),i.is_not_null&&r.push("NOT NULL"),e.push(r.join(" "));}}t.behavior==="DROP_CASCADE"&&e.push("CASCADE");break;case "AT_DropColumn":t.missing_ok?s.objtype==="OBJECT_TYPE"?e.push("DROP ATTRIBUTE IF EXISTS"):e.push("DROP COLUMN IF EXISTS"):s.objtype==="OBJECT_TYPE"?e.push("DROP ATTRIBUTE"):e.push("DROP COLUMN"),t.name&&e.push(h.quoteIdentifier(t.name)),t.behavior==="DROP_CASCADE"?e.push("CASCADE"):t.behavior==="DROP_RESTRICT"&&e.push("RESTRICT");break;case "AT_AlterColumnType":if(s.objtype==="OBJECT_TYPE"?e.push("ALTER ATTRIBUTE"):e.push("ALTER COLUMN"),t.name&&e.push(h.quoteIdentifier(t.name)),e.push("TYPE"),t.def){let i=this.getNodeData(t.def);if(i&&i.typeName)e.push(this.TypeName(i.typeName,s)),i.raw_default&&(e.push("USING"),e.push(this.visit(i.raw_default,s)));else {let r=this.visit(t.def,s);e.push(r);}}t.behavior==="DROP_CASCADE"&&e.push("CASCADE");break;case "AT_SetTableSpace":e.push("SET TABLESPACE"),t.name&&e.push(h.quoteIdentifier(t.name));break;case "AT_AddConstraint":if(e.push("ADD"),t.def){let i=this.visit(t.def,s);e.push(i);}break;case "AT_DropConstraint":t.missing_ok?e.push("DROP CONSTRAINT IF EXISTS"):e.push("DROP CONSTRAINT"),t.name&&e.push(h.quoteIdentifier(t.name)),t.behavior==="DROP_CASCADE"?e.push("CASCADE"):t.behavior==="DROP_RESTRICT"&&e.push("RESTRICT");break;case "AT_SetRelOptions":if(e.push("SET"),t.def){let i=s.spawn("AlterTableCmd",{subtype:"AT_SetRelOptions"}),r=c.unwrapList(t.def).map(n=>this.visit(n,i)).join(", ");e.push(`(${r})`);}else e.push("()");break;case "AT_ResetRelOptions":if(e.push("RESET"),t.def){let i=s.spawn("AlterTableCmd",{subtype:"AT_ResetRelOptions"}),r=c.unwrapList(t.def).map(n=>this.visit(n,i)).join(", ");e.push(`(${r})`);}else e.push("()");break;case "AT_ColumnDefault":e.push("ALTER COLUMN"),t.name&&e.push(h.quoteIdentifier(t.name)),t.def?(e.push("SET DEFAULT"),e.push(this.visit(t.def,s))):e.push("DROP DEFAULT");break;case "AT_SetStorage":if(e.push("ALTER COLUMN"),t.name&&e.push(h.quoteIdentifier(t.name)),e.push("SET STORAGE"),t.def){let i=this.visit(t.def,s);e.push(i);}break;case "AT_ClusterOn":e.push("CLUSTER ON"),t.name&&e.push(h.quoteIdentifier(t.name));break;case "AT_DropCluster":e.push("SET WITHOUT CLUSTER");break;case "AT_ChangeOwner":e.push("OWNER TO"),t.newowner&&e.push(this.RoleSpec(t.newowner,s));break;case "AT_AddInherit":e.push("INHERIT"),t.def&&e.push(this.visit(t.def,s));break;case "AT_DropInherit":e.push("NO INHERIT"),t.def&&e.push(this.visit(t.def,s));break;case "AT_SetNotNull":e.push("ALTER COLUMN"),t.name&&e.push(h.quoteIdentifier(t.name)),e.push("SET NOT NULL");break;case "AT_DropNotNull":e.push("ALTER COLUMN"),t.name&&e.push(h.quoteIdentifier(t.name)),e.push("DROP NOT NULL");break;case "AT_SetStatistics":e.push("ALTER COLUMN"),t.name?e.push(h.quoteIdentifier(t.name)):t.num!==void 0&&t.num!==null&&e.push(t.num.toString()),e.push("SET STATISTICS"),t.def&&e.push(this.visit(t.def,s));break;case "AT_SetOptions":if(e.push("ALTER COLUMN"),t.name&&e.push(h.quoteIdentifier(t.name)),e.push("SET"),t.def){let i=s.spawn("AlterTableCmd",{subtype:"AT_SetOptions"}),r=c.unwrapList(t.def).map(n=>this.visit(n,i)).join(", ");e.push(`(${r})`);}else e.push("()");break;case "AT_ResetOptions":if(e.push("ALTER COLUMN"),t.name&&e.push(h.quoteIdentifier(t.name)),e.push("RESET"),t.def){let i=s.spawn("AlterTableCmd",{subtype:"AT_ResetOptions"}),r=c.unwrapList(t.def).map(n=>this.visit(n,i)).join(", ");e.push(`(${r})`);}else e.push("()");break;case "AT_SetCompression":e.push("ALTER COLUMN"),t.name&&e.push(h.quoteIdentifier(t.name)),e.push("SET COMPRESSION"),t.def&&e.push(this.visit(t.def,s));break;case "AT_ValidateConstraint":e.push("VALIDATE CONSTRAINT"),t.name&&e.push(h.quoteIdentifier(t.name));break;case "AT_EnableTrig":e.push("ENABLE TRIGGER"),t.name&&e.push(h.quoteIdentifier(t.name));break;case "AT_EnableAlwaysTrig":e.push("ENABLE ALWAYS TRIGGER"),t.name&&e.push(h.quoteIdentifier(t.name));break;case "AT_EnableReplicaTrig":e.push("ENABLE REPLICA TRIGGER"),t.name&&e.push(h.quoteIdentifier(t.name));break;case "AT_DisableTrig":e.push("DISABLE TRIGGER"),t.name&&e.push(h.quoteIdentifier(t.name));break;case "AT_EnableTrigAll":e.push("ENABLE TRIGGER ALL");break;case "AT_DisableTrigAll":e.push("DISABLE TRIGGER ALL");break;case "AT_EnableTrigUser":e.push("ENABLE TRIGGER USER");break;case "AT_DisableTrigUser":e.push("DISABLE TRIGGER USER");break;case "AT_EnableRule":e.push("ENABLE RULE"),t.name&&e.push(h.quoteIdentifier(t.name));break;case "AT_EnableAlwaysRule":e.push("ENABLE ALWAYS RULE"),t.name&&e.push(h.quoteIdentifier(t.name));break;case "AT_EnableReplicaRule":e.push("ENABLE REPLICA RULE"),t.name&&e.push(h.quoteIdentifier(t.name));break;case "AT_DisableRule":e.push("DISABLE RULE"),t.name&&e.push(h.quoteIdentifier(t.name));break;case "AT_SetAccessMethod":e.push("SET ACCESS METHOD"),t.name?e.push(h.quoteIdentifier(t.name)):e.push("DEFAULT");break;case "AT_EnableRowSecurity":e.push("ENABLE ROW LEVEL SECURITY");break;case "AT_DisableRowSecurity":e.push("DISABLE ROW LEVEL SECURITY");break;case "AT_ForceRowSecurity":e.push("FORCE ROW LEVEL SECURITY");break;case "AT_NoForceRowSecurity":e.push("NO FORCE ROW LEVEL SECURITY");break;case "AT_AttachPartition":e.push("ATTACH PARTITION"),t.def&&e.push(this.visit(t.def,s));break;case "AT_DetachPartition":e.push("DETACH PARTITION"),t.def&&e.push(this.visit(t.def,s));break;case "AT_DetachPartitionFinalize":e.push("DETACH PARTITION"),t.def&&e.push(this.visit(t.def,s)),e.push("FINALIZE");break;case "AT_SetLogged":e.push("SET LOGGED");break;case "AT_SetUnLogged":e.push("SET UNLOGGED");break;case "AT_AddColumnToView":if(e.push("ADD COLUMN"),t.def){let i=this.visit(t.def,s);e.push(i);}break;case "AT_CookedColumnDefault":e.push("ALTER COLUMN"),t.name&&e.push(h.quoteIdentifier(t.name)),t.def?(e.push("SET DEFAULT"),e.push(this.visit(t.def,s))):e.push("DROP DEFAULT");break;case "AT_SetExpression":e.push("ALTER COLUMN"),t.name&&e.push(h.quoteIdentifier(t.name)),e.push("SET EXPRESSION"),t.def&&e.push(this.visit(t.def,s));break;case "AT_DropExpression":e.push("ALTER COLUMN"),t.name&&e.push(h.quoteIdentifier(t.name)),e.push("DROP EXPRESSION");break;case "AT_CheckNotNull":e.push("ALTER COLUMN"),t.name&&e.push(h.quoteIdentifier(t.name)),e.push("SET NOT NULL");break;case "AT_AddIndex":e.push("ADD"),t.def&&e.push(this.visit(t.def,s));break;case "AT_ReAddIndex":e.push("ADD"),t.def&&e.push(this.visit(t.def,s));break;case "AT_ReAddConstraint":e.push("ADD"),t.def&&e.push(this.visit(t.def,s));break;case "AT_ReAddDomainConstraint":e.push("ADD"),t.def&&e.push(this.visit(t.def,s));break;case "AT_AlterConstraint":if(e.push("ALTER CONSTRAINT"),t.def&&this.getNodeType(t.def)==="Constraint"){let i=this.getNodeData(t.def);i.conname&&(e.push(h.quoteIdentifier(i.conname)),i.deferrable!==void 0&&e.push(i.deferrable?"DEFERRABLE":"NOT DEFERRABLE"),i.initdeferred!==void 0&&e.push(i.initdeferred?"INITIALLY DEFERRED":"INITIALLY IMMEDIATE"));}else t.name&&(e.push(h.quoteIdentifier(t.name)),t.def&&e.push(this.visit(t.def,s)));break;case "AT_AddIndexConstraint":e.push("ADD"),t.def&&e.push(this.visit(t.def,s));break;case "AT_ReAddComment":e.push("COMMENT"),t.def&&e.push(this.visit(t.def,s));break;case "AT_AlterColumnGenericOptions":if(e.push("ALTER COLUMN"),t.name&&e.push(h.quoteIdentifier(t.name)),e.push("OPTIONS"),t.def){let i=s.spawn("AlterTableCmd",{alterColumnOptions:true}),r=c.unwrapList(t.def).map(n=>this.visit(n,i)).join(", ");e.push(`(${r})`);}break;case "AT_DropOids":e.push("SET WITHOUT OIDS");break;case "AT_ReplaceRelOptions":if(e.push("REPLACE"),t.def&&Array.isArray(t.def)){let i=c.unwrapList(t.def).map(r=>this.visit(r,s)).join(", ");e.push(`(${i})`);}else e.push("()");break;case "AT_AddOf":e.push("OF"),t.def&&e.push(this.visit(t.def,s));break;case "AT_DropOf":e.push("NOT OF");break;case "AT_ReplicaIdentity":e.push("REPLICA IDENTITY"),t.def&&e.push(this.visit(t.def,s));break;case "AT_GenericOptions":if(e.push("OPTIONS"),t.def){let i=s.spawn("AlterTableCmd",{alterTableOptions:true}),r=c.unwrapList(t.def).map(n=>this.visit(n,i)).join(", ");e.push(`(${r})`);}break;case "AT_AddIdentity":e.push("ALTER COLUMN"),t.name&&e.push(h.quoteIdentifier(t.name)),e.push("ADD"),t.def&&e.push(this.visit(t.def,s));break;case "AT_SetIdentity":e.push("ALTER COLUMN"),t.name&&e.push(h.quoteIdentifier(t.name)),e.push("SET"),t.def&&e.push(this.visit(t.def,s));break;case "AT_DropIdentity":e.push("ALTER COLUMN"),t.name&&e.push(h.quoteIdentifier(t.name)),e.push("DROP IDENTITY"),t.behavior==="DROP_CASCADE"?e.push("CASCADE"):t.behavior==="DROP_RESTRICT"&&e.push("RESTRICT");break;case "AT_ReAddStatistics":e.push("ADD"),t.def&&e.push(this.visit(t.def,s));break;default:throw new Error(`Unsupported AlterTableCmd subtype: ${t.subtype}`)}return e.join(" ")}CreateFunctionStmt(t,s){let e=["CREATE"];if(t.replace&&e.push("OR REPLACE"),t.is_procedure?e.push("PROCEDURE"):e.push("FUNCTION"),t.funcname&&t.funcname.length>0){let r=t.funcname.map(a=>a.String?.sval||a.String?.str||"").filter(a=>a),n=h.quoteDottedName(r);if(t.parameters&&t.parameters.length>0){let a=t.parameters.filter(u=>this.getNodeData(u).mode!=="FUNC_PARAM_TABLE").map(u=>this.visit(u,s));if(a.length>0)if(s.isPretty()){let u=a.map(o=>s.indent(o)).join(","+s.newline());e.push(n+"("+s.newline()+u+s.newline()+")");}else e.push(n+"("+a.join(", ")+")");else e.push(n+"()");}else e.push(n+"()");}if(t.parameters&&t.parameters.some(r=>this.getNodeData(r).mode==="FUNC_PARAM_TABLE")){let r=t.parameters.filter(n=>this.getNodeData(n).mode==="FUNC_PARAM_TABLE").map(n=>this.visit(n,s));if(s.isPretty()){let n=r.map(a=>s.indent(a)).join(","+s.newline());e.push("RETURNS TABLE ("+s.newline()+n+s.newline()+")");}else e.push("RETURNS TABLE ("),e.push(r.join(", ")),e.push(")");}else t.returnType&&(e.push("RETURNS"),e.push(this.TypeName(t.returnType,s)));if(t.options&&t.options.length>0){let r=s.spawn("CreateFunctionStmt"),n=t.options.map(a=>this.visit(a,r));e.push(...n);}if(t.sql_body){let r=this.getNodeType(t.sql_body);if(r==="ReturnStmt")e.push(this.visit(t.sql_body,s));else {if(e.push("BEGIN ATOMIC"),r==="List"){let n=c.unwrapList(t.sql_body);if(!(n.length===0||n.length===1&&Object.keys(n[0]).length===0)){let a=n;n.length===1&&n[0].List&&(a=c.unwrapList(n[0]));let u=a.filter(o=>o&&Object.keys(o).length>0).map(o=>{let p=this.visit(o,s);return p.endsWith(";")?p:p+";"});u.length>0&&e.push(u.join(" "));}}else {let n=this.visit(t.sql_body,s);n&&!n.endsWith(";")?e.push(n+";"):e.push(n);}e.push("END");}}return e.join(" ")}FunctionParameter(t,s){let e=[];if(t.mode)switch(t.mode){case "FUNC_PARAM_IN":e.push("IN");break;case "FUNC_PARAM_OUT":e.push("OUT");break;case "FUNC_PARAM_INOUT":e.push("INOUT");break;case "FUNC_PARAM_VARIADIC":e.push("VARIADIC");break}return t.name&&e.push(h.quoteIdentifier(t.name)),t.argType&&e.push(this.TypeName(t.argType,s)),t.defexpr&&(e.push("DEFAULT"),e.push(this.visit(t.defexpr,s))),e.join(" ")}CreateEnumStmt(t,s){let e=["CREATE","TYPE"];if(t.typeName){let i=c.unwrapList(t.typeName).map(r=>this.visit(r,s)).join(".");e.push(i);}if(e.push("AS","ENUM"),t.vals&&t.vals.length>0){let i=s.spawn("CreateEnumStmt",{isEnumValue:true}),r=c.unwrapList(t.vals).map(n=>this.visit(n,i)).join(", ");e.push(`(${r})`);}else e.push("()");return e.join(" ")}CreateDomainStmt(t,s){let e=["CREATE","DOMAIN"];if(t.domainname){let i=c.unwrapList(t.domainname).map(r=>this.visit(r,s)).join(".");e.push(i);}if(t.typeName&&(e.push("AS"),e.push(this.TypeName(t.typeName,s))),t.collClause&&e.push(this.CollateClause(t.collClause,s)),t.constraints){let i=c.unwrapList(t.constraints).map(r=>this.visit(r,s)).join(" ");i&&e.push(i);}return e.join(" ")}CreateRoleStmt(t,s){let e=["CREATE"];if(t.stmt_type==="ROLESTMT_ROLE"?e.push("ROLE"):t.stmt_type==="ROLESTMT_USER"?e.push("USER"):t.stmt_type==="ROLESTMT_GROUP"?e.push("GROUP"):e.push("ROLE"),t.role){let i=h.quoteIdentifier(t.role);e.push(i);}if(t.options){let i=c.unwrapList(t.options).map(r=>this.visit(r,s.spawn("CreateRoleStmt"))).join(" ");i&&(e.push("WITH"),e.push(i));}return e.join(" ")}DefElem(t,s){if(!t.defname)return "";if(s.parentNodeTypes.includes("DefineStmt")&&["commutator","negator"].includes(t.defname.toLowerCase())&&t.arg&&this.getNodeType(t.arg)==="List"){let e=this.getNodeData(t.arg),i=c.unwrapList(e.items);if(i.length===1&&i[0].String)return `${this.preserveOperatorDefElemCase(t.defname)} = ${i[0].String.sval}`}if(s.parentNodeTypes.includes("IndexElem")){if(t.arg&&this.getNodeType(t.arg)==="String"){let e=this.getNodeData(t.arg);return `${t.defname}='${e.sval}'`}return `${t.defname}=${this.visit(t.arg,s.spawn("DefElem"))}`}if(s.parentNodeTypes.includes("DefineStmt")&&["hashes","merges"].includes(t.defname.toLowerCase())&&!t.arg)return t.defname!==t.defname.toLowerCase()&&t.defname!==t.defname.toUpperCase()?h.quoteIdentifier(t.defname):t.defname.charAt(0).toUpperCase()+t.defname.slice(1).toLowerCase();if(s.parentNodeTypes.includes("AlterFdwStmt")||s.parentNodeTypes.includes("CreateFdwStmt")||s.parentNodeTypes.includes("CreateForeignServerStmt")||s.parentNodeTypes.includes("AlterForeignServerStmt")||s.parentNodeTypes.includes("CreateUserMappingStmt")||s.parentNodeTypes.includes("AlterUserMappingStmt")||s.parentNodeTypes.includes("ColumnDef")||s.parentNodeTypes.includes("CreateForeignTableStmt")||s.parentNodeTypes.includes("ImportForeignSchemaStmt")||s.alterColumnOptions||s.alterTableOptions){if(["handler","validator"].includes(t.defname)){if(!t.arg)return `NO ${t.defname.toUpperCase()}`;let e=s.spawn("DefElem"),i=this.visit(t.arg,e);return `${t.defname.toUpperCase()} ${i}`}if(t.arg){let e=s.spawn("DefElem"),i=this.visit(t.arg,e);if(s.parentNodeTypes.includes("CreateFdwStmt")||s.parentNodeTypes.includes("AlterFdwStmt")){let a=typeof i=="string"&&!i.startsWith("'")?`'${i}'`:i,u=h.quoteIdentifier(t.defname);return t.defaction==="DEFELEM_ADD"?`ADD ${u} ${a}`:t.defaction==="DEFELEM_DROP"?`DROP ${u}`:t.defaction==="DEFELEM_SET"?`SET ${u} ${a}`:`${u} ${a}`}let r=typeof i=="string"&&!i.startsWith("'")?`'${i}'`:i;return t.defaction==="DEFELEM_ADD"?`ADD ${t.defname} ${r}`:t.defaction==="DEFELEM_DROP"?`DROP ${t.defname}`:t.defaction==="DEFELEM_SET"?`SET ${t.defname} ${r}`:`${h.quoteIdentifier(t.defname)} ${r}`}else if(t.defaction==="DEFELEM_DROP")return `DROP ${t.defname}`}if((s.parentNodeTypes.includes("CreateSeqStmt")||s.parentNodeTypes.includes("AlterSeqStmt"))&&(t.defname==="minvalue"||t.defname==="maxvalue")&&!t.arg)return `NO ${t.defname.toUpperCase()}`;if((s.parentNodeTypes.includes("CreateRoleStmt")||s.parentNodeTypes.includes("AlterRoleStmt"))&&t.defname==="password"){if(!t.arg)return "PASSWORD NULL";let e=s.spawn("DefElem"),i=this.visit(t.arg,e);return `PASSWORD ${typeof i=="string"&&!i.startsWith("'")?`'${i}'`:i}`}if(t.arg){let e=s.spawn("DefElem"),i=this.visit(t.arg,e);if(s.parentNodeTypes.includes("AlterOperatorStmt")){if(t.arg&&this.getNodeType(t.arg)==="TypeName"){let n=this.getNodeData(t.arg);if(n.names){let a=c.unwrapList(n.names);if(a.length===1&&a[0].String)return `${t.defname} = ${a[0].String.sval}`}}if(t.arg&&this.getNodeType(t.arg)==="List"){let n=this.getNodeData(t.arg),a=c.unwrapList(n.items);if(a.length===1&&a[0].String)return `${t.defname} = ${a[0].String.sval}`}}if(s.parentNodeTypes.includes("CreatedbStmt")||s.parentNodeTypes.includes("DropdbStmt")){let n=typeof i=="string"?h.escape(i):i;return `${t.defname} = ${n}`}if(s.parentNodeTypes.includes("CreateForeignServerStmt")||s.parentNodeTypes.includes("AlterForeignServerStmt")){let n=typeof i=="string"?h.escape(i):i;return `${h.quoteIdentifier(t.defname)} ${n}`}if(s.parentNodeTypes.includes("CreateRoleStmt")||s.parentNodeTypes.includes("AlterRoleStmt")){if(t.defname==="rolemembers"&&t.arg&&this.getNodeType(t.arg)==="List"){let n=this.getNodeData(t.arg),u=c.unwrapList(n.items).map(o=>this.visit(o,s));return s.parentNodeTypes.includes("CreateRoleStmt")?`ROLE ${u.join(", ")}`:`ADD USER ${u.join(", ")}`}if(t.defname==="addroleto"&&t.arg&&this.getNodeType(t.arg)==="List"){let n=this.getNodeData(t.arg);return `IN ROLE ${c.unwrapList(n.items).map(o=>this.visit(o,s)).join(", ")}`}if(t.defname==="validUntil")return `VALID UNTIL ${typeof i=="string"&&!i.startsWith("'")?`'${i}'`:i}`;if(t.defname==="adminmembers")return `ADMIN ${i}`;if(t.defname==="connectionlimit")return `CONNECTION LIMIT ${i}`;if(t.defname==="sysid")return `SYSID ${i}`;if(String(i)==="true")return t.defname==="isreplication"?"REPLICATION":t.defname==="canlogin"?"LOGIN":t.defname.toUpperCase();if(String(i)==="false")return t.defname==="canlogin"?"NOLOGIN":t.defname==="isreplication"?"NOREPLICATION":`NO${t.defname.toUpperCase()}`}if(s.parentNodeTypes.includes("CreateSeqStmt")||s.parentNodeTypes.includes("AlterSeqStmt")){if(t.defname==="owned_by")if(t.arg&&this.getNodeType(t.arg)==="List"){let n=this.getNodeData(t.arg);return `OWNED BY ${c.unwrapList(n.items).map(o=>{let p=this.getNodeData(o);if(this.getNodeType(o)==="String"){let f=p.sval;return h.quoteIdentifier(f)}return this.visit(o,s)}).join(".")}`}else return `OWNED BY ${i}`;if(t.defname==="cycle"){let n=String(i).toLowerCase();if(n==="true"||n==="1")return "CYCLE";if(n==="false"||n==="0")return "NO CYCLE"}return (t.defname==="minvalue"||t.defname==="maxvalue")&&!t.arg?`NO ${t.defname.toUpperCase()}`:`${t.defname.toUpperCase()} ${i}`}if(s.parentNodeTypes.includes("CreateTableSpaceStmt")||s.parentNodeTypes.includes("AlterTableSpaceOptionsStmt"))return `${t.defname.toUpperCase()} ${i}`;if(s.parentNodeTypes.includes("ExplainStmt"))return i?`${t.defname.toUpperCase()} ${i.toUpperCase()}`:t.defname.toUpperCase();if(s.parentNodeTypes.includes("DoStmt")){if(t.defname==="as"){let n=s.spawn("DefElem"),a=t.arg?this.visit(t.arg,n):"";if(Array.isArray(a)){let o=a.join(""),p=this.getFunctionDelimiter(o);return `${p}${o}${p}`}else {let u=this.getFunctionDelimiter(a);return `${u}${a}${u}`}}return ""}if(s.parentNodeTypes.includes("CreateFunctionStmt")||s.parentNodeTypes.includes("AlterFunctionStmt")){if(t.defname==="as")if(t.arg&&t.arg.List){let u=(t.arg.List.items||[]).map(o=>o.String?o.String.sval:this.visit(o,s));if(u.length===1){let o=u[0],p=this.getFunctionDelimiter(o);return `AS ${p}${o}${p}`}else return `AS ${u.map(o=>{let p=this.getFunctionDelimiter(o);return `${p}${o}${p}`}).join(", ")}`}else if(Array.isArray(i)){let n=i;if(n.length===1){let a=n[0],u=this.getFunctionDelimiter(a);return `AS ${u}${a}${u}`}else return `AS ${n.map(a=>{let u=this.getFunctionDelimiter(a);return `${u}${a}${u}`}).join(", ")}`}else {let n=this.getFunctionDelimiter(i);return `AS ${n}${i}${n}`}return t.defname==="language"?`LANGUAGE ${i}`:t.defname==="volatility"?i.toUpperCase():t.defname==="strict"?i==="true"?"STRICT":"CALLED ON NULL INPUT":t.defname==="security"?i==="true"?"SECURITY DEFINER":"SECURITY INVOKER":t.defname==="leakproof"?i==="true"?"LEAKPROOF":"NOT LEAKPROOF":t.defname==="cost"?`COST ${i}`:t.defname==="rows"?`ROWS ${i}`:t.defname==="window"?i==="true"?"WINDOW":"":t.defname==="set"?this.visit(t.arg,s):`${t.defname.toUpperCase()} ${i}`}if(s.parentNodeTypes.includes("CreateExtensionStmt")||s.parentNodeTypes.includes("AlterExtensionStmt")||s.parentNodeTypes.includes("CreateFdwStmt")||s.parentNodeTypes.includes("AlterFdwStmt")){if(s.parentNodeTypes.includes("AlterExtensionStmt")){if(t.defname==="new_version")return `UPDATE TO ${typeof i=="string"&&!i.startsWith("'")?`'${i}'`:i}`;if(t.defname==="schema")return `SET SCHEMA ${i}`}if(s.parentNodeTypes.includes("CreateFdwStmt")){if(["handler","validator"].includes(t.defname))return `${t.defname.toUpperCase()} ${i}`;let n=typeof i=="string"?h.escape(i):i;return `${t.defname} ${n}`}return t.defname==="cascade"?i==="true"?"CASCADE":"":`${t.defname.toUpperCase()} ${i}`}if(s.parentNodeTypes.includes("IndexStmt"))return `${t.defname}=${i}`;if(s.parentNodeTypes.includes("IndexElem")){if(t.arg&&this.getNodeType(t.arg)==="String"){let n=this.getNodeData(t.arg);return `${t.defname}='${n.sval}'`}return `${t.defname}=${i}`}if(s.parentNodeTypes.includes("CreateStmt")){if(t.arg&&this.getNodeType(t.arg)==="Integer"){let n=this.getNodeData(t.arg);return `${t.defname}=${n.ival}`}return `${t.defname}=${i}`}if(s.parentNodeTypes.includes("CreateEventTrigStmt")){if(t.arg&&this.getNodeType(t.arg)==="List"){let n=this.getNodeData(t.arg),u=c.unwrapList(n.items).map(o=>this.getNodeType(o)==="String"?`'${this.getNodeData(o).sval||""}'`:this.visit(o,s));return `${t.defname} IN (${u.join(", ")})`}return `${t.defname} = ${i}`}if((s.parentNodeTypes.includes("AlterTableCmd")||s.parentNodeTypes.includes("AlterTableStmt"))&&!s.parentNodeTypes.includes("ColumnDef")){let n=t.defnamespace?`${t.defnamespace}.${t.defname}`:t.defname;return t.arg&&this.getNodeType(t.arg)==="TypeName"?`${n} = ${i}`:`${n} = ${i}`}if(s.parentNodeTypes.includes("ViewStmt")){if(typeof i=="string"&&/^\d+$/.test(i))return `${t.defname}=${i}`;let n=typeof i=="string"?h.escape(i):i;return `${t.defname} = ${n}`}if(s.parentNodeTypes.includes("CopyStmt"))return t.defname==="format"&&t.arg&&this.getNodeType(t.arg)==="String"?`FORMAT ${this.getNodeData(t.arg).sval.toUpperCase()}`:t.arg?`${t.defname.toUpperCase()} ${i}`:t.defname.toUpperCase();if(s.parentNodeTypes.includes("DefineStmt")){let n=this.preserveOperatorDefElemCase(t.defname);if(["commutator","negator"].includes(t.defname.toLowerCase())){if(t.arg){if(t.arg&&this.getNodeType(t.arg)==="List"){let o=this.getNodeData(t.arg),p=c.unwrapList(o.items);if(p.length===1&&p[0].String)return `${n} = ${p[0].String.sval}`}let u=i.replace(/^"(.*)"$/,"$1");return `${n} = ${u}`}return n}if(["hashes","merges"].includes(t.defname.toLowerCase()))return t.defname!==t.defname.toLowerCase()&&t.defname!==t.defname.toUpperCase()?h.quoteIdentifier(t.defname):n.toUpperCase();let a=h.quoteIdentifier(t.defname);if(a!==t.defname){if(t.arg){if(this.getNodeType(t.arg)==="String"){let u=this.getNodeData(t.arg);return u.sval==="true"||u.sval==="false"?`${a} = ${u.sval}`:`${a} = '${u.sval}'`}return `${a} = ${i}`}return a}if(n!==t.defname)return t.arg?`${n} = ${i}`:n;if(t.arg&&this.getNodeType(t.arg)==="String"){let u=this.getNodeData(t.arg);return u.sval==="true"||u.sval==="false"?`${t.defname} = ${u.sval}`:`${t.defname} = '${u.sval}'`}if(t.arg&&this.getNodeType(t.arg)==="Boolean"){let u=this.getNodeData(t.arg);return `${t.defname} = ${u.boolval?"true":"false"}`}if(t.arg&&this.getNodeType(t.arg)==="Integer"){let u=this.getNodeData(t.arg);return `${t.defname} = ${u.ival}`}if(t.arg&&this.getNodeType(t.arg)==="TypeName"){let u=this.getNodeData(t.arg);if(u.names){let o=c.unwrapList(u.names);if(o.length===1&&o[0].String)return `${t.defname} = ${o[0].String.sval}`}return `${t.defname} = ${i}`}}let r=typeof i=="string"?h.escape(i):i;return `${t.defname} = ${r}`}return s.parentNodeTypes.includes("DefineStmt")&&!t.arg&&t.defname!==t.defname.toLowerCase()&&t.defname!==t.defname.toUpperCase()?h.quoteIdentifier(t.defname):t.defname.toUpperCase()}CreateTableSpaceStmt(t,s){let e=["CREATE","TABLESPACE"];if(t.tablespacename&&e.push(t.tablespacename),t.owner&&(e.push("OWNER"),e.push(this.RoleSpec(t.owner,s))),t.location&&(e.push("LOCATION"),e.push(`'${t.location}'`)),t.options&&t.options.length>0){e.push("WITH");let i=s.spawn("CreateTableSpaceStmt"),r=c.unwrapList(t.options).map(n=>this.visit(n,i)).join(", ");e.push(`(${r})`);}return e.join(" ")}DropTableSpaceStmt(t,s){let e=["DROP","TABLESPACE"];return t.missing_ok&&e.push("IF","EXISTS"),t.tablespacename&&e.push(t.tablespacename),e.join(" ")}AlterTableSpaceOptionsStmt(t,s){let e=["ALTER","TABLESPACE"];if(t.tablespacename&&e.push(t.tablespacename),t.isReset?e.push("RESET"):e.push("SET"),t.options&&t.options.length>0){let i=s.spawn("AlterTableSpaceOptionsStmt"),r=c.unwrapList(t.options).map(n=>this.visit(n,i)).join(", ");e.push(`(${r})`);}return e.join(" ")}CreateExtensionStmt(t,s){let e=["CREATE","EXTENSION"];if(t.if_not_exists&&e.push("IF","NOT","EXISTS"),t.extname&&e.push(this.quoteIfNeeded(t.extname)),t.options&&t.options.length>0){let i=s.spawn("CreateExtensionStmt"),r=c.unwrapList(t.options).map(n=>this.visit(n,i)).join(" ");e.push(r);}return e.join(" ")}AlterExtensionStmt(t,s){let e=["ALTER","EXTENSION"];if(t.extname&&e.push(this.quoteIfNeeded(t.extname)),t.options&&t.options.length>0){let i=s.spawn("AlterExtensionStmt"),r=c.unwrapList(t.options).map(n=>this.visit(n,i)).join(" ");e.push(r);}return e.join(" ")}AlterExtensionContentsStmt(t,s){let e=["ALTER","EXTENSION"];if(t.extname&&e.push(this.quoteIfNeeded(t.extname)),t.action===1?e.push("ADD"):t.action===-1&&e.push("DROP"),t.objtype)try{e.push(this.getObjectTypeKeyword(t.objtype));}catch{e.push(t.objtype.toString());}return t.object&&e.push(this.visit(t.object,s)),e.join(" ")}CreateFdwStmt(t,s){let e=["CREATE","FOREIGN","DATA","WRAPPER"];if(t.fdwname&&e.push(t.fdwname),t.func_options&&t.func_options.length>0){let i=s.spawn("CreateFdwStmt"),r=c.unwrapList(t.func_options).map(n=>this.visit(n,i)).join(" ");e.push(r);}if(t.options&&t.options.length>0){e.push("OPTIONS");let i=s.spawn("CreateFdwStmt"),r=c.unwrapList(t.options).map(n=>this.visit(n,i)).join(", ");e.push(`(${r})`);}return e.join(" ")}SetOperationStmt(t,s){let e=[];if(t.larg&&e.push(this.visit(t.larg,s)),t.op)switch(t.op){case "SETOP_UNION":e.push(t.all?"UNION ALL":"UNION");break;case "SETOP_INTERSECT":e.push(t.all?"INTERSECT ALL":"INTERSECT");break;case "SETOP_EXCEPT":e.push(t.all?"EXCEPT ALL":"EXCEPT");break;default:throw new Error(`Unsupported SetOperation: ${t.op}`)}return t.rarg&&e.push(this.visit(t.rarg,s)),e.join(" ")}ReplicaIdentityStmt(t,s){let e=[];if(t.identity_type)switch(t.identity_type){case "d":case "REPLICA_IDENTITY_DEFAULT":e.push("DEFAULT");break;case "f":case "REPLICA_IDENTITY_FULL":e.push("FULL");break;case "n":case "REPLICA_IDENTITY_NOTHING":e.push("NOTHING");break;case "i":case "REPLICA_IDENTITY_INDEX":e.push("USING","INDEX"),t.name&&e.push(h.quoteIdentifier(t.name));break;default:throw new Error(`Unsupported replica identity type: ${t.identity_type}`)}return e.join(" ")}AlterCollationStmt(t,s){let e=["ALTER","COLLATION"];if(t.collname&&t.collname.length>0){let i=c.unwrapList(t.collname).map(r=>this.visit(r,s)).join(".");e.push(i);}return e.push("REFRESH","VERSION"),e.join(" ")}AlterDomainStmt(t,s){let e=["ALTER","DOMAIN"];if(t.typeName&&t.typeName.length>0){let i=c.unwrapList(t.typeName).map(r=>this.visit(r,s)).join(".");e.push(i);}if(t.subtype)switch(t.subtype){case "AT_SetNotNull":e.push("SET","NOT","NULL");break;case "AT_DropNotNull":e.push("DROP","NOT","NULL");break;case "AT_SetDefault":e.push("SET","DEFAULT"),t.def&&e.push(this.visit(t.def,s));break;case "AT_DropDefault":e.push("DROP","DEFAULT");break;case "AT_AddConstraint":if(e.push("ADD"),t.def){let i=s.spawn("CreateDomainStmt",{isDomainConstraint:true});e.push(this.visit(t.def,i));}break;case "AT_DropConstraint":e.push("DROP","CONSTRAINT"),t.missing_ok&&e.push("IF","EXISTS"),t.name&&e.push(h.quoteIdentifier(t.name)),t.behavior==="DROP_CASCADE"&&e.push("CASCADE");break;case "AT_ValidateConstraint":e.push("VALIDATE","CONSTRAINT"),t.name&&e.push(h.quoteIdentifier(t.name));break;case "C":if(e.push("ADD"),t.def){let i=s.spawn("CreateDomainStmt",{isDomainConstraint:true});e.push(this.visit(t.def,i));}break;case "X":e.push("DROP","CONSTRAINT"),t.missing_ok&&e.push("IF","EXISTS"),t.name&&e.push(h.quoteIdentifier(t.name)),t.behavior==="DROP_CASCADE"&&e.push("CASCADE");break;case "V":e.push("VALIDATE","CONSTRAINT"),t.name&&e.push(h.quoteIdentifier(t.name));break;case "O":e.push("SET","NOT","NULL");break;case "N":e.push("DROP","NOT","NULL");break;case "T":t.def?(e.push("SET","DEFAULT"),e.push(this.visit(t.def,s))):e.push("DROP","DEFAULT");break;default:throw new Error(`Unsupported AlterDomainStmt subtype: ${t.subtype}`)}return e.join(" ")}PrepareStmt(t,s){let e=["PREPARE"];if(t.name&&e.push(t.name),t.argtypes&&t.argtypes.length>0){let i=c.unwrapList(t.argtypes).map(r=>this.visit(r,s)).join(", ");e.push(`(${i})`);}return e.push("AS"),t.query&&e.push(this.visit(t.query,s)),e.join(" ")}ExecuteStmt(t,s){let e=["EXECUTE"];if(t.name&&e.push(t.name),t.params&&t.params.length>0){let i=c.unwrapList(t.params).map(r=>this.visit(r,s)).join(", ");e.push(`(${i})`);}return e.join(" ")}DeallocateStmt(t,s){let e=["DEALLOCATE"];return t.isall?e.push("ALL"):t.name&&e.push(t.name),e.join(" ")}NotifyStmt(t,s){let e=["NOTIFY"];return t.conditionname&&e.push(t.conditionname),t.payload!==null&&t.payload!==void 0&&(e.push(","),e.push(`'${t.payload}'`)),e.join(" ")}ListenStmt(t,s){let e=["LISTEN"];return t.conditionname&&e.push(t.conditionname),e.join(" ")}UnlistenStmt(t,s){let e=["UNLISTEN"];return t.conditionname?e.push(t.conditionname):e.push("*"),e.join(" ")}CheckPointStmt(t,s){return "CHECKPOINT"}LoadStmt(t,s){if(!t.filename)throw new Error("LoadStmt requires filename");return `LOAD '${t.filename}'`}DiscardStmt(t,s){switch(t.target){case "DISCARD_ALL":return "DISCARD ALL";case "DISCARD_PLANS":return "DISCARD PLANS";case "DISCARD_SEQUENCES":return "DISCARD SEQUENCES";case "DISCARD_TEMP":return "DISCARD TEMP";default:throw new Error(`Unsupported DiscardStmt target: ${t.target}`)}}CommentStmt(t,s){let e=["COMMENT ON"];if(t.objtype)switch(t.objtype){case "OBJECT_TABLE":e.push("TABLE");break;case "OBJECT_COLUMN":e.push("COLUMN");break;case "OBJECT_INDEX":e.push("INDEX");break;case "OBJECT_FUNCTION":e.push("FUNCTION");break;case "OBJECT_VIEW":e.push("VIEW");break;case "OBJECT_SCHEMA":e.push("SCHEMA");break;case "OBJECT_DATABASE":e.push("DATABASE");break;case "OBJECT_MATVIEW":e.push("MATERIALIZED VIEW");break;case "OBJECT_TABCONSTRAINT":e.push("CONSTRAINT");break;case "OBJECT_TRIGGER":e.push("TRIGGER");break;case "OBJECT_FDW":e.push("FOREIGN DATA WRAPPER");break;case "OBJECT_EVENT_TRIGGER":e.push("EVENT TRIGGER");break;case "OBJECT_FOREIGN_SERVER":e.push("SERVER");break;case "OBJECT_FOREIGN_TABLE":e.push("FOREIGN TABLE");break;case "OBJECT_STATISTIC_EXT":e.push("STATISTICS");break;case "OBJECT_LARGEOBJECT":e.push("LARGE OBJECT");break;case "OBJECT_OPERATOR":e.push("OPERATOR");break;case "OBJECT_OPCLASS":e.push("OPERATOR CLASS");break;case "OBJECT_OPFAMILY":e.push("OPERATOR FAMILY");break;case "OBJECT_POLICY":e.push("POLICY");break;case "OBJECT_TSPARSER":e.push("TEXT SEARCH PARSER");break;case "OBJECT_TSDICTIONARY":e.push("TEXT SEARCH DICTIONARY");break;case "OBJECT_TSTEMPLATE":e.push("TEXT SEARCH TEMPLATE");break;case "OBJECT_TSCONFIGURATION":e.push("TEXT SEARCH CONFIGURATION");break;case "OBJECT_TRANSFORM":e.push("TRANSFORM");break;default:e.push(t.objtype.replace("OBJECT_",""));}if(t.object)if(t.object&&typeof t.object=="object"&&"List"in t.object){let i=t.object.List;if(i.items&&i.items.length>0){let r=c.unwrapList(i.items).map(n=>this.visit(n,s));if(t.objtype==="OBJECT_TABCONSTRAINT")if(r.length===3){let[n,a,u]=r;e.push(u),e.push("ON"),e.push(`${n}.${a}`);}else if(r.length===2){let[n,a]=r;e.push(a),e.push("ON"),e.push(n);}else e.push(r.join("."));else if(t.objtype==="OBJECT_TRIGGER")if(r.length===2){let[n,a]=r;e.push(a),e.push("ON"),e.push(n);}else e.push(r.join("."));else if(t.objtype==="OBJECT_RULE")if(r.length===2){let[n,a]=r;e.push(a),e.push("ON"),e.push(n);}else e.push(r.join("."));else if(t.objtype==="OBJECT_OPERATOR")if(t.object&&t.object.ObjectWithArgs){let n=t.object.ObjectWithArgs,a=n.objname&&n.objname[0]&&n.objname[0].String?n.objname[0].String.sval:"unknown";a.startsWith('"')&&a.endsWith('"')&&(a=a.slice(1,-1));let u=[];n.objargs&&n.objargs.forEach(o=>{if(!o||Object.keys(o).length===0)u.push("NONE");else if(o.TypeName){let p=this.visit(o,s);u.push(p);}else u.push("unknown");}),e.push(`${a} (${u.join(", ")})`);}else e.push(r.join("."));else if(t.objtype==="OBJECT_OPCLASS"||t.objtype==="OBJECT_OPFAMILY")if(r.length>=2){let n=r[r.length-1],a=r[r.length-2];e.push(`${n} USING ${a}`);}else e.push(r.join(" USING "));else if(t.objtype==="OBJECT_POLICY")if(r.length===2){let[n,a]=r;e.push(a),e.push("ON"),e.push(n);}else e.push(r.join("."));else if(t.objtype==="OBJECT_TRANSFORM")if(r.length===2){let[n,a]=r;e.push("FOR"),e.push(n),e.push("LANGUAGE"),e.push(a);}else e.push(r.join("."));else e.push(r.join("."));}}else if(t.objtype==="OBJECT_OPERATOR"&&t.object&&t.object.ObjectWithArgs){let i=t.object.ObjectWithArgs,r=i.objname&&i.objname[0]&&i.objname[0].String?i.objname[0].String.sval:"unknown";r.startsWith('"')&&r.endsWith('"')&&(r=r.slice(1,-1));let n=[];i.objargs&&i.objargs.forEach(a=>{if(!a||Object.keys(a).length===0)n.push("NONE");else if(a.TypeName){let u=this.visit(a,s);n.push(u);}else n.push("unknown");}),e.push(`${r}(${n.join(", ")})`);}else {let i=s.spawn("CommentStmt",{objtype:t.objtype});e.push(this.visit(t.object,i));}return e.push("IS"),t.comment===null||t.comment===void 0?e.push("NULL"):t.comment&&e.push(h.formatEString(t.comment)),e.join(" ")}LockStmt(t,s){let e=["LOCK","TABLE"];if(t.relations&&t.relations.length>0){let i=c.unwrapList(t.relations).map(r=>this.visit(r,s)).join(", ");e.push(i);}if(t.mode!==void 0){let i=["","ACCESS SHARE","ROW SHARE","ROW EXCLUSIVE","SHARE UPDATE EXCLUSIVE","SHARE","SHARE ROW EXCLUSIVE","EXCLUSIVE","ACCESS EXCLUSIVE"];t.mode>=1&&t.mode<i.length&&e.push("IN",i[t.mode],"MODE");}return t.nowait&&e.push("NOWAIT"),e.join(" ")}CreatePolicyStmt(t,s){let e=[],i=["CREATE","POLICY"];if(t.policy_name&&i.push(h.quoteIdentifier(t.policy_name)),e.push(i.join(" ")),t.table&&(s.isPretty()?e.push(s.newline()+s.indent(`ON ${this.RangeVar(t.table,s)}`)):(e.push("ON"),e.push(this.RangeVar(t.table,s)))),t.permissive===void 0?s.isPretty()?e.push(s.newline()+s.indent("AS RESTRICTIVE")):e.push("AS","RESTRICTIVE"):t.permissive===true&&(s.isPretty()?e.push(s.newline()+s.indent("AS PERMISSIVE")):e.push("AS","PERMISSIVE")),t.cmd_name&&(s.isPretty()?e.push(s.newline()+s.indent(`FOR ${t.cmd_name.toUpperCase()}`)):e.push("FOR",t.cmd_name.toUpperCase())),t.roles&&t.roles.length>0){let r=c.unwrapList(t.roles).map(n=>this.visit(n,s));s.isPretty()?e.push(s.newline()+s.indent(`TO ${r.join(", ")}`)):(e.push("TO"),e.push(r.join(", ")));}if(t.qual)if(s.isPretty()){let r=this.visit(t.qual,s);e.push(s.newline()+s.indent("USING (")),e.push(s.newline()+s.indent(s.indent(r))),e.push(s.newline()+s.indent(")"));}else e.push("USING"),e.push(`(${this.visit(t.qual,s)})`);if(t.with_check)if(s.isPretty()){let r=this.visit(t.with_check,s);e.push(s.newline()+s.indent("WITH CHECK (")),e.push(s.newline()+s.indent(s.indent(r))),e.push(s.newline()+s.indent(")"));}else e.push("WITH CHECK"),e.push(`(${this.visit(t.with_check,s)})`);return s.isPretty()?e.join(""):e.join(" ")}AlterPolicyStmt(t,s){let e=["ALTER","POLICY"];if(t.policy_name&&e.push(h.quoteIdentifier(t.policy_name)),t.table&&(e.push("ON"),e.push(this.RangeVar(t.table,s))),t.roles&&t.roles.length>0){e.push("TO");let i=c.unwrapList(t.roles).map(r=>this.visit(r,s));e.push(i.join(", "));}return t.qual&&(e.push("USING"),e.push(`(${this.visit(t.qual,s)})`)),t.with_check&&(e.push("WITH CHECK"),e.push(`(${this.visit(t.with_check,s)})`)),e.join(" ")}CreateUserMappingStmt(t,s){let e=["CREATE"];if(t.if_not_exists&&e.push("IF","NOT","EXISTS"),e.push("USER","MAPPING"),e.push("FOR"),t.user?e.push(this.RoleSpec(t.user,s)):e.push("CURRENT_USER"),e.push("SERVER"),t.servername&&e.push(h.quoteIdentifier(t.servername)),t.options&&t.options.length>0){e.push("OPTIONS");let i=s.spawn("CreateUserMappingStmt"),r=c.unwrapList(t.options).map(n=>this.visit(n,i));e.push(`(${r.join(", ")})`);}return e.join(" ")}CreateStatsStmt(t,s){let e=["CREATE"];if(t.if_not_exists&&e.push("IF","NOT","EXISTS"),e.push("STATISTICS"),t.defnames&&t.defnames.length>0){let i=c.unwrapList(t.defnames).map(r=>this.visit(r,s));e.push(i.join("."));}if(t.stat_types&&t.stat_types.length>0){let i=c.unwrapList(t.stat_types).map(r=>this.visit(r,s));e.push(`(${i.join(", ")})`);}if(e.push("ON"),t.exprs&&t.exprs.length>0){let i=c.unwrapList(t.exprs).map(r=>this.visit(r,s));e.push(i.join(", "));}if(t.relations&&t.relations.length>0){e.push("FROM");let i=c.unwrapList(t.relations).map(r=>this.visit(r,s));e.push(i.join(", "));}return e.join(" ")}StatsElem(t,s){return t.name?this.quoteIfNeeded(t.name):t.expr?`(${this.visit(t.expr,s)})`:""}CreatePublicationStmt(t,s){let e=["CREATE","PUBLICATION"];if(t.pubname&&e.push(h.quoteIdentifier(t.pubname)),t.pubobjects&&t.pubobjects.length>0){e.push("FOR","TABLE");let i=c.unwrapList(t.pubobjects).map(r=>this.visit(r,s));e.push(i.join(", "));}else t.for_all_tables&&e.push("FOR","ALL","TABLES");if(t.options&&t.options.length>0){e.push("WITH");let i=c.unwrapList(t.options).map(r=>this.visit(r,s));e.push(`(${i.join(", ")})`);}return e.join(" ")}CreateSubscriptionStmt(t,s){let e=["CREATE","SUBSCRIPTION"];if(t.subname&&e.push(h.quoteIdentifier(t.subname)),e.push("CONNECTION"),t.conninfo&&e.push(`'${t.conninfo}'`),e.push("PUBLICATION"),t.publication&&t.publication.length>0){let i=c.unwrapList(t.publication).map(r=>this.visit(r,s));e.push(i.join(", "));}if(t.options&&t.options.length>0){e.push("WITH");let i=c.unwrapList(t.options).map(r=>this.visit(r,s));e.push(`(${i.join(", ")})`);}return e.join(" ")}AlterPublicationStmt(t,s){let e=["ALTER","PUBLICATION"];if(t.pubname&&e.push(h.quoteIdentifier(t.pubname)),t.action)switch(t.action){case "AP_AddObjects":e.push("ADD");break;case "AP_DropObjects":e.push("DROP");break;case "AP_SetObjects":e.push("SET");break;default:throw new Error(`Unsupported AlterPublicationStmt action: ${t.action}`)}if(t.for_all_tables)e.push("FOR ALL TABLES");else if(t.pubobjects&&t.pubobjects.length>0){e.push("FOR TABLE");let i=c.unwrapList(t.pubobjects).map(r=>this.visit(r,s));e.push(i.join(", "));}if(t.options&&t.options.length>0){e.push("WITH");let i=c.unwrapList(t.options).map(r=>this.visit(r,s));e.push(`(${i.join(", ")})`);}return e.join(" ")}AlterSubscriptionStmt(t,s){let e=["ALTER","SUBSCRIPTION"];if(t.subname&&e.push(h.quoteIdentifier(t.subname)),t.kind)switch(t.kind){case "ALTER_SUBSCRIPTION_OPTIONS":e.push("SET");break;case "ALTER_SUBSCRIPTION_CONNECTION":e.push("CONNECTION"),t.conninfo&&e.push(`'${t.conninfo}'`);break;case "ALTER_SUBSCRIPTION_SET_PUBLICATION":if(e.push("SET PUBLICATION"),t.publication&&t.publication.length>0){let i=c.unwrapList(t.publication).map(r=>this.visit(r,s));e.push(i.join(", "));}break;case "ALTER_SUBSCRIPTION_REFRESH":e.push("REFRESH PUBLICATION");break;case "ALTER_SUBSCRIPTION_ENABLED":e.push("ENABLE");break;case "ALTER_SUBSCRIPTION_SKIP":e.push("SKIP");break;default:throw new Error(`Unsupported AlterSubscriptionStmt kind: ${t.kind}`)}if(t.options&&t.options.length>0){e.push("WITH");let i=c.unwrapList(t.options).map(r=>this.visit(r,s));e.push(`(${i.join(", ")})`);}return e.join(" ")}DropSubscriptionStmt(t,s){let e=["DROP","SUBSCRIPTION"];if(t.missing_ok&&e.push("IF EXISTS"),t.subname&&e.push(h.quoteIdentifier(t.subname)),t.behavior)switch(t.behavior){case "DROP_CASCADE":e.push("CASCADE");break;case "DROP_RESTRICT":e.push("RESTRICT");break}return e.join(" ")}DoStmt(t,s){let e=["DO"];if(t.args&&t.args.length>0){let i=s.spawn("DoStmt"),r=c.unwrapList(t.args),n=[];for(let a of r)if(this.getNodeType(a)==="DefElem"){let o=this.getNodeData(a);if(o.defname==="language"){let p=this.visit(o.arg,i);n.push(`LANGUAGE ${p}`);}else if(o.defname==="as")if(this.getNodeType(o.arg)==="String"){let f=this.getNodeData(o.arg),m=this.getFunctionDelimiter(f.sval);n.push(`${m}${f.sval}${m}`);}else n.push(this.visit(o.arg,i));}e.push(...n);}return e.join(" ")}generateUniqueDollarTag(t){let s=/\$[a-zA-Z0-9_]*\$/g,e=t.match(s)||[];if(e.length===0)return "$$";let i=new Set(e);if(i.has("$$")){let r=1,n=`$do${r}$`;for(;i.has(n);)r++,n=`$do${r}$`;return n}return "$$"}InlineCodeBlock(t,s){if(t.source_text){let i=this.getFunctionDelimiter(t.source_text);return `${i}${t.source_text}${i}`}let e=this.options.functionDelimiter||"$$";return `${e}${e}`}CallContext(t,s){return t.atomic!==void 0?t.atomic?"ATOMIC":"NOT ATOMIC":""}ConstraintsSetStmt(t,s){let e=["SET","CONSTRAINTS"];if(t.constraints&&t.constraints.length>0){let i=c.unwrapList(t.constraints).map(r=>this.visit(r,s));e.push(i.join(", "));}else e.push("ALL");return e.push(t.deferred?"DEFERRED":"IMMEDIATE"),e.join(" ")}AlterSystemStmt(t,s){let e=["ALTER","SYSTEM"];if(t.setstmt){let r=this.VariableSetStmt(t.setstmt,s).replace(/^SET\s+/,"");e.push("SET",r);}return e.join(" ")}VacuumRelation(t,s){let e=[];if(t.relation&&e.push(this.RangeVar(t.relation,s)),t.va_cols&&t.va_cols.length>0){e.push("(");let i=c.unwrapList(t.va_cols).map(r=>this.visit(r,s));e.push(i.join(", ")),e.push(")");}return e.join(" ")}DropOwnedStmt(t,s){let e=["DROP","OWNED","BY"];if(t.roles&&t.roles.length>0){let i=c.unwrapList(t.roles).map(r=>this.visit(r,s));e.push(i.join(", "));}if(t.behavior)switch(t.behavior){case "DROP_CASCADE":e.push("CASCADE");break;case "DROP_RESTRICT":e.push("RESTRICT");break}return e.join(" ")}ReassignOwnedStmt(t,s){let e=["REASSIGN","OWNED","BY"];if(t.roles&&t.roles.length>0){let i=c.unwrapList(t.roles).map(r=>this.visit(r,s));e.push(i.join(", "));}return e.push("TO"),t.newrole&&e.push(this.RoleSpec(t.newrole,s)),e.join(" ")}AlterTSDictionaryStmt(t,s){let e=["ALTER","TEXT","SEARCH","DICTIONARY"];if(t.dictname&&t.dictname.length>0){let i=c.unwrapList(t.dictname).map(r=>this.visit(r,s));e.push(i.join("."));}if(t.options&&t.options.length>0){e.push("(");let i=c.unwrapList(t.options).map(r=>this.visit(r,s));e.push(i.join(", ")),e.push(")");}return e.join(" ")}AlterTSConfigurationStmt(t,s){let e=["ALTER","TEXT","SEARCH","CONFIGURATION"];if(t.cfgname&&t.cfgname.length>0){let i=c.unwrapList(t.cfgname).map(r=>this.visit(r,s));e.push(i.join("."));}if(t.kind)switch(t.kind){case "ALTER_TSCONFIG_ADD_MAPPING":if(e.push("ADD","MAPPING","FOR"),t.tokentype&&t.tokentype.length>0){let i=c.unwrapList(t.tokentype).map(r=>this.visit(r,s));e.push(i.join(", "));}if(t.dicts&&t.dicts.length>0){e.push("WITH");let i=c.unwrapList(t.dicts).map(r=>r.List&&r.List.items?c.unwrapList(r.List.items).map(n=>this.visit(n,s)).join("."):this.visit(r,s));e.push(i.join(", "));}break;case "ALTER_TSCONFIG_ALTER_MAPPING_FOR_TOKEN":if(e.push("ALTER","MAPPING","FOR"),t.tokentype&&t.tokentype.length>0){let i=c.unwrapList(t.tokentype).map(r=>this.visit(r,s));e.push(i.join(", "));}if(t.dicts&&t.dicts.length>0){e.push("WITH");let i=c.unwrapList(t.dicts).map(r=>r.List&&r.List.items?c.unwrapList(r.List.items).map(n=>this.visit(n,s)).join("."):this.visit(r,s));e.push(i.join(", "));}break;case "ALTER_TSCONFIG_REPLACE_DICT":if(e.push("ALTER","MAPPING","REPLACE"),t.dicts&&t.dicts.length>=2){let i=c.unwrapList(t.dicts).map(r=>r.List&&r.List.items?c.unwrapList(r.List.items).map(n=>this.visit(n,s)).join("."):this.visit(r,s));e.push(i[0],"WITH",i.slice(1).join(", "));}break;case "ALTER_TSCONFIG_REPLACE_DICT_FOR_TOKEN":if(e.push("ALTER","MAPPING","FOR"),t.tokentype&&t.tokentype.length>0){let i=c.unwrapList(t.tokentype).map(r=>this.visit(r,s));e.push(i.join(", "));}if(t.dicts&&t.dicts.length>=2){e.push("REPLACE");let i=c.unwrapList(t.dicts).map(r=>r.List&&r.List.items?c.unwrapList(r.List.items).map(n=>this.visit(n,s)).join("."):this.visit(r,s));e.push(i[0],"WITH",i.slice(1).join(", "));}break;case "ALTER_TSCONFIG_DROP_MAPPING":if(e.push("DROP","MAPPING","FOR"),t.tokentype&&t.tokentype.length>0){let i=c.unwrapList(t.tokentype).map(r=>this.visit(r,s));e.push(i.join(", "));}break;default:throw new Error(`Unsupported AlterTSConfigurationStmt kind: ${t.kind}`)}return e.join(" ")}ClosePortalStmt(t,s){let e=["CLOSE"];return t.portalname?e.push(h.quoteIdentifier(t.portalname)):e.push("ALL"),e.join(" ")}FetchStmt(t,s){let e=[t.ismove?"MOVE":"FETCH"],i=t.howMany===9223372036854776e3;if(t.direction)switch(t.direction){case "FETCH_FORWARD":i?e.push("FORWARD","ALL"):t.howMany!==void 0&&t.howMany!==null?e.push("FORWARD",t.howMany.toString()):e.push("FORWARD");break;case "FETCH_BACKWARD":i?e.push("BACKWARD","ALL"):t.howMany!==void 0&&t.howMany!==null?e.push("BACKWARD",t.howMany.toString()):e.push("BACKWARD");break;case "FETCH_ABSOLUTE":t.howMany!==void 0&&t.howMany!==null&&e.push("ABSOLUTE",t.howMany.toString());break;case "FETCH_RELATIVE":t.howMany!==void 0&&t.howMany!==null?e.push("RELATIVE",t.howMany.toString()):e.push("RELATIVE","0");break;default:throw new Error(`Unsupported FetchStmt direction: ${t.direction}`)}else i&&e.push("ALL");return t.portalname&&e.push(h.quoteIdentifier(t.portalname)),e.join(" ")}AlterStatsStmt(t,s){let e=["ALTER","STATISTICS"];if(t.defnames&&t.defnames.length>0){let i=c.unwrapList(t.defnames).map(r=>this.visit(r,s));e.push(i.join("."));}return e.push("SET","STATISTICS"),t.stxstattarget&&e.push(this.visit(t.stxstattarget,s)),e.join(" ")}ObjectWithArgs(t,s){let e="";if(t.objname&&t.objname.length>0){let i=s.spawn("ObjectWithArgs");e=c.unwrapList(t.objname).map(n=>this.visit(n,i)).join(".");}if(t.objfuncargs&&t.objfuncargs.length>0){let i=c.unwrapList(t.objfuncargs).map(r=>this.visit(r,s));e+=`(${i.join(", ")})`;}else if(t.objargs&&t.objargs.length>0){let i=c.unwrapList(t.objargs).map(r=>!r||Object.keys(r).length===0?"NONE":this.visit(r,s));e+=`(${i.join(", ")})`;}else t.args_unspecified||((s.parentNodeTypes.includes("CommentStmt")||s.parentNodeTypes.includes("DropStmt"))&&s.objtype==="OBJECT_AGGREGATE"?e+="(*)":s.parentNodeTypes.includes("CreateOpClassItem")||(e+="()"));return e}AlterOperatorStmt(t,s){let e=["ALTER","OPERATOR"];if(t.opername&&e.push(this.ObjectWithArgs(t.opername,s)),e.push("SET"),t.options&&t.options.length>0){let i=s.spawn("AlterOperatorStmt"),r=c.unwrapList(t.options).map(n=>this.visit(n,i));e.push(`(${r.join(", ")})`);}return e.join(" ")}AlterFdwStmt(t,s){let e=["ALTER","FOREIGN","DATA","WRAPPER"];if(t.fdwname&&e.push(h.quoteIdentifier(t.fdwname)),t.func_options&&t.func_options.length>0){let i=s.spawn("AlterFdwStmt"),r=c.unwrapList(t.func_options).map(n=>this.visit(n,i));e.push(r.join(" "));}if(t.options&&t.options.length>0){e.push("OPTIONS");let i=s.spawn("AlterFdwStmt"),r=c.unwrapList(t.options).map(n=>this.visit(n,i));e.push(`(${r.join(", ")})`);}return e.join(" ")}CreateForeignServerStmt(t,s){let e=["CREATE","SERVER"];if(t.if_not_exists&&e.push("IF","NOT","EXISTS"),t.servername&&e.push(h.quoteIdentifier(t.servername)),t.servertype&&e.push("TYPE",h.escape(t.servertype)),t.version&&e.push("VERSION",h.escape(t.version)),t.fdwname&&e.push("FOREIGN","DATA","WRAPPER",h.quoteIdentifier(t.fdwname)),t.options&&t.options.length>0){e.push("OPTIONS"),e.push("(");let i=s.spawn("CreateForeignServerStmt"),r=c.unwrapList(t.options).map(n=>this.visit(n,i));e.push(r.join(", ")),e.push(")");}return e.join(" ")}AlterForeignServerStmt(t,s){let e=["ALTER","SERVER"];if(t.servername&&e.push(h.quoteIdentifier(t.servername)),t.version&&e.push("VERSION",h.escape(t.version)),t.options&&t.options.length>0){e.push("OPTIONS"),e.push("(");let i=s.spawn("AlterForeignServerStmt"),r=c.unwrapList(t.options).map(n=>this.visit(n,i));e.push(r.join(", ")),e.push(")");}return e.join(" ")}AlterUserMappingStmt(t,s){let e=["ALTER","USER","MAPPING","FOR"];if(t.user?e.push(this.RoleSpec(t.user,s)):e.push("CURRENT_USER"),e.push("SERVER"),t.servername&&e.push(h.quoteIdentifier(t.servername)),t.options&&t.options.length>0){e.push("OPTIONS");let i=s.spawn("AlterUserMappingStmt"),r=c.unwrapList(t.options).map(n=>this.visit(n,i));e.push(`(${r.join(", ")})`);}return e.join(" ")}DropUserMappingStmt(t,s){let e=["DROP","USER","MAPPING"];return t.missing_ok&&e.push("IF","EXISTS"),e.push("FOR"),t.user?e.push(this.RoleSpec(t.user,s)):e.push("CURRENT_USER"),e.push("SERVER"),t.servername&&e.push(h.quoteIdentifier(t.servername)),e.join(" ")}ImportForeignSchemaStmt(t,s){let e=["IMPORT","FOREIGN","SCHEMA"];if(t.remote_schema&&e.push(h.quoteIdentifier(t.remote_schema)),t.list_type)switch(t.list_type){case "FDW_IMPORT_SCHEMA_ALL":break;case "FDW_IMPORT_SCHEMA_LIMIT_TO":if(e.push("LIMIT","TO"),t.table_list&&t.table_list.length>0){let i=c.unwrapList(t.table_list).map(r=>this.visit(r,s));e.push(`(${i.join(", ")})`);}break;case "FDW_IMPORT_SCHEMA_EXCEPT":if(e.push("EXCEPT"),t.table_list&&t.table_list.length>0){let i=c.unwrapList(t.table_list).map(r=>this.visit(r,s));e.push(`(${i.join(", ")})`);}break;default:throw new Error(`Unsupported ImportForeignSchemaStmt list_type: ${t.list_type}`)}if(e.push("FROM","SERVER"),t.server_name&&e.push(h.quoteIdentifier(t.server_name)),e.push("INTO"),t.local_schema&&e.push(h.quoteIdentifier(t.local_schema)),t.options&&t.options.length>0){let i=s.spawn("ImportForeignSchemaStmt"),r=c.unwrapList(t.options).map(n=>this.visit(n,i));e.push(`OPTIONS (${r.join(", ")})`);}return e.join(" ")}ClusterStmt(t,s){let e=["CLUSTER"];if(t.relation&&(e.push(this.RangeVar(t.relation,s)),t.indexname&&e.push("USING",h.quoteIdentifier(t.indexname))),t.params&&t.params.length>0){let i=c.unwrapList(t.params).map(r=>this.visit(r,s));e.push(`(${i.join(", ")})`);}return e.join(" ")}VacuumStmt(t,s){let e=[t.is_vacuumcmd?"VACUUM":"ANALYZE"];if(t.options&&t.options.length>0){let i=c.unwrapList(t.options).map(r=>this.visit(r,s));e.push(`(${i.join(", ")})`);}if(t.rels&&t.rels.length>0){let i=c.unwrapList(t.rels).map(r=>this.visit(r,s));e.push(i.join(", "));}return e.join(" ")}ExplainStmt(t,s){let e=["EXPLAIN"];if(t.options&&t.options.length>0){let i=s.spawn("ExplainStmt"),r=c.unwrapList(t.options).map(n=>this.visit(n,i));e.push(`(${r.join(", ")})`);}return t.query&&e.push(this.visit(t.query,s)),e.join(" ")}ReindexStmt(t,s){let e=["REINDEX"];if(t.params&&t.params.length>0){let i=c.unwrapList(t.params).map(r=>this.visit(r,s));e.push(`(${i.join(", ")})`);}if(t.kind)switch(t.kind){case "REINDEX_OBJECT_INDEX":e.push("INDEX");break;case "REINDEX_OBJECT_TABLE":e.push("TABLE");break;case "REINDEX_OBJECT_SCHEMA":e.push("SCHEMA");break;case "REINDEX_OBJECT_SYSTEM":e.push("SYSTEM");break;case "REINDEX_OBJECT_DATABASE":e.push("DATABASE");break;default:throw new Error(`Unsupported ReindexStmt kind: ${t.kind}`)}return t.relation&&e.push(this.RangeVar(t.relation,s)),t.name&&e.push(h.quoteIdentifier(t.name)),e.join(" ")}CallStmt(t,s){let e=["CALL"];if(t.funccall){let i=t.funccall;if(i.funcname&&i.funcname.length>0){let n=i.funcname.map(u=>u.String?u.String.sval:this.visit(u,s)).join("."),a="";i.args&&i.args.length>0?a=`(${i.args.map(o=>this.visit(o,s)).join(", ")})`:a="()",e.push(`${n}${a}`);}}else if(t.funcexpr)e.push(this.FuncExpr(t.funcexpr,s));else throw new Error("CallStmt requires either funccall or funcexpr");return e.join(" ")}CreatedbStmt(t,s){let e=["CREATE DATABASE"];if(!t.dbname)throw new Error("CreatedbStmt requires dbname");if(e.push(h.quoteIdentifier(t.dbname)),t.options&&t.options.length>0){let i=c.unwrapList(t.options).map(r=>this.visit(r,s)).join(" ");e.push("WITH",i);}return e.join(" ")}DropdbStmt(t,s){let e=["DROP DATABASE"];if(t.missing_ok&&e.push("IF EXISTS"),!t.dbname)throw new Error("DropdbStmt requires dbname");if(e.push(h.quoteIdentifier(t.dbname)),t.options&&t.options.length>0){let i=c.unwrapList(t.options).map(r=>this.visit(r,s)).join(" ");e.push("WITH",i);}return e.join(" ")}RenameStmt(t,s){let e=["ALTER"];if(!t.renameType)throw new Error("RenameStmt requires renameType");switch(t.renameType){case "OBJECT_TABLE":e.push("TABLE");break;case "OBJECT_VIEW":e.push("VIEW");break;case "OBJECT_INDEX":e.push("INDEX");break;case "OBJECT_SEQUENCE":e.push("SEQUENCE");break;case "OBJECT_FUNCTION":e.push("FUNCTION");break;case "OBJECT_PROCEDURE":e.push("PROCEDURE");break;case "OBJECT_SCHEMA":e.push("SCHEMA");break;case "OBJECT_DATABASE":e.push("DATABASE");break;case "OBJECT_COLUMN":t.relationType==="OBJECT_FOREIGN_TABLE"?e.push("FOREIGN TABLE"):t.relationType==="OBJECT_VIEW"?e.push("VIEW"):e.push("TABLE");break;case "OBJECT_DOMAIN":e.push("DOMAIN");break;case "OBJECT_TYPE":e.push("TYPE");break;case "OBJECT_DOMCONSTRAINT":e.push("DOMAIN");break;case "OBJECT_TABCONSTRAINT":e.push("TABLE");break;case "OBJECT_AGGREGATE":e.push("AGGREGATE");break;case "OBJECT_COLLATION":e.push("COLLATION");break;case "OBJECT_CONVERSION":e.push("CONVERSION");break;case "OBJECT_EXTENSION":e.push("EXTENSION");break;case "OBJECT_FOREIGN_SERVER":e.push("SERVER");break;case "OBJECT_FOREIGN_TABLE":e.push("FOREIGN TABLE");break;case "OBJECT_LANGUAGE":e.push("LANGUAGE");break;case "OBJECT_MATVIEW":e.push("MATERIALIZED VIEW");break;case "OBJECT_OPCLASS":e.push("OPERATOR CLASS");break;case "OBJECT_OPERATOR":e.push("OPERATOR");break;case "OBJECT_OPFAMILY":e.push("OPERATOR FAMILY");break;case "OBJECT_POLICY":e.push("POLICY"),t.subname&&e.push(h.quoteIdentifier(t.subname));break;case "OBJECT_PUBLICATION":e.push("PUBLICATION");break;case "OBJECT_ROLE":e.push("ROLE");break;case "OBJECT_RULE":e.push("RULE");break;case "OBJECT_SUBSCRIPTION":e.push("SUBSCRIPTION");break;case "OBJECT_TABLESPACE":e.push("TABLESPACE");break;case "OBJECT_TRIGGER":e.push("TRIGGER");break;case "OBJECT_TSCONFIGURATION":e.push("TEXT SEARCH CONFIGURATION");break;case "OBJECT_TSDICTIONARY":e.push("TEXT SEARCH DICTIONARY");break;case "OBJECT_TSPARSER":e.push("TEXT SEARCH PARSER");break;case "OBJECT_TSTEMPLATE":e.push("TEXT SEARCH TEMPLATE");break;case "OBJECT_FDW":e.push("FOREIGN DATA WRAPPER");break;case "OBJECT_EVENT_TRIGGER":e.push("EVENT TRIGGER");break;case "OBJECT_ATTRIBUTE":t.relationType==="OBJECT_TYPE"?e.push("TYPE"):e.push("TABLE");break;case "OBJECT_ROUTINE":e.push("ROUTINE");break;default:throw new Error(`Unsupported RenameStmt renameType: ${t.renameType}`)}if(t.missing_ok&&e.push("IF EXISTS"),t.renameType==="OBJECT_RULE"&&t.subname&&t.relation)e.push(h.quoteIdentifier(t.subname)),e.push("ON"),e.push(this.RangeVar(t.relation,s));else if(t.relation){let i=s.spawn("RenameStmt",{objtype:t.relationType});t.renameType==="OBJECT_POLICY"&&e.push("ON"),e.push(this.RangeVar(t.relation,i));}else if(t.object)if((t.renameType==="OBJECT_OPFAMILY"||t.renameType==="OBJECT_OPCLASS")&&t.object.List){let i=c.unwrapList(t.object);if(i.length===2){let r=i[0].String?.sval||"",n=i[1].String?.sval||"";e.push(`${h.quoteIdentifier(n)} USING ${r}`);}else e.push(this.visit(t.object,s));}else if(t.renameType==="OBJECT_SCHEMA"&&t.object.List){let i=c.unwrapList(t.object);i.length>0&&i[0].String?e.push(this.quoteIfNeeded(i[0].String.sval)):e.push(this.visit(t.object,s));}else e.push(this.visit(t.object,s));if(t.renameType==="OBJECT_COLUMN"&&t.subname?e.push("RENAME COLUMN",h.quoteIdentifier(t.subname),"TO"):t.renameType==="OBJECT_DOMCONSTRAINT"&&t.subname?e.push("RENAME CONSTRAINT",h.quoteIdentifier(t.subname),"TO"):t.renameType==="OBJECT_TABCONSTRAINT"&&t.subname?e.push("RENAME CONSTRAINT",h.quoteIdentifier(t.subname),"TO"):t.renameType==="OBJECT_ATTRIBUTE"&&t.subname?e.push("RENAME ATTRIBUTE",h.quoteIdentifier(t.subname),"TO"):t.renameType==="OBJECT_ROLE"&&t.subname?e.push(h.quoteIdentifier(t.subname),"RENAME TO"):t.renameType==="OBJECT_SCHEMA"&&t.subname?e.push(this.quoteIfNeeded(t.subname),"RENAME TO"):(t.renameType,e.push("RENAME TO")),!t.newname)throw new Error("RenameStmt requires newname");return e.push(h.quoteIdentifier(t.newname)),t.behavior==="DROP_CASCADE"&&e.push("CASCADE"),e.join(" ")}AlterOwnerStmt(t,s){let e=["ALTER"];if(!t.objectType)throw new Error("AlterOwnerStmt requires objectType");if(e.push(this.getObjectTypeKeyword(t.objectType)),t.relation)e.push(this.RangeVar(t.relation,s));else if(t.object)if((t.objectType==="OBJECT_OPFAMILY"||t.objectType==="OBJECT_OPCLASS")&&t.object.List){let i=c.unwrapList(t.object);if(i.length===2){let r=i[0].String?.sval||"",n=i[1].String?.sval||"";e.push(`${h.quoteIdentifier(n)} USING ${r}`);}else e.push(this.visit(t.object,s));}else e.push(this.visit(t.object,s));if(e.push("OWNER TO"),!t.newowner)throw new Error("AlterOwnerStmt requires newowner");return e.push(this.RoleSpec(t.newowner,s)),e.join(" ")}GrantStmt(t,s){let e=[];if(t.is_grant?e.push("GRANT"):(e.push("REVOKE"),t.grant_option&&e.push("GRANT OPTION FOR")),t.privileges&&t.privileges.length>0){let i=s.spawn("GrantStmt"),r=c.unwrapList(t.privileges).map(n=>this.visit(n,i)).join(", ");e.push(r);}else e.push("ALL");if(e.push("ON"),t.objtype&&t.targtype==="ACL_TARGET_DEFAULTS")switch(t.objtype){case "OBJECT_TABLE":e.push("TABLES");break;case "OBJECT_SEQUENCE":e.push("SEQUENCES");break;case "OBJECT_FUNCTION":e.push("FUNCTIONS");break;case "OBJECT_PROCEDURE":e.push("PROCEDURES");break;case "OBJECT_ROUTINE":e.push("ROUTINES");break;case "OBJECT_TYPE":e.push("TYPES");break;case "OBJECT_SCHEMA":e.push("SCHEMAS");break;}switch(t.targtype){case "ACL_TARGET_OBJECT":if(t.objtype==="OBJECT_SCHEMA"?e.push("SCHEMA"):t.objtype==="OBJECT_LANGUAGE"?e.push("LANGUAGE"):t.objtype==="OBJECT_FUNCTION"?e.push("FUNCTION"):t.objtype==="OBJECT_PROCEDURE"?e.push("PROCEDURE"):t.objtype==="OBJECT_TYPE"?e.push("TYPE"):t.objtype==="OBJECT_DOMAIN"?e.push("DOMAIN"):t.objtype==="OBJECT_LARGEOBJECT"?e.push("LARGE OBJECT"):t.objtype==="OBJECT_FDW"?e.push("FOREIGN","DATA","WRAPPER"):t.objtype==="OBJECT_FOREIGN_SERVER"?e.push("FOREIGN","SERVER"):t.objtype==="OBJECT_DATABASE"&&e.push("DATABASE"),t.objects&&t.objects.length>0){let i=c.unwrapList(t.objects).map(r=>this.visit(r,s)).join(", ");e.push(i);}break;case "ACL_TARGET_ALL_IN_SCHEMA":switch(t.objtype){case "OBJECT_TABLE":e.push("ALL TABLES IN SCHEMA");break;case "OBJECT_SEQUENCE":e.push("ALL SEQUENCES IN SCHEMA");break;case "OBJECT_FUNCTION":e.push("ALL FUNCTIONS IN SCHEMA");break;case "OBJECT_PROCEDURE":e.push("ALL PROCEDURES IN SCHEMA");break;case "OBJECT_ROUTINE":e.push("ALL ROUTINES IN SCHEMA");break;case "OBJECT_TYPE":e.push("ALL TYPES IN SCHEMA");break;default:e.push("ALL TABLES IN SCHEMA");break}if(t.objects&&t.objects.length>0){let i=c.unwrapList(t.objects).map(r=>this.visit(r,s)).join(", ");e.push(i);}break;default:if(t.objects&&t.objects.length>0){let i=c.unwrapList(t.objects).map(r=>this.visit(r,s)).join(", ");e.push(i);}}if(t.is_grant?e.push("TO"):e.push("FROM"),t.grantees&&t.grantees.length>0){let i=c.unwrapList(t.grantees).map(r=>this.visit(r,s)).join(", ");e.push(i);}return t.grant_option&&t.is_grant&&e.push("WITH GRANT OPTION"),t.is_grant||(t.behavior==="DROP_CASCADE"?e.push("CASCADE"):t.behavior==="DROP_RESTRICT"&&e.push("RESTRICT")),e.join(" ")}GrantRoleStmt(t,s){let e=[],i=false,r=false,n=false,a,u,o;if(t.opt&&t.opt.length>0){let p=c.unwrapList(t.opt),f=p.find(E=>E.DefElem&&E.DefElem.defname==="inherit"),m=p.find(E=>E.String&&E.String.sval==="admin"||E.DefElem&&E.DefElem.defname==="admin"),T=p.find(E=>E.DefElem&&E.DefElem.defname==="set");f&&f.DefElem&&(i=true,a=f.DefElem.arg?.Boolean?.boolval),m&&(r=true,m.DefElem&&m.DefElem.arg&&(u=m.DefElem.arg.Boolean?.boolval)),T&&T.DefElem&&(n=true,o=T.DefElem.arg?.Boolean?.boolval);}if(t.is_grant?e.push("GRANT"):(e.push("REVOKE"),i?e.push("INHERIT OPTION FOR"):r&&e.push("ADMIN OPTION FOR")),t.granted_roles&&t.granted_roles.length>0){let p=c.unwrapList(t.granted_roles).map(f=>this.visit(f,s)).join(", ");e.push(p);}if(t.is_grant?e.push("TO"):e.push("FROM"),t.grantee_roles&&t.grantee_roles.length>0){let p=c.unwrapList(t.grantee_roles).map(f=>this.visit(f,s)).join(", ");e.push(p);}if(t.is_grant){let p=[];r&&(u===true?p.push("ADMIN OPTION"):u===false?p.push("ADMIN FALSE"):p.push("ADMIN OPTION")),i&&(a===true?p.push("INHERIT OPTION"):a===false&&p.push("INHERIT FALSE")),n&&(o===true?p.push("SET TRUE"):o===false&&p.push("SET FALSE")),p.length>0&&e.push("WITH",p.join(", "));}return e.join(" ")}SecLabelStmt(t,s){let e=["SECURITY LABEL"];if(t.provider&&e.push("FOR",h.quoteIdentifier(t.provider)),e.push("ON"),t.objtype)switch(t.objtype){case "OBJECT_TABLE":e.push("TABLE");break;case "OBJECT_COLUMN":e.push("COLUMN");break;case "OBJECT_FUNCTION":e.push("FUNCTION");break;case "OBJECT_SCHEMA":e.push("SCHEMA");break;case "OBJECT_DATABASE":e.push("DATABASE");break;case "OBJECT_ROLE":e.push("ROLE");break;default:e.push(t.objtype.replace("OBJECT_",""));}return t.object&&e.push(this.visit(t.object,s)),e.push("IS"),t.label?e.push(`'${t.label}'`):e.push("NULL"),e.join(" ")}AlterDefaultPrivilegesStmt(t,s){let e=["ALTER DEFAULT PRIVILEGES"];if(t.options&&t.options.length>0){let i=c.unwrapList(t.options);for(let r of i){let n=this.getNodeData(r);if(n.defname==="schemas"){if(e.push("IN SCHEMA"),n.arg){let a=c.unwrapList(n.arg).map(u=>this.visit(u,s)).join(", ");e.push(a);}}else if(n.defname==="roles"&&(e.push("FOR ROLE"),n.arg)){let a=c.unwrapList(n.arg).map(u=>this.visit(u,s)).join(", ");e.push(a);}}}if(t.action){let i=this.GrantStmt(t.action,s);if(s.isPretty())return e.join(" ")+s.newline()+s.indent(i);e.push(i);}return e.join(" ")}CreateConversionStmt(t,s){let e=["CREATE"];if(t.def&&e.push("DEFAULT"),e.push("CONVERSION"),t.conversion_name&&t.conversion_name.length>0){let i=c.unwrapList(t.conversion_name).map(r=>this.visit(r,s)).join(".");e.push(i);}if(t.for_encoding_name&&e.push("FOR",`'${t.for_encoding_name}'`),t.to_encoding_name&&e.push("TO",`'${t.to_encoding_name}'`),t.func_name&&t.func_name.length>0){e.push("FROM");let i=c.unwrapList(t.func_name).map(r=>this.visit(r,s)).join(".");e.push(i);}return e.join(" ")}CreateCastStmt(t,s){let e=["CREATE CAST"];if(e.push("("),t.sourcetype&&e.push(this.TypeName(t.sourcetype,s)),e.push("AS"),t.targettype&&e.push(this.TypeName(t.targettype,s)),e.push(")"),t.func?(e.push("WITH FUNCTION"),e.push(this.ObjectWithArgs(t.func,s))):t.inout?e.push("WITH INOUT"):e.push("WITHOUT FUNCTION"),t.context)switch(t.context){case "COERCION_IMPLICIT":e.push("AS IMPLICIT");break;case "COERCION_ASSIGNMENT":e.push("AS ASSIGNMENT");break;case "COERCION_EXPLICIT":break;default:throw new Error(`Unsupported CreateCastStmt context: ${t.context}`)}else t.context==="COERCION_ASSIGNMENT"&&e.push("AS ASSIGNMENT");return e.join(" ")}CreatePLangStmt(t,s){let e=["CREATE"];if(t.replace&&e.push("OR REPLACE"),t.pltrusted&&e.push("TRUSTED"),e.push("LANGUAGE"),t.plname&&e.push(h.quoteIdentifier(t.plname)),t.plhandler&&t.plhandler.length>0){e.push("HANDLER");let i=c.unwrapList(t.plhandler).map(r=>this.visit(r,s)).join(".");e.push(i);}if(t.plinline&&t.plinline.length>0){e.push("INLINE");let i=c.unwrapList(t.plinline).map(r=>this.visit(r,s)).join(".");e.push(i);}if(t.plvalidator&&t.plvalidator.length>0){e.push("VALIDATOR");let i=c.unwrapList(t.plvalidator).map(r=>this.visit(r,s)).join(".");e.push(i);}return e.join(" ")}CreateTransformStmt(t,s){let e=["CREATE"];t.replace&&e.push("OR REPLACE"),e.push("TRANSFORM FOR"),t.type_name&&e.push(this.TypeName(t.type_name,s)),e.push("LANGUAGE"),t.lang&&e.push(h.quoteIdentifier(t.lang)),e.push("(");let i=[];if(t.fromsql){let r=this.ObjectWithArgs(t.fromsql,s);i.push(`FROM SQL WITH FUNCTION ${r}`);}if(t.tosql){let r=this.ObjectWithArgs(t.tosql,s);i.push(`TO SQL WITH FUNCTION ${r}`);}return e.push(i.join(", ")),e.push(")"),e.join(" ")}CreateTrigStmt(t,s){let e=["CREATE"];if(t.replace&&e.push("OR REPLACE"),t.isconstraint&&e.push("CONSTRAINT"),e.push("TRIGGER"),t.trigname&&e.push(h.quoteIdentifier(t.trigname)),s.isPretty()){let i=[],r=[];t.timing&2?r.push("BEFORE"):t.timing&64?r.push("INSTEAD OF"):r.push("AFTER");let n=[];if(t.events&4&&n.push("INSERT"),t.events&8&&n.push("DELETE"),t.events&16){let u="UPDATE";if(t.columns&&t.columns.length>0){let o=c.unwrapList(t.columns).map(p=>this.visit(p,s)).join(", ");u+=" OF "+o;}n.push(u);}if(t.events&32&&n.push("TRUNCATE"),i.push(s.indent(r.join(" ")+" "+n.join(" OR "))),t.relation&&i.push(s.indent("ON "+this.RangeVar(t.relation,s))),t.transitionRels&&t.transitionRels.length>0){let u=c.unwrapList(t.transitionRels).map(o=>this.visit(o,s)).join(" ");i.push(s.indent("REFERENCING "+u));}if(t.deferrable&&i.push(s.indent("DEFERRABLE")),t.initdeferred&&i.push(s.indent("INITIALLY DEFERRED")),t.row?i.push(s.indent("FOR EACH ROW")):i.push(s.indent("FOR EACH STATEMENT")),t.whenClause){let u="WHEN ("+this.visit(t.whenClause,s)+")";i.push(s.indent(u));}let a="EXECUTE";if(t.funcname&&t.funcname.length>0){let u=c.unwrapList(t.funcname).map(o=>this.visit(o,s)).join(".");a+=" PROCEDURE "+u;}if(t.args&&t.args.length>0){let u=s.spawn("CreateTrigStmt",{isStringLiteral:true}),o=c.unwrapList(t.args).map(p=>this.visit(p,u)).join(", ");a+="("+o+")";}else a+="()";return i.push(s.indent(a)),e.join(" ")+s.newline()+i.join(s.newline())}else {let i=[];t.timing&2?i.push("BEFORE"):t.timing&64?i.push("INSTEAD OF"):i.push("AFTER"),e.push(i.join(" "));let r=[];if(t.events&4&&r.push("INSERT"),t.events&8&&r.push("DELETE"),t.events&16&&r.push("UPDATE"),t.events&32&&r.push("TRUNCATE"),e.push(r.join(" OR ")),t.columns&&t.columns.length>0){e.push("OF");let n=c.unwrapList(t.columns).map(a=>this.visit(a,s)).join(", ");e.push(n);}if(e.push("ON"),t.relation&&e.push(this.RangeVar(t.relation,s)),t.constrrel&&(e.push("FROM"),e.push(this.RangeVar(t.constrrel,s))),t.deferrable&&e.push("DEFERRABLE"),t.initdeferred&&e.push("INITIALLY DEFERRED"),t.transitionRels&&t.transitionRels.length>0){e.push("REFERENCING");let n=c.unwrapList(t.transitionRels).map(a=>this.visit(a,s)).join(" ");e.push(n);}if(t.row?e.push("FOR EACH ROW"):e.push("FOR EACH STATEMENT"),t.whenClause&&(e.push("WHEN"),e.push("("),e.push(this.visit(t.whenClause,s)),e.push(")")),e.push("EXECUTE"),t.funcname&&t.funcname.length>0){let n=c.unwrapList(t.funcname).map(a=>this.visit(a,s)).join(".");e.push("FUNCTION",n);}if(t.args&&t.args.length>0){e.push("(");let n=s.spawn("CreateTrigStmt",{isStringLiteral:true}),a=c.unwrapList(t.args).map(u=>this.visit(u,n)).join(", ");e.push(a),e.push(")");}else e.push("()");return e.join(" ")}}TriggerTransition(t,s){let e=[];return t.isNew?e.push("NEW TABLE AS"):e.push("OLD TABLE AS"),t.name&&e.push(h.quoteIdentifier(t.name)),e.join(" ")}CreateEventTrigStmt(t,s){let e=["CREATE EVENT TRIGGER"];if(t.trigname&&e.push(h.quoteIdentifier(t.trigname)),e.push("ON"),t.eventname&&e.push(t.eventname),t.whenclause&&t.whenclause.length>0){e.push("WHEN");let i=s.spawn("CreateEventTrigStmt"),r=c.unwrapList(t.whenclause).map(n=>this.visit(n,i)).join(" AND ");e.push(r);}if(e.push("EXECUTE"),t.funcname&&t.funcname.length>0){let i=c.unwrapList(t.funcname).map(r=>this.visit(r,s)).join(".");e.push("PROCEDURE",i+"()");}return e.join(" ")}AlterEventTrigStmt(t,s){let e=["ALTER EVENT TRIGGER"];if(t.trigname&&e.push(h.quoteIdentifier(t.trigname)),t.tgenabled)switch(t.tgenabled){case "O":e.push("ENABLE");break;case "D":e.push("DISABLE");break;case "R":e.push("ENABLE REPLICA");break;case "A":e.push("ENABLE ALWAYS");break;default:throw new Error(`Unsupported trigger enable state: ${t.tgenabled}`)}return e.join(" ")}CreateOpClassStmt(t,s){let e=["CREATE OPERATOR CLASS"];if(t.opclassname&&t.opclassname.length>0){let i=c.unwrapList(t.opclassname).map(r=>this.visit(r,s)).join(".");e.push(i);}if(t.isDefault&&e.push("DEFAULT"),e.push("FOR TYPE"),t.datatype&&e.push(this.TypeName(t.datatype,s)),e.push("USING"),t.amname&&e.push(t.amname),t.opfamilyname&&t.opfamilyname.length>0){e.push("FAMILY");let i=c.unwrapList(t.opfamilyname).map(r=>this.visit(r,s)).join(".");e.push(i);}if(e.push("AS"),t.items&&t.items.length>0){let i=c.unwrapList(t.items).map(r=>this.visit(r,s)).join(", ");e.push(i);}return e.join(" ")}CreateOpFamilyStmt(t,s){let e=["CREATE OPERATOR FAMILY"];if(t.opfamilyname&&t.opfamilyname.length>0){let i=c.unwrapList(t.opfamilyname).map(r=>this.visit(r,s)).join(".");e.push(i);}return e.push("USING"),t.amname&&e.push(t.amname),e.join(" ")}AlterOpFamilyStmt(t,s){let e=["ALTER OPERATOR FAMILY"];if(t.opfamilyname&&t.opfamilyname.length>0){let i=c.unwrapList(t.opfamilyname).map(r=>this.visit(r,s)).join(".");e.push(i);}if(e.push("USING"),t.amname&&e.push(t.amname),t.isDrop?e.push("DROP"):e.push("ADD"),t.items&&t.items.length>0){let i=c.unwrapList(t.items).map(r=>this.visit(r,s)).join(", ");e.push(i);}return e.join(" ")}MergeStmt(t,s){let e=[];if(t.withClause&&e.push(this.WithClause(t.withClause,s)),e.push("MERGE INTO"),t.relation&&e.push(this.RangeVar(t.relation,s)),t.sourceRelation&&(e.push("USING"),e.push(this.visit(t.sourceRelation,s))),t.joinCondition&&(e.push("ON"),e.push(this.visit(t.joinCondition,s))),t.mergeWhenClauses&&t.mergeWhenClauses.length>0){let i=c.unwrapList(t.mergeWhenClauses).map(r=>this.visit(r,s)).join(" ");e.push(i);}return e.join(" ")}AlterTableMoveAllStmt(t,s){let e=["ALTER"];return t.objtype==="OBJECT_TABLE"?e.push("TABLE"):t.objtype==="OBJECT_INDEX"?e.push("INDEX"):e.push("TABLE"),e.push("ALL","IN","TABLESPACE"),t.orig_tablespacename&&e.push(h.quoteIdentifier(t.orig_tablespacename)),e.push("SET","TABLESPACE"),t.new_tablespacename&&e.push(h.quoteIdentifier(t.new_tablespacename)),t.nowait&&e.push("NOWAIT"),e.join(" ")}CreateSeqStmt(t,s){let e=["CREATE"];if(t.sequence&&t.sequence.relpersistence==="t"&&e.push("TEMPORARY"),e.push("SEQUENCE"),t.if_not_exists&&e.push("IF NOT EXISTS"),t.sequence){let i=[],r=t.sequence;r.schemaname&&i.push(h.quoteIdentifier(r.schemaname)),r.relname&&i.push(h.quoteIdentifier(r.relname)),e.push(i.join("."));}if(t.options&&t.options.length>0){let i=s.spawn("CreateSeqStmt"),r=c.unwrapList(t.options).filter(n=>n!=null&&this.getNodeType(n)!=="undefined").map(n=>{try{return this.visit(n,i)}catch(a){return console.warn(`Error processing option in CreateSeqStmt: ${a instanceof Error?a.message:String(a)}`),""}}).filter(n=>n!=="").join(" ");r&&e.push(r);}return e.join(" ")}AlterSeqStmt(t,s){let e=["ALTER","SEQUENCE"];if(t.missing_ok&&e.push("IF EXISTS"),t.sequence){let i=[],r=t.sequence;r.schemaname&&i.push(h.quoteIdentifier(r.schemaname)),r.relname&&i.push(h.quoteIdentifier(r.relname)),e.push(i.join("."));}if(t.options&&t.options.length>0){let i=s.spawn("AlterSeqStmt"),r=c.unwrapList(t.options).filter(n=>n&&n!==void 0).map(n=>{try{return !n||this.getNodeType(n)==="undefined"?"":this.visit(n,i)}catch(a){return console.warn(`Error processing option in AlterSeqStmt: ${a instanceof Error?a.message:String(a)}`),""}}).filter(n=>n&&n.trim().length>0).join(" ");r&&e.push(r);}return t.for_identity&&e.push("FOR IDENTITY"),e.join(" ")}CompositeTypeStmt(t,s){let e=["CREATE","TYPE"];if(t.typevar){let i=s.spawn("CompositeTypeStmt");e.push(this.RangeVar(t.typevar,i));}if(e.push("AS"),t.coldeflist&&t.coldeflist.length>0){let i=c.unwrapList(t.coldeflist).map(r=>this.visit(r,s)).join(", ");e.push(`(${i})`);}else e.push("()");return e.join(" ")}CreateRangeStmt(t,s){let e=["CREATE","TYPE"];if(t.typeName&&t.typeName.length>0){let i=c.unwrapList(t.typeName).map(r=>this.visit(r,s)).join(".");e.push(i);}if(e.push("AS","RANGE"),t.params&&t.params.length>0){let i=c.unwrapList(t.params).map(r=>{let n=this.getNodeData(r);if(n.defname&&n.arg){let a=this.visit(n.arg,s);return `${n.defname} = ${a}`}return this.visit(r,s)});e.push(`(${i.join(", ")})`);}return e.join(" ")}AlterEnumStmt(t,s){let e=["ALTER","TYPE"];if(t.typeName&&t.typeName.length>0){let i=c.unwrapList(t.typeName).map(r=>this.visit(r,s)).join(".");e.push(i);}if(t.oldVal&&t.newVal){let i=t.oldVal.replace(/'/g,"''"),r=t.newVal.replace(/'/g,"''");e.push("RENAME","VALUE",`'${i}'`,"TO",`'${r}'`);}else if(t.newVal){e.push("ADD","VALUE"),t.skipIfNewValExists&&e.push("IF NOT EXISTS");let i=t.newVal.replace(/'/g,"''");if(e.push(`'${i}'`),t.newValNeighbor){let r=t.newValNeighbor.replace(/'/g,"''");t.newValIsAfter?e.push("AFTER",`'${r}'`):e.push("BEFORE",`'${r}'`);}}return e.join(" ")}AlterTypeStmt(t,s){let e=["ALTER","TYPE"];if(t.typeName&&t.typeName.length>0){let i=c.unwrapList(t.typeName).map(r=>this.visit(r,s)).join(".");e.push(i);}if(e.push("SET"),t.options&&t.options.length>0){let i=c.unwrapList(t.options).map(r=>{let n=this.getNodeData(r);if(n.defname&&n.arg){let a=this.visit(n.arg,s);return `${n.defname} = ${a}`}return this.visit(r,s)});e.push(`(${i.join(", ")})`);}return e.join(" ")}AlterRoleStmt(t,s){let e=t.options&&c.unwrapList(t.options).some(r=>r.DefElem&&r.DefElem.defname==="rolemembers"),i=["ALTER",e?"GROUP":"ROLE"];if(t.role&&i.push(this.RoleSpec(t.role,s)),t.options){let r=s.spawn("AlterRoleStmt");if(e){let n=c.unwrapList(t.options).find(a=>a.DefElem&&a.DefElem.defname==="rolemembers");if(n&&n.DefElem){let a=t.action===1?"ADD":"DROP";if(i.push(a,"USER"),n.DefElem.arg&&n.DefElem.arg.List){let u=c.unwrapList(n.DefElem.arg.List.items).map(o=>this.visit(o,r)).join(", ");i.push(u);}}}else {let n=c.unwrapList(t.options).map(a=>this.visit(a,r)).join(" ");n&&i.push(n);}}return i.join(" ")}DropRoleStmt(t,s){let e=["DROP","ROLE"];if(t.missing_ok&&e.push("IF EXISTS"),t.roles){let i=c.unwrapList(t.roles).map(r=>this.visit(r,s)).join(", ");e.push(i);}return e.join(" ")}targetList(t,s){return !t||!Array.isArray(t)?"":t.map(e=>this.visit(e,s)).join(", ")}CreateAggregateStmt(t,s){let e=["CREATE"];if(t.replace&&e.push("OR REPLACE"),e.push("AGGREGATE"),t.defnames&&t.defnames.length>0){let r=c.unwrapList(t.defnames).map(n=>this.visit(n,s)).join(".");e.push(r);}if(e.push("("),t.args&&t.args.length>0){let r=c.unwrapList(t.args).map(n=>this.visit(n,s)).join(", ");e.push(r);}else e.push("*");e.push(")"),e.push("(");let i=[];if(t.definition&&t.definition.length>0){let r=c.unwrapList(t.definition).map(n=>{let a=this.getNodeData(n);return a.defname==="sfunc"||a.defname==="sfunc1"?`SFUNC = ${this.visit(a.arg,s)}`:a.defname==="stype"||a.defname==="stype1"?`STYPE = ${this.visit(a.arg,s)}`:a.defname==="basetype"?`BASETYPE = ${this.visit(a.arg,s)}`:a.defname==="finalfunc"?`FINALFUNC = ${this.visit(a.arg,s)}`:a.defname==="initcond"||a.defname==="initcond1"?`INITCOND = ${this.visit(a.arg,s)}`:a.defname==="combinefunc"?`COMBINEFUNC = ${this.visit(a.arg,s)}`:a.defname==="serialfunc"?`SERIALFUNC = ${this.visit(a.arg,s)}`:a.defname==="deserialfunc"?`DESERIALFUNC = ${this.visit(a.arg,s)}`:a.defname==="parallel"?`PARALLEL = ${this.visit(a.arg,s)}`:this.visit(n,s)});i.push(...r);}return e.push(i.join(", ")),e.push(")"),e.join(" ")}CreateTableAsStmt(t,s){let e=["CREATE"];if(t.objtype==="OBJECT_MATVIEW"?e.push("MATERIALIZED VIEW"):t.into&&t.into.rel&&t.into.rel.relpersistence==="t"?e.push("TEMPORARY TABLE"):e.push("TABLE"),t.if_not_exists&&e.push("IF NOT EXISTS"),t.into&&t.into.rel&&e.push(this.RangeVar(t.into.rel,s)),t.into&&t.into.colNames&&t.into.colNames.length>0){e.push("(");let i=c.unwrapList(t.into.colNames).map(r=>this.visit(r,s)).join(", ");e.push(i),e.push(")");}if(t.into&&t.into.accessMethod&&(e.push("USING"),e.push(t.into.accessMethod)),t.into&&t.into.onCommit&&t.into.onCommit!=="ONCOMMIT_NOOP")switch(e.push("ON COMMIT"),t.into.onCommit){case "ONCOMMIT_PRESERVE_ROWS":e.push("PRESERVE ROWS");break;case "ONCOMMIT_DELETE_ROWS":e.push("DELETE ROWS");break;case "ONCOMMIT_DROP":e.push("DROP");break}if(e.push("AS"),t.query&&e.push(this.visit(t.query,s)),t.into&&t.into.options&&t.into.options.length>0){e.push("WITH");let i=c.unwrapList(t.into.options).map(r=>this.visit(r,s)).join(", ");e.push(`(${i})`);}return t.into&&t.into.skipData&&e.push("WITH NO DATA"),e.join(" ")}RefreshMatViewStmt(t,s){let e=["REFRESH","MATERIALIZED","VIEW"];return t.concurrent&&e.push("CONCURRENTLY"),t.relation&&e.push(this.visit(t.relation,s)),t.skipData&&e.push("WITH NO DATA"),e.join(" ")}AccessPriv(t,s){let e=[];if(t.priv_name?e.push(t.priv_name.toUpperCase()):e.push("ALL"),t.cols&&t.cols.length>0){e.push("(");let i=s.spawn("AccessPriv"),r=c.unwrapList(t.cols).map(n=>this.visit(n,i));e.push(r.join(", ")),e.push(")");}return e.join(" ")}aliasname(t,s){return typeof t=="string"?h.quoteIdentifier(t):this.visit(t,s)}DefineStmt(t,s){let e=[];if(!t.kind)throw new Error("DefineStmt requires kind property");switch(t.kind){case "OBJECT_OPERATOR":if(e.push("CREATE OPERATOR"),t.defnames&&t.defnames.length>0){let i=c.unwrapList(t.defnames).map((r,n)=>{if(n===t.defnames.length-1){let a=this.getNodeData(r);if(a&&a.sval)return a.sval}return this.visit(r,s)});e.push(i.join("."));}if(t.definition&&t.definition.length>0){e.push("(");let i=c.unwrapList(t.definition).map(r=>{if(r.DefElem){let n=r.DefElem,a=n.defname,u=n.arg;if(a&&u){let o=h.quoteIdentifier(a),p=o!==a?o:this.preserveOperatorDefElemCase(a);if((a.toLowerCase()==="commutator"||a.toLowerCase()==="negator")&&u.List){let f=c.unwrapList(u.List.items);if(f.length===1&&f[0].String)return `${p} = ${f[0].String.sval}`}return a.toLowerCase()==="commutator"||a.toLowerCase()==="negator"?`${p} = ${this.visit(u,s)}`:`${p} = ${this.visit(u,s)}`}else if(a&&!u)return a==="Hashes"||a==="Merges"?h.quoteIdentifier(a):this.preserveOperatorDefElemCase(a).toUpperCase()}return this.visit(r,s)});e.push(i.join(", ")),e.push(")");}break;case "OBJECT_TYPE":if(e.push("CREATE TYPE"),t.defnames&&t.defnames.length>0&&e.push(c.unwrapList(t.defnames).map(i=>this.visit(i,s)).join(".")),t.definition&&t.definition.length>0){let i=s.spawn("DefineStmt"),r=c.unwrapList(t.definition).map(n=>this.visit(n,i));e.push(`(${r.join(", ")})`);}break;case "OBJECT_AGGREGATE":if(e.push("CREATE"),t.replace&&e.push("OR REPLACE"),e.push("AGGREGATE"),t.defnames&&t.defnames.length>0){let i=c.unwrapList(t.defnames).map(r=>this.visit(r,s));e.push(i.join("."));}if(t.args&&t.args.length>0){let i=c.unwrapList(t.args),r=i.some(u=>u.Integer&&u.Integer.ival===1),n=i.length>=2&&i[0].List&&i[0].List.items&&i[0].List.items.length===1&&i[0].List.items[0].FunctionParameter&&i[0].List.items[0].FunctionParameter.mode==="FUNC_PARAM_DEFAULT"&&i[1].Integer&&Object.keys(i[1].Integer).length===0,a=i.filter(u=>!(u.Integer&&(u.Integer.ival===-1||u.Integer.ival===1)||u.Integer&&Object.keys(u.Integer).length===0&&n));if(a.length>0)if(n){let u=a[0];if(u.List&&u.List.items&&u.List.items[0].FunctionParameter){let o=u.List.items[0].FunctionParameter,p;if(o.argType&&o.argType.names){let f=o.argType.names;f.length>=2&&f[0].String&&f[0].String.sval==="pg_catalog"?p=f[1].String.sval:f.length>=1&&f[0].String?p=f[0].String.sval:p="unknown";}else p=this.visit({TypeName:o.argType},s);e.push(`(ORDER BY ${p})`);}else {let o=this.visit(u,s);e.push(`(ORDER BY ${o})`);}}else if(r&&a.length===1&&a[0].List){let u=a[0].List;if(u.items&&u.items.length>=2){let o=c.unwrapList(u.items),p=this.visit(o[0],s),f=o.slice(1).map(m=>this.visit(m,s));e.push(`(${p} ORDER BY ${f.join(", ")})`);}else if(u.items&&u.items.length===1){let o=u.items[0];if(o.FunctionParameter&&o.FunctionParameter.mode==="FUNC_PARAM_VARIADIC"){let p=this.visit(o,s);e.push(`(${p} ORDER BY ${p})`);}else {let p=this.visit(o,s);e.push(`(${p})`);}}else {let o=a.map(p=>Object.keys(p).length===0?"*":this.visit(p,s));e.push(`(${o.join(", ")})`);}}else {let u=a.map(o=>Object.keys(o).length===0?"*":this.visit(o,s));e.push(`(${u.join(", ")})`);}}if(t.definition&&t.definition.length>0){let i=c.unwrapList(t.definition).map(r=>{if(r.DefElem){let n=r.DefElem,a=n.defname,u=n.arg;if(a&&u){let o=h.quoteIdentifier(a),p=o!==a?o:a;return u.String?`${p} = '${u.String.sval}'`:`${p} = ${this.visit(u,s)}`}}return this.visit(r,s)});e.push(`(${i.join(", ")})`);}break;case "OBJECT_TSDICTIONARY":if(e.push("CREATE TEXT SEARCH DICTIONARY"),t.defnames&&t.defnames.length>0&&e.push(c.unwrapList(t.defnames).map(i=>this.visit(i,s)).join(".")),t.definition&&t.definition.length>0){e.push("(");let i=c.unwrapList(t.definition).map(r=>{if(r.DefElem){let n=r.DefElem,a=n.defname,u=n.arg;if(a&&u)return `${a} = ${this.visit(u,s)}`}return this.visit(r,s)});e.push(i.join(", ")),e.push(")");}break;case "OBJECT_TSCONFIGURATION":if(e.push("CREATE TEXT SEARCH CONFIGURATION"),t.defnames&&t.defnames.length>0&&e.push(c.unwrapList(t.defnames).map(i=>this.visit(i,s)).join(".")),t.definition&&t.definition.length>0){e.push("(");let i=c.unwrapList(t.definition).map(r=>{if(r.DefElem){let n=r.DefElem,a=n.defname,u=n.arg;if(a&&u)return `${a} = ${this.visit(u,s)}`}return this.visit(r,s)});e.push(i.join(", ")),e.push(")");}break;case "OBJECT_TSPARSER":if(e.push("CREATE TEXT SEARCH PARSER"),t.defnames&&t.defnames.length>0){let i=c.unwrapList(t.defnames).map(r=>this.visit(r,s)).join(".");e.push(i);}if(t.definition&&t.definition.length>0){e.push("(");let i=c.unwrapList(t.definition).map(r=>{if(r.DefElem){let n=r.DefElem,a=n.defname,u=n.arg;if(a&&u)return `${a} = ${this.visit(u,s)}`}return this.visit(r,s)});e.push(i.join(", ")),e.push(")");}break;case "OBJECT_TSTEMPLATE":if(e.push("CREATE TEXT SEARCH TEMPLATE"),t.defnames&&t.defnames.length>0){let i=c.unwrapList(t.defnames).map(r=>this.visit(r,s)).join(".");e.push(i);}if(t.definition&&t.definition.length>0){e.push("(");let i=c.unwrapList(t.definition).map(r=>{if(r.DefElem){let n=r.DefElem,a=n.defname,u=n.arg;if(a&&u)return `${a} = ${this.visit(u,s)}`}return this.visit(r,s)});e.push(i.join(", ")),e.push(")");}break;case "OBJECT_COLLATION":if(e.push("CREATE COLLATION"),t.defnames&&t.defnames.length>0&&e.push(c.unwrapList(t.defnames).map(i=>this.visit(i,s)).join(".")),t.definition&&t.definition.length>0){let i=c.unwrapList(t.definition).map(n=>{if(n.DefElem){let a=n.DefElem,u=a.defname,o=a.arg;if(u&&o){if(u==="from")return `FROM ${this.visit(o,s)}`;let p;return o.String?p=`'${o.String.sval}'`:p=this.visit(o,s),`${u} = ${p}`}}return this.visit(n,s)});i.some(n=>n.startsWith("FROM "))?e.push(i.join(" ")):e.push(`(${i.join(", ")})`);}break;default:throw new Error(`Unsupported DefineStmt kind: ${t.kind}`)}return e.join(" ")}AlterDatabaseStmt(t,s){let e=["ALTER","DATABASE"];if(t.dbname&&e.push(h.quoteIdentifier(t.dbname)),t.options&&t.options.length>0){let i=c.unwrapList(t.options).map(r=>this.visit(r,s));e.push(i.join(" "));}return e.join(" ")}AlterDatabaseRefreshCollStmt(t,s){let e=["ALTER","DATABASE"];return t.dbname&&e.push(h.quoteIdentifier(t.dbname)),e.push("REFRESH","COLLATION","VERSION"),e.join(" ")}AlterDatabaseSetStmt(t,s){let e=["ALTER","DATABASE"];if(t.dbname&&e.push(h.quoteIdentifier(t.dbname)),t.setstmt){let i=this.VariableSetStmt(t.setstmt,s);e.push(i);}return e.join(" ")}DeclareCursorStmt(t,s){let e=["DECLARE"];t.portalname&&e.push(h.quoteIdentifier(t.portalname));let i=[];return t.options&&(t.options&2?i.push("SCROLL"):t.options&4&&i.push("NO SCROLL"),t.options&1&&i.push("BINARY"),t.options&8&&i.push("INSENSITIVE")),i.length>0&&e.push(...i),e.push("CURSOR"),t.options&&t.options&32&&e.push("WITH HOLD"),e.push("FOR"),t.query&&e.push(this.visit(t.query,s)),e.join(" ")}PublicationObjSpec(t,s){let e=[];return t.pubobjtype==="PUBLICATIONOBJ_TABLE"?(e.push("TABLE"),t.pubtable&&e.push(this.PublicationTable(t.pubtable,s))):t.pubobjtype==="PUBLICATIONOBJ_TABLES_IN_SCHEMA"?(e.push("TABLES IN SCHEMA"),t.name&&e.push(h.quoteIdentifier(t.name))):t.pubobjtype==="PUBLICATIONOBJ_TABLES_IN_CUR_SCHEMA"&&e.push("TABLES IN SCHEMA CURRENT_SCHEMA"),e.join(" ")}PublicationTable(t,s){let e=[];if(t.relation&&e.push(this.RangeVar(t.relation,s)),t.columns&&t.columns.length>0){let i=c.unwrapList(t.columns).map(r=>this.visit(r,s));e.push(`(${i.join(", ")})`);}return t.whereClause&&(e.push("WHERE"),e.push(this.visit(t.whereClause,s))),e.join(" ")}CreateAmStmt(t,s){let e=["CREATE","ACCESS","METHOD"];switch(t.amname&&e.push(h.quoteIdentifier(t.amname)),e.push("TYPE"),t.amtype){case "i":e.push("INDEX");break;case "t":e.push("TABLE");break;default:e.push(t.amtype||"");break}if(t.handler_name&&t.handler_name.length>0){e.push("HANDLER");let i=c.unwrapList(t.handler_name).map(r=>this.visit(r,s)).join(".");e.push(i);}return e.join(" ")}IntoClause(t,s){let e=[];if(t.rel&&e.push(this.RangeVar(t.rel,s)),t.colNames&&t.colNames.length>0){let i=c.unwrapList(t.colNames).map(r=>this.visit(r,s)).join(", ");e.push(`(${i})`);}if(t.accessMethod&&e.push("USING",t.accessMethod),t.options&&t.options.length>0){e.push("WITH");let i=c.unwrapList(t.options).map(r=>this.visit(r,s)).join(", ");e.push(`(${i})`);}if(t.onCommit&&t.onCommit!=="ONCOMMIT_NOOP")switch(e.push("ON COMMIT"),t.onCommit){case "ONCOMMIT_PRESERVE_ROWS":e.push("PRESERVE ROWS");break;case "ONCOMMIT_DELETE_ROWS":e.push("DELETE ROWS");break;case "ONCOMMIT_DROP":e.push("DROP");break}return t.tableSpaceName&&e.push("TABLESPACE",h.quoteIdentifier(t.tableSpaceName)),e.join(" ")}OnConflictExpr(t,s){let e=["ON CONFLICT"];if(t.arbiterElems&&t.arbiterElems.length>0){let i=c.unwrapList(t.arbiterElems).map(r=>this.visit(r,s)).join(", ");e.push(`(${i})`);}if(t.arbiterWhere&&(e.push("WHERE"),e.push(this.visit(t.arbiterWhere,s))),t.action==="ONCONFLICT_NOTHING")e.push("DO NOTHING");else if(t.action==="ONCONFLICT_UPDATE"){if(e.push("DO UPDATE SET"),t.onConflictSet&&t.onConflictSet.length>0){let i=c.unwrapList(t.onConflictSet).map(r=>this.visit(r,s)).join(", ");e.push(i);}t.onConflictWhere&&(e.push("WHERE"),e.push(this.visit(t.onConflictWhere,s)));}return e.join(" ")}ScanToken(t,s){return ""}CreateOpClassItem(t,s){let e=[];if(t.itemtype===1){e.push("OPERATOR");let i=t.number!==void 0?t.number:0;if(e.push(i.toString()),t.name){let r=s.spawn("CreateOpClassItem");e.push(this.ObjectWithArgs(t.name,r));}}else if(t.itemtype===2){e.push("FUNCTION");let i=t.number!==void 0?t.number:0;if(e.push(i.toString()),t.name){let r=s.spawn("CreateOpClassItem");e.push(this.ObjectWithArgs(t.name,r));}}else t.itemtype===3&&(e.push("STORAGE"),t.storedtype&&e.push(this.TypeName(t.storedtype,s)));if(t.order_family&&t.order_family.length>0){e.push("FOR ORDER BY");let i=c.unwrapList(t.order_family).map(r=>this.visit(r,s)).join(".");e.push(i);}if(t.class_args&&t.class_args.length>0){let i=c.unwrapList(t.class_args).map(r=>this.visit(r,s)).join(", ");e.push(`(${i})`);}return e.join(" ")}Var(t,s){return t.varno&&t.varattno?`$${t.varno}.${t.varattno}`:"$var"}TableFunc(t,s){let e=[];if(t.functype==="TFT_XMLTABLE"){if(e.push("XMLTABLE"),t.ns_names&&t.ns_names.length>0){e.push("XMLNAMESPACES");let i=c.unwrapList(t.ns_names).map(r=>this.visit(r,s)).join(", ");e.push(`(${i})`);}if(t.rowexpr&&e.push(`(${this.visit(t.rowexpr,s)})`),t.docexpr&&(e.push("PASSING"),e.push(this.visit(t.docexpr,s))),t.colexprs&&t.colexprs.length>0){e.push("COLUMNS");let i=c.unwrapList(t.colexprs).map(r=>this.visit(r,s)).join(", ");e.push(i);}}else if(t.functype==="TFT_JSON_TABLE"&&(e.push("JSON_TABLE"),t.docexpr&&e.push(`(${this.visit(t.docexpr,s)})`),t.rowexpr&&(e.push(","),e.push(`'${this.visit(t.rowexpr,s)}'`)),t.colexprs&&t.colexprs.length>0)){e.push("COLUMNS");let i=c.unwrapList(t.colexprs).map(r=>this.visit(r,s)).join(", ");e.push(`(${i})`);}return e.join(" ")}RangeTableFunc(t,s){let e=[];if(t.lateral&&e.push("LATERAL"),t.docexpr&&e.push(this.visit(t.docexpr,s)),t.rowexpr&&(e.push("PASSING"),e.push(this.visit(t.rowexpr,s))),t.columns&&t.columns.length>0){e.push("COLUMNS");let i=c.unwrapList(t.columns).map(r=>this.visit(r,s)).join(", ");e.push(`(${i})`);}return t.alias&&e.push(this.Alias(t.alias,s)),e.join(" ")}RangeTableFuncCol(t,s){let e=[];return t.colname&&e.push(h.quoteIdentifier(t.colname)),t.for_ordinality?e.push("FOR ORDINALITY"):t.typeName&&e.push(this.TypeName(t.typeName,s)),t.colexpr&&(e.push("PATH"),e.push(`'${this.visit(t.colexpr,s)}'`)),t.coldefexpr&&(e.push("DEFAULT"),e.push(this.visit(t.coldefexpr,s))),e.join(" ")}JsonArrayQueryConstructor(t,s){let e=["JSON_ARRAYAGG"];return t.query&&e.push(`(${this.visit(t.query,s)})`),t.format&&e.push("FORMAT JSON"),t.output&&e.push("RETURNING TEXT"),t.absent_on_null?e.push("ABSENT ON NULL"):e.push("NULL ON NULL"),e.join(" ")}RangeFunction(t,s){let e=[];if(t.lateral&&e.push("LATERAL"),t.is_rowsfrom){if(e.push("ROWS FROM"),t.functions&&t.functions.length>0){let i=c.unwrapList(t.functions).filter(r=>r!=null).map(r=>{try{if(this.getNodeType(r)==="List"){let a=this.getNodeData(r);if(a&&a.items&&Array.isArray(a.items)){let u=a.items;if(u.length>=2){let o=this.visit(u[0],s),p=this.getNodeData(u[1]);if(p&&p.items&&Array.isArray(p.items)){let f=p.items.map(m=>this.visit(m,s)).filter(m=>m&&m.trim());if(f.length>0)return `${o} AS (${f.join(", ")})`}return o}else if(u.length===1)return this.visit(u[0],s)}}return this.visit(r,s)}catch(n){return console.warn(`Error processing function in RangeFunction: ${n instanceof Error?n.message:String(n)}`),""}}).filter(r=>r&&r.trim());i.length>0&&e.push(`(${i.join(", ")})`);}}else if(t.functions&&t.functions.length>0){let i=c.unwrapList(t.functions).filter(r=>r!=null).map(r=>{try{if(this.getNodeType(r)==="List"){let a=this.getNodeData(r);if(a&&a.items&&Array.isArray(a.items)){let u=a.items;if(u.length>=1)return this.visit(u[0],s)}}return this.visit(r,s)}catch(n){return console.warn(`Error processing function in RangeFunction: ${n instanceof Error?n.message:String(n)}`),""}}).filter(r=>r&&r.trim());i.length>0&&e.push(i.join(", "));}if(t.ordinality&&e.push("WITH ORDINALITY"),t.alias)if(t.coldeflist&&t.coldeflist.length>0){let i=t.alias.aliasname,r=c.unwrapList(t.coldeflist).map(n=>this.visit(n,s)).filter(n=>n&&n.trim());e.push(`${i} (${r.join(", ")})`);}else e.push(this.Alias(t.alias,s));else if(t.coldeflist&&t.coldeflist.length>0){let i=c.unwrapList(t.coldeflist).map(r=>this.visit(r,s)).filter(r=>r&&r.trim());e.push(`AS (${i.join(", ")})`);}return e.join(" ")}XmlExpr(t,s){if(t.op==="IS_XMLPI")if(t.name&&t.args&&t.args.length>0){let i=c.unwrapList(t.args).map(r=>this.visit(r,s));return `xmlpi(name ${h.quoteIdentifier(t.name)}, ${i.join(", ")})`}else return t.name?`xmlpi(name ${h.quoteIdentifier(t.name)})`:"XMLPI()";let e=[];switch(t.op){case "IS_XMLCONCAT":e.push("XMLCONCAT");break;case "IS_XMLELEMENT":e.push("XMLELEMENT");let i=[];if(t.name&&i.push(`NAME ${h.quoteIdentifier(t.name)}`),t.named_args&&t.named_args.length>0){let n=c.unwrapList(t.named_args).map(a=>this.visit(a,s));i.push(`XMLATTRIBUTES(${n.join(", ")})`);}if(t.args&&t.args.length>0){let n=c.unwrapList(t.args).map(a=>this.visit(a,s));i.push(...n);}i.length>0&&e.push(`(${i.join(", ")})`);break;case "IS_XMLFOREST":e.push("XMLFOREST");break;case "IS_XMLPARSE":e.push("XMLPARSE");let r=[];if(t.xmloption&&(t.xmloption==="XMLOPTION_DOCUMENT"?r.push("DOCUMENT"):t.xmloption==="XMLOPTION_CONTENT"&&r.push("CONTENT")),t.args&&t.args.length>0){let n=c.unwrapList(t.args).map(a=>this.visit(a,s));n.length>0&&r.push(n[0]);}r.length>0&&e.push(`(${r.join(" ")})`);break;case "IS_XMLROOT":if(e.push("XMLROOT"),t.args&&t.args.length>0){let n=c.unwrapList(t.args),a=[];if(n[0]&&a.push(this.visit(n[0],s)),n[1]){let u=n[1];u.A_Const&&u.A_Const.isnull?a.push("version NO VALUE"):a.push(`version ${this.visit(u,s)}`);}if(n[2]){let u=n[2];u.A_Const&&u.A_Const.ival!==void 0?u.A_Const.ival.ival===1?a.push("STANDALONE NO"):u.A_Const.ival.ival===2?a.push("STANDALONE NO VALUE"):u.A_Const.ival.ival===3||(Object.keys(u.A_Const.ival).length===0?a.push("STANDALONE YES"):a.push(`STANDALONE ${this.visit(u,s)}`)):a.push(`STANDALONE ${this.visit(u,s)}`);}a.length>0&&e.push(`(${a.join(", ")})`);}break;case "IS_XMLSERIALIZE":e.push("XMLSERIALIZE");break;case "IS_DOCUMENT":if(t.args&&t.args.length>0){let n=c.unwrapList(t.args).map(a=>this.visit(a,s));e.push(`${n[0]} IS DOCUMENT`);}else e.push("IS DOCUMENT");break;default:throw new Error(`Unsupported XmlExpr op: ${t.op}`)}if(t.op!=="IS_XMLELEMENT"&&t.op!=="IS_XMLPARSE"&&t.op!=="IS_XMLROOT"&&t.op!=="IS_DOCUMENT"){if(t.name){let i=h.quoteIdentifier(t.name);e.push(`NAME ${i}`);}if(t.args&&t.args.length>0){let i=c.unwrapList(t.args).map(r=>this.visit(r,s));e.push(`(${i.join(", ")})`);}}if(t.named_args&&t.named_args.length>0&&t.op!=="IS_XMLELEMENT"){let i=c.unwrapList(t.named_args).map(r=>this.visit(r,s));t.op==="IS_XMLFOREST"?e.push(`(${i.join(", ")})`):e.push(`XMLATTRIBUTES(${i.join(", ")})`);}return e.join(" ")}schemaname(t,s){if(typeof t=="string")return h.quoteIdentifier(t);if(t&&t.String&&t.String.sval)return h.quoteIdentifier(t.String.sval);if(t&&typeof t=="object"){if(t.sval!==void 0)return h.quoteIdentifier(t.sval);if(t.List&&Array.isArray(t.List.items)){let e=t.List.items;if(e.length>0&&e[0].String&&e[0].String.sval)return h.quoteIdentifier(e[0].String.sval)}return t.val!==void 0?h.quoteIdentifier(t.val):""}return ""}RangeTableSample(t,s){let e=[];if(t.relation&&e.push(this.visit(t.relation,s)),e.push("TABLESAMPLE"),t.method&&t.method.length>0){let i=t.method.map(r=>this.visit(r,s));e.push(i.join("."));}if(t.args&&t.args.length>0){let i=t.args.map(r=>this.visit(r,s));e.push(`(${i.join(", ")})`);}return t.repeatable&&(e.push("REPEATABLE"),e.push(`(${this.visit(t.repeatable,s)})`)),e.join(" ")}XmlSerialize(t,s){let e=["XMLSERIALIZE"];return e.push("("),t.typeName&&(t.xmloption==="XMLOPTION_DOCUMENT"?e.push("DOCUMENT"):e.push("CONTENT"),e.push(this.visit(t.expr,s)),e.push("AS"),e.push(this.TypeName(t.typeName,s))),e.push(")"),e.join(" ")}ctes(t,s){if(!t||!Array.isArray(t))return "";let e=["WITH"];t.length>0&&t[0]&&t[0].CommonTableExpr&&t[0].CommonTableExpr.recursive&&e.push("RECURSIVE");let i=t.map(r=>this.visit(r,s));return e.push(i.join(", ")),e.join(" ")}RuleStmt(t,s){let e=["CREATE"];if(t.replace&&e.push("OR REPLACE"),e.push("RULE"),t.rulename&&e.push(h.quoteIdentifier(t.rulename)),e.push("AS ON"),t.event)switch(t.event){case "CMD_SELECT":e.push("SELECT");break;case "CMD_INSERT":e.push("INSERT");break;case "CMD_UPDATE":e.push("UPDATE");break;case "CMD_DELETE":e.push("DELETE");break;default:e.push(t.event.toString());}if(e.push("TO"),t.relation&&e.push(this.RangeVar(t.relation,s)),t.whereClause&&(e.push("WHERE"),e.push(this.visit(t.whereClause,s))),e.push("DO"),t.instead&&e.push("INSTEAD"),t.actions&&t.actions.length>0)if(t.actions.length===1)e.push(this.visit(t.actions[0],s));else {e.push("(");let i=c.unwrapList(t.actions).map(r=>this.visit(r,s));e.push(i.join("; ")),e.push(")");}else e.push("NOTHING");return e.join(" ")}RangeSubselect(t,s){let e=[];return t.lateral&&e.push("LATERAL"),t.subquery&&(e.push("("),e.push(this.visit(t.subquery,s)),e.push(")")),t.alias&&e.push(this.Alias(t.alias,s)),e.join(" ")}relname(t,s){return typeof t=="string"?h.quoteIdentifier(t):t&&t.String&&t.String.sval?h.quoteIdentifier(t.String.sval):t&&typeof t=="object"&&t.relname?h.quoteIdentifier(t.relname):this.visit(t,s)}rel(t,s){return typeof t=="string"?h.quoteIdentifier(t):t&&t.String&&t.String.sval?h.quoteIdentifier(t.String.sval):t&&t.RangeVar?this.RangeVar(t.RangeVar,s):t&&typeof t=="object"&&t.relname?h.quoteIdentifier(t.relname):this.visit(t,s)}objname(t,s){return typeof t=="string"?h.quoteIdentifier(t):t&&t.String&&t.String.sval?h.quoteIdentifier(t.String.sval):Array.isArray(t)?t.map(i=>i&&i.String&&i.String.sval?h.quoteIdentifier(i.String.sval):this.visit(i,s)).join("."):this.visit(t,s)}SQLValueFunction(t,s){switch(t.op){case "SVFOP_CURRENT_DATE":return "CURRENT_DATE";case "SVFOP_CURRENT_TIME":return "CURRENT_TIME";case "SVFOP_CURRENT_TIME_N":return `CURRENT_TIME(${t.typmod||0})`;case "SVFOP_CURRENT_TIMESTAMP":return "CURRENT_TIMESTAMP";case "SVFOP_CURRENT_TIMESTAMP_N":return `CURRENT_TIMESTAMP(${t.typmod||0})`;case "SVFOP_LOCALTIME":return "LOCALTIME";case "SVFOP_LOCALTIME_N":return `LOCALTIME(${t.typmod||0})`;case "SVFOP_LOCALTIMESTAMP":return "LOCALTIMESTAMP";case "SVFOP_LOCALTIMESTAMP_N":return `LOCALTIMESTAMP(${t.typmod||0})`;case "SVFOP_CURRENT_ROLE":return "CURRENT_ROLE";case "SVFOP_CURRENT_USER":return "CURRENT_USER";case "SVFOP_USER":return "USER";case "SVFOP_SESSION_USER":return "SESSION_USER";case "SVFOP_CURRENT_CATALOG":return "CURRENT_CATALOG";case "SVFOP_CURRENT_SCHEMA":return "CURRENT_SCHEMA";default:throw new Error(`Unsupported SQLValueFunction op: ${t.op}`)}}GroupingFunc(t,s){let e=["GROUPING"];if(t.args&&t.args.length>0){let i=c.unwrapList(t.args).map(r=>this.visit(r,s));e.push(`(${i.join(", ")})`);}else e.push("()");return e.join("")}MultiAssignRef(t,s){let e=[];return t.source&&e.push(this.visit(t.source,s)),t.colno>0&&e.push(`[${t.colno}]`),e.join("")}SetToDefault(t,s){return "DEFAULT"}CurrentOfExpr(t,s){let e=["CURRENT OF"];return t.cursor_name&&e.push(h.quoteIdentifier(t.cursor_name)),t.cursor_param>0&&e.push(`$${t.cursor_param}`),e.join(" ")}TableLikeClause(t,s){let e=["LIKE"];if(t.relation&&e.push(this.visit(t.relation,s)),t.options&&typeof t.options=="number")if(t.options===2147483647||t.options===2147483647)e.push("INCLUDING ALL");else {let i=[];t.options&1&&i.push("INCLUDING COMMENTS"),t.options&4&&i.push("INCLUDING CONSTRAINTS"),t.options&8&&i.push("INCLUDING DEFAULTS"),t.options&16&&i.push("INCLUDING GENERATED"),t.options&32&&i.push("INCLUDING IDENTITY"),t.options&64&&i.push("INCLUDING INDEXES"),t.options&128&&i.push("INCLUDING STATISTICS"),t.options&256&&i.push("INCLUDING STORAGE"),i.length>0&&e.push(i.join(" "));}return e.join(" ")}AlterFunctionStmt(t,s){let e=["ALTER"];if(t.objtype==="OBJECT_PROCEDURE"?e.push("PROCEDURE"):e.push("FUNCTION"),t.func&&e.push(this.ObjectWithArgs(t.func,s)),t.actions&&t.actions.length>0){let i=s.spawn("AlterFunctionStmt"),r=c.unwrapList(t.actions).map(n=>this.visit(n,i));e.push(r.join(" "));}return e.join(" ")}AlterObjectSchemaStmt(t,s){let e=["ALTER"];try{e.push(this.getObjectTypeKeyword(t.objectType));}catch{e.push(t.objectType.toString());}if(t.missing_ok&&e.push("IF EXISTS"),t.relation&&(t.objectType==="OBJECT_TABLE"||t.objectType==="OBJECT_FOREIGN_TABLE"||t.objectType==="OBJECT_MATVIEW"))e.push(this.RangeVar(t.relation,s));else if(t.object)if(t.objectType==="OBJECT_DOMAIN"&&t.object.List){let i=c.unwrapList(t.object);if(i.length===2){let r=i[0].String?.sval||"",n=i[1].String?.sval||"";e.push(h.quoteQualifiedIdentifier(r,n));}else e.push(this.visit(t.object,s));}else if(t.objectType==="OBJECT_TYPE"&&t.object.List){let i=c.unwrapList(t.object);if(i.length===2){let r=i[0].String?.sval||"",n=i[1].String?.sval||"";e.push(h.quoteQualifiedIdentifier(r,n));}else e.push(this.visit(t.object,s));}else if(t.objectType==="OBJECT_CONVERSION"&&t.object.List){let i=c.unwrapList(t.object);if(i.length===2){let r=i[0].String?.sval||"",n=i[1].String?.sval||"";e.push(h.quoteQualifiedIdentifier(r,n));}else e.push(this.visit(t.object,s));}else if(t.objectType==="OBJECT_TSPARSER"&&t.object.List){let i=c.unwrapList(t.object);if(i.length===2){let r=i[0].String?.sval||"",n=i[1].String?.sval||"";e.push(h.quoteQualifiedIdentifier(r,n));}else e.push(this.visit(t.object,s));}else if(t.objectType==="OBJECT_TSCONFIGURATION"&&t.object.List){let i=c.unwrapList(t.object);if(i.length===2){let r=i[0].String?.sval||"",n=i[1].String?.sval||"";e.push(h.quoteQualifiedIdentifier(r,n));}else e.push(this.visit(t.object,s));}else if(t.objectType==="OBJECT_TSTEMPLATE"&&t.object.List){let i=c.unwrapList(t.object);if(i.length===2){let r=i[0].String?.sval||"",n=i[1].String?.sval||"";e.push(h.quoteQualifiedIdentifier(r,n));}else e.push(this.visit(t.object,s));}else if(t.objectType==="OBJECT_TSDICTIONARY"&&t.object.List){let i=c.unwrapList(t.object);if(i.length===2){let r=i[0].String?.sval||"",n=i[1].String?.sval||"";e.push(h.quoteQualifiedIdentifier(r,n));}else e.push(this.visit(t.object,s));}else if(t.objectType==="OBJECT_OPCLASS"&&t.object.List){let i=c.unwrapList(t.object);if(i.length===2){let r=i[0].String?.sval||"",n=i[1].String?.sval||"";e.push(`${h.quoteIdentifier(n)} USING ${r}`);}else if(i.length===3){let r=i[0].String?.sval||"",n=i[1].String?.sval||"",a=i[2].String?.sval||"";e.push(`${h.quoteQualifiedIdentifier(n,a)} USING ${r}`);}else e.push(this.visit(t.object,s));}else if(t.objectType==="OBJECT_OPFAMILY"&&t.object.List){let i=c.unwrapList(t.object);if(i.length===2){let r=i[0].String?.sval||"",n=i[1].String?.sval||"";e.push(`${h.quoteIdentifier(n)} USING ${r}`);}else if(i.length===3){let r=i[0].String?.sval||"",n=i[1].String?.sval||"",a=i[2].String?.sval||"";e.push(`${h.quoteQualifiedIdentifier(n,a)} USING ${r}`);}else e.push(this.visit(t.object,s));}else e.push(this.visit(t.object,s));return e.push("SET SCHEMA"),t.newschema&&e.push(h.quoteIdentifier(t.newschema)),e.join(" ")}AlterRoleSetStmt(t,s){let e=["ALTER","ROLE"];if(t.role?e.push(this.RoleSpec(t.role,s)):e.push("ALL"),t.database&&(e.push("IN DATABASE"),e.push(this.quoteIfNeeded(t.database))),t.setstmt){if(t.setstmt.kind==="VAR_RESET")e.push("RESET"),t.setstmt.name&&e.push(t.setstmt.name);else if(e.push("SET"),t.setstmt.name&&e.push(t.setstmt.name),t.setstmt.args&&t.setstmt.args.length>0){e.push("TO");let i=c.unwrapList(t.setstmt.args).map(r=>this.visit(r,s)).join(", ");e.push(i);}}return e.join(" ")}CreateForeignTableStmt(t,s){let e=["CREATE FOREIGN TABLE"];if(t.base&&t.base.relation){let i=s.spawn("CreateForeignTableStmt");e.push(this.RangeVar(t.base.relation,i));}if(t.base&&t.base.tableElts){let i=c.unwrapList(t.base.tableElts).map(r=>this.visit(r,s));e.push(`(${i.join(", ")})`);}else t.base?.partbound||e.push("()");if(t.base&&t.base.inhRelations&&t.base.inhRelations.length>0)if(t.base.partbound){let i=c.unwrapList(t.base.inhRelations).map(r=>this.visit(r,s));e.push(`PARTITION OF ${i.join(", ")}`),t.base.partbound.is_default&&e.push("DEFAULT");}else {let i=c.unwrapList(t.base.inhRelations).map(r=>this.visit(r,s));e.push(`INHERITS (${i.join(", ")})`);}if(t.servername&&(e.push("SERVER"),e.push(h.quoteIdentifier(t.servername))),t.options&&t.options.length>0){let i=s.spawn("CreateForeignTableStmt"),r=c.unwrapList(t.options).map(n=>this.visit(n,i));e.push(`OPTIONS (${r.join(", ")})`);}return e.join(" ")}containsMultilineStringLiteral(t){return /'[^']*\n[^']*'/g.test(t)}};});var ae=C(()=>{cs();ne();Z.deparse;});function ot(l){if("String"in l)return l.String.sval}function M(l){return l.map(ot).filter(t=>t!=null)}function q(l){return l==null?[]:l.List!==void 0?l.List.items||[]:Array.isArray(l)?l:[l]}function kt(l){return h.quoteIdentifier(l)}function tt(l){return Object.keys(l)[0]}function fs(l){if("A_Const"in l){if(l.A_Const.ival)return l.A_Const.ival.ival;if(l.A_Const.fval)return l.A_Const.fval.fval;if(l.A_Const.sval)return l.A_Const.sval.sval;if(l.A_Const.boolval)return l.A_Const.boolval.boolval;if(l.A_Const.isnull)return null}}var V=C(()=>{ae();});function ms(l){let t=l.toLowerCase().trim();if(t.startsWith("_")||t.endsWith("[]"))return "TEXT";let s=Ci[t];if(!s)throw new G(`Unsupported PostgreSQL type: "${l}"`);return s}function jt(l){let t=l.toLowerCase();return ["serial","serial4","bigserial","serial8","smallserial","serial2"].includes(t)}function $t(l){let t=l.toLowerCase();return ["varchar","character varying","char","character","bpchar"].includes(t)}function Ut(l){let t=l.toLowerCase();return ["numeric","decimal"].includes(t)}var G,R,Ci,hs,Ai,Ft,et=C(()=>{V();G=class extends Error{},R=class extends G{constructor(s,e){super(e??`Unsupported node type: ${tt(s)}`);this.node=s;}},Ci={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"},hs=["<",">","<=",">=","=","<>","!=","+","-","*","/","%","&","|","<<",">>","||","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","->>"];Ai={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(Ai));});var oe=Ue(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 Es=Ue(st=>{Object.defineProperty(st,"__esModule",{value:true});st.BaseVisitor=st.DeparserContext=void 0;var Ni=oe(),le=class l{indentLevel;prettyMode;isStringLiteral;parentNodeTypes;formatter;select;from;group;sort;insertColumns;update;bool;isColumnConstraint;isDomainConstraint;alterColumnOptions;alterTableOptions;isEnumValue;objtype;subtype;constructor({indentLevel:t=0,prettyMode:s=true,isStringLiteral:e,parentNodeTypes:i=[],formatter:r,select:n,from:a,group:u,sort:o,insertColumns:p,update:f,bool:m,isColumnConstraint:T,isDomainConstraint:E,alterColumnOptions:g,alterTableOptions:A,isEnumValue:S,objtype:b,subtype:_,...y}={}){this.indentLevel=t,this.prettyMode=s,this.isStringLiteral=e,this.parentNodeTypes=i,this.formatter=r||new Ni.SqlFormatter(`
45
- `," ",s),this.select=n,this.from=a,this.group=u,this.sort=o,this.insertColumns=p,this.update=f,this.bool=m,this.isColumnConstraint=T,this.isDomainConstraint=E,this.alterColumnOptions=g,this.alterTableOptions=A,this.isEnumValue=S,this.objtype=b,this.subtype=_,Object.assign(this,y);}spawn(t,s={}){return new l({indentLevel:this.indentLevel,prettyMode:this.prettyMode,isStringLiteral:this.isStringLiteral,parentNodeTypes:[...this.parentNodeTypes,t],formatter:this.formatter,select:this.select,from:this.from,group:this.group,sort:this.sort,insertColumns:this.insertColumns,update:this.update,bool:this.bool,isColumnConstraint:this.isColumnConstraint,isDomainConstraint:this.isDomainConstraint,alterColumnOptions:this.alterColumnOptions,alterTableOptions:this.alterTableOptions,isEnumValue:this.isEnumValue,objtype:this.objtype,subtype:this.subtype,...s})}indent(t,s){if(!this.prettyMode)return t;let e=s!==void 0?s:this.indentLevel+1;return this.formatter.indent(t,e)}newline(){return this.formatter.newline()}parens(t){return this.formatter.parens(t)}format(t,s){return this.formatter.format(t,s)}isPretty(){return this.formatter.isPretty()}};st.DeparserContext=le;var pe=class{getNodeType(t){return Object.keys(t)[0]}getNodeData(t){let s=this.getNodeType(t);return t[s]}formatList(t,s=", ",e="",i){return !t||t.length===0?"":t.map(r=>`${e}${i(r)}`).join(s)}formatParts(t,s=" "){return t.filter(e=>e!=null&&e!=="").join(s)}formatParens(t){return `(${t})`}formatIndent(t,s=1){return t}};st.BaseVisitor=pe;});var Mt,gs=C(()=>{et();V();Mt=class{constructor(t){this.ast=t;this.result=[...this.walk(this.ast,[],{trackPaths:["returningList"]})];}result=[];*walk(t=this.ast,s=[],e={}){if(!t||typeof t!="object")return;let{trackPaths:i=[]}=e;if(Array.isArray(t)){for(let n=0;n<t.length;n++)yield*this.walk(t[n],s,e);return}let r=Object.keys(t);if(r.length===1&&r[0][0]>="A"&&r[0][0]<="Z"){let n=r[0];yield {node:t,path:s},yield*this.walk(t[n],[...s,n],e);}else for(let[n,a]of Object.entries(t))if(a&&typeof a=="object"){let u=i.includes(n)?[...s,n]:s;yield*this.walk(a,u,e);}}containsUnsupportedNode(){for(let{node:t}of this.result){let s=tt(t),e=Ft.get(s);if(e&&e.react==="error")return true}}hasFuncCall(){for(let{node:t}of this.result)if("FuncCall"in t)return true;return false}getFuncCalls(){return Array.from(this.result).map(({node:t})=>t).filter(t=>"FuncCall"in t).map(t=>t.FuncCall)}getFuncCallNames(){return this.getFuncCalls().flatMap(t=>t.funcname?.map(s=>s.String?.sval||s.String?.str))}hasSqlValueFunction(){for(let{node:t}of this.result)if("SQLValueFunction"in t)return true;return false}getSqlValueFunctions(){return Array.from(this.result).map(({node:t})=>t).filter(t=>"SQLValueFunction"in t).map(t=>t.SQLValueFunction)}getSqlValueFunctionNames(){return this.getSqlValueFunctions().map(t=>t.op)}hasUnsafeStar(){let t=this.result.filter(({node:s})=>"A_Star"in s);if(t.length===0)return false;for(let{path:s}of t)if(!s.includes("SelectStmt")&&!s.includes("returningList"))return true;return false}getRelationDefinitions(){return this.result.filter(({node:s})=>"CreateStmt"in s).map(({node:s})=>s.CreateStmt).map(s=>({relation:{relname:s.relation?.relname??"",inh:s.relation?.inh,relpersistence:s.relation?.relpersistence},columns:s.tableElts?.map(e=>{let i=e.ColumnDef?.typeName?.names?.map(n=>"String"in n?n.String.sval:""),r=i?.some(n=>n.toLowerCase().includes("pg_catalog"));return {name:e.ColumnDef?.colname??"",is_local:e.ColumnDef?.is_local,pg_catalog:r,type:i?.filter(n=>!n.toLowerCase().includes("pg_catalog"))[0]??"",types:i,constraints:e.ColumnDef?.constraints}})}))}getRelationColumnTypes(){return {has_non_pg_catalog_types:this.getRelationDefinitions().some(t=>t.columns?.some(s=>!s.pg_catalog)),types:Array.from(new Set(this.getRelationDefinitions().flatMap(t=>t.columns?.map(s=>s.type))))}}};});var Ri,Oi,yi,bi,it,qt,Ts=C(()=>{et();Ri=["DECLARE","IF","ELSIF","ELSE","LOOP","WHILE","FOR","FOREACH","EXCEPTION","RAISE","PERFORM","EXECUTE","SELECT"],Oi=/^NEW\.(\w+)\s*(?::=|=)\s*(.+)$/is,yi=/^RETURN\s+(NEW|OLD)$/i,bi=/^(INSERT|UPDATE|DELETE)\b/i,it=class extends G{constructor(s,e,i){super(i??`Unsupported PL/pgSQL: ${s}`);this.hint=s;this.body=e;}},qt=class{parse(t){let s=this.extractBlock(t),e=this.splitStatements(s),i=[],r=null;for(let n of e){let a=n.trim();if(!a)continue;this.rejectUnsupported(a);let u=a.match(yi);if(u){r=u[1].toUpperCase(),i.push({type:"return",value:r});continue}let o=a.match(Oi);if(o){i.push({type:"assignment",column:o[1],expression:o[2].trim()});continue}if(bi.test(a)){i.push({type:"dml",sql:a});continue}throw new it(`"${a.substring(0,80)}" is not translatable to SQLite`,s)}if(!r)throw new G("Trigger function body must end with RETURN NEW or RETURN OLD");return {statements:i,returnValue:r}}extractBlock(t){let s=t.trim(),e=s.toUpperCase();if(/^\s*DECLARE\b/i.test(s))throw new it('"DECLARE" is not translatable to SQLite',t);let i=e.indexOf("BEGIN"),r=e.lastIndexOf("END");if(i===-1||r===-1||r<=i)throw new it("Expected BEGIN ... END block in trigger function body",t);return s.slice(i+5,r).trim()}splitStatements(t){let s=[],e="",i=0,r=false,n="";for(let u=0;u<t.length;u++){let o=t[u];if(r){e+=o,o===n&&(u+1<t.length&&t[u+1]===n?e+=t[++u]:r=false);continue}if(o==="'"||o==='"'){r=true,n=o,e+=o;continue}if(o==="("){i++,e+=o;continue}if(o===")"){i--,e+=o;continue}if(o===";"&&i===0){s.push(e.trim()),e="";continue}e+=o;}let a=e.trim();return a&&s.push(a),s}rejectUnsupported(t){let s=t.match(/^(\w+)/)?.[1]?.toUpperCase();if(s&&Ri.includes(s))throw new it(`"${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 pt,fe=C(()=>{Vt();pt=class extends W{constructor(t){super({...t,isSerial:true});}};});function Ii(l,t){let{precision:s,scale:e}=t,i=10**e,r=10**(s-e);return Math.abs(Math.round(l*i)-l*i)<1e-4&&Math.abs(l)<r}var ct,he=C(()=>{k();ct=class extends L{numericPrecision;constructor(t,s){super(t),this.numericPrecision=s;}get isShimBacked(){return this.numericPrecision!==void 0}get sqliteType(){return "REAL"}checkConstraint(){if(this.numericPrecision){let{precision:t,scale:s}=this.numericPrecision,e=this.context.column,i=10**s,r=10**(t-s);return `ABS(ROUND(${e} * ${i}) - ${e} * ${i}) < 0.0001 AND ABS(${e}) < ${r}`}return null}validateStorage(t){if(this.isNullish(t))return this.validationPass();if(typeof t!="number"||!Number.isFinite(t))return this.validationFail("Expected finite number.","Patch rows with finite numbers.");if(this.numericPrecision){let{precision:s,scale:e}=this.numericPrecision;if(!Ii(t,this.numericPrecision))return this.validationFail(`Does not fit numeric(${s}, ${e}).`,"Patch rows within numeric precision.")}return this.validationPass()}};});var I,v=C(()=>{k();I=class extends L{lengthConstraint;constructor(t,s){super(t),this.lengthConstraint=s;}get isShimBacked(){return this.lengthConstraint!==void 0}get sqliteType(){return "TEXT"}checkConstraint(){return this.lengthConstraint!==void 0?`length(${this.context.column}) <= ${this.lengthConstraint}`:null}validateStorage(t){return this.isNullish(t)?this.validationPass():typeof t!="string"?this.validationFail("Expected text.","Patch rows with text values."):this.lengthConstraint!==void 0&&Array.from(t).length>this.lengthConstraint?this.validationFail(`Exceeds length ${this.lengthConstraint}.`,"Patch rows with shorter text."):this.validationPass()}};});var ft,me=C(()=>{k();ft=class extends L{get sqliteType(){return "BLOB"}};});var ht,Ee=C(()=>{k();ht=class extends L{get isShimBacked(){return true}get sqliteType(){return "INTEGER"}checkConstraint(){return `${this.context.column} IN (0, 1)`}serialize(t){if(this.isNullish(t))return t;if(t===true||t===1)return 1;if(t===false||t===0)return 0;throw this.checkError("boolean_range",t)}deserialize(t){return this.isNullish(t)?t:t===1?true:t===0?false:t}validateStorage(t){return this.isNullish(t)?this.validationPass():t===1||t===0?this.validationPass():this.validationFail("Expected 0 or 1.","Patch rows with boolean values.")}};});function Ss(l){try{return {ok:!0,value:JSON.parse(l)}}catch{return {ok:false}}}var mt,ge=C(()=>{k();mt=class extends L{get isShimBacked(){return true}get sqliteType(){return "TEXT"}checkConstraint(){let t=this.context.column;return `${t} IS NULL OR json_valid(${t})`}serialize(t){if(this.isNullish(t))return t;try{return JSON.stringify(t)}catch{throw this.checkError("json_valid",t)}}deserialize(t){if(this.isNullish(t))return t;if(typeof t=="string"){let s=Ss(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."):Ss(t).ok?this.validationPass():this.validationFail("Invalid JSON text.","Patch rows with valid JSON.")}};});function Li(l){if(!/^\d{4}-\d{2}-\d{2}$/.test(l))return false;let t=new Date(`${l}T00:00:00.000Z`);return !Number.isNaN(t.getTime())&&t.toISOString().slice(0,10)===l}var Et,Te=C(()=>{v();Et=class extends I{get isShimBacked(){return true}checkConstraint(){let t=this.context.column;return `${t} IS NULL OR date(${t}) IS NOT NULL`}validateStorage(t){return this.isNullish(t)?this.validationPass():typeof t!="string"||!Li(t)?this.validationFail("Invalid date.","Patch rows with YYYY-MM-DD dates."):this.validationPass()}};});function _i(l){let t=l.match(/^(\d{2}):(\d{2})(?::(\d{2})(?:\.\d{1,6})?)?([+-](\d{2}):?(\d{2}))?$/);if(!t)return false;let s=Number(t[1]),e=Number(t[2]),i=t[3]===void 0?0:Number(t[3]),r=t[5]===void 0?null:Number(t[5]),n=t[6]===void 0?null:Number(t[6]),a=r===null||n!==null&&r<=15&&n<=59;return s<=24&&e<=59&&i<=59&&(s!==24||e===0&&i===0)&&a}var gt,Se=C(()=>{v();gt=class extends I{get isShimBacked(){return true}checkConstraint(){let t=this.context.column;return `${t} IS NULL OR time(${t}) IS NOT NULL`}validateStorage(t){return this.isNullish(t)?this.validationPass():typeof t!="string"||!_i(t)?this.validationFail("Invalid time.","Patch rows with HH:MM[:SS] times."):this.validationPass()}};});function wi(l){let t=l.match(/^(\d{4})-(\d{2})-(\d{2})[ T](\d{2}):(\d{2})(?::(\d{2})(?:\.\d{1,6})?)?(?:Z|([+-](\d{2}):?(\d{2})))?$/);if(!t)return false;let s=Number(t[1]),e=Number(t[2]),i=Number(t[3]),r=Number(t[4]),n=Number(t[5]),a=t[6]===void 0?0:Number(t[6]),u=t[8]===void 0?null:Number(t[8]),o=t[9]===void 0?null:Number(t[9]),p=new Date(Date.UTC(s,e-1,i)),f=p.getUTCFullYear()===s&&p.getUTCMonth()===e-1&&p.getUTCDate()===i,m=r<=24&&n<=59&&a<=59&&(r!==24||n===0&&a===0),T=u===null||o!==null&&u<=15&&o<=59;return f&&m&&T}var Tt,Ce=C(()=>{v();Tt=class extends I{get isShimBacked(){return true}checkConstraint(){let t=this.context.column;return `${t} IS NULL OR datetime(${t}) IS NOT NULL`}validateStorage(t){return this.isNullish(t)?this.validationPass():typeof t!="string"||!wi(t)?this.validationFail("Invalid timestamp.","Patch rows with ISO timestamps."):this.validationPass()}};});var St,Ae=C(()=>{v();St=class extends I{get isShimBacked(){return true}validateStorage(t){return this.isNullish(t)?this.validationPass():typeof t!="string"||t.trim().length===0?this.validationFail("Expected interval text.","Patch rows with interval strings."):/^-?\d+(?:\.\d+)?$/.test(t.trim())?this.validationFail("Ambiguous numeric interval.","Patch rows with explicit interval strings."):this.validationPass()}};});var Ct,Ne=C(()=>{v();Ct=class extends I{enumValues;constructor(t,s){super(t),this.enumValues=s;}get isShimBacked(){return true}checkConstraint(){let t=this.context.column,s=this.enumValues.map(e=>`'${e.replace(/'/g,"''")}'`).join(", ");return `${t} IN (${s})`}serialize(t){if(this.isNullish(t))return t;if(typeof t!="string"||!this.enumValues.includes(t))throw this.checkError("enum_membership",t);return t}validateStorage(t){return this.isNullish(t)?this.validationPass():typeof t!="string"||!this.enumValues.includes(t)?this.validationFail("Invalid enum value.","Patch rows with declared enum values."):this.validationPass()}};});function Cs(l){try{return {ok:!0,value:JSON.parse(l)}}catch{return {ok:false}}}var rt,Re=C(()=>{k();rt=class extends L{elementField;constructor(t,s){super(t),this.elementField=s;}get sqliteType(){return "TEXT"}get isShimBacked(){return true}checkConstraint(){let t=this.context.column;return `${t} IS NULL OR (json_valid(${t}) AND json_type(${t}) = 'array')`}serialize(t){if(this.isNullish(t))return t;if(!Array.isArray(t))throw this.checkError("array_type",t);return this.elementField?JSON.stringify(t.map(s=>this.elementField.serialize(s))):JSON.stringify(t)}deserialize(t){if(this.isNullish(t))return t;if(typeof t=="string"){let s=Cs(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=Cs(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 As(l){return di.test(l.toLowerCase())}var vi,di,At,Oe=C(()=>{v();vi="????????-????-????-????-????????????",di=/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/;At=class extends I{get isShimBacked(){return true}checkConstraint(){let t=this.quoteIfNeeded(this.context.column);return `${t} IS NULL OR ${t} GLOB '${vi}'`}serialize(t){if(this.isNullish(t))return t;if(typeof t!="string")throw this.checkError("uuid_format",t);let s=t.toLowerCase();if(!As(s))throw this.checkError("uuid_format",t);return s}validateStorage(t){return this.isNullish(t)?this.validationPass():typeof t!="string"||!As(t)?this.validationFail("Invalid UUID.","Patch rows with valid UUIDs."):this.validationPass()}};});function Di(l){let t=l.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 Pi(l){let t=l.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 ki(l){if(!l.includes(":"))return false;try{return new URL(`http://[${l}]/`),!0}catch{return false}}function Ns(l){let t=Di(l);return t?Pi(t.address)?t.prefix===null||t.prefix>=0&&t.prefix<=32:ki(t.address)?t.prefix===null||t.prefix>=0&&t.prefix<=128:false:false}var Nt,ye=C(()=>{v();Nt=class extends I{get isShimBacked(){return true}checkConstraint(){let t=this.quoteIfNeeded(this.context.column);return `${t} IS NULL OR (length(${t}) BETWEEN 3 AND 49 AND (instr(${t}, '.') > 0 OR instr(${t}, ':') > 0))`}serialize(t){if(this.isNullish(t))return t;if(typeof t!="string")throw this.checkError("inet_format",t);let s=t.trim();if(!Ns(s))throw this.checkError("inet_format",t);return s}validateStorage(t){return this.isNullish(t)?this.validationPass():typeof t!="string"||!Ns(t.trim())?this.validationFail("Invalid inet address.","Patch rows with valid inet strings."):this.validationPass()}};});var Rt,be=C(()=>{v();Rt=class extends I{serialize(t){throw new Error(`Unsupported type "${this.context.pgTypeName}" for ${this.context.table}.${this.context.column}`)}deserialize(t){throw new Error(`Unsupported type "${this.context.pgTypeName}" for ${this.context.table}.${this.context.column}`)}toColumnDDL(){throw new Error(`Unsupported type "${this.context.pgTypeName}" for ${this.context.table}.${this.context.column}`)}};});function J(l,t){if(t?.isArray){let e=J(l,{...t,isArray:false});return new rt(l,e)}if(t?.enumValues)return new Ct(l,t.enumValues);let s=l.pgTypeName.toLowerCase().trim();if(s.startsWith("_")||s.endsWith("[]")){let e=s.startsWith("_")?s.slice(1):s.slice(0,-2),i={...l,pgTypeName:e},r=J(i);return new rt(l,r)}return $i.has(s)?new pt(l):ji.has(s)?new W(l):Mi.has(s)?new ht(l):qi.has(s)?new mt(l):Ji.has(s)?new Et(l):xi.has(s)?new gt(l):Yi.has(s)?new Tt(l):Hi.has(s)?new St(l):Bi.has(s)?new ft(l):Ui.has(s)?new ct(l,t?.numericPrecision):Vi.has(s)?new At(l):Gi.has(s)?new I(l,63):Wi.has(s)?new Nt(l):Fi.has(s)?new I(l,t?.lengthConstraint):new Rt(l)}var ji,$i,Ui,Fi,Bi,Mi,qi,Vi,Gi,Wi,Ji,xi,Yi,Hi,Ie=C(()=>{Vt();fe();he();v();me();Ee();ge();Te();Se();Ce();Ae();Ne();Re();Oe();ye();be();ji=new Set(["int2","smallint","int4","integer","int","int8","bigint"]),$i=new Set(["serial","serial4","bigserial","serial8","smallserial","serial2"]),Ui=new Set(["float4","real","float8","double precision","numeric","decimal"]),Fi=new Set(["text","varchar","character varying","char","character","bpchar"]),Bi=new Set(["bytea"]),Mi=new Set(["bool","boolean"]),qi=new Set(["json","jsonb"]),Vi=new Set(["uuid"]),Gi=new Set(["name"]),Wi=new Set(["inet"]),Ji=new Set(["date"]),xi=new Set(["time","timetz","time without time zone","time with time zone"]),Yi=new Set(["timestamp","timestamptz","timestamp without time zone","timestamp with time zone"]),Hi=new Set(["interval"]);});function Le(l,t="auto"){let s=l.toLowerCase(),e=Gt[s];if(!e)return null;switch(t){case "translate":{if(!e.sqlite)throw new Error(`No SQLite translation for function "${l}"`);return {sqliteExpr:e.sqlite(),jsFn:null}}case "synthetic":{if(!e.js)throw new Error(`No JS implementation for function "${l}"`);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 Rs,Gt,_e=C(()=>{Rs="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:()=>Rs,js:()=>crypto.randomUUID()},uuid_generate_v4:{sqlite:()=>Rs,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 Os,ys,Wt,bs=C(()=>{ae();et();Os=Fe(Es());V();ys=Fe(oe());V();gs();zt();Ts();ee();te();se();bt();Ie();_e();Wt=class extends Z{enums;schemaHandling;warnings=[];helper;config;triggerFunctions=new Map;plpgsqlParser=new qt;introspection;functionResolution;constructor(t,{enums:s,schemaHandling:e,introspection:i,...r}={}){super(t,r),this.schemaHandling=e??"default",this.enums=s??new Map,this.helper=new Mt(t),this.config=r,this.introspection=i,this.functionResolution=r?.functionResolution??"translate";}visit(t,s){let e=tt(t),i=Ft.get(e);if(i){if(i.react==="error")throw new R({[e]:t},`Unsupported node type: ${e}`);return i.react==="warn"&&this.warnings.push({type:e,node:t}),""}return super.visit(t,s)}deparse(t,s){if(t==null)return null;if(!s){let e=new ys.SqlFormatter;s=new Os.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=>We(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":ms(i)}ColumnDef(t,s){let e=[],i=t.colname;i&&e.push(this.quoteIfNeeded(i));let r=false,n=false,a=null,u=null,o=null,p=false;if(t.typeName){let f=t.typeName.names?.map(E=>E.String?.sval||E.String?.str).filter(Boolean);o=f&&(f.length===2&&f[0]==="pg_catalog"?f[1]:f[0]),r=!!(o&&jt(o)),p=!!(t.typeName.arrayBounds&&t.typeName.arrayBounds.length>0);let m=Array.isArray(t.typeName.typmods)?t.typeName.typmods:[],T=E=>m[E]?.A_Const?.ival?.ival??m[E]?.A_Const?.val?.ival?.ival;if(o&&$t(o)&&m.length>0){let E=T(0);typeof E=="number"&&E>0&&(a={maxLen:E});}if(o&&Ut(o)&&m.length>=2){let E=T(0),g=T(1);typeof E=="number"&&typeof g=="number"&&E>0&&g>=0&&(u={precision:E,scale:g});}if(t.constraints){let E=Array.isArray(t.constraints)?t.constraints:[];n=E.some(g=>g.Constraint?.contype==="CONSTR_PRIMARY"),E.some(g=>g.Constraint?.contype==="CONSTR_IDENTITY")&&(r=true);}e.push(this.TypeName(t.typeName,s));}if(t.constraints){let f=Array.isArray(t.constraints)?t.constraints:[],m=f.map(E=>this.visit(E,s));e.push(...m.filter(Boolean));let T=f.some(E=>E.Constraint?.contype==="CONSTR_CHECK");r&&n&&!T&&e.push("AUTOINCREMENT");}if(i&&o){let f={isArray:p};a&&(f.lengthConstraint=a.maxLen),u&&(f.numericPrecision=u);let m=this.enums.get(o.toLowerCase());m&&(f.enumValues=m);let g=J({schema:"public",table:"",column:i,pgTypeName:o,nullable:true,defaultValue:null,defaultFn:null,isPrimaryKey:n,isUnique:false,isSerial:r},f).checkConstraint();g&&e.push(`CHECK (${g})`);}return e.join(" ")}Constraint(t,s){let e=t.contype;if(e==="CONSTR_IDENTITY"||e==="CONSTR_ATTR_DEFERRABLE"||e==="CONSTR_ATTR_NOT_DEFERRABLE"||e==="CONSTR_ATTR_DEFERRED"||e==="CONSTR_ATTR_IMMEDIATE")return "";if(e==="CONSTR_NULL")return "NULL";if(e==="CONSTR_NOTNULL")return "NOT NULL";if(e==="CONSTR_DEFAULT"&&t.raw_expr){let i=this.visit(t.raw_expr,s);return i.includes("(")&&!i.startsWith("(")?`DEFAULT (${i})`:`DEFAULT ${i}`}if(e==="CONSTR_CHECK"&&t.raw_expr){let i=[];t.conname&&i.push("CONSTRAINT",kt(t.conname)),i.push("CHECK");let r=this.visit(t.raw_expr,s);return i.push(`(${r})`),i.join(" ")}if(e==="CONSTR_PRIMARY")return t.keys&&t.keys.length>0?`PRIMARY KEY (${q(t.keys).map(r=>this.visit(r,s)).join(", ")})`:"PRIMARY KEY";if(e==="CONSTR_UNIQUE")return t.keys&&t.keys.length>0?`UNIQUE (${q(t.keys).map(r=>this.visit(r,s)).join(", ")})`:"UNIQUE";if(e==="CONSTR_FOREIGN")return super.Constraint(t,s).replace(/FOREIGN\s+KEY\s+REFERENCES/gi,"REFERENCES");if(e==="CONSTR_GENERATED"&&t.raw_expr)return `GENERATED ALWAYS AS (${this.visit(t.raw_expr,s)}) STORED`;if(e==="CONSTR_EXCLUSION")throw new R({Constraint:t},"EXCLUSION constraints are not supported in SQLite");return ""}FuncCall(t,s){let i=(t.funcname||[]).map(o=>o.String?.sval||o.String?.str).filter(Boolean);if(i.length===0)throw new Error("Function call has no name");let r=i[i.length-1].toLowerCase();if(r==="extract"&&t.args&&t.args.length>=2){let o=t.args[0];if((o?.A_Const?.sval?.sval||o?.String?.sval)==="epoch")return `strftime('%s', ${this.visit(t.args[1],s)})`}let a=(t.args??[]).map(o=>this.visit(o,s));if(t.agg_star)return `${r}(*)`;if(t.agg_distinct)return `${r}(DISTINCT ${a.join(", ")})`;let u=Le(r,this.functionResolution);if(u){if(u.sqliteExpr!==null){let o=u.sqliteExpr;return o.includes("(")?o:`${o}(${a.join(", ")})`}if(u.jsFn!==null){let o=Gt[r];if(o?.sqlite){let p=o.sqlite();return p.includes("(")?p:`${p}(${a.join(", ")})`}}}throw new R({FuncCall:t},`Function call "${r}" not supported`)}SQLValueFunction(t,s){switch(t.op){case "SVFOP_CURRENT_TIMESTAMP":return "datetime('now')";case "SVFOP_CURRENT_DATE":return "date('now')";case "SVFOP_CURRENT_TIME":return "time('now')";default:throw new R({SQLValueFunction:t},`SQLValueFunction "${t.op}" not supported`)}}ResTarget(t,s){if(t.indirection&&t.indirection.length>0)throw new R({ResTarget:t},"Indirections are not supported in SQLite");let e=[];return s.update&&t.name?(e.push(this.quoteIfNeeded(t.name)),e.push("="),t.val&&e.push(this.deparse(t.val,s))):s.insertColumns&&t.name?e.push(this.quoteIfNeeded(t.name)):(t.val&&e.push(this.deparse(t.val,s)),t.name&&e.push(this.Alias({aliasname:t.name},s))),e.join(" ")}A_Expr(t,s){if(["AEXPR_OP_ALL","AEXPR_OP_ANY"].includes(t.kind))throw new R({A_Expr:t},"ALL/ANY/SOME comparison operators are not supported. Use NOT EXISTS or IN instead");if(t.name&&t.name.length>0){if(t.name.length>1)throw new R({A_Expr:t},"Schema-qualified OPERATOR() syntax is not supported in SQLite");let e=t.name[0]?.String?.sval||t.name[0]?.String?.str;if(e){if(!t.lexpr||!t.rexpr)throw new R({A_Expr:t},"A_Expr missing left or right expression");if(!hs.includes(e.toUpperCase()))throw new R({A_Expr:t},`Operator "${e}" is not supported in SQLite`);if(e==="~~"||e==="~~*"){let i=this.visit(t.lexpr,s),r=this.visit(t.rexpr,s);return `${i} LIKE ${r}`}if(e==="!~~"||e==="!~~*"){let i=this.visit(t.lexpr,s),r=this.visit(t.rexpr,s);return `${i} NOT LIKE ${r}`}if(e==="~"||e==="~*"){let i=this.visit(t.lexpr,s),r=this.visit(t.rexpr,s);return `${i} GLOB ${r}`}}}return super.A_Expr(t,s)}IndexStmt(t,s){let e=["CREATE"];t.unique&&e.push("UNIQUE"),e.push("INDEX"),t.if_not_exists&&e.push("IF NOT EXISTS"),t.idxname&&e.push(kt(t.idxname)),e.push("ON"),t.relation&&e.push(this.RangeVar(t.relation,s));let i=(t.indexParams??[]).map(r=>"IndexElem"in r?this.IndexElem(r.IndexElem,s):this.visit(r,s)).filter(Boolean);return e.push(`(${i.join(", ")})`),e.join(" ")}IndexElem(t,s){let e=[];return t.name?e.push(kt(t.name)):t.expr&&e.push(`(${this.visit(t.expr,s)})`),t.ordering==="SORTBY_ASC"&&e.push("ASC"),t.ordering==="SORTBY_DESC"&&e.push("DESC"),t.nulls_ordering==="SORTBY_NULLS_FIRST"&&e.push("NULLS FIRST"),t.nulls_ordering==="SORTBY_NULLS_LAST"&&e.push("NULLS LAST"),e.join(" ")}TypeCast(t,s){if(!t.arg||!t.typeName)return super.TypeCast(t,s);if([...this.helper.walk(t)].filter(({node:n})=>"A_Star"in n).length>0)throw new R({TypeCast:t},"A.* in type casts are not supported in SQLite");if(t.typeName.arrayBounds&&t.typeName.arrayBounds.length>0){if("A_Const"in t.arg&&t.arg.A_Const.sval){let n=t.arg.A_Const.sval.sval;if(n.startsWith("{")&&n.endsWith("}")){let a=t.typeName.names?.map(f=>f.String?.sval).filter(Boolean)??[],u=a.length===2&&a[0]==="pg_catalog"?a[1]:a[0],p=["text","varchar","character varying","char","bpchar","name","uuid"].includes(u?.toLowerCase());try{let f=this.parsePgArrayLiteral(n,p);return `'${JSON.stringify(f).replace(/'/g,"''")}'`}catch{}}}return this.visit(t.arg,s)}let i=this.visit(t.arg,s),r=this.TypeName(t.typeName,s);return `CAST(${i} AS ${r})`}A_ArrayExpr(t,s){let e=q(t.elements),i=this.tryExtractStaticArray(e);return i!==void 0?`'${JSON.stringify(i).replace(/'/g,"''")}'`:`json_array(${e.map(n=>this.visit(n,s)).join(", ")})`}tryExtractStaticArray(t){let s=[];for(let e of t)if("A_ArrayExpr"in e){let i=q(e.A_ArrayExpr.elements),r=this.tryExtractStaticArray(i);if(r===void 0)return;s.push(r);}else if("A_Const"in e){let i=e.A_Const;if(i.isnull)s.push(null);else if(i.ival)s.push(i.ival.ival);else if(i.fval)s.push(parseFloat(i.fval.fval));else if(i.sval)s.push(i.sval.sval);else if("boolval"in i)s.push(i.boolval.boolval===true);else return}else return;return s}parsePgArrayLiteral(t,s){if(!t.startsWith("{")||!t.endsWith("}"))throw new Error("Not a PG array literal");let e=t.slice(1,-1);if(e.length===0)return [];let i=[],r=0;for(;r<e.length;)if(e[r]==="{"){let n=0,a=r;for(;a<e.length;){if(e[a]==="{")n++;else if(e[a]==="}"&&(n--,n===0))break;a++;}i.push(this.parsePgArrayLiteral(e.slice(r,a+1),s)),r=a+1,e[r]===","&&r++;}else if(e[r]==='"'){let n=r+1,a="";for(;n<e.length&&e[n]!=='"';)e[n]==="\\"&&n++,a+=e[n],n++;i.push(a),r=n+1,e[r]===","&&r++;}else {let n=r;for(;n<e.length&&e[n]!==","&&e[n]!=="}";)n++;if(n===r)throw new Error("Malformed PG array literal");let a=e.slice(r,n);if(a==="NULL")i.push(null);else if(s)i.push(a);else {let u=Number(a);i.push(isNaN(u)?a:u);}r=n,e[r]===","&&r++;}return i}BetweenExpr(t,s){return super.A_Expr(t,s)}AlterTableStmt(t,s){let e=t.cmds??[],i=["AT_EnableRowSecurity","AT_ForceRowSecurity"],r=e.filter(p=>"AlterTableCmd"in p&&!i.includes(p.AlterTableCmd.subtype));if(r.length===0)return "";if(!["OBJECT_TABLE","OBJECT_INDEX","OBJECT_VIEW"].includes(t.objtype))throw new R({AlterTableStmt:t},`AlterTableStmt with objtype ${t.objtype} is not supported`);let n=["AT_AddColumn","AT_DropColumn"],a=["AT_AlterColumnType","AT_SetNotNull","AT_DropNotNull","AT_ColumnDefault","AT_AddConstraint","AT_DropConstraint"],u=[],o=[];for(let p of r){let f=p.AlterTableCmd.subtype;if(n.includes(f)){let m={...t,cmds:[p]};u.push(super.AlterTableStmt(m,s));}else if(a.includes(f))o.push(p.AlterTableCmd);else throw new R({AlterTableStmt:t},`AlterTableCmd with subtype ${f} is not supported in SQLite`)}if(o.length>0){let p=this.getRelationName(t.relation);u.push(this.generateRebuildSql(p,o));}return u.join(`;
46
- `)}AlterTableCmd(t,s){if(!["AT_AddColumn","AT_DropColumn"].includes(t.subtype))throw new R({AlterTableCmd:t},`AlterTableCmd with subtype ${t.subtype} is not supported`);return t.subtype==="AT_DropColumn"&&t.behavior?super.AlterTableCmd({...t,behavior:void 0},s):super.AlterTableCmd(t,s)}DefineStmt(t,s){if(t.kind==="OBJECT_AGGREGATE")throw new Error("AGGREGATE definitions are not supported in SQLite");return super.DefineStmt(t,s)}InsertStmt(t,s){if("selectStmt"in t){let i=(t.selectStmt?.SelectStmt?.valuesLists??[]).map(r=>r.List?.items?.map(n=>"SetToDefault"in n));if(i.length===1&&i[0]?.every(r=>r===true))return super.InsertStmt({...t,selectStmt:void 0,cols:void 0},s);if(i.some(r=>r.some(n=>n===true)))throw new R({InsertStmt:t},"Insert with partial DEFAULT values is not supported")}return super.InsertStmt(t,s)}SelectStmt(t,s){if(this.helper.hasUnsafeStar())throw new R({SelectStmt:t},"Row-wise comparison using .* is not supported in SQLite. Expand to explicit per-column comparisons instead.");if(t.intoClause)throw new R({SelectStmt:t},"SELECT ... INTO clause is not supported in SQLite");if(t.distinctClause){let i=q(t.distinctClause);if(i.length>0&&Object.keys(i[0]).length>0)throw new R({SelectStmt:t},"DISTINCT ON clause is not supported in SQLite. Use window functions instead.")}if(t.limitOffset&&!t.limitCount)throw new R({SelectStmt:t},"OFFSET without LIMIT is not supported in SQLite");let e=super.SelectStmt(t,s);if(/^SELECT\s+FROM/.test(e))throw new R({SelectStmt:t},"SELECT without a target list is not supported in SQLite");return e}JoinExpr(t,s){return t.alias&&this.Alias(t.alias,s),super.JoinExpr(t,s)}A_Const(t,s){if(t.bsval!==void 0)throw new R({A_Const:t},"Bit string literals are not supported in SQLite");let e=super.A_Const(t,s);return typeof e=="string"&&e.startsWith("E'")?e.substring(2,e.length-1):e}SortBy(t,s){if(t.sortby_dir==="SORTBY_USING"){let e=q(t.useOp),i=e[0]?.String?.sval;if(e.length>1||!["<",">"].includes(i??""))throw new R({SortBy:t},"Only `USING <` or `USING >` are supported.");t.sortby_dir=i==="<"?"SORTBY_DESC":"SORTBY_ASC",t.useOp=void 0;}return super.SortBy(t,s)}RangeSubselect(t,s){if(t.lateral)throw new R({RangeSubselect:t},"LATERAL subqueries are not supported in SQLite");return super.RangeSubselect(t,s)}SubLink(t,s){if(["ANY_SUBLINK","ALL_SUBLINK"].includes(t.subLinkType))throw new R({SubLink:t},"ANY/ALL/SOME subqueries are not supported. Use NOT EXISTS or IN instead");if(t.subLinkType==="ARRAY_SUBLINK")throw new R({SubLink:t},"ARRAY subqueries are not supported in SQLite");return super.SubLink(t,s)}LockingClause(t,s){return ""}UpdateStmt(t,s){if(s.parentNodeTypes.includes("SelectStmt"))throw new R({UpdateStmt:t},"UPDATE ... FROM (SELECT ...) is not supported in SQLite");return super.UpdateStmt(t,s)}Alias(t,s){if(t.colnames&&t.colnames.length>0)throw new R({Alias:t},"Aliasing with column names is not supported in SQLite");return `AS "${t.aliasname}"`}CreateFunctionStmt(t,s){let e=t.options??[],i=t.returnType?.names?.map(o=>o.String?.sval).filter(Boolean).join("."),r=e.find(o=>o.DefElem?.defname==="language")?.DefElem?.arg?.String?.sval;if(i!=="trigger"||r!=="plpgsql")throw new R({CreateFunctionStmt:t},"Only trigger functions with LANGUAGE plpgsql are supported");let n=t.funcname?.map(o=>o.String?.sval).filter(Boolean).pop();if(!n)throw new Error("Function has no name");let a=e.find(o=>o.DefElem?.defname==="as")?.DefElem?.arg?.List?.items?.[0]?.String?.sval;if(!a)throw new Error("Function has no body");let u=this.plpgsqlParser.parse(a);return this.triggerFunctions.set(n,u),""}CreateTrigStmt(t,s){let e=t.trigname,i=this.RangeVar(t.relation,s),r=t.funcname?.map(f=>f.String?.sval).filter(Boolean).pop();if(!r)throw new Error(`Trigger "${e}" has no function reference`);let n=this.triggerFunctions.get(r);if(!n)throw new R({CreateTrigStmt:t},`Trigger "${e}" references unknown function "${r}"`);let a=t.timing===2?"BEFORE":t.timing===64?"INSTEAD OF":"AFTER",u=[];if(t.events&4&&u.push("INSERT"),t.events&8&&u.push("DELETE"),t.events&16)if(t.columns?.length){let f=t.columns.map(m=>m.String?.sval).filter(Boolean);u.push(`UPDATE OF ${f.join(", ")}`);}else u.push("UPDATE");let o=u.join(" OR "),p=this.buildTriggerBody(n,i,s);return [`CREATE TRIGGER ${e}`,`${a} ${o} ON ${i}`,"FOR EACH ROW","BEGIN",...p.map(f=>` ${f};`),"END"].join(`
47
- `)}buildTriggerBody(t,s,e){let i=[],r=[];for(let n of t.statements)if(n.type!=="return"){if(n.type==="assignment"){r.push(n);continue}r.length>0&&(i.push(this.buildAssignmentUpdate(r,s,e)),r.length=0),n.type==="dml"&&i.push(this.translateDml(n.sql,e));}return r.length>0&&i.push(this.buildAssignmentUpdate(r,s,e)),i}buildAssignmentUpdate(t,s,e){let i=t.map(r=>{let n=this.translateExpression(r.expression,e);return `${r.column} = ${n}`});return `UPDATE ${s} SET ${i.join(", ")} WHERE rowid = NEW.rowid`}translateExpression(t,s){try{let e=`SELECT ${t}`,i=t.trim().toLowerCase();return i==="now()"||i==="current_timestamp"?"datetime('now')":t}catch{return t}}translateDml(t,s){return t.replace(/\bnow\(\)/gi,"datetime('now')").replace(/\bcurrent_timestamp\b/gi,"datetime('now')").replace(/\bgen_random_uuid\(\)/gi,this.uuidExpression()).replace(/\buuid_generate_v4\(\)/gi,this.uuidExpression())}uuidExpression(){return "lower(hex(randomblob(4))) || '-' || lower(hex(randomblob(2))) || '-4' || substr(lower(hex(randomblob(2))),2) || '-' || substr('89ab',abs(random()) % 4 + 1, 1) || substr(lower(hex(randomblob(2))),2) || '-' || lower(hex(randomblob(6)))"}NullTest(t,s){if(t.arg?.ColumnRef?.fields?.length>1)throw new R({NullTest:t},"row-level NULL tests are not supported in SQLite");return super.NullTest(t,s)}RenameStmt(t,s){if(!t.renameType)throw new Error("RenameStmt requires renameType");let e=["OBJECT_TABLE","OBJECT_VIEW","OBJECT_COLUMN"];if(t.renameType==="OBJECT_COLUMN"&&(t.relationType==="OBJECT_FOREIGN_TABLE"||t.relationType==="OBJECT_VIEW"))throw new R({RenameStmt:t},`RenameStmt with relationType ${t.relationType} is not supported`);if(!e.includes(t.renameType))throw new R({RenameStmt:t},`RenameStmt with renameType ${t.renameType} is not supported in SQLite`);return super.RenameStmt(t,s)}DropStmt(t,s){let e=t.removeType;if(["OBJECT_TABLE","OBJECT_VIEW","OBJECT_INDEX","OBJECT_TRIGGER"].includes(e))return super.DropStmt(t,s);if(["OBJECT_POLICY"].includes(e))return "";throw new R({DropStmt:t},`DROP with removeType ${e} is not supported in SQLite`)}generateRebuildSql(t,s){if(!this.introspection)throw new Error(`ALTER TABLE on "${t}" requires 12-step rebuild but no introspection was provided. Pass introspection in DeparseOptions to enable column type changes, NOT NULL, defaults, and constraint modifications.`);let e=this.buildDesiredSchema(this.introspection,t,s),i=new X,r=new K,n=i.diff(this.introspection,e);return n.has_changes?r.plan(n,this.introspection,e).steps.filter(u=>!["disable_foreign_keys","begin_transaction","commit_transaction","enable_foreign_keys"].includes(u.type)).map(u=>u.sql).join(`
48
- `):""}buildDesiredSchema(t,s,e){let i={...t,tables:t.tables.map(r=>({...r})),columns:t.columns.map(r=>({...r})),indexes:t.indexes.map(r=>({...r})),foreign_keys:t.foreign_keys.map(r=>({...r})),primary_keys:t.primary_keys.map(r=>({...r})),views:t.views.map(r=>({...r})),triggers:(t.triggers??[]).map(r=>({...r})),check_constraints:t.check_constraints.map(r=>({...r})),unique_constraints:(t.unique_constraints??[]).map(r=>({...r})),comments:(t.comments??[]).map(r=>({...r})),custom_types:t.custom_types.map(r=>({...r}))};for(let r of e){let n=i.columns.findIndex(a=>a.table===s&&a.name===r.name);switch(r.subtype){case "AT_AlterColumnType":{if(n===-1)break;let a=this.extractTypeName(r);a&&(i.columns[n]={...i.columns[n],type:a.toLowerCase()});break}case "AT_SetNotNull":{if(n===-1)break;i.columns[n]={...i.columns[n],nullable:false};break}case "AT_DropNotNull":{if(n===-1)break;i.columns[n]={...i.columns[n],nullable:true};break}case "AT_ColumnDefault":{if(n===-1)break;if(r.def){let a=this.extractDefaultValue(r);i.columns[n]={...i.columns[n],default_value:a};}else i.columns[n]={...i.columns[n],default_value:null};break}case "AT_AddConstraint":case "AT_DropConstraint":{let a=i.tables.findIndex(u=>u.name===s);a!==-1&&(i.tables[a]={...i.tables[a],sql:i.tables[a].sql+" /* modified */"});break}}}return this.rebuildTableSql(i,s),i}rebuildTableSql(t,s){let e=t.tables.findIndex(f=>f.name===s);if(e===-1)return;let i=t.columns.filter(f=>f.table===s),r=t.foreign_keys.filter(f=>f.table===s),n=t.check_constraints.filter(f=>f.table===s),a=i.map(f=>{let m=`${N(f.name)} ${f.type||"TEXT"}`;return f.is_primary_key&&(m+=" PRIMARY KEY"),f.nullable||(m+=" NOT NULL"),f.default_value!=null&&(m+=` DEFAULT ${f.default_value}`),m}),u=r.map(f=>`FOREIGN KEY (${N(f.column)}) REFERENCES ${N(f.ref_table)}(${N(f.ref_column)}) ON UPDATE ${f.on_update} ON DELETE ${f.on_delete}`),o=n.map(f=>`CHECK (${f.expression})`),p=[...a,...u,...o];t.tables[e]={...t.tables[e],sql:`CREATE TABLE ${N(s)} (${p.join(", ")}) STRICT`};}extractTypeName(t){let s=t.def?.ColumnDef;return s?.typeName?.TypeName?(s.typeName.TypeName.names??[]).map(i=>i.String?.sval).filter(Boolean).pop()??null:null}extractDefaultValue(t){return t.def?"Integer"in t.def?String(t.def.Integer.ival):"Float"in t.def?t.def.Float.fval:"String"in t.def?`'${t.def.String.sval}'`:null:null}};});var w,x,we=C(()=>{V();et();w=class extends R{constructor(t,s){super(t,`Unsupported expression: ${s}`);}},x=class{deparse(t){if("A_Const"in t){let i=t.A_Const;if(i.boolval!==void 0)return i.boolval.boolval?{}:{$always:false}}let s=Object.keys(t)[0],e=this[s];if(!e)throw new w({[s]:t},`Unsupported expression: ${s}`);return e.call(this,t[s])}deparseValue(t){if("A_Const"in t)return this.A_Const(t.A_Const);if("ColumnRef"in t)return this.ColumnRef(t.ColumnRef);if("FuncCall"in t)return this.FuncCall(t.FuncCall);if("SubLink"in t)return this.SubLink(t.SubLink);if("TypeCast"in t)return this.TypeCast(t.TypeCast);if("A_Expr"in t){let e=this.isJwtAccessor(t.A_Expr);return e||this.A_Expr(t.A_Expr)}if("BoolExpr"in t)return this.BoolExpr(t.BoolExpr);let s=Object.keys(t)[0];throw new w({[s]:t},`deparseValue: ${s}`)}A_Expr(t){if(t.kind==="AEXPR_OP"){let s=t.name?.[0],e=s?ot(s):void 0;if(!e)throw new w({A_Expr:t},"A_Expr missing operator");let i=this.isJwtAccessor(t);if(i)return {[i]:{}};let r=t.lexpr?this.deparseValue(t.lexpr):void 0,n=t.rexpr?this.deparseValue(t.rexpr):void 0,a=this.mapOperator(e);if(!a)throw new w({A_Expr:t},`Unsupported operator: ${e}`);let u=t.rexpr!=null&&"ColumnRef"in t.rexpr;if(typeof r=="string"&&r.startsWith("{{")&&u)return {[n]:{[a]:r}};let o=u&&typeof n=="string"?{$ref:n}:n;return {[r]:{[a]:o}}}if(t.kind==="AEXPR_LIKE"||t.kind==="AEXPR_ILIKE"){let s=t.lexpr?this.deparseValue(t.lexpr):void 0,e=t.rexpr?this.deparseValue(t.rexpr):void 0,r=(t.name?.[0]?ot(t.name[0]):"~~")==="!~~"?"$notLike":"$like";return {[s]:{[r]:e}}}if(t.kind==="AEXPR_IN"){let s=t.lexpr?this.deparseValue(t.lexpr):void 0,e=t.rexpr&&"List"in t.rexpr&&t.rexpr.List.items?t.rexpr.List.items.map(i=>this.deparseValue(i)):[];return {[s]:{$in:e}}}throw new w({A_Expr:t},`A_Expr kind: ${t.kind}`)}BoolExpr(t){let s=t.args??[];switch(t.boolop){case "AND_EXPR":return {$and:s.map(e=>this.deparse(e))};case "OR_EXPR":return {$or:s.map(e=>this.deparse(e))};case "NOT_EXPR":return {$not:this.deparse(s[0])};default:throw new w({BoolExpr:t},`BoolExpr op: ${t.boolop}`)}}NullTest(t){let s=t.arg?this.deparseValue(t.arg):void 0;return t.nulltesttype==="IS_NULL"?{[s]:{$is:null}}:{[s]:{$isNot:null}}}SubLink(t){if(t.subLinkType==="ANY_SUBLINK"){let s=t.testexpr?this.deparseValue(t.testexpr):void 0,e=t.subselect?this.SelectStmt(t.subselect.SelectStmt):void 0;return {[s]:{$in:e}}}if(t.subLinkType==="EXISTS_SUBLINK")return {$exists:t.subselect?this.SelectStmt(t.subselect.SelectStmt):void 0};if(t.subLinkType==="EXPR_SUBLINK"){let s=t.subselect?t.subselect.SelectStmt:void 0;if(s?.fromClause?.length)return this.SelectStmt(s);if(s?.targetList?.[0]){let e=s.targetList[0],i="ResTarget"in e?e.ResTarget:void 0;if(i?.val){let r=this.deparseValue(i.val);return r}}}throw new w({SubLink:t},`SubLink type: ${t.subLinkType}`)}SelectStmt(t){let{from:s,schema:e,join:i}=this.deparseFromClause(t.fromClause??[]),r=[];for(let m of t.targetList??[]){let T="ResTarget"in m?m.ResTarget:void 0;if(T?.val){let E=this.deparseValue(T.val);Array.isArray(E)?r.push(...E.map(String)):E!=null&&E!==""&&r.push(String(E));}}let n=t.whereClause?this.deparse(t.whereClause):void 0,a=this.deparseSortClause(t.sortClause),u=this.deparseLimit(t.limitCount),o=this.deparseLimit(t.limitOffset),p=this.deparseGroupClause(t.groupClause),f={type:"query",from:s,select:r};return e&&(f.schema=e),Object.keys(i).length>0&&(f.join=i),n&&(f.where=n),a.length>0&&(f.order=a),u!==void 0&&(f.limit=u),o!==void 0&&(f.offset=o),p.length>0&&(f.group=p),f}FuncCall(t){let s=this.isAuthFunc(t.funcname??[]);if(s)return s;throw new w({FuncCall:t},`FuncCall: ${M(t.funcname??[]).join(".")}`)}ColumnRef(t){let s=M(t.fields??[]);return s.length===1?s[0]:s.join(".")}A_Const(t){if(t.boolval!==void 0)return t.boolval.boolval;if(t.ival!==void 0)return t.ival.ival??0;if(t.fval!==void 0)return parseFloat(t.fval.fval??"0");if(t.sval!==void 0)return t.sval.sval??"";if(t.isnull)return null;throw new w({A_Const:t},"A_Const: unknown variant")}TypeCast(t){if(!t.arg)throw new w({TypeCast:t},"TypeCast: missing arg");return this.deparseValue(t.arg)}BooleanTest(t){let s=t.arg?this.deparseValue(t.arg):void 0;return t.booltesttype==="IS_TRUE"?{[s]:{$eq:true}}:{[s]:{$eq:false}}}deparseFromClause(t){let s={};if(t.length===0)return {from:"",join:s};let e=t[0];if("RangeVar"in e){let i=e.RangeVar;return {from:i.relname??"",schema:i.schemaname,join:s}}if("JoinExpr"in e){let{from:i,schema:r}=this.walkJoinExpr(e.JoinExpr,s);return {from:i,schema:r,join:s}}return {from:"",join:s}}walkJoinExpr(t,s){let e={from:""};if(t.larg)if("RangeVar"in t.larg){let i=t.larg.RangeVar;e={from:i.relname??"",schema:i.schemaname};}else "JoinExpr"in t.larg&&(e=this.walkJoinExpr(t.larg.JoinExpr,s));if(t.rarg&&"RangeVar"in t.rarg){let i=t.rarg.RangeVar,r=i.relname??"",n=i.alias?.aliasname??r,a=t.jointype==="JOIN_LEFT"?"left":"inner",u={from:r,type:a};t.quals&&(u.on=this.deparse(t.quals));let o=n;if(o in s){let p=2;for(;`${o}_${p}`in s;)p++;o=`${o}_${p}`;}s[o]=u;}return e}deparseSortClause(t){if(!t)return [];let s=[];for(let e of t){if(!("SortBy"in e))continue;let i=e.SortBy;if(!i.node)continue;let r=String(this.deparseValue(i.node)),n=i.sortby_dir==="SORTBY_DESC"?"desc":"asc",a={column:r,direction:n};i.sortby_nulls==="SORTBY_NULLS_FIRST"?a.nullsFirst=true:i.sortby_nulls==="SORTBY_NULLS_LAST"&&(a.nullsFirst=false),s.push(a);}return s}deparseLimit(t){if(!t)return;let s=this.deparseValue(t);return typeof s=="number"?s:Number(s)}deparseGroupClause(t){return t?t.map(s=>String(this.deparseValue(s))):[]}isAuthFunc(t){let s=M(t);if(s.length===2&&s[0]==="auth"){if(s[1]==="uid")return "{{auth.uid}}";if(s[1]==="jwt")return "{{auth.jwt}}";if(s[1]==="role")return "{{auth.role}}";throw new Error(`Unsupported auth function: "${s.slice(1).join(".")}"`)}return null}isJwtAccessor(t){if(t.kind!=="AEXPR_OP")return null;let s=t.name?.[0]?ot(t.name[0]):void 0;if(s!=="->"&&s!=="->>")return null;let e=t.rexpr&&"A_Const"in t.rexpr?t.rexpr.A_Const.sval?.sval:void 0;if(e===void 0)return null;if(t.lexpr&&"FuncCall"in t.lexpr)return this.isAuthFunc(t.lexpr.FuncCall.funcname??[])==="{{auth.jwt}}"?`{{auth.jwt.${e}}}`:null;if(t.lexpr&&"A_Expr"in t.lexpr){let i=this.isJwtAccessor(t.lexpr.A_Expr);if(i)return `${i.slice(0,-2)}.${e}}}`}return null}mapOperator(t){switch(t){case "=":return "$eq";case "<>":case "!=":return "$neq";case ">":return "$gt";case ">=":return "$gte";case "<":return "$lt";case "<=":return "$lte";case "~~":return "$like";case "!~~":return "$notLike";default:return}}};});var Ot,Is=C(()=>{Ot=class{table;schema;fields;constructor(t,s="public",e=new Map){this.table=t,this.schema=s,this.fields=e;}get(t){return this.fields.get(t)}has(t){return this.fields.has(t)}set(t,s){this.fields.set(t,s);}columns(){return Array.from(this.fields.keys())}all(){return Array.from(this.fields.values())}serializeRow(t){let s={};for(let[e,i]of Object.entries(t)){let r=this.fields.get(e);s[e]=r?r.serialize(i):i;}return s}deserializeRow(t){let s={};for(let[e,i]of Object.entries(t)){let r=this.fields.get(e);s[e]=r?r.deserialize(i):i;}return s}applyDefaults(t){let s={...t};for(let[e,i]of this.fields)!(e in s)&&i.context.defaultFn&&(s[e]=i.context.defaultFn());return s}};});var Ls=C(()=>{k();ce();Vt();fe();he();v();me();Ee();ge();Te();Se();Ce();Ae();Ne();Re();Oe();ye();be();Ie();_e();Is();});function ws(l){let t=new Map;for(let s of l.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 vs(l){let t=new Map;for(let s of l.stmts??[]){if(!s.stmt||!("VariableSetStmt"in s.stmt))continue;let e=s.stmt.VariableSetStmt,i=e.name,r=fs(e.args?.[0]??{});t.set(i,{value:r,local:e.is_local});}return t}function ds(l){let t=new x,s=new Set,e=[];for(let i of l.stmts??[])if(i.stmt){if("CreatePolicyStmt"in i.stmt){let r=i.stmt.CreatePolicyStmt,n=r.table?.relname??"",a=r.table?.schemaname,u={select:"SELECT",insert:"INSERT",update:"UPDATE",delete:"DELETE"},o=r.cmd_name?u[r.cmd_name]??"ALL":"ALL",p=r.permissive===true,f=[],m=false;for(let A of r.roles??[])if("RoleSpec"in A){let S=A.RoleSpec;S.roletype==="ROLESPEC_PUBLIC"?S.location===-1&&(m=true):S.roletype==="ROLESPEC_CSTRING"&&S.rolename&&f.push(S.rolename);}if(m){let A=a?`${a}.${n}`:n,S=r.policy_name??"",b=`${A}::${S}`;_s.has(b)||(_s.add(b),console.warn(`[supalite] policy "${S}" on "${A}" has no TO clause \u2014 applies to all roles (PUBLIC). For clarity, prefer an explicit \`TO <role>\` clause (e.g. \`TO authenticated\`).`));}let T=r.qual?t.deparse(r.qual):void 0,E=r.with_check?t.deparse(r.with_check):void 0,g=new $({name:r.policy_name??"",table:n,schema:a,command:o,permissive:p,roles:f,using:T,withCheck:E});e.push(g);}if("AlterTableStmt"in i.stmt){let r=i.stmt.AlterTableStmt;if((r.cmds??[]).some(u=>"AlterTableCmd"in u&&(u.AlterTableCmd.subtype==="AT_EnableRowSecurity"||u.AlterTableCmd.subtype==="AT_ForceRowSecurity"))){let u=r.relation?.relname??"";s.add(u);}}}return {policies:e,tables:s}}function Ds(l,t){let s=new Map;for(let e of l.stmts??[]){if(!e.stmt||!("CreateStmt"in e.stmt))continue;let i=e.stmt.CreateStmt,r=i.relation?.relname??"",n=i.relation?.schemaname??"public";if(!r)continue;let a=new Ot(r,n);for(let u of i.tableElts??[]){if(!("ColumnDef"in u))continue;let o=u.ColumnDef,p=o.colname;if(!p)continue;let f=o.typeName?.names?.map(O=>O.String?.sval||O.String?.str).filter(Boolean),m=f&&(f.length===2&&f[0]==="pg_catalog"?f[1]:f[0]);if(!m)continue;let T=!!o.typeName?.arrayBounds?.length,E=Array.isArray(o.typeName?.typmods)?o.typeName.typmods:[],g=O=>E[O]?.A_Const?.ival?.ival??E[O]?.A_Const?.val?.ival?.ival,A={isArray:T};if($t(m)&&E.length>0){let O=g(0);typeof O=="number"&&O>0&&(A.lengthConstraint=O);}if(Ut(m)&&E.length>=2){let O=g(0),H=g(1);typeof O=="number"&&typeof H=="number"&&O>0&&H>=0&&(A.numericPrecision={precision:O,scale:H});}let S=t.get(m.toLowerCase());S&&(A.enumValues=S);let b=Array.isArray(o.constraints)?o.constraints:[],_=b.some(O=>O.Constraint?.contype==="CONSTR_PRIMARY"),y=jt(m)||b.some(O=>O.Constraint?.contype==="CONSTR_IDENTITY"),d=b.some(O=>O.Constraint?.contype==="CONSTR_NOTNULL"),D=b.find(O=>O.Constraint?.contype==="CONSTR_UNIQUE"),F=b.find(O=>O.Constraint?.contype==="CONSTR_GENERATED"),Pe=b.find(O=>O.Constraint?.contype==="CONSTR_FOREIGN"),ke=b.find(O=>O.Constraint?.contype==="CONSTR_CHECK"),je;if(Pe){let O=Pe.Constraint,H=O.pktable?.relname,Vs=O.pktable?.schemaname,$e=O.pk_attrs?.[0]?.String?.sval;H&&$e&&(je={refSchema:Vs,refTable:H,refColumn:$e,constraintName:O.conname||void 0});}let qs={schema:n,table:r,column:p,pgTypeName:m,nullable:!d&&!_,defaultValue:null,defaultFn:null,isPrimaryKey:_,isUnique:!!D,isSerial:y,isGenerated:!!F,fkRef:je,hasCheck:!!ke,checkConstraintName:ke?.Constraint?.conname||void 0,uniqueConstraintName:D?.Constraint?.conname||void 0};a.set(p,J(qs,A));}s.set(`${n}.${r}`,a);}return s}function Ps(l){let t=[];for(let s of l.stmts??[]){if(!s.stmt||!("CreateStmt"in s.stmt))continue;let e=s.stmt.CreateStmt,i=e.relation?.relname??"",r=e.relation?.schemaname??"public";if(i)for(let n of e.tableElts??[]){if("ColumnDef"in n)continue;let a=n;if(!a.Constraint)continue;let u=a.Constraint,o=u.contype;if(o==="CONSTR_UNIQUE"){let p=(u.keys??[]).map(f=>f.String?.sval??f.String?.str).filter(Boolean);if(p.length===0)continue;t.push({schema:r,table:i,kind:"unique",name:u.conname||void 0,columns:p});}else if(o==="CONSTR_CHECK")t.push({schema:r,table:i,kind:"check",name:u.conname||void 0,columns:[]});else if(o==="CONSTR_FOREIGN"){let p=(u.fk_attrs??[]).map(T=>T.String?.sval??T.String?.str).filter(Boolean),f=(u.pk_attrs??[]).map(T=>T.String?.sval??T.String?.str).filter(Boolean),m=u.pktable?.relname;if(!m)continue;t.push({schema:r,table:i,kind:"foreign_key",name:u.conname||void 0,columns:p,refSchema:u.pktable?.schemaname,refTable:m,refColumns:f});}}}return t}function ks(l){let t=[];for(let s of l.stmts??[]){if(!s.stmt||!("CommentStmt"in s.stmt))continue;let e=s.stmt.CommentStmt,i=e.comment??"";if(!i)continue;let r=e.objtype,n=(e.object?.List?.items??e.object?.items??[]).map(a=>a.String?.sval??a.String?.str).filter(Boolean);if(n.length!==0){if(r==="OBJECT_TABLE"||r==="OBJECT_VIEW"){let[a,u]=n.length>=2?n:["public",n[0]];t.push({schema:a,table:u,text:i});}else if(r==="OBJECT_COLUMN"){let a="public",u,o;n.length>=3?[a,u,o]=n:[u,o]=n,t.push({schema:a,table:u,column:o,text:i});}}}return t}var _s,js=C(()=>{we();V();Lt();Ls();et();_s=new Set;});var Us={};Hs(Us,{Policy:()=>$,deparseDdl:()=>ve,deparseExpression:()=>zi,deparsePostgresDdl:()=>Qi,deparseSelect:()=>Zi,parse:()=>Q,parseExpression:()=>$s,translatePostgresDdl:()=>Ki});async function Ki(l,t={}){let s=await Q(l);return ve(s,t).ddl}async function Qi(l,t={}){let s=await Q(l);return {ast:s,...ve(s,t)}}function ve(l,t={}){let s=ws(l),e=Ds(l,s),i=vs(l),r=Ps(l),n=ks(l),a=new Wt(l,{...t,enums:s}),{policies:u,tables:o}=ds(l);if(t.strict)for(let p of u){if(!e.get(`${p.data.schema??"public"}.${p.data.table}`))throw new Error(`Policy "${p.data.name}" references unknown table "${p.data.table}"`);if(!o.has(p.data.table))throw new Error(`RLS is not enabled on table "${p.data.table}"`)}return {ddl:a.deparseQuery(),enums:s,rls:{tables:o,policies:u},schema:e,vars:i,tableConstraints:r,comments:n}}async function $s(l){let s=(await Q(`SELECT 1 WHERE ${l}`)).stmts?.[0]?.stmt;if(!s||!("SelectStmt"in s))throw new Error("expected SelectStmt");let e=s.SelectStmt.whereClause;if(!e)throw new Error("no whereClause");return e}async function zi(l){let t=await $s(l);return new x().deparse(t)}async function Zi(l){let s=(await Q(l)).stmts?.[0]?.stmt;if(!s||!("SelectStmt"in s))throw new Error("expected SelectStmt");return new x().deparse(s)}var Fs=C(()=>{is();bs();we();js();Lt();});zt();var zs=(l={})=>{let t=(s="m")=>[...l.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 mn=Object.defineProperty;var g=(i,e)=>()=>(i&&(e=i(i=0)),e);var dn=(i,e)=>{for(var t in e)mn(i,t,{get:e[t],enumerable:true});};var Et=g(()=>{});var bt=g(()=>{});function hn(i){return Object.prototype.toString.call(i)==="[object Object]"}function gn(i){return i!==null&&typeof i=="object"}function Z(i,e,t=void 0){let n=typeof e=="string"?e.split(/[.[\]"]+/).filter(r=>r):e;if(n.length===0)return i;try{let[r,...s]=n;return !r||!(r in i)?t:Z(i[r],s,t)}catch{if(typeof t<"u")return t;throw new Error(`Invalid path: ${n.join(".")}`)}}function Fe(i,...e){for(let t of e)for(let[n,r]of Object.entries(t))r!==void 0&&(!hn(r)&&!Array.isArray(r)||Array.isArray(r)&&!Array.isArray(i[n])?i[n]=r:gn(i[n])?Fe(i[n],r):i[n]=r);return i}var ye=g(()=>{});var Tt=g(()=>{});function wt(i,e){if(!i)throw new Error(e)}var Ct=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 xt(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 _t=g(()=>{});var Nt=g(()=>{});var Me=g(()=>{Et();bt();ye();Tt();Ct();Be();Se();_t();Nt();});var D,be=g(()=>{D=class i{constructor(e){this.data=e;}appliesTo(e){return this.data.command==="ALL"||this.data.command===e}appliesToRole(e){return this.data.roles.length===0||this.data.roles.includes(e)}toJSON(){return this.data}static fromJSON(e){return new i(e)}};});var G,Ke=g(()=>{Be();G=class{makeIndexKey(e){return `${e.table}:${e.name}:${e.unique}:${e.columns.join(",")}`}makeForeignKeyKey(e){return `${e.table}:${e.column}:${e.ref_table}:${e.ref_column}`}diff(e,t){let n=[],r=[],s=[],o=[],a=new Set(e.tables.map(m=>m.name)),l=new Set(t.tables.map(m=>m.name));for(let m of t.tables)a.has(m.name)||n.push({type:"added",name:m.name,sql:m.sql});for(let m of e.tables)l.has(m.name)||n.push({type:"removed",name:m.name});for(let m of e.tables){let T=t.tables.find(N=>N.name===m.name);if(!T)continue;let f=Ue(m.sql),C=Ue(T.sql);f!==C&&n.push({type:"modified",name:m.name,sql:T.sql});}let u=e.tables.filter(m=>l.has(m.name));for(let m of u){let T=e.columns.filter(w=>w.table===m.name),f=t.columns.filter(w=>w.table===m.name),C=new Map(T.map(w=>[w.name,w])),N=new Map(f.map(w=>[w.name,w]));for(let[w,k]of N)C.has(w)||r.push({type:"added",table:m.name,name:w,column:k});for(let[w]of C)N.has(w)||r.push({type:"removed",table:m.name,name:w});for(let[w,k]of C){let I=N.get(w);if(!I)continue;let P={};qe(k.type)!==qe(I.type)&&(P.type={from:k.type,to:I.type}),k.nullable!==I.nullable&&(P.nullable={from:k.nullable,to:I.nullable}),je(k.default_value)!==je(I.default_value)&&(P.default_value={from:k.default_value,to:I.default_value}),Object.keys(P).length>0&&r.push({type:"modified",table:m.name,name:w,changes:P});}}let p=new Map(e.indexes.map(m=>[this.makeIndexKey(m),m])),c=new Map(t.indexes.map(m=>[this.makeIndexKey(m),m]));for(let[m,T]of c)p.has(m)||s.push({type:"added",...T});for(let[m,T]of p)c.has(m)||s.push({type:"removed",...T});let d=new Map(e.foreign_keys.map(m=>[this.makeForeignKeyKey(m),m])),E=new Map(t.foreign_keys.map(m=>[this.makeForeignKeyKey(m),m]));for(let[m,T]of E)d.has(m)||o.push({type:"added",...T});for(let[m,T]of d)E.has(m)||o.push({type:"removed",...T});let y=n.length>0||r.length>0||s.length>0||o.length>0;return {tables:n,columns:r,indexes:s,foreign_keys:o,has_changes:y}}};});var Ve=g(()=>{});var Nn,Q,Ge=g(()=>{Ve();Se();Nn=["CURRENT_TIMESTAMP","CURRENT_TIME","CURRENT_DATE"],Q=class{plan(e,t,n,r){if(!e.has_changes)return {steps:[],warnings:[],unsafe:false};let s=[],o=[];s.push({sql:"PRAGMA foreign_keys=OFF;",description:"Disable foreign key checks",type:"disable_foreign_keys"}),s.push({sql:"BEGIN;",description:"Begin transaction",type:"begin_transaction"});for(let c of e.tables.filter(d=>d.type==="added")){s.push({sql:`${c.sql};`,description:`CREATE TABLE ${h(c.name)}`,type:"create_table"});let d=n.indexes.filter(E=>E.table===c.name);for(let E of d){let y=E.unique?"UNIQUE ":"",m=E.columns.map(T=>h(T)).join(", ");s.push({sql:`CREATE ${y}INDEX ${h(E.name)} ON ${h(c.name)} (${m});`,description:`Create index ${h(E.name)} on ${h(c.name)}`,type:"add_index"});}}let a=new Set(t.tables.map(c=>c.name)),l=new Set(n.tables.map(c=>c.name)),u=new Set(e.tables.filter(c=>c.type==="modified").map(c=>c.name)),p=[...a].filter(c=>l.has(c));for(let c of p){if(!(u.has(c)||e.columns.some(m=>m.table===c)||e.indexes.some(m=>m.table===c)||e.foreign_keys.some(m=>m.table===c)))continue;let{canAlter:E,addedCols:y}=this.canSimpleAlter(c,e,n);if(E){for(let f of y)s.push({sql:`ALTER TABLE ${h(c)} ADD COLUMN ${this.columnDef(f)};`,description:`Add column ${h(f.name)} to ${h(c)}`,type:"add_column"});let m=e.indexes.filter(f=>f.table===c&&f.type==="added"),T=e.indexes.filter(f=>f.table===c&&f.type==="removed");for(let f of T)s.push({sql:`DROP INDEX IF EXISTS ${h(f.name)};`,description:`Drop index ${h(f.name)}`,type:"drop_index"});for(let f of m){let C=f.unique?"UNIQUE ":"",N=f.columns.map(w=>h(w)).join(", ");s.push({sql:`CREATE ${C}INDEX ${h(f.name)} ON ${h(c)} (${N});`,description:`Create index ${h(f.name)} on ${h(c)}`,type:"add_index"});}}else {let m=this.rebuildTable(c,t,n,e);s.push(...m.steps),o.push(...m.warnings);}}for(let c of e.tables.filter(d=>d.type==="removed"))s.push({sql:`DROP TABLE ${h(c.name)};`,description:`Drop table ${h(c.name)}`,type:"drop_table"}),o.push({table:c.name,reason:"table will be dropped"});return s.push({sql:"COMMIT;",description:"Commit transaction",type:"commit_transaction"}),s.push({sql:"PRAGMA foreign_keys=ON;",description:"Re-enable foreign key checks",type:"enable_foreign_keys"}),{steps:s,warnings:o,unsafe:o.length>0}}rebuildTable(e,t,n,r){let s=[],o=[],a=n.tables.find(f=>f.name===e);if(!a)return {steps:s,warnings:o};let l=`_${e}_migrate_new`,u=a.sql.replace(new RegExp(`(CREATE\\s+TABLE\\s+)(?:"${e}"|${e})`,"i"),`$1${h(l)}`);s.push({sql:`${u};`,description:`Create temporary table ${h(l)}`,type:"create_table"});let p=t.columns.filter(f=>f.table===e).map(f=>f.name),c=n.columns.filter(f=>f.table===e).map(f=>f.name),d=p.filter(f=>c.includes(f));if(d.length>0){let f=d.map(C=>h(C)).join(", ");s.push({sql:`INSERT INTO ${h(l)} (${f})
13
+ SELECT ${f}
14
+ FROM ${h(e)};`,description:`Copy data from ${h(e)} to ${h(l)}`,type:"copy_data"});}s.push({sql:`DROP TABLE ${h(e)};`,description:`Drop old table ${h(e)}`,type:"drop_table"}),s.push({sql:`ALTER TABLE ${h(l)} RENAME TO ${h(e)};`,description:`Rename ${h(l)} to ${h(e)}`,type:"rename_table"});let E=n.indexes.filter(f=>f.table===e);for(let f of E){let C=f.unique?"UNIQUE ":"",N=f.columns.map(w=>h(w)).join(", ");s.push({sql:`CREATE ${C}INDEX ${h(f.name)} ON ${h(e)} (${N});`,description:`Recreate index ${h(f.name)} on ${h(e)}`,type:"add_index"});}let y=n.triggers?.filter(f=>f.table===e)??[];for(let f of y)s.push({sql:`${f.sql};`,description:`Recreate trigger ${h(f.name)} on ${h(e)}`,type:"create_trigger"});let m=r.columns.filter(f=>f.table===e&&f.type==="removed");for(let f of m)o.push({table:e,reason:`column "${f.name}" will be dropped`});let T=r.columns.filter(f=>f.table===e&&f.type==="modified");for(let f of T)f.changes?.type&&o.push({table:e,reason:`column "${f.name}" type changes from ${f.changes.type.from} to ${f.changes.type.to}`}),f.changes?.nullable&&!f.changes.nullable.to&&o.push({table:e,reason:`column "${f.name}" becomes NOT NULL`});return {steps:s,warnings:o}}canSimpleAlter(e,t,n){let r=t.columns.filter(c=>c.table===e),s=r.filter(c=>c.type==="added"),o=r.filter(c=>c.type==="removed"),a=r.filter(c=>c.type==="modified"),l=t.foreign_keys.some(c=>c.table===e);if(o.length>0||a.length>0||l)return {canAlter:false,addedCols:s};let u=n.tables.find(c=>c.name===e);return u&&/\bCHECK\s*\(/i.test(u.sql)?{canAlter:false,addedCols:s}:{canAlter:s.every(c=>{let d=c.column;return this.hasNonConstantDefault(d.default_value)?false:d.nullable||d.default_value!=null})&&s.length>0,addedCols:s}}hasNonConstantDefault(e){if(e==null)return false;let t=e.trim().toUpperCase();return Nn.includes(t)}columnDef(e){let t=e.column,n=`${h(t.name)} ${t.type||"TEXT"}`;return t.nullable||(n+=" NOT NULL"),t.default_value!=null&&(n+=` DEFAULT ${t.default_value}`),n}};});async function J(i){let{parse:e}=await import('pgsql-parser');return e(i)}var Ft=g(()=>{});function te(i){if("String"in i)return i.String.sval}function F(i){return i.map(te).filter(e=>e!=null)}function q(i){return i==null?[]:i.List!==void 0?i.List.items||[]:Array.isArray(i)?i:[i]}function Ne(i){return QuoteUtils.quoteIdentifier(i)}function Y(i){return Object.keys(i)[0]}function qt(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 jt(i){let e=i.toLowerCase().trim();if(e.startsWith("_")||e.endsWith("[]"))return "TEXT";let t=$n[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,$n,Ut,Fn,Ie,X=g(()=>{U();j=class extends Error{},S=class extends j{constructor(t,n){super(n??`Unsupported node type: ${Y(t)}`);this.node=t;}},$n={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"},Ut=["<",">","<=",">=","=","<>","!=","+","-","*","/","%","&","|","<<",">>","||","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","->>"];Fn={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(Fn));});var ve,Bt=g(()=>{X();U();ve=class{constructor(e){this.ast=e;this.result=[...this.walk(this.ast,[],{trackPaths:["returningList"]})];}result=[];*walk(e=this.ast,t=[],n={}){if(!e||typeof e!="object")return;let{trackPaths:r=[]}=n;if(Array.isArray(e)){for(let o=0;o<e.length;o++)yield*this.walk(e[o],t,n);return}let s=Object.keys(e);if(s.length===1&&s[0][0]>="A"&&s[0][0]<="Z"){let o=s[0];yield {node:e,path:t},yield*this.walk(e[o],[...t,o],n);}else for(let[o,a]of Object.entries(e))if(a&&typeof a=="object"){let l=r.includes(o)?[...t,o]:t;yield*this.walk(a,l,n);}}containsUnsupportedNode(){for(let{node:e}of this.result){let t=Y(e),n=Ie.get(t);if(n&&n.react==="error")return true}}hasFuncCall(){for(let{node:e}of this.result)if("FuncCall"in e)return true;return false}getFuncCalls(){return Array.from(this.result).map(({node:e})=>e).filter(e=>"FuncCall"in e).map(e=>e.FuncCall)}getFuncCallNames(){return this.getFuncCalls().flatMap(e=>e.funcname?.map(t=>t.String?.sval||t.String?.str))}hasSqlValueFunction(){for(let{node:e}of this.result)if("SQLValueFunction"in e)return true;return false}getSqlValueFunctions(){return Array.from(this.result).map(({node:e})=>e).filter(e=>"SQLValueFunction"in e).map(e=>e.SQLValueFunction)}getSqlValueFunctionNames(){return this.getSqlValueFunctions().map(e=>e.op)}hasUnsafeStar(){let e=this.result.filter(({node:t})=>"A_Star"in t);if(e.length===0)return false;for(let{path:t}of e)if(!t.includes("SelectStmt")&&!t.includes("returningList"))return true;return false}getRelationDefinitions(){return this.result.filter(({node:t})=>"CreateStmt"in t).map(({node:t})=>t.CreateStmt).map(t=>({relation:{relname:t.relation?.relname??"",inh:t.relation?.inh,relpersistence:t.relation?.relpersistence},columns:t.tableElts?.map(n=>{let r=n.ColumnDef?.typeName?.names?.map(o=>"String"in o?o.String.sval:""),s=r?.some(o=>o.toLowerCase().includes("pg_catalog"));return {name:n.ColumnDef?.colname??"",is_local:n.ColumnDef?.is_local,pg_catalog:s,type:r?.filter(o=>!o.toLowerCase().includes("pg_catalog"))[0]??"",types:r,constraints:n.ColumnDef?.constraints}})}))}getRelationColumnTypes(){return {has_non_pg_catalog_types:this.getRelationDefinitions().some(e=>e.columns?.some(t=>!t.pg_catalog)),types:Array.from(new Set(this.getRelationDefinitions().flatMap(e=>e.columns?.map(t=>t.type))))}}};});var qn,Un,jn,Bn,z,Oe,Mt=g(()=>{X();qn=["DECLARE","IF","ELSIF","ELSE","LOOP","WHILE","FOR","FOREACH","EXCEPTION","RAISE","PERFORM","EXECUTE","SELECT"],Un=/^NEW\.(\w+)\s*(?::=|=)\s*(.+)$/is,jn=/^RETURN\s+(NEW|OLD)$/i,Bn=/^(INSERT|UPDATE|DELETE)\b/i,z=class extends j{constructor(t,n,r){super(r??`Unsupported PL/pgSQL: ${t}`);this.hint=t;this.body=n;}},Oe=class{parse(e){let t=this.extractBlock(e),n=this.splitStatements(t),r=[],s=null;for(let o of n){let a=o.trim();if(!a)continue;this.rejectUnsupported(a);let l=a.match(jn);if(l){s=l[1].toUpperCase(),r.push({type:"return",value:s});continue}let u=a.match(Un);if(u){r.push({type:"assignment",column:u[1],expression:u[2].trim()});continue}if(Bn.test(a)){r.push({type:"dml",sql:a});continue}throw new z(`"${a.substring(0,80)}" is not translatable to SQLite`,t)}if(!s)throw new j("Trigger function body must end with RETURN NEW or RETURN OLD");return {statements:r,returnValue:s}}extractBlock(e){let t=e.trim(),n=t.toUpperCase();if(/^\s*DECLARE\b/i.test(t))throw new z('"DECLARE" is not translatable to SQLite',e);let r=n.indexOf("BEGIN"),s=n.lastIndexOf("END");if(r===-1||s===-1||s<=r)throw new z("Expected BEGIN ... END block in trigger function body",e);return t.slice(r+5,s).trim()}splitStatements(e){let t=[],n="",r=0,s=false,o="";for(let l=0;l<e.length;l++){let u=e[l];if(s){n+=u,u===o&&(l+1<e.length&&e[l+1]===o?n+=e[++l]:s=false);continue}if(u==="'"||u==='"'){s=true,o=u,n+=u;continue}if(u==="("){r++,n+=u;continue}if(u===")"){r--,n+=u;continue}if(u===";"&&r===0){t.push(n.trim()),n="";continue}n+=u;}let a=n.trim();return a&&t.push(a),t}rejectUnsupported(e){let t=e.match(/^(\w+)/)?.[1]?.toUpperCase();if(t&&qn.includes(t))throw new z(`"${t}" is not translatable to SQLite`,e)}};});var ne,Qe=g(()=>{ne=class extends Error{constructor(t,n,r,s){super(`check constraint "${r}" violated for ${t}.${n}`);this.table=t;this.column=n;this.constraint=r;this.value=s;this.name="CheckConstraintError";}};});var _,O=g(()=>{Qe();_=class{context;constructor(e){this.context=e;}get isShimBacked(){return false}checkConstraint(){return null}serialize(e){return e}deserialize(e){return e}validateStorage(e){return {status:"pass",message:null}}validationFail(e,t){return {status:"fail",message:e,action:t}}validationPass(){return {status:"pass",message:null}}isNullish(e){return e==null}toColumnDDL(e){let{includeNullable:t=true}=e??{},n=[],r=this.context.column;n.push(this.quoteIfNeeded(r)),n.push(this.sqliteType),this.context.isPrimaryKey&&n.push("PRIMARY KEY"),this.context.isSerial&&this.context.isPrimaryKey&&n.push("AUTOINCREMENT"),t&&!this.context.nullable&&!this.context.isPrimaryKey&&n.push("NOT NULL"),this.context.isUnique&&!this.context.isPrimaryKey&&n.push("UNIQUE"),this.context.defaultValue!==null&&n.push(`DEFAULT ${this.context.defaultValue}`);let s=this.checkConstraint();return s&&n.push(`CHECK (${s})`),n.join(" ")}checkError(e,t){return new ne(this.context.table,this.context.column,e,t)}quoteIfNeeded(e){return /^[a-zA-Z_][a-zA-Z0-9_]*$/.test(e)?e:`"${e}"`}};});var B,Le=g(()=>{O();B=class extends _{get sqliteType(){return "INTEGER"}};});var re,Je=g(()=>{Le();re=class extends B{constructor(e){super({...e,isSerial:true});}};});function Mn(i,e){let{precision:t,scale:n}=e,r=10**n,s=10**(t-n);return Math.abs(Math.round(i*r)-i*r)<1e-4&&Math.abs(i)<s}var se,Ye=g(()=>{O();se=class extends _{numericPrecision;constructor(e,t){super(e),this.numericPrecision=t;}get isShimBacked(){return this.numericPrecision!==void 0}get sqliteType(){return "REAL"}checkConstraint(){if(this.numericPrecision){let{precision:e,scale:t}=this.numericPrecision,n=this.context.column,r=10**t,s=10**(e-t);return `ABS(ROUND(${n} * ${r}) - ${n} * ${r}) < 0.0001 AND ABS(${n}) < ${s}`}return null}validateStorage(e){if(this.isNullish(e))return this.validationPass();if(typeof e!="number"||!Number.isFinite(e))return this.validationFail("Expected finite number.","Patch rows with finite numbers.");if(this.numericPrecision){let{precision:t,scale:n}=this.numericPrecision;if(!Mn(e,this.numericPrecision))return this.validationFail(`Does not fit numeric(${t}, ${n}).`,"Patch rows within numeric precision.")}return this.validationPass()}};});var x,A=g(()=>{O();x=class extends _{lengthConstraint;constructor(e,t){super(e),this.lengthConstraint=t;}get isShimBacked(){return this.lengthConstraint!==void 0}get sqliteType(){return "TEXT"}checkConstraint(){return this.lengthConstraint!==void 0?`length(${this.context.column}) <= ${this.lengthConstraint}`:null}validateStorage(e){return this.isNullish(e)?this.validationPass():typeof e!="string"?this.validationFail("Expected text.","Patch rows with text values."):this.lengthConstraint!==void 0&&Array.from(e).length>this.lengthConstraint?this.validationFail(`Exceeds length ${this.lengthConstraint}.`,"Patch rows with shorter text."):this.validationPass()}};});var ie,Xe=g(()=>{O();ie=class extends _{get sqliteType(){return "BLOB"}};});var oe,ze=g(()=>{O();oe=class extends _{get isShimBacked(){return true}get sqliteType(){return "INTEGER"}checkConstraint(){return `${this.context.column} IN (0, 1)`}serialize(e){if(this.isNullish(e))return e;if(e===true||e===1)return 1;if(e===false||e===0)return 0;throw this.checkError("boolean_range",e)}deserialize(e){return this.isNullish(e)?e:e===1?true:e===0?false:e}validateStorage(e){return this.isNullish(e)?this.validationPass():e===1||e===0?this.validationPass():this.validationFail("Expected 0 or 1.","Patch rows with boolean values.")}};});function Wt(i){try{return {ok:!0,value:JSON.parse(i)}}catch{return {ok:false}}}var ae,He=g(()=>{O();ae=class extends _{get isShimBacked(){return true}get sqliteType(){return "TEXT"}checkConstraint(){let e=this.context.column;return `${e} IS NULL OR json_valid(${e})`}serialize(e){if(this.isNullish(e))return e;try{return JSON.stringify(e)}catch{throw this.checkError("json_valid",e)}}deserialize(e){if(this.isNullish(e))return e;if(typeof e=="string"){let t=Wt(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."):Wt(e).ok?this.validationPass():this.validationFail("Invalid JSON text.","Patch rows with valid JSON.")}};});function Wn(i){if(!/^\d{4}-\d{2}-\d{2}$/.test(i))return false;let e=new Date(`${i}T00:00:00.000Z`);return !Number.isNaN(e.getTime())&&e.toISOString().slice(0,10)===i}var le,Ze=g(()=>{A();le=class extends x{get isShimBacked(){return true}checkConstraint(){let e=this.context.column;return `${e} IS NULL OR date(${e}) IS NOT NULL`}validateStorage(e){return this.isNullish(e)?this.validationPass():typeof e!="string"||!Wn(e)?this.validationFail("Invalid date.","Patch rows with YYYY-MM-DD dates."):this.validationPass()}};});function Kn(i){let e=i.match(/^(\d{2}):(\d{2})(?::(\d{2})(?:\.\d{1,6})?)?([+-](\d{2}):?(\d{2}))?$/);if(!e)return false;let t=Number(e[1]),n=Number(e[2]),r=e[3]===void 0?0:Number(e[3]),s=e[5]===void 0?null:Number(e[5]),o=e[6]===void 0?null:Number(e[6]),a=s===null||o!==null&&s<=15&&o<=59;return t<=24&&n<=59&&r<=59&&(t!==24||n===0&&r===0)&&a}var ce,et=g(()=>{A();ce=class extends x{get isShimBacked(){return true}checkConstraint(){let e=this.context.column;return `${e} IS NULL OR time(${e}) IS NOT NULL`}validateStorage(e){return this.isNullish(e)?this.validationPass():typeof e!="string"||!Kn(e)?this.validationFail("Invalid time.","Patch rows with HH:MM[:SS] times."):this.validationPass()}};});function Vn(i){let e=i.match(/^(\d{4})-(\d{2})-(\d{2})[ T](\d{2}):(\d{2})(?::(\d{2})(?:\.\d{1,6})?)?(?:Z|([+-](\d{2}):?(\d{2})))?$/);if(!e)return false;let t=Number(e[1]),n=Number(e[2]),r=Number(e[3]),s=Number(e[4]),o=Number(e[5]),a=e[6]===void 0?0:Number(e[6]),l=e[8]===void 0?null:Number(e[8]),u=e[9]===void 0?null:Number(e[9]),p=new Date(Date.UTC(t,n-1,r)),c=p.getUTCFullYear()===t&&p.getUTCMonth()===n-1&&p.getUTCDate()===r,d=s<=24&&o<=59&&a<=59&&(s!==24||o===0&&a===0),E=l===null||u!==null&&l<=15&&u<=59;return c&&d&&E}var ue,tt=g(()=>{A();ue=class extends x{get isShimBacked(){return true}checkConstraint(){let e=this.context.column;return `${e} IS NULL OR datetime(${e}) IS NOT NULL`}validateStorage(e){return this.isNullish(e)?this.validationPass():typeof e!="string"||!Vn(e)?this.validationFail("Invalid timestamp.","Patch rows with ISO timestamps."):this.validationPass()}};});var pe,nt=g(()=>{A();pe=class extends x{get isShimBacked(){return true}validateStorage(e){return this.isNullish(e)?this.validationPass():typeof e!="string"||e.trim().length===0?this.validationFail("Expected interval text.","Patch rows with interval strings."):/^-?\d+(?:\.\d+)?$/.test(e.trim())?this.validationFail("Ambiguous numeric interval.","Patch rows with explicit interval strings."):this.validationPass()}};});var fe,rt=g(()=>{A();fe=class extends x{enumValues;constructor(e,t){super(e),this.enumValues=t;}get isShimBacked(){return true}checkConstraint(){let e=this.context.column,t=this.enumValues.map(n=>`'${n.replace(/'/g,"''")}'`).join(", ");return `${e} IN (${t})`}serialize(e){if(this.isNullish(e))return e;if(typeof e!="string"||!this.enumValues.includes(e))throw this.checkError("enum_membership",e);return e}validateStorage(e){return this.isNullish(e)?this.validationPass():typeof e!="string"||!this.enumValues.includes(e)?this.validationFail("Invalid enum value.","Patch rows with declared enum values."):this.validationPass()}};});function Kt(i){try{return {ok:!0,value:JSON.parse(i)}}catch{return {ok:false}}}var H,st=g(()=>{O();H=class extends _{elementField;constructor(e,t){super(e),this.elementField=t;}get sqliteType(){return "TEXT"}get isShimBacked(){return true}checkConstraint(){let e=this.context.column;return `${e} IS NULL OR (json_valid(${e}) AND json_type(${e}) = 'array')`}serialize(e){if(this.isNullish(e))return e;if(!Array.isArray(e))throw this.checkError("array_type",e);return this.elementField?JSON.stringify(e.map(t=>this.elementField.serialize(t))):JSON.stringify(e)}deserialize(e){if(this.isNullish(e))return e;if(typeof e=="string"){let t=Kt(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=Kt(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 Vt(i){return Qn.test(i.toLowerCase())}var Gn,Qn,me,it=g(()=>{A();Gn="????????-????-????-????-????????????",Qn=/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/;me=class extends x{get isShimBacked(){return true}checkConstraint(){let e=this.quoteIfNeeded(this.context.column);return `${e} IS NULL OR ${e} GLOB '${Gn}'`}serialize(e){if(this.isNullish(e))return e;if(typeof e!="string")throw this.checkError("uuid_format",e);let t=e.toLowerCase();if(!Vt(t))throw this.checkError("uuid_format",e);return t}validateStorage(e){return this.isNullish(e)?this.validationPass():typeof e!="string"||!Vt(e)?this.validationFail("Invalid UUID.","Patch rows with valid UUIDs."):this.validationPass()}};});function Jn(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 Yn(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 Xn(i){if(!i.includes(":"))return false;try{return new URL(`http://[${i}]/`),!0}catch{return false}}function Gt(i){let e=Jn(i);return e?Yn(e.address)?e.prefix===null||e.prefix>=0&&e.prefix<=32:Xn(e.address)?e.prefix===null||e.prefix>=0&&e.prefix<=128:false:false}var de,ot=g(()=>{A();de=class extends x{get isShimBacked(){return true}checkConstraint(){let e=this.quoteIfNeeded(this.context.column);return `${e} IS NULL OR (length(${e}) BETWEEN 3 AND 49 AND (instr(${e}, '.') > 0 OR instr(${e}, ':') > 0))`}serialize(e){if(this.isNullish(e))return e;if(typeof e!="string")throw this.checkError("inet_format",e);let t=e.trim();if(!Gt(t))throw this.checkError("inet_format",e);return t}validateStorage(e){return this.isNullish(e)?this.validationPass():typeof e!="string"||!Gt(e.trim())?this.validationFail("Invalid inet address.","Patch rows with valid inet strings."):this.validationPass()}};});var he,at=g(()=>{A();he=class extends x{serialize(e){throw new Error(`Unsupported type "${this.context.pgTypeName}" for ${this.context.table}.${this.context.column}`)}deserialize(e){throw new Error(`Unsupported type "${this.context.pgTypeName}" for ${this.context.table}.${this.context.column}`)}toColumnDDL(){throw new Error(`Unsupported type "${this.context.pgTypeName}" for ${this.context.table}.${this.context.column}`)}};});function M(i,e){if(e?.isArray){let n=M(i,{...e,isArray:false});return new H(i,n)}if(e?.enumValues)return new fe(i,e.enumValues);let t=i.pgTypeName.toLowerCase().trim();if(t.startsWith("_")||t.endsWith("[]")){let n=t.startsWith("_")?t.slice(1):t.slice(0,-2),r={...i,pgTypeName:n},s=M(r);return new H(i,s)}return Hn.has(t)?new re(i):zn.has(t)?new B(i):nr.has(t)?new oe(i):rr.has(t)?new ae(i):ar.has(t)?new le(i):lr.has(t)?new ce(i):cr.has(t)?new ue(i):ur.has(t)?new pe(i):tr.has(t)?new ie(i):Zn.has(t)?new se(i,e?.numericPrecision):sr.has(t)?new me(i):ir.has(t)?new x(i,63):or.has(t)?new de(i):er.has(t)?new x(i,e?.lengthConstraint):new he(i)}var zn,Hn,Zn,er,tr,nr,rr,sr,ir,or,ar,lr,cr,ur,lt=g(()=>{Le();Je();Ye();A();Xe();ze();He();Ze();et();tt();nt();rt();st();it();ot();at();zn=new Set(["int2","smallint","int4","integer","int","int8","bigint"]),Hn=new Set(["serial","serial4","bigserial","serial8","smallserial","serial2"]),Zn=new Set(["float4","real","float8","double precision","numeric","decimal"]),er=new Set(["text","varchar","character varying","char","character","bpchar"]),tr=new Set(["bytea"]),nr=new Set(["bool","boolean"]),rr=new Set(["json","jsonb"]),sr=new Set(["uuid"]),ir=new Set(["name"]),or=new Set(["inet"]),ar=new Set(["date"]),lr=new Set(["time","timetz","time without time zone","time with time zone"]),cr=new Set(["timestamp","timestamptz","timestamp without time zone","timestamp with time zone"]),ur=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 Qt,De,ut=g(()=>{Qt="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:()=>Qt,js:()=>crypto.randomUUID()},uuid_generate_v4:{sqlite:()=>Qt,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,Jt=g(()=>{X();U();U();Bt();Me();Mt();Ve();Ke();Ge();Se();lt();ut();Pe=class extends Deparser{enums;schemaHandling;warnings=[];helper;config;triggerFunctions=new Map;plpgsqlParser=new Oe;introspection;functionResolution;constructor(e,{enums:t,schemaHandling:n,introspection:r,...s}={}){super(e,s),this.schemaHandling=n??"default",this.enums=t??new Map,this.helper=new ve(e),this.config=s,this.introspection=r,this.functionResolution=s?.functionResolution??"translate";}visit(e,t){let n=Y(e),r=Ie.get(n);if(r){if(r.react==="error")throw new S({[n]:e},`Unsupported node type: ${n}`);return r.react==="warn"&&this.warnings.push({type:n,node:e}),""}return super.visit(e,t)}deparse(e,t){if(e==null)return null;if(!t){let n=new SqlFormatter;t=new DeparserContext({formatter:n});}return typeof e=="number"||e instanceof Number?e.toString():this.visit(e,t)}RawStmt(e,t){if(!e.stmt||e.stmt.CommentStmt)return "";let n=this.deparse(e.stmt,t);return !n||n.length===0?"":e.stmt_len?n+";":n}RangeVar(e,t){this.ensureRelation(e);let n=this.effectiveSchema(e.schemaname),r=e.relname,s=this.quoteBareIfNeeded(r);n&&(this.schemaHandling==="prefix"?s=`${n}__${r}`:s=`"${n}.${r}"`);let o=e.alias?" "+this.Alias(e.alias,t):"";return s+o}getRelationName(e){this.ensureRelation(e);let t=this.effectiveSchema(e.schemaname),n=e.relname;return t?this.schemaHandling==="prefix"?`${t}__${n}`:`${t}.${n}`:n}quoteBareIfNeeded(e){return /^[A-Za-z_][A-Za-z0-9_]*$/.test(e)?e:`"${e.replace(/"/g,'""')}"`}effectiveSchema(e){if(e){if(this.config.forceDefaultSchema||this.schemaHandling!=="default")return e;if(e!=="public")return e}}ensureRelation(e){let t=this.config.forceDefaultSchema;t&&(!e||typeof e!="object"||t.length===0||e.schemaname||(e.schemaname=t));}CreateStmt(e,t){if(e.inhRelations&&e.inhRelations.length>0)throw new S({CreateStmt:e},"Inheritance is not supported in SQLite");if(e.ofTypename!==void 0)throw new S({CreateStmt:e},"Typed tables (CREATE TABLE ... OF type_name) are not supported. Define columns directly in the CREATE TABLE statement instead.");if(e.options&&e.options.length>0&&(e.options=void 0),!e.tableElts||e.tableElts.length===0)throw new S({CreateStmt:e},"Empty tables are not supported in SQLite. Define at least one column.");return e.accessMethod&&(e.accessMethod=void 0),super.CreateStmt(e,t)+" STRICT"}TableLikeClause(e,t){throw new S({TableLikeClause:e},"CREATE TABLE ... (LIKE ...) is not supported in SQLite. Define the table columns explicitly instead.")}DefElem(e,t){if(["oids","fillfactor",/^autovacuum_/i,"toast_tuple_target","parallel_workers","user_catalog_table"].some(s=>xt(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":jt(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(!Ut.includes(n.toUpperCase()))throw new S({A_Expr:e},`Operator "${n}" is not supported in SQLite`);if(n==="~~"||n==="~~*"){let r=this.visit(e.lexpr,t),s=this.visit(e.rexpr,t);return `${r} LIKE ${s}`}if(n==="!~~"||n==="!~~*"){let r=this.visit(e.lexpr,t),s=this.visit(e.rexpr,t);return `${r} NOT LIKE ${s}`}if(n==="~"||n==="~*"){let r=this.visit(e.lexpr,t),s=this.visit(e.rexpr,t);return `${r} GLOB ${s}`}}}return super.A_Expr(e,t)}IndexStmt(e,t){let n=["CREATE"];e.unique&&n.push("UNIQUE"),n.push("INDEX"),e.if_not_exists&&n.push("IF NOT EXISTS"),e.idxname&&n.push(Ne(e.idxname)),n.push("ON"),e.relation&&n.push(this.RangeVar(e.relation,t));let r=(e.indexParams??[]).map(s=>"IndexElem"in s?this.IndexElem(s.IndexElem,t):this.visit(s,t)).filter(Boolean);return n.push(`(${r.join(", ")})`),n.join(" ")}IndexElem(e,t){let n=[];return e.name?n.push(Ne(e.name)):e.expr&&n.push(`(${this.visit(e.expr,t)})`),e.ordering==="SORTBY_ASC"&&n.push("ASC"),e.ordering==="SORTBY_DESC"&&n.push("DESC"),e.nulls_ordering==="SORTBY_NULLS_FIRST"&&n.push("NULLS FIRST"),e.nulls_ordering==="SORTBY_NULLS_LAST"&&n.push("NULLS LAST"),n.join(" ")}TypeCast(e,t){if(!e.arg||!e.typeName)return super.TypeCast(e,t);if([...this.helper.walk(e)].filter(({node:o})=>"A_Star"in o).length>0)throw new S({TypeCast:e},"A.* in type casts are not supported in SQLite");if(e.typeName.arrayBounds&&e.typeName.arrayBounds.length>0){if("A_Const"in e.arg&&e.arg.A_Const.sval){let o=e.arg.A_Const.sval.sval;if(o.startsWith("{")&&o.endsWith("}")){let a=e.typeName.names?.map(c=>c.String?.sval).filter(Boolean)??[],l=a.length===2&&a[0]==="pg_catalog"?a[1]:a[0],p=["text","varchar","character varying","char","bpchar","name","uuid"].includes(l?.toLowerCase());try{let c=this.parsePgArrayLiteral(o,p);return `'${JSON.stringify(c).replace(/'/g,"''")}'`}catch{}}}return this.visit(e.arg,t)}let r=this.visit(e.arg,t),s=this.TypeName(e.typeName,t);return `CAST(${r} AS ${s})`}A_ArrayExpr(e,t){let n=q(e.elements),r=this.tryExtractStaticArray(n);return r!==void 0?`'${JSON.stringify(r).replace(/'/g,"''")}'`:`json_array(${n.map(o=>this.visit(o,t)).join(", ")})`}tryExtractStaticArray(e){let t=[];for(let n of e)if("A_ArrayExpr"in n){let r=q(n.A_ArrayExpr.elements),s=this.tryExtractStaticArray(r);if(s===void 0)return;t.push(s);}else if("A_Const"in n){let r=n.A_Const;if(r.isnull)t.push(null);else if(r.ival)t.push(r.ival.ival);else if(r.fval)t.push(parseFloat(r.fval.fval));else if(r.sval)t.push(r.sval.sval);else if("boolval"in r)t.push(r.boolval.boolval===true);else return}else return;return t}parsePgArrayLiteral(e,t){if(!e.startsWith("{")||!e.endsWith("}"))throw new Error("Not a PG array literal");let n=e.slice(1,-1);if(n.length===0)return [];let r=[],s=0;for(;s<n.length;)if(n[s]==="{"){let o=0,a=s;for(;a<n.length;){if(n[a]==="{")o++;else if(n[a]==="}"&&(o--,o===0))break;a++;}r.push(this.parsePgArrayLiteral(n.slice(s,a+1),t)),s=a+1,n[s]===","&&s++;}else if(n[s]==='"'){let o=s+1,a="";for(;o<n.length&&n[o]!=='"';)n[o]==="\\"&&o++,a+=n[o],o++;r.push(a),s=o+1,n[s]===","&&s++;}else {let o=s;for(;o<n.length&&n[o]!==","&&n[o]!=="}";)o++;if(o===s)throw new Error("Malformed PG array literal");let a=n.slice(s,o);if(a==="NULL")r.push(null);else if(t)r.push(a);else {let l=Number(a);r.push(isNaN(l)?a:l);}s=o,n[s]===","&&s++;}return r}BetweenExpr(e,t){return super.A_Expr(e,t)}AlterTableStmt(e,t){let n=e.cmds??[],r=["AT_EnableRowSecurity","AT_ForceRowSecurity"],s=n.filter(p=>"AlterTableCmd"in p&&!r.includes(p.AlterTableCmd.subtype));if(s.length===0)return "";if(!["OBJECT_TABLE","OBJECT_INDEX","OBJECT_VIEW"].includes(e.objtype))throw new S({AlterTableStmt:e},`AlterTableStmt with objtype ${e.objtype} is not supported`);let o=["AT_AddColumn","AT_DropColumn"],a=["AT_AlterColumnType","AT_SetNotNull","AT_DropNotNull","AT_ColumnDefault","AT_AddConstraint","AT_DropConstraint"],l=[],u=[];for(let p of s){let c=p.AlterTableCmd.subtype;if(o.includes(c)){let d={...e,cmds:[p]};l.push(super.AlterTableStmt(d,t));}else if(a.includes(c))u.push(p.AlterTableCmd);else throw new S({AlterTableStmt:e},`AlterTableCmd with subtype ${c} is not supported in SQLite`)}if(u.length>0){let p=this.getRelationName(e.relation);l.push(this.generateRebuildSql(p,u));}return l.join(`;
15
+ `)}AlterTableCmd(e,t){if(!["AT_AddColumn","AT_DropColumn"].includes(e.subtype))throw new S({AlterTableCmd:e},`AlterTableCmd with subtype ${e.subtype} is not supported`);return e.subtype==="AT_DropColumn"&&e.behavior?super.AlterTableCmd({...e,behavior:void 0},t):super.AlterTableCmd(e,t)}DefineStmt(e,t){if(e.kind==="OBJECT_AGGREGATE")throw new Error("AGGREGATE definitions are not supported in SQLite");return super.DefineStmt(e,t)}InsertStmt(e,t){if("selectStmt"in e){let r=(e.selectStmt?.SelectStmt?.valuesLists??[]).map(s=>s.List?.items?.map(o=>"SetToDefault"in o));if(r.length===1&&r[0]?.every(s=>s===true))return super.InsertStmt({...e,selectStmt:void 0,cols:void 0},t);if(r.some(s=>s.some(o=>o===true)))throw new S({InsertStmt:e},"Insert with partial DEFAULT values is not supported")}return super.InsertStmt(e,t)}SelectStmt(e,t){if(this.helper.hasUnsafeStar())throw new S({SelectStmt:e},"Row-wise comparison using .* is not supported in SQLite. Expand to explicit per-column comparisons instead.");if(e.intoClause)throw new S({SelectStmt:e},"SELECT ... INTO clause is not supported in SQLite");if(e.distinctClause){let r=q(e.distinctClause);if(r.length>0&&Object.keys(r[0]).length>0)throw new S({SelectStmt:e},"DISTINCT ON clause is not supported in SQLite. Use window functions instead.")}if(e.limitOffset&&!e.limitCount)throw new S({SelectStmt:e},"OFFSET without LIMIT is not supported in SQLite");let n=super.SelectStmt(e,t);if(/^SELECT\s+FROM/.test(n))throw new S({SelectStmt:e},"SELECT without a target list is not supported in SQLite");return n}JoinExpr(e,t){return e.alias&&this.Alias(e.alias,t),super.JoinExpr(e,t)}A_Const(e,t){if(e.bsval!==void 0)throw new S({A_Const:e},"Bit string literals are not supported in SQLite");let n=super.A_Const(e,t);return typeof n=="string"&&n.startsWith("E'")?n.substring(2,n.length-1):n}SortBy(e,t){if(e.sortby_dir==="SORTBY_USING"){let n=q(e.useOp),r=n[0]?.String?.sval;if(n.length>1||!["<",">"].includes(r??""))throw new S({SortBy:e},"Only `USING <` or `USING >` are supported.");e.sortby_dir=r==="<"?"SORTBY_DESC":"SORTBY_ASC",e.useOp=void 0;}return super.SortBy(e,t)}RangeSubselect(e,t){if(e.lateral)throw new S({RangeSubselect:e},"LATERAL subqueries are not supported in SQLite");return super.RangeSubselect(e,t)}SubLink(e,t){if(["ANY_SUBLINK","ALL_SUBLINK"].includes(e.subLinkType))throw new S({SubLink:e},"ANY/ALL/SOME subqueries are not supported. Use NOT EXISTS or IN instead");if(e.subLinkType==="ARRAY_SUBLINK")throw new S({SubLink:e},"ARRAY subqueries are not supported in SQLite");return super.SubLink(e,t)}LockingClause(e,t){return ""}UpdateStmt(e,t){if(t.parentNodeTypes.includes("SelectStmt"))throw new S({UpdateStmt:e},"UPDATE ... FROM (SELECT ...) is not supported in SQLite");return super.UpdateStmt(e,t)}Alias(e,t){if(e.colnames&&e.colnames.length>0)throw new S({Alias:e},"Aliasing with column names is not supported in SQLite");return `AS "${e.aliasname}"`}CreateFunctionStmt(e,t){let n=e.options??[],r=e.returnType?.names?.map(u=>u.String?.sval).filter(Boolean).join("."),s=n.find(u=>u.DefElem?.defname==="language")?.DefElem?.arg?.String?.sval;if(r!=="trigger"||s!=="plpgsql")throw new S({CreateFunctionStmt:e},"Only trigger functions with LANGUAGE plpgsql are supported");let o=e.funcname?.map(u=>u.String?.sval).filter(Boolean).pop();if(!o)throw new Error("Function has no name");let a=n.find(u=>u.DefElem?.defname==="as")?.DefElem?.arg?.List?.items?.[0]?.String?.sval;if(!a)throw new Error("Function has no body");let l=this.plpgsqlParser.parse(a);return this.triggerFunctions.set(o,l),""}CreateTrigStmt(e,t){let n=e.trigname,r=this.RangeVar(e.relation,t),s=e.funcname?.map(c=>c.String?.sval).filter(Boolean).pop();if(!s)throw new Error(`Trigger "${n}" has no function reference`);let o=this.triggerFunctions.get(s);if(!o)throw new S({CreateTrigStmt:e},`Trigger "${n}" references unknown function "${s}"`);let a=e.timing===2?"BEFORE":e.timing===64?"INSTEAD OF":"AFTER",l=[];if(e.events&4&&l.push("INSERT"),e.events&8&&l.push("DELETE"),e.events&16)if(e.columns?.length){let c=e.columns.map(d=>d.String?.sval).filter(Boolean);l.push(`UPDATE OF ${c.join(", ")}`);}else l.push("UPDATE");let u=l.join(" OR "),p=this.buildTriggerBody(o,r,t);return [`CREATE TRIGGER ${n}`,`${a} ${u} ON ${r}`,"FOR EACH ROW","BEGIN",...p.map(c=>` ${c};`),"END"].join(`
16
+ `)}buildTriggerBody(e,t,n){let r=[],s=[];for(let o of e.statements)if(o.type!=="return"){if(o.type==="assignment"){s.push(o);continue}s.length>0&&(r.push(this.buildAssignmentUpdate(s,t,n)),s.length=0),o.type==="dml"&&r.push(this.translateDml(o.sql,n));}return s.length>0&&r.push(this.buildAssignmentUpdate(s,t,n)),r}buildAssignmentUpdate(e,t,n){let r=e.map(s=>{let o=this.translateExpression(s.expression,n);return `${s.column} = ${o}`});return `UPDATE ${t} SET ${r.join(", ")} WHERE rowid = NEW.rowid`}translateExpression(e,t){try{let n=`SELECT ${e}`,r=e.trim().toLowerCase();return r==="now()"||r==="current_timestamp"?"datetime('now')":e}catch{return e}}translateDml(e,t){return e.replace(/\bnow\(\)/gi,"datetime('now')").replace(/\bcurrent_timestamp\b/gi,"datetime('now')").replace(/\bgen_random_uuid\(\)/gi,this.uuidExpression()).replace(/\buuid_generate_v4\(\)/gi,this.uuidExpression())}uuidExpression(){return "lower(hex(randomblob(4))) || '-' || lower(hex(randomblob(2))) || '-4' || substr(lower(hex(randomblob(2))),2) || '-' || substr('89ab',abs(random()) % 4 + 1, 1) || substr(lower(hex(randomblob(2))),2) || '-' || lower(hex(randomblob(6)))"}NullTest(e,t){if(e.arg?.ColumnRef?.fields?.length>1)throw new S({NullTest:e},"row-level NULL tests are not supported in SQLite");return super.NullTest(e,t)}RenameStmt(e,t){if(!e.renameType)throw new Error("RenameStmt requires renameType");let n=["OBJECT_TABLE","OBJECT_VIEW","OBJECT_COLUMN"];if(e.renameType==="OBJECT_COLUMN"&&(e.relationType==="OBJECT_FOREIGN_TABLE"||e.relationType==="OBJECT_VIEW"))throw new S({RenameStmt:e},`RenameStmt with relationType ${e.relationType} is not supported`);if(!n.includes(e.renameType))throw new S({RenameStmt:e},`RenameStmt with renameType ${e.renameType} is not supported in SQLite`);return super.RenameStmt(e,t)}DropStmt(e,t){let n=e.removeType;if(["OBJECT_TABLE","OBJECT_VIEW","OBJECT_INDEX","OBJECT_TRIGGER"].includes(n))return super.DropStmt(e,t);if(["OBJECT_POLICY"].includes(n))return "";throw new S({DropStmt:e},`DROP with removeType ${n} is not supported in SQLite`)}generateRebuildSql(e,t){if(!this.introspection)throw new Error(`ALTER TABLE on "${e}" requires 12-step rebuild but no introspection was provided. Pass introspection in DeparseOptions to enable column type changes, NOT NULL, defaults, and constraint modifications.`);let n=this.buildDesiredSchema(this.introspection,e,t),r=new G,s=new Q,o=r.diff(this.introspection,n);return o.has_changes?s.plan(o,this.introspection,n).steps.filter(l=>!["disable_foreign_keys","begin_transaction","commit_transaction","enable_foreign_keys"].includes(l.type)).map(l=>l.sql).join(`
17
+ `):""}buildDesiredSchema(e,t,n){let r={...e,tables:e.tables.map(s=>({...s})),columns:e.columns.map(s=>({...s})),indexes:e.indexes.map(s=>({...s})),foreign_keys:e.foreign_keys.map(s=>({...s})),primary_keys:e.primary_keys.map(s=>({...s})),views:e.views.map(s=>({...s})),triggers:(e.triggers??[]).map(s=>({...s})),check_constraints:e.check_constraints.map(s=>({...s})),unique_constraints:(e.unique_constraints??[]).map(s=>({...s})),comments:(e.comments??[]).map(s=>({...s})),custom_types:e.custom_types.map(s=>({...s}))};for(let s of n){let o=r.columns.findIndex(a=>a.table===t&&a.name===s.name);switch(s.subtype){case "AT_AlterColumnType":{if(o===-1)break;let a=this.extractTypeName(s);a&&(r.columns[o]={...r.columns[o],type:a.toLowerCase()});break}case "AT_SetNotNull":{if(o===-1)break;r.columns[o]={...r.columns[o],nullable:false};break}case "AT_DropNotNull":{if(o===-1)break;r.columns[o]={...r.columns[o],nullable:true};break}case "AT_ColumnDefault":{if(o===-1)break;if(s.def){let a=this.extractDefaultValue(s);r.columns[o]={...r.columns[o],default_value:a};}else r.columns[o]={...r.columns[o],default_value:null};break}case "AT_AddConstraint":case "AT_DropConstraint":{let a=r.tables.findIndex(l=>l.name===t);a!==-1&&(r.tables[a]={...r.tables[a],sql:r.tables[a].sql+" /* modified */"});break}}}return this.rebuildTableSql(r,t),r}rebuildTableSql(e,t){let n=e.tables.findIndex(c=>c.name===t);if(n===-1)return;let r=e.columns.filter(c=>c.table===t),s=e.foreign_keys.filter(c=>c.table===t),o=e.check_constraints.filter(c=>c.table===t),a=r.map(c=>{let d=`${h(c.name)} ${c.type||"TEXT"}`;return c.is_primary_key&&(d+=" PRIMARY KEY"),c.nullable||(d+=" NOT NULL"),c.default_value!=null&&(d+=` DEFAULT ${c.default_value}`),d}),l=s.map(c=>`FOREIGN KEY (${h(c.column)}) REFERENCES ${h(c.ref_table)}(${h(c.ref_column)}) ON UPDATE ${c.on_update} ON DELETE ${c.on_delete}`),u=o.map(c=>`CHECK (${c.expression})`),p=[...a,...l,...u];e.tables[n]={...e.tables[n],sql:`CREATE TABLE ${h(t)} (${p.join(", ")}) STRICT`};}extractTypeName(e){let t=e.def?.ColumnDef;return t?.typeName?.TypeName?(t.typeName.TypeName.names??[]).map(r=>r.String?.sval).filter(Boolean).pop()??null:null}extractDefaultValue(e){return e.def?"Integer"in e.def?String(e.def.Integer.ival):"Float"in e.def?e.def.Float.fval:"String"in e.def?`'${e.def.String.sval}'`:null:null}};});var R,W,pt=g(()=>{U();X();R=class extends S{constructor(e,t){super(e,`Unsupported expression: ${t}`);}},W=class{deparse(e){if("A_Const"in e){let r=e.A_Const;if(r.boolval!==void 0)return r.boolval.boolval?{}:{$always:false}}let t=Object.keys(e)[0],n=this[t];if(!n)throw new R({[t]:e},`Unsupported expression: ${t}`);return n.call(this,e[t])}deparseValue(e){if("A_Const"in e)return this.A_Const(e.A_Const);if("ColumnRef"in e)return this.ColumnRef(e.ColumnRef);if("FuncCall"in e)return this.FuncCall(e.FuncCall);if("SubLink"in e)return this.SubLink(e.SubLink);if("TypeCast"in e)return this.TypeCast(e.TypeCast);if("A_Expr"in e){let n=this.isJwtAccessor(e.A_Expr);return n||this.A_Expr(e.A_Expr)}if("BoolExpr"in e)return this.BoolExpr(e.BoolExpr);let t=Object.keys(e)[0];throw new R({[t]:e},`deparseValue: ${t}`)}A_Expr(e){if(e.kind==="AEXPR_OP"){let t=e.name?.[0],n=t?te(t):void 0;if(!n)throw new R({A_Expr:e},"A_Expr missing operator");let r=this.isJwtAccessor(e);if(r)return {[r]:{}};let s=e.lexpr?this.deparseValue(e.lexpr):void 0,o=e.rexpr?this.deparseValue(e.rexpr):void 0,a=this.mapOperator(n);if(!a)throw new R({A_Expr:e},`Unsupported operator: ${n}`);let l=e.rexpr!=null&&"ColumnRef"in e.rexpr;if(typeof s=="string"&&s.startsWith("{{")&&l)return {[o]:{[a]:s}};let u=l&&typeof o=="string"?{$ref:o}:o;return {[s]:{[a]:u}}}if(e.kind==="AEXPR_LIKE"||e.kind==="AEXPR_ILIKE"){let t=e.lexpr?this.deparseValue(e.lexpr):void 0,n=e.rexpr?this.deparseValue(e.rexpr):void 0,s=(e.name?.[0]?te(e.name[0]):"~~")==="!~~"?"$notLike":"$like";return {[t]:{[s]:n}}}if(e.kind==="AEXPR_IN"){let t=e.lexpr?this.deparseValue(e.lexpr):void 0,n=e.rexpr&&"List"in e.rexpr&&e.rexpr.List.items?e.rexpr.List.items.map(r=>this.deparseValue(r)):[];return {[t]:{$in:n}}}throw new R({A_Expr:e},`A_Expr kind: ${e.kind}`)}BoolExpr(e){let t=e.args??[];switch(e.boolop){case "AND_EXPR":return {$and:t.map(n=>this.deparse(n))};case "OR_EXPR":return {$or:t.map(n=>this.deparse(n))};case "NOT_EXPR":return {$not:this.deparse(t[0])};default:throw new R({BoolExpr:e},`BoolExpr op: ${e.boolop}`)}}NullTest(e){let t=e.arg?this.deparseValue(e.arg):void 0;return e.nulltesttype==="IS_NULL"?{[t]:{$is:null}}:{[t]:{$isNot:null}}}SubLink(e){if(e.subLinkType==="ANY_SUBLINK"){let t=e.testexpr?this.deparseValue(e.testexpr):void 0,n=e.subselect?this.SelectStmt(e.subselect.SelectStmt):void 0;return {[t]:{$in:n}}}if(e.subLinkType==="EXISTS_SUBLINK")return {$exists:e.subselect?this.SelectStmt(e.subselect.SelectStmt):void 0};if(e.subLinkType==="EXPR_SUBLINK"){let t=e.subselect?e.subselect.SelectStmt:void 0;if(t?.fromClause?.length)return this.SelectStmt(t);if(t?.targetList?.[0]){let n=t.targetList[0],r="ResTarget"in n?n.ResTarget:void 0;if(r?.val){let s=this.deparseValue(r.val);return s}}}throw new R({SubLink:e},`SubLink type: ${e.subLinkType}`)}SelectStmt(e){let{from:t,schema:n,join:r}=this.deparseFromClause(e.fromClause??[]),s=[];for(let d of e.targetList??[]){let E="ResTarget"in d?d.ResTarget:void 0;if(E?.val){let y=this.deparseValue(E.val);Array.isArray(y)?s.push(...y.map(String)):y!=null&&y!==""&&s.push(String(y));}}let o=e.whereClause?this.deparse(e.whereClause):void 0,a=this.deparseSortClause(e.sortClause),l=this.deparseLimit(e.limitCount),u=this.deparseLimit(e.limitOffset),p=this.deparseGroupClause(e.groupClause),c={type:"query",from:t,select:s};return n&&(c.schema=n),Object.keys(r).length>0&&(c.join=r),o&&(c.where=o),a.length>0&&(c.order=a),l!==void 0&&(c.limit=l),u!==void 0&&(c.offset=u),p.length>0&&(c.group=p),c}FuncCall(e){let t=this.isAuthFunc(e.funcname??[]);if(t)return t;throw new R({FuncCall:e},`FuncCall: ${F(e.funcname??[]).join(".")}`)}ColumnRef(e){let t=F(e.fields??[]);return t.length===1?t[0]:t.join(".")}A_Const(e){if(e.boolval!==void 0)return e.boolval.boolval;if(e.ival!==void 0)return e.ival.ival??0;if(e.fval!==void 0)return parseFloat(e.fval.fval??"0");if(e.sval!==void 0)return e.sval.sval??"";if(e.isnull)return null;throw new R({A_Const:e},"A_Const: unknown variant")}TypeCast(e){if(!e.arg)throw new R({TypeCast:e},"TypeCast: missing arg");return this.deparseValue(e.arg)}BooleanTest(e){let t=e.arg?this.deparseValue(e.arg):void 0;return e.booltesttype==="IS_TRUE"?{[t]:{$eq:true}}:{[t]:{$eq:false}}}deparseFromClause(e){let t={};if(e.length===0)return {from:"",join:t};let n=e[0];if("RangeVar"in n){let r=n.RangeVar;return {from:r.relname??"",schema:r.schemaname,join:t}}if("JoinExpr"in n){let{from:r,schema:s}=this.walkJoinExpr(n.JoinExpr,t);return {from:r,schema:s,join:t}}return {from:"",join:t}}walkJoinExpr(e,t){let n={from:""};if(e.larg)if("RangeVar"in e.larg){let r=e.larg.RangeVar;n={from:r.relname??"",schema:r.schemaname};}else "JoinExpr"in e.larg&&(n=this.walkJoinExpr(e.larg.JoinExpr,t));if(e.rarg&&"RangeVar"in e.rarg){let r=e.rarg.RangeVar,s=r.relname??"",o=r.alias?.aliasname??s,a=e.jointype==="JOIN_LEFT"?"left":"inner",l={from:s,type:a};e.quals&&(l.on=this.deparse(e.quals));let u=o;if(u in t){let p=2;for(;`${u}_${p}`in t;)p++;u=`${u}_${p}`;}t[u]=l;}return n}deparseSortClause(e){if(!e)return [];let t=[];for(let n of e){if(!("SortBy"in n))continue;let r=n.SortBy;if(!r.node)continue;let s=String(this.deparseValue(r.node)),o=r.sortby_dir==="SORTBY_DESC"?"desc":"asc",a={column:s,direction:o};r.sortby_nulls==="SORTBY_NULLS_FIRST"?a.nullsFirst=true:r.sortby_nulls==="SORTBY_NULLS_LAST"&&(a.nullsFirst=false),t.push(a);}return t}deparseLimit(e){if(!e)return;let t=this.deparseValue(e);return typeof t=="number"?t:Number(t)}deparseGroupClause(e){return e?e.map(t=>String(this.deparseValue(t))):[]}isAuthFunc(e){let t=F(e);if(t.length===2&&t[0]==="auth"){if(t[1]==="uid")return "{{auth.uid}}";if(t[1]==="jwt")return "{{auth.jwt}}";if(t[1]==="role")return "{{auth.role}}";throw new Error(`Unsupported auth function: "${t.slice(1).join(".")}"`)}return null}isJwtAccessor(e){if(e.kind!=="AEXPR_OP")return null;let t=e.name?.[0]?te(e.name[0]):void 0;if(t!=="->"&&t!=="->>")return null;let n=e.rexpr&&"A_Const"in e.rexpr?e.rexpr.A_Const.sval?.sval:void 0;if(n===void 0)return null;if(e.lexpr&&"FuncCall"in e.lexpr)return this.isAuthFunc(e.lexpr.FuncCall.funcname??[])==="{{auth.jwt}}"?`{{auth.jwt.${n}}}`:null;if(e.lexpr&&"A_Expr"in e.lexpr){let r=this.isJwtAccessor(e.lexpr.A_Expr);if(r)return `${r.slice(0,-2)}.${n}}}`}return null}mapOperator(e){switch(e){case "=":return "$eq";case "<>":case "!=":return "$neq";case ">":return "$gt";case ">=":return "$gte";case "<":return "$lt";case "<=":return "$lte";case "~~":return "$like";case "!~~":return "$notLike";default:return}}};});var ge,Yt=g(()=>{ge=class{table;schema;fields;constructor(e,t="public",n=new Map){this.table=e,this.schema=t,this.fields=n;}get(e){return this.fields.get(e)}has(e){return this.fields.has(e)}set(e,t){this.fields.set(e,t);}columns(){return Array.from(this.fields.keys())}all(){return Array.from(this.fields.values())}serializeRow(e){let t={};for(let[n,r]of Object.entries(e)){let s=this.fields.get(n);t[n]=s?s.serialize(r):r;}return t}deserializeRow(e){let t={};for(let[n,r]of Object.entries(e)){let s=this.fields.get(n);t[n]=s?s.deserialize(r):r;}return t}applyDefaults(e){let t={...e};for(let[n,r]of this.fields)!(n in t)&&r.context.defaultFn&&(t[n]=r.context.defaultFn());return t}};});var Xt=g(()=>{O();Qe();Le();Je();Ye();A();Xe();ze();He();Ze();et();tt();nt();rt();st();it();ot();at();lt();ut();Yt();});function Ht(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=qt(n.args?.[0]??{});e.set(r,{value:s,local:n.is_local});}return e}function en(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}`;zt.has(C)||(zt.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 tn(i,e){let t=new Map;for(let n of i.stmts??[]){if(!n.stmt||!("CreateStmt"in n.stmt))continue;let r=n.stmt.CreateStmt,s=r.relation?.relname??"",o=r.relation?.schemaname??"public";if(!s)continue;let a=new ge(s,o);for(let l of r.tableElts??[]){if(!("ColumnDef"in l))continue;let u=l.ColumnDef,p=u.colname;if(!p)continue;let c=u.typeName?.names?.map(b=>b.String?.sval||b.String?.str).filter(Boolean),d=c&&(c.length===2&&c[0]==="pg_catalog"?c[1]:c[0]);if(!d)continue;let E=!!u.typeName?.arrayBounds?.length,y=Array.isArray(u.typeName?.typmods)?u.typeName.typmods:[],m=b=>y[b]?.A_Const?.ival?.ival??y[b]?.A_Const?.val?.ival?.ival,T={isArray:E};if(Ae(d)&&y.length>0){let b=m(0);typeof b=="number"&&b>0&&(T.lengthConstraint=b);}if(ke(d)&&y.length>=2){let b=m(0),V=m(1);typeof b=="number"&&typeof V=="number"&&b>0&&V>=0&&(T.numericPrecision={precision:b,scale:V});}let f=e.get(d.toLowerCase());f&&(T.enumValues=f);let C=Array.isArray(u.constraints)?u.constraints:[],N=C.some(b=>b.Constraint?.contype==="CONSTR_PRIMARY"),w=Re(d)||C.some(b=>b.Constraint?.contype==="CONSTR_IDENTITY"),k=C.some(b=>b.Constraint?.contype==="CONSTR_NOTNULL"),I=C.find(b=>b.Constraint?.contype==="CONSTR_UNIQUE"),P=C.find(b=>b.Constraint?.contype==="CONSTR_GENERATED"),ht=C.find(b=>b.Constraint?.contype==="CONSTR_FOREIGN"),gt=C.find(b=>b.Constraint?.contype==="CONSTR_CHECK"),yt;if(ht){let b=ht.Constraint,V=b.pktable?.relname,fn=b.pktable?.schemaname,St=b.pk_attrs?.[0]?.String?.sval;V&&St&&(yt={refSchema:fn,refTable:V,refColumn:St,constraintName:b.conname||void 0});}let pn={schema:o,table:s,column:p,pgTypeName:d,nullable:!k&&!N,defaultValue:null,defaultFn:null,isPrimaryKey:N,isUnique:!!I,isSerial:w,isGenerated:!!P,fkRef:yt,hasCheck:!!gt,checkConstraintName:gt?.Constraint?.conname||void 0,uniqueConstraintName:I?.Constraint?.conname||void 0};a.set(p,M(pn,T));}t.set(`${o}.${s}`,a);}return t}function nn(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 rn(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 zt,sn=g(()=>{pt();U();be();Xt();X();zt=new Set;});var an={};dn(an,{Policy:()=>D,deparseDdl:()=>ft,deparseExpression:()=>yr,deparsePostgresDdl:()=>gr,deparseSelect:()=>Sr,parse:()=>J,parseExpression:()=>on,translatePostgresDdl:()=>hr});async function hr(i,e={}){let t=await J(i);return ft(t,e).ddl}async function gr(i,e={}){let t=await J(i);return {ast:t,...ft(t,e)}}function ft(i,e={}){let t=Ht(i),n=tn(i,t),r=Zt(i),s=nn(i),o=rn(i),a=new Pe(i,{...e,enums:t}),{policies:l,tables:u}=en(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 on(i){let t=(await J(`SELECT 1 WHERE ${i}`)).stmts?.[0]?.stmt;if(!t||!("SelectStmt"in t))throw new Error("expected SelectStmt");let n=t.SelectStmt.whereClause;if(!n)throw new Error("no whereClause");return n}async function yr(i){let e=await on(i);return new W().deparse(e)}async function Sr(i){let t=(await J(i)).stmts?.[0]?.stmt;if(!t||!("SelectStmt"in t))throw new Error("expected SelectStmt");return new W().deparse(t)}var ln=g(()=>{Ft();Jt();pt();sn();be();});Me();var yn=(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 Gs=Object.create;var xt=Object.defineProperty;var Ws=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 Gs=Object.create;var xt=Object.defineProperty;var Ws=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 Gs=Object.create;var xt=Object.defineProperty;var Ws=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 Gs=Object.create;var xt=Object.defineProperty;var Ws=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 Gs=Object.create;var xt=Object.defineProperty;var Ws=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 Gs=Object.create;var xt=Object.defineProperty;var Ws=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 Gs=Object.create;var xt=Object.defineProperty;var Ws=Object.getOwnPropertyDe
227
196
  json_group_array(ic.name ORDER BY ic.seqno) AS cols
228
197
  FROM sqlite_master m
229
198
  JOIN pragma_index_list(m.name) idx
230
- ON m.type = 'table' AND ${t()}
199
+ ON m.type = 'table' AND ${e()}
231
200
  JOIN pragma_index_info(idx.name) ic
232
201
  WHERE idx.origin = 'u'
233
202
  GROUP BY m.name, idx.name) uc)
@@ -240,8 +209,8 @@ var Gs=Object.create;var xt=Object.defineProperty;var Ws=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
- ${l.name?`'${l.name}'`:"'sqlite'"} AS database_name,
244
- ${l.version?`'${l.version}'`:"sqlite_version()"} AS version;`};function j(l){if(!l)return [];try{return Array.isArray(l)?l:JSON.parse(l)}catch{return []}}async function Ye(l,t={}){let e=(await l.exec(zs(t)))?.rows?.[0]||{};return {tables:j(e.tables),columns:j(e.columns),indexes:j(e.indexes),foreign_keys:j(e.foreign_keys),primary_keys:j(e.primary_keys),views:j(e.views),triggers:j(e.triggers),check_constraints:[],unique_constraints:j(e.unique_constraints),comments:[],custom_types:[],database_name:e.database_name??"sqlite",version:e.version??""}}var ni=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(!ni.has(s.kind))return super.transformNodeImpl(s,e);let i=this.#n(s);for(let n of i)this.#s.add(n);let r=this.#r(s);for(let n of r)this.#e.add(n);try{return super.transformNodeImpl(s,e)}finally{for(let n of r)this.#e.delete(n);for(let n of i)this.#s.delete(n);}}transformSchemableIdentifier(s,e){let i=s.identifier.name,r=s.schema?.name,n=!r&&this.config.appendDefaultSchema&&this.config.defaultSchema&&!this.#s.has(i)&&this.#e.has(i),a=r??(n?this.config.defaultSchema:void 0);if(!a)return {kind:"SchemableIdentifierNode",schema:void 0,identifier:{kind:"IdentifierNode",name:i}};let u=this.config.approach==="snake_case"?"__":".";return {kind:"SchemableIdentifierNode",schema:void 0,identifier:{kind:"IdentifierNode",name:`${a}${u}${i}`}}}#r(s){let e=new Set;if(s?.name&&SchemableIdentifierNode.is(s.name)&&this.#i(s.name,e),s?.from?.froms)for(let i of s.from.froms)this.#t(i,e);if(s?.into&&this.#t(s.into,e),s?.table&&this.#t(s.table,e),s?.joins)for(let i of s.joins)this.#t(i.table,e);return s?.using&&(JoinNode.is(s.using)?this.#t(s.using.table,e):this.#t(s.using,e)),e}#t(s,e){if(TableNode.is(s)){this.#i(s.table,e);return}if(AliasNode.is(s)&&TableNode.is(s.node)){this.#i(s.node.table,e);return}if(ListNode.is(s)){for(let i of s.items)this.#t(i,e);return}if(UsingNode.is(s))for(let i of s.tables)this.#t(i,e);}#i(s,e){let i=s.identifier.name;this.#s.has(i)||e.add(i);}#n(s){let e=new Set;if(s?.with?.expressions)for(let i of s.with.expressions){let r=i?.name?.table?.table?.identifier?.name;r&&e.add(r);}return e}},It=class{#e;constructor(t){this.#e=new Zt(t);}transformQuery(t){return this.#e.transformNode(t.node)}async transformResult(t){return t.result}};Lt();te();se();function at(l){return l==="migrations"||l==="supabase_migrations.schema_migrations"||l==="supabase_migrations.seed_files"}function Xe(l){return {...l,tables:l.tables.filter(t=>!at(t.name)),columns:l.columns.filter(t=>!at(t.table)),indexes:l.indexes.filter(t=>!at(t.table)),foreign_keys:l.foreign_keys.filter(t=>!at(t.table)),primary_keys:l.primary_keys.filter(t=>!at(t.table))}}var _t=class{constructor(t,s,e={}){this.conn=t;this.desiredSchema=s;this.options=e;this.differ=new X,this.planner=new K;}differ;planner;translationResult;async getDesiredSchema(){let t=await this.conn.translateDdl(this.desiredSchema);return this.translationResult=t,await this.options.onTranslation?.(t),t.ddl}async diff(){let t=await this.conn.introspect({postprocess:false}),s=await this.getDesiredSchema();if(!s||s.trim().length===0)return {current:t,desired:t,diff:{tables:[],columns:[],indexes:[],foreign_keys:[],has_changes:false},plan:{steps:[],warnings:[],unsafe:false}};let{createConnection:e}=await import('@supabase/lite/sqlite'),i=await e({url:":memory:"});try{await i.exec(s);let r=await i.introspect({postprocess:!1}),n=Xe(t),a=Xe(r),u=this.differ.diff(n,a),o=this.planner.plan(u,n,a);return {current:t,desired:r,diff:u,plan:o}}finally{await i.close();}}safeSortPlanSteps(t){return invariant(Array.isArray(t),"steps must be an array"),t.sort((s,e)=>{let i=r=>r===PlanStepType.DROP_COLUMN?1:r===PlanStepType.DROP_TABLE?2:r===PlanStepType.RENAME_TABLE?3:0;return i(s.type)-i(e.type)})}async migratePlan(t,s){if(t.steps.length===0)return;if(t.unsafe&&!s?.force)throw new DataLossError(t.warnings??[]);let e=this.safeSortPlanSteps(t.steps).filter(i=>![PlanStepType.DISABLE_FOREIGN_KEYS,PlanStepType.BEGIN_TRANSACTION,PlanStepType.COMMIT_TRANSACTION,PlanStepType.ENABLE_FOREIGN_KEYS].includes(i.type));await this.conn.transaction(e.map(i=>i.sql),{intent:"migration"});}async migrate(t){let s=await this.diff();return await this.migratePlan(s.plan,t),s}};yt();var Qe=/^\{\{(.+)\}\}$/;function ze(l){return typeof l=="string"&&Qe.test(l)}function pi(l){return Qe.exec(l)[1]}var Ke=Symbol("unresolved");function Ze(l,t){let s=pi(l),e=nt(t,s,Ke);if(e===Ke)throw new Error(`Unresolved variable: {{${s}}}`);return e}function P(l,t){let s={};for(let[e,i]of Object.entries(l)){if(e==="$or"||e==="$and"){s[e]=i.map(r=>P(r,t));continue}if(e==="$not"){s[e]=P(i,t);continue}if(e==="$always"){s[e]=i;continue}if(e==="$exists"){let r=i;s[e]={...r,where:r?.where?P(r.where,t):r?.where};continue}if(ze(e)){let r=Ze(e,t),a=fi(r,i);s.$always=a;continue}if(i!=null&&typeof i=="object"&&!Array.isArray(i)){s[e]=ts(i,t);continue}s[e]=i;}return s}function ts(l,t){let s={};for(let[e,i]of Object.entries(l))e==="$not"&&i!=null&&typeof i=="object"?s[e]=ts(i,t):ci(i)?s[e]={...i,where:i?.where?P(i?.where,t):void 0}:ze(i)?s[e]=Ze(i,t):s[e]=i;return s}function ci(l){return l!=null&&typeof l=="object"&&l.type==="query"}function fi(l,t){for(let[s,e]of Object.entries(t))switch(s){case "$eq":if(l!==e)return false;break;case "$neq":if(l===e)return false;break;case "$in":if(!Array.isArray(e)||!e.includes(l))return false;break;case "$notIn":if(Array.isArray(e)&&e.includes(l))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=hi(t.type);if(!i)return t;let r=nt(s,"auth.role")??"anon",{permissive:n,restrictive:a}=this.resolvePolicies(e,t.schema,i,r);switch(i){case "SELECT":case "DELETE":{let u=this.combineUsing(n,a,s);return {...t,where:es(t.where,u)}}case "UPDATE":{let u=this.combineUsing(n,a,s),o={...t,where:es(t.where,u)};if(u.$always===false)return o;let p=this.combineWithCheck(n,a,s,i);if(t.values&&Object.keys(p).length>0){let f=new Set(Object.keys(t.values));this.validateWithCheck(p,t.values,n,a,f);}return o}case "INSERT":{let u=this.combineWithCheck(n,a,s,i);if(t.values){let o=Array.isArray(t.values)?t.values:[t.values];for(let p of o)this.validateWithCheck(u,p,n,a);}return t}default:return t}}isRlsEnabled(t,s){return this.tables.has(t)}resolvePolicies(t,s,e,i){let r=this.policies.filter(n=>n.data.table===t&&this.schemasMatch(n.data.schema,s)&&n.appliesTo(e)&&n.appliesToRole(i));return {permissive:r.filter(n=>n.data.permissive),restrictive:r.filter(n=>!n.data.permissive)}}schemasMatch(t,s){let e=t||this.defaultSchema,i=s||this.defaultSchema;return e===i}combineUsing(t,s,e){if(t.length===0)return {$always:false};let i=t.map(n=>n.data.using).filter(n=>n!=null&&Object.keys(n).length>0).map(n=>P(n,e)),r;i.length===0?r={}:i.length===1?r=i[0]:r={$or:i};for(let n of s)if(n.data.using&&Object.keys(n.data.using).length>0){let a=P(n.data.using,e);r=Object.keys(r).length===0?a:{$and:[r,a]};}return r}combineWithCheck(t,s,e,i){if(t.length===0)return {$always:false};let r=t.map(a=>a.data.withCheck??(i==="UPDATE"?a.data.using:void 0)).filter(a=>a!=null&&Object.keys(a).length>0).map(a=>P(a,e)),n;r.length===0?n={}:r.length===1?n=r[0]:n={$or:r};for(let a of s){let u=a.data.withCheck??(i==="UPDATE"?a.data.using:void 0);if(u&&Object.keys(u).length>0){let o=P(u,e);n=Object.keys(n).length===0?o:{$and:[n,o]};}}return n}validateWithCheck(t,s,e,i,r){if(Object.keys(t).length===0)return;if(!vt(t,s,r)){let a=e[0]??i[0];throw a?new wt(a):new Error("RLS policy violation")}}};function hi(l){switch(l){case "query":return "SELECT";case "insert":case "upsert":case "put":return "INSERT";case "update":return "UPDATE";case "delete":return "DELETE";default:return}}function es(l,t){return !l||Object.keys(l).length===0?t:Object.keys(t).length===0?l:{$and:[l,t]}}function vt(l,t,s){for(let[e,i]of Object.entries(l)){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(!mi(n,a,u))return false}return true}function mi(l,t,s){switch(t){case "$eq":return l===s;case "$neq":return l!==s;case "$gt":return l>s;case "$gte":return l>=s;case "$lt":return l<s;case "$lte":return l<=s;case "$in":return Array.isArray(s)&&s.includes(l);case "$notIn":return !Array.isArray(s)||!s.includes(l);case "$is":return l===s;case "$isNot":return l!==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 ss(l){let t={};for(let s in l){let e=l[s];if(typeof e=="string"&&(e[0]==="["||e[0]==="{"))try{t[s]=JSON.parse(e);}catch{t[s]=e;}else t[s]=e;}return t}var Y=class l extends Connection{dialect="sqlite";deserializeRow(t){return this.config.ddlDialect==="postgres"?ss(t):t}constructor(t={}){super({...t,translation:{...t.translation,schemas:{appendDefaultSchema:false,approach:"quote",defaultSchema:"public",...t.translation?.schemas},deparse:l.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(()=>(Fs(),Us));return await i(t,{forceDefaultSchema:s,introspection:e,schemaHandling:this.config.translation?.schemas?.approach==="snake_case"?"prefix":"default"})}async introspect(t){Ve(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 Ye(this,this.config.introspection),i=this.config.translation?.schemas?.approach==="snake_case"?"__":".";if(this.config.ddlDialect==="postgres"&&t?.postprocess!==false){let r=this.config.translation?.schemas?.defaultSchema??this.config.translation?.schemas?.appendDefaultSchema?"public":void 0,n=(u="table")=>o=>{let p=o[u],f=o.schema??r;return !f&&r&&p.includes(i)&&([f,p]=p.split(i)),{...o,[u]:p,schema:f??r}},a=u=>{let o=n()(u),p=o.ref_table,f=o.ref_schema??r;return p?.includes(i)&&([f,p]=p.split(i)),{...o,ref_table:p,ref_schema:f??r}};e={...e,tables:e.tables.map(n("name")),columns:e.columns.map(n()),indexes:e.indexes.map(n()),primary_keys:e.primary_keys.map(n()),foreign_keys:e.foreign_keys.map(a),views:e.views.map(n("name")),check_constraints:e.check_constraints.map(n("table"))};}return this.config.ddlDialect==="postgres"&&t?.postprocess!==false&&(e=this.mergeDeparseMetadata(e)),e=this.markForeignKeyVisibility(e),e={...e,ddl_dialect:this.config.ddlDialect??"postgres",schema_separator:i},t?.postprocess!==false&&await this.writeCachedIntrospection(e,{useDriver:s}),e}async transaction(t,s){s?.intent==="migration"&&await this.exec("PRAGMA foreign_keys=OFF;"),await this.exec("BEGIN");try{for(let e of t)try{await this.exec(e);}catch(i){throw console.error(`Failed to execute statement: ${e}`),i}await this.exec("COMMIT");}catch(e){throw await this.exec("ROLLBACK"),e}finally{s?.intent==="migration"&&(await this.exec("PRAGMA foreign_keys=ON;"),await this.clearSchemaCache());}}async close(){}mergeDeparseMetadata(t){let s=this.config.translation?.deparse;if(!s?.schema)return t;let e=t.columns.map(u=>({...u})),i=t.foreign_keys.map(u=>({...u})),r=[...t.unique_constraints??[]],n=[...t.check_constraints??[]];for(let[,u]of s.schema)for(let o of u.all()){let p=o.context,f=e.find(m=>m.table===p.table&&m.name===p.column);if(f&&(f.pg_type=p.pgTypeName,p.isGenerated!==void 0&&(f.is_generated=p.isGenerated)),p.fkRef?.constraintName){let m=i.find(T=>T.table===p.table&&T.column===p.column&&T.ref_table===p.fkRef.refTable&&T.ref_column===p.fkRef.refColumn);m&&(m.foreign_key_name=p.fkRef.constraintName);}p.uniqueConstraintName&&r.push({schema:p.schema,table:p.table,name:p.uniqueConstraintName,columns:[p.column]}),p.hasCheck&&n.push({schema:p.schema,table:p.table,expression:"",name:p.checkConstraintName,column:p.column});}for(let u of s.tableConstraints??[])if(u.kind==="unique")r.push({schema:u.schema,table:u.table,name:u.name??"",columns:u.columns});else if(u.kind==="check")n.push({schema:u.schema,table:u.table,expression:"",name:u.name});else if(u.kind==="foreign_key"&&u.name){let o=u.refTable;for(let p=0;p<u.columns.length;p++){let f=i.find(m=>m.table===u.table&&m.column===u.columns[p]&&m.ref_table===o&&m.ref_column===(u.refColumns?.[p]??""));f&&(f.foreign_key_name=u.name);}}let a=[...t.comments??[],...s.comments??[]];return {...t,columns:e,foreign_keys:i,unique_constraints:r,check_constraints:n,comments:a}}markForeignKeyVisibility(t){let s=new Set(t.views.map(i=>i.name)),e=i=>i.startsWith("private_")?s.has(i.slice(8)):true;return {...t,foreign_keys:t.foreign_keys.map(i=>({...i,is_visible:e(i.table)&&e(i.ref_table)}))}}createMigrator(t){let s=[this.config.baseSchema,t].filter(Boolean).join(`
212
+ ${i.name?`'${i.name}'`:"'sqlite'"} AS database_name,
213
+ ${i.version?`'${i.version}'`:"sqlite_version()"} AS version;`};function L(i){if(!i)return [];try{return Array.isArray(i)?i:JSON.parse(i)}catch{return []}}async function Rt(i,e={}){let n=(await i.exec(yn(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 xn=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(!xn.has(t.kind))return super.transformNodeImpl(t,n);let r=this.#i(t);for(let o of r)this.#n.add(o);let s=this.#s(t);for(let o of s)this.#t.add(o);try{return super.transformNodeImpl(t,n)}finally{for(let o of s)this.#t.delete(o);for(let o of r)this.#n.delete(o);}}transformSchemableIdentifier(t,n){let r=t.identifier.name,s=t.schema?.name,o=!s&&this.config.appendDefaultSchema&&this.config.defaultSchema&&!this.#n.has(r)&&this.#t.has(r),a=s??(o?this.config.defaultSchema:void 0);if(!a)return {kind:"SchemableIdentifierNode",schema:void 0,identifier:{kind:"IdentifierNode",name:r}};let l=this.config.approach==="snake_case"?"__":".";return {kind:"SchemableIdentifierNode",schema:void 0,identifier:{kind:"IdentifierNode",name:`${a}${l}${r}`}}}#s(t){let n=new Set;if(t?.name&&SchemableIdentifierNode.is(t.name)&&this.#r(t.name,n),t?.from?.froms)for(let r of t.from.froms)this.#e(r,n);if(t?.into&&this.#e(t.into,n),t?.table&&this.#e(t.table,n),t?.joins)for(let r of t.joins)this.#e(r.table,n);return t?.using&&(JoinNode.is(t.using)?this.#e(t.using.table,n):this.#e(t.using,n)),n}#e(t,n){if(TableNode.is(t)){this.#r(t.table,n);return}if(AliasNode.is(t)&&TableNode.is(t.node)){this.#r(t.node.table,n);return}if(ListNode.is(t)){for(let r of t.items)this.#e(r,n);return}if(UsingNode.is(t))for(let r of t.tables)this.#e(r,n);}#r(t,n){let r=t.identifier.name;this.#n.has(r)||n.add(r);}#i(t){let n=new Set;if(t?.with?.expressions)for(let r of t.with.expressions){let s=r?.name?.table?.table?.identifier?.name;s&&n.add(s);}return n}},Ee=class{#t;constructor(e){this.#t=new We(e);}transformQuery(e){return this.#t.transformNode(e.node)}async transformResult(e){return e.result}};be();Ke();Ge();function ee(i){return i==="migrations"||i==="supabase_migrations.schema_migrations"||i==="supabase_migrations.seed_files"}function kt(i){return {...i,tables:i.tables.filter(e=>!ee(e.name)),columns:i.columns.filter(e=>!ee(e.table)),indexes:i.indexes.filter(e=>!ee(e.table)),foreign_keys:i.foreign_keys.filter(e=>!ee(e.table)),primary_keys:i.primary_keys.filter(e=>!ee(e.table))}}var Te=class{constructor(e,t,n={}){this.conn=e;this.desiredSchema=t;this.options=n;this.differ=new G,this.planner=new Q;}differ;planner;translationResult;async getDesiredSchema(){let e=await this.conn.translateDdl(this.desiredSchema);return this.translationResult=e,await this.options.onTranslation?.(e),e.ddl}async diff(){let e=await this.conn.introspect({postprocess:false}),t=await this.getDesiredSchema();if(!t||t.trim().length===0)return {current:e,desired:e,diff:{tables:[],columns:[],indexes:[],foreign_keys:[],has_changes:false},plan:{steps:[],warnings:[],unsafe:false}};let{createConnection:n}=await import('@supabase/lite/sqlite'),r=await n({url:":memory:"});try{await r.exec(t);let s=await r.introspect({postprocess:!1}),o=kt(e),a=kt(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 vt=/^\{\{(.+)\}\}$/;function Ot(i){return typeof i=="string"&&vt.test(i)}function kn(i){return vt.exec(i)[1]}var It=Symbol("unresolved");function Lt(i,e){let t=kn(i),n=Z(e,t,It);if(n===It)throw new Error(`Unresolved variable: {{${t}}}`);return n}function v(i,e){let t={};for(let[n,r]of Object.entries(i)){if(n==="$or"||n==="$and"){t[n]=r.map(s=>v(s,e));continue}if(n==="$not"){t[n]=v(r,e);continue}if(n==="$always"){t[n]=r;continue}if(n==="$exists"){let s=r;t[n]={...s,where:s?.where?v(s.where,e):s?.where};continue}if(Ot(n)){let s=Lt(n,e),a=vn(s,r);t.$always=a;continue}if(r!=null&&typeof r=="object"&&!Array.isArray(r)){t[n]=Dt(r,e);continue}t[n]=r;}return t}function Dt(i,e){let t={};for(let[n,r]of Object.entries(i))n==="$not"&&r!=null&&typeof r=="object"?t[n]=Dt(r,e):In(r)?t[n]={...r,where:r?.where?v(r?.where,e):void 0}:Ot(r)?t[n]=Lt(r,e):t[n]=r;return t}function In(i){return i!=null&&typeof i=="object"&&i.type==="query"}function vn(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=On(e.type);if(!r)return e;let s=Z(t,"auth.role")??"anon",{permissive:o,restrictive:a}=this.resolvePolicies(n,e.schema,r,s);switch(r){case "SELECT":case "DELETE":{let l=this.combineUsing(o,a,t);return {...e,where:Pt(e.where,l)}}case "UPDATE":{let l=this.combineUsing(o,a,t),u={...e,where:Pt(e.where,l)};if(l.$always===false)return u;let p=this.combineWithCheck(o,a,t,r);if(e.values&&Object.keys(p).length>0){let c=new Set(Object.keys(e.values));this.validateWithCheck(p,e.values,o,a,c);}return u}case "INSERT":{let l=this.combineWithCheck(o,a,t,r);if(e.values){let u=Array.isArray(e.values)?e.values:[e.values];for(let p of u)this.validateWithCheck(l,p,o,a);}return e}default:return e}}isRlsEnabled(e,t){return this.tables.has(e)}resolvePolicies(e,t,n,r){let s=this.policies.filter(o=>o.data.table===e&&this.schemasMatch(o.data.schema,t)&&o.appliesTo(n)&&o.appliesToRole(r));return {permissive:s.filter(o=>o.data.permissive),restrictive:s.filter(o=>!o.data.permissive)}}schemasMatch(e,t){let n=e||this.defaultSchema,r=t||this.defaultSchema;return n===r}combineUsing(e,t,n){if(e.length===0)return {$always:false};let r=e.map(o=>o.data.using).filter(o=>o!=null&&Object.keys(o).length>0).map(o=>v(o,n)),s;r.length===0?s={}:r.length===1?s=r[0]:s={$or:r};for(let o of t)if(o.data.using&&Object.keys(o.data.using).length>0){let a=v(o.data.using,n);s=Object.keys(s).length===0?a:{$and:[s,a]};}return s}combineWithCheck(e,t,n,r){if(e.length===0)return {$always:false};let s=e.map(a=>a.data.withCheck??(r==="UPDATE"?a.data.using:void 0)).filter(a=>a!=null&&Object.keys(a).length>0).map(a=>v(a,n)),o;s.length===0?o={}:s.length===1?o=s[0]:o={$or:s};for(let a of t){let l=a.data.withCheck??(r==="UPDATE"?a.data.using:void 0);if(l&&Object.keys(l).length>0){let u=v(l,n);o=Object.keys(o).length===0?u:{$and:[o,u]};}}return o}validateWithCheck(e,t,n,r,s){if(Object.keys(e).length===0)return;if(!Ce(e,t,s)){let a=n[0]??r[0];throw a?new we(a):new Error("RLS policy violation")}}};function On(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 Pt(i,e){return !i||Object.keys(i).length===0?e:Object.keys(e).length===0?i:{$and:[i,e]}}function Ce(i,e,t){for(let[n,r]of Object.entries(i)){if(n==="$always"){if(r===false)return false;continue}if(n==="$and"){if(!r.every(l=>Ce(l,e,t)))return false;continue}if(n==="$or"){if(!r.some(l=>Ce(l,e,t)))return false;continue}if(n==="$not"){if(Ce(r,e,t))return false;continue}if(t&&!t.has(n))continue;let s=r,o=e[n];for(let[a,l]of Object.entries(s))if(!Ln(o,a,l))return false}return true}function Ln(i,e,t){switch(e){case "$eq":return i===t;case "$neq":return i!==t;case "$gt":return i>t;case "$gte":return i>=t;case "$lt":return i<t;case "$lte":return i<=t;case "$in":return Array.isArray(t)&&t.includes(i);case "$notIn":return !Array.isArray(t)||!t.includes(i);case "$is":return i===t;case "$isNot":return i!==t;default:throw new Error(`Cannot evaluate operator "${e}" client-side for WITH CHECK`)}}var _e=class{transformQuery(e){return e.node}transformResult(e){return e.result.rows?Promise.resolve({...e.result,rows:e.result.rows.map(t=>{let n={};for(let r in t){let s=t[r];if(typeof s=="string"&&(s[0]==="{"||s[0]==="["))try{n[r]=JSON.parse(s);}catch{n[r]=s;}else n[r]=s;}return n})}):Promise.resolve(e.result)}};function $t(i){let e={};for(let t in i){let n=i[t];if(typeof n=="string"&&(n[0]==="["||n[0]==="{"))try{e[t]=JSON.parse(n);}catch{e[t]=n;}else e[t]=n;}return e}var K=class i extends Connection{dialect="sqlite";deserializeRow(e){return this.config.ddlDialect==="postgres"?$t(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(()=>(ln(),an));return await r(e,{forceDefaultSchema:t,introspection:n,schemaHandling:this.config.translation?.schemas?.approach==="snake_case"?"prefix":"default"})}async introspect(e){wt(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 Rt(this,this.config.introspection),r=this.config.translation?.schemas?.approach==="snake_case"?"__":".";if(this.config.ddlDialect==="postgres"&&e?.postprocess!==false){let s=this.config.translation?.schemas?.defaultSchema??this.config.translation?.schemas?.appendDefaultSchema?"public":void 0,o=(l="table")=>u=>{let p=u[l],c=u.schema??s;return !c&&s&&p.includes(r)&&([c,p]=p.split(r)),{...u,[l]:p,schema:c??s}},a=l=>{let u=o()(l),p=u.ref_table,c=u.ref_schema??s;return p?.includes(r)&&([c,p]=p.split(r)),{...u,ref_table:p,ref_schema:c??s}};n={...n,tables:n.tables.map(o("name")),columns:n.columns.map(o()),indexes:n.indexes.map(o()),primary_keys:n.primary_keys.map(o()),foreign_keys:n.foreign_keys.map(a),views:n.views.map(o("name")),check_constraints:n.check_constraints.map(o("table"))};}return this.config.ddlDialect==="postgres"&&e?.postprocess!==false&&(n=this.mergeDeparseMetadata(n)),n=this.markForeignKeyVisibility(n),n={...n,ddl_dialect:this.config.ddlDialect??"postgres",schema_separator:r},e?.postprocess!==false&&await this.writeCachedIntrospection(n,{useDriver:t}),n}async transaction(e,t){t?.intent==="migration"&&await this.exec("PRAGMA foreign_keys=OFF;"),await this.exec("BEGIN");try{for(let n of e)try{await this.exec(n);}catch(r){throw console.error(`Failed to execute statement: ${n}`),r}await this.exec("COMMIT");}catch(n){throw await this.exec("ROLLBACK"),n}finally{t?.intent==="migration"&&(await this.exec("PRAGMA foreign_keys=ON;"),await this.clearSchemaCache());}}async close(){}mergeDeparseMetadata(e){let t=this.config.translation?.deparse;if(!t?.schema)return e;let n=e.columns.map(l=>({...l})),r=e.foreign_keys.map(l=>({...l})),s=[...e.unique_constraints??[]],o=[...e.check_constraints??[]];for(let[,l]of t.schema)for(let u of l.all()){let p=u.context,c=n.find(d=>d.table===p.table&&d.name===p.column);if(c&&(c.pg_type=p.pgTypeName,p.isGenerated!==void 0&&(c.is_generated=p.isGenerated)),p.fkRef?.constraintName){let d=r.find(E=>E.table===p.table&&E.column===p.column&&E.ref_table===p.fkRef.refTable&&E.ref_column===p.fkRef.refColumn);d&&(d.foreign_key_name=p.fkRef.constraintName);}p.uniqueConstraintName&&s.push({schema:p.schema,table:p.table,name:p.uniqueConstraintName,columns:[p.column]}),p.hasCheck&&o.push({schema:p.schema,table:p.table,expression:"",name:p.checkConstraintName,column:p.column});}for(let l of t.tableConstraints??[])if(l.kind==="unique")s.push({schema:l.schema,table:l.table,name:l.name??"",columns:l.columns});else if(l.kind==="check")o.push({schema:l.schema,table:l.table,expression:"",name:l.name});else if(l.kind==="foreign_key"&&l.name){let u=l.refTable;for(let p=0;p<l.columns.length;p++){let c=r.find(d=>d.table===l.table&&d.column===l.columns[p]&&d.ref_table===u&&d.ref_column===(l.refColumns?.[p]??""));c&&(c.foreign_key_name=l.name);}}let a=[...e.comments??[],...t.comments??[]];return {...e,columns:n,foreign_keys:r,unique_constraints:s,check_constraints:o,comments:a}}markForeignKeyVisibility(e){let t=new Set(e.views.map(r=>r.name)),n=r=>r.startsWith("private_")?t.has(r.slice(8)):true;return {...e,foreign_keys:e.foreign_keys.map(r=>({...r,is_visible:n(r.table)&&n(r.ref_table)}))}}createMigrator(e){let t=[this.config.baseSchema,e].filter(Boolean).join(`
245
214
 
246
- `);return new _t(this,s,{onTranslation:async e=>{if(this.config.translation){let i={enums:e.enums,rls:e.rls,schema:e.schema,vars:e.vars,tableConstraints:e.tableConstraints??[],comments:e.comments??[]};this.config.translation.deparse=i;}}})}get maxBoundParameters(){return this.config.maxBoundParameters??100}assertParamLimit(t){let s=t?.length??0,e=this.maxBoundParameters;if(!(s<=e))throw Object.assign(new Error(`Query exceeds max bound parameters (${s} > ${e}). SQLite drivers vary in how many parameters they accept per statement; @supabase/lite enforces a conservative limit of ${e} for portability. Split the query (e.g. chunk large .in() filters or batch INSERTs) on the caller.`),{code:"54000"})}prepareBindParams(t){return this.assertParamLimit(t),this.normalizeBindParams(t)}normalizeBindParams(t){if(!t||t.length===0)return [];let s=[];for(let e=0;e<t.length;e++){let i=t[e];if(i===void 0)continue;if(i===null){s.push(i);continue}let r=typeof i;if(r==="boolean"){s.push(i?1:0);continue}if(r==="number"||r==="bigint"||r==="string"){s.push(i);continue}if(i instanceof Uint8Array||i instanceof ArrayBuffer||i instanceof Date){s.push(i);continue}throw new Error(`Cannot bind value at parameter ${e+1}: unsupported type ${Array.isArray(i)?"array":r}`)}return s}normalizeDbError(t){let s=t,e=s?.cause?.code??s?.code,i=s?.cause?.message??s?.message??String(t);if(e==="SQLITE_CONSTRAINT_NOTNULL")return Object.assign(new Error(i),{code:"23502",detail:i});if(e==="SQLITE_CONSTRAINT_UNIQUE"||e==="SQLITE_CONSTRAINT_PRIMARYKEY")return Object.assign(new Error(i),{code:"23505",detail:i});if(e==="SQLITE_CONSTRAINT_FOREIGNKEY")return Object.assign(new Error(i),{code:"23503",detail:i});if(typeof i=="string"){if(/too many SQL variables/i.test(i)){let a=this.maxBoundParameters;return Object.assign(new Error(`Query exceeds SQLite bound-parameter limit. @supabase/lite enforces a conservative limit of ${a} for portability across drivers. Split the query (e.g. chunk large .in() filters or batch INSERTs) on the caller.`),{code:"54000",detail:i})}let r=i.match(/no such table:\s*([A-Za-z0-9_.]+)/i);if(r){let a=r[1],u=a.lastIndexOf("."),o=u>=0?a.slice(0,u):void 0,p=u>=0?a.slice(u+1):a;return new RelationNotFoundError(o,p)}let n=i.match(/no such column:\s*([A-Za-z0-9_.]+)/i);if(n)return Object.assign(new Error(`column ${n[1]} does not exist`),{code:"42703",detail:i})}return t}async onPostgrestAST(t,s){if(this.config.ddlDialect==="sqlite")return t.schema=void 0,this.applyRls(t,s);let e=this.config.translation?.schemas?.appendDefaultSchema,i=this.config.translation?.schemas?.defaultSchema;if(t.schema&&t.schema===i&&!e?t.schema=void 0:!t.schema&&i&&e&&(t.schema=i),!t.from)return t;let r=await this.introspect({useCache:true}),n=t.schema??(e&&i?i:""),a=t.from;if(!(r.tables.some(o=>o.name===a&&(o.schema??"")===n)||r.views.some(o=>o.name===a&&(o.schema??"")===n))){if(!(r.tables.some(p=>p.name===a&&["","public",i].includes(p.schema??""))||r.views.some(p=>p.name===a&&["","public",i].includes(p.schema??""))))throw new RelationNotFoundError(n,a);t.schema=void 0;}return this.applyRls(t,s)}applyRls(t,s){let e=this.config.translation?.deparse?.rls;if(!e||!s)return t;let i=this.config.translation?.schemas?.defaultSchema||void 0;return new dt(e.tables,e.policies,i).enforce(t,s)}};function rr(l){if(!l||l===":memory:"||l==="file::memory:")return ":memory:";if(!l.startsWith("file:"))return l;let t=l.startsWith("file://")?l.slice(7):l.slice(5);return !t||t===":memory:"?":memory:":de.isAbsolute(t)?t:de.resolve(process.cwd(),t)}function nr(l,t,s){return {db:l,query:(e,i,r)=>{let n=s(r);try{t.debug&&console.log("[bun:sqlite] query",i,n);let a=l.prepare(i,n);if(a.columnNames.length>0){let u=a.all();return t.debug&&console.log("[bun:sqlite] rows",u),{rows:u}}else {let{changes:u,lastInsertRowid:o}=a.run();return {numAffectedRows:Number.parseInt(u.toString(),10),insertId:Number.parseInt(o.toString(),10)}}}catch(a){console.error(a);let u=new Error(`Failed to execute query: ${i}
247
- ${JSON.stringify(n)}`);throw u.cause=a,u.code=a?.code,u}},close:()=>l.close(),iterator:(e,i,r)=>{let n=s(r);return ar(l.prepare(i,n))}}}async function*ar(l,t){if(!("iterate"in l))throw new Error("Streaming not supported, please upgrade to Bun@1.1.31 or later");for(let s of l.iterate(...[]))yield s;}var De=class extends Y{kysely;driver;constructor(t={}){super(t);let s=rr(t.url);if(s!==":memory:"){let i=de.dirname(s);Ms.existsSync(i)||Ms.mkdirSync(i,{recursive:true});}this.driver=new er(s,{strict:true});let e=new GenericSqliteDialect(()=>nr(this.driver,t,i=>this.prepareBindParams(i)),i=>{this.driver.run("pragma foreign_keys = on");});this.kysely=new Kysely({dialect:e,plugins:this.withSqlitePlugins()});}async exec(t,...s){let e=t.trimStart().toUpperCase(),i=this.prepareBindParams(s);if(e.startsWith("SELECT")||e.startsWith("WITH"))return {rows:this.driver.prepare(t).all(...i)};i.length>0?this.driver.prepare(t).run(...i):this.driver.exec(t);}async close(){await this.exec("PRAGMA wal_checkpoint(FULL)"),this.driver.close();}};function ur(l={}){return new De(l)}var Jt=class extends Y{constructor(s){super({...s,introspection:{...s.introspection,version:"3.47.0"}});this.config=s;}dialect="sqlite";driver=null;kysely=null;fetch(s,e){let i=s instanceof URL?new URL(s.toString(),this.config.host):new URL(s,this.config.host);return fetch(i,{...e,headers:{"Content-Type":"application/json",Accept:"application/json",Authorization:`Bearer ${this.config.token}`,...e?.headers}})}async introspect(s){let e=new URLSearchParams({useCache:s?.useCache?"1":"0",postprocess:s?.postprocess?"1":"0"}),i=await this.fetch(`/v1/projects/${this.config.projectRef}/db/introspect?${e}`),r=await i.text();if(!i.ok)throw console.error(r),new Error(`Failed to get project introspect: ${i.status} ${i.statusText}`);try{let n=JSON.parse(r);if(!n)throw new Error("Failed to get project introspect");return n}catch(n){throw console.error(n),console.log(r),new Error(`Failed to parse introspect response: "${r}"`)}}async transaction(s,e){let i=await this.fetch(`/v1/projects/${this.config.projectRef}/db/transaction?intent=${e?.intent??"migration"}`,{method:"POST",body:JSON.stringify({statements:s})});if(!i.ok)throw new Error(`Failed to execute transaction: ${i.status} ${i.statusText}`)}async exec(s,...e){let i=await this.fetch(`/v1/projects/${this.config.projectRef}/db/exec`,{method:"POST",body:JSON.stringify({statement:s,parameters:e})}),r=await i.text();if(!i.ok)throw console.error(r),new Error(`Failed to execute statement: ${i.status} ${i.statusText}`);try{return JSON.parse(r)}catch(n){throw console.error(n),new Error(`Failed to parse exec response: "${r}"`)}}async close(){}};function or(l){return new Jt(l)}export{Jt as CloudConnection,Y as SqliteConnection,or as cloud,ur as createConnection};
215
+ `);return new Te(this,t,{onTranslation:async n=>{if(this.config.translation){let r={enums:n.enums,rls:n.rls,schema:n.schema,vars:n.vars,tableConstraints:n.tableConstraints??[],comments:n.comments??[]};this.config.translation.deparse=r;}}})}get maxBoundParameters(){return this.config.maxBoundParameters??100}assertParamLimit(e){let t=e?.length??0,n=this.maxBoundParameters;if(!(t<=n))throw Object.assign(new Error(`Query exceeds max bound parameters (${t} > ${n}). SQLite drivers vary in how many parameters they accept per statement; @supabase/lite enforces a conservative limit of ${n} for portability. Split the query (e.g. chunk large .in() filters or batch INSERTs) on the caller.`),{code:"54000"})}prepareBindParams(e){return this.assertParamLimit(e),this.normalizeBindParams(e)}normalizeBindParams(e){if(!e||e.length===0)return [];let t=[];for(let n=0;n<e.length;n++){let r=e[n];if(r===void 0)continue;if(r===null){t.push(r);continue}let s=typeof r;if(s==="boolean"){t.push(r?1:0);continue}if(s==="number"||s==="bigint"||s==="string"){t.push(r);continue}if(r instanceof Uint8Array||r instanceof ArrayBuffer||r instanceof Date){t.push(r);continue}throw new Error(`Cannot bind value at parameter ${n+1}: unsupported type ${Array.isArray(r)?"array":s}`)}return t}normalizeDbError(e){let t=e,n=t?.cause?.code??t?.code,r=t?.cause?.message??t?.message??String(e);if(n==="SQLITE_CONSTRAINT_NOTNULL")return Object.assign(new Error(r),{code:"23502",detail:r});if(n==="SQLITE_CONSTRAINT_UNIQUE"||n==="SQLITE_CONSTRAINT_PRIMARYKEY")return Object.assign(new Error(r),{code:"23505",detail:r});if(n==="SQLITE_CONSTRAINT_FOREIGNKEY")return Object.assign(new Error(r),{code:"23503",detail:r});if(typeof r=="string"){if(/too many SQL variables/i.test(r)){let a=this.maxBoundParameters;return Object.assign(new Error(`Query exceeds SQLite bound-parameter limit. @supabase/lite enforces a conservative limit of ${a} for portability across drivers. Split the query (e.g. chunk large .in() filters or batch INSERTs) on the caller.`),{code:"54000",detail:r})}let s=r.match(/no such table:\s*([A-Za-z0-9_.]+)/i);if(s){let a=s[1],l=a.lastIndexOf("."),u=l>=0?a.slice(0,l):void 0,p=l>=0?a.slice(l+1):a;return new RelationNotFoundError(u,p)}let o=r.match(/no such column:\s*([A-Za-z0-9_.]+)/i);if(o)return Object.assign(new Error(`column ${o[1]} does not exist`),{code:"42703",detail:r})}return e}async onPostgrestAST(e,t){if(this.config.ddlDialect==="sqlite")return e.schema=void 0,this.applyRls(e,t);let n=this.config.translation?.schemas?.appendDefaultSchema,r=this.config.translation?.schemas?.defaultSchema;if(e.schema&&e.schema===r&&!n?e.schema=void 0:!e.schema&&r&&n&&(e.schema=r),!e.from)return e;let s=await this.introspect({useCache:true}),o=e.schema??(n&&r?r:""),a=e.from;if(!(s.tables.some(u=>u.name===a&&(u.schema??"")===o)||s.views.some(u=>u.name===a&&(u.schema??"")===o))){if(!(s.tables.some(p=>p.name===a&&["","public",r].includes(p.schema??""))||s.views.some(p=>p.name===a&&["","public",r].includes(p.schema??""))))throw new RelationNotFoundError(o,a);e.schema=void 0;}return this.applyRls(e,t)}applyRls(e,t){let n=this.config.translation?.deparse?.rls;if(!n||!t)return e;let r=this.config.translation?.schemas?.defaultSchema||void 0;return new xe(n.tables,n.policies,r).enforce(e,t)}};function Cr(i){if(!i||i===":memory:"||i==="file::memory:")return ":memory:";if(!i.startsWith("file:"))return i;let e=i.startsWith("file://")?i.slice(7):i.slice(5);return !e||e===":memory:"?":memory:":mt.isAbsolute(e)?e:mt.resolve(process.cwd(),e)}function xr(i,e,t){return {db:i,query:(n,r,s)=>{let o=t(s);try{e.debug&&console.log("[bun:sqlite] query",r,o);let a=i.prepare(r,o);if(a.columnNames.length>0){let l=a.all();return e.debug&&console.log("[bun:sqlite] rows",l),{rows:l}}else {let{changes:l,lastInsertRowid:u}=a.run();return {numAffectedRows:Number.parseInt(l.toString(),10),insertId:Number.parseInt(u.toString(),10)}}}catch(a){console.error(a);let l=new Error(`Failed to execute query: ${r}
216
+ ${JSON.stringify(o)}`);throw l.cause=a,l.code=a?.code,l}},close:()=>i.close(),iterator:(n,r,s)=>{let o=t(s);return _r(i.prepare(r,o))}}}async function*_r(i,e){if(!("iterate"in i))throw new Error("Streaming not supported, please upgrade to Bun@1.1.31 or later");for(let t of i.iterate(...[]))yield t;}var dt=class extends K{kysely;driver;constructor(e={}){super(e);let t=Cr(e.url);if(t!==":memory:"){let r=mt.dirname(t);un.existsSync(r)||un.mkdirSync(r,{recursive:true});}this.driver=new br(t,{strict:true});let n=new GenericSqliteDialect(()=>xr(this.driver,e,r=>this.prepareBindParams(r)),r=>{this.driver.run("pragma foreign_keys = on");});this.kysely=new Kysely({dialect:n,plugins:this.withSqlitePlugins()});}async exec(e,...t){let n=e.trimStart().toUpperCase(),r=this.prepareBindParams(t);if(n.startsWith("SELECT")||n.startsWith("WITH"))return {rows:this.driver.prepare(e).all(...r)};r.length>0?this.driver.prepare(e).run(...r):this.driver.exec(e);}async close(){await this.exec("PRAGMA wal_checkpoint(FULL)"),this.driver.close();}};function Nr(i={}){return new dt(i)}var $e=class extends K{constructor(t){super({...t,introspection:{...t.introspection,version:"3.47.0"}});this.config=t;}dialect="sqlite";driver=null;kysely=null;fetch(t,n){let r=t instanceof URL?new URL(t.toString(),this.config.host):new URL(t,this.config.host);return fetch(r,{...n,headers:{"Content-Type":"application/json",Accept:"application/json",Authorization:`Bearer ${this.config.token}`,...n?.headers}})}async introspect(t){let n=new URLSearchParams({useCache:t?.useCache?"1":"0",postprocess:t?.postprocess?"1":"0"}),r=await this.fetch(`/v1/projects/${this.config.projectRef}/db/introspect?${n}`),s=await r.text();if(!r.ok)throw console.error(s),new Error(`Failed to get project introspect: ${r.status} ${r.statusText}`);try{let o=JSON.parse(s);if(!o)throw new Error("Failed to get project introspect");return o}catch(o){throw console.error(o),console.log(s),new Error(`Failed to parse introspect response: "${s}"`)}}async transaction(t,n){let r=await this.fetch(`/v1/projects/${this.config.projectRef}/db/transaction?intent=${n?.intent??"migration"}`,{method:"POST",body:JSON.stringify({statements:t})});if(!r.ok)throw new Error(`Failed to execute transaction: ${r.status} ${r.statusText}`)}async exec(t,...n){let r=await this.fetch(`/v1/projects/${this.config.projectRef}/db/exec`,{method:"POST",body:JSON.stringify({statement:t,parameters:n})}),s=await r.text();if(!r.ok)throw console.error(s),new Error(`Failed to execute statement: ${r.status} ${r.statusText}`);try{return JSON.parse(s)}catch(o){throw console.error(o),new Error(`Failed to parse exec response: "${s}"`)}}async close(){}};function Rr(i){return new $e(i)}export{$e as CloudConnection,K as SqliteConnection,Rr as cloud,Nr as createConnection};