diff --git a/sql/ha_ndbcluster.cc b/sql/ha_ndbcluster.cc index 50d619dcf6632d45a0a274a1e1c0c9d302178e28..0035e95ccf74e3269c6b7c53056fd7011ed0cb0a 100644 --- a/sql/ha_ndbcluster.cc +++ b/sql/ha_ndbcluster.cc @@ -197,6 +197,16 @@ struct Ndb_table_local_info { ha_rows records; }; +void ha_ndbcluster::set_rec_per_key() +{ + DBUG_ENTER("ha_ndbcluster::get_status_const"); + for (uint i=0 ; i < table->keys ; i++) + { + table->key_info[i].rec_per_key[table->key_info[i].key_parts-1]= 1; + } + DBUG_VOID_RETURN; +} + void ha_ndbcluster::records_update() { DBUG_ENTER("ha_ndbcluster::records_update"); @@ -2405,8 +2415,6 @@ void ha_ndbcluster::info(uint flag) DBUG_PRINT("info", ("HA_STATUS_NO_LOCK")); if (flag & HA_STATUS_TIME) DBUG_PRINT("info", ("HA_STATUS_TIME")); - if (flag & HA_STATUS_CONST) - DBUG_PRINT("info", ("HA_STATUS_CONST")); if (flag & HA_STATUS_VARIABLE) { DBUG_PRINT("info", ("HA_STATUS_VARIABLE")); @@ -2422,7 +2430,12 @@ void ha_ndbcluster::info(uint flag) } } } - if (flag & HA_STATUS_ERRKEY) + if (flag & HA_STATUS_CONST) + { + DBUG_PRINT("info", ("HA_STATUS_CONST")); + set_rec_per_key(); + } + if (flag & HA_STATUS_ERRKEY) { DBUG_PRINT("info", ("HA_STATUS_ERRKEY")); errkey= dupkey; @@ -3523,6 +3536,7 @@ ha_ndbcluster::~ha_ndbcluster() int ha_ndbcluster::open(const char *name, int mode, uint test_if_locked) { + int res; KEY *key; DBUG_ENTER("open"); DBUG_PRINT("enter", ("name: %s mode: %d test_if_locked: %d", @@ -3550,7 +3564,11 @@ int ha_ndbcluster::open(const char *name, int mode, uint test_if_locked) DBUG_RETURN(HA_ERR_NO_CONNECTION); } - DBUG_RETURN(get_metadata(name)); + res= get_metadata(name); + if (!res) + info(HA_STATUS_VARIABLE | HA_STATUS_CONST); + + DBUG_RETURN(res); }