Changeset: 928df7505c1a for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=928df7505c1a
Added Files:
        monetdb5/mal/Tests/tst914.stable.err
        monetdb5/mal/Tests/tst914.stable.out
Modified Files:
        monetdb5/mal/Tests/tst008.stable.err
        monetdb5/mal/Tests/tst054.stable.err
        monetdb5/mal/mal_parser.c
Branch: default
Log Message:

Fix for tst.914, ie whenver an error is found at the MAL parser, look for a 
backup MAL program and set it before returning


diffs (truncated from 361 to 300 lines):

diff --git a/monetdb5/mal/Tests/tst008.stable.err 
b/monetdb5/mal/Tests/tst008.stable.err
--- a/monetdb5/mal/Tests/tst008.stable.err
+++ b/monetdb5/mal/Tests/tst008.stable.err
@@ -38,6 +38,8 @@ QUERY = function foo();
         end foo;
 ERROR = !SyntaxException:parseError:io.printi;
         !SyntaxException:parseError:         ^'(' expected
+        !SyntaxException:parseError:end foo;
+        !SyntaxException:parseError:    ^non matching end label
 
 
 # 10:46:01 >  
diff --git a/monetdb5/mal/Tests/tst054.stable.err 
b/monetdb5/mal/Tests/tst054.stable.err
--- a/monetdb5/mal/Tests/tst054.stable.err
+++ b/monetdb5/mal/Tests/tst054.stable.err
@@ -78,6 +78,8 @@ QUERY = function z()( :int,:int,:int,:in
         z();
 ERROR = !SyntaxException:parseError:return 
(1,2,3,4,5,6,7,8,9,0,1,2,3,4,5,6,7,8,9,0,1,2,3,4,5,6,7,8,9,0);
         !SyntaxException:parseError:        ^<identifier> expected
+        !SyntaxException:parseError:end z;
+        !SyntaxException:parseError:    ^non matching end label
 
 # 11:11:08 >  
 # 11:11:08 >  Done.
diff --git a/monetdb5/mal/Tests/tst914.stable.err 
b/monetdb5/mal/Tests/tst914.stable.err
new file mode 100644
--- /dev/null
+++ b/monetdb5/mal/Tests/tst914.stable.err
@@ -0,0 +1,38 @@
+stderr of test 'tst914` in directory 'monetdb5/mal` itself:
+
+
+# 19:56:10 >  
+# 19:56:10 >  "mserver5" "--debug=10" "--set" "gdk_nr_threads=0" "--set" 
"mapi_open=true" "--set" "mapi_port=32833" "--set" 
"mapi_usock=/var/tmp/mtest-100483/.s.monetdb.32833" "--forcemito" 
"--dbpath=/home/ferreira/repositories/MonetDB-default/BUILD/var/MonetDB/mTests_monetdb5_mal"
 "--set" "embedded_c=true"
+# 19:56:10 >  
+
+# builtin opt  gdk_dbpath = 
/home/ferreira/repositories/MonetDB-default/BUILD/var/monetdb5/dbfarm/demo
+# builtin opt  mapi_port = 50000
+# builtin opt  mapi_open = false
+# builtin opt  mapi_ipv6 = false
+# builtin opt  mapi_autosense = false
+# builtin opt  sql_optimizer = default_pipe
+# builtin opt  sql_debug = 0
+# builtin opt  raw_strings = false
+# cmdline opt  gdk_nr_threads = 0
+# cmdline opt  mapi_open = true
+# cmdline opt  mapi_port = 32833
+# cmdline opt  mapi_usock = /var/tmp/mtest-100483/.s.monetdb.32833
+# cmdline opt  gdk_dbpath = 
/home/ferreira/repositories/MonetDB-default/BUILD/var/MonetDB/mTests_monetdb5_mal
+# cmdline opt  embedded_c = true
+#client2:!ERROR:SyntaxException:parseError:io.printi;
+#client2:!ERROR:SyntaxException:parseError:         ^'(' expected
+
+# 19:56:11 >  
+# 19:56:11 >  "mclient" "-lmal" "-ftest" "-tnone" "-Eutf-8" 
"--host=/var/tmp/mtest-100483" "--port=32833"
+# 19:56:11 >  
+
+MAPI  = (monetdb) /var/tmp/mtest-100483/.s.monetdb.32833
+QUERY = function foo();
+        io.printi;
+ERROR = !SyntaxException:parseError:io.printi;
+        !SyntaxException:parseError:         ^'(' expected
+
+# 19:56:14 >  
+# 19:56:14 >  "Done."
+# 19:56:14 >  
+
diff --git a/monetdb5/mal/Tests/tst914.stable.out 
b/monetdb5/mal/Tests/tst914.stable.out
new file mode 100644
--- /dev/null
+++ b/monetdb5/mal/Tests/tst914.stable.out
@@ -0,0 +1,70 @@
+stdout of test 'tst914` in directory 'monetdb5/mal` itself:
+
+
+# 19:56:10 >  
+# 19:56:10 >  "mserver5" "--debug=10" "--set" "gdk_nr_threads=0" "--set" 
"mapi_open=true" "--set" "mapi_port=32833" "--set" 
"mapi_usock=/var/tmp/mtest-100483/.s.monetdb.32833" "--forcemito" 
"--dbpath=/home/ferreira/repositories/MonetDB-default/BUILD/var/MonetDB/mTests_monetdb5_mal"
 "--set" "embedded_c=true"
+# 19:56:10 >  
+
+# MonetDB 5 server v11.36.0 (hg id: 14fbfe9d7b04)
+# This is an unreleased version
+# Serving database 'mTests_monetdb5_mal', using 8 threads
+# Compiled for x86_64-pc-linux-gnu/64bit with 128bit integers
+# Found 15.498 GiB available main-memory of which we use 12.631 GiB
+# Copyright (c) 1993 - July 2008 CWI.
+# Copyright (c) August 2008 - 2020 MonetDB B.V., all rights reserved
+# Visit https://www.monetdb.org/ for further information
+# Listening for connection requests on mapi:monetdb://NULL.Home:32833/
+# Listening for UNIX domain connection requests on 
mapi:monetdb:///var/tmp/mtest-100483/.s.monetdb.32833
+# MonetDB/GIS module loaded
+# SQL catalog created, loading sql scripts once
+# loading sql script: 09_like.sql
+# loading sql script: 10_math.sql
+# loading sql script: 12_url.sql
+# loading sql script: 13_date.sql
+# loading sql script: 14_inet.sql
+# loading sql script: 15_querylog.sql
+# loading sql script: 16_tracelog.sql
+# loading sql script: 17_temporal.sql
+# loading sql script: 18_index.sql
+# loading sql script: 20_vacuum.sql
+# loading sql script: 21_dependency_views.sql
+# loading sql script: 22_clients.sql
+# loading sql script: 23_skyserver.sql
+# loading sql script: 25_debug.sql
+# loading sql script: 26_sysmon.sql
+# loading sql script: 27_rejects.sql
+# loading sql script: 39_analytics.sql
+# loading sql script: 39_analytics_hge.sql
+# loading sql script: 40_geom.sql
+# loading sql script: 40_json.sql
+# loading sql script: 40_json_hge.sql
+# loading sql script: 41_md5sum.sql
+# loading sql script: 45_uuid.sql
+# loading sql script: 46_profiler.sql
+# loading sql script: 51_sys_schema_extension.sql
+# loading sql script: 58_hot_snapshot.sql
+# loading sql script: 60_wlcr.sql
+# loading sql script: 61_wlcr.sql
+# loading sql script: 72_fits.sql
+# loading sql script: 74_netcdf.sql
+# loading sql script: 75_lidar.sql
+# loading sql script: 75_shp.sql
+# loading sql script: 75_storagemodel.sql
+# loading sql script: 80_statistics.sql
+# loading sql script: 80_udf.sql
+# loading sql script: 80_udf_hge.sql
+# loading sql script: 85_bam.sql
+# loading sql script: 90_generator.sql
+# loading sql script: 90_generator_hge.sql
+# loading sql script: 99_system.sql
+# MonetDB/SQL module loaded
+
+# 19:56:11 >  
+# 19:56:11 >  "mclient" "-lmal" "-ftest" "-tnone" "-Eutf-8" 
"--host=/var/tmp/mtest-100483" "--port=32833"
+# 19:56:11 >  
+
+
+# 19:56:14 >  
+# 19:56:14 >  "Done."
+# 19:56:14 >  
+
diff --git a/monetdb5/mal/mal_parser.c b/monetdb5/mal/mal_parser.c
--- a/monetdb5/mal/mal_parser.c
+++ b/monetdb5/mal/mal_parser.c
@@ -73,13 +73,20 @@ skipToEnd(Client cntxt)
 static void
 parseError(Client cntxt, str msg)
 {      
-       MalBlkPtr mb = cntxt->curprg->def;
+       MalBlkPtr mb;
        char *old, *new;
        char buf[1028]={0};
        char *s = buf, *t, *line="", *marker="";
        char *l = lastline(cntxt);
        ssize_t i;
 
+       if (cntxt->backup){
+               freeSymbol(cntxt->curprg);
+               cntxt->curprg = cntxt->backup;
+               cntxt->backup = 0;
+       }
+
+       mb = cntxt->curprg->def;
        s= buf;
        for (t = l; *t && *t != '\n' && s < buf+sizeof(buf)-4; t++) {
                *s++ = *t;
@@ -1132,7 +1139,6 @@ fcnHeader(Client cntxt, int kind)
        cntxt->backup = cntxt->curprg;
        cntxt->curprg = newFunction( modnme, fnme, kind);
        if(cntxt->curprg == NULL) {
-               cntxt->curprg = cntxt->backup;
                parseError(cntxt, SQLSTATE(HY013) MAL_MALLOC_FAIL);
                return 0;
        }
@@ -1155,12 +1161,8 @@ fcnHeader(Client cntxt, int kind)
                if ((ch = currChar(cntxt)) != ',') {
                        if (ch == ')')
                                break;
-                       if (cntxt->backup) {
-                               freeSymbol(cntxt->curprg);
-                               cntxt->curprg = cntxt->backup;
-                               cntxt->backup = 0;
+                       if (cntxt->backup)
                                curBlk = NULL;
-                       }
                        parseError(cntxt, "',' expected\n");
                        return curBlk;
                } else
@@ -1169,13 +1171,9 @@ fcnHeader(Client cntxt, int kind)
                ch = currChar(cntxt);
        }
        if (currChar(cntxt) != ')') {
-               pushInstruction(curBlk, curInstr);
-               if (cntxt->backup) {
-                       freeSymbol(cntxt->curprg);
-                       cntxt->curprg = cntxt->backup;
-                       cntxt->backup = 0;
+               freeInstruction(curInstr);
+               if (cntxt->backup)
                        curBlk = NULL;
-               }
                parseError(cntxt, "')' expected\n");
                return curBlk;
        }
@@ -1212,12 +1210,8 @@ fcnHeader(Client cntxt, int kind)
                        if ((ch = currChar(cntxt)) != ',') {
                                if (ch == ')')
                                        break;
-                               if (cntxt->backup) {
-                                       freeSymbol(cntxt->curprg);
-                                       cntxt->curprg = cntxt->backup;
-                                       cntxt->backup = 0;
+                               if (cntxt->backup)
                                        curBlk = NULL;
-                               }
                                parseError(cntxt, "',' expected\n");
                                return curBlk;
                        } else {
@@ -1231,12 +1225,8 @@ fcnHeader(Client cntxt, int kind)
                newarg = (short *) GDKmalloc(max * sizeof(curInstr->argv[0]));
                if (newarg == NULL){
                        parseError(cntxt, SQLSTATE(HY013) MAL_MALLOC_FAIL);
-                       if (cntxt->backup) {
-                               freeSymbol(cntxt->curprg);
-                               cntxt->curprg = cntxt->backup;
-                               cntxt->backup = 0;
+                       if (cntxt->backup)
                                curBlk = NULL;
-                       }
                        return curBlk;
                }
                for (i1 = retc; i1 < curInstr->argc; i1++)
@@ -1252,12 +1242,8 @@ fcnHeader(Client cntxt, int kind)
                GDKfree(newarg);
                if (currChar(cntxt) != ')') {
                        freeInstruction(curInstr);
-                       if (cntxt->backup) {
-                               freeSymbol(cntxt->curprg);
-                               cntxt->curprg = cntxt->backup;
-                               cntxt->backup = 0;
+                       if (cntxt->backup)
                                curBlk = NULL;
-                       }
                        parseError(cntxt, "')' expected\n");
                        return curBlk;
                }
@@ -1318,9 +1304,6 @@ parseCommandPattern(Client cntxt, int ki
                cntxt->curprg = cntxt->backup;
                cntxt->backup = 0;
        } else {
-               freeSymbol(curPrg);
-               cntxt->curprg = cntxt->backup;
-               cntxt->backup = 0;
                parseError(cntxt, "<module> not found\n");
                return 0;
        }
@@ -1535,7 +1518,6 @@ parseArguments(Client cntxt, MalBlkPtr c
                        return 0;
                default:
                        parseError(cntxt, "<factor> expected\n");
-                       pushInstruction(curBlk, *curInstr);
                        return 1;
                }
                if (currChar(cntxt) == ',')
@@ -1584,7 +1566,7 @@ parseAssign(Client cntxt, int cntrl)
                        i = cstToken(cntxt, &cst);
                        if (l == 0 || i) {
                                parseError(cntxt, "<identifier> expected\n");
-                               pushInstruction(curBlk, curInstr);
+                               freeInstruction(curInstr);
                                return;
                        }
                        GETvariable(freeInstruction(curInstr));
@@ -1622,13 +1604,16 @@ parseAssign(Client cntxt, int cntrl)
                        if (cntrl == LEAVEsymbol || cntrl == REDOsymbol ||
                                cntrl == RETURNsymbol || cntrl == EXITsymbol) {
                                curInstr->argv[0] = getBarrierEnvelop(curBlk);
+                               if (currChar(cntxt) != ';') {
+                                       freeInstruction(curInstr);
+                                       parseError(cntxt, "<identifier> 
expected in control statement\n");
+                                       return;
+                               }
                                pushInstruction(curBlk, curInstr);
-                               if (currChar(cntxt) != ';')
-                                       parseError(cntxt, "<identifier> 
expected in control statement\n");
                                return;
                        }
                        getArg(curInstr, 0) = newTmpVariable(curBlk, TYPE_any);
-                       pushInstruction(curBlk, curInstr);
+                       freeInstruction(curInstr);
                        parseError(cntxt, "<identifier> expected\n");
                        return;
                }
@@ -1702,13 +1687,13 @@ FCNcallparse2:
                        advance(cntxt, i);
                } else {
                        parseError(cntxt, "<functionname> expected\n");
-                       pushInstruction(curBlk, curInstr);
+                       freeInstruction(curInstr);
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to