/**
 * Minified by jsDelivr using Terser v5.39.0.
 * Original file: /npm/orchid-orm@1.66.0/dist/index.js
 *
 * Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files
 */
"use strict";var internal=require("pqb/internal"),pqb=require("pqb"),node_async_hooks=require("node:async_hooks");function createBaseTable({schemaConfig:e=internal.defaultSchemaConfig,columnTypes:t,snakeCase:n,filePath:r,nowSQL:a,exportAs:o="BaseTable",language:s,autoForeignKeys:i}={}){var l;const c="function"==typeof t?t(internal.makeColumnTypes(e)):t||internal.makeColumnTypes(e),u=r||internal.getStackTrace();let h;const y={shape:internal.emptyObject,data:internal.emptyArray},p=new WeakMap,f=((l=class{constructor(){this.columns=y,this.snakeCase=n,this.types=c,this.q={},this.language=s}static inputSchema(){return this.instance(),void 0===this._inputSchema?this._inputSchema=e.inputSchema.call(this):this._inputSchema}static outputSchema(){return this.instance(),void 0===this._outputSchema?this._outputSchema=e.outputSchema.call(this):this._outputSchema}static querySchema(){return this.instance(),void 0===this._querySchema?this._querySchema=e.querySchema.call(this):this._querySchema}static createSchema(){return this.instance(),void 0===this._createSchema?this._createSchema=e.createSchema.call(this):this._createSchema}static updateSchema(){return this.instance(),void 0===this._updateSchema?this._updateSchema=e.updateSchema.call(this):this._updateSchema}static pkeySchema(){return this.instance(),void 0===this._pkeySchema?this._pkeySchema=e.pkeySchema.call(this):this._pkeySchema}static getFilePath(){if(h)return h;if("string"==typeof u)return h=u;if(h=internal.getCallerFilePath(u),h)return h;throw new Error("Failed to determine file path of a base table. Please set the `filePath` option of `createBaseTable` manually.")}static instance(){let e=p.get(this);return e||(e=new this,p.set(this,e)),e}clone(){return this}getFilePath(){if(this.filePath)return this.filePath;if("string"==typeof u)return this.filePath=u;const e=internal.getCallerFilePath(u);if(e)return this.filePath=e;throw new Error(`Failed to determine file path for table ${this.constructor.name}. Please set \`filePath\` property manually`)}setColumns(e,t){c[internal.snakeCaseKey]=this.snakeCase;const n=internal.getColumnTypes(c,e,a,this.language),r=internal.parseTableData(t);if(this.snakeCase)for(const e in n){const t=n[e];if(t.data.name)continue;const r=internal.toSnakeCase(e);r!==e&&(t.data.name=r)}return this.constructor.prototype.columns={shape:n,data:r}}setComputed(e){return e}setScopes(e){return e}belongsTo(e,t){return{type:"belongsTo",fn:e,options:t}}hasOne(e,t){return{type:"hasOne",fn:e,options:t}}hasMany(e,t){return{type:"hasMany",fn:e,options:t}}hasAndBelongsToMany(e,t){return{type:"hasAndBelongsToMany",fn:e,options:t}}}).nowSQL=a,l.exportAs=o,l.columnTypes=c,l.sql=internal._createDbSqlMethod(c),l);return internal.applyMixins(f,[internal.QueryHooks]),f.prototype.types=c,f.prototype.snakeCase=n,f.prototype.language=s,f.prototype.autoForeignKeys=!0===i?{}:i||void 0,f}const getThroughRelation=(e,t)=>e.relations[t],getSourceRelation=(e,t)=>e.query.relations[t],hasRelationHandleCreate=(e,t,n,r,a,o,s)=>{e.q.wrapInTransaction=!0,n.forEach(((n,i)=>{const l=n[a];if((!l.create||Array.isArray(l.create)&&0===l.create.length)&&(!l.connect||Array.isArray(l.connect)&&0===l.connect.length)&&(!l.connectOrCreate||Array.isArray(l.connectOrCreate)&&0===l.connectOrCreate.length))return;const c=t;c.hasRelation||(c.hasRelation={});const u=[r[i],l];if(c.hasRelation[a])return void c.hasRelation[a].push(u);const h=[u];c.hasRelation[a]=h,internal._queryHookAfterCreate(e,o,((e,t)=>s(t,h.map((([t,n])=>[e[t],n])))))}))},hasRelationHandleUpdate=(e,t,n,r,a)=>{const o=t[n];(o.set||"upsert"in o||o.add&&(!Array.isArray(o.add)||0!==o.add.length)||o.disconnect&&(!Array.isArray(o.disconnect)||0!==o.disconnect.length)||o.delete&&(!Array.isArray(o.delete)||0!==o.delete.length)||o.update&&(!Array.isArray(o.update.where)||0!==o.update.where.length)||o.create&&(!Array.isArray(o.create)||0!==o.create.length))&&(e.q.wrapInTransaction=!0,internal._queryHookAfterUpdate(e,r,((e,t)=>a(t,e,o))))};function joinHasThrough(e,t,n,r,a){return e.whereExists(r.joinQuery(r.query,t),(()=>{const e=internal.getQueryAs(n);return a.joinQuery(a.query.as(e),r.query)}))}function joinHasRelation(e,t,n,r,a){const o=internal.getQueryAs(e),s=t.clone();internal.setQueryObjectValueImmutable(s,"joinedShapes",o,e.q.shape);for(let i=0;i<a;i++)internal.pushQueryOnForOuter(s,e,t,r[i],`${o}.${n[i]}`);return s}const addAutoForeignKey=(e,t,n,r,a,o,s)=>{var i;const l=n.table;let c=void 0!==o.foreignKey?o.foreignKey:e.autoForeignKeys;if(!c)return;if(!0===c&&(c=e.autoForeignKeys||internal.emptyObject),1===a.length){const e=t.shape[a[0]];if(e.data.foreignKeys){const t=r[0];for(const r of e.data.foreignKeys){let e,a=r.foreignColumns[0];if("string"==typeof r.fnOrTable?(e=r.fnOrTable,a=getColumnKeyFromDbName(n,a)):e=r.fnOrTable().instance().table,l===e&&t===a)return}}}const{constraints:u}=t.internal.tableData;if(u){const e=[...r].sort(),t=[...a].sort();for(const{references:r}of u)if(r&&r.columns.length===t.length&&r.columns.every(((e,n)=>e===t[n]))&&r.foreignColumns.length===e.length&&("string"==typeof r.fnOrTable?r.fnOrTable===l&&r.foreignColumns.every(((t,r)=>getColumnKeyFromDbName(n,t)===e[r])):r.fnOrTable().instance().table===l&&r.foreignColumns.every(((t,n)=>t===e[n]))))return}((i=t.internal.tableData).constraints??(i.constraints=[])).push({references:{columns:s||a,fnOrTable:l,foreignColumns:r,options:c},dropMode:c.dropMode})},getColumnKeyFromDbName=(e,t)=>{for(const n in e.shape)if(e.shape[n].data.name===t)return n;return t},selectCteColumnsSql=(e,t)=>`(SELECT ${t.map((t=>`"${e}"."${t}"`)).join(", ")} FROM "${e}")`,selectCteColumnSql=(e,t)=>`(SELECT "${e}"."${t}" FROM "${e}")`,selectCteColumnFromManySql=(e,t,n,r)=>{let a=`(SELECT "${e}"."${t}" FROM "${e}"`;return r>1&&(a+=" LIMIT 1",n&&(a+=` OFFSET ${n}`)),a+")"},joinQueryChainHOF=(e,t,n)=>(r,a)=>{const o=r,s=o.q.relChain;if(!s||1===s.length)return n(o,a);const i=s[s.length-1],l=s[s.length-2].rel.joinQuery(i.query,a);let c=!0;if("value"!==o.q.returnType&&"valueOrThrow"!==o.q.returnType){let e;if(o.q.order){const t=e=internal.getQueryAs(o)+".";c=o.q.order.every((e=>{if("string"==typeof e)return isOwnColumn(t,e);if(internal.isExpression(e))return!1;for(const n in e)if(!isOwnColumn(t,n))return!1;return!0}))}if(c&&o.q.select){const t=e||internal.getQueryAs(o)+".";c=o.q.select.every((e=>{if("string"==typeof e)return isOwnColumn(t,e);if(internal.isExpression(e))return!1;if(e){for(const n in e.selectAs){const r=e.selectAs[n];if("string"!=typeof r||!isOwnColumn(t,r))return!1}return!0}return!1}))}}if(c)return o.where({EXISTS:{q:t(l,o)}});const u=o.join({_internalJoin:t(l,o)},void 0);if(!l.q.chainMultiple)return u;const h=selectRowNumber(u,e);return combineOrdering(u,l),u.q.select||(u.q.select=["*"]),wrapQuery(o,u,h)},isOwnColumn=(e,t)=>!t.includes(".")||t.startsWith(e),selectRowNumber=(e,t)=>{const n=e.q.hookSelect=new Map(e.q.hookSelect&&[...e.q.hookSelect]),r=`"${internal.getQueryAs(e)}"`,a={select:{sql:`row_number() OVER (PARTITION BY ${t.map((t=>`${r}."${e.shape[t]?.data.name||t}"`)).join(", ")})`}};return n.set("r",a),a},combineOrdering=(e,t)=>{const{order:n}=t.q;if(n){const r=internal.getQueryAs(t),a=n.map((e=>"string"==typeof e?`${r}.${e}`:internal.isExpression(e)?e:Object.fromEntries(Object.entries(e).map((([e,t])=>[`${r}.${e}`,t]))))),o=e.q.order;e.q.order=o?[...a,...o]:a}},wrapQuery=(e,t,n)=>{const r=internal.cloneQueryBaseUnscoped(e).clone();return r.q.and=[new internal.DynamicRawSQL((()=>new internal.RawSql(`${n.as||"r"} = 1`)))],r.q.useFromLimitOffset=!0,r.shape=internal.getShapeFromSelect(t,!0),r.q.select=Object.keys(r.shape),r.q.returnType=t.q.returnType,t.q.returnsOne=!0,t.wrap(r)};class BelongsToVirtualColumn extends internal.VirtualColumn{constructor(e,t,n){super(e),this.key=t,this.state=n,this.nestedUpdate=nestedUpdate$2(this.state)}create(e,t,n){const{key:r,state:{query:a,primaryKeys:o,foreignKeys:s}}=this;let i;if(n.forEach((e=>{var t;const n=e[r],a=n.create?"create":n.connect?"connect":"connectOrCreate";{const r=(t=i??(i={}))[a]??(t[a]={items:[],values:[]});if(r.items.push(e),r.values.push(n[a]),"connect"!==a)for(const t of s)e[t]=new internal.RawSql("")}})),!i)return;for(const e of s)t.columns.has(e)||t.columns.set(e,t.columns.size);const{create:l,connect:c,connectOrCreate:u}=i;if(l){const t=a.select(...o);internal._prependWith(e,(e=>{const t=l.items.length;s.forEach(((n,r)=>{const a=o[r];l.items.forEach(((r,o)=>{r[n]._sql=selectCteColumnFromManySql(e,a,o,t)}))}))}),internal._queryInsertMany(t,l.values))}c&&c.values.forEach(((t,n)=>{const r=internal.getFreeAlias(e.q.withShapes,"q");internal._prependWith(e,r,a.select(...o).findBy(t)),s.map(((e,t)=>{c.items[n][e]=new internal.RawSql(selectCteColumnMustExistSql(t,r,o[t]))}))})),u&&u.values.forEach(((t,n)=>{const r=setForeignKeysFromCte(u.items[n],o,s),i=a.select(...o);internal._prependWith(e,r,internal._orCreate(internal._queryWhere(i,[t.where]),t.create))}))}update(e,t){e.q.wrapInTransaction=!0;const n=t[this.key];this.nestedUpdate(e,t,n)}}const makeBelongsToMethod=(e,t,n,r,a)=>{const o=n.options.references,s=n.options.columns,{on:i}=n.options;i&&(internal._queryWhere(a,[i]),internal._queryDefaults(a,i));const l=o.length,c={query:a,primaryKeys:o,foreignKeys:s,len:l,on:i};addAutoForeignKey(e,t,a,o,s,n.options);const u=(e,t,n,r)=>{const a=internal.getQueryAs(e),o=t.clone();internal.setQueryObjectValueImmutable(o,"joinedShapes",a,e.q.shape);for(let s=0;s<l;s++)internal.pushQueryOnForOuter(o,e,t,n[s],`${a}.${r[s]}`);return o},h=(e,t)=>u(t,e,s,o);return{returns:"one",queryRelated(e){const t={};for(let n=0;n<l;n++)t[o[n]]=e[s[n]];return a.where(t)},virtualColumn:new BelongsToVirtualColumn(internal.defaultSchemaConfig,r,c),joinQuery:joinQueryChainHOF(internal.getPrimaryKeys(a),h,((e,t)=>u(t,e,o,s))),reverseJoin:h}},nestedUpdate$2=({query:e,primaryKeys:t,foreignKeys:n,len:r})=>(a,o,s)=>{if(s.create){const r=internal._querySelect(internal._queryCreate(e.clone(),s.create),t),i=setForeignKeysFromCte(o,t,n);internal._prependWith(a,i,r)}else if(s.update){let r;internal._hookSelectColumns(a,n,(e=>{o._sql=selectCteColumnsSql(r,e)}));const o=new internal.RawSql(""),i=internal._queryUpdate(internal._queryWhereIn(e.clone(),!0,t,o),s.update);i.q.returnType="value",internal._appendQuery(a,i,(e=>r=e))}else if(s.upsert){if(internal.isQueryReturnsAll(a))throw new Error("`upsert` option is not allowed in a batch update");const{relQuery:r}=relWithSelectIds(a,e,t,n),i=internal._querySelect(internal._queryUpsert(r,s.upsert),t),l=setForeignKeysFromCte(o,t,n);internal._prependWith(a,l,i)}else if(s.delete){internal._hookSelectColumns(a,n,internal.noop),disconnect(o,n);const{selectIdsSql:r,relQuery:s}=relWithSelectIds(a,e,t,n);a.q.and=a.q.or=void 0,internal._queryWhereIn(a,!0,n,r);const i=internal._queryDelete(s);i.q.returnType="value",internal._appendQuery(a,i,internal.noop)}else if(s.disconnect)disconnect(o,n);else if(s.set){let i,l;for(let e=0;e<r;e++){const r=t[e];r in s.set?o[n[e]]=s.set[r]:((i??(i=[])).push(r),(l??(l=[])).push(n[e]))}if(i){const t=setForeignKeysFromCte(o,i,l,!0);internal._prependWith(a,t,internal._queryFindBy(e.select(...i),s.set))}}},disconnect=(e,t)=>{for(const n of t)e[n]=null},relWithSelectIds=(e,t,n,r)=>{const a=makeSelectIdsQuery(e,r),o=new internal.RawSql("");return internal._prependWith(e,(e=>{o._sql=selectCteColumnsSql(e,r)}),a),{selectIdsSql:o,relQuery:internal._queryWhereIn(t.clone(),!0,n,o)}},makeSelectIdsQuery=(e,t)=>{const n=e.baseQuery.clone();return n.q.distinct=internal.emptyArray,n.q.select=t,n.q.and=e.q.and,n.q.or=e.q.or,n},setForeignKeysFromCte=(e,t,n,r)=>{for(const t of n)e[t]=new internal.RawSql("");return a=>{n.forEach(r?(n,r)=>{e[n]._sql=selectCteColumnMustExistSql(r,a,t[r])}:(n,r)=>{e[n]._sql=selectCteColumnSql(a,t[r])})}},selectCteColumnMustExistSql=(e,t,n)=>{const r=selectCteColumnSql(t,n);return 0===e?`CASE WHEN (SELECT count(*) FROM "${t}") = 0 AND (SELECT 'not-found')::int = 0 THEN NULL ELSE ${r} END`:r};class HasOneVirtualColumn extends internal.VirtualColumn{constructor(e,t,n){super(e),this.key=t,this.state=n,this.nestedInsert=nestedInsert$2(n),this.setNulls={};for(const e of n.foreignKeys)this.setNulls[e]=null}create(e,t,n,r,a){if(a<=e.qb.internal.nestedCreateBatchMax){const{query:t,primaryKeys:o,foreignKeys:s}=this.state;let i,l,c,u;if(n.forEach(((e,t)=>{var n;const a=e[this.key],o=a.create?"create":a.connect?"connect":"connectOrCreate";{const e=(n=i??(i={}))[o]??(n[o]={indexes:[],items:[],values:[]});e.indexes.push(r[t]),e.values.push(a[o]);const l=a.create?{...a.create}:{};for(const e of s)l[e]=new internal.RawSql("");e.items.push(l)}})),!i)return;internal._hookSelectColumns(e,o,(e=>{s.forEach(((t,n)=>{const r=e[n];if(h&&l)for(let e=0;e<h.items.length;e++)h.items[e][t]._sql=selectCteColumnFromManySql(l,r,h.indexes[e],a);if(y&&c)for(let e=0;e<y.items.length;e++)y.items[e][t]._sql=selectCteColumnFromManySql(c,r,y.indexes[e],a);if(p&&u)for(let e=0;e<p.items.length;e++)p.items[e][t]._sql=selectCteColumnFromManySql(u,r,p.indexes[e],a)}))}));const{create:h,connect:y,connectOrCreate:p}=i;if(h){const n=internal._queryInsertMany(internal._clone(t),h.items);internal._appendQuery(e,n,(e=>l=e))}y&&y.values.forEach(((n,r)=>{const a=internal._queryUpdateOrThrow(t.where(n),y.items[r]);a.q.ensureCount=1,internal._appendQuery(e,a,(e=>c=e))})),p&&p.values.forEach(((n,r)=>{const a=internal._queryUpsert(t.where(n.where),{update:p.items[r],create:{...n.create,...p.items[r]}});internal._appendQuery(e,a,(e=>u=e))}))}else hasRelationHandleCreate(e,t,n,r,this.key,this.state.primaryKeys,this.nestedInsert)}update(e,t){const n=t[this.key];if((n.set||n.create||n.upsert)&&internal.isQueryReturnsAll(e)){const e=n.set?"set":n.create?"create":"upsert";throw new Error(`\`${e}\` option is not allowed in a batch update`)}const{primaryKeys:r,foreignKeys:a,query:o}=this.state;if(n.create||n.update||n.upsert||n.disconnect||n.set||n.delete){let t;internal._hookSelectColumns(e,r,(e=>{s._sql=selectCteColumnsSql(t,e),(n.create||n.set||n.upsert)&&a.forEach(((n,r)=>{l[n]._sql=selectCteColumnSql(t,e[r])}))}));const s=new internal.RawSql(""),i=internal._queryWhereIn(internal._clone(o),!0,a,s);let l;(n.create||n.set||n.upsert)&&(l={},a.forEach((e=>{l[e]=new internal.RawSql("")})));const c=n.update?internal._queryUpdate(i,n.update):n.upsert?internal._queryUpsert(i,{update:n.upsert.update,create:{..."function"==typeof n.upsert.create?n.upsert.create():n.upsert.create,...l}}):n.delete?internal._queryDelete(i):internal._queryUpdate(i,this.setNulls);if(c.q.returnType="void",internal._appendQuery(e,c,(e=>t=e)),n.create){const t=internal._queryInsert(internal._clone(o),{...n.create,...l});internal._appendQuery(e,t,internal.noop)}else if(n.set){const t=internal._queryUpdate(internal._queryWhere(internal._clone(o),[n.set]),l);t.q.returnType="void",internal._appendQuery(e,t,internal.noop)}}}}const makeHasOneMethod=(e,t,n,r,a)=>{const o=internal.getPrimaryKeys(a);if("through"in n.options){const{through:e,source:s}=n.options,i=getThroughRelation(t,e),l=getSourceRelation(i,s),c=l.query.as(r),u=l.joinQuery(c,i.query),h=()=>u,y=(e,t)=>joinHasThrough(e,e,t,i,l);return{returns:"one",queryRelated:n=>{const r=t.queryRelated(e,n);return a.whereExists(r,h)},joinQuery:joinQueryChainHOF(o,y,((e,t)=>joinHasThrough(e,t,e,i,l))),reverseJoin:y}}const s=n.options.columns,i=n.options.references,{on:l}=n.options;l&&(internal._queryWhere(a,[l]),internal._queryDefaults(a,l)),addAutoForeignKey(e,a,t,s,i,n.options);const c={query:a,primaryKeys:s,foreignKeys:i,on:l},u=s.length,h={};for(let e=0;e<u;e++)h[i[e]]=s[e];const y=[{selectAs:h}],p=(e,t)=>joinHasRelation(t,e,i,s,u);return{returns:"one",queryRelated:e=>{const t={};for(let n=0;n<u;n++)t[i[n]]=e[s[n]];return internal._queryDefaults(a.where(t),{...l,...t})},virtualColumn:new HasOneVirtualColumn(internal.defaultSchemaConfig,r,c),joinQuery:joinQueryChainHOF(o,p,((e,t)=>joinHasRelation(t,e,s,i,u))),reverseJoin:p,modifyRelatedQuery:e=>t=>{const n=t.clone();n.q.select=y;const r=e.q;r.insertFrom=internal.prepareSubQueryForSql(r,n),r.values=[]}}},nestedInsert$2=({query:e,primaryKeys:t,foreignKeys:n})=>async(r,a)=>{const o=e.clone(),s=[];for(const e of a)(e[1].connect||e[1].connectOrCreate)&&s.push(e);let i;if(s.length){for(let e=0,r=s.length;e<r;e++){const[r,a]=s[e],i={};t.forEach(((e,t)=>{i[n[t]]=r[e]})),s[e]="connect"in a?internal._queryUpdateOrThrow(o.where(a.connect),i):internal._queryUpdate(o.where(a.connectOrCreate.where),i)}i=await Promise.all(s)}else i=[];let l=0;s.length=0;for(const e of a)e[1].connectOrCreate?i[l++]||s.push(e):e[1].create&&s.push(e);if(s.length){for(let e=0,r=s.length;e<r;e++){const[r,a]=s[e],o={..."create"in a?a.create:a.connectOrCreate.create};for(let e=0;e<t.length;e++)o[n[e]]=r[t[e]];s[e]=o}await o.insertMany(s)}};class HasManyVirtualColumn extends internal.VirtualColumn{constructor(e,t,n){super(e),this.key=t,this.state=n,this.nestedInsert=nestedInsert$1(n),this.nestedUpdate=nestedUpdate$1(n)}create(e,t,n,r,a){if(a<=e.qb.internal.nestedCreateBatchMax){const{query:t,primaryKeys:o,foreignKeys:s}=this.state;let i,l,c,u;if(n.forEach(((e,t)=>{var n,a;const o=e[this.key];if(o.create?.length){const e=(n=i??(i={})).create??(n.create={indexes:[],items:[]});e.indexes.push(r[t]);const a=o.create.map((e=>{const t={...e};for(const e of s)t[e]=new internal.RawSql("");return t}));e.items.push(a)}else{const e=o.connect?.length?"connect":o.connectOrCreate?.length?"connectOrCreate":void 0;if(e){const n=(a=i??(i={}))[e]??(a[e]={indexes:[],items:[],values:[]});n.indexes.push(r[t]),n.values.push(o[e]);const l={};for(const e of s)l[e]=new internal.RawSql("");n.items.push(l)}}})),!i)return;internal._hookSelectColumns(e,o,(e=>{s.forEach(((t,n)=>{const r=e[n];if(h&&l)for(let e=0;e<h.items.length;e++){const n=selectCteColumnFromManySql(l,r,h.indexes[e],a);for(const r of h.items[e])r[t]._sql=n}if(y&&c)for(let e=0;e<y.items.length;e++)y.items[e][t]._sql=selectCteColumnFromManySql(c,r,y.indexes[e],a);if(p&&u)for(let e=0;e<p.items.length;e++)p.items[e][t]._sql=selectCteColumnFromManySql(u,r,p.indexes[e],a)}))}));const{create:h,connect:y,connectOrCreate:p}=i;if(h){const n=internal._queryInsertMany(internal._clone(t),h.items.flat());internal._appendQuery(e,n,(e=>l=e))}y&&y.values.forEach(((n,r)=>{const a=internal._queryUpdateOrThrow(t.whereOneOf(...n),y.items[r]);a.q.ensureCount=n.length,internal._appendQuery(e,a,(e=>c=e))})),p&&p.values.forEach(((n,r)=>{const a=p.items[r];for(const r of n){const n=internal._queryUpsert(t.where(r.where),{update:a,create:{...r.create,...a}});internal._appendQuery(e,n,(e=>u=e))}}))}else hasRelationHandleCreate(e,t,n,r,this.key,this.state.primaryKeys,this.nestedInsert)}update(e,t){const n=t[this.key];if((n.set||n.create)&&internal.isQueryReturnsAll(e)){const e=n.set?"set":"create";throw new Error(`\`${e}\` option is not allowed in a batch update`)}hasRelationHandleUpdate(e,t,this.key,this.state.primaryKeys,this.nestedUpdate)}}const makeHasManyMethod=(e,t,n,r,a)=>{const o=internal.getPrimaryKeys(a);if("through"in n.options){const{through:e,source:s}=n.options,i=getThroughRelation(t,e),l=getSourceRelation(i,s),c=l.query.as(r),u=l.joinQuery(c,i.query),h=()=>u,y=(e,t)=>joinHasThrough(e,e,t,i,l);return{returns:"many",queryRelated:n=>{const r=t.queryRelated(e,n);return a.whereExists(r,h)},joinQuery:joinQueryChainHOF(o,y,((e,t)=>joinHasThrough(e,t,e,i,l))),reverseJoin:y}}const s=n.options.columns,i=n.options.references,{on:l}=n.options;l&&(internal._queryWhere(a,[l]),internal._queryDefaults(a,l)),addAutoForeignKey(e,a,t,s,i,n.options);const c={query:a,primaryKeys:s,foreignKeys:i,on:l},u=s.length,h={};for(let e=0;e<u;e++)h[i[e]]=s[e];const y=[{selectAs:h}],p=(e,t)=>joinHasRelation(t,e,i,s,u);return{returns:"many",queryRelated:e=>{const t={};for(let n=0;n<u;n++)t[i[n]]=e[s[n]];return internal._queryDefaults(a.where(t),{...l,...t})},virtualColumn:new HasManyVirtualColumn(internal.defaultSchemaConfig,r,c),joinQuery:joinQueryChainHOF(o,p,((e,t)=>joinHasRelation(t,e,s,i,u))),reverseJoin:p,modifyRelatedQuery:e=>t=>{const n=t.clone();n.q.select=y;const r=e.q;r.insertFrom=internal.prepareSubQueryForSql(r,n),r.values=[]}}},getWhereForNestedUpdate=(e,t,n,r,a)=>e.where({IN:{columns:a,values:t.map((e=>r.map((t=>e[t]))))},OR:n?internal.toArray(n):void 0}),nestedInsert$1=({query:e,primaryKeys:t,foreignKeys:n})=>{const r=t.length;return async(a,o)=>{const s=e.clone(),i=[];for(const e of o)e[1].connect&&i.push(e);if(i.length){for(let e=0,r=i.length;e<r;e++){const[a,{connect:o}]=i[e],l={};for(let e=0;e<r;e++)l[n[e]]=a[t[e]];i[e]=internal._queryUpdateOrThrow(s.where({OR:o}),l)}await Promise.all(i)}i.length=0;for(const e of o)e[1].connectOrCreate&&i.push(e);let l;if(i.length){const e=[];for(let r=0,a=i.length;r<a;r++){const[o,{connectOrCreate:l}]=i[r];for(const r of l){const i={};for(let e=0;e<a;e++)i[n[e]]=o[t[e]];e.push(internal._queryUpdate(s.where(r.where),i))}}l=await Promise.all(e)}else l=[];let c=0;i.length=0;for(const e of o)if(e[1].connectOrCreate){const t=e[1].connectOrCreate.length;c+=t;for(let n=t;n>0;n--)if(0===l[c-n]){i.push(e);break}}else e[1].create&&i.push(e);if(c=0,i.length){const e=[];for(const[a,{create:o,connectOrCreate:s}]of i){const i={};for(let e=0;e<r;e++)i[n[e]]=a[t[e]];if(o)for(const t of o)e.push({...t,...i});if(s)for(const t of s)0===l[c++]&&e.push({...t.create,...i})}await internal._queryCreateMany(s,e)}}},nestedUpdate$1=({query:e,primaryKeys:t,foreignKeys:n})=>{const r=t.length;return async(a,o,s)=>{const i=e.clone();if(s.create){const e={};for(let a=0;a<r;a++)e[n[a]]=o[0][t[a]];await i.insertMany(s.create.map((t=>({...t,...e}))))}if(s.add){if(o.length>1)throw new pqb.OrchidOrmInternalError(e,"`connect` is not available when updating multiple records, it is only applicable for a single record update");const a={};for(let e=0;e<r;e++)a[n[e]]=o[0][t[e]];const l=internal.toArray(s.add),c=await internal._queryUpdate(i.where({OR:l}),a);if(c<l.length)throw new pqb.OrchidOrmInternalError(e,`Expected to find at least ${l.length} record(s) based on \`add\` conditions, but found ${c}`)}if(s.disconnect||s.set){const e={};for(const t of n)e[t]=null;const a=s.set&&(Array.isArray(s.set)?s.set.length:internal.objectHasValues(s.set))&&(Array.isArray(s.set)?{OR:s.set}:s.set);let l=getWhereForNestedUpdate(i,o,s.disconnect,t,n);if(a&&(l=l.whereNot(a)),await internal._queryUpdate(l,e),a){const e={};for(let a=0;a<r;a++)e[n[a]]=o[0][t[a]];await internal._queryUpdate(i.where(a),e)}}if(s.delete||s.update){const e=getWhereForNestedUpdate(i,o,s.delete||s.update?.where,t,n);s.delete?await internal._queryDelete(e):s.update&&await internal._queryUpdate(e,s.update.data)}}};class HasAndBelongsToManyVirtualColumn extends internal.VirtualColumn{constructor(e,t,n,r){super(t),this.joinTable=e,this.key=n,this.state=r,this.nestedInsert=nestedInsert(r),this.nestedUpdate=nestedUpdate(r)}create(e,t,n,r){hasRelationHandleCreate(e,t,n,r,this.key,this.state.primaryKeys,this.nestedInsert)}update(e,t){hasRelationHandleUpdate(e,t,this.key,this.state.primaryKeys,this.nestedUpdate)}}const removeColumnName=e=>{if(!e.data.name)return e;const t=Object.create(e);return t.data={...e.data,name:void 0},t},makeHasAndBelongsToManyMethod=(e,t,n,r,a,o,s)=>{const{options:i}=r,{snakeCase:l}=t.internal,c=i.columns,u=i.references,h=l?[...u]:u,y=i.through.table,p=i.through.columns,f=l?[...p]:p,d=i.through.references,{on:m}=i;m&&(internal._queryWhere(o,[m]),internal._queryDefaults(o,m));const g=u.map(((e,t)=>(l&&(e=u[t]=internal.toSnakeCase(e)),`${y}.${e}`))),q=p.map(((e,t)=>(l&&(e=p[t]=internal.toSnakeCase(e)),`${y}.${e}`))),C=internal.getQueryAs(o),w=d.map((e=>`${C}.${e}`)),b=c.length,_=d.length,S=Object.create(n.baseQuery);S.baseQuery=S,S.table=y;const O={},T={};for(let e=0;e<b;e++){const n=c[e];O[u[e]]=removeColumnName(t.shape[n]),T[n]=t.shape[n]}for(let e=0;e<_;e++)O[p[e]]=removeColumnName(o.shape[d[e]]);S.shape=O,S.q={...S.q,schema:i.through.schema||s,shape:S.shape};const K=Object.create(S);addAutoForeignKey(e,K,t,c,u,r.options,h),addAutoForeignKey(e,K,o,d,p,r.options.through,f);const Q={relatedTableQuery:o,joinTableQuery:K,primaryKeys:c,foreignKeys:u,throughForeignKeys:p,throughPrimaryKeys:d,foreignKeysFull:g,throughForeignKeysFull:q,throughPrimaryKeysFull:w,primaryKeysShape:T,on:m},A=(e,t,n,r)=>{const a=e.clone();return a.q.joinedShapes=r,internal._queryWhereExists(a,K,[e=>{for(let t=0;t<_;t++)internal._queryJoinOn(e,[q[t],`${n}.${d[t]}`]);for(let n=0;n<b;n++)internal._queryJoinOn(e,[g[n],`${t}.${c[n]}`]);return e}])},F={};for(let e=0;e<b;e++)F[u[e]]=c[e];const R=[{selectAs:F}],$=(e,t)=>{const n=internal.getQueryAs(t);return A(e,internal.getQueryAs(e),n,{...e.q.joinedShapes,[n]:t.q.shape})};return{returns:"many",queryRelated(e){const t=o.whereExists(K,(t=>{t=t.clone();const n={};for(let t=0;t<b;t++)n[g[t]]=e[c[t]];for(let e=0;e<_;e++)internal._queryJoinOn(t,[q[e],w[e]]);return internal._queryWhere(t,[n])}));return m?internal._queryDefaults(t,m):t},virtualColumn:new HasAndBelongsToManyVirtualColumn(K,internal.defaultSchemaConfig,a,Q),joinQuery:joinQueryChainHOF(internal.getPrimaryKeys(o),$,((e,t)=>A(e,internal.getQueryAs(t),internal.getQueryAs(e),{...e.q.joinedShapes,[t.q.as||t.table]:t.q.shape}))),reverseJoin:$,modifyRelatedQuery(e){const t={};return internal._queryHookAfterCreate(e,[],(async e=>{const n=t.q.clone();n.q.select=R;const r=e.map((e=>{const t={};for(let n=0;n<_;n++)t[p[n]]=e[d[n]];return t}));if(0===await internal._queryCreateManyFrom(K.count(),n,r))throw new pqb.NotFoundError(n)})),e=>{t.q=e}}}},queryJoinTable=(e,t,n)=>{const r=e.joinTableQuery.where({IN:{columns:e.foreignKeys,values:t.map((t=>e.primaryKeys.map((e=>t[e]))))}});return n&&internal._queryWhere(r,[{IN:{columns:e.throughForeignKeys,values:internal._querySelect(e.relatedTableQuery.where(conditionsToWhereArg(n)),e.throughPrimaryKeys)}}]),e.on&&internal._queryWhereExists(r,e.relatedTableQuery,[t=>{for(let n=0;n<e.throughPrimaryKeys.length;n++)internal._queryJoinOn(t,[e.throughPrimaryKeysFull[n],e.throughForeignKeysFull[n]]);return t}]),r},conditionsToWhereArg=e=>Array.isArray(e)?{OR:e}:e,insertToJoinTable=(e,t,n,r)=>{const a=e.primaryKeys.length,o=e.throughPrimaryKeys.length,s=[];for(const t of n){const n={};for(let r=0;r<a;r++)n[e.foreignKeys[r]]=t[e.primaryKeys[r]];for(const t of r){const r={...n};for(let n=0;n<o;n++)r[e.throughForeignKeys[n]]=t[n];s.push(r)}}return t.insertMany(s)},nestedInsert=({relatedTableQuery:e,joinTableQuery:t,primaryKeys:n,foreignKeys:r,throughPrimaryKeys:a,throughForeignKeys:o})=>{const s=n.length,i=n.length;return async(l,c)=>{const u=e.clone(),h=[];for(const e of c)e[1].connect&&h.push(e);let y,p;if(h.length){const e=[];for(const[,{connect:t}]of h)for(const n of t)e.push(internal._queryFindBy(u.select(...a),n));y=await Promise.all(e)}else y=[];h.length=0;for(const e of c)e[1].connectOrCreate&&h.push(e);if(h.length){const e=[];for(const[,{connectOrCreate:t}]of h)for(const n of t)e.push(internal._queryFindByOptional(u.select(...a),n.where));p=await Promise.all(e)}else p=[];let f,d=0;h.length=0;for(const e of c)if(e[1].connectOrCreate){const t=e[1].connectOrCreate.length;d+=t;for(let n=t;n>0;n--)if(!p[d-n]){h.push(e);break}}else e[1].create&&h.push(e);if(d=0,h.length){const e=[];for(const[,{create:t,connectOrCreate:n}]of h)if(t&&e.push(...t),n)for(const t of n)p[d++]||e.push(t.create);f=await internal._queryCreateMany(u.select(...a),e)}else f=[];const m=c;let g=0,q=0;d=0;for(let e=0,t=c.length;e<t;e++){const t=c[e][1];if(t.create||t.connectOrCreate){if(t.create){const n=t.create.length;m[e][1]=f.slice(g,g+n),g+=n}if(t.connectOrCreate){const n=[];m[e][1]=n;const r=t.connectOrCreate.length;for(let e=0;e<r;e++){const e=p[d++];e?n.push(e):n.push(f[g++])}}}if(t.connect){const n=t.connect.length;m[e][1]=y.slice(q,q+n),q+=n}}const C=[];for(const[e,t]of m){const l={};for(let t=0;t<s;t++)l[r[t]]=e[n[t]];for(const e of t){const t={...l};for(let n=0;n<i;n++)t[o[n]]=e[a[n]];C.push(t)}}await t.insertMany(C)}},nestedUpdate=e=>{const t=e.primaryKeys.length,n=e.throughPrimaryKeys.length;return async(r,a,o)=>{if(o.create){const r=await internal._queryCreateMany(internal._queryRows(e.relatedTableQuery.select(...e.throughPrimaryKeys)),o.create),s=[];for(const o of a){const a={};for(let n=0;n<t;n++)a[e.foreignKeys[n]]=o[e.primaryKeys[n]];for(const t of r){const r={...a};for(let a=0;a<n;a++)r[e.throughForeignKeys[a]]=t[a];s.push(r)}}await e.joinTableQuery.createMany(s)}if(o.update&&await internal._queryUpdate(internal._queryWhere(e.relatedTableQuery.whereExists(e.joinTableQuery,(t=>{for(let r=0;r<n;r++)internal._queryJoinOn(t,[e.throughForeignKeysFull[r],e.throughPrimaryKeysFull[r]]);return internal._queryWhere(t,[{IN:{columns:e.foreignKeysFull,values:a.map((t=>e.primaryKeys.map((e=>t[e]))))}}])})),[conditionsToWhereArg(o.update.where)]),o.update.data),o.add){const t=r.table,n=internal.toArray(o.add),s=[...e.foreignKeys,...e.throughForeignKeys];try{const o=await e.joinTableQuery.insertForEachFrom(internal._querySelect(e.relatedTableQuery.whereOneOf(...n),[Object.fromEntries([...e.primaryKeys.map(((n,r)=>[e.foreignKeys[r],t+"."+(e.primaryKeysShape[n].data.name||n)])),...e.throughForeignKeys.map(((t,n)=>[t,e.throughPrimaryKeys[n]]))])]).joinData(t,(()=>Object.fromEntries(e.primaryKeys.map((t=>[t,e.primaryKeysShape[t]])))),a.map((t=>internal.pick(t,e.primaryKeys))))).onConflict(s).merge([e.foreignKeys[0]]);if(o<a.length*n.length)throw new pqb.OrchidOrmInternalError(r,`Expected to find at least ${n.length} record(s) based on \`add\` conditions, but found ${o/a.length}`)}catch(t){if("42P10"===t.code)throw new pqb.OrchidOrmInternalError(r,`"${e.joinTableQuery.table}" must have a primary key or a unique index on columns (${s.join(", ")}) for this kind of query.`);throw t}}if(o.disconnect&&await internal._queryDelete(queryJoinTable(e,a,o.disconnect)),o.delete){const t=queryJoinTable(e,a,o.delete),n=await internal._queryDelete(internal._queryRows(internal._querySelect(t,e.throughForeignKeys)));await internal._queryDelete(e.relatedTableQuery.where({IN:{columns:e.throughPrimaryKeys,values:n}}))}if(o.set){const t=queryJoinTable(e,a);if(await internal._queryDelete(t),Array.isArray(o.set)?o.set.length:internal.objectHasValues(o.set)){const n=await internal._queryRows(internal._querySelect(e.relatedTableQuery.where(conditionsToWhereArg(o.set)),e.throughPrimaryKeys));await insertToJoinTable(e,t,a,n)}}}},applyRelations=(e,t,n,r)=>{const a=Object.entries(t),o=new Map;for(const s in t){const i=t[s];if(!("relations"in i)||"object"!=typeof i.relations)continue;const l=n[s];for(const t in i.relations){const s=i.relations[t],c=s.fn(),u=a.find((e=>e[1]instanceof c));if(!u)throw new Error(`Cannot find table class for class ${c.name}`);const h=u[0],y=n[h];if(!y)throw new Error(`Cannot find table class by name ${h}`);const p={relationName:t,relation:s,dbTable:l,otherDbTable:y},f=s.options;if("string"==typeof f.through&&"string"==typeof f.source){const e=getThroughRelation(l,f.through);if(!e){delayRelation(o,l,f.through,p);continue}if(!getSourceRelation(e,f.source)){delayRelation(o,e.table,f.source,p);continue}}applyRelation(i,e,p,o,r)}}if(o.size){const{value:e}=o.values().next();for(const t in e)for(const r of e[t]){const{relation:e}=r;if(r.dbTable.relations[r.relationName])continue;const t=r.dbTable.definedAs;let a=`Cannot define a \`${r.relationName}\` relation on \`${t}\``;const o=n[t],{through:s,source:i}=e.options,l=o.relations[s];throw s&&!l?a+=`: cannot find \`${s}\` relation required by the \`through\` option`:i&&l&&!l.table.relations[i]&&(a+=`: cannot find \`${i}\` relation in \`${l.table.definedAs}\` required by the \`source\` option`),new Error(a)}}},delayRelation=(e,t,n,r)=>{let a=e.get(t);a||(a={},e.set(t,a)),a[n]?a[n].push(r):a[n]=[r]},applyRelation=(e,t,{relationName:n,relation:r,dbTable:a,otherDbTable:o},s,i)=>{const l=Object.create(o);l.baseQuery=l;const c=l.as(n);if(!c.definedAs)throw new Error(`Table class for table ${c.table} is not attached to db instance`);const{type:u}=r;let h;if("belongsTo"===u)h=makeBelongsToMethod(e,a,r,n,c);else if("hasOne"===u)h=makeHasOneMethod(e,a,r,n,c);else if("hasMany"===u)h=makeHasManyMethod(e,a,r,n,c);else{if("hasAndBelongsToMany"!==u)throw new Error(`Unknown relation type ${u}`);h=makeHasAndBelongsToManyMethod(e,a,t,r,n,c,i)}"one"===h.returns&&(r.options.required?internal._queryTake(c):internal._queryTakeOptional(c),c.q.returnsOne=!0),h.virtualColumn&&(a.shape[n]=a.q.shape[n]=h.virtualColumn),l.joinQuery=h.joinQuery;const{join:y}=l;l.join=function(...e){if(e.length)return y.apply(this,e);{const e=this.clone();return e.q.innerJoinLateral=!0,e}},a.relations[n]={table:o,query:c,queryRelated:h.queryRelated,joinQuery:h.joinQuery,reverseJoin:h.reverseJoin,modifyRelatedQuery:h.modifyRelatedQuery},(a.relationQueries??(a.relationQueries={}))[n]=c;const p=s.get(a);p&&p[n]?.forEach((n=>{applyRelation(e,t,n,s,i)}))};function transaction(e,t){return this.$qb.transaction(e,t)}function ensureTransaction(e){return this.$qb.ensureTransaction(e)}function isInTransaction(){return this.$qb.isInTransaction()}function afterCommit(e){this.$qb.afterCommit(e)}const orchidORMWithAdapter=({log:e,logger:t,autoPreparedStatements:n,noPrimaryKey:r="error",schema:a,...o},s)=>{const i={log:e,logger:t,autoPreparedStatements:n,noPrimaryKey:r};let l,c,u;"db"in o?(l=o.db.q.adapter,c=o.db.internal.asyncStorage,u=o.db.qb):(l=o.adapter,c=new node_async_hooks.AsyncLocalStorage,u=internal._initQueryBuilder(l,internal.makeColumnTypes(internal.defaultSchemaConfig),c,i,o));const h={$transaction:transaction,$ensureTransaction:ensureTransaction,$isInTransaction:isInTransaction,$afterCommit:afterCommit,$adapterNotInTransaction:l,$getAdapter:$getAdapter,$qb:u,get $query(){return u.query},$queryArrays:(...e)=>u.queryArrays(...e),$with:u.with.bind(u),$withRecursive:u.withRecursive.bind(u),$withSql:u.withSql.bind(u),$from:u.from.bind(u),$close:l.close.bind(l),$withOptions:u.withOptions.bind(u)},y={};for(const e in s){if("$"===e[0])throw new Error("Table class name must not start with $");const t=s[e],n=t.instance();y[e]=n;const r={...i,schema:n.schema||a,language:n.language,scopes:n.scopes,softDelete:n.softDelete,snakeCase:n.snakeCase,comment:n.comment,noPrimaryKey:n.noPrimaryKey?"ignore":void 0,computed:n.computed,nowSQL:t.nowSQL},o=new pqb.Db(l,u,n.table,n.columns.shape,n.types,c,r,n.constructor.prototype.columns?.data??{});o.definedAs=e,o.db=h,o.filePath=n.filePath,o.name=n.constructor.name,h[e]=o}applyRelations(u,y,h,a);for(const e in s){const t=y[e];t.init&&(t.init(h),Object.assign(h[e].baseQuery.q,t.q))}return h};function $getAdapter(){return this.$qb.$getAdapter()}const createRepo=(e,t)=>{const n={...t.queryMethods,...t.queryOneMethods,...t.queryWithWhereMethods,...t.queryOneWithWhereMethods},r=t.methods,a=e=>{const t=Object.create(e.baseQuery);t.baseQuery=t;const a=Object.create(t);a.q=internal.getClonedQueryData(e.q),r&&Object.assign(t.baseQuery,r);for(const e in n){const r=n[e];t.baseQuery[e]=function(...e){return r(this,...e)}}return a},o=a(e);return new Proxy(a,{get:(e,t)=>o[t]})};exports.createBaseTable=createBaseTable,exports.createRepo=createRepo,exports.orchidORMWithAdapter=orchidORMWithAdapter,Object.keys(pqb).forEach((function(e){"default"===e||Object.prototype.hasOwnProperty.call(exports,e)||Object.defineProperty(exports,e,{enumerable:!0,get:function(){return pqb[e]}})}));
//# sourceMappingURL=/sm/4139d52d9b4939d4e01c86e155001b75c8ca7dde58a26a439fb8328c2fbaf693.map