xansql 1.1.22 → 1.1.24

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.
@@ -31,7 +31,6 @@ class Migration {
31
31
  constructor(xansql) {
32
32
  this.xansql = xansql;
33
33
  this.model = xansql.model(MigrationModel);
34
- this.migrate(this.model);
35
34
  }
36
35
  async migrate(model, force) {
37
36
  if (typeof window !== "undefined")
@@ -1 +1 @@
1
- {"version":3,"file":"Migration.cjs","sources":["../../src/core/Migration.ts"],"sourcesContent":["import { xv } from \"xanv\";\nimport Model from \"../model\";\nimport xt from \"../xt\";\nimport Xansql from \"./Xansql\";\nimport { XqlFieldInfoSchema } from \"../xt/XqlFieldInfo\";\nimport XqlRelationMany from \"../xt/fields/RelationMany\";\nimport { iof } from \"../utils\";\nimport XansqlError from \"./XansqlError\";\n\nclass MigrationModel extends Model {\n get table() {\n return \"_xansql_migration\"\n }\n\n schema() {\n return {\n id: xt.id(),\n model: xt.string(),\n schema: xt.record(xt.string(), xt.object({\n type: xt.string(),\n length: xt.number().nullable(),\n default: xv.any(),\n unique: xt.boolean(),\n nullable: xt.boolean(),\n index: xt.string()\n })),\n created_at: xt.date().createdAt(),\n updated_at: xt.date().updatedAt(),\n }\n }\n}\n\n\nclass Migration {\n model\n constructor(private xansql: Xansql) {\n this.model = xansql.model(MigrationModel)\n this.migrate(this.model)\n }\n\n async migrate<M extends Model<any>>(model: M, force?: boolean) {\n if (typeof window !== \"undefined\") return\n\n if (force) {\n try {\n await model.execute(`DROP TABLE IF EXISTS ${model.table}`)\n } catch (error) {\n\n }\n }\n\n const schema = model.schema()\n let column_sqls = []\n let index_sqls = []\n let migrate_schema: { [column: string]: XqlFieldInfoSchema } = {}\n\n for (let column in schema) {\n const field = schema[column]\n if (!iof(field, XqlRelationMany)) {\n const info = field.info\n column_sqls.push(info.sql.column)\n if (info.sql.create_index) {\n index_sqls.push(info.sql.create_index)\n }\n migrate_schema[column] = field.info.schema\n }\n }\n\n const sql = `CREATE TABLE IF NOT EXISTS ${model.table}(${column_sqls.join(\",\")})`\n await model.execute(sql, false)\n for (let idxql of index_sqls) {\n try {\n await model.execute(idxql, false)\n } catch (error) { }\n }\n\n if (model.table === this.model.table) {\n return\n }\n\n const prev_migration = await this.migrateSchema(model)\n if (prev_migration) {\n for (let column in schema) {\n const field = schema[column]\n if (!iof(field, XqlRelationMany)) {\n const info = field.info\n if (column in prev_migration) {\n\n } else {\n // Add column\n await model.execute(info.sql.alter_column, false)\n }\n }\n }\n }\n\n return await this.model.upsert({\n create: {\n model: model.table,\n schema: migrate_schema\n },\n update: {\n schema: migrate_schema\n },\n where: {\n model: model.table\n },\n useTransection: false,\n debug: false\n })\n }\n\n async get(model: Model) {\n return await this.model.findOne({\n where: {\n model: model.table\n },\n debug: false\n })\n }\n\n async migrateSchema(model: Model) {\n const get = await this.get(model)\n if (get) {\n return get.schema\n }\n }\n\n async has(model: Model) {\n return await this.model.count({\n model: model.table,\n })\n }\n}\n\nexport default Migration"],"names":["Model","xt","xv","iof","XqlRelationMany"],"mappings":";;;;;;;;AASA,MAAM,cAAe,SAAQA,OAAK,CAAA;AAC/B,IAAA,IAAI,KAAK,GAAA;AACN,QAAA,OAAO,mBAAmB;IAC7B;IAEA,MAAM,GAAA;QACH,OAAO;AACJ,YAAA,EAAE,EAAEC,OAAE,CAAC,EAAE,EAAE;AACX,YAAA,KAAK,EAAEA,OAAE,CAAC,MAAM,EAAE;AAClB,YAAA,MAAM,EAAEA,OAAE,CAAC,MAAM,CAACA,OAAE,CAAC,MAAM,EAAE,EAAEA,OAAE,CAAC,MAAM,CAAC;AACtC,gBAAA,IAAI,EAAEA,OAAE,CAAC,MAAM,EAAE;AACjB,gBAAA,MAAM,EAAEA,OAAE,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;AAC9B,gBAAA,OAAO,EAAEC,OAAE,CAAC,GAAG,EAAE;AACjB,gBAAA,MAAM,EAAED,OAAE,CAAC,OAAO,EAAE;AACpB,gBAAA,QAAQ,EAAEA,OAAE,CAAC,OAAO,EAAE;AACtB,gBAAA,KAAK,EAAEA,OAAE,CAAC,MAAM;AAClB,aAAA,CAAC,CAAC;AACH,YAAA,UAAU,EAAEA,OAAE,CAAC,IAAI,EAAE,CAAC,SAAS,EAAE;AACjC,YAAA,UAAU,EAAEA,OAAE,CAAC,IAAI,EAAE,CAAC,SAAS,EAAE;SACnC;IACJ;AACF;AAGD,MAAM,SAAS,CAAA;AAEZ,IAAA,WAAA,CAAoB,MAAc,EAAA;QAAd,IAAA,CAAA,MAAM,GAAN,MAAM;QACvB,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,cAAc,CAAC;AACzC,QAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC;IAC3B;AAEA,IAAA,MAAM,OAAO,CAAuB,KAAQ,EAAE,KAAe,EAAA;QAC1D,IAAI,OAAO,MAAM,KAAK,WAAW;YAAE;QAEnC,IAAI,KAAK,EAAE;AACR,YAAA,IAAI;gBACD,MAAM,KAAK,CAAC,OAAO,CAAC,CAAA,qBAAA,EAAwB,KAAK,CAAC,KAAK,CAAA,CAAE,CAAC;YAC7D;YAAE,OAAO,KAAK,EAAE;YAEhB;QACH;AAEA,QAAA,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,EAAE;QAC7B,IAAI,WAAW,GAAG,EAAE;QACpB,IAAI,UAAU,GAAG,EAAE;QACnB,IAAI,cAAc,GAA6C,EAAE;AAEjE,QAAA,KAAK,IAAI,MAAM,IAAI,MAAM,EAAE;AACxB,YAAA,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC;YAC5B,IAAI,CAACE,SAAG,CAAC,KAAK,EAAEC,YAAe,CAAC,EAAE;AAC/B,gBAAA,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI;gBACvB,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC;AACjC,gBAAA,IAAI,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;oBACxB,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC;gBACzC;gBACA,cAAc,CAAC,MAAM,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM;YAC7C;QACH;AAEA,QAAA,MAAM,GAAG,GAAG,CAAA,2BAAA,EAA8B,KAAK,CAAC,KAAK,CAAA,CAAA,EAAI,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG;QACjF,MAAM,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE,KAAK,CAAC;AAC/B,QAAA,KAAK,IAAI,KAAK,IAAI,UAAU,EAAE;AAC3B,YAAA,IAAI;gBACD,MAAM,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC;YACpC;AAAE,YAAA,OAAO,KAAK,EAAE,EAAE;QACrB;QAEA,IAAI,KAAK,CAAC,KAAK,KAAK,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE;YACnC;QACH;QAEA,MAAM,cAAc,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC;QACtD,IAAI,cAAc,EAAE;AACjB,YAAA,KAAK,IAAI,MAAM,IAAI,MAAM,EAAE;AACxB,gBAAA,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC;gBAC5B,IAAI,CAACD,SAAG,CAAC,KAAK,EAAEC,YAAe,CAAC,EAAE;AAC/B,oBAAA,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI;AACvB,oBAAA,IAAI,MAAM,IAAI,cAAc,EAAE;yBAEvB;;AAEJ,wBAAA,MAAM,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,KAAK,CAAC;oBACpD;gBACH;YACH;QACH;AAEA,QAAA,OAAO,MAAM,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC;AAC5B,YAAA,MAAM,EAAE;gBACL,KAAK,EAAE,KAAK,CAAC,KAAK;AAClB,gBAAA,MAAM,EAAE;AACV,aAAA;AACD,YAAA,MAAM,EAAE;AACL,gBAAA,MAAM,EAAE;AACV,aAAA;AACD,YAAA,KAAK,EAAE;gBACJ,KAAK,EAAE,KAAK,CAAC;AACf,aAAA;AACD,YAAA,cAAc,EAAE,KAAK;AACrB,YAAA,KAAK,EAAE;AACT,SAAA,CAAC;IACL;IAEA,MAAM,GAAG,CAAC,KAAY,EAAA;AACnB,QAAA,OAAO,MAAM,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC;AAC7B,YAAA,KAAK,EAAE;gBACJ,KAAK,EAAE,KAAK,CAAC;AACf,aAAA;AACD,YAAA,KAAK,EAAE;AACT,SAAA,CAAC;IACL;IAEA,MAAM,aAAa,CAAC,KAAY,EAAA;QAC7B,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC;QACjC,IAAI,GAAG,EAAE;YACN,OAAO,GAAG,CAAC,MAAM;QACpB;IACH;IAEA,MAAM,GAAG,CAAC,KAAY,EAAA;AACnB,QAAA,OAAO,MAAM,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC;YAC3B,KAAK,EAAE,KAAK,CAAC,KAAK;AACpB,SAAA,CAAC;IACL;AACF;;;;"}
1
+ {"version":3,"file":"Migration.cjs","sources":["../../src/core/Migration.ts"],"sourcesContent":["import { xv } from \"xanv\";\nimport Model from \"../model\";\nimport xt from \"../xt\";\nimport Xansql from \"./Xansql\";\nimport { XqlFieldInfoSchema } from \"../xt/XqlFieldInfo\";\nimport XqlRelationMany from \"../xt/fields/RelationMany\";\nimport { iof } from \"../utils\";\nimport XansqlError from \"./XansqlError\";\n\nclass MigrationModel extends Model {\n get table() {\n return \"_xansql_migration\"\n }\n\n schema() {\n return {\n id: xt.id(),\n model: xt.string(),\n schema: xt.record(xt.string(), xt.object({\n type: xt.string(),\n length: xt.number().nullable(),\n default: xv.any(),\n unique: xt.boolean(),\n nullable: xt.boolean(),\n index: xt.string()\n })),\n created_at: xt.date().createdAt(),\n updated_at: xt.date().updatedAt(),\n }\n }\n}\n\n\nclass Migration {\n model\n constructor(private xansql: Xansql) {\n this.model = xansql.model(MigrationModel)\n }\n\n async migrate<M extends Model<any>>(model: M, force?: boolean) {\n if (typeof window !== \"undefined\") return\n\n if (force) {\n try {\n await model.execute(`DROP TABLE IF EXISTS ${model.table}`)\n } catch (error) {\n\n }\n }\n\n const schema = model.schema()\n let column_sqls = []\n let index_sqls = []\n let migrate_schema: { [column: string]: XqlFieldInfoSchema } = {}\n\n for (let column in schema) {\n const field = schema[column]\n if (!iof(field, XqlRelationMany)) {\n const info = field.info\n column_sqls.push(info.sql.column)\n if (info.sql.create_index) {\n index_sqls.push(info.sql.create_index)\n }\n migrate_schema[column] = field.info.schema\n }\n }\n\n const sql = `CREATE TABLE IF NOT EXISTS ${model.table}(${column_sqls.join(\",\")})`\n await model.execute(sql, false)\n for (let idxql of index_sqls) {\n try {\n await model.execute(idxql, false)\n } catch (error) { }\n }\n\n if (model.table === this.model.table) {\n return\n }\n\n const prev_migration = await this.migrateSchema(model)\n if (prev_migration) {\n for (let column in schema) {\n const field = schema[column]\n if (!iof(field, XqlRelationMany)) {\n const info = field.info\n if (column in prev_migration) {\n\n } else {\n // Add column\n await model.execute(info.sql.alter_column, false)\n }\n }\n }\n }\n\n return await this.model.upsert({\n create: {\n model: model.table,\n schema: migrate_schema\n },\n update: {\n schema: migrate_schema\n },\n where: {\n model: model.table\n },\n useTransection: false,\n debug: false\n })\n }\n\n async get(model: Model) {\n return await this.model.findOne({\n where: {\n model: model.table\n },\n debug: false\n })\n }\n\n async migrateSchema(model: Model) {\n const get = await this.get(model)\n if (get) {\n return get.schema\n }\n }\n\n async has(model: Model) {\n return await this.model.count({\n model: model.table,\n })\n }\n}\n\nexport default Migration"],"names":["Model","xt","xv","iof","XqlRelationMany"],"mappings":"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"}
package/core/Migration.js CHANGED
@@ -29,7 +29,6 @@ class Migration {
29
29
  constructor(xansql) {
30
30
  this.xansql = xansql;
31
31
  this.model = xansql.model(MigrationModel);
32
- this.migrate(this.model);
33
32
  }
34
33
  async migrate(model, force) {
35
34
  if (typeof window !== "undefined")
@@ -1 +1 @@
1
- {"version":3,"file":"Migration.js","sources":["../../src/core/Migration.ts"],"sourcesContent":["import { xv } from \"xanv\";\nimport Model from \"../model\";\nimport xt from \"../xt\";\nimport Xansql from \"./Xansql\";\nimport { XqlFieldInfoSchema } from \"../xt/XqlFieldInfo\";\nimport XqlRelationMany from \"../xt/fields/RelationMany\";\nimport { iof } from \"../utils\";\nimport XansqlError from \"./XansqlError\";\n\nclass MigrationModel extends Model {\n get table() {\n return \"_xansql_migration\"\n }\n\n schema() {\n return {\n id: xt.id(),\n model: xt.string(),\n schema: xt.record(xt.string(), xt.object({\n type: xt.string(),\n length: xt.number().nullable(),\n default: xv.any(),\n unique: xt.boolean(),\n nullable: xt.boolean(),\n index: xt.string()\n })),\n created_at: xt.date().createdAt(),\n updated_at: xt.date().updatedAt(),\n }\n }\n}\n\n\nclass Migration {\n model\n constructor(private xansql: Xansql) {\n this.model = xansql.model(MigrationModel)\n this.migrate(this.model)\n }\n\n async migrate<M extends Model<any>>(model: M, force?: boolean) {\n if (typeof window !== \"undefined\") return\n\n if (force) {\n try {\n await model.execute(`DROP TABLE IF EXISTS ${model.table}`)\n } catch (error) {\n\n }\n }\n\n const schema = model.schema()\n let column_sqls = []\n let index_sqls = []\n let migrate_schema: { [column: string]: XqlFieldInfoSchema } = {}\n\n for (let column in schema) {\n const field = schema[column]\n if (!iof(field, XqlRelationMany)) {\n const info = field.info\n column_sqls.push(info.sql.column)\n if (info.sql.create_index) {\n index_sqls.push(info.sql.create_index)\n }\n migrate_schema[column] = field.info.schema\n }\n }\n\n const sql = `CREATE TABLE IF NOT EXISTS ${model.table}(${column_sqls.join(\",\")})`\n await model.execute(sql, false)\n for (let idxql of index_sqls) {\n try {\n await model.execute(idxql, false)\n } catch (error) { }\n }\n\n if (model.table === this.model.table) {\n return\n }\n\n const prev_migration = await this.migrateSchema(model)\n if (prev_migration) {\n for (let column in schema) {\n const field = schema[column]\n if (!iof(field, XqlRelationMany)) {\n const info = field.info\n if (column in prev_migration) {\n\n } else {\n // Add column\n await model.execute(info.sql.alter_column, false)\n }\n }\n }\n }\n\n return await this.model.upsert({\n create: {\n model: model.table,\n schema: migrate_schema\n },\n update: {\n schema: migrate_schema\n },\n where: {\n model: model.table\n },\n useTransection: false,\n debug: false\n })\n }\n\n async get(model: Model) {\n return await this.model.findOne({\n where: {\n model: model.table\n },\n debug: false\n })\n }\n\n async migrateSchema(model: Model) {\n const get = await this.get(model)\n if (get) {\n return get.schema\n }\n }\n\n async has(model: Model) {\n return await this.model.count({\n model: model.table,\n })\n }\n}\n\nexport default Migration"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Migration.js","sources":["../../src/core/Migration.ts"],"sourcesContent":["import { xv } from \"xanv\";\nimport Model from \"../model\";\nimport xt from \"../xt\";\nimport Xansql from \"./Xansql\";\nimport { XqlFieldInfoSchema } from \"../xt/XqlFieldInfo\";\nimport XqlRelationMany from \"../xt/fields/RelationMany\";\nimport { iof } from \"../utils\";\nimport XansqlError from \"./XansqlError\";\n\nclass MigrationModel extends Model {\n get table() {\n return \"_xansql_migration\"\n }\n\n schema() {\n return {\n id: xt.id(),\n model: xt.string(),\n schema: xt.record(xt.string(), xt.object({\n type: xt.string(),\n length: xt.number().nullable(),\n default: xv.any(),\n unique: xt.boolean(),\n nullable: xt.boolean(),\n index: xt.string()\n })),\n created_at: xt.date().createdAt(),\n updated_at: xt.date().updatedAt(),\n }\n }\n}\n\n\nclass Migration {\n model\n constructor(private xansql: Xansql) {\n this.model = xansql.model(MigrationModel)\n }\n\n async migrate<M extends Model<any>>(model: M, force?: boolean) {\n if (typeof window !== \"undefined\") return\n\n if (force) {\n try {\n await model.execute(`DROP TABLE IF EXISTS ${model.table}`)\n } catch (error) {\n\n }\n }\n\n const schema = model.schema()\n let column_sqls = []\n let index_sqls = []\n let migrate_schema: { [column: string]: XqlFieldInfoSchema } = {}\n\n for (let column in schema) {\n const field = schema[column]\n if (!iof(field, XqlRelationMany)) {\n const info = field.info\n column_sqls.push(info.sql.column)\n if (info.sql.create_index) {\n index_sqls.push(info.sql.create_index)\n }\n migrate_schema[column] = field.info.schema\n }\n }\n\n const sql = `CREATE TABLE IF NOT EXISTS ${model.table}(${column_sqls.join(\",\")})`\n await model.execute(sql, false)\n for (let idxql of index_sqls) {\n try {\n await model.execute(idxql, false)\n } catch (error) { }\n }\n\n if (model.table === this.model.table) {\n return\n }\n\n const prev_migration = await this.migrateSchema(model)\n if (prev_migration) {\n for (let column in schema) {\n const field = schema[column]\n if (!iof(field, XqlRelationMany)) {\n const info = field.info\n if (column in prev_migration) {\n\n } else {\n // Add column\n await model.execute(info.sql.alter_column, false)\n }\n }\n }\n }\n\n return await this.model.upsert({\n create: {\n model: model.table,\n schema: migrate_schema\n },\n update: {\n schema: migrate_schema\n },\n where: {\n model: model.table\n },\n useTransection: false,\n debug: false\n })\n }\n\n async get(model: Model) {\n return await this.model.findOne({\n where: {\n model: model.table\n },\n debug: false\n })\n }\n\n async migrateSchema(model: Model) {\n const get = await this.get(model)\n if (get) {\n return get.schema\n }\n }\n\n async has(model: Model) {\n return await this.model.count({\n model: model.table,\n })\n }\n}\n\nexport default Migration"],"names":[],"mappings":"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"}
package/index.d.ts CHANGED
@@ -2,6 +2,6 @@ export { default as Xansql } from './core/Xansql.js';
2
2
  export { default as Model } from './model/index.js';
3
3
  export { default as XansqlError } from './core/XansqlError.js';
4
4
  export { default as xt } from './xt/index.js';
5
- export { AggregateArgs, AggregateArgsValue, AggregateFunctions, AggregateGroupByArgs, AggregateOrderBy, AggregateResult, AggregateResultGroupBy, AggregateSelectArgs, CreateArgs, CreateDataArgs, CreateDataValue, CreateResult, DeleteArgs, DeleteResult, ExactArgs, FindAggregateArgs, FindArgs, FindResult, FindResultColumnMap, FindResultFullSchema, FindResultMap, IsRelationField, IsRelationMany, IsRelationOne, LimitArgs, ModelClass, ModelHooks, ModelOptions, ModelRowObject, Normalize, OrderByArgs, PaginateArgs, SchemaAllColumns, SchemaShape, SelectArgs, UpdateArgs, UpdateDataArgs, UpdateDataValue, UpdateRelationArgs, UpdateResult, UpsertArgs, UpsertResult, WhereArgs, WhereSubConditionArgs } from './model/types.js';
5
+ export { AggregateArgs, AggregateArgsValue, AggregateFunctions, AggregateGroupByArgs, AggregateOrderBy, AggregateResult, AggregateResultGroupBy, AggregateSelectArgs, CreateArgs, CreateDataArgs, CreateDataValue, CreateResult, DeleteArgs, DeleteResult, ExactArgs, FindAggregateArgs, FindArgs, FindDistinctArgs, FindResult, FindResultColumnMap, FindResultFullSchema, FindResultMap, IsRelationField, IsRelationMany, IsRelationOne, LimitArgs, ModelClass, ModelHooks, ModelOptions, ModelRowObject, Normalize, OrderByArgs, PaginateArgs, SchemaAllColumns, SchemaShape, SelectArgs, UpdateArgs, UpdateDataArgs, UpdateDataValue, UpdateRelationArgs, UpdateResult, UpsertArgs, UpsertResult, WhereArgs, WhereSubConditionArgs } from './model/types.js';
6
6
  export { ExecuterResult, ResultData, RowObject, XansqlCache, XansqlConfigType, XansqlConfigTypeRequired, XansqlDialect, XansqlDialectEngine, XansqlFileConfig, XansqlFileMeta, XansqlFileUploadArgs, XansqlHooks, XansqlSocket } from './core/types.js';
7
7
  export { XqlField } from './xt/types.js';
@@ -24,16 +24,28 @@ class BuildFindArgs {
24
24
  const sargs = new index$1((args === null || args === void 0 ? void 0 : args.select) || {}, model);
25
25
  const largs = new index$2(args.limit || {}, model);
26
26
  const oargs = new index$3(args.orderBy || {}, model);
27
+ const distinct = args.distinct || [];
27
28
  if (subQueryInfo) {
28
29
  if (!sargs.columns.includes(subQueryInfo.column)) {
29
30
  sargs.columns.push(subQueryInfo.column);
30
31
  }
31
32
  wargs.parts.push(`${model.alias}.${subQueryInfo.column} IN (${subQueryInfo.ins.join(",")})`);
33
+ if (distinct.length && !distinct.includes(subQueryInfo.column)) {
34
+ distinct.push(subQueryInfo.column);
35
+ }
32
36
  }
33
- let sql = `SELECT ${args.distinct ? "DISTINCT" : ""} ${sargs.sql} FROM ${model.table} as ${model.alias} ${wargs.sql} ${oargs.sql} ${largs.sql}`;
34
- if (subQueryInfo && largs.sql) {
35
- const orderBySql = oargs.sql ? oargs.sql : `ORDER BY ${model.alias}.${model.IDColumn}`;
37
+ let sql = "";
38
+ if (!distinct.length) {
36
39
  sql = `
40
+ SELECT ${sargs.sql}
41
+ FROM ${model.table} as ${model.alias}
42
+ ${wargs.sql}
43
+ ${oargs.sql}
44
+ ${largs.sql}
45
+ `;
46
+ if (subQueryInfo && largs.sql) {
47
+ const orderBySql = oargs.sql ? oargs.sql : `ORDER BY ${model.alias}.${model.IDColumn}`;
48
+ sql = `
37
49
  SELECT ${sargs.columns.join(", ")}
38
50
  FROM (
39
51
  SELECT
@@ -47,6 +59,46 @@ class BuildFindArgs {
47
59
  ) AS ${model.alias}
48
60
  WHERE rn > ${largs.skip} AND rn <= ${largs.take + largs.skip}
49
61
  `;
62
+ }
63
+ }
64
+ else {
65
+ const distinctCols = distinct.map(c => `${model.alias}.${c}`).join(", ");
66
+ const orderBySql = oargs.sql ? oargs.sql : `ORDER BY ${model.alias}.${model.IDColumn}`;
67
+ sql = `
68
+ SELECT ${sargs.sql}
69
+ FROM (
70
+ SELECT
71
+ ${sargs.sql},
72
+ ROW_NUMBER() OVER (
73
+ PARTITION BY ${distinctCols}
74
+ ${orderBySql}
75
+ ) AS distinct_rn
76
+ FROM ${model.table} ${model.alias}
77
+ ${wargs.sql}
78
+ ) ${model.alias}
79
+ WHERE distinct_rn = 1
80
+ ${orderBySql}
81
+ ${!subQueryInfo && largs.sql ? largs.sql : ""}
82
+ `;
83
+ if (subQueryInfo && largs.sql) {
84
+ const orderBySql = oargs.sql ? oargs.sql : `ORDER BY ${model.alias}.${model.IDColumn} ASC`;
85
+ sql = `
86
+ SELECT ${sargs.sql}
87
+ FROM (
88
+ SELECT
89
+ ${sargs.sql},
90
+ ROW_NUMBER() OVER (
91
+ PARTITION BY ${model.alias}.${subQueryInfo.column}
92
+ ${orderBySql}
93
+ ) AS rn
94
+ FROM (
95
+ ${sql}
96
+ ) ${model.alias}
97
+ ) ${model.alias}
98
+ WHERE rn > ${largs.skip} AND rn <= ${largs.take + largs.skip}
99
+ ${orderBySql}
100
+ `;
101
+ }
50
102
  }
51
103
  sql = sql.replace(/\s+/gi, " ");
52
104
  // execute model
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs","sources":["../../../../src/model/Build/FindArgs/index.ts"],"sourcesContent":["import Model from \"../..\";\nimport { isObject } from \"../../../utils\";\nimport { chunkArray } from \"../../../utils/chunker\";\nimport XqlRelationMany from \"../../../xt/fields/RelationMany\";\nimport XqlRelationOne from \"../../../xt/fields/RelationOne\";\nimport { FindArgs } from \"../../types\";\nimport BuildAggregateArgs from \"../AggregateArgs\";\nimport BuildLimitArgs from \"../LimitArgs\";\nimport BuildOrderByArgs from \"../OrderByArgs\";\nimport BuildSelectArgs from \"../SelectArgs\";\nimport BuildWhereArgs from \"../WhereArgs\";\n\ntype SubQueryInfo = {\n column: string,\n ins: number[]\n}\n\nclass BuildFindArgs<A extends FindArgs<any> = any> {\n constructor(private args: A, private model: Model<any>, private subQueryInfo?: SubQueryInfo) {\n }\n\n async results() {\n const args = this.args\n const subQueryInfo = this.subQueryInfo\n const model = this.model\n const xansql = model.xansql\n const schema = model.schema()\n const wargs = new BuildWhereArgs(args.where || {}, model)\n const sargs = new BuildSelectArgs((args as any)?.select! || {}, model)\n const largs = new BuildLimitArgs(args.limit || {} as any, model)\n const oargs = new BuildOrderByArgs(args.orderBy || {}, model)\n\n if (subQueryInfo) {\n if (!sargs.columns.includes(subQueryInfo.column)) {\n sargs.columns.push(subQueryInfo.column)\n }\n wargs.parts.push(`${model.alias}.${subQueryInfo.column} IN (${subQueryInfo.ins.join(\",\")})`)\n }\n let sql = `SELECT ${args.distinct ? \"DISTINCT\" : \"\"} ${sargs.sql} FROM ${model.table} as ${model.alias} ${wargs.sql} ${oargs.sql} ${largs.sql}`\n\n if (subQueryInfo && largs.sql) {\n const orderBySql = oargs.sql ? oargs.sql : `ORDER BY ${model.alias}.${model.IDColumn}`\n sql = `\n SELECT ${sargs.columns.join(\", \")}\n FROM (\n SELECT\n ${sargs.sql},\n ROW_NUMBER() OVER (\n PARTITION BY ${model.alias}.${subQueryInfo.column}\n ${orderBySql}\n ) AS rn\n FROM ${model.table} ${model.alias}\n ${wargs.sql}\n ) AS ${model.alias}\n WHERE rn > ${largs.skip} AND rn <= ${largs.take + largs.skip}\n `\n }\n\n sql = sql.replace(/\\s+/gi, \" \")\n\n // execute model\n const execute = await model.execute(sql, args.debug)\n const results = execute.results\n const rowIds = []\n const rowIndexes: { [id: number]: number } = {}\n const relIds: {\n [column: string]: number[]\n } = {}\n const relIndexes: {\n [column: string]: {\n [id: number]: number\n }\n } = {}\n const relcols = Object.keys(sargs.relations)\n\n for (let i = 0; i < results.length; i++) {\n const row = results[i]\n rowIds.push(row[model.IDColumn])\n rowIndexes[row[model.IDColumn]] = i\n\n for (let col in row) {\n const field: any = schema[col]\n if (!field.isRelation) {\n row[col] = (field as any).value.fromSql(row[col])\n }\n\n if (relcols.length && relcols.includes(col)) {\n if (!relIds[col]) relIds[col] = []\n if (!relIndexes[col]) relIndexes[col] = {}\n\n const rinfo = field.relationInfo\n const id = row[rinfo.self.relation]\n if (id) {\n relIds[col].push(id)\n relIndexes[col][id] = i\n }\n }\n }\n\n // if aggregate exists then set aggregate value 0\n if (args.aggregate) {\n row.aggregate = row.aggregate ?? {}\n for (let rel_col in args.aggregate) {\n const agargs = args.aggregate[rel_col]\n row.aggregate[rel_col] = row.aggregate[rel_col] ?? {}\n for (let col in agargs) {\n const agval = agargs[col]\n for (let func in agval) {\n row.aggregate[rel_col][`${func}_${col}`] = 0\n }\n }\n }\n }\n }\n\n if (results.length && Object.keys(sargs.relations).length) {\n\n // aggregate\n if (args.aggregate) {\n for (let col in args.aggregate) {\n const field = schema[col] as any\n const rinfo = field.relationInfo\n const RModel = xansql.model(field.model)\n const agselect = args.aggregate[col]\n\n if (!agselect || !Object.keys(agselect).length) continue\n const agargs = new BuildAggregateArgs({\n select: agselect,\n groupBy: [rinfo.target.column],\n where: {\n [rinfo.target.column]: {\n [rinfo.self.relation]: {\n in: rowIds\n }\n }\n },\n debug: args.debug\n }, RModel)\n\n const agresults = await agargs.results()\n if (agresults.length) {\n for (let { chunk } of chunkArray(agresults)) {\n for (let ares of chunk) {\n const id = ares[rinfo.target.relation]\n const index = rowIndexes[id]\n delete ares[rinfo.target.column]\n if (!(results as any)[index][\"aggregate\"]) {\n (results as any)[index][\"aggregate\"] = {}\n }\n (results as any)[index][\"aggregate\"][col] = ares\n }\n }\n }\n }\n }\n\n for (let col in sargs.relations) {\n\n const field = schema[col] as XqlRelationMany<any> | XqlRelationOne<any>\n const isMany = field.type === 'relation-many'\n const rinfo = field.relationInfo\n const rel_column = rinfo.target.relation\n const in_ids: number[] = isMany ? rowIds : relIds[col]\n // const indexes: { [id: number]: number } = {}\n // for (let i = 0; i < results.length; i++) {\n // const row = results[i]\n // const id = row[rinfo.self.relation]\n // if (id) {\n // indexes[id] = i\n // in_ids.push(id)\n // }\n // }\n\n if (!in_ids.length) continue\n const RModel = xansql.model(field.model)\n const rargs = sargs.relations[col]\n rargs.debug = args.debug\n const f = new BuildFindArgs(rargs as any, RModel, {\n column: rel_column,\n ins: in_ids\n })\n const rel_results = await f.results()\n\n if (rel_results.length) {\n for (let { chunk } of chunkArray(rel_results)) {\n for (let rres of chunk) {\n if (isMany) {\n const id = rres[rinfo.target.relation]\n const index = rowIndexes[id]\n if (!results[index][rinfo.self.column]) {\n results[index][col] = []\n }\n results[index][rinfo.self.column].push(rres)\n delete rres[rinfo.target.column]\n } else {\n const id = rres[rinfo.target.relation]\n const index = relIndexes[col][id]\n results[index][rinfo.self.column] = rres\n }\n }\n }\n }\n }\n }\n\n return results\n }\n}\n\nexport default BuildFindArgs"],"names":["BuildWhereArgs","BuildSelectArgs","BuildLimitArgs","BuildOrderByArgs","BuildAggregateArgs","chunkArray"],"mappings":"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"}
1
+ {"version":3,"file":"index.cjs","sources":["../../../../src/model/Build/FindArgs/index.ts"],"sourcesContent":["import Model from \"../..\";\nimport { isObject } from \"../../../utils\";\nimport { chunkArray } from \"../../../utils/chunker\";\nimport XqlRelationMany from \"../../../xt/fields/RelationMany\";\nimport XqlRelationOne from \"../../../xt/fields/RelationOne\";\nimport { FindArgs } from \"../../types\";\nimport BuildAggregateArgs from \"../AggregateArgs\";\nimport BuildLimitArgs from \"../LimitArgs\";\nimport BuildOrderByArgs from \"../OrderByArgs\";\nimport BuildSelectArgs from \"../SelectArgs\";\nimport BuildWhereArgs from \"../WhereArgs\";\n\ntype SubQueryInfo = {\n column: string,\n ins: number[]\n}\n\nclass BuildFindArgs<A extends FindArgs<any> = any> {\n constructor(private args: A, private model: Model<any>, private subQueryInfo?: SubQueryInfo) {\n }\n\n async results() {\n const args = this.args\n const subQueryInfo = this.subQueryInfo\n const model = this.model\n const xansql = model.xansql\n const schema = model.schema()\n const wargs = new BuildWhereArgs(args.where || {}, model)\n const sargs = new BuildSelectArgs((args as any)?.select! || {}, model)\n const largs = new BuildLimitArgs(args.limit || {} as any, model)\n const oargs = new BuildOrderByArgs(args.orderBy || {}, model)\n const distinct = args.distinct || []\n\n if (subQueryInfo) {\n if (!sargs.columns.includes(subQueryInfo.column)) {\n sargs.columns.push(subQueryInfo.column)\n }\n wargs.parts.push(`${model.alias}.${subQueryInfo.column} IN (${subQueryInfo.ins.join(\",\")})`)\n if (distinct.length && !distinct.includes(subQueryInfo.column)) {\n distinct.push(subQueryInfo.column)\n }\n }\n\n let sql = \"\"\n\n if (!distinct.length) {\n sql = `\n SELECT ${sargs.sql}\n FROM ${model.table} as ${model.alias}\n ${wargs.sql} \n ${oargs.sql} \n ${largs.sql}\n `\n if (subQueryInfo && largs.sql) {\n const orderBySql = oargs.sql ? oargs.sql : `ORDER BY ${model.alias}.${model.IDColumn}`\n sql = `\n SELECT ${sargs.columns.join(\", \")}\n FROM (\n SELECT\n ${sargs.sql},\n ROW_NUMBER() OVER (\n PARTITION BY ${model.alias}.${subQueryInfo.column}\n ${orderBySql}\n ) AS rn\n FROM ${model.table} ${model.alias}\n ${wargs.sql}\n ) AS ${model.alias}\n WHERE rn > ${largs.skip} AND rn <= ${largs.take + largs.skip}\n `\n }\n } else {\n const distinctCols = distinct.map(c => `${model.alias}.${c}`).join(\", \");\n const orderBySql = oargs.sql ? oargs.sql : `ORDER BY ${model.alias}.${model.IDColumn}`\n\n sql = `\n SELECT ${sargs.sql}\n FROM (\n SELECT\n ${sargs.sql},\n ROW_NUMBER() OVER (\n PARTITION BY ${distinctCols}\n ${orderBySql}\n ) AS distinct_rn\n FROM ${model.table} ${model.alias}\n ${wargs.sql}\n ) ${model.alias}\n WHERE distinct_rn = 1\n ${orderBySql}\n ${!subQueryInfo && largs.sql ? largs.sql : \"\"}\n `;\n\n if (subQueryInfo && largs.sql) {\n const orderBySql = oargs.sql ? oargs.sql : `ORDER BY ${model.alias}.${model.IDColumn} ASC`;\n sql = `\n SELECT ${sargs.sql}\n FROM (\n SELECT\n ${sargs.sql},\n ROW_NUMBER() OVER (\n PARTITION BY ${model.alias}.${subQueryInfo.column}\n ${orderBySql}\n ) AS rn\n FROM (\n ${sql}\n ) ${model.alias}\n ) ${model.alias}\n WHERE rn > ${largs.skip} AND rn <= ${largs.take + largs.skip}\n ${orderBySql}\n `;\n }\n }\n\n sql = sql.replace(/\\s+/gi, \" \")\n\n // execute model\n const execute = await model.execute(sql, args.debug)\n const results = execute.results\n const rowIds = []\n const rowIndexes: { [id: number]: number } = {}\n const relIds: {\n [column: string]: number[]\n } = {}\n const relIndexes: {\n [column: string]: {\n [id: number]: number\n }\n } = {}\n const relcols = Object.keys(sargs.relations)\n\n for (let i = 0; i < results.length; i++) {\n const row = results[i]\n rowIds.push(row[model.IDColumn])\n rowIndexes[row[model.IDColumn]] = i\n\n for (let col in row) {\n const field: any = schema[col]\n if (!field.isRelation) {\n row[col] = (field as any).value.fromSql(row[col])\n }\n\n if (relcols.length && relcols.includes(col)) {\n if (!relIds[col]) relIds[col] = []\n if (!relIndexes[col]) relIndexes[col] = {}\n\n const rinfo = field.relationInfo\n const id = row[rinfo.self.relation]\n if (id) {\n relIds[col].push(id)\n relIndexes[col][id] = i\n }\n }\n }\n\n // if aggregate exists then set aggregate value 0\n if (args.aggregate) {\n row.aggregate = row.aggregate ?? {}\n for (let rel_col in args.aggregate) {\n const agargs = args.aggregate[rel_col]\n row.aggregate[rel_col] = row.aggregate[rel_col] ?? {}\n for (let col in agargs) {\n const agval = agargs[col]\n for (let func in agval) {\n row.aggregate[rel_col][`${func}_${col}`] = 0\n }\n }\n }\n }\n }\n\n if (results.length && Object.keys(sargs.relations).length) {\n\n // aggregate\n if (args.aggregate) {\n for (let col in args.aggregate) {\n const field = schema[col] as any\n const rinfo = field.relationInfo\n const RModel = xansql.model(field.model)\n const agselect = args.aggregate[col]\n\n if (!agselect || !Object.keys(agselect).length) continue\n const agargs = new BuildAggregateArgs({\n select: agselect,\n groupBy: [rinfo.target.column],\n where: {\n [rinfo.target.column]: {\n [rinfo.self.relation]: {\n in: rowIds\n }\n }\n },\n debug: args.debug\n }, RModel)\n\n const agresults = await agargs.results()\n if (agresults.length) {\n for (let { chunk } of chunkArray(agresults)) {\n for (let ares of chunk) {\n const id = ares[rinfo.target.relation]\n const index = rowIndexes[id]\n delete ares[rinfo.target.column]\n if (!(results as any)[index][\"aggregate\"]) {\n (results as any)[index][\"aggregate\"] = {}\n }\n (results as any)[index][\"aggregate\"][col] = ares\n }\n }\n }\n }\n }\n\n for (let col in sargs.relations) {\n\n const field = schema[col] as XqlRelationMany<any> | XqlRelationOne<any>\n const isMany = field.type === 'relation-many'\n const rinfo = field.relationInfo\n const rel_column = rinfo.target.relation\n const in_ids: number[] = isMany ? rowIds : relIds[col]\n // const indexes: { [id: number]: number } = {}\n // for (let i = 0; i < results.length; i++) {\n // const row = results[i]\n // const id = row[rinfo.self.relation]\n // if (id) {\n // indexes[id] = i\n // in_ids.push(id)\n // }\n // }\n\n if (!in_ids.length) continue\n const RModel = xansql.model(field.model)\n const rargs = sargs.relations[col]\n rargs.debug = args.debug\n const f = new BuildFindArgs(rargs as any, RModel, {\n column: rel_column,\n ins: in_ids\n })\n const rel_results = await f.results()\n\n if (rel_results.length) {\n for (let { chunk } of chunkArray(rel_results)) {\n for (let rres of chunk) {\n if (isMany) {\n const id = rres[rinfo.target.relation]\n const index = rowIndexes[id]\n if (!results[index][rinfo.self.column]) {\n results[index][col] = []\n }\n results[index][rinfo.self.column].push(rres)\n delete rres[rinfo.target.column]\n } else {\n const id = rres[rinfo.target.relation]\n const index = relIndexes[col][id]\n results[index][rinfo.self.column] = rres\n }\n }\n }\n }\n }\n }\n\n return results\n }\n}\n\nexport default BuildFindArgs"],"names":["BuildWhereArgs","BuildSelectArgs","BuildLimitArgs","BuildOrderByArgs","BuildAggregateArgs","chunkArray"],"mappings":"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"}
@@ -22,16 +22,28 @@ class BuildFindArgs {
22
22
  const sargs = new BuildSelectArgs((args === null || args === void 0 ? void 0 : args.select) || {}, model);
23
23
  const largs = new BuildLimitArgs(args.limit || {}, model);
24
24
  const oargs = new BuildOrderByArgs(args.orderBy || {}, model);
25
+ const distinct = args.distinct || [];
25
26
  if (subQueryInfo) {
26
27
  if (!sargs.columns.includes(subQueryInfo.column)) {
27
28
  sargs.columns.push(subQueryInfo.column);
28
29
  }
29
30
  wargs.parts.push(`${model.alias}.${subQueryInfo.column} IN (${subQueryInfo.ins.join(",")})`);
31
+ if (distinct.length && !distinct.includes(subQueryInfo.column)) {
32
+ distinct.push(subQueryInfo.column);
33
+ }
30
34
  }
31
- let sql = `SELECT ${args.distinct ? "DISTINCT" : ""} ${sargs.sql} FROM ${model.table} as ${model.alias} ${wargs.sql} ${oargs.sql} ${largs.sql}`;
32
- if (subQueryInfo && largs.sql) {
33
- const orderBySql = oargs.sql ? oargs.sql : `ORDER BY ${model.alias}.${model.IDColumn}`;
35
+ let sql = "";
36
+ if (!distinct.length) {
34
37
  sql = `
38
+ SELECT ${sargs.sql}
39
+ FROM ${model.table} as ${model.alias}
40
+ ${wargs.sql}
41
+ ${oargs.sql}
42
+ ${largs.sql}
43
+ `;
44
+ if (subQueryInfo && largs.sql) {
45
+ const orderBySql = oargs.sql ? oargs.sql : `ORDER BY ${model.alias}.${model.IDColumn}`;
46
+ sql = `
35
47
  SELECT ${sargs.columns.join(", ")}
36
48
  FROM (
37
49
  SELECT
@@ -45,6 +57,46 @@ class BuildFindArgs {
45
57
  ) AS ${model.alias}
46
58
  WHERE rn > ${largs.skip} AND rn <= ${largs.take + largs.skip}
47
59
  `;
60
+ }
61
+ }
62
+ else {
63
+ const distinctCols = distinct.map(c => `${model.alias}.${c}`).join(", ");
64
+ const orderBySql = oargs.sql ? oargs.sql : `ORDER BY ${model.alias}.${model.IDColumn}`;
65
+ sql = `
66
+ SELECT ${sargs.sql}
67
+ FROM (
68
+ SELECT
69
+ ${sargs.sql},
70
+ ROW_NUMBER() OVER (
71
+ PARTITION BY ${distinctCols}
72
+ ${orderBySql}
73
+ ) AS distinct_rn
74
+ FROM ${model.table} ${model.alias}
75
+ ${wargs.sql}
76
+ ) ${model.alias}
77
+ WHERE distinct_rn = 1
78
+ ${orderBySql}
79
+ ${!subQueryInfo && largs.sql ? largs.sql : ""}
80
+ `;
81
+ if (subQueryInfo && largs.sql) {
82
+ const orderBySql = oargs.sql ? oargs.sql : `ORDER BY ${model.alias}.${model.IDColumn} ASC`;
83
+ sql = `
84
+ SELECT ${sargs.sql}
85
+ FROM (
86
+ SELECT
87
+ ${sargs.sql},
88
+ ROW_NUMBER() OVER (
89
+ PARTITION BY ${model.alias}.${subQueryInfo.column}
90
+ ${orderBySql}
91
+ ) AS rn
92
+ FROM (
93
+ ${sql}
94
+ ) ${model.alias}
95
+ ) ${model.alias}
96
+ WHERE rn > ${largs.skip} AND rn <= ${largs.take + largs.skip}
97
+ ${orderBySql}
98
+ `;
99
+ }
48
100
  }
49
101
  sql = sql.replace(/\s+/gi, " ");
50
102
  // execute model
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../../../src/model/Build/FindArgs/index.ts"],"sourcesContent":["import Model from \"../..\";\nimport { isObject } from \"../../../utils\";\nimport { chunkArray } from \"../../../utils/chunker\";\nimport XqlRelationMany from \"../../../xt/fields/RelationMany\";\nimport XqlRelationOne from \"../../../xt/fields/RelationOne\";\nimport { FindArgs } from \"../../types\";\nimport BuildAggregateArgs from \"../AggregateArgs\";\nimport BuildLimitArgs from \"../LimitArgs\";\nimport BuildOrderByArgs from \"../OrderByArgs\";\nimport BuildSelectArgs from \"../SelectArgs\";\nimport BuildWhereArgs from \"../WhereArgs\";\n\ntype SubQueryInfo = {\n column: string,\n ins: number[]\n}\n\nclass BuildFindArgs<A extends FindArgs<any> = any> {\n constructor(private args: A, private model: Model<any>, private subQueryInfo?: SubQueryInfo) {\n }\n\n async results() {\n const args = this.args\n const subQueryInfo = this.subQueryInfo\n const model = this.model\n const xansql = model.xansql\n const schema = model.schema()\n const wargs = new BuildWhereArgs(args.where || {}, model)\n const sargs = new BuildSelectArgs((args as any)?.select! || {}, model)\n const largs = new BuildLimitArgs(args.limit || {} as any, model)\n const oargs = new BuildOrderByArgs(args.orderBy || {}, model)\n\n if (subQueryInfo) {\n if (!sargs.columns.includes(subQueryInfo.column)) {\n sargs.columns.push(subQueryInfo.column)\n }\n wargs.parts.push(`${model.alias}.${subQueryInfo.column} IN (${subQueryInfo.ins.join(\",\")})`)\n }\n let sql = `SELECT ${args.distinct ? \"DISTINCT\" : \"\"} ${sargs.sql} FROM ${model.table} as ${model.alias} ${wargs.sql} ${oargs.sql} ${largs.sql}`\n\n if (subQueryInfo && largs.sql) {\n const orderBySql = oargs.sql ? oargs.sql : `ORDER BY ${model.alias}.${model.IDColumn}`\n sql = `\n SELECT ${sargs.columns.join(\", \")}\n FROM (\n SELECT\n ${sargs.sql},\n ROW_NUMBER() OVER (\n PARTITION BY ${model.alias}.${subQueryInfo.column}\n ${orderBySql}\n ) AS rn\n FROM ${model.table} ${model.alias}\n ${wargs.sql}\n ) AS ${model.alias}\n WHERE rn > ${largs.skip} AND rn <= ${largs.take + largs.skip}\n `\n }\n\n sql = sql.replace(/\\s+/gi, \" \")\n\n // execute model\n const execute = await model.execute(sql, args.debug)\n const results = execute.results\n const rowIds = []\n const rowIndexes: { [id: number]: number } = {}\n const relIds: {\n [column: string]: number[]\n } = {}\n const relIndexes: {\n [column: string]: {\n [id: number]: number\n }\n } = {}\n const relcols = Object.keys(sargs.relations)\n\n for (let i = 0; i < results.length; i++) {\n const row = results[i]\n rowIds.push(row[model.IDColumn])\n rowIndexes[row[model.IDColumn]] = i\n\n for (let col in row) {\n const field: any = schema[col]\n if (!field.isRelation) {\n row[col] = (field as any).value.fromSql(row[col])\n }\n\n if (relcols.length && relcols.includes(col)) {\n if (!relIds[col]) relIds[col] = []\n if (!relIndexes[col]) relIndexes[col] = {}\n\n const rinfo = field.relationInfo\n const id = row[rinfo.self.relation]\n if (id) {\n relIds[col].push(id)\n relIndexes[col][id] = i\n }\n }\n }\n\n // if aggregate exists then set aggregate value 0\n if (args.aggregate) {\n row.aggregate = row.aggregate ?? {}\n for (let rel_col in args.aggregate) {\n const agargs = args.aggregate[rel_col]\n row.aggregate[rel_col] = row.aggregate[rel_col] ?? {}\n for (let col in agargs) {\n const agval = agargs[col]\n for (let func in agval) {\n row.aggregate[rel_col][`${func}_${col}`] = 0\n }\n }\n }\n }\n }\n\n if (results.length && Object.keys(sargs.relations).length) {\n\n // aggregate\n if (args.aggregate) {\n for (let col in args.aggregate) {\n const field = schema[col] as any\n const rinfo = field.relationInfo\n const RModel = xansql.model(field.model)\n const agselect = args.aggregate[col]\n\n if (!agselect || !Object.keys(agselect).length) continue\n const agargs = new BuildAggregateArgs({\n select: agselect,\n groupBy: [rinfo.target.column],\n where: {\n [rinfo.target.column]: {\n [rinfo.self.relation]: {\n in: rowIds\n }\n }\n },\n debug: args.debug\n }, RModel)\n\n const agresults = await agargs.results()\n if (agresults.length) {\n for (let { chunk } of chunkArray(agresults)) {\n for (let ares of chunk) {\n const id = ares[rinfo.target.relation]\n const index = rowIndexes[id]\n delete ares[rinfo.target.column]\n if (!(results as any)[index][\"aggregate\"]) {\n (results as any)[index][\"aggregate\"] = {}\n }\n (results as any)[index][\"aggregate\"][col] = ares\n }\n }\n }\n }\n }\n\n for (let col in sargs.relations) {\n\n const field = schema[col] as XqlRelationMany<any> | XqlRelationOne<any>\n const isMany = field.type === 'relation-many'\n const rinfo = field.relationInfo\n const rel_column = rinfo.target.relation\n const in_ids: number[] = isMany ? rowIds : relIds[col]\n // const indexes: { [id: number]: number } = {}\n // for (let i = 0; i < results.length; i++) {\n // const row = results[i]\n // const id = row[rinfo.self.relation]\n // if (id) {\n // indexes[id] = i\n // in_ids.push(id)\n // }\n // }\n\n if (!in_ids.length) continue\n const RModel = xansql.model(field.model)\n const rargs = sargs.relations[col]\n rargs.debug = args.debug\n const f = new BuildFindArgs(rargs as any, RModel, {\n column: rel_column,\n ins: in_ids\n })\n const rel_results = await f.results()\n\n if (rel_results.length) {\n for (let { chunk } of chunkArray(rel_results)) {\n for (let rres of chunk) {\n if (isMany) {\n const id = rres[rinfo.target.relation]\n const index = rowIndexes[id]\n if (!results[index][rinfo.self.column]) {\n results[index][col] = []\n }\n results[index][rinfo.self.column].push(rres)\n delete rres[rinfo.target.column]\n } else {\n const id = rres[rinfo.target.relation]\n const index = relIndexes[col][id]\n results[index][rinfo.self.column] = rres\n }\n }\n }\n }\n }\n }\n\n return results\n }\n}\n\nexport default BuildFindArgs"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../../../../src/model/Build/FindArgs/index.ts"],"sourcesContent":["import Model from \"../..\";\nimport { isObject } from \"../../../utils\";\nimport { chunkArray } from \"../../../utils/chunker\";\nimport XqlRelationMany from \"../../../xt/fields/RelationMany\";\nimport XqlRelationOne from \"../../../xt/fields/RelationOne\";\nimport { FindArgs } from \"../../types\";\nimport BuildAggregateArgs from \"../AggregateArgs\";\nimport BuildLimitArgs from \"../LimitArgs\";\nimport BuildOrderByArgs from \"../OrderByArgs\";\nimport BuildSelectArgs from \"../SelectArgs\";\nimport BuildWhereArgs from \"../WhereArgs\";\n\ntype SubQueryInfo = {\n column: string,\n ins: number[]\n}\n\nclass BuildFindArgs<A extends FindArgs<any> = any> {\n constructor(private args: A, private model: Model<any>, private subQueryInfo?: SubQueryInfo) {\n }\n\n async results() {\n const args = this.args\n const subQueryInfo = this.subQueryInfo\n const model = this.model\n const xansql = model.xansql\n const schema = model.schema()\n const wargs = new BuildWhereArgs(args.where || {}, model)\n const sargs = new BuildSelectArgs((args as any)?.select! || {}, model)\n const largs = new BuildLimitArgs(args.limit || {} as any, model)\n const oargs = new BuildOrderByArgs(args.orderBy || {}, model)\n const distinct = args.distinct || []\n\n if (subQueryInfo) {\n if (!sargs.columns.includes(subQueryInfo.column)) {\n sargs.columns.push(subQueryInfo.column)\n }\n wargs.parts.push(`${model.alias}.${subQueryInfo.column} IN (${subQueryInfo.ins.join(\",\")})`)\n if (distinct.length && !distinct.includes(subQueryInfo.column)) {\n distinct.push(subQueryInfo.column)\n }\n }\n\n let sql = \"\"\n\n if (!distinct.length) {\n sql = `\n SELECT ${sargs.sql}\n FROM ${model.table} as ${model.alias}\n ${wargs.sql} \n ${oargs.sql} \n ${largs.sql}\n `\n if (subQueryInfo && largs.sql) {\n const orderBySql = oargs.sql ? oargs.sql : `ORDER BY ${model.alias}.${model.IDColumn}`\n sql = `\n SELECT ${sargs.columns.join(\", \")}\n FROM (\n SELECT\n ${sargs.sql},\n ROW_NUMBER() OVER (\n PARTITION BY ${model.alias}.${subQueryInfo.column}\n ${orderBySql}\n ) AS rn\n FROM ${model.table} ${model.alias}\n ${wargs.sql}\n ) AS ${model.alias}\n WHERE rn > ${largs.skip} AND rn <= ${largs.take + largs.skip}\n `\n }\n } else {\n const distinctCols = distinct.map(c => `${model.alias}.${c}`).join(\", \");\n const orderBySql = oargs.sql ? oargs.sql : `ORDER BY ${model.alias}.${model.IDColumn}`\n\n sql = `\n SELECT ${sargs.sql}\n FROM (\n SELECT\n ${sargs.sql},\n ROW_NUMBER() OVER (\n PARTITION BY ${distinctCols}\n ${orderBySql}\n ) AS distinct_rn\n FROM ${model.table} ${model.alias}\n ${wargs.sql}\n ) ${model.alias}\n WHERE distinct_rn = 1\n ${orderBySql}\n ${!subQueryInfo && largs.sql ? largs.sql : \"\"}\n `;\n\n if (subQueryInfo && largs.sql) {\n const orderBySql = oargs.sql ? oargs.sql : `ORDER BY ${model.alias}.${model.IDColumn} ASC`;\n sql = `\n SELECT ${sargs.sql}\n FROM (\n SELECT\n ${sargs.sql},\n ROW_NUMBER() OVER (\n PARTITION BY ${model.alias}.${subQueryInfo.column}\n ${orderBySql}\n ) AS rn\n FROM (\n ${sql}\n ) ${model.alias}\n ) ${model.alias}\n WHERE rn > ${largs.skip} AND rn <= ${largs.take + largs.skip}\n ${orderBySql}\n `;\n }\n }\n\n sql = sql.replace(/\\s+/gi, \" \")\n\n // execute model\n const execute = await model.execute(sql, args.debug)\n const results = execute.results\n const rowIds = []\n const rowIndexes: { [id: number]: number } = {}\n const relIds: {\n [column: string]: number[]\n } = {}\n const relIndexes: {\n [column: string]: {\n [id: number]: number\n }\n } = {}\n const relcols = Object.keys(sargs.relations)\n\n for (let i = 0; i < results.length; i++) {\n const row = results[i]\n rowIds.push(row[model.IDColumn])\n rowIndexes[row[model.IDColumn]] = i\n\n for (let col in row) {\n const field: any = schema[col]\n if (!field.isRelation) {\n row[col] = (field as any).value.fromSql(row[col])\n }\n\n if (relcols.length && relcols.includes(col)) {\n if (!relIds[col]) relIds[col] = []\n if (!relIndexes[col]) relIndexes[col] = {}\n\n const rinfo = field.relationInfo\n const id = row[rinfo.self.relation]\n if (id) {\n relIds[col].push(id)\n relIndexes[col][id] = i\n }\n }\n }\n\n // if aggregate exists then set aggregate value 0\n if (args.aggregate) {\n row.aggregate = row.aggregate ?? {}\n for (let rel_col in args.aggregate) {\n const agargs = args.aggregate[rel_col]\n row.aggregate[rel_col] = row.aggregate[rel_col] ?? {}\n for (let col in agargs) {\n const agval = agargs[col]\n for (let func in agval) {\n row.aggregate[rel_col][`${func}_${col}`] = 0\n }\n }\n }\n }\n }\n\n if (results.length && Object.keys(sargs.relations).length) {\n\n // aggregate\n if (args.aggregate) {\n for (let col in args.aggregate) {\n const field = schema[col] as any\n const rinfo = field.relationInfo\n const RModel = xansql.model(field.model)\n const agselect = args.aggregate[col]\n\n if (!agselect || !Object.keys(agselect).length) continue\n const agargs = new BuildAggregateArgs({\n select: agselect,\n groupBy: [rinfo.target.column],\n where: {\n [rinfo.target.column]: {\n [rinfo.self.relation]: {\n in: rowIds\n }\n }\n },\n debug: args.debug\n }, RModel)\n\n const agresults = await agargs.results()\n if (agresults.length) {\n for (let { chunk } of chunkArray(agresults)) {\n for (let ares of chunk) {\n const id = ares[rinfo.target.relation]\n const index = rowIndexes[id]\n delete ares[rinfo.target.column]\n if (!(results as any)[index][\"aggregate\"]) {\n (results as any)[index][\"aggregate\"] = {}\n }\n (results as any)[index][\"aggregate\"][col] = ares\n }\n }\n }\n }\n }\n\n for (let col in sargs.relations) {\n\n const field = schema[col] as XqlRelationMany<any> | XqlRelationOne<any>\n const isMany = field.type === 'relation-many'\n const rinfo = field.relationInfo\n const rel_column = rinfo.target.relation\n const in_ids: number[] = isMany ? rowIds : relIds[col]\n // const indexes: { [id: number]: number } = {}\n // for (let i = 0; i < results.length; i++) {\n // const row = results[i]\n // const id = row[rinfo.self.relation]\n // if (id) {\n // indexes[id] = i\n // in_ids.push(id)\n // }\n // }\n\n if (!in_ids.length) continue\n const RModel = xansql.model(field.model)\n const rargs = sargs.relations[col]\n rargs.debug = args.debug\n const f = new BuildFindArgs(rargs as any, RModel, {\n column: rel_column,\n ins: in_ids\n })\n const rel_results = await f.results()\n\n if (rel_results.length) {\n for (let { chunk } of chunkArray(rel_results)) {\n for (let rres of chunk) {\n if (isMany) {\n const id = rres[rinfo.target.relation]\n const index = rowIndexes[id]\n if (!results[index][rinfo.self.column]) {\n results[index][col] = []\n }\n results[index][rinfo.self.column].push(rres)\n delete rres[rinfo.target.column]\n } else {\n const id = rres[rinfo.target.relation]\n const index = relIndexes[col][id]\n results[index][rinfo.self.column] = rres\n }\n }\n }\n }\n }\n }\n\n return results\n }\n}\n\nexport default BuildFindArgs"],"names":[],"mappings":"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"}
@@ -15,12 +15,14 @@ class BuildWhereArgs {
15
15
  this.model = model;
16
16
  const schema = model.schema();
17
17
  const parts = [];
18
- aliases[model.table] = model.table in aliases ? aliases[model.table] : 0;
18
+ aliases[model.table] = model.table in aliases && aliases[model.table] > 0 ? aliases[model.table] : 0;
19
19
  const alias = `${model.alias}${aliases[model.table] || ""}`;
20
20
  if (Array.isArray(args)) {
21
21
  const _parts = [];
22
22
  for (const arg of args) {
23
- const w_parts = new BuildWhereArgs(arg, model, Object.assign({}, aliases)).parts;
23
+ const _aliases = Object.assign({}, aliases);
24
+ _aliases[model.table] = aliases[model.table] - 1;
25
+ const w_parts = new BuildWhereArgs(arg, model, _aliases).parts;
24
26
  if (w_parts.length) {
25
27
  if (w_parts.length > 1) {
26
28
  _parts.push(`(${w_parts.join(" AND ")})`);
@@ -39,11 +41,13 @@ class BuildWhereArgs {
39
41
  const val = args[col];
40
42
  if (col === "AND") {
41
43
  const andparts = [];
44
+ const _aliases = Object.assign({}, aliases);
45
+ _aliases[model.table] = aliases[model.table] - 1;
42
46
  for (let aargs of val) {
43
47
  if (!Object.keys(aargs).length) {
44
48
  continue;
45
49
  }
46
- const b = new BuildWhereArgs(aargs, model, Object.assign({}, aliases));
50
+ const b = new BuildWhereArgs(aargs, model, _aliases);
47
51
  andparts.push(b.parts.join(" AND "));
48
52
  }
49
53
  if (andparts.length) {
@@ -57,12 +61,14 @@ class BuildWhereArgs {
57
61
  continue;
58
62
  }
59
63
  if (col === "OR") {
64
+ const _aliases = Object.assign({}, aliases);
65
+ _aliases[model.table] = aliases[model.table] - 1;
60
66
  const orparts = [];
61
67
  for (let aargs of val) {
62
68
  if (!Object.keys(aargs).length) {
63
69
  continue;
64
70
  }
65
- const b = new BuildWhereArgs(aargs, model, Object.assign({}, aliases));
71
+ const b = new BuildWhereArgs(aargs, model, _aliases);
66
72
  orparts.push(b.parts.join(" AND "));
67
73
  }
68
74
  if (orparts.length) {
@@ -76,12 +82,14 @@ class BuildWhereArgs {
76
82
  continue;
77
83
  }
78
84
  if (col === "NOT") {
85
+ const _aliases = Object.assign({}, aliases);
86
+ _aliases[model.table] = aliases[model.table] - 1;
79
87
  const notparts = [];
80
88
  for (let aargs of val) {
81
89
  if (!Object.keys(aargs).length) {
82
90
  continue;
83
91
  }
84
- const b = new BuildWhereArgs(aargs, model, Object.assign({}, aliases));
92
+ const b = new BuildWhereArgs(aargs, model, _aliases);
85
93
  notparts.push(b.parts.join(" AND "));
86
94
  }
87
95
  if (notparts.length) {
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs","sources":["../../../../src/model/Build/WhereArgs/index.ts"],"sourcesContent":["import Model from \"../..\";\nimport XansqlError from \"../../../core/XansqlError\";\nimport { isObject } from \"../../../utils\";\nimport { RelationManyInfo } from \"../../../xt/fields/RelationMany\";\nimport ModelWhere from \"../../ModelWhere\";\nimport { SchemaShape, WhereArgs, WhereSubConditionArgs } from \"../../types\";\n\ntype Aliases = {\n [table: string]: number\n}\n\nconst sub_keys = [\"is\", \"not\", \"lt\", \"lte\", \"gt\", \"gte\", \"in\", \"notIn\", \"between\", \"contains\", \"startsWith\", \"endsWith\"]\n\nclass BuildWhereArgs<S extends SchemaShape, M extends Model<any>> {\n readonly parts: string[];\n private model: M\n\n get sql() {\n if (!this.parts.length) return \"\";\n return `WHERE ${this.parts.join(\" AND \")}`;\n }\n\n constructor(args: WhereArgs<S>, model: M, aliases: Aliases = {}) {\n this.model = model\n const schema = model.schema();\n const parts: string[] = [];\n aliases[model.table] = model.table in aliases ? aliases[model.table] : 0\n const alias = `${model.alias}${aliases[model.table] || \"\"}`\n\n if (Array.isArray(args)) {\n const _parts = []\n for (const arg of args) {\n const w_parts = new BuildWhereArgs(arg, model, { ...aliases }).parts\n if (w_parts.length) {\n if (w_parts.length > 1) {\n _parts.push(`(${w_parts.join(\" AND \")})`)\n } else {\n _parts.push(w_parts.join(\" AND \"))\n }\n }\n }\n if (_parts.length) {\n parts.push(_parts.join(\" OR \"))\n }\n } else {\n for (const col in args) {\n const val = args[col];\n\n\n if (col === \"AND\") {\n const andparts = []\n for (let aargs of val as any[]) {\n if (!Object.keys(aargs).length) {\n continue\n }\n const b = new BuildWhereArgs(aargs, model, { ...aliases })\n andparts.push(b.parts.join(\" AND \"))\n }\n if (andparts.length) {\n if (andparts.length > 1) {\n parts.push(`(${andparts.join(\" AND \")})`)\n } else {\n parts.push(andparts.join(\" AND \"))\n }\n }\n continue\n }\n\n if (col === \"OR\") {\n const orparts = []\n for (let aargs of val as any[]) {\n if (!Object.keys(aargs).length) {\n continue\n }\n const b = new BuildWhereArgs(aargs, model, { ...aliases })\n orparts.push(b.parts.join(\" AND \"))\n }\n if (orparts.length) {\n if (orparts.length > 1) {\n parts.push(`(${orparts.join(\" OR \")})`)\n } else {\n parts.push(orparts.join(\" OR \"))\n }\n }\n continue\n }\n\n if (col === \"NOT\") {\n const notparts = []\n for (let aargs of val as any[]) {\n if (!Object.keys(aargs).length) {\n continue\n }\n const b = new BuildWhereArgs(aargs, model, { ...aliases })\n notparts.push(b.parts.join(\" AND \"))\n }\n if (notparts.length) {\n parts.push(`NOT (${notparts.join(\" AND \")})`)\n }\n continue\n }\n\n if (!(col in schema)) {\n throw new XansqlError({\n code: \"NOT_FOUND\",\n model: model.table,\n field: col,\n message: `Unknown column ${col} in ${model.table}`,\n });\n }\n\n const field = schema[col];\n if (field.isRelation) {\n const br = this.buildRelation(field, col, val, alias, aliases)\n br && parts.push(br)\n } else {\n // Array of subconditions → OR\n if (Array.isArray(val)) {\n const subParts: string[] = [];\n for (const subargs of val as any) {\n if (!isObject(subargs)) {\n throw new XansqlError({\n message: \"Invalid argument\",\n code: \"VALIDATION_ERROR\",\n model: model.table,\n field: col,\n params: subargs\n })\n }\n const cond = this.condition(col, subargs, alias, aliases);\n if (cond) {\n const keys = Object.keys(subargs);\n if (keys.length > 1) {\n subParts.push(`(${cond})`);\n } else {\n subParts.push(cond);\n }\n }\n }\n\n if (subParts.length) {\n const keys = Object.keys(val);\n if (keys.length > 1) {\n parts.push(`(${subParts.join(\" OR \")})`);\n } else {\n parts.push(`${subParts.join(\" OR \")}`);\n }\n }\n } else if (isObject(val)) {\n const cond = this.condition(col, val, alias, aliases);\n if (cond) {\n const keys = Object.keys(val);\n if (keys.length > 1) {\n parts.push(`(${cond})`);\n } else {\n parts.push(cond);\n }\n }\n } else {\n parts.push(`${alias}.${col}=${this.format(col, val)}`);\n }\n }\n }\n }\n aliases[model.table] = aliases[model.table] + 1\n this.parts = parts;\n }\n\n\n private buildRelation(field: any, col: string, val: any, alias: string, aliases: Aliases) {\n const model = this.model\n const xansql = model.xansql\n const relArgs = val as WhereArgs<any>;\n const RModel = xansql.model(field.model);\n const parts: string[] = [];\n aliases[RModel.table] = RModel.table in aliases ? aliases[RModel.table] + 1 : 0\n const ralias = `${RModel.alias}${aliases[RModel.table] || \"\"}`\n const rinfo = field.relationInfo as RelationManyInfo\n const relationSql = `${alias}.${rinfo.self.relation}=${ralias}.${rinfo.target.relation}`\n\n if (Array.isArray(relArgs)) {\n const _parts = []\n for (const rargs of relArgs) {\n if (!isObject(rargs)) { }\n const b = this.buildRelation(field, col, rargs, alias, aliases)\n _parts.push(`(${b})`)\n }\n if (_parts.length) {\n parts.push(_parts.join(\" OR \"))\n }\n } else {\n const _sparts: string[] = []\n let _args: { [col: string]: any } = {}\n if (field.type === \"relation-one\") {\n if (relArgs === null) {\n parts.push(`${alias}.${col} IS NULL`);\n } else if (typeof relArgs === \"number\") {\n parts.push(`${alias}.${col}=${this.format(col, val)}`);\n } else {\n const _subargs: { [col: string]: any } = {}\n for (let col in relArgs) {\n const val = relArgs[col]\n if (sub_keys.includes(col)) {\n _subargs[col] = val\n } else {\n _args[col] = val\n }\n }\n\n if (Object.keys(_subargs).length) {\n const cond = this.condition(col, _subargs, alias, aliases);\n if (cond) {\n _sparts.push(cond)\n }\n }\n }\n } else {\n _args = relArgs\n }\n\n if (Object.keys(_args).length) {\n const relWhere = new BuildWhereArgs(_args, RModel, aliases);\n const relSql = relWhere.parts.join(\" AND \");\n _sparts.push(\n `EXISTS (SELECT 1 FROM ${RModel.table} as ${ralias} WHERE ${relationSql}${relSql ? ` AND ${relSql}` : \"\"})`\n );\n }\n if (_sparts.length) {\n parts.push(_sparts.join(\" AND \"))\n }\n }\n\n return parts.join(\" AND \")\n }\n\n private condition(column: string, subargs: WhereSubConditionArgs<any>, alias: string, aliases: Aliases) {\n const parts: string[] = [];\n const col_name = `${alias}.${column}`\n const model = this.model\n const engin = model.xansql.dialect.engine\n\n for (const key in subargs) {\n const val = (subargs as any)[key];\n\n switch (key) {\n case \"is\":\n if (val === null) {\n parts.push(`${col_name} IS NULL`);\n } else {\n parts.push(`${col_name} = ${this.format(column, val)}`);\n }\n break;\n case \"not\":\n if (Array.isArray(val)) {\n const notParts: string[] = [];\n for (const v of val) {\n if (!isObject(v)) {\n throw new XansqlError({\n code: \"QUERY_ERROR\",\n message: \"Invalid where condition\",\n field: column,\n model: this.model.table,\n })\n }\n const cond = this.condition(column, v as WhereSubConditionArgs<any>, alias, aliases);\n if (cond) {\n const keys = Object.keys(v);\n if (keys.length > 1) {\n notParts.push(`(${cond})`)\n } else {\n notParts.push(cond)\n }\n }\n }\n if (notParts.length) {\n parts.push(`NOT (${notParts.join(\" OR \")})`);\n }\n } else if (isObject(val)) {\n parts.push(`NOT (${this.condition(column, val, alias, aliases)})`);\n } else if (val === null) {\n parts.push(`${col_name} IS NOT NULL`)\n } else {\n parts.push(`${col_name} != ${this.format(column, val)}`);\n }\n break;\n\n case \"lt\":\n parts.push(`${col_name} < ${this.format(column, val)}`);\n break;\n\n case \"lte\":\n parts.push(`${col_name} <= ${this.format(column, val)}`);\n break;\n\n case \"gt\":\n parts.push(`${col_name} > ${this.format(column, val)}`);\n break;\n\n case \"gte\":\n parts.push(`${col_name} >= ${this.format(column, val)}`);\n break;\n\n case \"in\":\n if (val instanceof ModelWhere) {\n const RModel = val.model\n aliases[RModel.table] = RModel.table in aliases ? aliases[RModel.table] + 1 : 0\n const ralias = `${RModel.alias}${aliases[RModel.table] || \"\"}`\n const wargs = new BuildWhereArgs(val.where || {}, RModel, aliases)\n\n parts.push(\n `EXISTS (\n SELECT 1\n FROM ${val.model.table} AS ${ralias}\n ${wargs.sql ? wargs.sql + \" AND \" : \"WHERE \"}\n ${ralias}.${String(val.inColumn)} = ${col_name}\n )`\n );\n } else if (val?.length) {\n parts.push(\n `${col_name} IN (${val.map((v: any) => this.format(column, v)).join(\", \")})`\n );\n }\n break;\n\n case \"notIn\":\n if (val instanceof ModelWhere) {\n const RModel = val.model\n aliases[RModel.table] = RModel.table in aliases ? aliases[RModel.table] + 1 : 0\n const ralias = `${RModel.alias}${aliases[RModel.table] || \"\"}`\n const wargs = new BuildWhereArgs(val.where || {}, RModel, aliases)\n parts.push(\n `NOT EXISTS (\n SELECT 1\n FROM ${val.model.table} AS ${ralias}\n ${wargs.sql ? wargs.sql + \" AND \" : \"WHERE \"}\n ${ralias}.${String(val.inColumn)} = ${col_name}\n )`\n );\n } else if (val?.length) {\n parts.push(\n `${col_name} NOT IN (${val.map((v: any) => this.format(column, v)).join(\", \")})`\n );\n }\n break;\n\n case \"between\":\n parts.push(\n `${col_name} BETWEEN ${this.format(column, val[0])} AND ${this.format(column, val[1])}`\n );\n break;\n\n case \"contains\":\n let csql = `${col_name} LIKE ${this.format(column, `%${val}%`, false)}`\n if ((subargs as any).mode === \"insensitive\") {\n if (engin === \"postgres\") {\n csql = `${col_name} ILIKE ${this.format(column, `%${val}%`, false)}`\n } else {\n csql = `LOWER(${col_name}) LIKE LOWER(${this.format(column, `%${val}%`, false)})`\n }\n }\n parts.push(csql);\n break;\n\n case \"startsWith\":\n let ssql = `${col_name} LIKE ${this.format(column, `${val}%`, false)}`\n if ((subargs as any).mode === \"insensitive\") {\n if (engin === \"postgres\") {\n ssql = `${col_name} ILIKE ${this.format(column, `${val}%`, false)}`\n } else {\n ssql = `LOWER(${col_name}) LIKE LOWER(${this.format(column, `${val}%`, false)})`\n }\n }\n parts.push(ssql);\n break;\n\n case \"endsWith\":\n let esql = `${col_name} LIKE ${this.format(column, `%${val}`, false)}`\n if ((subargs as any).mode === \"insensitive\") {\n if (engin === \"postgres\") {\n esql = `${col_name} ILIKE ${this.format(column, `%${val}`, false)}`\n } else {\n esql = `LOWER(${col_name}) LIKE LOWER(${this.format(column, `%${val}`, false)})`\n }\n }\n parts.push(esql);\n break;\n }\n }\n\n return parts.join(\" AND \");\n }\n\n private format(column: string, value: any, parse = true) {\n const model = this.model;\n const schema = model.schema()\n const field = schema[column];\n\n if (field.type === 'relation-one') {\n if (typeof value == \"number\" || value === null) {\n return value\n } else {\n throw new XansqlError({\n code: \"VALIDATION_ERROR\",\n message: `Invalid value for relation field \"${column}\" in table \"${model.table}\". Expected a number or null, received ${typeof value}.`,\n model: model.table,\n field: column\n })\n }\n }\n\n if (parse) {\n try {\n value = field.parse(value)\n } catch (error: any) {\n throw new XansqlError({\n code: \"VALIDATION_ERROR\",\n model: model.table,\n field: column,\n sql: `${column}=${value}`,\n message: error.message\n });\n }\n }\n\n if (value instanceof Date) {\n return `'${value.toISOString()}'`;\n }\n\n if (typeof value === \"string\") {\n return `'${value.replace(/'/g, \"''\")}'`;\n }\n\n if (typeof value === \"boolean\") {\n return value ? \"TRUE\" : \"FALSE\";\n }\n\n if (value === null) {\n return \"NULL\";\n }\n\n return value;\n }\n\n}\n\nexport default BuildWhereArgs;\n"],"names":["isObject"],"mappings":"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"}
1
+ {"version":3,"file":"index.cjs","sources":["../../../../src/model/Build/WhereArgs/index.ts"],"sourcesContent":["import Model from \"../..\";\nimport XansqlError from \"../../../core/XansqlError\";\nimport { isObject } from \"../../../utils\";\nimport { RelationManyInfo } from \"../../../xt/fields/RelationMany\";\nimport ModelWhere from \"../../ModelWhere\";\nimport { SchemaShape, WhereArgs, WhereSubConditionArgs } from \"../../types\";\n\ntype Aliases = {\n [table: string]: number\n}\n\nconst sub_keys = [\"is\", \"not\", \"lt\", \"lte\", \"gt\", \"gte\", \"in\", \"notIn\", \"between\", \"contains\", \"startsWith\", \"endsWith\"]\n\nclass BuildWhereArgs<S extends SchemaShape, M extends Model<any>> {\n readonly parts: string[];\n private model: M\n\n get sql() {\n if (!this.parts.length) return \"\";\n return `WHERE ${this.parts.join(\" AND \")}`;\n }\n\n constructor(args: WhereArgs<S>, model: M, aliases: Aliases = {}) {\n this.model = model\n const schema = model.schema();\n const parts: string[] = [];\n aliases[model.table] = model.table in aliases && aliases[model.table] > 0 ? aliases[model.table] : 0\n const alias = `${model.alias}${aliases[model.table] || \"\"}`\n\n if (Array.isArray(args)) {\n const _parts = []\n for (const arg of args) {\n const _aliases = { ...aliases }\n _aliases[model.table] = aliases[model.table] - 1\n\n const w_parts = new BuildWhereArgs(arg, model, _aliases).parts\n if (w_parts.length) {\n if (w_parts.length > 1) {\n _parts.push(`(${w_parts.join(\" AND \")})`)\n } else {\n _parts.push(w_parts.join(\" AND \"))\n }\n }\n }\n if (_parts.length) {\n parts.push(_parts.join(\" OR \"))\n }\n } else {\n for (const col in args) {\n const val = args[col];\n\n if (col === \"AND\") {\n const andparts = []\n const _aliases = { ...aliases }\n _aliases[model.table] = aliases[model.table] - 1\n\n for (let aargs of val as any[]) {\n if (!Object.keys(aargs).length) {\n continue\n }\n const b = new BuildWhereArgs(aargs, model, _aliases)\n andparts.push(b.parts.join(\" AND \"))\n }\n if (andparts.length) {\n if (andparts.length > 1) {\n parts.push(`(${andparts.join(\" AND \")})`)\n } else {\n parts.push(andparts.join(\" AND \"))\n }\n }\n continue\n }\n\n if (col === \"OR\") {\n const _aliases = { ...aliases }\n _aliases[model.table] = aliases[model.table] - 1\n\n const orparts = []\n for (let aargs of val as any[]) {\n if (!Object.keys(aargs).length) {\n continue\n }\n const b = new BuildWhereArgs(aargs, model, _aliases)\n orparts.push(b.parts.join(\" AND \"))\n }\n if (orparts.length) {\n if (orparts.length > 1) {\n parts.push(`(${orparts.join(\" OR \")})`)\n } else {\n parts.push(orparts.join(\" OR \"))\n }\n }\n continue\n }\n\n if (col === \"NOT\") {\n const _aliases = { ...aliases }\n _aliases[model.table] = aliases[model.table] - 1\n\n const notparts = []\n for (let aargs of val as any[]) {\n if (!Object.keys(aargs).length) {\n continue\n }\n const b = new BuildWhereArgs(aargs, model, _aliases)\n notparts.push(b.parts.join(\" AND \"))\n }\n if (notparts.length) {\n parts.push(`NOT (${notparts.join(\" AND \")})`)\n }\n continue\n }\n\n if (!(col in schema)) {\n throw new XansqlError({\n code: \"NOT_FOUND\",\n model: model.table,\n field: col,\n message: `Unknown column ${col} in ${model.table}`,\n });\n }\n\n const field = schema[col];\n if (field.isRelation) {\n const br = this.buildRelation(field, col, val, alias, aliases)\n br && parts.push(br)\n } else {\n // Array of subconditions → OR\n if (Array.isArray(val)) {\n const subParts: string[] = [];\n for (const subargs of val as any) {\n if (!isObject(subargs)) {\n throw new XansqlError({\n message: \"Invalid argument\",\n code: \"VALIDATION_ERROR\",\n model: model.table,\n field: col,\n params: subargs\n })\n }\n const cond = this.condition(col, subargs, alias, aliases);\n if (cond) {\n const keys = Object.keys(subargs);\n if (keys.length > 1) {\n subParts.push(`(${cond})`);\n } else {\n subParts.push(cond);\n }\n }\n }\n\n if (subParts.length) {\n const keys = Object.keys(val);\n if (keys.length > 1) {\n parts.push(`(${subParts.join(\" OR \")})`);\n } else {\n parts.push(`${subParts.join(\" OR \")}`);\n }\n }\n } else if (isObject(val)) {\n const cond = this.condition(col, val, alias, aliases);\n if (cond) {\n const keys = Object.keys(val);\n if (keys.length > 1) {\n parts.push(`(${cond})`);\n } else {\n parts.push(cond);\n }\n }\n } else {\n parts.push(`${alias}.${col}=${this.format(col, val)}`);\n }\n }\n }\n }\n aliases[model.table] = aliases[model.table] + 1\n this.parts = parts;\n }\n\n\n private buildRelation(field: any, col: string, val: any, alias: string, aliases: Aliases) {\n const model = this.model\n const xansql = model.xansql\n const relArgs = val as WhereArgs<any>;\n const RModel = xansql.model(field.model);\n const parts: string[] = [];\n aliases[RModel.table] = RModel.table in aliases ? aliases[RModel.table] + 1 : 0\n const ralias = `${RModel.alias}${aliases[RModel.table] || \"\"}`\n const rinfo = field.relationInfo as RelationManyInfo\n const relationSql = `${alias}.${rinfo.self.relation}=${ralias}.${rinfo.target.relation}`\n\n if (Array.isArray(relArgs)) {\n const _parts = []\n for (const rargs of relArgs) {\n if (!isObject(rargs)) { }\n const b = this.buildRelation(field, col, rargs, alias, aliases)\n _parts.push(`(${b})`)\n }\n if (_parts.length) {\n parts.push(_parts.join(\" OR \"))\n }\n } else {\n const _sparts: string[] = []\n let _args: { [col: string]: any } = {}\n if (field.type === \"relation-one\") {\n if (relArgs === null) {\n parts.push(`${alias}.${col} IS NULL`);\n } else if (typeof relArgs === \"number\") {\n parts.push(`${alias}.${col}=${this.format(col, val)}`);\n } else {\n const _subargs: { [col: string]: any } = {}\n for (let col in relArgs) {\n const val = relArgs[col]\n if (sub_keys.includes(col)) {\n _subargs[col] = val\n } else {\n _args[col] = val\n }\n }\n\n if (Object.keys(_subargs).length) {\n const cond = this.condition(col, _subargs, alias, aliases);\n if (cond) {\n _sparts.push(cond)\n }\n }\n }\n } else {\n _args = relArgs\n }\n\n if (Object.keys(_args).length) {\n const relWhere = new BuildWhereArgs(_args, RModel, aliases);\n const relSql = relWhere.parts.join(\" AND \");\n _sparts.push(\n `EXISTS (SELECT 1 FROM ${RModel.table} as ${ralias} WHERE ${relationSql}${relSql ? ` AND ${relSql}` : \"\"})`\n );\n }\n if (_sparts.length) {\n parts.push(_sparts.join(\" AND \"))\n }\n }\n\n return parts.join(\" AND \")\n }\n\n private condition(column: string, subargs: WhereSubConditionArgs<any>, alias: string, aliases: Aliases) {\n const parts: string[] = [];\n const col_name = `${alias}.${column}`\n const model = this.model\n const engin = model.xansql.dialect.engine\n\n for (const key in subargs) {\n const val = (subargs as any)[key];\n\n switch (key) {\n case \"is\":\n if (val === null) {\n parts.push(`${col_name} IS NULL`);\n } else {\n parts.push(`${col_name} = ${this.format(column, val)}`);\n }\n break;\n case \"not\":\n if (Array.isArray(val)) {\n const notParts: string[] = [];\n for (const v of val) {\n if (!isObject(v)) {\n throw new XansqlError({\n code: \"QUERY_ERROR\",\n message: \"Invalid where condition\",\n field: column,\n model: this.model.table,\n })\n }\n const cond = this.condition(column, v as WhereSubConditionArgs<any>, alias, aliases);\n if (cond) {\n const keys = Object.keys(v);\n if (keys.length > 1) {\n notParts.push(`(${cond})`)\n } else {\n notParts.push(cond)\n }\n }\n }\n if (notParts.length) {\n parts.push(`NOT (${notParts.join(\" OR \")})`);\n }\n } else if (isObject(val)) {\n parts.push(`NOT (${this.condition(column, val, alias, aliases)})`);\n } else if (val === null) {\n parts.push(`${col_name} IS NOT NULL`)\n } else {\n parts.push(`${col_name} != ${this.format(column, val)}`);\n }\n break;\n\n case \"lt\":\n parts.push(`${col_name} < ${this.format(column, val)}`);\n break;\n\n case \"lte\":\n parts.push(`${col_name} <= ${this.format(column, val)}`);\n break;\n\n case \"gt\":\n parts.push(`${col_name} > ${this.format(column, val)}`);\n break;\n\n case \"gte\":\n parts.push(`${col_name} >= ${this.format(column, val)}`);\n break;\n\n case \"in\":\n if (val instanceof ModelWhere) {\n const RModel = val.model\n aliases[RModel.table] = RModel.table in aliases ? aliases[RModel.table] + 1 : 0\n const ralias = `${RModel.alias}${aliases[RModel.table] || \"\"}`\n const wargs = new BuildWhereArgs(val.where || {}, RModel, aliases)\n\n parts.push(\n `EXISTS (\n SELECT 1\n FROM ${val.model.table} AS ${ralias}\n ${wargs.sql ? wargs.sql + \" AND \" : \"WHERE \"}\n ${ralias}.${String(val.inColumn)} = ${col_name}\n )`\n );\n } else if (val?.length) {\n parts.push(\n `${col_name} IN (${val.map((v: any) => this.format(column, v)).join(\", \")})`\n );\n }\n break;\n\n case \"notIn\":\n if (val instanceof ModelWhere) {\n const RModel = val.model\n aliases[RModel.table] = RModel.table in aliases ? aliases[RModel.table] + 1 : 0\n const ralias = `${RModel.alias}${aliases[RModel.table] || \"\"}`\n const wargs = new BuildWhereArgs(val.where || {}, RModel, aliases)\n parts.push(\n `NOT EXISTS (\n SELECT 1\n FROM ${val.model.table} AS ${ralias}\n ${wargs.sql ? wargs.sql + \" AND \" : \"WHERE \"}\n ${ralias}.${String(val.inColumn)} = ${col_name}\n )`\n );\n } else if (val?.length) {\n parts.push(\n `${col_name} NOT IN (${val.map((v: any) => this.format(column, v)).join(\", \")})`\n );\n }\n break;\n\n case \"between\":\n parts.push(\n `${col_name} BETWEEN ${this.format(column, val[0])} AND ${this.format(column, val[1])}`\n );\n break;\n\n case \"contains\":\n let csql = `${col_name} LIKE ${this.format(column, `%${val}%`, false)}`\n if ((subargs as any).mode === \"insensitive\") {\n if (engin === \"postgres\") {\n csql = `${col_name} ILIKE ${this.format(column, `%${val}%`, false)}`\n } else {\n csql = `LOWER(${col_name}) LIKE LOWER(${this.format(column, `%${val}%`, false)})`\n }\n }\n parts.push(csql);\n break;\n\n case \"startsWith\":\n let ssql = `${col_name} LIKE ${this.format(column, `${val}%`, false)}`\n if ((subargs as any).mode === \"insensitive\") {\n if (engin === \"postgres\") {\n ssql = `${col_name} ILIKE ${this.format(column, `${val}%`, false)}`\n } else {\n ssql = `LOWER(${col_name}) LIKE LOWER(${this.format(column, `${val}%`, false)})`\n }\n }\n parts.push(ssql);\n break;\n\n case \"endsWith\":\n let esql = `${col_name} LIKE ${this.format(column, `%${val}`, false)}`\n if ((subargs as any).mode === \"insensitive\") {\n if (engin === \"postgres\") {\n esql = `${col_name} ILIKE ${this.format(column, `%${val}`, false)}`\n } else {\n esql = `LOWER(${col_name}) LIKE LOWER(${this.format(column, `%${val}`, false)})`\n }\n }\n parts.push(esql);\n break;\n }\n }\n\n return parts.join(\" AND \");\n }\n\n private format(column: string, value: any, parse = true) {\n const model = this.model;\n const schema = model.schema()\n const field = schema[column];\n\n if (field.type === 'relation-one') {\n if (typeof value == \"number\" || value === null) {\n return value\n } else {\n throw new XansqlError({\n code: \"VALIDATION_ERROR\",\n message: `Invalid value for relation field \"${column}\" in table \"${model.table}\". Expected a number or null, received ${typeof value}.`,\n model: model.table,\n field: column\n })\n }\n }\n\n if (parse) {\n try {\n value = field.parse(value)\n } catch (error: any) {\n throw new XansqlError({\n code: \"VALIDATION_ERROR\",\n model: model.table,\n field: column,\n sql: `${column}=${value}`,\n message: error.message\n });\n }\n }\n\n if (value instanceof Date) {\n return `'${value.toISOString()}'`;\n }\n\n if (typeof value === \"string\") {\n return `'${value.replace(/'/g, \"''\")}'`;\n }\n\n if (typeof value === \"boolean\") {\n return value ? \"TRUE\" : \"FALSE\";\n }\n\n if (value === null) {\n return \"NULL\";\n }\n\n return value;\n }\n\n}\n\nexport default BuildWhereArgs;\n"],"names":["isObject"],"mappings":"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"}
@@ -13,12 +13,14 @@ class BuildWhereArgs {
13
13
  this.model = model;
14
14
  const schema = model.schema();
15
15
  const parts = [];
16
- aliases[model.table] = model.table in aliases ? aliases[model.table] : 0;
16
+ aliases[model.table] = model.table in aliases && aliases[model.table] > 0 ? aliases[model.table] : 0;
17
17
  const alias = `${model.alias}${aliases[model.table] || ""}`;
18
18
  if (Array.isArray(args)) {
19
19
  const _parts = [];
20
20
  for (const arg of args) {
21
- const w_parts = new BuildWhereArgs(arg, model, Object.assign({}, aliases)).parts;
21
+ const _aliases = Object.assign({}, aliases);
22
+ _aliases[model.table] = aliases[model.table] - 1;
23
+ const w_parts = new BuildWhereArgs(arg, model, _aliases).parts;
22
24
  if (w_parts.length) {
23
25
  if (w_parts.length > 1) {
24
26
  _parts.push(`(${w_parts.join(" AND ")})`);
@@ -37,11 +39,13 @@ class BuildWhereArgs {
37
39
  const val = args[col];
38
40
  if (col === "AND") {
39
41
  const andparts = [];
42
+ const _aliases = Object.assign({}, aliases);
43
+ _aliases[model.table] = aliases[model.table] - 1;
40
44
  for (let aargs of val) {
41
45
  if (!Object.keys(aargs).length) {
42
46
  continue;
43
47
  }
44
- const b = new BuildWhereArgs(aargs, model, Object.assign({}, aliases));
48
+ const b = new BuildWhereArgs(aargs, model, _aliases);
45
49
  andparts.push(b.parts.join(" AND "));
46
50
  }
47
51
  if (andparts.length) {
@@ -55,12 +59,14 @@ class BuildWhereArgs {
55
59
  continue;
56
60
  }
57
61
  if (col === "OR") {
62
+ const _aliases = Object.assign({}, aliases);
63
+ _aliases[model.table] = aliases[model.table] - 1;
58
64
  const orparts = [];
59
65
  for (let aargs of val) {
60
66
  if (!Object.keys(aargs).length) {
61
67
  continue;
62
68
  }
63
- const b = new BuildWhereArgs(aargs, model, Object.assign({}, aliases));
69
+ const b = new BuildWhereArgs(aargs, model, _aliases);
64
70
  orparts.push(b.parts.join(" AND "));
65
71
  }
66
72
  if (orparts.length) {
@@ -74,12 +80,14 @@ class BuildWhereArgs {
74
80
  continue;
75
81
  }
76
82
  if (col === "NOT") {
83
+ const _aliases = Object.assign({}, aliases);
84
+ _aliases[model.table] = aliases[model.table] - 1;
77
85
  const notparts = [];
78
86
  for (let aargs of val) {
79
87
  if (!Object.keys(aargs).length) {
80
88
  continue;
81
89
  }
82
- const b = new BuildWhereArgs(aargs, model, Object.assign({}, aliases));
90
+ const b = new BuildWhereArgs(aargs, model, _aliases);
83
91
  notparts.push(b.parts.join(" AND "));
84
92
  }
85
93
  if (notparts.length) {
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../../../src/model/Build/WhereArgs/index.ts"],"sourcesContent":["import Model from \"../..\";\nimport XansqlError from \"../../../core/XansqlError\";\nimport { isObject } from \"../../../utils\";\nimport { RelationManyInfo } from \"../../../xt/fields/RelationMany\";\nimport ModelWhere from \"../../ModelWhere\";\nimport { SchemaShape, WhereArgs, WhereSubConditionArgs } from \"../../types\";\n\ntype Aliases = {\n [table: string]: number\n}\n\nconst sub_keys = [\"is\", \"not\", \"lt\", \"lte\", \"gt\", \"gte\", \"in\", \"notIn\", \"between\", \"contains\", \"startsWith\", \"endsWith\"]\n\nclass BuildWhereArgs<S extends SchemaShape, M extends Model<any>> {\n readonly parts: string[];\n private model: M\n\n get sql() {\n if (!this.parts.length) return \"\";\n return `WHERE ${this.parts.join(\" AND \")}`;\n }\n\n constructor(args: WhereArgs<S>, model: M, aliases: Aliases = {}) {\n this.model = model\n const schema = model.schema();\n const parts: string[] = [];\n aliases[model.table] = model.table in aliases ? aliases[model.table] : 0\n const alias = `${model.alias}${aliases[model.table] || \"\"}`\n\n if (Array.isArray(args)) {\n const _parts = []\n for (const arg of args) {\n const w_parts = new BuildWhereArgs(arg, model, { ...aliases }).parts\n if (w_parts.length) {\n if (w_parts.length > 1) {\n _parts.push(`(${w_parts.join(\" AND \")})`)\n } else {\n _parts.push(w_parts.join(\" AND \"))\n }\n }\n }\n if (_parts.length) {\n parts.push(_parts.join(\" OR \"))\n }\n } else {\n for (const col in args) {\n const val = args[col];\n\n\n if (col === \"AND\") {\n const andparts = []\n for (let aargs of val as any[]) {\n if (!Object.keys(aargs).length) {\n continue\n }\n const b = new BuildWhereArgs(aargs, model, { ...aliases })\n andparts.push(b.parts.join(\" AND \"))\n }\n if (andparts.length) {\n if (andparts.length > 1) {\n parts.push(`(${andparts.join(\" AND \")})`)\n } else {\n parts.push(andparts.join(\" AND \"))\n }\n }\n continue\n }\n\n if (col === \"OR\") {\n const orparts = []\n for (let aargs of val as any[]) {\n if (!Object.keys(aargs).length) {\n continue\n }\n const b = new BuildWhereArgs(aargs, model, { ...aliases })\n orparts.push(b.parts.join(\" AND \"))\n }\n if (orparts.length) {\n if (orparts.length > 1) {\n parts.push(`(${orparts.join(\" OR \")})`)\n } else {\n parts.push(orparts.join(\" OR \"))\n }\n }\n continue\n }\n\n if (col === \"NOT\") {\n const notparts = []\n for (let aargs of val as any[]) {\n if (!Object.keys(aargs).length) {\n continue\n }\n const b = new BuildWhereArgs(aargs, model, { ...aliases })\n notparts.push(b.parts.join(\" AND \"))\n }\n if (notparts.length) {\n parts.push(`NOT (${notparts.join(\" AND \")})`)\n }\n continue\n }\n\n if (!(col in schema)) {\n throw new XansqlError({\n code: \"NOT_FOUND\",\n model: model.table,\n field: col,\n message: `Unknown column ${col} in ${model.table}`,\n });\n }\n\n const field = schema[col];\n if (field.isRelation) {\n const br = this.buildRelation(field, col, val, alias, aliases)\n br && parts.push(br)\n } else {\n // Array of subconditions → OR\n if (Array.isArray(val)) {\n const subParts: string[] = [];\n for (const subargs of val as any) {\n if (!isObject(subargs)) {\n throw new XansqlError({\n message: \"Invalid argument\",\n code: \"VALIDATION_ERROR\",\n model: model.table,\n field: col,\n params: subargs\n })\n }\n const cond = this.condition(col, subargs, alias, aliases);\n if (cond) {\n const keys = Object.keys(subargs);\n if (keys.length > 1) {\n subParts.push(`(${cond})`);\n } else {\n subParts.push(cond);\n }\n }\n }\n\n if (subParts.length) {\n const keys = Object.keys(val);\n if (keys.length > 1) {\n parts.push(`(${subParts.join(\" OR \")})`);\n } else {\n parts.push(`${subParts.join(\" OR \")}`);\n }\n }\n } else if (isObject(val)) {\n const cond = this.condition(col, val, alias, aliases);\n if (cond) {\n const keys = Object.keys(val);\n if (keys.length > 1) {\n parts.push(`(${cond})`);\n } else {\n parts.push(cond);\n }\n }\n } else {\n parts.push(`${alias}.${col}=${this.format(col, val)}`);\n }\n }\n }\n }\n aliases[model.table] = aliases[model.table] + 1\n this.parts = parts;\n }\n\n\n private buildRelation(field: any, col: string, val: any, alias: string, aliases: Aliases) {\n const model = this.model\n const xansql = model.xansql\n const relArgs = val as WhereArgs<any>;\n const RModel = xansql.model(field.model);\n const parts: string[] = [];\n aliases[RModel.table] = RModel.table in aliases ? aliases[RModel.table] + 1 : 0\n const ralias = `${RModel.alias}${aliases[RModel.table] || \"\"}`\n const rinfo = field.relationInfo as RelationManyInfo\n const relationSql = `${alias}.${rinfo.self.relation}=${ralias}.${rinfo.target.relation}`\n\n if (Array.isArray(relArgs)) {\n const _parts = []\n for (const rargs of relArgs) {\n if (!isObject(rargs)) { }\n const b = this.buildRelation(field, col, rargs, alias, aliases)\n _parts.push(`(${b})`)\n }\n if (_parts.length) {\n parts.push(_parts.join(\" OR \"))\n }\n } else {\n const _sparts: string[] = []\n let _args: { [col: string]: any } = {}\n if (field.type === \"relation-one\") {\n if (relArgs === null) {\n parts.push(`${alias}.${col} IS NULL`);\n } else if (typeof relArgs === \"number\") {\n parts.push(`${alias}.${col}=${this.format(col, val)}`);\n } else {\n const _subargs: { [col: string]: any } = {}\n for (let col in relArgs) {\n const val = relArgs[col]\n if (sub_keys.includes(col)) {\n _subargs[col] = val\n } else {\n _args[col] = val\n }\n }\n\n if (Object.keys(_subargs).length) {\n const cond = this.condition(col, _subargs, alias, aliases);\n if (cond) {\n _sparts.push(cond)\n }\n }\n }\n } else {\n _args = relArgs\n }\n\n if (Object.keys(_args).length) {\n const relWhere = new BuildWhereArgs(_args, RModel, aliases);\n const relSql = relWhere.parts.join(\" AND \");\n _sparts.push(\n `EXISTS (SELECT 1 FROM ${RModel.table} as ${ralias} WHERE ${relationSql}${relSql ? ` AND ${relSql}` : \"\"})`\n );\n }\n if (_sparts.length) {\n parts.push(_sparts.join(\" AND \"))\n }\n }\n\n return parts.join(\" AND \")\n }\n\n private condition(column: string, subargs: WhereSubConditionArgs<any>, alias: string, aliases: Aliases) {\n const parts: string[] = [];\n const col_name = `${alias}.${column}`\n const model = this.model\n const engin = model.xansql.dialect.engine\n\n for (const key in subargs) {\n const val = (subargs as any)[key];\n\n switch (key) {\n case \"is\":\n if (val === null) {\n parts.push(`${col_name} IS NULL`);\n } else {\n parts.push(`${col_name} = ${this.format(column, val)}`);\n }\n break;\n case \"not\":\n if (Array.isArray(val)) {\n const notParts: string[] = [];\n for (const v of val) {\n if (!isObject(v)) {\n throw new XansqlError({\n code: \"QUERY_ERROR\",\n message: \"Invalid where condition\",\n field: column,\n model: this.model.table,\n })\n }\n const cond = this.condition(column, v as WhereSubConditionArgs<any>, alias, aliases);\n if (cond) {\n const keys = Object.keys(v);\n if (keys.length > 1) {\n notParts.push(`(${cond})`)\n } else {\n notParts.push(cond)\n }\n }\n }\n if (notParts.length) {\n parts.push(`NOT (${notParts.join(\" OR \")})`);\n }\n } else if (isObject(val)) {\n parts.push(`NOT (${this.condition(column, val, alias, aliases)})`);\n } else if (val === null) {\n parts.push(`${col_name} IS NOT NULL`)\n } else {\n parts.push(`${col_name} != ${this.format(column, val)}`);\n }\n break;\n\n case \"lt\":\n parts.push(`${col_name} < ${this.format(column, val)}`);\n break;\n\n case \"lte\":\n parts.push(`${col_name} <= ${this.format(column, val)}`);\n break;\n\n case \"gt\":\n parts.push(`${col_name} > ${this.format(column, val)}`);\n break;\n\n case \"gte\":\n parts.push(`${col_name} >= ${this.format(column, val)}`);\n break;\n\n case \"in\":\n if (val instanceof ModelWhere) {\n const RModel = val.model\n aliases[RModel.table] = RModel.table in aliases ? aliases[RModel.table] + 1 : 0\n const ralias = `${RModel.alias}${aliases[RModel.table] || \"\"}`\n const wargs = new BuildWhereArgs(val.where || {}, RModel, aliases)\n\n parts.push(\n `EXISTS (\n SELECT 1\n FROM ${val.model.table} AS ${ralias}\n ${wargs.sql ? wargs.sql + \" AND \" : \"WHERE \"}\n ${ralias}.${String(val.inColumn)} = ${col_name}\n )`\n );\n } else if (val?.length) {\n parts.push(\n `${col_name} IN (${val.map((v: any) => this.format(column, v)).join(\", \")})`\n );\n }\n break;\n\n case \"notIn\":\n if (val instanceof ModelWhere) {\n const RModel = val.model\n aliases[RModel.table] = RModel.table in aliases ? aliases[RModel.table] + 1 : 0\n const ralias = `${RModel.alias}${aliases[RModel.table] || \"\"}`\n const wargs = new BuildWhereArgs(val.where || {}, RModel, aliases)\n parts.push(\n `NOT EXISTS (\n SELECT 1\n FROM ${val.model.table} AS ${ralias}\n ${wargs.sql ? wargs.sql + \" AND \" : \"WHERE \"}\n ${ralias}.${String(val.inColumn)} = ${col_name}\n )`\n );\n } else if (val?.length) {\n parts.push(\n `${col_name} NOT IN (${val.map((v: any) => this.format(column, v)).join(\", \")})`\n );\n }\n break;\n\n case \"between\":\n parts.push(\n `${col_name} BETWEEN ${this.format(column, val[0])} AND ${this.format(column, val[1])}`\n );\n break;\n\n case \"contains\":\n let csql = `${col_name} LIKE ${this.format(column, `%${val}%`, false)}`\n if ((subargs as any).mode === \"insensitive\") {\n if (engin === \"postgres\") {\n csql = `${col_name} ILIKE ${this.format(column, `%${val}%`, false)}`\n } else {\n csql = `LOWER(${col_name}) LIKE LOWER(${this.format(column, `%${val}%`, false)})`\n }\n }\n parts.push(csql);\n break;\n\n case \"startsWith\":\n let ssql = `${col_name} LIKE ${this.format(column, `${val}%`, false)}`\n if ((subargs as any).mode === \"insensitive\") {\n if (engin === \"postgres\") {\n ssql = `${col_name} ILIKE ${this.format(column, `${val}%`, false)}`\n } else {\n ssql = `LOWER(${col_name}) LIKE LOWER(${this.format(column, `${val}%`, false)})`\n }\n }\n parts.push(ssql);\n break;\n\n case \"endsWith\":\n let esql = `${col_name} LIKE ${this.format(column, `%${val}`, false)}`\n if ((subargs as any).mode === \"insensitive\") {\n if (engin === \"postgres\") {\n esql = `${col_name} ILIKE ${this.format(column, `%${val}`, false)}`\n } else {\n esql = `LOWER(${col_name}) LIKE LOWER(${this.format(column, `%${val}`, false)})`\n }\n }\n parts.push(esql);\n break;\n }\n }\n\n return parts.join(\" AND \");\n }\n\n private format(column: string, value: any, parse = true) {\n const model = this.model;\n const schema = model.schema()\n const field = schema[column];\n\n if (field.type === 'relation-one') {\n if (typeof value == \"number\" || value === null) {\n return value\n } else {\n throw new XansqlError({\n code: \"VALIDATION_ERROR\",\n message: `Invalid value for relation field \"${column}\" in table \"${model.table}\". Expected a number or null, received ${typeof value}.`,\n model: model.table,\n field: column\n })\n }\n }\n\n if (parse) {\n try {\n value = field.parse(value)\n } catch (error: any) {\n throw new XansqlError({\n code: \"VALIDATION_ERROR\",\n model: model.table,\n field: column,\n sql: `${column}=${value}`,\n message: error.message\n });\n }\n }\n\n if (value instanceof Date) {\n return `'${value.toISOString()}'`;\n }\n\n if (typeof value === \"string\") {\n return `'${value.replace(/'/g, \"''\")}'`;\n }\n\n if (typeof value === \"boolean\") {\n return value ? \"TRUE\" : \"FALSE\";\n }\n\n if (value === null) {\n return \"NULL\";\n }\n\n return value;\n }\n\n}\n\nexport default BuildWhereArgs;\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../../../../src/model/Build/WhereArgs/index.ts"],"sourcesContent":["import Model from \"../..\";\nimport XansqlError from \"../../../core/XansqlError\";\nimport { isObject } from \"../../../utils\";\nimport { RelationManyInfo } from \"../../../xt/fields/RelationMany\";\nimport ModelWhere from \"../../ModelWhere\";\nimport { SchemaShape, WhereArgs, WhereSubConditionArgs } from \"../../types\";\n\ntype Aliases = {\n [table: string]: number\n}\n\nconst sub_keys = [\"is\", \"not\", \"lt\", \"lte\", \"gt\", \"gte\", \"in\", \"notIn\", \"between\", \"contains\", \"startsWith\", \"endsWith\"]\n\nclass BuildWhereArgs<S extends SchemaShape, M extends Model<any>> {\n readonly parts: string[];\n private model: M\n\n get sql() {\n if (!this.parts.length) return \"\";\n return `WHERE ${this.parts.join(\" AND \")}`;\n }\n\n constructor(args: WhereArgs<S>, model: M, aliases: Aliases = {}) {\n this.model = model\n const schema = model.schema();\n const parts: string[] = [];\n aliases[model.table] = model.table in aliases && aliases[model.table] > 0 ? aliases[model.table] : 0\n const alias = `${model.alias}${aliases[model.table] || \"\"}`\n\n if (Array.isArray(args)) {\n const _parts = []\n for (const arg of args) {\n const _aliases = { ...aliases }\n _aliases[model.table] = aliases[model.table] - 1\n\n const w_parts = new BuildWhereArgs(arg, model, _aliases).parts\n if (w_parts.length) {\n if (w_parts.length > 1) {\n _parts.push(`(${w_parts.join(\" AND \")})`)\n } else {\n _parts.push(w_parts.join(\" AND \"))\n }\n }\n }\n if (_parts.length) {\n parts.push(_parts.join(\" OR \"))\n }\n } else {\n for (const col in args) {\n const val = args[col];\n\n if (col === \"AND\") {\n const andparts = []\n const _aliases = { ...aliases }\n _aliases[model.table] = aliases[model.table] - 1\n\n for (let aargs of val as any[]) {\n if (!Object.keys(aargs).length) {\n continue\n }\n const b = new BuildWhereArgs(aargs, model, _aliases)\n andparts.push(b.parts.join(\" AND \"))\n }\n if (andparts.length) {\n if (andparts.length > 1) {\n parts.push(`(${andparts.join(\" AND \")})`)\n } else {\n parts.push(andparts.join(\" AND \"))\n }\n }\n continue\n }\n\n if (col === \"OR\") {\n const _aliases = { ...aliases }\n _aliases[model.table] = aliases[model.table] - 1\n\n const orparts = []\n for (let aargs of val as any[]) {\n if (!Object.keys(aargs).length) {\n continue\n }\n const b = new BuildWhereArgs(aargs, model, _aliases)\n orparts.push(b.parts.join(\" AND \"))\n }\n if (orparts.length) {\n if (orparts.length > 1) {\n parts.push(`(${orparts.join(\" OR \")})`)\n } else {\n parts.push(orparts.join(\" OR \"))\n }\n }\n continue\n }\n\n if (col === \"NOT\") {\n const _aliases = { ...aliases }\n _aliases[model.table] = aliases[model.table] - 1\n\n const notparts = []\n for (let aargs of val as any[]) {\n if (!Object.keys(aargs).length) {\n continue\n }\n const b = new BuildWhereArgs(aargs, model, _aliases)\n notparts.push(b.parts.join(\" AND \"))\n }\n if (notparts.length) {\n parts.push(`NOT (${notparts.join(\" AND \")})`)\n }\n continue\n }\n\n if (!(col in schema)) {\n throw new XansqlError({\n code: \"NOT_FOUND\",\n model: model.table,\n field: col,\n message: `Unknown column ${col} in ${model.table}`,\n });\n }\n\n const field = schema[col];\n if (field.isRelation) {\n const br = this.buildRelation(field, col, val, alias, aliases)\n br && parts.push(br)\n } else {\n // Array of subconditions → OR\n if (Array.isArray(val)) {\n const subParts: string[] = [];\n for (const subargs of val as any) {\n if (!isObject(subargs)) {\n throw new XansqlError({\n message: \"Invalid argument\",\n code: \"VALIDATION_ERROR\",\n model: model.table,\n field: col,\n params: subargs\n })\n }\n const cond = this.condition(col, subargs, alias, aliases);\n if (cond) {\n const keys = Object.keys(subargs);\n if (keys.length > 1) {\n subParts.push(`(${cond})`);\n } else {\n subParts.push(cond);\n }\n }\n }\n\n if (subParts.length) {\n const keys = Object.keys(val);\n if (keys.length > 1) {\n parts.push(`(${subParts.join(\" OR \")})`);\n } else {\n parts.push(`${subParts.join(\" OR \")}`);\n }\n }\n } else if (isObject(val)) {\n const cond = this.condition(col, val, alias, aliases);\n if (cond) {\n const keys = Object.keys(val);\n if (keys.length > 1) {\n parts.push(`(${cond})`);\n } else {\n parts.push(cond);\n }\n }\n } else {\n parts.push(`${alias}.${col}=${this.format(col, val)}`);\n }\n }\n }\n }\n aliases[model.table] = aliases[model.table] + 1\n this.parts = parts;\n }\n\n\n private buildRelation(field: any, col: string, val: any, alias: string, aliases: Aliases) {\n const model = this.model\n const xansql = model.xansql\n const relArgs = val as WhereArgs<any>;\n const RModel = xansql.model(field.model);\n const parts: string[] = [];\n aliases[RModel.table] = RModel.table in aliases ? aliases[RModel.table] + 1 : 0\n const ralias = `${RModel.alias}${aliases[RModel.table] || \"\"}`\n const rinfo = field.relationInfo as RelationManyInfo\n const relationSql = `${alias}.${rinfo.self.relation}=${ralias}.${rinfo.target.relation}`\n\n if (Array.isArray(relArgs)) {\n const _parts = []\n for (const rargs of relArgs) {\n if (!isObject(rargs)) { }\n const b = this.buildRelation(field, col, rargs, alias, aliases)\n _parts.push(`(${b})`)\n }\n if (_parts.length) {\n parts.push(_parts.join(\" OR \"))\n }\n } else {\n const _sparts: string[] = []\n let _args: { [col: string]: any } = {}\n if (field.type === \"relation-one\") {\n if (relArgs === null) {\n parts.push(`${alias}.${col} IS NULL`);\n } else if (typeof relArgs === \"number\") {\n parts.push(`${alias}.${col}=${this.format(col, val)}`);\n } else {\n const _subargs: { [col: string]: any } = {}\n for (let col in relArgs) {\n const val = relArgs[col]\n if (sub_keys.includes(col)) {\n _subargs[col] = val\n } else {\n _args[col] = val\n }\n }\n\n if (Object.keys(_subargs).length) {\n const cond = this.condition(col, _subargs, alias, aliases);\n if (cond) {\n _sparts.push(cond)\n }\n }\n }\n } else {\n _args = relArgs\n }\n\n if (Object.keys(_args).length) {\n const relWhere = new BuildWhereArgs(_args, RModel, aliases);\n const relSql = relWhere.parts.join(\" AND \");\n _sparts.push(\n `EXISTS (SELECT 1 FROM ${RModel.table} as ${ralias} WHERE ${relationSql}${relSql ? ` AND ${relSql}` : \"\"})`\n );\n }\n if (_sparts.length) {\n parts.push(_sparts.join(\" AND \"))\n }\n }\n\n return parts.join(\" AND \")\n }\n\n private condition(column: string, subargs: WhereSubConditionArgs<any>, alias: string, aliases: Aliases) {\n const parts: string[] = [];\n const col_name = `${alias}.${column}`\n const model = this.model\n const engin = model.xansql.dialect.engine\n\n for (const key in subargs) {\n const val = (subargs as any)[key];\n\n switch (key) {\n case \"is\":\n if (val === null) {\n parts.push(`${col_name} IS NULL`);\n } else {\n parts.push(`${col_name} = ${this.format(column, val)}`);\n }\n break;\n case \"not\":\n if (Array.isArray(val)) {\n const notParts: string[] = [];\n for (const v of val) {\n if (!isObject(v)) {\n throw new XansqlError({\n code: \"QUERY_ERROR\",\n message: \"Invalid where condition\",\n field: column,\n model: this.model.table,\n })\n }\n const cond = this.condition(column, v as WhereSubConditionArgs<any>, alias, aliases);\n if (cond) {\n const keys = Object.keys(v);\n if (keys.length > 1) {\n notParts.push(`(${cond})`)\n } else {\n notParts.push(cond)\n }\n }\n }\n if (notParts.length) {\n parts.push(`NOT (${notParts.join(\" OR \")})`);\n }\n } else if (isObject(val)) {\n parts.push(`NOT (${this.condition(column, val, alias, aliases)})`);\n } else if (val === null) {\n parts.push(`${col_name} IS NOT NULL`)\n } else {\n parts.push(`${col_name} != ${this.format(column, val)}`);\n }\n break;\n\n case \"lt\":\n parts.push(`${col_name} < ${this.format(column, val)}`);\n break;\n\n case \"lte\":\n parts.push(`${col_name} <= ${this.format(column, val)}`);\n break;\n\n case \"gt\":\n parts.push(`${col_name} > ${this.format(column, val)}`);\n break;\n\n case \"gte\":\n parts.push(`${col_name} >= ${this.format(column, val)}`);\n break;\n\n case \"in\":\n if (val instanceof ModelWhere) {\n const RModel = val.model\n aliases[RModel.table] = RModel.table in aliases ? aliases[RModel.table] + 1 : 0\n const ralias = `${RModel.alias}${aliases[RModel.table] || \"\"}`\n const wargs = new BuildWhereArgs(val.where || {}, RModel, aliases)\n\n parts.push(\n `EXISTS (\n SELECT 1\n FROM ${val.model.table} AS ${ralias}\n ${wargs.sql ? wargs.sql + \" AND \" : \"WHERE \"}\n ${ralias}.${String(val.inColumn)} = ${col_name}\n )`\n );\n } else if (val?.length) {\n parts.push(\n `${col_name} IN (${val.map((v: any) => this.format(column, v)).join(\", \")})`\n );\n }\n break;\n\n case \"notIn\":\n if (val instanceof ModelWhere) {\n const RModel = val.model\n aliases[RModel.table] = RModel.table in aliases ? aliases[RModel.table] + 1 : 0\n const ralias = `${RModel.alias}${aliases[RModel.table] || \"\"}`\n const wargs = new BuildWhereArgs(val.where || {}, RModel, aliases)\n parts.push(\n `NOT EXISTS (\n SELECT 1\n FROM ${val.model.table} AS ${ralias}\n ${wargs.sql ? wargs.sql + \" AND \" : \"WHERE \"}\n ${ralias}.${String(val.inColumn)} = ${col_name}\n )`\n );\n } else if (val?.length) {\n parts.push(\n `${col_name} NOT IN (${val.map((v: any) => this.format(column, v)).join(\", \")})`\n );\n }\n break;\n\n case \"between\":\n parts.push(\n `${col_name} BETWEEN ${this.format(column, val[0])} AND ${this.format(column, val[1])}`\n );\n break;\n\n case \"contains\":\n let csql = `${col_name} LIKE ${this.format(column, `%${val}%`, false)}`\n if ((subargs as any).mode === \"insensitive\") {\n if (engin === \"postgres\") {\n csql = `${col_name} ILIKE ${this.format(column, `%${val}%`, false)}`\n } else {\n csql = `LOWER(${col_name}) LIKE LOWER(${this.format(column, `%${val}%`, false)})`\n }\n }\n parts.push(csql);\n break;\n\n case \"startsWith\":\n let ssql = `${col_name} LIKE ${this.format(column, `${val}%`, false)}`\n if ((subargs as any).mode === \"insensitive\") {\n if (engin === \"postgres\") {\n ssql = `${col_name} ILIKE ${this.format(column, `${val}%`, false)}`\n } else {\n ssql = `LOWER(${col_name}) LIKE LOWER(${this.format(column, `${val}%`, false)})`\n }\n }\n parts.push(ssql);\n break;\n\n case \"endsWith\":\n let esql = `${col_name} LIKE ${this.format(column, `%${val}`, false)}`\n if ((subargs as any).mode === \"insensitive\") {\n if (engin === \"postgres\") {\n esql = `${col_name} ILIKE ${this.format(column, `%${val}`, false)}`\n } else {\n esql = `LOWER(${col_name}) LIKE LOWER(${this.format(column, `%${val}`, false)})`\n }\n }\n parts.push(esql);\n break;\n }\n }\n\n return parts.join(\" AND \");\n }\n\n private format(column: string, value: any, parse = true) {\n const model = this.model;\n const schema = model.schema()\n const field = schema[column];\n\n if (field.type === 'relation-one') {\n if (typeof value == \"number\" || value === null) {\n return value\n } else {\n throw new XansqlError({\n code: \"VALIDATION_ERROR\",\n message: `Invalid value for relation field \"${column}\" in table \"${model.table}\". Expected a number or null, received ${typeof value}.`,\n model: model.table,\n field: column\n })\n }\n }\n\n if (parse) {\n try {\n value = field.parse(value)\n } catch (error: any) {\n throw new XansqlError({\n code: \"VALIDATION_ERROR\",\n model: model.table,\n field: column,\n sql: `${column}=${value}`,\n message: error.message\n });\n }\n }\n\n if (value instanceof Date) {\n return `'${value.toISOString()}'`;\n }\n\n if (typeof value === \"string\") {\n return `'${value.replace(/'/g, \"''\")}'`;\n }\n\n if (typeof value === \"boolean\") {\n return value ? \"TRUE\" : \"FALSE\";\n }\n\n if (value === null) {\n return \"NULL\";\n }\n\n return value;\n }\n\n}\n\nexport default BuildWhereArgs;\n"],"names":[],"mappings":"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"}
package/model/types.d.ts CHANGED
@@ -134,8 +134,9 @@ type FindAggregateArgs<S extends SchemaShape> = Normalize<{
134
134
  schema: SchemaShape;
135
135
  } ? Normalize<AggregateSelectArgs<S[K]["schema"]>> : never;
136
136
  }>;
137
+ type FindDistinctArgs<S extends SchemaShape> = (keyof SchemaAllColumns<S>)[];
137
138
  type FindArgs<S extends SchemaShape> = {
138
- distinct?: boolean;
139
+ distinct?: FindDistinctArgs<S>;
139
140
  where?: Normalize<WhereArgs<S>>;
140
141
  select?: SelectArgs<S>;
141
142
  limit?: LimitArgs;
@@ -273,4 +274,4 @@ type AggregateResult<T extends AggregateArgs<any, any>, S extends SchemaShape> =
273
274
  [RF in keyof T['select'] as keyof T['select'][RF] extends never ? never : `${keyof T['select'][RF] & string}_${RF & string}`]: number;
274
275
  }>;
275
276
 
276
- export type { AggregateArgs, AggregateArgsValue, AggregateFunctions, AggregateGroupByArgs, AggregateOrderBy, AggregateResult, AggregateResultGroupBy, AggregateSelectArgs, CreateArgs, CreateDataArgs, CreateDataValue, CreateResult, DeleteArgs, DeleteResult, ExactArgs, FindAggregateArgs, FindArgs, FindResult, FindResultColumnMap, FindResultFullSchema, FindResultMap, IsRelationField, IsRelationMany, IsRelationOne, LimitArgs, ModelClass, ModelHooks, ModelOptions, ModelRowObject, Normalize, OrderByArgs, PaginateArgs, SchemaAllColumns, SchemaShape, SelectArgs, UpdateArgs, UpdateDataArgs, UpdateDataValue, UpdateRelationArgs, UpdateResult, UpsertArgs, UpsertResult, WhereArgs, WhereSubConditionArgs };
277
+ export type { AggregateArgs, AggregateArgsValue, AggregateFunctions, AggregateGroupByArgs, AggregateOrderBy, AggregateResult, AggregateResultGroupBy, AggregateSelectArgs, CreateArgs, CreateDataArgs, CreateDataValue, CreateResult, DeleteArgs, DeleteResult, ExactArgs, FindAggregateArgs, FindArgs, FindDistinctArgs, FindResult, FindResultColumnMap, FindResultFullSchema, FindResultMap, IsRelationField, IsRelationMany, IsRelationOne, LimitArgs, ModelClass, ModelHooks, ModelOptions, ModelRowObject, Normalize, OrderByArgs, PaginateArgs, SchemaAllColumns, SchemaShape, SelectArgs, UpdateArgs, UpdateDataArgs, UpdateDataValue, UpdateRelationArgs, UpdateResult, UpsertArgs, UpsertResult, WhereArgs, WhereSubConditionArgs };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "xansql",
3
- "version": "1.1.22",
3
+ "version": "1.1.24",
4
4
  "main": "./index.cjs",
5
5
  "module": "./index.js",
6
6
  "types": "./index.d.ts",