mirror of
https://github.com/MariaDB/server.git
synced 2025-08-01 03:47:19 +03:00
ndb - wl-1442 fix Date ordering
mysql-test/r/ndb_index_ordered.result: wl-1442 fix Date. reuses old unused Timespec type id mysql-test/t/ndb_index_ordered.test: wl-1442 fix Date. reuses old unused Timespec type id ndb/include/kernel/signaldata/DictTabInfo.hpp: wl-1442 fix Date. reuses old unused Timespec type id ndb/include/ndbapi/NdbDictionary.hpp: wl-1442 fix Date. reuses old unused Timespec type id ndb/include/util/NdbSqlUtil.hpp: wl-1442 fix Date. reuses old unused Timespec type id ndb/src/common/util/NdbSqlUtil.cpp: wl-1442 fix Date. reuses old unused Timespec type id ndb/src/ndbapi/NdbDictionary.cpp: wl-1442 fix Date. reuses old unused Timespec type id ndb/src/ndbapi/NdbDictionaryImpl.cpp: wl-1442 fix Date. reuses old unused Timespec type id ndb/test/include/NdbSchemaOp.hpp: wl-1442 fix Date. reuses old unused Timespec type id ndb/tools/restore/consumer.cpp: wl-1442 fix Date. reuses old unused Timespec type id sql/ha_ndbcluster.cc: wl-1442 fix Date. reuses old unused Timespec type id
This commit is contained in:
@ -325,19 +325,53 @@ index(ts)
|
|||||||
) engine=ndb;
|
) engine=ndb;
|
||||||
insert into t1 (pk,dt,da,ye,ti) values
|
insert into t1 (pk,dt,da,ye,ti) 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'),
|
||||||
(2, '1955-12-31 00:00:00', '1955-12-31', '1955', '00:00:00'),
|
(2, '1912-09-05 13:00:59', '1912-09-05', '1912', '13:00:59'),
|
||||||
(3, '1999-06-06 06:06:06', '1999-06-06', '1999', '06:06:06'),
|
(3, '1945-12-31 00:00:00', '1945-12-31', '1945', '00:00:00'),
|
||||||
(4, '2001-01-01 10:11:11', '2001-01-01', '2001', '10:11:11'),
|
(4, '1955-12-31 00:00:00', '1955-12-31', '1955', '00:00:00'),
|
||||||
(5, '2005-01-31 23:59:59', '2005-01-31', '2005', '23:59:59');
|
(5, '1963-06-06 06:06:06', '1963-06-06', '1963', '06:06:06'),
|
||||||
select count(*) from t1 use index (dt) where dt > '1900-01-01 00:00:00';
|
(6, '1993-06-06 06:06:06', '1993-06-06', '1993', '06:06:06'),
|
||||||
count(*)
|
(7, '2001-01-01 10:11:10', '2001-01-01', '2001', '10:11:10'),
|
||||||
5
|
(8, '2001-01-01 10:11:11', '2001-01-01', '2001', '10:11:11'),
|
||||||
select count(*) from t1 use index (dt) where dt > '1955-12-31 00:00:00';
|
(9, '2005-01-31 23:59:59', '2005-01-31', '2005', '23:59:59');
|
||||||
count(*)
|
select count(*)-9 from t1 use index (dt) where dt > '1900-01-01 00:00:00';
|
||||||
3
|
count(*)-9
|
||||||
select count(*) from t1 use index (dt) where dt < '2001-01-01 10:11:11';
|
0
|
||||||
count(*)
|
select count(*)-6 from t1 use index (dt) where dt >= '1955-12-31 00:00:00';
|
||||||
3
|
count(*)-6
|
||||||
select count(*) from t1 use index (dt) where dt < '2001-01-01 10:11:12';
|
0
|
||||||
count(*)
|
select count(*)-5 from t1 use index (dt) where dt > '1955-12-31 00:00:00';
|
||||||
4
|
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
|
||||||
|
@ -191,13 +191,29 @@ create table t1 (
|
|||||||
|
|
||||||
insert into t1 (pk,dt,da,ye,ti) values
|
insert into t1 (pk,dt,da,ye,ti) 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'),
|
||||||
(2, '1955-12-31 00:00:00', '1955-12-31', '1955', '00:00:00'),
|
(2, '1912-09-05 13:00:59', '1912-09-05', '1912', '13:00:59'),
|
||||||
(3, '1999-06-06 06:06:06', '1999-06-06', '1999', '06:06:06'),
|
(3, '1945-12-31 00:00:00', '1945-12-31', '1945', '00:00:00'),
|
||||||
(4, '2001-01-01 10:11:11', '2001-01-01', '2001', '10:11:11'),
|
(4, '1955-12-31 00:00:00', '1955-12-31', '1955', '00:00:00'),
|
||||||
(5, '2005-01-31 23:59:59', '2005-01-31', '2005', '23:59:59');
|
(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
|
# datetime
|
||||||
select count(*) 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';
|
||||||
select count(*) from t1 use index (dt) where dt > '1955-12-31 00:00:00';
|
select count(*)-6 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(*)-5 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:12';
|
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';
|
||||||
|
@ -308,7 +308,7 @@ public:
|
|||||||
ExtBinary = NdbSqlUtil::Type::Binary,
|
ExtBinary = NdbSqlUtil::Type::Binary,
|
||||||
ExtVarbinary = NdbSqlUtil::Type::Varbinary,
|
ExtVarbinary = NdbSqlUtil::Type::Varbinary,
|
||||||
ExtDatetime = NdbSqlUtil::Type::Datetime,
|
ExtDatetime = NdbSqlUtil::Type::Datetime,
|
||||||
ExtTimespec = NdbSqlUtil::Type::Timespec,
|
ExtDate = NdbSqlUtil::Type::Date,
|
||||||
ExtBlob = NdbSqlUtil::Type::Blob,
|
ExtBlob = NdbSqlUtil::Type::Blob,
|
||||||
ExtText = NdbSqlUtil::Type::Text
|
ExtText = NdbSqlUtil::Type::Text
|
||||||
};
|
};
|
||||||
@ -428,10 +428,10 @@ public:
|
|||||||
AttributeSize = DictTabInfo::an8Bit;
|
AttributeSize = DictTabInfo::an8Bit;
|
||||||
AttributeArraySize = 8 * AttributeExtLength;
|
AttributeArraySize = 8 * AttributeExtLength;
|
||||||
return true;
|
return true;
|
||||||
case DictTabInfo::ExtTimespec:
|
case DictTabInfo::ExtDate:
|
||||||
AttributeType = DictTabInfo::StringType;
|
AttributeType = DictTabInfo::StringType;
|
||||||
AttributeSize = DictTabInfo::an8Bit;
|
AttributeSize = DictTabInfo::an8Bit;
|
||||||
AttributeArraySize = 12 * AttributeExtLength;
|
AttributeArraySize = 3 * AttributeExtLength;
|
||||||
return true;
|
return true;
|
||||||
case DictTabInfo::ExtBlob:
|
case DictTabInfo::ExtBlob:
|
||||||
case DictTabInfo::ExtText:
|
case DictTabInfo::ExtText:
|
||||||
|
@ -185,7 +185,7 @@ public:
|
|||||||
Binary, ///< Len
|
Binary, ///< Len
|
||||||
Varbinary, ///< Max len
|
Varbinary, ///< Max len
|
||||||
Datetime, ///< Precision down to 1 sec (sizeof(Datetime) == 8 bytes )
|
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)
|
Blob, ///< Binary large object (see NdbBlob)
|
||||||
Text ///< Text blob
|
Text ///< Text blob
|
||||||
};
|
};
|
||||||
|
@ -81,7 +81,7 @@ public:
|
|||||||
Binary, // Len
|
Binary, // Len
|
||||||
Varbinary, // Max len
|
Varbinary, // Max len
|
||||||
Datetime, // Precision down to 1 sec (size 8 bytes)
|
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
|
Blob, // Blob
|
||||||
Text // Text blob
|
Text // Text blob
|
||||||
};
|
};
|
||||||
@ -132,7 +132,7 @@ private:
|
|||||||
static Cmp cmpBinary;
|
static Cmp cmpBinary;
|
||||||
static Cmp cmpVarbinary;
|
static Cmp cmpVarbinary;
|
||||||
static Cmp cmpDatetime;
|
static Cmp cmpDatetime;
|
||||||
static Cmp cmpTimespec;
|
static Cmp cmpDate;
|
||||||
static Cmp cmpBlob;
|
static Cmp cmpBlob;
|
||||||
static Cmp cmpText;
|
static Cmp cmpText;
|
||||||
};
|
};
|
||||||
|
@ -153,8 +153,8 @@ NdbSqlUtil::m_typeList[] = {
|
|||||||
cmpDatetime
|
cmpDatetime
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
Type::Timespec,
|
Type::Date,
|
||||||
cmpTimespec
|
cmpDate
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
Type::Blob,
|
Type::Blob,
|
||||||
@ -485,36 +485,34 @@ NdbSqlUtil::cmpDatetime(const void* info, const Uint32* p1, const Uint32* p2, Ui
|
|||||||
}
|
}
|
||||||
|
|
||||||
int
|
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);
|
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;
|
union { const Uint32* p; const unsigned char* v; } u1, u2;
|
||||||
u1.p = p1;
|
u1.p = p1;
|
||||||
u2.p = p2;
|
u2.p = p2;
|
||||||
// no format check
|
// from Field_newdate::val_int
|
||||||
int k = memcmp(u1.v, u2.v, 4);
|
Uint64 j1 = uint3korr(u1.v);
|
||||||
if (k != 0)
|
Uint64 j2 = uint3korr(u2.v);
|
||||||
return k < 0 ? -1 : +1;
|
j1 = (j1 % 32L)+(j1 / 32L % 16L)*100L + (j1/(16L*32L))*10000L;
|
||||||
if (size >= 2) {
|
j2 = (j2 % 32L)+(j2 / 32L % 16L)*100L + (j2/(16L*32L))*10000L;
|
||||||
k = memcmp(u1.v + 4, u2.v + 4, 4);
|
if (j1 < j2)
|
||||||
if (k != 0)
|
return -1;
|
||||||
return k < 0 ? -1 : +1;
|
if (j1 > j2)
|
||||||
if (size >= 3) {
|
return +1;
|
||||||
Uint32 n1 = *(const Uint32*)(u1.v + 8);
|
return 0;
|
||||||
Uint32 n2 = *(const Uint32*)(u2.v + 8);
|
#endif
|
||||||
if (n1 < n2)
|
|
||||||
return -1;
|
|
||||||
if (n2 > n1)
|
|
||||||
return +1;
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return CmpUnknown;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
|
@ -936,8 +936,8 @@ operator<<(NdbOut& out, const NdbDictionary::Column& col)
|
|||||||
case NdbDictionary::Column::Datetime:
|
case NdbDictionary::Column::Datetime:
|
||||||
out << "Datetime";
|
out << "Datetime";
|
||||||
break;
|
break;
|
||||||
case NdbDictionary::Column::Timespec:
|
case NdbDictionary::Column::Date:
|
||||||
out << "Timespec";
|
out << "Date";
|
||||||
break;
|
break;
|
||||||
case NdbDictionary::Column::Blob:
|
case NdbDictionary::Column::Blob:
|
||||||
out << "Blob(" << col.getInlineSize() << "," << col.getPartSize()
|
out << "Blob(" << col.getInlineSize() << "," << col.getPartSize()
|
||||||
|
@ -130,7 +130,7 @@ NdbColumnImpl::init(Type t)
|
|||||||
case Binary:
|
case Binary:
|
||||||
case Varbinary:
|
case Varbinary:
|
||||||
case Datetime:
|
case Datetime:
|
||||||
case Timespec:
|
case Date:
|
||||||
m_precision = 0;
|
m_precision = 0;
|
||||||
m_scale = 0;
|
m_scale = 0;
|
||||||
m_length = 1;
|
m_length = 1;
|
||||||
@ -1174,7 +1174,7 @@ columnTypeMapping[] = {
|
|||||||
{ DictTabInfo::ExtBinary, NdbDictionary::Column::Binary },
|
{ DictTabInfo::ExtBinary, NdbDictionary::Column::Binary },
|
||||||
{ DictTabInfo::ExtVarbinary, NdbDictionary::Column::Varbinary },
|
{ DictTabInfo::ExtVarbinary, NdbDictionary::Column::Varbinary },
|
||||||
{ DictTabInfo::ExtDatetime, NdbDictionary::Column::Datetime },
|
{ DictTabInfo::ExtDatetime, NdbDictionary::Column::Datetime },
|
||||||
{ DictTabInfo::ExtTimespec, NdbDictionary::Column::Timespec },
|
{ DictTabInfo::ExtDate, NdbDictionary::Column::Date },
|
||||||
{ DictTabInfo::ExtBlob, NdbDictionary::Column::Blob },
|
{ DictTabInfo::ExtBlob, NdbDictionary::Column::Blob },
|
||||||
{ DictTabInfo::ExtText, NdbDictionary::Column::Text },
|
{ DictTabInfo::ExtText, NdbDictionary::Column::Text },
|
||||||
{ -1, -1 }
|
{ -1, -1 }
|
||||||
|
@ -576,7 +576,7 @@ convertColumnTypeToAttrType(NdbDictionary::Column::Type _type)
|
|||||||
case NdbDictionary::Column::Varbinary:
|
case NdbDictionary::Column::Varbinary:
|
||||||
return String;
|
return String;
|
||||||
case NdbDictionary::Column::Datetime:
|
case NdbDictionary::Column::Datetime:
|
||||||
case NdbDictionary::Column::Timespec:
|
case NdbDictionary::Column::Date:
|
||||||
case NdbDictionary::Column::Undefined:
|
case NdbDictionary::Column::Undefined:
|
||||||
default:
|
default:
|
||||||
return NoAttrTypeDef;
|
return NoAttrTypeDef;
|
||||||
|
@ -71,8 +71,8 @@ BackupConsumer::create_table_string(const TableS & table,
|
|||||||
case NdbDictionary::Column::Datetime:
|
case NdbDictionary::Column::Datetime:
|
||||||
pos += sprintf(buf+pos, "%s", "datetime");
|
pos += sprintf(buf+pos, "%s", "datetime");
|
||||||
break;
|
break;
|
||||||
case NdbDictionary::Column::Timespec:
|
case NdbDictionary::Column::Date:
|
||||||
pos += sprintf(buf+pos, "%s", "time");
|
pos += sprintf(buf+pos, "%s", "date");
|
||||||
break;
|
break;
|
||||||
case NdbDictionary::Column::Undefined:
|
case NdbDictionary::Column::Undefined:
|
||||||
// pos += sprintf(buf+pos, "%s", "varchar binary");
|
// pos += sprintf(buf+pos, "%s", "varchar binary");
|
||||||
|
@ -2259,9 +2259,9 @@ void ha_ndbcluster::print_results()
|
|||||||
fprintf(DBUG_FILE, "Datetime\t%llu", value);
|
fprintf(DBUG_FILE, "Datetime\t%llu", value);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case NdbDictionary::Column::Timespec: {
|
case NdbDictionary::Column::Date: {
|
||||||
Uint64 value= (Uint64) *field->ptr;
|
Uint64 value= (Uint64) *field->ptr;
|
||||||
fprintf(DBUG_FILE, "Timespec\t%llu", value);
|
fprintf(DBUG_FILE, "Date\t%llu", value);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case NdbDictionary::Column::Blob: {
|
case NdbDictionary::Column::Blob: {
|
||||||
@ -3323,8 +3323,11 @@ static int create_ndb_column(NDBCOL &col,
|
|||||||
col.setType(NDBCOL::Datetime);
|
col.setType(NDBCOL::Datetime);
|
||||||
col.setLength(1);
|
col.setLength(1);
|
||||||
break;
|
break;
|
||||||
case MYSQL_TYPE_DATE:
|
|
||||||
case MYSQL_TYPE_NEWDATE:
|
case MYSQL_TYPE_NEWDATE:
|
||||||
|
col.setType(NDBCOL::Date);
|
||||||
|
col.setLength(1);
|
||||||
|
break;
|
||||||
|
case MYSQL_TYPE_DATE: // ?
|
||||||
case MYSQL_TYPE_TIME:
|
case MYSQL_TYPE_TIME:
|
||||||
case MYSQL_TYPE_YEAR:
|
case MYSQL_TYPE_YEAR:
|
||||||
col.setType(NDBCOL::Char);
|
col.setType(NDBCOL::Char);
|
||||||
|
Reference in New Issue
Block a user