Changeset: fab1f7a16a9f for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=fab1f7a16a9f
Modified Files:
sql/backends/monet5/Tests/pyapi19.stable.err
sql/backends/monet5/Tests/pyapi19.stable.out
sql/backends/monet5/Tests/pyapi25.stable.err
sql/backends/monet5/Tests/pyapi25.stable.err.Windows
sql/backends/monet5/Tests/pyapi25.stable.out
sql/backends/monet5/Tests/pyapi29.stable.err
sql/backends/monet5/Tests/pyapi29.stable.out
sql/backends/monet5/UDF/pyapi/connection.c
sql/backends/monet5/UDF/pyapi/pyapi.c
sql/backends/monet5/UDF/pyapi/pyapi.mal
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_25.stable.err
sql/backends/monet5/UDF/pyapi3/Tests/pyapi3_25.stable.out
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/pyapi3.mal
Branch: Jul2017
Log Message:
Disallow loopback queries in parallel Python UDFs and mark single-threaded UDFs
as unsafe on the MAL layer.
diffs (truncated from 1704 to 300 lines):
diff --git a/sql/backends/monet5/Tests/pyapi19.stable.err
b/sql/backends/monet5/Tests/pyapi19.stable.err
--- a/sql/backends/monet5/Tests/pyapi19.stable.err
+++ b/sql/backends/monet5/Tests/pyapi19.stable.err
@@ -31,6 +31,64 @@ stderr of test 'pyapi19` in directory 's
# 11:59:04 > "mclient" "-lsql" "-ftest" "-Eutf-8" "-i" "-e"
"--host=/var/tmp/mtest-5346" "--port=35428"
# 11:59:04 >
+MAPI = (monetdb) /var/tmp/mtest-23452/.s.monetdb.39765
+QUERY = SELECT * FROM mapped_query();
+ERROR = !Python exception
+ !
+ ! 1. def pyfun(_columns,_column_types,_conn):
+ !> 2. _conn.execute('CREATE TABLE pyapi19_integers(i INTEGER);')
+ ! 3. _conn.execute('INSERT INTO pyapi19_integers VALUES (0), (1),
(2);')
+ ! 4. return(1)
+ !Loopback queries are not supported in parallel.
+MAPI = (monetdb) /var/tmp/mtest-23452/.s.monetdb.39765
+QUERY = SELECT * FROM pyapi19_integers;
+ERROR = !current transaction is aborted (please ROLLBACK)
+MAPI = (monetdb) /var/tmp/mtest-23452/.s.monetdb.39765
+QUERY = CREATE FUNCTION mapped_result_query() returns table (i integer)
LANGUAGE PYTHON_MAP
+ {
+ res = _conn.execute('SELECT * FROM pyapi19_integers;')
+ return res['i']
+ };
+ERROR = !current transaction is aborted (please ROLLBACK)
+MAPI = (monetdb) /var/tmp/mtest-23452/.s.monetdb.39765
+QUERY = SELECT * FROM mapped_result_query();
+ERROR = !current transaction is aborted (please ROLLBACK)
+MAPI = (monetdb) /var/tmp/mtest-23452/.s.monetdb.39765
+QUERY = SELECT COUNT(i) FROM pyapi19_load_table();
+ERROR = !Python exception
+ !
+ ! 1. def pyfun(_columns,_column_types,_conn):
+ !> 2. res = _conn.execute('SELECT * FROM pyapi19_integers;')
+ ! 3. return res['i']
+ ! 4.
+ !Loopback queries are not supported in parallel.
+MAPI = (monetdb) /var/tmp/mtest-23452/.s.monetdb.39765
+QUERY = SELECT * FROM mapped_result_query();
+ERROR = !Python exception
+ !
+ ! 1. def pyfun(_columns,_column_types,_conn):
+ !> 2. res = _conn.execute('SELECT * FROM pyapi19_strings;')
+ ! 3. return res['s']
+ ! 4.
+ !Loopback queries are not supported in parallel.
+MAPI = (monetdb) /var/tmp/mtest-23452/.s.monetdb.39765
+QUERY = SELECT * FROM mapped_result_query();
+ERROR = !Python exception
+ !
+ ! 1. def pyfun(_columns,_column_types,_conn):
+ !> 2. res = _conn.execute('SELECT * FROM pyapi19_dates;')
+ ! 3. return res
+ ! 4.
+ !Loopback queries are not supported in parallel.
+MAPI = (monetdb) /var/tmp/mtest-23452/.s.monetdb.39765
+QUERY = SELECT * FROM pyapi19_load_table() LIMIT 100;
+ERROR = !Python exception
+ !
+ ! 1. def pyfun(_columns,_column_types,_conn):
+ !> 2. res = _conn.execute('SELECT * FROM pyapi19_integers;')
+ ! 3. return res
+ ! 4.
+ !Loopback queries are not supported in parallel.
# 11:59:05 >
# 11:59:05 > "Done."
diff --git a/sql/backends/monet5/Tests/pyapi19.stable.out
b/sql/backends/monet5/Tests/pyapi19.stable.out
--- a/sql/backends/monet5/Tests/pyapi19.stable.out
+++ b/sql/backends/monet5/Tests/pyapi19.stable.out
@@ -36,33 +36,6 @@ Ready.
# _conn.execute('INSERT INTO pyapi19_integers VALUES (0), (1), (2);')
# return(1)
#};
-#SELECT * FROM mapped_query();
-% . # table_name
-% i # name
-% int # type
-% 1 # length
-[ 1 ]
-#SELECT * FROM pyapi19_integers;
-% sys.pyapi19_integers # table_name
-% i # name
-% int # type
-% 1 # length
-[ 0 ]
-[ 1 ]
-[ 2 ]
-#CREATE FUNCTION mapped_result_query() returns table (i integer) LANGUAGE
PYTHON_MAP
-#{
-# res = _conn.execute('SELECT * FROM pyapi19_integers;')
-# return res['i']
-#};
-#SELECT * FROM mapped_result_query();
-% . # table_name
-% i # name
-% int # type
-% 1 # length
-[ 0 ]
-[ 1 ]
-[ 2 ]
#ROLLBACK;
#START TRANSACTION;
#CREATE FUNCTION pyapi19_create_table() returns table (i integer) LANGUAGE P
@@ -75,12 +48,6 @@ Ready.
# return res['i']
#};
#CREATE TABLE pyapi19_integers AS SELECT * FROM pyapi19_create_table() WITH
DATA;
-#SELECT COUNT(i) FROM pyapi19_load_table();
-% .L2 # table_name
-% L1 # name
-% bigint # type
-% 6 # length
-[ 100000 ]
#ROLLBACK;
#START TRANSACTION;
#CREATE TABLE pyapi19_strings(s STRING);
@@ -91,14 +58,6 @@ Ready.
# res = _conn.execute('SELECT * FROM pyapi19_strings;')
# return res['s']
#};
-#SELECT * FROM mapped_result_query();
-% . # table_name
-% i # name
-% clob # type
-% 11 # length
-[ "hello" ]
-[ "33" ]
-[ "hello world" ]
#ROLLBACK;
#START TRANSACTION;
#CREATE TABLE pyapi19_dates(d DATE);
@@ -109,14 +68,6 @@ Ready.
# res = _conn.execute('SELECT * FROM pyapi19_dates;')
# return res
#};
-#SELECT * FROM mapped_result_query();
-% . # table_name
-% d # name
-% date # type
-% 10 # length
-[ 2014-10-03 ]
-[ 2000-03-24 ]
-[ 2033-11-22 ]
#ROLLBACK;
#START TRANSACTION;
#CREATE FUNCTION pyapi19_create_table() returns table (i integer, j integer, k
double, l float, m hugeint, n bigint, o STRING, p DECIMAL) LANGUAGE P
@@ -136,111 +87,6 @@ Ready.
# return res
#};
#CREATE TABLE pyapi19_integers AS SELECT * FROM pyapi19_create_table() WITH
DATA;
-#SELECT * FROM pyapi19_load_table() LIMIT 100;
-% ., ., ., ., ., ., ., . # table_name
-% i, j, k, l, m, n, o, p # name
-% int, int, double, double, smallint, bigint, clob, decimal # type
-% 6, 6, 24, 24, 2, 6, 2, 20 # length
-[ 100000, 100000, 0, 1e+05, 0, 100000, "0", 0.000 ]
-[ 99999, 99999, 1, 99999, 1, 99999, "1", 1.000 ]
-[ 99998, 99998, 2, 99998, 2, 99998, "2", 2.000 ]
-[ 99997, 99997, 3, 99997, 3, 99997, "3", 3.000 ]
-[ 99996, 99996, 4, 99996, 4, 99996, "4", 4.000 ]
-[ 99995, 99995, 5, 99995, 5, 99995, "5", 5.000 ]
-[ 99994, 99994, 6, 99994, 6, 99994, "6", 6.000 ]
-[ 99993, 99993, 7, 99993, 7, 99993, "7", 7.000 ]
-[ 99992, 99992, 8, 99992, 8, 99992, "8", 8.000 ]
-[ 99991, 99991, 9, 99991, 9, 99991, "9", 9.000 ]
-[ 99990, 99990, 10, 9.999e+04, 10, 99990, "10", 10.000
]
-[ 99989, 99989, 11, 99989, 11, 99989, "11", 11.000 ]
-[ 99988, 99988, 12, 99988, 12, 99988, "12", 12.000 ]
-[ 99987, 99987, 13, 99987, 13, 99987, "13", 13.000 ]
-[ 99986, 99986, 14, 99986, 14, 99986, "14", 14.000 ]
-[ 99985, 99985, 15, 99985, 15, 99985, "15", 15.000 ]
-[ 99984, 99984, 16, 99984, 16, 99984, "16", 16.000 ]
-[ 99983, 99983, 17, 99983, 17, 99983, "17", 17.000 ]
-[ 99982, 99982, 18, 99982, 18, 99982, "18", 18.000 ]
-[ 99981, 99981, 19, 99981, 19, 99981, "19", 19.000 ]
-[ 99980, 99980, 20, 9.998e+04, 20, 99980, "20", 20.000
]
-[ 99979, 99979, 21, 99979, 21, 99979, "21", 21.000 ]
-[ 99978, 99978, 22, 99978, 22, 99978, "22", 22.000 ]
-[ 99977, 99977, 23, 99977, 23, 99977, "23", 23.000 ]
-[ 99976, 99976, 24, 99976, 24, 99976, "24", 24.000 ]
-[ 99975, 99975, 25, 99975, 25, 99975, "25", 25.000 ]
-[ 99974, 99974, 26, 99974, 26, 99974, "26", 26.000 ]
-[ 99973, 99973, 27, 99973, 27, 99973, "27", 27.000 ]
-[ 99972, 99972, 28, 99972, 28, 99972, "28", 28.000 ]
-[ 99971, 99971, 29, 99971, 29, 99971, "29", 29.000 ]
-[ 99970, 99970, 30, 9.997e+04, 30, 99970, "30", 30.000
]
-[ 99969, 99969, 31, 99969, 31, 99969, "31", 31.000 ]
-[ 99968, 99968, 32, 99968, 32, 99968, "32", 32.000 ]
-[ 99967, 99967, 33, 99967, 33, 99967, "33", 33.000 ]
-[ 99966, 99966, 34, 99966, 34, 99966, "34", 34.000 ]
-[ 99965, 99965, 35, 99965, 35, 99965, "35", 35.000 ]
-[ 99964, 99964, 36, 99964, 36, 99964, "36", 36.000 ]
-[ 99963, 99963, 37, 99963, 37, 99963, "37", 37.000 ]
-[ 99962, 99962, 38, 99962, 38, 99962, "38", 38.000 ]
-[ 99961, 99961, 39, 99961, 39, 99961, "39", 39.000 ]
-[ 99960, 99960, 40, 9.996e+04, 40, 99960, "40", 40.000
]
-[ 99959, 99959, 41, 99959, 41, 99959, "41", 41.000 ]
-[ 99958, 99958, 42, 99958, 42, 99958, "42", 42.000 ]
-[ 99957, 99957, 43, 99957, 43, 99957, "43", 43.000 ]
-[ 99956, 99956, 44, 99956, 44, 99956, "44", 44.000 ]
-[ 99955, 99955, 45, 99955, 45, 99955, "45", 45.000 ]
-[ 99954, 99954, 46, 99954, 46, 99954, "46", 46.000 ]
-[ 99953, 99953, 47, 99953, 47, 99953, "47", 47.000 ]
-[ 99952, 99952, 48, 99952, 48, 99952, "48", 48.000 ]
-[ 99951, 99951, 49, 99951, 49, 99951, "49", 49.000 ]
-[ 99950, 99950, 50, 9.995e+04, 50, 99950, "50", 50.000
]
-[ 99949, 99949, 51, 99949, 51, 99949, "51", 51.000 ]
-[ 99948, 99948, 52, 99948, 52, 99948, "52", 52.000 ]
-[ 99947, 99947, 53, 99947, 53, 99947, "53", 53.000 ]
-[ 99946, 99946, 54, 99946, 54, 99946, "54", 54.000 ]
-[ 99945, 99945, 55, 99945, 55, 99945, "55", 55.000 ]
-[ 99944, 99944, 56, 99944, 56, 99944, "56", 56.000 ]
-[ 99943, 99943, 57, 99943, 57, 99943, "57", 57.000 ]
-[ 99942, 99942, 58, 99942, 58, 99942, "58", 58.000 ]
-[ 99941, 99941, 59, 99941, 59, 99941, "59", 59.000 ]
-[ 99940, 99940, 60, 9.994e+04, 60, 99940, "60", 60.000
]
-[ 99939, 99939, 61, 99939, 61, 99939, "61", 61.000 ]
-[ 99938, 99938, 62, 99938, 62, 99938, "62", 62.000 ]
-[ 99937, 99937, 63, 99937, 63, 99937, "63", 63.000 ]
-[ 99936, 99936, 64, 99936, 64, 99936, "64", 64.000 ]
-[ 99935, 99935, 65, 99935, 65, 99935, "65", 65.000 ]
-[ 99934, 99934, 66, 99934, 66, 99934, "66", 66.000 ]
-[ 99933, 99933, 67, 99933, 67, 99933, "67", 67.000 ]
-[ 99932, 99932, 68, 99932, 68, 99932, "68", 68.000 ]
-[ 99931, 99931, 69, 99931, 69, 99931, "69", 69.000 ]
-[ 99930, 99930, 70, 9.993e+04, 70, 99930, "70", 70.000
]
-[ 99929, 99929, 71, 99929, 71, 99929, "71", 71.000 ]
-[ 99928, 99928, 72, 99928, 72, 99928, "72", 72.000 ]
-[ 99927, 99927, 73, 99927, 73, 99927, "73", 73.000 ]
-[ 99926, 99926, 74, 99926, 74, 99926, "74", 74.000 ]
-[ 99925, 99925, 75, 99925, 75, 99925, "75", 75.000 ]
-[ 99924, 99924, 76, 99924, 76, 99924, "76", 76.000 ]
-[ 99923, 99923, 77, 99923, 77, 99923, "77", 77.000 ]
-[ 99922, 99922, 78, 99922, 78, 99922, "78", 78.000 ]
-[ 99921, 99921, 79, 99921, 79, 99921, "79", 79.000 ]
-[ 99920, 99920, 80, 9.992e+04, 80, 99920, "80", 80.000
]
-[ 99919, 99919, 81, 99919, 81, 99919, "81", 81.000 ]
-[ 99918, 99918, 82, 99918, 82, 99918, "82", 82.000 ]
-[ 99917, 99917, 83, 99917, 83, 99917, "83", 83.000 ]
-[ 99916, 99916, 84, 99916, 84, 99916, "84", 84.000 ]
-[ 99915, 99915, 85, 99915, 85, 99915, "85", 85.000 ]
-[ 99914, 99914, 86, 99914, 86, 99914, "86", 86.000 ]
-[ 99913, 99913, 87, 99913, 87, 99913, "87", 87.000 ]
-[ 99912, 99912, 88, 99912, 88, 99912, "88", 88.000 ]
-[ 99911, 99911, 89, 99911, 89, 99911, "89", 89.000 ]
-[ 99910, 99910, 90, 9.991e+04, 90, 99910, "90", 90.000
]
-[ 99909, 99909, 91, 99909, 91, 99909, "91", 91.000 ]
-[ 99908, 99908, 92, 99908, 92, 99908, "92", 92.000 ]
-[ 99907, 99907, 93, 99907, 93, 99907, "93", 93.000 ]
-[ 99906, 99906, 94, 99906, 94, 99906, "94", 94.000 ]
-[ 99905, 99905, 95, 99905, 95, 99905, "95", 95.000 ]
-[ 99904, 99904, 96, 99904, 96, 99904, "96", 96.000 ]
-[ 99903, 99903, 97, 99903, 97, 99903, "97", 97.000 ]
-[ 99902, 99902, 98, 99902, 98, 99902, "98", 98.000 ]
-[ 99901, 99901, 99, 99901, 99, 99901, "99", 99.000 ]
#ROLLBACK;
# 11:59:05 >
diff --git a/sql/backends/monet5/Tests/pyapi25.stable.err
b/sql/backends/monet5/Tests/pyapi25.stable.err
--- a/sql/backends/monet5/Tests/pyapi25.stable.err
+++ b/sql/backends/monet5/Tests/pyapi25.stable.err
@@ -31,16 +31,117 @@ stderr of test 'pyapi25` in directory 's
# 12:40:00 > "mclient" "-lsql" "-ftest" "-Eutf-8" "-i" "-e"
"--host=/var/tmp/mtest-21450" "--port=30737"
# 12:40:00 >
-MAPI = (monetdb) /var/tmp/mtest-14818/.s.monetdb.37353
-QUERY = SELECT * FROM pyapi25errortable();
-ERROR = !SELECT: no such table 'hopefullynonexistanttable'
- !Python exception
+MAPI = (monetdb) /var/tmp/mtest-23452/.s.monetdb.39765
+QUERY = SELECT pyapi25(i) FROM pyapi25table; #multiply by 3
+ERROR = !Python exception
!
- ! 1. def pyfun(_columns,_column_types,_conn):
- !> 2. _conn.execute('SELECT * FROM HOPEFULLYNONEXISTANTTABLE;')
- ! 3. return 1
- ! 4.
- !SQL Query Failed: ParseException:SQLparser:42S02!SELECT: no such
table 'hopefullynonexistanttable'
+ ! 1. def pyfun(i,_columns,_column_types,_conn):
+ !> 2. res = _conn.execute('SELECT i FROM pyapi25multiplication;')
+ ! 3. return res['i'] * i
+ ! 4. return i
+ !Loopback queries are not supported in parallel.
+MAPI = (monetdb) /var/tmp/mtest-23452/.s.monetdb.39765
+QUERY = UPDATE pyapi25multiplication SET i=10;
+ERROR = !current transaction is aborted (please ROLLBACK)
+MAPI = (monetdb) /var/tmp/mtest-23452/.s.monetdb.39765
+QUERY = SELECT pyapi25(i) FROM pyapi25table; #multiply by 10
+ERROR = !current transaction is aborted (please ROLLBACK)
+MAPI = (monetdb) /var/tmp/mtest-23452/.s.monetdb.39765
+QUERY = DROP FUNCTION pyapi25;
+ERROR = !current transaction is aborted (please ROLLBACK)
+MAPI = (monetdb) /var/tmp/mtest-23452/.s.monetdb.39765
+QUERY = DROP TABLE pyapi25table;
+ERROR = !current transaction is aborted (please ROLLBACK)
+MAPI = (monetdb) /var/tmp/mtest-23452/.s.monetdb.39765
+QUERY = DROP TABLE pyapi25multiplication;
+ERROR = !current transaction is aborted (please ROLLBACK)
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list