Merge sanja.is.com.ua:/home/bell/mysql/bk/work-bug1-5.0
into sanja.is.com.ua:/home/bell/mysql/bk/work-merge-5.0
This commit is contained in:
commit
7f162c7899
52
sql/field.cc
52
sql/field.cc
@ -1272,9 +1272,9 @@ my_decimal *Field::val_decimal(my_decimal *decimal)
|
|||||||
void Field_num::add_zerofill_and_unsigned(String &res) const
|
void Field_num::add_zerofill_and_unsigned(String &res) const
|
||||||
{
|
{
|
||||||
if (unsigned_flag)
|
if (unsigned_flag)
|
||||||
res.append(" unsigned");
|
res.append(STRING_WITH_LEN(" unsigned"));
|
||||||
if (zerofill)
|
if (zerofill)
|
||||||
res.append(" zerofill");
|
res.append(STRING_WITH_LEN(" zerofill"));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -1655,7 +1655,7 @@ bool Field::needs_quotes(void)
|
|||||||
|
|
||||||
void Field_null::sql_type(String &res) const
|
void Field_null::sql_type(String &res) const
|
||||||
{
|
{
|
||||||
res.set_ascii("null", 4);
|
res.set_ascii(STRING_WITH_LEN("null"));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -1667,7 +1667,7 @@ void Field_null::sql_type(String &res) const
|
|||||||
void
|
void
|
||||||
Field_decimal::reset(void)
|
Field_decimal::reset(void)
|
||||||
{
|
{
|
||||||
Field_decimal::store("0",1,&my_charset_bin);
|
Field_decimal::store(STRING_WITH_LEN("0"),&my_charset_bin);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Field_decimal::overflow(bool negative)
|
void Field_decimal::overflow(bool negative)
|
||||||
@ -4113,7 +4113,7 @@ void Field_float::sql_type(String &res) const
|
|||||||
{
|
{
|
||||||
if (dec == NOT_FIXED_DEC)
|
if (dec == NOT_FIXED_DEC)
|
||||||
{
|
{
|
||||||
res.set_ascii("float", 5);
|
res.set_ascii(STRING_WITH_LEN("float"));
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -4384,7 +4384,7 @@ void Field_double::sql_type(String &res) const
|
|||||||
CHARSET_INFO *cs=res.charset();
|
CHARSET_INFO *cs=res.charset();
|
||||||
if (dec == NOT_FIXED_DEC)
|
if (dec == NOT_FIXED_DEC)
|
||||||
{
|
{
|
||||||
res.set_ascii("double",6);
|
res.set_ascii(STRING_WITH_LEN("double"));
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -4673,7 +4673,7 @@ String *Field_timestamp::val_str(String *val_buffer, String *val_ptr)
|
|||||||
|
|
||||||
if (temp == 0L)
|
if (temp == 0L)
|
||||||
{ /* Zero time is "000000" */
|
{ /* Zero time is "000000" */
|
||||||
val_ptr->set("0000-00-00 00:00:00", 19, &my_charset_bin);
|
val_ptr->set(STRING_WITH_LEN("0000-00-00 00:00:00"), &my_charset_bin);
|
||||||
return val_ptr;
|
return val_ptr;
|
||||||
}
|
}
|
||||||
val_buffer->set_charset(&my_charset_bin); // Safety
|
val_buffer->set_charset(&my_charset_bin); // Safety
|
||||||
@ -4805,7 +4805,7 @@ void Field_timestamp::sort_string(char *to,uint length __attribute__((unused)))
|
|||||||
|
|
||||||
void Field_timestamp::sql_type(String &res) const
|
void Field_timestamp::sql_type(String &res) const
|
||||||
{
|
{
|
||||||
res.set_ascii("timestamp", 9);
|
res.set_ascii(STRING_WITH_LEN("timestamp"));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -5074,7 +5074,7 @@ void Field_time::sort_string(char *to,uint length __attribute__((unused)))
|
|||||||
|
|
||||||
void Field_time::sql_type(String &res) const
|
void Field_time::sql_type(String &res) const
|
||||||
{
|
{
|
||||||
res.set_ascii("time", 4);
|
res.set_ascii(STRING_WITH_LEN("time"));
|
||||||
}
|
}
|
||||||
|
|
||||||
/****************************************************************************
|
/****************************************************************************
|
||||||
@ -5381,7 +5381,7 @@ void Field_date::sort_string(char *to,uint length __attribute__((unused)))
|
|||||||
|
|
||||||
void Field_date::sql_type(String &res) const
|
void Field_date::sql_type(String &res) const
|
||||||
{
|
{
|
||||||
res.set_ascii("date", 4);
|
res.set_ascii(STRING_WITH_LEN("date"));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -5564,7 +5564,7 @@ void Field_newdate::sort_string(char *to,uint length __attribute__((unused)))
|
|||||||
|
|
||||||
void Field_newdate::sql_type(String &res) const
|
void Field_newdate::sql_type(String &res) const
|
||||||
{
|
{
|
||||||
res.set_ascii("date", 4);
|
res.set_ascii(STRING_WITH_LEN("date"));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -5838,7 +5838,7 @@ void Field_datetime::sort_string(char *to,uint length __attribute__((unused)))
|
|||||||
|
|
||||||
void Field_datetime::sql_type(String &res) const
|
void Field_datetime::sql_type(String &res) const
|
||||||
{
|
{
|
||||||
res.set_ascii("datetime", 8);
|
res.set_ascii(STRING_WITH_LEN("datetime"));
|
||||||
}
|
}
|
||||||
|
|
||||||
/****************************************************************************
|
/****************************************************************************
|
||||||
@ -6061,7 +6061,7 @@ void Field_string::sql_type(String &res) const
|
|||||||
res.length(length);
|
res.length(length);
|
||||||
if ((thd->variables.sql_mode & (MODE_MYSQL323 | MODE_MYSQL40)) &&
|
if ((thd->variables.sql_mode & (MODE_MYSQL323 | MODE_MYSQL40)) &&
|
||||||
has_charset() && (charset()->state & MY_CS_BINSORT))
|
has_charset() && (charset()->state & MY_CS_BINSORT))
|
||||||
res.append(" binary");
|
res.append(STRING_WITH_LEN(" binary"));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -6454,7 +6454,7 @@ void Field_varstring::sql_type(String &res) const
|
|||||||
res.length(length);
|
res.length(length);
|
||||||
if ((thd->variables.sql_mode & (MODE_MYSQL323 | MODE_MYSQL40)) &&
|
if ((thd->variables.sql_mode & (MODE_MYSQL323 | MODE_MYSQL40)) &&
|
||||||
has_charset() && (charset()->state & MY_CS_BINSORT))
|
has_charset() && (charset()->state & MY_CS_BINSORT))
|
||||||
res.append(" binary");
|
res.append(STRING_WITH_LEN(" binary"));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -7174,10 +7174,10 @@ void Field_blob::sql_type(String &res) const
|
|||||||
}
|
}
|
||||||
res.set_ascii(str,length);
|
res.set_ascii(str,length);
|
||||||
if (charset() == &my_charset_bin)
|
if (charset() == &my_charset_bin)
|
||||||
res.append("blob");
|
res.append(STRING_WITH_LEN("blob"));
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
res.append("text");
|
res.append(STRING_WITH_LEN("text"));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -7397,28 +7397,28 @@ void Field_geom::sql_type(String &res) const
|
|||||||
switch (geom_type)
|
switch (geom_type)
|
||||||
{
|
{
|
||||||
case GEOM_POINT:
|
case GEOM_POINT:
|
||||||
res.set("point", 5, cs);
|
res.set(STRING_WITH_LEN("point"), cs);
|
||||||
break;
|
break;
|
||||||
case GEOM_LINESTRING:
|
case GEOM_LINESTRING:
|
||||||
res.set("linestring", 10, cs);
|
res.set(STRING_WITH_LEN("linestring"), cs);
|
||||||
break;
|
break;
|
||||||
case GEOM_POLYGON:
|
case GEOM_POLYGON:
|
||||||
res.set("polygon", 7, cs);
|
res.set(STRING_WITH_LEN("polygon"), cs);
|
||||||
break;
|
break;
|
||||||
case GEOM_MULTIPOINT:
|
case GEOM_MULTIPOINT:
|
||||||
res.set("multipoint", 10, cs);
|
res.set(STRING_WITH_LEN("multipoint"), cs);
|
||||||
break;
|
break;
|
||||||
case GEOM_MULTILINESTRING:
|
case GEOM_MULTILINESTRING:
|
||||||
res.set("multilinestring", 15, cs);
|
res.set(STRING_WITH_LEN("multilinestring"), cs);
|
||||||
break;
|
break;
|
||||||
case GEOM_MULTIPOLYGON:
|
case GEOM_MULTIPOLYGON:
|
||||||
res.set("multipolygon", 12, cs);
|
res.set(STRING_WITH_LEN("multipolygon"), cs);
|
||||||
break;
|
break;
|
||||||
case GEOM_GEOMETRYCOLLECTION:
|
case GEOM_GEOMETRYCOLLECTION:
|
||||||
res.set("geometrycollection", 18, cs);
|
res.set(STRING_WITH_LEN("geometrycollection"), cs);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
res.set("geometry", 8, cs);
|
res.set(STRING_WITH_LEN("geometry"), cs);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -7695,7 +7695,7 @@ void Field_enum::sql_type(String &res) const
|
|||||||
String enum_item(buffer, sizeof(buffer), res.charset());
|
String enum_item(buffer, sizeof(buffer), res.charset());
|
||||||
|
|
||||||
res.length(0);
|
res.length(0);
|
||||||
res.append("enum(");
|
res.append(STRING_WITH_LEN("enum("));
|
||||||
|
|
||||||
bool flag=0;
|
bool flag=0;
|
||||||
uint *len= typelib->type_lengths;
|
uint *len= typelib->type_lengths;
|
||||||
@ -7809,7 +7809,7 @@ void Field_set::sql_type(String &res) const
|
|||||||
String set_item(buffer, sizeof(buffer), res.charset());
|
String set_item(buffer, sizeof(buffer), res.charset());
|
||||||
|
|
||||||
res.length(0);
|
res.length(0);
|
||||||
res.append("set(");
|
res.append(STRING_WITH_LEN("set("));
|
||||||
|
|
||||||
bool flag=0;
|
bool flag=0;
|
||||||
uint *len= typelib->type_lengths;
|
uint *len= typelib->type_lengths;
|
||||||
|
@ -308,7 +308,7 @@ int berkeley_show_logs(Protocol *protocol)
|
|||||||
{
|
{
|
||||||
protocol->prepare_for_resend();
|
protocol->prepare_for_resend();
|
||||||
protocol->store(*a, system_charset_info);
|
protocol->store(*a, system_charset_info);
|
||||||
protocol->store("BDB", 3, system_charset_info);
|
protocol->store(STRING_WITH_LEN("BDB"), system_charset_info);
|
||||||
if (f && *f && strcmp(*a, *f) == 0)
|
if (f && *f && strcmp(*a, *f) == 0)
|
||||||
{
|
{
|
||||||
f++;
|
f++;
|
||||||
|
@ -2627,9 +2627,9 @@ bool ha_federated::get_error_message(int error, String* buf)
|
|||||||
DBUG_PRINT("enter", ("error: %d", error));
|
DBUG_PRINT("enter", ("error: %d", error));
|
||||||
if (error == HA_FEDERATED_ERROR_WITH_REMOTE_SYSTEM)
|
if (error == HA_FEDERATED_ERROR_WITH_REMOTE_SYSTEM)
|
||||||
{
|
{
|
||||||
buf->append("Error on remote system: ");
|
buf->append(STRING_WITH_LEN("Error on remote system: "));
|
||||||
buf->qs_append(remote_error_number);
|
buf->qs_append(remote_error_number);
|
||||||
buf->append(": ");
|
buf->append(STRING_WITH_LEN(": "));
|
||||||
buf->append(remote_error_buf);
|
buf->append(remote_error_buf);
|
||||||
|
|
||||||
remote_error_number= 0;
|
remote_error_number= 0;
|
||||||
|
@ -490,10 +490,10 @@ void ha_myisammrg::append_create_info(String *packet)
|
|||||||
|
|
||||||
if (file->merge_insert_method != MERGE_INSERT_DISABLED)
|
if (file->merge_insert_method != MERGE_INSERT_DISABLED)
|
||||||
{
|
{
|
||||||
packet->append(" INSERT_METHOD=",15);
|
packet->append(STRING_WITH_LEN(" INSERT_METHOD="));
|
||||||
packet->append(get_type(&merge_insert_method,file->merge_insert_method-1));
|
packet->append(get_type(&merge_insert_method,file->merge_insert_method-1));
|
||||||
}
|
}
|
||||||
packet->append(" UNION=(",8);
|
packet->append(STRING_WITH_LEN(" UNION=("));
|
||||||
MYRG_TABLE *open_table,*first;
|
MYRG_TABLE *open_table,*first;
|
||||||
|
|
||||||
current_db= table->s->db;
|
current_db= table->s->db;
|
||||||
|
@ -1685,7 +1685,7 @@ void handler::print_error(int error, myf errflag)
|
|||||||
if (str.length() >= max_length)
|
if (str.length() >= max_length)
|
||||||
{
|
{
|
||||||
str.length(max_length-4);
|
str.length(max_length-4);
|
||||||
str.append("...");
|
str.append(STRING_WITH_LEN("..."));
|
||||||
}
|
}
|
||||||
my_error(ER_DUP_ENTRY, MYF(0), str.c_ptr(), key_nr+1);
|
my_error(ER_DUP_ENTRY, MYF(0), str.c_ptr(), key_nr+1);
|
||||||
DBUG_VOID_RETURN;
|
DBUG_VOID_RETURN;
|
||||||
|
16
sql/item.cc
16
sql/item.cc
@ -383,7 +383,7 @@ void Item::print_item_w_name(String *str)
|
|||||||
if (name)
|
if (name)
|
||||||
{
|
{
|
||||||
THD *thd= current_thd;
|
THD *thd= current_thd;
|
||||||
str->append(" AS ", 4);
|
str->append(STRING_WITH_LEN(" AS "));
|
||||||
append_identifier(thd, str, name, (uint) strlen(name));
|
append_identifier(thd, str, name, (uint) strlen(name));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1031,7 +1031,7 @@ void Item_name_const::cleanup()
|
|||||||
|
|
||||||
void Item_name_const::print(String *str)
|
void Item_name_const::print(String *str)
|
||||||
{
|
{
|
||||||
str->append("NAME_CONST(");
|
str->append(STRING_WITH_LEN("NAME_CONST("));
|
||||||
name_item->print(str);
|
name_item->print(str);
|
||||||
str->append(',');
|
str->append(',');
|
||||||
value_item->print(str);
|
value_item->print(str);
|
||||||
@ -4852,7 +4852,7 @@ void Item_ref::make_field(Send_field *field)
|
|||||||
|
|
||||||
void Item_ref_null_helper::print(String *str)
|
void Item_ref_null_helper::print(String *str)
|
||||||
{
|
{
|
||||||
str->append("<ref_null_helper>(", 18);
|
str->append(STRING_WITH_LEN("<ref_null_helper>("));
|
||||||
if (ref)
|
if (ref)
|
||||||
(*ref)->print(str);
|
(*ref)->print(str);
|
||||||
else
|
else
|
||||||
@ -4978,7 +4978,7 @@ bool Item_direct_view_ref::eq(const Item *item, bool binary_cmp) const
|
|||||||
|
|
||||||
void Item_null_helper::print(String *str)
|
void Item_null_helper::print(String *str)
|
||||||
{
|
{
|
||||||
str->append("<null_helper>(", 14);
|
str->append(STRING_WITH_LEN("<null_helper>("));
|
||||||
store->print(str);
|
store->print(str);
|
||||||
str->append(')');
|
str->append(')');
|
||||||
}
|
}
|
||||||
@ -5038,10 +5038,10 @@ void Item_default_value::print(String *str)
|
|||||||
{
|
{
|
||||||
if (!arg)
|
if (!arg)
|
||||||
{
|
{
|
||||||
str->append("default", 7);
|
str->append(STRING_WITH_LEN("default"));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
str->append("default(", 8);
|
str->append(STRING_WITH_LEN("default("));
|
||||||
arg->print(str);
|
arg->print(str);
|
||||||
str->append(')');
|
str->append(')');
|
||||||
}
|
}
|
||||||
@ -5135,7 +5135,7 @@ bool Item_insert_value::fix_fields(THD *thd, Item **items)
|
|||||||
|
|
||||||
void Item_insert_value::print(String *str)
|
void Item_insert_value::print(String *str)
|
||||||
{
|
{
|
||||||
str->append("values(", 7);
|
str->append(STRING_WITH_LEN("values("));
|
||||||
arg->print(str);
|
arg->print(str);
|
||||||
str->append(')');
|
str->append(')');
|
||||||
}
|
}
|
||||||
@ -5396,7 +5396,7 @@ Item_cache* Item_cache::get_cache(Item_result type)
|
|||||||
|
|
||||||
void Item_cache::print(String *str)
|
void Item_cache::print(String *str)
|
||||||
{
|
{
|
||||||
str->append("<cache>(", 8);
|
str->append(STRING_WITH_LEN("<cache>("));
|
||||||
if (example)
|
if (example)
|
||||||
example->print(str);
|
example->print(str);
|
||||||
else
|
else
|
||||||
|
@ -1055,7 +1055,7 @@ public:
|
|||||||
bool basic_const_item() const { return 1; }
|
bool basic_const_item() const { return 1; }
|
||||||
Item *new_item() { return new Item_null(name); }
|
Item *new_item() { return new Item_null(name); }
|
||||||
bool is_null() { return 1; }
|
bool is_null() { return 1; }
|
||||||
void print(String *str) { str->append("NULL", 4); }
|
void print(String *str) { str->append(STRING_WITH_LEN("NULL")); }
|
||||||
Item *safe_charset_converter(CHARSET_INFO *tocs);
|
Item *safe_charset_converter(CHARSET_INFO *tocs);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -1175,10 +1175,10 @@ void Item_func_between::print(String *str)
|
|||||||
str->append('(');
|
str->append('(');
|
||||||
args[0]->print(str);
|
args[0]->print(str);
|
||||||
if (negated)
|
if (negated)
|
||||||
str->append(" not", 4);
|
str->append(STRING_WITH_LEN(" not"));
|
||||||
str->append(" between ", 9);
|
str->append(STRING_WITH_LEN(" between "));
|
||||||
args[1]->print(str);
|
args[1]->print(str);
|
||||||
str->append(" and ", 5);
|
str->append(STRING_WITH_LEN(" and "));
|
||||||
args[2]->print(str);
|
args[2]->print(str);
|
||||||
str->append(')');
|
str->append(')');
|
||||||
}
|
}
|
||||||
@ -1793,7 +1793,7 @@ uint Item_func_case::decimal_precision() const
|
|||||||
|
|
||||||
void Item_func_case::print(String *str)
|
void Item_func_case::print(String *str)
|
||||||
{
|
{
|
||||||
str->append("(case ", 6);
|
str->append(STRING_WITH_LEN("(case "));
|
||||||
if (first_expr_num != -1)
|
if (first_expr_num != -1)
|
||||||
{
|
{
|
||||||
args[first_expr_num]->print(str);
|
args[first_expr_num]->print(str);
|
||||||
@ -1801,19 +1801,19 @@ void Item_func_case::print(String *str)
|
|||||||
}
|
}
|
||||||
for (uint i=0 ; i < ncases ; i+=2)
|
for (uint i=0 ; i < ncases ; i+=2)
|
||||||
{
|
{
|
||||||
str->append("when ", 5);
|
str->append(STRING_WITH_LEN("when "));
|
||||||
args[i]->print(str);
|
args[i]->print(str);
|
||||||
str->append(" then ", 6);
|
str->append(STRING_WITH_LEN(" then "));
|
||||||
args[i+1]->print(str);
|
args[i+1]->print(str);
|
||||||
str->append(' ');
|
str->append(' ');
|
||||||
}
|
}
|
||||||
if (else_expr_num != -1)
|
if (else_expr_num != -1)
|
||||||
{
|
{
|
||||||
str->append("else ", 5);
|
str->append(STRING_WITH_LEN("else "));
|
||||||
args[else_expr_num]->print(str);
|
args[else_expr_num]->print(str);
|
||||||
str->append(' ');
|
str->append(' ');
|
||||||
}
|
}
|
||||||
str->append("end)", 4);
|
str->append(STRING_WITH_LEN("end)"));
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -2419,10 +2419,10 @@ void Item_func_in::print(String *str)
|
|||||||
str->append('(');
|
str->append('(');
|
||||||
args[0]->print(str);
|
args[0]->print(str);
|
||||||
if (negated)
|
if (negated)
|
||||||
str->append(" not", 4);
|
str->append(STRING_WITH_LEN(" not"));
|
||||||
str->append(" in (", 5);
|
str->append(STRING_WITH_LEN(" in ("));
|
||||||
print_args(str, 1);
|
print_args(str, 1);
|
||||||
str->append("))", 2);
|
str->append(STRING_WITH_LEN("))"));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -2894,7 +2894,7 @@ void Item_func_isnotnull::print(String *str)
|
|||||||
{
|
{
|
||||||
str->append('(');
|
str->append('(');
|
||||||
args[0]->print(str);
|
args[0]->print(str);
|
||||||
str->append(" is not null)", 13);
|
str->append(STRING_WITH_LEN(" is not null)"));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -794,9 +794,9 @@ my_decimal *Item_func_numhybrid::val_decimal(my_decimal *decimal_value)
|
|||||||
|
|
||||||
void Item_func_signed::print(String *str)
|
void Item_func_signed::print(String *str)
|
||||||
{
|
{
|
||||||
str->append("cast(", 5);
|
str->append(STRING_WITH_LEN("cast("));
|
||||||
args[0]->print(str);
|
args[0]->print(str);
|
||||||
str->append(" as signed)", 11);
|
str->append(STRING_WITH_LEN(" as signed)"));
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -855,9 +855,9 @@ longlong Item_func_signed::val_int()
|
|||||||
|
|
||||||
void Item_func_unsigned::print(String *str)
|
void Item_func_unsigned::print(String *str)
|
||||||
{
|
{
|
||||||
str->append("cast(", 5);
|
str->append(STRING_WITH_LEN("cast("));
|
||||||
args[0]->print(str);
|
args[0]->print(str);
|
||||||
str->append(" as unsigned)", 13);
|
str->append(STRING_WITH_LEN(" as unsigned)"));
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -927,9 +927,9 @@ my_decimal *Item_decimal_typecast::val_decimal(my_decimal *dec)
|
|||||||
|
|
||||||
void Item_decimal_typecast::print(String *str)
|
void Item_decimal_typecast::print(String *str)
|
||||||
{
|
{
|
||||||
str->append("cast(", 5);
|
str->append(STRING_WITH_LEN("cast("));
|
||||||
args[0]->print(str);
|
args[0]->print(str);
|
||||||
str->append(" as decimal)", 12);
|
str->append(STRING_WITH_LEN(" as decimal)"));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -2234,7 +2234,7 @@ longlong Item_func_locate::val_int()
|
|||||||
|
|
||||||
void Item_func_locate::print(String *str)
|
void Item_func_locate::print(String *str)
|
||||||
{
|
{
|
||||||
str->append("locate(", 7);
|
str->append(STRING_WITH_LEN("locate("));
|
||||||
args[1]->print(str);
|
args[1]->print(str);
|
||||||
str->append(',');
|
str->append(',');
|
||||||
args[0]->print(str);
|
args[0]->print(str);
|
||||||
@ -3297,7 +3297,7 @@ longlong Item_func_benchmark::val_int()
|
|||||||
|
|
||||||
void Item_func_benchmark::print(String *str)
|
void Item_func_benchmark::print(String *str)
|
||||||
{
|
{
|
||||||
str->append("benchmark(", 10);
|
str->append(STRING_WITH_LEN("benchmark("));
|
||||||
char buffer[20];
|
char buffer[20];
|
||||||
// my_charset_bin is good enough for numbers
|
// my_charset_bin is good enough for numbers
|
||||||
String st(buffer, sizeof(buffer), &my_charset_bin);
|
String st(buffer, sizeof(buffer), &my_charset_bin);
|
||||||
@ -3811,9 +3811,9 @@ my_decimal *Item_func_set_user_var::val_decimal(my_decimal *val)
|
|||||||
|
|
||||||
void Item_func_set_user_var::print(String *str)
|
void Item_func_set_user_var::print(String *str)
|
||||||
{
|
{
|
||||||
str->append("(@", 2);
|
str->append(STRING_WITH_LEN("(@"));
|
||||||
str->append(name.str, name.length);
|
str->append(name.str, name.length);
|
||||||
str->append(":=", 2);
|
str->append(STRING_WITH_LEN(":="));
|
||||||
args[0]->print(str);
|
args[0]->print(str);
|
||||||
str->append(')');
|
str->append(')');
|
||||||
}
|
}
|
||||||
@ -3821,9 +3821,9 @@ void Item_func_set_user_var::print(String *str)
|
|||||||
|
|
||||||
void Item_func_set_user_var::print_as_stmt(String *str)
|
void Item_func_set_user_var::print_as_stmt(String *str)
|
||||||
{
|
{
|
||||||
str->append("set @", 5);
|
str->append(STRING_WITH_LEN("set @"));
|
||||||
str->append(name.str, name.length);
|
str->append(name.str, name.length);
|
||||||
str->append(":=", 2);
|
str->append(STRING_WITH_LEN(":="));
|
||||||
args[0]->print(str);
|
args[0]->print(str);
|
||||||
str->append(')');
|
str->append(')');
|
||||||
}
|
}
|
||||||
@ -4054,7 +4054,7 @@ enum Item_result Item_func_get_user_var::result_type() const
|
|||||||
|
|
||||||
void Item_func_get_user_var::print(String *str)
|
void Item_func_get_user_var::print(String *str)
|
||||||
{
|
{
|
||||||
str->append("(@", 2);
|
str->append(STRING_WITH_LEN("(@"));
|
||||||
str->append(name.str,name.length);
|
str->append(name.str,name.length);
|
||||||
str->append(')');
|
str->append(')');
|
||||||
}
|
}
|
||||||
@ -4479,15 +4479,15 @@ double Item_func_match::val_real()
|
|||||||
|
|
||||||
void Item_func_match::print(String *str)
|
void Item_func_match::print(String *str)
|
||||||
{
|
{
|
||||||
str->append("(match ", 7);
|
str->append(STRING_WITH_LEN("(match "));
|
||||||
print_args(str, 1);
|
print_args(str, 1);
|
||||||
str->append(" against (", 10);
|
str->append(STRING_WITH_LEN(" against ("));
|
||||||
args[0]->print(str);
|
args[0]->print(str);
|
||||||
if (flags & FT_BOOL)
|
if (flags & FT_BOOL)
|
||||||
str->append(" in boolean mode", 16);
|
str->append(STRING_WITH_LEN(" in boolean mode"));
|
||||||
else if (flags & FT_EXPAND)
|
else if (flags & FT_EXPAND)
|
||||||
str->append(" with query expansion", 21);
|
str->append(STRING_WITH_LEN(" with query expansion"));
|
||||||
str->append("))", 2);
|
str->append(STRING_WITH_LEN("))"));
|
||||||
}
|
}
|
||||||
|
|
||||||
longlong Item_func_bit_xor::val_int()
|
longlong Item_func_bit_xor::val_int()
|
||||||
|
@ -1790,7 +1790,7 @@ String *Item_func_format::val_str(String *str)
|
|||||||
|
|
||||||
void Item_func_format::print(String *str)
|
void Item_func_format::print(String *str)
|
||||||
{
|
{
|
||||||
str->append("format(", 7);
|
str->append(STRING_WITH_LEN("format("));
|
||||||
args[0]->print(str);
|
args[0]->print(str);
|
||||||
str->append(',');
|
str->append(',');
|
||||||
// my_charset_bin is good enough for numbers
|
// my_charset_bin is good enough for numbers
|
||||||
@ -1950,7 +1950,7 @@ String *Item_func_make_set::val_str(String *str)
|
|||||||
|
|
||||||
void Item_func_make_set::print(String *str)
|
void Item_func_make_set::print(String *str)
|
||||||
{
|
{
|
||||||
str->append("make_set(", 9);
|
str->append(STRING_WITH_LEN("make_set("));
|
||||||
item->print(str);
|
item->print(str);
|
||||||
if (arg_count)
|
if (arg_count)
|
||||||
{
|
{
|
||||||
@ -2331,9 +2331,9 @@ void Item_func_conv_charset::fix_length_and_dec()
|
|||||||
|
|
||||||
void Item_func_conv_charset::print(String *str)
|
void Item_func_conv_charset::print(String *str)
|
||||||
{
|
{
|
||||||
str->append("convert(", 8);
|
str->append(STRING_WITH_LEN("convert("));
|
||||||
args[0]->print(str);
|
args[0]->print(str);
|
||||||
str->append(" using ", 7);
|
str->append(STRING_WITH_LEN(" using "));
|
||||||
str->append(conv_charset->csname);
|
str->append(conv_charset->csname);
|
||||||
str->append(')');
|
str->append(')');
|
||||||
}
|
}
|
||||||
@ -2403,7 +2403,7 @@ void Item_func_set_collation::print(String *str)
|
|||||||
{
|
{
|
||||||
str->append('(');
|
str->append('(');
|
||||||
args[0]->print(str);
|
args[0]->print(str);
|
||||||
str->append(" collate ", 9);
|
str->append(STRING_WITH_LEN(" collate "));
|
||||||
DBUG_ASSERT(args[1]->basic_const_item() &&
|
DBUG_ASSERT(args[1]->basic_const_item() &&
|
||||||
args[1]->type() == Item::STRING_ITEM);
|
args[1]->type() == Item::STRING_ITEM);
|
||||||
args[1]->str_value.print(str);
|
args[1]->str_value.print(str);
|
||||||
@ -2523,9 +2523,9 @@ String *Item_func_unhex::val_str(String *str)
|
|||||||
|
|
||||||
void Item_func_binary::print(String *str)
|
void Item_func_binary::print(String *str)
|
||||||
{
|
{
|
||||||
str->append("cast(", 5);
|
str->append(STRING_WITH_LEN("cast("));
|
||||||
args[0]->print(str);
|
args[0]->print(str);
|
||||||
str->append(" as binary)", 11);
|
str->append(STRING_WITH_LEN(" as binary)"));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -2630,7 +2630,7 @@ String* Item_func_export_set::val_str(String* str)
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 3:
|
case 3:
|
||||||
sep_buf.set(",", 1, default_charset());
|
sep_buf.set(STRING_WITH_LEN(","), default_charset());
|
||||||
sep = &sep_buf;
|
sep = &sep_buf;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
@ -2745,7 +2745,8 @@ String *Item_func_quote::val_str(String *str)
|
|||||||
uint arg_length, new_length;
|
uint arg_length, new_length;
|
||||||
if (!arg) // Null argument
|
if (!arg) // Null argument
|
||||||
{
|
{
|
||||||
str->copy("NULL", 4, collation.collation); // Return the string 'NULL'
|
/* Return the string 'NULL' */
|
||||||
|
str->copy(STRING_WITH_LEN("NULL"), collation.collation);
|
||||||
null_value= 0;
|
null_value= 0;
|
||||||
return str;
|
return str;
|
||||||
}
|
}
|
||||||
|
@ -533,7 +533,7 @@ Item_exists_subselect::Item_exists_subselect(st_select_lex *select_lex):
|
|||||||
|
|
||||||
void Item_exists_subselect::print(String *str)
|
void Item_exists_subselect::print(String *str)
|
||||||
{
|
{
|
||||||
str->append("exists", 6);
|
str->append(STRING_WITH_LEN("exists"));
|
||||||
Item_subselect::print(str);
|
Item_subselect::print(str);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1339,11 +1339,11 @@ err:
|
|||||||
void Item_in_subselect::print(String *str)
|
void Item_in_subselect::print(String *str)
|
||||||
{
|
{
|
||||||
if (transformed)
|
if (transformed)
|
||||||
str->append("<exists>", 8);
|
str->append(STRING_WITH_LEN("<exists>"));
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
left_expr->print(str);
|
left_expr->print(str);
|
||||||
str->append(" in ", 4);
|
str->append(STRING_WITH_LEN(" in "));
|
||||||
}
|
}
|
||||||
Item_subselect::print(str);
|
Item_subselect::print(str);
|
||||||
}
|
}
|
||||||
@ -1362,7 +1362,7 @@ Item_allany_subselect::select_transformer(JOIN *join)
|
|||||||
void Item_allany_subselect::print(String *str)
|
void Item_allany_subselect::print(String *str)
|
||||||
{
|
{
|
||||||
if (transformed)
|
if (transformed)
|
||||||
str->append("<exists>", 8);
|
str->append(STRING_WITH_LEN("<exists>"));
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
left_expr->print(str);
|
left_expr->print(str);
|
||||||
@ -1794,16 +1794,16 @@ void subselect_union_engine::print(String *str)
|
|||||||
|
|
||||||
void subselect_uniquesubquery_engine::print(String *str)
|
void subselect_uniquesubquery_engine::print(String *str)
|
||||||
{
|
{
|
||||||
str->append("<primary_index_lookup>(", 23);
|
str->append(STRING_WITH_LEN("<primary_index_lookup>("));
|
||||||
tab->ref.items[0]->print(str);
|
tab->ref.items[0]->print(str);
|
||||||
str->append(" in ", 4);
|
str->append(STRING_WITH_LEN(" in "));
|
||||||
str->append(tab->table->s->table_name);
|
str->append(tab->table->s->table_name);
|
||||||
KEY *key_info= tab->table->key_info+ tab->ref.key;
|
KEY *key_info= tab->table->key_info+ tab->ref.key;
|
||||||
str->append(" on ", 4);
|
str->append(STRING_WITH_LEN(" on "));
|
||||||
str->append(key_info->name);
|
str->append(key_info->name);
|
||||||
if (cond)
|
if (cond)
|
||||||
{
|
{
|
||||||
str->append(" where ", 7);
|
str->append(STRING_WITH_LEN(" where "));
|
||||||
cond->print(str);
|
cond->print(str);
|
||||||
}
|
}
|
||||||
str->append(')');
|
str->append(')');
|
||||||
@ -1812,18 +1812,18 @@ void subselect_uniquesubquery_engine::print(String *str)
|
|||||||
|
|
||||||
void subselect_indexsubquery_engine::print(String *str)
|
void subselect_indexsubquery_engine::print(String *str)
|
||||||
{
|
{
|
||||||
str->append("<index_lookup>(", 15);
|
str->append(STRING_WITH_LEN("<index_lookup>("));
|
||||||
tab->ref.items[0]->print(str);
|
tab->ref.items[0]->print(str);
|
||||||
str->append(" in ", 4);
|
str->append(STRING_WITH_LEN(" in "));
|
||||||
str->append(tab->table->s->table_name);
|
str->append(tab->table->s->table_name);
|
||||||
KEY *key_info= tab->table->key_info+ tab->ref.key;
|
KEY *key_info= tab->table->key_info+ tab->ref.key;
|
||||||
str->append(" on ", 4);
|
str->append(STRING_WITH_LEN(" on "));
|
||||||
str->append(key_info->name);
|
str->append(key_info->name);
|
||||||
if (check_null)
|
if (check_null)
|
||||||
str->append(" checking NULL", 14);
|
str->append(STRING_WITH_LEN(" checking NULL"));
|
||||||
if (cond)
|
if (cond)
|
||||||
{
|
{
|
||||||
str->append(" where ", 7);
|
str->append(STRING_WITH_LEN(" where "));
|
||||||
cond->print(str);
|
cond->print(str);
|
||||||
}
|
}
|
||||||
str->append(')');
|
str->append(')');
|
||||||
|
@ -3156,9 +3156,9 @@ String* Item_func_group_concat::val_str(String* str)
|
|||||||
|
|
||||||
void Item_func_group_concat::print(String *str)
|
void Item_func_group_concat::print(String *str)
|
||||||
{
|
{
|
||||||
str->append("group_concat(", 13);
|
str->append(STRING_WITH_LEN("group_concat("));
|
||||||
if (distinct)
|
if (distinct)
|
||||||
str->append("distinct ", 9);
|
str->append(STRING_WITH_LEN("distinct "));
|
||||||
for (uint i= 0; i < arg_count_field; i++)
|
for (uint i= 0; i < arg_count_field; i++)
|
||||||
{
|
{
|
||||||
if (i)
|
if (i)
|
||||||
@ -3167,19 +3167,19 @@ void Item_func_group_concat::print(String *str)
|
|||||||
}
|
}
|
||||||
if (arg_count_order)
|
if (arg_count_order)
|
||||||
{
|
{
|
||||||
str->append(" order by ", 10);
|
str->append(STRING_WITH_LEN(" order by "));
|
||||||
for (uint i= 0 ; i < arg_count_order ; i++)
|
for (uint i= 0 ; i < arg_count_order ; i++)
|
||||||
{
|
{
|
||||||
if (i)
|
if (i)
|
||||||
str->append(',');
|
str->append(',');
|
||||||
(*order[i]->item)->print(str);
|
(*order[i]->item)->print(str);
|
||||||
if (order[i]->asc)
|
if (order[i]->asc)
|
||||||
str->append(" ASC");
|
str->append(STRING_WITH_LEN(" ASC"));
|
||||||
else
|
else
|
||||||
str->append(" DESC");
|
str->append(STRING_WITH_LEN(" DESC"));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
str->append(" separator \'", 12);
|
str->append(STRING_WITH_LEN(" separator \'"));
|
||||||
str->append(*separator);
|
str->append(*separator);
|
||||||
str->append("\')", 2);
|
str->append(STRING_WITH_LEN("\')"));
|
||||||
}
|
}
|
||||||
|
@ -506,7 +506,7 @@ bool make_date_time(DATE_TIME_FORMAT *format, TIME *l_time,
|
|||||||
str->set_charset(&my_charset_bin);
|
str->set_charset(&my_charset_bin);
|
||||||
|
|
||||||
if (l_time->neg)
|
if (l_time->neg)
|
||||||
str->append("-", 1);
|
str->append('-');
|
||||||
|
|
||||||
end= (ptr= format->format.str) + format->format.length;
|
end= (ptr= format->format.str) + format->format.length;
|
||||||
for (; ptr != end ; ptr++)
|
for (; ptr != end ; ptr++)
|
||||||
@ -546,21 +546,21 @@ bool make_date_time(DATE_TIME_FORMAT *format, TIME *l_time,
|
|||||||
length= int10_to_str(l_time->day, intbuff, 10) - intbuff;
|
length= int10_to_str(l_time->day, intbuff, 10) - intbuff;
|
||||||
str->append_with_prefill(intbuff, length, 1, '0');
|
str->append_with_prefill(intbuff, length, 1, '0');
|
||||||
if (l_time->day >= 10 && l_time->day <= 19)
|
if (l_time->day >= 10 && l_time->day <= 19)
|
||||||
str->append("th", 2);
|
str->append(STRING_WITH_LEN("th"));
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
switch (l_time->day %10) {
|
switch (l_time->day %10) {
|
||||||
case 1:
|
case 1:
|
||||||
str->append("st",2);
|
str->append(STRING_WITH_LEN("st"));
|
||||||
break;
|
break;
|
||||||
case 2:
|
case 2:
|
||||||
str->append("nd",2);
|
str->append(STRING_WITH_LEN("nd"));
|
||||||
break;
|
break;
|
||||||
case 3:
|
case 3:
|
||||||
str->append("rd",2);
|
str->append(STRING_WITH_LEN("rd"));
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
str->append("th",2);
|
str->append(STRING_WITH_LEN("th"));
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -2142,9 +2142,9 @@ void Item_date_add_interval::print(String *str)
|
|||||||
|
|
||||||
void Item_extract::print(String *str)
|
void Item_extract::print(String *str)
|
||||||
{
|
{
|
||||||
str->append("extract(", 8);
|
str->append(STRING_WITH_LEN("extract("));
|
||||||
str->append(interval_names[int_type]);
|
str->append(interval_names[int_type]);
|
||||||
str->append(" from ", 6);
|
str->append(STRING_WITH_LEN(" from "));
|
||||||
args[0]->print(str);
|
args[0]->print(str);
|
||||||
str->append(')');
|
str->append(')');
|
||||||
}
|
}
|
||||||
@ -2286,9 +2286,9 @@ bool Item_char_typecast::eq(const Item *item, bool binary_cmp) const
|
|||||||
|
|
||||||
void Item_typecast::print(String *str)
|
void Item_typecast::print(String *str)
|
||||||
{
|
{
|
||||||
str->append("cast(", 5);
|
str->append(STRING_WITH_LEN("cast("));
|
||||||
args[0]->print(str);
|
args[0]->print(str);
|
||||||
str->append(" as ", 4);
|
str->append(STRING_WITH_LEN(" as "));
|
||||||
str->append(cast_type());
|
str->append(cast_type());
|
||||||
str->append(')');
|
str->append(')');
|
||||||
}
|
}
|
||||||
@ -2296,9 +2296,9 @@ void Item_typecast::print(String *str)
|
|||||||
|
|
||||||
void Item_char_typecast::print(String *str)
|
void Item_char_typecast::print(String *str)
|
||||||
{
|
{
|
||||||
str->append("cast(", 5);
|
str->append(STRING_WITH_LEN("cast("));
|
||||||
args[0]->print(str);
|
args[0]->print(str);
|
||||||
str->append(" as char", 8);
|
str->append(STRING_WITH_LEN(" as char"));
|
||||||
if (cast_length >= 0)
|
if (cast_length >= 0)
|
||||||
{
|
{
|
||||||
str->append('(');
|
str->append('(');
|
||||||
@ -2311,7 +2311,7 @@ void Item_char_typecast::print(String *str)
|
|||||||
}
|
}
|
||||||
if (cast_cs)
|
if (cast_cs)
|
||||||
{
|
{
|
||||||
str->append(" charset ", 9);
|
str->append(STRING_WITH_LEN(" charset "));
|
||||||
str->append(cast_cs->csname);
|
str->append(cast_cs->csname);
|
||||||
}
|
}
|
||||||
str->append(')');
|
str->append(')');
|
||||||
@ -2624,14 +2624,14 @@ void Item_func_add_time::print(String *str)
|
|||||||
if (is_date)
|
if (is_date)
|
||||||
{
|
{
|
||||||
DBUG_ASSERT(sign > 0);
|
DBUG_ASSERT(sign > 0);
|
||||||
str->append("timestamp(", 10);
|
str->append(STRING_WITH_LEN("timestamp("));
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (sign > 0)
|
if (sign > 0)
|
||||||
str->append("addtime(", 8);
|
str->append(STRING_WITH_LEN("addtime("));
|
||||||
else
|
else
|
||||||
str->append("subtime(", 8);
|
str->append(STRING_WITH_LEN("subtime("));
|
||||||
}
|
}
|
||||||
args[0]->print(str);
|
args[0]->print(str);
|
||||||
str->append(',');
|
str->append(',');
|
||||||
@ -2840,31 +2840,31 @@ void Item_func_timestamp_diff::print(String *str)
|
|||||||
|
|
||||||
switch (int_type) {
|
switch (int_type) {
|
||||||
case INTERVAL_YEAR:
|
case INTERVAL_YEAR:
|
||||||
str->append("YEAR");
|
str->append(STRING_WITH_LEN("YEAR"));
|
||||||
break;
|
break;
|
||||||
case INTERVAL_QUARTER:
|
case INTERVAL_QUARTER:
|
||||||
str->append("QUARTER");
|
str->append(STRING_WITH_LEN("QUARTER"));
|
||||||
break;
|
break;
|
||||||
case INTERVAL_MONTH:
|
case INTERVAL_MONTH:
|
||||||
str->append("MONTH");
|
str->append(STRING_WITH_LEN("MONTH"));
|
||||||
break;
|
break;
|
||||||
case INTERVAL_WEEK:
|
case INTERVAL_WEEK:
|
||||||
str->append("WEEK");
|
str->append(STRING_WITH_LEN("WEEK"));
|
||||||
break;
|
break;
|
||||||
case INTERVAL_DAY:
|
case INTERVAL_DAY:
|
||||||
str->append("DAY");
|
str->append(STRING_WITH_LEN("DAY"));
|
||||||
break;
|
break;
|
||||||
case INTERVAL_HOUR:
|
case INTERVAL_HOUR:
|
||||||
str->append("HOUR");
|
str->append(STRING_WITH_LEN("HOUR"));
|
||||||
break;
|
break;
|
||||||
case INTERVAL_MINUTE:
|
case INTERVAL_MINUTE:
|
||||||
str->append("MINUTE");
|
str->append(STRING_WITH_LEN("MINUTE"));
|
||||||
break;
|
break;
|
||||||
case INTERVAL_SECOND:
|
case INTERVAL_SECOND:
|
||||||
str->append("SECOND");
|
str->append(STRING_WITH_LEN("SECOND"));
|
||||||
break;
|
break;
|
||||||
case INTERVAL_MICROSECOND:
|
case INTERVAL_MICROSECOND:
|
||||||
str->append("SECOND_FRAC");
|
str->append(STRING_WITH_LEN("SECOND_FRAC"));
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
@ -2920,13 +2920,13 @@ void Item_func_get_format::print(String *str)
|
|||||||
|
|
||||||
switch (type) {
|
switch (type) {
|
||||||
case MYSQL_TIMESTAMP_DATE:
|
case MYSQL_TIMESTAMP_DATE:
|
||||||
str->append("DATE, ");
|
str->append(STRING_WITH_LEN("DATE, "));
|
||||||
break;
|
break;
|
||||||
case MYSQL_TIMESTAMP_DATETIME:
|
case MYSQL_TIMESTAMP_DATETIME:
|
||||||
str->append("DATETIME, ");
|
str->append(STRING_WITH_LEN("DATETIME, "));
|
||||||
break;
|
break;
|
||||||
case MYSQL_TIMESTAMP_TIME:
|
case MYSQL_TIMESTAMP_TIME:
|
||||||
str->append("TIME, ");
|
str->append(STRING_WITH_LEN("TIME, "));
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
DBUG_ASSERT(0);
|
DBUG_ASSERT(0);
|
||||||
|
@ -29,7 +29,7 @@ public:
|
|||||||
:Item_real_func(list) {}
|
:Item_real_func(list) {}
|
||||||
double val_real() { DBUG_ASSERT(fixed == 1); return 0.0; }
|
double val_real() { DBUG_ASSERT(fixed == 1); return 0.0; }
|
||||||
void fix_length_and_dec() { decimals=0; max_length=6; }
|
void fix_length_and_dec() { decimals=0; max_length=6; }
|
||||||
void print(String *str) { str->append("0.0", 3); }
|
void print(String *str) { str->append(STRING_WITH_LEN("0.0")); }
|
||||||
const char *func_name() const { return "unique_users"; }
|
const char *func_name() const { return "unique_users"; }
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -57,7 +57,7 @@ public:
|
|||||||
{
|
{
|
||||||
return new Item_sum_unique_users(thd, this);
|
return new Item_sum_unique_users(thd, this);
|
||||||
}
|
}
|
||||||
void print(String *str) { str->append("0.0", 3); }
|
void print(String *str) { str->append(STRING_WITH_LEN("0.0")); }
|
||||||
Field *create_tmp_field(bool group, TABLE *table, uint convert_blob_length);
|
Field *create_tmp_field(bool group, TABLE *table, uint convert_blob_length);
|
||||||
const char *func_name() const { return "sum_unique_users"; }
|
const char *func_name() const { return "sum_unique_users"; }
|
||||||
};
|
};
|
||||||
|
@ -322,7 +322,7 @@ void key_unpack(String *to,TABLE *table,uint idx)
|
|||||||
{
|
{
|
||||||
if (table->record[0][key_part->null_offset] & key_part->null_bit)
|
if (table->record[0][key_part->null_offset] & key_part->null_bit)
|
||||||
{
|
{
|
||||||
to->append("NULL", 4);
|
to->append(STRING_WITH_LEN("NULL"));
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -334,7 +334,7 @@ void key_unpack(String *to,TABLE *table,uint idx)
|
|||||||
to->append(tmp);
|
to->append(tmp);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
to->append("???", 3);
|
to->append(STRING_WITH_LEN("???"));
|
||||||
}
|
}
|
||||||
DBUG_VOID_RETURN;
|
DBUG_VOID_RETURN;
|
||||||
}
|
}
|
||||||
|
@ -131,7 +131,7 @@ static int binlog_commit(THD *thd, bool all)
|
|||||||
// we're here because trans_log was flushed in MYSQL_LOG::log()
|
// we're here because trans_log was flushed in MYSQL_LOG::log()
|
||||||
DBUG_RETURN(0);
|
DBUG_RETURN(0);
|
||||||
}
|
}
|
||||||
Query_log_event qev(thd, "COMMIT", 6, TRUE, FALSE);
|
Query_log_event qev(thd, STRING_WITH_LEN("COMMIT"), TRUE, FALSE);
|
||||||
DBUG_RETURN(binlog_end_trans(thd, trans_log, &qev));
|
DBUG_RETURN(binlog_end_trans(thd, trans_log, &qev));
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -155,7 +155,7 @@ static int binlog_rollback(THD *thd, bool all)
|
|||||||
*/
|
*/
|
||||||
if (unlikely(thd->options & OPTION_STATUS_NO_TRANS_UPDATE))
|
if (unlikely(thd->options & OPTION_STATUS_NO_TRANS_UPDATE))
|
||||||
{
|
{
|
||||||
Query_log_event qev(thd, "ROLLBACK", 8, TRUE, FALSE);
|
Query_log_event qev(thd, STRING_WITH_LEN("ROLLBACK"), TRUE, FALSE);
|
||||||
error= binlog_end_trans(thd, trans_log, &qev);
|
error= binlog_end_trans(thd, trans_log, &qev);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@ -1821,7 +1821,7 @@ bool MYSQL_LOG::write(THD *thd, IO_CACHE *cache, Log_event *commit_event)
|
|||||||
*/
|
*/
|
||||||
if (thd->options & (OPTION_NOT_AUTOCOMMIT | OPTION_BEGIN))
|
if (thd->options & (OPTION_NOT_AUTOCOMMIT | OPTION_BEGIN))
|
||||||
{
|
{
|
||||||
Query_log_event qinfo(thd, "BEGIN", 5, TRUE, FALSE);
|
Query_log_event qinfo(thd, STRING_WITH_LEN("BEGIN"), TRUE, FALSE);
|
||||||
/*
|
/*
|
||||||
Imagine this is rollback due to net timeout, after all statements of
|
Imagine this is rollback due to net timeout, after all statements of
|
||||||
the transaction succeeded. Then we want a zero-error code in BEGIN.
|
the transaction succeeded. Then we want a zero-error code in BEGIN.
|
||||||
|
@ -160,7 +160,7 @@ static void cleanup_load_tmpdir()
|
|||||||
we cannot meet Start_log event in the middle of events from one
|
we cannot meet Start_log event in the middle of events from one
|
||||||
LOAD DATA.
|
LOAD DATA.
|
||||||
*/
|
*/
|
||||||
p= strmake(prefbuf,"SQL_LOAD-",9);
|
p= strmake(prefbuf, STRING_WITH_LEN("SQL_LOAD-"));
|
||||||
p= int10_to_str(::server_id, p, 10);
|
p= int10_to_str(::server_id, p, 10);
|
||||||
*(p++)= '-';
|
*(p++)= '-';
|
||||||
*p= 0;
|
*p= 0;
|
||||||
@ -2991,7 +2991,7 @@ void Rotate_log_event::pack_info(Protocol *protocol)
|
|||||||
String tmp(buf1, sizeof(buf1), log_cs);
|
String tmp(buf1, sizeof(buf1), log_cs);
|
||||||
tmp.length(0);
|
tmp.length(0);
|
||||||
tmp.append(new_log_ident, ident_len);
|
tmp.append(new_log_ident, ident_len);
|
||||||
tmp.append(";pos=");
|
tmp.append(STRING_WITH_LEN(";pos="));
|
||||||
tmp.append(llstr(pos,buf));
|
tmp.append(llstr(pos,buf));
|
||||||
protocol->store(tmp.ptr(), tmp.length(), &my_charset_bin);
|
protocol->store(tmp.ptr(), tmp.length(), &my_charset_bin);
|
||||||
}
|
}
|
||||||
@ -4163,7 +4163,7 @@ int Create_file_log_event::exec_event(struct st_relay_log_info* rli)
|
|||||||
bzero((char*)&file, sizeof(file));
|
bzero((char*)&file, sizeof(file));
|
||||||
p = slave_load_file_stem(fname_buf, file_id, server_id);
|
p = slave_load_file_stem(fname_buf, file_id, server_id);
|
||||||
strmov(p, ".info"); // strmov takes less code than memcpy
|
strmov(p, ".info"); // strmov takes less code than memcpy
|
||||||
strnmov(proc_info, "Making temp file ", 17); // no end 0
|
strnmov(proc_info, STRING_WITH_LEN("Making temp file ")); // no end 0
|
||||||
thd->proc_info= proc_info;
|
thd->proc_info= proc_info;
|
||||||
my_delete(fname_buf, MYF(0)); // old copy may exist already
|
my_delete(fname_buf, MYF(0)); // old copy may exist already
|
||||||
if ((fd= my_create(fname_buf, CREATE_MODE,
|
if ((fd= my_create(fname_buf, CREATE_MODE,
|
||||||
@ -4332,7 +4332,7 @@ int Append_block_log_event::exec_event(struct st_relay_log_info* rli)
|
|||||||
DBUG_ENTER("Append_block_log_event::exec_event");
|
DBUG_ENTER("Append_block_log_event::exec_event");
|
||||||
|
|
||||||
memcpy(p, ".data", 6);
|
memcpy(p, ".data", 6);
|
||||||
strnmov(proc_info, "Making temp file ", 17); // no end 0
|
strnmov(proc_info, STRING_WITH_LEN("Making temp file ")); // no end 0
|
||||||
thd->proc_info= proc_info;
|
thd->proc_info= proc_info;
|
||||||
if (get_create_or_append())
|
if (get_create_or_append())
|
||||||
{
|
{
|
||||||
@ -4816,23 +4816,23 @@ Execute_load_query_log_event::exec_event(struct st_relay_log_info* rli)
|
|||||||
p= buf;
|
p= buf;
|
||||||
memcpy(p, query, fn_pos_start);
|
memcpy(p, query, fn_pos_start);
|
||||||
p+= fn_pos_start;
|
p+= fn_pos_start;
|
||||||
fname= (p= strmake(p, " INFILE \'", 9));
|
fname= (p= strmake(p, STRING_WITH_LEN(" INFILE \'")));
|
||||||
p= slave_load_file_stem(p, file_id, server_id);
|
p= slave_load_file_stem(p, file_id, server_id);
|
||||||
fname_end= (p= strmake(p, ".data", 5));
|
fname_end= (p= strmake(p, STRING_WITH_LEN(".data")));
|
||||||
*(p++)='\'';
|
*(p++)='\'';
|
||||||
switch (dup_handling)
|
switch (dup_handling)
|
||||||
{
|
{
|
||||||
case LOAD_DUP_IGNORE:
|
case LOAD_DUP_IGNORE:
|
||||||
p= strmake(p, " IGNORE", 7);
|
p= strmake(p, STRING_WITH_LEN(" IGNORE"));
|
||||||
break;
|
break;
|
||||||
case LOAD_DUP_REPLACE:
|
case LOAD_DUP_REPLACE:
|
||||||
p= strmake(p, " REPLACE", 8);
|
p= strmake(p, STRING_WITH_LEN(" REPLACE"));
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
/* Ordinary load data */
|
/* Ordinary load data */
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
p= strmake(p, " INTO", 5);
|
p= strmake(p, STRING_WITH_LEN(" INTO"));
|
||||||
p= strmake(p, query+fn_pos_end, q_len-fn_pos_end);
|
p= strmake(p, query+fn_pos_end, q_len-fn_pos_end);
|
||||||
|
|
||||||
error= Query_log_event::exec_event(rli, buf, p-buf);
|
error= Query_log_event::exec_event(rli, buf, p-buf);
|
||||||
|
@ -496,6 +496,8 @@ pthread_cond_t COND_refresh,COND_thread_count;
|
|||||||
pthread_t signal_thread;
|
pthread_t signal_thread;
|
||||||
pthread_attr_t connection_attrib;
|
pthread_attr_t connection_attrib;
|
||||||
|
|
||||||
|
File_parser_dummy_hook file_parser_dummy_hook;
|
||||||
|
|
||||||
/* replication parameters, if master_host is not NULL, we are a slave */
|
/* replication parameters, if master_host is not NULL, we are a slave */
|
||||||
uint master_port= MYSQL_PORT, master_connect_retry = 60;
|
uint master_port= MYSQL_PORT, master_connect_retry = 60;
|
||||||
uint report_port= MYSQL_PORT;
|
uint report_port= MYSQL_PORT;
|
||||||
|
@ -6691,7 +6691,7 @@ void QUICK_INDEX_MERGE_SELECT::add_info_string(String *str)
|
|||||||
QUICK_RANGE_SELECT *quick;
|
QUICK_RANGE_SELECT *quick;
|
||||||
bool first= TRUE;
|
bool first= TRUE;
|
||||||
List_iterator_fast<QUICK_RANGE_SELECT> it(quick_selects);
|
List_iterator_fast<QUICK_RANGE_SELECT> it(quick_selects);
|
||||||
str->append("sort_union(");
|
str->append(STRING_WITH_LEN("sort_union("));
|
||||||
while ((quick= it++))
|
while ((quick= it++))
|
||||||
{
|
{
|
||||||
if (!first)
|
if (!first)
|
||||||
@ -6713,7 +6713,7 @@ void QUICK_ROR_INTERSECT_SELECT::add_info_string(String *str)
|
|||||||
bool first= TRUE;
|
bool first= TRUE;
|
||||||
QUICK_RANGE_SELECT *quick;
|
QUICK_RANGE_SELECT *quick;
|
||||||
List_iterator_fast<QUICK_RANGE_SELECT> it(quick_selects);
|
List_iterator_fast<QUICK_RANGE_SELECT> it(quick_selects);
|
||||||
str->append("intersect(");
|
str->append(STRING_WITH_LEN("intersect("));
|
||||||
while ((quick= it++))
|
while ((quick= it++))
|
||||||
{
|
{
|
||||||
KEY *key_info= head->key_info + quick->index;
|
KEY *key_info= head->key_info + quick->index;
|
||||||
@ -6737,7 +6737,7 @@ void QUICK_ROR_UNION_SELECT::add_info_string(String *str)
|
|||||||
bool first= TRUE;
|
bool first= TRUE;
|
||||||
QUICK_SELECT_I *quick;
|
QUICK_SELECT_I *quick;
|
||||||
List_iterator_fast<QUICK_SELECT_I> it(quick_selects);
|
List_iterator_fast<QUICK_SELECT_I> it(quick_selects);
|
||||||
str->append("union(");
|
str->append(STRING_WITH_LEN("union("));
|
||||||
while ((quick= it++))
|
while ((quick= it++))
|
||||||
{
|
{
|
||||||
if (!first)
|
if (!first)
|
||||||
@ -8868,7 +8868,7 @@ static void print_sel_tree(PARAM *param, SEL_TREE *tree, key_map *tree_map,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (!tmp.length())
|
if (!tmp.length())
|
||||||
tmp.append("(empty)");
|
tmp.append(STRING_WITH_LEN("(empty)"));
|
||||||
|
|
||||||
DBUG_PRINT("info", ("SEL_TREE %p (%s) scans:%s", tree, msg, tmp.ptr()));
|
DBUG_PRINT("info", ("SEL_TREE %p (%s) scans:%s", tree, msg, tmp.ptr()));
|
||||||
|
|
||||||
@ -8894,7 +8894,7 @@ static void print_ror_scans_arr(TABLE *table, const char *msg,
|
|||||||
tmp.append(table->key_info[(*start)->keynr].name);
|
tmp.append(table->key_info[(*start)->keynr].name);
|
||||||
}
|
}
|
||||||
if (!tmp.length())
|
if (!tmp.length())
|
||||||
tmp.append("(empty)");
|
tmp.append(STRING_WITH_LEN("(empty)"));
|
||||||
DBUG_PRINT("info", ("ROR key scans (%s): %s", msg, tmp.ptr()));
|
DBUG_PRINT("info", ("ROR key scans (%s): %s", msg, tmp.ptr()));
|
||||||
DBUG_VOID_RETURN;
|
DBUG_VOID_RETURN;
|
||||||
}
|
}
|
||||||
|
@ -50,23 +50,23 @@ write_escaped_string(IO_CACHE *file, LEX_STRING *val_s)
|
|||||||
*/
|
*/
|
||||||
switch(*ptr) {
|
switch(*ptr) {
|
||||||
case '\\': // escape character
|
case '\\': // escape character
|
||||||
if (my_b_append(file, (const byte *)"\\\\", 2))
|
if (my_b_append(file, (const byte *)STRING_WITH_LEN("\\\\")))
|
||||||
return TRUE;
|
return TRUE;
|
||||||
break;
|
break;
|
||||||
case '\n': // parameter value delimiter
|
case '\n': // parameter value delimiter
|
||||||
if (my_b_append(file, (const byte *)"\\n", 2))
|
if (my_b_append(file, (const byte *)STRING_WITH_LEN("\\n")))
|
||||||
return TRUE;
|
return TRUE;
|
||||||
break;
|
break;
|
||||||
case '\0': // problem for some string processing utilities
|
case '\0': // problem for some string processing utilities
|
||||||
if (my_b_append(file, (const byte *)"\\0", 2))
|
if (my_b_append(file, (const byte *)STRING_WITH_LEN("\\0")))
|
||||||
return TRUE;
|
return TRUE;
|
||||||
break;
|
break;
|
||||||
case 26: // problem for windows utilities (Ctrl-Z)
|
case 26: // problem for windows utilities (Ctrl-Z)
|
||||||
if (my_b_append(file, (const byte *)"\\z", 2))
|
if (my_b_append(file, (const byte *)STRING_WITH_LEN("\\z")))
|
||||||
return TRUE;
|
return TRUE;
|
||||||
break;
|
break;
|
||||||
case '\'': // list of string delimiter
|
case '\'': // list of string delimiter
|
||||||
if (my_b_append(file, (const byte *)"\\\'", 2))
|
if (my_b_append(file, (const byte *)STRING_WITH_LEN("\\\'")))
|
||||||
return TRUE;
|
return TRUE;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
@ -155,10 +155,10 @@ write_parameter(IO_CACHE *file, gptr base, File_option *parameter,
|
|||||||
while ((str= it++))
|
while ((str= it++))
|
||||||
{
|
{
|
||||||
// We need ' ' after string to detect list continuation
|
// We need ' ' after string to detect list continuation
|
||||||
if ((!first && my_b_append(file, (const byte *)" ", 1)) ||
|
if ((!first && my_b_append(file, (const byte *)STRING_WITH_LEN(" "))) ||
|
||||||
my_b_append(file, (const byte *)"\'", 1) ||
|
my_b_append(file, (const byte *)STRING_WITH_LEN("\'")) ||
|
||||||
write_escaped_string(file, str) ||
|
write_escaped_string(file, str) ||
|
||||||
my_b_append(file, (const byte *)"\'", 1))
|
my_b_append(file, (const byte *)STRING_WITH_LEN("\'")))
|
||||||
{
|
{
|
||||||
DBUG_RETURN(TRUE);
|
DBUG_RETURN(TRUE);
|
||||||
}
|
}
|
||||||
@ -176,7 +176,7 @@ write_parameter(IO_CACHE *file, gptr base, File_option *parameter,
|
|||||||
{
|
{
|
||||||
num.set(*val, &my_charset_bin);
|
num.set(*val, &my_charset_bin);
|
||||||
// We need ' ' after string to detect list continuation
|
// We need ' ' after string to detect list continuation
|
||||||
if ((!first && my_b_append(file, (const byte *)" ", 1)) ||
|
if ((!first && my_b_append(file, (const byte *)STRING_WITH_LEN(" "))) ||
|
||||||
my_b_append(file, (const byte *)num.ptr(), num.length()))
|
my_b_append(file, (const byte *)num.ptr(), num.length()))
|
||||||
{
|
{
|
||||||
DBUG_RETURN(TRUE);
|
DBUG_RETURN(TRUE);
|
||||||
@ -242,9 +242,9 @@ sql_create_definition_file(const LEX_STRING *dir, const LEX_STRING *file_name,
|
|||||||
goto err_w_file;
|
goto err_w_file;
|
||||||
|
|
||||||
// write header (file signature)
|
// write header (file signature)
|
||||||
if (my_b_append(&file, (const byte *)"TYPE=", 5) ||
|
if (my_b_append(&file, (const byte *)STRING_WITH_LEN("TYPE=")) ||
|
||||||
my_b_append(&file, (const byte *)type->str, type->length) ||
|
my_b_append(&file, (const byte *)type->str, type->length) ||
|
||||||
my_b_append(&file, (const byte *)"\n", 1))
|
my_b_append(&file, (const byte *)STRING_WITH_LEN("\n")))
|
||||||
goto err_w_file;
|
goto err_w_file;
|
||||||
|
|
||||||
// write parameters to temporary file
|
// write parameters to temporary file
|
||||||
@ -252,9 +252,9 @@ sql_create_definition_file(const LEX_STRING *dir, const LEX_STRING *file_name,
|
|||||||
{
|
{
|
||||||
if (my_b_append(&file, (const byte *)param->name.str,
|
if (my_b_append(&file, (const byte *)param->name.str,
|
||||||
param->name.length) ||
|
param->name.length) ||
|
||||||
my_b_append(&file, (const byte *)"=", 1) ||
|
my_b_append(&file, (const byte *)STRING_WITH_LEN("=")) ||
|
||||||
write_parameter(&file, base, param, &old_version) ||
|
write_parameter(&file, base, param, &old_version) ||
|
||||||
my_b_append(&file, (const byte *)"\n", 1))
|
my_b_append(&file, (const byte *)STRING_WITH_LEN("\n")))
|
||||||
goto err_w_cache;
|
goto err_w_cache;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -663,6 +663,61 @@ parse_quoted_escaped_string(char *ptr, char *end,
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
Parser for FILE_OPTIONS_ULLLIST type value.
|
||||||
|
|
||||||
|
SYNOPSIS
|
||||||
|
get_file_options_ulllist()
|
||||||
|
ptr [in/out] pointer to parameter
|
||||||
|
end [in] end of the configuration
|
||||||
|
line [in] pointer to the line begining
|
||||||
|
base [in] base address for parameter writing (structure
|
||||||
|
like TABLE)
|
||||||
|
parameter [in] description
|
||||||
|
mem_root [in] MEM_ROOT for parameters allocation
|
||||||
|
*/
|
||||||
|
|
||||||
|
bool get_file_options_ulllist(char *&ptr, char *end, char *line,
|
||||||
|
gptr base, File_option *parameter,
|
||||||
|
MEM_ROOT *mem_root)
|
||||||
|
{
|
||||||
|
List<ulonglong> *nlist= (List<ulonglong>*)(base + parameter->offset);
|
||||||
|
ulonglong *num;
|
||||||
|
nlist->empty();
|
||||||
|
// list parsing
|
||||||
|
while (ptr < end)
|
||||||
|
{
|
||||||
|
int not_used;
|
||||||
|
char *num_end= end;
|
||||||
|
if (!(num= (ulonglong*)alloc_root(mem_root, sizeof(ulonglong))) ||
|
||||||
|
nlist->push_back(num, mem_root))
|
||||||
|
goto nlist_err;
|
||||||
|
*num= my_strtoll10(ptr, &num_end, ¬_used);
|
||||||
|
ptr= num_end;
|
||||||
|
switch (*ptr) {
|
||||||
|
case '\n':
|
||||||
|
goto end_of_nlist;
|
||||||
|
case ' ':
|
||||||
|
// we cant go over buffer bounds, because we have \0 at the end
|
||||||
|
ptr++;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
goto nlist_err_w_message;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
end_of_nlist:
|
||||||
|
if (*(ptr++) != '\n')
|
||||||
|
goto nlist_err;
|
||||||
|
return FALSE;
|
||||||
|
|
||||||
|
nlist_err_w_message:
|
||||||
|
my_error(ER_FPARSER_ERROR_IN_PARAMETER, MYF(0), parameter->name.str, line);
|
||||||
|
nlist_err:
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
parse parameters
|
parse parameters
|
||||||
|
|
||||||
@ -673,6 +728,8 @@ parse_quoted_escaped_string(char *ptr, char *end,
|
|||||||
mem_root MEM_ROOT for parameters allocation
|
mem_root MEM_ROOT for parameters allocation
|
||||||
parameters parameters description
|
parameters parameters description
|
||||||
required number of required parameters in above list
|
required number of required parameters in above list
|
||||||
|
hook hook called for unknown keys
|
||||||
|
hook_data some data specific for the hook
|
||||||
|
|
||||||
RETURN
|
RETURN
|
||||||
FALSE - OK
|
FALSE - OK
|
||||||
@ -681,15 +738,15 @@ parse_quoted_escaped_string(char *ptr, char *end,
|
|||||||
|
|
||||||
my_bool
|
my_bool
|
||||||
File_parser::parse(gptr base, MEM_ROOT *mem_root,
|
File_parser::parse(gptr base, MEM_ROOT *mem_root,
|
||||||
struct File_option *parameters, uint required)
|
struct File_option *parameters, uint required,
|
||||||
|
Unknown_key_hook *hook)
|
||||||
{
|
{
|
||||||
uint first_param= 0, found= 0;
|
uint first_param= 0, found= 0;
|
||||||
register char *ptr= start;
|
char *ptr= start;
|
||||||
char *eol;
|
char *eol;
|
||||||
LEX_STRING *str;
|
LEX_STRING *str;
|
||||||
List<LEX_STRING> *list;
|
List<LEX_STRING> *list;
|
||||||
ulonglong *num;
|
ulonglong *num;
|
||||||
List<ulonglong> *nlist;
|
|
||||||
DBUG_ENTER("File_parser::parse");
|
DBUG_ENTER("File_parser::parse");
|
||||||
|
|
||||||
while (ptr < end && found < required)
|
while (ptr < end && found < required)
|
||||||
@ -829,58 +886,64 @@ list_err:
|
|||||||
DBUG_RETURN(TRUE);
|
DBUG_RETURN(TRUE);
|
||||||
}
|
}
|
||||||
case FILE_OPTIONS_ULLLIST:
|
case FILE_OPTIONS_ULLLIST:
|
||||||
{
|
if (get_file_options_ulllist(ptr, end, line, base,
|
||||||
nlist= (List<ulonglong>*)(base + parameter->offset);
|
parameter, mem_root))
|
||||||
nlist->empty();
|
DBUG_RETURN(TRUE);
|
||||||
// list parsing
|
|
||||||
while (ptr < end)
|
|
||||||
{
|
|
||||||
int not_used;
|
|
||||||
char *num_end= end;
|
|
||||||
if (!(num= (ulonglong*)alloc_root(mem_root, sizeof(ulonglong))) ||
|
|
||||||
nlist->push_back(num, mem_root))
|
|
||||||
goto nlist_err;
|
|
||||||
*num= my_strtoll10(ptr, &num_end, ¬_used);
|
|
||||||
ptr= num_end;
|
|
||||||
switch (*ptr) {
|
|
||||||
case '\n':
|
|
||||||
goto end_of_nlist;
|
|
||||||
case ' ':
|
|
||||||
// we cant go over buffer bounds, because we have \0 at the end
|
|
||||||
ptr++;
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
goto nlist_err_w_message;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
end_of_nlist:
|
|
||||||
if (*(ptr++) != '\n')
|
|
||||||
goto nlist_err;
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
nlist_err_w_message:
|
|
||||||
my_error(ER_FPARSER_ERROR_IN_PARAMETER, MYF(0),
|
|
||||||
parameter->name.str, line);
|
|
||||||
nlist_err:
|
|
||||||
DBUG_RETURN(TRUE);
|
|
||||||
|
|
||||||
}
|
|
||||||
default:
|
default:
|
||||||
DBUG_ASSERT(0); // never should happened
|
DBUG_ASSERT(0); // never should happened
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
// skip unknown parameter
|
ptr= line;
|
||||||
if (!(ptr= strchr(ptr, '\n')))
|
if (hook->process_unknown_string(ptr, base, mem_root, end))
|
||||||
{
|
{
|
||||||
my_error(ER_FPARSER_EOF_IN_UNKNOWN_PARAMETER, MYF(0), line);
|
DBUG_RETURN(TRUE);
|
||||||
DBUG_RETURN(TRUE);
|
}
|
||||||
}
|
// skip unknown parameter
|
||||||
ptr++;
|
if (!(ptr= strchr(ptr, '\n')))
|
||||||
|
{
|
||||||
|
my_error(ER_FPARSER_EOF_IN_UNKNOWN_PARAMETER, MYF(0), line);
|
||||||
|
DBUG_RETURN(TRUE);
|
||||||
|
}
|
||||||
|
ptr++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
DBUG_RETURN(FALSE);
|
DBUG_RETURN(FALSE);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
Dummy unknown key hook
|
||||||
|
|
||||||
|
SYNOPSIS
|
||||||
|
File_parser_dummy_hook::process_unknown_string()
|
||||||
|
unknown_key [in/out] reference on the line with unknown
|
||||||
|
parameter and the parsing point
|
||||||
|
base [in] base address for parameter writing (structure like
|
||||||
|
TABLE)
|
||||||
|
mem_root [in] MEM_ROOT for parameters allocation
|
||||||
|
end [in] the end of the configuration
|
||||||
|
|
||||||
|
NOTE
|
||||||
|
This hook used to catch no longer supported keys and process them for
|
||||||
|
backward compatibility, but it will not slow down processing of modern
|
||||||
|
format files.
|
||||||
|
This hook does nothing except debug output.
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
FALSE OK
|
||||||
|
TRUE Error
|
||||||
|
*/
|
||||||
|
|
||||||
|
bool
|
||||||
|
File_parser_dummy_hook::process_unknown_string(char *&unknown_key,
|
||||||
|
gptr base, MEM_ROOT *mem_root,
|
||||||
|
char *end)
|
||||||
|
{
|
||||||
|
DBUG_ENTER("file_parser_dummy_hook::process_unknown_string");
|
||||||
|
DBUG_PRINT("info", ("unknown key:%60s", unknown_key));
|
||||||
|
DBUG_RETURN(FALSE);
|
||||||
|
}
|
||||||
|
@ -40,6 +40,35 @@ struct File_option
|
|||||||
file_opt_type type; /* Option type */
|
file_opt_type type; /* Option type */
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
This hook used to catch no longer supported keys and process them for
|
||||||
|
backward compatibility.
|
||||||
|
*/
|
||||||
|
|
||||||
|
class Unknown_key_hook
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
virtual bool process_unknown_string(char *&unknown_key, gptr base,
|
||||||
|
MEM_ROOT *mem_root, char *end)= 0;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
/* Dummy hook for parsers which do not need hook for unknown keys */
|
||||||
|
|
||||||
|
class File_parser_dummy_hook: public Unknown_key_hook
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
virtual bool process_unknown_string(char *&unknown_key, gptr base,
|
||||||
|
MEM_ROOT *mem_root, char *end);
|
||||||
|
};
|
||||||
|
|
||||||
|
extern File_parser_dummy_hook file_parser_dummy_hook;
|
||||||
|
|
||||||
|
bool get_file_options_ulllist(char *&ptr, char *end, char *line,
|
||||||
|
gptr base, File_option *parameter,
|
||||||
|
MEM_ROOT *mem_root);
|
||||||
|
|
||||||
class File_parser;
|
class File_parser;
|
||||||
File_parser *sql_parse_prepare(const LEX_STRING *file_name,
|
File_parser *sql_parse_prepare(const LEX_STRING *file_name,
|
||||||
MEM_ROOT *mem_root, bool bad_format_errors);
|
MEM_ROOT *mem_root, bool bad_format_errors);
|
||||||
@ -64,7 +93,8 @@ public:
|
|||||||
my_bool ok() { return content_ok; }
|
my_bool ok() { return content_ok; }
|
||||||
LEX_STRING *type() { return &file_type; }
|
LEX_STRING *type() { return &file_type; }
|
||||||
my_bool parse(gptr base, MEM_ROOT *mem_root,
|
my_bool parse(gptr base, MEM_ROOT *mem_root,
|
||||||
struct File_option *parameters, uint required);
|
struct File_option *parameters, uint required,
|
||||||
|
Unknown_key_hook *hook);
|
||||||
|
|
||||||
friend File_parser *sql_parse_prepare(const LEX_STRING *file_name,
|
friend File_parser *sql_parse_prepare(const LEX_STRING *file_name,
|
||||||
MEM_ROOT *mem_root,
|
MEM_ROOT *mem_root,
|
||||||
|
@ -572,7 +572,7 @@ bool Protocol::send_fields(List<Item> *list, uint flags)
|
|||||||
|
|
||||||
if (thd->client_capabilities & CLIENT_PROTOCOL_41)
|
if (thd->client_capabilities & CLIENT_PROTOCOL_41)
|
||||||
{
|
{
|
||||||
if (prot.store("def", 3, cs, thd_charset) ||
|
if (prot.store(STRING_WITH_LEN("def"), cs, thd_charset) ||
|
||||||
prot.store(field.db_name, (uint) strlen(field.db_name),
|
prot.store(field.db_name, (uint) strlen(field.db_name),
|
||||||
cs, thd_charset) ||
|
cs, thd_charset) ||
|
||||||
prot.store(field.table_name, (uint) strlen(field.table_name),
|
prot.store(field.table_name, (uint) strlen(field.table_name),
|
||||||
|
@ -502,7 +502,7 @@ int update_slave_list(MYSQL* mysql, MASTER_INFO* mi)
|
|||||||
int port_ind;
|
int port_ind;
|
||||||
DBUG_ENTER("update_slave_list");
|
DBUG_ENTER("update_slave_list");
|
||||||
|
|
||||||
if (mysql_real_query(mysql,"SHOW SLAVE HOSTS",16) ||
|
if (mysql_real_query(mysql, STRING_WITH_LEN("SHOW SLAVE HOSTS")) ||
|
||||||
!(res = mysql_store_result(mysql)))
|
!(res = mysql_store_result(mysql)))
|
||||||
{
|
{
|
||||||
error= mysql_error(mysql);
|
error= mysql_error(mysql);
|
||||||
@ -795,7 +795,7 @@ bool load_master_data(THD* thd)
|
|||||||
MYSQL_RES *db_res, **table_res, **table_res_end, **cur_table_res;
|
MYSQL_RES *db_res, **table_res, **table_res_end, **cur_table_res;
|
||||||
uint num_dbs;
|
uint num_dbs;
|
||||||
|
|
||||||
if (mysql_real_query(&mysql, "SHOW DATABASES", 14) ||
|
if (mysql_real_query(&mysql, STRING_WITH_LEN("SHOW DATABASES")) ||
|
||||||
!(db_res = mysql_store_result(&mysql)))
|
!(db_res = mysql_store_result(&mysql)))
|
||||||
{
|
{
|
||||||
my_error(error= ER_QUERY_ON_MASTER, MYF(0), mysql_error(&mysql));
|
my_error(error= ER_QUERY_ON_MASTER, MYF(0), mysql_error(&mysql));
|
||||||
@ -821,8 +821,9 @@ bool load_master_data(THD* thd)
|
|||||||
we wait to issue FLUSH TABLES WITH READ LOCK for as long as we
|
we wait to issue FLUSH TABLES WITH READ LOCK for as long as we
|
||||||
can to minimize the lock time.
|
can to minimize the lock time.
|
||||||
*/
|
*/
|
||||||
if (mysql_real_query(&mysql, "FLUSH TABLES WITH READ LOCK", 27) ||
|
if (mysql_real_query(&mysql,
|
||||||
mysql_real_query(&mysql, "SHOW MASTER STATUS",18) ||
|
STRING_WITH_LEN("FLUSH TABLES WITH READ LOCK")) ||
|
||||||
|
mysql_real_query(&mysql, STRING_WITH_LEN("SHOW MASTER STATUS")) ||
|
||||||
!(master_status_res = mysql_store_result(&mysql)))
|
!(master_status_res = mysql_store_result(&mysql)))
|
||||||
{
|
{
|
||||||
my_error(error= ER_QUERY_ON_MASTER, MYF(0), mysql_error(&mysql));
|
my_error(error= ER_QUERY_ON_MASTER, MYF(0), mysql_error(&mysql));
|
||||||
@ -875,7 +876,7 @@ bool load_master_data(THD* thd)
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (mysql_select_db(&mysql, db) ||
|
if (mysql_select_db(&mysql, db) ||
|
||||||
mysql_real_query(&mysql, "SHOW TABLES", 11) ||
|
mysql_real_query(&mysql, STRING_WITH_LEN("SHOW TABLES")) ||
|
||||||
!(*cur_table_res = mysql_store_result(&mysql)))
|
!(*cur_table_res = mysql_store_result(&mysql)))
|
||||||
{
|
{
|
||||||
my_error(error= ER_QUERY_ON_MASTER, MYF(0), mysql_error(&mysql));
|
my_error(error= ER_QUERY_ON_MASTER, MYF(0), mysql_error(&mysql));
|
||||||
@ -933,7 +934,7 @@ bool load_master_data(THD* thd)
|
|||||||
mysql_free_result(master_status_res);
|
mysql_free_result(master_status_res);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (mysql_real_query(&mysql, "UNLOCK TABLES", 13))
|
if (mysql_real_query(&mysql, STRING_WITH_LEN("UNLOCK TABLES")))
|
||||||
{
|
{
|
||||||
my_error(error= ER_QUERY_ON_MASTER, MYF(0), mysql_error(&mysql));
|
my_error(error= ER_QUERY_ON_MASTER, MYF(0), mysql_error(&mysql));
|
||||||
goto err;
|
goto err;
|
||||||
|
@ -5423,3 +5423,5 @@ ER_SP_BAD_VAR_SHADOW 42000
|
|||||||
eng "Variable '%-.64s' must be quoted with `...`, or renamed"
|
eng "Variable '%-.64s' must be quoted with `...`, or renamed"
|
||||||
ER_TRG_NO_DEFINER
|
ER_TRG_NO_DEFINER
|
||||||
eng "No definer attribute for trigger '%-.64s'.'%-.64s'. The trigger will be activated under the authorization of the invoker, which may have insufficient privileges. Please recreate the trigger."
|
eng "No definer attribute for trigger '%-.64s'.'%-.64s'. The trigger will be activated under the authorization of the invoker, which may have insufficient privileges. Please recreate the trigger."
|
||||||
|
ER_OLD_FILE_FORMAT
|
||||||
|
eng "'%-.64s' has an old format, you should re-create the '%s' object(s)"
|
||||||
|
10
sql/slave.cc
10
sql/slave.cc
@ -1397,7 +1397,7 @@ static int get_master_version_and_clock(MYSQL* mysql, MASTER_INFO* mi)
|
|||||||
MYSQL_RES *master_res= 0;
|
MYSQL_RES *master_res= 0;
|
||||||
MYSQL_ROW master_row;
|
MYSQL_ROW master_row;
|
||||||
|
|
||||||
if (!mysql_real_query(mysql, "SELECT UNIX_TIMESTAMP()", 23) &&
|
if (!mysql_real_query(mysql, STRING_WITH_LEN("SELECT UNIX_TIMESTAMP()")) &&
|
||||||
(master_res= mysql_store_result(mysql)) &&
|
(master_res= mysql_store_result(mysql)) &&
|
||||||
(master_row= mysql_fetch_row(master_res)))
|
(master_row= mysql_fetch_row(master_res)))
|
||||||
{
|
{
|
||||||
@ -1423,7 +1423,8 @@ do not trust column Seconds_Behind_Master of SHOW SLAVE STATUS");
|
|||||||
Note: we could have put a @@SERVER_ID in the previous SELECT
|
Note: we could have put a @@SERVER_ID in the previous SELECT
|
||||||
UNIX_TIMESTAMP() instead, but this would not have worked on 3.23 masters.
|
UNIX_TIMESTAMP() instead, but this would not have worked on 3.23 masters.
|
||||||
*/
|
*/
|
||||||
if (!mysql_real_query(mysql, "SHOW VARIABLES LIKE 'SERVER_ID'", 31) &&
|
if (!mysql_real_query(mysql,
|
||||||
|
STRING_WITH_LEN("SHOW VARIABLES LIKE 'SERVER_ID'")) &&
|
||||||
(master_res= mysql_store_result(mysql)))
|
(master_res= mysql_store_result(mysql)))
|
||||||
{
|
{
|
||||||
if ((master_row= mysql_fetch_row(master_res)) &&
|
if ((master_row= mysql_fetch_row(master_res)) &&
|
||||||
@ -1458,7 +1459,8 @@ not always make sense; please check the manual before using it).";
|
|||||||
goto err;
|
goto err;
|
||||||
|
|
||||||
if ((*mysql->server_version == '4') &&
|
if ((*mysql->server_version == '4') &&
|
||||||
!mysql_real_query(mysql, "SELECT @@GLOBAL.COLLATION_SERVER", 32) &&
|
!mysql_real_query(mysql,
|
||||||
|
STRING_WITH_LEN("SELECT @@GLOBAL.COLLATION_SERVER")) &&
|
||||||
(master_res= mysql_store_result(mysql)))
|
(master_res= mysql_store_result(mysql)))
|
||||||
{
|
{
|
||||||
if ((master_row= mysql_fetch_row(master_res)) &&
|
if ((master_row= mysql_fetch_row(master_res)) &&
|
||||||
@ -1485,7 +1487,7 @@ be equal for replication to work";
|
|||||||
those were alpha).
|
those were alpha).
|
||||||
*/
|
*/
|
||||||
if ((*mysql->server_version == '4') &&
|
if ((*mysql->server_version == '4') &&
|
||||||
!mysql_real_query(mysql, "SELECT @@GLOBAL.TIME_ZONE", 25) &&
|
!mysql_real_query(mysql, STRING_WITH_LEN("SELECT @@GLOBAL.TIME_ZONE")) &&
|
||||||
(master_res= mysql_store_result(mysql)))
|
(master_res= mysql_store_result(mysql)))
|
||||||
{
|
{
|
||||||
if ((master_row= mysql_fetch_row(master_res)) &&
|
if ((master_row= mysql_fetch_row(master_res)) &&
|
||||||
|
20
sql/sp.cc
20
sql/sp.cc
@ -1585,30 +1585,30 @@ create_string(THD *thd, String *buf,
|
|||||||
chistics->comment.length))
|
chistics->comment.length))
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
|
||||||
buf->append("CREATE ", 7);
|
buf->append(STRING_WITH_LEN("CREATE "));
|
||||||
if (type == TYPE_ENUM_FUNCTION)
|
if (type == TYPE_ENUM_FUNCTION)
|
||||||
buf->append("FUNCTION ", 9);
|
buf->append(STRING_WITH_LEN("FUNCTION "));
|
||||||
else
|
else
|
||||||
buf->append("PROCEDURE ", 10);
|
buf->append(STRING_WITH_LEN("PROCEDURE "));
|
||||||
append_identifier(thd, buf, name->m_name.str, name->m_name.length);
|
append_identifier(thd, buf, name->m_name.str, name->m_name.length);
|
||||||
buf->append('(');
|
buf->append('(');
|
||||||
buf->append(params, paramslen);
|
buf->append(params, paramslen);
|
||||||
buf->append(')');
|
buf->append(')');
|
||||||
if (type == TYPE_ENUM_FUNCTION)
|
if (type == TYPE_ENUM_FUNCTION)
|
||||||
{
|
{
|
||||||
buf->append(" RETURNS ", 9);
|
buf->append(STRING_WITH_LEN(" RETURNS "));
|
||||||
buf->append(returns, returnslen);
|
buf->append(returns, returnslen);
|
||||||
}
|
}
|
||||||
buf->append('\n');
|
buf->append('\n');
|
||||||
switch (chistics->daccess) {
|
switch (chistics->daccess) {
|
||||||
case SP_NO_SQL:
|
case SP_NO_SQL:
|
||||||
buf->append(" NO SQL\n");
|
buf->append(STRING_WITH_LEN(" NO SQL\n"));
|
||||||
break;
|
break;
|
||||||
case SP_READS_SQL_DATA:
|
case SP_READS_SQL_DATA:
|
||||||
buf->append(" READS SQL DATA\n");
|
buf->append(STRING_WITH_LEN(" READS SQL DATA\n"));
|
||||||
break;
|
break;
|
||||||
case SP_MODIFIES_SQL_DATA:
|
case SP_MODIFIES_SQL_DATA:
|
||||||
buf->append(" MODIFIES SQL DATA\n");
|
buf->append(STRING_WITH_LEN(" MODIFIES SQL DATA\n"));
|
||||||
break;
|
break;
|
||||||
case SP_DEFAULT_ACCESS:
|
case SP_DEFAULT_ACCESS:
|
||||||
case SP_CONTAINS_SQL:
|
case SP_CONTAINS_SQL:
|
||||||
@ -1616,12 +1616,12 @@ create_string(THD *thd, String *buf,
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
if (chistics->detistic)
|
if (chistics->detistic)
|
||||||
buf->append(" DETERMINISTIC\n", 18);
|
buf->append(STRING_WITH_LEN(" DETERMINISTIC\n"));
|
||||||
if (chistics->suid == SP_IS_NOT_SUID)
|
if (chistics->suid == SP_IS_NOT_SUID)
|
||||||
buf->append(" SQL SECURITY INVOKER\n", 25);
|
buf->append(STRING_WITH_LEN(" SQL SECURITY INVOKER\n"));
|
||||||
if (chistics->comment.length)
|
if (chistics->comment.length)
|
||||||
{
|
{
|
||||||
buf->append(" COMMENT ");
|
buf->append(STRING_WITH_LEN(" COMMENT "));
|
||||||
append_unescaped(buf, chistics->comment.str, chistics->comment.length);
|
append_unescaped(buf, chistics->comment.str, chistics->comment.length);
|
||||||
buf->append('\n');
|
buf->append('\n');
|
||||||
}
|
}
|
||||||
|
@ -858,9 +858,9 @@ static bool subst_spvars(THD *thd, sp_instr *instr, LEX_STRING *query_str)
|
|||||||
prev_pos= (*splocal)->pos_in_query + (*splocal)->m_name.length;
|
prev_pos= (*splocal)->pos_in_query + (*splocal)->m_name.length;
|
||||||
|
|
||||||
/* append the spvar substitute */
|
/* append the spvar substitute */
|
||||||
res|= qbuf.append(" NAME_CONST('");
|
res|= qbuf.append(STRING_WITH_LEN(" NAME_CONST('"));
|
||||||
res|= qbuf.append((*splocal)->m_name.str, (*splocal)->m_name.length);
|
res|= qbuf.append((*splocal)->m_name.str, (*splocal)->m_name.length);
|
||||||
res|= qbuf.append("',");
|
res|= qbuf.append(STRING_WITH_LEN("',"));
|
||||||
val= (*splocal)->this_item();
|
val= (*splocal)->this_item();
|
||||||
DBUG_PRINT("info", ("print %p", val));
|
DBUG_PRINT("info", ("print %p", val));
|
||||||
val->print(&qbuf);
|
val->print(&qbuf);
|
||||||
@ -1215,7 +1215,7 @@ sp_head::execute_function(THD *thd, Item **argp, uint argcount, Item **resp)
|
|||||||
char buf[256];
|
char buf[256];
|
||||||
String bufstr(buf, sizeof(buf), &my_charset_bin);
|
String bufstr(buf, sizeof(buf), &my_charset_bin);
|
||||||
bufstr.length(0);
|
bufstr.length(0);
|
||||||
bufstr.append("DO ", 3);
|
bufstr.append(STRING_WITH_LEN("DO "));
|
||||||
append_identifier(thd, &bufstr, m_name.str, m_name.length);
|
append_identifier(thd, &bufstr, m_name.str, m_name.length);
|
||||||
bufstr.append('(');
|
bufstr.append('(');
|
||||||
for (uint i=0; i < argcount; i++)
|
for (uint i=0; i < argcount; i++)
|
||||||
@ -2056,7 +2056,7 @@ void
|
|||||||
sp_instr_stmt::print(String *str)
|
sp_instr_stmt::print(String *str)
|
||||||
{
|
{
|
||||||
str->reserve(12);
|
str->reserve(12);
|
||||||
str->append("stmt ");
|
str->append(STRING_WITH_LEN("stmt "));
|
||||||
str->qs_append((uint)m_lex_keeper.sql_command());
|
str->qs_append((uint)m_lex_keeper.sql_command());
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2097,7 +2097,7 @@ void
|
|||||||
sp_instr_set::print(String *str)
|
sp_instr_set::print(String *str)
|
||||||
{
|
{
|
||||||
str->reserve(12);
|
str->reserve(12);
|
||||||
str->append("set ");
|
str->append(STRING_WITH_LEN("set "));
|
||||||
str->qs_append(m_offset);
|
str->qs_append(m_offset);
|
||||||
str->append(' ');
|
str->append(' ');
|
||||||
m_value->print(str);
|
m_value->print(str);
|
||||||
@ -2132,9 +2132,9 @@ sp_instr_set_trigger_field::exec_core(THD *thd, uint *nextp)
|
|||||||
void
|
void
|
||||||
sp_instr_set_trigger_field::print(String *str)
|
sp_instr_set_trigger_field::print(String *str)
|
||||||
{
|
{
|
||||||
str->append("set ", 4);
|
str->append(STRING_WITH_LEN("set "));
|
||||||
trigger_field->print(str);
|
trigger_field->print(str);
|
||||||
str->append(":=", 2);
|
str->append(STRING_WITH_LEN(":="));
|
||||||
value->print(str);
|
value->print(str);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2157,7 +2157,7 @@ void
|
|||||||
sp_instr_jump::print(String *str)
|
sp_instr_jump::print(String *str)
|
||||||
{
|
{
|
||||||
str->reserve(12);
|
str->reserve(12);
|
||||||
str->append("jump ");
|
str->append(STRING_WITH_LEN("jump "));
|
||||||
str->qs_append(m_dest);
|
str->qs_append(m_dest);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2239,7 +2239,7 @@ void
|
|||||||
sp_instr_jump_if::print(String *str)
|
sp_instr_jump_if::print(String *str)
|
||||||
{
|
{
|
||||||
str->reserve(12);
|
str->reserve(12);
|
||||||
str->append("jump_if ");
|
str->append(STRING_WITH_LEN("jump_if "));
|
||||||
str->qs_append(m_dest);
|
str->qs_append(m_dest);
|
||||||
str->append(' ');
|
str->append(' ');
|
||||||
m_expr->print(str);
|
m_expr->print(str);
|
||||||
@ -2300,7 +2300,7 @@ void
|
|||||||
sp_instr_jump_if_not::print(String *str)
|
sp_instr_jump_if_not::print(String *str)
|
||||||
{
|
{
|
||||||
str->reserve(16);
|
str->reserve(16);
|
||||||
str->append("jump_if_not ");
|
str->append(STRING_WITH_LEN("jump_if_not "));
|
||||||
str->qs_append(m_dest);
|
str->qs_append(m_dest);
|
||||||
str->append(' ');
|
str->append(' ');
|
||||||
m_expr->print(str);
|
m_expr->print(str);
|
||||||
@ -2358,7 +2358,7 @@ void
|
|||||||
sp_instr_freturn::print(String *str)
|
sp_instr_freturn::print(String *str)
|
||||||
{
|
{
|
||||||
str->reserve(12);
|
str->reserve(12);
|
||||||
str->append("freturn ");
|
str->append(STRING_WITH_LEN("freturn "));
|
||||||
str->qs_append((uint)m_type);
|
str->qs_append((uint)m_type);
|
||||||
str->append(' ');
|
str->append(' ');
|
||||||
m_value->print(str);
|
m_value->print(str);
|
||||||
@ -2386,13 +2386,13 @@ void
|
|||||||
sp_instr_hpush_jump::print(String *str)
|
sp_instr_hpush_jump::print(String *str)
|
||||||
{
|
{
|
||||||
str->reserve(32);
|
str->reserve(32);
|
||||||
str->append("hpush_jump ");
|
str->append(STRING_WITH_LEN("hpush_jump "));
|
||||||
str->qs_append(m_dest);
|
str->qs_append(m_dest);
|
||||||
str->append(" t=");
|
str->append(STRING_WITH_LEN(" t="));
|
||||||
str->qs_append(m_type);
|
str->qs_append(m_type);
|
||||||
str->append(" f=");
|
str->append(STRING_WITH_LEN(" f="));
|
||||||
str->qs_append(m_frame);
|
str->qs_append(m_frame);
|
||||||
str->append(" h=");
|
str->append(STRING_WITH_LEN(" h="));
|
||||||
str->qs_append(m_ip+1);
|
str->qs_append(m_ip+1);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2429,7 +2429,7 @@ void
|
|||||||
sp_instr_hpop::print(String *str)
|
sp_instr_hpop::print(String *str)
|
||||||
{
|
{
|
||||||
str->reserve(12);
|
str->reserve(12);
|
||||||
str->append("hpop ");
|
str->append(STRING_WITH_LEN("hpop "));
|
||||||
str->qs_append(m_count);
|
str->qs_append(m_count);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2464,7 +2464,7 @@ void
|
|||||||
sp_instr_hreturn::print(String *str)
|
sp_instr_hreturn::print(String *str)
|
||||||
{
|
{
|
||||||
str->reserve(16);
|
str->reserve(16);
|
||||||
str->append("hreturn ");
|
str->append(STRING_WITH_LEN("hreturn "));
|
||||||
str->qs_append(m_frame);
|
str->qs_append(m_frame);
|
||||||
if (m_dest)
|
if (m_dest)
|
||||||
{
|
{
|
||||||
@ -2516,7 +2516,7 @@ sp_instr_cpush::execute(THD *thd, uint *nextp)
|
|||||||
void
|
void
|
||||||
sp_instr_cpush::print(String *str)
|
sp_instr_cpush::print(String *str)
|
||||||
{
|
{
|
||||||
str->append("cpush");
|
str->append(STRING_WITH_LEN("cpush"));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -2538,7 +2538,7 @@ void
|
|||||||
sp_instr_cpop::print(String *str)
|
sp_instr_cpop::print(String *str)
|
||||||
{
|
{
|
||||||
str->reserve(12);
|
str->reserve(12);
|
||||||
str->append("cpop ");
|
str->append(STRING_WITH_LEN("cpop "));
|
||||||
str->qs_append(m_count);
|
str->qs_append(m_count);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2613,7 +2613,7 @@ void
|
|||||||
sp_instr_copen::print(String *str)
|
sp_instr_copen::print(String *str)
|
||||||
{
|
{
|
||||||
str->reserve(12);
|
str->reserve(12);
|
||||||
str->append("copen ");
|
str->append(STRING_WITH_LEN("copen "));
|
||||||
str->qs_append(m_cursor);
|
str->qs_append(m_cursor);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2642,7 +2642,7 @@ void
|
|||||||
sp_instr_cclose::print(String *str)
|
sp_instr_cclose::print(String *str)
|
||||||
{
|
{
|
||||||
str->reserve(12);
|
str->reserve(12);
|
||||||
str->append("cclose ");
|
str->append(STRING_WITH_LEN("cclose "));
|
||||||
str->qs_append(m_cursor);
|
str->qs_append(m_cursor);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2673,7 +2673,7 @@ sp_instr_cfetch::print(String *str)
|
|||||||
sp_pvar_t *pv;
|
sp_pvar_t *pv;
|
||||||
|
|
||||||
str->reserve(12);
|
str->reserve(12);
|
||||||
str->append("cfetch ");
|
str->append(STRING_WITH_LEN("cfetch "));
|
||||||
str->qs_append(m_cursor);
|
str->qs_append(m_cursor);
|
||||||
while ((pv= li++))
|
while ((pv= li++))
|
||||||
{
|
{
|
||||||
@ -2703,7 +2703,7 @@ void
|
|||||||
sp_instr_error::print(String *str)
|
sp_instr_error::print(String *str)
|
||||||
{
|
{
|
||||||
str->reserve(12);
|
str->reserve(12);
|
||||||
str->append("error ");
|
str->append(STRING_WITH_LEN("error "));
|
||||||
str->qs_append(m_errcode);
|
str->qs_append(m_errcode);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1793,7 +1793,7 @@ bool Gis_geometry_collection::get_data_as_wkt(String *txt,
|
|||||||
geom->set_data_ptr(data, (uint) (m_data_end - data));
|
geom->set_data_ptr(data, (uint) (m_data_end - data));
|
||||||
if (geom->as_wkt(txt, &data))
|
if (geom->as_wkt(txt, &data))
|
||||||
return 1;
|
return 1;
|
||||||
if (txt->append(",", 1, 512))
|
if (txt->append(STRING_WITH_LEN(","), 512))
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
txt->length(txt->length() - 1);
|
txt->length(txt->length() - 1);
|
||||||
|
104
sql/sql_acl.cc
104
sql/sql_acl.cc
@ -1811,19 +1811,22 @@ static int replace_user_table(THD *thd, TABLE *table, const LEX_USER &combo,
|
|||||||
/* We write down SSL related ACL stuff */
|
/* We write down SSL related ACL stuff */
|
||||||
switch (lex->ssl_type) {
|
switch (lex->ssl_type) {
|
||||||
case SSL_TYPE_ANY:
|
case SSL_TYPE_ANY:
|
||||||
table->field[next_field]->store("ANY", 3, &my_charset_latin1);
|
table->field[next_field]->store(STRING_WITH_LEN("ANY"),
|
||||||
|
&my_charset_latin1);
|
||||||
table->field[next_field+1]->store("", 0, &my_charset_latin1);
|
table->field[next_field+1]->store("", 0, &my_charset_latin1);
|
||||||
table->field[next_field+2]->store("", 0, &my_charset_latin1);
|
table->field[next_field+2]->store("", 0, &my_charset_latin1);
|
||||||
table->field[next_field+3]->store("", 0, &my_charset_latin1);
|
table->field[next_field+3]->store("", 0, &my_charset_latin1);
|
||||||
break;
|
break;
|
||||||
case SSL_TYPE_X509:
|
case SSL_TYPE_X509:
|
||||||
table->field[next_field]->store("X509", 4, &my_charset_latin1);
|
table->field[next_field]->store(STRING_WITH_LEN("X509"),
|
||||||
|
&my_charset_latin1);
|
||||||
table->field[next_field+1]->store("", 0, &my_charset_latin1);
|
table->field[next_field+1]->store("", 0, &my_charset_latin1);
|
||||||
table->field[next_field+2]->store("", 0, &my_charset_latin1);
|
table->field[next_field+2]->store("", 0, &my_charset_latin1);
|
||||||
table->field[next_field+3]->store("", 0, &my_charset_latin1);
|
table->field[next_field+3]->store("", 0, &my_charset_latin1);
|
||||||
break;
|
break;
|
||||||
case SSL_TYPE_SPECIFIED:
|
case SSL_TYPE_SPECIFIED:
|
||||||
table->field[next_field]->store("SPECIFIED", 9, &my_charset_latin1);
|
table->field[next_field]->store(STRING_WITH_LEN("SPECIFIED"),
|
||||||
|
&my_charset_latin1);
|
||||||
table->field[next_field+1]->store("", 0, &my_charset_latin1);
|
table->field[next_field+1]->store("", 0, &my_charset_latin1);
|
||||||
table->field[next_field+2]->store("", 0, &my_charset_latin1);
|
table->field[next_field+2]->store("", 0, &my_charset_latin1);
|
||||||
table->field[next_field+3]->store("", 0, &my_charset_latin1);
|
table->field[next_field+3]->store("", 0, &my_charset_latin1);
|
||||||
@ -4056,13 +4059,13 @@ bool mysql_show_grants(THD *thd,LEX_USER *lex_user)
|
|||||||
{
|
{
|
||||||
String global(buff,sizeof(buff),system_charset_info);
|
String global(buff,sizeof(buff),system_charset_info);
|
||||||
global.length(0);
|
global.length(0);
|
||||||
global.append("GRANT ",6);
|
global.append(STRING_WITH_LEN("GRANT "));
|
||||||
|
|
||||||
want_access= acl_user->access;
|
want_access= acl_user->access;
|
||||||
if (test_all_bits(want_access, (GLOBAL_ACLS & ~ GRANT_ACL)))
|
if (test_all_bits(want_access, (GLOBAL_ACLS & ~ GRANT_ACL)))
|
||||||
global.append("ALL PRIVILEGES",14);
|
global.append(STRING_WITH_LEN("ALL PRIVILEGES"));
|
||||||
else if (!(want_access & ~GRANT_ACL))
|
else if (!(want_access & ~GRANT_ACL))
|
||||||
global.append("USAGE",5);
|
global.append(STRING_WITH_LEN("USAGE"));
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
bool found=0;
|
bool found=0;
|
||||||
@ -4072,16 +4075,16 @@ bool mysql_show_grants(THD *thd,LEX_USER *lex_user)
|
|||||||
if (test_access & j)
|
if (test_access & j)
|
||||||
{
|
{
|
||||||
if (found)
|
if (found)
|
||||||
global.append(", ",2);
|
global.append(STRING_WITH_LEN(", "));
|
||||||
found=1;
|
found=1;
|
||||||
global.append(command_array[counter],command_lengths[counter]);
|
global.append(command_array[counter],command_lengths[counter]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
global.append (" ON *.* TO '",12);
|
global.append (STRING_WITH_LEN(" ON *.* TO '"));
|
||||||
global.append(lex_user->user.str, lex_user->user.length,
|
global.append(lex_user->user.str, lex_user->user.length,
|
||||||
system_charset_info);
|
system_charset_info);
|
||||||
global.append ("'@'",3);
|
global.append (STRING_WITH_LEN("'@'"));
|
||||||
global.append(lex_user->host.str,lex_user->host.length,
|
global.append(lex_user->host.str,lex_user->host.length,
|
||||||
system_charset_info);
|
system_charset_info);
|
||||||
global.append ('\'');
|
global.append ('\'');
|
||||||
@ -4092,23 +4095,23 @@ bool mysql_show_grants(THD *thd,LEX_USER *lex_user)
|
|||||||
make_password_from_salt(passwd_buff, acl_user->salt);
|
make_password_from_salt(passwd_buff, acl_user->salt);
|
||||||
else
|
else
|
||||||
make_password_from_salt_323(passwd_buff, (ulong *) acl_user->salt);
|
make_password_from_salt_323(passwd_buff, (ulong *) acl_user->salt);
|
||||||
global.append(" IDENTIFIED BY PASSWORD '",25);
|
global.append(STRING_WITH_LEN(" IDENTIFIED BY PASSWORD '"));
|
||||||
global.append(passwd_buff);
|
global.append(passwd_buff);
|
||||||
global.append('\'');
|
global.append('\'');
|
||||||
}
|
}
|
||||||
/* "show grants" SSL related stuff */
|
/* "show grants" SSL related stuff */
|
||||||
if (acl_user->ssl_type == SSL_TYPE_ANY)
|
if (acl_user->ssl_type == SSL_TYPE_ANY)
|
||||||
global.append(" REQUIRE SSL",12);
|
global.append(STRING_WITH_LEN(" REQUIRE SSL"));
|
||||||
else if (acl_user->ssl_type == SSL_TYPE_X509)
|
else if (acl_user->ssl_type == SSL_TYPE_X509)
|
||||||
global.append(" REQUIRE X509",13);
|
global.append(STRING_WITH_LEN(" REQUIRE X509"));
|
||||||
else if (acl_user->ssl_type == SSL_TYPE_SPECIFIED)
|
else if (acl_user->ssl_type == SSL_TYPE_SPECIFIED)
|
||||||
{
|
{
|
||||||
int ssl_options = 0;
|
int ssl_options = 0;
|
||||||
global.append(" REQUIRE ",9);
|
global.append(STRING_WITH_LEN(" REQUIRE "));
|
||||||
if (acl_user->x509_issuer)
|
if (acl_user->x509_issuer)
|
||||||
{
|
{
|
||||||
ssl_options++;
|
ssl_options++;
|
||||||
global.append("ISSUER \'",8);
|
global.append(STRING_WITH_LEN("ISSUER \'"));
|
||||||
global.append(acl_user->x509_issuer,strlen(acl_user->x509_issuer));
|
global.append(acl_user->x509_issuer,strlen(acl_user->x509_issuer));
|
||||||
global.append('\'');
|
global.append('\'');
|
||||||
}
|
}
|
||||||
@ -4116,7 +4119,7 @@ bool mysql_show_grants(THD *thd,LEX_USER *lex_user)
|
|||||||
{
|
{
|
||||||
if (ssl_options++)
|
if (ssl_options++)
|
||||||
global.append(' ');
|
global.append(' ');
|
||||||
global.append("SUBJECT \'",9);
|
global.append(STRING_WITH_LEN("SUBJECT \'"));
|
||||||
global.append(acl_user->x509_subject,strlen(acl_user->x509_subject),
|
global.append(acl_user->x509_subject,strlen(acl_user->x509_subject),
|
||||||
system_charset_info);
|
system_charset_info);
|
||||||
global.append('\'');
|
global.append('\'');
|
||||||
@ -4125,7 +4128,7 @@ bool mysql_show_grants(THD *thd,LEX_USER *lex_user)
|
|||||||
{
|
{
|
||||||
if (ssl_options++)
|
if (ssl_options++)
|
||||||
global.append(' ');
|
global.append(' ');
|
||||||
global.append("CIPHER '",8);
|
global.append(STRING_WITH_LEN("CIPHER '"));
|
||||||
global.append(acl_user->ssl_cipher,strlen(acl_user->ssl_cipher),
|
global.append(acl_user->ssl_cipher,strlen(acl_user->ssl_cipher),
|
||||||
system_charset_info);
|
system_charset_info);
|
||||||
global.append('\'');
|
global.append('\'');
|
||||||
@ -4137,9 +4140,9 @@ bool mysql_show_grants(THD *thd,LEX_USER *lex_user)
|
|||||||
acl_user->user_resource.conn_per_hour ||
|
acl_user->user_resource.conn_per_hour ||
|
||||||
acl_user->user_resource.user_conn))
|
acl_user->user_resource.user_conn))
|
||||||
{
|
{
|
||||||
global.append(" WITH",5);
|
global.append(STRING_WITH_LEN(" WITH"));
|
||||||
if (want_access & GRANT_ACL)
|
if (want_access & GRANT_ACL)
|
||||||
global.append(" GRANT OPTION",13);
|
global.append(STRING_WITH_LEN(" GRANT OPTION"));
|
||||||
add_user_option(&global, acl_user->user_resource.questions,
|
add_user_option(&global, acl_user->user_resource.questions,
|
||||||
"MAX_QUERIES_PER_HOUR");
|
"MAX_QUERIES_PER_HOUR");
|
||||||
add_user_option(&global, acl_user->user_resource.updates,
|
add_user_option(&global, acl_user->user_resource.updates,
|
||||||
@ -4177,12 +4180,12 @@ bool mysql_show_grants(THD *thd,LEX_USER *lex_user)
|
|||||||
{
|
{
|
||||||
String db(buff,sizeof(buff),system_charset_info);
|
String db(buff,sizeof(buff),system_charset_info);
|
||||||
db.length(0);
|
db.length(0);
|
||||||
db.append("GRANT ",6);
|
db.append(STRING_WITH_LEN("GRANT "));
|
||||||
|
|
||||||
if (test_all_bits(want_access,(DB_ACLS & ~GRANT_ACL)))
|
if (test_all_bits(want_access,(DB_ACLS & ~GRANT_ACL)))
|
||||||
db.append("ALL PRIVILEGES",14);
|
db.append(STRING_WITH_LEN("ALL PRIVILEGES"));
|
||||||
else if (!(want_access & ~GRANT_ACL))
|
else if (!(want_access & ~GRANT_ACL))
|
||||||
db.append("USAGE",5);
|
db.append(STRING_WITH_LEN("USAGE"));
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
int found=0, cnt;
|
int found=0, cnt;
|
||||||
@ -4192,23 +4195,23 @@ bool mysql_show_grants(THD *thd,LEX_USER *lex_user)
|
|||||||
if (test_access & j)
|
if (test_access & j)
|
||||||
{
|
{
|
||||||
if (found)
|
if (found)
|
||||||
db.append(", ",2);
|
db.append(STRING_WITH_LEN(", "));
|
||||||
found = 1;
|
found = 1;
|
||||||
db.append(command_array[cnt],command_lengths[cnt]);
|
db.append(command_array[cnt],command_lengths[cnt]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
db.append (" ON ",4);
|
db.append (STRING_WITH_LEN(" ON "));
|
||||||
append_identifier(thd, &db, acl_db->db, strlen(acl_db->db));
|
append_identifier(thd, &db, acl_db->db, strlen(acl_db->db));
|
||||||
db.append (".* TO '",7);
|
db.append (STRING_WITH_LEN(".* TO '"));
|
||||||
db.append(lex_user->user.str, lex_user->user.length,
|
db.append(lex_user->user.str, lex_user->user.length,
|
||||||
system_charset_info);
|
system_charset_info);
|
||||||
db.append ("'@'",3);
|
db.append (STRING_WITH_LEN("'@'"));
|
||||||
db.append(lex_user->host.str, lex_user->host.length,
|
db.append(lex_user->host.str, lex_user->host.length,
|
||||||
system_charset_info);
|
system_charset_info);
|
||||||
db.append ('\'');
|
db.append ('\'');
|
||||||
if (want_access & GRANT_ACL)
|
if (want_access & GRANT_ACL)
|
||||||
db.append(" WITH GRANT OPTION",18);
|
db.append(STRING_WITH_LEN(" WITH GRANT OPTION"));
|
||||||
protocol->prepare_for_resend();
|
protocol->prepare_for_resend();
|
||||||
protocol->store(db.ptr(),db.length(),db.charset());
|
protocol->store(db.ptr(),db.length(),db.charset());
|
||||||
if (protocol->write())
|
if (protocol->write())
|
||||||
@ -4241,12 +4244,12 @@ bool mysql_show_grants(THD *thd,LEX_USER *lex_user)
|
|||||||
ulong test_access= (table_access | grant_table->cols) & ~GRANT_ACL;
|
ulong test_access= (table_access | grant_table->cols) & ~GRANT_ACL;
|
||||||
|
|
||||||
global.length(0);
|
global.length(0);
|
||||||
global.append("GRANT ",6);
|
global.append(STRING_WITH_LEN("GRANT "));
|
||||||
|
|
||||||
if (test_all_bits(table_access, (TABLE_ACLS & ~GRANT_ACL)))
|
if (test_all_bits(table_access, (TABLE_ACLS & ~GRANT_ACL)))
|
||||||
global.append("ALL PRIVILEGES",14);
|
global.append(STRING_WITH_LEN("ALL PRIVILEGES"));
|
||||||
else if (!test_access)
|
else if (!test_access)
|
||||||
global.append("USAGE",5);
|
global.append(STRING_WITH_LEN("USAGE"));
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
/* Add specific column access */
|
/* Add specific column access */
|
||||||
@ -4258,7 +4261,7 @@ bool mysql_show_grants(THD *thd,LEX_USER *lex_user)
|
|||||||
if (test_access & j)
|
if (test_access & j)
|
||||||
{
|
{
|
||||||
if (found)
|
if (found)
|
||||||
global.append(", ",2);
|
global.append(STRING_WITH_LEN(", "));
|
||||||
found= 1;
|
found= 1;
|
||||||
global.append(command_array[counter],command_lengths[counter]);
|
global.append(command_array[counter],command_lengths[counter]);
|
||||||
|
|
||||||
@ -4282,14 +4285,14 @@ bool mysql_show_grants(THD *thd,LEX_USER *lex_user)
|
|||||||
*/
|
*/
|
||||||
if (table_access & j)
|
if (table_access & j)
|
||||||
{
|
{
|
||||||
global.append(", ", 2);
|
global.append(STRING_WITH_LEN(", "));
|
||||||
global.append(command_array[counter],
|
global.append(command_array[counter],
|
||||||
command_lengths[counter]);
|
command_lengths[counter]);
|
||||||
}
|
}
|
||||||
global.append(" (",2);
|
global.append(STRING_WITH_LEN(" ("));
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
global.append(", ",2);
|
global.append(STRING_WITH_LEN(", "));
|
||||||
global.append(grant_column->column,
|
global.append(grant_column->column,
|
||||||
grant_column->key_length,
|
grant_column->key_length,
|
||||||
system_charset_info);
|
system_charset_info);
|
||||||
@ -4301,21 +4304,21 @@ bool mysql_show_grants(THD *thd,LEX_USER *lex_user)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
global.append(" ON ",4);
|
global.append(STRING_WITH_LEN(" ON "));
|
||||||
append_identifier(thd, &global, grant_table->db,
|
append_identifier(thd, &global, grant_table->db,
|
||||||
strlen(grant_table->db));
|
strlen(grant_table->db));
|
||||||
global.append('.');
|
global.append('.');
|
||||||
append_identifier(thd, &global, grant_table->tname,
|
append_identifier(thd, &global, grant_table->tname,
|
||||||
strlen(grant_table->tname));
|
strlen(grant_table->tname));
|
||||||
global.append(" TO '",5);
|
global.append(STRING_WITH_LEN(" TO '"));
|
||||||
global.append(lex_user->user.str, lex_user->user.length,
|
global.append(lex_user->user.str, lex_user->user.length,
|
||||||
system_charset_info);
|
system_charset_info);
|
||||||
global.append("'@'",3);
|
global.append(STRING_WITH_LEN("'@'"));
|
||||||
global.append(lex_user->host.str,lex_user->host.length,
|
global.append(lex_user->host.str,lex_user->host.length,
|
||||||
system_charset_info);
|
system_charset_info);
|
||||||
global.append('\'');
|
global.append('\'');
|
||||||
if (table_access & GRANT_ACL)
|
if (table_access & GRANT_ACL)
|
||||||
global.append(" WITH GRANT OPTION",18);
|
global.append(STRING_WITH_LEN(" WITH GRANT OPTION"));
|
||||||
protocol->prepare_for_resend();
|
protocol->prepare_for_resend();
|
||||||
protocol->store(global.ptr(),global.length(),global.charset());
|
protocol->store(global.ptr(),global.length(),global.charset());
|
||||||
if (protocol->write())
|
if (protocol->write())
|
||||||
@ -4328,14 +4331,14 @@ bool mysql_show_grants(THD *thd,LEX_USER *lex_user)
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (show_routine_grants(thd, lex_user, &proc_priv_hash,
|
if (show_routine_grants(thd, lex_user, &proc_priv_hash,
|
||||||
"PROCEDURE", 9, buff, sizeof(buff)))
|
STRING_WITH_LEN("PROCEDURE"), buff, sizeof(buff)))
|
||||||
{
|
{
|
||||||
error= -1;
|
error= -1;
|
||||||
goto end;
|
goto end;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (show_routine_grants(thd, lex_user, &func_priv_hash,
|
if (show_routine_grants(thd, lex_user, &func_priv_hash,
|
||||||
"FUNCTION", 8, buff, sizeof(buff)))
|
STRING_WITH_LEN("FUNCTION"), buff, sizeof(buff)))
|
||||||
{
|
{
|
||||||
error= -1;
|
error= -1;
|
||||||
goto end;
|
goto end;
|
||||||
@ -4376,10 +4379,10 @@ static int show_routine_grants(THD* thd, LEX_USER *lex_user, HASH *hash,
|
|||||||
ulong test_access= proc_access & ~GRANT_ACL;
|
ulong test_access= proc_access & ~GRANT_ACL;
|
||||||
|
|
||||||
global.length(0);
|
global.length(0);
|
||||||
global.append("GRANT ",6);
|
global.append(STRING_WITH_LEN("GRANT "));
|
||||||
|
|
||||||
if (!test_access)
|
if (!test_access)
|
||||||
global.append("USAGE",5);
|
global.append(STRING_WITH_LEN("USAGE"));
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
/* Add specific procedure access */
|
/* Add specific procedure access */
|
||||||
@ -4391,13 +4394,13 @@ static int show_routine_grants(THD* thd, LEX_USER *lex_user, HASH *hash,
|
|||||||
if (test_access & j)
|
if (test_access & j)
|
||||||
{
|
{
|
||||||
if (found)
|
if (found)
|
||||||
global.append(", ",2);
|
global.append(STRING_WITH_LEN(", "));
|
||||||
found= 1;
|
found= 1;
|
||||||
global.append(command_array[counter],command_lengths[counter]);
|
global.append(command_array[counter],command_lengths[counter]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
global.append(" ON ",4);
|
global.append(STRING_WITH_LEN(" ON "));
|
||||||
global.append(type,typelen);
|
global.append(type,typelen);
|
||||||
global.append(' ');
|
global.append(' ');
|
||||||
append_identifier(thd, &global, grant_proc->db,
|
append_identifier(thd, &global, grant_proc->db,
|
||||||
@ -4405,15 +4408,15 @@ static int show_routine_grants(THD* thd, LEX_USER *lex_user, HASH *hash,
|
|||||||
global.append('.');
|
global.append('.');
|
||||||
append_identifier(thd, &global, grant_proc->tname,
|
append_identifier(thd, &global, grant_proc->tname,
|
||||||
strlen(grant_proc->tname));
|
strlen(grant_proc->tname));
|
||||||
global.append(" TO '",5);
|
global.append(STRING_WITH_LEN(" TO '"));
|
||||||
global.append(lex_user->user.str, lex_user->user.length,
|
global.append(lex_user->user.str, lex_user->user.length,
|
||||||
system_charset_info);
|
system_charset_info);
|
||||||
global.append("'@'",3);
|
global.append(STRING_WITH_LEN("'@'"));
|
||||||
global.append(lex_user->host.str,lex_user->host.length,
|
global.append(lex_user->host.str,lex_user->host.length,
|
||||||
system_charset_info);
|
system_charset_info);
|
||||||
global.append('\'');
|
global.append('\'');
|
||||||
if (proc_access & GRANT_ACL)
|
if (proc_access & GRANT_ACL)
|
||||||
global.append(" WITH GRANT OPTION",18);
|
global.append(STRING_WITH_LEN(" WITH GRANT OPTION"));
|
||||||
protocol->prepare_for_resend();
|
protocol->prepare_for_resend();
|
||||||
protocol->store(global.ptr(),global.length(),global.charset());
|
protocol->store(global.ptr(),global.length(),global.charset());
|
||||||
if (protocol->write())
|
if (protocol->write())
|
||||||
@ -5068,7 +5071,7 @@ static void append_user(String *str, LEX_USER *user)
|
|||||||
str->append(',');
|
str->append(',');
|
||||||
str->append('\'');
|
str->append('\'');
|
||||||
str->append(user->user.str);
|
str->append(user->user.str);
|
||||||
str->append("'@'");
|
str->append(STRING_WITH_LEN("'@'"));
|
||||||
str->append(user->host.str);
|
str->append(user->host.str);
|
||||||
str->append('\'');
|
str->append('\'');
|
||||||
}
|
}
|
||||||
@ -5650,7 +5653,8 @@ int fill_schema_user_privileges(THD *thd, TABLE_LIST *tables, COND *cond)
|
|||||||
|
|
||||||
strxmov(buff,"'",user,"'@'",host,"'",NullS);
|
strxmov(buff,"'",user,"'@'",host,"'",NullS);
|
||||||
if (!(want_access & ~GRANT_ACL))
|
if (!(want_access & ~GRANT_ACL))
|
||||||
update_schema_privilege(table, buff, 0, 0, 0, 0, "USAGE", 5, is_grantable);
|
update_schema_privilege(table, buff, 0, 0, 0, 0,
|
||||||
|
STRING_WITH_LEN("USAGE"), is_grantable);
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
uint priv_id;
|
uint priv_id;
|
||||||
@ -5708,7 +5712,7 @@ int fill_schema_schema_privileges(THD *thd, TABLE_LIST *tables, COND *cond)
|
|||||||
strxmov(buff,"'",user,"'@'",host,"'",NullS);
|
strxmov(buff,"'",user,"'@'",host,"'",NullS);
|
||||||
if (!(want_access & ~GRANT_ACL))
|
if (!(want_access & ~GRANT_ACL))
|
||||||
update_schema_privilege(table, buff, acl_db->db, 0, 0,
|
update_schema_privilege(table, buff, acl_db->db, 0, 0,
|
||||||
0, "USAGE", 5, is_grantable);
|
0, STRING_WITH_LEN("USAGE"), is_grantable);
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
int cnt;
|
int cnt;
|
||||||
@ -5768,7 +5772,7 @@ int fill_schema_table_privileges(THD *thd, TABLE_LIST *tables, COND *cond)
|
|||||||
strxmov(buff,"'",user,"'@'",grant_table->host.hostname,"'",NullS);
|
strxmov(buff,"'",user,"'@'",grant_table->host.hostname,"'",NullS);
|
||||||
if (!test_access)
|
if (!test_access)
|
||||||
update_schema_privilege(table, buff, grant_table->db, grant_table->tname,
|
update_schema_privilege(table, buff, grant_table->db, grant_table->tname,
|
||||||
0, 0, "USAGE", 5, is_grantable);
|
0, 0, STRING_WITH_LEN("USAGE"), is_grantable);
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
ulong j;
|
ulong j;
|
||||||
|
@ -733,13 +733,13 @@ bool analyse::end_of_records()
|
|||||||
tree_info.found = 0;
|
tree_info.found = 0;
|
||||||
tree_info.item = (*f)->item;
|
tree_info.item = (*f)->item;
|
||||||
|
|
||||||
tmp_str.set("ENUM(", 5,&my_charset_bin);
|
tmp_str.set(STRING_WITH_LEN("ENUM("),&my_charset_bin);
|
||||||
tree_walk(&(*f)->tree, (*f)->collect_enum(), (char*) &tree_info,
|
tree_walk(&(*f)->tree, (*f)->collect_enum(), (char*) &tree_info,
|
||||||
left_root_right);
|
left_root_right);
|
||||||
tmp_str.append(')');
|
tmp_str.append(')');
|
||||||
|
|
||||||
if (!(*f)->nulls)
|
if (!(*f)->nulls)
|
||||||
tmp_str.append(" NOT NULL");
|
tmp_str.append(STRING_WITH_LEN(" NOT NULL"));
|
||||||
output_str_length = tmp_str.length();
|
output_str_length = tmp_str.length();
|
||||||
func_items[9]->set(tmp_str.ptr(), tmp_str.length(), tmp_str.charset());
|
func_items[9]->set(tmp_str.ptr(), tmp_str.length(), tmp_str.charset());
|
||||||
if (result->send_data(result_fields))
|
if (result->send_data(result_fields))
|
||||||
@ -749,35 +749,35 @@ bool analyse::end_of_records()
|
|||||||
|
|
||||||
ans.length(0);
|
ans.length(0);
|
||||||
if (!(*f)->treemem && !(*f)->tree_elements)
|
if (!(*f)->treemem && !(*f)->tree_elements)
|
||||||
ans.append("CHAR(0)", 7);
|
ans.append(STRING_WITH_LEN("CHAR(0)"));
|
||||||
else if ((*f)->item->type() == Item::FIELD_ITEM)
|
else if ((*f)->item->type() == Item::FIELD_ITEM)
|
||||||
{
|
{
|
||||||
switch (((Item_field*) (*f)->item)->field->real_type())
|
switch (((Item_field*) (*f)->item)->field->real_type())
|
||||||
{
|
{
|
||||||
case FIELD_TYPE_TIMESTAMP:
|
case FIELD_TYPE_TIMESTAMP:
|
||||||
ans.append("TIMESTAMP", 9);
|
ans.append(STRING_WITH_LEN("TIMESTAMP"));
|
||||||
break;
|
break;
|
||||||
case FIELD_TYPE_DATETIME:
|
case FIELD_TYPE_DATETIME:
|
||||||
ans.append("DATETIME", 8);
|
ans.append(STRING_WITH_LEN("DATETIME"));
|
||||||
break;
|
break;
|
||||||
case FIELD_TYPE_DATE:
|
case FIELD_TYPE_DATE:
|
||||||
case FIELD_TYPE_NEWDATE:
|
case FIELD_TYPE_NEWDATE:
|
||||||
ans.append("DATE", 4);
|
ans.append(STRING_WITH_LEN("DATE"));
|
||||||
break;
|
break;
|
||||||
case FIELD_TYPE_SET:
|
case FIELD_TYPE_SET:
|
||||||
ans.append("SET", 3);
|
ans.append(STRING_WITH_LEN("SET"));
|
||||||
break;
|
break;
|
||||||
case FIELD_TYPE_YEAR:
|
case FIELD_TYPE_YEAR:
|
||||||
ans.append("YEAR", 4);
|
ans.append(STRING_WITH_LEN("YEAR"));
|
||||||
break;
|
break;
|
||||||
case FIELD_TYPE_TIME:
|
case FIELD_TYPE_TIME:
|
||||||
ans.append("TIME", 4);
|
ans.append(STRING_WITH_LEN("TIME"));
|
||||||
break;
|
break;
|
||||||
case FIELD_TYPE_DECIMAL:
|
case FIELD_TYPE_DECIMAL:
|
||||||
ans.append("DECIMAL", 7);
|
ans.append(STRING_WITH_LEN("DECIMAL"));
|
||||||
// if item is FIELD_ITEM, it _must_be_ Field_num in this case
|
// if item is FIELD_ITEM, it _must_be_ Field_num in this case
|
||||||
if (((Field_num*) ((Item_field*) (*f)->item)->field)->zerofill)
|
if (((Field_num*) ((Item_field*) (*f)->item)->field)->zerofill)
|
||||||
ans.append(" ZEROFILL");
|
ans.append(STRING_WITH_LEN(" ZEROFILL"));
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
(*f)->get_opt_type(&ans, rows);
|
(*f)->get_opt_type(&ans, rows);
|
||||||
@ -785,7 +785,7 @@ bool analyse::end_of_records()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (!(*f)->nulls)
|
if (!(*f)->nulls)
|
||||||
ans.append(" NOT NULL");
|
ans.append(STRING_WITH_LEN(" NOT NULL"));
|
||||||
func_items[9]->set(ans.ptr(), ans.length(), ans.charset());
|
func_items[9]->set(ans.ptr(), ans.length(), ans.charset());
|
||||||
if (result->send_data(result_fields))
|
if (result->send_data(result_fields))
|
||||||
return -1;
|
return -1;
|
||||||
@ -829,18 +829,18 @@ void field_str::get_opt_type(String *answer, ha_rows total_rows)
|
|||||||
sprintf(buff, "BIGINT(%d)", num_info.integers);
|
sprintf(buff, "BIGINT(%d)", num_info.integers);
|
||||||
answer->append(buff, (uint) strlen(buff));
|
answer->append(buff, (uint) strlen(buff));
|
||||||
if (ev_num_info.llval >= 0 && ev_num_info.min_dval >= 0)
|
if (ev_num_info.llval >= 0 && ev_num_info.min_dval >= 0)
|
||||||
answer->append(" UNSIGNED");
|
answer->append(STRING_WITH_LEN(" UNSIGNED"));
|
||||||
if (num_info.zerofill)
|
if (num_info.zerofill)
|
||||||
answer->append(" ZEROFILL");
|
answer->append(STRING_WITH_LEN(" ZEROFILL"));
|
||||||
}
|
}
|
||||||
else if (max_length < 256)
|
else if (max_length < 256)
|
||||||
{
|
{
|
||||||
if (must_be_blob)
|
if (must_be_blob)
|
||||||
{
|
{
|
||||||
if (item->collation.collation == &my_charset_bin)
|
if (item->collation.collation == &my_charset_bin)
|
||||||
answer->append("TINYBLOB", 8);
|
answer->append(STRING_WITH_LEN("TINYBLOB"));
|
||||||
else
|
else
|
||||||
answer->append("TINYTEXT", 8);
|
answer->append(STRING_WITH_LEN("TINYTEXT"));
|
||||||
}
|
}
|
||||||
else if ((max_length * (total_rows - nulls)) < (sum + total_rows))
|
else if ((max_length * (total_rows - nulls)) < (sum + total_rows))
|
||||||
{
|
{
|
||||||
@ -856,23 +856,23 @@ void field_str::get_opt_type(String *answer, ha_rows total_rows)
|
|||||||
else if (max_length < (1L << 16))
|
else if (max_length < (1L << 16))
|
||||||
{
|
{
|
||||||
if (item->collation.collation == &my_charset_bin)
|
if (item->collation.collation == &my_charset_bin)
|
||||||
answer->append("BLOB", 4);
|
answer->append(STRING_WITH_LEN("BLOB"));
|
||||||
else
|
else
|
||||||
answer->append("TEXT", 4);
|
answer->append(STRING_WITH_LEN("TEXT"));
|
||||||
}
|
}
|
||||||
else if (max_length < (1L << 24))
|
else if (max_length < (1L << 24))
|
||||||
{
|
{
|
||||||
if (item->collation.collation == &my_charset_bin)
|
if (item->collation.collation == &my_charset_bin)
|
||||||
answer->append("MEDIUMBLOB", 10);
|
answer->append(STRING_WITH_LEN("MEDIUMBLOB"));
|
||||||
else
|
else
|
||||||
answer->append("MEDIUMTEXT", 10);
|
answer->append(STRING_WITH_LEN("MEDIUMTEXT"));
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (item->collation.collation == &my_charset_bin)
|
if (item->collation.collation == &my_charset_bin)
|
||||||
answer->append("LONGBLOB", 8);
|
answer->append(STRING_WITH_LEN("LONGBLOB"));
|
||||||
else
|
else
|
||||||
answer->append("LONGTEXT", 8);
|
answer->append(STRING_WITH_LEN("LONGTEXT"));
|
||||||
}
|
}
|
||||||
} // field_str::get_opt_type
|
} // field_str::get_opt_type
|
||||||
|
|
||||||
@ -902,14 +902,14 @@ void field_real::get_opt_type(String *answer,
|
|||||||
sprintf(buff, "BIGINT(%d)", len);
|
sprintf(buff, "BIGINT(%d)", len);
|
||||||
answer->append(buff, (uint) strlen(buff));
|
answer->append(buff, (uint) strlen(buff));
|
||||||
if (min_arg >= 0)
|
if (min_arg >= 0)
|
||||||
answer->append(" UNSIGNED");
|
answer->append(STRING_WITH_LEN(" UNSIGNED"));
|
||||||
}
|
}
|
||||||
else if (item->decimals == NOT_FIXED_DEC)
|
else if (item->decimals == NOT_FIXED_DEC)
|
||||||
{
|
{
|
||||||
if (min_arg >= -FLT_MAX && max_arg <= FLT_MAX)
|
if (min_arg >= -FLT_MAX && max_arg <= FLT_MAX)
|
||||||
answer->append("FLOAT", 5);
|
answer->append(STRING_WITH_LEN("FLOAT"));
|
||||||
else
|
else
|
||||||
answer->append("DOUBLE", 6);
|
answer->append(STRING_WITH_LEN("DOUBLE"));
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -926,7 +926,7 @@ void field_real::get_opt_type(String *answer,
|
|||||||
// a single number shouldn't be zerofill
|
// a single number shouldn't be zerofill
|
||||||
(max_length - (item->decimals + 1)) != 1 &&
|
(max_length - (item->decimals + 1)) != 1 &&
|
||||||
((Field_num*) ((Item_field*) item)->field)->zerofill)
|
((Field_num*) ((Item_field*) item)->field)->zerofill)
|
||||||
answer->append(" ZEROFILL");
|
answer->append(STRING_WITH_LEN(" ZEROFILL"));
|
||||||
} // field_real::get_opt_type
|
} // field_real::get_opt_type
|
||||||
|
|
||||||
|
|
||||||
@ -950,14 +950,14 @@ void field_longlong::get_opt_type(String *answer,
|
|||||||
sprintf(buff, "BIGINT(%d)", (int) max_length);
|
sprintf(buff, "BIGINT(%d)", (int) max_length);
|
||||||
answer->append(buff, (uint) strlen(buff));
|
answer->append(buff, (uint) strlen(buff));
|
||||||
if (min_arg >= 0)
|
if (min_arg >= 0)
|
||||||
answer->append(" UNSIGNED");
|
answer->append(STRING_WITH_LEN(" UNSIGNED"));
|
||||||
|
|
||||||
// if item is FIELD_ITEM, it _must_be_ Field_num in this class
|
// if item is FIELD_ITEM, it _must_be_ Field_num in this class
|
||||||
if ((item->type() == Item::FIELD_ITEM) &&
|
if ((item->type() == Item::FIELD_ITEM) &&
|
||||||
// a single number shouldn't be zerofill
|
// a single number shouldn't be zerofill
|
||||||
max_length != 1 &&
|
max_length != 1 &&
|
||||||
((Field_num*) ((Item_field*) item)->field)->zerofill)
|
((Field_num*) ((Item_field*) item)->field)->zerofill)
|
||||||
answer->append(" ZEROFILL");
|
answer->append(STRING_WITH_LEN(" ZEROFILL"));
|
||||||
} // field_longlong::get_opt_type
|
} // field_longlong::get_opt_type
|
||||||
|
|
||||||
|
|
||||||
@ -982,7 +982,7 @@ void field_ulonglong::get_opt_type(String *answer,
|
|||||||
// a single number shouldn't be zerofill
|
// a single number shouldn't be zerofill
|
||||||
max_length != 1 &&
|
max_length != 1 &&
|
||||||
((Field_num*) ((Item_field*) item)->field)->zerofill)
|
((Field_num*) ((Item_field*) item)->field)->zerofill)
|
||||||
answer->append(" ZEROFILL");
|
answer->append(STRING_WITH_LEN(" ZEROFILL"));
|
||||||
} //field_ulonglong::get_opt_type
|
} //field_ulonglong::get_opt_type
|
||||||
|
|
||||||
|
|
||||||
|
@ -1526,9 +1526,9 @@ void st_select_lex_unit::print(String *str)
|
|||||||
{
|
{
|
||||||
if (sl != first_select())
|
if (sl != first_select())
|
||||||
{
|
{
|
||||||
str->append(" union ", 7);
|
str->append(STRING_WITH_LEN(" union "));
|
||||||
if (union_all)
|
if (union_all)
|
||||||
str->append("all ", 4);
|
str->append(STRING_WITH_LEN("all "));
|
||||||
else if (union_distinct == sl)
|
else if (union_distinct == sl)
|
||||||
union_all= TRUE;
|
union_all= TRUE;
|
||||||
}
|
}
|
||||||
@ -1542,7 +1542,7 @@ void st_select_lex_unit::print(String *str)
|
|||||||
{
|
{
|
||||||
if (fake_select_lex->order_list.elements)
|
if (fake_select_lex->order_list.elements)
|
||||||
{
|
{
|
||||||
str->append(" order by ", 10);
|
str->append(STRING_WITH_LEN(" order by "));
|
||||||
fake_select_lex->print_order(str,
|
fake_select_lex->print_order(str,
|
||||||
(ORDER *) fake_select_lex->
|
(ORDER *) fake_select_lex->
|
||||||
order_list.first);
|
order_list.first);
|
||||||
@ -1565,7 +1565,7 @@ void st_select_lex::print_order(String *str, ORDER *order)
|
|||||||
else
|
else
|
||||||
(*order->item)->print(str);
|
(*order->item)->print(str);
|
||||||
if (!order->asc)
|
if (!order->asc)
|
||||||
str->append(" desc", 5);
|
str->append(STRING_WITH_LEN(" desc"));
|
||||||
if (order->next)
|
if (order->next)
|
||||||
str->append(',');
|
str->append(',');
|
||||||
}
|
}
|
||||||
@ -1588,7 +1588,7 @@ void st_select_lex::print_limit(THD *thd, String *str)
|
|||||||
|
|
||||||
if (explicit_limit)
|
if (explicit_limit)
|
||||||
{
|
{
|
||||||
str->append(" limit ", 7);
|
str->append(STRING_WITH_LEN(" limit "));
|
||||||
if (offset_limit)
|
if (offset_limit)
|
||||||
{
|
{
|
||||||
offset_limit->print(str);
|
offset_limit->print(str);
|
||||||
|
@ -680,7 +680,8 @@ read_sep_field(THD *thd, COPY_INFO &info, TABLE_LIST *table_list,
|
|||||||
length=(uint) (read_info.row_end-pos);
|
length=(uint) (read_info.row_end-pos);
|
||||||
|
|
||||||
if (!read_info.enclosed &&
|
if (!read_info.enclosed &&
|
||||||
(enclosed_length && length == 4 && !memcmp(pos,"NULL",4)) ||
|
(enclosed_length && length == 4 &&
|
||||||
|
!memcmp(pos, STRING_WITH_LEN("NULL"))) ||
|
||||||
(length == 1 && read_info.found_null))
|
(length == 1 && read_info.found_null))
|
||||||
{
|
{
|
||||||
if (item->type() == Item::FIELD_ITEM)
|
if (item->type() == Item::FIELD_ITEM)
|
||||||
|
@ -4566,7 +4566,7 @@ end_with_restore_list:
|
|||||||
buff.append(command[thd->lex->create_view_mode].str,
|
buff.append(command[thd->lex->create_view_mode].str,
|
||||||
command[thd->lex->create_view_mode].length);
|
command[thd->lex->create_view_mode].length);
|
||||||
view_store_options(thd, first_table, &buff);
|
view_store_options(thd, first_table, &buff);
|
||||||
buff.append("VIEW ", 5);
|
buff.append(STRING_WITH_LEN("VIEW "));
|
||||||
/* Test if user supplied a db (ie: we did not use thd->db) */
|
/* Test if user supplied a db (ie: we did not use thd->db) */
|
||||||
if (first_table->db != thd->db && first_table->db[0])
|
if (first_table->db != thd->db && first_table->db[0])
|
||||||
{
|
{
|
||||||
@ -4576,7 +4576,7 @@ end_with_restore_list:
|
|||||||
}
|
}
|
||||||
append_identifier(thd, &buff, first_table->table_name,
|
append_identifier(thd, &buff, first_table->table_name,
|
||||||
first_table->table_name_length);
|
first_table->table_name_length);
|
||||||
buff.append(" AS ", 4);
|
buff.append(STRING_WITH_LEN(" AS "));
|
||||||
buff.append(first_table->source.str, first_table->source.length);
|
buff.append(first_table->source.str, first_table->source.length);
|
||||||
|
|
||||||
Query_log_event qinfo(thd, buff.ptr(), buff.length(), 0, FALSE);
|
Query_log_event qinfo(thd, buff.ptr(), buff.length(), 0, FALSE);
|
||||||
|
@ -1929,7 +1929,7 @@ static const char *get_dynamic_sql_string(LEX *lex, uint *query_len)
|
|||||||
variable absent or equal to NULL, so we need to set variable to
|
variable absent or equal to NULL, so we need to set variable to
|
||||||
something reasonable to get a readable error message during parsing
|
something reasonable to get a readable error message during parsing
|
||||||
*/
|
*/
|
||||||
str.set("NULL", 4, &my_charset_latin1);
|
str.set(STRING_WITH_LEN("NULL"), &my_charset_latin1);
|
||||||
}
|
}
|
||||||
|
|
||||||
needs_conversion= String::needs_conversion(var_value->length(),
|
needs_conversion= String::needs_conversion(var_value->length(),
|
||||||
|
@ -13676,7 +13676,7 @@ static void select_describe(JOIN *join, bool need_tmp_table, bool need_order,
|
|||||||
{
|
{
|
||||||
SELECT_LEX *sl= join->unit->first_select();
|
SELECT_LEX *sl= join->unit->first_select();
|
||||||
uint len= 6, lastop= 0;
|
uint len= 6, lastop= 0;
|
||||||
memcpy(table_name_buffer, "<union", 6);
|
memcpy(table_name_buffer, STRING_WITH_LEN("<union"));
|
||||||
for (; sl && len + lastop + 5 < NAME_LEN; sl= sl->next_select())
|
for (; sl && len + lastop + 5 < NAME_LEN; sl= sl->next_select())
|
||||||
{
|
{
|
||||||
len+= lastop;
|
len+= lastop;
|
||||||
@ -13685,7 +13685,7 @@ static void select_describe(JOIN *join, bool need_tmp_table, bool need_order,
|
|||||||
}
|
}
|
||||||
if (sl || len + lastop >= NAME_LEN)
|
if (sl || len + lastop >= NAME_LEN)
|
||||||
{
|
{
|
||||||
memcpy(table_name_buffer + len, "...>", 5);
|
memcpy(table_name_buffer + len, STRING_WITH_LEN("...>") + 1);
|
||||||
len+= 4;
|
len+= 4;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@ -13864,7 +13864,7 @@ static void select_describe(JOIN *join, bool need_tmp_table, bool need_order,
|
|||||||
quick_type == QUICK_SELECT_I::QS_TYPE_ROR_INTERSECT ||
|
quick_type == QUICK_SELECT_I::QS_TYPE_ROR_INTERSECT ||
|
||||||
quick_type == QUICK_SELECT_I::QS_TYPE_INDEX_MERGE)
|
quick_type == QUICK_SELECT_I::QS_TYPE_INDEX_MERGE)
|
||||||
{
|
{
|
||||||
extra.append("; Using ");
|
extra.append(STRING_WITH_LEN("; Using "));
|
||||||
tab->select->quick->add_info_string(&extra);
|
tab->select->quick->add_info_string(&extra);
|
||||||
}
|
}
|
||||||
if (tab->select)
|
if (tab->select)
|
||||||
@ -13872,7 +13872,8 @@ static void select_describe(JOIN *join, bool need_tmp_table, bool need_order,
|
|||||||
if (tab->use_quick == 2)
|
if (tab->use_quick == 2)
|
||||||
{
|
{
|
||||||
char buf[MAX_KEY/8+1];
|
char buf[MAX_KEY/8+1];
|
||||||
extra.append("; Range checked for each record (index map: 0x");
|
extra.append(STRING_WITH_LEN("; Range checked for each "
|
||||||
|
"record (index map: 0x"));
|
||||||
extra.append(tab->keys.print(buf));
|
extra.append(tab->keys.print(buf));
|
||||||
extra.append(')');
|
extra.append(')');
|
||||||
}
|
}
|
||||||
@ -13882,38 +13883,39 @@ static void select_describe(JOIN *join, bool need_tmp_table, bool need_order,
|
|||||||
|
|
||||||
if (thd->variables.engine_condition_pushdown && pushed_cond)
|
if (thd->variables.engine_condition_pushdown && pushed_cond)
|
||||||
{
|
{
|
||||||
extra.append("; Using where with pushed condition");
|
extra.append(STRING_WITH_LEN("; Using where with pushed "
|
||||||
|
"condition"));
|
||||||
if (thd->lex->describe & DESCRIBE_EXTENDED)
|
if (thd->lex->describe & DESCRIBE_EXTENDED)
|
||||||
{
|
{
|
||||||
extra.append(": ");
|
extra.append(STRING_WITH_LEN(": "));
|
||||||
((COND *)pushed_cond)->print(&extra);
|
((COND *)pushed_cond)->print(&extra);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
extra.append("; Using where");
|
extra.append(STRING_WITH_LEN("; Using where"));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (key_read)
|
if (key_read)
|
||||||
{
|
{
|
||||||
if (quick_type == QUICK_SELECT_I::QS_TYPE_GROUP_MIN_MAX)
|
if (quick_type == QUICK_SELECT_I::QS_TYPE_GROUP_MIN_MAX)
|
||||||
extra.append("; Using index for group-by");
|
extra.append(STRING_WITH_LEN("; Using index for group-by"));
|
||||||
else
|
else
|
||||||
extra.append("; Using index");
|
extra.append(STRING_WITH_LEN("; Using index"));
|
||||||
}
|
}
|
||||||
if (table->reginfo.not_exists_optimize)
|
if (table->reginfo.not_exists_optimize)
|
||||||
extra.append("; Not exists");
|
extra.append(STRING_WITH_LEN("; Not exists"));
|
||||||
if (need_tmp_table)
|
if (need_tmp_table)
|
||||||
{
|
{
|
||||||
need_tmp_table=0;
|
need_tmp_table=0;
|
||||||
extra.append("; Using temporary");
|
extra.append(STRING_WITH_LEN("; Using temporary"));
|
||||||
}
|
}
|
||||||
if (need_order)
|
if (need_order)
|
||||||
{
|
{
|
||||||
need_order=0;
|
need_order=0;
|
||||||
extra.append("; Using filesort");
|
extra.append(STRING_WITH_LEN("; Using filesort"));
|
||||||
}
|
}
|
||||||
if (distinct & test_all_bits(used_tables,thd->used_tables))
|
if (distinct & test_all_bits(used_tables,thd->used_tables))
|
||||||
extra.append("; Distinct");
|
extra.append(STRING_WITH_LEN("; Distinct"));
|
||||||
|
|
||||||
/* Skip initial "; "*/
|
/* Skip initial "; "*/
|
||||||
const char *str= extra.ptr();
|
const char *str= extra.ptr();
|
||||||
@ -14030,15 +14032,18 @@ static void print_join(THD *thd, String *str, List<TABLE_LIST> *tables)
|
|||||||
{
|
{
|
||||||
TABLE_LIST *curr= *tbl;
|
TABLE_LIST *curr= *tbl;
|
||||||
if (curr->outer_join)
|
if (curr->outer_join)
|
||||||
str->append(" left join ", 11); // MySQL converts right to left joins
|
{
|
||||||
|
/* MySQL converts right to left joins */
|
||||||
|
str->append(STRING_WITH_LEN(" left join "));
|
||||||
|
}
|
||||||
else if (curr->straight)
|
else if (curr->straight)
|
||||||
str->append(" straight_join ", 15);
|
str->append(STRING_WITH_LEN(" straight_join "));
|
||||||
else
|
else
|
||||||
str->append(" join ", 6);
|
str->append(STRING_WITH_LEN(" join "));
|
||||||
curr->print(thd, str);
|
curr->print(thd, str);
|
||||||
if (curr->on_expr)
|
if (curr->on_expr)
|
||||||
{
|
{
|
||||||
str->append(" on(", 4);
|
str->append(STRING_WITH_LEN(" on("));
|
||||||
curr->on_expr->print(str);
|
curr->on_expr->print(str);
|
||||||
str->append(')');
|
str->append(')');
|
||||||
}
|
}
|
||||||
@ -14123,28 +14128,28 @@ void st_select_lex::print(THD *thd, String *str)
|
|||||||
if (!thd)
|
if (!thd)
|
||||||
thd= current_thd;
|
thd= current_thd;
|
||||||
|
|
||||||
str->append("select ", 7);
|
str->append(STRING_WITH_LEN("select "));
|
||||||
|
|
||||||
/* First add options */
|
/* First add options */
|
||||||
if (options & SELECT_STRAIGHT_JOIN)
|
if (options & SELECT_STRAIGHT_JOIN)
|
||||||
str->append("straight_join ", 14);
|
str->append(STRING_WITH_LEN("straight_join "));
|
||||||
if ((thd->lex->lock_option == TL_READ_HIGH_PRIORITY) &&
|
if ((thd->lex->lock_option == TL_READ_HIGH_PRIORITY) &&
|
||||||
(this == &thd->lex->select_lex))
|
(this == &thd->lex->select_lex))
|
||||||
str->append("high_priority ", 14);
|
str->append(STRING_WITH_LEN("high_priority "));
|
||||||
if (options & SELECT_DISTINCT)
|
if (options & SELECT_DISTINCT)
|
||||||
str->append("distinct ", 9);
|
str->append(STRING_WITH_LEN("distinct "));
|
||||||
if (options & SELECT_SMALL_RESULT)
|
if (options & SELECT_SMALL_RESULT)
|
||||||
str->append("sql_small_result ", 17);
|
str->append(STRING_WITH_LEN("sql_small_result "));
|
||||||
if (options & SELECT_BIG_RESULT)
|
if (options & SELECT_BIG_RESULT)
|
||||||
str->append("sql_big_result ", 15);
|
str->append(STRING_WITH_LEN("sql_big_result "));
|
||||||
if (options & OPTION_BUFFER_RESULT)
|
if (options & OPTION_BUFFER_RESULT)
|
||||||
str->append("sql_buffer_result ", 18);
|
str->append(STRING_WITH_LEN("sql_buffer_result "));
|
||||||
if (options & OPTION_FOUND_ROWS)
|
if (options & OPTION_FOUND_ROWS)
|
||||||
str->append("sql_calc_found_rows ", 20);
|
str->append(STRING_WITH_LEN("sql_calc_found_rows "));
|
||||||
if (!thd->lex->safe_to_cache_query)
|
if (!thd->lex->safe_to_cache_query)
|
||||||
str->append("sql_no_cache ", 13);
|
str->append(STRING_WITH_LEN("sql_no_cache "));
|
||||||
if (options & OPTION_TO_QUERY_CACHE)
|
if (options & OPTION_TO_QUERY_CACHE)
|
||||||
str->append("sql_cache ", 10);
|
str->append(STRING_WITH_LEN("sql_cache "));
|
||||||
|
|
||||||
//Item List
|
//Item List
|
||||||
bool first= 1;
|
bool first= 1;
|
||||||
@ -14165,7 +14170,7 @@ void st_select_lex::print(THD *thd, String *str)
|
|||||||
*/
|
*/
|
||||||
if (table_list.elements)
|
if (table_list.elements)
|
||||||
{
|
{
|
||||||
str->append(" from ", 6);
|
str->append(STRING_WITH_LEN(" from "));
|
||||||
/* go through join tree */
|
/* go through join tree */
|
||||||
print_join(thd, str, &top_join_list);
|
print_join(thd, str, &top_join_list);
|
||||||
}
|
}
|
||||||
@ -14176,22 +14181,22 @@ void st_select_lex::print(THD *thd, String *str)
|
|||||||
cur_where= join->conds;
|
cur_where= join->conds;
|
||||||
if (cur_where)
|
if (cur_where)
|
||||||
{
|
{
|
||||||
str->append(" where ", 7);
|
str->append(STRING_WITH_LEN(" where "));
|
||||||
cur_where->print(str);
|
cur_where->print(str);
|
||||||
}
|
}
|
||||||
|
|
||||||
// group by & olap
|
// group by & olap
|
||||||
if (group_list.elements)
|
if (group_list.elements)
|
||||||
{
|
{
|
||||||
str->append(" group by ", 10);
|
str->append(STRING_WITH_LEN(" group by "));
|
||||||
print_order(str, (ORDER *) group_list.first);
|
print_order(str, (ORDER *) group_list.first);
|
||||||
switch (olap)
|
switch (olap)
|
||||||
{
|
{
|
||||||
case CUBE_TYPE:
|
case CUBE_TYPE:
|
||||||
str->append(" with cube", 10);
|
str->append(STRING_WITH_LEN(" with cube"));
|
||||||
break;
|
break;
|
||||||
case ROLLUP_TYPE:
|
case ROLLUP_TYPE:
|
||||||
str->append(" with rollup", 12);
|
str->append(STRING_WITH_LEN(" with rollup"));
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
; //satisfy compiler
|
; //satisfy compiler
|
||||||
@ -14205,13 +14210,13 @@ void st_select_lex::print(THD *thd, String *str)
|
|||||||
|
|
||||||
if (cur_having)
|
if (cur_having)
|
||||||
{
|
{
|
||||||
str->append(" having ", 8);
|
str->append(STRING_WITH_LEN(" having "));
|
||||||
cur_having->print(str);
|
cur_having->print(str);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (order_list.elements)
|
if (order_list.elements)
|
||||||
{
|
{
|
||||||
str->append(" order by ", 10);
|
str->append(STRING_WITH_LEN(" order by "));
|
||||||
print_order(str, (ORDER *) order_list.first);
|
print_order(str, (ORDER *) order_list.first);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
168
sql/sql_show.cc
168
sql/sql_show.cc
@ -504,22 +504,22 @@ bool mysqld_show_create_db(THD *thd, char *dbname,
|
|||||||
protocol->prepare_for_resend();
|
protocol->prepare_for_resend();
|
||||||
protocol->store(dbname, strlen(dbname), system_charset_info);
|
protocol->store(dbname, strlen(dbname), system_charset_info);
|
||||||
buffer.length(0);
|
buffer.length(0);
|
||||||
buffer.append("CREATE DATABASE ", 16);
|
buffer.append(STRING_WITH_LEN("CREATE DATABASE "));
|
||||||
if (create_options & HA_LEX_CREATE_IF_NOT_EXISTS)
|
if (create_options & HA_LEX_CREATE_IF_NOT_EXISTS)
|
||||||
buffer.append("/*!32312 IF NOT EXISTS*/ ", 25);
|
buffer.append(STRING_WITH_LEN("/*!32312 IF NOT EXISTS*/ "));
|
||||||
append_identifier(thd, &buffer, dbname, strlen(dbname));
|
append_identifier(thd, &buffer, dbname, strlen(dbname));
|
||||||
|
|
||||||
if (create.default_table_charset)
|
if (create.default_table_charset)
|
||||||
{
|
{
|
||||||
buffer.append(" /*!40100", 9);
|
buffer.append(STRING_WITH_LEN(" /*!40100"));
|
||||||
buffer.append(" DEFAULT CHARACTER SET ", 23);
|
buffer.append(STRING_WITH_LEN(" DEFAULT CHARACTER SET "));
|
||||||
buffer.append(create.default_table_charset->csname);
|
buffer.append(create.default_table_charset->csname);
|
||||||
if (!(create.default_table_charset->state & MY_CS_PRIMARY))
|
if (!(create.default_table_charset->state & MY_CS_PRIMARY))
|
||||||
{
|
{
|
||||||
buffer.append(" COLLATE ", 9);
|
buffer.append(STRING_WITH_LEN(" COLLATE "));
|
||||||
buffer.append(create.default_table_charset->name);
|
buffer.append(create.default_table_charset->name);
|
||||||
}
|
}
|
||||||
buffer.append(" */", 3);
|
buffer.append(STRING_WITH_LEN(" */"));
|
||||||
}
|
}
|
||||||
protocol->store(buffer.ptr(), buffer.length(), buffer.charset());
|
protocol->store(buffer.ptr(), buffer.length(), buffer.charset());
|
||||||
|
|
||||||
@ -730,7 +730,7 @@ static void append_directory(THD *thd, String *packet, const char *dir_type,
|
|||||||
uint length= dirname_length(filename);
|
uint length= dirname_length(filename);
|
||||||
packet->append(' ');
|
packet->append(' ');
|
||||||
packet->append(dir_type);
|
packet->append(dir_type);
|
||||||
packet->append(" DIRECTORY='", 12);
|
packet->append(STRING_WITH_LEN(" DIRECTORY='"));
|
||||||
#ifdef __WIN__
|
#ifdef __WIN__
|
||||||
/* Convert \ to / to be able to create table on unix */
|
/* Convert \ to / to be able to create table on unix */
|
||||||
char *winfilename= (char*) thd->memdup(filename, length);
|
char *winfilename= (char*) thd->memdup(filename, length);
|
||||||
@ -779,16 +779,16 @@ store_create_info(THD *thd, TABLE_LIST *table_list, String *packet)
|
|||||||
restore_record(table, s->default_values); // Get empty record
|
restore_record(table, s->default_values); // Get empty record
|
||||||
|
|
||||||
if (share->tmp_table)
|
if (share->tmp_table)
|
||||||
packet->append("CREATE TEMPORARY TABLE ", 23);
|
packet->append(STRING_WITH_LEN("CREATE TEMPORARY TABLE "));
|
||||||
else
|
else
|
||||||
packet->append("CREATE TABLE ", 13);
|
packet->append(STRING_WITH_LEN("CREATE TABLE "));
|
||||||
if (table_list->schema_table)
|
if (table_list->schema_table)
|
||||||
alias= table_list->schema_table->table_name;
|
alias= table_list->schema_table->table_name;
|
||||||
else
|
else
|
||||||
alias= (lower_case_table_names == 2 ? table->alias :
|
alias= (lower_case_table_names == 2 ? table->alias :
|
||||||
share->table_name);
|
share->table_name);
|
||||||
append_identifier(thd, packet, alias, strlen(alias));
|
append_identifier(thd, packet, alias, strlen(alias));
|
||||||
packet->append(" (\n", 3);
|
packet->append(STRING_WITH_LEN(" (\n"));
|
||||||
|
|
||||||
for (ptr=table->field ; (field= *ptr); ptr++)
|
for (ptr=table->field ; (field= *ptr); ptr++)
|
||||||
{
|
{
|
||||||
@ -797,9 +797,9 @@ store_create_info(THD *thd, TABLE_LIST *table_list, String *packet)
|
|||||||
uint flags = field->flags;
|
uint flags = field->flags;
|
||||||
|
|
||||||
if (ptr != table->field)
|
if (ptr != table->field)
|
||||||
packet->append(",\n", 2);
|
packet->append(STRING_WITH_LEN(",\n"));
|
||||||
|
|
||||||
packet->append(" ", 2);
|
packet->append(STRING_WITH_LEN(" "));
|
||||||
append_identifier(thd,packet,field->field_name, strlen(field->field_name));
|
append_identifier(thd,packet,field->field_name, strlen(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()
|
||||||
@ -816,7 +816,7 @@ store_create_info(THD *thd, TABLE_LIST *table_list, String *packet)
|
|||||||
{
|
{
|
||||||
if (field->charset() != share->table_charset)
|
if (field->charset() != share->table_charset)
|
||||||
{
|
{
|
||||||
packet->append(" character set ", 15);
|
packet->append(STRING_WITH_LEN(" character set "));
|
||||||
packet->append(field->charset()->csname);
|
packet->append(field->charset()->csname);
|
||||||
}
|
}
|
||||||
/*
|
/*
|
||||||
@ -825,20 +825,20 @@ store_create_info(THD *thd, TABLE_LIST *table_list, String *packet)
|
|||||||
*/
|
*/
|
||||||
if (!(field->charset()->state & MY_CS_PRIMARY))
|
if (!(field->charset()->state & MY_CS_PRIMARY))
|
||||||
{
|
{
|
||||||
packet->append(" collate ", 9);
|
packet->append(STRING_WITH_LEN(" collate "));
|
||||||
packet->append(field->charset()->name);
|
packet->append(field->charset()->name);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (flags & NOT_NULL_FLAG)
|
if (flags & NOT_NULL_FLAG)
|
||||||
packet->append(" NOT NULL", 9);
|
packet->append(STRING_WITH_LEN(" NOT NULL"));
|
||||||
else if (field->type() == FIELD_TYPE_TIMESTAMP)
|
else if (field->type() == FIELD_TYPE_TIMESTAMP)
|
||||||
{
|
{
|
||||||
/*
|
/*
|
||||||
TIMESTAMP field require explicit NULL flag, because unlike
|
TIMESTAMP field require explicit NULL flag, because unlike
|
||||||
all other fields they are treated as NOT NULL by default.
|
all other fields they are treated as NOT NULL by default.
|
||||||
*/
|
*/
|
||||||
packet->append(" NULL", 5);
|
packet->append(STRING_WITH_LEN(" NULL"));
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -856,9 +856,9 @@ store_create_info(THD *thd, TABLE_LIST *table_list, String *packet)
|
|||||||
|
|
||||||
if (has_default)
|
if (has_default)
|
||||||
{
|
{
|
||||||
packet->append(" default ", 9);
|
packet->append(STRING_WITH_LEN(" default "));
|
||||||
if (has_now_default)
|
if (has_now_default)
|
||||||
packet->append("CURRENT_TIMESTAMP",17);
|
packet->append(STRING_WITH_LEN("CURRENT_TIMESTAMP"));
|
||||||
else if (!field->is_null())
|
else if (!field->is_null())
|
||||||
{ // Not null by default
|
{ // Not null by default
|
||||||
type.set(tmp, sizeof(tmp), field->charset());
|
type.set(tmp, sizeof(tmp), field->charset());
|
||||||
@ -873,10 +873,10 @@ store_create_info(THD *thd, TABLE_LIST *table_list, String *packet)
|
|||||||
append_unescaped(packet, def_val.ptr(), def_val.length());
|
append_unescaped(packet, def_val.ptr(), def_val.length());
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
packet->append("''",2);
|
packet->append(STRING_WITH_LEN("''"));
|
||||||
}
|
}
|
||||||
else if (field->maybe_null())
|
else if (field->maybe_null())
|
||||||
packet->append("NULL", 4); // Null as default
|
packet->append(STRING_WITH_LEN("NULL")); // Null as default
|
||||||
else
|
else
|
||||||
packet->append(tmp);
|
packet->append(tmp);
|
||||||
}
|
}
|
||||||
@ -884,15 +884,15 @@ store_create_info(THD *thd, TABLE_LIST *table_list, String *packet)
|
|||||||
if (!(thd->variables.sql_mode & MODE_NO_FIELD_OPTIONS) &&
|
if (!(thd->variables.sql_mode & MODE_NO_FIELD_OPTIONS) &&
|
||||||
table->timestamp_field == field &&
|
table->timestamp_field == field &&
|
||||||
field->unireg_check != Field::TIMESTAMP_DN_FIELD)
|
field->unireg_check != Field::TIMESTAMP_DN_FIELD)
|
||||||
packet->append(" on update CURRENT_TIMESTAMP",28);
|
packet->append(STRING_WITH_LEN(" on update CURRENT_TIMESTAMP"));
|
||||||
|
|
||||||
if (field->unireg_check == Field::NEXT_NUMBER &&
|
if (field->unireg_check == Field::NEXT_NUMBER &&
|
||||||
!(thd->variables.sql_mode & MODE_NO_FIELD_OPTIONS))
|
!(thd->variables.sql_mode & MODE_NO_FIELD_OPTIONS))
|
||||||
packet->append(" auto_increment", 15 );
|
packet->append(STRING_WITH_LEN(" auto_increment"));
|
||||||
|
|
||||||
if (field->comment.length)
|
if (field->comment.length)
|
||||||
{
|
{
|
||||||
packet->append(" COMMENT ",9);
|
packet->append(STRING_WITH_LEN(" COMMENT "));
|
||||||
append_unescaped(packet, field->comment.str, field->comment.length);
|
append_unescaped(packet, field->comment.str, field->comment.length);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -907,20 +907,20 @@ store_create_info(THD *thd, TABLE_LIST *table_list, String *packet)
|
|||||||
{
|
{
|
||||||
KEY_PART_INFO *key_part= key_info->key_part;
|
KEY_PART_INFO *key_part= key_info->key_part;
|
||||||
bool found_primary=0;
|
bool found_primary=0;
|
||||||
packet->append(",\n ", 4);
|
packet->append(STRING_WITH_LEN(",\n "));
|
||||||
|
|
||||||
if (i == primary_key && !strcmp(key_info->name, primary_key_name))
|
if (i == primary_key && !strcmp(key_info->name, primary_key_name))
|
||||||
{
|
{
|
||||||
found_primary=1;
|
found_primary=1;
|
||||||
packet->append("PRIMARY ", 8);
|
packet->append(STRING_WITH_LEN("PRIMARY "));
|
||||||
}
|
}
|
||||||
else if (key_info->flags & HA_NOSAME)
|
else if (key_info->flags & HA_NOSAME)
|
||||||
packet->append("UNIQUE ", 7);
|
packet->append(STRING_WITH_LEN("UNIQUE "));
|
||||||
else if (key_info->flags & HA_FULLTEXT)
|
else if (key_info->flags & HA_FULLTEXT)
|
||||||
packet->append("FULLTEXT ", 9);
|
packet->append(STRING_WITH_LEN("FULLTEXT "));
|
||||||
else if (key_info->flags & HA_SPATIAL)
|
else if (key_info->flags & HA_SPATIAL)
|
||||||
packet->append("SPATIAL ", 8);
|
packet->append(STRING_WITH_LEN("SPATIAL "));
|
||||||
packet->append("KEY ", 4);
|
packet->append(STRING_WITH_LEN("KEY "));
|
||||||
|
|
||||||
if (!found_primary)
|
if (!found_primary)
|
||||||
append_identifier(thd, packet, key_info->name, strlen(key_info->name));
|
append_identifier(thd, packet, key_info->name, strlen(key_info->name));
|
||||||
@ -929,19 +929,19 @@ store_create_info(THD *thd, TABLE_LIST *table_list, String *packet)
|
|||||||
!limited_mysql_mode && !foreign_db_mode)
|
!limited_mysql_mode && !foreign_db_mode)
|
||||||
{
|
{
|
||||||
if (key_info->algorithm == HA_KEY_ALG_BTREE)
|
if (key_info->algorithm == HA_KEY_ALG_BTREE)
|
||||||
packet->append(" USING BTREE", 12);
|
packet->append(STRING_WITH_LEN(" USING BTREE"));
|
||||||
|
|
||||||
if (key_info->algorithm == HA_KEY_ALG_HASH)
|
if (key_info->algorithm == HA_KEY_ALG_HASH)
|
||||||
packet->append(" USING HASH", 11);
|
packet->append(STRING_WITH_LEN(" USING HASH"));
|
||||||
|
|
||||||
// +BAR: send USING only in non-default case: non-spatial rtree
|
// +BAR: send USING only in non-default case: non-spatial rtree
|
||||||
if ((key_info->algorithm == HA_KEY_ALG_RTREE) &&
|
if ((key_info->algorithm == HA_KEY_ALG_RTREE) &&
|
||||||
!(key_info->flags & HA_SPATIAL))
|
!(key_info->flags & HA_SPATIAL))
|
||||||
packet->append(" USING RTREE", 12);
|
packet->append(STRING_WITH_LEN(" USING RTREE"));
|
||||||
|
|
||||||
// No need to send USING FULLTEXT, it is sent as FULLTEXT KEY
|
// No need to send USING FULLTEXT, it is sent as FULLTEXT KEY
|
||||||
}
|
}
|
||||||
packet->append(" (", 2);
|
packet->append(STRING_WITH_LEN(" ("));
|
||||||
|
|
||||||
for (uint j=0 ; j < key_info->key_parts ; j++,key_part++)
|
for (uint j=0 ; j < key_info->key_parts ; j++,key_part++)
|
||||||
{
|
{
|
||||||
@ -978,71 +978,71 @@ store_create_info(THD *thd, TABLE_LIST *table_list, String *packet)
|
|||||||
file->free_foreign_key_create_info(for_str);
|
file->free_foreign_key_create_info(for_str);
|
||||||
}
|
}
|
||||||
|
|
||||||
packet->append("\n)", 2);
|
packet->append(STRING_WITH_LEN("\n)"));
|
||||||
if (!(thd->variables.sql_mode & MODE_NO_TABLE_OPTIONS) && !foreign_db_mode)
|
if (!(thd->variables.sql_mode & MODE_NO_TABLE_OPTIONS) && !foreign_db_mode)
|
||||||
{
|
{
|
||||||
if (thd->variables.sql_mode & (MODE_MYSQL323 | MODE_MYSQL40))
|
if (thd->variables.sql_mode & (MODE_MYSQL323 | MODE_MYSQL40))
|
||||||
packet->append(" TYPE=", 6);
|
packet->append(STRING_WITH_LEN(" TYPE="));
|
||||||
else
|
else
|
||||||
packet->append(" ENGINE=", 8);
|
packet->append(STRING_WITH_LEN(" ENGINE="));
|
||||||
packet->append(file->table_type());
|
packet->append(file->table_type());
|
||||||
|
|
||||||
if (share->table_charset &&
|
if (share->table_charset &&
|
||||||
!(thd->variables.sql_mode & MODE_MYSQL323) &&
|
!(thd->variables.sql_mode & MODE_MYSQL323) &&
|
||||||
!(thd->variables.sql_mode & MODE_MYSQL40))
|
!(thd->variables.sql_mode & MODE_MYSQL40))
|
||||||
{
|
{
|
||||||
packet->append(" DEFAULT CHARSET=", 17);
|
packet->append(STRING_WITH_LEN(" DEFAULT CHARSET="));
|
||||||
packet->append(share->table_charset->csname);
|
packet->append(share->table_charset->csname);
|
||||||
if (!(share->table_charset->state & MY_CS_PRIMARY))
|
if (!(share->table_charset->state & MY_CS_PRIMARY))
|
||||||
{
|
{
|
||||||
packet->append(" COLLATE=", 9);
|
packet->append(STRING_WITH_LEN(" COLLATE="));
|
||||||
packet->append(table->s->table_charset->name);
|
packet->append(table->s->table_charset->name);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (share->min_rows)
|
if (share->min_rows)
|
||||||
{
|
{
|
||||||
packet->append(" MIN_ROWS=", 10);
|
packet->append(STRING_WITH_LEN(" MIN_ROWS="));
|
||||||
end= longlong10_to_str(share->min_rows, buff, 10);
|
end= longlong10_to_str(share->min_rows, buff, 10);
|
||||||
packet->append(buff, (uint) (end- buff));
|
packet->append(buff, (uint) (end- buff));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (share->max_rows && !table_list->schema_table)
|
if (share->max_rows && !table_list->schema_table)
|
||||||
{
|
{
|
||||||
packet->append(" MAX_ROWS=", 10);
|
packet->append(STRING_WITH_LEN(" MAX_ROWS="));
|
||||||
end= longlong10_to_str(share->max_rows, buff, 10);
|
end= longlong10_to_str(share->max_rows, buff, 10);
|
||||||
packet->append(buff, (uint) (end - buff));
|
packet->append(buff, (uint) (end - buff));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (share->avg_row_length)
|
if (share->avg_row_length)
|
||||||
{
|
{
|
||||||
packet->append(" AVG_ROW_LENGTH=", 16);
|
packet->append(STRING_WITH_LEN(" AVG_ROW_LENGTH="));
|
||||||
end= longlong10_to_str(share->avg_row_length, buff,10);
|
end= longlong10_to_str(share->avg_row_length, buff,10);
|
||||||
packet->append(buff, (uint) (end - buff));
|
packet->append(buff, (uint) (end - buff));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (share->db_create_options & HA_OPTION_PACK_KEYS)
|
if (share->db_create_options & HA_OPTION_PACK_KEYS)
|
||||||
packet->append(" PACK_KEYS=1", 12);
|
packet->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)
|
||||||
packet->append(" PACK_KEYS=0", 12);
|
packet->append(STRING_WITH_LEN(" PACK_KEYS=0"));
|
||||||
if (share->db_create_options & HA_OPTION_CHECKSUM)
|
if (share->db_create_options & HA_OPTION_CHECKSUM)
|
||||||
packet->append(" CHECKSUM=1", 11);
|
packet->append(STRING_WITH_LEN(" CHECKSUM=1"));
|
||||||
if (share->db_create_options & HA_OPTION_DELAY_KEY_WRITE)
|
if (share->db_create_options & HA_OPTION_DELAY_KEY_WRITE)
|
||||||
packet->append(" DELAY_KEY_WRITE=1",18);
|
packet->append(STRING_WITH_LEN(" DELAY_KEY_WRITE=1"));
|
||||||
if (share->row_type != ROW_TYPE_DEFAULT)
|
if (share->row_type != ROW_TYPE_DEFAULT)
|
||||||
{
|
{
|
||||||
packet->append(" ROW_FORMAT=",12);
|
packet->append(STRING_WITH_LEN(" ROW_FORMAT="));
|
||||||
packet->append(ha_row_type[(uint) share->row_type]);
|
packet->append(ha_row_type[(uint) share->row_type]);
|
||||||
}
|
}
|
||||||
table->file->append_create_info(packet);
|
table->file->append_create_info(packet);
|
||||||
if (share->comment && share->comment[0])
|
if (share->comment && share->comment[0])
|
||||||
{
|
{
|
||||||
packet->append(" COMMENT=", 9);
|
packet->append(STRING_WITH_LEN(" COMMENT="));
|
||||||
append_unescaped(packet, share->comment, strlen(share->comment));
|
append_unescaped(packet, share->comment, strlen(share->comment));
|
||||||
}
|
}
|
||||||
if (share->connect_string.length)
|
if (share->connect_string.length)
|
||||||
{
|
{
|
||||||
packet->append(" CONNECTION=", 12);
|
packet->append(STRING_WITH_LEN(" CONNECTION="));
|
||||||
append_unescaped(packet, share->connect_string.str, share->connect_string.length);
|
append_unescaped(packet, share->connect_string.str, share->connect_string.length);
|
||||||
}
|
}
|
||||||
if (file->raid_type)
|
if (file->raid_type)
|
||||||
@ -1063,25 +1063,25 @@ store_create_info(THD *thd, TABLE_LIST *table_list, String *packet)
|
|||||||
void
|
void
|
||||||
view_store_options(THD *thd, TABLE_LIST *table, String *buff)
|
view_store_options(THD *thd, TABLE_LIST *table, String *buff)
|
||||||
{
|
{
|
||||||
buff->append("ALGORITHM=", 10);
|
buff->append(STRING_WITH_LEN("ALGORITHM="));
|
||||||
switch ((int8)table->algorithm) {
|
switch ((int8)table->algorithm) {
|
||||||
case VIEW_ALGORITHM_UNDEFINED:
|
case VIEW_ALGORITHM_UNDEFINED:
|
||||||
buff->append("UNDEFINED ", 10);
|
buff->append(STRING_WITH_LEN("UNDEFINED "));
|
||||||
break;
|
break;
|
||||||
case VIEW_ALGORITHM_TMPTABLE:
|
case VIEW_ALGORITHM_TMPTABLE:
|
||||||
buff->append("TEMPTABLE ", 10);
|
buff->append(STRING_WITH_LEN("TEMPTABLE "));
|
||||||
break;
|
break;
|
||||||
case VIEW_ALGORITHM_MERGE:
|
case VIEW_ALGORITHM_MERGE:
|
||||||
buff->append("MERGE ", 6);
|
buff->append(STRING_WITH_LEN("MERGE "));
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
DBUG_ASSERT(0); // never should happen
|
DBUG_ASSERT(0); // never should happen
|
||||||
}
|
}
|
||||||
append_definer(thd, buff, &table->definer.user, &table->definer.host);
|
append_definer(thd, buff, &table->definer.user, &table->definer.host);
|
||||||
if (table->view_suid)
|
if (table->view_suid)
|
||||||
buff->append("SQL SECURITY DEFINER ", 21);
|
buff->append(STRING_WITH_LEN("SQL SECURITY DEFINER "));
|
||||||
else
|
else
|
||||||
buff->append("SQL SECURITY INVOKER ", 21);
|
buff->append(STRING_WITH_LEN("SQL SECURITY INVOKER "));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -1139,19 +1139,19 @@ view_store_create_info(THD *thd, TABLE_LIST *table, String *buff)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
buff->append("CREATE ", 7);
|
buff->append(STRING_WITH_LEN("CREATE "));
|
||||||
if (!foreign_db_mode)
|
if (!foreign_db_mode)
|
||||||
{
|
{
|
||||||
view_store_options(thd, table, buff);
|
view_store_options(thd, table, buff);
|
||||||
}
|
}
|
||||||
buff->append("VIEW ", 5);
|
buff->append(STRING_WITH_LEN("VIEW "));
|
||||||
if (!table->compact_view_format)
|
if (!table->compact_view_format)
|
||||||
{
|
{
|
||||||
append_identifier(thd, buff, table->view_db.str, table->view_db.length);
|
append_identifier(thd, buff, table->view_db.str, table->view_db.length);
|
||||||
buff->append('.');
|
buff->append('.');
|
||||||
}
|
}
|
||||||
append_identifier(thd, buff, table->view_name.str, table->view_name.length);
|
append_identifier(thd, buff, table->view_name.str, table->view_name.length);
|
||||||
buff->append(" AS ", 4);
|
buff->append(STRING_WITH_LEN(" AS "));
|
||||||
|
|
||||||
/*
|
/*
|
||||||
We can't just use table->query, because our SQL_MODE may trigger
|
We can't just use table->query, because our SQL_MODE may trigger
|
||||||
@ -1162,9 +1162,9 @@ view_store_create_info(THD *thd, TABLE_LIST *table, String *buff)
|
|||||||
if (table->with_check != VIEW_CHECK_NONE)
|
if (table->with_check != VIEW_CHECK_NONE)
|
||||||
{
|
{
|
||||||
if (table->with_check == VIEW_CHECK_LOCAL)
|
if (table->with_check == VIEW_CHECK_LOCAL)
|
||||||
buff->append(" WITH LOCAL CHECK OPTION", 24);
|
buff->append(STRING_WITH_LEN(" WITH LOCAL CHECK OPTION"));
|
||||||
else
|
else
|
||||||
buff->append(" WITH CASCADED CHECK OPTION", 27);
|
buff->append(STRING_WITH_LEN(" WITH CASCADED CHECK OPTION"));
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@ -2151,20 +2151,24 @@ int get_all_tables(THD *thd, TABLE_LIST *tables, COND *cond)
|
|||||||
{
|
{
|
||||||
if (with_i_schema)
|
if (with_i_schema)
|
||||||
{
|
{
|
||||||
table->field[3]->store("SYSTEM VIEW", 11, system_charset_info);
|
table->field[3]->store(STRING_WITH_LEN("SYSTEM VIEW"),
|
||||||
|
system_charset_info);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
my_snprintf(end, len, "/%s%s", file_name, reg_ext);
|
my_snprintf(end, len, "/%s%s", file_name, reg_ext);
|
||||||
switch (mysql_frm_type(thd, path, ¬_used)) {
|
switch (mysql_frm_type(thd, path, ¬_used)) {
|
||||||
case FRMTYPE_ERROR:
|
case FRMTYPE_ERROR:
|
||||||
table->field[3]->store("ERROR", 5, system_charset_info);
|
table->field[3]->store(STRING_WITH_LEN("ERROR"),
|
||||||
|
system_charset_info);
|
||||||
break;
|
break;
|
||||||
case FRMTYPE_TABLE:
|
case FRMTYPE_TABLE:
|
||||||
table->field[3]->store("BASE TABLE", 10, system_charset_info);
|
table->field[3]->store(STRING_WITH_LEN("BASE TABLE"),
|
||||||
|
system_charset_info);
|
||||||
break;
|
break;
|
||||||
case FRMTYPE_VIEW:
|
case FRMTYPE_VIEW:
|
||||||
table->field[3]->store("VIEW", 4, system_charset_info);
|
table->field[3]->store(STRING_WITH_LEN("VIEW"),
|
||||||
|
system_charset_info);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
DBUG_ASSERT(0);
|
DBUG_ASSERT(0);
|
||||||
@ -2317,8 +2321,8 @@ static int get_schema_tables_record(THD *thd, struct st_table_list *tables,
|
|||||||
}
|
}
|
||||||
else if (tables->view)
|
else if (tables->view)
|
||||||
{
|
{
|
||||||
table->field[3]->store("VIEW", 4, cs);
|
table->field[3]->store(STRING_WITH_LEN("VIEW"), cs);
|
||||||
table->field[20]->store("VIEW", 4, cs);
|
table->field[20]->store(STRING_WITH_LEN("VIEW"), cs);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -2329,11 +2333,11 @@ static int get_schema_tables_record(THD *thd, struct st_table_list *tables,
|
|||||||
file->info(HA_STATUS_VARIABLE | HA_STATUS_TIME | HA_STATUS_AUTO |
|
file->info(HA_STATUS_VARIABLE | HA_STATUS_TIME | HA_STATUS_AUTO |
|
||||||
HA_STATUS_NO_LOCK);
|
HA_STATUS_NO_LOCK);
|
||||||
if (share->tmp_table == SYSTEM_TMP_TABLE)
|
if (share->tmp_table == SYSTEM_TMP_TABLE)
|
||||||
table->field[3]->store("SYSTEM VIEW", 11, cs);
|
table->field[3]->store(STRING_WITH_LEN("SYSTEM VIEW"), cs);
|
||||||
else if (share->tmp_table)
|
else if (share->tmp_table)
|
||||||
table->field[3]->store("LOCAL TEMPORARY", 15, cs);
|
table->field[3]->store(STRING_WITH_LEN("LOCAL TEMPORARY"), cs);
|
||||||
else
|
else
|
||||||
table->field[3]->store("BASE TABLE", 10, cs);
|
table->field[3]->store(STRING_WITH_LEN("BASE TABLE"), cs);
|
||||||
|
|
||||||
for (int i= 4; i < 20; i++)
|
for (int i= 4; i < 20; i++)
|
||||||
{
|
{
|
||||||
@ -2569,7 +2573,7 @@ static int get_schema_column_record(THD *thd, struct st_table_list *tables,
|
|||||||
if (show_table->timestamp_field == field &&
|
if (show_table->timestamp_field == field &&
|
||||||
field->unireg_check != Field::TIMESTAMP_UN_FIELD)
|
field->unireg_check != Field::TIMESTAMP_UN_FIELD)
|
||||||
{
|
{
|
||||||
table->field[5]->store("CURRENT_TIMESTAMP", 17, cs);
|
table->field[5]->store(STRING_WITH_LEN("CURRENT_TIMESTAMP"), cs);
|
||||||
table->field[5]->set_notnull();
|
table->field[5]->set_notnull();
|
||||||
}
|
}
|
||||||
else if (field->unireg_check != Field::NEXT_NUMBER &&
|
else if (field->unireg_check != Field::NEXT_NUMBER &&
|
||||||
@ -2831,8 +2835,8 @@ bool store_schema_proc(THD *thd, TABLE *table, TABLE *proc_table,
|
|||||||
get_field(thd->mem_root, proc_table->field[10], &tmp_string);
|
get_field(thd->mem_root, proc_table->field[10], &tmp_string);
|
||||||
table->field[7]->store(tmp_string.ptr(), tmp_string.length(), cs);
|
table->field[7]->store(tmp_string.ptr(), tmp_string.length(), cs);
|
||||||
}
|
}
|
||||||
table->field[6]->store("SQL", 3, cs);
|
table->field[6]->store(STRING_WITH_LEN("SQL"), cs);
|
||||||
table->field[10]->store("SQL", 3, cs);
|
table->field[10]->store(STRING_WITH_LEN("SQL"), cs);
|
||||||
get_field(thd->mem_root, proc_table->field[6], &tmp_string);
|
get_field(thd->mem_root, proc_table->field[6], &tmp_string);
|
||||||
table->field[11]->store(tmp_string.ptr(), tmp_string.length(), cs);
|
table->field[11]->store(tmp_string.ptr(), tmp_string.length(), cs);
|
||||||
table->field[12]->store(sp_data_access_name[enum_idx].str,
|
table->field[12]->store(sp_data_access_name[enum_idx].str,
|
||||||
@ -2987,7 +2991,7 @@ static int get_schema_stat_record(THD *thd, struct st_table_list *tables,
|
|||||||
pos= show_table->file->index_type(i);
|
pos= show_table->file->index_type(i);
|
||||||
table->field[13]->store(pos, strlen(pos), cs);
|
table->field[13]->store(pos, strlen(pos), cs);
|
||||||
if (!show_table->s->keys_in_use.is_set(i))
|
if (!show_table->s->keys_in_use.is_set(i))
|
||||||
table->field[14]->store("disabled", 8, cs);
|
table->field[14]->store(STRING_WITH_LEN("disabled"), cs);
|
||||||
else
|
else
|
||||||
table->field[14]->store("", 0, cs);
|
table->field[14]->store("", 0, cs);
|
||||||
table->field[14]->set_notnull();
|
table->field[14]->set_notnull();
|
||||||
@ -3097,13 +3101,15 @@ static int get_schema_constraints_record(THD *thd, struct st_table_list *tables,
|
|||||||
if (i == primary_key && !strcmp(key_info->name, primary_key_name))
|
if (i == primary_key && !strcmp(key_info->name, primary_key_name))
|
||||||
{
|
{
|
||||||
if (store_constraints(thd, table, base_name, file_name, key_info->name,
|
if (store_constraints(thd, table, base_name, file_name, key_info->name,
|
||||||
strlen(key_info->name), "PRIMARY KEY", 11))
|
strlen(key_info->name),
|
||||||
|
STRING_WITH_LEN("PRIMARY KEY")))
|
||||||
DBUG_RETURN(1);
|
DBUG_RETURN(1);
|
||||||
}
|
}
|
||||||
else if (key_info->flags & HA_NOSAME)
|
else if (key_info->flags & HA_NOSAME)
|
||||||
{
|
{
|
||||||
if (store_constraints(thd, table, base_name, file_name, key_info->name,
|
if (store_constraints(thd, table, base_name, file_name, key_info->name,
|
||||||
strlen(key_info->name), "UNIQUE", 6))
|
strlen(key_info->name),
|
||||||
|
STRING_WITH_LEN("UNIQUE")))
|
||||||
DBUG_RETURN(1);
|
DBUG_RETURN(1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -3144,11 +3150,11 @@ static bool store_trigger(THD *thd, TABLE *table, const char *db,
|
|||||||
table->field[5]->store(db, strlen(db), cs);
|
table->field[5]->store(db, strlen(db), cs);
|
||||||
table->field[6]->store(tname, strlen(tname), cs);
|
table->field[6]->store(tname, strlen(tname), cs);
|
||||||
table->field[9]->store(trigger_stmt->str, trigger_stmt->length, cs);
|
table->field[9]->store(trigger_stmt->str, trigger_stmt->length, cs);
|
||||||
table->field[10]->store("ROW", 3, cs);
|
table->field[10]->store(STRING_WITH_LEN("ROW"), cs);
|
||||||
table->field[11]->store(trg_action_time_type_names[timing].str,
|
table->field[11]->store(trg_action_time_type_names[timing].str,
|
||||||
trg_action_time_type_names[timing].length, cs);
|
trg_action_time_type_names[timing].length, cs);
|
||||||
table->field[14]->store("OLD", 3, cs);
|
table->field[14]->store(STRING_WITH_LEN("OLD"), cs);
|
||||||
table->field[15]->store("NEW", 3, cs);
|
table->field[15]->store(STRING_WITH_LEN("NEW"), cs);
|
||||||
|
|
||||||
sql_mode_str=
|
sql_mode_str=
|
||||||
sys_var_thd_sql_mode::symbolic_mode_representation(thd,
|
sys_var_thd_sql_mode::symbolic_mode_representation(thd,
|
||||||
@ -3539,9 +3545,9 @@ int make_schemata_old_format(THD *thd, ST_SCHEMA_TABLE *schema_table)
|
|||||||
buffer.append(field_info->old_name);
|
buffer.append(field_info->old_name);
|
||||||
if (lex->wild && lex->wild->ptr())
|
if (lex->wild && lex->wild->ptr())
|
||||||
{
|
{
|
||||||
buffer.append(" (");
|
buffer.append(STRING_WITH_LEN(" ("));
|
||||||
buffer.append(lex->wild->ptr());
|
buffer.append(lex->wild->ptr());
|
||||||
buffer.append(")");
|
buffer.append(')');
|
||||||
}
|
}
|
||||||
field->set_name(buffer.ptr(), buffer.length(), system_charset_info);
|
field->set_name(buffer.ptr(), buffer.length(), system_charset_info);
|
||||||
}
|
}
|
||||||
@ -3562,9 +3568,9 @@ int make_table_names_old_format(THD *thd, ST_SCHEMA_TABLE *schema_table)
|
|||||||
buffer.append(lex->select_lex.db);
|
buffer.append(lex->select_lex.db);
|
||||||
if (lex->wild && lex->wild->ptr())
|
if (lex->wild && lex->wild->ptr())
|
||||||
{
|
{
|
||||||
buffer.append(" (");
|
buffer.append(STRING_WITH_LEN(" ("));
|
||||||
buffer.append(lex->wild->ptr());
|
buffer.append(lex->wild->ptr());
|
||||||
buffer.append(")");
|
buffer.append(')');
|
||||||
}
|
}
|
||||||
Item_field *field= new Item_field(context,
|
Item_field *field= new Item_field(context,
|
||||||
NullS, NullS, field_info->field_name);
|
NullS, NullS, field_info->field_name);
|
||||||
|
@ -848,22 +848,22 @@ void String::print(String *str)
|
|||||||
switch (c)
|
switch (c)
|
||||||
{
|
{
|
||||||
case '\\':
|
case '\\':
|
||||||
str->append("\\\\", 2);
|
str->append(STRING_WITH_LEN("\\\\"));
|
||||||
break;
|
break;
|
||||||
case '\0':
|
case '\0':
|
||||||
str->append("\\0", 2);
|
str->append(STRING_WITH_LEN("\\0"));
|
||||||
break;
|
break;
|
||||||
case '\'':
|
case '\'':
|
||||||
str->append("\\'", 2);
|
str->append(STRING_WITH_LEN("\\'"));
|
||||||
break;
|
break;
|
||||||
case '\n':
|
case '\n':
|
||||||
str->append("\\n", 2);
|
str->append(STRING_WITH_LEN("\\n"));
|
||||||
break;
|
break;
|
||||||
case '\r':
|
case '\r':
|
||||||
str->append("\\r", 2);
|
str->append(STRING_WITH_LEN("\\r"));
|
||||||
break;
|
break;
|
||||||
case 26: //Ctrl-Z
|
case 26: //Ctrl-Z
|
||||||
str->append("\\z", 2);
|
str->append(STRING_WITH_LEN("\\z"));
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
str->append(c);
|
str->append(c);
|
||||||
|
@ -24,6 +24,8 @@
|
|||||||
#define NOT_FIXED_DEC 31
|
#define NOT_FIXED_DEC 31
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#define STRING_WITH_LEN(X) ((char*) X), (sizeof(X)-1)
|
||||||
|
|
||||||
class String;
|
class String;
|
||||||
int sortcmp(const String *a,const String *b, CHARSET_INFO *cs);
|
int sortcmp(const String *a,const String *b, CHARSET_INFO *cs);
|
||||||
String *copy_if_not_alloced(String *a,String *b,uint32 arg_length);
|
String *copy_if_not_alloced(String *a,String *b,uint32 arg_length);
|
||||||
|
@ -705,7 +705,8 @@ static int mysql_prepare_table(THD *thd, HA_CREATE_INFO *create_info,
|
|||||||
MY_CS_BINSORT,MYF(0))))
|
MY_CS_BINSORT,MYF(0))))
|
||||||
{
|
{
|
||||||
char tmp[64];
|
char tmp[64];
|
||||||
strmake(strmake(tmp, save_cs->csname, sizeof(tmp)-4), "_bin", 4);
|
strmake(strmake(tmp, save_cs->csname, sizeof(tmp)-4),
|
||||||
|
STRING_WITH_LEN("_bin"));
|
||||||
my_error(ER_UNKNOWN_COLLATION, MYF(0), tmp);
|
my_error(ER_UNKNOWN_COLLATION, MYF(0), tmp);
|
||||||
DBUG_RETURN(-1);
|
DBUG_RETURN(-1);
|
||||||
}
|
}
|
||||||
@ -1951,7 +1952,7 @@ static int send_check_errmsg(THD *thd, TABLE_LIST* table,
|
|||||||
protocol->prepare_for_resend();
|
protocol->prepare_for_resend();
|
||||||
protocol->store(table->alias, system_charset_info);
|
protocol->store(table->alias, system_charset_info);
|
||||||
protocol->store((char*) operator_name, system_charset_info);
|
protocol->store((char*) operator_name, system_charset_info);
|
||||||
protocol->store("error", 5, system_charset_info);
|
protocol->store(STRING_WITH_LEN("error"), system_charset_info);
|
||||||
protocol->store(errmsg, system_charset_info);
|
protocol->store(errmsg, system_charset_info);
|
||||||
thd->clear_error();
|
thd->clear_error();
|
||||||
if (protocol->write())
|
if (protocol->write())
|
||||||
@ -2242,7 +2243,7 @@ static bool mysql_admin_table(THD* thd, TABLE_LIST* tables,
|
|||||||
protocol->prepare_for_resend();
|
protocol->prepare_for_resend();
|
||||||
protocol->store(table_name, system_charset_info);
|
protocol->store(table_name, system_charset_info);
|
||||||
protocol->store(operator_name, system_charset_info);
|
protocol->store(operator_name, system_charset_info);
|
||||||
protocol->store("error",5, system_charset_info);
|
protocol->store(STRING_WITH_LEN("error"), system_charset_info);
|
||||||
if (!(err_msg=thd->net.last_error))
|
if (!(err_msg=thd->net.last_error))
|
||||||
err_msg=ER(ER_CHECK_NO_SUCH_TABLE);
|
err_msg=ER(ER_CHECK_NO_SUCH_TABLE);
|
||||||
/* if it was a view will check md5 sum */
|
/* if it was a view will check md5 sum */
|
||||||
@ -2279,7 +2280,7 @@ static bool mysql_admin_table(THD* thd, TABLE_LIST* tables,
|
|||||||
protocol->prepare_for_resend();
|
protocol->prepare_for_resend();
|
||||||
protocol->store(table_name, system_charset_info);
|
protocol->store(table_name, system_charset_info);
|
||||||
protocol->store(operator_name, system_charset_info);
|
protocol->store(operator_name, system_charset_info);
|
||||||
protocol->store("error", 5, system_charset_info);
|
protocol->store(STRING_WITH_LEN("error"), system_charset_info);
|
||||||
length= my_snprintf(buff, sizeof(buff), ER(ER_OPEN_AS_READONLY),
|
length= my_snprintf(buff, sizeof(buff), ER(ER_OPEN_AS_READONLY),
|
||||||
table_name);
|
table_name);
|
||||||
protocol->store(buff, length, system_charset_info);
|
protocol->store(buff, length, system_charset_info);
|
||||||
@ -2314,8 +2315,9 @@ static bool mysql_admin_table(THD* thd, TABLE_LIST* tables,
|
|||||||
protocol->prepare_for_resend();
|
protocol->prepare_for_resend();
|
||||||
protocol->store(table_name, system_charset_info);
|
protocol->store(table_name, system_charset_info);
|
||||||
protocol->store(operator_name, system_charset_info);
|
protocol->store(operator_name, system_charset_info);
|
||||||
protocol->store("warning", 7, system_charset_info);
|
protocol->store(STRING_WITH_LEN("warning"), system_charset_info);
|
||||||
protocol->store("Table is marked as crashed", 26, system_charset_info);
|
protocol->store(STRING_WITH_LEN("Table is marked as crashed"),
|
||||||
|
system_charset_info);
|
||||||
if (protocol->write())
|
if (protocol->write())
|
||||||
goto err;
|
goto err;
|
||||||
}
|
}
|
||||||
@ -2339,7 +2341,7 @@ send_result_message:
|
|||||||
char buf[ERRMSGSIZE+20];
|
char buf[ERRMSGSIZE+20];
|
||||||
uint length=my_snprintf(buf, ERRMSGSIZE,
|
uint length=my_snprintf(buf, ERRMSGSIZE,
|
||||||
ER(ER_CHECK_NOT_IMPLEMENTED), operator_name);
|
ER(ER_CHECK_NOT_IMPLEMENTED), operator_name);
|
||||||
protocol->store("note", 4, system_charset_info);
|
protocol->store(STRING_WITH_LEN("note"), system_charset_info);
|
||||||
protocol->store(buf, length, system_charset_info);
|
protocol->store(buf, length, system_charset_info);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
@ -2349,41 +2351,45 @@ send_result_message:
|
|||||||
char buf[ERRMSGSIZE+20];
|
char buf[ERRMSGSIZE+20];
|
||||||
uint length= my_snprintf(buf, ERRMSGSIZE,
|
uint length= my_snprintf(buf, ERRMSGSIZE,
|
||||||
ER(ER_BAD_TABLE_ERROR), table_name);
|
ER(ER_BAD_TABLE_ERROR), table_name);
|
||||||
protocol->store("note", 4, system_charset_info);
|
protocol->store(STRING_WITH_LEN("note"), system_charset_info);
|
||||||
protocol->store(buf, length, system_charset_info);
|
protocol->store(buf, length, system_charset_info);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case HA_ADMIN_OK:
|
case HA_ADMIN_OK:
|
||||||
protocol->store("status", 6, system_charset_info);
|
protocol->store(STRING_WITH_LEN("status"), system_charset_info);
|
||||||
protocol->store("OK",2, system_charset_info);
|
protocol->store(STRING_WITH_LEN("OK"), system_charset_info);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case HA_ADMIN_FAILED:
|
case HA_ADMIN_FAILED:
|
||||||
protocol->store("status", 6, system_charset_info);
|
protocol->store(STRING_WITH_LEN("status"), system_charset_info);
|
||||||
protocol->store("Operation failed",16, system_charset_info);
|
protocol->store(STRING_WITH_LEN("Operation failed"),
|
||||||
|
system_charset_info);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case HA_ADMIN_REJECT:
|
case HA_ADMIN_REJECT:
|
||||||
protocol->store("status", 6, system_charset_info);
|
protocol->store(STRING_WITH_LEN("status"), system_charset_info);
|
||||||
protocol->store("Operation need committed state",30, system_charset_info);
|
protocol->store(STRING_WITH_LEN("Operation need committed state"),
|
||||||
|
system_charset_info);
|
||||||
open_for_modify= FALSE;
|
open_for_modify= FALSE;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case HA_ADMIN_ALREADY_DONE:
|
case HA_ADMIN_ALREADY_DONE:
|
||||||
protocol->store("status", 6, system_charset_info);
|
protocol->store(STRING_WITH_LEN("status"), system_charset_info);
|
||||||
protocol->store("Table is already up to date", 27, system_charset_info);
|
protocol->store(STRING_WITH_LEN("Table is already up to date"),
|
||||||
|
system_charset_info);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case HA_ADMIN_CORRUPT:
|
case HA_ADMIN_CORRUPT:
|
||||||
protocol->store("error", 5, system_charset_info);
|
protocol->store(STRING_WITH_LEN("error"), system_charset_info);
|
||||||
protocol->store("Corrupt", 7, system_charset_info);
|
protocol->store(STRING_WITH_LEN("Corrupt"), system_charset_info);
|
||||||
fatal_error=1;
|
fatal_error=1;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case HA_ADMIN_INVALID:
|
case HA_ADMIN_INVALID:
|
||||||
protocol->store("error", 5, system_charset_info);
|
protocol->store(STRING_WITH_LEN("error"), system_charset_info);
|
||||||
protocol->store("Invalid argument",16, system_charset_info);
|
protocol->store(STRING_WITH_LEN("Invalid argument"),
|
||||||
|
system_charset_info);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case HA_ADMIN_TRY_ALTER:
|
case HA_ADMIN_TRY_ALTER:
|
||||||
@ -2419,7 +2425,7 @@ send_result_message:
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
/* Hijack the row already in-progress. */
|
/* Hijack the row already in-progress. */
|
||||||
protocol->store("error", 5, system_charset_info);
|
protocol->store(STRING_WITH_LEN("error"), system_charset_info);
|
||||||
protocol->store(err_msg, system_charset_info);
|
protocol->store(err_msg, system_charset_info);
|
||||||
(void)protocol->write();
|
(void)protocol->write();
|
||||||
/* Start off another row for HA_ADMIN_FAILED */
|
/* Start off another row for HA_ADMIN_FAILED */
|
||||||
@ -2436,7 +2442,7 @@ send_result_message:
|
|||||||
}
|
}
|
||||||
case HA_ADMIN_WRONG_CHECKSUM:
|
case HA_ADMIN_WRONG_CHECKSUM:
|
||||||
{
|
{
|
||||||
protocol->store("note", 4, system_charset_info);
|
protocol->store(STRING_WITH_LEN("note"), system_charset_info);
|
||||||
protocol->store(ER(ER_VIEW_CHECKSUM), strlen(ER(ER_VIEW_CHECKSUM)),
|
protocol->store(ER(ER_VIEW_CHECKSUM), strlen(ER(ER_VIEW_CHECKSUM)),
|
||||||
system_charset_info);
|
system_charset_info);
|
||||||
break;
|
break;
|
||||||
@ -2448,7 +2454,7 @@ send_result_message:
|
|||||||
uint length=my_snprintf(buf, ERRMSGSIZE,
|
uint length=my_snprintf(buf, ERRMSGSIZE,
|
||||||
"Unknown - internal error %d during operation",
|
"Unknown - internal error %d during operation",
|
||||||
result_code);
|
result_code);
|
||||||
protocol->store("error", 5, system_charset_info);
|
protocol->store(STRING_WITH_LEN("error"), system_charset_info);
|
||||||
protocol->store(buf, length, system_charset_info);
|
protocol->store(buf, length, system_charset_info);
|
||||||
fatal_error=1;
|
fatal_error=1;
|
||||||
break;
|
break;
|
||||||
|
@ -20,7 +20,8 @@
|
|||||||
#include "sql_trigger.h"
|
#include "sql_trigger.h"
|
||||||
#include "parse_file.h"
|
#include "parse_file.h"
|
||||||
|
|
||||||
static const LEX_STRING triggers_file_type= {(char *)"TRIGGERS", 8};
|
static const LEX_STRING triggers_file_type=
|
||||||
|
{STRING_WITH_LEN("TRIGGERS")};
|
||||||
|
|
||||||
const char * const triggers_file_ext= ".TRG";
|
const char * const triggers_file_ext= ".TRG";
|
||||||
|
|
||||||
@ -33,21 +34,17 @@ const char * const triggers_file_ext= ".TRG";
|
|||||||
static File_option triggers_file_parameters[]=
|
static File_option triggers_file_parameters[]=
|
||||||
{
|
{
|
||||||
{
|
{
|
||||||
{ (char *) STRING_WITH_LEN("triggers") },
|
{STRING_WITH_LEN("triggers") },
|
||||||
offsetof(class Table_triggers_list, definitions_list),
|
offsetof(class Table_triggers_list, definitions_list),
|
||||||
FILE_OPTIONS_STRLIST
|
FILE_OPTIONS_STRLIST
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
/*
|
{STRING_WITH_LEN("sql_modes") },
|
||||||
FIXME: Length specified for "sql_modes" key is erroneous, problem caused
|
|
||||||
by this are reported as BUG#14090 and should be fixed ASAP.
|
|
||||||
*/
|
|
||||||
{ (char *) "sql_modes", 13 },
|
|
||||||
offsetof(class Table_triggers_list, definition_modes_list),
|
offsetof(class Table_triggers_list, definition_modes_list),
|
||||||
FILE_OPTIONS_ULLLIST
|
FILE_OPTIONS_ULLLIST
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
{ (char *) STRING_WITH_LEN("definers") },
|
{STRING_WITH_LEN("definers") },
|
||||||
offsetof(class Table_triggers_list, definers_list),
|
offsetof(class Table_triggers_list, definers_list),
|
||||||
FILE_OPTIONS_STRLIST
|
FILE_OPTIONS_STRLIST
|
||||||
},
|
},
|
||||||
@ -73,7 +70,8 @@ struct st_trigname
|
|||||||
LEX_STRING trigger_table;
|
LEX_STRING trigger_table;
|
||||||
};
|
};
|
||||||
|
|
||||||
static const LEX_STRING trigname_file_type= {(char *)"TRIGGERNAME", 11};
|
static const LEX_STRING trigname_file_type=
|
||||||
|
{STRING_WITH_LEN("TRIGGERNAME")};
|
||||||
|
|
||||||
const char * const trigname_file_ext= ".TRN";
|
const char * const trigname_file_ext= ".TRN";
|
||||||
|
|
||||||
@ -84,7 +82,7 @@ static File_option trigname_file_parameters[]=
|
|||||||
FIXME: Length specified for "trigger_table" key is erroneous, problem
|
FIXME: Length specified for "trigger_table" key is erroneous, problem
|
||||||
caused by this are reported as BUG#14090 and should be fixed ASAP.
|
caused by this are reported as BUG#14090 and should be fixed ASAP.
|
||||||
*/
|
*/
|
||||||
{ (char *) "trigger_table", 15 },
|
{STRING_WITH_LEN("trigger_table")},
|
||||||
offsetof(struct st_trigname, trigger_table),
|
offsetof(struct st_trigname, trigger_table),
|
||||||
FILE_OPTIONS_ESTRING
|
FILE_OPTIONS_ESTRING
|
||||||
},
|
},
|
||||||
@ -108,6 +106,21 @@ const LEX_STRING trg_event_type_names[]=
|
|||||||
|
|
||||||
static TABLE_LIST *add_table_for_trigger(THD *thd, sp_name *trig);
|
static TABLE_LIST *add_table_for_trigger(THD *thd, sp_name *trig);
|
||||||
|
|
||||||
|
bool handle_old_incorrect_sql_modes(char *&unknown_key, gptr base,
|
||||||
|
MEM_ROOT *mem_root,
|
||||||
|
char *end, gptr hook_data);
|
||||||
|
|
||||||
|
class Handle_old_incorrect_sql_modes_hook: public Unknown_key_hook
|
||||||
|
{
|
||||||
|
private:
|
||||||
|
char *path;
|
||||||
|
public:
|
||||||
|
Handle_old_incorrect_sql_modes_hook(char *file_path)
|
||||||
|
:path(file_path)
|
||||||
|
{};
|
||||||
|
virtual bool process_unknown_string(char *&unknown_key, gptr base,
|
||||||
|
MEM_ROOT *mem_root, char *end);
|
||||||
|
};
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Create or drop trigger for table.
|
Create or drop trigger for table.
|
||||||
@ -237,7 +250,7 @@ end:
|
|||||||
{
|
{
|
||||||
log_query.set((char *) 0, 0, system_charset_info); /* reset log_query */
|
log_query.set((char *) 0, 0, system_charset_info); /* reset log_query */
|
||||||
|
|
||||||
log_query.append("CREATE ");
|
log_query.append(STRING_WITH_LEN("CREATE "));
|
||||||
append_definer(thd, &log_query, &definer_user, &definer_host);
|
append_definer(thd, &log_query, &definer_user, &definer_host);
|
||||||
log_query.append(thd->lex->trigger_definition_begin);
|
log_query.append(thd->lex->trigger_definition_begin);
|
||||||
}
|
}
|
||||||
@ -691,6 +704,7 @@ bool Table_triggers_list::check_n_load(THD *thd, const char *db,
|
|||||||
{
|
{
|
||||||
Table_triggers_list *triggers=
|
Table_triggers_list *triggers=
|
||||||
new (&table->mem_root) Table_triggers_list(table);
|
new (&table->mem_root) Table_triggers_list(table);
|
||||||
|
Handle_old_incorrect_sql_modes_hook sql_modes_hook(path.str);
|
||||||
|
|
||||||
if (!triggers)
|
if (!triggers)
|
||||||
DBUG_RETURN(1);
|
DBUG_RETURN(1);
|
||||||
@ -705,7 +719,9 @@ bool Table_triggers_list::check_n_load(THD *thd, const char *db,
|
|||||||
triggers->definers_list.empty();
|
triggers->definers_list.empty();
|
||||||
|
|
||||||
if (parser->parse((gptr)triggers, &table->mem_root,
|
if (parser->parse((gptr)triggers, &table->mem_root,
|
||||||
triggers_file_parameters, TRG_NUM_REQUIRED_PARAMETERS))
|
triggers_file_parameters,
|
||||||
|
TRG_NUM_REQUIRED_PARAMETERS,
|
||||||
|
&sql_modes_hook))
|
||||||
DBUG_RETURN(1);
|
DBUG_RETURN(1);
|
||||||
|
|
||||||
List_iterator_fast<LEX_STRING> it(triggers->definitions_list);
|
List_iterator_fast<LEX_STRING> it(triggers->definitions_list);
|
||||||
@ -1020,7 +1036,8 @@ static TABLE_LIST *add_table_for_trigger(THD *thd, sp_name *trig)
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (parser->parse((gptr)&trigname, thd->mem_root,
|
if (parser->parse((gptr)&trigname, thd->mem_root,
|
||||||
trigname_file_parameters, 1))
|
trigname_file_parameters, 1,
|
||||||
|
&file_parser_dummy_hook))
|
||||||
DBUG_RETURN(0);
|
DBUG_RETURN(0);
|
||||||
|
|
||||||
/* We need to reset statement table list to be PS/SP friendly. */
|
/* We need to reset statement table list to be PS/SP friendly. */
|
||||||
@ -1172,3 +1189,65 @@ bool Table_triggers_list::process_triggers(THD *thd, trg_event_type event,
|
|||||||
|
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
Trigger BUG#14090 compatibility hook
|
||||||
|
|
||||||
|
SYNOPSIS
|
||||||
|
Handle_old_incorrect_sql_modes_hook::process_unknown_string()
|
||||||
|
unknown_key [in/out] reference on the line with unknown
|
||||||
|
parameter and the parsing point
|
||||||
|
base [in] base address for parameter writing (structure
|
||||||
|
like TABLE)
|
||||||
|
mem_root [in] MEM_ROOT for parameters allocation
|
||||||
|
end [in] the end of the configuration
|
||||||
|
|
||||||
|
NOTE: this hook process back compatibility for incorrectly written
|
||||||
|
sql_modes parameter (see BUG#14090).
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
FALSE OK
|
||||||
|
TRUE Error
|
||||||
|
*/
|
||||||
|
|
||||||
|
bool
|
||||||
|
Handle_old_incorrect_sql_modes_hook::process_unknown_string(char *&unknown_key,
|
||||||
|
gptr base,
|
||||||
|
MEM_ROOT *mem_root,
|
||||||
|
char *end)
|
||||||
|
{
|
||||||
|
#define INVALID_SQL_MODES_LENGTH 13
|
||||||
|
DBUG_ENTER("handle_old_incorrect_sql_modes");
|
||||||
|
DBUG_PRINT("info", ("unknown key:%60s", unknown_key));
|
||||||
|
if (unknown_key + INVALID_SQL_MODES_LENGTH + 1 < end &&
|
||||||
|
unknown_key[INVALID_SQL_MODES_LENGTH] == '=' &&
|
||||||
|
!memcmp(unknown_key, STRING_WITH_LEN("sql_modes")))
|
||||||
|
{
|
||||||
|
DBUG_PRINT("info", ("sql_modes affected by BUG#14090 detected"));
|
||||||
|
push_warning_printf(current_thd,
|
||||||
|
MYSQL_ERROR::WARN_LEVEL_NOTE,
|
||||||
|
ER_OLD_FILE_FORMAT,
|
||||||
|
ER(ER_OLD_FILE_FORMAT),
|
||||||
|
(char *)path, "TRIGGER");
|
||||||
|
File_option sql_modes_parameters=
|
||||||
|
{
|
||||||
|
{STRING_WITH_LEN("sql_modes") },
|
||||||
|
offsetof(class Table_triggers_list, definition_modes_list),
|
||||||
|
FILE_OPTIONS_ULLLIST
|
||||||
|
};
|
||||||
|
char *ptr= unknown_key + INVALID_SQL_MODES_LENGTH + 1;
|
||||||
|
if (get_file_options_ulllist(ptr, end, unknown_key, base,
|
||||||
|
&sql_modes_parameters, mem_root))
|
||||||
|
{
|
||||||
|
DBUG_RETURN(TRUE);
|
||||||
|
}
|
||||||
|
/*
|
||||||
|
Set parsing pointer to the last symbol of string (\n)
|
||||||
|
1) to avoid problem with \0 in the junk after sql_modes
|
||||||
|
2) to speed up skipping this line by parser.
|
||||||
|
*/
|
||||||
|
unknown_key= ptr-1;
|
||||||
|
}
|
||||||
|
DBUG_RETURN(FALSE);
|
||||||
|
}
|
||||||
|
@ -623,7 +623,8 @@ static int mysql_register_view(THD *thd, TABLE_LIST *view,
|
|||||||
TODO: special cascade/restrict procedure for alter?
|
TODO: special cascade/restrict procedure for alter?
|
||||||
*/
|
*/
|
||||||
if (parser->parse((gptr)view, thd->mem_root,
|
if (parser->parse((gptr)view, thd->mem_root,
|
||||||
view_parameters + revision_number_position, 1))
|
view_parameters + revision_number_position, 1,
|
||||||
|
&file_parser_dummy_hook))
|
||||||
{
|
{
|
||||||
DBUG_RETURN(thd->net.report_error? -1 : 0);
|
DBUG_RETURN(thd->net.report_error? -1 : 0);
|
||||||
}
|
}
|
||||||
@ -792,7 +793,7 @@ bool mysql_make_view(THD *thd, File_parser *parser, TABLE_LIST *table)
|
|||||||
be used here
|
be used here
|
||||||
*/
|
*/
|
||||||
if (parser->parse((gptr)table, thd->mem_root, view_parameters,
|
if (parser->parse((gptr)table, thd->mem_root, view_parameters,
|
||||||
required_view_parameters))
|
required_view_parameters, &file_parser_dummy_hook))
|
||||||
goto err;
|
goto err;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -1502,7 +1503,8 @@ mysql_rename_view(THD *thd,
|
|||||||
|
|
||||||
/* get view definition and source */
|
/* get view definition and source */
|
||||||
if (parser->parse((gptr)&view_def, thd->mem_root, view_parameters,
|
if (parser->parse((gptr)&view_def, thd->mem_root, view_parameters,
|
||||||
array_elements(view_parameters)-1))
|
array_elements(view_parameters)-1,
|
||||||
|
&file_parser_dummy_hook))
|
||||||
goto err;
|
goto err;
|
||||||
|
|
||||||
/* rename view and it's backups */
|
/* rename view and it's backups */
|
||||||
|
@ -20,8 +20,6 @@
|
|||||||
struct st_table;
|
struct st_table;
|
||||||
class Field;
|
class Field;
|
||||||
|
|
||||||
#define STRING_WITH_LEN(X) ((char*) X), (sizeof(X)-1)
|
|
||||||
|
|
||||||
typedef struct st_lex_string
|
typedef struct st_lex_string
|
||||||
{
|
{
|
||||||
char *str;
|
char *str;
|
||||||
|
@ -110,7 +110,7 @@ int openfrm(THD *thd, const char *name, const char *alias, uint db_stat,
|
|||||||
if (my_read(file,(byte*) head,64,MYF(MY_NABP)))
|
if (my_read(file,(byte*) head,64,MYF(MY_NABP)))
|
||||||
goto err;
|
goto err;
|
||||||
|
|
||||||
if (memcmp(head, "TYPE=", 5) == 0)
|
if (memcmp(head, STRING_WITH_LEN("TYPE=")) == 0)
|
||||||
{
|
{
|
||||||
// new .frm
|
// new .frm
|
||||||
my_close(file,MYF(MY_WME));
|
my_close(file,MYF(MY_WME));
|
||||||
|
@ -1558,7 +1558,7 @@ my_tz_init(THD *org_thd, const char *default_tzname, my_bool bootstrap)
|
|||||||
sql_print_error("Fatal error: OOM while initializing time zones");
|
sql_print_error("Fatal error: OOM while initializing time zones");
|
||||||
goto end_with_cleanup;
|
goto end_with_cleanup;
|
||||||
}
|
}
|
||||||
tmp_tzname->name.set("SYSTEM", 6, &my_charset_latin1);
|
tmp_tzname->name.set(STRING_WITH_LEN("SYSTEM"), &my_charset_latin1);
|
||||||
tmp_tzname->tz= my_tz_SYSTEM;
|
tmp_tzname->tz= my_tz_SYSTEM;
|
||||||
if (my_hash_insert(&tz_names, (const byte *)tmp_tzname))
|
if (my_hash_insert(&tz_names, (const byte *)tmp_tzname))
|
||||||
{
|
{
|
||||||
|
Loading…
x
Reference in New Issue
Block a user