[ https://issues.apache.org/jira/browse/HAWQ-815?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Ruilong Huo reopened HAWQ-815: ------------------------------ Reopening to add the fix version. > 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 > Affects Versions: 2.0.0 > Reporter: Ruilong Huo > Assignee: Ruilong Huo > > 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)