mirror of
https://github.com/MariaDB/server.git
synced 2025-01-16 03:52:35 +01:00
Merge bk-internal:/home/bk/mysql-5.1-new-rpl
into neptunus.(none):/home/msvensson/mysql/mysql-5.1-new-maint client/mysql.cc: Auto merged include/m_ctype.h: Auto merged mysql-test/r/ctype_utf8.result: Auto merged mysql-test/r/ps.result: Auto merged mysql-test/r/strict.result: Auto merged mysql-test/r/view.result: Auto merged mysql-test/r/warnings.result: Auto merged mysql-test/t/ctype_utf8.test: Auto merged sql/field.cc: Auto merged sql/item_func.cc: Auto merged sql/sql_yacc.yy: Auto merged
This commit is contained in:
commit
c9970c5b41
55 changed files with 1490 additions and 400 deletions
|
@ -2497,9 +2497,14 @@ print_table_data_xml(MYSQL_RES *result)
|
|||
{
|
||||
tee_fprintf(PAGER, "\t<field name=\"");
|
||||
xmlencode_print(fields[i].name, (uint) strlen(fields[i].name));
|
||||
tee_fprintf(PAGER, "\">");
|
||||
xmlencode_print(cur[i], lengths[i]);
|
||||
tee_fprintf(PAGER, "</field>\n");
|
||||
if (cur[i])
|
||||
{
|
||||
tee_fprintf(PAGER, "\">");
|
||||
xmlencode_print(cur[i], lengths[i]);
|
||||
tee_fprintf(PAGER, "</field>\n");
|
||||
}
|
||||
else
|
||||
tee_fprintf(PAGER, "\" xsi:nil=\"true\" />\n");
|
||||
}
|
||||
(void) tee_fputs(" </row>\n", PAGER);
|
||||
}
|
||||
|
|
|
@ -217,6 +217,9 @@ typedef struct my_charset_handler_st
|
|||
int *err);
|
||||
longlong (*strtoll10)(struct charset_info_st *cs,
|
||||
const char *nptr, char **endptr, int *error);
|
||||
ulonglong (*strntoull10rnd)(struct charset_info_st *cs,
|
||||
const char *str, uint length, int unsigned_fl,
|
||||
char **endptr, int *error);
|
||||
ulong (*scan)(struct charset_info_st *, const char *b, const char *e,
|
||||
int sq);
|
||||
} MY_CHARSET_HANDLER;
|
||||
|
@ -358,6 +361,13 @@ longlong my_strtoll10_8bit(CHARSET_INFO *cs,
|
|||
longlong my_strtoll10_ucs2(CHARSET_INFO *cs,
|
||||
const char *nptr, char **endptr, int *error);
|
||||
|
||||
ulonglong my_strntoull10rnd_8bit(CHARSET_INFO *cs,
|
||||
const char *str, uint length, int unsigned_fl,
|
||||
char **endptr, int *error);
|
||||
ulonglong my_strntoull10rnd_ucs2(CHARSET_INFO *cs,
|
||||
const char *str, uint length, int unsigned_fl,
|
||||
char **endptr, int *error);
|
||||
|
||||
void my_fill_8bit(CHARSET_INFO *cs, char* to, uint l, int fill);
|
||||
|
||||
my_bool my_like_range_simple(CHARSET_INFO *cs,
|
||||
|
|
|
@ -4,25 +4,39 @@ create table t1 (a int not null auto_increment, primary key (a)) engine=myisam;
|
|||
set @@session.auto_increment_increment=1, @@session.auto_increment_offset=1;
|
||||
# Verify that only one INSERT_ID event is binlogged.
|
||||
# Note, that because of WL#3368 mixed mode binlog records RBR events for the delayed
|
||||
let $table=t1;
|
||||
let $rows_inserted=11; # total number of inserted rows in this test
|
||||
insert delayed into t1 values (207);
|
||||
let $count=1;
|
||||
|
||||
# We use sleeps between statements, that's the only way to get a
|
||||
# repeatable binlog in a normal test run and under Valgrind. The
|
||||
# reason is that without sleeps, rows of different INSERT DELAYEDs
|
||||
# sometimes group together and sometimes not, so the table may be
|
||||
# unlocked/relocked causing a different number of table map log
|
||||
# events.
|
||||
sleep 2;
|
||||
# use this macro instead of sleeps.
|
||||
|
||||
--source include/wait_until_rows_count.inc
|
||||
insert delayed into t1 values (null);
|
||||
sleep 2;
|
||||
inc $count;
|
||||
--source include/wait_until_rows_count.inc
|
||||
|
||||
insert delayed into t1 values (300);
|
||||
sleep 2; # time for the delayed queries to reach disk
|
||||
insert delayed into t1 values (null),(null),(null),(null);
|
||||
sleep 2;
|
||||
insert delayed into t1 values (null),(null),(400),(null);
|
||||
sleep 2;
|
||||
select * from t1;
|
||||
inc $count;
|
||||
--source include/wait_until_rows_count.inc
|
||||
|
||||
# moving binlog check affront of multi-rows queries which work is indeterministic (extra table_maps)
|
||||
# todo: better check is to substitute SHOW BINLOG with reading from binlog, probably bug#19459 is in
|
||||
# the way
|
||||
--replace_column 2 # 5 #
|
||||
--replace_regex /table_id: [0-9]+/table_id: #/
|
||||
show binlog events from 102;
|
||||
|
||||
insert delayed into t1 values (null),(null),(null),(null);
|
||||
inc $count; inc $count; inc $count; inc $count;
|
||||
--source include/wait_until_rows_count.inc
|
||||
|
||||
insert delayed into t1 values (null),(null),(400),(null);
|
||||
inc $count; inc $count; inc $count; inc $count;
|
||||
--source include/wait_until_rows_count.inc
|
||||
|
||||
#check this assertion about $count calculation
|
||||
--echo $count == $rows_inserted
|
||||
|
||||
select * from t1;
|
||||
drop table t1;
|
||||
|
|
52
mysql-test/include/wait_until_rows_count.inc
Normal file
52
mysql-test/include/wait_until_rows_count.inc
Normal file
|
@ -0,0 +1,52 @@
|
|||
# include/wait_until_rows_count.inc
|
||||
# inspired by wait_for_slave_status by Matthias Leich
|
||||
#
|
||||
# SUMMARY
|
||||
#
|
||||
# Waits until SELECT count(*)-$count from $table returns zero
|
||||
#
|
||||
# USAGE
|
||||
#
|
||||
# Set vars like
|
||||
# let $count=11;
|
||||
# let $table=t1;
|
||||
# # invoke the macro
|
||||
# --include wait_until_rows_count.inc
|
||||
#
|
||||
# EXAMPLE
|
||||
# extra/binlog/binlog_insert_delayed.test
|
||||
#
|
||||
#
|
||||
# TODO: generalize up to wait_[until|while] with arbitrary select or even query and
|
||||
# a condition to wait or get awakened
|
||||
# It's impossible to implement such a "most" general macro without
|
||||
# extending mysqltest. Just no way to pass a query as an argument and
|
||||
# evaluate it here, like eval "$quuery". One is bound
|
||||
# to specify it inside of the macro
|
||||
|
||||
--disable_query_log
|
||||
|
||||
let $wait_counter= 300; # max wait in 0.1 seconds
|
||||
while ($wait_counter)
|
||||
{
|
||||
eval select count(*)-$count from $table into @rez;
|
||||
let $rez=`select @rez`;
|
||||
let $success=`SELECT @rez = 0`;
|
||||
let $no_success=1;
|
||||
if ($success)
|
||||
{
|
||||
let $wait_counter= 1; # droppping counter to leave loop
|
||||
let $no_success=0;
|
||||
}
|
||||
if ($no_success)
|
||||
{
|
||||
--sleep 0.1
|
||||
}
|
||||
dec $wait_counter;
|
||||
}
|
||||
|
||||
--enable_query_log
|
||||
if ($no_success)
|
||||
{
|
||||
--die Timeout in wait_until_rows_count.inc, required table never had a prescribed number of rows.
|
||||
}
|
|
@ -250,21 +250,6 @@ set @@session.auto_increment_increment=1, @@session.auto_increment_offset=1;
|
|||
insert delayed into t1 values (207);
|
||||
insert delayed into t1 values (null);
|
||||
insert delayed into t1 values (300);
|
||||
insert delayed into t1 values (null),(null),(null),(null);
|
||||
insert delayed into t1 values (null),(null),(400),(null);
|
||||
select * from t1;
|
||||
a
|
||||
207
|
||||
208
|
||||
300
|
||||
301
|
||||
302
|
||||
303
|
||||
304
|
||||
305
|
||||
306
|
||||
400
|
||||
401
|
||||
show binlog events from 102;
|
||||
Log_name Pos Event_type Server_id End_log_pos Info
|
||||
master-bin.000001 # Query 1 # use `test`; create table t1 (id tinyint auto_increment primary key)
|
||||
|
@ -278,12 +263,20 @@ master-bin.000001 # Table_map 1 # table_id: # (test.t1)
|
|||
master-bin.000001 # Write_rows 1 # table_id: # flags: STMT_END_F
|
||||
master-bin.000001 # Table_map 1 # table_id: # (test.t1)
|
||||
master-bin.000001 # Write_rows 1 # table_id: # flags: STMT_END_F
|
||||
master-bin.000001 # Table_map 1 # table_id: # (test.t1)
|
||||
master-bin.000001 # Write_rows 1 # table_id: # flags: STMT_END_F
|
||||
master-bin.000001 # Table_map 1 # table_id: # (test.t1)
|
||||
master-bin.000001 # Write_rows 1 # table_id: # flags: STMT_END_F
|
||||
master-bin.000001 # Table_map 1 # table_id: # (test.t1)
|
||||
master-bin.000001 # Write_rows 1 # table_id: # flags: STMT_END_F
|
||||
master-bin.000001 # Table_map 1 # table_id: # (test.t1)
|
||||
master-bin.000001 # Write_rows 1 # table_id: # flags: STMT_END_F
|
||||
insert delayed into t1 values (null),(null),(null),(null);
|
||||
insert delayed into t1 values (null),(null),(400),(null);
|
||||
11 == 11
|
||||
select * from t1;
|
||||
a
|
||||
207
|
||||
208
|
||||
300
|
||||
301
|
||||
302
|
||||
303
|
||||
304
|
||||
305
|
||||
306
|
||||
400
|
||||
401
|
||||
drop table t1;
|
||||
|
|
|
@ -3,8 +3,16 @@ set @@session.auto_increment_increment=1, @@session.auto_increment_offset=1;
|
|||
insert delayed into t1 values (207);
|
||||
insert delayed into t1 values (null);
|
||||
insert delayed into t1 values (300);
|
||||
show binlog events from 102;
|
||||
Log_name Pos Event_type Server_id End_log_pos Info
|
||||
master-bin.000001 # Query 1 # use `test`; create table t1 (a int not null auto_increment, primary key (a)) engine=myisam
|
||||
master-bin.000001 # Query 1 # use `test`; insert delayed into t1 values (207)
|
||||
master-bin.000001 # Intvar 1 # INSERT_ID=208
|
||||
master-bin.000001 # Query 1 # use `test`; insert delayed into t1 values (null)
|
||||
master-bin.000001 # Query 1 # use `test`; insert delayed into t1 values (300)
|
||||
insert delayed into t1 values (null),(null),(null),(null);
|
||||
insert delayed into t1 values (null),(null),(400),(null);
|
||||
11 == 11
|
||||
select * from t1;
|
||||
a
|
||||
207
|
||||
|
@ -18,15 +26,4 @@ a
|
|||
306
|
||||
400
|
||||
401
|
||||
show binlog events from 102;
|
||||
Log_name Pos Event_type Server_id End_log_pos Info
|
||||
master-bin.000001 # Query 1 # use `test`; create table t1 (a int not null auto_increment, primary key (a)) engine=myisam
|
||||
master-bin.000001 # Query 1 # use `test`; insert delayed into t1 values (207)
|
||||
master-bin.000001 # Intvar 1 # INSERT_ID=208
|
||||
master-bin.000001 # Query 1 # use `test`; insert delayed into t1 values (null)
|
||||
master-bin.000001 # Query 1 # use `test`; insert delayed into t1 values (300)
|
||||
master-bin.000001 # Intvar 1 # INSERT_ID=301
|
||||
master-bin.000001 # Query 1 # use `test`; insert delayed into t1 values (null),(null),(null),(null)
|
||||
master-bin.000001 # Intvar 1 # INSERT_ID=305
|
||||
master-bin.000001 # Query 1 # use `test`; insert delayed into t1 values (null),(null),(400),(null)
|
||||
drop table t1;
|
||||
|
|
|
@ -160,21 +160,6 @@ set @@session.auto_increment_increment=1, @@session.auto_increment_offset=1;
|
|||
insert delayed into t1 values (207);
|
||||
insert delayed into t1 values (null);
|
||||
insert delayed into t1 values (300);
|
||||
insert delayed into t1 values (null),(null),(null),(null);
|
||||
insert delayed into t1 values (null),(null),(400),(null);
|
||||
select * from t1;
|
||||
a
|
||||
207
|
||||
208
|
||||
300
|
||||
301
|
||||
302
|
||||
303
|
||||
304
|
||||
305
|
||||
306
|
||||
400
|
||||
401
|
||||
show binlog events from 102;
|
||||
Log_name Pos Event_type Server_id End_log_pos Info
|
||||
master-bin.000001 # Query 1 # use `test`; create table t1 (id tinyint auto_increment primary key)
|
||||
|
@ -188,12 +173,20 @@ master-bin.000001 # Table_map 1 # table_id: # (test.t1)
|
|||
master-bin.000001 # Write_rows 1 # table_id: # flags: STMT_END_F
|
||||
master-bin.000001 # Table_map 1 # table_id: # (test.t1)
|
||||
master-bin.000001 # Write_rows 1 # table_id: # flags: STMT_END_F
|
||||
master-bin.000001 # Table_map 1 # table_id: # (test.t1)
|
||||
master-bin.000001 # Write_rows 1 # table_id: # flags: STMT_END_F
|
||||
master-bin.000001 # Table_map 1 # table_id: # (test.t1)
|
||||
master-bin.000001 # Write_rows 1 # table_id: # flags: STMT_END_F
|
||||
master-bin.000001 # Table_map 1 # table_id: # (test.t1)
|
||||
master-bin.000001 # Write_rows 1 # table_id: # flags: STMT_END_F
|
||||
master-bin.000001 # Table_map 1 # table_id: # (test.t1)
|
||||
master-bin.000001 # Write_rows 1 # table_id: # flags: STMT_END_F
|
||||
insert delayed into t1 values (null),(null),(null),(null);
|
||||
insert delayed into t1 values (null),(null),(400),(null);
|
||||
11 == 11
|
||||
select * from t1;
|
||||
a
|
||||
207
|
||||
208
|
||||
300
|
||||
301
|
||||
302
|
||||
303
|
||||
304
|
||||
305
|
||||
306
|
||||
400
|
||||
401
|
||||
drop table t1;
|
||||
|
|
|
@ -68,7 +68,7 @@ insert into t1 values (1, 2, 'a&b a<b a>b');
|
|||
<resultset statement="select null from dual
|
||||
">
|
||||
<row>
|
||||
<field name="NULL">NULL</field>
|
||||
<field name="NULL" xsi:nil="true" />
|
||||
</row>
|
||||
</resultset>
|
||||
drop table t1;
|
||||
|
|
|
@ -168,3 +168,13 @@ DROP TABLE t1;
|
|||
select hex(convert(_gbk 0xA14041 using ucs2));
|
||||
hex(convert(_gbk 0xA14041 using ucs2))
|
||||
003F0041
|
||||
create table t1 (c1 text not null, c2 text not null) character set gbk;
|
||||
alter table t1 change c1 c1 mediumtext character set gbk not null;
|
||||
show create table t1;
|
||||
Table Create Table
|
||||
t1 CREATE TABLE `t1` (
|
||||
`c1` mediumtext NOT NULL,
|
||||
`c2` text NOT NULL
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=gbk
|
||||
drop table t1;
|
||||
End of 5.0 tests
|
||||
|
|
|
@ -1461,3 +1461,21 @@ set @a:=null;
|
|||
execute my_stmt using @a;
|
||||
a b
|
||||
drop table if exists t1;
|
||||
CREATE TABLE t1 (
|
||||
colA int(11) NOT NULL,
|
||||
colB varchar(255) character set utf8 NOT NULL,
|
||||
PRIMARY KEY (colA)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
|
||||
INSERT INTO t1 (colA, colB) VALUES (1, 'foo'), (2, 'foo bar');
|
||||
CREATE TABLE t2 (
|
||||
colA int(11) NOT NULL,
|
||||
colB varchar(255) character set utf8 NOT NULL,
|
||||
KEY bad (colA,colB(3))
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
|
||||
INSERT INTO t2 (colA, colB) VALUES (1, 'foo'),(2, 'foo bar');
|
||||
SELECT * FROM t1 JOIN t2 ON t1.colA=t2.colA AND t1.colB=t2.colB
|
||||
WHERE t1.colA < 3;
|
||||
colA colB colA colB
|
||||
1 foo 1 foo
|
||||
2 foo bar 2 foo bar
|
||||
DROP TABLE t1, t2;
|
||||
|
|
|
@ -43,9 +43,9 @@ drop table t1;
|
|||
create table t1 (a int, b char(10));
|
||||
load data infile '../std_data_ln/loaddata3.dat' into table t1 fields terminated by '' enclosed by '' ignore 1 lines;
|
||||
Warnings:
|
||||
Warning 1264 Out of range value for column 'a' at row 3
|
||||
Warning 1366 Incorrect integer value: 'error ' for column 'a' at row 3
|
||||
Warning 1262 Row 3 was truncated; it contained more data than there were input columns
|
||||
Warning 1264 Out of range value for column 'a' at row 5
|
||||
Warning 1366 Incorrect integer value: 'wrong end ' for column 'a' at row 5
|
||||
Warning 1262 Row 5 was truncated; it contained more data than there were input columns
|
||||
select * from t1;
|
||||
a b
|
||||
|
@ -57,7 +57,8 @@ a b
|
|||
truncate table t1;
|
||||
load data infile '../std_data_ln/loaddata4.dat' into table t1 fields terminated by '' enclosed by '' lines terminated by '' ignore 1 lines;
|
||||
Warnings:
|
||||
Warning 1264 Out of range value for column 'a' at row 4
|
||||
Warning 1366 Incorrect integer value: '
|
||||
' for column 'a' at row 4
|
||||
Warning 1261 Row 4 doesn't contain data for all columns
|
||||
select * from t1;
|
||||
a b
|
||||
|
|
|
@ -112,8 +112,8 @@ slow_log CREATE TABLE `slow_log` (
|
|||
alter table mysql.general_log engine=myisam;
|
||||
alter table mysql.slow_log engine=myisam;
|
||||
Warnings:
|
||||
Warning 1264 Out of range value for column 'last_insert_id' at row 0
|
||||
Warning 1264 Out of range value for column 'insert_id' at row 0
|
||||
Warning 1366 Incorrect integer value: '' for column 'last_insert_id' at row 0
|
||||
Warning 1366 Incorrect integer value: '' for column 'insert_id' at row 0
|
||||
show create table mysql.general_log;
|
||||
Table Create Table
|
||||
general_log CREATE TABLE `general_log` (
|
||||
|
|
|
@ -2689,21 +2689,21 @@ set @arg00= '1.11111111111111111111e+50' ;
|
|||
execute my_insert using @arg00, @arg00, @arg00, @arg00, @arg00, @arg00,
|
||||
@arg00, @arg00, @arg00, @arg00, @arg00 ;
|
||||
Warnings:
|
||||
Warning 1265 Data truncated for column 'c1' at row 1
|
||||
Warning 1265 Data truncated for column 'c2' at row 1
|
||||
Warning 1265 Data truncated for column 'c3' at row 1
|
||||
Warning 1265 Data truncated for column 'c4' at row 1
|
||||
Warning 1265 Data truncated for column 'c5' at row 1
|
||||
Warning 1265 Data truncated for column 'c6' at row 1
|
||||
Warning 1264 Out of range value for column 'c1' at row 1
|
||||
Warning 1264 Out of range value for column 'c2' at row 1
|
||||
Warning 1264 Out of range value for column 'c3' at row 1
|
||||
Warning 1264 Out of range value for column 'c4' at row 1
|
||||
Warning 1264 Out of range value for column 'c5' at row 1
|
||||
Warning 1264 Out of range value for column 'c6' at row 1
|
||||
Warning 1264 Out of range value for column 'c7' at row 1
|
||||
Warning 1264 Out of range value for column 'c12' at row 1
|
||||
execute my_select ;
|
||||
c1 1
|
||||
c2 1
|
||||
c3 1
|
||||
c4 1
|
||||
c5 1
|
||||
c6 1
|
||||
c1 127
|
||||
c2 32767
|
||||
c3 8388607
|
||||
c4 2147483647
|
||||
c5 2147483647
|
||||
c6 9223372036854775807
|
||||
c7 3.40282e+38
|
||||
c8 1.11111111111111e+50
|
||||
c9 1.11111111111111e+50
|
||||
|
@ -2739,21 +2739,21 @@ set @arg00= '-1.11111111111111111111e+50' ;
|
|||
execute my_insert using @arg00, @arg00, @arg00, @arg00, @arg00, @arg00,
|
||||
@arg00, @arg00, @arg00, @arg00, @arg00 ;
|
||||
Warnings:
|
||||
Warning 1265 Data truncated for column 'c1' at row 1
|
||||
Warning 1265 Data truncated for column 'c2' at row 1
|
||||
Warning 1265 Data truncated for column 'c3' at row 1
|
||||
Warning 1265 Data truncated for column 'c4' at row 1
|
||||
Warning 1265 Data truncated for column 'c5' at row 1
|
||||
Warning 1265 Data truncated for column 'c6' at row 1
|
||||
Warning 1264 Out of range value for column 'c1' at row 1
|
||||
Warning 1264 Out of range value for column 'c2' at row 1
|
||||
Warning 1264 Out of range value for column 'c3' at row 1
|
||||
Warning 1264 Out of range value for column 'c4' at row 1
|
||||
Warning 1264 Out of range value for column 'c5' at row 1
|
||||
Warning 1264 Out of range value for column 'c6' at row 1
|
||||
Warning 1264 Out of range value for column 'c7' at row 1
|
||||
Warning 1264 Out of range value for column 'c12' at row 1
|
||||
execute my_select ;
|
||||
c1 -1
|
||||
c2 -1
|
||||
c3 -1
|
||||
c4 -1
|
||||
c5 -1
|
||||
c6 -1
|
||||
c1 -128
|
||||
c2 -32768
|
||||
c3 -8388608
|
||||
c4 -2147483648
|
||||
c5 -2147483648
|
||||
c6 -9223372036854775808
|
||||
c7 -3.40282e+38
|
||||
c8 -1.11111111111111e+50
|
||||
c9 -1.11111111111111e+50
|
||||
|
|
|
@ -2672,21 +2672,21 @@ set @arg00= '1.11111111111111111111e+50' ;
|
|||
execute my_insert using @arg00, @arg00, @arg00, @arg00, @arg00, @arg00,
|
||||
@arg00, @arg00, @arg00, @arg00, @arg00 ;
|
||||
Warnings:
|
||||
Warning 1265 Data truncated for column 'c1' at row 1
|
||||
Warning 1265 Data truncated for column 'c2' at row 1
|
||||
Warning 1265 Data truncated for column 'c3' at row 1
|
||||
Warning 1265 Data truncated for column 'c4' at row 1
|
||||
Warning 1265 Data truncated for column 'c5' at row 1
|
||||
Warning 1265 Data truncated for column 'c6' at row 1
|
||||
Warning 1264 Out of range value for column 'c1' at row 1
|
||||
Warning 1264 Out of range value for column 'c2' at row 1
|
||||
Warning 1264 Out of range value for column 'c3' at row 1
|
||||
Warning 1264 Out of range value for column 'c4' at row 1
|
||||
Warning 1264 Out of range value for column 'c5' at row 1
|
||||
Warning 1264 Out of range value for column 'c6' at row 1
|
||||
Warning 1264 Out of range value for column 'c7' at row 1
|
||||
Warning 1264 Out of range value for column 'c12' at row 1
|
||||
execute my_select ;
|
||||
c1 1
|
||||
c2 1
|
||||
c3 1
|
||||
c4 1
|
||||
c5 1
|
||||
c6 1
|
||||
c1 127
|
||||
c2 32767
|
||||
c3 8388607
|
||||
c4 2147483647
|
||||
c5 2147483647
|
||||
c6 9223372036854775807
|
||||
c7 3.40282e+38
|
||||
c8 1.11111111111111e+50
|
||||
c9 1.11111111111111e+50
|
||||
|
@ -2722,21 +2722,21 @@ set @arg00= '-1.11111111111111111111e+50' ;
|
|||
execute my_insert using @arg00, @arg00, @arg00, @arg00, @arg00, @arg00,
|
||||
@arg00, @arg00, @arg00, @arg00, @arg00 ;
|
||||
Warnings:
|
||||
Warning 1265 Data truncated for column 'c1' at row 1
|
||||
Warning 1265 Data truncated for column 'c2' at row 1
|
||||
Warning 1265 Data truncated for column 'c3' at row 1
|
||||
Warning 1265 Data truncated for column 'c4' at row 1
|
||||
Warning 1265 Data truncated for column 'c5' at row 1
|
||||
Warning 1265 Data truncated for column 'c6' at row 1
|
||||
Warning 1264 Out of range value for column 'c1' at row 1
|
||||
Warning 1264 Out of range value for column 'c2' at row 1
|
||||
Warning 1264 Out of range value for column 'c3' at row 1
|
||||
Warning 1264 Out of range value for column 'c4' at row 1
|
||||
Warning 1264 Out of range value for column 'c5' at row 1
|
||||
Warning 1264 Out of range value for column 'c6' at row 1
|
||||
Warning 1264 Out of range value for column 'c7' at row 1
|
||||
Warning 1264 Out of range value for column 'c12' at row 1
|
||||
execute my_select ;
|
||||
c1 -1
|
||||
c2 -1
|
||||
c3 -1
|
||||
c4 -1
|
||||
c5 -1
|
||||
c6 -1
|
||||
c1 -128
|
||||
c2 -32768
|
||||
c3 -8388608
|
||||
c4 -2147483648
|
||||
c5 -2147483648
|
||||
c6 -9223372036854775808
|
||||
c7 -3.40282e+38
|
||||
c8 -1.11111111111111e+50
|
||||
c9 -1.11111111111111e+50
|
||||
|
|
|
@ -2673,21 +2673,21 @@ set @arg00= '1.11111111111111111111e+50' ;
|
|||
execute my_insert using @arg00, @arg00, @arg00, @arg00, @arg00, @arg00,
|
||||
@arg00, @arg00, @arg00, @arg00, @arg00 ;
|
||||
Warnings:
|
||||
Warning 1265 Data truncated for column 'c1' at row 1
|
||||
Warning 1265 Data truncated for column 'c2' at row 1
|
||||
Warning 1265 Data truncated for column 'c3' at row 1
|
||||
Warning 1265 Data truncated for column 'c4' at row 1
|
||||
Warning 1265 Data truncated for column 'c5' at row 1
|
||||
Warning 1265 Data truncated for column 'c6' at row 1
|
||||
Warning 1264 Out of range value for column 'c1' at row 1
|
||||
Warning 1264 Out of range value for column 'c2' at row 1
|
||||
Warning 1264 Out of range value for column 'c3' at row 1
|
||||
Warning 1264 Out of range value for column 'c4' at row 1
|
||||
Warning 1264 Out of range value for column 'c5' at row 1
|
||||
Warning 1264 Out of range value for column 'c6' at row 1
|
||||
Warning 1264 Out of range value for column 'c7' at row 1
|
||||
Warning 1264 Out of range value for column 'c12' at row 1
|
||||
execute my_select ;
|
||||
c1 1
|
||||
c2 1
|
||||
c3 1
|
||||
c4 1
|
||||
c5 1
|
||||
c6 1
|
||||
c1 127
|
||||
c2 32767
|
||||
c3 8388607
|
||||
c4 2147483647
|
||||
c5 2147483647
|
||||
c6 9223372036854775807
|
||||
c7 3.40282e+38
|
||||
c8 1.11111111111111e+50
|
||||
c9 1.11111111111111e+50
|
||||
|
@ -2723,21 +2723,21 @@ set @arg00= '-1.11111111111111111111e+50' ;
|
|||
execute my_insert using @arg00, @arg00, @arg00, @arg00, @arg00, @arg00,
|
||||
@arg00, @arg00, @arg00, @arg00, @arg00 ;
|
||||
Warnings:
|
||||
Warning 1265 Data truncated for column 'c1' at row 1
|
||||
Warning 1265 Data truncated for column 'c2' at row 1
|
||||
Warning 1265 Data truncated for column 'c3' at row 1
|
||||
Warning 1265 Data truncated for column 'c4' at row 1
|
||||
Warning 1265 Data truncated for column 'c5' at row 1
|
||||
Warning 1265 Data truncated for column 'c6' at row 1
|
||||
Warning 1264 Out of range value for column 'c1' at row 1
|
||||
Warning 1264 Out of range value for column 'c2' at row 1
|
||||
Warning 1264 Out of range value for column 'c3' at row 1
|
||||
Warning 1264 Out of range value for column 'c4' at row 1
|
||||
Warning 1264 Out of range value for column 'c5' at row 1
|
||||
Warning 1264 Out of range value for column 'c6' at row 1
|
||||
Warning 1264 Out of range value for column 'c7' at row 1
|
||||
Warning 1264 Out of range value for column 'c12' at row 1
|
||||
execute my_select ;
|
||||
c1 -1
|
||||
c2 -1
|
||||
c3 -1
|
||||
c4 -1
|
||||
c5 -1
|
||||
c6 -1
|
||||
c1 -128
|
||||
c2 -32768
|
||||
c3 -8388608
|
||||
c4 -2147483648
|
||||
c5 -2147483648
|
||||
c6 -9223372036854775808
|
||||
c7 -3.40282e+38
|
||||
c8 -1.11111111111111e+50
|
||||
c9 -1.11111111111111e+50
|
||||
|
|
|
@ -2609,21 +2609,21 @@ set @arg00= '1.11111111111111111111e+50' ;
|
|||
execute my_insert using @arg00, @arg00, @arg00, @arg00, @arg00, @arg00,
|
||||
@arg00, @arg00, @arg00, @arg00, @arg00 ;
|
||||
Warnings:
|
||||
Warning 1265 Data truncated for column 'c1' at row 1
|
||||
Warning 1265 Data truncated for column 'c2' at row 1
|
||||
Warning 1265 Data truncated for column 'c3' at row 1
|
||||
Warning 1265 Data truncated for column 'c4' at row 1
|
||||
Warning 1265 Data truncated for column 'c5' at row 1
|
||||
Warning 1265 Data truncated for column 'c6' at row 1
|
||||
Warning 1264 Out of range value for column 'c1' at row 1
|
||||
Warning 1264 Out of range value for column 'c2' at row 1
|
||||
Warning 1264 Out of range value for column 'c3' at row 1
|
||||
Warning 1264 Out of range value for column 'c4' at row 1
|
||||
Warning 1264 Out of range value for column 'c5' at row 1
|
||||
Warning 1264 Out of range value for column 'c6' at row 1
|
||||
Warning 1264 Out of range value for column 'c7' at row 1
|
||||
Warning 1264 Out of range value for column 'c12' at row 1
|
||||
execute my_select ;
|
||||
c1 1
|
||||
c2 1
|
||||
c3 1
|
||||
c4 1
|
||||
c5 1
|
||||
c6 1
|
||||
c1 127
|
||||
c2 32767
|
||||
c3 8388607
|
||||
c4 2147483647
|
||||
c5 2147483647
|
||||
c6 9223372036854775807
|
||||
c7 3.40282e+38
|
||||
c8 1.11111111111111e+50
|
||||
c9 1.11111111111111e+50
|
||||
|
@ -2659,21 +2659,21 @@ set @arg00= '-1.11111111111111111111e+50' ;
|
|||
execute my_insert using @arg00, @arg00, @arg00, @arg00, @arg00, @arg00,
|
||||
@arg00, @arg00, @arg00, @arg00, @arg00 ;
|
||||
Warnings:
|
||||
Warning 1265 Data truncated for column 'c1' at row 1
|
||||
Warning 1265 Data truncated for column 'c2' at row 1
|
||||
Warning 1265 Data truncated for column 'c3' at row 1
|
||||
Warning 1265 Data truncated for column 'c4' at row 1
|
||||
Warning 1265 Data truncated for column 'c5' at row 1
|
||||
Warning 1265 Data truncated for column 'c6' at row 1
|
||||
Warning 1264 Out of range value for column 'c1' at row 1
|
||||
Warning 1264 Out of range value for column 'c2' at row 1
|
||||
Warning 1264 Out of range value for column 'c3' at row 1
|
||||
Warning 1264 Out of range value for column 'c4' at row 1
|
||||
Warning 1264 Out of range value for column 'c5' at row 1
|
||||
Warning 1264 Out of range value for column 'c6' at row 1
|
||||
Warning 1264 Out of range value for column 'c7' at row 1
|
||||
Warning 1264 Out of range value for column 'c12' at row 1
|
||||
execute my_select ;
|
||||
c1 -1
|
||||
c2 -1
|
||||
c3 -1
|
||||
c4 -1
|
||||
c5 -1
|
||||
c6 -1
|
||||
c1 -128
|
||||
c2 -32768
|
||||
c3 -8388608
|
||||
c4 -2147483648
|
||||
c5 -2147483648
|
||||
c6 -9223372036854775808
|
||||
c7 -3.40282e+38
|
||||
c8 -1.11111111111111e+50
|
||||
c9 -1.11111111111111e+50
|
||||
|
@ -5623,21 +5623,21 @@ set @arg00= '1.11111111111111111111e+50' ;
|
|||
execute my_insert using @arg00, @arg00, @arg00, @arg00, @arg00, @arg00,
|
||||
@arg00, @arg00, @arg00, @arg00, @arg00 ;
|
||||
Warnings:
|
||||
Warning 1265 Data truncated for column 'c1' at row 1
|
||||
Warning 1265 Data truncated for column 'c2' at row 1
|
||||
Warning 1265 Data truncated for column 'c3' at row 1
|
||||
Warning 1265 Data truncated for column 'c4' at row 1
|
||||
Warning 1265 Data truncated for column 'c5' at row 1
|
||||
Warning 1265 Data truncated for column 'c6' at row 1
|
||||
Warning 1264 Out of range value for column 'c1' at row 1
|
||||
Warning 1264 Out of range value for column 'c2' at row 1
|
||||
Warning 1264 Out of range value for column 'c3' at row 1
|
||||
Warning 1264 Out of range value for column 'c4' at row 1
|
||||
Warning 1264 Out of range value for column 'c5' at row 1
|
||||
Warning 1264 Out of range value for column 'c6' at row 1
|
||||
Warning 1264 Out of range value for column 'c7' at row 1
|
||||
Warning 1264 Out of range value for column 'c12' at row 1
|
||||
execute my_select ;
|
||||
c1 1
|
||||
c2 1
|
||||
c3 1
|
||||
c4 1
|
||||
c5 1
|
||||
c6 1
|
||||
c1 127
|
||||
c2 32767
|
||||
c3 8388607
|
||||
c4 2147483647
|
||||
c5 2147483647
|
||||
c6 9223372036854775807
|
||||
c7 3.40282e+38
|
||||
c8 1.11111111111111e+50
|
||||
c9 1.11111111111111e+50
|
||||
|
@ -5673,21 +5673,21 @@ set @arg00= '-1.11111111111111111111e+50' ;
|
|||
execute my_insert using @arg00, @arg00, @arg00, @arg00, @arg00, @arg00,
|
||||
@arg00, @arg00, @arg00, @arg00, @arg00 ;
|
||||
Warnings:
|
||||
Warning 1265 Data truncated for column 'c1' at row 1
|
||||
Warning 1265 Data truncated for column 'c2' at row 1
|
||||
Warning 1265 Data truncated for column 'c3' at row 1
|
||||
Warning 1265 Data truncated for column 'c4' at row 1
|
||||
Warning 1265 Data truncated for column 'c5' at row 1
|
||||
Warning 1265 Data truncated for column 'c6' at row 1
|
||||
Warning 1264 Out of range value for column 'c1' at row 1
|
||||
Warning 1264 Out of range value for column 'c2' at row 1
|
||||
Warning 1264 Out of range value for column 'c3' at row 1
|
||||
Warning 1264 Out of range value for column 'c4' at row 1
|
||||
Warning 1264 Out of range value for column 'c5' at row 1
|
||||
Warning 1264 Out of range value for column 'c6' at row 1
|
||||
Warning 1264 Out of range value for column 'c7' at row 1
|
||||
Warning 1264 Out of range value for column 'c12' at row 1
|
||||
execute my_select ;
|
||||
c1 -1
|
||||
c2 -1
|
||||
c3 -1
|
||||
c4 -1
|
||||
c5 -1
|
||||
c6 -1
|
||||
c1 -128
|
||||
c2 -32768
|
||||
c3 -8388608
|
||||
c4 -2147483648
|
||||
c5 -2147483648
|
||||
c6 -9223372036854775808
|
||||
c7 -3.40282e+38
|
||||
c8 -1.11111111111111e+50
|
||||
c9 -1.11111111111111e+50
|
||||
|
|
|
@ -2672,21 +2672,21 @@ set @arg00= '1.11111111111111111111e+50' ;
|
|||
execute my_insert using @arg00, @arg00, @arg00, @arg00, @arg00, @arg00,
|
||||
@arg00, @arg00, @arg00, @arg00, @arg00 ;
|
||||
Warnings:
|
||||
Warning 1265 Data truncated for column 'c1' at row 1
|
||||
Warning 1265 Data truncated for column 'c2' at row 1
|
||||
Warning 1265 Data truncated for column 'c3' at row 1
|
||||
Warning 1265 Data truncated for column 'c4' at row 1
|
||||
Warning 1265 Data truncated for column 'c5' at row 1
|
||||
Warning 1265 Data truncated for column 'c6' at row 1
|
||||
Warning 1264 Out of range value for column 'c1' at row 1
|
||||
Warning 1264 Out of range value for column 'c2' at row 1
|
||||
Warning 1264 Out of range value for column 'c3' at row 1
|
||||
Warning 1264 Out of range value for column 'c4' at row 1
|
||||
Warning 1264 Out of range value for column 'c5' at row 1
|
||||
Warning 1264 Out of range value for column 'c6' at row 1
|
||||
Warning 1264 Out of range value for column 'c7' at row 1
|
||||
Warning 1264 Out of range value for column 'c12' at row 1
|
||||
execute my_select ;
|
||||
c1 1
|
||||
c2 1
|
||||
c3 1
|
||||
c4 1
|
||||
c5 1
|
||||
c6 1
|
||||
c1 127
|
||||
c2 32767
|
||||
c3 8388607
|
||||
c4 2147483647
|
||||
c5 2147483647
|
||||
c6 9223372036854775807
|
||||
c7 3.40282e+38
|
||||
c8 1.11111111111111e+50
|
||||
c9 1.11111111111111e+50
|
||||
|
@ -2722,21 +2722,21 @@ set @arg00= '-1.11111111111111111111e+50' ;
|
|||
execute my_insert using @arg00, @arg00, @arg00, @arg00, @arg00, @arg00,
|
||||
@arg00, @arg00, @arg00, @arg00, @arg00 ;
|
||||
Warnings:
|
||||
Warning 1265 Data truncated for column 'c1' at row 1
|
||||
Warning 1265 Data truncated for column 'c2' at row 1
|
||||
Warning 1265 Data truncated for column 'c3' at row 1
|
||||
Warning 1265 Data truncated for column 'c4' at row 1
|
||||
Warning 1265 Data truncated for column 'c5' at row 1
|
||||
Warning 1265 Data truncated for column 'c6' at row 1
|
||||
Warning 1264 Out of range value for column 'c1' at row 1
|
||||
Warning 1264 Out of range value for column 'c2' at row 1
|
||||
Warning 1264 Out of range value for column 'c3' at row 1
|
||||
Warning 1264 Out of range value for column 'c4' at row 1
|
||||
Warning 1264 Out of range value for column 'c5' at row 1
|
||||
Warning 1264 Out of range value for column 'c6' at row 1
|
||||
Warning 1264 Out of range value for column 'c7' at row 1
|
||||
Warning 1264 Out of range value for column 'c12' at row 1
|
||||
execute my_select ;
|
||||
c1 -1
|
||||
c2 -1
|
||||
c3 -1
|
||||
c4 -1
|
||||
c5 -1
|
||||
c6 -1
|
||||
c1 -128
|
||||
c2 -32768
|
||||
c3 -8388608
|
||||
c4 -2147483648
|
||||
c5 -2147483648
|
||||
c6 -9223372036854775808
|
||||
c7 -3.40282e+38
|
||||
c8 -1.11111111111111e+50
|
||||
c9 -1.11111111111111e+50
|
||||
|
|
272
mysql-test/r/round.result
Normal file
272
mysql-test/r/round.result
Normal file
|
@ -0,0 +1,272 @@
|
|||
DROP TABLE IF EXISTS t1;
|
||||
CREATE TABLE t1 (sint8 tinyint not null);
|
||||
INSERT INTO t1 VALUES ('0.1');
|
||||
INSERT INTO t1 VALUES ('0.5');
|
||||
INSERT INTO t1 VALUES ('127.4');
|
||||
INSERT INTO t1 VALUES ('127.5');
|
||||
Warnings:
|
||||
Warning 1264 Out of range value for column 'sint8' at row 1
|
||||
INSERT INTO t1 VALUES ('-0.1');
|
||||
INSERT INTO t1 VALUES ('-0.5');
|
||||
INSERT INTO t1 VALUES ('-127.4');
|
||||
INSERT INTO t1 VALUES ('-127.5');
|
||||
INSERT INTO t1 VALUES ('-128.4');
|
||||
INSERT INTO t1 VALUES ('-128.5');
|
||||
Warnings:
|
||||
Warning 1264 Out of range value for column 'sint8' at row 1
|
||||
SELECT * FROM t1;
|
||||
sint8
|
||||
0
|
||||
1
|
||||
127
|
||||
127
|
||||
0
|
||||
-1
|
||||
-127
|
||||
-128
|
||||
-128
|
||||
-128
|
||||
DROP TABLE t1;
|
||||
CREATE TABLE t1 (uint8 tinyint unsigned not null);
|
||||
INSERT INTO t1 VALUES ('0.1');
|
||||
INSERT INTO t1 VALUES ('0.5');
|
||||
INSERT INTO t1 VALUES ('127.4');
|
||||
INSERT INTO t1 VALUES ('127.5');
|
||||
INSERT INTO t1 VALUES ('-0.1');
|
||||
INSERT INTO t1 VALUES ('-0.5');
|
||||
Warnings:
|
||||
Warning 1264 Out of range value for column 'uint8' at row 1
|
||||
INSERT INTO t1 VALUES ('255.4');
|
||||
INSERT INTO t1 VALUES ('255.5');
|
||||
Warnings:
|
||||
Warning 1264 Out of range value for column 'uint8' at row 1
|
||||
SELECT * FROM t1;
|
||||
uint8
|
||||
0
|
||||
1
|
||||
127
|
||||
128
|
||||
0
|
||||
0
|
||||
255
|
||||
255
|
||||
DROP TABLE t1;
|
||||
CREATE TABLE t1 (sint16 smallint not null);
|
||||
INSERT INTO t1 VALUES ('0.1');
|
||||
INSERT INTO t1 VALUES ('0.5');
|
||||
INSERT INTO t1 VALUES ('32767.4');
|
||||
INSERT INTO t1 VALUES ('32767.5');
|
||||
Warnings:
|
||||
Warning 1264 Out of range value for column 'sint16' at row 1
|
||||
INSERT INTO t1 VALUES ('-0.1');
|
||||
INSERT INTO t1 VALUES ('-0.5');
|
||||
INSERT INTO t1 VALUES ('-32767.4');
|
||||
INSERT INTO t1 VALUES ('-32767.5');
|
||||
INSERT INTO t1 VALUES ('-32768.4');
|
||||
INSERT INTO t1 VALUES ('-32768.5');
|
||||
Warnings:
|
||||
Warning 1264 Out of range value for column 'sint16' at row 1
|
||||
SELECT * FROM t1;
|
||||
sint16
|
||||
0
|
||||
1
|
||||
32767
|
||||
32767
|
||||
0
|
||||
-1
|
||||
-32767
|
||||
-32768
|
||||
-32768
|
||||
-32768
|
||||
DROP TABLE t1;
|
||||
CREATE TABLE t1 (uint16 smallint unsigned not null);
|
||||
INSERT INTO t1 VALUES ('0.1');
|
||||
INSERT INTO t1 VALUES ('0.5');
|
||||
INSERT INTO t1 VALUES ('32767.4');
|
||||
INSERT INTO t1 VALUES ('32767.5');
|
||||
INSERT INTO t1 VALUES ('-0.1');
|
||||
INSERT INTO t1 VALUES ('-0.5');
|
||||
Warnings:
|
||||
Warning 1264 Out of range value for column 'uint16' at row 1
|
||||
INSERT INTO t1 VALUES ('65535.4');
|
||||
INSERT INTO t1 VALUES ('65535.5');
|
||||
Warnings:
|
||||
Warning 1264 Out of range value for column 'uint16' at row 1
|
||||
SELECT * FROM t1;
|
||||
uint16
|
||||
0
|
||||
1
|
||||
32767
|
||||
32768
|
||||
0
|
||||
0
|
||||
65535
|
||||
65535
|
||||
DROP TABLE t1;
|
||||
CREATE TABLE t1 (sint24 mediumint not null);
|
||||
INSERT INTO t1 VALUES ('0.1');
|
||||
INSERT INTO t1 VALUES ('0.5');
|
||||
INSERT INTO t1 VALUES ('8388607.4');
|
||||
INSERT INTO t1 VALUES ('8388607.5');
|
||||
Warnings:
|
||||
Warning 1264 Out of range value for column 'sint24' at row 1
|
||||
INSERT INTO t1 VALUES ('-0.1');
|
||||
INSERT INTO t1 VALUES ('-0.5');
|
||||
INSERT INTO t1 VALUES ('-8388607.4');
|
||||
INSERT INTO t1 VALUES ('-8388607.5');
|
||||
INSERT INTO t1 VALUES ('-8388608.4');
|
||||
INSERT INTO t1 VALUES ('-8388608.5');
|
||||
Warnings:
|
||||
Warning 1264 Out of range value for column 'sint24' at row 1
|
||||
SELECT * FROM t1;
|
||||
sint24
|
||||
0
|
||||
1
|
||||
8388607
|
||||
8388607
|
||||
0
|
||||
-1
|
||||
-8388607
|
||||
-8388608
|
||||
-8388608
|
||||
-8388608
|
||||
DROP TABLE t1;
|
||||
CREATE TABLE t1 (uint24 mediumint unsigned not null);
|
||||
INSERT INTO t1 VALUES ('0.1');
|
||||
INSERT INTO t1 VALUES ('0.5');
|
||||
INSERT INTO t1 VALUES ('8388607.4');
|
||||
INSERT INTO t1 VALUES ('8388607.5');
|
||||
INSERT INTO t1 VALUES ('-0.1');
|
||||
INSERT INTO t1 VALUES ('-0.5');
|
||||
Warnings:
|
||||
Warning 1264 Out of range value for column 'uint24' at row 1
|
||||
INSERT INTO t1 VALUES ('16777215.4');
|
||||
INSERT INTO t1 VALUES ('16777215.5');
|
||||
Warnings:
|
||||
Warning 1264 Out of range value for column 'uint24' at row 1
|
||||
SELECT * FROM t1;
|
||||
uint24
|
||||
0
|
||||
1
|
||||
8388607
|
||||
8388608
|
||||
0
|
||||
0
|
||||
16777215
|
||||
16777215
|
||||
DROP TABLE t1;
|
||||
CREATE TABLE t1 (sint64 bigint not null);
|
||||
INSERT INTO t1 VALUES ('0.1');
|
||||
INSERT INTO t1 VALUES ('0.5');
|
||||
INSERT INTO t1 VALUES ('9223372036854775807.4');
|
||||
INSERT INTO t1 VALUES ('9223372036854775807.5');
|
||||
Warnings:
|
||||
Warning 1264 Out of range value for column 'sint64' at row 1
|
||||
INSERT INTO t1 VALUES ('-0.1');
|
||||
INSERT INTO t1 VALUES ('-0.5');
|
||||
INSERT INTO t1 VALUES ('-9223372036854775807.4');
|
||||
INSERT INTO t1 VALUES ('-9223372036854775807.5');
|
||||
INSERT INTO t1 VALUES ('-9223372036854775808.4');
|
||||
INSERT INTO t1 VALUES ('-9223372036854775808.5');
|
||||
Warnings:
|
||||
Warning 1264 Out of range value for column 'sint64' at row 1
|
||||
SELECT * FROM t1;
|
||||
sint64
|
||||
0
|
||||
1
|
||||
9223372036854775807
|
||||
9223372036854775807
|
||||
0
|
||||
-1
|
||||
-9223372036854775807
|
||||
-9223372036854775808
|
||||
-9223372036854775808
|
||||
-9223372036854775808
|
||||
DROP TABLE t1;
|
||||
CREATE TABLE t1 (uint64 bigint unsigned not null);
|
||||
INSERT INTO t1 VALUES ('0.1');
|
||||
INSERT INTO t1 VALUES ('0.5');
|
||||
INSERT INTO t1 VALUES ('9223372036854775807.4');
|
||||
INSERT INTO t1 VALUES ('9223372036854775807.5');
|
||||
INSERT INTO t1 VALUES ('-0.1');
|
||||
INSERT INTO t1 VALUES ('-0.5');
|
||||
Warnings:
|
||||
Warning 1264 Out of range value for column 'uint64' at row 1
|
||||
INSERT INTO t1 VALUES ('18446744073709551615.4');
|
||||
INSERT INTO t1 VALUES ('18446744073709551615.5');
|
||||
Warnings:
|
||||
Warning 1264 Out of range value for column 'uint64' at row 1
|
||||
INSERT INTO t1 VALUES ('1844674407370955161.0');
|
||||
INSERT INTO t1 VALUES ('1844674407370955161.1');
|
||||
INSERT INTO t1 VALUES ('1844674407370955161.2');
|
||||
INSERT INTO t1 VALUES ('1844674407370955161.3');
|
||||
INSERT INTO t1 VALUES ('1844674407370955161.4');
|
||||
INSERT INTO t1 VALUES ('1844674407370955161.5');
|
||||
INSERT INTO t1 VALUES ('1844674407370955161.0e1');
|
||||
INSERT INTO t1 VALUES ('1844674407370955161.1e1');
|
||||
INSERT INTO t1 VALUES ('1844674407370955161.2e1');
|
||||
INSERT INTO t1 VALUES ('1844674407370955161.3e1');
|
||||
INSERT INTO t1 VALUES ('1844674407370955161.4e1');
|
||||
INSERT INTO t1 VALUES ('1844674407370955161.5e1');
|
||||
INSERT INTO t1 VALUES ('18446744073709551610e-1');
|
||||
INSERT INTO t1 VALUES ('18446744073709551611e-1');
|
||||
INSERT INTO t1 VALUES ('18446744073709551612e-1');
|
||||
INSERT INTO t1 VALUES ('18446744073709551613e-1');
|
||||
INSERT INTO t1 VALUES ('18446744073709551614e-1');
|
||||
INSERT INTO t1 VALUES ('18446744073709551615e-1');
|
||||
SELECT * FROM t1;
|
||||
uint64
|
||||
0
|
||||
1
|
||||
9223372036854775807
|
||||
9223372036854775808
|
||||
0
|
||||
0
|
||||
18446744073709551615
|
||||
18446744073709551615
|
||||
1844674407370955161
|
||||
1844674407370955161
|
||||
1844674407370955161
|
||||
1844674407370955161
|
||||
1844674407370955161
|
||||
1844674407370955162
|
||||
18446744073709551610
|
||||
18446744073709551611
|
||||
18446744073709551612
|
||||
18446744073709551613
|
||||
18446744073709551614
|
||||
18446744073709551615
|
||||
1844674407370955161
|
||||
1844674407370955161
|
||||
1844674407370955161
|
||||
1844674407370955161
|
||||
1844674407370955161
|
||||
1844674407370955162
|
||||
DROP TABLE t1;
|
||||
CREATE TABLE t1 (str varchar(128), sint64 bigint not null default 0);
|
||||
INSERT INTO t1 (str) VALUES ('1.5');
|
||||
INSERT INTO t1 (str) VALUES ('1.00005e4');
|
||||
INSERT INTO t1 (str) VALUES ('1.0005e3');
|
||||
INSERT INTO t1 (str) VALUES ('1.005e2');
|
||||
INSERT INTO t1 (str) VALUES ('1.05e1');
|
||||
INSERT INTO t1 (str) VALUES ('1.5e0');
|
||||
INSERT INTO t1 (str) VALUES ('100005e-1');
|
||||
INSERT INTO t1 (str) VALUES ('100050e-2');
|
||||
INSERT INTO t1 (str) VALUES ('100500e-3');
|
||||
INSERT INTO t1 (str) VALUES ('105000e-4');
|
||||
INSERT INTO t1 (str) VALUES ('150000e-5');
|
||||
UPDATE t1 SET sint64=str;
|
||||
SELECT * FROM t1;
|
||||
str sint64
|
||||
1.5 2
|
||||
1.00005e4 10001
|
||||
1.0005e3 1001
|
||||
1.005e2 101
|
||||
1.05e1 11
|
||||
1.5e0 2
|
||||
100005e-1 10001
|
||||
100050e-2 1001
|
||||
100500e-3 101
|
||||
105000e-4 11
|
||||
150000e-5 2
|
||||
DROP TABLE t1;
|
|
@ -67,9 +67,9 @@ drop table t1;
|
|||
create table t1 (a int, b char(10));
|
||||
load data infile '../std_data_ln/loaddata3.dat' into table t1 fields terminated by '' enclosed by '' ignore 1 lines;
|
||||
Warnings:
|
||||
Warning 1264 Out of range value for column 'a' at row 3
|
||||
Warning 1366 Incorrect integer value: 'error ' for column 'a' at row 3
|
||||
Warning 1262 Row 3 was truncated; it contained more data than there were input columns
|
||||
Warning 1264 Out of range value for column 'a' at row 5
|
||||
Warning 1366 Incorrect integer value: 'wrong end ' for column 'a' at row 5
|
||||
Warning 1262 Row 5 was truncated; it contained more data than there were input columns
|
||||
select * from rewrite.t1;
|
||||
a b
|
||||
|
@ -81,7 +81,8 @@ a b
|
|||
truncate table t1;
|
||||
load data infile '../std_data_ln/loaddata4.dat' into table t1 fields terminated by '' enclosed by '' lines terminated by '' ignore 1 lines;
|
||||
Warnings:
|
||||
Warning 1264 Out of range value for column 'a' at row 4
|
||||
Warning 1366 Incorrect integer value: '
|
||||
' for column 'a' at row 4
|
||||
Warning 1261 Row 4 doesn't contain data for all columns
|
||||
select * from rewrite.t1;
|
||||
a b
|
||||
|
|
|
@ -99,4 +99,24 @@ a
|
|||
7
|
||||
8
|
||||
9
|
||||
DROP TABLE t1;
|
||||
================ Test for BUG#22550 ================
|
||||
drop table if exists t1,t2,t3,t4,t5,t6,t7,t8,t9;
|
||||
reset master;
|
||||
reset slave;
|
||||
drop table if exists t1,t2,t3,t4,t5,t6,t7,t8,t9;
|
||||
start slave;
|
||||
CREATE TABLE t1 (a BIT(1), b INT) ENGINE=MYISAM;
|
||||
INSERT INTO t1 VALUES(1,2);
|
||||
SELECT HEX(a),b FROM t1;
|
||||
HEX(a) b
|
||||
1 2
|
||||
SELECT HEX(a),b FROM t1;
|
||||
HEX(a) b
|
||||
1 2
|
||||
UPDATE t1 SET a=0 WHERE b=2;
|
||||
SELECT HEX(a),b FROM t1;
|
||||
HEX(a) b
|
||||
0 2
|
||||
SELECT HEX(a),b FROM t1;
|
||||
HEX(a) b
|
||||
0 2
|
||||
|
|
|
@ -2809,7 +2809,7 @@ CREATE TABLE t1 (i BIGINT UNSIGNED NOT NULL);
|
|||
INSERT INTO t1 VALUES (10);
|
||||
SELECT i='1e+01',i=1e+01, i in (1e+01,1e+01), i in ('1e+01','1e+01') FROM t1;
|
||||
i='1e+01' i=1e+01 i in (1e+01,1e+01) i in ('1e+01','1e+01')
|
||||
0 1 1 1
|
||||
1 1 1 1
|
||||
DROP TABLE t1;
|
||||
CREATE TABLE t1 (
|
||||
K2C4 varchar(4) character set latin1 collate latin1_bin NOT NULL default '',
|
||||
|
|
|
@ -896,7 +896,7 @@ sp_var
|
|||
@user_var
|
||||
0
|
||||
Warnings:
|
||||
Warning 1264 Out of range value for column 'sp_var' at row 1
|
||||
Warning 1366 Incorrect integer value: 'Hello, world!' for column 'sp_var' at row 1
|
||||
DROP PROCEDURE p1;
|
||||
DROP TABLE t1;
|
||||
|
||||
|
|
|
@ -619,9 +619,9 @@ ERROR 22012: Division by 0
|
|||
UPDATE t1 SET col1= MOD(col1,0) WHERE col1 > 0;
|
||||
ERROR 22012: Division by 0
|
||||
INSERT INTO t1 (col1) VALUES ('');
|
||||
ERROR 22003: Out of range value for column 'col1' at row 1
|
||||
ERROR HY000: Incorrect integer value: '' for column 'col1' at row 1
|
||||
INSERT INTO t1 (col1) VALUES ('a59b');
|
||||
ERROR 22003: Out of range value for column 'col1' at row 1
|
||||
ERROR HY000: Incorrect integer value: 'a59b' for column 'col1' at row 1
|
||||
INSERT INTO t1 (col1) VALUES ('1a');
|
||||
ERROR 01000: Data truncated for column 'col1' at row 1
|
||||
INSERT IGNORE INTO t1 (col1) VALUES ('2a');
|
||||
|
@ -701,9 +701,9 @@ ERROR 22012: Division by 0
|
|||
UPDATE t1 SET col1= MOD(col1,0) WHERE col1 > 0;
|
||||
ERROR 22012: Division by 0
|
||||
INSERT INTO t1 (col1) VALUES ('');
|
||||
ERROR 22003: Out of range value for column 'col1' at row 1
|
||||
ERROR HY000: Incorrect integer value: '' for column 'col1' at row 1
|
||||
INSERT INTO t1 (col1) VALUES ('a59b');
|
||||
ERROR 22003: Out of range value for column 'col1' at row 1
|
||||
ERROR HY000: Incorrect integer value: 'a59b' for column 'col1' at row 1
|
||||
INSERT INTO t1 (col1) VALUES ('1a');
|
||||
ERROR 01000: Data truncated for column 'col1' at row 1
|
||||
INSERT IGNORE INTO t1 (col1) VALUES ('2a');
|
||||
|
|
|
@ -6,21 +6,21 @@ primary key (`a`)
|
|||
) engine = 'BDB' ;
|
||||
set @@sql_mode='strict_all_tables';
|
||||
insert into t1 values(1000);
|
||||
ERROR 22003: Out of range value adjusted for column 'a' at row 1
|
||||
ERROR 22003: Out of range value for column 'a' at row 1
|
||||
select count(*) from t1;
|
||||
count(*)
|
||||
0
|
||||
set auto_increment_increment=1000;
|
||||
set auto_increment_offset=700;
|
||||
insert into t1 values(null);
|
||||
ERROR 22003: Out of range value adjusted for column 'a' at row 1
|
||||
ERROR 22003: Out of range value for column 'a' at row 1
|
||||
select count(*) from t1;
|
||||
count(*)
|
||||
0
|
||||
set @@sql_mode=@org_mode;
|
||||
insert into t1 values(null);
|
||||
Warnings:
|
||||
Warning 1264 Out of range value adjusted for column 'a' at row 1
|
||||
Warning 1264 Out of range value for column 'a' at row 1
|
||||
select * from t1;
|
||||
a
|
||||
127
|
||||
|
|
|
@ -1306,9 +1306,9 @@ a b
|
|||
delete from t1;
|
||||
load data infile '../std_data_ln/loaddata3.dat' ignore into table v1 fields terminated by '' enclosed by '' ignore 1 lines;
|
||||
Warnings:
|
||||
Warning 1264 Out of range value for column 'a' at row 3
|
||||
Warning 1366 Incorrect integer value: 'error ' for column 'a' at row 3
|
||||
Error 1369 CHECK OPTION failed 'test.v1'
|
||||
Warning 1264 Out of range value for column 'a' at row 4
|
||||
Warning 1366 Incorrect integer value: 'wrong end ' for column 'a' at row 4
|
||||
Error 1369 CHECK OPTION failed 'test.v1'
|
||||
select * from t1 order by a,b;
|
||||
a b
|
||||
|
|
|
@ -31,19 +31,19 @@ Error 1064 You have an error in your SQL syntax; check the manual that correspon
|
|||
insert into t1 values (1);
|
||||
insert into t1 values ("hej");
|
||||
Warnings:
|
||||
Warning 1264 Out of range value for column 'a' at row 1
|
||||
Warning 1366 Incorrect integer value: 'hej' for column 'a' at row 1
|
||||
insert into t1 values ("hej"),("då");
|
||||
Warnings:
|
||||
Warning 1264 Out of range value for column 'a' at row 1
|
||||
Warning 1264 Out of range value for column 'a' at row 2
|
||||
Warning 1366 Incorrect integer value: 'hej' for column 'a' at row 1
|
||||
Warning 1366 Incorrect integer value: 'd?' for column 'a' at row 2
|
||||
set SQL_WARNINGS=1;
|
||||
insert into t1 values ("hej");
|
||||
Warnings:
|
||||
Warning 1264 Out of range value for column 'a' at row 1
|
||||
Warning 1366 Incorrect integer value: 'hej' for column 'a' at row 1
|
||||
insert into t1 values ("hej"),("då");
|
||||
Warnings:
|
||||
Warning 1264 Out of range value for column 'a' at row 1
|
||||
Warning 1264 Out of range value for column 'a' at row 2
|
||||
Warning 1366 Incorrect integer value: 'hej' for column 'a' at row 1
|
||||
Warning 1366 Incorrect integer value: 'd?' for column 'a' at row 2
|
||||
drop table t1;
|
||||
set SQL_WARNINGS=0;
|
||||
drop temporary table if exists not_exists;
|
||||
|
@ -180,44 +180,44 @@ create table t1 (a int);
|
|||
insert into t1 (a) values (1), (2), (3), (4), (5), (6), (7), (8), (9), (10);
|
||||
update t1 set a='abc';
|
||||
Warnings:
|
||||
Warning 1264 Out of range value for column 'a' at row 1
|
||||
Warning 1264 Out of range value for column 'a' at row 2
|
||||
Warning 1264 Out of range value for column 'a' at row 3
|
||||
Warning 1264 Out of range value for column 'a' at row 4
|
||||
Warning 1264 Out of range value for column 'a' at row 5
|
||||
Warning 1264 Out of range value for column 'a' at row 6
|
||||
Warning 1264 Out of range value for column 'a' at row 7
|
||||
Warning 1264 Out of range value for column 'a' at row 8
|
||||
Warning 1264 Out of range value for column 'a' at row 9
|
||||
Warning 1264 Out of range value for column 'a' at row 10
|
||||
Warning 1366 Incorrect integer value: 'abc' for column 'a' at row 1
|
||||
Warning 1366 Incorrect integer value: 'abc' for column 'a' at row 2
|
||||
Warning 1366 Incorrect integer value: 'abc' for column 'a' at row 3
|
||||
Warning 1366 Incorrect integer value: 'abc' for column 'a' at row 4
|
||||
Warning 1366 Incorrect integer value: 'abc' for column 'a' at row 5
|
||||
Warning 1366 Incorrect integer value: 'abc' for column 'a' at row 6
|
||||
Warning 1366 Incorrect integer value: 'abc' for column 'a' at row 7
|
||||
Warning 1366 Incorrect integer value: 'abc' for column 'a' at row 8
|
||||
Warning 1366 Incorrect integer value: 'abc' for column 'a' at row 9
|
||||
Warning 1366 Incorrect integer value: 'abc' for column 'a' at row 10
|
||||
show warnings limit 2, 1;
|
||||
Level Code Message
|
||||
Warning 1264 Out of range value for column 'a' at row 3
|
||||
Warning 1366 Incorrect integer value: 'abc' for column 'a' at row 3
|
||||
show warnings limit 0, 10;
|
||||
Level Code Message
|
||||
Warning 1264 Out of range value for column 'a' at row 1
|
||||
Warning 1264 Out of range value for column 'a' at row 2
|
||||
Warning 1264 Out of range value for column 'a' at row 3
|
||||
Warning 1264 Out of range value for column 'a' at row 4
|
||||
Warning 1264 Out of range value for column 'a' at row 5
|
||||
Warning 1264 Out of range value for column 'a' at row 6
|
||||
Warning 1264 Out of range value for column 'a' at row 7
|
||||
Warning 1264 Out of range value for column 'a' at row 8
|
||||
Warning 1264 Out of range value for column 'a' at row 9
|
||||
Warning 1264 Out of range value for column 'a' at row 10
|
||||
Warning 1366 Incorrect integer value: 'abc' for column 'a' at row 1
|
||||
Warning 1366 Incorrect integer value: 'abc' for column 'a' at row 2
|
||||
Warning 1366 Incorrect integer value: 'abc' for column 'a' at row 3
|
||||
Warning 1366 Incorrect integer value: 'abc' for column 'a' at row 4
|
||||
Warning 1366 Incorrect integer value: 'abc' for column 'a' at row 5
|
||||
Warning 1366 Incorrect integer value: 'abc' for column 'a' at row 6
|
||||
Warning 1366 Incorrect integer value: 'abc' for column 'a' at row 7
|
||||
Warning 1366 Incorrect integer value: 'abc' for column 'a' at row 8
|
||||
Warning 1366 Incorrect integer value: 'abc' for column 'a' at row 9
|
||||
Warning 1366 Incorrect integer value: 'abc' for column 'a' at row 10
|
||||
show warnings limit 9, 1;
|
||||
Level Code Message
|
||||
Warning 1264 Out of range value for column 'a' at row 10
|
||||
Warning 1366 Incorrect integer value: 'abc' for column 'a' at row 10
|
||||
show warnings limit 10, 1;
|
||||
Level Code Message
|
||||
show warnings limit 9, 2;
|
||||
Level Code Message
|
||||
Warning 1264 Out of range value for column 'a' at row 10
|
||||
Warning 1366 Incorrect integer value: 'abc' for column 'a' at row 10
|
||||
show warnings limit 0, 0;
|
||||
Level Code Message
|
||||
show warnings limit 1;
|
||||
Level Code Message
|
||||
Warning 1264 Out of range value for column 'a' at row 1
|
||||
Warning 1366 Incorrect integer value: 'abc' for column 'a' at row 1
|
||||
show warnings limit 0;
|
||||
Level Code Message
|
||||
show warnings limit 1, 0;
|
||||
|
|
|
@ -570,7 +570,7 @@ select extractvalue('<a>a<b>B</b></a>','a|/b');
|
|||
extractvalue('<a>a<b>B</b></a>','a|/b')
|
||||
a
|
||||
select extractvalue('<a>A</a>','/<a>');
|
||||
ERROR HY000: XPATH syntax error: '<a>'
|
||||
ERROR HY000: XPATH error: comparison of two nodesets is not supported: '<a>'
|
||||
select extractvalue('<a><b>b</b><b!>b!</b!></a>','//b!');
|
||||
ERROR HY000: XPATH syntax error: '!'
|
||||
select extractvalue('<a>A<b>B<c>C</c></b></a>','/a/descendant::*');
|
||||
|
@ -710,3 +710,29 @@ Data
|
|||
select extractValue('<foo><foo.bar>Data</foo.bar><something>Otherdata</something></foo>','/foo/something');
|
||||
extractValue('<foo><foo.bar>Data</foo.bar><something>Otherdata</something></foo>','/foo/something')
|
||||
Otherdata
|
||||
select extractValue('<zot><tim0><01>10:39:15</01><02>140</02></tim0></zot>','/zot/tim0/02');
|
||||
ERROR HY000: XPATH syntax error: '02'
|
||||
select extractValue('<zot><tim0><01>10:39:15</01><02>140</02></tim0></zot>','//*');
|
||||
extractValue('<zot><tim0><01>10:39:15</01><02>140</02></tim0></zot>','//*')
|
||||
NULL
|
||||
Warnings:
|
||||
Warning 1512 Incorrect XML value: 'parse error at line 1 pos 13: unknown token unexpected (ident or '/' wanted)'
|
||||
select extractValue('<.>test</.>','//*');
|
||||
extractValue('<.>test</.>','//*')
|
||||
NULL
|
||||
Warnings:
|
||||
Warning 1512 Incorrect XML value: 'parse error at line 1 pos 2: unknown token unexpected (ident or '/' wanted)'
|
||||
select extractValue('<->test</->','//*');
|
||||
extractValue('<->test</->','//*')
|
||||
NULL
|
||||
Warnings:
|
||||
Warning 1512 Incorrect XML value: 'parse error at line 1 pos 2: unknown token unexpected (ident or '/' wanted)'
|
||||
select extractValue('<:>test</:>','//*');
|
||||
extractValue('<:>test</:>','//*')
|
||||
test
|
||||
select extractValue('<_>test</_>','//*');
|
||||
extractValue('<_>test</_>','//*')
|
||||
test
|
||||
select extractValue('<x.-_:>test</x.-_:>','//*');
|
||||
extractValue('<x.-_:>test</x.-_:>','//*')
|
||||
test
|
||||
|
|
|
@ -42,3 +42,13 @@ DROP TABLE t1;
|
|||
select hex(convert(_gbk 0xA14041 using ucs2));
|
||||
|
||||
# End of 4.1 tests
|
||||
|
||||
#
|
||||
# Bug#21620 ALTER TABLE affects other columns
|
||||
#
|
||||
create table t1 (c1 text not null, c2 text not null) character set gbk;
|
||||
alter table t1 change c1 c1 mediumtext character set gbk not null;
|
||||
show create table t1;
|
||||
drop table t1;
|
||||
|
||||
--echo End of 5.0 tests
|
||||
|
|
|
@ -1158,3 +1158,23 @@ execute my_stmt using @a;
|
|||
set @a:=null;
|
||||
execute my_stmt using @a;
|
||||
drop table if exists t1;
|
||||
|
||||
#
|
||||
# Bug#19960: Inconsistent results when joining
|
||||
# InnoDB tables using partial UTF8 indexes
|
||||
#
|
||||
CREATE TABLE t1 (
|
||||
colA int(11) NOT NULL,
|
||||
colB varchar(255) character set utf8 NOT NULL,
|
||||
PRIMARY KEY (colA)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
|
||||
INSERT INTO t1 (colA, colB) VALUES (1, 'foo'), (2, 'foo bar');
|
||||
CREATE TABLE t2 (
|
||||
colA int(11) NOT NULL,
|
||||
colB varchar(255) character set utf8 NOT NULL,
|
||||
KEY bad (colA,colB(3))
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
|
||||
INSERT INTO t2 (colA, colB) VALUES (1, 'foo'),(2, 'foo bar');
|
||||
SELECT * FROM t1 JOIN t2 ON t1.colA=t2.colA AND t1.colB=t2.colB
|
||||
WHERE t1.colA < 3;
|
||||
DROP TABLE t1, t2;
|
||||
|
|
145
mysql-test/t/round.test
Normal file
145
mysql-test/t/round.test
Normal file
|
@ -0,0 +1,145 @@
|
|||
--disable_warnings
|
||||
DROP TABLE IF EXISTS t1;
|
||||
--enable_warnings
|
||||
|
||||
CREATE TABLE t1 (sint8 tinyint not null);
|
||||
INSERT INTO t1 VALUES ('0.1');
|
||||
INSERT INTO t1 VALUES ('0.5');
|
||||
INSERT INTO t1 VALUES ('127.4');
|
||||
INSERT INTO t1 VALUES ('127.5');
|
||||
INSERT INTO t1 VALUES ('-0.1');
|
||||
INSERT INTO t1 VALUES ('-0.5');
|
||||
INSERT INTO t1 VALUES ('-127.4');
|
||||
INSERT INTO t1 VALUES ('-127.5');
|
||||
INSERT INTO t1 VALUES ('-128.4');
|
||||
INSERT INTO t1 VALUES ('-128.5');
|
||||
SELECT * FROM t1;
|
||||
DROP TABLE t1;
|
||||
|
||||
CREATE TABLE t1 (uint8 tinyint unsigned not null);
|
||||
INSERT INTO t1 VALUES ('0.1');
|
||||
INSERT INTO t1 VALUES ('0.5');
|
||||
INSERT INTO t1 VALUES ('127.4');
|
||||
INSERT INTO t1 VALUES ('127.5');
|
||||
INSERT INTO t1 VALUES ('-0.1');
|
||||
INSERT INTO t1 VALUES ('-0.5');
|
||||
INSERT INTO t1 VALUES ('255.4');
|
||||
INSERT INTO t1 VALUES ('255.5');
|
||||
SELECT * FROM t1;
|
||||
DROP TABLE t1;
|
||||
|
||||
|
||||
CREATE TABLE t1 (sint16 smallint not null);
|
||||
INSERT INTO t1 VALUES ('0.1');
|
||||
INSERT INTO t1 VALUES ('0.5');
|
||||
INSERT INTO t1 VALUES ('32767.4');
|
||||
INSERT INTO t1 VALUES ('32767.5');
|
||||
INSERT INTO t1 VALUES ('-0.1');
|
||||
INSERT INTO t1 VALUES ('-0.5');
|
||||
INSERT INTO t1 VALUES ('-32767.4');
|
||||
INSERT INTO t1 VALUES ('-32767.5');
|
||||
INSERT INTO t1 VALUES ('-32768.4');
|
||||
INSERT INTO t1 VALUES ('-32768.5');
|
||||
SELECT * FROM t1;
|
||||
DROP TABLE t1;
|
||||
|
||||
|
||||
CREATE TABLE t1 (uint16 smallint unsigned not null);
|
||||
INSERT INTO t1 VALUES ('0.1');
|
||||
INSERT INTO t1 VALUES ('0.5');
|
||||
INSERT INTO t1 VALUES ('32767.4');
|
||||
INSERT INTO t1 VALUES ('32767.5');
|
||||
INSERT INTO t1 VALUES ('-0.1');
|
||||
INSERT INTO t1 VALUES ('-0.5');
|
||||
INSERT INTO t1 VALUES ('65535.4');
|
||||
INSERT INTO t1 VALUES ('65535.5');
|
||||
SELECT * FROM t1;
|
||||
DROP TABLE t1;
|
||||
|
||||
CREATE TABLE t1 (sint24 mediumint not null);
|
||||
INSERT INTO t1 VALUES ('0.1');
|
||||
INSERT INTO t1 VALUES ('0.5');
|
||||
INSERT INTO t1 VALUES ('8388607.4');
|
||||
INSERT INTO t1 VALUES ('8388607.5');
|
||||
INSERT INTO t1 VALUES ('-0.1');
|
||||
INSERT INTO t1 VALUES ('-0.5');
|
||||
INSERT INTO t1 VALUES ('-8388607.4');
|
||||
INSERT INTO t1 VALUES ('-8388607.5');
|
||||
INSERT INTO t1 VALUES ('-8388608.4');
|
||||
INSERT INTO t1 VALUES ('-8388608.5');
|
||||
SELECT * FROM t1;
|
||||
DROP TABLE t1;
|
||||
|
||||
CREATE TABLE t1 (uint24 mediumint unsigned not null);
|
||||
INSERT INTO t1 VALUES ('0.1');
|
||||
INSERT INTO t1 VALUES ('0.5');
|
||||
INSERT INTO t1 VALUES ('8388607.4');
|
||||
INSERT INTO t1 VALUES ('8388607.5');
|
||||
INSERT INTO t1 VALUES ('-0.1');
|
||||
INSERT INTO t1 VALUES ('-0.5');
|
||||
INSERT INTO t1 VALUES ('16777215.4');
|
||||
INSERT INTO t1 VALUES ('16777215.5');
|
||||
SELECT * FROM t1;
|
||||
DROP TABLE t1;
|
||||
|
||||
CREATE TABLE t1 (sint64 bigint not null);
|
||||
INSERT INTO t1 VALUES ('0.1');
|
||||
INSERT INTO t1 VALUES ('0.5');
|
||||
INSERT INTO t1 VALUES ('9223372036854775807.4');
|
||||
INSERT INTO t1 VALUES ('9223372036854775807.5');
|
||||
INSERT INTO t1 VALUES ('-0.1');
|
||||
INSERT INTO t1 VALUES ('-0.5');
|
||||
INSERT INTO t1 VALUES ('-9223372036854775807.4');
|
||||
INSERT INTO t1 VALUES ('-9223372036854775807.5');
|
||||
INSERT INTO t1 VALUES ('-9223372036854775808.4');
|
||||
INSERT INTO t1 VALUES ('-9223372036854775808.5');
|
||||
SELECT * FROM t1;
|
||||
DROP TABLE t1;
|
||||
|
||||
CREATE TABLE t1 (uint64 bigint unsigned not null);
|
||||
INSERT INTO t1 VALUES ('0.1');
|
||||
INSERT INTO t1 VALUES ('0.5');
|
||||
INSERT INTO t1 VALUES ('9223372036854775807.4');
|
||||
INSERT INTO t1 VALUES ('9223372036854775807.5');
|
||||
INSERT INTO t1 VALUES ('-0.1');
|
||||
INSERT INTO t1 VALUES ('-0.5');
|
||||
INSERT INTO t1 VALUES ('18446744073709551615.4');
|
||||
INSERT INTO t1 VALUES ('18446744073709551615.5');
|
||||
INSERT INTO t1 VALUES ('1844674407370955161.0');
|
||||
INSERT INTO t1 VALUES ('1844674407370955161.1');
|
||||
INSERT INTO t1 VALUES ('1844674407370955161.2');
|
||||
INSERT INTO t1 VALUES ('1844674407370955161.3');
|
||||
INSERT INTO t1 VALUES ('1844674407370955161.4');
|
||||
INSERT INTO t1 VALUES ('1844674407370955161.5');
|
||||
INSERT INTO t1 VALUES ('1844674407370955161.0e1');
|
||||
INSERT INTO t1 VALUES ('1844674407370955161.1e1');
|
||||
INSERT INTO t1 VALUES ('1844674407370955161.2e1');
|
||||
INSERT INTO t1 VALUES ('1844674407370955161.3e1');
|
||||
INSERT INTO t1 VALUES ('1844674407370955161.4e1');
|
||||
INSERT INTO t1 VALUES ('1844674407370955161.5e1');
|
||||
INSERT INTO t1 VALUES ('18446744073709551610e-1');
|
||||
INSERT INTO t1 VALUES ('18446744073709551611e-1');
|
||||
INSERT INTO t1 VALUES ('18446744073709551612e-1');
|
||||
INSERT INTO t1 VALUES ('18446744073709551613e-1');
|
||||
INSERT INTO t1 VALUES ('18446744073709551614e-1');
|
||||
INSERT INTO t1 VALUES ('18446744073709551615e-1');
|
||||
SELECT * FROM t1;
|
||||
DROP TABLE t1;
|
||||
|
||||
CREATE TABLE t1 (str varchar(128), sint64 bigint not null default 0);
|
||||
INSERT INTO t1 (str) VALUES ('1.5');
|
||||
INSERT INTO t1 (str) VALUES ('1.00005e4');
|
||||
INSERT INTO t1 (str) VALUES ('1.0005e3');
|
||||
INSERT INTO t1 (str) VALUES ('1.005e2');
|
||||
INSERT INTO t1 (str) VALUES ('1.05e1');
|
||||
INSERT INTO t1 (str) VALUES ('1.5e0');
|
||||
INSERT INTO t1 (str) VALUES ('100005e-1');
|
||||
INSERT INTO t1 (str) VALUES ('100050e-2');
|
||||
INSERT INTO t1 (str) VALUES ('100500e-3');
|
||||
INSERT INTO t1 (str) VALUES ('105000e-4');
|
||||
INSERT INTO t1 (str) VALUES ('150000e-5');
|
||||
UPDATE t1 SET sint64=str;
|
||||
SELECT * FROM t1;
|
||||
DROP TABLE t1;
|
||||
|
||||
|
|
@ -93,4 +93,24 @@ INSERT INTO t1 VALUES (7),(8),(9);
|
|||
sync_slave_with_master;
|
||||
SELECT * FROM t1;
|
||||
|
||||
DROP TABLE t1;
|
||||
# Bug#22550: Replication of BIT columns failing
|
||||
--echo ================ Test for BUG#22550 ================
|
||||
--disable_query_log
|
||||
--source include/master-slave-reset.inc
|
||||
--enable_query_log
|
||||
|
||||
connection master;
|
||||
CREATE TABLE t1 (a BIT(1), b INT) ENGINE=MYISAM;
|
||||
sync_slave_with_master;
|
||||
|
||||
connection master;
|
||||
INSERT INTO t1 VALUES(1,2);
|
||||
SELECT HEX(a),b FROM t1;
|
||||
sync_slave_with_master;
|
||||
SELECT HEX(a),b FROM t1;
|
||||
|
||||
connection master;
|
||||
UPDATE t1 SET a=0 WHERE b=2;
|
||||
SELECT HEX(a),b FROM t1;
|
||||
sync_slave_with_master;
|
||||
SELECT HEX(a),b FROM t1;
|
||||
|
|
|
@ -1,3 +1,3 @@
|
|||
let $type= 'MYISAM' ;
|
||||
let $extra_index= ;
|
||||
-- source include/rpl_row_basic.inc
|
||||
-- source extra/rpl_tests/rpl_row_basic.test
|
||||
|
|
|
@ -2,5 +2,5 @@
|
|||
|
||||
let $type= 'INNODB' ;
|
||||
let $extra_index= ;
|
||||
-- source include/rpl_row_basic.inc
|
||||
-- source extra/rpl_tests/rpl_row_basic.test
|
||||
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
-- source include/have_ndb.inc
|
||||
let $type= 'NDB' ;
|
||||
let $extra_index= ;
|
||||
-- source include/rpl_row_basic.inc
|
||||
-- source extra/rpl_tests/rpl_row_basic.test
|
||||
-- source include/master-slave-end.inc
|
||||
|
|
|
@ -649,9 +649,9 @@ UPDATE t1 SET col2 =col2 + 50 WHERE col2 > 0;
|
|||
UPDATE t1 SET col1 =col1 / 0 WHERE col1 > 0;
|
||||
--error 1365
|
||||
UPDATE t1 SET col1= MOD(col1,0) WHERE col1 > 0;
|
||||
--error 1264
|
||||
--error 1366
|
||||
INSERT INTO t1 (col1) VALUES ('');
|
||||
--error 1264
|
||||
--error 1366
|
||||
INSERT INTO t1 (col1) VALUES ('a59b');
|
||||
--error 1265
|
||||
INSERT INTO t1 (col1) VALUES ('1a');
|
||||
|
@ -710,9 +710,9 @@ INSERT INTO t1 (col2) VALUES(18446744073709551616.0);
|
|||
UPDATE t1 SET col1 =col1 / 0 WHERE col1 > 0;
|
||||
--error 1365
|
||||
UPDATE t1 SET col1= MOD(col1,0) WHERE col1 > 0;
|
||||
--error 1264
|
||||
--error 1366
|
||||
INSERT INTO t1 (col1) VALUES ('');
|
||||
--error 1264
|
||||
--error 1366
|
||||
INSERT INTO t1 (col1) VALUES ('a59b');
|
||||
--error 1265
|
||||
INSERT INTO t1 (col1) VALUES ('1a');
|
||||
|
|
|
@ -360,3 +360,19 @@ select extractValue('<ns:element xmlns:ns="myns">a</ns:element>','/ns:element/@x
|
|||
#
|
||||
select extractValue('<foo><foo.bar>Data</foo.bar><something>Otherdata</something></foo>','/foo/foo.bar');
|
||||
select extractValue('<foo><foo.bar>Data</foo.bar><something>Otherdata</something></foo>','/foo/something');
|
||||
|
||||
#
|
||||
# Bug#20854 XML functions: wrong result in ExtractValue
|
||||
#
|
||||
--error 1105
|
||||
select extractValue('<zot><tim0><01>10:39:15</01><02>140</02></tim0></zot>','/zot/tim0/02');
|
||||
select extractValue('<zot><tim0><01>10:39:15</01><02>140</02></tim0></zot>','//*');
|
||||
# dot and dash are bad identtifier start character
|
||||
select extractValue('<.>test</.>','//*');
|
||||
select extractValue('<->test</->','//*');
|
||||
# semicolon is good identifier start character
|
||||
select extractValue('<:>test</:>','//*');
|
||||
# underscore is good identifier start character
|
||||
select extractValue('<_>test</_>','//*');
|
||||
# dot, dash, underscore and semicolon are good identifier middle characters
|
||||
select extractValue('<x.-_:>test</x.-_:>','//*');
|
||||
|
|
188
sql/field.cc
188
sql/field.cc
|
@ -2565,28 +2565,26 @@ int Field_tiny::store(const char *from,uint len,CHARSET_INFO *cs)
|
|||
ASSERT_COLUMN_MARKED_FOR_WRITE;
|
||||
int not_used; // We can ignore result from str2int
|
||||
char *end;
|
||||
long tmp= my_strntol(cs, from, len, 10, &end, ¬_used);
|
||||
int error= 0;
|
||||
int error;
|
||||
|
||||
if (unsigned_flag)
|
||||
{
|
||||
if (tmp < 0)
|
||||
ulonglong tmp= cs->cset->strntoull10rnd(cs, from, len, 1, &end, &error);
|
||||
if (error == MY_ERRNO_ERANGE || tmp > 255)
|
||||
{
|
||||
tmp=0; /* purecov: inspected */
|
||||
set_warning(MYSQL_ERROR::WARN_LEVEL_WARN, ER_WARN_DATA_OUT_OF_RANGE, 1);
|
||||
error= 1;
|
||||
}
|
||||
else if (tmp > 255)
|
||||
{
|
||||
tmp= 255;
|
||||
set_if_smaller(tmp, 255);
|
||||
set_warning(MYSQL_ERROR::WARN_LEVEL_WARN, ER_WARN_DATA_OUT_OF_RANGE, 1);
|
||||
error= 1;
|
||||
}
|
||||
else if (table->in_use->count_cuted_fields && check_int(from,len,end,cs))
|
||||
error= 1;
|
||||
else
|
||||
error= 0;
|
||||
ptr[0]= (char) tmp;
|
||||
}
|
||||
else
|
||||
{
|
||||
longlong tmp= cs->cset->strntoull10rnd(cs, from, len, 0, &end, &error);
|
||||
if (tmp < -128)
|
||||
{
|
||||
tmp= -128;
|
||||
|
@ -2601,8 +2599,10 @@ int Field_tiny::store(const char *from,uint len,CHARSET_INFO *cs)
|
|||
}
|
||||
else if (table->in_use->count_cuted_fields && check_int(from,len,end,cs))
|
||||
error= 1;
|
||||
else
|
||||
error= 0;
|
||||
ptr[0]= (char) tmp;
|
||||
}
|
||||
ptr[0]= (char) tmp;
|
||||
return error;
|
||||
}
|
||||
|
||||
|
@ -2775,28 +2775,33 @@ int Field_short::store(const char *from,uint len,CHARSET_INFO *cs)
|
|||
ASSERT_COLUMN_MARKED_FOR_WRITE;
|
||||
int not_used; // We can ignore result from str2int
|
||||
char *end;
|
||||
long tmp= my_strntol(cs, from, len, 10, &end, ¬_used);
|
||||
int error= 0;
|
||||
int error;
|
||||
|
||||
if (unsigned_flag)
|
||||
{
|
||||
if (tmp < 0)
|
||||
ulonglong tmp= cs->cset->strntoull10rnd(cs, from, len, 1, &end, &error);
|
||||
if (error == MY_ERRNO_ERANGE || tmp > UINT_MAX16)
|
||||
{
|
||||
tmp=0;
|
||||
set_warning(MYSQL_ERROR::WARN_LEVEL_WARN, ER_WARN_DATA_OUT_OF_RANGE, 1);
|
||||
error= 1;
|
||||
}
|
||||
else if (tmp > UINT_MAX16)
|
||||
{
|
||||
tmp=UINT_MAX16;
|
||||
set_if_smaller(tmp, UINT_MAX16);
|
||||
set_warning(MYSQL_ERROR::WARN_LEVEL_WARN, ER_WARN_DATA_OUT_OF_RANGE, 1);
|
||||
error= 1;
|
||||
}
|
||||
else if (table->in_use->count_cuted_fields && check_int(from,len,end,cs))
|
||||
error= 1;
|
||||
else
|
||||
error= 0;
|
||||
#ifdef WORDS_BIGENDIAN
|
||||
if (table->s->db_low_byte_first)
|
||||
{
|
||||
int2store(ptr,tmp);
|
||||
}
|
||||
else
|
||||
#endif
|
||||
shortstore(ptr,(short) tmp);
|
||||
}
|
||||
else
|
||||
{
|
||||
longlong tmp= cs->cset->strntoull10rnd(cs, from, len, 0, &end, &error);
|
||||
if (tmp < INT_MIN16)
|
||||
{
|
||||
tmp= INT_MIN16;
|
||||
|
@ -2811,15 +2816,17 @@ int Field_short::store(const char *from,uint len,CHARSET_INFO *cs)
|
|||
}
|
||||
else if (table->in_use->count_cuted_fields && check_int(from,len,end,cs))
|
||||
error= 1;
|
||||
}
|
||||
else
|
||||
error= 0;
|
||||
#ifdef WORDS_BIGENDIAN
|
||||
if (table->s->db_low_byte_first)
|
||||
{
|
||||
int2store(ptr,tmp);
|
||||
}
|
||||
else
|
||||
if (table->s->db_low_byte_first)
|
||||
{
|
||||
int2store(ptr,tmp);
|
||||
}
|
||||
else
|
||||
#endif
|
||||
shortstore(ptr,(short) tmp);
|
||||
shortstore(ptr,(short) tmp);
|
||||
}
|
||||
return error;
|
||||
}
|
||||
|
||||
|
@ -3055,28 +3062,26 @@ int Field_medium::store(const char *from,uint len,CHARSET_INFO *cs)
|
|||
ASSERT_COLUMN_MARKED_FOR_WRITE;
|
||||
int not_used; // We can ignore result from str2int
|
||||
char *end;
|
||||
long tmp= my_strntol(cs, from, len, 10, &end, ¬_used);
|
||||
int error= 0;
|
||||
int error;
|
||||
|
||||
if (unsigned_flag)
|
||||
{
|
||||
if (tmp < 0)
|
||||
ulonglong tmp= cs->cset->strntoull10rnd(cs, from, len, 1, &end, &error);
|
||||
if (error == MY_ERRNO_ERANGE || tmp > UINT_MAX24)
|
||||
{
|
||||
tmp=0;
|
||||
set_warning(MYSQL_ERROR::WARN_LEVEL_WARN, ER_WARN_DATA_OUT_OF_RANGE, 1);
|
||||
error= 1;
|
||||
}
|
||||
else if (tmp >= (long) (1L << 24))
|
||||
{
|
||||
tmp=(long) (1L << 24)-1L;
|
||||
set_if_smaller(tmp, UINT_MAX24);
|
||||
set_warning(MYSQL_ERROR::WARN_LEVEL_WARN, ER_WARN_DATA_OUT_OF_RANGE, 1);
|
||||
error= 1;
|
||||
}
|
||||
else if (table->in_use->count_cuted_fields && check_int(from,len,end,cs))
|
||||
error= 1;
|
||||
else
|
||||
error= 0;
|
||||
int3store(ptr,tmp);
|
||||
}
|
||||
else
|
||||
{
|
||||
longlong tmp= cs->cset->strntoull10rnd(cs, from, len, 0, &end, &error);
|
||||
if (tmp < INT_MIN24)
|
||||
{
|
||||
tmp= INT_MIN24;
|
||||
|
@ -3091,9 +3096,10 @@ int Field_medium::store(const char *from,uint len,CHARSET_INFO *cs)
|
|||
}
|
||||
else if (table->in_use->count_cuted_fields && check_int(from,len,end,cs))
|
||||
error= 1;
|
||||
else
|
||||
error= 0;
|
||||
int3store(ptr,tmp);
|
||||
}
|
||||
|
||||
int3store(ptr,tmp);
|
||||
return error;
|
||||
}
|
||||
|
||||
|
@ -3302,58 +3308,43 @@ int Field_long::store(const char *from,uint len,CHARSET_INFO *cs)
|
|||
int error;
|
||||
char *end;
|
||||
|
||||
tmp_scan= cs->cset->scan(cs, from, from+len, MY_SEQ_SPACES);
|
||||
len-= tmp_scan;
|
||||
from+= tmp_scan;
|
||||
|
||||
end= (char*) from+len;
|
||||
tmp= cs->cset->strtoll10(cs, from, &end, &error);
|
||||
|
||||
if (error != MY_ERRNO_EDOM)
|
||||
if (unsigned_flag)
|
||||
{
|
||||
if (unsigned_flag)
|
||||
ulonglong tmp= cs->cset->strntoull10rnd(cs, from, len, 1, &end, &error);
|
||||
if (error == MY_ERRNO_ERANGE || tmp > (ulonglong) UINT_MAX32)
|
||||
{
|
||||
if (error < 0)
|
||||
{
|
||||
error= 1;
|
||||
tmp= 0;
|
||||
}
|
||||
else if ((ulonglong) tmp > (ulonglong) UINT_MAX32)
|
||||
{
|
||||
tmp= UINT_MAX32;
|
||||
error= 1;
|
||||
}
|
||||
else
|
||||
error= 0;
|
||||
set_if_smaller(tmp, (ulonglong) UINT_MAX32);
|
||||
set_warning(MYSQL_ERROR::WARN_LEVEL_WARN, ER_WARN_DATA_OUT_OF_RANGE, 1);
|
||||
error= 1;
|
||||
}
|
||||
else if (table->in_use->count_cuted_fields && check_int(from,len,end,cs))
|
||||
error= 1;
|
||||
else
|
||||
{
|
||||
if (error < 0)
|
||||
{
|
||||
error= 0;
|
||||
if (tmp < INT_MIN32)
|
||||
{
|
||||
tmp= INT_MIN32;
|
||||
error= 1;
|
||||
}
|
||||
}
|
||||
else if (tmp > INT_MAX32)
|
||||
{
|
||||
tmp= INT_MAX32;
|
||||
error= 1;
|
||||
}
|
||||
}
|
||||
error= 0;
|
||||
store_tmp= (long) tmp;
|
||||
}
|
||||
if (error)
|
||||
else
|
||||
{
|
||||
error= error != MY_ERRNO_EDOM ? 1 : 2;
|
||||
set_warning(MYSQL_ERROR::WARN_LEVEL_WARN, ER_WARN_DATA_OUT_OF_RANGE, 1);
|
||||
longlong tmp= cs->cset->strntoull10rnd(cs, from, len, 0, &end, &error);
|
||||
if (tmp < INT_MIN32)
|
||||
{
|
||||
tmp= INT_MIN32;
|
||||
set_warning(MYSQL_ERROR::WARN_LEVEL_WARN, ER_WARN_DATA_OUT_OF_RANGE, 1);
|
||||
error= 1;
|
||||
}
|
||||
else if (tmp > INT_MAX32)
|
||||
{
|
||||
tmp=INT_MAX32;
|
||||
set_warning(MYSQL_ERROR::WARN_LEVEL_WARN, ER_WARN_DATA_OUT_OF_RANGE, 1);
|
||||
error= 1;
|
||||
}
|
||||
else if (table->in_use->count_cuted_fields && check_int(from,len,end,cs))
|
||||
error= 1;
|
||||
else
|
||||
error= 0;
|
||||
store_tmp= (long) tmp;
|
||||
}
|
||||
else if (from+len != end && table->in_use->count_cuted_fields &&
|
||||
check_int(from,len,end,cs))
|
||||
error= 2;
|
||||
|
||||
store_tmp= (long) tmp;
|
||||
#ifdef WORDS_BIGENDIAN
|
||||
if (table->s->db_low_byte_first)
|
||||
{
|
||||
|
@ -3595,33 +3586,20 @@ void Field_long::sql_type(String &res) const
|
|||
int Field_longlong::store(const char *from,uint len,CHARSET_INFO *cs)
|
||||
{
|
||||
ASSERT_COLUMN_MARKED_FOR_WRITE;
|
||||
longlong tmp;
|
||||
int error= 0;
|
||||
char *end;
|
||||
ulonglong tmp;
|
||||
|
||||
tmp= cs->cset->scan(cs, from, from+len, MY_SEQ_SPACES);
|
||||
len-= (uint)tmp;
|
||||
from+= tmp;
|
||||
if (unsigned_flag)
|
||||
{
|
||||
if (!len || test_if_minus(cs, from, from + len))
|
||||
{
|
||||
tmp=0; // Set negative to 0
|
||||
error= 1;
|
||||
}
|
||||
else
|
||||
tmp=(longlong) my_strntoull(cs,from,len,10,&end,&error);
|
||||
}
|
||||
else
|
||||
tmp=my_strntoll(cs,from,len,10,&end,&error);
|
||||
if (error)
|
||||
tmp= cs->cset->strntoull10rnd(cs,from,len,unsigned_flag,&end,&error);
|
||||
if (error == MY_ERRNO_ERANGE)
|
||||
{
|
||||
set_warning(MYSQL_ERROR::WARN_LEVEL_WARN, ER_WARN_DATA_OUT_OF_RANGE, 1);
|
||||
error= 1;
|
||||
}
|
||||
else if (from+len != end && table->in_use->count_cuted_fields &&
|
||||
check_int(from,len,end,cs))
|
||||
error= 2;
|
||||
else if (table->in_use->count_cuted_fields && check_int(from,len,end,cs))
|
||||
error= 1;
|
||||
else
|
||||
error= 0;
|
||||
#ifdef WORDS_BIGENDIAN
|
||||
if (table->s->db_low_byte_first)
|
||||
{
|
||||
|
@ -9172,7 +9150,7 @@ create_field::create_field(Field *old_field,Field *orig_field)
|
|||
case 3: sql_type= FIELD_TYPE_MEDIUM_BLOB; break;
|
||||
default: sql_type= FIELD_TYPE_LONG_BLOB; break;
|
||||
}
|
||||
length=(length+charset->mbmaxlen-1) / charset->mbmaxlen;
|
||||
length/= charset->mbmaxlen;
|
||||
key_length/= charset->mbmaxlen;
|
||||
break;
|
||||
case MYSQL_TYPE_STRING:
|
||||
|
|
|
@ -427,6 +427,21 @@ static void do_varstring2(Copy_field *copy)
|
|||
length);
|
||||
}
|
||||
|
||||
|
||||
static void do_varstring2_mb(Copy_field *copy)
|
||||
{
|
||||
int well_formed_error;
|
||||
CHARSET_INFO *cs= copy->from_field->charset();
|
||||
uint char_length= (copy->to_length - HA_KEY_BLOB_LENGTH) / cs->mbmaxlen;
|
||||
uint from_length= uint2korr(copy->from_ptr);
|
||||
const char *from_beg= copy->from_ptr + HA_KEY_BLOB_LENGTH;
|
||||
uint length= cs->cset->well_formed_len(cs, from_beg, from_beg + from_length,
|
||||
char_length, &well_formed_error);
|
||||
int2store(copy->to_ptr, length);
|
||||
memcpy(copy->to_ptr+HA_KEY_BLOB_LENGTH, from_beg, length);
|
||||
}
|
||||
|
||||
|
||||
/***************************************************************************
|
||||
** The different functions that fills in a Copy_field class
|
||||
***************************************************************************/
|
||||
|
@ -586,7 +601,8 @@ void (*Copy_field::get_copy_func(Field *to,Field *from))(Copy_field*)
|
|||
return do_field_string;
|
||||
if (to_length != from_length)
|
||||
return (((Field_varstring*) to)->length_bytes == 1 ?
|
||||
do_varstring1 : do_varstring2);
|
||||
do_varstring1 : (from->charset()->mbmaxlen == 1 ?
|
||||
do_varstring2 : do_varstring2_mb));
|
||||
}
|
||||
else if (to_length < from_length)
|
||||
return (from->charset()->mbmaxlen == 1 ?
|
||||
|
|
|
@ -105,6 +105,7 @@ typedef struct my_xpath_st
|
|||
String *context_cache; /* last context provider */
|
||||
String *pxml; /* Parsed XML, an array of MY_XML_NODE */
|
||||
CHARSET_INFO *cs; /* character set/collation string comparison */
|
||||
int error;
|
||||
} MY_XPATH;
|
||||
|
||||
|
||||
|
@ -913,7 +914,9 @@ static Item *eq_func_reverse(int oper, Item *a, Item *b)
|
|||
RETURN
|
||||
The newly created item.
|
||||
*/
|
||||
static Item *create_comparator(MY_XPATH *xpath, int oper, Item *a, Item *b)
|
||||
static Item *create_comparator(MY_XPATH *xpath,
|
||||
int oper, MY_XPATH_LEX *context,
|
||||
Item *a, Item *b)
|
||||
{
|
||||
if (a->type() != Item::XPATH_NODESET &&
|
||||
b->type() != Item::XPATH_NODESET)
|
||||
|
@ -923,6 +926,13 @@ static Item *create_comparator(MY_XPATH *xpath, int oper, Item *a, Item *b)
|
|||
else if (a->type() == Item::XPATH_NODESET &&
|
||||
b->type() == Item::XPATH_NODESET)
|
||||
{
|
||||
uint len= context->end - context->beg;
|
||||
set_if_bigger(len, 32);
|
||||
my_printf_error(ER_UNKNOWN_ERROR,
|
||||
"XPATH error: "
|
||||
"comparison of two nodesets is not supported: '%.*s'",
|
||||
MYF(0), len, context->beg);
|
||||
|
||||
return 0; // TODO: Comparison of two nodesets
|
||||
}
|
||||
else
|
||||
|
@ -1430,7 +1440,7 @@ my_xpath_lex_scan(MY_XPATH *xpath,
|
|||
static int
|
||||
my_xpath_parse_term(MY_XPATH *xpath, int term)
|
||||
{
|
||||
if (xpath->lasttok.term == term)
|
||||
if (xpath->lasttok.term == term && !xpath->error)
|
||||
{
|
||||
xpath->prevtok= xpath->lasttok;
|
||||
my_xpath_lex_scan(xpath, &xpath->lasttok,
|
||||
|
@ -1558,8 +1568,9 @@ static int my_xpath_parse_AbsoluteLocationPath(MY_XPATH *xpath)
|
|||
return my_xpath_parse_RelativeLocationPath(xpath);
|
||||
}
|
||||
|
||||
return my_xpath_parse_term(xpath, MY_XPATH_LEX_EOF) ||
|
||||
my_xpath_parse_RelativeLocationPath(xpath);
|
||||
my_xpath_parse_RelativeLocationPath(xpath);
|
||||
|
||||
return (xpath->error == 0);
|
||||
}
|
||||
|
||||
|
||||
|
@ -1596,7 +1607,10 @@ static int my_xpath_parse_RelativeLocationPath(MY_XPATH *xpath)
|
|||
"*", 1,
|
||||
xpath->pxml, 1);
|
||||
if (!my_xpath_parse_Step(xpath))
|
||||
{
|
||||
xpath->error= 1;
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
|
@ -1633,10 +1647,16 @@ my_xpath_parse_AxisSpecifier_NodeTest_opt_Predicate_list(MY_XPATH *xpath)
|
|||
xpath->context_cache= context_cache;
|
||||
|
||||
if(!my_xpath_parse_PredicateExpr(xpath))
|
||||
{
|
||||
xpath->error= 1;
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (!my_xpath_parse_term(xpath, MY_XPATH_LEX_RB))
|
||||
{
|
||||
xpath->error= 1;
|
||||
return 0;
|
||||
}
|
||||
|
||||
xpath->item= nodeset2bool(xpath, xpath->item);
|
||||
|
||||
|
@ -1893,7 +1913,10 @@ static int my_xpath_parse_UnionExpr(MY_XPATH *xpath)
|
|||
|
||||
if (!my_xpath_parse_PathExpr(xpath)
|
||||
|| xpath->item->type() != Item::XPATH_NODESET)
|
||||
{
|
||||
xpath->error= 1;
|
||||
return 0;
|
||||
}
|
||||
xpath->item= new Item_nodeset_func_union(prev, xpath->item, xpath->pxml);
|
||||
}
|
||||
return 1;
|
||||
|
@ -1929,6 +1952,7 @@ static int my_xpath_parse_PathExpr(MY_XPATH *xpath)
|
|||
{
|
||||
return my_xpath_parse_LocationPath(xpath) ||
|
||||
my_xpath_parse_FilterExpr_opt_slashes_RelativeLocationPath(xpath);
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
@ -1975,7 +1999,10 @@ static int my_xpath_parse_OrExpr(MY_XPATH *xpath)
|
|||
{
|
||||
Item *prev= xpath->item;
|
||||
if (!my_xpath_parse_AndExpr(xpath))
|
||||
{
|
||||
return 0;
|
||||
xpath->error= 1;
|
||||
}
|
||||
xpath->item= new Item_cond_or(nodeset2bool(xpath, prev),
|
||||
nodeset2bool(xpath, xpath->item));
|
||||
}
|
||||
|
@ -2003,7 +2030,10 @@ static int my_xpath_parse_AndExpr(MY_XPATH *xpath)
|
|||
{
|
||||
Item *prev= xpath->item;
|
||||
if (!my_xpath_parse_EqualityExpr(xpath))
|
||||
{
|
||||
xpath->error= 1;
|
||||
return 0;
|
||||
}
|
||||
|
||||
xpath->item= new Item_cond_and(nodeset2bool(xpath,prev),
|
||||
nodeset2bool(xpath,xpath->item));
|
||||
|
@ -2057,17 +2087,26 @@ static int my_xpath_parse_EqualityOperator(MY_XPATH *xpath)
|
|||
}
|
||||
static int my_xpath_parse_EqualityExpr(MY_XPATH *xpath)
|
||||
{
|
||||
MY_XPATH_LEX operator_context;
|
||||
if (!my_xpath_parse_RelationalExpr(xpath))
|
||||
return 0;
|
||||
|
||||
operator_context= xpath->lasttok;
|
||||
while (my_xpath_parse_EqualityOperator(xpath))
|
||||
{
|
||||
Item *prev= xpath->item;
|
||||
int oper= xpath->extra;
|
||||
if (!my_xpath_parse_RelationalExpr(xpath))
|
||||
{
|
||||
xpath->error= 1;
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (!(xpath->item= create_comparator(xpath, oper, &operator_context,
|
||||
prev, xpath->item)))
|
||||
return 0;
|
||||
|
||||
if (!(xpath->item= create_comparator(xpath, oper, prev, xpath->item)))
|
||||
return 0;
|
||||
operator_context= xpath->lasttok;
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
|
@ -2109,18 +2148,25 @@ static int my_xpath_parse_RelationalOperator(MY_XPATH *xpath)
|
|||
}
|
||||
static int my_xpath_parse_RelationalExpr(MY_XPATH *xpath)
|
||||
{
|
||||
MY_XPATH_LEX operator_context;
|
||||
if (!my_xpath_parse_AdditiveExpr(xpath))
|
||||
return 0;
|
||||
operator_context= xpath->lasttok;
|
||||
while (my_xpath_parse_RelationalOperator(xpath))
|
||||
{
|
||||
Item *prev= xpath->item;
|
||||
int oper= xpath->extra;
|
||||
|
||||
if (!my_xpath_parse_AdditiveExpr(xpath))
|
||||
{
|
||||
xpath->error= 1;
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (!(xpath->item= create_comparator(xpath, oper, prev, xpath->item)))
|
||||
if (!(xpath->item= create_comparator(xpath, oper, &operator_context,
|
||||
prev, xpath->item)))
|
||||
return 0;
|
||||
operator_context= xpath->lasttok;
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
|
@ -2153,7 +2199,10 @@ static int my_xpath_parse_AdditiveExpr(MY_XPATH *xpath)
|
|||
int oper= xpath->prevtok.term;
|
||||
Item *prev= xpath->item;
|
||||
if (!my_xpath_parse_MultiplicativeExpr(xpath))
|
||||
{
|
||||
xpath->error= 1;
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (oper == MY_XPATH_LEX_PLUS)
|
||||
xpath->item= new Item_func_plus(prev, xpath->item);
|
||||
|
@ -2198,7 +2247,10 @@ static int my_xpath_parse_MultiplicativeExpr(MY_XPATH *xpath)
|
|||
int oper= xpath->prevtok.term;
|
||||
Item *prev= xpath->item;
|
||||
if (!my_xpath_parse_UnaryExpr(xpath))
|
||||
{
|
||||
xpath->error= 1;
|
||||
return 0;
|
||||
}
|
||||
switch (oper)
|
||||
{
|
||||
case MY_XPATH_LEX_ASTERISK:
|
||||
|
|
|
@ -6371,6 +6371,7 @@ static MY_CHARSET_HANDLER my_charset_big5_handler=
|
|||
my_strntoull_8bit,
|
||||
my_strntod_8bit,
|
||||
my_strtoll10_8bit,
|
||||
my_strntoull10rnd_8bit,
|
||||
my_scan_8bit
|
||||
};
|
||||
|
||||
|
|
|
@ -518,6 +518,7 @@ static MY_CHARSET_HANDLER my_charset_handler=
|
|||
my_strntoull_8bit,
|
||||
my_strntod_8bit,
|
||||
my_strtoll10_8bit,
|
||||
my_strntoull10rnd_8bit,
|
||||
my_scan_8bit
|
||||
};
|
||||
|
||||
|
|
|
@ -5493,6 +5493,7 @@ static MY_CHARSET_HANDLER my_charset_handler=
|
|||
my_strntoull_8bit,
|
||||
my_strntod_8bit,
|
||||
my_strtoll10_8bit,
|
||||
my_strntoull10rnd_8bit,
|
||||
my_scan_8bit
|
||||
};
|
||||
|
||||
|
|
|
@ -8712,6 +8712,7 @@ static MY_CHARSET_HANDLER my_charset_handler=
|
|||
my_strntoull_8bit,
|
||||
my_strntod_8bit,
|
||||
my_strtoll10_8bit,
|
||||
my_strntoull10rnd_8bit,
|
||||
my_scan_8bit
|
||||
};
|
||||
|
||||
|
|
|
@ -8678,6 +8678,7 @@ static MY_CHARSET_HANDLER my_charset_handler=
|
|||
my_strntoull_8bit,
|
||||
my_strntod_8bit,
|
||||
my_strtoll10_8bit,
|
||||
my_strntoull10rnd_8bit,
|
||||
my_scan_8bit
|
||||
};
|
||||
|
||||
|
|
|
@ -5763,6 +5763,7 @@ static MY_CHARSET_HANDLER my_charset_handler=
|
|||
my_strntoull_8bit,
|
||||
my_strntod_8bit,
|
||||
my_strtoll10_8bit,
|
||||
my_strntoull10rnd_8bit,
|
||||
my_scan_8bit
|
||||
};
|
||||
|
||||
|
|
|
@ -10016,6 +10016,7 @@ static MY_CHARSET_HANDLER my_charset_handler=
|
|||
my_strntoull_8bit,
|
||||
my_strntod_8bit,
|
||||
my_strtoll10_8bit,
|
||||
my_strntoull10rnd_8bit,
|
||||
my_scan_8bit
|
||||
};
|
||||
|
||||
|
|
|
@ -412,6 +412,7 @@ static MY_CHARSET_HANDLER my_charset_handler=
|
|||
my_strntoull_8bit,
|
||||
my_strntod_8bit,
|
||||
my_strtoll10_8bit,
|
||||
my_strntoull10rnd_8bit,
|
||||
my_scan_8bit
|
||||
};
|
||||
|
||||
|
|
|
@ -17,6 +17,7 @@
|
|||
#include <my_global.h>
|
||||
#include "m_string.h"
|
||||
#include "m_ctype.h"
|
||||
#include "my_sys.h" /* Needed for MY_ERRNO_ERANGE */
|
||||
#include <errno.h>
|
||||
|
||||
#include "stdarg.h"
|
||||
|
@ -1367,6 +1368,341 @@ int my_mb_ctype_8bit(CHARSET_INFO *cs, int *ctype,
|
|||
}
|
||||
|
||||
|
||||
#undef ULONGLONG_MAX
|
||||
/*
|
||||
Needed under MetroWerks Compiler, since MetroWerks compiler does not
|
||||
properly handle a constant expression containing a mod operator
|
||||
*/
|
||||
#if defined(__NETWARE__) && defined(__MWERKS__)
|
||||
static ulonglong ulonglong_max= ~(ulonglong) 0;
|
||||
#define ULONGLONG_MAX ulonglong_max
|
||||
#else
|
||||
#define ULONGLONG_MAX (~(ulonglong) 0)
|
||||
#endif /* __NETWARE__ && __MWERKS__ */
|
||||
|
||||
|
||||
#define CUTOFF (ULONGLONG_MAX / 10)
|
||||
#define CUTLIM (ULONGLONG_MAX % 10)
|
||||
#define DIGITS_IN_ULONGLONG 20
|
||||
|
||||
static ulonglong d10[DIGITS_IN_ULONGLONG]=
|
||||
{
|
||||
1,
|
||||
10,
|
||||
100,
|
||||
1000,
|
||||
10000,
|
||||
100000,
|
||||
1000000,
|
||||
10000000,
|
||||
100000000,
|
||||
1000000000,
|
||||
10000000000ULL,
|
||||
100000000000ULL,
|
||||
1000000000000ULL,
|
||||
10000000000000ULL,
|
||||
100000000000000ULL,
|
||||
1000000000000000ULL,
|
||||
10000000000000000ULL,
|
||||
100000000000000000ULL,
|
||||
1000000000000000000ULL,
|
||||
10000000000000000000ULL
|
||||
};
|
||||
|
||||
|
||||
/*
|
||||
|
||||
Convert a string to unsigned long long integer value
|
||||
with rounding.
|
||||
|
||||
SYNOPSYS
|
||||
my_strntoull10_8bit()
|
||||
cs in pointer to character set
|
||||
str in pointer to the string to be converted
|
||||
length in string length
|
||||
unsigned_flag in whether the number is unsigned
|
||||
endptr out pointer to the stop character
|
||||
error out returned error code
|
||||
|
||||
DESCRIPTION
|
||||
This function takes the decimal representation of integer number
|
||||
from string str and converts it to an signed or unsigned
|
||||
long long integer value.
|
||||
Space characters and tab are ignored.
|
||||
A sign character might precede the digit characters.
|
||||
The number may have any number of pre-zero digits.
|
||||
The number may have decimal point and exponent.
|
||||
Rounding is always done in "away from zero" style:
|
||||
0.5 -> 1
|
||||
-0.5 -> -1
|
||||
|
||||
The function stops reading the string str after "length" bytes
|
||||
or at the first character that is not a part of correct number syntax:
|
||||
|
||||
<signed numeric literal> ::=
|
||||
[ <sign> ] <exact numeric literal> [ E [ <sign> ] <unsigned integer> ]
|
||||
|
||||
<exact numeric literal> ::=
|
||||
<unsigned integer> [ <period> [ <unsigned integer> ] ]
|
||||
| <period> <unsigned integer>
|
||||
<unsigned integer> ::= <digit>...
|
||||
|
||||
RETURN VALUES
|
||||
Value of string as a signed/unsigned longlong integer
|
||||
|
||||
endptr cannot be NULL. The function will store the end pointer
|
||||
to the stop character here.
|
||||
|
||||
The error parameter contains information how things went:
|
||||
0 ok
|
||||
ERANGE If the the value of the converted number is out of range
|
||||
In this case the return value is:
|
||||
- ULONGLONG_MAX if unsigned_flag and the number was too big
|
||||
- 0 if unsigned_flag and the number was negative
|
||||
- LONGLONG_MAX if no unsigned_flag and the number is too big
|
||||
- LONGLONG_MIN if no unsigned_flag and the number it too big negative
|
||||
|
||||
EDOM If the string didn't contain any digits.
|
||||
In this case the return value is 0.
|
||||
*/
|
||||
|
||||
ulonglong
|
||||
my_strntoull10rnd_8bit(CHARSET_INFO *cs __attribute__((unused)),
|
||||
const char *str, uint length, int unsigned_flag,
|
||||
char **endptr, int *error)
|
||||
{
|
||||
const char *dot, *end9, *beg, *end= str + length;
|
||||
ulonglong ull;
|
||||
ulong ul;
|
||||
unsigned char ch;
|
||||
int shift= 0, digits= 0, negative, addon;
|
||||
|
||||
/* Skip leading spaces and tabs */
|
||||
for ( ; str < end && (*str == ' ' || *str == '\t') ; str++);
|
||||
|
||||
if (str >= end)
|
||||
goto ret_edom;
|
||||
|
||||
if ((negative= (*str == '-')) || *str=='+') /* optional sign */
|
||||
{
|
||||
if (++str == end)
|
||||
goto ret_edom;
|
||||
}
|
||||
|
||||
beg= str;
|
||||
end9= (str + 9) > end ? end : (str + 9);
|
||||
/* Accumulate small number into ulong, for performance purposes */
|
||||
for (ul= 0 ; str < end9 && (ch= (unsigned char) (*str - '0')) < 10; str++)
|
||||
{
|
||||
ul= ul * 10 + ch;
|
||||
}
|
||||
|
||||
if (str >= end) /* Small number without dots and expanents */
|
||||
{
|
||||
*endptr= (char*) str;
|
||||
if (negative)
|
||||
{
|
||||
if (unsigned_flag)
|
||||
{
|
||||
*error= ul ? MY_ERRNO_ERANGE : 0;
|
||||
return 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
*error= 0;
|
||||
return (ulonglong) (longlong) (long) -ul;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
*error=0;
|
||||
return (ulonglong) ul;
|
||||
}
|
||||
}
|
||||
|
||||
digits= str - beg;
|
||||
|
||||
/* Continue to accumulate into ulonglong */
|
||||
for (dot= NULL, ull= ul; str < end; str++)
|
||||
{
|
||||
if ((ch= (unsigned char) (*str - '0')) < 10)
|
||||
{
|
||||
if (ull < CUTOFF || (ull == CUTOFF && ch <= CUTLIM))
|
||||
{
|
||||
ull= ull * 10 + ch;
|
||||
digits++;
|
||||
continue;
|
||||
}
|
||||
/*
|
||||
Adding the next digit would overflow.
|
||||
Remember the next digit in "addon", for rounding.
|
||||
Scan all digits with an optional single dot.
|
||||
*/
|
||||
if (ull == CUTOFF)
|
||||
{
|
||||
ull= ULONGLONG_MAX;
|
||||
addon= 1;
|
||||
str++;
|
||||
}
|
||||
else
|
||||
addon= (*str >= '5');
|
||||
for ( ; str < end && (ch= (unsigned char) (*str - '0')) < 10; str++)
|
||||
{
|
||||
if (!dot)
|
||||
shift++;
|
||||
}
|
||||
if (str < end && *str == '.' && !dot)
|
||||
{
|
||||
str++;
|
||||
for ( ; str < end && (ch= (unsigned char) (*str - '0')) < 10; str++);
|
||||
}
|
||||
goto exp;
|
||||
}
|
||||
|
||||
if (*str == '.')
|
||||
{
|
||||
if (dot)
|
||||
{
|
||||
/* The second dot character */
|
||||
addon= 0;
|
||||
goto exp;
|
||||
}
|
||||
else
|
||||
{
|
||||
dot= str + 1;
|
||||
}
|
||||
continue;
|
||||
}
|
||||
|
||||
/* Unknown character, exit the loop */
|
||||
break;
|
||||
}
|
||||
shift= dot ? dot - str : 0; /* Right shift */
|
||||
addon= 0;
|
||||
|
||||
exp: /* [ E [ <sign> ] <unsigned integer> ] */
|
||||
|
||||
if (!digits)
|
||||
{
|
||||
str= beg;
|
||||
goto ret_edom;
|
||||
}
|
||||
|
||||
if (str < end && (*str == 'e' || *str == 'E'))
|
||||
{
|
||||
str++;
|
||||
if (str < end)
|
||||
{
|
||||
int negative_exp, exp;
|
||||
if ((negative_exp= (*str == '-')) || *str=='+')
|
||||
{
|
||||
if (++str == end)
|
||||
goto ret_sign;
|
||||
}
|
||||
for (exp= 0 ;
|
||||
str < end && (ch= (unsigned char) (*str - '0')) < 10;
|
||||
str++)
|
||||
{
|
||||
exp= exp * 10 + ch;
|
||||
}
|
||||
shift+= negative_exp ? -exp : exp;
|
||||
}
|
||||
}
|
||||
|
||||
if (shift == 0) /* No shift, check addon digit */
|
||||
{
|
||||
if (addon)
|
||||
{
|
||||
if (ull == ULONGLONG_MAX)
|
||||
goto ret_too_big;
|
||||
ull++;
|
||||
}
|
||||
goto ret_sign;
|
||||
}
|
||||
|
||||
if (shift < 0) /* Right shift */
|
||||
{
|
||||
ulonglong d, r;
|
||||
|
||||
if (-shift >= DIGITS_IN_ULONGLONG)
|
||||
goto ret_zero; /* Exponent is a big negative number, return 0 */
|
||||
|
||||
d= d10[-shift];
|
||||
r= (ull % d) * 2;
|
||||
ull /= d;
|
||||
if (r >= d)
|
||||
ull++;
|
||||
goto ret_sign;
|
||||
}
|
||||
|
||||
if (shift > DIGITS_IN_ULONGLONG) /* Huge left shift */
|
||||
{
|
||||
if (!ull)
|
||||
goto ret_sign;
|
||||
goto ret_too_big;
|
||||
}
|
||||
|
||||
for ( ; shift > 0; shift--, ull*= 10) /* Left shift */
|
||||
{
|
||||
if (ull > CUTOFF)
|
||||
goto ret_too_big; /* Overflow, number too big */
|
||||
}
|
||||
|
||||
ret_sign:
|
||||
*endptr= (char*) str;
|
||||
|
||||
if (!unsigned_flag)
|
||||
{
|
||||
if (negative)
|
||||
{
|
||||
if (ull > (ulonglong) LONGLONG_MIN)
|
||||
{
|
||||
*error= MY_ERRNO_ERANGE;
|
||||
return (ulonglong) LONGLONG_MIN;
|
||||
}
|
||||
*error= 0;
|
||||
return (ulonglong) -ull;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (ull > (ulonglong) LONGLONG_MAX)
|
||||
{
|
||||
*error= MY_ERRNO_ERANGE;
|
||||
return (ulonglong) LONGLONG_MAX;
|
||||
}
|
||||
*error= 0;
|
||||
return ull;
|
||||
}
|
||||
}
|
||||
|
||||
/* Unsigned number */
|
||||
if (negative && ull)
|
||||
{
|
||||
*error= MY_ERRNO_ERANGE;
|
||||
return 0;
|
||||
}
|
||||
*error= 0;
|
||||
return ull;
|
||||
|
||||
ret_zero:
|
||||
*endptr= (char*) str;
|
||||
*error= 0;
|
||||
return 0;
|
||||
|
||||
ret_edom:
|
||||
*endptr= (char*) str;
|
||||
*error= MY_ERRNO_EDOM;
|
||||
return 0;
|
||||
|
||||
ret_too_big:
|
||||
*endptr= (char*) str;
|
||||
*error= MY_ERRNO_ERANGE;
|
||||
return unsigned_flag ?
|
||||
ULONGLONG_MAX :
|
||||
negative ? (ulonglong) LONGLONG_MIN : (ulonglong) LONGLONG_MAX;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
Check if a constant can be propagated
|
||||
|
||||
|
@ -1448,6 +1784,7 @@ MY_CHARSET_HANDLER my_charset_8bit_handler=
|
|||
my_strntoull_8bit,
|
||||
my_strntod_8bit,
|
||||
my_strtoll10_8bit,
|
||||
my_strntoull10rnd_8bit,
|
||||
my_scan_8bit
|
||||
};
|
||||
|
||||
|
|
|
@ -4664,6 +4664,7 @@ static MY_CHARSET_HANDLER my_charset_handler=
|
|||
my_strntoull_8bit,
|
||||
my_strntod_8bit,
|
||||
my_strtoll10_8bit,
|
||||
my_strntoull10rnd_8bit,
|
||||
my_scan_8bit
|
||||
};
|
||||
|
||||
|
|
|
@ -892,6 +892,7 @@ static MY_CHARSET_HANDLER my_charset_handler=
|
|||
my_strntoull_8bit,
|
||||
my_strntod_8bit,
|
||||
my_strtoll10_8bit,
|
||||
my_strntoull10rnd_8bit,
|
||||
my_scan_8bit
|
||||
};
|
||||
|
||||
|
|
|
@ -974,6 +974,35 @@ double my_strntod_ucs2(CHARSET_INFO *cs __attribute__((unused)),
|
|||
}
|
||||
|
||||
|
||||
ulonglong my_strntoull10rnd_ucs2(CHARSET_INFO *cs __attribute__((unused)),
|
||||
const char *nptr, uint length, int unsign_fl,
|
||||
char **endptr, int *err)
|
||||
{
|
||||
char buf[256], *b= buf;
|
||||
ulonglong res;
|
||||
const uchar *end, *s= (const uchar*) nptr;
|
||||
my_wc_t wc;
|
||||
int cnv;
|
||||
|
||||
/* Cut too long strings */
|
||||
if (length >= sizeof(buf))
|
||||
length= sizeof(buf)-1;
|
||||
end= s + length;
|
||||
|
||||
while ((cnv= cs->cset->mb_wc(cs,&wc,s,end)) > 0)
|
||||
{
|
||||
s+= cnv;
|
||||
if (wc > (int) (uchar) 'e' || !wc)
|
||||
break; /* Can't be a number part */
|
||||
*b++= (char) wc;
|
||||
}
|
||||
|
||||
res= my_strntoull10rnd_8bit(cs, buf, b - buf, unsign_fl, endptr, err);
|
||||
*endptr= (char*) nptr + 2 * (uint) (*endptr- buf);
|
||||
return res;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
This is a fast version optimized for the case of radix 10 / -10
|
||||
*/
|
||||
|
@ -1630,6 +1659,7 @@ MY_CHARSET_HANDLER my_charset_ucs2_handler=
|
|||
my_strntoull_ucs2,
|
||||
my_strntod_ucs2,
|
||||
my_strtoll10_ucs2,
|
||||
my_strntoull10rnd_ucs2,
|
||||
my_scan_ucs2
|
||||
};
|
||||
|
||||
|
|
|
@ -8546,6 +8546,7 @@ static MY_CHARSET_HANDLER my_charset_handler=
|
|||
my_strntoull_8bit,
|
||||
my_strntod_8bit,
|
||||
my_strtoll10_8bit,
|
||||
my_strntoull10rnd_8bit,
|
||||
my_scan_8bit
|
||||
};
|
||||
|
||||
|
|
|
@ -2551,6 +2551,7 @@ MY_CHARSET_HANDLER my_charset_utf8_handler=
|
|||
my_strntoull_8bit,
|
||||
my_strntod_8bit,
|
||||
my_strtoll10_8bit,
|
||||
my_strntoull10rnd_8bit,
|
||||
my_scan_8bit
|
||||
};
|
||||
|
||||
|
|
|
@ -19,6 +19,7 @@
|
|||
#include "my_xml.h"
|
||||
|
||||
|
||||
#define MY_XML_UNKNOWN 'U'
|
||||
#define MY_XML_EOF 'E'
|
||||
#define MY_XML_STRING 'S'
|
||||
#define MY_XML_IDENT 'I'
|
||||
|
@ -39,6 +40,46 @@ typedef struct xml_attr_st
|
|||
} MY_XML_ATTR;
|
||||
|
||||
|
||||
/*
|
||||
XML ctype:
|
||||
*/
|
||||
#define MY_XML_ID0 0x01 /* Identifier initial character */
|
||||
#define MY_XML_ID1 0x02 /* Identifier medial character */
|
||||
#define MY_XML_SPC 0x08 /* Spacing character */
|
||||
|
||||
|
||||
/*
|
||||
http://www.w3.org/TR/REC-xml/
|
||||
[4] NameChar ::= Letter | Digit | '.' | '-' | '_' | ':' |
|
||||
CombiningChar | Extender
|
||||
[5] Name ::= (Letter | '_' | ':') (NameChar)*
|
||||
*/
|
||||
|
||||
static char my_xml_ctype[256]=
|
||||
{
|
||||
/*00*/ 0,0,0,0,0,0,0,0,0,8,8,0,0,8,0,0,
|
||||
/*10*/ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
/*20*/ 8,0,0,0,0,0,0,0,0,0,0,0,0,2,2,0, /* !"#$%&'()*+,-./ */
|
||||
/*30*/ 2,2,2,2,2,2,2,2,2,2,3,0,0,0,0,0, /* 0123456789:;<=>? */
|
||||
/*40*/ 0,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3, /* @ABCDEFGHIJKLMNO */
|
||||
/*50*/ 3,3,3,3,3,3,3,3,3,3,3,0,0,0,0,3, /* PQRSTUVWXYZ[\]^_ */
|
||||
/*60*/ 0,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3, /* `abcdefghijklmno */
|
||||
/*70*/ 3,3,3,3,3,3,3,3,3,3,3,0,0,0,0,0, /* pqrstuvwxyz{|}~ */
|
||||
/*80*/ 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,
|
||||
/*90*/ 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,
|
||||
/*A0*/ 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,
|
||||
/*B0*/ 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,
|
||||
/*C0*/ 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,
|
||||
/*D0*/ 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,
|
||||
/*E0*/ 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,
|
||||
/*F0*/ 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3
|
||||
};
|
||||
|
||||
#define my_xml_is_space(c) (my_xml_ctype[(uchar) (c)] & MY_XML_SPC)
|
||||
#define my_xml_is_id0(c) (my_xml_ctype[(uchar) (c)] & MY_XML_ID0)
|
||||
#define my_xml_is_id1(c) (my_xml_ctype[(uchar) (c)] & MY_XML_ID1)
|
||||
|
||||
|
||||
static const char *lex2str(int lex)
|
||||
{
|
||||
switch(lex)
|
||||
|
@ -56,13 +97,13 @@ static const char *lex2str(int lex)
|
|||
case MY_XML_QUESTION: return "'?'";
|
||||
case MY_XML_EXCLAM: return "'!'";
|
||||
}
|
||||
return "UNKNOWN";
|
||||
return "unknown token";
|
||||
}
|
||||
|
||||
static void my_xml_norm_text(MY_XML_ATTR *a)
|
||||
{
|
||||
for ( ; (a->beg < a->end) && strchr(" \t\r\n",a->beg[0]) ; a->beg++ );
|
||||
for ( ; (a->beg < a->end) && strchr(" \t\r\n",a->end[-1]) ; a->end-- );
|
||||
for ( ; (a->beg < a->end) && my_xml_is_space(a->beg[0]) ; a->beg++ );
|
||||
for ( ; (a->beg < a->end) && my_xml_is_space(a->end[-1]) ; a->end-- );
|
||||
}
|
||||
|
||||
|
||||
|
@ -70,7 +111,7 @@ static int my_xml_scan(MY_XML_PARSER *p,MY_XML_ATTR *a)
|
|||
{
|
||||
int lex;
|
||||
|
||||
for( ; ( p->cur < p->end) && strchr(" \t\r\n",p->cur[0]) ; p->cur++);
|
||||
for( ; ( p->cur < p->end) && my_xml_is_space(p->cur[0]) ; p->cur++);
|
||||
|
||||
if (p->cur >= p->end)
|
||||
{
|
||||
|
@ -124,16 +165,17 @@ static int my_xml_scan(MY_XML_PARSER *p,MY_XML_ATTR *a)
|
|||
my_xml_norm_text(a);
|
||||
lex=MY_XML_STRING;
|
||||
}
|
||||
else
|
||||
else if (my_xml_is_id0(p->cur[0]))
|
||||
{
|
||||
for(;
|
||||
(p->cur < p->end) && !strchr("?'\"=/<> \t\r\n", p->cur[0]);
|
||||
p->cur++)
|
||||
{}
|
||||
p->cur++;
|
||||
while (p->cur < p->end && my_xml_is_id1(p->cur[0]))
|
||||
p->cur++;
|
||||
a->end=p->cur;
|
||||
my_xml_norm_text(a);
|
||||
lex=MY_XML_IDENT;
|
||||
}
|
||||
else
|
||||
lex= MY_XML_UNKNOWN;
|
||||
|
||||
#if 0
|
||||
printf("LEX=%s[%d]\n",lex2str(lex),a->end-a->beg);
|
||||
|
|
Loading…
Reference in a new issue