Commit 684d0ced authored by gshchepa/uchum@gleb.loc's avatar gshchepa/uchum@gleb.loc
Browse files

Merge gleb.loc:/home/uchum/work/bk/5.0

into  gleb.loc:/home/uchum/work/bk/5.0-opt
parents 9f234274 7cdef518
Loading
Loading
Loading
Loading
+16 −11
Original line number Diff line number Diff line
@@ -3663,33 +3663,38 @@ static void fetch_long_with_conversion(MYSQL_BIND *param, MYSQL_FIELD *field,
  case MYSQL_TYPE_FLOAT:
  {
    /*
      We need to store data in the buffer before the truncation check to
      We need to mark the local variable volatile to
      workaround Intel FPU executive precision feature.
      (See http://gcc.gnu.org/bugzilla/show_bug.cgi?id=323 for details)
      AFAIU it does not guarantee to work.
    */
    float data;
    volatile float data;
    if (is_unsigned)
    {
      data= (float) ulonglong2double(value);
      *param->error= ((ulonglong) value) != ((ulonglong) data);
    }
    else
    {
      data= (float)value;
      *param->error= value != ((longlong) data);
    }
    floatstore(buffer, data);
    *param->error= is_unsigned ?
                   ((ulonglong) value) != ((ulonglong) (*(float*) buffer)) :
                   ((longlong) value) != ((longlong) (*(float*) buffer));
    break;
  }
  case MYSQL_TYPE_DOUBLE:
  {
    double data;
    volatile double data;
    if (is_unsigned)
    {
      data= ulonglong2double(value);
      *param->error= ((ulonglong) value) != ((ulonglong) data);
    }
    else
    {
      data= (double)value;
      *param->error= value != ((longlong) data);
    }
    doublestore(buffer, data);
    *param->error= is_unsigned ?
                   ((ulonglong) value) != ((ulonglong) (*(double*) buffer)) :
                   ((longlong) value) != ((longlong) (*(double*) buffer));
    break;
  }
  case MYSQL_TYPE_TIME:
+26 −0
Original line number Diff line number Diff line
@@ -362,3 +362,29 @@ cast(-19999999999999999999 as signed)
-9223372036854775808
Warnings:
Error	1292	Truncated incorrect DECIMAL value: ''
select -9223372036854775808;
Catalog	Database	Table	Table_alias	Column	Column_alias	Type	Length	Max length	Is_null	Flags	Decimals	Charsetnr
def					-9223372036854775808	8	20	20	N	32897	0	63
-9223372036854775808
-9223372036854775808
select -(9223372036854775808);
Catalog	Database	Table	Table_alias	Column	Column_alias	Type	Length	Max length	Is_null	Flags	Decimals	Charsetnr
def					-(9223372036854775808)	8	20	20	N	32897	0	63
-(9223372036854775808)
-9223372036854775808
select -((9223372036854775808));
Catalog	Database	Table	Table_alias	Column	Column_alias	Type	Length	Max length	Is_null	Flags	Decimals	Charsetnr
def					-((9223372036854775808))	8	20	20	N	32897	0	63
-((9223372036854775808))
-9223372036854775808
select -(-(9223372036854775808));
Catalog	Database	Table	Table_alias	Column	Column_alias	Type	Length	Max length	Is_null	Flags	Decimals	Charsetnr
def					-(-(9223372036854775808))	246	21	19	N	129	0	63
-(-(9223372036854775808))
9223372036854775808
select --9223372036854775808, ---9223372036854775808, ----9223372036854775808;
--9223372036854775808	---9223372036854775808	----9223372036854775808
9223372036854775808	-9223372036854775808	9223372036854775808
select -(-9223372036854775808), -(-(-9223372036854775808));
-(-9223372036854775808)	-(-(-9223372036854775808))
9223372036854775808	-9223372036854775808
+92 −0
Original line number Diff line number Diff line
@@ -2061,4 +2061,96 @@ C
2707236321
DROP TABLE t1, t2;
DROP VIEW v1;
SELECT LOCATE('foo', NULL) FROM DUAL;
LOCATE('foo', NULL)
NULL
SELECT LOCATE(NULL, 'o') FROM DUAL;
LOCATE(NULL, 'o')
NULL
SELECT LOCATE(NULL, NULL) FROM DUAL;
LOCATE(NULL, NULL)
NULL
SELECT LOCATE('foo', NULL) IS NULL FROM DUAL;
LOCATE('foo', NULL) IS NULL
1
SELECT LOCATE(NULL, 'o') IS NULL FROM DUAL;
LOCATE(NULL, 'o') IS NULL
1
SELECT LOCATE(NULL, NULL) IS NULL FROM DUAL;
LOCATE(NULL, NULL) IS NULL
1
SELECT ISNULL(LOCATE('foo', NULL)) FROM DUAL;
ISNULL(LOCATE('foo', NULL))
1
SELECT ISNULL(LOCATE(NULL, 'o')) FROM DUAL;
ISNULL(LOCATE(NULL, 'o'))
1
SELECT ISNULL(LOCATE(NULL, NULL)) FROM DUAL;
ISNULL(LOCATE(NULL, NULL))
1
SELECT LOCATE('foo', NULL) <=> NULL FROM DUAL;
LOCATE('foo', NULL) <=> NULL
1
SELECT LOCATE(NULL, 'o') <=> NULL FROM DUAL;
LOCATE(NULL, 'o') <=> NULL
1
SELECT LOCATE(NULL, NULL) <=> NULL FROM DUAL;
LOCATE(NULL, NULL) <=> NULL
1
CREATE TABLE t1 (id int NOT NULL PRIMARY KEY, a varchar(10), p varchar(10));
INSERT INTO t1 VALUES (1, 'foo', 'o');
INSERT INTO t1 VALUES (2, 'foo', NULL);
INSERT INTO t1 VALUES (3, NULL, 'o');
INSERT INTO t1 VALUES (4, NULL, NULL);
SELECT id, LOCATE(a,p) FROM t1;
id	LOCATE(a,p)
1	0
2	NULL
3	NULL
4	NULL
SELECT id, LOCATE(a,p) IS NULL FROM t1;
id	LOCATE(a,p) IS NULL
1	0
2	1
3	1
4	1
SELECT id, ISNULL(LOCATE(a,p)) FROM t1;
id	ISNULL(LOCATE(a,p))
1	0
2	1
3	1
4	1
SELECT id, LOCATE(a,p) <=> NULL FROM t1;
id	LOCATE(a,p) <=> NULL
1	0
2	1
3	1
4	1
SELECT id FROM t1 WHERE LOCATE(a,p) IS NULL;
id
2
3
4
SELECT id FROM t1 WHERE LOCATE(a,p) <=> NULL;
id
2
3
4
DROP TABLE t1;
SELECT SUBSTR('foo',1,0) FROM DUAL;
SUBSTR('foo',1,0)

SELECT SUBSTR('foo',1,CAST(0 AS SIGNED)) FROM DUAL;
SUBSTR('foo',1,CAST(0 AS SIGNED))

SELECT SUBSTR('foo',1,CAST(0 AS UNSIGNED)) FROM DUAL;
SUBSTR('foo',1,CAST(0 AS UNSIGNED))

CREATE TABLE t1 (a varchar(10), len int unsigned);
INSERT INTO t1 VALUES ('bar', 2), ('foo', 0);
SELECT SUBSTR(a,1,len) FROM t1;
SUBSTR(a,1,len)
ba

DROP TABLE t1;
End of 5.0 tests
+31 −0
Original line number Diff line number Diff line
@@ -688,7 +688,16 @@ ERROR 42S22: Unknown column 't2.x' in 'field list'
drop table t1,t2;
CREATE TABLE t1 (a int PRIMARY KEY);
INSERT INTO t1 values (1), (2);
flush status;
INSERT INTO t1 SELECT a + 2 FROM t1 LIMIT 1;
show status like 'Handler_read%';
Variable_name	Value
Handler_read_first	1
Handler_read_key	0
Handler_read_next	0
Handler_read_prev	0
Handler_read_rnd	0
Handler_read_rnd_next	1
DROP TABLE t1;
CREATE TABLE t1 (x int, y int);
CREATE TABLE t2 (z int, y int);
@@ -773,3 +782,25 @@ d
20
20
DROP TABLE t1,t2;
CREATE TABLE t1 (
id INT AUTO_INCREMENT PRIMARY KEY,
prev_id INT,
join_id INT DEFAULT 0);
INSERT INTO t1 (prev_id) VALUES (NULL), (1), (2);
SELECT * FROM t1;
id	prev_id	join_id
1	NULL	0
2	1	0
3	2	0
CREATE TABLE t2 (join_id INT);
INSERT INTO t2 (join_id) VALUES (0);
INSERT INTO t1 (prev_id) SELECT id
FROM t2 LEFT JOIN t1 ON t1.join_id = t2.join_id
ORDER BY id DESC LIMIT 1;
SELECT * FROM t1;
id	prev_id	join_id
1	NULL	0
2	1	0
3	2	0
4	3	0
DROP TABLE t1,t2;
+41 −0
Original line number Diff line number Diff line
@@ -140,4 +140,45 @@ Catalog Database Table Table_alias Column Column_alias Type Length Max length Is
def			a	v_small	v_small	3	9	9	N	32769	0	63
v_small
214748364
CREATE TABLE t1 (c1 CHAR(1));
CREATE TABLE t2 (c2 CHAR(1));
CREATE VIEW v1 AS SELECT t1.c1 FROM t1;
CREATE VIEW v2 AS SELECT t2.c2 FROM t2;
INSERT INTO t1 VALUES ('1'), ('2'), ('3');
INSERT INTO t2 VALUES ('1'), ('2'), ('3'), ('2');
SELECT v1.c1 FROM v1 JOIN t2 ON c1=c2 ORDER BY 1;
Catalog	Database	Table	Table_alias	Column	Column_alias	Type	Length	Max length	Is_null	Flags	Decimals	Charsetnr
def	test	t1	v1	c1	c1	254	1	1	Y	0	0	8
c1
1
2
2
3
SELECT v1.c1, v2.c2 FROM v1 JOIN v2 ON c1=c2;
Catalog	Database	Table	Table_alias	Column	Column_alias	Type	Length	Max length	Is_null	Flags	Decimals	Charsetnr
def	test	t1	v1	c1	c1	254	1	1	Y	0	0	8
def	test	t2	v2	c2	c2	254	1	1	Y	0	0	8
c1	c2
1	1
2	2
3	3
2	2
SELECT v1.c1, v2.c2 FROM v1 JOIN v2 ON c1=c2 GROUP BY v1.c1;
Catalog	Database	Table	Table_alias	Column	Column_alias	Type	Length	Max length	Is_null	Flags	Decimals	Charsetnr
def	test	t1	v1	c1	c1	254	1	1	Y	32768	0	8
def	test	t2	v2	c2	c2	254	1	1	Y	0	0	8
c1	c2
1	1
2	2
3	3
SELECT v1.c1, v2.c2 FROM v1 JOIN v2 ON c1=c2 GROUP BY v1.c1 ORDER BY v2.c2;
Catalog	Database	Table	Table_alias	Column	Column_alias	Type	Length	Max length	Is_null	Flags	Decimals	Charsetnr
def	test	t1	v1	c1	c1	254	1	1	Y	32768	0	8
def	test	t2	v2	c2	c2	254	1	1	Y	0	0	8
c1	c2
1	1
2	2
3	3
DROP VIEW v1,v2;
DROP TABLE t1,t2;
End of 5.0 tests
Loading