summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--mysql-test/r/ndb_index_ordered.result66
-rw-r--r--mysql-test/t/ndb_index_ordered.test32
-rw-r--r--ndb/include/kernel/signaldata/DictTabInfo.hpp6
-rw-r--r--ndb/include/ndbapi/NdbDictionary.hpp2
-rw-r--r--ndb/include/util/NdbSqlUtil.hpp4
-rw-r--r--ndb/src/common/util/NdbSqlUtil.cpp52
-rw-r--r--ndb/src/ndbapi/NdbDictionary.cpp4
-rw-r--r--ndb/src/ndbapi/NdbDictionaryImpl.cpp4
-rw-r--r--ndb/test/include/NdbSchemaOp.hpp2
-rw-r--r--ndb/tools/restore/consumer.cpp4
-rw-r--r--sql/ha_ndbcluster.cc9
11 files changed, 118 insertions, 67 deletions
diff --git a/mysql-test/r/ndb_index_ordered.result b/mysql-test/r/ndb_index_ordered.result
index a3eb5630131..466523aafa7 100644
--- a/mysql-test/r/ndb_index_ordered.result
+++ b/mysql-test/r/ndb_index_ordered.result
@@ -325,19 +325,53 @@ index(ts)
) engine=ndb;
insert into t1 (pk,dt,da,ye,ti) values
(1, '1901-05-05 23:00:59', '1901-05-05', '1901', '23:00:59'),
-(2, '1955-12-31 00:00:00', '1955-12-31', '1955', '00:00:00'),
-(3, '1999-06-06 06:06:06', '1999-06-06', '1999', '06:06:06'),
-(4, '2001-01-01 10:11:11', '2001-01-01', '2001', '10:11:11'),
-(5, '2005-01-31 23:59:59', '2005-01-31', '2005', '23:59:59');
-select count(*) from t1 use index (dt) where dt > '1900-01-01 00:00:00';
-count(*)
-5
-select count(*) from t1 use index (dt) where dt > '1955-12-31 00:00:00';
-count(*)
-3
-select count(*) from t1 use index (dt) where dt < '2001-01-01 10:11:11';
-count(*)
-3
-select count(*) from t1 use index (dt) where dt < '2001-01-01 10:11:12';
-count(*)
-4
+(2, '1912-09-05 13:00:59', '1912-09-05', '1912', '13:00:59'),
+(3, '1945-12-31 00:00:00', '1945-12-31', '1945', '00:00:00'),
+(4, '1955-12-31 00:00:00', '1955-12-31', '1955', '00:00:00'),
+(5, '1963-06-06 06:06:06', '1963-06-06', '1963', '06:06:06'),
+(6, '1993-06-06 06:06:06', '1993-06-06', '1993', '06:06:06'),
+(7, '2001-01-01 10:11:10', '2001-01-01', '2001', '10:11:10'),
+(8, '2001-01-01 10:11:11', '2001-01-01', '2001', '10:11:11'),
+(9, '2005-01-31 23:59:59', '2005-01-31', '2005', '23:59:59');
+select count(*)-9 from t1 use index (dt) where dt > '1900-01-01 00:00:00';
+count(*)-9
+0
+select count(*)-6 from t1 use index (dt) where dt >= '1955-12-31 00:00:00';
+count(*)-6
+0
+select count(*)-5 from t1 use index (dt) where dt > '1955-12-31 00:00:00';
+count(*)-5
+0
+select count(*)-5 from t1 use index (dt) where dt < '1970-03-03 22:22:22';
+count(*)-5
+0
+select count(*)-7 from t1 use index (dt) where dt < '2001-01-01 10:11:11';
+count(*)-7
+0
+select count(*)-8 from t1 use index (dt) where dt <= '2001-01-01 10:11:11';
+count(*)-8
+0
+select count(*)-9 from t1 use index (dt) where dt <= '2055-01-01 00:00:00';
+count(*)-9
+0
+select count(*)-9 from t1 use index (da) where da > '1900-01-01';
+count(*)-9
+0
+select count(*)-6 from t1 use index (da) where da >= '1955-12-31';
+count(*)-6
+0
+select count(*)-5 from t1 use index (da) where da > '1955-12-31';
+count(*)-5
+0
+select count(*)-5 from t1 use index (da) where da < '1970-03-03';
+count(*)-5
+0
+select count(*)-6 from t1 use index (da) where da < '2001-01-01';
+count(*)-6
+0
+select count(*)-8 from t1 use index (da) where da <= '2001-01-02';
+count(*)-8
+0
+select count(*)-9 from t1 use index (da) where da <= '2055-01-01';
+count(*)-9
+0
diff --git a/mysql-test/t/ndb_index_ordered.test b/mysql-test/t/ndb_index_ordered.test
index c5d3a83a3ab..ae2f7db53fb 100644
--- a/mysql-test/t/ndb_index_ordered.test
+++ b/mysql-test/t/ndb_index_ordered.test
@@ -191,13 +191,29 @@ create table t1 (
insert into t1 (pk,dt,da,ye,ti) values
(1, '1901-05-05 23:00:59', '1901-05-05', '1901', '23:00:59'),
- (2, '1955-12-31 00:00:00', '1955-12-31', '1955', '00:00:00'),
- (3, '1999-06-06 06:06:06', '1999-06-06', '1999', '06:06:06'),
- (4, '2001-01-01 10:11:11', '2001-01-01', '2001', '10:11:11'),
- (5, '2005-01-31 23:59:59', '2005-01-31', '2005', '23:59:59');
+ (2, '1912-09-05 13:00:59', '1912-09-05', '1912', '13:00:59'),
+ (3, '1945-12-31 00:00:00', '1945-12-31', '1945', '00:00:00'),
+ (4, '1955-12-31 00:00:00', '1955-12-31', '1955', '00:00:00'),
+ (5, '1963-06-06 06:06:06', '1963-06-06', '1963', '06:06:06'),
+ (6, '1993-06-06 06:06:06', '1993-06-06', '1993', '06:06:06'),
+ (7, '2001-01-01 10:11:10', '2001-01-01', '2001', '10:11:10'),
+ (8, '2001-01-01 10:11:11', '2001-01-01', '2001', '10:11:11'),
+ (9, '2005-01-31 23:59:59', '2005-01-31', '2005', '23:59:59');
# datetime
-select count(*) from t1 use index (dt) where dt > '1900-01-01 00:00:00';
-select count(*) from t1 use index (dt) where dt > '1955-12-31 00:00:00';
-select count(*) from t1 use index (dt) where dt < '2001-01-01 10:11:11';
-select count(*) from t1 use index (dt) where dt < '2001-01-01 10:11:12';
+select count(*)-9 from t1 use index (dt) where dt > '1900-01-01 00:00:00';
+select count(*)-6 from t1 use index (dt) where dt >= '1955-12-31 00:00:00';
+select count(*)-5 from t1 use index (dt) where dt > '1955-12-31 00:00:00';
+select count(*)-5 from t1 use index (dt) where dt < '1970-03-03 22:22:22';
+select count(*)-7 from t1 use index (dt) where dt < '2001-01-01 10:11:11';
+select count(*)-8 from t1 use index (dt) where dt <= '2001-01-01 10:11:11';
+select count(*)-9 from t1 use index (dt) where dt <= '2055-01-01 00:00:00';
+
+# date
+select count(*)-9 from t1 use index (da) where da > '1900-01-01';
+select count(*)-6 from t1 use index (da) where da >= '1955-12-31';
+select count(*)-5 from t1 use index (da) where da > '1955-12-31';
+select count(*)-5 from t1 use index (da) where da < '1970-03-03';
+select count(*)-6 from t1 use index (da) where da < '2001-01-01';
+select count(*)-8 from t1 use index (da) where da <= '2001-01-02';
+select count(*)-9 from t1 use index (da) where da <= '2055-01-01';
diff --git a/ndb/include/kernel/signaldata/DictTabInfo.hpp b/ndb/include/kernel/signaldata/DictTabInfo.hpp
index ae78c023c2a..392b691ae1e 100644
--- a/ndb/include/kernel/signaldata/DictTabInfo.hpp
+++ b/ndb/include/kernel/signaldata/DictTabInfo.hpp
@@ -308,7 +308,7 @@ public:
ExtBinary = NdbSqlUtil::Type::Binary,
ExtVarbinary = NdbSqlUtil::Type::Varbinary,
ExtDatetime = NdbSqlUtil::Type::Datetime,
- ExtTimespec = NdbSqlUtil::Type::Timespec,
+ ExtDate = NdbSqlUtil::Type::Date,
ExtBlob = NdbSqlUtil::Type::Blob,
ExtText = NdbSqlUtil::Type::Text
};
@@ -428,10 +428,10 @@ public:
AttributeSize = DictTabInfo::an8Bit;
AttributeArraySize = 8 * AttributeExtLength;
return true;
- case DictTabInfo::ExtTimespec:
+ case DictTabInfo::ExtDate:
AttributeType = DictTabInfo::StringType;
AttributeSize = DictTabInfo::an8Bit;
- AttributeArraySize = 12 * AttributeExtLength;
+ AttributeArraySize = 3 * AttributeExtLength;
return true;
case DictTabInfo::ExtBlob:
case DictTabInfo::ExtText:
diff --git a/ndb/include/ndbapi/NdbDictionary.hpp b/ndb/include/ndbapi/NdbDictionary.hpp
index f0c8a10f488..0ca3744a3d9 100644
--- a/ndb/include/ndbapi/NdbDictionary.hpp
+++ b/ndb/include/ndbapi/NdbDictionary.hpp
@@ -185,7 +185,7 @@ public:
Binary, ///< Len
Varbinary, ///< Max len
Datetime, ///< Precision down to 1 sec (sizeof(Datetime) == 8 bytes )
- Timespec, ///< Precision down to 1 nsec(sizeof(Datetime) == 12 bytes )
+ Date, ///< Precision down to 1 day(sizeof(Date) == 4 bytes )
Blob, ///< Binary large object (see NdbBlob)
Text ///< Text blob
};
diff --git a/ndb/include/util/NdbSqlUtil.hpp b/ndb/include/util/NdbSqlUtil.hpp
index 3062d1e4e1b..47bb2157e1a 100644
--- a/ndb/include/util/NdbSqlUtil.hpp
+++ b/ndb/include/util/NdbSqlUtil.hpp
@@ -81,7 +81,7 @@ public:
Binary, // Len
Varbinary, // Max len
Datetime, // Precision down to 1 sec (size 8 bytes)
- Timespec, // Precision down to 1 nsec (size 12 bytes)
+ Date, // Precision down to 1 day (size 4 bytes)
Blob, // Blob
Text // Text blob
};
@@ -132,7 +132,7 @@ private:
static Cmp cmpBinary;
static Cmp cmpVarbinary;
static Cmp cmpDatetime;
- static Cmp cmpTimespec;
+ static Cmp cmpDate;
static Cmp cmpBlob;
static Cmp cmpText;
};
diff --git a/ndb/src/common/util/NdbSqlUtil.cpp b/ndb/src/common/util/NdbSqlUtil.cpp
index 8491fa3c4a0..6f490c7f611 100644
--- a/ndb/src/common/util/NdbSqlUtil.cpp
+++ b/ndb/src/common/util/NdbSqlUtil.cpp
@@ -153,8 +153,8 @@ NdbSqlUtil::m_typeList[] = {
cmpDatetime
},
{
- Type::Timespec,
- cmpTimespec
+ Type::Date,
+ cmpDate
},
{
Type::Blob,
@@ -485,36 +485,34 @@ NdbSqlUtil::cmpDatetime(const void* info, const Uint32* p1, const Uint32* p2, Ui
}
int
-NdbSqlUtil::cmpTimespec(const void* info, const Uint32* p1, const Uint32* p2, Uint32 full, Uint32 size)
+NdbSqlUtil::cmpDate(const void* info, const Uint32* p1, const Uint32* p2, Uint32 full, Uint32 size)
{
+#ifdef ndb_date_is_4_byte_native_int
+ assert(full >= size && size > 0);
+ union { Uint32 p[2]; Int32 v; } u1, u2;
+ u1.p[0] = p1[0];
+ u2.p[0] = p2[0];
+ if (u1.v < u2.v)
+ return -1;
+ if (u1.v > u2.v)
+ return +1;
+ return 0;
+#else
assert(full >= size && size > 0);
- /*
- * Timespec is CC YY MM DD hh mm ss \0 NN NN NN NN
- *
- * Not used via MySQL.
- */
union { const Uint32* p; const unsigned char* v; } u1, u2;
u1.p = p1;
u2.p = p2;
- // no format check
- int k = memcmp(u1.v, u2.v, 4);
- if (k != 0)
- return k < 0 ? -1 : +1;
- if (size >= 2) {
- k = memcmp(u1.v + 4, u2.v + 4, 4);
- if (k != 0)
- return k < 0 ? -1 : +1;
- if (size >= 3) {
- Uint32 n1 = *(const Uint32*)(u1.v + 8);
- Uint32 n2 = *(const Uint32*)(u2.v + 8);
- if (n1 < n2)
- return -1;
- if (n2 > n1)
- return +1;
- return 0;
- }
- }
- return CmpUnknown;
+ // from Field_newdate::val_int
+ Uint64 j1 = uint3korr(u1.v);
+ Uint64 j2 = uint3korr(u2.v);
+ j1 = (j1 % 32L)+(j1 / 32L % 16L)*100L + (j1/(16L*32L))*10000L;
+ j2 = (j2 % 32L)+(j2 / 32L % 16L)*100L + (j2/(16L*32L))*10000L;
+ if (j1 < j2)
+ return -1;
+ if (j1 > j2)
+ return +1;
+ return 0;
+#endif
}
int
diff --git a/ndb/src/ndbapi/NdbDictionary.cpp b/ndb/src/ndbapi/NdbDictionary.cpp
index f88bbc907a6..b47f7d2c15c 100644
--- a/ndb/src/ndbapi/NdbDictionary.cpp
+++ b/ndb/src/ndbapi/NdbDictionary.cpp
@@ -936,8 +936,8 @@ operator<<(NdbOut& out, const NdbDictionary::Column& col)
case NdbDictionary::Column::Datetime:
out << "Datetime";
break;
- case NdbDictionary::Column::Timespec:
- out << "Timespec";
+ case NdbDictionary::Column::Date:
+ out << "Date";
break;
case NdbDictionary::Column::Blob:
out << "Blob(" << col.getInlineSize() << "," << col.getPartSize()
diff --git a/ndb/src/ndbapi/NdbDictionaryImpl.cpp b/ndb/src/ndbapi/NdbDictionaryImpl.cpp
index 7a293463c94..195fdce7e3f 100644
--- a/ndb/src/ndbapi/NdbDictionaryImpl.cpp
+++ b/ndb/src/ndbapi/NdbDictionaryImpl.cpp
@@ -130,7 +130,7 @@ NdbColumnImpl::init(Type t)
case Binary:
case Varbinary:
case Datetime:
- case Timespec:
+ case Date:
m_precision = 0;
m_scale = 0;
m_length = 1;
@@ -1174,7 +1174,7 @@ columnTypeMapping[] = {
{ DictTabInfo::ExtBinary, NdbDictionary::Column::Binary },
{ DictTabInfo::ExtVarbinary, NdbDictionary::Column::Varbinary },
{ DictTabInfo::ExtDatetime, NdbDictionary::Column::Datetime },
- { DictTabInfo::ExtTimespec, NdbDictionary::Column::Timespec },
+ { DictTabInfo::ExtDate, NdbDictionary::Column::Date },
{ DictTabInfo::ExtBlob, NdbDictionary::Column::Blob },
{ DictTabInfo::ExtText, NdbDictionary::Column::Text },
{ -1, -1 }
diff --git a/ndb/test/include/NdbSchemaOp.hpp b/ndb/test/include/NdbSchemaOp.hpp
index ac859f8abe8..b54c011ae8b 100644
--- a/ndb/test/include/NdbSchemaOp.hpp
+++ b/ndb/test/include/NdbSchemaOp.hpp
@@ -576,7 +576,7 @@ convertColumnTypeToAttrType(NdbDictionary::Column::Type _type)
case NdbDictionary::Column::Varbinary:
return String;
case NdbDictionary::Column::Datetime:
- case NdbDictionary::Column::Timespec:
+ case NdbDictionary::Column::Date:
case NdbDictionary::Column::Undefined:
default:
return NoAttrTypeDef;
diff --git a/ndb/tools/restore/consumer.cpp b/ndb/tools/restore/consumer.cpp
index e94c31b2666..dc0567803dd 100644
--- a/ndb/tools/restore/consumer.cpp
+++ b/ndb/tools/restore/consumer.cpp
@@ -71,8 +71,8 @@ BackupConsumer::create_table_string(const TableS & table,
case NdbDictionary::Column::Datetime:
pos += sprintf(buf+pos, "%s", "datetime");
break;
- case NdbDictionary::Column::Timespec:
- pos += sprintf(buf+pos, "%s", "time");
+ case NdbDictionary::Column::Date:
+ pos += sprintf(buf+pos, "%s", "date");
break;
case NdbDictionary::Column::Undefined:
// pos += sprintf(buf+pos, "%s", "varchar binary");
diff --git a/sql/ha_ndbcluster.cc b/sql/ha_ndbcluster.cc
index 3c6cd83d5dc..e181b421e29 100644
--- a/sql/ha_ndbcluster.cc
+++ b/sql/ha_ndbcluster.cc
@@ -2259,9 +2259,9 @@ void ha_ndbcluster::print_results()
fprintf(DBUG_FILE, "Datetime\t%llu", value);
break;
}
- case NdbDictionary::Column::Timespec: {
+ case NdbDictionary::Column::Date: {
Uint64 value= (Uint64) *field->ptr;
- fprintf(DBUG_FILE, "Timespec\t%llu", value);
+ fprintf(DBUG_FILE, "Date\t%llu", value);
break;
}
case NdbDictionary::Column::Blob: {
@@ -3323,8 +3323,11 @@ static int create_ndb_column(NDBCOL &col,
col.setType(NDBCOL::Datetime);
col.setLength(1);
break;
- case MYSQL_TYPE_DATE:
case MYSQL_TYPE_NEWDATE:
+ col.setType(NDBCOL::Date);
+ col.setLength(1);
+ break;
+ case MYSQL_TYPE_DATE: // ?
case MYSQL_TYPE_TIME:
case MYSQL_TYPE_YEAR:
col.setType(NDBCOL::Char);