You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@hawq.apache.org by "longgeligelong (JIRA)" <ji...@apache.org> on 2016/01/08 04:36:39 UTC
[jira] [Updated] (HAWQ-328) plsql loop three times exit abnormality
[ https://issues.apache.org/jira/browse/HAWQ-328?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
longgeligelong updated HAWQ-328:
--------------------------------
Description:
plsql of hawq loop three times exit abnormality.
Add print in code, Then I found when program looped third time, before running line 824 in src/backend/executor/execMain.c, the value of queryDesc->plannedstmt->resource->type is 1050. After running this line the value became a random number. But after running this line in the tirst two loop, the value is still 1050. Because queryDesc is not a actual parameter of prepareDispatchedCatalogRelation in line 824, I cannot continue to keep track of code.
stdour and stderr as below :
psql:test_plsql_loop.sql:66: NOTICE: for loop: quantity here is 1
psql:test_plsql_loop.sql:66: NOTICE: FOR LOOP: ROW HERE IS (14929)
psql:test_plsql_loop.sql:66: NOTICE: for loop: quantity here is 2
psql:test_plsql_loop.sql:66: NOTICE: FOR LOOP: row here is (14929)
psql:test_plsql_loop.sql:66: NOTICE: for loop: quantity here is 3
psql:test_plsql_loop.sql:66: ERROR: could not serialize unrecognized node type: 38814640 (outfast.c:4742)
CONTEXT: SQL statement "SELECT COUNT(1) FROM oiq_t_2"
PL/pgSQL function "func2" line 11 at SQL statement
plsql code as below:
CREATE OR REPLACE FUNCTION func2(integer) RETURNS text AS $func$
DECLARE
quantity integer;
rowvar1 RECORD;
effect_num integer;
BEGIN
quantity := $1;
<<fst_loop>>
FOR i IN 1..10 LOOP
RAISE NOTICE 'for loop: quantity here is %', quantity;
IF quantity > 1 and quantity < 5 THEN
SELECT COUNT(1) INTO rowvar1 FROM oiq_t_2;
RAISE NOTICE 'FOR LOOP: row here is %', rowvar1;
ELSE
SELECT COUNT(1) INTO rowvar1 FROM oiq_t_2;
RAISE NOTICE 'FOR LOOP: ROW HERE IS %', rowvar1;
END IF;
quantity := quantity + 1;
END LOOP fst_loop;
return rowvar1;
END;
$func$ LANGUAGE plpgsql;
select func2(1);
was:
plsql of hawq loop three times exit abnormality.
Add print in code, Then I found when program looped third time, before running line 824 in src/backend/executor/execMain.c, the value of queryDesc->plannedstmt->resource->type is 1050. After running this line the value became a random number. But after running this line in the tirst two loop, the value is still 1050. Because queryDesc is not a actual parameter of prepareDispatchedCatalogRelation in line 824, I cannot continue to keep track of code.
stdour and stderr as below :
psql:test_plsql_loop.sql:66: NOTICE: for loop: quantity here is 1
psql:test_plsql_loop.sql:66: NOTICE: FOR LOOP: ROW HERE IS (14929)
psql:test_plsql_loop.sql:66: NOTICE: for loop: quantity here is 2
psql:test_plsql_loop.sql:66: NOTICE: FOR LOOP: row here is (14929)
psql:test_plsql_loop.sql:66: NOTICE: for loop: quantity here is 3
psql:test_plsql_loop.sql:66: ERROR: could not serialize unrecognized node type: 38814640 (outfast.c:4742)
CONTEXT: SQL statement "SELECT COUNT(1) FROM oiq_t_2"
PL/pgSQL function "func2" line 11 at SQL statement
plsql code as below:
CREATE OR REPLACE FUNCTION func2(integer) RETURNS text AS $func$
DECLARE
quantity integer;
rowvar1 RECORD;
effect_num integer;
BEGIN
quantity := $1;
<<fst_loop>>
FOR i IN 1..10 LOOP
RAISE NOTICE 'for loop: quantity here is %', quantity;
IF quantity > 1 and quantity < 5 THEN
SELECT COUNT(1) INTO rowvar1 FROM oiq_t_2;
RAISE NOTICE 'FOR LOOP: row here is %', rowvar1;
ELSE
SELECT COUNT(1) INTO rowvar1 FROM oiq_t_2;
RAISE NOTICE 'FOR LOOP: ROW HERE IS %', rowvar1;
END IF;
quantity := quantity + 1;
END LOOP fst_loop;
return rowvar1;
END;
$func$ LANGUAGE plpgsql;
select func2(1);
> plsql loop three times exit abnormality
> ---------------------------------------
>
> Key: HAWQ-328
> URL: https://issues.apache.org/jira/browse/HAWQ-328
> Project: Apache HAWQ
> Issue Type: Bug
> Components: Catalog
> Reporter: longgeligelong
> Assignee: Lei Chang
>
> plsql of hawq loop three times exit abnormality.
> Add print in code, Then I found when program looped third time, before running line 824 in src/backend/executor/execMain.c, the value of queryDesc->plannedstmt->resource->type is 1050. After running this line the value became a random number. But after running this line in the tirst two loop, the value is still 1050. Because queryDesc is not a actual parameter of prepareDispatchedCatalogRelation in line 824, I cannot continue to keep track of code.
> stdour and stderr as below :
> psql:test_plsql_loop.sql:66: NOTICE: for loop: quantity here is 1
> psql:test_plsql_loop.sql:66: NOTICE: FOR LOOP: ROW HERE IS (14929)
> psql:test_plsql_loop.sql:66: NOTICE: for loop: quantity here is 2
> psql:test_plsql_loop.sql:66: NOTICE: FOR LOOP: row here is (14929)
> psql:test_plsql_loop.sql:66: NOTICE: for loop: quantity here is 3
> psql:test_plsql_loop.sql:66: ERROR: could not serialize unrecognized node type: 38814640 (outfast.c:4742)
> CONTEXT: SQL statement "SELECT COUNT(1) FROM oiq_t_2"
> PL/pgSQL function "func2" line 11 at SQL statement
> plsql code as below:
> CREATE OR REPLACE FUNCTION func2(integer) RETURNS text AS $func$
> DECLARE
> quantity integer;
> rowvar1 RECORD;
> effect_num integer;
> BEGIN
> quantity := $1;
> <<fst_loop>>
> FOR i IN 1..10 LOOP
> RAISE NOTICE 'for loop: quantity here is %', quantity;
> IF quantity > 1 and quantity < 5 THEN
> SELECT COUNT(1) INTO rowvar1 FROM oiq_t_2;
> RAISE NOTICE 'FOR LOOP: row here is %', rowvar1;
> ELSE
> SELECT COUNT(1) INTO rowvar1 FROM oiq_t_2;
> RAISE NOTICE 'FOR LOOP: ROW HERE IS %', rowvar1;
> END IF;
> quantity := quantity + 1;
> END LOOP fst_loop;
> return rowvar1;
> END;
> $func$ LANGUAGE plpgsql;
> select func2(1);
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)