diff options
Diffstat (limited to 'mysql-test/main/func_math.test')
-rw-r--r-- | mysql-test/main/func_math.test | 240 |
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; |