You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@hawq.apache.org by "Ruilong Huo (JIRA)" <ji...@apache.org> on 2016/06/14 15:02:01 UTC
[jira] [Created] (HAWQ-815) KeyError while compiling PLPython
function due to deletion of non-existent record from Python global dict
Ruilong Huo created HAWQ-815:
--------------------------------
Summary: KeyError while compiling PLPython function due to deletion of non-existent record from Python global dict
Key: HAWQ-815
URL: https://issues.apache.org/jira/browse/HAWQ-815
Project: Apache HAWQ
Issue Type: Bug
Components: Query Execution
Reporter: Ruilong Huo
Assignee: George Caragea
It raise KeyError while compiling PLPython function due to deletion of non-existent record from Python global dict. Below are two example to reproduce the issue:
Example 1:
{noformat}
-- 1) prepare schema and data
CREATE LANGUAGE plpythonu;
CREATE TABLE gp_single_row(a int) DISTRIBUTED BY (a);
INSERT INTO gp_single_row VALUES (1);
CREATE OR REPLACE FUNCTION test_return_table(s TEXT)
RETURNS TABLE(first TEXT, second INT4)
AS $$
exec('y = ' + s)
return y
$$ LANGUAGE plpythonu;
SELECT (test_return_table('[]')).*;
SELECT (test_return_table('[]')).*
FROM gp_single_row;
-- 2) Actual output
SELECT (test_return_table('[]')).*;
first | second
-------+--------
(0 rows)
SELECT (test_return_table('[]')).*
FROM gp_single_row;
ERROR: could not compile PL/Python function "test_return_table" (plpython.c:4651) (seg5 test1:31100 pid=36826) (dispatcher.c:1801)
DETAIL: KeyError: 's'
-- 3) Expected output
SELECT (test_return_table('[]')).*;
first | second
-------+--------
(0 rows)
SELECT (test_return_table('[]')).*
FROM gp_single_row;
first | second
-------+--------
(0 rows)
{noformat}
Example 2:
{noformat}
-- 1) prepare schema and data
CREATE LANGUAGE plpythonu;
CREATE OR REPLACE FUNCTION func1(var_cause_bug int4[])
RETURNS SETOF INT4 AS $$
for el in var_cause_bug:
yield el
$$ LANGUAGE plpythonu;
CREATE OR REPLACE FUNCTION func2()
RETURNS INT4 AS $$
return 1
$$ LANGUAGE plpythonu;
SELECT func1(ARRAY[1,2,3]), func1(ARRAY[1,2,3]);
SELECT func2();
-- 2) Actual output
SELECT func1(ARRAY[1,2,3]), func1(ARRAY[1,2,3]);
func1 | func1
-------+-------
1 | 1
2 | 2
3 | 3
(3 rows)
SELECT func2();
ERROR: could not compile PL/Python function "func2" (plpython.c:4648)
DETAIL: KeyError: 'var_cause_bug'
-- 3) Expected output
SELECT func1(ARRAY[1,2,3]), func1(ARRAY[1,2,3]);
func1 | func1
-------+-------
1 | 1
2 | 2
3 | 3
(3 rows)
SELECT func2();
func2
-------
1
(1 row)
{noformat}
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)