Commit 74394840 authored by msvensson@neptunus.(none)'s avatar msvensson@neptunus.(none)

Merge neptunus.(none):/home/msvensson/mysql/my50-m-bug21215

into  neptunus.(none):/home/msvensson/mysql/mysql-5.0
parents 35af3d55 c84cdbf4
...@@ -3725,6 +3725,9 @@ static const char* construct_prompt() ...@@ -3725,6 +3725,9 @@ static const char* construct_prompt()
case 't': case 't':
processed_prompt.append('\t'); processed_prompt.append('\t');
break; break;
case 'l':
processed_prompt.append(delimiter_str);
break;
default: default:
processed_prompt.append(c); processed_prompt.append(c);
} }
......
This diff is collapsed.
...@@ -1655,17 +1655,20 @@ AC_ARG_WITH(debug, ...@@ -1655,17 +1655,20 @@ AC_ARG_WITH(debug,
if test "$with_debug" = "yes" if test "$with_debug" = "yes"
then then
# Medium debug. # Medium debug.
CFLAGS="$DEBUG_CFLAGS $DEBUG_OPTIMIZE_CC -DDBUG_ON -DSAFE_MUTEX $CFLAGS" AC_DEFINE([DBUG_ON], [1], [Use libdbug])
CXXFLAGS="$DEBUG_CXXFLAGS $DEBUG_OPTIMIZE_CXX -DDBUG_ON -DSAFE_MUTEX $CXXFLAGS" CFLAGS="$DEBUG_CFLAGS $DEBUG_OPTIMIZE_CC -DSAFE_MUTEX $CFLAGS"
CXXFLAGS="$DEBUG_CXXFLAGS $DEBUG_OPTIMIZE_CXX -DSAFE_MUTEX $CXXFLAGS"
elif test "$with_debug" = "full" elif test "$with_debug" = "full"
then then
# Full debug. Very slow in some cases # Full debug. Very slow in some cases
CFLAGS="$DEBUG_CFLAGS -DDBUG_ON -DSAFE_MUTEX -DSAFEMALLOC $CFLAGS" AC_DEFINE([DBUG_ON], [1], [Use libdbug])
CXXFLAGS="$DEBUG_CXXFLAGS -DDBUG_ON -DSAFE_MUTEX -DSAFEMALLOC $CXXFLAGS" CFLAGS="$DEBUG_CFLAGS -DSAFE_MUTEX -DSAFEMALLOC $CFLAGS"
CXXFLAGS="$DEBUG_CXXFLAGS -DSAFE_MUTEX -DSAFEMALLOC $CXXFLAGS"
else else
# Optimized version. No debug # Optimized version. No debug
CFLAGS="$OPTIMIZE_CFLAGS -DDBUG_OFF $CFLAGS" AC_DEFINE([DBUG_OFF], [1], [Don't use libdbug])
CXXFLAGS="$OPTIMIZE_CXXFLAGS -DDBUG_OFF $CXXFLAGS" CFLAGS="$OPTIMIZE_CFLAGS $CFLAGS"
CXXFLAGS="$OPTIMIZE_CXXFLAGS $CXXFLAGS"
fi fi
# Force static compilation to avoid linking problems/get more speed # Force static compilation to avoid linking problems/get more speed
......
...@@ -66,10 +66,13 @@ ...@@ -66,10 +66,13 @@
* Check of malloc on entry/exit (option "S") * Check of malloc on entry/exit (option "S")
*/ */
#include <my_global.h>
/* This file won't compile unless DBUG_OFF is undefined locally */
#ifdef DBUG_OFF #ifdef DBUG_OFF
#undef DBUG_OFF #undef DBUG_OFF
#endif #endif
#include <my_global.h>
#include <m_string.h> #include <m_string.h>
#include <errno.h> #include <errno.h>
#if defined(MSDOS) || defined(__WIN__) #if defined(MSDOS) || defined(__WIN__)
......
...@@ -381,3 +381,14 @@ DROP TABLE t1; ...@@ -381,3 +381,14 @@ DROP TABLE t1;
select cast(NULL as decimal(6)) as t1; select cast(NULL as decimal(6)) as t1;
t1 t1
NULL NULL
set names latin1;
select hex(cast('a' as char(2) binary));
hex(cast('a' as char(2) binary))
61
select hex(cast('a' as binary(2)));
hex(cast('a' as binary(2)))
6100
select hex(cast('a' as char(2) binary));
hex(cast('a' as char(2) binary))
61
End of 5.0 tests
...@@ -79,3 +79,31 @@ uncompress(a) uncompressed_length(a) ...@@ -79,3 +79,31 @@ uncompress(a) uncompressed_length(a)
NULL NULL NULL NULL
a 1 a 1
drop table t1; drop table t1;
create table t1 (a varchar(32) not null);
insert into t1 values ('foo');
explain select * from t1 where uncompress(a) is null;
id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE t1 system NULL NULL NULL NULL 1
Warnings:
Error 1259 ZLIB: Input data corrupted
select * from t1 where uncompress(a) is null;
a
foo
Warnings:
Error 1259 ZLIB: Input data corrupted
explain select *, uncompress(a) from t1;
id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE t1 system NULL NULL NULL NULL 1
select *, uncompress(a) from t1;
a uncompress(a)
foo NULL
Warnings:
Error 1259 ZLIB: Input data corrupted
select *, uncompress(a), uncompress(a) is null from t1;
a uncompress(a) uncompress(a) is null
foo NULL 1
Warnings:
Error 1259 ZLIB: Input data corrupted
Error 1259 ZLIB: Input data corrupted
drop table t1;
End of 5.0 tests
...@@ -2875,3 +2875,19 @@ use mysqldump_dbb; ...@@ -2875,3 +2875,19 @@ use mysqldump_dbb;
drop view v1; drop view v1;
drop table t1; drop table t1;
drop database mysqldump_dbb; drop database mysqldump_dbb;
use test;
create user mysqltest_1;
create table t1(a int, b varchar(34));
mysqldump: Couldn't execute 'FLUSH TABLES': Access denied; you need the RELOAD privilege for this operation (1227)
mysqldump: Couldn't execute 'FLUSH TABLES': Access denied; you need the RELOAD privilege for this operation (1227)
grant RELOAD on *.* to mysqltest_1@localhost;
mysqldump: Couldn't execute 'SHOW MASTER STATUS': Access denied; you need the SUPER,REPLICATION CLIENT privilege for this operation (1227)
mysqldump: Couldn't execute 'SHOW MASTER STATUS': Access denied; you need the SUPER,REPLICATION CLIENT privilege for this operation (1227)
grant REPLICATION CLIENT on *.* to mysqltest_1@localhost;
CHANGE MASTER TO MASTER_LOG_FILE='master-bin.000003', MASTER_LOG_POS=3784;
CREATE TABLE `t1` (
`a` int(11) default NULL,
`b` varchar(34) default NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
drop table t1;
drop user mysqltest_1;
...@@ -256,3 +256,39 @@ t1 CREATE TABLE `t1` ( ...@@ -256,3 +256,39 @@ t1 CREATE TABLE `t1` (
`@first_var` longtext `@first_var` longtext
) ENGINE=MyISAM DEFAULT CHARSET=latin1 ) ENGINE=MyISAM DEFAULT CHARSET=latin1
drop table t1; drop table t1;
set @a=18446744071710965857;
select @a;
@a
18446744071710965857
CREATE TABLE `bigfailure` (
`afield` BIGINT UNSIGNED NOT NULL
);
INSERT INTO `bigfailure` VALUES (18446744071710965857);
SELECT * FROM bigfailure;
afield
18446744071710965857
select * from (SELECT afield FROM bigfailure) as b;
afield
18446744071710965857
select * from bigfailure where afield = (SELECT afield FROM bigfailure);
afield
18446744071710965857
select * from bigfailure where afield = 18446744071710965857;
afield
18446744071710965857
select * from bigfailure where afield = 18446744071710965856+1;
afield
18446744071710965857
SET @a := (SELECT afield FROM bigfailure);
SELECT @a;
@a
18446744071710965857
SET @a := (select afield from (SELECT afield FROM bigfailure) as b);
SELECT @a;
@a
18446744071710965857
SET @a := (select * from bigfailure where afield = (SELECT afield FROM bigfailure));
SELECT @a;
@a
18446744071710965857
drop table bigfailure;
...@@ -204,7 +204,19 @@ SELECT CAST(v AS DECIMAL), CAST(tt AS DECIMAL), CAST(t AS DECIMAL), ...@@ -204,7 +204,19 @@ SELECT CAST(v AS DECIMAL), CAST(tt AS DECIMAL), CAST(t AS DECIMAL),
CAST(mt AS DECIMAL), CAST(lt AS DECIMAL) from t1; CAST(mt AS DECIMAL), CAST(lt AS DECIMAL) from t1;
DROP TABLE t1; DROP TABLE t1;
# Bug @10237 (CAST(NULL DECIMAL) crashes server)
#
# Bug #10237 (CAST(NULL DECIMAL) crashes server)
# #
select cast(NULL as decimal(6)) as t1; select cast(NULL as decimal(6)) as t1;
#
# Bug #17903: cast to char results in binary
#
set names latin1;
select hex(cast('a' as char(2) binary));
select hex(cast('a' as binary(2)));
select hex(cast('a' as char(2) binary));
--echo End of 5.0 tests
...@@ -57,3 +57,17 @@ select uncompress(a), uncompressed_length(a) from t1; ...@@ -57,3 +57,17 @@ select uncompress(a), uncompressed_length(a) from t1;
drop table t1; drop table t1;
# End of 4.1 tests # End of 4.1 tests
#
# Bug #18539: uncompress(d) is null: impossible?
#
create table t1 (a varchar(32) not null);
insert into t1 values ('foo');
explain select * from t1 where uncompress(a) is null;
select * from t1 where uncompress(a) is null;
explain select *, uncompress(a) from t1;
select *, uncompress(a) from t1;
select *, uncompress(a), uncompress(a) is null from t1;
drop table t1;
--echo End of 5.0 tests
...@@ -1266,3 +1266,43 @@ use mysqldump_dbb; ...@@ -1266,3 +1266,43 @@ use mysqldump_dbb;
drop view v1; drop view v1;
drop table t1; drop table t1;
drop database mysqldump_dbb; drop database mysqldump_dbb;
#
# Bug#21215 mysqldump creating incomplete backups without warning
#
use test;
# Create user without sufficient privs to perform the requested operation
create user mysqltest_1;
create table t1(a int, b varchar(34));
# Execute mysqldump, will fail on FLUSH TABLES
--error 2
--exec $MYSQL_DUMP --compact --master-data -u mysqltest_1 test 2>&1
# Execute mysqldump, will fail on FLUSH TABLES
# use --force, should no affect behaviour
--error 2
--exec $MYSQL_DUMP --compact --force --master-data -u mysqltest_1 test 2>&1
# Add RELOAD grants
grant RELOAD on *.* to mysqltest_1@localhost;
# Execute mysqldump, will fail on SHOW MASTER STATUS
--error 2
--exec $MYSQL_DUMP --compact --master-data -u mysqltest_1 test 2>&1
# Execute mysqldump, will fail on SHOW MASTER STATUS.
# use --force, should not alter behaviour
--error 2
--exec $MYSQL_DUMP --compact --force --master-data -u mysqltest_1 test 2>&1
# Add REPLICATION CLIENT grants
grant REPLICATION CLIENT on *.* to mysqltest_1@localhost;
# Execute mysqldump, should now succeed
--exec $MYSQL_DUMP --compact --master-data -u mysqltest_1 test 2>&1
# Clean up
drop table t1;
drop user mysqltest_1;
...@@ -171,3 +171,34 @@ set @first_var= cast(NULL as CHAR); ...@@ -171,3 +171,34 @@ set @first_var= cast(NULL as CHAR);
create table t1 select @first_var; create table t1 select @first_var;
show create table t1; show create table t1;
drop table t1; drop table t1;
#
# Bug #7498 User variable SET saves SIGNED BIGINT as UNSIGNED BIGINT
#
# First part, set user var to large number and select it
set @a=18446744071710965857;
select @a;
# Second part, set user var from large number in table
# then select it
CREATE TABLE `bigfailure` (
`afield` BIGINT UNSIGNED NOT NULL
);
INSERT INTO `bigfailure` VALUES (18446744071710965857);
SELECT * FROM bigfailure;
select * from (SELECT afield FROM bigfailure) as b;
select * from bigfailure where afield = (SELECT afield FROM bigfailure);
select * from bigfailure where afield = 18446744071710965857;
# This is fixed in 5.0, to be uncommented there
#select * from bigfailure where afield = '18446744071710965857';
select * from bigfailure where afield = 18446744071710965856+1;
SET @a := (SELECT afield FROM bigfailure);
SELECT @a;
SET @a := (select afield from (SELECT afield FROM bigfailure) as b);
SELECT @a;
SET @a := (select * from bigfailure where afield = (SELECT afield FROM bigfailure));
SELECT @a;
drop table bigfailure;
...@@ -3413,6 +3413,7 @@ static user_var_entry *get_variable(HASH *hash, LEX_STRING &name, ...@@ -3413,6 +3413,7 @@ static user_var_entry *get_variable(HASH *hash, LEX_STRING &name,
entry->length=0; entry->length=0;
entry->update_query_id=0; entry->update_query_id=0;
entry->collation.set(NULL, DERIVATION_IMPLICIT); entry->collation.set(NULL, DERIVATION_IMPLICIT);
entry->unsigned_flag= 0;
/* /*
If we are here, we were called from a SET or a query which sets a If we are here, we were called from a SET or a query which sets a
variable. Imagine it is this: variable. Imagine it is this:
...@@ -3499,6 +3500,7 @@ Item_func_set_user_var::fix_length_and_dec() ...@@ -3499,6 +3500,7 @@ Item_func_set_user_var::fix_length_and_dec()
type - type of new value type - type of new value
cs - charset info for new value cs - charset info for new value
dv - derivation for new value dv - derivation for new value
unsigned_arg - indiates if a value of type INT_RESULT is unsigned
RETURN VALUE RETURN VALUE
False - success, True - failure False - success, True - failure
...@@ -3506,7 +3508,8 @@ Item_func_set_user_var::fix_length_and_dec() ...@@ -3506,7 +3508,8 @@ Item_func_set_user_var::fix_length_and_dec()
static bool static bool
update_hash(user_var_entry *entry, bool set_null, void *ptr, uint length, update_hash(user_var_entry *entry, bool set_null, void *ptr, uint length,
Item_result type, CHARSET_INFO *cs, Derivation dv) Item_result type, CHARSET_INFO *cs, Derivation dv,
bool unsigned_arg)
{ {
if (set_null) if (set_null)
{ {
...@@ -3554,6 +3557,7 @@ update_hash(user_var_entry *entry, bool set_null, void *ptr, uint length, ...@@ -3554,6 +3557,7 @@ update_hash(user_var_entry *entry, bool set_null, void *ptr, uint length,
((my_decimal*)entry->value)->fix_buffer_pointer(); ((my_decimal*)entry->value)->fix_buffer_pointer();
entry->length= length; entry->length= length;
entry->collation.set(cs, dv); entry->collation.set(cs, dv);
entry->unsigned_flag= unsigned_arg;
} }
entry->type=type; entry->type=type;
return 0; return 0;
...@@ -3562,7 +3566,8 @@ update_hash(user_var_entry *entry, bool set_null, void *ptr, uint length, ...@@ -3562,7 +3566,8 @@ update_hash(user_var_entry *entry, bool set_null, void *ptr, uint length,
bool bool
Item_func_set_user_var::update_hash(void *ptr, uint length, Item_result type, Item_func_set_user_var::update_hash(void *ptr, uint length, Item_result type,
CHARSET_INFO *cs, Derivation dv) CHARSET_INFO *cs, Derivation dv,
bool unsigned_arg)
{ {
/* /*
If we set a variable explicitely to NULL then keep the old If we set a variable explicitely to NULL then keep the old
...@@ -3571,7 +3576,7 @@ Item_func_set_user_var::update_hash(void *ptr, uint length, Item_result type, ...@@ -3571,7 +3576,7 @@ Item_func_set_user_var::update_hash(void *ptr, uint length, Item_result type,
if ((null_value= args[0]->null_value) && null_item) if ((null_value= args[0]->null_value) && null_item)
type= entry->type; // Don't change type of item type= entry->type; // Don't change type of item
if (::update_hash(entry, (null_value= args[0]->null_value), if (::update_hash(entry, (null_value= args[0]->null_value),
ptr, length, type, cs, dv)) ptr, length, type, cs, dv, unsigned_arg))
{ {
current_thd->fatal_error(); // Probably end of memory current_thd->fatal_error(); // Probably end of memory
null_value= 1; null_value= 1;
...@@ -3653,7 +3658,10 @@ String *user_var_entry::val_str(my_bool *null_value, String *str, ...@@ -3653,7 +3658,10 @@ String *user_var_entry::val_str(my_bool *null_value, String *str,
str->set(*(double*) value, decimals, &my_charset_bin); str->set(*(double*) value, decimals, &my_charset_bin);
break; break;
case INT_RESULT: case INT_RESULT:
str->set(*(longlong*) value, &my_charset_bin); if (!unsigned_flag)
str->set(*(longlong*) value, &my_charset_bin);
else
str->set(*(ulonglong*) value, &my_charset_bin);
break; break;
case DECIMAL_RESULT: case DECIMAL_RESULT:
my_decimal2string(E_DEC_FATAL_ERROR, (my_decimal *)value, 0, 0, 0, str); my_decimal2string(E_DEC_FATAL_ERROR, (my_decimal *)value, 0, 0, 0, str);
...@@ -3724,6 +3732,7 @@ Item_func_set_user_var::check() ...@@ -3724,6 +3732,7 @@ Item_func_set_user_var::check()
case INT_RESULT: case INT_RESULT:
{ {
save_result.vint= args[0]->val_int(); save_result.vint= args[0]->val_int();
unsigned_flag= args[0]->unsigned_flag;
break; break;
} }
case STRING_RESULT: case STRING_RESULT:
...@@ -3779,7 +3788,8 @@ Item_func_set_user_var::update() ...@@ -3779,7 +3788,8 @@ Item_func_set_user_var::update()
case INT_RESULT: case INT_RESULT:
{ {
res= update_hash((void*) &save_result.vint, sizeof(save_result.vint), res= update_hash((void*) &save_result.vint, sizeof(save_result.vint),
INT_RESULT, &my_charset_bin, DERIVATION_IMPLICIT); INT_RESULT, &my_charset_bin, DERIVATION_IMPLICIT,
unsigned_flag);
break; break;
} }
case STRING_RESULT: case STRING_RESULT:
...@@ -4158,7 +4168,7 @@ bool Item_user_var_as_out_param::fix_fields(THD *thd, Item **ref) ...@@ -4158,7 +4168,7 @@ bool Item_user_var_as_out_param::fix_fields(THD *thd, Item **ref)
void Item_user_var_as_out_param::set_null_value(CHARSET_INFO* cs) void Item_user_var_as_out_param::set_null_value(CHARSET_INFO* cs)
{ {
if (::update_hash(entry, TRUE, 0, 0, STRING_RESULT, cs, if (::update_hash(entry, TRUE, 0, 0, STRING_RESULT, cs,
DERIVATION_IMPLICIT)) DERIVATION_IMPLICIT, 0 /* unsigned_arg */))
current_thd->fatal_error(); // Probably end of memory current_thd->fatal_error(); // Probably end of memory
} }
...@@ -4167,7 +4177,7 @@ void Item_user_var_as_out_param::set_value(const char *str, uint length, ...@@ -4167,7 +4177,7 @@ void Item_user_var_as_out_param::set_value(const char *str, uint length,
CHARSET_INFO* cs) CHARSET_INFO* cs)
{ {
if (::update_hash(entry, FALSE, (void*)str, length, STRING_RESULT, cs, if (::update_hash(entry, FALSE, (void*)str, length, STRING_RESULT, cs,
DERIVATION_IMPLICIT)) DERIVATION_IMPLICIT, 0 /* unsigned_arg */))
current_thd->fatal_error(); // Probably end of memory current_thd->fatal_error(); // Probably end of memory
} }
......
...@@ -1161,8 +1161,6 @@ class Item_func_set_user_var :public Item_func ...@@ -1161,8 +1161,6 @@ class Item_func_set_user_var :public Item_func
String *vstr; String *vstr;
my_decimal *vdec; my_decimal *vdec;
} save_result; } save_result;
String save_buff;
public: public:
LEX_STRING name; // keep it public LEX_STRING name; // keep it public
...@@ -1173,8 +1171,8 @@ class Item_func_set_user_var :public Item_func ...@@ -1173,8 +1171,8 @@ class Item_func_set_user_var :public Item_func
longlong val_int(); longlong val_int();
String *val_str(String *str); String *val_str(String *str);
my_decimal *val_decimal(my_decimal *); my_decimal *val_decimal(my_decimal *);
bool update_hash(void *ptr, uint length, enum Item_result type, bool update_hash(void *ptr, uint length, enum Item_result type,
CHARSET_INFO *cs, Derivation dv); CHARSET_INFO *cs, Derivation dv, bool unsigned_arg= 0);
bool check(); bool check();
bool update(); bool update();
enum Item_result result_type () const { return cached_result_type; } enum Item_result result_type () const { return cached_result_type; }
......
...@@ -2985,6 +2985,16 @@ String *Item_func_uncompress::val_str(String *str) ...@@ -2985,6 +2985,16 @@ String *Item_func_uncompress::val_str(String *str)
if (res->is_empty()) if (res->is_empty())
return res; return res;
/* If length is less than 4 bytes, data is corrupt */
if (res->length() <= 4)
{
push_warning_printf(current_thd,MYSQL_ERROR::WARN_LEVEL_ERROR,
ER_ZLIB_Z_DATA_ERROR,
ER(ER_ZLIB_Z_DATA_ERROR));
goto err;
}
/* Size of uncompressed data is stored as first 4 bytes of field */
new_size= uint4korr(res->ptr()) & 0x3FFFFFFF; new_size= uint4korr(res->ptr()) & 0x3FFFFFFF;
if (new_size > current_thd->variables.max_allowed_packet) if (new_size > current_thd->variables.max_allowed_packet)
{ {
......
...@@ -808,7 +808,7 @@ class Item_func_uncompress: public Item_str_func ...@@ -808,7 +808,7 @@ class Item_func_uncompress: public Item_str_func
String buffer; String buffer;
public: public:
Item_func_uncompress(Item *a): Item_str_func(a){} Item_func_uncompress(Item *a): Item_str_func(a){}
void fix_length_and_dec(){max_length= MAX_BLOB_WIDTH;} void fix_length_and_dec(){ maybe_null= 1; max_length= MAX_BLOB_WIDTH; }
const char *func_name() const{return "uncompress";} const char *func_name() const{return "uncompress";}
String *val_str(String *) ZLIB_DEPENDED_FUNCTION String *val_str(String *) ZLIB_DEPENDED_FUNCTION
}; };
......
...@@ -1511,6 +1511,7 @@ static Item_result set_row(List<Item> &item_list, Item *item, ...@@ -1511,6 +1511,7 @@ static Item_result set_row(List<Item> &item_list, Item *item,
item->max_length= sel_item->max_length; item->max_length= sel_item->max_length;
res_type= sel_item->result_type(); res_type= sel_item->result_type();
item->decimals= sel_item->decimals; item->decimals= sel_item->decimals;
item->unsigned_flag= sel_item->unsigned_flag;
*maybe_null= sel_item->maybe_null; *maybe_null= sel_item->maybe_null;
if (!(row[i]= Item_cache::get_cache(res_type))) if (!(row[i]= Item_cache::get_cache(res_type)))
return STRING_RESULT; // we should return something return STRING_RESULT; // we should return something
......
...@@ -2015,6 +2015,7 @@ class user_var_entry ...@@ -2015,6 +2015,7 @@ class user_var_entry
ulong length; ulong length;
query_id_t update_query_id, used_query_id; query_id_t update_query_id, used_query_id;
Item_result type; Item_result type;
bool unsigned_flag;
double val_real(my_bool *null_value); double val_real(my_bool *null_value);
longlong val_int(my_bool *null_value); longlong val_int(my_bool *null_value);
......
...@@ -237,7 +237,7 @@ void udf_init() ...@@ -237,7 +237,7 @@ void udf_init()
} }
} }
if (error > 0) if (error > 0)
sql_print_error(ER(ER_GET_ERRNO), my_errno); sql_print_error("Got unknown error: %d", my_errno);
end_read_record(&read_record_info); end_read_record(&read_record_info);
new_thd->version--; // Force close to free memory new_thd->version--; // Force close to free memory
......
...@@ -3104,7 +3104,7 @@ opt_bin_mod: ...@@ -3104,7 +3104,7 @@ opt_bin_mod:
| BINARY { Lex->type|= BINCMP_FLAG; }; | BINARY { Lex->type|= BINCMP_FLAG; };
opt_bin_charset: opt_bin_charset:
/* empty */ { } /* empty */ { Lex->charset= NULL; }
| ASCII_SYM { Lex->charset=&my_charset_latin1; } | ASCII_SYM { Lex->charset=&my_charset_latin1; }
| UNICODE_SYM | UNICODE_SYM
{ {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment