diff options
-rwxr-xr-x | BUILD/SETUP.sh | 10 | ||||
-rw-r--r-- | include/my_global.h | 4 | ||||
-rw-r--r-- | mysql-test/r/lowercase_table2.result | 14 | ||||
-rw-r--r-- | mysql-test/r/order_by.result | 17 | ||||
-rw-r--r-- | mysql-test/t/lowercase_table2.test | 14 | ||||
-rw-r--r-- | mysql-test/t/order_by.test | 10 | ||||
-rw-r--r-- | sql/item_timefunc.cc | 17 | ||||
-rw-r--r-- | sql/mysql_priv.h | 2 | ||||
-rw-r--r-- | sql/mysqld.cc | 2 |
9 files changed, 65 insertions, 25 deletions
diff --git a/BUILD/SETUP.sh b/BUILD/SETUP.sh index 215d7ba24b9..b899b9a7d9b 100755 --- a/BUILD/SETUP.sh +++ b/BUILD/SETUP.sh @@ -6,12 +6,15 @@ then exit 1 fi +prefix_configs="--prefix=/usr/local/mysql" just_print= just_configure= full_debug= while test $# -gt 0 do case "$1" in + --prefix=* ) prefix_configs="$1"; shift ;; + --with-debug=full ) full_debug="=full"; shift ;; -c | --just-configure ) just_configure=1; shift ;; -n | --just-print | --print ) just_print=1; shift ;; -h | --help ) cat <<EOF; exit 0 ;; @@ -19,12 +22,11 @@ Usage: $0 [-h|-n] [configure-options] -h, --help Show this help message. -n, --just-print Don't actually run any commands; just print them. -c, --just-configure Stop after running configure. - -Any other options will be passed directly to configure. + --with-debug=full Build with full debug. + --prefix=path Build with prefix 'path'. Note: this script is intended for internal use by MySQL developers. EOF - --with-debug=full ) full_debug="=full"; shift ;; * ) echo "Unknown option '$1'" exit 1 @@ -70,7 +72,7 @@ debug_extra_cflags="-O1 -Wuninitialized" base_cxxflags="-felide-constructors -fno-exceptions -fno-rtti" amd64_cxxflags="-DBIG_TABLES" -base_configs="--prefix=/usr/local/mysql --enable-assembler --with-extra-charsets=complex --enable-thread-safe-client --with-readline" +base_configs="$prefix_configs --enable-assembler --with-extra-charsets=complex --enable-thread-safe-client --with-readline" static_link="--with-mysqld-ldflags=-all-static --with-client-ldflags=-all-static" amd64_configs="" alpha_configs="" # Not used yet diff --git a/include/my_global.h b/include/my_global.h index 21ba4331cb1..f27eb4733bd 100644 --- a/include/my_global.h +++ b/include/my_global.h @@ -530,7 +530,11 @@ typedef SOCKET_SIZE_TYPE size_socket; #define FN_LEN 256 /* Max file name len */ #define FN_HEADLEN 253 /* Max length of filepart of file name */ #define FN_EXTLEN 20 /* Max length of extension (part of FN_LEN) */ +#ifdef PATH_MAX +#define FN_REFLEN PATH_MAX/* Max length of full path-name */ +#else #define FN_REFLEN 512 /* Max length of full path-name */ +#endif #define FN_EXTCHAR '.' #define FN_HOMELIB '~' /* ~/ is used as abbrev for home dir */ #define FN_CURLIB '.' /* ./ is used as abbrev for current dir */ diff --git a/mysql-test/r/lowercase_table2.result b/mysql-test/r/lowercase_table2.result index cfd8f78a77c..a79b6b04063 100644 --- a/mysql-test/r/lowercase_table2.result +++ b/mysql-test/r/lowercase_table2.result @@ -1,4 +1,4 @@ -DROP TABLE IF EXISTS t1,t2,T1,T2,t3,T3,tT; +DROP TABLE IF EXISTS t1,t2,T1,T2,t3,T3; DROP DATABASE IF EXISTS `TEST_$1`; DROP DATABASE IF EXISTS `test_$1`; CREATE TABLE T1 (a int); @@ -131,13 +131,13 @@ show tables like 't1%'; Tables_in_test (t1%) t1 drop table t1; -create temporary table tT(a int(11), b varchar(8)); -insert into tT values (1, 'abc'); -select * from tT; +create temporary table T1(a int(11), b varchar(8)); +insert into T1 values (1, 'abc'); +select * from T1; a b 1 abc -alter table tT add index (a); -select * from tT; +alter table T1 add index (a); +select * from T1; a b 1 abc -drop table tT; +drop table T1; diff --git a/mysql-test/r/order_by.result b/mysql-test/r/order_by.result index 5674fbb9177..3474da93d75 100644 --- a/mysql-test/r/order_by.result +++ b/mysql-test/r/order_by.result @@ -778,3 +778,20 @@ sid wnid 39560 01019090000 37994 01019090000 drop table t1; +CREATE TABLE t1 (a int); +INSERT INTO t1 VALUES (2), (1), (1), (2), (1); +SELECT a FROM t1 ORDER BY a; +a +1 +1 +1 +2 +2 +(SELECT a FROM t1) ORDER BY a; +a +1 +1 +1 +2 +2 +DROP TABLE t1; diff --git a/mysql-test/t/lowercase_table2.test b/mysql-test/t/lowercase_table2.test index 237dcd29950..a766e39abab 100644 --- a/mysql-test/t/lowercase_table2.test +++ b/mysql-test/t/lowercase_table2.test @@ -10,7 +10,7 @@ show variables like "lower_case_table_names"; enable_query_log; --disable_warnings -DROP TABLE IF EXISTS t1,t2,T1,T2,t3,T3,tT; +DROP TABLE IF EXISTS t1,t2,T1,T2,t3,T3; DROP DATABASE IF EXISTS `TEST_$1`; DROP DATABASE IF EXISTS `test_$1`; --enable_warnings @@ -105,9 +105,9 @@ drop table t1; # Bug #7261: Alter table loses temp table # -create temporary table tT(a int(11), b varchar(8)); -insert into tT values (1, 'abc'); -select * from tT; -alter table tT add index (a); -select * from tT; -drop table tT; +create temporary table T1(a int(11), b varchar(8)); +insert into T1 values (1, 'abc'); +select * from T1; +alter table T1 add index (a); +select * from T1; +drop table T1; diff --git a/mysql-test/t/order_by.test b/mysql-test/t/order_by.test index 02e49f9750d..9608b7900ee 100644 --- a/mysql-test/t/order_by.test +++ b/mysql-test/t/order_by.test @@ -539,3 +539,13 @@ explain select * from t1 where wnid like '0101%' order by wnid; select * from t1 where wnid like '0101%' order by wnid; drop table t1; + +# +# Bug #7672 - a wrong result for a select query in braces followed by order by +# + +CREATE TABLE t1 (a int); +INSERT INTO t1 VALUES (2), (1), (1), (2), (1); +SELECT a FROM t1 ORDER BY a; +(SELECT a FROM t1) ORDER BY a; +DROP TABLE t1; diff --git a/sql/item_timefunc.cc b/sql/item_timefunc.cc index 32813454fef..5a069aee554 100644 --- a/sql/item_timefunc.cc +++ b/sql/item_timefunc.cc @@ -2134,7 +2134,6 @@ String *Item_char_typecast::val_str(String *str) String *res; uint32 length; -#if 0 if (!charset_conversion) { if (!(res= args[0]->val_str(str))) @@ -2144,7 +2143,6 @@ String *Item_char_typecast::val_str(String *str) } } else -#endif { // Convert character set if differ uint dummy_errors; @@ -2182,9 +2180,18 @@ String *Item_char_typecast::val_str(String *str) void Item_char_typecast::fix_length_and_dec() { uint32 char_length; - charset_conversion= !my_charset_same(args[0]->collation.collation, cast_cs) && - args[0]->collation.collation != &my_charset_bin && - cast_cs != &my_charset_bin; + /* + We always force character set conversion if cast_cs + is a multi-byte character set. It garantees that the + result of CAST is a well-formed string. + For single-byte character sets we allow just to copy + from the argument. A single-byte character sets string + is always well-formed. + */ + charset_conversion= (cast_cs->mbmaxlen > 1) || + !my_charset_same(args[0]->collation.collation, cast_cs) && + args[0]->collation.collation != &my_charset_bin && + cast_cs != &my_charset_bin; collation.set(cast_cs, DERIVATION_IMPLICIT); char_length= (cast_length >= 0) ? cast_length : args[0]->max_length/args[0]->collation.collation->mbmaxlen; diff --git a/sql/mysql_priv.h b/sql/mysql_priv.h index cac3dfd4dc5..bd0e1455eb2 100644 --- a/sql/mysql_priv.h +++ b/sql/mysql_priv.h @@ -982,7 +982,7 @@ extern Gt_creator gt_creator; extern Lt_creator lt_creator; extern Ge_creator ge_creator; extern Le_creator le_creator; -extern char language[LIBLEN],reg_ext[FN_EXTLEN]; +extern char language[FN_REFLEN], reg_ext[FN_EXTLEN]; extern char glob_hostname[FN_REFLEN], mysql_home[FN_REFLEN]; extern char pidfile_name[FN_REFLEN], system_time_zone[30], *opt_init_file; extern char log_error_file[FN_REFLEN]; diff --git a/sql/mysqld.cc b/sql/mysqld.cc index c9d2abb932d..9b39f51fc5b 100644 --- a/sql/mysqld.cc +++ b/sql/mysqld.cc @@ -351,7 +351,7 @@ char *default_tz_name; char log_error_file[FN_REFLEN], glob_hostname[FN_REFLEN]; char* log_error_file_ptr= log_error_file; char mysql_real_data_home[FN_REFLEN], - language[LIBLEN],reg_ext[FN_EXTLEN], mysql_charsets_dir[FN_REFLEN], + language[FN_REFLEN], reg_ext[FN_EXTLEN], mysql_charsets_dir[FN_REFLEN], *mysqld_user,*mysqld_chroot, *opt_init_file, *opt_init_connect, *opt_init_slave, def_ft_boolean_syntax[sizeof(ft_boolean_syntax)]; |