IITDBGroup / gprom

GProM is a middleware that adds support for provenance to database backends.
http://www.cs.iit.edu/%7edbgroup/research/gprom.php
Apache License 2.0
9 stars 5 forks source link

Reenactment with statement annotations under READ COMMITTED - incorrect attribute references #21

Closed lordpretzel closed 7 years ago

lordpretzel commented 7 years ago

Happens is provenance tracking is disabled for some updates.

test case:

./src/command_line/gprom -host localhost -db orcl -port 1521 -user ***** -passwd ***** -log -loglevel 4 -sql "REENACT WITH ISOLATION LEVEL READCOMMITTED COMMIT SCN 1515513 PROVENANCE STATEMENT ANNOTATIONS ONLY UPDATED SHOW INTERMEDIATE  (OPTIONS (NO PROVENANCE AS OF SCN 1515513) UPDATE R SET A = 123 , B = 400 WHERE A = 12 AND B = 4; OPTIONS (AS OF SCN 1515504) update R set A = 39 where B = 4; OPTIONS (AS OF SCN 1515510) insert into R values (8, 8); );" -backend oracle -Pexecutor run

This transaction id for the modified transaction is 0A0011004A120000

lordpretzel commented 7 years ago

details:


Projection [(CASE  WHEN ((B = 4) AND (VERSIONS_STARTSCN <= 1515504)) THEN 39 ELSE A END) B (CASE  WHEN ((B = 4) AND (VERSIONS_STARTSCN <= 1515504)) THEN TRUE ELSE FALSE END) VERSIONS_STARTSCN PROV_R_A PROV_R_B ] [PROJECTION] (A B up VERSIONS_STARTSCN PROV_R_A* PROV_R_B* )(DT_INT DT_INT DT_BOOL DT_LONG DT_INT DT_INT ) [0x109573f23](0x1095c19bc )
  Projection [(CASE  WHEN (((A = 12) AND (B = 4)) AND (VERSIONS_STARTSCN <= 1515513)) THEN 123 ELSE A END) (CASE  WHEN (((A = 12) AND (B = 4)) AND (VERSIONS_STARTSCN <= 1515513)) THEN 400 ELSE B END) VERSIONS_STARTSCN PROV_R_A PROV_R_B ] [PROJECTION] (A B VERSIONS_STARTSCN PROV_R_A* PROV_R_B* )(DT_INT DT_INT DT_LONG DT_INT DT_INT ) [0x109573065](0x109573f23 )
    Selection [((((A = 12) AND (B = 4)) AND (VERSIONS_STARTSCN <= 1515513)) OR ((B = 4) AND (VERSIONS_STARTSCN <= 1515504)))] [SELECT] (A B VERSIONS_STARTSCN PROV_R_A* PROV_R_B* )(DT_INT DT_INT DT_LONG DT_INT DT_INT ) [0x109585627](0x109573065 )
      Projection [A B VERSIONS_STARTSCN A B ] [PROJECTION] (A B VERSIONS_STARTSCN PROV_R_A* PROV_R_B* )(DT_INT DT_INT DT_LONG DT_INT DT_INT ) [0x1095be258](0x109585627 )
        TableAccess [R] [(null)] (A B VERSIONS_STARTSCN )(DT_INT DT_INT DT_LONG ) [0x109573607](0x1095be258 )

DEBUG(logger.c:264) Freed memory context 'LOG_NODE_CONTEXT'.
DEBUG(logger.c:264) Set back current memory context to 'DEFAULT_MEMORY_CONTEXT'@0x7ff057409530.
DEBUG(logger.c:184) Created memory context 'LOG_NODE_CONTEXT'.
DEBUG(logger.c:184) Set current memory context to 'LOG_NODE_CONTEXT'@0x7ff057604a00.
DEBUG(query_operator_model_checker.c:184) details are:

