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
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list