Commit d017a604 authored by tulin@mysql.com's avatar tulin@mysql.com

Merge bk-internal:/home/bk/mysql-5.0

into mysql.com:/home/mysqldev/tulin/mysql-5.0
parents d1abda58 2339b328
...@@ -67,3 +67,12 @@ SELECT * FROM t1; ...@@ -67,3 +67,12 @@ SELECT * FROM t1;
id id2 id id2
3 0 3 0
DROP TABLE t1; DROP TABLE t1;
create table t1 (a integer);
insert into t1 values (1);
select 1 as a from t1 union all select 1 from dual limit 1;
a
1
(select 1 as a from t1) union all (select 1 from dual) limit 1;
a
1
drop table t1;
...@@ -573,3 +573,37 @@ select * from t1 where a12345678901234567890123456789a1234567890=2; ...@@ -573,3 +573,37 @@ select * from t1 where a12345678901234567890123456789a1234567890=2;
a1234567890123456789012345678901234567890 a12345678901234567890123456789a1234567890 a1234567890123456789012345678901234567890 a12345678901234567890123456789a1234567890
5 2 5 2
drop table t1; drop table t1;
create table t1
(a bigint, b bigint, c bigint, d bigint,
primary key (a,b,c,d))
engine=ndb
max_rows=200000000;
Warnings:
Warning 1105 Ndb might have problems storing the max amount of rows specified
insert into t1 values
(1,2,3,4),(2,3,4,5),(3,4,5,6),
(3,2,3,4),(1,3,4,5),(2,4,5,6),
(1,2,3,5),(2,3,4,8),(3,4,5,9),
(3,2,3,5),(1,3,4,8),(2,4,5,9),
(1,2,3,6),(2,3,4,6),(3,4,5,7),
(3,2,3,6),(1,3,4,6),(2,4,5,7),
(1,2,3,7),(2,3,4,7),(3,4,5,8),
(3,2,3,7),(1,3,4,7),(2,4,5,8),
(1,3,3,4),(2,4,4,5),(3,5,5,6),
(3,3,3,4),(1,4,4,5),(2,5,5,6),
(1,3,3,5),(2,4,4,8),(3,5,5,9),
(3,3,3,5),(1,4,4,8),(2,5,5,9),
(1,3,3,6),(2,4,4,6),(3,5,5,7),
(3,3,3,6),(1,4,4,6),(2,5,5,7),
(1,3,3,7),(2,4,4,7),(3,5,5,8),
(3,3,3,7),(1,4,4,7),(2,5,5,8);
select count(*) from t1;
count(*)
48
drop table t1;
create table t1
(a bigint, b bigint, c bigint, d bigint,
primary key (a))
engine=ndb
max_rows=1;
drop table t1;
...@@ -49,3 +49,13 @@ SELECT * FROM t1; ...@@ -49,3 +49,13 @@ SELECT * FROM t1;
DELETE FROM t1 WHERE id2 = 0 ORDER BY id desc LIMIT 1; DELETE FROM t1 WHERE id2 = 0 ORDER BY id desc LIMIT 1;
SELECT * FROM t1; SELECT * FROM t1;
DROP TABLE t1; DROP TABLE t1;
#
# Bug#8023 - limit on UNION with from DUAL, causes syntax error
#
create table t1 (a integer);
insert into t1 values (1);
# both queries must return one row
select 1 as a from t1 union all select 1 from dual limit 1;
(select 1 as a from t1) union all (select 1 from dual) limit 1;
drop table t1;
...@@ -539,3 +539,41 @@ insert into t1 values (1,1),(2,1),(3,1),(4,1),(5,2),(6,1),(7,1); ...@@ -539,3 +539,41 @@ insert into t1 values (1,1),(2,1),(3,1),(4,1),(5,2),(6,1),(7,1);
explain select * from t1 where a12345678901234567890123456789a1234567890=2; explain select * from t1 where a12345678901234567890123456789a1234567890=2;
select * from t1 where a12345678901234567890123456789a1234567890=2; select * from t1 where a12345678901234567890123456789a1234567890=2;
drop table t1; drop table t1;
#
# test fragment creation
#
# first a table with _many_ fragments per node group
# then a table with just one fragment per node group
#
create table t1
(a bigint, b bigint, c bigint, d bigint,
primary key (a,b,c,d))
engine=ndb
max_rows=200000000;
insert into t1 values
(1,2,3,4),(2,3,4,5),(3,4,5,6),
(3,2,3,4),(1,3,4,5),(2,4,5,6),
(1,2,3,5),(2,3,4,8),(3,4,5,9),
(3,2,3,5),(1,3,4,8),(2,4,5,9),
(1,2,3,6),(2,3,4,6),(3,4,5,7),
(3,2,3,6),(1,3,4,6),(2,4,5,7),
(1,2,3,7),(2,3,4,7),(3,4,5,8),
(3,2,3,7),(1,3,4,7),(2,4,5,8),
(1,3,3,4),(2,4,4,5),(3,5,5,6),
(3,3,3,4),(1,4,4,5),(2,5,5,6),
(1,3,3,5),(2,4,4,8),(3,5,5,9),
(3,3,3,5),(1,4,4,8),(2,5,5,9),
(1,3,3,6),(2,4,4,6),(3,5,5,7),
(3,3,3,6),(1,4,4,6),(2,5,5,7),
(1,3,3,7),(2,4,4,7),(3,5,5,8),
(3,3,3,7),(1,4,4,7),(2,5,5,8);
select count(*) from t1;
drop table t1;
create table t1
(a bigint, b bigint, c bigint, d bigint,
primary key (a))
engine=ndb
max_rows=1;
drop table t1;
...@@ -140,9 +140,9 @@ public: ...@@ -140,9 +140,9 @@ public:
enum FragmentType { enum FragmentType {
FragUndefined = 0, ///< Fragmentation type undefined or default FragUndefined = 0, ///< Fragmentation type undefined or default
FragSingle = 1, ///< Only one fragment FragSingle = 1, ///< Only one fragment
FragAllSmall = 2, ///< One fragment per node group FragAllSmall = 2, ///< One fragment per node, default
FragAllMedium = 3, ///< Default value. Two fragments per node group. FragAllMedium = 3, ///< two fragments per node
FragAllLarge = 4 ///< Eight fragments per node group. FragAllLarge = 4 ///< Four fragments per node.
}; };
}; };
......
...@@ -6178,7 +6178,7 @@ void Dbdih::execCREATE_FRAGMENTATION_REQ(Signal * signal){ ...@@ -6178,7 +6178,7 @@ void Dbdih::execCREATE_FRAGMENTATION_REQ(Signal * signal){
break; break;
case DictTabInfo::AllNodesMediumTable: case DictTabInfo::AllNodesMediumTable:
jam(); jam();
noOfFragments = csystemnodes; noOfFragments = 2 * csystemnodes;
break; break;
case DictTabInfo::AllNodesLargeTable: case DictTabInfo::AllNodesLargeTable:
jam(); jam();
......
...@@ -295,7 +295,7 @@ void ...@@ -295,7 +295,7 @@ void
NdbTableImpl::init(){ NdbTableImpl::init(){
clearNewProperties(); clearNewProperties();
m_frm.clear(); m_frm.clear();
m_fragmentType = NdbDictionary::Object::FragAllMedium; m_fragmentType = NdbDictionary::Object::FragAllSmall;
m_logging = true; m_logging = true;
m_kvalue = 6; m_kvalue = 6;
m_minLoadFactor = 78; m_minLoadFactor = 78;
......
...@@ -3659,6 +3659,47 @@ static int create_ndb_column(NDBCOL &col, ...@@ -3659,6 +3659,47 @@ static int create_ndb_column(NDBCOL &col,
Create a table in NDB Cluster Create a table in NDB Cluster
*/ */
static void ndb_set_fragmentation(NDBTAB &tab, TABLE *form, uint pk_length)
{
if (form->s->max_rows == 0) /* default setting, don't set fragmentation */
return;
/**
* get the number of fragments right
*/
uint no_fragments;
{
#if MYSQL_VERSION_ID >= 50000
uint acc_row_size= 25+2;
#else
uint acc_row_size= pk_length*4;
/* add acc overhead */
if (pk_length <= 8)
acc_row_size+= 25+2; /* main page will set the limit */
else
acc_row_size+= 4+4; /* overflow page will set the limit */
#endif
ulonglong acc_fragment_size= 512*1024*1024;
ulonglong max_rows= form->s->max_rows;
no_fragments= (max_rows*acc_row_size)/acc_fragment_size+1;
}
{
uint no_nodes= g_ndb_cluster_connection->no_db_nodes();
NDBTAB::FragmentType ftype;
if (no_fragments > 2*no_nodes)
{
ftype= NDBTAB::FragAllLarge;
if (no_fragments > 4*no_nodes)
push_warning(current_thd, MYSQL_ERROR::WARN_LEVEL_WARN, ER_UNKNOWN_ERROR,
"Ndb might have problems storing the max amount of rows specified");
}
else if (no_fragments > no_nodes)
ftype= NDBTAB::FragAllMedium;
else
ftype= NDBTAB::FragAllSmall;
tab.setFragmentType(ftype);
}
}
int ha_ndbcluster::create(const char *name, int ha_ndbcluster::create(const char *name,
TABLE *form, TABLE *form,
HA_CREATE_INFO *info) HA_CREATE_INFO *info)
...@@ -3761,6 +3802,8 @@ int ha_ndbcluster::create(const char *name, ...@@ -3761,6 +3802,8 @@ int ha_ndbcluster::create(const char *name,
} }
} }
ndb_set_fragmentation(tab, form, pk_length);
if ((my_errno= check_ndb_connection())) if ((my_errno= check_ndb_connection()))
DBUG_RETURN(my_errno); DBUG_RETURN(my_errno);
......
...@@ -3895,10 +3895,11 @@ select_into: ...@@ -3895,10 +3895,11 @@ select_into:
select_from: select_from:
FROM join_table_list where_clause group_clause having_clause FROM join_table_list where_clause group_clause having_clause
opt_order_clause opt_limit_clause procedure_clause opt_order_clause opt_limit_clause procedure_clause
| FROM DUAL_SYM /* oracle compatibility: oracle always requires FROM | FROM DUAL_SYM opt_limit_clause
clause, and DUAL is system table without fields. /* oracle compatibility: oracle always requires FROM clause,
Is "SELECT 1 FROM DUAL" any better than and DUAL is system table without fields.
"SELECT 1" ? Hmmm :) */ Is "SELECT 1 FROM DUAL" any better than "SELECT 1" ?
Hmmm :) */
; ;
select_options: select_options:
......
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