Browse Source

chore: clean up

pull/2535/head
Wing-Kam Wong 2 years ago
parent
commit
1d5d11d80a
  1. 75
      packages/nocodb/src/lib/db/sql-data-mapper/lib/sql/conditionV2.ts

75
packages/nocodb/src/lib/db/sql-data-mapper/lib/sql/conditionV2.ts

@ -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,

Loading…
Cancel
Save