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:
bell@sanja.is.com.ua 2005-11-21 21:15:48 +02:00
commit 7f162c7899
44 changed files with 710 additions and 506 deletions

View File

@ -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;

View File

@ -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++;

View File

@ -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;

View File

@ -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;

View File

@ -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;

View File

@ -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

View File

@ -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);
}; };

View File

@ -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)"));
} }

View File

@ -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()

View File

@ -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;
} }

View File

@ -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(')');

View File

@ -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("\')"));
} }

View File

@ -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);

View File

@ -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"; }
}; };

View File

@ -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;
} }

View File

@ -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.

View File

@ -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);

View File

@ -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;

View File

@ -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;
} }

View File

@ -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, &not_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, &not_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);
}

View File

@ -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,

View File

@ -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),

View File

@ -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;

View File

@ -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)"

View File

@ -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)) &&

View File

@ -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');
} }

View File

@ -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);
} }

View File

@ -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);

View File

@ -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;

View File

@ -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

View File

@ -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);

View File

@ -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)

View File

@ -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);

View File

@ -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(),

View File

@ -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);
} }

View File

@ -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, &not_used)) { switch (mysql_frm_type(thd, path, &not_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);

View File

@ -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);

View File

@ -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);

View File

@ -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;

View File

@ -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);
}

View File

@ -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 */

View File

@ -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;

View File

@ -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));

View File

@ -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))
{ {