Commit 55f6017e authored by unknown's avatar unknown

resolved merge conflict


BitKeeper/etc/logging_ok:
  auto-union
sql/sql_yacc.yy:
  Auto merged
ndb/include/ndbapi/NdbDictionary.hpp:
  Auto merged
ndb/src/kernel/blocks/dbdih/DbdihMain.cpp:
  Auto merged
ndb/src/ndbapi/NdbDictionaryImpl.cpp:
  Auto merged
sql/ha_ndbcluster.cc:
  Auto merged
parents 6189d8c7 96c8f4f0
......@@ -67,3 +67,12 @@ SELECT * FROM t1;
id id2
3 0
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;
a1234567890123456789012345678901234567890 a12345678901234567890123456789a1234567890
5 2
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;
DELETE FROM t1 WHERE id2 = 0 ORDER BY id desc LIMIT 1;
SELECT * FROM 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);
explain select * from t1 where a12345678901234567890123456789a1234567890=2;
select * from t1 where a12345678901234567890123456789a1234567890=2;
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:
enum FragmentType {
FragUndefined = 0, ///< Fragmentation type undefined or default
FragSingle = 1, ///< Only one fragment
FragAllSmall = 2, ///< One fragment per node group
FragAllMedium = 3, ///< Default value. Two fragments per node group.
FragAllLarge = 4 ///< Eight fragments per node group.
FragAllSmall = 2, ///< One fragment per node, default
FragAllMedium = 3, ///< two fragments per node
FragAllLarge = 4 ///< Four fragments per node.
};
};
......
......@@ -6178,7 +6178,7 @@ void Dbdih::execCREATE_FRAGMENTATION_REQ(Signal * signal){
break;
case DictTabInfo::AllNodesMediumTable:
jam();
noOfFragments = csystemnodes;
noOfFragments = 2 * csystemnodes;
break;
case DictTabInfo::AllNodesLargeTable:
jam();
......
......@@ -295,7 +295,7 @@ void
NdbTableImpl::init(){
clearNewProperties();
m_frm.clear();
m_fragmentType = NdbDictionary::Object::FragAllMedium;
m_fragmentType = NdbDictionary::Object::FragAllSmall;
m_logging = true;
m_kvalue = 6;
m_minLoadFactor = 78;
......
......@@ -3650,6 +3650,47 @@ static int create_ndb_column(NDBCOL &col,
Create a table in NDB Cluster
*/
static void ndb_set_fragmentation(NDBTAB &tab, TABLE *form, uint pk_length)
{
if (form->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->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,
TABLE *form,
HA_CREATE_INFO *info)
......@@ -3751,7 +3792,9 @@ int ha_ndbcluster::create(const char *name,
break;
}
}
ndb_set_fragmentation(tab, form, pk_length);
if ((my_errno= check_ndb_connection()))
DBUG_RETURN(my_errno);
......
......@@ -3895,10 +3895,11 @@ select_into:
select_from:
FROM join_table_list where_clause group_clause having_clause
opt_order_clause opt_limit_clause procedure_clause
| FROM DUAL_SYM /* oracle compatibility: oracle always requires FROM
clause, and DUAL is system table without fields.
Is "SELECT 1 FROM DUAL" any better than
"SELECT 1" ? Hmmm :) */
| FROM DUAL_SYM opt_limit_clause
/* oracle compatibility: oracle always requires FROM clause,
and DUAL is system table without fields.
Is "SELECT 1 FROM DUAL" any better than "SELECT 1" ?
Hmmm :) */
;
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