Github user DaveBirdsall commented on a diff in the pull request:

    
https://github.com/apache/incubator-trafodion/pull/1253#discussion_r142806685
  
    --- Diff: core/sql/generator/GenRelUpdate.cpp ---
    @@ -1718,19 +1806,56 @@ short HbaseUpdate::codeGen(Generator * generator)
         }
       else if (getIndexDesc()->isClusteringIndex() && 
getCheckConstraints().entries())
         {
    -      GenAssert(FALSE, "Should not reach here. This update should have 
been transformed to delete/insert");
    -      // To be uncommented when TRAFODION-1610 is implemented
    -      // Need to generate insConstraintExpr also
    -/*
    +      // Generate the update and insert constraint check expressions
    +
    +      // The attributes for the columns referenced in the constraint 
expressions
    +      // refer to the source values of the columns. We want to evaluate the
    +      // constraints aganst the target values, though. So, there is some
    +      // Attributes gymnastics that has to happen to generate them.
    +
    +      // Obtain the ValueIds of base table columns referenced in the
    +      // constraints
    +
    +      ValueId constraintId;
    +      ValueIdSet constraintColumns;
    +      for (CollIndex ci = 0; ci < getCheckConstraints().entries(); ci++)
    +        {
    +          constraintId = getCheckConstraints()[ci];
    +          constraintId.getItemExpr()->findAll(ITM_INDEXCOLUMN,
    +                                              constraintColumns, // out, 
has append semantics
    +                                              TRUE, // visitVEGmembers
    +                                              FALSE); // don't visit index 
descriptors
    +        }
    +
    +      // Prepare the constraint tree for generation
    +
           ItemExpr *constrTree =
             getCheckConstraints().rebuildExprTree(ITM_AND, TRUE, TRUE);
     
           if (getTableDesc()->getNATable()->hasSerializedEncodedColumn())
    -        constrTree = generator->addCompDecodeForDerialization(constrTree);
    +        constrTree = generator->addCompDecodeForDerialization(constrTree, 
isAlignedFormat);
    +
    +      // Generate the update constraint expression, substituting 
Attributes for
    +      // the new update record
    +
    +      genUpdConstraintExpr(generator,
    +                           constrTree,
    +                           constraintColumns,
    +                           newRecExprArray(),
    +                           &updConstraintExpr /* out */);
    +
    +      if ((isMerge()) && (mergeInsertRecExprArray().entries() > 0))
    +        {
    +          // Generate the insert constraint expression, substituting 
Attributes for
    --- End diff --
    
    And this one


---

Reply via email to