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 (
@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 SELECT, optimizing
@node EXPLAIN, DESCRIBE, SHOW, Reference
......@@ -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
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
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} /
......@@ -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
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
Set the time for this client. This is used to get the original timestamp if
you use the update log to restore rows.
......@@ -1238,7 +1238,7 @@ AC_CHECK_FUNCS(alarm bmove \
cuserid fcntl fconvert \
getrusage getpwuid getcwd getrlimit getwd index stpcpy locking longjmp \
perror pread realpath rename \
socket strnlen madvise \
socket strnlen madvise mkstemp \
strtol strtoul strtoull snprintf tempnam thr_setconcurrency \
gethostbyaddr_r gethostbyname_r getpwnam \
bfill bzero bcmp strstr strpbrk strerror\
......
......@@ -275,6 +275,7 @@ static SYMBOL symbols[] = {
{ "SQL_LOG_UPDATE", SYM(SQL_LOG_UPDATE),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_QUOTE_SHOW_CREATE",SYM(SQL_QUOTE_SHOW_CREATE), 0, 0},
{ "SQL_SAFE_UPDATES", SYM(SQL_SAFE_UPDATES),0,0},
{ "SQL_SELECT_LIMIT", SYM(SQL_SELECT_LIMIT),0,0},
{ "SQL_SMALL_RESULT", SYM(SQL_SMALL_RESULT),0,0},
......
......@@ -158,6 +158,7 @@ void kill_one_thread(THD *thd, ulong id);
#define OPTION_AUTO_COMMIT OPTION_BIN_LOG*2
#define OPTION_BEGIN OPTION_AUTO_COMMIT*2
#define OPTION_QUICK OPTION_BEGIN*2
#define OPTION_QUOTE_SHOW_CREATE OPTION_QUICK*2
#define RAID_BLOCK_SIZE 1024
......
......@@ -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,
wake_thread=0, global_read_lock=0;
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;
ulong keybuff_size,sortbuff_size,max_item_sort_length,table_cache_size,
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,
const char *path, const char *wild, bool dir);
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
......@@ -668,8 +671,23 @@ mysqld_dump_create_info(THD *thd, TABLE *table, int fd)
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
store_create_info(THD *thd, TABLE *table, String* packet)
store_create_info(THD *thd, TABLE *table, String *packet)
{
DBUG_ENTER("store_create_info");
DBUG_PRINT("enter",("table: %s",table->real_name));
......@@ -680,7 +698,7 @@ store_create_info(THD *thd, TABLE *table, String* packet)
char tmp[MAX_FIELD_WIDTH];
String type(tmp, sizeof(tmp));
packet->append("CREATE TABLE ", 13);
packet->append(table->real_name);
append_identifier(thd,packet,table->real_name);
packet->append(" (\n", 3);
Field **ptr,*field;
......@@ -691,7 +709,7 @@ store_create_info(THD *thd, TABLE *table, String* packet)
uint flags = field->flags;
packet->append(" ", 2);
packet->append(field->field_name);
append_identifier(thd,packet,field->field_name);
packet->append(' ');
// check for surprises from the previous call to Field::sql_type()
if(type.ptr() != tmp)
......@@ -746,7 +764,7 @@ store_create_info(THD *thd, TABLE *table, String* packet)
packet->append("KEY ", 4);
if(i != primary_key)
packet->append(key_info->name);
append_identifier(thd,packet,key_info->name);
packet->append('(');
......@@ -756,7 +774,7 @@ store_create_info(THD *thd, TABLE *table, String* packet)
packet->append(',');
if (key_part->field)
packet->append(key_part->field->field_name);
append_identifier(thd,packet,key_part->field->field_name);
if (!key_part->field ||
(key_part->length !=
table->field[key_part->fieldnr-1]->key_length() &&
......
......@@ -407,6 +407,7 @@ bool my_yyoverflow(short **a, YYSTYPE **b,int *yystacksize);
%token SQL_WARNINGS
%token SQL_AUTO_IS_NULL
%token SQL_SAFE_UPDATES
%token SQL_QUOTE_SHOW_CREATE
%left SET_VAR
%left OR_OR_CONCAT OR
......@@ -2620,6 +2621,7 @@ set_option:
| SQL_AUTO_IS_NULL { $$= OPTION_AUTO_IS_NULL; }
| SQL_SAFE_UPDATES { $$= OPTION_SAFE_UPDATES; }
| SQL_BUFFER_RESULT { $$= OPTION_BUFFER_RESULT; }
| SQL_QUOTE_SHOW_CREATE { $$= OPTION_QUOTE_SHOW_CREATE; }
/* 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