Changeset: 105399586e53 for MonetDB URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=105399586e53 Added Files: sql/backends/monet5/generator/Tests/generator04.sql sql/backends/monet5/generator/Tests/generator04.stable.err sql/backends/monet5/generator/Tests/generator04.stable.out Modified Files: sql/backends/monet5/generator/Tests/All sql/backends/monet5/generator/Tests/generator01.stable.err sql/backends/monet5/generator/generator.c Branch: generator Log Message:
Protect against 'infinite' ranges diffs (257 lines): diff --git a/sql/backends/monet5/generator/Tests/All b/sql/backends/monet5/generator/Tests/All --- a/sql/backends/monet5/generator/Tests/All +++ b/sql/backends/monet5/generator/Tests/All @@ -2,6 +2,7 @@ generator00 generator01 generator02 generator03 +generator04 joins00 joins01 diff --git a/sql/backends/monet5/generator/Tests/generator01.stable.err b/sql/backends/monet5/generator/Tests/generator01.stable.err --- a/sql/backends/monet5/generator/Tests/generator01.stable.err +++ b/sql/backends/monet5/generator/Tests/generator01.stable.err @@ -29,22 +29,22 @@ stderr of test 'generator01` in director # 12:42:21 > "mclient" "-lsql" "-ftest" "-Eutf-8" "-i" "-e" "--host=/var/tmp/mtest-23485" "--port=37579" # 12:42:21 > -MAPI = (monetdb) /var/tmp/mtest-23485/.s.monetdb.37579 +MAPI = (monetdb) /var/tmp/mtest-14690/.s.monetdb.36598 QUERY = select * from generate_series(0,10,-2); -ERROR = !illegal generator arguments -MAPI = (monetdb) /var/tmp/mtest-23485/.s.monetdb.37579 +ERROR = !Illegal generator arguments +MAPI = (monetdb) /var/tmp/mtest-14690/.s.monetdb.36598 QUERY = select * from generate_series(10,2,2); -ERROR = !illegal generator arguments -MAPI = (monetdb) /var/tmp/mtest-23485/.s.monetdb.37579 +ERROR = !Illegal generator arguments +MAPI = (monetdb) /var/tmp/mtest-14690/.s.monetdb.36598 QUERY = select * from generate_series(0,10,0) ; ERROR = !zero step size not allowed -MAPI = (monetdb) /var/tmp/mtest-23485/.s.monetdb.37579 +MAPI = (monetdb) /var/tmp/mtest-14690/.s.monetdb.36598 QUERY = select * from generate_series(0,10,null) ; ERROR = !null step size not allowed -MAPI = (monetdb) /var/tmp/mtest-23485/.s.monetdb.37579 +MAPI = (monetdb) /var/tmp/mtest-14690/.s.monetdb.36598 QUERY = select * from generate_series(0,10,-2) as v where value <7 and value >3; -ERROR = !illegal generator arguments +ERROR = !Illegal generator arguments # 12:42:21 > # 12:42:21 > "Done." diff --git a/sql/backends/monet5/generator/Tests/generator04.sql b/sql/backends/monet5/generator/Tests/generator04.sql new file mode 100644 --- /dev/null +++ b/sql/backends/monet5/generator/Tests/generator04.sql @@ -0,0 +1,8 @@ +-- some unit tests +select * from generate_series('a','b','c'); + +select * from generate_series(false,true,false) ; + +select * from generate_series(null,null,1); +select * from generate_series(10,null,1); +select * from generate_series(null,10,1); diff --git a/sql/backends/monet5/generator/Tests/generator04.stable.err b/sql/backends/monet5/generator/Tests/generator04.stable.err new file mode 100644 --- /dev/null +++ b/sql/backends/monet5/generator/Tests/generator04.stable.err @@ -0,0 +1,51 @@ +stderr of test 'generator04` in directory 'sql/backends/monet5/generator` itself: + + +# 21:18:55 > +# 21:18:55 > "mserver5" "--debug=10" "--set" "gdk_nr_threads=0" "--set" "mapi_open=true" "--set" "mapi_port=36598" "--set" "mapi_usock=/var/tmp/mtest-14690/.s.monetdb.36598" "--set" "monet_prompt=" "--forcemito" "--set" "mal_listing=2" "--dbpath=/export/scratch1/mk/generator//Linux/var/MonetDB/mTests_sql_backends_monet5_generator" "--set" "mal_listing=0" +# 21:18:55 > + +# builtin opt gdk_dbpath = /export/scratch1/mk/generator//Linux/var/monetdb5/dbfarm/demo +# builtin opt gdk_debug = 0 +# builtin opt gdk_vmtrim = no +# builtin opt monet_prompt = > +# builtin opt monet_daemon = no +# builtin opt mapi_port = 50000 +# builtin opt mapi_open = false +# builtin opt mapi_autosense = false +# builtin opt sql_optimizer = default_pipe +# builtin opt sql_debug = 0 +# cmdline opt gdk_nr_threads = 0 +# cmdline opt mapi_open = true +# cmdline opt mapi_port = 36598 +# cmdline opt mapi_usock = /var/tmp/mtest-14690/.s.monetdb.36598 +# cmdline opt monet_prompt = +# cmdline opt mal_listing = 2 +# cmdline opt gdk_dbpath = /export/scratch1/mk/generator//Linux/var/MonetDB/mTests_sql_backends_monet5_generator +# cmdline opt mal_listing = 0 +# cmdline opt gdk_debug = 536870922 + +# 21:18:55 > +# 21:18:55 > "mclient" "-lsql" "-ftest" "-Eutf-8" "-i" "-e" "--host=/var/tmp/mtest-14690" "--port=36598" +# 21:18:55 > + +MAPI = (monetdb) /var/tmp/mtest-4477/.s.monetdb.36583 +QUERY = select * from generate_series('a','b','c'); +ERROR = !timestamp (a) has incorrect format +MAPI = (monetdb) /var/tmp/mtest-4477/.s.monetdb.36583 +QUERY = select * from generate_series(false,true,false) ; +ERROR = !types boolean(1,0) and timestamp(7,0) are not equal for column 'L1' +MAPI = (monetdb) /var/tmp/mtest-4477/.s.monetdb.36583 +QUERY = select * from generate_series(null,null,1); +ERROR = !Illegal generator arguments +MAPI = (monetdb) /var/tmp/mtest-4477/.s.monetdb.36583 +QUERY = select * from generate_series(10,null,1); +ERROR = !Illegal generator arguments +MAPI = (monetdb) /var/tmp/mtest-4477/.s.monetdb.36583 +QUERY = select * from generate_series(null,10,1); +ERROR = !types tinyint(8,0) and timestamp(7,0) are not equal for column 'L2' + +# 21:18:55 > +# 21:18:55 > "Done." +# 21:18:55 > + diff --git a/sql/backends/monet5/generator/Tests/generator04.stable.out b/sql/backends/monet5/generator/Tests/generator04.stable.out new file mode 100644 --- /dev/null +++ b/sql/backends/monet5/generator/Tests/generator04.stable.out @@ -0,0 +1,31 @@ +stdout of test 'generator04` in directory 'sql/backends/monet5/generator` itself: + + +# 21:18:55 > +# 21:18:55 > "mserver5" "--debug=10" "--set" "gdk_nr_threads=0" "--set" "mapi_open=true" "--set" "mapi_port=36598" "--set" "mapi_usock=/var/tmp/mtest-14690/.s.monetdb.36598" "--set" "monet_prompt=" "--forcemito" "--set" "mal_listing=2" "--dbpath=/export/scratch1/mk/generator//Linux/var/MonetDB/mTests_sql_backends_monet5_generator" "--set" "mal_listing=0" +# 21:18:55 > + +# MonetDB 5 server v11.18.0 +# This is an unreleased version +# Serving database 'mTests_sql_backends_monet5_generator', using 8 threads +# Compiled for x86_64-unknown-linux-gnu/64bit with 64bit OIDs dynamically linked +# Found 15.591 GiB available main-memory. +# Copyright (c) 1993-July 2008 CWI. +# Copyright (c) August 2008-2014 MonetDB B.V., all rights reserved +# Visit http://www.monetdb.org/ for further information +# Listening for connection requests on mapi:monetdb://vienna.ins.cwi.nl:36598/ +# Listening for UNIX domain connection requests on mapi:monetdb:///var/tmp/mtest-14690/.s.monetdb.36598 +# MonetDB/GIS module loaded +# MonetDB/SQL module loaded + +Ready. + +# 21:18:55 > +# 21:18:55 > "mclient" "-lsql" "-ftest" "-Eutf-8" "-i" "-e" "--host=/var/tmp/mtest-14690" "--port=36598" +# 21:18:55 > + + +# 21:18:55 > +# 21:18:55 > "Done." +# 21:18:55 > + diff --git a/sql/backends/monet5/generator/generator.c b/sql/backends/monet5/generator/generator.c --- a/sql/backends/monet5/generator/generator.c +++ b/sql/backends/monet5/generator/generator.c @@ -177,9 +177,9 @@ VLTgenerator_noop(Client cntxt, MalBlkPt f = *(TPE*) getArgReference(stk, pci, 1); \ l = *(TPE*) getArgReference(stk, pci, 2); \ s = pci->argc == 3 ? 1 : *(TPE*) getArgReference(stk, pci, 3); \ - if (s == 0 || (s > 0 && f > l) || (s < 0 && f < l)) \ + if (s == 0 || (s > 0 && f > l) || (s < 0 && f < l) || f == TPE##_nil || l == TPE##_nil)\ throw(MAL, "generator.table", \ - "illegal generator arguments"); \ + "Illegal generator arguments"); \ n = (lng) ((l - f) / s); \ assert(n >= 0); \ if (n * s + f != l) \ @@ -239,15 +239,16 @@ VLTgenerator_table(Client cntxt, MalBlkP if (VARcalccmp(&ret, &stk->stk[pci->argv[1]], &stk->stk[pci->argv[2]]) == GDK_FAIL) throw(MAL, "generator.table", - "illegal generator arguments"); + "Illegal generator expression arguments"); f = *(timestamp *) getArgReference(stk, pci, 1); l = *(timestamp *) getArgReference(stk, pci, 2); s = *(lng *) getArgReference(stk, pci, 3); if (s == 0 || (s > 0 && ret.val.btval > 0) || - (s < 0 && ret.val.btval < 0)) + (s < 0 && ret.val.btval < 0) || + timestamp_isnil(f) || timestamp_isnil(l)) throw(MAL, "generator.table", - "illegal generator arguments"); + "Illegal generator arguments"); /* casting one value to lng causes the whole * computation to be done as lng, reducing the * risk of overflow */ @@ -315,9 +316,9 @@ findLastAssign(MalBlkPtr mb, InstrPtr pc f = * (TPE *) getArgReference(stk, p, 1); \ l = * (TPE *) getArgReference(stk, p, 2); \ s = p->argc == 3 ? 1 : * (TPE *) getArgReference(stk, p, 3); \ - if (s == 0 || (s > 0 && f > l) || (s < 0 && f < l)) \ + if (s == 0 || (s > 0 && f > l) || (s < 0 && f < l) || f == TPE##_nil || l == TPE##_nil) \ throw(MAL, "generator.subselect", \ - "illegal generator arguments"); \ + "Illegal generator arguments"); \ n = (lng) (((TPE2) l - (TPE2) f) / (TPE2) s); \ assert(n >= 0); \ if (n * s + f != l) \ @@ -428,16 +429,12 @@ VLTgenerator_subselect(Client cntxt, Mal timestamp tlow,thgh; lng tss; oid *ol; - ValRecord ret; - if (VARcalccmp(&ret, &stk->stk[p->argv[1]], &stk->stk[p->argv[2]]) == GDK_FAIL) - throw(MAL, "generator.subselect", "Illegal generator arguments"); tsf = *(timestamp *) getArgReference(stk, p, 1); tsl = *(timestamp *) getArgReference(stk, p, 2); tss = *(lng *) getArgReference(stk, p, 3); if ( tss == 0 || - ( tss > 0 && ret.val.btval > 0) || - ( tss < 0 && ret.val.btval < 0)) + timestamp_isnil(tsf) || timestamp_isnil(tsl)) throw(MAL, "generator.subselect", "Illegal generator arguments"); tlow = *(timestamp*) getArgReference(stk,pci,i); @@ -662,11 +659,14 @@ str VLTgenerator_thetasubselect(Client c timestamp f,l, low, hgh; lng s; oid *v; + f = *(timestamp*) getArgReference(stk,p, 1); l = *(timestamp*) getArgReference(stk,p, 2); s = *(lng*) getArgReference(stk,p, 3); hgh = low = *(timestamp*) getArgReference(stk,pci, idx); + if ( s == 0 || timestamp_isnil(f) || timestamp_isnil(l)) + throw(MAL, "generator.subselect", "Illegal generator arguments"); if( timestamp_isnil(low) ) low = f; if( timestamp_isnil(hgh)) @@ -749,7 +749,7 @@ wrapup: l = *(TPE*) getArgReference(stk,p, 2);\ s = *(TPE*) getArgReference(stk,p, 3);\ if ( s == 0 || (f> l && s>0) || (f<l && s < 0))\ - throw(MAL,"generator.leftfetchjoin","illegal range");\ + throw(MAL,"generator.leftfetchjoin","Illegal range");\ bn = BATnew(TYPE_void, TYPE_##TPE, cnt);\ if( bn == NULL){\ BBPreleaseref(bid);\ @@ -854,7 +854,7 @@ str VLTgenerator_leftfetchjoin(Client cn s = *(TPE*) getArgReference(stk,p, 3);\ v = (TPE*) Tloc(bl,BUNfirst(bl));\ if ( s == 0 || (f> l && s>0) || (f<l && s < 0))\ - throw(MAL,"generator.join","illegal range");\ + throw(MAL,"generator.join","Illegal range");\ for( ; cnt >0; cnt--,o++,v++){\ w = (BUN) floor( (double)((*v -f)/s));\ if ( f + (TPE)(w * s) == *v ){\ @@ -923,7 +923,7 @@ str VLTgenerator_join(Client cntxt, MalB l = *(bte*) getArgReference(stk,p, 2); s = *(bte*) getArgReference(stk,p, 3); if ( s == 0 || (f> l && s>0) || (f<l && s < 0)) - throw(MAL,"generator.join","illegal range"); + throw(MAL,"generator.join","Illegal range"); v = (bte*) Tloc(b,BUNfirst(b)); for( ; cnt >0; cnt--,o++,v++){ w = (BUN) floor((*v -f)/s); _______________________________________________ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list