{ATTRIBUTE_REFERENCE
  name: "VERSIONS_STARTSCN"
  fromClauseItem: 0
  attrPosition: 3
  outerLevelsUp: 0
  attrType: DT_LONG - 1
}
{ATTRIBUTE_DEF
  dataType: DT_INT - 0
  attrName: "PROV_R_A"
}
{PROJECTION_OPERATOR
  ADDRESS: 0x109573f23
  parents: (0x1095c19bc
  )
  schema: 
  {SCHEMA
    name: "PROJECTION"
    attrDefs: (
      {ATTRIBUTE_DEF
        dataType: DT_INT - 0
        attrName: "A"
      } 
      {ATTRIBUTE_DEF
        dataType: DT_INT - 0
        attrName: "B"
      } 
      {ATTRIBUTE_DEF
        dataType: DT_BOOL - 4
        attrName: "up"
      } 
      {ATTRIBUTE_DEF
        dataType: DT_LONG - 1
        attrName: "VERSIONS_STARTSCN"
      } 
      {ATTRIBUTE_DEF
        dataType: DT_INT - 0
        attrName: "PROV_R_A"
      } 
      {ATTRIBUTE_DEF
        dataType: DT_INT - 0
        attrName: "PROV_R_B"
      }
    )
  }
  provAttrs: (i4 i5
  )
  properties: 
  {
    {
      {CONSTANT
        constType: DT_STRING - 2
        value 'ADD_PROVENANCE'
        isNull: false
      } => (
        {CONSTANT
          constType: DT_STRING - 2
          value 'up'
          isNull: false
        }
      ), 
      {CONSTANT
        constType: DT_STRING - 2
        value 'IGNORE_PROV_ATTRS'
        isNull: false
      } => 
      {up, VERSIONS_STARTSCN
      }, 
      {CONSTANT
        constType: DT_STRING - 2
        value 'ORIG_UPDATE_TYPE'
        isNull: false
      } => 
      {CONSTANT
        constType: DT_INT - 0
        value 1
        isNull: false
      }, 
      {CONSTANT
        constType: DT_STRING - 2
        value 'PROVENANCE_ADD_REL_NAME'
        isNull: false
      } => 
      {CONSTANT
        constType: DT_STRING - 2
        value 'U1'
        isNull: false
      }, 
      {CONSTANT
        constType: DT_STRING - 2
        value 'PROVENANCE_REL_NAME'
        isNull: false
      } => 
      {CONSTANT
        constType: DT_STRING - 2
        value 'U1_R'
        isNull: false
      }, 
      {CONSTANT
        constType: DT_STRING - 2
        value 'SCN_ATTR'
        isNull: false
      } => 
      {CONSTANT
        constType: DT_STRING - 2
        value 'up'
        isNull: false
      }, 
      {CONSTANT
        constType: DT_STRING - 2
        value 'SHOW_INTERMEDIATE_PROV'
        isNull: false
      } => 
      {CONSTANT
        constType: DT_BOOL - 4
        value TRUE
        isNull: false
      }, 
      {CONSTANT
        constType: DT_STRING - 2
        value 'UPDATE_ROOT'
        isNull: false
      } => 
      {CONSTANT
        constType: DT_BOOL - 4
        value TRUE
        isNull: false
      }
    }
  }
  inputs: (
    {PROJECTION_OPERATOR
      ADDRESS: 0x109573065
      parents: (0x109573f23
      )
      schema: 
      {SCHEMA
        name: "PROJECTION"
        attrDefs: (
          {ATTRIBUTE_DEF
            dataType: DT_INT - 0
            attrName: "A"
          } 
          {ATTRIBUTE_DEF
            dataType: DT_INT - 0
            attrName: "B"
          } 
          {ATTRIBUTE_DEF
            dataType: DT_LONG - 1
            attrName: "VERSIONS_STARTSCN"
          } 
          {ATTRIBUTE_DEF
            dataType: DT_INT - 0
            attrName: "PROV_R_A"
          } 
          {ATTRIBUTE_DEF
            dataType: DT_INT - 0
            attrName: "PROV_R_B"
          }
        )
      }
      provAttrs: (i3 i4
      )
      properties: 
      {
        {
          {CONSTANT
            constType: DT_STRING - 2
            value 'IGNORE_PROV_ATTRS'
            isNull: false
          } => 
          {VERSIONS_STARTSCN
          }, 
          {CONSTANT
            constType: DT_STRING - 2
            value 'ORIG_UPDATE_TYPE'
            isNull: false
          } => 
          {CONSTANT
            constType: DT_INT - 0
            value 1
            isNull: false
          }, 
          {CONSTANT
            constType: DT_STRING - 2
            value 'REENACT_DO_NOT_TRACK_PROV'
            isNull: false
          } => 
          {CONSTANT
            constType: DT_BOOL - 4
            value TRUE
            isNull: false
          }, 
          {CONSTANT
            constType: DT_STRING - 2
            value 'UPDATE_ROOT'
            isNull: false
          } => 
          {CONSTANT
            constType: DT_BOOL - 4
            value TRUE
            isNull: false
          }
        }
      }
      inputs: (
        {SELECTION_OPERATOR
          ADDRESS: 0x109585627
          parents: (0x109573065
          )
          schema: 
          {SCHEMA
            name: "SELECT"
            attrDefs: (
              {ATTRIBUTE_DEF
                dataType: DT_INT - 0
                attrName: "A"
              } 
              {ATTRIBUTE_DEF
                dataType: DT_INT - 0
                attrName: "B"
              } 
              {ATTRIBUTE_DEF
                dataType: DT_LONG - 1
                attrName: "VERSIONS_STARTSCN"
              } 
              {ATTRIBUTE_DEF
                dataType: DT_INT - 0
                attrName: "PROV_R_A"
              } 
              {ATTRIBUTE_DEF
                dataType: DT_INT - 0
                attrName: "PROV_R_B"
              }
            )
          }
          provAttrs: (i3 i4
          )
          properties: 
          {
            {
            }
          }
          inputs: (
            {PROJECTION_OPERATOR
              ADDRESS: 0x1095be258
              parents: (0x109585627
              )
              schema: 
              {SCHEMA
                name: "PROJECTION"
                attrDefs: (
                  {ATTRIBUTE_DEF
                    dataType: DT_INT - 0
                    attrName: "A"
                  } 
                  {ATTRIBUTE_DEF
                    dataType: DT_INT - 0
                    attrName: "B"
                  } 
                  {ATTRIBUTE_DEF
                    dataType: DT_LONG - 1
                    attrName: "VERSIONS_STARTSCN"
                  } 
                  {ATTRIBUTE_DEF
                    dataType: DT_INT - 0
                    attrName: "PROV_R_A"
                  } 
                  {ATTRIBUTE_DEF
                    dataType: DT_INT - 0
                    attrName: "PROV_R_B"
                  }
                )
              }
              provAttrs: (i3 i4
              )
              properties: <>
              inputs: (
                {TABLE_ACCESS_OPERATOR
                  ADDRESS: 0x109573607
                  parents: (0x1095be258
                  )
                  schema: 
                  {SCHEMA
                    name: "(null)"
                    attrDefs: (
                      {ATTRIBUTE_DEF
                        dataType: DT_INT - 0
                        attrName: "A"
                      } 
                      {ATTRIBUTE_DEF
                        dataType: DT_INT - 0
                        attrName: "B"
                      } 
                      {ATTRIBUTE_DEF
                        dataType: DT_LONG - 1
                        attrName: "VERSIONS_STARTSCN"
                      }
                    )
                  }
                  provAttrs: <>
                  properties: 
                  {
                    {
                      {CONSTANT
                        constType: DT_STRING - 2
                        value 'UPDATED_TABLE'
                        isNull: false
                      } => 
                      {CONSTANT
                        constType: DT_BOOL - 4
                        value TRUE
                        isNull: false
                      }, 
                      {CONSTANT
                        constType: DT_STRING - 2
                        value 'USER_PROV_ATTRS'
                        isNull: false
                      } => (
                        {CONSTANT
                          constType: DT_STRING - 2
                          value 'A'
                          isNull: false
                        } 
                        {CONSTANT
                          constType: DT_STRING - 2
                          value 'B'
                          isNull: false
                        }
                      ), 
                      {CONSTANT
                        constType: DT_STRING - 2
                        value 'USE_PROVENANCE'
                        isNull: false
                      } => 
                      {CONSTANT
                        constType: DT_BOOL - 4
                        value TRUE
                        isNull: false
                      }
                    }
                  }
                  inputs: <>
                  asOf: (
                    {CONSTANT
                      constType: DT_LONG - 1
                      value 1515512
                      isNull: false
                    } 
                    {CONSTANT
                      constType: DT_LONG - 1
                      value 1515512
                      isNull: false
                    }
                  )
                  tableName: "R"
                }
              )
              projExprs: (
                {ATTRIBUTE_REFERENCE
                  name: "A"
                  fromClauseItem: 0
                  attrPosition: 0
                  outerLevelsUp: 0
                  attrType: DT_INT - 0
                } 
                {ATTRIBUTE_REFERENCE
                  name: "B"
                  fromClauseItem: 0
                  attrPosition: 1
                  outerLevelsUp: 0
                  attrType: DT_INT - 0
                } 
                {ATTRIBUTE_REFERENCE
                  name: "VERSIONS_STARTSCN"
                  fromClauseItem: 0
                  attrPosition: 2
                  outerLevelsUp: 0
                  attrType: DT_LONG - 1
                } 
                {ATTRIBUTE_REFERENCE
                  name: "A"
                  fromClauseItem: 0
                  attrPosition: 0
                  outerLevelsUp: 0
                  attrType: DT_INT - 0
                } 
                {ATTRIBUTE_REFERENCE
                  name: "B"
                  fromClauseItem: 0
                  attrPosition: 1
                  outerLevelsUp: 0
                  attrType: DT_INT - 0
                }
              )
            }
          )
          cond: 
          {OPERATOR
            name: "OR"
            args: (
              {OPERATOR
                name: "AND"
                args: (
                  {OPERATOR
                    name: "AND"
                    args: (
                      {OPERATOR
                        name: "="
                        args: (
                          {ATTRIBUTE_REFERENCE
                            name: "A"
                            fromClauseItem: 0
                            attrPosition: 0
                            outerLevelsUp: 0
                            attrType: DT_INT - 0
                          } 
                          {CONSTANT
                            constType: DT_INT - 0
                            value 12
                            isNull: false
                          }
                        )
                      } 
                      {OPERATOR
                        name: "="
                        args: (
                          {ATTRIBUTE_REFERENCE
                            name: "B"
                            fromClauseItem: 0
                            attrPosition: 1
                            outerLevelsUp: 0
                            attrType: DT_INT - 0
                          } 
                          {CONSTANT
                            constType: DT_INT - 0
                            value 4
                            isNull: false
                          }
                        )
                      }
                    )
                  } 
                  {OPERATOR
                    name: "<="
                    args: (
                      {ATTRIBUTE_REFERENCE
                        name: "VERSIONS_STARTSCN"
                        fromClauseItem: 0
                        attrPosition: 2
                        outerLevelsUp: -1
                        attrType: DT_LONG - 1
                      } 
                      {CONSTANT
                        constType: DT_LONG - 1
                        value 1515513
                        isNull: false
                      }
                    )
                  }
                )
              } 
              {OPERATOR
                name: "AND"
                args: (
                  {OPERATOR
                    name: "="
                    args: (
                      {ATTRIBUTE_REFERENCE
                        name: "B"
                        fromClauseItem: 0
                        attrPosition: 1
                        outerLevelsUp: 0
                        attrType: DT_INT - 0
                      } 
                      {CONSTANT
                        constType: DT_INT - 0
                        value 4
                        isNull: false
                      }
                    )
                  } 
                  {OPERATOR
                    name: "<="
                    args: (
                      {ATTRIBUTE_REFERENCE
                        name: "VERSIONS_STARTSCN"
                        fromClauseItem: 0
                        attrPosition: 2
                        outerLevelsUp: -1
                        attrType: DT_LONG - 1
                      } 
                      {CONSTANT
                        constType: DT_LONG - 1
                        value 1515504
                        isNull: false
                      }
                    )
                  }
                )
              }
            )
          }
        }
      )
      projExprs: (
        {CASE_EXPR
          expr: <>
          whenClauses: (
            {CASE_WHEN
              when: 
              {OPERATOR
                name: "AND"
                args: (
                  {OPERATOR
                    name: "AND"
                    args: (
                      {OPERATOR
                        name: "="
                        args: (
                          {ATTRIBUTE_REFERENCE
                            name: "A"
                            fromClauseItem: 0
                            attrPosition: 0
                            outerLevelsUp: 0
                            attrType: DT_INT - 0
                          } 
                          {CONSTANT
                            constType: DT_INT - 0
                            value 12
                            isNull: false
                          }
                        )
                      } 
                      {OPERATOR
                        name: "="
                        args: (
                          {ATTRIBUTE_REFERENCE
                            name: "B"
                            fromClauseItem: 0
                            attrPosition: 1
                            outerLevelsUp: 0
                            attrType: DT_INT - 0
                          } 
                          {CONSTANT
                            constType: DT_INT - 0
                            value 4
                            isNull: false
                          }
                        )
                      }
                    )
                  } 
                  {OPERATOR
                    name: "<="
                    args: (
                      {ATTRIBUTE_REFERENCE
                        name: "VERSIONS_STARTSCN"
                        fromClauseItem: 0
                        attrPosition: 2
                        outerLevelsUp: 0
                        attrType: DT_LONG - 1
                      } 
                      {CONSTANT
                        constType: DT_LONG - 1
                        value 1515513
                        isNull: false
                      }
                    )
                  }
                )
              }
              then: 
              {CONSTANT
                constType: DT_INT - 0
                value 123
                isNull: false
              }
            }
          )
          elseRes: 
          {ATTRIBUTE_REFERENCE
            name: "A"
            fromClauseItem: 0
            attrPosition: 0
            outerLevelsUp: 0
            attrType: DT_INT - 0
          }
        } 
        {CASE_EXPR
          expr: <>
          whenClauses: (
            {CASE_WHEN
              when: 
              {OPERATOR
                name: "AND"
                args: (
                  {OPERATOR
                    name: "AND"
                    args: (
                      {OPERATOR
                        name: "="
                        args: (
                          {ATTRIBUTE_REFERENCE
                            name: "A"
                            fromClauseItem: 0
                            attrPosition: 0
                            outerLevelsUp: 0
                            attrType: DT_INT - 0
                          } 
                          {CONSTANT
                            constType: DT_INT - 0
                            value 12
                            isNull: false
                          }
                        )
                      } 
                      {OPERATOR
                        name: "="
                        args: (
                          {ATTRIBUTE_REFERENCE
                            name: "B"
                            fromClauseItem: 0
                            attrPosition: 1
                            outerLevelsUp: 0
                            attrType: DT_INT - 0
                          } 
                          {CONSTANT
                            constType: DT_INT - 0
                            value 4
                            isNull: false
                          }
                        )
                      }
                    )
                  } 
                  {OPERATOR
                    name: "<="
                    args: (
                      {ATTRIBUTE_REFERENCE
                        name: "VERSIONS_STARTSCN"
                        fromClauseItem: 0
                        attrPosition: 2
                        outerLevelsUp: 0
                        attrType: DT_LONG - 1
                      } 
                      {CONSTANT
                        constType: DT_LONG - 1
                        value 1515513
                        isNull: false
                      }
                    )
                  }
                )
              }
              then: 
              {CONSTANT
                constType: DT_INT - 0
                value 400
                isNull: false
              }
            }
          )
          elseRes: 
          {ATTRIBUTE_REFERENCE
            name: "B"
            fromClauseItem: 0
            attrPosition: 1
            outerLevelsUp: 0
            attrType: DT_INT - 0
          }
        } 
        {ATTRIBUTE_REFERENCE
          name: "VERSIONS_STARTSCN"
          fromClauseItem: 0
          attrPosition: 2
          outerLevelsUp: 0
          attrType: DT_LONG - 1
        } 
        {ATTRIBUTE_REFERENCE
          name: "PROV_R_A"
          fromClauseItem: 0
          attrPosition: 3
          outerLevelsUp: 0
          attrType: DT_INT - 0
        } 
        {ATTRIBUTE_REFERENCE
          name: "PROV_R_B"
          fromClauseItem: 0
          attrPosition: 4
          outerLevelsUp: 0
          attrType: DT_INT - 0
        }
      )
    }
  )
  projExprs: (
    {CASE_EXPR
      expr: <>
      whenClauses: (
        {CASE_WHEN
          when: 
          {OPERATOR
            name: "AND"
            args: (
              {OPERATOR
                name: "="
                args: (
                  {ATTRIBUTE_REFERENCE
                    name: "B"
                    fromClauseItem: 0
                    attrPosition: 1
                    outerLevelsUp: 0
                    attrType: DT_INT - 0
                  } 
                  {CONSTANT
                    constType: DT_INT - 0
                    value 4
                    isNull: false
                  }
                )
              } 
              {OPERATOR
                name: "<="
                args: (
                  {ATTRIBUTE_REFERENCE
                    name: "VERSIONS_STARTSCN"
                    fromClauseItem: 0
                    attrPosition: 3
                    outerLevelsUp: 0
                    attrType: DT_LONG - 1
                  } 
                  {CONSTANT
                    constType: DT_LONG - 1
                    value 1515504
                    isNull: false
                  }
                )
              }
            )
          }
          then: 
          {CONSTANT
            constType: DT_INT - 0
            value 39
            isNull: false
          }
        }
      )
      elseRes: 
      {ATTRIBUTE_REFERENCE
        name: "A"
        fromClauseItem: 0
        attrPosition: 0
        outerLevelsUp: 0
        attrType: DT_INT - 0
      }
    } 
    {ATTRIBUTE_REFERENCE
      name: "B"
      fromClauseItem: 0
      attrPosition: 1
      outerLevelsUp: 0
      attrType: DT_INT - 0
    } 
    {CASE_EXPR
      expr: <>
      whenClauses: (
        {CASE_WHEN
          when: 
          {OPERATOR
            name: "AND"
            args: (
              {OPERATOR
                name: "="
                args: (
                  {ATTRIBUTE_REFERENCE
                    name: "B"
                    fromClauseItem: 0
                    attrPosition: 1
                    outerLevelsUp: 0
                    attrType: DT_INT - 0
                  } 
                  {CONSTANT
                    constType: DT_INT - 0
                    value 4
                    isNull: false
                  }
                )
              } 
              {OPERATOR
                name: "<="
                args: (
                  {ATTRIBUTE_REFERENCE
                    name: "VERSIONS_STARTSCN"
                    fromClauseItem: 0
                    attrPosition: 3
                    outerLevelsUp: 0
                    attrType: DT_LONG - 1
                  } 
                  {CONSTANT
                    constType: DT_LONG - 1
                    value 1515504
                    isNull: false
                  }
                )
              }
            )
          }
          then: 
          {CONSTANT
            constType: DT_BOOL - 4
            value TRUE
            isNull: false
          }
        }
      )
      elseRes: 
      {CONSTANT
        constType: DT_BOOL - 4
        value FALSE
        isNull: false
      }
    } 
    {ATTRIBUTE_REFERENCE
      name: "VERSIONS_STARTSCN"
      fromClauseItem: 0
      attrPosition: 3
      outerLevelsUp: 0
      attrType: DT_LONG - 1
    } 
    {ATTRIBUTE_REFERENCE
      name: "PROV_R_A"
      fromClauseItem: 0
      attrPosition: 3
      outerLevelsUp: 0
      attrType: DT_INT - 0
    } 
    {ATTRIBUTE_REFERENCE
      name: "PROV_R_B"
      fromClauseItem: 0
      attrPosition: 4
      outerLevelsUp: 0
      attrType: DT_INT - 0
    }
  )
}