Skip to content

Commit da4cf1f

Browse files
authored
fix: correct key columns order (#1478)
1 parent d4f528c commit da4cf1f

File tree

6 files changed

+19
-14
lines changed

6 files changed

+19
-14
lines changed

src/containers/Tenant/Schema/SchemaViewer/columns.tsx

+1-1
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ export const SCHEMA_COLUMNS_WIDTH_LS_KEY = 'schemaTableColumnsWidth';
88
export const SCHEMA_TABLE_COLUMS_IDS = {
99
id: 'id',
1010
name: 'name',
11-
isKeyColumn: 'isKeyColumn',
11+
keyColumnIndex: 'keyColumnIndex',
1212
type: 'type',
1313
notNull: 'notNull',
1414
autoIncrement: 'autoIncrement',

src/containers/Tenant/Schema/SchemaViewer/prepareData.ts

+10-11
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ function prepareRowTableSchema(data: TTableDescription = {}): SchemaData[] {
4848
const preparedColumns = Columns?.map((column) => {
4949
const {Id, Name, NotNull, Type, Family, DefaultFromSequence, DefaultFromLiteral} = column;
5050

51-
const isKeyColumn = Boolean(KeyColumnIds?.find((keyColumnId) => keyColumnId === Id));
51+
const keyColumnIndex = KeyColumnIds?.findIndex((keyColumnId) => keyColumnId === Id) ?? -1;
5252

5353
const familyName = Family ? families[Family].Name : undefined;
5454
const prefferedPoolKind = Family
@@ -59,7 +59,7 @@ function prepareRowTableSchema(data: TTableDescription = {}): SchemaData[] {
5959
return {
6060
id: Id,
6161
name: Name,
62-
isKeyColumn,
62+
keyColumnIndex,
6363
type: Type,
6464
notNull: NotNull,
6565
autoIncrement: Boolean(DefaultFromSequence),
@@ -69,8 +69,8 @@ function prepareRowTableSchema(data: TTableDescription = {}): SchemaData[] {
6969
columnCodec,
7070
};
7171
});
72-
const keyColumns = preparedColumns?.filter((column) => column.isKeyColumn) || [];
73-
const otherColumns = preparedColumns?.filter((column) => !column.isKeyColumn) || [];
72+
const keyColumns = preparedColumns?.filter((column) => column.keyColumnIndex !== -1) || [];
73+
const otherColumns = preparedColumns?.filter((column) => column.keyColumnIndex === -1) || [];
7474

7575
return [...keyColumns, ...otherColumns];
7676
}
@@ -92,32 +92,31 @@ function prepareExternalTableSchema(data: TExternalTableDescription = {}): Schem
9292

9393
function prepareColumnTableSchema(data: TColumnTableDescription = {}): SchemaData[] {
9494
const {Schema = {}, Sharding = {}} = data;
95-
const {Columns, KeyColumnNames} = Schema;
95+
const {Columns, KeyColumnIds} = Schema;
9696
const {HashSharding = {}} = Sharding;
9797
const {Columns: HashColumns = []} = HashSharding;
9898

9999
const preparedColumns = Columns?.map((column) => {
100100
const {Id, Name, Type, NotNull} = column;
101101

102-
const isKeyColumn = Boolean(
103-
KeyColumnNames?.find((keyColumnName) => keyColumnName === Name),
104-
);
102+
const keyColumnIndex = KeyColumnIds?.findIndex((keyColumnId) => keyColumnId === Id) ?? -1;
103+
105104
const isPartitioningKeyColumn = Boolean(
106105
HashColumns?.find((hashColumnName) => hashColumnName === Name),
107106
);
108107

109108
return {
110109
id: Id,
111110
name: Name,
112-
isKeyColumn,
111+
keyColumnIndex,
113112
isPartitioningKeyColumn,
114113
type: Type,
115114
notNull: NotNull,
116115
};
117116
});
118117

119-
const keyColumns = preparedColumns?.filter((column) => column.isKeyColumn) || [];
120-
const otherColumns = preparedColumns?.filter((column) => !column.isKeyColumn) || [];
118+
const keyColumns = preparedColumns?.filter((column) => column.keyColumnIndex !== -1) || [];
119+
const otherColumns = preparedColumns?.filter((column) => column.keyColumnIndex === -1) || [];
121120

122121
return [...keyColumns, ...otherColumns];
123122
}

src/containers/Tenant/Schema/SchemaViewer/types.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ import type {Column} from '@gravity-ui/react-data-table';
33
export interface SchemaData {
44
id?: number;
55
name?: string;
6-
isKeyColumn?: boolean;
6+
keyColumnIndex?: number;
77
isPartitioningKeyColumn?: boolean;
88
type?: string;
99
notNull?: boolean;

src/containers/Tenant/Schema/SchemaViewer/utils.ts

+4-1
Original file line numberDiff line numberDiff line change
@@ -7,5 +7,8 @@ export function getPartitioningKeys(tableData: SchemaData[]): string[] {
77
}
88

99
export function getPrimaryKeys(tableData: SchemaData[]): string[] {
10-
return tableData.filter((row) => row.isKeyColumn && row.name).map((row) => row.name!);
10+
return tableData
11+
.filter((row) => row.keyColumnIndex !== undefined && row.keyColumnIndex !== -1 && row.name)
12+
.sort((column1, column2) => column1.keyColumnIndex! - column2.keyColumnIndex!)
13+
.map((row) => row.name!);
1114
}

src/types/api/schema/columnEntity.ts

+1
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,7 @@ interface TTtl {
7575
interface TColumnTableSchema {
7676
Columns?: TOlapColumnDescription[];
7777
KeyColumnNames?: string[];
78+
KeyColumnIds?: number[];
7879
Engine?: EColumnTableEngine;
7980
NextColumnId?: number;
8081

src/types/api/schema/tableIndex.ts

+2
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@ export interface TIndexDescription {
88

99
KeyColumnNames?: string[];
1010

11+
KeyColumnIds?: number[];
12+
1113
/** uint64 */
1214
SchemaVersion?: string;
1315

0 commit comments

Comments
 (0)