summaryrefslogtreecommitdiff
path: root/mysql-test/main/func_math.test
diff options
context:
space:
mode:
Diffstat (limited to 'mysql-test/main/func_math.test')
-rw-r--r--mysql-test/main/func_math.test240
1 files changed, 239 insertions, 1 deletions
diff --git a/mysql-test/main/func_math.test b/mysql-test/main/func_math.test
index 83e345ec890..a2c54b58a67 100644
--- a/mysql-test/main/func_math.test
+++ b/mysql-test/main/func_math.test
@@ -607,7 +607,7 @@ select 0=0, 0=-0, 0.0= -0.0, 0.0 = -(0.0), 0.0E1=-0.0E1, 0.0E1=-(0.0E1);
--echo # CRC32 tests
--echo #
-select CRC32(NULL), CRC32(''), CRC32('MySQL'), CRC32('mysql'), CRC32('01234567'), CRC32('012345678');
+select CRC32(NULL), CRC32(''), CRC32('MySQL'), CRC32('mysql'), CRC32('01234567'), CRC32('012345678'), CRC32(REPEAT('ABCDEfghij', 20)), CRC32(REPEAT('0123456789', 200));
#
# MDEV-13673 Bad result in view
@@ -659,3 +659,241 @@ SELECT a, HEX(a) FROM t2;
DROP TABLE t2;
DROP TABLE t1;
SET sql_mode=DEFAULT;
+
+
+--echo #
+--echo # Bug#26495791 - EXPAND TEST SUITE TO INCLUDE CRC32 TESTS
+--echo #
+
+SELECT CRC32(NULL), CRC32(''), CRC32('MySQL'), CRC32('mysql');
+SELECT CRC32('01234567'), CRC32('012345678');
+SELECT CRC32('~!@$%^*'), CRC32('-0.0001');
+SELECT CRC32(99999999999999999999999999999999);
+SELECT CRC32(-99999999999999999999999999999999);
+
+# Test cases for using the function in aggregate functions, group-by, having
+# and order-by clauses
+DROP TABLE IF EXISTS t;
+CREATE TABLE t(a INT, b VARCHAR(2));
+INSERT INTO t VALUES (1,'a'), (2,'qw'), (1,'t'), (3,'t');
+SELECT crc32(SUM(a)) FROM t;
+SELECT crc32(AVG(a)) FROM t GROUP BY b;
+SELECT crc32(MAX(b)) FROM t GROUP BY a;
+SELECT a, b, crc32(a) FROM t GROUP BY a,b HAVING crc32(MAX(a))=450215437;
+SELECT a,b,concat(a,b),crc32(concat(a,b)) FROM t ORDER BY crc32(concat(a,b));
+DROP TABLE t;
+
+# Test cases for arithmetic operators and functions
+SELECT CRC32(4+2);
+SELECT CRC32(4/2);
+SELECT CRC32(4-2);
+SELECT CRC32(4*2);
+SELECT CRC32(ABS(-6));
+SELECT CRC32(CEILING(1.23));
+SELECT CRC32(FLOOR(1.23));
+SELECT CRC32(LOG(10,100));
+SELECT CRC32(PI());
+SELECT CRC32(POWER(2,2));
+SELECT CRC32(ROUND(1.58));
+SELECT CRC32(SIGN(0));
+SELECT CRC32(SQRT(4));
+
+# Test cases for comparison operators
+SELECT CRC32(2 > 4);
+SELECT CRC32(2 < 4);
+SELECT CRC32(2 >= 4);
+SELECT CRC32(2 <= 4);
+SELECT CRC32(2 != 4);
+
+# Test cases for logical operators
+SELECT CRC32(NOT 1);
+SELECT CRC32(1 AND 1);
+SELECT CRC32(1 OR 1);
+SELECT CRC32(1 XOR 1);
+
+# Test cases for string functions
+SELECT CRC32(ASCII('2'));
+SELECT CRC32(BIT_LENGTH('text'));
+SELECT CRC32(CHAR('77','121','83','81','76'));
+SELECT CRC32(CONCAT('good','year'));
+SELECT CRC32(INSERT('foodyear', 1, 4, 'good'));
+SELECT CRC32(LEFT('goodyear', 4));
+SELECT CRC32(LENGTH('text'));
+SELECT CRC32(LOWER('GOODYEAR'));
+SELECT CRC32(UPPER('goodyear'));
+SELECT CRC32(LTRIM(' goodyear'));
+SELECT CRC32(RTRIM('goodyear '));
+SELECT CRC32(REPLACE('godyear','o','oo'));
+SELECT CRC32(REVERSE('goodyear'));
+
+# Test cases for boolean values
+SELECT CRC32(true);
+SELECT CRC32(false);
+
+# Test cases for numeric data types
+DROP TABLE IF EXISTS t1;
+CREATE TABLE t1 (c1 BIT(5),
+ c2 TINYINT,
+ c3 MEDIUMINT,
+ c4 INTEGER,
+ c5 BIGINT,
+ c6 DECIMAL(7,5),
+ c7 FLOAT(7,5),
+ c8 DOUBLE(7,5));
+
+INSERT INTO t1 VALUES (B'10101', 127, 8388607, 2147483647,
+ 9223372036854775807, 10.5, 11.5, 12.5);
+
+SELECT CRC32(c1) FROM t1;
+SELECT CRC32(c2) FROM t1;
+SELECT CRC32(c3) FROM t1;
+SELECT CRC32(c4) FROM t1;
+SELECT CRC32(c5) FROM t1;
+SELECT CRC32(c6) FROM t1;
+SELECT CRC32(c7) FROM t1;
+SELECT CRC32(c8) FROM t1;
+
+# Test cases for temporal data types
+DROP TABLE IF EXISTS t1;
+CREATE TABLE t1 (c1 DATE,
+ c2 DATETIME,
+ c3 TIMESTAMP,
+ c4 TIME,
+ c5 YEAR);
+INSERT INTO t1 VALUES ('2007-01-01', '2007-01-01 12:00:01',
+ '2007-01-01 00:00:01.000000',
+ '12:00:01.000000', '2007');
+SELECT CRC32(c1) FROM t1;
+SELECT CRC32(c2) FROM t1;
+SELECT CRC32(c3) FROM t1;
+SELECT CRC32(c4) FROM t1;
+SELECT CRC32(c5) FROM t1;
+
+# Test cases for string data types
+DROP TABLE IF EXISTS t1;
+CREATE TABLE t1 (c1 CHAR,
+ c2 VARCHAR(10),
+ c3 BINARY(1),
+ c4 VARBINARY(10),
+ c5 TINYBLOB,
+ c6 TINYTEXT,
+ c7 BLOB,
+ c8 TEXT,
+ c9 MEDIUMBLOB,
+ c10 MEDIUMTEXT,
+ c11 LONGBLOB,
+ c12 LONGTEXT);
+
+INSERT INTO t1 VALUES ('a', 'a', 0x61, 0x61, 'a', 'a',
+ 'a', 'a', 'a', 'a', 'a', 'a');
+SELECT CRC32(c1) FROM t1;
+SELECT CRC32(c2) FROM t1;
+SELECT CRC32(c3) FROM t1;
+SELECT CRC32(c4) FROM t1;
+SELECT CRC32(c5) FROM t1;
+SELECT CRC32(c6) FROM t1;
+SELECT CRC32(c7) FROM t1;
+SELECT CRC32(c8) FROM t1;
+SELECT CRC32(c9) FROM t1;
+SELECT CRC32(c10) FROM t1;
+SELECT CRC32(c11) FROM t1;
+SELECT CRC32(c12) FROM t1;
+
+# Test cases for geometric data types
+SELECT CRC32(ST_GeomFromText('POINT(1 1)'));
+
+CREATE TABLE geom_data(id INT,
+ pt POINT NOT NULL,
+ lnstr LINESTRING NOT NULL,
+ mlnstr MULTILINESTRING NOT NULL,
+ poly POLYGON NOT NULL,
+ mpoly MULTIPOLYGON NOT NULL);
+
+INSERT INTO geom_data VALUES (10,
+ ST_GEOMFROMTEXT('POINT(10 20)'),
+ ST_GEOMFROMTEXT('LINESTRING(0 0,5 5,6 6)'),
+ ST_GEOMFROMTEXT('MULTILINESTRING((0 0,2 3,4 5),(6 6,8 8,9 9,10 10))'),
+ ST_GEOMFROMTEXT('POLYGON((0 0,6 7,8 8,3 9,0 0),(3 6,4 6,4 7,3 6))'),
+ ST_GEOMFROMTEXT('MULTIPOLYGON(((0 0,0 5,5 5,5 0,0 0)),
+ ((2 2,4 5,6 2,2 2)))'));
+
+SELECT CRC32(ST_X(pt)) FROM geom_data;
+SELECT CRC32(ST_NumPoints((lnstr))) FROM geom_data;
+SELECT CRC32(ST_Length((mlnstr))) FROM geom_data;
+SELECT CRC32(ST_Area((poly))) FROM geom_data;
+SELECT CRC32(ST_Area((mpoly))) FROM geom_data;
+DROP TABLE geom_data;
+
+# Test cases for ENUM and SET data types
+DROP TABLE IF EXISTS t1;
+CREATE TABLE t1 (e1 ENUM ('a','b'), s1 SET('a','b'));
+INSERT INTO t1 VALUES(2,'a,b'),('a','b,a');
+SELECT e1, CRC32(e1) FROM t1;
+SELECT s1, CRC32(s1) FROM t1;
+
+# Test cases for JSON data types
+DROP TABLE IF EXISTS t1;
+CREATE TABLE t1 (a JSON);
+INSERT INTO t1 VALUES ('{"name" : "goodyear"}'),
+ ('{"name" : "verygood-year"}');
+SELECT a, CRC32(a) FROM t1;
+SELECT CRC32(json_query(a, '$.name')) FROM t1 WHERE json_query(a, '$.name') = 'goodyear';
+SELECT CRC32(REPLACE(JSON_EXTRACT(a, "$.name"),'\"',''))
+ FROM t1 WHERE JSON_EXTRACT(a, "$.name") = 'goodyear';
+DROP TABLE t1;
+
+# Test case for views
+CREATE TABLE t1 (a INT);
+INSERT INTO t1 VALUES(10);
+CREATE VIEW v1 AS SELECT CRC32(a) AS my_crc FROM t1;
+SELECT * FROM v1;
+SELECT CRC32(CRC32(my_crc)) FROM v1;
+DROP VIEW v1;
+DROP TABLE t1;
+
+# Test case for triggers
+CREATE TABLE t1 (a CHAR);
+CREATE TABLE t2 (b BIGINT);
+CREATE TRIGGER trg1
+ BEFORE INSERT ON t1
+ FOR EACH ROW
+ INSERT INTO t2 VALUES(CRC32(NEW.a));
+INSERT INTO t1 VALUES('a');
+SELECT * FROM t2;
+DROP TRIGGER trg1;
+DROP TABLE t2;
+DROP TABLE t1;
+
+# Test case for a stored procedure
+CREATE PROCEDURE crc32_proc (IN a CHAR, OUT b BIGINT)
+ SELECT CRC32(a) INTO b;
+CALL crc32_proc('a',@val);
+SELECT @val;
+DROP PROCEDURE crc32_proc;
+
+# Test case for a user defined function
+DELIMITER |;
+CREATE FUNCTION crc32_func(inputvar CHAR)
+RETURNS BIGINT
+BEGIN
+ DECLARE crcval BIGINT;
+ SELECT CRC32(inputvar) INTO crcval;
+ RETURN crcval;
+END|
+DELIMITER ;|
+SELECT crc32_func('a');
+DROP FUNCTION crc32_func;
+
+# Test case for a prepared statement
+PREPARE stmt1 FROM 'SELECT CRC32(?)';
+SET @val = 'a';
+EXECUTE stmt1 USING @val;
+DEALLOCATE PREPARE stmt;
+
+# Test case for checksum on contents of a file
+SET NAMES utf8;
+CREATE TABLE t1 (a TEXT) CHARACTER SET = utf8;
+LOAD DATA INFILE '../../std_data/loaddata_utf8.dat' INTO TABLE t1 CHARACTER SET utf8;
+SELECT HEX(a), CRC32(a) from t1;
+DROP TABLE t1;
+SET NAMES default;