mirror of
https://github.com/MariaDB/server.git
synced 2025-07-29 05:21:33 +03:00
bugfix: engine defined table options were not showing up in INFORMATION_SCHEMA.TABLES.CREATE_OPTIONS
This commit is contained in:
@ -111,6 +111,9 @@ Table Create Table
|
|||||||
t1 CREATE TABLE `t1` (
|
t1 CREATE TABLE `t1` (
|
||||||
`a` int(11) DEFAULT NULL
|
`a` int(11) DEFAULT NULL
|
||||||
) ENGINE=EXAMPLE DEFAULT CHARSET=latin1 `ULL`=4660
|
) ENGINE=EXAMPLE DEFAULT CHARSET=latin1 `ULL`=4660
|
||||||
|
select create_options from information_schema.tables where table_schema='test' and table_name='t1';
|
||||||
|
create_options
|
||||||
|
`ULL`=4660
|
||||||
ALTER TABLE t1 ULL=DEFAULT;
|
ALTER TABLE t1 ULL=DEFAULT;
|
||||||
SHOW CREATE TABLE t1;
|
SHOW CREATE TABLE t1;
|
||||||
Table Create Table
|
Table Create Table
|
||||||
|
@ -120,6 +120,8 @@ CREATE TABLE t1 (a int) ENGINE=example ULL=1e2;
|
|||||||
CREATE TABLE t1 (a int) ENGINE=example ULL=0x1234;
|
CREATE TABLE t1 (a int) ENGINE=example ULL=0x1234;
|
||||||
SHOW CREATE TABLE t1;
|
SHOW CREATE TABLE t1;
|
||||||
|
|
||||||
|
select create_options from information_schema.tables where table_schema='test' and table_name='t1';
|
||||||
|
|
||||||
ALTER TABLE t1 ULL=DEFAULT;
|
ALTER TABLE t1 ULL=DEFAULT;
|
||||||
SHOW CREATE TABLE t1;
|
SHOW CREATE TABLE t1;
|
||||||
|
|
||||||
|
@ -4103,6 +4103,7 @@ static int get_schema_tables_record(THD *thd, TABLE_LIST *tables,
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
char option_buff[350],*ptr;
|
char option_buff[350],*ptr;
|
||||||
|
String str(option_buff,sizeof(option_buff), system_charset_info);
|
||||||
TABLE *show_table= tables->table;
|
TABLE *show_table= tables->table;
|
||||||
TABLE_SHARE *share= show_table->s;
|
TABLE_SHARE *share= show_table->s;
|
||||||
handler *file= show_table->file;
|
handler *file= show_table->file;
|
||||||
@ -4135,53 +4136,56 @@ static int get_schema_tables_record(THD *thd, TABLE_LIST *tables,
|
|||||||
table->field[4]->store(tmp_buff, strlen(tmp_buff), cs);
|
table->field[4]->store(tmp_buff, strlen(tmp_buff), cs);
|
||||||
table->field[5]->store((longlong) share->frm_version, TRUE);
|
table->field[5]->store((longlong) share->frm_version, TRUE);
|
||||||
|
|
||||||
ptr=option_buff;
|
str.length(0);
|
||||||
if (share->min_rows)
|
if (share->min_rows)
|
||||||
{
|
{
|
||||||
ptr=strmov(ptr," min_rows=");
|
str.qs_append(STRING_WITH_LEN(" min_rows="));
|
||||||
ptr=longlong10_to_str(share->min_rows,ptr,10);
|
str.qs_append(share->min_rows);
|
||||||
}
|
}
|
||||||
if (share->max_rows)
|
if (share->max_rows)
|
||||||
{
|
{
|
||||||
ptr=strmov(ptr," max_rows=");
|
str.qs_append(STRING_WITH_LEN(" max_rows="));
|
||||||
ptr=longlong10_to_str(share->max_rows,ptr,10);
|
str.qs_append(share->max_rows);
|
||||||
}
|
}
|
||||||
if (share->avg_row_length)
|
if (share->avg_row_length)
|
||||||
{
|
{
|
||||||
ptr=strmov(ptr," avg_row_length=");
|
str.qs_append(STRING_WITH_LEN(" avg_row_length="));
|
||||||
ptr=longlong10_to_str(share->avg_row_length,ptr,10);
|
str.qs_append(share->avg_row_length);
|
||||||
}
|
}
|
||||||
if (share->db_create_options & HA_OPTION_PACK_KEYS)
|
if (share->db_create_options & HA_OPTION_PACK_KEYS)
|
||||||
ptr=strmov(ptr," pack_keys=1");
|
str.qs_append(STRING_WITH_LEN(" pack_keys=1"));
|
||||||
if (share->db_create_options & HA_OPTION_NO_PACK_KEYS)
|
if (share->db_create_options & HA_OPTION_NO_PACK_KEYS)
|
||||||
ptr=strmov(ptr," pack_keys=0");
|
str.qs_append(STRING_WITH_LEN(" pack_keys=0"));
|
||||||
/* We use CHECKSUM, instead of TABLE_CHECKSUM, for backward compability */
|
/* We use CHECKSUM, instead of TABLE_CHECKSUM, for backward compability */
|
||||||
if (share->db_create_options & HA_OPTION_CHECKSUM)
|
if (share->db_create_options & HA_OPTION_CHECKSUM)
|
||||||
ptr=strmov(ptr," checksum=1");
|
str.qs_append(STRING_WITH_LEN(" checksum=1"));
|
||||||
if (share->page_checksum != HA_CHOICE_UNDEF)
|
if (share->page_checksum != HA_CHOICE_UNDEF)
|
||||||
ptr= strxmov(ptr, " page_checksum=",
|
{
|
||||||
ha_choice_values[(uint) share->page_checksum], NullS);
|
str.qs_append(STRING_WITH_LEN(" page_checksum="));
|
||||||
|
str.qs_append(ha_choice_values[(uint) share->page_checksum]);
|
||||||
|
}
|
||||||
if (share->db_create_options & HA_OPTION_DELAY_KEY_WRITE)
|
if (share->db_create_options & HA_OPTION_DELAY_KEY_WRITE)
|
||||||
ptr=strmov(ptr," delay_key_write=1");
|
str.qs_append(STRING_WITH_LEN(" delay_key_write=1"));
|
||||||
if (share->row_type != ROW_TYPE_DEFAULT)
|
if (share->row_type != ROW_TYPE_DEFAULT)
|
||||||
ptr=strxmov(ptr, " row_format=",
|
{
|
||||||
ha_row_type[(uint) share->row_type],
|
str.qs_append(STRING_WITH_LEN(" row_format="));
|
||||||
NullS);
|
str.qs_append(ha_row_type[(uint) share->row_type]);
|
||||||
|
}
|
||||||
if (share->key_block_size)
|
if (share->key_block_size)
|
||||||
{
|
{
|
||||||
ptr= strmov(ptr, " key_block_size=");
|
str.qs_append(STRING_WITH_LEN(" key_block_size="));
|
||||||
ptr= longlong10_to_str(share->key_block_size, ptr, 10);
|
str.qs_append(share->key_block_size);
|
||||||
}
|
}
|
||||||
#ifdef WITH_PARTITION_STORAGE_ENGINE
|
#ifdef WITH_PARTITION_STORAGE_ENGINE
|
||||||
if (is_partitioned)
|
if (is_partitioned)
|
||||||
ptr= strmov(ptr, " partitioned");
|
str.qs_append(STRING_WITH_LEN(" partitioned"));
|
||||||
#endif
|
#endif
|
||||||
if (share->transactional != HA_CHOICE_UNDEF)
|
if (share->transactional != HA_CHOICE_UNDEF)
|
||||||
ptr= strxmov(ptr, " transactional=",
|
ptr= strxmov(ptr, " transactional=",
|
||||||
ha_choice_values[(uint) share->transactional], NullS);
|
ha_choice_values[(uint) share->transactional], NullS);
|
||||||
table->field[19]->store(option_buff+1,
|
append_create_options(thd, &str, share->option_list);
|
||||||
(ptr == option_buff ? 0 :
|
if (str.length())
|
||||||
(uint) (ptr-option_buff)-1), cs);
|
table->field[19]->store(str.ptr()+1, str.length()-1, cs);
|
||||||
|
|
||||||
tmp_buff= (share->table_charset ?
|
tmp_buff= (share->table_charset ?
|
||||||
share->table_charset->name : "default");
|
share->table_charset->name : "default");
|
||||||
|
@ -687,10 +687,10 @@ void String::qs_append(int i)
|
|||||||
str_length+= (int) (end-buff);
|
str_length+= (int) (end-buff);
|
||||||
}
|
}
|
||||||
|
|
||||||
void String::qs_append(uint i)
|
void String::qs_append(ulonglong i)
|
||||||
{
|
{
|
||||||
char *buff= Ptr + str_length;
|
char *buff= Ptr + str_length;
|
||||||
char *end= int10_to_str(i, buff, 10);
|
char *end= longlong10_to_str(i, buff,10);
|
||||||
str_length+= (int) (end-buff);
|
str_length+= (int) (end-buff);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -336,6 +336,10 @@ public:
|
|||||||
int4store(Ptr + position,value);
|
int4store(Ptr + position,value);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void qs_append(const char *str)
|
||||||
|
{
|
||||||
|
qs_append(str, strlen(str));
|
||||||
|
}
|
||||||
void qs_append(const char *str, uint32 len);
|
void qs_append(const char *str, uint32 len);
|
||||||
void qs_append(double d);
|
void qs_append(double d);
|
||||||
void qs_append(double *d);
|
void qs_append(double *d);
|
||||||
@ -345,7 +349,15 @@ public:
|
|||||||
str_length++;
|
str_length++;
|
||||||
}
|
}
|
||||||
void qs_append(int i);
|
void qs_append(int i);
|
||||||
void qs_append(uint i);
|
void qs_append(uint i)
|
||||||
|
{
|
||||||
|
qs_append((ulonglong)i);
|
||||||
|
}
|
||||||
|
void qs_append(ulong i)
|
||||||
|
{
|
||||||
|
qs_append((ulonglong)i);
|
||||||
|
}
|
||||||
|
void qs_append(ulonglong i);
|
||||||
|
|
||||||
/* Inline (general) functions used by the protocol functions */
|
/* Inline (general) functions used by the protocol functions */
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user