diff options
-rw-r--r-- | sql/ha_ndbcluster.cc | 34 | ||||
-rw-r--r-- | sql/ha_ndbcluster.h | 1 |
2 files changed, 34 insertions, 1 deletions
diff --git a/sql/ha_ndbcluster.cc b/sql/ha_ndbcluster.cc index 54fea1e728a..b1ca0182984 100644 --- a/sql/ha_ndbcluster.cc +++ b/sql/ha_ndbcluster.cc @@ -414,6 +414,37 @@ void ha_ndbcluster::set_rec_per_key() DBUG_VOID_RETURN; } +ha_rows ha_ndbcluster::records() +{ + ha_rows retval; + DBUG_ENTER("ha_ndbcluster::records"); + struct Ndb_local_table_statistics *info= m_table_info; + DBUG_PRINT("info", ("id=%d, no_uncommitted_rows_count=%d", + ((const NDBTAB *)m_table)->getTableId(), + info->no_uncommitted_rows_count)); + + Ndb *ndb= get_ndb(); + ndb->setDatabaseName(m_dbname); + struct Ndb_statistics stat; + if (ndb_get_table_statistics(ndb, m_table, &stat) == 0) + { + retval= stat.row_count; + } + else + { + /** + * Be consistent with BUG#19914 until we fix it properly + */ + DBUG_RETURN(-1); + } + + THD *thd= current_thd; + if (get_thd_ndb(thd)->error) + info->no_uncommitted_rows_count= 0; + + DBUG_RETURN(retval + info->no_uncommitted_rows_count); +} + void ha_ndbcluster::records_update() { if (m_ha_not_exact_count) @@ -5455,7 +5486,8 @@ void ha_ndbcluster::get_auto_increment(ulonglong offset, ulonglong increment, HA_PRIMARY_KEY_REQUIRED_FOR_POSITION | \ HA_PRIMARY_KEY_REQUIRED_FOR_DELETE | \ HA_PARTIAL_COLUMN_READ | \ - HA_HAS_OWN_BINLOGGING + HA_HAS_OWN_BINLOGGING | \ + HA_HAS_RECORDS ha_ndbcluster::ha_ndbcluster(TABLE_SHARE *table_arg): handler(&ndbcluster_hton, table_arg), diff --git a/sql/ha_ndbcluster.h b/sql/ha_ndbcluster.h index 9dc9ee79755..5e13a6664f0 100644 --- a/sql/ha_ndbcluster.h +++ b/sql/ha_ndbcluster.h @@ -622,6 +622,7 @@ class ha_ndbcluster: public handler int read_multi_range_next(KEY_MULTI_RANGE **found_range_p); bool get_error_message(int error, String *buf); + ha_rows records(); void info(uint); void get_dynamic_partition_info(PARTITION_INFO *stat_info, uint part_id); int extra(enum ha_extra_function operation); |