GitHub user zellerh opened a pull request:

    https://github.com/apache/incubator-trafodion/pull/10

    TRAFODION-13 Multiple MTD-related bug fixes, UDF and RI constraint fixes

    Bug fixes for Multi-temperature Data aka MTD aka divisioning and a related 
bug for RI constraints. These will be converted to JIRAs soon.
    
    Also added an Excel tool to draw query plans, has limited support only.
    
    LaunchPad 1466209 Referential constraint column correspondence not recorded 
correctly in metadata
    
    LaunchPad 1417739 Multi-temperature data: should not allow divisioning on 
float datatype.
    
    LaunchPad 1417741 multi-temperature data: divisioning on (date_part('year', 
add_months(...)) fails with ERROR[3044], ERROR[1135]
    
    LaunchPad 1417743 multi-temperature data: able to define a RI constraint on 
a system column.
    
    LaunchPad 1427527 Multi-temperature data: 
create-table-like-with-constrains-without-division table should not be 
divisioned
    
    LaunchPad 1442774 TMUDF: Compiling a TPCH query with TMUDF returns internal 
assertion in BaseTypes.cpp:118
    
    Details:
    
    LaunchPad 1466209 Referential constraint column correspondence not recorded 
correctly in metadata
    
    For an RI constraint, we record a list of foreign key columns in the
    KEYS metadata table, as well as the UID of the referenced uniqueness
    constraint. The foreign key column list is matched with the unique key
    columns. We needed to add logic to reorder the lists in case the
    unique constraint was specified in a different order. For example, in
    seabase/TEST020:
    
    alter table test020t9 add constraint test020t9ri4
     foreign key (r1,r2) references test020t8 (c3,c2);
    
    This will trigger the reorder logic to convert it to
     foreign key (r2,r1) references test020t8 (c2,c3)
    to match the index on test020t8 (c2,c3).
    
    LaunchPad 1417739 Multi-temperature data: should not allow divisioning on 
float datatype.
    
    Added a check and a new error number 4257. Note that we do allow float
    as key columns, and that could have similar issues that rounding
    errors could cause us to find a row sometimes and not other times,
    although those issues should be rare. Nevertheless, I prefer not to
    take that chance and allow divisioning on floating point columns (it
    does not make much sense anyway).
    
    LaunchPad 1417741 multi-temperature data: divisioning on (date_part('year', 
add_months(...)) fails with ERROR[3044], ERROR[1135]
    
    There are really two issues here. First, the CAST operator that is
    internally used in ADD_MONTHS in the parser generates a nullable
    result, since in the parser we don't know whether the result is
    nullable or not. We need to fix that in the binder to avoid the error
    1135.  Second, there were some cases where the interval leading
    precision of a data type was not initialized correctly (error 3044).
    
    LaunchPad 1417743 multi-temperature data: able to define a RI constraint on 
a system column.
    
    This uncovered a bigger issue in the integration between MTD and RI
    constraints. We need to ignore salt and divisioning columns in the
    keys we consider, since these columns are redundant and not
    user-visible. Added code to do that and while working on it, also
    found the first bug in this list.
    
    LaunchPad 1427527 Multi-temperature data: 
create-table-like-with-constrains-without-division table should not be 
divisioned
    
    A typo in the parser code led us to ignore the WITHOUT DIVISION clause.
    
    LaunchPad 1442774 TMUDF: Compiling a TPCH query with TMUDF returns internal 
assertion in BaseTypes.cpp:118
    
    Used incorrect set of values in preCodeGen.

You can merge this pull request into a Git repository by running:

    $ git pull https://github.com/zellerh/incubator-trafodion bug/mtd2

Alternatively you can review and apply these changes as the patch at:

    https://github.com/apache/incubator-trafodion/pull/10.patch

To close this pull request, make a commit to your master/trunk branch
with (at least) the following in the commit message:

    This closes #10
    
----
commit 8b59bb981efdc841aad59d4049e49626904adccf
Author: Hans Zeller <[email protected]>
Date:   2015-06-26T01:32:57Z

    TRAFODION-13 Multiple MTD-related bug fixes, UDF and RI constraint fixes
    
    Bug fixes for Multi-temperature Data aka MTD aka divisioning and a related 
bug for RI constraints. These will be converted to JIRAs soon.
    
    Also added an Excel tool to draw query plans, has limited support only.
    
    LaunchPad 1466209 Referential constraint column correspondence not recorded 
correctly in metadata
    
    LaunchPad 1417739 Multi-temperature data: should not allow divisioning on 
float datatype.
    
    LaunchPad 1417741 multi-temperature data: divisioning on (date_part('year', 
add_months(...)) fails with ERROR[3044], ERROR[1135]
    
    LaunchPad 1417743 multi-temperature data: able to define a RI constraint on 
a system column.
    
    LaunchPad 1427527 Multi-temperature data: 
create-table-like-with-constrains-without-division table should not be 
divisioned
    
    LaunchPad 1442774 TMUDF: Compiling a TPCH query with TMUDF returns internal 
assertion in BaseTypes.cpp:118
    
    Details:
    
    LaunchPad 1466209 Referential constraint column correspondence not recorded 
correctly in metadata
    
    For an RI constraint, we record a list of foreign key columns in the
    KEYS metadata table, as well as the UID of the referenced uniqueness
    constraint. The foreign key column list is matched with the unique key
    columns. We needed to add logic to reorder the lists in case the
    unique constraint was specified in a different order. For example, in
    seabase/TEST020:
    
    alter table test020t9 add constraint test020t9ri4
     foreign key (r1,r2) references test020t8 (c3,c2);
    
    This will trigger the reorder logic to convert it to
     foreign key (r2,r1) references test020t8 (c2,c3)
    to match the index on test020t8 (c2,c3).
    
    LaunchPad 1417739 Multi-temperature data: should not allow divisioning on 
float datatype.
    
    Added a check and a new error number 4257. Note that we do allow float
    as key columns, and that could have similar issues that rounding
    errors could cause us to find a row sometimes and not other times,
    although those issues should be rare. Nevertheless, I prefer not to
    take that chance and allow divisioning on floating point columns (it
    does not make much sense anyway).
    
    LaunchPad 1417741 multi-temperature data: divisioning on (date_part('year', 
add_months(...)) fails with ERROR[3044], ERROR[1135]
    
    There are really two issues here. First, the CAST operator that is
    internally used in ADD_MONTHS in the parser generates a nullable
    result, since in the parser we don't know whether the result is
    nullable or not. We need to fix that in the binder to avoid the error
    1135.  Second, there were some cases where the interval leading
    precision of a data type was not initialized correctly (error 3044).
    
    LaunchPad 1417743 multi-temperature data: able to define a RI constraint on 
a system column.
    
    This uncovered a bigger issue in the integration between MTD and RI
    constraints. We need to ignore salt and divisioning columns in the
    keys we consider, since these columns are redundant and not
    user-visible. Added code to do that and while working on it, also
    found the first bug in this list.
    
    LaunchPad 1427527 Multi-temperature data: 
create-table-like-with-constrains-without-division table should not be 
divisioned
    
    A typo in the parser code led us to ignore the WITHOUT DIVISION clause.
    
    LaunchPad 1442774 TMUDF: Compiling a TPCH query with TMUDF returns internal 
assertion in BaseTypes.cpp:118
    
    Used incorrect set of values in preCodeGen.

----


---
If your project is set up for it, you can reply to this email and have your
reply appear on GitHub as well. If your project does not have this feature
enabled and wishes so, or if the feature is enabled but not working, please
contact infrastructure at [email protected] or file a JIRA ticket
with INFRA.
---

Reply via email to