on master help sign in
add static optimization for false predicate
commit807fb07c38fcd929e736dabfb2dc266c509cd339 authorAgentM <agentm@themactionfaction.com> dateSat 7 Feb 2015, 22:32 (12 years ago) parent3e7015f
2 files changed+13−5
RelationStaticOptimizer.hs+10−4 RelationStaticOptimizerTest.hs+3−1
RelationStaticOptimizer.hs+10−4
@@ -3,6 +3,7 @@ import RelationType
33import RelationExpr
44import Relation
55import RelationalError
6+import RelationTupleSet
67import Control.Monad.State hiding (join)
78import Data.Either (rights, lefts)
89
@@ -75,11 +76,16 @@ applyStaticRelationalOptimization (Restrict predicate expr) = do
7576 Left err -> return $ Left err
7677 Right optimizedPredicate -> if optimizedPredicate == TruePredicate then
7778 applyStaticRelationalOptimization expr
78− else do
79− optimizedSubExpression <- applyStaticRelationalOptimization expr
80− case optimizedSubExpression of
79+ else if optimizedPredicate == NotPredicate TruePredicate then do
80+ attributesRel <- typeForRelationalExpr expr
81+ case attributesRel of
8182 Left err -> return $ Left err
82− Right optSubExpr -> return $ Right $ Restrict optimizedPredicate optSubExpr
83+ Right attributesRelA -> return $ Right $ MakeStaticRelation (attributes attributesRelA) emptyTupleSet
84+ else do
85+ optimizedSubExpression <- applyStaticRelationalOptimization expr
86+ case optimizedSubExpression of
87+ Left err -> return $ Left err
88+ Right optSubExpr -> return $ Right $ Restrict optimizedPredicate optSubExpr
8389
8490applyStaticRelationalOptimization (Equals exprA exprB) = do
8591 return $ Right $ Equals exprA exprB
RelationStaticOptimizerTest.hs+3−1
@@ -1,6 +1,7 @@
11import RelationType
22import Relation
33import RelationExpr
4+import RelationTupleSet
45import RelationStaticOptimizer
56import System.Exit
67import Control.Monad.State
@@ -17,7 +18,8 @@ main = do
1718 ("StaticProject", Right $ RelationVariable "S", Project (attributeNames s) (RelationVariable "S")),
1819 ("StaticUnion", Right $ RelationVariable "S", Union (RelationVariable "S") (RelationVariable "S")),
1920 ("StaticJoin", Right $ RelationVariable "S", Join (RelationVariable "S") (RelationVariable "S")),
20− ("StaticRestrict", Right $ RelationVariable "S", Restrict TruePredicate (RelationVariable "S"))
21+ ("StaticRestrictTrue", Right $ RelationVariable "S", Restrict TruePredicate (RelationVariable "S")),
22+ ("StaticRestrictFalse", Right $ MakeStaticRelation (attributes s) emptyTupleSet, Restrict (NotPredicate TruePredicate) (RelationVariable "S"))
2123 ]
2224 databaseOptTests = optTest applyStaticDatabaseOptimization [
2325 ("StaticAssign",