{"version":3,"file":"query.cjs","names":["entityKind"],"sources":["../../../src/sqlite-core/query-builders/query.ts"],"sourcesContent":["import { entityKind } from '~/entity.ts';\nimport type {\n\tBuildQueryResult,\n\tBuildRelationalQueryResult,\n\tDBQueryConfig,\n\tTableRelationalConfig,\n\tTablesRelationalConfig,\n} from '~/relations.ts';\nimport { type Query, type SQL, sql, type SQLWrapper } from '~/sql/sql.ts';\nimport type { KnownKeysOnly } from '~/utils.ts';\nimport type { SQLiteDialect } from '../dialect.ts';\nimport type { SQLiteSession } from '../session.ts';\nimport type { SQLiteTable } from '../table.ts';\n\nexport interface SQLiteRelationalQueryHKTBase {\n\ttype: unknown;\n\tresult: unknown;\n\t_type: unknown;\n}\n\nexport interface SQLiteRelationalQueryHKT extends SQLiteRelationalQueryHKTBase {\n\t_type: SQLiteRelationalQuery<SQLiteRelationalQueryHKT, this['result']>;\n}\n\nexport type SQLiteRelationalQueryKind<\n\tT extends SQLiteRelationalQueryHKTBase,\n\tTType,\n\tTResult,\n> = (T & {\n\ttype: TType;\n\tresult: TResult;\n})['_type'];\n\nexport interface SQLiteRelationalQueryConstructor {\n\tnew(\n\t\tmode: unknown,\n\t\tschema: TablesRelationalConfig,\n\t\ttable: SQLiteTable,\n\t\ttableConfig: TableRelationalConfig,\n\t\tdialect: SQLiteDialect,\n\t\tsession: SQLiteSession<any, any>,\n\t\tconfig: DBQueryConfig<'many' | 'one'> | true,\n\t\tqueryMode: 'many' | 'first',\n\t\tforbidJsonb: boolean | undefined,\n\t): AnySQLiteRelationalQuery;\n}\n\nexport type AnySQLiteRelationalQuery = SQLiteRelationalQuery<any, any>;\n\nexport class RelationalQueryBuilder<\n\tTMode,\n\tTSchema extends TablesRelationalConfig,\n\tTFields extends TableRelationalConfig,\n\tTBuilderHKT extends SQLiteRelationalQueryHKTBase = SQLiteRelationalQueryHKT,\n> {\n\tstatic readonly [entityKind]: string = 'SQLiteRelationalQueryBuilderV2';\n\n\tconstructor(\n\t\tprivate mode: TMode,\n\t\tprivate schema: TSchema,\n\t\tprivate table: SQLiteTable,\n\t\tprivate tableConfig: TableRelationalConfig,\n\t\tprivate dialect: SQLiteDialect,\n\t\tprivate session: SQLiteSession<any, any>,\n\t\tprivate forbidJsonb: boolean | undefined,\n\t\tprivate builder: SQLiteRelationalQueryConstructor = SQLiteRelationalQuery,\n\t) {}\n\n\tfindMany<TConfig extends DBQueryConfig<'many', TSchema, TFields>>(\n\t\tconfig?: KnownKeysOnly<TConfig, DBQueryConfig<'many', TSchema, TFields>>,\n\t): SQLiteRelationalQueryKind<TBuilderHKT, TMode, BuildQueryResult<TSchema, TFields, TConfig>[]> {\n\t\treturn new this.builder(\n\t\t\tthis.mode,\n\t\t\tthis.schema,\n\t\t\tthis.table,\n\t\t\tthis.tableConfig,\n\t\t\tthis.dialect,\n\t\t\tthis.session,\n\t\t\tconfig as DBQueryConfig<'many'> | undefined ?? true,\n\t\t\t'many',\n\t\t\tthis.forbidJsonb,\n\t\t) as any;\n\t}\n\n\tfindFirst<TConfig extends DBQueryConfig<'one', TSchema, TFields>>(\n\t\tconfig?: KnownKeysOnly<TConfig, DBQueryConfig<'one', TSchema, TFields>>,\n\t): SQLiteRelationalQueryKind<TBuilderHKT, TMode, BuildQueryResult<TSchema, TFields, TConfig> | undefined> {\n\t\treturn new this.builder(\n\t\t\tthis.mode,\n\t\t\tthis.schema,\n\t\t\tthis.table,\n\t\t\tthis.tableConfig,\n\t\t\tthis.dialect,\n\t\t\tthis.session,\n\t\t\tconfig as DBQueryConfig<'one'> | undefined ?? true,\n\t\t\t'first',\n\t\t\tthis.forbidJsonb,\n\t\t) as any;\n\t}\n}\n\nexport class SQLiteRelationalQuery<THKT extends SQLiteRelationalQueryHKTBase, TResult> implements SQLWrapper {\n\tstatic readonly [entityKind]: string = 'SQLiteRelationalQueryV2';\n\n\tdeclare readonly _: {\n\t\treadonly dialect: 'sqlite';\n\t\treadonly hkt: THKT;\n\t\treadonly result: TResult;\n\t};\n\n\t/** @internal */\n\tmode: 'many' | 'first';\n\t/** @internal */\n\ttable: SQLiteTable;\n\t/** @internal */\n\tresultKind: unknown;\n\n\tconstructor(\n\t\tresultKind: unknown,\n\t\tprotected schema: TablesRelationalConfig,\n\t\ttable: SQLiteTable,\n\t\tprotected tableConfig: TableRelationalConfig,\n\t\tprotected dialect: SQLiteDialect,\n\t\tprotected session: SQLiteSession<any, any>,\n\t\tprotected config: DBQueryConfig<'many' | 'one'> | true,\n\t\tmode: 'many' | 'first',\n\t\tprotected forbidJsonb?: boolean,\n\t) {\n\t\tthis.resultKind = resultKind;\n\t\tthis.mode = mode;\n\t\tthis.table = table;\n\t}\n\n\tgetSQL(): SQL {\n\t\treturn this._getQuery().sql;\n\t}\n\n\tprotected _getQuery() {\n\t\tconst jsonb = this.forbidJsonb ? sql`json` : sql`jsonb`;\n\n\t\treturn this.dialect.buildRelationalQuery({\n\t\t\tschema: this.schema,\n\t\t\ttable: this.table,\n\t\t\ttableConfig: this.tableConfig,\n\t\t\tqueryConfig: this.config,\n\t\t\tmode: this.mode,\n\t\t\tjsonb,\n\t\t});\n\t}\n\n\tprotected _toSQL(): { query: BuildRelationalQueryResult; builtQuery: Query } {\n\t\tconst query = this._getQuery();\n\n\t\tconst builtQuery = this.dialect.sqlToQuery(query.sql);\n\n\t\treturn { query, builtQuery };\n\t}\n\n\ttoSQL(): Query {\n\t\treturn this._toSQL().builtQuery;\n\t}\n}\n"],"mappings":";;;;;;AAiDA,IAAa,yBAAb,MAKE;CACD,QAAiBA,0BAAsB;CAEvC,YACC,AAAQ,MACR,AAAQ,QACR,AAAQ,OACR,AAAQ,aACR,AAAQ,SACR,AAAQ,SACR,AAAQ,aACR,AAAQ,UAA4C,uBACnD;EARO;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;CAGT,SACC,QAC+F;AAC/F,SAAO,IAAI,KAAK,QACf,KAAK,MACL,KAAK,QACL,KAAK,OACL,KAAK,aACL,KAAK,SACL,KAAK,SACL,UAA+C,MAC/C,QACA,KAAK,YACL;;CAGF,UACC,QACyG;AACzG,SAAO,IAAI,KAAK,QACf,KAAK,MACL,KAAK,QACL,KAAK,OACL,KAAK,aACL,KAAK,SACL,KAAK,SACL,UAA8C,MAC9C,SACA,KAAK,YACL;;;AAIH,IAAa,wBAAb,MAA6G;CAC5G,QAAiBA,0BAAsB;;CASvC;;CAEA;;CAEA;CAEA,YACC,YACA,AAAU,QACV,OACA,AAAU,aACV,AAAU,SACV,AAAU,SACV,AAAU,QACV,MACA,AAAU,aACT;EARS;EAEA;EACA;EACA;EACA;EAEA;AAEV,OAAK,aAAa;AAClB,OAAK,OAAO;AACZ,OAAK,QAAQ;;CAGd,SAAc;AACb,SAAO,KAAK,WAAW,CAAC;;CAGzB,AAAU,YAAY;EACrB,MAAM,QAAQ,KAAK,cAAc,gBAAG,SAAS,gBAAG;AAEhD,SAAO,KAAK,QAAQ,qBAAqB;GACxC,QAAQ,KAAK;GACb,OAAO,KAAK;GACZ,aAAa,KAAK;GAClB,aAAa,KAAK;GAClB,MAAM,KAAK;GACX;GACA,CAAC;;CAGH,AAAU,SAAmE;EAC5E,MAAM,QAAQ,KAAK,WAAW;AAI9B,SAAO;GAAE;GAAO,YAFG,KAAK,QAAQ,WAAW,MAAM,IAAI;GAEzB;;CAG7B,QAAe;AACd,SAAO,KAAK,QAAQ,CAAC"}