summaryrefslogtreecommitdiffstats
path: root/qlparser
diff options
context:
space:
mode:
authorAndrei Aiordachioaie <a.aiordachioaie@jacobs-university.de>2010-01-25 18:55:43 +0100
committerAndrei Aiordachioaie <a.aiordachioaie@jacobs-university.de>2010-01-25 22:25:01 +0100
commit45032ffd23ce741dd9cd63a4befcea89f2fd19cf (patch)
treebc89903eaabab627492f5364bdfe0a9410e88634 /qlparser
parent068b5df28a09ce77d4ce3844ab6d8730d38e85a1 (diff)
downloadrasdaman-upstream-45032ffd23ce741dd9cd63a4befcea89f2fd19cf.tar.gz
rasdaman-upstream-45032ffd23ce741dd9cd63a4befcea89f2fd19cf.tar.xz
rasdaman-upstream-45032ffd23ce741dd9cd63a4befcea89f2fd19cf.zip
Added a layer of abstraction for optimization levels.
Diffstat (limited to 'qlparser')
-rw-r--r--qlparser/querytree.cc17
-rw-r--r--qlparser/querytree.hh10
2 files changed, 27 insertions, 0 deletions
diff --git a/qlparser/querytree.cc b/qlparser/querytree.cc
index 4a14ed6..412a2a5 100644
--- a/qlparser/querytree.cc
+++ b/qlparser/querytree.cc
@@ -160,6 +160,9 @@ QueryTree::optimize( unsigned int currentOptimizationLevel )
}
}
+ if (isValidOptimizationLevel(currentOptimizationLevel) == false)
+ throw r_Error(r_Error::r_Error_InvalidOptimizationLevel);
+
optimizationFnc(currentOptimizationLevel, rootNode);
RMDBGIF( 1, RMDebug::module_qlparser, "QueryTree", \
@@ -487,3 +490,17 @@ void QueryTree::rewriteDomainObjects(r_Minterval *greatDomain, string *greatIter
void QueryTree::addCString( char *str ) {
lexedCStringList.push_back( str );
}
+
+bool QueryTree::isValidOptimizationLevel( int level )
+{
+ switch (level)
+ {
+ case STANDARDIZATION:
+ case SIMPLIFICATION:
+ case SUBEXPRESSIONS:
+ return true;
+
+ default:
+ return false;
+ }
+}
diff --git a/qlparser/querytree.hh b/qlparser/querytree.hh
index d6f28cc..cfeafb7 100644
--- a/qlparser/querytree.hh
+++ b/qlparser/querytree.hh
@@ -84,6 +84,13 @@ class QueryTree
public:
+ enum OptimizationLevel
+ {
+ STANDARDIZATION = 1,
+ SIMPLIFICATION = 2,
+ SUBEXPRESSIONS = 3
+ };
+
/// default constructor
QueryTree();
@@ -198,6 +205,9 @@ class QueryTree
static void (*optimizationFnc)(unsigned int, QtNode*);
+ // Validity checks for the level of optimization
+ bool isValidOptimizationLevel( int level );
+
/// used by public seeSubexpression()
vector<QtNode::QtNodeList>* seeSubexpression( QtNode::QtNodeList* leafList );