Commit 96188c81 authored by mskold@mysql.com's avatar mskold@mysql.com

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
parents 59a986d9 63a19c47
...@@ -31,18 +31,25 @@ functions */ ...@@ -31,18 +31,25 @@ functions */
#define HAVE_SMEM 1 #define HAVE_SMEM 1
#if defined(__NT__) #if defined(_WIN64) || defined(WIN64)
#define SYSTEM_TYPE "NT" #define SYSTEM_TYPE "Win64"
#elif defined(__WIN2000__) #elif defined(_WIN32) || defined(WIN32)
#define SYSTEM_TYPE "WIN2000" #define SYSTEM_TYPE "Win32"
#else #else
#define SYSTEM_TYPE "Win95/Win98" #define SYSTEM_TYPE "Windows"
#endif #endif
#if defined(_WIN64) || defined(WIN64) #if defined(_M_IA64)
#define MACHINE_TYPE "ia64" /* Define to machine type name */ #define MACHINE_TYPE "ia64"
#elif defined(_M_IX86)
#define MACHINE_TYPE "ia32"
#elif defined(_M_ALPHA)
#define MACHINE_TYPE "axp"
#else #else
#define MACHINE_TYPE "i32" /* Define to machine type name */ #define MACHINE_TYPE "unknown" /* Define to machine type name */
#endif
#if !(defined(_WIN64) || defined(WIN64))
#ifndef _WIN32 #ifndef _WIN32
#define _WIN32 /* Compatible with old source */ #define _WIN32 /* Compatible with old source */
#endif #endif
......
...@@ -554,6 +554,89 @@ select count(*)-9 from t1 use index (ts) where ts <= '2001-01-01 23:59:59'; ...@@ -554,6 +554,89 @@ select count(*)-9 from t1 use index (ts) where ts <= '2001-01-01 23:59:59';
count(*)-9 count(*)-9
0 0
drop table t1; drop table t1;
create table t1 (
a int primary key,
s decimal(12),
t decimal(12, 5),
u decimal(12) unsigned,
v decimal(12, 5) unsigned,
key (s),
key (t),
key (u),
key (v)
) engine=ndb;
insert into t1 values
( 0, -000000000007, -0000061.00003, 000000000061, 0000965.00042),
( 1, -000000000007, -0000061.00042, 000000000061, 0000965.00003),
( 2, -071006035767, 4210253.00024, 000000000001, 0000001.84488),
( 3, 000000007115, 0000000.77607, 000077350625, 0000018.00013),
( 4, -000000068391, -0346486.00000, 000000005071, 0005334.00002),
( 5, -521579890459, -1936874.00001, 000000000154, 0000003.00018),
( 6, -521579890459, -1936874.00018, 000000000154, 0000003.00001),
( 7, 000000000333, 0000051.39140, 000000907958, 0788643.08374),
( 8, 000042731229, 0000009.00000, 000000000009, 6428667.00000),
( 9, -000008159769, 0000918.00004, 000096951421, 7607730.00008);
select count(*)- 5 from t1 use index (s) where s < -000000000007;
count(*)- 5
0
select count(*)- 7 from t1 use index (s) where s <= -000000000007;
count(*)- 7
0
select count(*)- 2 from t1 use index (s) where s = -000000000007;
count(*)- 2
0
select count(*)- 5 from t1 use index (s) where s >= -000000000007;
count(*)- 5
0
select count(*)- 3 from t1 use index (s) where s > -000000000007;
count(*)- 3
0
select count(*)- 4 from t1 use index (t) where t < -0000061.00003;
count(*)- 4
0
select count(*)- 5 from t1 use index (t) where t <= -0000061.00003;
count(*)- 5
0
select count(*)- 1 from t1 use index (t) where t = -0000061.00003;
count(*)- 1
0
select count(*)- 6 from t1 use index (t) where t >= -0000061.00003;
count(*)- 6
0
select count(*)- 5 from t1 use index (t) where t > -0000061.00003;
count(*)- 5
0
select count(*)- 2 from t1 use index (u) where u < 000000000061;
count(*)- 2
0
select count(*)- 4 from t1 use index (u) where u <= 000000000061;
count(*)- 4
0
select count(*)- 2 from t1 use index (u) where u = 000000000061;
count(*)- 2
0
select count(*)- 8 from t1 use index (u) where u >= 000000000061;
count(*)- 8
0
select count(*)- 6 from t1 use index (u) where u > 000000000061;
count(*)- 6
0
select count(*)- 5 from t1 use index (v) where v < 0000965.00042;
count(*)- 5
0
select count(*)- 6 from t1 use index (v) where v <= 0000965.00042;
count(*)- 6
0
select count(*)- 1 from t1 use index (v) where v = 0000965.00042;
count(*)- 1
0
select count(*)- 5 from t1 use index (v) where v >= 0000965.00042;
count(*)- 5
0
select count(*)- 4 from t1 use index (v) where v > 0000965.00042;
count(*)- 4
0
drop table t1;
create table t1(a int primary key, b int not null, index(b)); create table t1(a int primary key, b int not null, index(b));
insert into t1 values (1,1), (2,2); insert into t1 values (1,1), (2,2);
set autocommit=0; set autocommit=0;
......
...@@ -2059,6 +2059,16 @@ call bug6029()| ...@@ -2059,6 +2059,16 @@ call bug6029()|
1136 1136
drop procedure bug6029| drop procedure bug6029|
drop table t3| drop table t3|
drop procedure if exists bug8540|
create procedure bug8540()
begin
declare x int default 1;
select x as y, x+0 as z;
end|
call bug8540()|
y z
1 1
drop procedure bug8540|
drop table if exists fac| drop table if exists fac|
create table fac (n int unsigned not null primary key, f bigint unsigned)| create table fac (n int unsigned not null primary key, f bigint unsigned)|
drop procedure if exists ifac| drop procedure if exists ifac|
......
...@@ -280,6 +280,58 @@ select count(*)-9 from t1 use index (ts) where ts <= '2001-01-01 23:59:59'; ...@@ -280,6 +280,58 @@ select count(*)-9 from t1 use index (ts) where ts <= '2001-01-01 23:59:59';
drop table t1; drop table t1;
# decimal (not the new 5.0 thing)
create table t1 (
a int primary key,
s decimal(12),
t decimal(12, 5),
u decimal(12) unsigned,
v decimal(12, 5) unsigned,
key (s),
key (t),
key (u),
key (v)
) engine=ndb;
#
insert into t1 values
( 0, -000000000007, -0000061.00003, 000000000061, 0000965.00042),
( 1, -000000000007, -0000061.00042, 000000000061, 0000965.00003),
( 2, -071006035767, 4210253.00024, 000000000001, 0000001.84488),
( 3, 000000007115, 0000000.77607, 000077350625, 0000018.00013),
( 4, -000000068391, -0346486.00000, 000000005071, 0005334.00002),
( 5, -521579890459, -1936874.00001, 000000000154, 0000003.00018),
( 6, -521579890459, -1936874.00018, 000000000154, 0000003.00001),
( 7, 000000000333, 0000051.39140, 000000907958, 0788643.08374),
( 8, 000042731229, 0000009.00000, 000000000009, 6428667.00000),
( 9, -000008159769, 0000918.00004, 000096951421, 7607730.00008);
#
select count(*)- 5 from t1 use index (s) where s < -000000000007;
select count(*)- 7 from t1 use index (s) where s <= -000000000007;
select count(*)- 2 from t1 use index (s) where s = -000000000007;
select count(*)- 5 from t1 use index (s) where s >= -000000000007;
select count(*)- 3 from t1 use index (s) where s > -000000000007;
#
select count(*)- 4 from t1 use index (t) where t < -0000061.00003;
select count(*)- 5 from t1 use index (t) where t <= -0000061.00003;
select count(*)- 1 from t1 use index (t) where t = -0000061.00003;
select count(*)- 6 from t1 use index (t) where t >= -0000061.00003;
select count(*)- 5 from t1 use index (t) where t > -0000061.00003;
#
select count(*)- 2 from t1 use index (u) where u < 000000000061;
select count(*)- 4 from t1 use index (u) where u <= 000000000061;
select count(*)- 2 from t1 use index (u) where u = 000000000061;
select count(*)- 8 from t1 use index (u) where u >= 000000000061;
select count(*)- 6 from t1 use index (u) where u > 000000000061;
#
select count(*)- 5 from t1 use index (v) where v < 0000965.00042;
select count(*)- 6 from t1 use index (v) where v <= 0000965.00042;
select count(*)- 1 from t1 use index (v) where v = 0000965.00042;
select count(*)- 5 from t1 use index (v) where v >= 0000965.00042;
select count(*)- 4 from t1 use index (v) where v > 0000965.00042;
drop table t1;
# bug#7798 # bug#7798
create table t1(a int primary key, b int not null, index(b)); create table t1(a int primary key, b int not null, index(b));
insert into t1 values (1,1), (2,2); insert into t1 values (1,1), (2,2);
......
...@@ -2520,6 +2520,22 @@ call bug6029()| ...@@ -2520,6 +2520,22 @@ call bug6029()|
drop procedure bug6029| drop procedure bug6029|
drop table t3| drop table t3|
#
# BUG#8540: Local variable overrides an alias
#
--disable_warnings
drop procedure if exists bug8540|
--enable_warnings
create procedure bug8540()
begin
declare x int default 1;
select x as y, x+0 as z;
end|
call bug8540()|
drop procedure bug8540|
# #
# Some "real" examples # Some "real" examples
......
...@@ -24,6 +24,28 @@ ...@@ -24,6 +24,28 @@
#include <trigger_definitions.h> #include <trigger_definitions.h>
#include <NdbSqlUtil.hpp> #include <NdbSqlUtil.hpp>
#ifndef my_decimal_h
// sql/my_decimal.h requires many more sql/*.h new to ndb
// for now, copy the bit we need TODO proper fix
#define DECIMAL_MAX_LENGTH ((8 * 9) - 8)
#ifndef NOT_FIXED_DEC
#define NOT_FIXED_DEC 31
#endif
C_MODE_START
extern int decimal_bin_size(int, int);
C_MODE_END
inline int my_decimal_get_binary_size(uint precision, uint scale)
{
return decimal_bin_size((int)precision, (int)scale);
}
#endif
#define DTIMAP(x, y, z) \ #define DTIMAP(x, y, z) \
{ DictTabInfo::y, offsetof(x, z), SimpleProperties::Uint32Value, 0, (~0), 0 } { DictTabInfo::y, offsetof(x, z), SimpleProperties::Uint32Value, 0, (~0), 0 }
...@@ -264,7 +286,10 @@ public: ...@@ -264,7 +286,10 @@ public:
ExtBigunsigned = NdbSqlUtil::Type::Bigunsigned, ExtBigunsigned = NdbSqlUtil::Type::Bigunsigned,
ExtFloat = NdbSqlUtil::Type::Float, ExtFloat = NdbSqlUtil::Type::Float,
ExtDouble = NdbSqlUtil::Type::Double, ExtDouble = NdbSqlUtil::Type::Double,
ExtOlddecimal = NdbSqlUtil::Type::Olddecimal,
ExtOlddecimalunsigned = NdbSqlUtil::Type::Olddecimalunsigned,
ExtDecimal = NdbSqlUtil::Type::Decimal, ExtDecimal = NdbSqlUtil::Type::Decimal,
ExtDecimalunsigned = NdbSqlUtil::Type::Decimalunsigned,
ExtChar = NdbSqlUtil::Type::Char, ExtChar = NdbSqlUtil::Type::Char,
ExtVarchar = NdbSqlUtil::Type::Varchar, ExtVarchar = NdbSqlUtil::Type::Varchar,
ExtBinary = NdbSqlUtil::Type::Binary, ExtBinary = NdbSqlUtil::Type::Binary,
...@@ -345,9 +370,31 @@ public: ...@@ -345,9 +370,31 @@ public:
AttributeSize = DictTabInfo::a64Bit; AttributeSize = DictTabInfo::a64Bit;
AttributeArraySize = AttributeExtLength; AttributeArraySize = AttributeExtLength;
break; break;
case DictTabInfo::ExtOlddecimal:
AttributeSize = DictTabInfo::an8Bit;
AttributeArraySize =
(1 + AttributeExtPrecision + (int(AttributeExtScale) > 0)) *
AttributeExtLength;
break;
case DictTabInfo::ExtOlddecimalunsigned:
AttributeSize = DictTabInfo::an8Bit;
AttributeArraySize =
(0 + AttributeExtPrecision + (int(AttributeExtScale) > 0)) *
AttributeExtLength;
break;
case DictTabInfo::ExtDecimal: case DictTabInfo::ExtDecimal:
// not yet implemented anywhere case DictTabInfo::ExtDecimalunsigned:
return false; {
// copy from Field_new_decimal ctor
uint precision = AttributeExtPrecision;
uint scale = AttributeExtScale;
if (precision > DECIMAL_MAX_LENGTH || scale >= NOT_FIXED_DEC)
precision = DECIMAL_MAX_LENGTH;
uint bin_size = my_decimal_get_binary_size(precision, scale);
AttributeSize = DictTabInfo::an8Bit;
AttributeArraySize = bin_size * AttributeExtLength;
}
break;
case DictTabInfo::ExtChar: case DictTabInfo::ExtChar:
case DictTabInfo::ExtBinary: case DictTabInfo::ExtBinary:
AttributeSize = DictTabInfo::an8Bit; AttributeSize = DictTabInfo::an8Bit;
......
...@@ -48,7 +48,7 @@ ...@@ -48,7 +48,7 @@
#define NDB_TYPE_BIGUNSIGNED 10 #define NDB_TYPE_BIGUNSIGNED 10
#define NDB_TYPE_FLOAT 11 #define NDB_TYPE_FLOAT 11
#define NDB_TYPE_DOUBLE 12 #define NDB_TYPE_DOUBLE 12
#define NDB_TYPE_DECIMAL 13 /* not used */ #define NDB_TYPE_OLDDECIMAL 13
#define NDB_TYPE_CHAR 14 #define NDB_TYPE_CHAR 14
#define NDB_TYPE_VARCHAR 15 #define NDB_TYPE_VARCHAR 15
#define NDB_TYPE_BINARY 16 #define NDB_TYPE_BINARY 16
...@@ -63,7 +63,10 @@ ...@@ -63,7 +63,10 @@
#define NDB_TYPE_TIME 25 #define NDB_TYPE_TIME 25
#define NDB_TYPE_YEAR 26 #define NDB_TYPE_YEAR 26
#define NDB_TYPE_TIMESTAMP 27 #define NDB_TYPE_TIMESTAMP 27
#define NDB_TYPE_OLDDECIMALUNSIGNED 28
#define NDB_TYPE_DECIMAL 29
#define NDB_TYPE_DECIMALUNSIGNED 30
#define NDB_TYPE_MAX 28 #define NDB_TYPE_MAX 31
#endif #endif
...@@ -184,7 +184,10 @@ public: ...@@ -184,7 +184,10 @@ public:
Bigunsigned = NDB_TYPE_BIGUNSIGNED, ///< 64 Bit. 8 byte signed integer, can be used in array Bigunsigned = NDB_TYPE_BIGUNSIGNED, ///< 64 Bit. 8 byte signed integer, can be used in array
Float = NDB_TYPE_FLOAT, ///< 32-bit float. 4 bytes float, can be used in array Float = NDB_TYPE_FLOAT, ///< 32-bit float. 4 bytes float, can be used in array
Double = NDB_TYPE_DOUBLE, ///< 64-bit float. 8 byte float, can be used in array Double = NDB_TYPE_DOUBLE, ///< 64-bit float. 8 byte float, can be used in array
Decimal = NDB_TYPE_DECIMAL, ///< Precision, Scale are applicable Olddecimal = NDB_TYPE_OLDDECIMAL, ///< MySQL < 5.0 signed decimal, Precision, Scale
Olddecimalunsigned = NDB_TYPE_OLDDECIMALUNSIGNED,
Decimal = NDB_TYPE_DECIMAL, ///< MySQL >= 5.0 signed decimal, Precision, Scale
Decimalunsigned = NDB_TYPE_DECIMALUNSIGNED,
Char = NDB_TYPE_CHAR, ///< Len. A fixed array of 1-byte chars Char = NDB_TYPE_CHAR, ///< Len. A fixed array of 1-byte chars
Varchar = NDB_TYPE_VARCHAR, ///< Length bytes: 1, Max: 255 Varchar = NDB_TYPE_VARCHAR, ///< Length bytes: 1, Max: 255
Binary = NDB_TYPE_BINARY, ///< Len Binary = NDB_TYPE_BINARY, ///< Len
...@@ -248,13 +251,13 @@ public: ...@@ -248,13 +251,13 @@ public:
/** /**
* Get precision of column. * Get precision of column.
* @note Only applicable for builtin type Decimal * @note Only applicable for decimal types
*/ */
int getPrecision() const; int getPrecision() const;
/** /**
* Get scale of column. * Get scale of column.
* @note Only applicable for builtin type Decimal * @note Only applicable for decimal types
*/ */
int getScale() const; int getScale() const;
...@@ -372,13 +375,13 @@ public: ...@@ -372,13 +375,13 @@ public:
/** /**
* Set precision of column. * Set precision of column.
* @note Only applicable for builtin type Decimal * @note Only applicable for decimal types
*/ */
void setPrecision(int); void setPrecision(int);
/** /**
* Set scale of column. * Set scale of column.
* @note Only applicable for builtin type Decimal * @note Only applicable for decimal types
*/ */
void setScale(int); void setScale(int);
......
...@@ -97,12 +97,11 @@ public: ...@@ -97,12 +97,11 @@ public:
/** /**
* Constructor * Constructor
*/ */
TransporterRegistry(NdbMgmHandle mgm_handle=NULL, TransporterRegistry(void * callback = 0 ,
void * callback = 0 ,
unsigned maxTransporters = MAX_NTRANSPORTERS, unsigned maxTransporters = MAX_NTRANSPORTERS,
unsigned sizeOfLongSignalMemory = 100); unsigned sizeOfLongSignalMemory = 100);
void set_mgm_handle(NdbMgmHandle h) { m_mgm_handle = h; }; void set_mgm_handle(NdbMgmHandle h);
NdbMgmHandle get_mgm_handle(void) { return m_mgm_handle; }; NdbMgmHandle get_mgm_handle(void) { return m_mgm_handle; };
bool init(NodeId localNodeId); bool init(NodeId localNodeId);
......
...@@ -80,7 +80,7 @@ public: ...@@ -80,7 +80,7 @@ public:
Bigunsigned = NDB_TYPE_BIGUNSIGNED, Bigunsigned = NDB_TYPE_BIGUNSIGNED,
Float = NDB_TYPE_FLOAT, Float = NDB_TYPE_FLOAT,
Double = NDB_TYPE_DOUBLE, Double = NDB_TYPE_DOUBLE,
Decimal = NDB_TYPE_DECIMAL, Olddecimal = NDB_TYPE_OLDDECIMAL,
Char = NDB_TYPE_CHAR, Char = NDB_TYPE_CHAR,
Varchar = NDB_TYPE_VARCHAR, Varchar = NDB_TYPE_VARCHAR,
Binary = NDB_TYPE_BINARY, Binary = NDB_TYPE_BINARY,
...@@ -94,7 +94,10 @@ public: ...@@ -94,7 +94,10 @@ public:
Longvarbinary = NDB_TYPE_LONG_VARBINARY, Longvarbinary = NDB_TYPE_LONG_VARBINARY,
Time = NDB_TYPE_TIME, Time = NDB_TYPE_TIME,
Year = NDB_TYPE_YEAR, Year = NDB_TYPE_YEAR,
Timestamp = NDB_TYPE_TIMESTAMP Timestamp = NDB_TYPE_TIMESTAMP,
Olddecimalunsigned = NDB_TYPE_OLDDECIMALUNSIGNED,
Decimal = NDB_TYPE_DECIMAL,
Decimalunsigned = NDB_TYPE_DECIMALUNSIGNED
}; };
Enum m_typeId; // redundant Enum m_typeId; // redundant
Cmp* m_cmp; // comparison method Cmp* m_cmp; // comparison method
...@@ -130,6 +133,11 @@ public: ...@@ -130,6 +133,11 @@ public:
*/ */
static int strnxfrm_bug7284(CHARSET_INFO* cs, unsigned char* dst, unsigned dstLen, const unsigned char*src, unsigned srcLen); static int strnxfrm_bug7284(CHARSET_INFO* cs, unsigned char* dst, unsigned dstLen, const unsigned char*src, unsigned srcLen);
/**
* Compare decimal numbers.
*/
static int cmp_olddecimal(const uchar* s1, const uchar* s2, unsigned n);
private: private:
/** /**
* List of all types. Must match Type::Enum. * List of all types. Must match Type::Enum.
...@@ -150,7 +158,7 @@ private: ...@@ -150,7 +158,7 @@ private:
static Cmp cmpBigunsigned; static Cmp cmpBigunsigned;
static Cmp cmpFloat; static Cmp cmpFloat;
static Cmp cmpDouble; static Cmp cmpDouble;
static Cmp cmpDecimal; static Cmp cmpOlddecimal;
static Cmp cmpChar; static Cmp cmpChar;
static Cmp cmpVarchar; static Cmp cmpVarchar;
static Cmp cmpBinary; static Cmp cmpBinary;
...@@ -165,6 +173,9 @@ private: ...@@ -165,6 +173,9 @@ private:
static Cmp cmpTime; static Cmp cmpTime;
static Cmp cmpYear; static Cmp cmpYear;
static Cmp cmpTimestamp; static Cmp cmpTimestamp;
static Cmp cmpOlddecimalunsigned;
static Cmp cmpDecimal;
static Cmp cmpDecimalunsigned;
}; };
#endif #endif
...@@ -170,6 +170,35 @@ IPCConfig::configureTransporters(Uint32 nodeId, ...@@ -170,6 +170,35 @@ IPCConfig::configureTransporters(Uint32 nodeId,
DBUG_ENTER("IPCConfig::configureTransporters"); DBUG_ENTER("IPCConfig::configureTransporters");
/**
* Iterate over all MGM's an construct a connectstring
* create mgm_handle and give it to the Transporter Registry
*/
{
const char *separator= "";
BaseString connect_string;
ndb_mgm_configuration_iterator iter(config, CFG_SECTION_NODE);
for(iter.first(); iter.valid(); iter.next())
{
Uint32 type;
if(iter.get(CFG_TYPE_OF_SECTION, &type)) continue;
if(type != NODE_TYPE_MGM) continue;
const char* hostname;
Uint32 port;
if(iter.get(CFG_NODE_HOST, &hostname)) continue;
if( strlen(hostname) == 0 ) continue;
if(iter.get(CFG_MGM_PORT, &port)) continue;
connect_string.appfmt("%s%s:port",separator,hostname,port);
separator= ",";
}
NdbMgmHandle h= ndb_mgm_create_handle();
if ( h && connect_string.length() > 0 )
{
ndb_mgm_set_connectstring(h,connect_string.c_str());
tr.set_mgm_handle(h);
}
}
Uint32 noOfTransportersCreated= 0; Uint32 noOfTransportersCreated= 0;
ndb_mgm_configuration_iterator iter(config, CFG_SECTION_CONNECTION); ndb_mgm_configuration_iterator iter(config, CFG_SECTION_CONNECTION);
......
...@@ -71,15 +71,14 @@ SocketServer::Session * TransporterService::newSession(NDB_SOCKET_TYPE sockfd) ...@@ -71,15 +71,14 @@ SocketServer::Session * TransporterService::newSession(NDB_SOCKET_TYPE sockfd)
DBUG_RETURN(0); DBUG_RETURN(0);
} }
TransporterRegistry::TransporterRegistry(NdbMgmHandle mgm_handle, TransporterRegistry::TransporterRegistry(void * callback,
void * callback,
unsigned _maxTransporters, unsigned _maxTransporters,
unsigned sizeOfLongSignalMemory) { unsigned sizeOfLongSignalMemory) {
nodeIdSpecified = false; nodeIdSpecified = false;
maxTransporters = _maxTransporters; maxTransporters = _maxTransporters;
sendCounter = 1; sendCounter = 1;
m_mgm_handle = mgm_handle; m_mgm_handle= 0;
callbackObj=callback; callbackObj=callback;
...@@ -114,6 +113,27 @@ TransporterRegistry::TransporterRegistry(NdbMgmHandle mgm_handle, ...@@ -114,6 +113,27 @@ TransporterRegistry::TransporterRegistry(NdbMgmHandle mgm_handle,
theOSEJunkSocketRecv = 0; theOSEJunkSocketRecv = 0;
} }
void TransporterRegistry::set_mgm_handle(NdbMgmHandle h)
{
DBUG_ENTER("TransporterRegistry::set_mgm_handle");
if (m_mgm_handle)
ndb_mgm_destroy_handle(&m_mgm_handle);
m_mgm_handle= h;
#ifndef DBUG_OFF
if (h)
{
char buf[256];
DBUG_PRINT("info",("handle set with connectstring: %s",
ndb_mgm_get_connectstring(h,buf, sizeof(buf))));
}
else
{
DBUG_PRINT("info",("handle set to NULL"));
}
#endif
DBUG_VOID_RETURN;
};
TransporterRegistry::~TransporterRegistry() { TransporterRegistry::~TransporterRegistry() {
removeAll(); removeAll();
...@@ -134,6 +154,8 @@ TransporterRegistry::~TransporterRegistry() { ...@@ -134,6 +154,8 @@ TransporterRegistry::~TransporterRegistry() {
theOSEReceiver = 0; theOSEReceiver = 0;
} }
#endif #endif
if (m_mgm_handle)
ndb_mgm_destroy_handle(&m_mgm_handle);
} }
void void
...@@ -1211,40 +1233,32 @@ TransporterRegistry::start_clients_thread() ...@@ -1211,40 +1233,32 @@ TransporterRegistry::start_clients_thread()
switch(performStates[nodeId]){ switch(performStates[nodeId]){
case CONNECTING: case CONNECTING:
if(!t->isConnected() && !t->isServer) { if(!t->isConnected() && !t->isServer) {
int result= 0; bool connected= false;
/** /**
* First, we try to connect (if we have a port number). * First, we try to connect (if we have a port number).
*/ */
if (t->get_s_port()) if (t->get_s_port())
result= t->connect_client(); connected= t->connect_client();
if (result<0 && t->get_s_port()!=0)
g_eventLogger.warning("Error while trying to make connection "
"(Node %u to %u via port %u) "
"error: %d. Retrying...",
t->getRemoteNodeId(),
t->getLocalNodeId(),
t->get_s_port());
/** /**
* If dynamic, get the port for connecting from the management server * If dynamic, get the port for connecting from the management server
*/ */
if(t->get_s_port() <= 0) { // Port is dynamic if( !connected && t->get_s_port() <= 0) { // Port is dynamic
int server_port= 0; int server_port= 0;
struct ndb_mgm_reply mgm_reply; struct ndb_mgm_reply mgm_reply;
int res; int res= -1;
if(!ndb_mgm_is_connected(m_mgm_handle)) if(!ndb_mgm_is_connected(m_mgm_handle))
if(ndb_mgm_connect(m_mgm_handle, 0, 0, 0)<0) if(ndb_mgm_connect(m_mgm_handle, 0, 0, 0)<0)
ndbout_c("Failed to reconnect to management server"); ndbout_c("Failed to reconnect to management server");
else
res= ndb_mgm_get_connection_int_parameter(m_mgm_handle, res=
t->getRemoteNodeId(), ndb_mgm_get_connection_int_parameter(m_mgm_handle,
t->getLocalNodeId(), t->getRemoteNodeId(),
CFG_CONNECTION_SERVER_PORT, t->getLocalNodeId(),
&server_port, CFG_CONNECTION_SERVER_PORT,
&mgm_reply); &server_port,
&mgm_reply);
DBUG_PRINT("info",("Got dynamic port %d for %d -> %d (ret: %d)", DBUG_PRINT("info",("Got dynamic port %d for %d -> %d (ret: %d)",
server_port,t->getRemoteNodeId(), server_port,t->getRemoteNodeId(),
t->getLocalNodeId(),res)); t->getLocalNodeId(),res));
......
...@@ -77,117 +77,129 @@ NdbSqlUtil::char_like(const char* s1, unsigned n1, ...@@ -77,117 +77,129 @@ NdbSqlUtil::char_like(const char* s1, unsigned n1,
const NdbSqlUtil::Type const NdbSqlUtil::Type
NdbSqlUtil::m_typeList[] = { NdbSqlUtil::m_typeList[] = {
{ { // 0
Type::Undefined, Type::Undefined,
NULL NULL
}, },
{ { // 1
Type::Tinyint, Type::Tinyint,
cmpTinyint cmpTinyint
}, },
{ { // 2
Type::Tinyunsigned, Type::Tinyunsigned,
cmpTinyunsigned cmpTinyunsigned
}, },
{ { // 3
Type::Smallint, Type::Smallint,
cmpSmallint cmpSmallint
}, },
{ { // 4
Type::Smallunsigned, Type::Smallunsigned,
cmpSmallunsigned cmpSmallunsigned
}, },
{ { // 5
Type::Mediumint, Type::Mediumint,
cmpMediumint cmpMediumint
}, },
{ { // 6
Type::Mediumunsigned, Type::Mediumunsigned,
cmpMediumunsigned cmpMediumunsigned
}, },
{ { // 7
Type::Int, Type::Int,
cmpInt cmpInt
}, },
{ { // 8
Type::Unsigned, Type::Unsigned,
cmpUnsigned cmpUnsigned
}, },
{ { // 9
Type::Bigint, Type::Bigint,
cmpBigint cmpBigint
}, },
{ { // 10
Type::Bigunsigned, Type::Bigunsigned,
cmpBigunsigned cmpBigunsigned
}, },
{ { // 11
Type::Float, Type::Float,
cmpFloat cmpFloat
}, },
{ { // 12
Type::Double, Type::Double,
cmpDouble cmpDouble
}, },
{ { // 13
Type::Decimal, Type::Olddecimal,
NULL // cmpDecimal cmpOlddecimal
}, },
{ { // 14
Type::Char, Type::Char,
cmpChar cmpChar
}, },
{ { // 15
Type::Varchar, Type::Varchar,
cmpVarchar cmpVarchar
}, },
{ { // 16
Type::Binary, Type::Binary,
cmpBinary cmpBinary
}, },
{ { // 17
Type::Varbinary, Type::Varbinary,
cmpVarbinary cmpVarbinary
}, },
{ { // 18
Type::Datetime, Type::Datetime,
cmpDatetime cmpDatetime
}, },
{ { // 19
Type::Date, Type::Date,
cmpDate cmpDate
}, },
{ { // 20
Type::Blob, Type::Blob,
NULL // cmpBlob NULL // cmpBlob
}, },
{ { // 21
Type::Text, Type::Text,
NULL // cmpText NULL // cmpText
}, },
{ { // 22
Type::Bit, Type::Bit,
NULL // cmpBit NULL // cmpBit
}, },
{ { // 23
Type::Longvarchar, Type::Longvarchar,
cmpLongvarchar cmpLongvarchar
}, },
{ { // 24
Type::Longvarbinary, Type::Longvarbinary,
cmpLongvarbinary cmpLongvarbinary
}, },
{ { // 25
Type::Time, Type::Time,
cmpTime cmpTime
}, },
{ { // 26
Type::Year, Type::Year,
cmpYear cmpYear
}, },
{ { // 27
Type::Timestamp, Type::Timestamp,
cmpTimestamp cmpTimestamp
},
{ // 28
Type::Olddecimalunsigned,
cmpOlddecimalunsigned
},
{ // 29
Type::Decimal,
cmpDecimal
},
{ // 30
Type::Decimalunsigned,
cmpDecimalunsigned
} }
}; };
...@@ -430,14 +442,83 @@ NdbSqlUtil::cmpDouble(const void* info, const void* p1, unsigned n1, const void* ...@@ -430,14 +442,83 @@ NdbSqlUtil::cmpDouble(const void* info, const void* p1, unsigned n1, const void*
return CmpUnknown; return CmpUnknown;
} }
// not used by MySQL or NDB
int int
NdbSqlUtil::cmpDecimal(const void* info, const void* p1, unsigned n1, const void* p2, unsigned n2, bool full) NdbSqlUtil::cmp_olddecimal(const uchar* s1, const uchar* s2, unsigned n)
{ {
assert(false); int sgn = +1;
unsigned i = 0;
while (i < n) {
int c1 = s1[i];
int c2 = s2[i];
if (c1 == c2) {
if (c1 == '-')
sgn = -1;
} else if (c1 == '-') {
return -1;
} else if (c2 == '-') {
return +1;
} else if (c1 < c2) {
return -1 * sgn;
} else {
return +1 * sgn;
}
i++;
}
return 0; return 0;
} }
int
NdbSqlUtil::cmpOlddecimal(const void* info, const void* p1, unsigned n1, const void* p2, unsigned n2, bool full)
{
if (full) {
assert(n1 == n2);
const uchar* v1 = (const uchar*)p1;
const uchar* v2 = (const uchar*)p2;
return cmp_olddecimal(v1, v2, n1);
}
return CmpUnknown;
}
int
NdbSqlUtil::cmpOlddecimalunsigned(const void* info, const void* p1, unsigned n1, const void* p2, unsigned n2, bool full)
{
if (full) {
assert(n1 == n2);
const uchar* v1 = (const uchar*)p1;
const uchar* v2 = (const uchar*)p2;
return cmp_olddecimal(v1, v2, n1);
}
return CmpUnknown;
}
int
NdbSqlUtil::cmpDecimal(const void* info, const void* p1, unsigned n1, const void* p2, unsigned n2, bool full)
{
const uchar* v1 = (const uchar*)p1;
const uchar* v2 = (const uchar*)p2;
// compare as binary strings
unsigned n = (n1 <= n2 ? n1 : n2);
int k = memcmp(v1, v2, n);
if (k == 0) {
k = (full ? n1 : n) - n2;
}
return k < 0 ? -1 : k > 0 ? +1 : full ? 0 : CmpUnknown;
}
int
NdbSqlUtil::cmpDecimalunsigned(const void* info, const void* p1, unsigned n1, const void* p2, unsigned n2, bool full)
{
const uchar* v1 = (const uchar*)p1;
const uchar* v2 = (const uchar*)p2;
// compare as binary strings
unsigned n = (n1 <= n2 ? n1 : n2);
int k = memcmp(v1, v2, n);
if (k == 0) {
k = (full ? n1 : n) - n2;
}
return k < 0 ? -1 : k > 0 ? +1 : full ? 0 : CmpUnknown;
}
int int
NdbSqlUtil::cmpChar(const void* info, const void* p1, unsigned n1, const void* p2, unsigned n2, bool full) NdbSqlUtil::cmpChar(const void* info, const void* p1, unsigned n1, const void* p2, unsigned n2, bool full)
{ {
......
...@@ -92,10 +92,6 @@ int main(int argc, char** argv) ...@@ -92,10 +92,6 @@ int main(int argc, char** argv)
} }
} }
globalTransporterRegistry.set_mgm_handle(theConfig
->get_config_retriever()
->get_mgmHandle());
#ifndef NDB_WIN32 #ifndef NDB_WIN32
for(pid_t child = fork(); child != 0; child = fork()){ for(pid_t child = fork(); child != 0; child = fork()){
/** /**
......
...@@ -576,7 +576,7 @@ MgmtSrvr::start(BaseString &error_string) ...@@ -576,7 +576,7 @@ MgmtSrvr::start(BaseString &error_string)
} }
} }
theFacade= TransporterFacade::theFacadeInstance theFacade= TransporterFacade::theFacadeInstance
= new TransporterFacade(m_config_retriever->get_mgmHandle()); = new TransporterFacade();
if(theFacade == 0) { if(theFacade == 0) {
DEBUG("MgmtSrvr.cpp: theFacade is NULL."); DEBUG("MgmtSrvr.cpp: theFacade is NULL.");
......
...@@ -84,7 +84,9 @@ NdbTransaction* Ndb::doConnect(Uint32 tConNode) ...@@ -84,7 +84,9 @@ NdbTransaction* Ndb::doConnect(Uint32 tConNode)
} else if (TretCode != 0) { } else if (TretCode != 0) {
tAnyAlive= 1; tAnyAlive= 1;
}//if }//if
DBUG_PRINT("info",("tried node %d TretCode %d", tNode, TretCode)); DBUG_PRINT("info",("tried node %d, TretCode %d, error code %d, %s",
tNode, TretCode, getNdbError().code,
getNdbError().message));
} }
} }
else // just do a regular round robin else // just do a regular round robin
......
...@@ -948,8 +948,17 @@ operator<<(NdbOut& out, const NdbDictionary::Column& col) ...@@ -948,8 +948,17 @@ operator<<(NdbOut& out, const NdbDictionary::Column& col)
case NdbDictionary::Column::Double: case NdbDictionary::Column::Double:
out << "Double"; out << "Double";
break; break;
case NdbDictionary::Column::Olddecimal:
out << "Olddecimal(" << col.getPrecision() << "," << col.getScale() << ")";
break;
case NdbDictionary::Column::Olddecimalunsigned:
out << "Olddecimalunsigned(" << col.getPrecision() << "," << col.getScale() << ")";
break;
case NdbDictionary::Column::Decimal: case NdbDictionary::Column::Decimal:
out << "Decimal(" << col.getScale() << "," << col.getPrecision() << ")"; out << "Decimal(" << col.getPrecision() << "," << col.getScale() << ")";
break;
case NdbDictionary::Column::Decimalunsigned:
out << "Decimalunsigned(" << col.getPrecision() << "," << col.getScale() << ")";
break; break;
case NdbDictionary::Column::Char: case NdbDictionary::Column::Char:
out << "Char(" << col.getLength() << ";" << csname << ")"; out << "Char(" << col.getLength() << ";" << csname << ")";
......
...@@ -109,7 +109,10 @@ NdbColumnImpl::init(Type t) ...@@ -109,7 +109,10 @@ NdbColumnImpl::init(Type t)
m_length = 1; m_length = 1;
m_cs = NULL; m_cs = NULL;
break; break;
case Olddecimal:
case Olddecimalunsigned:
case Decimal: case Decimal:
case Decimalunsigned:
m_precision = 10; m_precision = 10;
m_scale = 0; m_scale = 0;
m_length = 1; m_length = 1;
......
...@@ -178,7 +178,8 @@ NdbOut& operator<<(NdbOut& out, const NdbRecAttr &r) ...@@ -178,7 +178,8 @@ NdbOut& operator<<(NdbOut& out, const NdbRecAttr &r)
return out; return out;
} }
uint length = r.getColumn()->getLength(); const NdbDictionary::Column* c = r.getColumn();
uint length = c->getLength();
if (length > 1) if (length > 1)
out << "["; out << "[";
...@@ -237,6 +238,22 @@ NdbOut& operator<<(NdbOut& out, const NdbRecAttr &r) ...@@ -237,6 +238,22 @@ NdbOut& operator<<(NdbOut& out, const NdbRecAttr &r)
case NdbDictionary::Column::Double: case NdbDictionary::Column::Double:
out << r.double_value(); out << r.double_value();
break; break;
case NdbDictionary::Column::Olddecimal:
{
short len = 1 + c->getPrecision() + (c->getScale() > 0);
out.print("%.*s", len, r.aRef());
}
break;
case NdbDictionary::Column::Olddecimalunsigned:
{
short len = 0 + c->getPrecision() + (c->getScale() > 0);
out.print("%.*s", len, r.aRef());
}
break;
case NdbDictionary::Column::Decimal:
case NdbDictionary::Column::Decimalunsigned:
goto unknown; // TODO
break;
// for dates cut-and-paste from field.cc // for dates cut-and-paste from field.cc
case NdbDictionary::Column::Datetime: case NdbDictionary::Column::Datetime:
{ {
...@@ -346,6 +363,7 @@ NdbOut& operator<<(NdbOut& out, const NdbRecAttr &r) ...@@ -346,6 +363,7 @@ NdbOut& operator<<(NdbOut& out, const NdbRecAttr &r)
j = length; j = length;
} }
break; break;
unknown:
default: /* no print functions for the rest, just print type */ default: /* no print functions for the rest, just print type */
out << (int) r.getType(); out << (int) r.getType();
j = length; j = length;
......
...@@ -1420,14 +1420,18 @@ Remark: Sets TC Connect pointer. ...@@ -1420,14 +1420,18 @@ Remark: Sets TC Connect pointer.
int int
NdbTransaction::receiveTCSEIZEREF(NdbApiSignal* aSignal) NdbTransaction::receiveTCSEIZEREF(NdbApiSignal* aSignal)
{ {
DBUG_ENTER("NdbTransaction::receiveTCSEIZEREF");
if (theStatus != Connecting) if (theStatus != Connecting)
{ {
return -1; DBUG_RETURN(-1);
} else } else
{ {
theStatus = ConnectFailure; theStatus = ConnectFailure;
theNdb->theError.code = aSignal->readData(2); theNdb->theError.code = aSignal->readData(2);
return 0; DBUG_PRINT("info",("error code %d, %s",
theNdb->getNdbError().code,
theNdb->getNdbError().message));
DBUG_RETURN(0);
} }
}//NdbTransaction::receiveTCSEIZEREF() }//NdbTransaction::receiveTCSEIZEREF()
......
...@@ -466,8 +466,7 @@ void TransporterFacade::threadMainReceive(void) ...@@ -466,8 +466,7 @@ void TransporterFacade::threadMainReceive(void)
theTransporterRegistry->stopReceiving(); theTransporterRegistry->stopReceiving();
} }
TransporterFacade::TransporterFacade(NdbMgmHandle mgm_handle) : TransporterFacade::TransporterFacade() :
m_mgm_handle(mgm_handle),
theTransporterRegistry(0), theTransporterRegistry(0),
theStopReceive(0), theStopReceive(0),
theSendThread(NULL), theSendThread(NULL),
...@@ -496,7 +495,7 @@ bool ...@@ -496,7 +495,7 @@ bool
TransporterFacade::init(Uint32 nodeId, const ndb_mgm_configuration* props) TransporterFacade::init(Uint32 nodeId, const ndb_mgm_configuration* props)
{ {
theOwnId = nodeId; theOwnId = nodeId;
theTransporterRegistry = new TransporterRegistry(m_mgm_handle,this); theTransporterRegistry = new TransporterRegistry(this);
const int res = IPCConfig::configureTransporters(nodeId, const int res = IPCConfig::configureTransporters(nodeId,
* props, * props,
......
...@@ -47,7 +47,7 @@ extern "C" { ...@@ -47,7 +47,7 @@ extern "C" {
class TransporterFacade class TransporterFacade
{ {
public: public:
TransporterFacade(NdbMgmHandle mgm_handle); TransporterFacade();
virtual ~TransporterFacade(); virtual ~TransporterFacade();
bool init(Uint32, const ndb_mgm_configuration *); bool init(Uint32, const ndb_mgm_configuration *);
...@@ -133,7 +133,6 @@ private: ...@@ -133,7 +133,6 @@ private:
bool isConnected(NodeId aNodeId); bool isConnected(NodeId aNodeId);
void doStop(); void doStop();
NdbMgmHandle m_mgm_handle;
TransporterRegistry* theTransporterRegistry; TransporterRegistry* theTransporterRegistry;
SocketServer m_socket_server; SocketServer m_socket_server;
int sendPerformedLastInterval; int sendPerformedLastInterval;
......
...@@ -284,7 +284,7 @@ Ndb_cluster_connection_impl::Ndb_cluster_connection_impl(const char * ...@@ -284,7 +284,7 @@ Ndb_cluster_connection_impl::Ndb_cluster_connection_impl(const char *
m_transporter_facade= m_transporter_facade=
TransporterFacade::theFacadeInstance= TransporterFacade::theFacadeInstance=
new TransporterFacade(m_config_retriever->get_mgmHandle()); new TransporterFacade();
DBUG_VOID_RETURN; DBUG_VOID_RETURN;
} }
......
...@@ -567,7 +567,10 @@ convertColumnTypeToAttrType(NdbDictionary::Column::Type _type) ...@@ -567,7 +567,10 @@ convertColumnTypeToAttrType(NdbDictionary::Column::Type _type)
case NdbDictionary::Column::Unsigned: case NdbDictionary::Column::Unsigned:
return UnSigned; return UnSigned;
case NdbDictionary::Column::Float: case NdbDictionary::Column::Float:
case NdbDictionary::Column::Olddecimal:
case NdbDictionary::Column::Olddecimalunsigned:
case NdbDictionary::Column::Decimal: case NdbDictionary::Column::Decimal:
case NdbDictionary::Column::Decimalunsigned:
case NdbDictionary::Column::Double: case NdbDictionary::Column::Double:
return Float; return Float;
case NdbDictionary::Column::Char: case NdbDictionary::Column::Char:
......
...@@ -145,7 +145,10 @@ HugoCalculator::calcValue(int record, ...@@ -145,7 +145,10 @@ HugoCalculator::calcValue(int record,
case NdbDictionary::Column::Bigunsigned: case NdbDictionary::Column::Bigunsigned:
case NdbDictionary::Column::Float: case NdbDictionary::Column::Float:
case NdbDictionary::Column::Double: case NdbDictionary::Column::Double:
case NdbDictionary::Column::Olddecimal:
case NdbDictionary::Column::Olddecimalunsigned:
case NdbDictionary::Column::Decimal: case NdbDictionary::Column::Decimal:
case NdbDictionary::Column::Decimalunsigned:
case NdbDictionary::Column::Binary: case NdbDictionary::Column::Binary:
case NdbDictionary::Column::Datetime: case NdbDictionary::Column::Datetime:
case NdbDictionary::Column::Time: case NdbDictionary::Column::Time:
......
...@@ -44,9 +44,14 @@ BackupConsumer::create_table_string(const TableS & table, ...@@ -44,9 +44,14 @@ BackupConsumer::create_table_string(const TableS & table,
case NdbDictionary::Column::Float: case NdbDictionary::Column::Float:
pos += sprintf(buf+pos, "%s", "float"); pos += sprintf(buf+pos, "%s", "float");
break; break;
case NdbDictionary::Column::Olddecimal:
case NdbDictionary::Column::Decimal: case NdbDictionary::Column::Decimal:
pos += sprintf(buf+pos, "%s", "decimal"); pos += sprintf(buf+pos, "%s", "decimal");
break; break;
case NdbDictionary::Column::Olddecimalunsigned:
case NdbDictionary::Column::Decimalunsigned:
pos += sprintf(buf+pos, "%s", "decimal unsigned");
break;
case NdbDictionary::Column::Char: case NdbDictionary::Column::Char:
pos += sprintf(buf+pos, "%s", "char"); pos += sprintf(buf+pos, "%s", "char");
break; break;
......
...@@ -602,7 +602,7 @@ innobase_mysql_tmpfile(void) ...@@ -602,7 +602,7 @@ innobase_mysql_tmpfile(void)
{ {
char filename[FN_REFLEN]; char filename[FN_REFLEN];
int fd2 = -1; int fd2 = -1;
File fd = create_temp_file(filename, NullS, "ib", File fd = create_temp_file(filename, mysql_tmpdir, "ib",
#ifdef __WIN__ #ifdef __WIN__
O_BINARY | O_TRUNC | O_SEQUENTIAL | O_BINARY | O_TRUNC | O_SEQUENTIAL |
O_TEMPORARY | O_SHORT_LIVED | O_TEMPORARY | O_SHORT_LIVED |
......
...@@ -445,7 +445,6 @@ bool ha_ndbcluster::get_error_message(int error, ...@@ -445,7 +445,6 @@ bool ha_ndbcluster::get_error_message(int error,
static inline bool ndb_supported_type(enum_field_types type) static inline bool ndb_supported_type(enum_field_types type)
{ {
switch (type) { switch (type) {
case MYSQL_TYPE_DECIMAL:
case MYSQL_TYPE_TINY: case MYSQL_TYPE_TINY:
case MYSQL_TYPE_SHORT: case MYSQL_TYPE_SHORT:
case MYSQL_TYPE_LONG: case MYSQL_TYPE_LONG:
...@@ -453,6 +452,8 @@ static inline bool ndb_supported_type(enum_field_types type) ...@@ -453,6 +452,8 @@ static inline bool ndb_supported_type(enum_field_types type)
case MYSQL_TYPE_LONGLONG: case MYSQL_TYPE_LONGLONG:
case MYSQL_TYPE_FLOAT: case MYSQL_TYPE_FLOAT:
case MYSQL_TYPE_DOUBLE: case MYSQL_TYPE_DOUBLE:
case MYSQL_TYPE_DECIMAL:
case MYSQL_TYPE_NEWDECIMAL:
case MYSQL_TYPE_TIMESTAMP: case MYSQL_TYPE_TIMESTAMP:
case MYSQL_TYPE_DATETIME: case MYSQL_TYPE_DATETIME:
case MYSQL_TYPE_DATE: case MYSQL_TYPE_DATE:
...@@ -3337,10 +3338,6 @@ static int create_ndb_column(NDBCOL &col, ...@@ -3337,10 +3338,6 @@ static int create_ndb_column(NDBCOL &col,
const enum enum_field_types mysql_type= field->real_type(); const enum enum_field_types mysql_type= field->real_type();
switch (mysql_type) { switch (mysql_type) {
// Numeric types // Numeric types
case MYSQL_TYPE_DECIMAL:
col.setType(NDBCOL::Char);
col.setLength(field->pack_length());
break;
case MYSQL_TYPE_TINY: case MYSQL_TYPE_TINY:
if (field->flags & UNSIGNED_FLAG) if (field->flags & UNSIGNED_FLAG)
col.setType(NDBCOL::Tinyunsigned); col.setType(NDBCOL::Tinyunsigned);
...@@ -3384,6 +3381,44 @@ static int create_ndb_column(NDBCOL &col, ...@@ -3384,6 +3381,44 @@ static int create_ndb_column(NDBCOL &col,
col.setType(NDBCOL::Double); col.setType(NDBCOL::Double);
col.setLength(1); col.setLength(1);
break; break;
case MYSQL_TYPE_DECIMAL:
{
Field_decimal *f= (Field_decimal*)field;
uint precision= f->pack_length();
uint scale= f->decimals();
if (field->flags & UNSIGNED_FLAG)
{
col.setType(NDBCOL::Olddecimalunsigned);
precision-= (scale > 0);
}
else
{
col.setType(NDBCOL::Olddecimal);
precision-= 1 + (scale > 0);
}
col.setPrecision(precision);
col.setScale(scale);
col.setLength(1);
}
break;
case MYSQL_TYPE_NEWDECIMAL:
{
Field_new_decimal *f= (Field_new_decimal*)field;
uint precision= f->field_length;
uint scale= f->decimals();
if (field->flags & UNSIGNED_FLAG)
{
col.setType(NDBCOL::Decimalunsigned);
}
else
{
col.setType(NDBCOL::Decimal);
}
col.setPrecision(precision);
col.setScale(scale);
col.setLength(1);
}
break;
// Date types // Date types
case MYSQL_TYPE_DATETIME: case MYSQL_TYPE_DATETIME:
col.setType(NDBCOL::Datetime); col.setType(NDBCOL::Datetime);
......
...@@ -471,7 +471,10 @@ class Item_splocal : public Item ...@@ -471,7 +471,10 @@ class Item_splocal : public Item
{ {
Item *it= this_item(); Item *it= this_item();
it->set_name(m_name.str, m_name.length, system_charset_info); if (name)
it->set_name(name, strlen(name), system_charset_info);
else
it->set_name(m_name.str, m_name.length, system_charset_info);
it->make_field(field); it->make_field(field);
} }
......
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