Changeset: 63c450830058 for MonetDB URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=63c450830058 Added Files: sql/backends/monet5/Tests/factory00.sql sql/backends/monet5/Tests/factory01.sql sql/backends/monet5/Tests/factory02.sql Modified Files: sql/backends/monet5/Tests/All sql/backends/monet5/rel_bin.c sql/backends/monet5/sql_cquery.c sql/backends/monet5/sql_cquery.h sql/server/rel_psm.c Branch: trails Log Message:
Some factories tests and compilation fixes. diffs (truncated from 430 to 300 lines): diff --git a/sql/backends/monet5/Tests/All b/sql/backends/monet5/Tests/All --- a/sql/backends/monet5/Tests/All +++ b/sql/backends/monet5/Tests/All @@ -102,3 +102,7 @@ cqstream08 cfunction00 cfunction01 + +factory00 +factory01 +factory02 diff --git a/sql/backends/monet5/Tests/factory00.sql b/sql/backends/monet5/Tests/factory00.sql new file mode 100644 --- /dev/null +++ b/sql/backends/monet5/Tests/factory00.sql @@ -0,0 +1,78 @@ +# Test MAL factories with YIELD statements + +CREATE FUNCTION factory1() RETURNS INT BEGIN + YIELD 1; + YIELD 2; + YIELD 3; +END; + +SELECT factory1(); +SELECT factory1(); +SELECT factory1(); +SELECT factory1(); --error + +CREATE FUNCTION factory2() RETURNS INT BEGIN + DECLARE a INT; + SET a = 1; + YIELD a; + SET a = a + 1; + YIELD a; + SET a = a + 1; + YIELD a; +END; + +SELECT factory2(); +SELECT factory2(); +SELECT factory2(); +SELECT factory2(); --error + +CREATE FUNCTION factory3() RETURNS INT BEGIN + DECLARE a INT; + SET a = 0; + WHILE a < 4 DO + SET a = a + 1; + YIELD a; + END WHILE; +END; + +SELECT factory3(); +SELECT factory3(); +SELECT factory3(); +SELECT factory3(); --error + +CREATE FUNCTION factory4() RETURNS INT BEGIN + DECLARE a INT; + SET a = 1; + WHILE a < 4 DO + YIELD a; + SET a = a + 1; + END WHILE; +END; + +SELECT factory4(); +SELECT factory4(); +SELECT factory4(); +SELECT factory4(); --error + +CREATE FUNCTION factory5() RETURNS INT BEGIN + DECLARE a INT; + SET a = 0; + WHILE a < 1 DO + SET a = a + 1; + END WHILE; + WHILE a < 4 DO + YIELD a; + SET a = a + 1; + END WHILE; +END; + +SELECT factory5(); +SELECT factory5(); +SELECT factory5(); +SELECT factory5(); --error + +DROP FUNCTION factory1; +DROP FUNCTION factory2; +DROP FUNCTION factory3; +DROP FUNCTION factory4; +DROP FUNCTION factory5; diff --git a/sql/backends/monet5/Tests/factory01.sql b/sql/backends/monet5/Tests/factory01.sql new file mode 100644 --- /dev/null +++ b/sql/backends/monet5/Tests/factory01.sql @@ -0,0 +1,100 @@ + +CREATE FUNCTION factory6(param INT) RETURNS INT BEGIN + YIELD param; + YIELD param; +END; + +SELECT factory6(1); +SELECT factory6(1); +SELECT factory6(1); --error + +CREATE FUNCTION factory7(param INT) RETURNS INT BEGIN + YIELD param; + SET param = param + 1; + YIELD param; + SET param = param + 1; + YIELD param; +END; + +SELECT factory7(0); +SELECT factory7(0); +SELECT factory7(0); +SELECT factory7(0); --error + +CREATE FUNCTION factory8() RETURNS INT BEGIN + DECLARE a INT; + SET a = 0; + WHILE TRUE DO + SET a = a + 1; + YIELD a; + END WHILE; +END; + +--shall never output an error +SELECT factory8(); +SELECT factory8(); +SELECT factory8(); +SELECT factory8(); +SELECT factory8(); +SELECT factory8(); +SELECT factory8(); +SELECT factory8(); +SELECT factory8(); +SELECT factory8(); +SELECT factory8(); + +CREATE FUNCTION factory9() RETURNS INT BEGIN --show only the even numbers + DECLARE a INT; + SET a = 0; + WHILE TRUE DO + IF a % 2 = 0 THEN + YIELD a; + END IF; + SET a = a + 1; + END WHILE; +END; + +SELECT factory9(); +SELECT factory9(); +SELECT factory9(); +SELECT factory9(); +SELECT factory9(); +SELECT factory9(); +SELECT factory9(); + +CREATE FUNCTION factory10() RETURNS INT BEGIN + DECLARE a INT; + DECLARE b INT; + SET a = 0; + WHILE a < 10 DO + IF a % 2 = 0 THEN + YIELD a; + END IF; + SET a = a + 1; + END WHILE; + WHILE a < 20 DO + SET b = a - 4; + WHILE b < a DO + IF b % 2 = 0 THEN + YIELD a; + ELSE + YIELD b; + END IF; + SET b = b + 1; + END WHILE; + SET a = a + 1; + END WHILE; +END; + +SELECT factory10(); +SELECT factory10(); +SELECT factory10(); +SELECT factory10(); +SELECT factory10(); +SELECT factory10(); +SELECT factory10(); + +DROP FUNCTION factory7; +DROP FUNCTION factory8; +DROP FUNCTION factory9; +DROP FUNCTION factory10; diff --git a/sql/backends/monet5/Tests/factory02.sql b/sql/backends/monet5/Tests/factory02.sql new file mode 100644 --- /dev/null +++ b/sql/backends/monet5/Tests/factory02.sql @@ -0,0 +1,106 @@ + +CREATE TABLE myTable (aa int, dd real); + +CREATE FUNCTION factory11() RETURNS TABLE (aa int, dd real) BEGIN + DECLARE bb INT; + DECLARE cc REAL; + DECLARE pointer INT; + SET bb = 0; + SET cc = 0; + SET pointer = 0; + WHILE TRUE DO + SET bb = bb + 1; + SET cc = cc + 1; + INSERT INTO myTable VALUES (bb, cc); + IF pointer % 2 = 0 THEN + YIELD TABLE (SELECT MAX(aa), MIN(dd) FROM myTable); + ELSE + YIELD TABLE (SELECT MIN(aa), MAX(dd) FROM myTable); + END IF; + SET pointer = pointer + 1; + END WHILE; +END; + +SELECT aa, dd FROM factory11(); +SELECT aa, dd FROM factory11(); +SELECT aa, dd FROM factory11(); +SELECT aa, dd FROM factory11(); +SELECT aa, dd FROM factory11(); + +CREATE FUNCTION factory12() RETURNS VARCHAR(32) BEGIN + DECLARE aa VARCHAR(32); + SET aa = 'This is a string! :) :) :) :) :)'; + YIELD aa; + SET aa = SUBSTRING(aa, 0, 16); + YIELD aa; + SET aa = aa || aa; + YIELD aa; + SET aa = NULL; + YIELD aa; +END; + +SELECT factory12(); +SELECT factory12(); +SELECT factory12(); +SELECT factory12(); +SELECT factory12(); --error +SELECT factory12(); +SELECT factory12(); +SELECT factory12(); +SELECT factory12(); +SELECT factory12(); --error + +CREATE FUNCTION factory13() RETURNS TABLE (aa CLOB, bb DATE) BEGIN + YIELD TABLE (SELECT 'aa', cast('2015-01-01' AS DATE)); + YIELD TABLE (SELECT 'bb', cast('2016-02-02' AS DATE)); + YIELD TABLE (SELECT 'cc', cast('2017-03-03' AS DATE)); +END; + +SELECT * FROM factory13(); +SELECT * FROM factory13(); +SELECT * FROM factory13(); + +CREATE TABLE myTable2 (aa INT, bb TIME, cc CHAR(32)); + +CREATE FUNCTION factory14() RETURNS TABLE (aa INT, bb TIME, cc CHAR(32)) BEGIN + WHILE TRUE DO + YIELD TABLE (SELECT aa, bb, cc FROM myTable2); + END WHILE; +END; + +INSERT INTO myTable2 VALUES (1, cast('08:00:00' AS TIME), '1234'); +SELECT aa, bb, cc FROM factory14(); + +INSERT INTO myTable2 VALUES (2, cast('09:00:00' AS TIME), '5678'); +SELECT aa, bb, cc FROM factory14(); + +INSERT INTO myTable2 VALUES (3, cast('10:00:00' AS TIME), '91011'); +SELECT aa, bb, cc FROM factory14(); + +CREATE FUNCTION factory15(aa INT, bb CLOB) RETURNS TABLE (aa INT, bb CLOB) BEGIN + YIELD TABLE (SELECT aa, bb); + SET aa = aa + 1; + SET bb = 'just'; + YIELD TABLE (SELECT aa, bb); + SET aa = aa + 1; + SET bb = 'other'; + YIELD TABLE (SELECT aa, bb); + SET aa = aa + 1; + SET bb = 'string'; + YIELD TABLE (SELECT aa, bb); +END; + +SELECT aa, bb FROM factory15(0, ''); +SELECT aa, bb FROM factory15(0, ''); +SELECT aa, bb FROM factory15(0, ''); +SELECT aa, bb FROM factory15(0, ''); _______________________________________________ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list