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