SQL script to test UDFs, bugs fixed

This commit is contained in:
Juan Ferrer 2019-12-02 21:10:07 +01:00
parent 7cd78a8eeb
commit 50bc2a1e37
7 changed files with 108 additions and 3 deletions

View File

@ -1,7 +1,7 @@
#!/bin/bash
CONCURRENCY=50
NATTEMPS=500
NATTEMPS=1000
I=0

View File

@ -41,7 +41,7 @@ void multimax_add(UDF_INIT *initid, UDF_ARGS *args, char *is_null, char *error)
Value max;
value_from_arg(&max, args, ARG_MAX);
if (value_compare(&max, &data->max) > 0) {
if (value_compare(&max, &data->max) >= 0) {
value_copy_arg(&data->max, args, ARG_MAX);
value_copy_arg(&data->value, args, ARG_VALUE);
}

35
udfs/test/minacum.sql Normal file
View File

@ -0,0 +1,35 @@
DROP TEMPORARY TABLE IF EXISTS tData;
CREATE TEMPORARY TABLE tData
SELECT 1 `group`, 1 `ival`, 10 `num`
UNION SELECT 1, 3, -2
UNION SELECT 1, 2, 1
UNION SELECT 1, 3, -1
UNION SELECT 1, 2, -5
UNION SELECT 2, '1', 20
UNION SELECT 2, '3', -5
UNION SELECT 2, '2', 1
UNION SELECT 2, '3', 10
UNION SELECT 2, '2', -6
UNION SELECT 3, 2, 8
UNION SELECT 3, 3, 10
UNION SELECT 4, 2, 10
UNION SELECT 4, 3, -24
UNION SELECT 5, NULL, 0
UNION SELECT 5, NULL, -4;
DROP TEMPORARY TABLE IF EXISTS tExpect;
CREATE TEMPORARY TABLE tExpect
SELECT 1 `group`, 3 expect
UNION SELECT 2, 15
UNION SELECT 3, 0
UNION SELECT 4, -14
UNION SELECT 5, -4;
SELECT e.`group`, r.result, e.expect, r.result <=> e.expect isRight
FROM tExpect e
LEFT JOIN (
SELECT `group`, minacum(`ival`, `num`, 1) result
FROM tData GROUP BY `group`
) r ON r.`group` = e.`group`;
DROP TEMPORARY TABLE tData, tExpect;

35
udfs/test/multimax.sql Normal file
View File

@ -0,0 +1,35 @@
DROP TEMPORARY TABLE IF EXISTS tData;
CREATE TEMPORARY TABLE tData
SELECT 1 `group`, 1 `max`, 10 `value`
UNION SELECT 1, 3, 30
UNION SELECT 1, 2, 20
UNION SELECT 1, 3, 31
UNION SELECT 1, 2, 21
UNION SELECT 2, '4', 40
UNION SELECT 2, '6', 60
UNION SELECT 2, '5', 50
UNION SELECT 2, '6', 61
UNION SELECT 2, '5', 51
UNION SELECT 3, 7, 70
UNION SELECT 3, 9, 90
UNION SELECT 3, 8, 80
UNION SELECT 3, 9, NULL
UNION SELECT 3, 8, 81
UNION SELECT 4, NULL, 101
UNION SELECT 4, NULL, 102;
DROP TEMPORARY TABLE IF EXISTS tExpect;
CREATE TEMPORARY TABLE tExpect
SELECT 1 `group`, 31 expect
UNION SELECT 2, 61
UNION SELECT 3, NULL
UNION SELECT 4, 102;
SELECT e.`group`, r.result, e.expect, r.result <=> e.expect isRight
FROM tExpect e
LEFT JOIN (
SELECT `group`, multimax(`max`, `value`) result
FROM tData GROUP BY `group`
) r ON r.`group` = e.`group`;
DROP TEMPORARY TABLE tData, tExpect;

18
udfs/test/sql_printf.sql Normal file
View File

@ -0,0 +1,18 @@
DROP TEMPORARY TABLE IF EXISTS tData;
CREATE TEMPORARY TABLE tData
SELECT sql_printf('SELECT %v FROM %t', 1, 'tbl') result, 'SELECT 1 FROM `tbl`' expect
UNION SELECT sql_printf('%v', TRUE), 1
UNION SELECT sql_printf('%v', 1), 1
UNION SELECT sql_printf('%v', 'string'), '\'string\''
UNION SELECT sql_printf('%v', DATE('2020-01-01')), '\'2020-01-01\''
UNION SELECT sql_printf('%v', NULL), 'NULL'
UNION SELECT sql_printf('%t', 'myTable'), '`myTable`'
UNION SELECT sql_printf('%s', 'expr = TRUE'), 'expr = TRUE'
UNION SELECT sql_printf('%%'), '%'
UNION SELECT sql_printf(NULL), NULL
UNION SELECT sql_printf('SELECT %'), NULL
UNION SELECT sql_printf('SELECT %v'), NULL;
SELECT result, expect, result <=> expect isRight FROM tData;
DROP TEMPORARY TABLE tData;

17
udfs/test/udf.sql Normal file
View File

@ -0,0 +1,17 @@
DELIMITER $$
CREATE PROCEDURE udf_test(vLoops BIGINT)
BEGIN
DECLARE vI BIGINT DEFAULT 0;
DECLARE vRes VARCHAR(255);
WHILE vI < vLoops DO
SELECT minacum(2, -10, 1) INTO vRes;
SET vI = vI + 1;
END WHILE;
END$$
DELIMITER ;
CALL udf_test(POW(10, 6));
DROP PROCEDURE udf_test;

View File

@ -93,7 +93,7 @@ int value_compare(Value *a, Value *b) {
if (cmp == 0) cmp = a->len - b->len;
}
} else
cmp = b->is_null;
cmp = b->is_null && a->is_null ? 0 : (a->is_null ? -1 : 1);
return cmp;
}