Changeset: cf411b4fd73d for MonetDB URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=cf411b4fd73d Modified Files: sql/backends/monet5/Tests/pyloader01.sql sql/backends/monet5/Tests/pyloader02.sql sql/backends/monet5/Tests/pyloader03.sql sql/backends/monet5/Tests/pyloader03.stable.err sql/backends/monet5/Tests/pyloader04.sql sql/backends/monet5/Tests/pyloader04.stable.err sql/backends/monet5/Tests/pyloader05.sql sql/server/sql_parser.y Branch: pythonloader Log Message:
Change loader syntax to COPY LOADER INTO instead of COPY INTO ... FROM LOADER because the SQL Parser gets confused at the latter syntax, which breaks regular copy into statements. diffs (251 lines): diff --git a/sql/backends/monet5/Tests/pyloader01.sql b/sql/backends/monet5/Tests/pyloader01.sql --- a/sql/backends/monet5/Tests/pyloader01.sql +++ b/sql/backends/monet5/Tests/pyloader01.sql @@ -23,10 +23,10 @@ SELECT name,func,mod,language,type,side_ -- there is a reason for this, functions with 0, 1, 2 and 3+ arguments are handled differently. -COPY INTO mytable FROM LOADER myfunc3(46, 'asdf', 3.2); -COPY INTO mytable FROM LOADER myfunc2(45, 'asdf'); -COPY INTO mytable FROM LOADER myfunc1(44); -COPY INTO mytable FROM LOADER myfunc(); +COPY LOADER INTO mytable FROM myfunc3(46, 'asdf', 3.2); +COPY LOADER INTO mytable FROM myfunc2(45, 'asdf'); +COPY LOADER INTO mytable FROM myfunc1(44); +COPY LOADER INTO mytable FROM myfunc(); SELECT * FROM mytable; diff --git a/sql/backends/monet5/Tests/pyloader02.sql b/sql/backends/monet5/Tests/pyloader02.sql --- a/sql/backends/monet5/Tests/pyloader02.sql +++ b/sql/backends/monet5/Tests/pyloader02.sql @@ -14,9 +14,9 @@ CREATE LOADER myfunc(nvalues int, ncols _emit.emit(res) }; -COPY INTO mytable3 FROM LOADER myfunc(10, 3); -COPY INTO mytable4 FROM LOADER myfunc(10, 3); -COPY INTO mytable2 FROM LOADER myfunc(20, 2); +COPY LOADER INTO mytable3 FROM myfunc(10, 3); +COPY LOADER INTO mytable4 FROM myfunc(10, 3); +COPY LOADER INTO mytable2 FROM myfunc(20, 2); SELECT * FROM mytable4; SELECT * FROM mytable3; diff --git a/sql/backends/monet5/Tests/pyloader03.sql b/sql/backends/monet5/Tests/pyloader03.sql --- a/sql/backends/monet5/Tests/pyloader03.sql +++ b/sql/backends/monet5/Tests/pyloader03.sql @@ -11,7 +11,7 @@ CREATE LOADER myloader(nvalues INTEGER) _emit.emit({'a1': a1, 'a2': a2, 'a3': a3, 'a4': a4}) }; -COPY INTO restable FROM LOADER myloader(10); +COPY LOADER INTO restable FROM myloader(10); SELECT * FROM restable; @@ -28,7 +28,7 @@ CREATE LOADER myloader() LANGUAGE PYTHON _emit.emit({'a1': a1, 'a2': a2, 'a3': a3, 'a4': a4}) }; -COPY INTO restable FROM LOADER myloader(); +COPY LOADER INTO restable FROM myloader(); SELECT * FROM restable; @@ -43,7 +43,7 @@ CREATE LOADER myloader() LANGUAGE PYTHON _emit.emit({'a1': a1, 'a2': a2}) }; -COPY INTO restable FROM LOADER myloader(); +COPY LOADER INTO restable FROM myloader(); ROLLBACK; @@ -60,7 +60,7 @@ CREATE LOADER myloader(nvalues INTEGER) _emit.emit({'a1': a1, 'a2': a2, 'a3': a3, 'a4': a4}) }; -COPY INTO restable FROM LOADER myloader(50); +COPY LOADER INTO restable FROM myloader(50); SELECT * FROM restable; @@ -94,7 +94,7 @@ CREATE LOADER myloader() LANGUAGE PYTHON _emit.emit({'a1': a1, 'a2': a2, 'a3': a3, 'a4': a4}) }; -COPY INTO restable FROM LOADER myloader(); +COPY LOADER INTO restable FROM myloader(); SELECT * FROM restable; diff --git a/sql/backends/monet5/Tests/pyloader03.stable.err b/sql/backends/monet5/Tests/pyloader03.stable.err --- a/sql/backends/monet5/Tests/pyloader03.stable.err +++ b/sql/backends/monet5/Tests/pyloader03.stable.err @@ -28,8 +28,8 @@ stderr of test 'pyloader03` in directory # 13:26:40 > "mclient" "-lsql" "-ftest" "-Eutf-8" "-i" "-e" "--host=/var/tmp/mtest-30229" "--port=37683" # 13:26:40 > -MAPI = (monetdb) /var/tmp/mtest-30229/.s.monetdb.37683 -QUERY = COPY INTO restable FROM LOADER myloader(); +MAPI = (monetdb) /var/tmp/mtest-6147/.s.monetdb.38930 +QUERY = COPY LOADER INTO restable FROM myloader(); ERROR = !Python exception ! 2. a1 = numpy.arange(100) ! 3. a2 = numpy.arange(200) diff --git a/sql/backends/monet5/Tests/pyloader04.sql b/sql/backends/monet5/Tests/pyloader04.sql --- a/sql/backends/monet5/Tests/pyloader04.sql +++ b/sql/backends/monet5/Tests/pyloader04.sql @@ -5,7 +5,7 @@ CREATE TABLE pyloader04table(a1 int, a2 CREATE LOADER pyloader04() LANGUAGE PYTHON { _emit.emit({'a1': 3, 'a2': 4, 'a3': 5}) }; -COPY INTO pyloader04table FROM LOADER pyloader04(); +COPY LOADER INTO pyloader04table FROM pyloader04(); ROLLBACK; # use non-string type as key @@ -14,7 +14,7 @@ CREATE TABLE pyloader04table(a1 int, a2 CREATE LOADER pyloader04() LANGUAGE PYTHON { _emit.emit({'a1': 3, 'a2': 4, 3: 5}) }; -COPY INTO pyloader04table FROM LOADER pyloader04(); +COPY LOADER INTO pyloader04table FROM pyloader04(); ROLLBACK; # return empty list @@ -23,7 +23,7 @@ CREATE TABLE pyloader04table(a1 int, a2 CREATE LOADER pyloader04() LANGUAGE PYTHON { _emit.emit({'a1': [], 'a2': numpy.array([])}) }; -COPY INTO pyloader04table FROM LOADER pyloader04(); +COPY LOADER INTO pyloader04table FROM pyloader04(); ROLLBACK; # empty dictionary @@ -32,7 +32,7 @@ CREATE TABLE pyloader04table(a1 int, a2 CREATE LOADER pyloader04() LANGUAGE PYTHON { _emit.emit({}) }; -COPY INTO pyloader04table FROM LOADER pyloader04(); +COPY LOADER INTO pyloader04table FROM pyloader04(); ROLLBACK; # unsupported python object @@ -44,7 +44,7 @@ CREATE LOADER pyloader04() LANGUAGE PYTH _emit.emit({'a1': MyClass()}) }; -COPY INTO pyloader04table FROM LOADER pyloader04(); +COPY LOADER INTO pyloader04table FROM pyloader04(); ROLLBACK; # fail str -> int conversion @@ -53,7 +53,7 @@ CREATE TABLE pyloader04table(a1 int, a2 CREATE LOADER pyloader04() LANGUAGE PYTHON { _emit.emit({'a1': 'hello'}) }; -COPY INTO pyloader04table FROM LOADER pyloader04(); +COPY LOADER INTO pyloader04table FROM pyloader04(); ROLLBACK; # test quoted names @@ -62,7 +62,7 @@ CREATE TABLE pyloader04table("select" in CREATE LOADER pyloader04() LANGUAGE PYTHON { _emit.emit({'select': 3, 'from': 4}) }; -COPY INTO pyloader04table FROM LOADER pyloader04(); +COPY LOADER INTO pyloader04table FROM pyloader04(); SELECT * FROM pyloader04table; DROP TABLE pyloader04table; DROP LOADER pyloader04; diff --git a/sql/backends/monet5/Tests/pyloader04.stable.err b/sql/backends/monet5/Tests/pyloader04.stable.err --- a/sql/backends/monet5/Tests/pyloader04.stable.err +++ b/sql/backends/monet5/Tests/pyloader04.stable.err @@ -29,46 +29,46 @@ stderr of test 'pyloader04` in directory # 12:30:43 > "mclient" "-lsql" "-ftest" "-Eutf-8" "-i" "-e" "--host=/var/tmp/mtest-7433" "--port=34261" # 12:30:43 > -MAPI = (monetdb) /var/tmp/mtest-7433/.s.monetdb.34261 -QUERY = COPY INTO pyloader04table FROM LOADER pyloader04(); +MAPI = (monetdb) /var/tmp/mtest-6147/.s.monetdb.38930 +QUERY = COPY LOADER INTO pyloader04table FROM pyloader04(); ERROR = !Python exception ! 1. def pyfun(_emit,_conn): ! 2. _emit.emit({'a1': 3, 'a2': 4, 'a3': 5}) !> 3. !Unmatched element "a3" in dict -MAPI = (monetdb) /var/tmp/mtest-7433/.s.monetdb.34261 -QUERY = COPY INTO pyloader04table FROM LOADER pyloader04(); +MAPI = (monetdb) /var/tmp/mtest-6147/.s.monetdb.38930 +QUERY = COPY LOADER INTO pyloader04table FROM pyloader04(); ERROR = !Python exception !def pyfun(_emit,_conn): ! _emit.emit({'a1': 3, 'a2': 4, 3: 5}) ! !Expected a string as dict key, but found <type 'int'> -MAPI = (monetdb) /var/tmp/mtest-7433/.s.monetdb.34261 -QUERY = COPY INTO pyloader04table FROM LOADER pyloader04(); +MAPI = (monetdb) /var/tmp/mtest-6147/.s.monetdb.38930 +QUERY = COPY LOADER INTO pyloader04table FROM pyloader04(); ERROR = !Python exception ! ! 1. def pyfun(_emit,_conn): !> 2. _emit.emit({'a1': [], 'a2': numpy.array([])}) ! 3. !Empty input values supplied -MAPI = (monetdb) /var/tmp/mtest-7433/.s.monetdb.34261 -QUERY = COPY INTO pyloader04table FROM LOADER pyloader04(); +MAPI = (monetdb) /var/tmp/mtest-6147/.s.monetdb.38930 +QUERY = COPY LOADER INTO pyloader04table FROM pyloader04(); ERROR = !Python exception ! ! 1. def pyfun(_emit,_conn): !> 2. _emit.emit({}) ! 3. !dict must contain at least one element -MAPI = (monetdb) /var/tmp/mtest-7433/.s.monetdb.34261 -QUERY = COPY INTO pyloader04table FROM LOADER pyloader04(); +MAPI = (monetdb) /var/tmp/mtest-6147/.s.monetdb.38930 +QUERY = COPY LOADER INTO pyloader04table FROM pyloader04(); ERROR = !Python exception ! 2. class MyClass: ! 3. i = 1234 !> 4. _emit.emit({'a1': MyClass()}) ! 5. !Unsupported Python Object <type 'instance'> -MAPI = (monetdb) /var/tmp/mtest-7433/.s.monetdb.34261 -QUERY = COPY INTO pyloader04table FROM LOADER pyloader04(); +MAPI = (monetdb) /var/tmp/mtest-6147/.s.monetdb.38930 +QUERY = COPY LOADER INTO pyloader04table FROM pyloader04(); ERROR = !Python exception ! ! 1. def pyfun(_emit,_conn): diff --git a/sql/backends/monet5/Tests/pyloader05.sql b/sql/backends/monet5/Tests/pyloader05.sql --- a/sql/backends/monet5/Tests/pyloader05.sql +++ b/sql/backends/monet5/Tests/pyloader05.sql @@ -19,7 +19,7 @@ CREATE LOADER pyloader05() LANGUAGE PYTH _emit.emit({'s': numpy.arange(3).astype(numpy.int32)}); _emit.emit({'s': numpy.arange(3).astype(numpy.int64)}); }; -COPY INTO pyloader05table FROM LOADER pyloader05(); +COPY LOADER INTO pyloader05table FROM pyloader05(); SELECT * FROM pyloader05table; DROP TABLE pyloader05table; DROP LOADER pyloader05; diff --git a/sql/server/sql_parser.y b/sql/server/sql_parser.y --- a/sql/server/sql_parser.y +++ b/sql/server/sql_parser.y @@ -2555,9 +2555,9 @@ copyfrom_stmt: append_int(l, $13); append_list(l, NULL); $$ = _symbol_create_list( SQL_COPYFROM, l ); } - | COPY INTO qname FROM sqlLOADER func_ref + | COPY sqlLOADER INTO qname FROM func_ref { dlist *l = L(); - append_list(l, $3); + append_list(l, $4); append_symbol(l, $6); $$ = _symbol_create_list( SQL_COPYLOADER, l ); } | COPY opt_nr BINARY INTO qname FROM string_commalist /* binary copy from */ opt_constraint _______________________________________________ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list