xansql 1.1.8 → 1.1.9

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.
@@ -13,7 +13,6 @@ class BuildWhereArgs {
13
13
  }
14
14
  constructor(args, model, aliases = {}) {
15
15
  this.model = model;
16
- model.xansql;
17
16
  const schema = model.schema();
18
17
  const parts = [];
19
18
  aliases[model.table] = model.table in aliases ? aliases[model.table] : 0;
@@ -107,6 +106,68 @@ class BuildWhereArgs {
107
106
  aliases[model.table] = aliases[model.table] + 1;
108
107
  this.parts = parts;
109
108
  }
109
+ buildRelation(field, col, val, alias, aliases) {
110
+ const model = this.model;
111
+ const xansql = model.xansql;
112
+ const relArgs = val;
113
+ const RModel = xansql.model(field.model);
114
+ const parts = [];
115
+ aliases[RModel.table] = RModel.table in aliases ? aliases[RModel.table] + 1 : 0;
116
+ const ralias = `${RModel.alias}${aliases[RModel.table] || ""}`;
117
+ const rinfo = field.relationInfo;
118
+ const relationSql = `${alias}.${rinfo.self.relation}=${ralias}.${rinfo.target.relation}`;
119
+ if (Array.isArray(relArgs)) {
120
+ const _parts = [];
121
+ for (const rargs of relArgs) {
122
+ if (!index.isObject(rargs)) ;
123
+ const b = this.buildRelation(field, col, rargs, alias, aliases);
124
+ _parts.push(`(${b})`);
125
+ }
126
+ if (_parts.length) {
127
+ parts.push(_parts.join(" OR "));
128
+ }
129
+ }
130
+ else {
131
+ const _sparts = [];
132
+ let _args = {};
133
+ if (field.type === "relation-one") {
134
+ if (relArgs === null) {
135
+ parts.push(`${alias}.${col} IS NULL`);
136
+ }
137
+ else if (typeof relArgs === "number") {
138
+ parts.push(`${alias}.${col}=${this.format(col, val)}`);
139
+ }
140
+ else {
141
+ const _subargs = {};
142
+ for (let col in relArgs) {
143
+ const val = relArgs[col];
144
+ if (sub_keys.includes(col)) {
145
+ _subargs[col] = val;
146
+ }
147
+ else {
148
+ _args[col] = val;
149
+ }
150
+ }
151
+ if (Object.keys(_subargs).length) {
152
+ const cond = this.condition(col, _subargs, alias, aliases);
153
+ if (cond) {
154
+ _sparts.push(cond);
155
+ }
156
+ }
157
+ }
158
+ }
159
+ else {
160
+ _args = relArgs;
161
+ }
162
+ if (Object.keys(_args).length) {
163
+ const relWhere = new BuildWhereArgs(_args, RModel, aliases);
164
+ const relSql = relWhere.parts.join(" AND ");
165
+ _sparts.push(`EXISTS (SELECT 1 FROM ${RModel.table} as ${ralias} WHERE ${relationSql}${relSql ? ` AND ${relSql}` : ""})`);
166
+ }
167
+ parts.push(_sparts.join(" AND "));
168
+ }
169
+ return parts.join(" AND ");
170
+ }
110
171
  condition(column, subargs, alias, aliases) {
111
172
  const parts = [];
112
173
  const col_name = `${alias}.${column}`;
@@ -249,60 +310,6 @@ class BuildWhereArgs {
249
310
  }
250
311
  return parts.join(" AND ");
251
312
  }
252
- buildRelation(field, col, val, alias, aliases) {
253
- const model = this.model;
254
- const xansql = model.xansql;
255
- const relArgs = val;
256
- const RModel = xansql.model(field.model);
257
- const parts = [];
258
- aliases[RModel.table] = RModel.table in aliases ? aliases[RModel.table] + 1 : 0;
259
- const ralias = `${RModel.alias}${aliases[RModel.table] || ""}`;
260
- const rinfo = field.relationInfo;
261
- const relationSql = `${alias}.${rinfo.self.relation}=${ralias}.${rinfo.target.relation}`;
262
- if (Array.isArray(relArgs)) {
263
- const _parts = [];
264
- for (const rargs of relArgs) {
265
- if (!index.isObject(rargs)) ;
266
- const b = this.buildRelation(field, col, rargs, alias, aliases);
267
- _parts.push(`(${b})`);
268
- }
269
- if (_parts.length) {
270
- parts.push(_parts.join(" OR "));
271
- }
272
- }
273
- else {
274
- const _sparts = [];
275
- let _args = {};
276
- if (field.type === "relation-one") {
277
- const _subargs = {};
278
- for (let col in relArgs) {
279
- const val = relArgs[col];
280
- if (sub_keys.includes(col)) {
281
- _subargs[col] = val;
282
- }
283
- else {
284
- _args[col] = val;
285
- }
286
- }
287
- if (Object.keys(_subargs).length) {
288
- const cond = this.condition(col, _subargs, alias, aliases);
289
- if (cond) {
290
- _sparts.push(cond);
291
- }
292
- }
293
- }
294
- else {
295
- _args = relArgs;
296
- }
297
- if (Object.keys(_args).length) {
298
- const relWhere = new BuildWhereArgs(_args, RModel, aliases);
299
- const relSql = relWhere.parts.join(" AND ");
300
- _sparts.push(`EXISTS (SELECT 1 FROM ${RModel.table} as ${ralias} WHERE ${relationSql}${relSql ? ` AND ${relSql}` : ""})`);
301
- }
302
- parts.push(_sparts.join(" AND "));
303
- }
304
- return parts.join(" AND ");
305
- }
306
313
  format(column, value, parse = true) {
307
314
  const model = this.model;
308
315
  const schema = model.schema();
@@ -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 xansql = model.xansql\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 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 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 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\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 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 } 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 parts.push(_sparts.join(\" AND \"))\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\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 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 parts.push(_sparts.join(\" AND \"))\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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"}
@@ -11,7 +11,6 @@ class BuildWhereArgs {
11
11
  }
12
12
  constructor(args, model, aliases = {}) {
13
13
  this.model = model;
14
- model.xansql;
15
14
  const schema = model.schema();
16
15
  const parts = [];
17
16
  aliases[model.table] = model.table in aliases ? aliases[model.table] : 0;
@@ -105,6 +104,68 @@ class BuildWhereArgs {
105
104
  aliases[model.table] = aliases[model.table] + 1;
106
105
  this.parts = parts;
107
106
  }
107
+ buildRelation(field, col, val, alias, aliases) {
108
+ const model = this.model;
109
+ const xansql = model.xansql;
110
+ const relArgs = val;
111
+ const RModel = xansql.model(field.model);
112
+ const parts = [];
113
+ aliases[RModel.table] = RModel.table in aliases ? aliases[RModel.table] + 1 : 0;
114
+ const ralias = `${RModel.alias}${aliases[RModel.table] || ""}`;
115
+ const rinfo = field.relationInfo;
116
+ const relationSql = `${alias}.${rinfo.self.relation}=${ralias}.${rinfo.target.relation}`;
117
+ if (Array.isArray(relArgs)) {
118
+ const _parts = [];
119
+ for (const rargs of relArgs) {
120
+ if (!isObject(rargs)) ;
121
+ const b = this.buildRelation(field, col, rargs, alias, aliases);
122
+ _parts.push(`(${b})`);
123
+ }
124
+ if (_parts.length) {
125
+ parts.push(_parts.join(" OR "));
126
+ }
127
+ }
128
+ else {
129
+ const _sparts = [];
130
+ let _args = {};
131
+ if (field.type === "relation-one") {
132
+ if (relArgs === null) {
133
+ parts.push(`${alias}.${col} IS NULL`);
134
+ }
135
+ else if (typeof relArgs === "number") {
136
+ parts.push(`${alias}.${col}=${this.format(col, val)}`);
137
+ }
138
+ else {
139
+ const _subargs = {};
140
+ for (let col in relArgs) {
141
+ const val = relArgs[col];
142
+ if (sub_keys.includes(col)) {
143
+ _subargs[col] = val;
144
+ }
145
+ else {
146
+ _args[col] = val;
147
+ }
148
+ }
149
+ if (Object.keys(_subargs).length) {
150
+ const cond = this.condition(col, _subargs, alias, aliases);
151
+ if (cond) {
152
+ _sparts.push(cond);
153
+ }
154
+ }
155
+ }
156
+ }
157
+ else {
158
+ _args = relArgs;
159
+ }
160
+ if (Object.keys(_args).length) {
161
+ const relWhere = new BuildWhereArgs(_args, RModel, aliases);
162
+ const relSql = relWhere.parts.join(" AND ");
163
+ _sparts.push(`EXISTS (SELECT 1 FROM ${RModel.table} as ${ralias} WHERE ${relationSql}${relSql ? ` AND ${relSql}` : ""})`);
164
+ }
165
+ parts.push(_sparts.join(" AND "));
166
+ }
167
+ return parts.join(" AND ");
168
+ }
108
169
  condition(column, subargs, alias, aliases) {
109
170
  const parts = [];
110
171
  const col_name = `${alias}.${column}`;
@@ -247,60 +308,6 @@ class BuildWhereArgs {
247
308
  }
248
309
  return parts.join(" AND ");
249
310
  }
250
- buildRelation(field, col, val, alias, aliases) {
251
- const model = this.model;
252
- const xansql = model.xansql;
253
- const relArgs = val;
254
- const RModel = xansql.model(field.model);
255
- const parts = [];
256
- aliases[RModel.table] = RModel.table in aliases ? aliases[RModel.table] + 1 : 0;
257
- const ralias = `${RModel.alias}${aliases[RModel.table] || ""}`;
258
- const rinfo = field.relationInfo;
259
- const relationSql = `${alias}.${rinfo.self.relation}=${ralias}.${rinfo.target.relation}`;
260
- if (Array.isArray(relArgs)) {
261
- const _parts = [];
262
- for (const rargs of relArgs) {
263
- if (!isObject(rargs)) ;
264
- const b = this.buildRelation(field, col, rargs, alias, aliases);
265
- _parts.push(`(${b})`);
266
- }
267
- if (_parts.length) {
268
- parts.push(_parts.join(" OR "));
269
- }
270
- }
271
- else {
272
- const _sparts = [];
273
- let _args = {};
274
- if (field.type === "relation-one") {
275
- const _subargs = {};
276
- for (let col in relArgs) {
277
- const val = relArgs[col];
278
- if (sub_keys.includes(col)) {
279
- _subargs[col] = val;
280
- }
281
- else {
282
- _args[col] = val;
283
- }
284
- }
285
- if (Object.keys(_subargs).length) {
286
- const cond = this.condition(col, _subargs, alias, aliases);
287
- if (cond) {
288
- _sparts.push(cond);
289
- }
290
- }
291
- }
292
- else {
293
- _args = relArgs;
294
- }
295
- if (Object.keys(_args).length) {
296
- const relWhere = new BuildWhereArgs(_args, RModel, aliases);
297
- const relSql = relWhere.parts.join(" AND ");
298
- _sparts.push(`EXISTS (SELECT 1 FROM ${RModel.table} as ${ralias} WHERE ${relationSql}${relSql ? ` AND ${relSql}` : ""})`);
299
- }
300
- parts.push(_sparts.join(" AND "));
301
- }
302
- return parts.join(" AND ");
303
- }
304
311
  format(column, value, parse = true) {
305
312
  const model = this.model;
306
313
  const schema = model.schema();
@@ -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 xansql = model.xansql\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 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 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 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\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 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 } 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 parts.push(_sparts.join(\" AND \"))\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\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 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 parts.push(_sparts.join(\" AND \"))\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
@@ -85,7 +85,7 @@ type WhereObject<S extends SchemaShape> = Normalize<{
85
85
  } ? (WhereObject<S[C]['schema']> | WhereObject<S[C]['schema']>[]) : S[C] extends {
86
86
  type: "relation-one";
87
87
  schema: SchemaShape;
88
- } ? (WhereSubConditionArgs<S[C]> | WhereObject<S[C]['schema']> | (WhereSubConditionArgs<S[C]> | WhereObject<S[C]['schema']>)[]) : WhereColumnArgs<S[C]>;
88
+ } ? (number | null | WhereSubConditionArgs<S[C]> | WhereObject<S[C]['schema']> | (WhereSubConditionArgs<S[C]> | WhereObject<S[C]['schema']>)[]) : WhereColumnArgs<S[C]>;
89
89
  }>;
90
90
  type WhereArgs<S extends SchemaShape> = WhereObject<S> | WhereObject<S>[];
91
91
  type SelectArgs<S extends SchemaShape = SchemaShape> = Normalize<{
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "xansql",
3
- "version": "1.1.8",
3
+ "version": "1.1.9",
4
4
  "main": "./index.cjs",
5
5
  "module": "./index.js",
6
6
  "types": "./index.d.ts",