[FTS] limit the number of primary key columns, whew alter table add primary key.

This commit is contained in:
obdev
2025-02-12 15:47:03 +00:00
committed by ob-robot
parent a7418beca5
commit ec91c2ec65
3 changed files with 164 additions and 1 deletions

View File

@ -3591,6 +3591,11 @@ int ObDDLService::add_primary_key(const ObIArray<ObString> &pk_column_names, ObT
ObTableSchema::const_column_iterator tmp_begin = new_table_schema.column_begin();
ObTableSchema::const_column_iterator tmp_end = new_table_schema.column_end();
ObColumnSchemaV2 *del_hidden_pk_column = nullptr;
if (pk_column_names.count() > common::OB_USER_MAX_ROWKEY_COLUMN_NUMBER) {
ret = OB_ERR_TOO_MANY_ROWKEY_COLUMNS;
LOG_USER_ERROR(OB_ERR_TOO_MANY_ROWKEY_COLUMNS, OB_USER_MAX_ROWKEY_COLUMN_NUMBER);
LOG_WARN("too many rowkey columns", K(ret), K(pk_column_names.count()));
}
for (; OB_SUCC(ret) && tmp_begin != tmp_end; tmp_begin++) {
ObColumnSchemaV2 *col = (*tmp_begin);
if (OB_ISNULL(col)) {

View File

@ -57,3 +57,77 @@ ALTER TABLE Z0CASE DROP PRIMARY KEY, ADD PRIMARY KEY(C2, C3);
ERROR HY000: 'Defining a generated column as primary key' is not supported for generated columns.
ALTER TABLE Z0CASE DROP PRIMARY KEY, ADD PRIMARY KEY(C2, C1);
DROP TABLE Z0CASE;
drop table if exists t_add_pk;
create table t_add_pk (col1 int, col2 int, col3 int,
col4 int, col5 int, col6 int, col7 int, col8 int,
col9 int, col10 int, col11 int, col12 int, col13 int,
col14 int, col15 int, col16 int, col17 int, col18 int,
col19 int, col20 int, col21 int, col22 int, col23 int,
col24 int, col25 int, col26 int, col27 int, col28 int,
col29 int, col30 int, col31 int, col32 int, col33 int,
col34 int, col35 int, col36 int, col37 int, col38 int,
col39 int, col40 int, col41 int, col42 int, col43 int,
col44 int, col45 int, col46 int, col47 int, col48 int,
col49 int, col50 int, col51 int, col52 int, col53 int,
col54 int, col55 int, col56 int, col57 int, col58 int,
col59 int, col60 int, col61 int, col62 int, col63 int,
col64 int, col65 int,
col varchar(20),
primary key (
col1, col2, col3, col4, col5, col6, col7, col8, col9, col10,
col11, col12, col13, col14, col15, col16, col17, col18, col19, col20,
col21, col22, col23, col24, col25, col26, col27, col28, col29, col30,
col31, col32, col33, col34, col35, col36, col37, col38, col39, col40,
col41, col42, col43, col44, col45, col46, col47, col48, col49, col50,
col51, col52, col53, col54, col55, col56, col57, col58, col59, col60,
col61, col62, col63, col64
)
);
alter table t_add_pk drop primary key, add primary key (
col1, col2, col3, col4, col5, col6, col7, col8, col9, col10,
col11, col12, col13, col14, col15, col16, col17, col18, col19, col20,
col21, col22, col23, col24, col25, col26, col27, col28, col29, col30,
col31, col32, col33, col34, col35, col36, col37, col38, col39, col40,
col41, col42, col43, col44, col45, col46, col47, col48, col49, col50,
col51, col52, col53, col54, col55, col56, col57, col58, col59, col60,
col61, col62, col63, col64, col65
);
ERROR 42000: Too many key parts specified; max 64 parts allowed
alter table t_add_pk drop primary key;
alter table t_add_pk add primary key (
col1, col2, col3, col4, col5, col6, col7, col8, col9, col10,
col11, col12, col13, col14, col15, col16, col17, col18, col19, col20,
col21, col22, col23, col24, col25, col26, col27, col28, col29, col30,
col31, col32, col33, col34, col35, col36, col37, col38, col39, col40,
col41, col42, col43, col44, col45, col46, col47, col48, col49, col50,
col51, col52, col53, col54, col55, col56, col57, col58, col59, col60,
col61, col62, col63, col64, col65
);
ERROR 42000: Too many key parts specified; max 64 parts allowed
drop table if exists t_with_pk;
create table t_with_pk (col1 int, col2 int, col3 int,
col4 int, col5 int, col6 int, col7 int, col8 int,
col9 int, col10 int, col11 int, col12 int, col13 int,
col14 int, col15 int, col16 int, col17 int, col18 int,
col19 int, col20 int, col21 int, col22 int, col23 int,
col24 int, col25 int, col26 int, col27 int, col28 int,
col29 int, col30 int, col31 int, col32 int, col33 int,
col34 int, col35 int, col36 int, col37 int, col38 int,
col39 int, col40 int, col41 int, col42 int, col43 int,
col44 int, col45 int, col46 int, col47 int, col48 int,
col49 int, col50 int, col51 int, col52 int, col53 int,
col54 int, col55 int, col56 int, col57 int, col58 int,
col59 int, col60 int, col61 int, col62 int, col63 int,
col64 int, col65 int,
col varchar(20),
primary key (
col1, col2, col3, col4, col5, col6, col7, col8, col9, col10,
col11, col12, col13, col14, col15, col16, col17, col18, col19, col20,
col21, col22, col23, col24, col25, col26, col27, col28, col29, col30,
col31, col32, col33, col34, col35, col36, col37, col38, col39, col40,
col41, col42, col43, col44, col45, col46, col47, col48, col49, col50,
col51, col52, col53, col54, col55, col56, col57, col58, col59, col60,
col61, col62, col63, col64, col65
)
);
ERROR 42000: Too many key parts specified; max 64 parts allowed

View File

@ -77,4 +77,88 @@ CREATE TABLE Z0CASE(C1 CHAR(10), C2 INT, C3 INT GENERATED ALWAYS AS (C2+1) STORE
--error 3106
ALTER TABLE Z0CASE DROP PRIMARY KEY, ADD PRIMARY KEY(C2, C3);
ALTER TABLE Z0CASE DROP PRIMARY KEY, ADD PRIMARY KEY(C2, C1);
DROP TABLE Z0CASE;
DROP TABLE Z0CASE;
# test add pk, and the column numbers of the pk overtake OB_USER_MAX_ROWKEY_COLUMN_NUMBER
--disable_warnings
drop table if exists t_add_pk;
--enable_warnings
create table t_add_pk (col1 int, col2 int, col3 int,
col4 int, col5 int, col6 int, col7 int, col8 int,
col9 int, col10 int, col11 int, col12 int, col13 int,
col14 int, col15 int, col16 int, col17 int, col18 int,
col19 int, col20 int, col21 int, col22 int, col23 int,
col24 int, col25 int, col26 int, col27 int, col28 int,
col29 int, col30 int, col31 int, col32 int, col33 int,
col34 int, col35 int, col36 int, col37 int, col38 int,
col39 int, col40 int, col41 int, col42 int, col43 int,
col44 int, col45 int, col46 int, col47 int, col48 int,
col49 int, col50 int, col51 int, col52 int, col53 int,
col54 int, col55 int, col56 int, col57 int, col58 int,
col59 int, col60 int, col61 int, col62 int, col63 int,
col64 int, col65 int,
col varchar(20),
primary key (
col1, col2, col3, col4, col5, col6, col7, col8, col9, col10,
col11, col12, col13, col14, col15, col16, col17, col18, col19, col20,
col21, col22, col23, col24, col25, col26, col27, col28, col29, col30,
col31, col32, col33, col34, col35, col36, col37, col38, col39, col40,
col41, col42, col43, col44, col45, col46, col47, col48, col49, col50,
col51, col52, col53, col54, col55, col56, col57, col58, col59, col60,
col61, col62, col63, col64
)
);
--error 1070
alter table t_add_pk drop primary key, add primary key (
col1, col2, col3, col4, col5, col6, col7, col8, col9, col10,
col11, col12, col13, col14, col15, col16, col17, col18, col19, col20,
col21, col22, col23, col24, col25, col26, col27, col28, col29, col30,
col31, col32, col33, col34, col35, col36, col37, col38, col39, col40,
col41, col42, col43, col44, col45, col46, col47, col48, col49, col50,
col51, col52, col53, col54, col55, col56, col57, col58, col59, col60,
col61, col62, col63, col64, col65
);
alter table t_add_pk drop primary key;
--error 1070
alter table t_add_pk add primary key (
col1, col2, col3, col4, col5, col6, col7, col8, col9, col10,
col11, col12, col13, col14, col15, col16, col17, col18, col19, col20,
col21, col22, col23, col24, col25, col26, col27, col28, col29, col30,
col31, col32, col33, col34, col35, col36, col37, col38, col39, col40,
col41, col42, col43, col44, col45, col46, col47, col48, col49, col50,
col51, col52, col53, col54, col55, col56, col57, col58, col59, col60,
col61, col62, col63, col64, col65
);
--disable_warnings
drop table if exists t_with_pk;
--enable_warnings
--error 1070
create table t_with_pk (col1 int, col2 int, col3 int,
col4 int, col5 int, col6 int, col7 int, col8 int,
col9 int, col10 int, col11 int, col12 int, col13 int,
col14 int, col15 int, col16 int, col17 int, col18 int,
col19 int, col20 int, col21 int, col22 int, col23 int,
col24 int, col25 int, col26 int, col27 int, col28 int,
col29 int, col30 int, col31 int, col32 int, col33 int,
col34 int, col35 int, col36 int, col37 int, col38 int,
col39 int, col40 int, col41 int, col42 int, col43 int,
col44 int, col45 int, col46 int, col47 int, col48 int,
col49 int, col50 int, col51 int, col52 int, col53 int,
col54 int, col55 int, col56 int, col57 int, col58 int,
col59 int, col60 int, col61 int, col62 int, col63 int,
col64 int, col65 int,
col varchar(20),
primary key (
col1, col2, col3, col4, col5, col6, col7, col8, col9, col10,
col11, col12, col13, col14, col15, col16, col17, col18, col19, col20,
col21, col22, col23, col24, col25, col26, col27, col28, col29, col30,
col31, col32, col33, col34, col35, col36, col37, col38, col39, col40,
col41, col42, col43, col44, col45, col46, col47, col48, col49, col50,
col51, col52, col53, col54, col55, col56, col57, col58, col59, col60,
col61, col62, col63, col64, col65
)
);