{"version":3,"file":"query.cjs","names":["entityKind","QueryPromise"],"sources":["../../../src/singlestore-core/query-builders/query.ts"],"sourcesContent":["import { entityKind } from '~/entity.ts';\nimport { QueryPromise } from '~/query-promise.ts';\nimport type {\n\tBuildQueryResult,\n\tBuildRelationalQueryResult,\n\tDBQueryConfig,\n\tTableRelationalConfig,\n\tTablesRelationalConfig,\n} from '~/relations.ts';\nimport type { Query, SQL } from '~/sql/sql.ts';\nimport type { KnownKeysOnly } from '~/utils.ts';\nimport type { SingleStoreDialect } from '../dialect.ts';\nimport type {\n\tPreparedQueryHKTBase,\n\tPreparedQueryKind,\n\tSingleStorePreparedQueryConfig,\n\tSingleStoreSession,\n} from '../session.ts';\nimport type { SingleStoreTable } from '../table.ts';\nimport type { SingleStoreView } from '../view.ts';\n\nexport class RelationalQueryBuilder<\n\tTPreparedQueryHKT extends PreparedQueryHKTBase,\n\tTSchema extends TablesRelationalConfig,\n\tTFields extends TableRelationalConfig,\n> {\n\tstatic readonly [entityKind]: string = 'SingleStoreRelationalQueryBuilderV2';\n\n\tconstructor(\n\t\tprivate schema: TSchema,\n\t\tprivate table: SingleStoreTable | SingleStoreView,\n\t\tprivate tableConfig: TableRelationalConfig,\n\t\tprivate dialect: SingleStoreDialect,\n\t\tprivate session: SingleStoreSession,\n\t) {}\n\n\tfindMany<TConfig extends DBQueryConfig<'many', TSchema, TFields>>(\n\t\tconfig?: KnownKeysOnly<TConfig, DBQueryConfig<'many', TSchema, TFields>>,\n\t): SingleStoreRelationalQuery<TPreparedQueryHKT, BuildQueryResult<TSchema, TFields, TConfig>[]> {\n\t\treturn new SingleStoreRelationalQuery(\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);\n\t}\n\n\tfindFirst<TSelection extends DBQueryConfig<'one', TSchema, TFields>>(\n\t\tconfig?: KnownKeysOnly<TSelection, DBQueryConfig<'one', TSchema, TFields>>,\n\t): SingleStoreRelationalQuery<TPreparedQueryHKT, BuildQueryResult<TSchema, TFields, TSelection> | undefined> {\n\t\treturn new SingleStoreRelationalQuery(\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);\n\t}\n}\n\nexport class SingleStoreRelationalQuery<\n\tTPreparedQueryHKT extends PreparedQueryHKTBase,\n\tTResult,\n> extends QueryPromise<TResult> {\n\tstatic override readonly [entityKind]: string = 'SingleStoreRelationalQueryV2';\n\n\tdeclare protected $brand: 'SingleStoreRelationalQuery';\n\n\tconstructor(\n\t\tprivate schema: TablesRelationalConfig,\n\t\tprivate table: SingleStoreTable | SingleStoreView,\n\t\tprivate tableConfig: TableRelationalConfig,\n\t\tprivate dialect: SingleStoreDialect,\n\t\tprivate session: SingleStoreSession,\n\t\tprivate config: DBQueryConfig<'many' | 'one'> | true,\n\t\tprivate mode: 'many' | 'first',\n\t) {\n\t\tsuper();\n\t}\n\n\tprepare() {\n\t\tconst { query, builtQuery } = this._toSQL();\n\t\treturn this.session.prepareQuery(\n\t\t\tbuiltQuery,\n\t\t\t'objects',\n\t\t\tthis.dialect.mapperGenerators.relationalRows({\n\t\t\t\tisFirst: this.mode === 'first',\n\t\t\t\tparseJson: false,\n\t\t\t\tparseJsonIfString: true,\n\t\t\t\trootJsonMappers: true,\n\t\t\t\tselection: query.selection,\n\t\t\t}),\n\t\t) as PreparedQueryKind<TPreparedQueryHKT, SingleStorePreparedQueryConfig & { execute: TResult }, true>;\n\t}\n\n\tprivate _getQuery() {\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});\n\t}\n\n\tprivate _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 { builtQuery, query };\n\t}\n\n\t/** @internal */\n\tgetSQL(): SQL {\n\t\treturn this._getQuery().sql;\n\t}\n\n\ttoSQL(): Query {\n\t\treturn this._toSQL().builtQuery;\n\t}\n\n\toverride execute(): Promise<TResult> {\n\t\treturn this.prepare().execute();\n\t}\n}\n"],"mappings":";;;;;;AAqBA,IAAa,yBAAb,MAIE;CACD,QAAiBA,0BAAsB;CAEvC,YACC,AAAQ,QACR,AAAQ,OACR,AAAQ,aACR,AAAQ,SACR,AAAQ,SACP;EALO;EACA;EACA;EACA;EACA;;CAGT,SACC,QAC+F;AAC/F,SAAO,IAAI,2BACV,KAAK,QACL,KAAK,OACL,KAAK,aACL,KAAK,SACL,KAAK,SACL,UAA+C,MAC/C,OACA;;CAGF,UACC,QAC4G;AAC5G,SAAO,IAAI,2BACV,KAAK,QACL,KAAK,OACL,KAAK,aACL,KAAK,SACL,KAAK,SACL,UAA8C,MAC9C,QACA;;;AAIH,IAAa,6BAAb,cAGUC,gCAAsB;CAC/B,QAA0BD,0BAAsB;CAIhD,YACC,AAAQ,QACR,AAAQ,OACR,AAAQ,aACR,AAAQ,SACR,AAAQ,SACR,AAAQ,QACR,AAAQ,MACP;AACD,SAAO;EARC;EACA;EACA;EACA;EACA;EACA;EACA;;CAKT,UAAU;EACT,MAAM,EAAE,OAAO,eAAe,KAAK,QAAQ;AAC3C,SAAO,KAAK,QAAQ,aACnB,YACA,WACA,KAAK,QAAQ,iBAAiB,eAAe;GAC5C,SAAS,KAAK,SAAS;GACvB,WAAW;GACX,mBAAmB;GACnB,iBAAiB;GACjB,WAAW,MAAM;GACjB,CAAC,CACF;;CAGF,AAAQ,YAAY;AACnB,SAAO,KAAK,QAAQ,qBAAqB;GACxC,QAAQ,KAAK;GACb,OAAO,KAAK;GACZ,aAAa,KAAK;GAClB,aAAa,KAAK;GAClB,MAAM,KAAK;GACX,CAAC;;CAGH,AAAQ,SAAmE;EAC1E,MAAM,QAAQ,KAAK,WAAW;AAI9B,SAAO;GAAE,YAFU,KAAK,QAAQ,WAAW,MAAM,IAAI;GAEhC;GAAO;;;CAI7B,SAAc;AACb,SAAO,KAAK,WAAW,CAAC;;CAGzB,QAAe;AACd,SAAO,KAAK,QAAQ,CAAC;;CAGtB,AAAS,UAA4B;AACpC,SAAO,KAAK,SAAS,CAAC,SAAS"}