summaryrefslogtreecommitdiff
path: root/sql/ha_ndbcluster.cc
diff options
context:
space:
mode:
authorunknown <stewart@willster.(none)>2006-10-23 23:57:28 +1000
committerunknown <stewart@willster.(none)>2006-10-23 23:57:28 +1000
commit399cd9f71651200edc8cc79f6d9d6c3c6be9c94a (patch)
tree90bbcca41806eb5b257f773c6bd0c6bc16845ffe /sql/ha_ndbcluster.cc
parent46152464aa27954659a028d625f82acc601b7bbe (diff)
parent8335ed7316e76f056dc763fd68aab9d7ca3fa8d9 (diff)
downloadmariadb-git-399cd9f71651200edc8cc79f6d9d6c3c6be9c94a.tar.gz
Merge willster.(none):/home/stewart/Documents/MySQL/4.1/bug19914-mk2-merge2
into willster.(none):/home/stewart/Documents/MySQL/5.0/ndb sql/sql_select.cc: Auto merged sql/ha_ndbcluster.cc: merge sql/ha_ndbcluster.h: merge
Diffstat (limited to 'sql/ha_ndbcluster.cc')
-rw-r--r--sql/ha_ndbcluster.cc40
1 files changed, 32 insertions, 8 deletions
diff --git a/sql/ha_ndbcluster.cc b/sql/ha_ndbcluster.cc
index e9e2103cba7..22db54695e5 100644
--- a/sql/ha_ndbcluster.cc
+++ b/sql/ha_ndbcluster.cc
@@ -114,7 +114,7 @@ static int packfrm(const void *data, uint len, const void **pack_data, uint *pac
static int unpackfrm(const void **data, uint *len,
const void* pack_data);
-static int ndb_get_table_statistics(Ndb*, const char *,
+static int ndb_get_table_statistics(ha_ndbcluster*, bool, Ndb*, const char *,
struct Ndb_statistics *);
// Util thread variables
@@ -372,7 +372,7 @@ int ha_ndbcluster::records_update()
Ndb *ndb= get_ndb();
struct Ndb_statistics stat;
ndb->setDatabaseName(m_dbname);
- if ((result= ndb_get_table_statistics(ndb, m_tabname, &stat)) == 0){
+ if ((result= ndb_get_table_statistics(ndb, true, m_tabname, &stat)) == 0){
mean_rec_length= stat.row_size;
data_file_length= stat.fragment_memory;
info->records= stat.row_count;
@@ -383,7 +383,8 @@ int ha_ndbcluster::records_update()
if (get_thd_ndb(thd)->error)
info->no_uncommitted_rows_count= 0;
}
- records= info->records+ info->no_uncommitted_rows_count;
+ if(result==0)
+ records= info->records+ info->no_uncommitted_rows_count;
DBUG_RETURN(result);
}
@@ -3118,7 +3119,7 @@ int ha_ndbcluster::info(uint flag)
struct Ndb_statistics stat;
ndb->setDatabaseName(m_dbname);
if (current_thd->variables.ndb_use_exact_count &&
- (result= ndb_get_table_statistics(ndb, m_tabname, &stat)) == 0)
+ (result= ndb_get_table_statistics(ndb, true, m_tabname, &stat)) == 0)
{
mean_rec_length= stat.row_size;
data_file_length= stat.fragment_memory;
@@ -4756,7 +4757,15 @@ int ha_ndbcluster::open(const char *name, int mode, uint test_if_locked)
res= get_metadata(name);
if (!res)
- info(HA_STATUS_VARIABLE | HA_STATUS_CONST);
+ {
+ Ndb *ndb= get_ndb();
+ ndb->setDatabaseName(m_dbname);
+ Uint64 rows= 0;
+ res= ndb_get_table_statistics(NULL, false, ndb, m_tabname, &rows, 0);
+ records= rows;
+ if(!res)
+ res= info(HA_STATUS_CONST);
+ }
DBUG_RETURN(res);
}
@@ -5899,12 +5908,13 @@ static int unpackfrm(const void **unpack_data, uint *unpack_len,
static
int
-ndb_get_table_statistics(Ndb* ndb, const char * table,
+ndb_get_table_statistics(ha_ndbcluster* file, bool report_error, Ndb* ndb,
struct Ndb_statistics * ndbstat)
{
NdbTransaction* pTrans;
NdbError error;
int retries= 10;
+ int reterr= 0;
int retry_sleep= 30 * 1000; /* 30 milliseconds */
char buff[22], buff2[22], buff3[22], buff4[22];
DBUG_ENTER("ndb_get_table_statistics");
@@ -5995,6 +6005,19 @@ ndb_get_table_statistics(Ndb* ndb, const char * table,
DBUG_RETURN(0);
retry:
+ if(report_error)
+ {
+ if (file)
+ {
+ reterr= file->ndb_err(pTrans);
+ }
+ else
+ {
+ const NdbError& tmp= error;
+ ERR_PRINT(tmp);
+ reterr= ndb_to_mysql_error(&tmp);
+ }
+ }
if (pTrans)
{
ndb->closeTransaction(pTrans);
@@ -6007,8 +6030,9 @@ retry:
}
break;
} while(1);
- DBUG_PRINT("exit", ("failed, error %u(%s)", error.code, error.message));
- ERR_RETURN(error);
+ DBUG_PRINT("exit", ("failed, reterr: %u, NdbError %u(%s)", reterr,
+ error.code, error.message));
+ DBUG_RETURN(reterr);
}
/*