Browse Source

feat: group by - avoid ignoring duplicate values from different records

pull/6987/head
Pranav C 10 months ago
parent
commit
eece67be97
  1. 17
      packages/nocodb/src/db/conditionV2.ts
  2. 14
      packages/nocodb/src/db/generateMMLookupSelectQuery.ts

17
packages/nocodb/src/db/conditionV2.ts

@ -118,20 +118,21 @@ const parseConditionV2 = async (
// handle group by filter separately
if (filter.comparison_op === 'gb_val') {
const column = await filter.getColumn();
const model = await column.getModel();
const lkQb = await generateMMLookupSelectQuery({
if (column.uidt === UITypes.Lookup) {
const model = await column.getModel();
const lkQb = await generateMMLookupSelectQuery({
baseModelSqlv2,
alias: alias,
model,
column,
getAlias: getAliasGenerator('__gb_filter_lk'),
});
return (qb) => {
qb.where(
knex.raw('?',[filter.value]),
lkQb.builder,
);
};
return (qb) => {
qb.where(knex.raw('?', [filter.value]), lkQb.builder);
};
} else {
filter.comparison_op = 'eq';
}
}
const column = await filter.getColumn();

14
packages/nocodb/src/db/generateMMLookupSelectQuery.ts

@ -308,10 +308,10 @@ export default async function generateMMLookupSelectQuery({
return {
builder: knex
.select(
knex.raw(
"GROUP_CONCAT(DISTINCT ?? ORDER BY ?? ASC SEPARATOR '___')",
[lookupColumn.title, lookupColumn.title],
),
knex.raw("GROUP_CONCAT(?? ORDER BY ?? ASC SEPARATOR '___')", [
lookupColumn.title,
lookupColumn.title,
]),
)
.from(selectQb.as(subQueryAlias)),
};
@ -320,11 +320,7 @@ export default async function generateMMLookupSelectQuery({
selectQb.orderBy(`${lookupColumn.title}`, 'asc');
return {
builder: knex
.select(
knex.raw(`replace(group_concat(distinct ??), ',', '___')`, [
lookupColumn.title,
]),
)
.select(knex.raw(`group_concat(??, '___')`, [lookupColumn.title]))
.from(selectQb.as(subQueryAlias)),
};
}

Loading…
Cancel
Save