{"version":3,"file":"select.cjs","names":["SQLiteSelectBase","entityKind"],"sources":["../../../src/sqlite-core/effect/select.ts"],"sourcesContent":["import { applyEffectWrapper, type QueryEffectHKTBase, type QueryEffectKind } from '~/effect-core/query-effect.ts';\nimport { entityKind } from '~/entity.ts';\nimport type {\n\tBuildSubquerySelection,\n\tJoinNullability,\n\tSelectMode,\n\tSelectResult,\n} from '~/query-builders/select.types.ts';\nimport type { ColumnsSelection } from '~/sql/sql.ts';\nimport { SQLiteSelectBase, type SQLiteSelectBuilder } from '~/sqlite-core/query-builders/select.ts';\nimport type { SelectedFields, SQLiteSelectHKTBase } from '~/sqlite-core/query-builders/select.types.ts';\nimport type { PreparedQueryConfig } from '~/sqlite-core/session.ts';\nimport { type Assume, resolveNullableObjectPaths } from '~/utils.ts';\nimport type { SQLiteEffectPreparedQuery, SQLiteEffectSession } from './session.ts';\n\nexport type SQLiteEffectSelectExecute<T extends AnySQLiteEffectSelect> = T['_']['result'];\n\nexport type SQLiteEffectSelectPrepare<\n\tT extends AnySQLiteEffectSelect,\n\tTEffectHKT extends QueryEffectHKTBase = QueryEffectHKTBase,\n> = SQLiteEffectPreparedQuery<\n\tPreparedQueryConfig & {\n\t\trun: T['_']['runResult'];\n\t\tall: T['_']['result'];\n\t\tget: T['_']['result'][number] | undefined;\n\t\tvalues: any[][];\n\t\texecute: SQLiteEffectSelectExecute<T>;\n\t},\n\tTEffectHKT\n>;\n\nexport type SQLiteEffectSelectBuilder<\n\tTSelection extends SelectedFields | undefined,\n\tTRunResult,\n\tTEffectHKT extends QueryEffectHKTBase = QueryEffectHKTBase,\n> = SQLiteSelectBuilder<TSelection, TRunResult, SQLiteEffectSelectHKT<TEffectHKT>>;\n\nexport type SQLiteEffectSelect<\n\tTTableName extends string | undefined = string | undefined,\n\tTRunResult = unknown,\n\tTSelection extends ColumnsSelection = Record<string, any>,\n\tTSelectMode extends SelectMode = SelectMode,\n\tTNullabilityMap extends Record<string, JoinNullability> = Record<string, JoinNullability>,\n> = SQLiteEffectSelectBase<TTableName, TRunResult, TSelection, TSelectMode, TNullabilityMap, true, never>;\n\nexport interface SQLiteEffectSelectHKT<TEffectHKT extends QueryEffectHKTBase = QueryEffectHKTBase>\n\textends SQLiteSelectHKTBase\n{\n\t_type: SQLiteEffectSelectBase<\n\t\tthis['tableName'],\n\t\tthis['runResult'],\n\t\tAssume<this['selection'], ColumnsSelection>,\n\t\tthis['selectMode'],\n\t\tAssume<this['nullabilityMap'], Record<string, JoinNullability>>,\n\t\tthis['dynamic'],\n\t\tthis['excludedMethods'],\n\t\tAssume<this['result'], any[]>,\n\t\tAssume<this['selectedFields'], ColumnsSelection>,\n\t\tTEffectHKT\n\t>;\n}\n\nexport interface SQLiteEffectSelectBase<\n\tTTableName extends string | undefined,\n\t// oxlint-disable-next-line no-unused-vars\n\tTRunResult,\n\tTSelection extends ColumnsSelection,\n\tTSelectMode extends SelectMode = 'single',\n\tTNullabilityMap extends Record<string, JoinNullability> = TTableName extends string ? Record<TTableName, 'not-null'>\n\t\t: {},\n\t// oxlint-disable-next-line no-unused-vars\n\tTDynamic extends boolean = false,\n\t// oxlint-disable-next-line no-unused-vars\n\tTExcludedMethods extends string = never,\n\tTResult extends any[] = SelectResult<TSelection, TSelectMode, TNullabilityMap>[],\n\t// oxlint-disable-next-line no-unused-vars\n\tTSelectedFields extends ColumnsSelection = BuildSubquerySelection<TSelection, TNullabilityMap>,\n\tTEffectHKT extends QueryEffectHKTBase = QueryEffectHKTBase,\n> extends QueryEffectKind<TEffectHKT, TResult> {}\n\nexport class SQLiteEffectSelectBase<\n\tTTableName extends string | undefined,\n\tTRunResult,\n\tTSelection,\n\tTSelectMode extends SelectMode = 'single',\n\tTNullabilityMap extends Record<string, JoinNullability> = TTableName extends string ? Record<TTableName, 'not-null'>\n\t\t: {},\n\tTDynamic extends boolean = false,\n\tTExcludedMethods extends string = never,\n\tTResult = SelectResult<TSelection, TSelectMode, TNullabilityMap>[],\n\tTSelectedFields extends ColumnsSelection = BuildSubquerySelection<TSelection, TNullabilityMap>,\n\tTEffectHKT extends QueryEffectHKTBase = QueryEffectHKTBase,\n> extends SQLiteSelectBase<\n\tSQLiteEffectSelectHKT<TEffectHKT>,\n\tTTableName,\n\tTRunResult,\n\tTSelection,\n\tTSelectMode,\n\tTNullabilityMap,\n\tTDynamic,\n\tTExcludedMethods,\n\tTResult,\n\tTSelectedFields\n> {\n\tstatic override readonly [entityKind]: string = 'SQLiteEffectSelect';\n\n\tdeclare protected session: SQLiteEffectSession<TRunResult, TEffectHKT, any>;\n\n\t/** @internal */\n\t_prepare(prepare = false): SQLiteEffectSelectPrepare<this, TEffectHKT> {\n\t\t// Build query before accessing `fieldsFlat` - build mutates it\n\t\tconst query = this.dialect.sqlToQuery(this.getSQL());\n\t\tconst fieldsList = this.config.fieldsFlat!;\n\t\tconst mapper = this.dialect.mapperGenerators.rows(\n\t\t\tfieldsList,\n\t\t\tresolveNullableObjectPaths(fieldsList, this.joinsNotNullableMap),\n\t\t);\n\n\t\tconst preparedQuery = this.session.prepareQuery(\n\t\t\tquery,\n\t\t\t'arrays',\n\t\t\tprepare,\n\t\t\t'all',\n\t\t\tmapper,\n\t\t\t{\n\t\t\t\ttype: 'select',\n\t\t\t\ttables: [...this.usedTables],\n\t\t\t},\n\t\t\tthis.cacheConfig,\n\t\t);\n\t\treturn preparedQuery as ReturnType<this['prepare']>;\n\t}\n\n\tprepare(): SQLiteEffectSelectPrepare<this, TEffectHKT> {\n\t\treturn this._prepare(true);\n\t}\n\n\trun: ReturnType<this['prepare']>['run'] = (placeholderValues?: Record<string, unknown>) => {\n\t\treturn this._prepare().run(placeholderValues);\n\t};\n\n\tall: ReturnType<this['prepare']>['all'] = (placeholderValues?: Record<string, unknown>) => {\n\t\treturn this._prepare().all(placeholderValues);\n\t};\n\n\tget: ReturnType<this['prepare']>['get'] = (placeholderValues?: Record<string, unknown>) => {\n\t\treturn this._prepare().get(placeholderValues);\n\t};\n\n\tvalues: ReturnType<this['prepare']>['values'] = (placeholderValues?: Record<string, unknown>) => {\n\t\treturn this._prepare().values(placeholderValues);\n\t};\n\n\texecute: ReturnType<this['prepare']>['execute'] = (placeholderValues?: Record<string, unknown>) => {\n\t\treturn this._prepare().execute(placeholderValues);\n\t};\n}\n\napplyEffectWrapper(SQLiteEffectSelectBase);\n\nexport type AnySQLiteEffectSelect = SQLiteEffectSelectBase<any, any, any, any, any, any, any, any, any, any>;\n"],"mappings":";;;;;;;;AAgFA,IAAa,yBAAb,cAYUA,wDAWR;CACD,QAA0BC,0BAAsB;;CAKhD,SAAS,UAAU,OAAoD;EAEtE,MAAM,QAAQ,KAAK,QAAQ,WAAW,KAAK,QAAQ,CAAC;EACpD,MAAM,aAAa,KAAK,OAAO;EAC/B,MAAM,SAAS,KAAK,QAAQ,iBAAiB,KAC5C,uDAC2B,YAAY,KAAK,oBAAoB,CAChE;AAcD,SAZsB,KAAK,QAAQ,aAClC,OACA,UACA,SACA,OACA,QACA;GACC,MAAM;GACN,QAAQ,CAAC,GAAG,KAAK,WAAW;GAC5B,EACD,KAAK,YACL;;CAIF,UAAuD;AACtD,SAAO,KAAK,SAAS,KAAK;;CAG3B,OAA2C,sBAAgD;AAC1F,SAAO,KAAK,UAAU,CAAC,IAAI,kBAAkB;;CAG9C,OAA2C,sBAAgD;AAC1F,SAAO,KAAK,UAAU,CAAC,IAAI,kBAAkB;;CAG9C,OAA2C,sBAAgD;AAC1F,SAAO,KAAK,UAAU,CAAC,IAAI,kBAAkB;;CAG9C,UAAiD,sBAAgD;AAChG,SAAO,KAAK,UAAU,CAAC,OAAO,kBAAkB;;CAGjD,WAAmD,sBAAgD;AAClG,SAAO,KAAK,UAAU,CAAC,QAAQ,kBAAkB;;;sDAIhC,uBAAuB"}