Merge bk-internal.mysql.com:/home/bk/mysql-5.0
into mysql.com:/home/my/mysql-5.0
This commit is contained in:
commit
bf46e486bb
@ -27,6 +27,7 @@ bar@deer.(none)
|
||||
bar@gw.udmsearch.izhnet.ru
|
||||
bar@mysql.com
|
||||
bar@noter.intranet.mysql.r18.ru
|
||||
bell@51.0.168.192.in-addr.arpa
|
||||
bell@laptop.sanja.is.com.ua
|
||||
bell@sanja.is.com.ua
|
||||
bk@admin.bk
|
||||
|
@ -2926,9 +2926,9 @@ com_status(String *buffer __attribute__((unused)),
|
||||
MYSQL_ROW cur=mysql_fetch_row(result);
|
||||
if (cur)
|
||||
{
|
||||
tee_fprintf(stdout, "Server characterset:\t%s\n", cur[0] ? cur[0] : "");
|
||||
tee_fprintf(stdout, "Server characterset:\t%s\n", cur[2] ? cur[2] : "");
|
||||
tee_fprintf(stdout, "Db characterset:\t%s\n", cur[3] ? cur[3] : "");
|
||||
tee_fprintf(stdout, "Client characterset:\t%s\n", cur[2] ? cur[2] : "");
|
||||
tee_fprintf(stdout, "Client characterset:\t%s\n", cur[0] ? cur[0] : "");
|
||||
tee_fprintf(stdout, "Conn. characterset:\t%s\n", cur[1] ? cur[1] : "");
|
||||
}
|
||||
mysql_free_result(result);
|
||||
|
@ -120,25 +120,33 @@ int main(int argc, char **argv)
|
||||
int count, error;
|
||||
char **load_default_groups, *tmp_arguments[2],
|
||||
**argument, **arguments;
|
||||
char *defaults, *extra_defaults;
|
||||
MY_INIT(argv[0]);
|
||||
|
||||
get_defaults_files(argc, argv, &defaults, &extra_defaults);
|
||||
|
||||
/*
|
||||
** Check out the args
|
||||
*/
|
||||
if (get_options(&argc,&argv))
|
||||
exit(1);
|
||||
if (!(load_default_groups=(char**) my_malloc((argc+2)*sizeof(char*),
|
||||
MYF(MY_WME))))
|
||||
exit(1);
|
||||
if (get_options(&argc,&argv))
|
||||
exit(1);
|
||||
|
||||
for (count=0; *argv ; argv++,count++)
|
||||
load_default_groups[count]= *argv;
|
||||
load_default_groups[count]=0;
|
||||
|
||||
count=1;
|
||||
count=0;
|
||||
arguments=tmp_arguments;
|
||||
arguments[0]=my_progname;
|
||||
arguments[1]=0;
|
||||
arguments[count++]=my_progname;
|
||||
if (extra_defaults)
|
||||
arguments[count++]= extra_defaults;
|
||||
if (defaults)
|
||||
arguments[count++]= defaults;
|
||||
arguments[count]= 0;
|
||||
|
||||
if ((error= load_defaults(config_file, (const char **) load_default_groups,
|
||||
&count, &arguments)))
|
||||
{
|
||||
|
@ -450,6 +450,7 @@ while test $# -gt 0; do
|
||||
--debug=d:t:A,$MYSQL_TEST_DIR/var/log/mysqldump.trace"
|
||||
EXTRA_MYSQLBINLOG_OPT="$EXTRA_MYSQLBINLOG_OPT \
|
||||
--debug=d:t:A,$MYSQL_TEST_DIR/var/log/mysqlbinlog.trace"
|
||||
EXTRA_MYSQL_CLIENT_TEST_OPT="--debug=d:t:A,$MYSQL_TEST_DIR/var/log/mysql_client_test.trace"
|
||||
;;
|
||||
--fast)
|
||||
FAST_START=1
|
||||
@ -690,7 +691,7 @@ then
|
||||
EXTRA_SLAVE_MYSQLD_OPT="$EXTRA_SLAVE_MYSQLD_OPT --user=root"
|
||||
fi
|
||||
|
||||
MYSQL_CLIENT_TEST="$MYSQL_CLIENT_TEST --no-defaults --testcase --user=root --socket=$MASTER_MYSOCK --port=$MYSQL_TCP_PORT --silent"
|
||||
MYSQL_CLIENT_TEST="$MYSQL_CLIENT_TEST --no-defaults --testcase --user=root --socket=$MASTER_MYSOCK --port=$MYSQL_TCP_PORT --silent $EXTRA_MYSQL_CLIENT_TEST_OPT"
|
||||
MYSQL_DUMP="$MYSQL_DUMP --no-defaults -uroot --socket=$MASTER_MYSOCK --password=$DBPASSWD $EXTRA_MYSQLDUMP_OPT"
|
||||
MYSQL_BINLOG="$MYSQL_BINLOG --no-defaults --local-load=$MYSQL_TMP_DIR --character-sets-dir=$CHARSETSDIR $EXTRA_MYSQLBINLOG_OPT"
|
||||
MYSQL_FIX_SYSTEM_TABLES="$MYSQL_FIX_SYSTEM_TABLES --no-defaults --host=localhost --port=$MASTER_MYPORT --socket=$MASTER_MYSOCK --user=root --password=$DBPASSWD --basedir=$BASEDIR --bindir=$CLIENT_BINDIR --verbose"
|
||||
|
@ -325,3 +325,8 @@ latin1_bin 6109
|
||||
latin1_bin 61
|
||||
latin1_bin 6120
|
||||
drop table t1;
|
||||
CREATE TABLE „a (a int);
|
||||
ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '„a (a int)' at line 1
|
||||
SELECT '„a' as str;
|
||||
str
|
||||
„a
|
||||
|
@ -861,3 +861,6 @@ user c
|
||||
one <one>
|
||||
two <two>
|
||||
DROP TABLE t1;
|
||||
select convert(_koi8r'É' using utf8) < convert(_koi8r'Ê' using utf8);
|
||||
convert(_koi8r'É' using utf8) < convert(_koi8r'Ê' using utf8)
|
||||
1
|
||||
|
@ -344,3 +344,22 @@ INSERT INTO t1 VALUES ('root','localhost'), ('root','%');
|
||||
SELECT * FROM (SELECT (SELECT a.a FROM t1 AS a WHERE a.a = b.a) FROM t1 AS b) AS c;
|
||||
ERROR 21000: Subquery returns more than 1 row
|
||||
DROP TABLE t1;
|
||||
create table t1(a int);
|
||||
create table t2(a int);
|
||||
create table t3(a int);
|
||||
insert into t1 values(1),(1);
|
||||
insert into t2 values(2),(2);
|
||||
insert into t3 values(3),(3);
|
||||
select * from t1 union distinct select * from t2 union all select * from t3;
|
||||
a
|
||||
1
|
||||
2
|
||||
3
|
||||
3
|
||||
select * from (select * from t1 union distinct select * from t2 union all select * from t3) X;
|
||||
a
|
||||
1
|
||||
2
|
||||
3
|
||||
3
|
||||
drop table t1, t2, t3;
|
||||
|
@ -1,5 +1,6 @@
|
||||
drop table if exists t5, t6, t7, t8;
|
||||
drop database if exists mysqltest ;
|
||||
drop database if exists client_test_db;
|
||||
drop database if exists testtets;
|
||||
drop table if exists t1Aa,t2Aa,v1Aa,v2Aa;
|
||||
drop view if exists t1Aa,t2Aa,v1Aa,v2Aa;
|
||||
|
@ -852,8 +852,8 @@ NULL NULL
|
||||
3.40282e+38 0
|
||||
DROP TABLE t1;
|
||||
CREATE TABLE t1 (col1 DOUBLE PRECISION, col2 DOUBLE PRECISION UNSIGNED);
|
||||
INSERT INTO t1 VALUES (-2.2E-307,0),(+1.7E+308,+1.7E+308);
|
||||
INSERT INTO t1 VALUES ('-2.2E-307',0),('+1.7E+308','+1.7E+308');
|
||||
INSERT INTO t1 VALUES (-2.2E-307,0),(2E-307,0),(+1.7E+308,+1.7E+308);
|
||||
INSERT INTO t1 VALUES ('-2.2E-307',0),('-2E-307',0),('+1.7E+308','+1.7E+308');
|
||||
INSERT INTO t1 (col1) VALUES (-2.2E-330);
|
||||
INSERT INTO t1 (col1) VALUES (+1.7E+309);
|
||||
Got one of the listed errors
|
||||
@ -864,7 +864,7 @@ ERROR 22003: Out of range value adjusted for column 'col1' at row 1
|
||||
INSERT INTO t1 (col2) VALUES ('-1.2E-3');
|
||||
ERROR 22003: Out of range value adjusted for column 'col2' at row 1
|
||||
UPDATE t1 SET col1 =col1 * 5000 WHERE col1 > 0;
|
||||
ERROR 22003: Out of range value adjusted for column 'col1' at row 2
|
||||
ERROR 22003: Out of range value adjusted for column 'col1' at row 3
|
||||
UPDATE t1 SET col2 =col2 / 0 WHERE col2 > 0;
|
||||
ERROR 22012: Division by 0
|
||||
UPDATE t1 SET col2= MOD(col2,0) WHERE col2 > 0;
|
||||
@ -890,9 +890,11 @@ Warning 1264 Out of range value adjusted for column 'col2' at row 1
|
||||
Warning 1264 Out of range value adjusted for column 'col2' at row 1
|
||||
SELECT * FROM t1;
|
||||
col1 col2
|
||||
-2.2e-307 0
|
||||
0 0
|
||||
1e-303 0
|
||||
1.7e+308 1.7e+308
|
||||
-2.2e-307 0
|
||||
0 0
|
||||
-2e-307 0
|
||||
1.7e+308 1.7e+308
|
||||
0 NULL
|
||||
2 NULL
|
||||
|
@ -11,6 +11,12 @@ SELECT 1e1,1.e1,1.0e1,1e+1,1.e+1,1.0e+1,1e-1,1.e-1,1.0e-1;
|
||||
SELECT 0.001e+1,0.001e-1, -0.001e+01,-0.001e-01;
|
||||
0.001e+1 0.001e-1 -0.001e+01 -0.001e-01
|
||||
0.01 0.0001 -0.01 -0.0001
|
||||
SELECT 123.23E+02,-123.23E-02,"123.23E+02"+0.0,"-123.23E-02"+0.0;
|
||||
123.23E+02 -123.23E-02 "123.23E+02"+0.0 "-123.23E-02"+0.0
|
||||
12323 -1.2323 12323 -1.2323
|
||||
SELECT 2147483647E+02,21474836.47E+06;
|
||||
2147483647E+02 21474836.47E+06
|
||||
214748364700 21474836470000
|
||||
create table t1 (f1 float(24),f2 float(52));
|
||||
show full columns from t1;
|
||||
Field Type Collation Null Key Default Extra Privileges Comment
|
||||
@ -209,3 +215,23 @@ c
|
||||
0.0002
|
||||
2e-05
|
||||
drop table t1;
|
||||
CREATE TABLE t1 (
|
||||
reckey int unsigned NOT NULL,
|
||||
recdesc varchar(50) NOT NULL,
|
||||
PRIMARY KEY (reckey)
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
|
||||
INSERT INTO t1 VALUES (108, 'Has 108 as key');
|
||||
INSERT INTO t1 VALUES (109, 'Has 109 as key');
|
||||
select * from t1 where reckey=108;
|
||||
reckey recdesc
|
||||
108 Has 108 as key
|
||||
select * from t1 where reckey=1.08E2;
|
||||
reckey recdesc
|
||||
108 Has 108 as key
|
||||
select * from t1 where reckey=109;
|
||||
reckey recdesc
|
||||
109 Has 109 as key
|
||||
select * from t1 where reckey=1.09E2;
|
||||
reckey recdesc
|
||||
109 Has 109 as key
|
||||
drop table t1;
|
||||
|
@ -127,7 +127,7 @@ drop table t1;
|
||||
set @a=_latin2'test';
|
||||
select charset(@a),collation(@a),coercibility(@a);
|
||||
charset(@a) collation(@a) coercibility(@a)
|
||||
latin2 latin2_general_ci 3
|
||||
latin2 latin2_general_ci 2
|
||||
select @a=_latin2'TEST';
|
||||
@a=_latin2'TEST'
|
||||
1
|
||||
@ -137,12 +137,13 @@ select @a=_latin2'TEST' collate latin2_bin;
|
||||
set @a=_latin2'test' collate latin2_general_ci;
|
||||
select charset(@a),collation(@a),coercibility(@a);
|
||||
charset(@a) collation(@a) coercibility(@a)
|
||||
latin2 latin2_general_ci 0
|
||||
latin2 latin2_general_ci 2
|
||||
select @a=_latin2'TEST';
|
||||
@a=_latin2'TEST'
|
||||
1
|
||||
select @a=_latin2'TEST' collate latin2_bin;
|
||||
ERROR HY000: Illegal mix of collations (latin2_general_ci,EXPLICIT) and (latin2_bin,EXPLICIT) for operation '='
|
||||
@a=_latin2'TEST' collate latin2_bin
|
||||
0
|
||||
select charset(@a:=_latin2'test');
|
||||
charset(@a:=_latin2'test')
|
||||
latin2
|
||||
@ -151,21 +152,22 @@ collation(@a:=_latin2'test')
|
||||
latin2_general_ci
|
||||
select coercibility(@a:=_latin2'test');
|
||||
coercibility(@a:=_latin2'test')
|
||||
3
|
||||
2
|
||||
select collation(@a:=_latin2'test' collate latin2_bin);
|
||||
collation(@a:=_latin2'test' collate latin2_bin)
|
||||
latin2_bin
|
||||
select coercibility(@a:=_latin2'test' collate latin2_bin);
|
||||
coercibility(@a:=_latin2'test' collate latin2_bin)
|
||||
0
|
||||
2
|
||||
select (@a:=_latin2'test' collate latin2_bin) = _latin2'TEST';
|
||||
(@a:=_latin2'test' collate latin2_bin) = _latin2'TEST'
|
||||
0
|
||||
select charset(@a),collation(@a),coercibility(@a);
|
||||
charset(@a) collation(@a) coercibility(@a)
|
||||
latin2 latin2_bin 0
|
||||
latin2 latin2_bin 2
|
||||
select (@a:=_latin2'test' collate latin2_bin) = _latin2'TEST' collate latin2_general_ci;
|
||||
ERROR HY000: Illegal mix of collations (latin2_bin,EXPLICIT) and (latin2_general_ci,EXPLICIT) for operation '='
|
||||
(@a:=_latin2'test' collate latin2_bin) = _latin2'TEST' collate latin2_general_ci
|
||||
1
|
||||
create table t1 (a varchar(50));
|
||||
reset master;
|
||||
SET TIMESTAMP=10000;
|
||||
|
@ -66,3 +66,12 @@ SET collation_connection='latin1_swedish_ci';
|
||||
-- source include/ctype_filesort.inc
|
||||
SET collation_connection='latin1_bin';
|
||||
-- source include/ctype_filesort.inc
|
||||
|
||||
#
|
||||
# Bug#8041
|
||||
# An unknown character (e.g. 0x84) should result in ERROR,
|
||||
# It was treated like a space character earlier.
|
||||
# Howerver, it should still work fine as a string part.
|
||||
--error 1064
|
||||
CREATE TABLE „a (a int);
|
||||
SELECT '„a' as str;
|
||||
|
@ -693,3 +693,8 @@ INSERT INTO t1 VALUES ('one'),('two');
|
||||
SELECT CHARSET('a');
|
||||
SELECT user, CONCAT('<', user, '>') AS c FROM t1;
|
||||
DROP TABLE t1;
|
||||
|
||||
#
|
||||
# Bug#8385: utf8_general_ci treats Cyrillic letters I and SHORT I as the same
|
||||
#
|
||||
select convert(_koi8r'É' using utf8) < convert(_koi8r'Ê' using utf8);
|
||||
|
@ -236,3 +236,15 @@ INSERT INTO t1 VALUES ('root','localhost'), ('root','%');
|
||||
--error 1242
|
||||
SELECT * FROM (SELECT (SELECT a.a FROM t1 AS a WHERE a.a = b.a) FROM t1 AS b) AS c;
|
||||
DROP TABLE t1;
|
||||
#
|
||||
# test of union subquery in the FROM clause with complex distinct/all (BUG#6565)
|
||||
#
|
||||
create table t1(a int);
|
||||
create table t2(a int);
|
||||
create table t3(a int);
|
||||
insert into t1 values(1),(1);
|
||||
insert into t2 values(2),(2);
|
||||
insert into t3 values(3),(3);
|
||||
select * from t1 union distinct select * from t2 union all select * from t3;
|
||||
select * from (select * from t1 union distinct select * from t2 union all select * from t3) X;
|
||||
drop table t1, t2, t3;
|
||||
|
@ -1,3 +1,10 @@
|
||||
# We run with different binaries for normal and --embedded-server
|
||||
#
|
||||
# If this test fails with "command "$MYSQL_CLIENT_TEST" failed",
|
||||
# you should either run mysql_client_test separartely against a running
|
||||
# server or run mysql-test-run --debug mysql_client_test and check
|
||||
# var/log/mysql_client_test.trace
|
||||
|
||||
--disable_result_log
|
||||
--exec echo $MYSQL_CLIENT_TEST
|
||||
--exec $MYSQL_CLIENT_TEST
|
||||
|
@ -11,7 +11,9 @@
|
||||
--disable_warnings
|
||||
drop table if exists t5, t6, t7, t8;
|
||||
drop database if exists mysqltest ;
|
||||
|
||||
# Cleanup from other tests
|
||||
drop database if exists client_test_db;
|
||||
drop database if exists testtets;
|
||||
drop table if exists t1Aa,t2Aa,v1Aa,v2Aa;
|
||||
drop view if exists t1Aa,t2Aa,v1Aa,v2Aa;
|
||||
|
@ -828,8 +828,8 @@ DROP TABLE t1;
|
||||
# Test INSERT with DOUBLE
|
||||
|
||||
CREATE TABLE t1 (col1 DOUBLE PRECISION, col2 DOUBLE PRECISION UNSIGNED);
|
||||
INSERT INTO t1 VALUES (-2.2E-307,0),(+1.7E+308,+1.7E+308);
|
||||
INSERT INTO t1 VALUES ('-2.2E-307',0),('+1.7E+308','+1.7E+308');
|
||||
INSERT INTO t1 VALUES (-2.2E-307,0),(2E-307,0),(+1.7E+308,+1.7E+308);
|
||||
INSERT INTO t1 VALUES ('-2.2E-307',0),('-2E-307',0),('+1.7E+308','+1.7E+308');
|
||||
# We don't give warnings for underflow
|
||||
INSERT INTO t1 (col1) VALUES (-2.2E-330);
|
||||
--error 1367,1264
|
||||
|
@ -12,6 +12,8 @@ SELECT 10,10.0,10.,.1e+2,100.0e-1;
|
||||
SELECT 6e-05, -6e-05, --6e-05, -6e-05+1.000000;
|
||||
SELECT 1e1,1.e1,1.0e1,1e+1,1.e+1,1.0e+1,1e-1,1.e-1,1.0e-1;
|
||||
SELECT 0.001e+1,0.001e-1, -0.001e+01,-0.001e-01;
|
||||
SELECT 123.23E+02,-123.23E-02,"123.23E+02"+0.0,"-123.23E-02"+0.0;
|
||||
SELECT 2147483647E+02,21474836.47E+06;
|
||||
|
||||
create table t1 (f1 float(24),f2 float(52));
|
||||
show full columns from t1;
|
||||
@ -122,3 +124,23 @@ create table t1 (c char(6));
|
||||
insert into t1 values (2e5),(2e6),(2e-4),(2e-5);
|
||||
select * from t1;
|
||||
drop table t1;
|
||||
|
||||
#
|
||||
# Test of comparison of integer with float-in-range (Bug #7840)
|
||||
# This is needed because some ODBC applications (like Foxpro) uses
|
||||
# floats for everything.
|
||||
#
|
||||
|
||||
CREATE TABLE t1 (
|
||||
reckey int unsigned NOT NULL,
|
||||
recdesc varchar(50) NOT NULL,
|
||||
PRIMARY KEY (reckey)
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
|
||||
|
||||
INSERT INTO t1 VALUES (108, 'Has 108 as key');
|
||||
INSERT INTO t1 VALUES (109, 'Has 109 as key');
|
||||
select * from t1 where reckey=108;
|
||||
select * from t1 where reckey=1.08E2;
|
||||
select * from t1 where reckey=109;
|
||||
select * from t1 where reckey=1.09E2;
|
||||
drop table t1;
|
||||
|
@ -85,7 +85,6 @@ select @a=_latin2'TEST' collate latin2_bin;
|
||||
set @a=_latin2'test' collate latin2_general_ci;
|
||||
select charset(@a),collation(@a),coercibility(@a);
|
||||
select @a=_latin2'TEST';
|
||||
--error 1267
|
||||
select @a=_latin2'TEST' collate latin2_bin;
|
||||
|
||||
#
|
||||
@ -98,7 +97,6 @@ select collation(@a:=_latin2'test' collate latin2_bin);
|
||||
select coercibility(@a:=_latin2'test' collate latin2_bin);
|
||||
select (@a:=_latin2'test' collate latin2_bin) = _latin2'TEST';
|
||||
select charset(@a),collation(@a),coercibility(@a);
|
||||
--error 1267
|
||||
select (@a:=_latin2'test' collate latin2_bin) = _latin2'TEST' collate latin2_general_ci;
|
||||
|
||||
# Check that user variables are binlogged correctly (BUG#3875)
|
||||
|
@ -64,7 +64,7 @@ static my_bool init_state_maps(CHARSET_INFO *cs)
|
||||
else if (my_mbcharlen(cs, i)>1)
|
||||
state_map[i]=(uchar) MY_LEX_IDENT;
|
||||
#endif
|
||||
else if (!my_isgraph(cs,i))
|
||||
else if (my_isspace(cs,i))
|
||||
state_map[i]=(uchar) MY_LEX_SKIP;
|
||||
else
|
||||
state_map[i]=(uchar) MY_LEX_CHAR;
|
||||
|
11
sql/field.cc
11
sql/field.cc
@ -2432,12 +2432,23 @@ void Field_medium::sql_type(String &res) const
|
||||
** long int
|
||||
****************************************************************************/
|
||||
|
||||
/*
|
||||
A helper function to check whether the next character
|
||||
in the string "s" is MINUS SIGN.
|
||||
*/
|
||||
#ifdef HAVE_CHARSET_ucs2
|
||||
static bool test_if_minus(CHARSET_INFO *cs,
|
||||
const char *s, const char *e)
|
||||
{
|
||||
my_wc_t wc;
|
||||
return cs->cset->mb_wc(cs, &wc, (uchar*) s, (uchar*) e) > 0 && wc == '-';
|
||||
}
|
||||
#else
|
||||
/*
|
||||
If not UCS2 support is compiled then it is easier
|
||||
*/
|
||||
#define test_if_minus(cs, s, e) (*s == '-')
|
||||
#endif
|
||||
|
||||
|
||||
int Field_long::store(const char *from,uint len,CHARSET_INFO *cs)
|
||||
|
@ -3169,7 +3169,7 @@ static user_var_entry *get_variable(HASH *hash, LEX_STRING &name,
|
||||
entry->value=0;
|
||||
entry->length=0;
|
||||
entry->update_query_id=0;
|
||||
entry->collation.set(NULL, DERIVATION_NONE);
|
||||
entry->collation.set(NULL, DERIVATION_IMPLICIT);
|
||||
/*
|
||||
If we are here, we were called from a SET or a query which sets a
|
||||
variable. Imagine it is this:
|
||||
@ -3227,8 +3227,8 @@ bool Item_func_set_user_var::fix_fields(THD *thd, TABLE_LIST *tables,
|
||||
and the variable has previously been initialized.
|
||||
*/
|
||||
if (!entry->collation.collation || !args[0]->null_value)
|
||||
entry->collation.set(args[0]->collation);
|
||||
collation.set(entry->collation);
|
||||
entry->collation.set(args[0]->collation.collation, DERIVATION_IMPLICIT);
|
||||
collation.set(entry->collation.collation, DERIVATION_IMPLICIT);
|
||||
cached_result_type= args[0]->result_type();
|
||||
return FALSE;
|
||||
}
|
||||
@ -3240,7 +3240,7 @@ Item_func_set_user_var::fix_length_and_dec()
|
||||
maybe_null=args[0]->maybe_null;
|
||||
max_length=args[0]->max_length;
|
||||
decimals=args[0]->decimals;
|
||||
collation.set(args[0]->collation);
|
||||
collation.set(args[0]->collation.collation, DERIVATION_IMPLICIT);
|
||||
}
|
||||
|
||||
|
||||
@ -3516,7 +3516,7 @@ Item_func_set_user_var::update()
|
||||
res= update_hash((void*) save_result.vstr->ptr(),
|
||||
save_result.vstr->length(), STRING_RESULT,
|
||||
save_result.vstr->charset(),
|
||||
args[0]->collation.derivation);
|
||||
DERIVATION_IMPLICIT);
|
||||
break;
|
||||
}
|
||||
case DECIMAL_RESULT:
|
||||
|
@ -691,16 +691,24 @@ public:
|
||||
{
|
||||
int err_not_used;
|
||||
char *end_not_used;
|
||||
String *res; res=val_str(&str_value);
|
||||
String *res;
|
||||
res=val_str(&str_value);
|
||||
return res ? my_strntod(res->charset(),(char*) res->ptr(),res->length(),
|
||||
&end_not_used, &err_not_used) : 0.0;
|
||||
}
|
||||
longlong val_int()
|
||||
{
|
||||
int err_not_used;
|
||||
String *res; res=val_str(&str_value);
|
||||
return res ? my_strntoll(res->charset(),res->ptr(),res->length(),10,
|
||||
(char**) 0, &err_not_used) : (longlong) 0;
|
||||
char *end;
|
||||
String *res;
|
||||
longlong value;
|
||||
CHARSET_INFO *cs;
|
||||
|
||||
if (!(res= val_str(&str_value)))
|
||||
return 0; /* Null value */
|
||||
cs= res->charset();
|
||||
end= (char*) res->ptr()+res->length();
|
||||
return cs->cset->my_strtoll10(cs, res->ptr(), &end, &err_not_used);
|
||||
}
|
||||
my_decimal *val_decimal(my_decimal *dec);
|
||||
enum Item_result result_type () const { return STRING_RESULT; }
|
||||
|
@ -110,7 +110,7 @@ public:
|
||||
{
|
||||
int err_not_used;
|
||||
char *end_not_used;
|
||||
CHARSET_INFO *cs=str_value.charset();
|
||||
CHARSET_INFO *cs= str_value.charset();
|
||||
return my_strntod(cs, (char*) str_value.ptr(), str_value.length(),
|
||||
&end_not_used, &err_not_used);
|
||||
}
|
||||
|
@ -124,10 +124,16 @@ int mysql_derived_prepare(THD *thd, LEX *lex, TABLE_LIST *orig_table_list)
|
||||
/*
|
||||
Temp table is created so that it hounours if UNION without ALL is to be
|
||||
processed
|
||||
|
||||
As 'distinct' parameter we always pass FALSE (0), because underlying
|
||||
query will control distinct condition by itself. Correct test of
|
||||
distinct underlying query will be is_union &&
|
||||
!unit->union_distinct->next_select() (i.e. it is union and last distinct
|
||||
SELECT is last SELECT of UNION).
|
||||
*/
|
||||
if (!(table= create_tmp_table(thd, &derived_result->tmp_table_param,
|
||||
unit->types, (ORDER*) 0,
|
||||
is_union && unit->union_distinct, 1,
|
||||
FALSE, 1,
|
||||
(first_select->options | thd->options |
|
||||
TMP_TABLE_ALL_COLUMNS),
|
||||
HA_POS_ERROR,
|
||||
|
@ -707,7 +707,12 @@ bool mysql_multi_update_prepare(THD *thd)
|
||||
else
|
||||
{
|
||||
DBUG_PRINT("info",("setting table `%s` for read-only", tl->alias));
|
||||
tl->lock_type= TL_READ;
|
||||
/*
|
||||
If we are using the binary log, we need TL_READ_NO_INSERT to get
|
||||
correct order of statements. Otherwise, we use a TL_READ lock to
|
||||
improve performance.
|
||||
*/
|
||||
tl->lock_type= using_update_log ? TL_READ_NO_INSERT : TL_READ;
|
||||
tl->updating= 0;
|
||||
}
|
||||
|
||||
|
@ -2451,7 +2451,7 @@ create_select:
|
||||
SELECT_SYM
|
||||
{
|
||||
LEX *lex=Lex;
|
||||
lex->lock_option= (using_update_log) ? TL_READ_NO_INSERT : TL_READ;
|
||||
lex->lock_option= using_update_log ? TL_READ_NO_INSERT : TL_READ;
|
||||
if (lex->sql_command == SQLCOM_INSERT)
|
||||
lex->sql_command= SQLCOM_INSERT_SELECT;
|
||||
else if (lex->sql_command == SQLCOM_REPLACE)
|
||||
|
@ -578,7 +578,7 @@ static MY_UNICASE_INFO plane04[]={
|
||||
{0x0412,0x0432,0x0412}, {0x0413,0x0433,0x0413},
|
||||
{0x0414,0x0434,0x0414}, {0x0415,0x0435,0x0415},
|
||||
{0x0416,0x0436,0x0416}, {0x0417,0x0437,0x0417},
|
||||
{0x0418,0x0438,0x0418}, {0x0419,0x0439,0x0418},
|
||||
{0x0418,0x0438,0x0418}, {0x0419,0x0439,0x0419},
|
||||
{0x041A,0x043A,0x041A}, {0x041B,0x043B,0x041B},
|
||||
{0x041C,0x043C,0x041C}, {0x041D,0x043D,0x041D},
|
||||
{0x041E,0x043E,0x041E}, {0x041F,0x043F,0x041F},
|
||||
@ -594,7 +594,7 @@ static MY_UNICASE_INFO plane04[]={
|
||||
{0x0412,0x0432,0x0412}, {0x0413,0x0433,0x0413},
|
||||
{0x0414,0x0434,0x0414}, {0x0415,0x0435,0x0415},
|
||||
{0x0416,0x0436,0x0416}, {0x0417,0x0437,0x0417},
|
||||
{0x0418,0x0438,0x0418}, {0x0419,0x0439,0x0418},
|
||||
{0x0418,0x0438,0x0418}, {0x0419,0x0439,0x0419},
|
||||
{0x041A,0x043A,0x041A}, {0x041B,0x043B,0x041B},
|
||||
{0x041C,0x043C,0x041C}, {0x041D,0x043D,0x041D},
|
||||
{0x041E,0x043E,0x041E}, {0x041F,0x043F,0x041F},
|
||||
|
@ -56,8 +56,8 @@ static double scaler1[] = {
|
||||
double my_strtod(const char *str, char **end_ptr, int *error)
|
||||
{
|
||||
double result= 0.0;
|
||||
uint negative= 0, ndigits, dec_digits= 0, pre_zero, neg_exp= 0;
|
||||
int exp= 0;
|
||||
uint negative= 0, ndigits, dec_digits= 0, neg_exp= 0;
|
||||
int exp= 0, digits_after_dec_point= 0;
|
||||
const char *old_str, *end= *end_ptr, *start_of_number;
|
||||
char next_char;
|
||||
my_bool overflow=0;
|
||||
@ -100,18 +100,20 @@ double my_strtod(const char *str, char **end_ptr, int *error)
|
||||
}
|
||||
ndigits= (uint) (str-old_str);
|
||||
|
||||
pre_zero= 0;
|
||||
if (next_char == '.' && str < end-1)
|
||||
{
|
||||
double p10= 10;
|
||||
/*
|
||||
Continue to add numbers after decimal point to the result, as if there
|
||||
was no decimal point. We will later (in the exponent handling) shift
|
||||
the number down with the required number of fractions. We do it this
|
||||
way to be able to get maximum precision for numbers like 123.45E+02,
|
||||
which are normal for some ODBC applications.
|
||||
*/
|
||||
old_str= ++str;
|
||||
while (my_isdigit(&my_charset_latin1, (next_char= *str)))
|
||||
{
|
||||
result+= (next_char - '0')/p10;
|
||||
if (!result)
|
||||
pre_zero++;
|
||||
else
|
||||
p10*= 10;
|
||||
result= result*10.0 + (next_char - '0');
|
||||
digits_after_dec_point++;
|
||||
if (++str == end)
|
||||
{
|
||||
next_char= 0;
|
||||
@ -136,13 +138,14 @@ double my_strtod(const char *str, char **end_ptr, int *error)
|
||||
{
|
||||
do
|
||||
{
|
||||
if (exp < 9999) /* protec against exp overfl. */
|
||||
exp= exp*10 + *str - '0';
|
||||
if (exp < 9999) /* prot. against exp overfl. */
|
||||
exp= exp*10 + (*str - '0');
|
||||
str++;
|
||||
} while (str < end && my_isdigit(&my_charset_latin1, *str));
|
||||
}
|
||||
}
|
||||
if ((exp= neg_exp ? exp + pre_zero : exp - pre_zero))
|
||||
if ((exp= (neg_exp ? exp + digits_after_dec_point :
|
||||
exp - digits_after_dec_point)))
|
||||
{
|
||||
double scaler;
|
||||
if (exp < 0)
|
||||
|
Loading…
x
Reference in New Issue
Block a user