Commit dea5b47d authored by tomas@poseidon.ndb.mysql.com's avatar tomas@poseidon.ndb.mysql.com

Merge tulin@bk-internal.mysql.com:/home/bk/mysql-5.0

into poseidon.ndb.mysql.com:/home/tomas/mysql-5.0-ndb
parents aacea280 2f63bccc
...@@ -156,7 +156,7 @@ $ENV{'MYSQL_TCP_PORT'}= $mysql_tcp_port= 3334 + $opt_build_thread*2; ...@@ -156,7 +156,7 @@ $ENV{'MYSQL_TCP_PORT'}= $mysql_tcp_port= 3334 + $opt_build_thread*2;
$ENV{'MYSQL_UNIX_PORT'}=$mysql_unix_port="$opt_tmp/mysql$opt_suffix.build"; $ENV{'MYSQL_UNIX_PORT'}=$mysql_unix_port="$opt_tmp/mysql$opt_suffix.build";
$ENV{"PERL5LIB"}="$pwd/$host/perl5:$pwd/$host/perl5/site_perl"; $ENV{"PERL5LIB"}="$pwd/$host/perl5:$pwd/$host/perl5/site_perl";
$slave_port=$mysql_tcp_port+16; $slave_port=$mysql_tcp_port+16;
$ndbcluster_port= 9350 + $opt_build_thread*2; $ndbcluster_port= 9350 + $opt_build_thread*4;
$manager_port=$mysql_tcp_port+1; $manager_port=$mysql_tcp_port+1;
$mysqladmin_args="--no-defaults -u root --connect_timeout=5 --shutdown_timeout=20"; $mysqladmin_args="--no-defaults -u root --connect_timeout=5 --shutdown_timeout=20";
......
...@@ -1531,14 +1531,11 @@ then ...@@ -1531,14 +1531,11 @@ then
fi fi
fi fi
TOOLS_LIBS="$NON_THREADED_CLIENT_LIBS"
# Should we use named pthread library ? # Should we use named pthread library ?
AC_MSG_CHECKING("named thread libs:") AC_MSG_CHECKING("named thread libs:")
if test "$with_named_thread" != "no" if test "$with_named_thread" != "no"
then then
LIBS="$with_named_thread $LIBS $with_named_thread" LIBS="$with_named_thread $LIBS $with_named_thread"
TOOLS_LIBS="$with_named_thread $TOOLS_LIBS $with_named_thread"
with_posix_threads="yes" with_posix_threads="yes"
with_mit_threads="no" with_mit_threads="no"
AC_MSG_RESULT("$with_named_thread") AC_MSG_RESULT("$with_named_thread")
...@@ -1557,9 +1554,7 @@ else ...@@ -1557,9 +1554,7 @@ else
then then
AC_MSG_CHECKING("for pthread_create in -lpthread"); AC_MSG_CHECKING("for pthread_create in -lpthread");
ac_save_LIBS="$LIBS" ac_save_LIBS="$LIBS"
ac_save_TOOLS_LIBS="$TOOLS_LIBS"
LIBS="$LIBS -lpthread" LIBS="$LIBS -lpthread"
TOOLS_LIBS="$TOOLS_LIBS -lpthread"
AC_TRY_LINK( AC_TRY_LINK(
[#include <pthread.h>], [#include <pthread.h>],
[ (void) pthread_create((pthread_t*) 0,(pthread_attr_t*) 0, 0, 0); ], [ (void) pthread_create((pthread_t*) 0,(pthread_attr_t*) 0, 0, 0); ],
...@@ -1568,7 +1563,6 @@ else ...@@ -1568,7 +1563,6 @@ else
if test "$with_posix_threads" = "no" if test "$with_posix_threads" = "no"
then then
LIBS=" $ac_save_LIBS -lpthreads" LIBS=" $ac_save_LIBS -lpthreads"
TOOLS_LIBS=" $ac_save_TOOLS_LIBS -lpthreads"
AC_MSG_CHECKING("for pthread_create in -lpthreads"); AC_MSG_CHECKING("for pthread_create in -lpthreads");
AC_TRY_LINK( AC_TRY_LINK(
[#include <pthread.h>], [#include <pthread.h>],
...@@ -1579,7 +1573,6 @@ else ...@@ -1579,7 +1573,6 @@ else
then then
# This is for FreeBSD # This is for FreeBSD
LIBS="$ac_save_LIBS -pthread" LIBS="$ac_save_LIBS -pthread"
TOOLS_LIBS="$ac_save_TOOLS_LIBS -pthread"
AC_MSG_CHECKING("for pthread_create in -pthread"); AC_MSG_CHECKING("for pthread_create in -pthread");
AC_TRY_LINK( AC_TRY_LINK(
[#include <pthread.h>], [#include <pthread.h>],
...@@ -1590,7 +1583,6 @@ else ...@@ -1590,7 +1583,6 @@ else
then then
with_mit_threads="yes" with_mit_threads="yes"
LIBS="$ac_save_LIBS" LIBS="$ac_save_LIBS"
TOOLS_LIBS="$ac_save_TOOLS_LIBS"
fi fi
fi fi
fi fi
...@@ -2656,8 +2648,6 @@ AC_SUBST(sql_union_dirs) ...@@ -2656,8 +2648,6 @@ AC_SUBST(sql_union_dirs)
# Some usefull subst # Some usefull subst
AC_SUBST(CC) AC_SUBST(CC)
AC_SUBST(GXX) AC_SUBST(GXX)
#Remove TOOLS_LIBS, because this is included in LIBRARIES
#AC_SUBST(TOOLS_LIBS)
# Set configuration options for make_binary_distribution # Set configuration options for make_binary_distribution
case $SYSTEM_TYPE in case $SYSTEM_TYPE in
......
...@@ -526,7 +526,7 @@ bits of a record. (Only compact records have status bits.) */ ...@@ -526,7 +526,7 @@ bits of a record. (Only compact records have status bits.) */
UNIV_INLINE UNIV_INLINE
ulint ulint
rec_get_info_and_status_bits( rec_get_info_and_status_bits(
/*==============*/ /*=========================*/
/* out: info bits */ /* out: info bits */
rec_t* rec, /* in: physical record */ rec_t* rec, /* in: physical record */
ibool comp) /* in: TRUE=compact page format */ ibool comp) /* in: TRUE=compact page format */
...@@ -550,7 +550,7 @@ bits of a record. (Only compact records have status bits.) */ ...@@ -550,7 +550,7 @@ bits of a record. (Only compact records have status bits.) */
UNIV_INLINE UNIV_INLINE
void void
rec_set_info_and_status_bits( rec_set_info_and_status_bits(
/*==============*/ /*=========================*/
rec_t* rec, /* in: physical record */ rec_t* rec, /* in: physical record */
ibool comp, /* in: TRUE=compact page format */ ibool comp, /* in: TRUE=compact page format */
ulint bits) /* in: info bits */ ulint bits) /* in: info bits */
......
...@@ -383,7 +383,9 @@ struct trx_struct{ ...@@ -383,7 +383,9 @@ struct trx_struct{
dulint commit_lsn; /* lsn at the time of the commit */ dulint commit_lsn; /* lsn at the time of the commit */
ibool dict_operation; /* TRUE if the trx is used to create ibool dict_operation; /* TRUE if the trx is used to create
a table, create an index, or drop a a table, create an index, or drop a
table */ table. This is a hint that the table
may need to be dropped in crash
recovery. */
dulint table_id; /* table id if the preceding field is dulint table_id; /* table id if the preceding field is
TRUE */ TRUE */
/*------------------------------*/ /*------------------------------*/
......
...@@ -2561,17 +2561,6 @@ do not allow the TRUNCATE. We also reserve the data dictionary latch. */ ...@@ -2561,17 +2561,6 @@ do not allow the TRUNCATE. We also reserve the data dictionary latch. */
goto funct_exit; goto funct_exit;
} }
if (table->n_mysql_handles_opened > 1) {
ut_print_timestamp(stderr);
fputs(" InnoDB: Warning: MySQL is trying to truncate table ", stderr);
ut_print_name(stderr, trx, table->name);
fputs("\n"
"InnoDB: though there are still open handles to it.\n", stderr);
err = DB_ERROR;
goto funct_exit;
}
/* TODO: could we replace the counter n_foreign_key_checks_running /* TODO: could we replace the counter n_foreign_key_checks_running
with lock checks on the table? Acquire here an exclusive lock on the with lock checks on the table? Acquire here an exclusive lock on the
table, and rewrite lock0lock.c and the lock wait in srv0srv.c so that table, and rewrite lock0lock.c and the lock wait in srv0srv.c so that
...@@ -2594,7 +2583,6 @@ fputs(" InnoDB: Warning: MySQL is trying to truncate table ", stderr); ...@@ -2594,7 +2583,6 @@ fputs(" InnoDB: Warning: MySQL is trying to truncate table ", stderr);
lock_reset_all_on_table(table); lock_reset_all_on_table(table);
trx->dict_operation = TRUE;
trx->table_id = table->id; trx->table_id = table->id;
/* scan SYS_INDEXES for all indexes of the table */ /* scan SYS_INDEXES for all indexes of the table */
......
...@@ -432,16 +432,16 @@ index(ye), ...@@ -432,16 +432,16 @@ index(ye),
index(ti), index(ti),
index(ts) index(ts)
) engine=ndb; ) engine=ndb;
insert into t1 (pk,dt,da,ye,ti) values insert into t1 (pk,dt,da,ye,ti,ts) values
(1, '1901-05-05 23:00:59', '1901-05-05', '1901', '23:00:59'), (1, '1901-05-05 23:00:59', '1901-05-05', '1901', '23:00:59', '2001-01-01 23:00:59'),
(2, '1912-09-05 13:00:59', '1912-09-05', '1912', '13:00:59'), (2, '1912-09-05 13:00:59', '1912-09-05', '1912', '13:00:59', '2001-01-01 13:00:59'),
(3, '1945-12-31 00:00:00', '1945-12-31', '1945', '00:00:00'), (3, '1945-12-31 00:00:00', '1945-12-31', '1945', '00:00:00', '2001-01-01 00:00:00'),
(4, '1955-12-31 00:00:00', '1955-12-31', '1955', '00:00:00'), (4, '1955-12-31 00:00:00', '1955-12-31', '1955', '00:00:00', '2001-01-01 00:00:00'),
(5, '1963-06-06 06:06:06', '1963-06-06', '1963', '06:06:06'), (5, '1963-06-06 06:06:06', '1963-06-06', '1963', '06:06:06', '2001-01-01 06:06:06'),
(6, '1993-06-06 06:06:06', '1993-06-06', '1993', '06:06:06'), (6, '1993-06-06 06:06:06', '1993-06-06', '1993', '06:06:06', '2001-01-01 06:06:06'),
(7, '2001-01-01 10:11:10', '2001-01-01', '2001', '10:11:10'), (7, '2001-01-01 10:11:10', '2001-01-01', '2001', '10:11:10', '2001-01-01 10:11:10'),
(8, '2001-01-01 10:11:11', '2001-01-01', '2001', '10:11:11'), (8, '2001-01-01 10:11:11', '2001-01-01', '2001', '10:11:11', '2001-01-01 10:11:11'),
(9, '2005-01-31 23:59:59', '2005-01-31', '2005', '23:59:59'); (9, '2005-01-31 23:59:59', '2005-01-31', '2005', '23:59:59', '2001-01-01 23:59:59');
select count(*)-9 from t1 use index (dt) where dt > '1900-01-01 00:00:00'; select count(*)-9 from t1 use index (dt) where dt > '1900-01-01 00:00:00';
count(*)-9 count(*)-9
0 0
...@@ -529,6 +529,30 @@ count(*)-8 ...@@ -529,6 +529,30 @@ count(*)-8
select count(*)-9 from t1 use index (ti) where ti <= '23:59:59'; select count(*)-9 from t1 use index (ti) where ti <= '23:59:59';
count(*)-9 count(*)-9
0 0
select count(*)-9 from t1 use index (ts) where ts >= '2001-01-01 00:00:00';
count(*)-9
0
select count(*)-7 from t1 use index (ts) where ts > '2001-01-01 00:00:00';
count(*)-7
0
select count(*)-7 from t1 use index (ts) where ts > '2001-01-01 05:05:05';
count(*)-7
0
select count(*)-5 from t1 use index (ts) where ts > '2001-01-01 06:06:06';
count(*)-5
0
select count(*)-5 from t1 use index (ts) where ts < '2001-01-01 10:11:11';
count(*)-5
0
select count(*)-6 from t1 use index (ts) where ts <= '2001-01-01 10:11:11';
count(*)-6
0
select count(*)-8 from t1 use index (ts) where ts < '2001-01-01 23:59:59';
count(*)-8
0
select count(*)-9 from t1 use index (ts) where ts <= '2001-01-01 23:59:59';
count(*)-9
0
drop table t1; 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);
......
...@@ -220,16 +220,16 @@ create table t1 ( ...@@ -220,16 +220,16 @@ create table t1 (
index(ts) index(ts)
) engine=ndb; ) engine=ndb;
insert into t1 (pk,dt,da,ye,ti) values insert into t1 (pk,dt,da,ye,ti,ts) values
(1, '1901-05-05 23:00:59', '1901-05-05', '1901', '23:00:59'), (1, '1901-05-05 23:00:59', '1901-05-05', '1901', '23:00:59', '2001-01-01 23:00:59'),
(2, '1912-09-05 13:00:59', '1912-09-05', '1912', '13:00:59'), (2, '1912-09-05 13:00:59', '1912-09-05', '1912', '13:00:59', '2001-01-01 13:00:59'),
(3, '1945-12-31 00:00:00', '1945-12-31', '1945', '00:00:00'), (3, '1945-12-31 00:00:00', '1945-12-31', '1945', '00:00:00', '2001-01-01 00:00:00'),
(4, '1955-12-31 00:00:00', '1955-12-31', '1955', '00:00:00'), (4, '1955-12-31 00:00:00', '1955-12-31', '1955', '00:00:00', '2001-01-01 00:00:00'),
(5, '1963-06-06 06:06:06', '1963-06-06', '1963', '06:06:06'), (5, '1963-06-06 06:06:06', '1963-06-06', '1963', '06:06:06', '2001-01-01 06:06:06'),
(6, '1993-06-06 06:06:06', '1993-06-06', '1993', '06:06:06'), (6, '1993-06-06 06:06:06', '1993-06-06', '1993', '06:06:06', '2001-01-01 06:06:06'),
(7, '2001-01-01 10:11:10', '2001-01-01', '2001', '10:11:10'), (7, '2001-01-01 10:11:10', '2001-01-01', '2001', '10:11:10', '2001-01-01 10:11:10'),
(8, '2001-01-01 10:11:11', '2001-01-01', '2001', '10:11:11'), (8, '2001-01-01 10:11:11', '2001-01-01', '2001', '10:11:11', '2001-01-01 10:11:11'),
(9, '2005-01-31 23:59:59', '2005-01-31', '2005', '23:59:59'); (9, '2005-01-31 23:59:59', '2005-01-31', '2005', '23:59:59', '2001-01-01 23:59:59');
# datetime # datetime
select count(*)-9 from t1 use index (dt) where dt > '1900-01-01 00:00:00'; select count(*)-9 from t1 use index (dt) where dt > '1900-01-01 00:00:00';
...@@ -268,6 +268,16 @@ select count(*)-6 from t1 use index (ti) where ti <= '10:11:11'; ...@@ -268,6 +268,16 @@ select count(*)-6 from t1 use index (ti) where ti <= '10:11:11';
select count(*)-8 from t1 use index (ti) where ti < '23:59:59'; select count(*)-8 from t1 use index (ti) where ti < '23:59:59';
select count(*)-9 from t1 use index (ti) where ti <= '23:59:59'; select count(*)-9 from t1 use index (ti) where ti <= '23:59:59';
# timestamp
select count(*)-9 from t1 use index (ts) where ts >= '2001-01-01 00:00:00';
select count(*)-7 from t1 use index (ts) where ts > '2001-01-01 00:00:00';
select count(*)-7 from t1 use index (ts) where ts > '2001-01-01 05:05:05';
select count(*)-5 from t1 use index (ts) where ts > '2001-01-01 06:06:06';
select count(*)-5 from t1 use index (ts) where ts < '2001-01-01 10:11:11';
select count(*)-6 from t1 use index (ts) where ts <= '2001-01-01 10:11:11';
select count(*)-8 from t1 use index (ts) where ts < '2001-01-01 23:59:59';
select count(*)-9 from t1 use index (ts) where ts <= '2001-01-01 23:59:59';
drop table t1; drop table t1;
# bug#7798 # bug#7798
......
...@@ -276,7 +276,9 @@ public: ...@@ -276,7 +276,9 @@ public:
ExtBit = NdbSqlUtil::Type::Bit, ExtBit = NdbSqlUtil::Type::Bit,
ExtLongvarchar = NdbSqlUtil::Type::Longvarchar, ExtLongvarchar = NdbSqlUtil::Type::Longvarchar,
ExtLongvarbinary = NdbSqlUtil::Type::Longvarbinary, ExtLongvarbinary = NdbSqlUtil::Type::Longvarbinary,
ExtTime = NdbSqlUtil::Type::Time ExtTime = NdbSqlUtil::Type::Time,
ExtYear = NdbSqlUtil::Type::Year,
ExtTimestamp = NdbSqlUtil::Type::Timestamp
}; };
// Attribute data interpretation // Attribute data interpretation
...@@ -389,6 +391,14 @@ public: ...@@ -389,6 +391,14 @@ public:
AttributeSize = DictTabInfo::an8Bit; AttributeSize = DictTabInfo::an8Bit;
AttributeArraySize = 3 * AttributeExtLength; AttributeArraySize = 3 * AttributeExtLength;
break; break;
case DictTabInfo::ExtYear:
AttributeSize = DictTabInfo::an8Bit;
AttributeArraySize = 1 * AttributeExtLength;
break;
case DictTabInfo::ExtTimestamp:
AttributeSize = DictTabInfo::an8Bit;
AttributeArraySize = 4 * AttributeExtLength;
break;
default: default:
return false; return false;
}; };
......
...@@ -61,7 +61,9 @@ ...@@ -61,7 +61,9 @@
#define NDB_TYPE_LONG_VARCHAR 23 #define NDB_TYPE_LONG_VARCHAR 23
#define NDB_TYPE_LONG_VARBINARY 24 #define NDB_TYPE_LONG_VARBINARY 24
#define NDB_TYPE_TIME 25 #define NDB_TYPE_TIME 25
#define NDB_TYPE_YEAR 26
#define NDB_TYPE_TIMESTAMP 27
#define NDB_TYPE_MAX 26 #define NDB_TYPE_MAX 28
#endif #endif
...@@ -196,7 +196,9 @@ public: ...@@ -196,7 +196,9 @@ public:
Bit = NDB_TYPE_BIT, ///< Bit, length specifies no of bits Bit = NDB_TYPE_BIT, ///< Bit, length specifies no of bits
Longvarchar = NDB_TYPE_LONG_VARCHAR, ///< Length bytes: 2, little-endian Longvarchar = NDB_TYPE_LONG_VARCHAR, ///< Length bytes: 2, little-endian
Longvarbinary = NDB_TYPE_LONG_VARBINARY, ///< Length bytes: 2, little-endian Longvarbinary = NDB_TYPE_LONG_VARBINARY, ///< Length bytes: 2, little-endian
Time = NDB_TYPE_TIME ///< Time without date Time = NDB_TYPE_TIME, ///< Time without date
Year = NDB_TYPE_YEAR, ///< Year 1901-2155 (1 byte)
Timestamp = NDB_TYPE_TIMESTAMP ///< Unix time
}; };
/** /**
......
...@@ -53,7 +53,7 @@ public: ...@@ -53,7 +53,7 @@ public:
COND_GE = 2, ///< upper bound COND_GE = 2, ///< upper bound
COND_GT = 3, ///< upper bound, strict COND_GT = 3, ///< upper bound, strict
COND_EQ = 4, ///< equality COND_EQ = 4, ///< equality
COND_NE = 5 COND_NE = 5 ///< not equal
}; };
/** /**
......
...@@ -92,7 +92,9 @@ public: ...@@ -92,7 +92,9 @@ public:
Bit = NDB_TYPE_BIT, Bit = NDB_TYPE_BIT,
Longvarchar = NDB_TYPE_LONG_VARCHAR, Longvarchar = NDB_TYPE_LONG_VARCHAR,
Longvarbinary = NDB_TYPE_LONG_VARBINARY, Longvarbinary = NDB_TYPE_LONG_VARBINARY,
Time = NDB_TYPE_TIME Time = NDB_TYPE_TIME,
Year = NDB_TYPE_YEAR,
Timestamp = NDB_TYPE_TIMESTAMP
}; };
Enum m_typeId; // redundant Enum m_typeId; // redundant
Cmp* m_cmp; // comparison method Cmp* m_cmp; // comparison method
...@@ -161,6 +163,8 @@ private: ...@@ -161,6 +163,8 @@ private:
static Cmp cmpLongvarchar; static Cmp cmpLongvarchar;
static Cmp cmpLongvarbinary; static Cmp cmpLongvarbinary;
static Cmp cmpTime; static Cmp cmpTime;
static Cmp cmpYear;
static Cmp cmpTimestamp;
}; };
#endif #endif
...@@ -39,14 +39,14 @@ struct NdbThread ...@@ -39,14 +39,14 @@ struct NdbThread
static static
void* void*
ndb_thread_wrapper(void* _ss){ ndb_thread_wrapper(void* _ss){
DBUG_ENTER("ndb_thread_wrapper");
void * ret; void * ret;
struct NdbThread * ss = (struct NdbThread *)_ss; struct NdbThread * ss = (struct NdbThread *)_ss;
DBUG_ENTER("ndb_thread_wrapper");
#ifdef NDB_SHM_TRANSPORTER #ifdef NDB_SHM_TRANSPORTER
if (g_ndb_shm_signum) if (g_ndb_shm_signum)
{ {
DBUG_PRINT("info",("Block signum %d",g_ndb_shm_signum));
sigset_t mask; sigset_t mask;
DBUG_PRINT("info",("Block signum %d",g_ndb_shm_signum));
sigemptyset(&mask); sigemptyset(&mask);
sigaddset(&mask, g_ndb_shm_signum); sigaddset(&mask, g_ndb_shm_signum);
pthread_sigmask(SIG_BLOCK, &mask, 0); pthread_sigmask(SIG_BLOCK, &mask, 0);
......
...@@ -179,6 +179,14 @@ NdbSqlUtil::m_typeList[] = { ...@@ -179,6 +179,14 @@ NdbSqlUtil::m_typeList[] = {
{ {
Type::Time, Type::Time,
cmpTime cmpTime
},
{
Type::Year,
cmpYear
},
{
Type::Timestamp,
cmpTimestamp
} }
}; };
...@@ -670,6 +678,40 @@ NdbSqlUtil::cmpLongvarbinary(const void* info, const void* p1, unsigned n1, cons ...@@ -670,6 +678,40 @@ NdbSqlUtil::cmpLongvarbinary(const void* info, const void* p1, unsigned n1, cons
return CmpUnknown; return CmpUnknown;
} }
int
NdbSqlUtil::cmpYear(const void* info, const void* p1, unsigned n1, const void* p2, unsigned n2, bool full)
{
if (n2 >= sizeof(Uint8)) {
Uint8 v1, v2;
memcpy(&v1, p1, sizeof(Uint8));
memcpy(&v2, p2, sizeof(Uint8));
if (v1 < v2)
return -1;
if (v1 > v2)
return +1;
return 0;
}
assert(! full);
return CmpUnknown;
}
int
NdbSqlUtil::cmpTimestamp(const void* info, const void* p1, unsigned n1, const void* p2, unsigned n2, bool full)
{
if (n2 >= sizeof(Uint32)) {
Uint32 v1, v2;
memcpy(&v1, p1, sizeof(Uint32));
memcpy(&v2, p2, sizeof(Uint32));
if (v1 < v2)
return -1;
if (v1 > v2)
return +1;
return 0;
}
assert(! full);
return CmpUnknown;
}
// check charset // check charset
bool bool
......
...@@ -980,6 +980,12 @@ operator<<(NdbOut& out, const NdbDictionary::Column& col) ...@@ -980,6 +980,12 @@ operator<<(NdbOut& out, const NdbDictionary::Column& col)
case NdbDictionary::Column::Time: case NdbDictionary::Column::Time:
out << "Time"; out << "Time";
break; break;
case NdbDictionary::Column::Year:
out << "Year";
break;
case NdbDictionary::Column::Timestamp:
out << "Timestamp";
break;
case NdbDictionary::Column::Undefined: case NdbDictionary::Column::Undefined:
out << "Undefined"; out << "Undefined";
break; break;
......
...@@ -144,6 +144,8 @@ NdbColumnImpl::init(Type t) ...@@ -144,6 +144,8 @@ NdbColumnImpl::init(Type t)
m_cs = default_cs; m_cs = default_cs;
break; break;
case Time: case Time:
case Year:
case Timestamp:
m_precision = 0; m_precision = 0;
m_scale = 0; m_scale = 0;
m_length = 1; m_length = 1;
......
...@@ -178,10 +178,11 @@ NdbOut& operator<<(NdbOut& out, const NdbRecAttr &r) ...@@ -178,10 +178,11 @@ NdbOut& operator<<(NdbOut& out, const NdbRecAttr &r)
return out; return out;
} }
if (r.arraySize() > 1) uint length = r.getColumn()->getLength();
if (length > 1)
out << "["; out << "[";
for (Uint32 j = 0; j < r.arraySize(); j++) for (Uint32 j = 0; j < length; j++)
{ {
if (j > 0) if (j > 0)
out << " "; out << " ";
...@@ -221,13 +222,13 @@ NdbOut& operator<<(NdbOut& out, const NdbRecAttr &r) ...@@ -221,13 +222,13 @@ NdbOut& operator<<(NdbOut& out, const NdbRecAttr &r)
break; break;
case NdbDictionary::Column::Char: case NdbDictionary::Column::Char:
ndbrecattr_print_string(out,"Char",r.aRef(),r.arraySize()); ndbrecattr_print_string(out,"Char",r.aRef(),r.arraySize());
j = r.arraySize(); j = length;
break; break;
case NdbDictionary::Column::Varchar: case NdbDictionary::Column::Varchar:
{ {
unsigned len = *(const unsigned char*)r.aRef(); unsigned len = *(const unsigned char*)r.aRef();
ndbrecattr_print_string(out,"Varchar", r.aRef()+1,len); ndbrecattr_print_string(out,"Varchar", r.aRef()+1,len);
j = r.arraySize(); j = length;
} }
break; break;
case NdbDictionary::Column::Float: case NdbDictionary::Column::Float:
...@@ -236,6 +237,86 @@ NdbOut& operator<<(NdbOut& out, const NdbRecAttr &r) ...@@ -236,6 +237,86 @@ 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;
// for dates cut-and-paste from field.cc
case NdbDictionary::Column::Datetime:
{
ulonglong tmp=r.u_64_value();
long part1,part2,part3;
part1=(long) (tmp/LL(1000000));
part2=(long) (tmp - (ulonglong) part1*LL(1000000));
char buf[40];
char* pos=(char*) buf+19;
*pos--=0;
*pos--= (char) ('0'+(char) (part2%10)); part2/=10;
*pos--= (char) ('0'+(char) (part2%10)); part3= (int) (part2 / 10);
*pos--= ':';
*pos--= (char) ('0'+(char) (part3%10)); part3/=10;
*pos--= (char) ('0'+(char) (part3%10)); part3/=10;
*pos--= ':';
*pos--= (char) ('0'+(char) (part3%10)); part3/=10;
*pos--= (char) ('0'+(char) part3);
*pos--= '/';
*pos--= (char) ('0'+(char) (part1%10)); part1/=10;
*pos--= (char) ('0'+(char) (part1%10)); part1/=10;
*pos--= '-';
*pos--= (char) ('0'+(char) (part1%10)); part1/=10;
*pos--= (char) ('0'+(char) (part1%10)); part3= (int) (part1/10);
*pos--= '-';
*pos--= (char) ('0'+(char) (part3%10)); part3/=10;
*pos--= (char) ('0'+(char) (part3%10)); part3/=10;
*pos--= (char) ('0'+(char) (part3%10)); part3/=10;
*pos=(char) ('0'+(char) part3);
out << buf;
}
break;
case NdbDictionary::Column::Date:
{
uint32 tmp=(uint32) uint3korr(r.aRef());
int part;
char buf[40];
char *pos=(char*) buf+10;
*pos--=0;
part=(int) (tmp & 31);
*pos--= (char) ('0'+part%10);
*pos--= (char) ('0'+part/10);
*pos--= '-';
part=(int) (tmp >> 5 & 15);
*pos--= (char) ('0'+part%10);
*pos--= (char) ('0'+part/10);
*pos--= '-';
part=(int) (tmp >> 9);
*pos--= (char) ('0'+part%10); part/=10;
*pos--= (char) ('0'+part%10); part/=10;
*pos--= (char) ('0'+part%10); part/=10;
*pos= (char) ('0'+part);
out << buf;
}
break;
case NdbDictionary::Column::Time:
{
long tmp=(long) sint3korr(r.aRef());
int hour=(uint) (tmp/10000);
int minute=(uint) (tmp/100 % 100);
int second=(uint) (tmp % 100);
char buf[40];
sprintf(buf, "%02d:%02d:%02d", hour, minute, second);
out << buf;
}
break;
case NdbDictionary::Column::Year:
{
uint year = 1900 + r.u_char_value();
char buf[40];
sprintf(buf, "%04d", year);
out << buf;
}
break;
case NdbDictionary::Column::Timestamp:
{
time_t time = r.u_32_value();
out << (uint)time;
}
break;
case NdbDictionary::Column::Blob: case NdbDictionary::Column::Blob:
{ {
const NdbBlob::Head* h = (const NdbBlob::Head*)r.aRef(); const NdbBlob::Head* h = (const NdbBlob::Head*)r.aRef();
...@@ -244,7 +325,7 @@ NdbOut& operator<<(NdbOut& out, const NdbRecAttr &r) ...@@ -244,7 +325,7 @@ NdbOut& operator<<(NdbOut& out, const NdbRecAttr &r)
unsigned n = r.arraySize() - sizeof(*h); unsigned n = r.arraySize() - sizeof(*h);
for (unsigned k = 0; k < n && k < h->length; k++) for (unsigned k = 0; k < n && k < h->length; k++)
out.print("%02X", (int)p[k]); out.print("%02X", (int)p[k]);
j = r.arraySize(); j = length;
} }
break; break;
case NdbDictionary::Column::Text: case NdbDictionary::Column::Text:
...@@ -255,26 +336,26 @@ NdbOut& operator<<(NdbOut& out, const NdbRecAttr &r) ...@@ -255,26 +336,26 @@ NdbOut& operator<<(NdbOut& out, const NdbRecAttr &r)
unsigned n = r.arraySize() - sizeof(*h); unsigned n = r.arraySize() - sizeof(*h);
for (unsigned k = 0; k < n && k < h->length; k++) for (unsigned k = 0; k < n && k < h->length; k++)
out.print("%c", (int)p[k]); out.print("%c", (int)p[k]);
j = r.arraySize(); j = length;
} }
break; break;
case NdbDictionary::Column::Longvarchar: case NdbDictionary::Column::Longvarchar:
{ {
unsigned len = uint2korr(r.aRef()); unsigned len = uint2korr(r.aRef());
ndbrecattr_print_string(out,"Longvarchar", r.aRef()+2,len); ndbrecattr_print_string(out,"Longvarchar", r.aRef()+2,len);
j = r.arraySize(); j = length;
} }
break; break;
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 = r.arraySize(); j = length;
if (j > 1) if (j > 1)
out << " " << j << " times"; out << " " << j << " times";
break; break;
} }
} }
if (r.arraySize() > 1) if (length > 1)
{ {
out << "]"; out << "]";
} }
......
...@@ -575,10 +575,6 @@ convertColumnTypeToAttrType(NdbDictionary::Column::Type _type) ...@@ -575,10 +575,6 @@ convertColumnTypeToAttrType(NdbDictionary::Column::Type _type)
case NdbDictionary::Column::Binary: case NdbDictionary::Column::Binary:
case NdbDictionary::Column::Varbinary: case NdbDictionary::Column::Varbinary:
return String; return String;
case NdbDictionary::Column::Datetime:
case NdbDictionary::Column::Date:
case NdbDictionary::Column::Time:
case NdbDictionary::Column::Undefined:
default: default:
return NoAttrTypeDef; return NoAttrTypeDef;
} }
......
...@@ -5787,11 +5787,12 @@ ha_innobase::store_lock( ...@@ -5787,11 +5787,12 @@ ha_innobase::store_lock(
if (lock_type != TL_IGNORE && lock.type == TL_UNLOCK) { if (lock_type != TL_IGNORE && lock.type == TL_UNLOCK) {
/* If we are not doing a LOCK TABLE or DISCARD/IMPORT /* If we are not doing a LOCK TABLE or DISCARD/IMPORT
TABLESPACE, then allow multiple writers */ TABLESPACE or TRUNCATE TABLE, then allow multiple writers */
if ((lock_type >= TL_WRITE_CONCURRENT_INSERT && if ((lock_type >= TL_WRITE_CONCURRENT_INSERT &&
lock_type <= TL_WRITE) && !thd->in_lock_tables lock_type <= TL_WRITE) && !thd->in_lock_tables
&& !thd->tablespace_op) { && !thd->tablespace_op
&& thd->lex->sql_command != SQLCOM_TRUNCATE) {
lock_type = TL_WRITE_ALLOW_WRITE; lock_type = TL_WRITE_ALLOW_WRITE;
} }
......
...@@ -3472,14 +3472,14 @@ static int create_ndb_column(NDBCOL &col, ...@@ -3472,14 +3472,14 @@ static int create_ndb_column(NDBCOL &col,
col.setLength(1); col.setLength(1);
break; break;
// Date types // Date types
case MYSQL_TYPE_TIMESTAMP:
col.setType(NDBCOL::Unsigned);
col.setLength(1);
break;
case MYSQL_TYPE_DATETIME: case MYSQL_TYPE_DATETIME:
col.setType(NDBCOL::Datetime); col.setType(NDBCOL::Datetime);
col.setLength(1); col.setLength(1);
break; break;
case MYSQL_TYPE_DATE: // ?
col.setType(NDBCOL::Char);
col.setLength(field->pack_length());
break;
case MYSQL_TYPE_NEWDATE: case MYSQL_TYPE_NEWDATE:
col.setType(NDBCOL::Date); col.setType(NDBCOL::Date);
col.setLength(1); col.setLength(1);
...@@ -3488,10 +3488,13 @@ static int create_ndb_column(NDBCOL &col, ...@@ -3488,10 +3488,13 @@ static int create_ndb_column(NDBCOL &col,
col.setType(NDBCOL::Time); col.setType(NDBCOL::Time);
col.setLength(1); col.setLength(1);
break; break;
case MYSQL_TYPE_DATE: // ? case MYSQL_TYPE_YEAR:
case MYSQL_TYPE_YEAR: col.setType(NDBCOL::Year);
col.setType(NDBCOL::Char); col.setLength(1);
col.setLength(field->pack_length()); break;
case MYSQL_TYPE_TIMESTAMP:
col.setType(NDBCOL::Timestamp);
col.setLength(1);
break; break;
// Char types // Char types
case MYSQL_TYPE_STRING: case MYSQL_TYPE_STRING:
......
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