[ 
https://issues.apache.org/jira/browse/TRAFODION-1027?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Suresh Subbiah closed TRAFODION-1027.
-------------------------------------

> LP Bug: 1426605 - UDF: query compilation with scalar UDFs returns internal 
> assertion in ../common/BaseTypes.cpp
> ---------------------------------------------------------------------------------------------------------------
>
>                 Key: TRAFODION-1027
>                 URL: https://issues.apache.org/jira/browse/TRAFODION-1027
>             Project: Apache Trafodion
>          Issue Type: Bug
>          Components: sql-cmp
>            Reporter: Weishiun Tsai
>            Assignee: Suresh Subbiah
>            Priority: Blocker
>             Fix For: 1.1 (pre-incubation)
>
>
> In the following example, x1 does not contain any UDF.  x2 contains UDFs in 
> its predicates.  x1 and x2 are almost identical except for the 2 predicates 
> in x1 that are replaced with myudf():
> x1:
> and p_size = 5
> …
> and s_suppkey = ps_suppkey
> x2:
> and myudf(p_size) = myudf(5)
> ….
> and myudf(s_suppkey) = myudf(ps_suppkey)
> myudf() is a simple scalar UDF that takes an INT value and returns the same 
> INT value back again.  Therefore, these 2 queries should return the same 
> results as well.  But as shown in the execution output, x1 compiles fine, x2 
> returns an internal assertion at the compile time:
> *** ERROR[2006] Internal error: assertion failure () in file 
> ../common/BaseTypes.cpp at line 118.
> Tables used in this example all have 0 rows.  
> This is seen on the v0210 build installed on a workstation. To reproduce this 
> problem:
> (1) Download the attached tar file and untar it to get the 4 files in there. 
> Put the 4 files in any directory <mydir>
> (2) Run build.sh from <mydir> to build the UDF so file.
> (3) Change the line ‘create library qa_udf_lib file '<mydir>/myudf.so'; in 
> mytest.sql and fill in <mydir>
> (4) From sqlci, obey mytest.sql
> Here is the execution output:
> >>create schema mytest1;
> --- SQL operation complete.
> >>set schema mytest1;
> --- SQL operation complete.
> >>
> >> create library qa_udf_lib file '<mydir>/myudf.so';
> --- SQL operation complete.
> >>
> >>create function MYUDF
> +>(INVAL int)
> +>returns (OUTVAL int)
> +>language c
> +>parameter style sql
> +>external name 'myudf'
> +>library qa_udf_lib
> +>deterministic
> +>state area size 1024
> +>allow any parallelism
> +>no sql;
> --- SQL operation complete.
> >>
> >>Create table region  (
> +>r_regionkey         int                not null not droppable,
> +>r_name              char(25)           not null not droppable,
> +>r_comment           varchar(152)       not null not droppable,
> +>primary key (r_regionkey)  not droppable)
> +>store by primary key salt using 8 partitions;
> --- SQL operation complete.
> >>
> >>Create table nation  (
> +>n_nationkey         int                not null not droppable,
> +>n_name              char(25)           not null not droppable,
> +>n_regionkey         int                not null not droppable,
> +>n_comment           varchar(152)       not null not droppable,
> +>primary key (n_nationkey)  not droppable)
> +>store by primary key salt using 8 partitions;
> --- SQL operation complete.
> >>
> >>Create table supplier  (
> +>s_suppkey           int                not null not droppable,
> +>s_name              char(25)           not null not droppable,
> +>s_address           varchar(40)        not null not droppable,
> +>s_nationkey         int                not null not droppable,
> +>s_phone             char(15)           not null not droppable,
> +>s_acctbal           numeric(12,2)      not null not droppable,
> +>s_comment           varchar(101)       not null not droppable,
> +>primary key (s_suppkey)  not droppable)
> +>store by primary key salt using 8 partitions;
> --- SQL operation complete.
> >>
> >>Create table part  (
> +>p_partkey           int                not null not droppable,
> +>p_name              varchar(55)        not null not droppable,
> +>p_mfgr              char(25)           not null not droppable,
> +>p_brand             char(10)           not null not droppable,
> +>p_type              varchar(25)        not null not droppable,
> +>p_size              int                not null not droppable,
> +>p_container         char(10)           not null not droppable,
> +>p_retailprice       numeric(12,2)      not null not droppable,
> +>p_comment           varchar(23)        not null not droppable,
> +>primary key (p_partkey)  not droppable)
> +>store by primary key salt using 8 partitions;
> --- SQL operation complete.
> >>
> >>Create table partsupp  (
> +>ps_partkey          int                not null not droppable,
> +>ps_suppkey          int                not null not droppable,
> +>ps_availqty         int                not null not droppable,
> +>ps_supplycost       numeric(12,2)      not null not droppable,
> +>ps_comment          varchar(199)       not null not droppable,
> +>primary key (ps_partkey,ps_suppkey)  not droppable)
> +>store by primary key salt using 8 partitions;
> --- SQL operation complete.
> >>
> >>prepare x1 from select
> +>count(*)
> +>from
> +>part,
> +>supplier,
> +>partsupp,
> +>nation,
> +>region
> +>where
> +>p_partkey = ps_partkey
> +>and s_suppkey = ps_suppkey
> +>and p_size = 5
> +>and p_type like '%NICKEL'
> +>and s_nationkey = n_nationkey
> +>and n_regionkey = r_regionkey
> +>and r_name = 'AMERICA'
> +>and ps_supplycost = (
> +>select
> +>min(ps_supplycost)
> +>from
> +>partsupp,
> +>supplier,
> +>nation,
> +>region
> +>where
> +>p_partkey = ps_partkey
> +>and s_suppkey = ps_suppkey
> +>and s_nationkey = n_nationkey
> +>and n_regionkey = r_regionkey
> +>and r_name = 'AMERICA'
> +>);
> --- SQL command prepared.
> >>
> >>explain options 'f' x1;
> LC   RC   OP   OPERATOR              OPT       DESCRIPTION           CARD
> ---- ---- ---- --------------------  --------  --------------------  ---------
> 26   .    27   root                                                  1.00E+000
> 25   .    26   sort_scalar_aggr                                      1.00E+000
> 24   1    25   hybrid_hash_join                                      3.20E+001
> 23   2    24   hybrid_hash_join                                      8.00E+000
> 22   3    23   hybrid_hash_join                                      4.00E+000
> 21   4    22   hybrid_hash_join                                      2.00E+000
> 20   .    21   hash_partial_groupby                                  1.00E+000
> 19   .    20   esp_exchange                    1:5(hash2)            1.00E+000
> 18   .    19   hash_partial_groupby                                  1.00E+000
> 17   6    18   hybrid_hash_join                                      1.25E+006
> 16   8    17   hybrid_hash_join                                      2.50E+005
> 15   10   16   hybrid_hash_join                                      5.00E+003
> 14   12   15   hybrid_hash_join                                      1.00E+002
> 13   .    14   esp_exchange                    5(hash2):4(hash2)     1.00E+002
> .    .    13   trafodion_scan                  PARTSUPP              1.00E+002
> 11   .    12   esp_exchange                    5(rep-b):4(hash2)     1.00E+000
> .    .    11   trafodion_scan                  PART                  1.00E+000
> 9    .    10   esp_exchange                    5(rep-b):4(hash2)     1.00E+002
> .    .    9    trafodion_scan                  SUPPLIER              1.00E+002
> 7    .    8    esp_exchange                    5(rep-b):4(hash2)     1.00E+002
> .    .    7    trafodion_scan                  NATION                1.00E+002
> 5    .    6    esp_exchange                    5(rep-b):4(hash2)     1.00E+001
> .    .    5    trafodion_scan                  REGION                1.00E+001
> .    .    4    trafodion_scan                  PARTSUPP              1.00E+002
> .    .    3    trafodion_scan                  SUPPLIER              1.00E+002
> .    .    2    trafodion_scan                  NATION                1.00E+002
> .    .    1    trafodion_scan                  REGION                1.00E+001
> --- SQL operation complete.
> >>execute x1;
> (EXPR)
> --------------------
>                    0
> --- 1 row(s) selected.
> >>
> >>prepare x2 from select
> +>count(*)
> +>from
> +>part,
> +>supplier,
> +>partsupp,
> +>nation,
> +>region
> +>where
> +>p_partkey = ps_partkey
> +>and s_suppkey = ps_suppkey
> +>and myudf(p_size) = myudf(5)
> +>and p_type like '%NICKEL'
> +>and s_nationkey = n_nationkey
> +>and n_regionkey = r_regionkey
> +>and r_name = 'AMERICA'
> +>and ps_supplycost = (
> +>select
> +>min(ps_supplycost)
> +>from
> +>partsupp,
> +>supplier,
> +>nation,
> +>region
> +>where
> +>p_partkey = ps_partkey
> +>and myudf(s_suppkey) = myudf(ps_suppkey)
> +>and s_nationkey = n_nationkey
> +>and n_regionkey = r_regionkey
> +>and r_name = 'AMERICA'
> +>);
> *** ERROR[2006] Internal error: assertion failure () in file 
> ../common/BaseTypes.cpp at line 118.
> *** ERROR[8822] The statement was not prepared.
> >>
> >>explain options 'f' x2;
> *** ERROR[8804] The provided input statement does not exist in the current 
> context.
> --- SQL operation failed with errors.
> >>execute x2;
> *** ERROR[15017] Statement X2 was not found.
> >>
> >>drop function myudf cascade;
> --- SQL operation complete.
> >>drop library qa_udf_lib cascade;
> --- SQL operation complete.
> >>drop schema mytest1 cascade;
> --- SQL operation complete.
> >>
> >>exit;
> End of MXCI Session



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to