mirror of
https://github.com/MariaDB/server.git
synced 2025-01-19 13:32:33 +01:00
Merge abotchkov@bk-internal.mysql.com:/home/bk/mysql-5.1-new
into mysql.com:/home/hf/work/mysql-5.1.mrg
This commit is contained in:
commit
12e0e7c281
8 changed files with 81 additions and 19 deletions
|
@ -246,17 +246,17 @@ PARTITION BY RANGE(f1)
|
|||
PARTITION part2 VALUES LESS THAN (1000));
|
||||
INSERT INTO t1 VALUES(1, '---1---');
|
||||
INSERT INTO t1 VALUES(2, '---2---');
|
||||
select * from t1;
|
||||
select * from t1 order by f1;
|
||||
f1 f2
|
||||
1 ---1---
|
||||
2 ---2---
|
||||
UPDATE t1 SET f1 = f1 + 4 WHERE f1 = 2;
|
||||
select * from t1;
|
||||
select * from t1 order by f1;
|
||||
f1 f2
|
||||
1 ---1---
|
||||
6 ---2---
|
||||
UPDATE t1 SET f1 = f1 + 4 WHERE f1 = 1;
|
||||
select * from t1;
|
||||
select * from t1 order by f1;
|
||||
f1 f2
|
||||
5 ---1---
|
||||
6 ---2---
|
||||
|
|
|
@ -65,6 +65,9 @@ c1
|
|||
SELECT extractValue(@xml,'/a/child::*');
|
||||
extractValue(@xml,'/a/child::*')
|
||||
b1 b2
|
||||
SELECT extractValue(@xml,'/a/self::*');
|
||||
extractValue(@xml,'/a/self::*')
|
||||
a1 a2
|
||||
SELECT extractValue(@xml,'/a/descendant::*');
|
||||
extractValue(@xml,'/a/descendant::*')
|
||||
b1 c1 b2
|
||||
|
@ -546,6 +549,15 @@ select extractvalue('<a>A</a>','/<a>');
|
|||
ERROR HY000: XPATH syntax error: '>'
|
||||
select extractvalue('<a><b>b</b><b!>b!</b!></a>','//b!');
|
||||
ERROR HY000: XPATH syntax error: '!'
|
||||
select extractvalue('<a>A<b>B<c>C</c></b></a>','/a/descendant::*');
|
||||
extractvalue('<a>A<b>B<c>C</c></b></a>','/a/descendant::*')
|
||||
B C
|
||||
select extractvalue('<a>A<b>B<c>C</c></b></a>','/a/self::*');
|
||||
extractvalue('<a>A<b>B<c>C</c></b></a>','/a/self::*')
|
||||
A
|
||||
select extractvalue('<a>A<b>B<c>C</c></b></a>','/a/descendant-or-self::*');
|
||||
extractvalue('<a>A<b>B<c>C</c></b></a>','/a/descendant-or-self::*')
|
||||
A B C
|
||||
select extractvalue('<A_B>A</A_B>','/A_B');
|
||||
extractvalue('<A_B>A</A_B>','/A_B')
|
||||
A
|
||||
|
|
|
@ -252,9 +252,9 @@ PARTITION BY RANGE(f1)
|
|||
PARTITION part2 VALUES LESS THAN (1000));
|
||||
INSERT INTO t1 VALUES(1, '---1---');
|
||||
INSERT INTO t1 VALUES(2, '---2---');
|
||||
select * from t1;
|
||||
select * from t1 order by f1;
|
||||
UPDATE t1 SET f1 = f1 + 4 WHERE f1 = 2;
|
||||
select * from t1;
|
||||
select * from t1 order by f1;
|
||||
UPDATE t1 SET f1 = f1 + 4 WHERE f1 = 1;
|
||||
select * from t1;
|
||||
select * from t1 order by f1;
|
||||
drop table t1;
|
||||
|
|
|
@ -23,6 +23,7 @@ SELECT extractValue(@xml,'/*/*');
|
|||
SELECT extractValue(@xml,'/*/*/*');
|
||||
|
||||
SELECT extractValue(@xml,'/a/child::*');
|
||||
SELECT extractValue(@xml,'/a/self::*');
|
||||
SELECT extractValue(@xml,'/a/descendant::*');
|
||||
SELECT extractValue(@xml,'/a/descendant-or-self::*');
|
||||
SELECT extractValue(@xml,'/a/attribute::*');
|
||||
|
@ -245,6 +246,11 @@ select extractvalue('<a>A</a>','/<a>');
|
|||
select extractvalue('<a><b>b</b><b!>b!</b!></a>','//b!');
|
||||
|
||||
#
|
||||
# Bug #16315 XML: extractvalue() handles self badly
|
||||
#
|
||||
select extractvalue('<a>A<b>B<c>C</c></b></a>','/a/descendant::*');
|
||||
select extractvalue('<a>A<b>B<c>C</c></b></a>','/a/self::*');
|
||||
select extractvalue('<a>A<b>B<c>C</c></b></a>','/a/descendant-or-self::*');
|
||||
# Bug #16320 XML: extractvalue() won't accept names containing underscores
|
||||
#
|
||||
select extractvalue('<A_B>A</A_B>','/A_B');
|
||||
|
|
|
@ -4728,13 +4728,14 @@ int ha_ndbcluster::final_drop_index(TABLE *table_arg)
|
|||
int ha_ndbcluster::rename_table(const char *from, const char *to)
|
||||
{
|
||||
NDBDICT *dict;
|
||||
char old_dbname[FN_HEADLEN];
|
||||
char new_tabname[FN_HEADLEN];
|
||||
const NDBTAB *orig_tab;
|
||||
int result;
|
||||
|
||||
DBUG_ENTER("ha_ndbcluster::rename_table");
|
||||
DBUG_PRINT("info", ("Renaming %s to %s", from, to));
|
||||
set_dbname(from);
|
||||
set_dbname(from, old_dbname);
|
||||
set_tabname(from);
|
||||
set_tabname(to, new_tabname);
|
||||
|
||||
|
@ -4742,6 +4743,7 @@ int ha_ndbcluster::rename_table(const char *from, const char *to)
|
|||
DBUG_RETURN(my_errno= HA_ERR_NO_CONNECTION);
|
||||
|
||||
Ndb *ndb= get_ndb();
|
||||
ndb->setDatabaseName(old_dbname);
|
||||
dict= ndb->getDictionary();
|
||||
if (!(orig_tab= dict->getTable(m_tabname)))
|
||||
ERR_RETURN(dict->getNdbError());
|
||||
|
@ -4833,7 +4835,8 @@ int ha_ndbcluster::rename_table(const char *from, const char *to)
|
|||
current_thd->query, current_thd->query_length,
|
||||
m_dbname, new_tabname,
|
||||
0, 0,
|
||||
SOT_RENAME_TABLE);
|
||||
SOT_RENAME_TABLE,
|
||||
old_dbname, m_tabname);
|
||||
}
|
||||
if (share)
|
||||
free_share(&share);
|
||||
|
|
|
@ -885,7 +885,8 @@ int ndbcluster_log_schema_op(THD *thd, NDB_SHARE *share,
|
|||
const char *db, const char *table_name,
|
||||
uint32 ndb_table_id,
|
||||
uint32 ndb_table_version,
|
||||
enum SCHEMA_OP_TYPE type)
|
||||
enum SCHEMA_OP_TYPE type,
|
||||
const char *old_db, const char *old_table_name)
|
||||
{
|
||||
DBUG_ENTER("ndbcluster_log_schema_op");
|
||||
Thd_ndb *thd_ndb= get_thd_ndb(thd);
|
||||
|
@ -919,10 +920,19 @@ int ndbcluster_log_schema_op(THD *thd, NDB_SHARE *share,
|
|||
query= tmp_buf2;
|
||||
query_length= (uint) (strxmov(tmp_buf2, "drop table `",
|
||||
table_name, "`", NullS) - tmp_buf2);
|
||||
// fall through
|
||||
case SOT_CREATE_TABLE:
|
||||
// fall through
|
||||
if (!share)
|
||||
get_a_share= 1;
|
||||
break;
|
||||
case SOT_RENAME_TABLE:
|
||||
/* redo the rename table query as is may contain several tables */
|
||||
query= tmp_buf2;
|
||||
query_length= (uint) (strxmov(tmp_buf2, "rename table `",
|
||||
old_db, ".", old_table_name, "` to `",
|
||||
db, ".", table_name, "`", NullS) - tmp_buf2);
|
||||
if (!share)
|
||||
get_a_share= 1;
|
||||
break;
|
||||
case SOT_CREATE_TABLE:
|
||||
// fall through
|
||||
case SOT_ALTER_TABLE:
|
||||
if (!share)
|
||||
|
@ -983,8 +993,8 @@ int ndbcluster_log_schema_op(THD *thd, NDB_SHARE *share,
|
|||
}
|
||||
|
||||
Ndb *ndb= thd_ndb->ndb;
|
||||
char old_db[FN_REFLEN];
|
||||
strcpy(old_db, ndb->getDatabaseName());
|
||||
char save_db[FN_REFLEN];
|
||||
strcpy(save_db, ndb->getDatabaseName());
|
||||
|
||||
char tmp_buf[SCHEMA_QUERY_SIZE];
|
||||
NDBDICT *dict= ndb->getDictionary();
|
||||
|
@ -1091,7 +1101,7 @@ end:
|
|||
|
||||
if (trans)
|
||||
ndb->closeTransaction(trans);
|
||||
ndb->setDatabaseName(old_db);
|
||||
ndb->setDatabaseName(save_db);
|
||||
|
||||
/*
|
||||
Wait for other mysqld's to acknowledge the table operation
|
||||
|
@ -1169,8 +1179,8 @@ ndbcluster_update_slock(THD *thd,
|
|||
const NdbError *ndb_error= 0;
|
||||
uint32 node_id= g_ndb_cluster_connection->node_id();
|
||||
Ndb *ndb= check_ndb_in_thd(thd);
|
||||
char old_db[128];
|
||||
strcpy(old_db, ndb->getDatabaseName());
|
||||
char save_db[FN_HEADLEN];
|
||||
strcpy(save_db, ndb->getDatabaseName());
|
||||
|
||||
char tmp_buf[SCHEMA_QUERY_SIZE];
|
||||
NDBDICT *dict= ndb->getDictionary();
|
||||
|
@ -1292,7 +1302,7 @@ end:
|
|||
db, table_name);
|
||||
if (trans)
|
||||
ndb->closeTransaction(trans);
|
||||
ndb->setDatabaseName(old_db);
|
||||
ndb->setDatabaseName(save_db);
|
||||
DBUG_RETURN(0);
|
||||
}
|
||||
|
||||
|
|
|
@ -95,7 +95,9 @@ int ndbcluster_log_schema_op(THD *thd, NDB_SHARE *share,
|
|||
const char *db, const char *table_name,
|
||||
uint32 ndb_table_id,
|
||||
uint32 ndb_table_version,
|
||||
enum SCHEMA_OP_TYPE type);
|
||||
enum SCHEMA_OP_TYPE type,
|
||||
const char *old_db= 0,
|
||||
const char *old_table_name= 0);
|
||||
int ndbcluster_handle_drop_table(Ndb *ndb, const char *event_name,
|
||||
NDB_SHARE *share);
|
||||
void ndb_rep_event_name(String *event_name,
|
||||
|
|
|
@ -252,6 +252,18 @@ public:
|
|||
};
|
||||
|
||||
|
||||
/* Returns self */
|
||||
class Item_nodeset_func_selfbyname: public Item_nodeset_func_axisbyname
|
||||
{
|
||||
public:
|
||||
Item_nodeset_func_selfbyname(Item *a, const char *n_arg, uint l_arg,
|
||||
String *pxml):
|
||||
Item_nodeset_func_axisbyname(a, n_arg, l_arg, pxml) {}
|
||||
const char *func_name() const { return "xpath_selfbyname"; }
|
||||
String *val_nodeset(String *nodeset);
|
||||
};
|
||||
|
||||
|
||||
/* Returns children */
|
||||
class Item_nodeset_func_childbyname: public Item_nodeset_func_axisbyname
|
||||
{
|
||||
|
@ -572,6 +584,20 @@ String * Item_nodeset_func_union::val_nodeset(String *nodeset)
|
|||
}
|
||||
|
||||
|
||||
String *Item_nodeset_func_selfbyname::val_nodeset(String *nodeset)
|
||||
{
|
||||
prepare(nodeset);
|
||||
for (MY_XPATH_FLT *flt= fltbeg; flt < fltend; flt++)
|
||||
{
|
||||
uint pos= 0;
|
||||
MY_XML_NODE *self= &nodebeg[flt->num];
|
||||
if (validname(self))
|
||||
((XPathFilter*)nodeset)->append_element(flt->num,pos++);
|
||||
}
|
||||
return nodeset;
|
||||
}
|
||||
|
||||
|
||||
String *Item_nodeset_func_childbyname::val_nodeset(String *nodeset)
|
||||
{
|
||||
prepare(nodeset);
|
||||
|
@ -945,6 +971,9 @@ static Item* nametestfunc(MY_XPATH *xpath,
|
|||
case MY_XPATH_AXIS_ATTRIBUTE:
|
||||
res= new Item_nodeset_func_attributebyname(arg, beg, len, xpath->pxml);
|
||||
break;
|
||||
case MY_XPATH_AXIS_SELF:
|
||||
res= new Item_nodeset_func_selfbyname(arg, beg, len, xpath->pxml);
|
||||
break;
|
||||
default:
|
||||
res= new Item_nodeset_func_childbyname(arg, beg, len, xpath->pxml);
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue