mirror of
https://github.com/MariaDB/server.git
synced 2025-01-18 21:12:26 +01:00
Merge mskold@bk-internal.mysql.com:/home/bk/mysql-5.0-ndb
into mysql.com:/usr/local/home/marty/MySQL/test/mysql-5.0-ndb
This commit is contained in:
commit
b371e8a567
13 changed files with 156 additions and 55 deletions
|
@ -811,7 +811,7 @@ sub find
|
|||
sub rm_all
|
||||
{
|
||||
my(@rm_files)=@_;
|
||||
my($dir,$current_dir,@files,@dirs);
|
||||
my($dir,$current_dir,@files,@dirs,$removed);
|
||||
$current_dir = `pwd`; chomp($current_dir);
|
||||
|
||||
foreach $dir (@rm_files)
|
||||
|
@ -835,7 +835,9 @@ sub rm_all
|
|||
}
|
||||
if ($#files >= 0)
|
||||
{
|
||||
system("rm -f " . join(" ",@files)) && abort("Can't remove files from $dir");
|
||||
$removed= unlink @files;
|
||||
print "rm_all : removed $removed files in $current_dir/$dir\n" if ($opt_debug);
|
||||
abort("Can't remove all $#files+1 from $current_dir/$dir, just $removed") if $removed != $#files+1;
|
||||
}
|
||||
foreach $dir (@dirs)
|
||||
{
|
||||
|
|
|
@ -637,7 +637,7 @@ extern int pthread_dummy(int);
|
|||
MySQL can survive with 32K, but some glibc libraries require > 128K stack
|
||||
To resolve hostnames
|
||||
*/
|
||||
#define DEFAULT_THREAD_STACK (192*1024L)
|
||||
#define DEFAULT_THREAD_STACK (256*1024L)
|
||||
#else
|
||||
#define DEFAULT_THREAD_STACK (192*1024)
|
||||
#endif
|
||||
|
|
|
@ -2388,3 +2388,16 @@ WART 0100 1
|
|||
WART 0200 1
|
||||
WART 0300 3
|
||||
DROP TABLE t1;
|
||||
CREATE TABLE t1 ( a BLOB, INDEX (a(20)) );
|
||||
CREATE TABLE t2 ( a BLOB, INDEX (a(20)) );
|
||||
INSERT INTO t1 VALUES ('one'),('two'),('three'),('four'),('five');
|
||||
INSERT INTO t2 VALUES ('one'),('two'),('three'),('four'),('five');
|
||||
EXPLAIN SELECT * FROM t1 LEFT JOIN t2 USE INDEX (a) ON t1.a=t2.a;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 ALL NULL NULL NULL NULL 5
|
||||
1 SIMPLE t2 ref a a 23 test.t1.a 2
|
||||
EXPLAIN SELECT * FROM t1 LEFT JOIN t2 FORCE INDEX (a) ON t1.a=t2.a;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 ALL NULL NULL NULL NULL 5
|
||||
1 SIMPLE t2 ref a a 23 test.t1.a 2
|
||||
DROP TABLE t1, t2;
|
||||
|
|
|
@ -1970,3 +1970,18 @@ SELECT K2C4, K4N4, F2I4 FROM t1
|
|||
WHERE K2C4 = 'WART' AND (K2C4 = 'WART' OR K4N4 = '0200');
|
||||
|
||||
DROP TABLE t1;
|
||||
|
||||
#
|
||||
# Test case for bug 7520: a wrong cost of the index for a BLOB field
|
||||
#
|
||||
|
||||
CREATE TABLE t1 ( a BLOB, INDEX (a(20)) );
|
||||
CREATE TABLE t2 ( a BLOB, INDEX (a(20)) );
|
||||
|
||||
INSERT INTO t1 VALUES ('one'),('two'),('three'),('four'),('five');
|
||||
INSERT INTO t2 VALUES ('one'),('two'),('three'),('four'),('five');
|
||||
|
||||
EXPLAIN SELECT * FROM t1 LEFT JOIN t2 USE INDEX (a) ON t1.a=t2.a;
|
||||
EXPLAIN SELECT * FROM t1 LEFT JOIN t2 FORCE INDEX (a) ON t1.a=t2.a;
|
||||
|
||||
DROP TABLE t1, t2;
|
||||
|
|
|
@ -31,14 +31,14 @@ Transporter::Transporter(TransporterRegistry &t_reg,
|
|||
TransporterType _type,
|
||||
const char *lHostName,
|
||||
const char *rHostName,
|
||||
int r_port,
|
||||
int s_port,
|
||||
bool _isMgmConnection,
|
||||
NodeId lNodeId,
|
||||
NodeId rNodeId,
|
||||
NodeId serverNodeId,
|
||||
int _byteorder,
|
||||
bool _compression, bool _checksum, bool _signalId)
|
||||
: m_r_port(r_port), remoteNodeId(rNodeId), localNodeId(lNodeId),
|
||||
: m_s_port(s_port), remoteNodeId(rNodeId), localNodeId(lNodeId),
|
||||
isServer(lNodeId==serverNodeId), isMgmConnection(_isMgmConnection),
|
||||
m_packer(_signalId, _checksum),
|
||||
m_type(_type),
|
||||
|
@ -63,10 +63,10 @@ Transporter::Transporter(TransporterRegistry &t_reg,
|
|||
if (strlen(lHostName) > 0)
|
||||
Ndb_getInAddr(&localHostAddress, lHostName);
|
||||
|
||||
DBUG_PRINT("info",("rId=%d lId=%d isServer=%d rHost=%s lHost=%s r_port=%d",
|
||||
DBUG_PRINT("info",("rId=%d lId=%d isServer=%d rHost=%s lHost=%s s_port=%d",
|
||||
remoteNodeId, localNodeId, isServer,
|
||||
remoteHostName, localHostName,
|
||||
r_port));
|
||||
s_port));
|
||||
|
||||
byteOrder = _byteorder;
|
||||
compressionUsed = _compression;
|
||||
|
@ -76,10 +76,13 @@ Transporter::Transporter(TransporterRegistry &t_reg,
|
|||
m_connected = false;
|
||||
m_timeOutMillis = 1000;
|
||||
|
||||
if(s_port<0)
|
||||
s_port= -s_port; // was dynamic
|
||||
|
||||
if (isServer)
|
||||
m_socket_client= 0;
|
||||
else
|
||||
m_socket_client= new SocketClient(remoteHostName, r_port,
|
||||
m_socket_client= new SocketClient(remoteHostName, s_port,
|
||||
new SocketAuthSimple("ndbd",
|
||||
"ndbd passwd"));
|
||||
DBUG_VOID_RETURN;
|
||||
|
@ -126,7 +129,7 @@ Transporter::connect_client() {
|
|||
|
||||
DBUG_ENTER("Transporter::connect_client");
|
||||
|
||||
DBUG_PRINT("info",("port %d isMgmConnection=%d",m_r_port,isMgmConnection));
|
||||
DBUG_PRINT("info",("port %d isMgmConnection=%d",m_s_port,isMgmConnection));
|
||||
|
||||
SocketOutputStream s_output(sockfd);
|
||||
SocketInputStream s_input(sockfd);
|
||||
|
|
|
@ -70,15 +70,17 @@ public:
|
|||
NodeId getLocalNodeId() const;
|
||||
|
||||
/**
|
||||
* Get r_port we're connecting to
|
||||
* Get port we're connecting to (signed)
|
||||
*/
|
||||
unsigned int get_r_port() { return m_r_port; };
|
||||
int get_s_port() { return m_s_port; };
|
||||
|
||||
/**
|
||||
* Set r_port to connect to
|
||||
* Set port to connect to (signed)
|
||||
*/
|
||||
void set_r_port(unsigned int port) {
|
||||
m_r_port = port;
|
||||
void set_s_port(int port) {
|
||||
m_s_port = port;
|
||||
if(port<0)
|
||||
port= -port;
|
||||
if(m_socket_client)
|
||||
m_socket_client->set_port(port);
|
||||
};
|
||||
|
@ -88,7 +90,7 @@ protected:
|
|||
TransporterType,
|
||||
const char *lHostName,
|
||||
const char *rHostName,
|
||||
int r_port,
|
||||
int s_port,
|
||||
bool isMgmConnection,
|
||||
NodeId lNodeId,
|
||||
NodeId rNodeId,
|
||||
|
@ -118,7 +120,7 @@ protected:
|
|||
struct in_addr remoteHostAddress;
|
||||
struct in_addr localHostAddress;
|
||||
|
||||
unsigned int m_r_port;
|
||||
int m_s_port;
|
||||
|
||||
const NodeId remoteNodeId;
|
||||
const NodeId localNodeId;
|
||||
|
|
|
@ -1211,7 +1211,7 @@ TransporterRegistry::start_clients_thread()
|
|||
switch(performStates[nodeId]){
|
||||
case CONNECTING:
|
||||
if(!t->isConnected() && !t->isServer) {
|
||||
if(t->get_r_port() <= 0) { // Port is dynamic
|
||||
if(t->get_s_port() <= 0) { // Port is dynamic
|
||||
int server_port= 0;
|
||||
struct ndb_mgm_reply mgm_reply;
|
||||
int res;
|
||||
|
@ -1222,27 +1222,24 @@ TransporterRegistry::start_clients_thread()
|
|||
CFG_CONNECTION_SERVER_PORT,
|
||||
&server_port,
|
||||
&mgm_reply);
|
||||
DBUG_PRINT("info",("Got %s port %u for %d -> %d (ret: %d)",
|
||||
(server_port<=0)?"dynamic":"static",
|
||||
DBUG_PRINT("info",("Got dynamic port %d for %d -> %d (ret: %d)",
|
||||
server_port,t->getRemoteNodeId(),
|
||||
t->getLocalNodeId(),res));
|
||||
if(server_port<0)
|
||||
server_port = -server_port; // was a dynamic port
|
||||
|
||||
if(res>=0)
|
||||
t->set_r_port(server_port);
|
||||
if(res>=0 && server_port)
|
||||
t->set_s_port(server_port);
|
||||
else
|
||||
ndbout_c("Failed to get dynamic port to connect to: %d", res);
|
||||
}
|
||||
if (theTransporterTypes[nodeId] != tt_TCP_TRANSPORTER
|
||||
|| t->get_r_port() > 0) {
|
||||
|| t->get_s_port() > 0) {
|
||||
int result = t->connect_client();
|
||||
if (result<0)
|
||||
ndbout_c("Error while trying to make connection (Node %u to"
|
||||
" %u via port %u) error: %d. Retrying...",
|
||||
t->getRemoteNodeId(),
|
||||
t->getLocalNodeId(),
|
||||
t->get_r_port());
|
||||
t->get_s_port());
|
||||
} else
|
||||
NdbSleep_MilliSleep(400); // wait before retrying
|
||||
}
|
||||
|
@ -1486,44 +1483,56 @@ TransporterRegistry::get_transporter(NodeId nodeId) {
|
|||
|
||||
NDB_SOCKET_TYPE TransporterRegistry::connect_ndb_mgmd(SocketClient *sc)
|
||||
{
|
||||
NdbMgmHandle h;
|
||||
NdbMgmHandle h= ndb_mgm_create_handle();
|
||||
struct ndb_mgm_reply mgm_reply;
|
||||
char *cs, c[100];
|
||||
bool d=false;
|
||||
|
||||
h= ndb_mgm_create_handle();
|
||||
|
||||
if(strlen(sc->get_server_name())>80)
|
||||
if ( h == NULL )
|
||||
{
|
||||
/*
|
||||
* server name is long. malloc enough for it and the port number
|
||||
*/
|
||||
cs= (char*)malloc((strlen(sc->get_server_name())+20)*sizeof(char));
|
||||
if(!cs)
|
||||
return NDB_INVALID_SOCKET;
|
||||
d= true;
|
||||
return NDB_INVALID_SOCKET;
|
||||
}
|
||||
else
|
||||
cs = &c[0];
|
||||
|
||||
snprintf(cs,(d)?strlen(sc->get_server_name()+20):sizeof(c),
|
||||
"%s:%u",sc->get_server_name(),sc->get_port());
|
||||
|
||||
ndb_mgm_set_connectstring(h, cs);
|
||||
/**
|
||||
* Set connectstring
|
||||
*/
|
||||
{
|
||||
char c[100];
|
||||
char *cs= &c[0];
|
||||
int len= strlen(sc->get_server_name())+20;
|
||||
if( len > sizeof(c) )
|
||||
{
|
||||
/*
|
||||
* server name is long. malloc enough for it and the port number
|
||||
*/
|
||||
cs= (char*)malloc(len*sizeof(char));
|
||||
if(!cs)
|
||||
{
|
||||
ndb_mgm_destroy_handle(&h);
|
||||
return NDB_INVALID_SOCKET;
|
||||
}
|
||||
}
|
||||
snprintf(cs,len,"%s:%u",sc->get_server_name(),sc->get_port());
|
||||
ndb_mgm_set_connectstring(h, cs);
|
||||
if(cs != &c[0])
|
||||
free(cs);
|
||||
}
|
||||
|
||||
if(ndb_mgm_connect(h, 0, 0, 0)<0)
|
||||
{
|
||||
ndb_mgm_destroy_handle(&h);
|
||||
return NDB_INVALID_SOCKET;
|
||||
|
||||
}
|
||||
|
||||
for(unsigned int i=0;i < m_transporter_interface.size();i++)
|
||||
ndb_mgm_set_connection_int_parameter(h,
|
||||
if (ndb_mgm_set_connection_int_parameter(h,
|
||||
get_localNodeId(),
|
||||
m_transporter_interface[i].m_remote_nodeId,
|
||||
CFG_CONNECTION_SERVER_PORT,
|
||||
m_transporter_interface[i].m_s_service_port,
|
||||
&mgm_reply);
|
||||
if(d)
|
||||
free(cs);
|
||||
|
||||
&mgm_reply) < 0)
|
||||
{
|
||||
ndb_mgm_destroy_handle(&h);
|
||||
return NDB_INVALID_SOCKET;
|
||||
}
|
||||
return ndb_mgm_convert_to_transporter(h);
|
||||
}
|
||||
|
||||
|
|
|
@ -154,9 +154,13 @@ do
|
|||
ts=`time_spec $time`
|
||||
res_txt=""
|
||||
case $res in
|
||||
0) pass; res_txt="PASSED"; res_dir=" ";;
|
||||
0) pass; res_txt="PASSED";;
|
||||
*) fail; res_txt="FAILED";;
|
||||
esac
|
||||
|
||||
if [ ! -d "result.$no" ]; then res_dir=" "; fi
|
||||
|
||||
|
||||
total=`expr $total + $time`
|
||||
|
||||
(
|
||||
|
|
|
@ -1714,6 +1714,26 @@ innobase_close_connection(
|
|||
** InnoDB database tables
|
||||
*****************************************************************************/
|
||||
|
||||
/********************************************************************
|
||||
Get the record format from the data dictionary. */
|
||||
enum row_type
|
||||
ha_innobase::get_row_type() const
|
||||
/*=============================*/
|
||||
/* out: ROW_TYPE_REDUNDANT or ROW_TYPE_COMPACT */
|
||||
{
|
||||
row_prebuilt_t* prebuilt = (row_prebuilt_t*) innobase_prebuilt;
|
||||
|
||||
if (prebuilt && prebuilt->table) {
|
||||
if (prebuilt->table->comp) {
|
||||
return(ROW_TYPE_COMPACT);
|
||||
} else {
|
||||
return(ROW_TYPE_REDUNDANT);
|
||||
}
|
||||
}
|
||||
ut_ad(0);
|
||||
return(ROW_TYPE_NOT_USED);
|
||||
}
|
||||
|
||||
/********************************************************************
|
||||
Gives the file extension of an InnoDB single-table tablespace. */
|
||||
|
||||
|
|
|
@ -96,6 +96,11 @@ class ha_innobase: public handler
|
|||
{
|
||||
}
|
||||
~ha_innobase() {}
|
||||
/*
|
||||
Get the row type from the storage engine. If this method returns
|
||||
ROW_TYPE_NOT_USED, the information in HA_CREATE_INFO should be used.
|
||||
*/
|
||||
enum row_type get_row_type() const;
|
||||
|
||||
const char* table_type() const { return("InnoDB");}
|
||||
const char *index_type(uint key_number) { return "BTREE"; }
|
||||
|
|
|
@ -388,6 +388,12 @@ public:
|
|||
virtual ha_rows estimate_rows_upper_bound()
|
||||
{ return records+EXTRA_RECORDS; }
|
||||
|
||||
/*
|
||||
Get the row type from the storage engine. If this method returns
|
||||
ROW_TYPE_NOT_USED, the information in HA_CREATE_INFO should be used.
|
||||
*/
|
||||
virtual enum row_type get_row_type() const { return ROW_TYPE_NOT_USED; }
|
||||
|
||||
virtual const char *index_type(uint key_number) { DBUG_ASSERT(0); return "";}
|
||||
|
||||
int ha_index_init(uint idx)
|
||||
|
|
|
@ -2048,10 +2048,31 @@ static int get_schema_tables_record(THD *thd, struct st_table_list *tables,
|
|||
tmp_buff= file->table_type();
|
||||
table->field[4]->store(tmp_buff, strlen(tmp_buff), cs);
|
||||
table->field[5]->store((longlong) share->frm_version);
|
||||
tmp_buff= ((share->db_options_in_use &
|
||||
HA_OPTION_COMPRESS_RECORD) ? "Compressed" :
|
||||
(share->db_options_in_use & HA_OPTION_PACK_RECORD) ?
|
||||
"Dynamic" : "Fixed");
|
||||
enum row_type row_type = file->get_row_type();
|
||||
switch (row_type) {
|
||||
case ROW_TYPE_NOT_USED:
|
||||
case ROW_TYPE_DEFAULT:
|
||||
tmp_buff= ((share->db_options_in_use &
|
||||
HA_OPTION_COMPRESS_RECORD) ? "Compressed" :
|
||||
(share->db_options_in_use & HA_OPTION_PACK_RECORD) ?
|
||||
"Dynamic" : "Fixed");
|
||||
break;
|
||||
case ROW_TYPE_FIXED:
|
||||
tmp_buff= "Fixed";
|
||||
break;
|
||||
case ROW_TYPE_DYNAMIC:
|
||||
tmp_buff= "Dynamic";
|
||||
break;
|
||||
case ROW_TYPE_COMPRESSED:
|
||||
tmp_buff= "Compressed";
|
||||
break;
|
||||
case ROW_TYPE_REDUNDANT:
|
||||
tmp_buff= "Redundant";
|
||||
break;
|
||||
case ROW_TYPE_COMPACT:
|
||||
tmp_buff= "Compact";
|
||||
break;
|
||||
}
|
||||
table->field[6]->store(tmp_buff, strlen(tmp_buff), cs);
|
||||
if (!tables->schema_table)
|
||||
{
|
||||
|
|
|
@ -661,6 +661,7 @@ int openfrm(THD *thd, const char *name, const char *alias, uint db_stat,
|
|||
if (!(field->flags & BINARY_FLAG))
|
||||
keyinfo->flags|= HA_END_SPACE_KEY;
|
||||
}
|
||||
set_if_bigger(share->max_key_length, keyinfo->key_length);
|
||||
if (field->type() == MYSQL_TYPE_BIT)
|
||||
key_part->key_part_flag|= HA_BIT_PART;
|
||||
|
||||
|
|
Loading…
Reference in a new issue