Skip to content
Permalink
Browse files
MDEV-19906 Port show_old_temporals from MySQL 5.6
Old temporal data types (created with a pre-10.0 version of MariaDB)
are now displayed with a /* mariadb-5.3 */ comment in:

- SHOW CREATE TABLE
- DESCRIBE
- INFORMATION_SCHEMA.COLUMNS.COLUMN_TYPE

For example:

CREATE TABLE `t1` (
  `t0` datetime /* mariadb-5.3 */ DEFAULT NULL,
  `t6` datetime(6) /* mariadb-5.3 */ DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1

Note, new temporal data types are displayed without a format comment.
  • Loading branch information
abarkov committed Jan 17, 2020
1 parent e7558d4 commit 6f65931
Show file tree
Hide file tree
Showing 10 changed files with 376 additions and 53 deletions.
@@ -0,0 +1,237 @@
#
# MDEV-19906 Port show_old_temporals from MySQL 5.6
#
TRUNCATE TABLE mariadb5312_datetime;
SHOW CREATE TABLE mariadb5312_datetime;
Table Create Table
mariadb5312_datetime CREATE TABLE `mariadb5312_datetime` (
`t0` datetime /* mariadb-5.3 */ DEFAULT NULL,
`t1` datetime(1) /* mariadb-5.3 */ DEFAULT NULL,
`t2` datetime(2) /* mariadb-5.3 */ DEFAULT NULL,
`t3` datetime(3) /* mariadb-5.3 */ DEFAULT NULL,
`t4` datetime(4) /* mariadb-5.3 */ DEFAULT NULL,
`t5` datetime(5) /* mariadb-5.3 */ DEFAULT NULL,
`t6` datetime(6) /* mariadb-5.3 */ DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1
SELECT COLUMN_NAME, DATA_TYPE, COLUMN_TYPE FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME='mariadb5312_datetime';
COLUMN_NAME t0
DATA_TYPE datetime
COLUMN_TYPE datetime /* mariadb-5.3 */
COLUMN_NAME t1
DATA_TYPE datetime
COLUMN_TYPE datetime(1) /* mariadb-5.3 */
COLUMN_NAME t2
DATA_TYPE datetime
COLUMN_TYPE datetime(2) /* mariadb-5.3 */
COLUMN_NAME t3
DATA_TYPE datetime
COLUMN_TYPE datetime(3) /* mariadb-5.3 */
COLUMN_NAME t4
DATA_TYPE datetime
COLUMN_TYPE datetime(4) /* mariadb-5.3 */
COLUMN_NAME t5
DATA_TYPE datetime
COLUMN_TYPE datetime(5) /* mariadb-5.3 */
COLUMN_NAME t6
DATA_TYPE datetime
COLUMN_TYPE datetime(6) /* mariadb-5.3 */
DESCRIBE mariadb5312_datetime;
Field t0
Type datetime /* mariadb-5.3 */
Null YES
Key
Default NULL
Extra
Field t1
Type datetime(1) /* mariadb-5.3 */
Null YES
Key
Default NULL
Extra
Field t2
Type datetime(2) /* mariadb-5.3 */
Null YES
Key
Default NULL
Extra
Field t3
Type datetime(3) /* mariadb-5.3 */
Null YES
Key
Default NULL
Extra
Field t4
Type datetime(4) /* mariadb-5.3 */
Null YES
Key
Default NULL
Extra
Field t5
Type datetime(5) /* mariadb-5.3 */
Null YES
Key
Default NULL
Extra
Field t6
Type datetime(6) /* mariadb-5.3 */
Null YES
Key
Default NULL
Extra
DROP TABLE mariadb5312_datetime;
TRUNCATE TABLE mariadb5312_timestamp;
SHOW CREATE TABLE mariadb5312_timestamp;
Table Create Table
mariadb5312_timestamp CREATE TABLE `mariadb5312_timestamp` (
`t0` timestamp /* mariadb-5.3 */ NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
`t1` timestamp(1) /* mariadb-5.3 */ NOT NULL DEFAULT '0000-00-00 00:00:00.0',
`t2` timestamp(2) /* mariadb-5.3 */ NOT NULL DEFAULT '0000-00-00 00:00:00.00',
`t3` timestamp(3) /* mariadb-5.3 */ NOT NULL DEFAULT '0000-00-00 00:00:00.000',
`t4` timestamp(4) /* mariadb-5.3 */ NOT NULL DEFAULT '0000-00-00 00:00:00.0000',
`t5` timestamp(5) /* mariadb-5.3 */ NOT NULL DEFAULT '0000-00-00 00:00:00.00000',
`t6` timestamp(6) /* mariadb-5.3 */ NOT NULL DEFAULT '0000-00-00 00:00:00.000000'
) ENGINE=MyISAM DEFAULT CHARSET=latin1
SELECT COLUMN_NAME, DATA_TYPE, COLUMN_TYPE FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME='mariadb5312_timestamp';
COLUMN_NAME t0
DATA_TYPE timestamp
COLUMN_TYPE timestamp /* mariadb-5.3 */
COLUMN_NAME t1
DATA_TYPE timestamp
COLUMN_TYPE timestamp(1) /* mariadb-5.3 */
COLUMN_NAME t2
DATA_TYPE timestamp
COLUMN_TYPE timestamp(2) /* mariadb-5.3 */
COLUMN_NAME t3
DATA_TYPE timestamp
COLUMN_TYPE timestamp(3) /* mariadb-5.3 */
COLUMN_NAME t4
DATA_TYPE timestamp
COLUMN_TYPE timestamp(4) /* mariadb-5.3 */
COLUMN_NAME t5
DATA_TYPE timestamp
COLUMN_TYPE timestamp(5) /* mariadb-5.3 */
COLUMN_NAME t6
DATA_TYPE timestamp
COLUMN_TYPE timestamp(6) /* mariadb-5.3 */
DESCRIBE mariadb5312_timestamp;
Field t0
Type timestamp /* mariadb-5.3 */
Null NO
Key
Default current_timestamp()
Extra on update current_timestamp()
Field t1
Type timestamp(1) /* mariadb-5.3 */
Null NO
Key
Default 0000-00-00 00:00:00.0
Extra
Field t2
Type timestamp(2) /* mariadb-5.3 */
Null NO
Key
Default 0000-00-00 00:00:00.00
Extra
Field t3
Type timestamp(3) /* mariadb-5.3 */
Null NO
Key
Default 0000-00-00 00:00:00.000
Extra
Field t4
Type timestamp(4) /* mariadb-5.3 */
Null NO
Key
Default 0000-00-00 00:00:00.0000
Extra
Field t5
Type timestamp(5) /* mariadb-5.3 */
Null NO
Key
Default 0000-00-00 00:00:00.00000
Extra
Field t6
Type timestamp(6) /* mariadb-5.3 */
Null NO
Key
Default 0000-00-00 00:00:00.000000
Extra
DROP TABLE mariadb5312_timestamp;
TRUNCATE TABLE mariadb5312_time;
SHOW CREATE TABLE mariadb5312_time;
Table Create Table
mariadb5312_time CREATE TABLE `mariadb5312_time` (
`t0` time /* mariadb-5.3 */ DEFAULT NULL,
`t1` time(1) /* mariadb-5.3 */ DEFAULT NULL,
`t2` time(2) /* mariadb-5.3 */ DEFAULT NULL,
`t3` time(3) /* mariadb-5.3 */ DEFAULT NULL,
`t4` time(4) /* mariadb-5.3 */ DEFAULT NULL,
`t5` time(5) /* mariadb-5.3 */ DEFAULT NULL,
`t6` time(6) /* mariadb-5.3 */ DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1
SELECT COLUMN_NAME, DATA_TYPE, COLUMN_TYPE FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME='mariadb5312_time';
COLUMN_NAME t0
DATA_TYPE time
COLUMN_TYPE time /* mariadb-5.3 */
COLUMN_NAME t1
DATA_TYPE time
COLUMN_TYPE time(1) /* mariadb-5.3 */
COLUMN_NAME t2
DATA_TYPE time
COLUMN_TYPE time(2) /* mariadb-5.3 */
COLUMN_NAME t3
DATA_TYPE time
COLUMN_TYPE time(3) /* mariadb-5.3 */
COLUMN_NAME t4
DATA_TYPE time
COLUMN_TYPE time(4) /* mariadb-5.3 */
COLUMN_NAME t5
DATA_TYPE time
COLUMN_TYPE time(5) /* mariadb-5.3 */
COLUMN_NAME t6
DATA_TYPE time
COLUMN_TYPE time(6) /* mariadb-5.3 */
DESCRIBE mariadb5312_time;
Field t0
Type time /* mariadb-5.3 */
Null YES
Key
Default NULL
Extra
Field t1
Type time(1) /* mariadb-5.3 */
Null YES
Key
Default NULL
Extra
Field t2
Type time(2) /* mariadb-5.3 */
Null YES
Key
Default NULL
Extra
Field t3
Type time(3) /* mariadb-5.3 */
Null YES
Key
Default NULL
Extra
Field t4
Type time(4) /* mariadb-5.3 */
Null YES
Key
Default NULL
Extra
Field t5
Type time(5) /* mariadb-5.3 */
Null YES
Key
Default NULL
Extra
Field t6
Type time(6) /* mariadb-5.3 */
Null YES
Key
Default NULL
Extra
DROP TABLE mariadb5312_time;
@@ -0,0 +1,32 @@
--let $MYSQLD_DATADIR= `select @@datadir`

--echo #
--echo # MDEV-19906 Port show_old_temporals from MySQL 5.6
--echo #

--copy_file $MYSQL_TEST_DIR/std_data/mariadb53_temporal/mariadb5312_datetime.frm $MYSQLD_DATADIR/test/mariadb5312_datetime.frm
TRUNCATE TABLE mariadb5312_datetime;
SHOW CREATE TABLE mariadb5312_datetime;
--vertical_results
SELECT COLUMN_NAME, DATA_TYPE, COLUMN_TYPE FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME='mariadb5312_datetime';
DESCRIBE mariadb5312_datetime;
--horizontal_results
DROP TABLE mariadb5312_datetime;

--copy_file $MYSQL_TEST_DIR/std_data/mariadb53_temporal/mariadb5312_timestamp.frm $MYSQLD_DATADIR/test/mariadb5312_timestamp.frm
TRUNCATE TABLE mariadb5312_timestamp;
SHOW CREATE TABLE mariadb5312_timestamp;
--vertical_results
SELECT COLUMN_NAME, DATA_TYPE, COLUMN_TYPE FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME='mariadb5312_timestamp';
DESCRIBE mariadb5312_timestamp;
--horizontal_results
DROP TABLE mariadb5312_timestamp;

--copy_file $MYSQL_TEST_DIR/std_data/mariadb53_temporal/mariadb5312_time.frm $MYSQLD_DATADIR/test/mariadb5312_time.frm
TRUNCATE TABLE mariadb5312_time;
SHOW CREATE TABLE mariadb5312_time;
--vertical_results
SELECT COLUMN_NAME, DATA_TYPE, COLUMN_TYPE FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME='mariadb5312_time';
DESCRIBE mariadb5312_time;
--horizontal_results
DROP TABLE mariadb5312_time;
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -5329,19 +5329,6 @@ void Field_timestamp0::sort_string(uchar *to,uint length __attribute__((unused))
}


void Field_timestamp::sql_type(String &res) const
{
if (!decimals())
{
res.set_ascii(STRING_WITH_LEN("timestamp"));
return;
}
CHARSET_INFO *cs=res.charset();
res.length(cs->cset->snprintf(cs, (char*) res.ptr(), res.alloced_length(),
"timestamp(%u)", decimals()));
}


int Field_timestamp0::set_time()
{
set_notnull();
@@ -5621,6 +5608,44 @@ void Field_temporal::set_warnings(Sql_condition::enum_warning_level trunc_level,
}


void Field_temporal::sql_type_dec_comment(String &res,
const Name &name,
uint dec,
const Name &comment) const
{
CHARSET_INFO *cs=res.charset();
res.length(cs->cset->snprintf(cs, (char*) res.ptr(), res.alloced_length(),
"%.*s(%u)%s%.*s%s",
(uint) name.length(), name.ptr(),
dec,
comment.length() ? " /* " : "",
(uint) comment.length(), comment.ptr(),
comment.length() ? " */" : ""));
}


void Field_temporal::sql_type_comment(String &res,
const Name &name,
const Name &comment) const
{
CHARSET_INFO *cs=res.charset();
res.length(cs->cset->snprintf(cs, (char*) res.ptr(), res.alloced_length(),
"%.*s%s%.*s%s",
(uint) name.length(), name.ptr(),
comment.length() ? " /* " : "",
(uint) comment.length(), comment.ptr(),
comment.length() ? " */" : ""));
}


const Name & Field_temporal::type_version_mysql56()
{
DBUG_EXECUTE_IF("sql_type", return Type_handler::version_mysql56(); );
static Name none(NULL, 0);
return none;
}


/*
Store string into a date/time field
@@ -5991,17 +6016,6 @@ void Field_time0::sort_string(uchar *to,uint length __attribute__((unused)))
to[2] = ptr[0];
}

void Field_time::sql_type(String &res) const
{
if (decimals() == 0)
{
res.set_ascii(STRING_WITH_LEN("time"));
return;
}
CHARSET_INFO *cs= res.charset();
res.length(cs->cset->snprintf(cs, (char*) res.ptr(), res.alloced_length(),
"time(%d)", decimals()));
}

int Field_time_hires::reset()
{
@@ -6811,19 +6825,6 @@ void Field_datetime0::sort_string(uchar *to,uint length __attribute__((unused)))
}


void Field_datetime::sql_type(String &res) const
{
if (decimals() == 0)
{
res.set_ascii(STRING_WITH_LEN("datetime"));
return;
}
CHARSET_INFO *cs= res.charset();
res.length(cs->cset->snprintf(cs, (char*) res.ptr(), res.alloced_length(),
"datetime(%u)", decimals()));
}


int Field_datetime::set_time()
{
THD *thd= table->in_use;

0 comments on commit 6f65931

Please sign in to comment.