Commit 0a050cf4 authored by serg@serg.mysql.com's avatar serg@serg.mysql.com

SET OPTION SQL_QUOTE_SHOW_CREATE = 0 | 1

It makes SHOW CREATE TABLE to quote table and column names.
This is ON by default !
parent 68ec8e00
...@@ -20006,6 +20006,10 @@ Create Table: CREATE TABLE t ( ...@@ -20006,6 +20006,10 @@ Create Table: CREATE TABLE t (
@end example @end example
@code{SHOW CREATE TABLE} will quote table and column names according to
@code{SQL_QUOTE_SHOW_CREATE} option.
@ref{SET OPTION, , @code{SET OPTION SQL_QUOTE_SHOW_CREATE}}.
@findex EXPLAIN @findex EXPLAIN
@findex SELECT, optimizing @findex SELECT, optimizing
@node EXPLAIN, DESCRIBE, SHOW, Reference @node EXPLAIN, DESCRIBE, SHOW, Reference
...@@ -20549,7 +20553,7 @@ for a table with an auto_increment row with the following construct: ...@@ -20549,7 +20553,7 @@ for a table with an auto_increment row with the following construct:
@code{WHERE auto_increment_column IS NULL}. This is used by some @code{WHERE auto_increment_column IS NULL}. This is used by some
ODBC programs like Access. ODBC programs like Access.
@item SET AUTOCOMMIT= 0 | 1 @item AUTOCOMMIT= 0 | 1
If set to @code{1} all changes to a table will be done at once. To start If set to @code{1} all changes to a table will be done at once. To start
an multi command transaction you have to use the @code{BEGIN} an multi command transaction you have to use the @code{BEGIN}
statement. @xref{COMMIT}. If set to @code{0} you have to use @code{COMMIT} / statement. @xref{COMMIT}. If set to @code{0} you have to use @code{COMMIT} /
...@@ -20618,6 +20622,12 @@ If set to @code{0}, no logging will be done to the update log for the client, ...@@ -20618,6 +20622,12 @@ If set to @code{0}, no logging will be done to the update log for the client,
if the client has the @strong{process} privilege. This does not affect the if the client has the @strong{process} privilege. This does not affect the
standard log! standard log!
@item SQL_QUOTE_SHOW_CREATE = 0 | 1
If set to @code{1}, @code{SHOW CREATE TABLE} will quote
table and column names. This is @strong{on} by default,
for replication of tables with fancy column names to work.
@ref{SHOW CREATE TABLE, , @code{SHOW CREATE TABLE}}.
@item TIMESTAMP = timestamp_value | DEFAULT @item TIMESTAMP = timestamp_value | DEFAULT
Set the time for this client. This is used to get the original timestamp if Set the time for this client. This is used to get the original timestamp if
you use the update log to restore rows. you use the update log to restore rows.
...@@ -1238,7 +1238,7 @@ AC_CHECK_FUNCS(alarm bmove \ ...@@ -1238,7 +1238,7 @@ AC_CHECK_FUNCS(alarm bmove \
cuserid fcntl fconvert \ cuserid fcntl fconvert \
getrusage getpwuid getcwd getrlimit getwd index stpcpy locking longjmp \ getrusage getpwuid getcwd getrlimit getwd index stpcpy locking longjmp \
perror pread realpath rename \ perror pread realpath rename \
socket strnlen madvise \ socket strnlen madvise mkstemp \
strtol strtoul strtoull snprintf tempnam thr_setconcurrency \ strtol strtoul strtoull snprintf tempnam thr_setconcurrency \
gethostbyaddr_r gethostbyname_r getpwnam \ gethostbyaddr_r gethostbyname_r getpwnam \
bfill bzero bcmp strstr strpbrk strerror\ bfill bzero bcmp strstr strpbrk strerror\
......
...@@ -275,6 +275,7 @@ static SYMBOL symbols[] = { ...@@ -275,6 +275,7 @@ static SYMBOL symbols[] = {
{ "SQL_LOG_UPDATE", SYM(SQL_LOG_UPDATE),0,0}, { "SQL_LOG_UPDATE", SYM(SQL_LOG_UPDATE),0,0},
{ "SQL_LOW_PRIORITY_UPDATES", SYM(SQL_LOW_PRIORITY_UPDATES),0,0}, { "SQL_LOW_PRIORITY_UPDATES", SYM(SQL_LOW_PRIORITY_UPDATES),0,0},
{ "SQL_MAX_JOIN_SIZE",SYM(SQL_MAX_JOIN_SIZE), 0, 0}, { "SQL_MAX_JOIN_SIZE",SYM(SQL_MAX_JOIN_SIZE), 0, 0},
{ "SQL_QUOTE_SHOW_CREATE",SYM(SQL_QUOTE_SHOW_CREATE), 0, 0},
{ "SQL_SAFE_UPDATES", SYM(SQL_SAFE_UPDATES),0,0}, { "SQL_SAFE_UPDATES", SYM(SQL_SAFE_UPDATES),0,0},
{ "SQL_SELECT_LIMIT", SYM(SQL_SELECT_LIMIT),0,0}, { "SQL_SELECT_LIMIT", SYM(SQL_SELECT_LIMIT),0,0},
{ "SQL_SMALL_RESULT", SYM(SQL_SMALL_RESULT),0,0}, { "SQL_SMALL_RESULT", SYM(SQL_SMALL_RESULT),0,0},
......
...@@ -158,6 +158,7 @@ void kill_one_thread(THD *thd, ulong id); ...@@ -158,6 +158,7 @@ void kill_one_thread(THD *thd, ulong id);
#define OPTION_AUTO_COMMIT OPTION_BIN_LOG*2 #define OPTION_AUTO_COMMIT OPTION_BIN_LOG*2
#define OPTION_BEGIN OPTION_AUTO_COMMIT*2 #define OPTION_BEGIN OPTION_AUTO_COMMIT*2
#define OPTION_QUICK OPTION_BEGIN*2 #define OPTION_QUICK OPTION_BEGIN*2
#define OPTION_QUOTE_SHOW_CREATE OPTION_QUICK*2
#define RAID_BLOCK_SIZE 1024 #define RAID_BLOCK_SIZE 1024
......
...@@ -188,7 +188,8 @@ uint test_flags, select_errors=0, dropping_tables=0,ha_open_options=0; ...@@ -188,7 +188,8 @@ uint test_flags, select_errors=0, dropping_tables=0,ha_open_options=0;
uint volatile thread_count=0, thread_running=0, kill_cached_threads=0, uint volatile thread_count=0, thread_running=0, kill_cached_threads=0,
wake_thread=0, global_read_lock=0; wake_thread=0, global_read_lock=0;
ulong thd_startup_options=(OPTION_UPDATE_LOG | OPTION_AUTO_IS_NULL | ulong thd_startup_options=(OPTION_UPDATE_LOG | OPTION_AUTO_IS_NULL |
OPTION_BIN_LOG | OPTION_AUTO_COMMIT); OPTION_BIN_LOG | OPTION_AUTO_COMMIT |
OPTION_QUOTE_SHOW_CREATE );
uint protocol_version=PROTOCOL_VERSION; uint protocol_version=PROTOCOL_VERSION;
ulong keybuff_size,sortbuff_size,max_item_sort_length,table_cache_size, ulong keybuff_size,sortbuff_size,max_item_sort_length,table_cache_size,
max_join_size,join_buff_size,tmp_table_size,thread_stack, max_join_size,join_buff_size,tmp_table_size,thread_stack,
......
...@@ -37,7 +37,10 @@ static int mysql_find_files(THD *thd,List<char> *files, const char *db, ...@@ -37,7 +37,10 @@ static int mysql_find_files(THD *thd,List<char> *files, const char *db,
const char *path, const char *wild, bool dir); const char *path, const char *wild, bool dir);
static int static int
store_create_info(THD *thd, TABLE *table, String* packet); store_create_info(THD *thd, TABLE *table, String *packet);
static void
append_identifier(THD *thd, String *packet, const char *name);
/**************************************************************************** /****************************************************************************
** Send list of databases ** Send list of databases
...@@ -668,8 +671,23 @@ mysqld_dump_create_info(THD *thd, TABLE *table, int fd) ...@@ -668,8 +671,23 @@ mysqld_dump_create_info(THD *thd, TABLE *table, int fd)
DBUG_RETURN(0); DBUG_RETURN(0);
} }
static void
append_identifier(THD *thd, String *packet, const char *name)
{
if (thd->options & OPTION_QUOTE_SHOW_CREATE)
{
packet->append("`", 1);
packet->append(name);
packet->append("`", 1);
}
else
{
packet->append(name);
}
}
static int static int
store_create_info(THD *thd, TABLE *table, String* packet) store_create_info(THD *thd, TABLE *table, String *packet)
{ {
DBUG_ENTER("store_create_info"); DBUG_ENTER("store_create_info");
DBUG_PRINT("enter",("table: %s",table->real_name)); DBUG_PRINT("enter",("table: %s",table->real_name));
...@@ -680,7 +698,7 @@ store_create_info(THD *thd, TABLE *table, String* packet) ...@@ -680,7 +698,7 @@ store_create_info(THD *thd, TABLE *table, String* packet)
char tmp[MAX_FIELD_WIDTH]; char tmp[MAX_FIELD_WIDTH];
String type(tmp, sizeof(tmp)); String type(tmp, sizeof(tmp));
packet->append("CREATE TABLE ", 13); packet->append("CREATE TABLE ", 13);
packet->append(table->real_name); append_identifier(thd,packet,table->real_name);
packet->append(" (\n", 3); packet->append(" (\n", 3);
Field **ptr,*field; Field **ptr,*field;
...@@ -691,7 +709,7 @@ store_create_info(THD *thd, TABLE *table, String* packet) ...@@ -691,7 +709,7 @@ store_create_info(THD *thd, TABLE *table, String* packet)
uint flags = field->flags; uint flags = field->flags;
packet->append(" ", 2); packet->append(" ", 2);
packet->append(field->field_name); append_identifier(thd,packet,field->field_name);
packet->append(' '); packet->append(' ');
// check for surprises from the previous call to Field::sql_type() // check for surprises from the previous call to Field::sql_type()
if(type.ptr() != tmp) if(type.ptr() != tmp)
...@@ -746,7 +764,7 @@ store_create_info(THD *thd, TABLE *table, String* packet) ...@@ -746,7 +764,7 @@ store_create_info(THD *thd, TABLE *table, String* packet)
packet->append("KEY ", 4); packet->append("KEY ", 4);
if(i != primary_key) if(i != primary_key)
packet->append(key_info->name); append_identifier(thd,packet,key_info->name);
packet->append('('); packet->append('(');
...@@ -756,7 +774,7 @@ store_create_info(THD *thd, TABLE *table, String* packet) ...@@ -756,7 +774,7 @@ store_create_info(THD *thd, TABLE *table, String* packet)
packet->append(','); packet->append(',');
if (key_part->field) if (key_part->field)
packet->append(key_part->field->field_name); append_identifier(thd,packet,key_part->field->field_name);
if (!key_part->field || if (!key_part->field ||
(key_part->length != (key_part->length !=
table->field[key_part->fieldnr-1]->key_length() && table->field[key_part->fieldnr-1]->key_length() &&
......
...@@ -407,6 +407,7 @@ bool my_yyoverflow(short **a, YYSTYPE **b,int *yystacksize); ...@@ -407,6 +407,7 @@ bool my_yyoverflow(short **a, YYSTYPE **b,int *yystacksize);
%token SQL_WARNINGS %token SQL_WARNINGS
%token SQL_AUTO_IS_NULL %token SQL_AUTO_IS_NULL
%token SQL_SAFE_UPDATES %token SQL_SAFE_UPDATES
%token SQL_QUOTE_SHOW_CREATE
%left SET_VAR %left SET_VAR
%left OR_OR_CONCAT OR %left OR_OR_CONCAT OR
...@@ -2620,6 +2621,7 @@ set_option: ...@@ -2620,6 +2621,7 @@ set_option:
| SQL_AUTO_IS_NULL { $$= OPTION_AUTO_IS_NULL; } | SQL_AUTO_IS_NULL { $$= OPTION_AUTO_IS_NULL; }
| SQL_SAFE_UPDATES { $$= OPTION_SAFE_UPDATES; } | SQL_SAFE_UPDATES { $$= OPTION_SAFE_UPDATES; }
| SQL_BUFFER_RESULT { $$= OPTION_BUFFER_RESULT; } | SQL_BUFFER_RESULT { $$= OPTION_BUFFER_RESULT; }
| SQL_QUOTE_SHOW_CREATE { $$= OPTION_QUOTE_SHOW_CREATE; }
/* Lock function */ /* Lock function */
......
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