Loading mysql-test/r/ndb_index_unique.result +7 −0 Original line number Diff line number Diff line Loading @@ -87,6 +87,13 @@ a b c 7 8 3 8 2 3 drop table t2; CREATE TABLE t2 ( a int unsigned NOT NULL PRIMARY KEY, b int unsigned not null, c int unsigned, UNIQUE USING HASH (b, c) ) engine=ndbcluster; ERROR 42000: Column 'c' is used with UNIQUE or INDEX but is not defined as NOT NULL CREATE TABLE t3 ( a int unsigned NOT NULL, b int unsigned not null, Loading mysql-test/t/ndb_index_unique.test +8 −0 Original line number Diff line number Diff line Loading @@ -58,6 +58,14 @@ select * from t2 order by a; drop table t2; -- error 1121 CREATE TABLE t2 ( a int unsigned NOT NULL PRIMARY KEY, b int unsigned not null, c int unsigned, UNIQUE USING HASH (b, c) ) engine=ndbcluster; # # Show use of PRIMARY KEY USING HASH indexes # Loading sql/ha_ndbcluster.cc +22 −1 Original line number Diff line number Diff line Loading @@ -796,6 +796,7 @@ int ha_ndbcluster::build_index_list(TABLE *tab, enum ILBP phase) error= create_unique_index(unique_index_name, key_info); break; case UNIQUE_INDEX: if (!(error= check_index_fields_not_null(i))) error= create_unique_index(unique_index_name, key_info); break; case ORDERED_INDEX: Loading Loading @@ -848,6 +849,26 @@ NDB_INDEX_TYPE ha_ndbcluster::get_index_type_from_table(uint inx) const ORDERED_INDEX); } int ha_ndbcluster::check_index_fields_not_null(uint inx) { KEY* key_info= table->key_info + inx; KEY_PART_INFO* key_part= key_info->key_part; KEY_PART_INFO* end= key_part+key_info->key_parts; DBUG_ENTER("check_index_fields_not_null"); for (; key_part != end; key_part++) { Field* field= key_part->field; if (field->maybe_null()) { my_printf_error(ER_NULL_COLUMN_IN_INDEX,ER(ER_NULL_COLUMN_IN_INDEX), MYF(0),field->field_name); DBUG_RETURN(ER_NULL_COLUMN_IN_INDEX); } } DBUG_RETURN(0); } void ha_ndbcluster::release_metadata() { Loading sql/ha_ndbcluster.h +2 −1 Original line number Diff line number Diff line Loading @@ -160,6 +160,7 @@ class ha_ndbcluster: public handler void release_metadata(); NDB_INDEX_TYPE get_index_type(uint idx_no) const; NDB_INDEX_TYPE get_index_type_from_table(uint index_no) const; int check_index_fields_not_null(uint index_no); int pk_read(const byte *key, uint key_len, byte *buf); int complemented_pk_read(const byte *old_data, byte *new_data); Loading Loading
mysql-test/r/ndb_index_unique.result +7 −0 Original line number Diff line number Diff line Loading @@ -87,6 +87,13 @@ a b c 7 8 3 8 2 3 drop table t2; CREATE TABLE t2 ( a int unsigned NOT NULL PRIMARY KEY, b int unsigned not null, c int unsigned, UNIQUE USING HASH (b, c) ) engine=ndbcluster; ERROR 42000: Column 'c' is used with UNIQUE or INDEX but is not defined as NOT NULL CREATE TABLE t3 ( a int unsigned NOT NULL, b int unsigned not null, Loading
mysql-test/t/ndb_index_unique.test +8 −0 Original line number Diff line number Diff line Loading @@ -58,6 +58,14 @@ select * from t2 order by a; drop table t2; -- error 1121 CREATE TABLE t2 ( a int unsigned NOT NULL PRIMARY KEY, b int unsigned not null, c int unsigned, UNIQUE USING HASH (b, c) ) engine=ndbcluster; # # Show use of PRIMARY KEY USING HASH indexes # Loading
sql/ha_ndbcluster.cc +22 −1 Original line number Diff line number Diff line Loading @@ -796,6 +796,7 @@ int ha_ndbcluster::build_index_list(TABLE *tab, enum ILBP phase) error= create_unique_index(unique_index_name, key_info); break; case UNIQUE_INDEX: if (!(error= check_index_fields_not_null(i))) error= create_unique_index(unique_index_name, key_info); break; case ORDERED_INDEX: Loading Loading @@ -848,6 +849,26 @@ NDB_INDEX_TYPE ha_ndbcluster::get_index_type_from_table(uint inx) const ORDERED_INDEX); } int ha_ndbcluster::check_index_fields_not_null(uint inx) { KEY* key_info= table->key_info + inx; KEY_PART_INFO* key_part= key_info->key_part; KEY_PART_INFO* end= key_part+key_info->key_parts; DBUG_ENTER("check_index_fields_not_null"); for (; key_part != end; key_part++) { Field* field= key_part->field; if (field->maybe_null()) { my_printf_error(ER_NULL_COLUMN_IN_INDEX,ER(ER_NULL_COLUMN_IN_INDEX), MYF(0),field->field_name); DBUG_RETURN(ER_NULL_COLUMN_IN_INDEX); } } DBUG_RETURN(0); } void ha_ndbcluster::release_metadata() { Loading
sql/ha_ndbcluster.h +2 −1 Original line number Diff line number Diff line Loading @@ -160,6 +160,7 @@ class ha_ndbcluster: public handler void release_metadata(); NDB_INDEX_TYPE get_index_type(uint idx_no) const; NDB_INDEX_TYPE get_index_type_from_table(uint index_no) const; int check_index_fields_not_null(uint index_no); int pk_read(const byte *key, uint key_len, byte *buf); int complemented_pk_read(const byte *old_data, byte *new_data); Loading