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.
- package/core/Migration.cjs +0 -1
- package/core/Migration.cjs.map +1 -1
- package/core/Migration.js +0 -1
- package/core/Migration.js.map +1 -1
- package/index.d.ts +1 -1
- package/model/Build/FindArgs/index.cjs +55 -3
- package/model/Build/FindArgs/index.cjs.map +1 -1
- package/model/Build/FindArgs/index.js +55 -3
- package/model/Build/FindArgs/index.js.map +1 -1
- package/model/Build/WhereArgs/index.cjs +13 -5
- package/model/Build/WhereArgs/index.cjs.map +1 -1
- package/model/Build/WhereArgs/index.js +13 -5
- package/model/Build/WhereArgs/index.js.map +1 -1
- package/model/types.d.ts +3 -2
- package/package.json +1 -1
package/core/Migration.cjs
CHANGED
package/core/Migration.cjs.map
CHANGED
|
@@ -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
|
|
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
package/core/Migration.js.map
CHANGED
|
@@ -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
|
|
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 =
|
|
34
|
-
if (
|
|
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 =
|
|
32
|
-
if (
|
|
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":";;;;;;;AAiBA,MAAM,aAAa,CAAA;AAChB,IAAA,WAAA,CAAoB,IAAO,EAAU,KAAiB,EAAU,YAA2B,EAAA;QAAvE,IAAA,CAAA,IAAI,GAAJ,IAAI;QAAa,IAAA,CAAA,KAAK,GAAL,KAAK;QAAsB,IAAA,CAAA,YAAY,GAAZ,YAAY;IAC5E;AAEA,IAAA,MAAM,OAAO,GAAA;;AACV,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI;AACtB,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,YAAY;AACtC,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK;AACxB,QAAA,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM;AAC3B,QAAA,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,EAAE;AAC7B,QAAA,MAAM,KAAK,GAAG,IAAI,cAAc,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE,EAAE,KAAK,CAAC;AACzD,QAAA,MAAM,KAAK,GAAG,IAAI,eAAe,CAAC,CAAC,IAAY,KAAA,IAAA,IAAZ,IAAI,KAAA,MAAA,GAAA,MAAA,GAAJ,IAAI,CAAU,MAAO,KAAI,EAAE,EAAE,KAAK,CAAC;AACtE,QAAA,MAAM,KAAK,GAAG,IAAI,cAAc,CAAC,IAAI,CAAC,KAAK,IAAI,EAAS,EAAE,KAAK,CAAC;AAChE,QAAA,MAAM,KAAK,GAAG,IAAI,gBAAgB,CAAC,IAAI,CAAC,OAAO,IAAI,EAAE,EAAE,KAAK,CAAC;QAE7D,IAAI,YAAY,EAAE;AACf,YAAA,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAC,MAAM,CAAC,EAAE;gBAC/C,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC;YAC1C;YACA,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,KAAK,CAAA,CAAA,EAAI,YAAY,CAAC,MAAM,CAAA,KAAA,EAAQ,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA,CAAA,CAAG,CAAC;QAC/F;AACA,QAAA,IAAI,GAAG,GAAG,CAAA,QAAA,EAAW,IAAI,CAAC,QAAQ,GAAG,UAAU,GAAG,EAAE,CAAA,CAAA,EAAI,KAAK,CAAC,GAAG,CAAA,MAAA,EAAS,KAAK,CAAC,KAAK,CAAA,IAAA,EAAO,KAAK,CAAC,KAAK,CAAA,CAAA,EAAI,KAAK,CAAC,GAAG,CAAA,CAAA,EAAI,KAAK,CAAC,GAAG,CAAA,CAAA,EAAI,KAAK,CAAC,GAAG,EAAE;AAEhJ,QAAA,IAAI,YAAY,IAAI,KAAK,CAAC,GAAG,EAAE;YAC5B,MAAM,UAAU,GAAG,KAAK,CAAC,GAAG,GAAG,KAAK,CAAC,GAAG,GAAG,CAAA,SAAA,EAAY,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC,QAAQ,CAAA,CAAE;AACtF,YAAA,GAAG,GAAG;AACM,mBAAA,EAAA,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC;;;AAGxB,mBAAA,EAAA,KAAK,CAAC,GAAG,CAAA;;AAES,qCAAA,EAAA,KAAK,CAAC,KAAK,CAAA,CAAA,EAAI,YAAY,CAAC,MAAM;0BAC/C,UAAU;;AAEb,qBAAA,EAAA,KAAK,CAAC,KAAK,CAAA,CAAA,EAAI,KAAK,CAAC,KAAK;AAC/B,gBAAA,EAAA,KAAK,CAAC,GAAG;AACR,iBAAA,EAAA,KAAK,CAAC,KAAK;yBACL,KAAK,CAAC,IAAI,CAAA,WAAA,EAAc,KAAK,CAAC,IAAI,GAAG,KAAK,CAAC,IAAI;UAC9D;QACJ;QAEA,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC;;AAG/B,QAAA,MAAM,OAAO,GAAG,MAAM,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC;AACpD,QAAA,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO;QAC/B,MAAM,MAAM,GAAG,EAAE;QACjB,MAAM,UAAU,GAA6B,EAAE;QAC/C,MAAM,MAAM,GAER,EAAE;QACN,MAAM,UAAU,GAIZ,EAAE;QACN,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC;AAE5C,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AACtC,YAAA,MAAM,GAAG,GAAG,OAAO,CAAC,CAAC,CAAC;YACtB,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;YAChC,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC;AAEnC,YAAA,KAAK,IAAI,GAAG,IAAI,GAAG,EAAE;AAClB,gBAAA,MAAM,KAAK,GAAQ,MAAM,CAAC,GAAG,CAAC;AAC9B,gBAAA,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE;AACpB,oBAAA,GAAG,CAAC,GAAG,CAAC,GAAI,KAAa,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;gBACpD;gBAEA,IAAI,OAAO,CAAC,MAAM,IAAI,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;AAC1C,oBAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC;AAAE,wBAAA,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE;AAClC,oBAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;AAAE,wBAAA,UAAU,CAAC,GAAG,CAAC,GAAG,EAAE;AAE1C,oBAAA,MAAM,KAAK,GAAG,KAAK,CAAC,YAAY;oBAChC,MAAM,EAAE,GAAG,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC;oBACnC,IAAI,EAAE,EAAE;wBACL,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;wBACpB,UAAU,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC;oBAC1B;gBACH;YACH;;AAGA,YAAA,IAAI,IAAI,CAAC,SAAS,EAAE;gBACjB,GAAG,CAAC,SAAS,GAAG,CAAA,EAAA,GAAA,GAAG,CAAC,SAAS,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,EAAA,GAAI,EAAE;AACnC,gBAAA,KAAK,IAAI,OAAO,IAAI,IAAI,CAAC,SAAS,EAAE;oBACjC,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC;AACtC,oBAAA,GAAG,CAAC,SAAS,CAAC,OAAO,CAAC,GAAG,CAAA,EAAA,GAAA,GAAG,CAAC,SAAS,CAAC,OAAO,CAAC,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,EAAA,GAAI,EAAE;AACrD,oBAAA,KAAK,IAAI,GAAG,IAAI,MAAM,EAAE;AACrB,wBAAA,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC;AACzB,wBAAA,KAAK,IAAI,IAAI,IAAI,KAAK,EAAE;AACrB,4BAAA,GAAG,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAA,EAAG,IAAI,CAAA,CAAA,EAAI,GAAG,CAAA,CAAE,CAAC,GAAG,CAAC;wBAC/C;oBACH;gBACH;YACH;QACH;AAEA,QAAA,IAAI,OAAO,CAAC,MAAM,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,MAAM,EAAE;;AAGxD,YAAA,IAAI,IAAI,CAAC,SAAS,EAAE;AACjB,gBAAA,KAAK,IAAI,GAAG,IAAI,IAAI,CAAC,SAAS,EAAE;AAC7B,oBAAA,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAQ;AAChC,oBAAA,MAAM,KAAK,GAAG,KAAK,CAAC,YAAY;oBAChC,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC;oBACxC,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC;oBAEpC,IAAI,CAAC,QAAQ,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,MAAM;wBAAE;AAChD,oBAAA,MAAM,MAAM,GAAG,IAAI,kBAAkB,CAAC;AACnC,wBAAA,MAAM,EAAE,QAAQ;AAChB,wBAAA,OAAO,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC;AAC9B,wBAAA,KAAK,EAAE;AACJ,4BAAA,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,GAAG;AACpB,gCAAA,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,GAAG;AACpB,oCAAA,EAAE,EAAE;AACN;AACH;AACH,yBAAA;wBACD,KAAK,EAAE,IAAI,CAAC;qBACd,EAAE,MAAM,CAAC;AAEV,oBAAA,MAAM,SAAS,GAAG,MAAM,MAAM,CAAC,OAAO,EAAE;AACxC,oBAAA,IAAI,SAAS,CAAC,MAAM,EAAE;wBACnB,KAAK,IAAI,EAAE,KAAK,EAAE,IAAI,UAAU,CAAC,SAAS,CAAC,EAAE;AAC1C,4BAAA,KAAK,IAAI,IAAI,IAAI,KAAK,EAAE;gCACrB,MAAM,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC;AACtC,gCAAA,MAAM,KAAK,GAAG,UAAU,CAAC,EAAE,CAAC;gCAC5B,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC;gCAChC,IAAI,CAAE,OAAe,CAAC,KAAK,CAAC,CAAC,WAAW,CAAC,EAAE;oCACvC,OAAe,CAAC,KAAK,CAAC,CAAC,WAAW,CAAC,GAAG,EAAE;gCAC5C;gCACC,OAAe,CAAC,KAAK,CAAC,CAAC,WAAW,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI;4BACnD;wBACH;oBACH;gBACH;YACH;AAEA,YAAA,KAAK,IAAI,GAAG,IAAI,KAAK,CAAC,SAAS,EAAE;AAE9B,gBAAA,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAA+C;AACvE,gBAAA,MAAM,MAAM,GAAG,KAAK,CAAC,IAAI,KAAK,eAAe;AAC7C,gBAAA,MAAM,KAAK,GAAG,KAAK,CAAC,YAAY;AAChC,gBAAA,MAAM,UAAU,GAAG,KAAK,CAAC,MAAM,CAAC,QAAQ;AACxC,gBAAA,MAAM,MAAM,GAAa,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC;;;;;;;;;;gBAWtD,IAAI,CAAC,MAAM,CAAC,MAAM;oBAAE;gBACpB,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC;gBACxC,MAAM,KAAK,GAAG,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC;AAClC,gBAAA,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK;gBACxB,MAAM,CAAC,GAAG,IAAI,aAAa,CAAC,KAAY,EAAE,MAAM,EAAE;AAC/C,oBAAA,MAAM,EAAE,UAAU;AAClB,oBAAA,GAAG,EAAE;AACP,iBAAA,CAAC;AACF,gBAAA,MAAM,WAAW,GAAG,MAAM,CAAC,CAAC,OAAO,EAAE;AAErC,gBAAA,IAAI,WAAW,CAAC,MAAM,EAAE;oBACrB,KAAK,IAAI,EAAE,KAAK,EAAE,IAAI,UAAU,CAAC,WAAW,CAAC,EAAE;AAC5C,wBAAA,KAAK,IAAI,IAAI,IAAI,KAAK,EAAE;4BACrB,IAAI,MAAM,EAAE;gCACT,MAAM,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC;AACtC,gCAAA,MAAM,KAAK,GAAG,UAAU,CAAC,EAAE,CAAC;AAC5B,gCAAA,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE;oCACrC,OAAO,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,GAAG,EAAE;gCAC3B;AACA,gCAAA,OAAO,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;gCAC5C,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC;4BACnC;iCAAO;gCACJ,MAAM,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC;gCACtC,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;AACjC,gCAAA,OAAO,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,IAAI;4BAC3C;wBACH;oBACH;gBACH;YACH;QACH;AAEA,QAAA,OAAO,OAAO;IACjB;AACF;;;;"}
|
|
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
|
|
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,
|
|
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,
|
|
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,
|
|
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
|
|
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,
|
|
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,
|
|
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,
|
|
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?:
|
|
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 };
|