diff --git a/shared-code/src/data-access-layer/data-access-objects/data-access-object-clickhouse.ts b/shared-code/src/data-access-layer/data-access-objects/data-access-object-clickhouse.ts index d05e21b09..5083177df 100644 --- a/shared-code/src/data-access-layer/data-access-objects/data-access-object-clickhouse.ts +++ b/shared-code/src/data-access-layer/data-access-objects/data-access-object-clickhouse.ts @@ -421,7 +421,7 @@ export class DataAccessObjectClickHouse extends BasicDataAccessObject implements character_maximum_length: this.extractLength(column.type), data_type_params: this.extractTypeParams(column.type), udt_name: column.type, - extra: column.is_in_primary_key ? 'primary_key' : undefined, + extra: this.buildExtraInfo(column.is_in_primary_key, column.default_expression), })); LRUStorage.setTableStructureCache(this.connection, tableName, structure); @@ -795,6 +795,30 @@ export class DataAccessObjectClickHouse extends BasicDataAccessObject implements return null; } + private buildExtraInfo(isPrimaryKey: number, defaultExpression: string): string | undefined { + const parts: string[] = []; + if (isPrimaryKey) { + parts.push('primary_key'); + } + + if (defaultExpression) { + const lowerDefault = defaultExpression.toLowerCase(); + if ( + lowerDefault.includes('generateuuidv4') || + lowerDefault.includes('generateuuid') || + lowerDefault.includes('rownumberinallblocks') || + lowerDefault.includes('rownumber') || + lowerDefault.includes('auto_increment') || + lowerDefault.includes('autoincrement') || + lowerDefault.includes('nextval') || + lowerDefault.includes('generate') + ) { + parts.push('auto_increment'); + } + } + return parts.length > 0 ? parts.join(' ') : undefined; + } + private async getRowsCount( client: ClickHouseClient, tableName: string,