From b80d77bc1d38320117b4c5d898346f9172c35d55 Mon Sep 17 00:00:00 2001 From: Pranav C Date: Thu, 4 Jan 2024 13:19:24 +0000 Subject: [PATCH] fix: group by related fixes --- packages/nocodb/src/db/BaseModelSqlv2.ts | 25 +++++++++++++------ packages/nocodb/src/db/conditionV2.ts | 6 ++++- .../src/db/generateLookupSelectQuery.ts | 2 ++ 3 files changed, 24 insertions(+), 9 deletions(-) diff --git a/packages/nocodb/src/db/BaseModelSqlv2.ts b/packages/nocodb/src/db/BaseModelSqlv2.ts index 38ea4fe0a7..cb412154a2 100644 --- a/packages/nocodb/src/db/BaseModelSqlv2.ts +++ b/packages/nocodb/src/db/BaseModelSqlv2.ts @@ -8,6 +8,7 @@ import { nocoExecute } from 'nc-help'; import { AuditOperationSubTypes, AuditOperationTypes, + isCreatedTimeOrUpdatedTimeCol, isLinksOrLTAR, isSystemColumn, isVirtualCol, @@ -102,7 +103,9 @@ function checkColumnRequired( } export async function getColumnName(column: Column, columns?: Column[]) { + if (!isCreatedTimeOrUpdatedTimeCol(column)) return column.column_name; columns = columns || (await Column.list({ fk_model_id: column.fk_model_id })); + switch (column.uidt) { case UITypes.CreatedTime: { const createdTimeSystemCol = columns.find( @@ -664,10 +667,13 @@ class BaseModelSqlv2 { } break; default: - selectors.push( - this.dbDriver.raw('?? as ??', [column.column_name, column.id]), - ); - groupBySelectors.push(sanitize(column.id)); + { + const columnName = await getColumnName(column, cols); + selectors.push( + this.dbDriver.raw('?? as ??', [columnName, column.id]), + ); + groupBySelectors.push(sanitize(column.id)); + } break; } }), @@ -872,10 +878,13 @@ class BaseModelSqlv2 { } break; default: - selectors.push( - this.dbDriver.raw('?? as ??', [column.column_name, column.id]), - ); - groupBySelectors.push(sanitize(column.id)); + { + const columnName = await getColumnName(column, cols); + selectors.push( + this.dbDriver.raw('?? as ??', [columnName, column.id]), + ); + groupBySelectors.push(sanitize(column.id)); + } break; } }), diff --git a/packages/nocodb/src/db/conditionV2.ts b/packages/nocodb/src/db/conditionV2.ts index c256b55167..be91d13fcb 100644 --- a/packages/nocodb/src/db/conditionV2.ts +++ b/packages/nocodb/src/db/conditionV2.ts @@ -13,6 +13,7 @@ import type Column from '~/models/Column'; import type LookupColumn from '~/models/LookupColumn'; import type RollupColumn from '~/models/RollupColumn'; import type FormulaColumn from '~/models/FormulaColumn'; +import { getColumnName } from '~/db/BaseModelSqlv2'; import { type BarcodeColumn, BaseUser, type QrCodeColumn } from '~/models'; import { NcError } from '~/helpers/catchError'; import formulaQueryBuilderv2 from '~/db/formulav2/formulaQueryBuilderv2'; @@ -544,6 +545,9 @@ const parseConditionV2 = async ( ); const _val = customWhereClause ? customWhereClause : filter.value; + // get column name for CreateTime, LastModifiedTime + column.column_name = await getColumnName(column); + return (qb: Knex.QueryBuilder) => { let [field, val] = [_field, _val]; @@ -678,7 +682,7 @@ const parseConditionV2 = async ( ].includes(column.uidt) ) { if (qb.client.config.client === 'pg') { - qb = qb.where(knex.raw('??::date = ?', [field, val])); + qb = qb.where(knex.raw('??::timestamp = ?', [field, val])); } else { qb = qb.where(knex.raw('DATE(??) = DATE(?)', [field, val])); } diff --git a/packages/nocodb/src/db/generateLookupSelectQuery.ts b/packages/nocodb/src/db/generateLookupSelectQuery.ts index 881ff3b0a2..2ea55b9002 100644 --- a/packages/nocodb/src/db/generateLookupSelectQuery.ts +++ b/packages/nocodb/src/db/generateLookupSelectQuery.ts @@ -312,6 +312,8 @@ export default async function generateLookupSelectQuery({ } break; case UITypes.DateTime: + case UITypes.LastModifiedTime: + case UITypes.CreatedTime: { await baseModelSqlv2.selectObject({ qb: selectQb,