|
|
@ -50,11 +50,11 @@ const parseConditionV2 = async ( |
|
|
|
} |
|
|
|
} |
|
|
|
if (Array.isArray(_filter)) { |
|
|
|
if (Array.isArray(_filter)) { |
|
|
|
const qbs = await Promise.all( |
|
|
|
const qbs = await Promise.all( |
|
|
|
_filter.map(child => parseConditionV2(child, knex, aliasCount)) |
|
|
|
_filter.map((child) => parseConditionV2(child, knex, aliasCount)) |
|
|
|
); |
|
|
|
); |
|
|
|
|
|
|
|
|
|
|
|
return qbP => { |
|
|
|
return (qbP) => { |
|
|
|
qbP.where(qb => { |
|
|
|
qbP.where((qb) => { |
|
|
|
for (const [i, qb1] of Object.entries(qbs)) { |
|
|
|
for (const [i, qb1] of Object.entries(qbs)) { |
|
|
|
qb[getLogicalOpMethod(_filter[i])](qb1); |
|
|
|
qb[getLogicalOpMethod(_filter[i])](qb1); |
|
|
|
} |
|
|
|
} |
|
|
@ -64,11 +64,11 @@ const parseConditionV2 = async ( |
|
|
|
const children = await filter.getChildren(); |
|
|
|
const children = await filter.getChildren(); |
|
|
|
|
|
|
|
|
|
|
|
const qbs = await Promise.all( |
|
|
|
const qbs = await Promise.all( |
|
|
|
(children || []).map(child => parseConditionV2(child, knex, aliasCount)) |
|
|
|
(children || []).map((child) => parseConditionV2(child, knex, aliasCount)) |
|
|
|
); |
|
|
|
); |
|
|
|
|
|
|
|
|
|
|
|
return qbP => { |
|
|
|
return (qbP) => { |
|
|
|
qbP[getLogicalOpMethod(filter)](qb => { |
|
|
|
qbP[getLogicalOpMethod(filter)]((qb) => { |
|
|
|
for (const [i, qb1] of Object.entries(qbs)) { |
|
|
|
for (const [i, qb1] of Object.entries(qbs)) { |
|
|
|
qb[getLogicalOpMethod(children[i])](qb1); |
|
|
|
qb[getLogicalOpMethod(children[i])](qb1); |
|
|
|
} |
|
|
|
} |
|
|
@ -78,7 +78,8 @@ const parseConditionV2 = async ( |
|
|
|
const column = await filter.getColumn(); |
|
|
|
const column = await filter.getColumn(); |
|
|
|
if (!column) return () => {}; |
|
|
|
if (!column) return () => {}; |
|
|
|
if (column.uidt === UITypes.LinkToAnotherRecord) { |
|
|
|
if (column.uidt === UITypes.LinkToAnotherRecord) { |
|
|
|
const colOptions = (await column.getColOptions()) as LinkToAnotherRecordColumn; |
|
|
|
const colOptions = |
|
|
|
|
|
|
|
(await column.getColOptions()) as LinkToAnotherRecordColumn; |
|
|
|
const childColumn = await colOptions.getChildColumn(); |
|
|
|
const childColumn = await colOptions.getChildColumn(); |
|
|
|
const parentColumn = await colOptions.getParentColumn(); |
|
|
|
const parentColumn = await colOptions.getParentColumn(); |
|
|
|
const childModel = await childColumn.getModel(); |
|
|
|
const childModel = await childColumn.getModel(); |
|
|
@ -90,31 +91,17 @@ const parseConditionV2 = async ( |
|
|
|
filter.comparison_op === 'empty' || |
|
|
|
filter.comparison_op === 'empty' || |
|
|
|
filter.comparison_op === 'notempty' |
|
|
|
filter.comparison_op === 'notempty' |
|
|
|
) { |
|
|
|
) { |
|
|
|
const selectParentQb = knex(parentModel.table_name); |
|
|
|
|
|
|
|
console.log('HERE1'); |
|
|
|
|
|
|
|
console.log(selectParentQb.toQuery()); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
const selectHmCount = knex(childModel.table_name) |
|
|
|
const selectHmCount = knex(childModel.table_name) |
|
|
|
.count(childColumn.column_name) |
|
|
|
.count(childColumn.column_name) |
|
|
|
.where( |
|
|
|
.where( |
|
|
|
childColumn.column_name, |
|
|
|
childColumn.column_name, |
|
|
|
knex.raw('??.??', [ |
|
|
|
knex.raw('??.??', [ |
|
|
|
alias || parentModel.table_name, |
|
|
|
alias || parentModel.table_name, |
|
|
|
parentColumn.column_name |
|
|
|
parentColumn.column_name, |
|
|
|
]) |
|
|
|
]) |
|
|
|
); |
|
|
|
); |
|
|
|
|
|
|
|
|
|
|
|
// console.log('HERE2');
|
|
|
|
return (qb) => { |
|
|
|
// console.log(selectHmCount.toQuery());
|
|
|
|
|
|
|
|
//
|
|
|
|
|
|
|
|
// const q = selectParentQb.leftJoin(
|
|
|
|
|
|
|
|
// selectHmCount.as('t2'),
|
|
|
|
|
|
|
|
// parentModel.table_name + '.' + parentColumn.column_name,
|
|
|
|
|
|
|
|
// 't2.' + childColumn.column_name
|
|
|
|
|
|
|
|
// );
|
|
|
|
|
|
|
|
// console.log('HERE3');
|
|
|
|
|
|
|
|
// console.log(q.toQuery());
|
|
|
|
|
|
|
|
return qb => { |
|
|
|
|
|
|
|
if (filter.comparison_op === 'empty') { |
|
|
|
if (filter.comparison_op === 'empty') { |
|
|
|
qb.where(knex.raw('0'), selectHmCount); |
|
|
|
qb.where(knex.raw('0'), selectHmCount); |
|
|
|
} else { |
|
|
|
} else { |
|
|
@ -133,7 +120,7 @@ const parseConditionV2 = async ( |
|
|
|
? negatedMapping[filter.comparison_op] |
|
|
|
? negatedMapping[filter.comparison_op] |
|
|
|
: {}), |
|
|
|
: {}), |
|
|
|
fk_model_id: childModel.id, |
|
|
|
fk_model_id: childModel.id, |
|
|
|
fk_column_id: childModel?.primaryValue?.id |
|
|
|
fk_column_id: childModel?.primaryValue?.id, |
|
|
|
}), |
|
|
|
}), |
|
|
|
knex, |
|
|
|
knex, |
|
|
|
aliasCount |
|
|
|
aliasCount |
|
|
@ -147,12 +134,12 @@ const parseConditionV2 = async ( |
|
|
|
}; |
|
|
|
}; |
|
|
|
} else if (colOptions.type === RelationTypes.BELONGS_TO) { |
|
|
|
} else if (colOptions.type === RelationTypes.BELONGS_TO) { |
|
|
|
if (filter.comparison_op === 'null') { |
|
|
|
if (filter.comparison_op === 'null') { |
|
|
|
return qb => { |
|
|
|
return (qb) => { |
|
|
|
qb.whereNull(childColumn.column_name); |
|
|
|
qb.whereNull(childColumn.column_name); |
|
|
|
}; |
|
|
|
}; |
|
|
|
} |
|
|
|
} |
|
|
|
if (filter.comparison_op === 'notnull') { |
|
|
|
if (filter.comparison_op === 'notnull') { |
|
|
|
return qb => { |
|
|
|
return (qb) => { |
|
|
|
qb.whereNotNull(childColumn.column_name); |
|
|
|
qb.whereNotNull(childColumn.column_name); |
|
|
|
}; |
|
|
|
}; |
|
|
|
} |
|
|
|
} |
|
|
@ -168,7 +155,7 @@ const parseConditionV2 = async ( |
|
|
|
? negatedMapping[filter.comparison_op] |
|
|
|
? negatedMapping[filter.comparison_op] |
|
|
|
: {}), |
|
|
|
: {}), |
|
|
|
fk_model_id: parentModel.id, |
|
|
|
fk_model_id: parentModel.id, |
|
|
|
fk_column_id: parentModel?.primaryValue?.id |
|
|
|
fk_column_id: parentModel?.primaryValue?.id, |
|
|
|
}), |
|
|
|
}), |
|
|
|
knex, |
|
|
|
knex, |
|
|
|
aliasCount |
|
|
|
aliasCount |
|
|
@ -200,7 +187,7 @@ const parseConditionV2 = async ( |
|
|
|
? negatedMapping[filter.comparison_op] |
|
|
|
? negatedMapping[filter.comparison_op] |
|
|
|
: {}), |
|
|
|
: {}), |
|
|
|
fk_model_id: parentModel.id, |
|
|
|
fk_model_id: parentModel.id, |
|
|
|
fk_column_id: parentModel?.primaryValue?.id |
|
|
|
fk_column_id: parentModel?.primaryValue?.id, |
|
|
|
}), |
|
|
|
}), |
|
|
|
knex, |
|
|
|
knex, |
|
|
|
aliasCount |
|
|
|
aliasCount |
|
|
@ -214,7 +201,7 @@ const parseConditionV2 = async ( |
|
|
|
}; |
|
|
|
}; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
return _qb => {}; |
|
|
|
return (_qb) => {}; |
|
|
|
} else if (column.uidt === UITypes.Lookup) { |
|
|
|
} else if (column.uidt === UITypes.Lookup) { |
|
|
|
return await generateLookupCondition(column, filter, knex, aliasCount); |
|
|
|
return await generateLookupCondition(column, filter, knex, aliasCount); |
|
|
|
} else if (column.uidt === UITypes.Rollup && !customWhereClause) { |
|
|
|
} else if (column.uidt === UITypes.Rollup && !customWhereClause) { |
|
|
@ -222,7 +209,7 @@ const parseConditionV2 = async ( |
|
|
|
await genRollupSelectv2({ |
|
|
|
await genRollupSelectv2({ |
|
|
|
knex, |
|
|
|
knex, |
|
|
|
alias, |
|
|
|
alias, |
|
|
|
columnOptions: (await column.getColOptions()) as RollupColumn |
|
|
|
columnOptions: (await column.getColOptions()) as RollupColumn, |
|
|
|
}) |
|
|
|
}) |
|
|
|
).builder; |
|
|
|
).builder; |
|
|
|
return parseConditionV2( |
|
|
|
return parseConditionV2( |
|
|
@ -260,7 +247,7 @@ const parseConditionV2 = async ( |
|
|
|
); |
|
|
|
); |
|
|
|
let val = customWhereClause ? customWhereClause : filter.value; |
|
|
|
let val = customWhereClause ? customWhereClause : filter.value; |
|
|
|
|
|
|
|
|
|
|
|
return qb => { |
|
|
|
return (qb) => { |
|
|
|
switch (filter.comparison_op) { |
|
|
|
switch (filter.comparison_op) { |
|
|
|
case 'eq': |
|
|
|
case 'eq': |
|
|
|
qb = qb.where(field, val); |
|
|
|
qb = qb.where(field, val); |
|
|
@ -368,7 +355,7 @@ const parseConditionV2 = async ( |
|
|
|
|
|
|
|
|
|
|
|
const negatedMapping = { |
|
|
|
const negatedMapping = { |
|
|
|
nlike: { comparison_op: 'like' }, |
|
|
|
nlike: { comparison_op: 'like' }, |
|
|
|
neq: { comparison_op: 'eq' } |
|
|
|
neq: { comparison_op: 'eq' }, |
|
|
|
}; |
|
|
|
}; |
|
|
|
|
|
|
|
|
|
|
|
function getAlias(aliasCount: { count: number }) { |
|
|
|
function getAlias(aliasCount: { count: number }) { |
|
|
@ -384,9 +371,8 @@ async function generateLookupCondition( |
|
|
|
): Promise<any> { |
|
|
|
): Promise<any> { |
|
|
|
const colOptions = await col.getColOptions<LookupColumn>(); |
|
|
|
const colOptions = await col.getColOptions<LookupColumn>(); |
|
|
|
const relationColumn = await colOptions.getRelationColumn(); |
|
|
|
const relationColumn = await colOptions.getRelationColumn(); |
|
|
|
const relationColumnOptions = await relationColumn.getColOptions< |
|
|
|
const relationColumnOptions = |
|
|
|
LinkToAnotherRecordColumn |
|
|
|
await relationColumn.getColOptions<LinkToAnotherRecordColumn>(); |
|
|
|
>(); |
|
|
|
|
|
|
|
// const relationModel = await relationColumn.getModel();
|
|
|
|
// const relationModel = await relationColumn.getModel();
|
|
|
|
const lookupColumn = await colOptions.getLookupColumn(); |
|
|
|
const lookupColumn = await colOptions.getLookupColumn(); |
|
|
|
const alias = getAlias(aliasCount); |
|
|
|
const alias = getAlias(aliasCount); |
|
|
@ -409,7 +395,7 @@ async function generateLookupCondition( |
|
|
|
...filter, |
|
|
|
...filter, |
|
|
|
...(filter.comparison_op in negatedMapping |
|
|
|
...(filter.comparison_op in negatedMapping |
|
|
|
? negatedMapping[filter.comparison_op] |
|
|
|
? negatedMapping[filter.comparison_op] |
|
|
|
: {}) |
|
|
|
: {}), |
|
|
|
}, |
|
|
|
}, |
|
|
|
lookupColumn, |
|
|
|
lookupColumn, |
|
|
|
qb, |
|
|
|
qb, |
|
|
@ -432,7 +418,7 @@ async function generateLookupCondition( |
|
|
|
...filter, |
|
|
|
...filter, |
|
|
|
...(filter.comparison_op in negatedMapping |
|
|
|
...(filter.comparison_op in negatedMapping |
|
|
|
? negatedMapping[filter.comparison_op] |
|
|
|
? negatedMapping[filter.comparison_op] |
|
|
|
: {}) |
|
|
|
: {}), |
|
|
|
}, |
|
|
|
}, |
|
|
|
lookupColumn, |
|
|
|
lookupColumn, |
|
|
|
qb, |
|
|
|
qb, |
|
|
@ -466,7 +452,7 @@ async function generateLookupCondition( |
|
|
|
...filter, |
|
|
|
...filter, |
|
|
|
...(filter.comparison_op in negatedMapping |
|
|
|
...(filter.comparison_op in negatedMapping |
|
|
|
? negatedMapping[filter.comparison_op] |
|
|
|
? negatedMapping[filter.comparison_op] |
|
|
|
: {}) |
|
|
|
: {}), |
|
|
|
}, |
|
|
|
}, |
|
|
|
lookupColumn, |
|
|
|
lookupColumn, |
|
|
|
qb, |
|
|
|
qb, |
|
|
@ -502,9 +488,8 @@ async function nestedConditionJoin( |
|
|
|
await lookupColumn.getColOptions<LookupColumn>() |
|
|
|
await lookupColumn.getColOptions<LookupColumn>() |
|
|
|
).getRelationColumn() |
|
|
|
).getRelationColumn() |
|
|
|
: lookupColumn; |
|
|
|
: lookupColumn; |
|
|
|
const relationColOptions = await relationColumn.getColOptions< |
|
|
|
const relationColOptions = |
|
|
|
LinkToAnotherRecordColumn |
|
|
|
await relationColumn.getColOptions<LinkToAnotherRecordColumn>(); |
|
|
|
>(); |
|
|
|
|
|
|
|
const relAlias = `__nc${aliasCount.count++}`; |
|
|
|
const relAlias = `__nc${aliasCount.count++}`; |
|
|
|
|
|
|
|
|
|
|
|
const childColumn = await relationColOptions.getChildColumn(); |
|
|
|
const childColumn = await relationColOptions.getChildColumn(); |
|
|
@ -575,7 +560,7 @@ async function nestedConditionJoin( |
|
|
|
new Filter({ |
|
|
|
new Filter({ |
|
|
|
...filter, |
|
|
|
...filter, |
|
|
|
fk_model_id: childModel.id, |
|
|
|
fk_model_id: childModel.id, |
|
|
|
fk_column_id: childModel.primaryValue?.id |
|
|
|
fk_column_id: childModel.primaryValue?.id, |
|
|
|
}), |
|
|
|
}), |
|
|
|
knex, |
|
|
|
knex, |
|
|
|
aliasCount, |
|
|
|
aliasCount, |
|
|
@ -591,7 +576,7 @@ async function nestedConditionJoin( |
|
|
|
new Filter({ |
|
|
|
new Filter({ |
|
|
|
...filter, |
|
|
|
...filter, |
|
|
|
fk_model_id: parentModel.id, |
|
|
|
fk_model_id: parentModel.id, |
|
|
|
fk_column_id: parentModel?.primaryValue?.id |
|
|
|
fk_column_id: parentModel?.primaryValue?.id, |
|
|
|
}), |
|
|
|
}), |
|
|
|
knex, |
|
|
|
knex, |
|
|
|
aliasCount, |
|
|
|
aliasCount, |
|
|
@ -607,7 +592,7 @@ async function nestedConditionJoin( |
|
|
|
new Filter({ |
|
|
|
new Filter({ |
|
|
|
...filter, |
|
|
|
...filter, |
|
|
|
fk_model_id: parentModel.id, |
|
|
|
fk_model_id: parentModel.id, |
|
|
|
fk_column_id: parentModel.primaryValue?.id |
|
|
|
fk_column_id: parentModel.primaryValue?.id, |
|
|
|
}), |
|
|
|
}), |
|
|
|
knex, |
|
|
|
knex, |
|
|
|
aliasCount, |
|
|
|
aliasCount, |
|
|
@ -624,7 +609,7 @@ async function nestedConditionJoin( |
|
|
|
new Filter({ |
|
|
|
new Filter({ |
|
|
|
...filter, |
|
|
|
...filter, |
|
|
|
fk_model_id: (await lookupColumn.getModel()).id, |
|
|
|
fk_model_id: (await lookupColumn.getModel()).id, |
|
|
|
fk_column_id: lookupColumn?.id |
|
|
|
fk_column_id: lookupColumn?.id, |
|
|
|
}), |
|
|
|
}), |
|
|
|
knex, |
|
|
|
knex, |
|
|
|
aliasCount, |
|
|
|
aliasCount, |
|
|
|