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

Reply via email to