Skip to content
This repository has been archived by the owner on Sep 27, 2019. It is now read-only.

Syntax-Based Query Rewriter, Code Review #2 #1495

Open
wants to merge 16 commits into
base: master
Choose a base branch
from

Commits on Apr 1, 2019

  1. Templatized some of the core files:

    - pattern
    - rule
    - ruleset
    - group
    - groupexpression
    - binding
    - memo
    - optimize_context
    - optimizer_task (TopDownRewrite/BottomUpRewrite)
    
    Templates generally followed:
    template <class Node, class OperatorType, class OperatorExpr>
    
    The template instantiation associated with:
    Node = Operator, OperatorType = OpType, OperatorExpr = OperatorExpression
    is used primarily by the core Optimizer. All references to the templated
    files/classes from core optimizer files were instantiated to that.
    
    Note worth mentioning:
    Operator class defines a public interface wrapper around BaseOperatorNode,
    basically defines a single logical/physical operator.
    
    OpType class defines the various logical/physical operations
    OperatorExpression class is essentially a tree of Operator
    17zhangw committed Apr 1, 2019
    Configuration menu
    Copy the full SHA
    dec8194 View commit details
    Browse the repository at this point in the history
  2. Enabled rewriting of a single rule (constant = constant), check tests.

    Possibly annoying problems w.r.t Peloton/terrier:
    (1) Use of unique_ptr/raw pointer as opposed to shared_ptr in AbstractExpression
    (2) AbstractExpression equality comparison method
    
    Additional components needed:
    - Dynamic/template/strategy rule evaluation (particularly comparison)
    - Repeated/multi-level application of rules
    - Layer to convert from memo -> AbstractExpression
    - Some refactoring w.r.t templated code
    - Better AbsExpr_Container/Expression indirection layer
      (intended to present a similar interface exposed by
       Operator/OperatorExpression relied upon by core logic)
    - Proper memory management strategy (tightly coupled to problem #1)
    17zhangw committed Apr 1, 2019
    Configuration menu
    Copy the full SHA
    1be43be View commit details
    Browse the repository at this point in the history

Commits on Apr 5, 2019

  1. Refactoring + full tree rebuilding (at least 2 levels work)

    What still doesn't work/don't care about yet/not done
    - proper memory management (terrier uses shared_ptr anyways)
    
    - other 1-level rewrites, multi-layer rewrites, other expr rewrites
    
    - how can we define a grammar to programmatically create these rewrites?
      (the one we have is way too static...)
    
    - in relation to logical equivalence:
      (1) how do we generate logically equivalent expressions:
          - multi-pass using generating rules (similar to ApplyRule) OR
          - from Pattern A, generate logically equivalent set of patterns P OR
          - transform input expression to match certain specification OR
          - ???
      (2) what operators do we support translating?
          - probably (a AND b) ====> (b AND a)
          - probably (a OR b) ====> (b OR a)
          - probably (a = b) ====> (b = a)
          - maybe more???
      (3) do we want multi level translations?
          - i.e (a AND b) AND c ====> (a AND (b AND c))
          - what order do we do these in?
      May have to modify these operations:
      - Some assertions in TopDownRewrite/BottomUpRewrite w.r.t to the iterator
      - Possibly binding.cpp / optimizer_metadata.h / optimizer_task.cpp
    
    Issues still pending:
    - Comparing Values (Matt email/discussion)
    - r.rule->Check (terrier issue cmu-db#332)
    17zhangw committed Apr 5, 2019
    Configuration menu
    Copy the full SHA
    f4d4e8f View commit details
    Browse the repository at this point in the history

Commits on Apr 7, 2019

  1. Adding AbstractNode class.

    AbstractNode will provide interface for Operator and eventually
    AbstractExpressions as well.
    
    Note there are a few road blocks before the rest of the rewriter can be
    changed to cleanly use abstract classes:
    (1) Similarly abstract OperatorExpressions.
    (2) We will have to find a good place to hide OpType, which is currently
    an enum type (cannot be abstracted) and pervades the code base. This may
    be solved by abstracting at the group level, but will have to look into
    it.
    (3) Need to clean up and separate interfaces between AbstractNode,
    OperatorNode, and Operator classes.
    Newton Xie authored and newtoncx committed Apr 7, 2019
    Configuration menu
    Copy the full SHA
    209c46a View commit details
    Browse the repository at this point in the history

Commits on Apr 26, 2019

  1. Using AbstractNode throughout optimizer.

    Abstract nodes were implemented in 209c46a. This is essentially just
    refactoring and plugging in abstract nodes throughout the optimizer.
    The abstract interface exposes OpType and ExpressionType for now,
    which ideally will be fixed later. Work remaining for abstracting
    OperatorExpression.
    newtoncx committed Apr 26, 2019
    Configuration menu
    Copy the full SHA
    17de3b9 View commit details
    Browse the repository at this point in the history

Commits on Apr 30, 2019

  1. Configuration menu
    Copy the full SHA
    3266f29 View commit details
    Browse the repository at this point in the history

Commits on May 5, 2019

  1. Merge branch 'templatize' into abstract.

    Still need to make fixes to Pattern to support both OpType and ExpType
    without templatizing. Will also need to clean up code after before build
    will work.
    newtoncx committed May 5, 2019
    Configuration menu
    Copy the full SHA
    721323c View commit details
    Browse the repository at this point in the history
  2. Configuration menu
    Copy the full SHA
    5caae6d View commit details
    Browse the repository at this point in the history
  3. Configuration menu
    Copy the full SHA
    e3ac1ba View commit details
    Browse the repository at this point in the history

Commits on May 14, 2019

  1. Added documentation on rule_rewrite.h

    Erik Sargent committed May 14, 2019
    Configuration menu
    Copy the full SHA
    4984dbf View commit details
    Browse the repository at this point in the history
  2. Configuration menu
    Copy the full SHA
    787cdfd View commit details
    Browse the repository at this point in the history
  3. Swapped order of #includes in abstract_node_expression.h

    Erik Sargent committed May 14, 2019
    Configuration menu
    Copy the full SHA
    23a7fbf View commit details
    Browse the repository at this point in the history
  4. Configuration menu
    Copy the full SHA
    da839e8 View commit details
    Browse the repository at this point in the history

Commits on May 15, 2019

  1. Configuration menu
    Copy the full SHA
    a0315c3 View commit details
    Browse the repository at this point in the history
  2. Configuration menu
    Copy the full SHA
    010407b View commit details
    Browse the repository at this point in the history
  3. Configuration menu
    Copy the full SHA
    1d9bdd1 View commit details
    Browse the repository at this point in the history