Changeset: ada287971b70 for MonetDB URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=ada287971b70 Added Files: sql/backends/monet5/UDF/pyapi3/50_pyapi3.mal sql/backends/monet5/UDF/pyapi3/Makefile.ag sql/backends/monet5/UDF/pyapi3/Tests/All sql/backends/monet5/UDF/pyapi3/Tests/pyapi3_00.SQL.sh sql/backends/monet5/UDF/pyapi3/Tests/pyapi3_00.stable.err sql/backends/monet5/UDF/pyapi3/Tests/pyapi3_00.stable.out sql/backends/monet5/UDF/pyapi3/Tests/pyapi3_01.SQL.sh sql/backends/monet5/UDF/pyapi3/Tests/pyapi3_01.stable.err sql/backends/monet5/UDF/pyapi3/Tests/pyapi3_01.stable.out sql/backends/monet5/UDF/pyapi3/Tests/pyapi3_02.SQL.sh sql/backends/monet5/UDF/pyapi3/Tests/pyapi3_02.stable.err sql/backends/monet5/UDF/pyapi3/Tests/pyapi3_02.stable.out sql/backends/monet5/UDF/pyapi3/Tests/pyapi3_03.SQL.sh sql/backends/monet5/UDF/pyapi3/Tests/pyapi3_03.stable.err sql/backends/monet5/UDF/pyapi3/Tests/pyapi3_03.stable.out sql/backends/monet5/UDF/pyapi3/Tests/pyapi3_04.SQL.sh sql/backends/monet5/UDF/pyapi3/Tests/pyapi3_04.stable.err sql/backends/monet5/UDF/pyapi3/Tests/pyapi3_04.stable.out sql/backends/monet5/UDF/pyapi3/Tests/pyapi3_05.SQL.sh sql/backends/monet5/UDF/pyapi3/Tests/pyapi3_05.stable.err sql/backends/monet5/UDF/pyapi3/Tests/pyapi3_05.stable.out sql/backends/monet5/UDF/pyapi3/Tests/pyapi3_06.SQL.sh sql/backends/monet5/UDF/pyapi3/Tests/pyapi3_06.stable.err sql/backends/monet5/UDF/pyapi3/Tests/pyapi3_06.stable.out sql/backends/monet5/UDF/pyapi3/Tests/pyapi3_07.SQL.sh sql/backends/monet5/UDF/pyapi3/Tests/pyapi3_07.stable.err sql/backends/monet5/UDF/pyapi3/Tests/pyapi3_07.stable.out sql/backends/monet5/UDF/pyapi3/Tests/pyapi3_09.SQL.sh sql/backends/monet5/UDF/pyapi3/Tests/pyapi3_09.stable.err sql/backends/monet5/UDF/pyapi3/Tests/pyapi3_09.stable.out sql/backends/monet5/UDF/pyapi3/Tests/pyapi3_10.SQL.sh sql/backends/monet5/UDF/pyapi3/Tests/pyapi3_10.stable.err sql/backends/monet5/UDF/pyapi3/Tests/pyapi3_10.stable.out sql/backends/monet5/UDF/pyapi3/Tests/pyapi3_11.SQL.sh sql/backends/monet5/UDF/pyapi3/Tests/pyapi3_11.stable.err sql/backends/monet5/UDF/pyapi3/Tests/pyapi3_11.stable.out sql/backends/monet5/UDF/pyapi3/Tests/pyapi3_12.SQL.sh sql/backends/monet5/UDF/pyapi3/Tests/pyapi3_12.stable.err sql/backends/monet5/UDF/pyapi3/Tests/pyapi3_12.stable.out sql/backends/monet5/UDF/pyapi3/Tests/pyapi3_13.SQL.sh sql/backends/monet5/UDF/pyapi3/Tests/pyapi3_13.stable.err sql/backends/monet5/UDF/pyapi3/Tests/pyapi3_13.stable.out sql/backends/monet5/UDF/pyapi3/Tests/pyapi3_15.SQL.sh sql/backends/monet5/UDF/pyapi3/Tests/pyapi3_16.SQL.sh sql/backends/monet5/UDF/pyapi3/Tests/pyapi3_16.stable.err sql/backends/monet5/UDF/pyapi3/Tests/pyapi3_16.stable.out sql/backends/monet5/UDF/pyapi3/Tests/pyapi3_17.SQL.sh sql/backends/monet5/UDF/pyapi3/Tests/pyapi3_17.stable.err sql/backends/monet5/UDF/pyapi3/Tests/pyapi3_17.stable.out sql/backends/monet5/UDF/pyapi3/Tests/pyapi3_18.SQL.sh sql/backends/monet5/UDF/pyapi3/Tests/pyapi3_18.stable.err sql/backends/monet5/UDF/pyapi3/Tests/pyapi3_18.stable.out sql/backends/monet5/UDF/pyapi3/Tests/pyapi3_19.SQL.sh sql/backends/monet5/UDF/pyapi3/Tests/pyapi3_19.stable.err sql/backends/monet5/UDF/pyapi3/Tests/pyapi3_19.stable.out sql/backends/monet5/UDF/pyapi3/Tests/pyapi3_20.SQL.sh sql/backends/monet5/UDF/pyapi3/Tests/pyapi3_20.stable.err sql/backends/monet5/UDF/pyapi3/Tests/pyapi3_20.stable.out sql/backends/monet5/UDF/pyapi3/Tests/pyapi3_21.SQL.sh sql/backends/monet5/UDF/pyapi3/Tests/pyapi3_21.stable.err sql/backends/monet5/UDF/pyapi3/Tests/pyapi3_21.stable.out sql/backends/monet5/UDF/pyapi3/Tests/pyapi3_23.SQL.sh sql/backends/monet5/UDF/pyapi3/Tests/pyapi3_23.stable.err sql/backends/monet5/UDF/pyapi3/Tests/pyapi3_23.stable.out sql/backends/monet5/UDF/pyapi3/Tests/pyapi3_24.SQL.sh sql/backends/monet5/UDF/pyapi3/Tests/pyapi3_24.stable.err sql/backends/monet5/UDF/pyapi3/Tests/pyapi3_24.stable.out sql/backends/monet5/UDF/pyapi3/Tests/pyapi3_25.SQL.sh sql/backends/monet5/UDF/pyapi3/Tests/pyapi3_25.stable.err sql/backends/monet5/UDF/pyapi3/Tests/pyapi3_25.stable.out sql/backends/monet5/UDF/pyapi3/Tests/pyapi3_26.SQL.sh sql/backends/monet5/UDF/pyapi3/Tests/pyapi3_26.stable.err sql/backends/monet5/UDF/pyapi3/Tests/pyapi3_26.stable.out sql/backends/monet5/UDF/pyapi3/Tests/pyapi3_27.SQL.sh sql/backends/monet5/UDF/pyapi3/Tests/pyapi3_27.stable.err sql/backends/monet5/UDF/pyapi3/Tests/pyapi3_27.stable.out sql/backends/monet5/UDF/pyapi3/Tests/pyapi3_28.SQL.sh sql/backends/monet5/UDF/pyapi3/Tests/pyapi3_28.stable.err sql/backends/monet5/UDF/pyapi3/Tests/pyapi3_28.stable.out sql/backends/monet5/UDF/pyapi3/Tests/pyapi3_29.SQL.sh sql/backends/monet5/UDF/pyapi3/Tests/pyapi3_29.stable.err sql/backends/monet5/UDF/pyapi3/Tests/pyapi3_29.stable.out sql/backends/monet5/UDF/pyapi3/Tests/pyapi3_30.SQL.sh sql/backends/monet5/UDF/pyapi3/Tests/pyapi3_30.stable.err sql/backends/monet5/UDF/pyapi3/Tests/pyapi3_30.stable.out sql/backends/monet5/UDF/pyapi3/Tests/pyapi3_31.SQL.sh sql/backends/monet5/UDF/pyapi3/Tests/pyapi3_31.stable.err sql/backends/monet5/UDF/pyapi3/Tests/pyapi3_31.stable.out sql/backends/monet5/UDF/pyapi3/Tests/pyapi3_32.SQL.sh sql/backends/monet5/UDF/pyapi3/Tests/pyapi3_32.stable.err sql/backends/monet5/UDF/pyapi3/Tests/pyapi3_32.stable.out sql/backends/monet5/UDF/pyapi3/Tests/pyloader3_01.SQL.sh sql/backends/monet5/UDF/pyapi3/Tests/pyloader3_01.stable.err sql/backends/monet5/UDF/pyapi3/Tests/pyloader3_01.stable.out sql/backends/monet5/UDF/pyapi3/Tests/pyloader3_02.SQL.sh sql/backends/monet5/UDF/pyapi3/Tests/pyloader3_02.stable.err sql/backends/monet5/UDF/pyapi3/Tests/pyloader3_02.stable.out sql/backends/monet5/UDF/pyapi3/Tests/pyloader3_05.SQL.sh sql/backends/monet5/UDF/pyapi3/Tests/pyloader3_05.stable.err sql/backends/monet5/UDF/pyapi3/Tests/pyloader3_05.stable.out sql/backends/monet5/UDF/pyapi3/connection3.c sql/backends/monet5/UDF/pyapi3/conversion3.c sql/backends/monet5/UDF/pyapi3/emit3.c sql/backends/monet5/UDF/pyapi3/formatinput3.c sql/backends/monet5/UDF/pyapi3/pyapi3.c sql/backends/monet5/UDF/pyapi3/pyapi3.mal sql/backends/monet5/UDF/pyapi3/pyloader3.c sql/backends/monet5/UDF/pyapi3/pytypes3.c sql/backends/monet5/UDF/pyapi3/type_conversion3.c sql/backends/monet5/UDF/pyapi3/unicode3.c sql/test/BugTracker-2015/Tests/crash_timestamp_convert.Bug-3816.stable.out.Darwin.src sql/test/BugTracker-2015/Tests/crash_timestamp_convert.Bug-3816.stable.out.FreeBSD sql/test/BugTracker-2017/Tests/fullouterjoinfilter.Bug-6256.sql sql/test/BugTracker-2017/Tests/fullouterjoinfilter.Bug-6256.stable.err sql/test/BugTracker-2017/Tests/fullouterjoinfilter.Bug-6256.stable.out sql/test/BugTracker-2017/Tests/wrong_aggregation_count.Bug-6257.sql sql/test/BugTracker-2017/Tests/wrong_aggregation_count.Bug-6257.stable.err sql/test/BugTracker-2017/Tests/wrong_aggregation_count.Bug-6257.stable.out Modified Files: .hgtags MonetDB.spec clients/Tests/MAL-signatures.stable.out clients/Tests/MAL-signatures.stable.out.int128 clients/Tests/exports.stable.out configure.ag debian/changelog gdk/gdk_bat.c gdk/gdk_batop.c gdk/gdk_calc.c gdk/gdk_logger.c gdk/gdk_orderidx.c libversions monetdb5/mal/mal_import.c monetdb5/mal/mal_linker.c monetdb5/mal/mal_profiler.c monetdb5/mal/mal_stack.c monetdb5/optimizer/opt_mitosis.c monetdb5/optimizer/opt_prelude.c monetdb5/optimizer/opt_prelude.h monetdb5/optimizer/opt_pushselect.c monetdb5/optimizer/opt_support.c sql/ChangeLog-Archive sql/backends/monet5/UDF/Makefile.ag sql/backends/monet5/UDF/pyapi/pyapi.c sql/backends/monet5/UDF/pyapi/pyapi.h sql/backends/monet5/UDF/pyapi/pyapi.mal sql/backends/monet5/UDF/pyapi/pyheader.h sql/backends/monet5/UDF/pyapi/pyloader.c sql/backends/monet5/UDF/pyapi/type_conversion.c sql/backends/monet5/UDF/pyapi/type_conversion.h sql/backends/monet5/rel_bin.c sql/backends/monet5/sql.c sql/backends/monet5/sql_cast.c sql/backends/monet5/sql_execute.c sql/backends/monet5/sql_gencode.c sql/backends/monet5/sql_result.c sql/backends/monet5/sql_scenario.h sql/backends/monet5/sql_statement.c sql/backends/monet5/sql_upgrades.c sql/backends/monet5/vaults/fits/fits.c sql/backends/monet5/vaults/netcdf/netcdf.c sql/include/sql_catalog.h sql/server/rel_optimizer.c sql/server/rel_rel.c sql/server/rel_select.c sql/server/rel_updates.c sql/server/sql_parser.y sql/storage/bat/bat_table.c sql/storage/store.c sql/test/BugTracker-2009/Tests/bool-str-bug.stable.out sql/test/BugTracker-2015/Tests/crash.Bug-3736.stable.out sql/test/BugTracker-2016/Tests/convert-function-test.Bug-3460.stable.out sql/test/BugTracker-2016/Tests/convert-function-test.Bug-3460.stable.out.int128 sql/test/BugTracker-2016/Tests/storagemodel.stable.out sql/test/BugTracker-2017/Tests/All sql/test/BugTracker-2017/Tests/crash_correlated_subqueries_in_select.Bug-6254.sql sql/test/BugTracker-2017/Tests/crash_correlated_subqueries_in_select.Bug-6254.stable.out sql/test/BugTracker/Tests/jdbc_no_debug.SF-1739356.stable.out sql/test/SQLite_regress/sqllogictest/Tests/select3.test.stable.out sql/test/SQLite_regress/sqllogictest/Tests/select3.test.stable.out.int128 sql/test/Tests/subqueries.stable.out sql/test/emptydb-upgrade-chain-hge/Tests/upgrade.stable.out.int128 sql/test/emptydb-upgrade-chain/Tests/upgrade.stable.out sql/test/emptydb-upgrade-chain/Tests/upgrade.stable.out.int128 sql/test/leaks/Tests/check1.stable.out.int128 sql/test/sql_xml/Tests/xml.reqtests sql/test/testdb-upgrade-chain-hge/Tests/upgrade.stable.out.int128 sql/test/testdb-upgrade-chain/Tests/upgrade.stable.out sql/test/testdb-upgrade-chain/Tests/upgrade.stable.out.int128 testing/Mtest.py.in tools/merovingian/daemon/forkmserver.c tools/merovingian/utils/properties.c tools/merovingian/utils/utils.c Branch: data-vaults Log Message:
Merge with default diffs (truncated from 61733 to 300 lines): diff --git a/.hgtags b/.hgtags --- a/.hgtags +++ b/.hgtags @@ -662,3 +662,5 @@ 94a35822a8d9dfc6458a2353168e37a21b16ea29 8dcbdc30cd49d1d03e3a21b37671d567d84943ae Dec2016_15 94a35822a8d9dfc6458a2353168e37a21b16ea29 Dec2016_SP3_release 8dcbdc30cd49d1d03e3a21b37671d567d84943ae Dec2016_SP3_release +07824a1c7beb75308b813378af33c243f1c2f511 Dec2016_17 +07824a1c7beb75308b813378af33c243f1c2f511 Dec2016_SP4_release diff --git a/MonetDB.spec b/MonetDB.spec --- a/MonetDB.spec +++ b/MonetDB.spec @@ -132,7 +132,7 @@ Vendor: MonetDB BV <i...@monetdb.org> Group: Applications/Databases License: MPLv2.0 URL: http://www.monetdb.org/ -Source: http://dev.monetdb.org/downloads/sources/Dec2016-SP3/%{name}-%{version}.tar.bz2 +Source: http://dev.monetdb.org/downloads/sources/Dec2016-SP4/%{name}-%{version}.tar.bz2 # we need systemd for the _unitdir macro to exist %if %{?rhel:0}%{!?rhel:1} || 0%{?rhel} >= 7 @@ -877,6 +877,15 @@ developer, but if you do want to test, t %build +# There is a bug in GCC version 4.8 on AArch64 architectures +# that causes it to report an internal error when compiling +# testing/difflib.c. The work around is to not use -fstack-protector-strong. +# The bug exhibits itself on CentOS 7 on AArch64. +if [ `gcc -v 2>&1 | grep -c 'Target: aarch64\|gcc version 4\.'` -eq 2 ]; then + # set CFLAGS before configure, so that this value gets used + CFLAGS='-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions --param=ssp-buffer-size=4 -grecord-gcc-switches ' + export CFLAGS +fi %{configure} \ --enable-assert=no \ --enable-console=yes \ @@ -944,6 +953,22 @@ rm -f %{buildroot}%{_bindir}/Maddlog %postun -p /sbin/ldconfig %changelog +* Tue Apr 11 2017 Sjoerd Mullender <sjo...@acm.org> - 11.25.17-20170411 +- Rebuilt. +- BZ#6110: cast of a SQL boolean value to a string or clob or (var)char + is wrong +- BZ#6254: Crash (and assertion failure) after querying a view which + uses a correlated subquery in the select-list +- BZ#6256: Assertion Trigger on FULL OUTER JOIN with more than two + BETWEEN clauses +- BZ#6257: wrong count values (1 instead of 0) for correlated aggregation + queries +- BZ#6258: Vulnerability in FITS and NETCDF data vaults + +* Tue Apr 11 2017 Sjoerd Mullender <sjo...@acm.org> - 11.25.17-20170411 +- sql: Upgrade code was added for an old change in the sys.settimeout function. +- sql: A bug was fixed with the automatic "vacuum" operation on system tables. + * Thu Mar 30 2017 Sjoerd Mullender <sjo...@acm.org> - 11.25.15-20170330 - Rebuilt. - BZ#6250: Assertion failure when querying a Blob column with order diff --git a/clients/Tests/MAL-signatures.stable.out b/clients/Tests/MAL-signatures.stable.out --- a/clients/Tests/MAL-signatures.stable.out +++ b/clients/Tests/MAL-signatures.stable.out @@ -6074,14 +6074,14 @@ Ready. [ "batmtime", "seconds", "command batmtime.seconds(d:bat[:daytime]):bat[:int] ", "MTIMEdaytime_extract_seconds_bulk;", "" ] [ "batmtime", "sql_seconds", "command batmtime.sql_seconds(d:bat[:daytime]):bat[:int] ", "MTIMEdaytime_extract_sql_seconds_bulk;", "" ] [ "batmtime", "year", "command batmtime.year(d:bat[:date]):bat[:int] ", "MTIMEdate_extract_year_bulk;", "" ] -[ "batpyapi", "eval", "pattern batpyapi.eval(fptr:ptr, expr:str, arg:any...):any... ", "PyAPIevalStd;", "Execute a simple Python script value" ] -[ "batpyapi", "eval_aggr", "pattern batpyapi.eval_aggr(fptr:ptr, expr:str, arg:any...):any... ", "PyAPIevalAggr;", "grouped aggregates through Python" ] -[ "batpyapi", "eval_loader", "pattern batpyapi.eval_loader(fptr:ptr, expr:str):any... ", "PyAPIevalLoader;", "loader functions through Python" ] -[ "batpyapi", "eval_loader", "pattern batpyapi.eval_loader(fptr:ptr, expr:str, arg:any...):any... ", "PyAPIevalLoader;", "loader functions through Python" ] -[ "batpyapi", "subeval_aggr", "pattern batpyapi.subeval_aggr(fptr:ptr, expr:str, arg:any...):any... ", "PyAPIevalAggr;", "grouped aggregates through Python" ] -[ "batpyapimap", "eval", "pattern batpyapimap.eval(fptr:ptr, expr:str, arg:any...):any... ", "PyAPIevalStdMap;", "Execute a simple Python script value" ] -[ "batpyapimap", "eval_aggr", "pattern batpyapimap.eval_aggr(fptr:ptr, expr:str, arg:any...):any... ", "PyAPIevalAggrMap;", "grouped aggregates through Python" ] -[ "batpyapimap", "subeval_aggr", "pattern batpyapimap.subeval_aggr(fptr:ptr, expr:str, arg:any...):any... ", "PyAPIevalAggrMap;", "grouped aggregates through Python" ] +[ "batpyapi", "eval", "pattern batpyapi.eval(fptr:ptr, expr:str, arg:any...):any... ", "PYAPI2PyAPIevalStd;", "Execute a simple Python script value" ] +[ "batpyapi", "eval_aggr", "pattern batpyapi.eval_aggr(fptr:ptr, expr:str, arg:any...):any... ", "PYAPI2PyAPIevalAggr;", "grouped aggregates through Python" ] +[ "batpyapi", "eval_loader", "pattern batpyapi.eval_loader(fptr:ptr, expr:str):any... ", "PYAPI2PyAPIevalLoader;", "loader functions through Python" ] +[ "batpyapi", "eval_loader", "pattern batpyapi.eval_loader(fptr:ptr, expr:str, arg:any...):any... ", "PYAPI2PyAPIevalLoader;", "loader functions through Python" ] +[ "batpyapi", "subeval_aggr", "pattern batpyapi.subeval_aggr(fptr:ptr, expr:str, arg:any...):any... ", "PYAPI2PyAPIevalAggr;", "grouped aggregates through Python" ] +[ "batpyapimap", "eval", "pattern batpyapimap.eval(fptr:ptr, expr:str, arg:any...):any... ", "PYAPI2PyAPIevalStdMap;", "Execute a simple Python script value" ] +[ "batpyapimap", "eval_aggr", "pattern batpyapimap.eval_aggr(fptr:ptr, expr:str, arg:any...):any... ", "PYAPI2PyAPIevalAggrMap;", "grouped aggregates through Python" ] +[ "batpyapimap", "subeval_aggr", "pattern batpyapimap.subeval_aggr(fptr:ptr, expr:str, arg:any...):any... ", "PYAPI2PyAPIevalAggrMap;", "grouped aggregates through Python" ] [ "batrapi", "eval", "pattern batrapi.eval(fptr:ptr, expr:str, arg:any...):any... ", "RAPIevalStd;", "Execute a simple R script value" ] [ "batrapi", "eval_aggr", "pattern batrapi.eval_aggr(fptr:ptr, expr:str, arg:any...):any... ", "RAPIevalAggr;", "grouped aggregates through R" ] [ "batrapi", "subeval_aggr", "pattern batrapi.subeval_aggr(fptr:ptr, expr:str, arg:any...):any... ", "RAPIevalAggr;", "grouped aggregates through R" ] @@ -8247,17 +8247,17 @@ Ready. [ "profiler", "stop", "pattern profiler.stop():void ", "CMDstopProfiler;", "Stop offline performance profiling" ] [ "profiler", "stoptrace", "command profiler.stoptrace():void ", "CMDstopTrace;", "Stop collecting trace information" ] [ "profiler", "stoptrace", "command profiler.stoptrace(path:str):void ", "CMDstopTracePath;", "Stop collecting trace information" ] -[ "pyapi", "eval", "pattern pyapi.eval(fptr:ptr, expr:str):any ", "PyAPIevalStd;", "Execute a simple Python script returning a single value" ] -[ "pyapi", "eval", "pattern pyapi.eval(fptr:ptr, expr:str, arg:any...):any... ", "PyAPIevalStd;", "Execute a simple Python script value" ] -[ "pyapi", "eval_aggr", "pattern pyapi.eval_aggr(fptr:ptr, expr:str, arg:any...):any... ", "PyAPIevalAggr;", "grouped aggregates through Python" ] -[ "pyapi", "eval_loader", "pattern pyapi.eval_loader(fptr:ptr, expr:str):any... ", "PyAPIevalLoader;", "loader functions through Python" ] -[ "pyapi", "eval_loader", "pattern pyapi.eval_loader(fptr:ptr, expr:str, arg:any...):any... ", "PyAPIevalLoader;", "loader functions through Python" ] -[ "pyapi", "prelude", "command pyapi.prelude():void ", "PyAPIprelude;", "" ] -[ "pyapi", "subeval_aggr", "pattern pyapi.subeval_aggr(fptr:ptr, expr:str, arg:any...):any... ", "PyAPIevalAggr;", "grouped aggregates through Python" ] -[ "pyapimap", "eval", "pattern pyapimap.eval(fptr:ptr, expr:str):any ", "PyAPIevalStdMap;", "Execute a simple Python script returning a single value" ] -[ "pyapimap", "eval", "pattern pyapimap.eval(fptr:ptr, expr:str, arg:any...):any... ", "PyAPIevalStdMap;", "Execute a simple Python script value" ] -[ "pyapimap", "eval_aggr", "pattern pyapimap.eval_aggr(fptr:ptr, expr:str, arg:any...):any... ", "PyAPIevalAggrMap;", "grouped aggregates through Python" ] -[ "pyapimap", "subeval_aggr", "pattern pyapimap.subeval_aggr(fptr:ptr, expr:str, arg:any...):any... ", "PyAPIevalAggrMap;", "grouped aggregates through Python" ] +[ "pyapi", "eval", "pattern pyapi.eval(fptr:ptr, expr:str):any ", "PYAPI2PyAPIevalStd;", "Execute a simple Python script returning a single value" ] +[ "pyapi", "eval", "pattern pyapi.eval(fptr:ptr, expr:str, arg:any...):any... ", "PYAPI2PyAPIevalStd;", "Execute a simple Python script value" ] +[ "pyapi", "eval_aggr", "pattern pyapi.eval_aggr(fptr:ptr, expr:str, arg:any...):any... ", "PYAPI2PyAPIevalAggr;", "grouped aggregates through Python" ] +[ "pyapi", "eval_loader", "pattern pyapi.eval_loader(fptr:ptr, expr:str):any... ", "PYAPI2PyAPIevalLoader;", "loader functions through Python" ] +[ "pyapi", "eval_loader", "pattern pyapi.eval_loader(fptr:ptr, expr:str, arg:any...):any... ", "PYAPI2PyAPIevalLoader;", "loader functions through Python" ] +[ "pyapi", "prelude", "command pyapi.prelude():void ", "PYAPI2PyAPIprelude;", "" ] +[ "pyapi", "subeval_aggr", "pattern pyapi.subeval_aggr(fptr:ptr, expr:str, arg:any...):any... ", "PYAPI2PyAPIevalAggr;", "grouped aggregates through Python" ] +[ "pyapimap", "eval", "pattern pyapimap.eval(fptr:ptr, expr:str):any ", "PYAPI2PyAPIevalStdMap;", "Execute a simple Python script returning a single value" ] +[ "pyapimap", "eval", "pattern pyapimap.eval(fptr:ptr, expr:str, arg:any...):any... ", "PYAPI2PyAPIevalStdMap;", "Execute a simple Python script value" ] +[ "pyapimap", "eval_aggr", "pattern pyapimap.eval_aggr(fptr:ptr, expr:str, arg:any...):any... ", "PYAPI2PyAPIevalAggrMap;", "grouped aggregates through Python" ] +[ "pyapimap", "subeval_aggr", "pattern pyapimap.subeval_aggr(fptr:ptr, expr:str, arg:any...):any... ", "PYAPI2PyAPIevalAggrMap;", "grouped aggregates through Python" ] [ "querylog", "append", "pattern querylog.append(q:str, pipe:str, usr:str, tick:timestamp):void ", "QLOGappend;", "Add a new query call to the query log" ] [ "querylog", "call", "pattern querylog.call(tick1:timestamp, tick2:timestamp, arg:str, tuples:lng, xtime:lng, rtime:lng, cpu:int, iowait:int):void ", "QLOGcall;", "Add a new query call to the query log" ] [ "querylog", "define", "command querylog.define(q:str, pipe:str, size:int):void ", "QLOGdefineNaive;", "Noop operation, just marking the query" ] diff --git a/clients/Tests/MAL-signatures.stable.out.int128 b/clients/Tests/MAL-signatures.stable.out.int128 --- a/clients/Tests/MAL-signatures.stable.out.int128 +++ b/clients/Tests/MAL-signatures.stable.out.int128 @@ -8040,14 +8040,14 @@ Ready. [ "batmtime", "seconds", "command batmtime.seconds(d:bat[:daytime]):bat[:int] ", "MTIMEdaytime_extract_seconds_bulk;", "" ] [ "batmtime", "sql_seconds", "command batmtime.sql_seconds(d:bat[:daytime]):bat[:int] ", "MTIMEdaytime_extract_sql_seconds_bulk;", "" ] [ "batmtime", "year", "command batmtime.year(d:bat[:date]):bat[:int] ", "MTIMEdate_extract_year_bulk;", "" ] -[ "batpyapi", "eval", "pattern batpyapi.eval(fptr:ptr, expr:str, arg:any...):any... ", "PyAPIevalStd;", "Execute a simple Python script value" ] -[ "batpyapi", "eval_aggr", "pattern batpyapi.eval_aggr(fptr:ptr, expr:str, arg:any...):any... ", "PyAPIevalAggr;", "grouped aggregates through Python" ] -[ "batpyapi", "eval_loader", "pattern batpyapi.eval_loader(fptr:ptr, expr:str):any... ", "PyAPIevalLoader;", "loader functions through Python" ] -[ "batpyapi", "eval_loader", "pattern batpyapi.eval_loader(fptr:ptr, expr:str, arg:any...):any... ", "PyAPIevalLoader;", "loader functions through Python" ] -[ "batpyapi", "subeval_aggr", "pattern batpyapi.subeval_aggr(fptr:ptr, expr:str, arg:any...):any... ", "PyAPIevalAggr;", "grouped aggregates through Python" ] -[ "batpyapimap", "eval", "pattern batpyapimap.eval(fptr:ptr, expr:str, arg:any...):any... ", "PyAPIevalStdMap;", "Execute a simple Python script value" ] -[ "batpyapimap", "eval_aggr", "pattern batpyapimap.eval_aggr(fptr:ptr, expr:str, arg:any...):any... ", "PyAPIevalAggrMap;", "grouped aggregates through Python" ] -[ "batpyapimap", "subeval_aggr", "pattern batpyapimap.subeval_aggr(fptr:ptr, expr:str, arg:any...):any... ", "PyAPIevalAggrMap;", "grouped aggregates through Python" ] +[ "batpyapi", "eval", "pattern batpyapi.eval(fptr:ptr, expr:str, arg:any...):any... ", "PYAPI2PyAPIevalStd;", "Execute a simple Python script value" ] +[ "batpyapi", "eval_aggr", "pattern batpyapi.eval_aggr(fptr:ptr, expr:str, arg:any...):any... ", "PYAPI2PyAPIevalAggr;", "grouped aggregates through Python" ] +[ "batpyapi", "eval_loader", "pattern batpyapi.eval_loader(fptr:ptr, expr:str):any... ", "PYAPI2PyAPIevalLoader;", "loader functions through Python" ] +[ "batpyapi", "eval_loader", "pattern batpyapi.eval_loader(fptr:ptr, expr:str, arg:any...):any... ", "PYAPI2PyAPIevalLoader;", "loader functions through Python" ] +[ "batpyapi", "subeval_aggr", "pattern batpyapi.subeval_aggr(fptr:ptr, expr:str, arg:any...):any... ", "PYAPI2PyAPIevalAggr;", "grouped aggregates through Python" ] +[ "batpyapimap", "eval", "pattern batpyapimap.eval(fptr:ptr, expr:str, arg:any...):any... ", "PYAPI2PyAPIevalStdMap;", "Execute a simple Python script value" ] +[ "batpyapimap", "eval_aggr", "pattern batpyapimap.eval_aggr(fptr:ptr, expr:str, arg:any...):any... ", "PYAPI2PyAPIevalAggrMap;", "grouped aggregates through Python" ] +[ "batpyapimap", "subeval_aggr", "pattern batpyapimap.subeval_aggr(fptr:ptr, expr:str, arg:any...):any... ", "PYAPI2PyAPIevalAggrMap;", "grouped aggregates through Python" ] [ "batrapi", "eval", "pattern batrapi.eval(fptr:ptr, expr:str, arg:any...):any... ", "RAPIevalStd;", "Execute a simple R script value" ] [ "batrapi", "eval_aggr", "pattern batrapi.eval_aggr(fptr:ptr, expr:str, arg:any...):any... ", "RAPIevalAggr;", "grouped aggregates through R" ] [ "batrapi", "subeval_aggr", "pattern batrapi.subeval_aggr(fptr:ptr, expr:str, arg:any...):any... ", "RAPIevalAggr;", "grouped aggregates through R" ] @@ -10609,17 +10609,17 @@ Ready. [ "profiler", "stop", "pattern profiler.stop():void ", "CMDstopProfiler;", "Stop offline performance profiling" ] [ "profiler", "stoptrace", "command profiler.stoptrace():void ", "CMDstopTrace;", "Stop collecting trace information" ] [ "profiler", "stoptrace", "command profiler.stoptrace(path:str):void ", "CMDstopTracePath;", "Stop collecting trace information" ] -[ "pyapi", "eval", "pattern pyapi.eval(fptr:ptr, expr:str):any ", "PyAPIevalStd;", "Execute a simple Python script returning a single value" ] -[ "pyapi", "eval", "pattern pyapi.eval(fptr:ptr, expr:str, arg:any...):any... ", "PyAPIevalStd;", "Execute a simple Python script value" ] -[ "pyapi", "eval_aggr", "pattern pyapi.eval_aggr(fptr:ptr, expr:str, arg:any...):any... ", "PyAPIevalAggr;", "grouped aggregates through Python" ] -[ "pyapi", "eval_loader", "pattern pyapi.eval_loader(fptr:ptr, expr:str):any... ", "PyAPIevalLoader;", "loader functions through Python" ] -[ "pyapi", "eval_loader", "pattern pyapi.eval_loader(fptr:ptr, expr:str, arg:any...):any... ", "PyAPIevalLoader;", "loader functions through Python" ] -[ "pyapi", "prelude", "command pyapi.prelude():void ", "PyAPIprelude;", "" ] -[ "pyapi", "subeval_aggr", "pattern pyapi.subeval_aggr(fptr:ptr, expr:str, arg:any...):any... ", "PyAPIevalAggr;", "grouped aggregates through Python" ] -[ "pyapimap", "eval", "pattern pyapimap.eval(fptr:ptr, expr:str):any ", "PyAPIevalStdMap;", "Execute a simple Python script returning a single value" ] -[ "pyapimap", "eval", "pattern pyapimap.eval(fptr:ptr, expr:str, arg:any...):any... ", "PyAPIevalStdMap;", "Execute a simple Python script value" ] -[ "pyapimap", "eval_aggr", "pattern pyapimap.eval_aggr(fptr:ptr, expr:str, arg:any...):any... ", "PyAPIevalAggrMap;", "grouped aggregates through Python" ] -[ "pyapimap", "subeval_aggr", "pattern pyapimap.subeval_aggr(fptr:ptr, expr:str, arg:any...):any... ", "PyAPIevalAggrMap;", "grouped aggregates through Python" ] +[ "pyapi", "eval", "pattern pyapi.eval(fptr:ptr, expr:str):any ", "PYAPI2PyAPIevalStd;", "Execute a simple Python script returning a single value" ] +[ "pyapi", "eval", "pattern pyapi.eval(fptr:ptr, expr:str, arg:any...):any... ", "PYAPI2PyAPIevalStd;", "Execute a simple Python script value" ] +[ "pyapi", "eval_aggr", "pattern pyapi.eval_aggr(fptr:ptr, expr:str, arg:any...):any... ", "PYAPI2PyAPIevalAggr;", "grouped aggregates through Python" ] +[ "pyapi", "eval_loader", "pattern pyapi.eval_loader(fptr:ptr, expr:str):any... ", "PYAPI2PyAPIevalLoader;", "loader functions through Python" ] +[ "pyapi", "eval_loader", "pattern pyapi.eval_loader(fptr:ptr, expr:str, arg:any...):any... ", "PYAPI2PyAPIevalLoader;", "loader functions through Python" ] +[ "pyapi", "prelude", "command pyapi.prelude():void ", "PYAPI2PyAPIprelude;", "" ] +[ "pyapi", "subeval_aggr", "pattern pyapi.subeval_aggr(fptr:ptr, expr:str, arg:any...):any... ", "PYAPI2PyAPIevalAggr;", "grouped aggregates through Python" ] +[ "pyapimap", "eval", "pattern pyapimap.eval(fptr:ptr, expr:str):any ", "PYAPI2PyAPIevalStdMap;", "Execute a simple Python script returning a single value" ] +[ "pyapimap", "eval", "pattern pyapimap.eval(fptr:ptr, expr:str, arg:any...):any... ", "PYAPI2PyAPIevalStdMap;", "Execute a simple Python script value" ] +[ "pyapimap", "eval_aggr", "pattern pyapimap.eval_aggr(fptr:ptr, expr:str, arg:any...):any... ", "PYAPI2PyAPIevalAggrMap;", "grouped aggregates through Python" ] +[ "pyapimap", "subeval_aggr", "pattern pyapimap.subeval_aggr(fptr:ptr, expr:str, arg:any...):any... ", "PYAPI2PyAPIevalAggrMap;", "grouped aggregates through Python" ] [ "querylog", "append", "pattern querylog.append(q:str, pipe:str, usr:str, tick:timestamp):void ", "QLOGappend;", "Add a new query call to the query log" ] [ "querylog", "call", "pattern querylog.call(tick1:timestamp, tick2:timestamp, arg:str, tuples:lng, xtime:lng, rtime:lng, cpu:int, iowait:int):void ", "QLOGcall;", "Add a new query call to the query log" ] [ "querylog", "define", "command querylog.define(q:str, pipe:str, size:int):void ", "QLOGdefineNaive;", "Noop operation, just marking the query" ] diff --git a/clients/Tests/exports.stable.out b/clients/Tests/exports.stable.out --- a/clients/Tests/exports.stable.out +++ b/clients/Tests/exports.stable.out @@ -1939,6 +1939,7 @@ str batcalcRef; str batmalRef; str batmmathRef; str batmtimeRef; +str batpyapi3Ref; str batpyapiRef; str batrapiRef; str batsqlRef; @@ -2402,6 +2403,8 @@ InstrPtr pushZero(MalBlkPtr mb, InstrPtr str putName(const char *nme); str putNameLen(const char *nme, size_t len); str putRef; +str pyapi3Ref; +str pyapi3mapRef; str pyapiRef; str pyapimapRef; int qtop; diff --git a/configure.ag b/configure.ag --- a/configure.ag +++ b/configure.ag @@ -296,10 +296,17 @@ AC_ARG_ENABLE([rintegration], dft_pyintegration=auto AC_ARG_ENABLE([pyintegration], [AS_HELP_STRING([--enable-pyintegration], - [enable support for Python integration into MonetDB (default=auto)])], + [enable support for Python 2 integration into MonetDB (default=auto)])], [enable_pyintegration=$enableval], [enable_pyintegration=$dft_pyintegration]) +dft_py3integration=auto +AC_ARG_ENABLE(py3integration, + AS_HELP_STRING([--enable-py3integration], + [enable support for Python 3 integration into MonetDB (default=auto)]), + enable_py3integration=$enableval, + enable_py3integration=$dft_py3integration) + # The console is a direct client hooked onto the kernel with full # administrative privileges, bypassing any security checks. It is # handy only during development. @@ -1119,13 +1126,13 @@ AS_CASE([$have_python3], [ PYTHON3="$have_python3"]) -AC_ARG_WITH([pyconfig], - [AS_HELP_STRING([--with-pyconfig=FILE], [python-config is installed as FILE])], - [have_pyconfig="$withval"]) +AC_ARG_WITH([py2config], + [AS_HELP_STRING([--with-py2config=FILE], [python2-config is installed as FILE])], + [have_py2config="$withval"]) -AC_ARG_WITH([pyversion], - [AS_HELP_STRING([--with-pyversion=FILE], [python is installed as FILE])], - [have_pyversion="$withval"]) +AC_ARG_WITH(py3config, + AS_HELP_STRING([--with-py3config=FILE], [python3-config is installed as FILE]), + have_py3config="$withval") # Figure out a default for PYTHON2 or PYTHON3 AC_PATH_PROG([PYTHON], [python], [no], [$PATH]) @@ -1855,24 +1862,22 @@ AS_VAR_IF([enable_pyintegration], [no], [/*], [XPATH="$enable_pyintegration" enable_pyintegration=yes], [AC_MSG_ERROR([--enable-pyintegration value must be yes|no|auto|absolute path of python-config])]) - AS_VAR_IF([have_pyconfig], [], [ - AC_PATH_PROG([PYCMD], [python2-config], [no], [$PATH]) - AS_VAR_IF([PYCMD], [no], [ + AS_VAR_IF([have_py2config], [], [ + AC_PATH_PROG([PY2CONFIG], [python2-config], [no], [$PATH]) + AS_VAR_IF([PY2CONFIG], [no], [ AC_PATH_PROG([PYCMD2], [python-config], [no], [$PATH]) AS_VAR_IF([PYCMD2], [no], [ AS_VAR_IF([enable_pyintegration], [yes], - [AC_MSG_ERROR([python-config library required for Python integration support])], + [AC_MSG_ERROR([python2-config library required for Python integration support])], [have_libpy="no" - why_have_libpy="(python-config command not found)" + why_have_libpy="(python2-config command not found)" enable_pyintegration="no" - disable_pyintegration="(python-config command not found)" + disable_pyintegration="(python2-config command not found)" ]) - ], [PYCMD="$PYCMD2"]) + ], [PY2CONFIG="$PYCMD2"]) ], []) - ], [PYCMD="$have_pyconfig"]) - AS_VAR_IF([have_pyversion], [], - [PYTHON_CMD=$PYTHON2], - [PYTHON_CMD=$have_pyversion]) + ], [PY2CONFIG="$have_py2config"]) + PYTHON_CMD=$PYTHON2 NUMPYVER=`$PYTHON_CMD -c "import numpy; print(int(numpy.__version__.split('.').__getitem__(1)) >= 7)"` # check numpyconfig.h because autoconf tests includes by # compiling a small C program, and other numpy headers do @@ -1895,7 +1900,7 @@ AS_VAR_IF([enable_pyintegration], [no], enable_pyintegration="no" disable_pyintegration="(numpy/arrayobject.h not found)"])], [libpy_CFLAGS=`$PYTHON_CMD -c "from distutils.sysconfig import get_python_inc; import numpy; print(' -I' + get_python_inc() + ' -I' + numpy.get_include());"` - libpy_LIBS=`$PYCMD --ldflags` + libpy_LIBS=`$PY2CONFIG --ldflags` HAVEPYTHONHEADER=`$PYTHON_CMD -c "import distutils.sysconfig, os; print(os.path.isfile(os.path.join(distutils.sysconfig.get_python_inc(), 'Python.h')))"` AS_VAR_IF([HAVEPYTHONHEADER], [True], [have_libpy=yes @@ -1910,6 +1915,90 @@ AS_VAR_IF([enable_pyintegration], [no], disable_pyintegration="Python.h not found"])])])]) AM_CONDITIONAL([HAVE_LIBPY], [test x"$have_libpy" != xno]) + +# Python 3 UDFs +have_libpy3=no +if test "x$enable_py3integration" != xno; then + case "$enable_py3integration" in + yes|auto) + XPATH="$PATH" + ;; + /*) + XPATH="$enable_py3integration" + enable_py3integration=yes + ;; + *) + AC_MSG_ERROR([--enable-py3integration value must be yes|no|auto|absolute path of python-config]) + ;; + esac + if test "x$have_py3config" = x; then + # for some god forsaken reason autoconf thinks python2-config and python3-config are the same program, so we have to explicitly tell it not to select python2-config when we want python3-config + AC_PATH_PROG(PY3CONFIG,python3-config,,$XPATH,$PY2CONFIG) + if test "x$PY3CONFIG" = x; then + if test "x$enable_py3integration" = xyes; then _______________________________________________ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list