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)