Commit f4dc811e authored by georg@lmy002.wdf.sap.corp's avatar georg@lmy002.wdf.sap.corp

Merge grichter@bk-internal.mysql.com:/home/bk/mysql-4.1

into lmy002.wdf.sap.corp:/home/georg/work/mysql/prod/mysql-4.1
parents e8e5cd50 88773a8c
...@@ -189,11 +189,13 @@ void __CDECL hfree(void *ptr); ...@@ -189,11 +189,13 @@ void __CDECL hfree(void *ptr);
#endif #endif
#endif /* MSDOS */ #endif /* MSDOS */
#ifndef errno /* did we already get it? */
#ifdef HAVE_ERRNO_AS_DEFINE #ifdef HAVE_ERRNO_AS_DEFINE
#include <errno.h> /* errno is a define */ #include <errno.h> /* errno is a define */
#else #else
extern int errno; /* declare errno */ extern int errno; /* declare errno */
#endif #endif
#endif /* #ifndef errno */
extern const char ** NEAR my_errmsg[]; extern const char ** NEAR my_errmsg[];
extern char NEAR errbuff[NRERRBUFFS][ERRMSGSIZE]; extern char NEAR errbuff[NRERRBUFFS][ERRMSGSIZE];
extern char *home_dir; /* Home directory for user */ extern char *home_dir; /* Home directory for user */
......
# Setup connections to both MySQL Servers connected to the cluster
connect (server1,127.0.0.1,root,,test,$MASTER_MYPORT,);
connect (server2,127.0.0.1,root,,test,$MASTER_MYPORT1,);
# Check that server1 has NDB support
connection server1;
disable_query_log;
--disable_warnings
drop table if exists t1, t2;
--enable_warnings
flush tables;
@r/have_ndb.require show variables like "have_ndbcluster";
# @r/server_id.require show variables like "server_id";
enable_query_log;
# Check that server2 has NDB support
connection server2;
disable_query_log;
--disable_warnings
drop table if exists t1, t2;
--enable_warnings
flush tables;
@r/have_ndb.require show variables like "have_ndbcluster";
# @r/server_id1.require show variables like "server_id";
enable_query_log;
# Set the default connection to 'server1'
connection server1;
...@@ -170,3 +170,17 @@ c ...@@ -170,3 +170,17 @@ c
4 4
5 5
drop table t1; drop table t1;
create table t1 ( a int primary key, b varchar(10), c varchar(10), index (b) )
engine=ndb;
insert into t1 values (1,'one','one'), (2,'two','two'), (3,'three','three');
create index c on t1(c);
select * from t1 where b = 'two';
a b c
2 two two
alter table t1 drop index c;
select * from t1 where b = 'two';
ERROR 42S02: Table 'test.t1' doesn't exist
select * from t1 where b = 'two';
a b c
2 two two
drop table t1;
drop table if exists t1, t2, t3, t4;
flush status;
create table t1 (a int) engine=ndbcluster;
create table t2 (a int) engine=ndbcluster;
insert into t1 value (2);
insert into t2 value (3);
select * from t1;
a
2
select * from t2;
a
3
show status like 'handler_discover%';
Variable_name Value
Handler_discover 0
flush status;
select * from t1;
a
2
update t1 set a=3 where a=2;
show status like 'handler_discover%';
Variable_name Value
Handler_discover 1
create table t3 (a int not null primary key, b varchar(22),
c int, last_col text) engine=ndb;
insert into t3 values(1, 'Hi!', 89, 'Longtext column');
create table t4 (pk int primary key, b int) engine=ndb;
select * from t1;
a
3
select * from t3;
a b c last_col
1 Hi! 89 Longtext column
show status like 'handler_discover%';
Variable_name Value
Handler_discover 1
show tables like 't4';
Tables_in_test (t4)
t4
show status like 'handler_discover%';
Variable_name Value
Handler_discover 2
show tables;
Tables_in_test
t1
t2
t3
t4
drop table t1, t2, t3, t4;
-- source include/have_ndb.inc -- source include/have_ndb.inc
-- source include/have_multi_ndb.inc
--disable_warnings --disable_warnings
DROP TABLE IF EXISTS t1; DROP TABLE IF EXISTS t1;
...@@ -133,6 +134,21 @@ INSERT INTO t1 VALUES (1,2,0),(18,19,4),(20,21,0); ...@@ -133,6 +134,21 @@ INSERT INTO t1 VALUES (1,2,0),(18,19,4),(20,21,0);
select c from t1 order by c; select c from t1 order by c;
drop table t1; drop table t1;
create table t1 ( a int primary key, b varchar(10), c varchar(10), index (b) )
engine=ndb;
insert into t1 values (1,'one','one'), (2,'two','two'), (3,'three','three');
create index c on t1(c);
connection server2;
select * from t1 where b = 'two';
connection server1;
alter table t1 drop index c;
connection server2;
--error 1146
select * from t1 where b = 'two';
select * from t1 where b = 'two';
connection server1;
drop table t1;
#--disable_warnings #--disable_warnings
#DROP TABLE IF EXISTS t2; #DROP TABLE IF EXISTS t2;
#--enable_warnings #--enable_warnings
......
-- source include/have_ndb.inc
-- source include/have_multi_ndb.inc
--disable_warnings
drop table if exists t1, t2, t3, t4;
--enable_warnings
flush status;
# Create test tables on server1
create table t1 (a int) engine=ndbcluster;
create table t2 (a int) engine=ndbcluster;
insert into t1 value (2);
insert into t2 value (3);
select * from t1;
select * from t2;
show status like 'handler_discover%';
# Connect to server2 and use the tables from there
connection server2;
flush status;
select * from t1;
update t1 set a=3 where a=2;
show status like 'handler_discover%';
# Create a new table on server2
create table t3 (a int not null primary key, b varchar(22),
c int, last_col text) engine=ndb;
insert into t3 values(1, 'Hi!', 89, 'Longtext column');
create table t4 (pk int primary key, b int) engine=ndb;
# Check that the tables are accessible from server1
connection server1;
select * from t1;
select * from t3;
show status like 'handler_discover%';
show tables like 't4';
show status like 'handler_discover%';
show tables;
drop table t1, t2, t3, t4;
...@@ -175,7 +175,7 @@ static uint hash_rec_mask(HASH *hash,HASH_LINK *pos,uint buffmax, ...@@ -175,7 +175,7 @@ static uint hash_rec_mask(HASH *hash,HASH_LINK *pos,uint buffmax,
/* for compilers which can not handle inline */ /* for compilers which can not handle inline */
static static
#if !defined(__SUNPRO_C) && !defined(__USLC__) && !defined(__sgi) #if !defined(__USLC__) && !defined(__sgi)
inline inline
#endif #endif
unsigned int rec_hashnr(HASH *hash,const byte *record) unsigned int rec_hashnr(HASH *hash,const byte *record)
......
...@@ -37,8 +37,7 @@ ...@@ -37,8 +37,7 @@
#include <my_bitmap.h> #include <my_bitmap.h>
#include <m_string.h> #include <m_string.h>
static inline void bitmap_lock(MY_BITMAP* map)
static inline void bitmap_lock(MY_BITMAP *map)
{ {
#ifdef THREAD #ifdef THREAD
if (map->mutex) if (map->mutex)
...@@ -46,8 +45,7 @@ static inline void bitmap_lock(MY_BITMAP *map) ...@@ -46,8 +45,7 @@ static inline void bitmap_lock(MY_BITMAP *map)
#endif #endif
} }
static inline void bitmap_unlock(MY_BITMAP* map)
static inline void bitmap_unlock(MY_BITMAP *map)
{ {
#ifdef THREAD #ifdef THREAD
if (map->mutex) if (map->mutex)
......
...@@ -328,6 +328,35 @@ void ha_ndbcluster::no_uncommitted_rows_reset(THD *thd) ...@@ -328,6 +328,35 @@ void ha_ndbcluster::no_uncommitted_rows_reset(THD *thd)
# The mapped error code # The mapped error code
*/ */
void ha_ndbcluster::invalidateDictionaryCache()
{
NDBDICT *dict= get_ndb()->getDictionary();
DBUG_PRINT("info", ("invalidating %s", m_tabname));
dict->invalidateTable(m_tabname);
table->version=0L; /* Free when thread is ready */
/* Invalidate indexes */
for (uint i= 0; i < table->keys; i++)
{
NDBINDEX *index = (NDBINDEX *) m_index[i].index;
NDBINDEX *unique_index = (NDBINDEX *) m_index[i].unique_index;
NDB_INDEX_TYPE idx_type= m_index[i].type;
switch(idx_type) {
case(PRIMARY_KEY_ORDERED_INDEX):
case(ORDERED_INDEX):
dict->invalidateIndex(index->getName(), m_tabname);
break;
case(UNIQUE_ORDERED_INDEX):
dict->invalidateIndex(index->getName(), m_tabname);
case(UNIQUE_INDEX):
dict->invalidateIndex(unique_index->getName(), m_tabname);
break;
case(PRIMARY_KEY_INDEX):
case(UNDEFINED_INDEX):
break;
}
}
}
int ha_ndbcluster::ndb_err(NdbConnection *trans) int ha_ndbcluster::ndb_err(NdbConnection *trans)
{ {
...@@ -339,11 +368,7 @@ int ha_ndbcluster::ndb_err(NdbConnection *trans) ...@@ -339,11 +368,7 @@ int ha_ndbcluster::ndb_err(NdbConnection *trans)
switch (err.classification) { switch (err.classification) {
case NdbError::SchemaError: case NdbError::SchemaError:
{ {
Ndb *ndb= get_ndb(); invalidateDictionaryCache();
NDBDICT *dict= ndb->getDictionary();
DBUG_PRINT("info", ("invalidateTable %s", m_tabname));
dict->invalidateTable(m_tabname);
table->version=0L; /* Free when thread is ready */
break; break;
} }
default: default:
...@@ -733,7 +758,7 @@ int ha_ndbcluster::get_metadata(const char *path) ...@@ -733,7 +758,7 @@ int ha_ndbcluster::get_metadata(const char *path)
if (!invalidating_ndb_table) if (!invalidating_ndb_table)
{ {
DBUG_PRINT("info", ("Invalidating table")); DBUG_PRINT("info", ("Invalidating table"));
dict->invalidateTable(m_tabname); invalidateDictionaryCache();
invalidating_ndb_table= TRUE; invalidating_ndb_table= TRUE;
} }
else else
......
...@@ -201,6 +201,7 @@ class ha_ndbcluster: public handler ...@@ -201,6 +201,7 @@ class ha_ndbcluster: public handler
void print_results(); void print_results();
longlong get_auto_increment(); longlong get_auto_increment();
void invalidateDictionaryCache();
int ndb_err(NdbConnection*); int ndb_err(NdbConnection*);
bool uses_blob_value(bool all_fields); bool uses_blob_value(bool all_fields);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment