Sophie

Sophie

distrib > Mandriva > 2008.1 > i586 > by-pkgid > 061632773846e95af7ca7e88d7afa7b2 > files > 9

dbxml-2.3.10-2mdv2008.1.src.rpm

diff -ru dbxml-2.3.10-original/dbxml/src/dbxml/optimizer/CostBasedOptimizer.cpp dbxml-2.3.10/dbxml/src/dbxml/optimizer/CostBasedOptimizer.cpp
--- dbxml-2.3.10-original/dbxml/src/dbxml/optimizer/CostBasedOptimizer.cpp	2007-02-02 20:11:55.000000000 +0000
+++ dbxml-2.3.10/dbxml/src/dbxml/optimizer/CostBasedOptimizer.cpp	2007-03-21 20:30:20.000000000 +0000
@@ -352,7 +352,7 @@
 }
 
 DbXmlNav::Steps::reverse_iterator CostBasedOptimizer::findBestIndex(DbXmlNav::Steps::reverse_iterator start,
-	DbXmlNav::Steps::reverse_iterator end)
+	DbXmlNav::Steps::reverse_iterator end, bool findJoin)
 {
 	DbXmlNav::Steps::reverse_iterator found_it = end;
 	QueryPlan::Cost found_cost;
@@ -374,7 +374,7 @@
 					}
 				}
 			}
-		} else if((*i)->getType() == (ASTNode::whichType)DbXmlASTNode::JOIN) {
+		} else if(findJoin && (*i)->getType() == (ASTNode::whichType)DbXmlASTNode::JOIN) {
 			LookupIndex *index = findLookupIndex(*i);
 
 			if(index != 0 && index->isSuitableForLookupIndex()) {
@@ -448,7 +448,7 @@
 	}
 
 	DbXmlNav::Steps &args = const_cast<DbXmlNav::Steps &>(nav->getSteps());
-	DbXmlNav::Steps::reverse_iterator found_it = findBestIndex(args.rbegin(), args.rend());
+	DbXmlNav::Steps::reverse_iterator found_it = findBestIndex(args.rbegin(), args.rend(), /*findJoin*/false);
 
 	if(found_it != args.rend()) {
 		// Create a navigation for the forward steps,
@@ -568,7 +568,7 @@
 		args.push_back(const_cast<ASTNode*>(item->getArgument()));
 	}
 
-	DbXmlNav::Steps::reverse_iterator found_it = findBestIndex(args.rbegin(), args.rend());
+	DbXmlNav::Steps::reverse_iterator found_it = findBestIndex(args.rbegin(), args.rend(), /*findJoin*/true);
 
 	if(found_it == args.rend()) {
 		found_it = findLastJoin(args.rbegin(), args.rend());
diff -ru dbxml-2.3.10-original/dbxml/src/dbxml/optimizer/CostBasedOptimizer.hpp dbxml-2.3.10/dbxml/src/dbxml/optimizer/CostBasedOptimizer.hpp
--- dbxml-2.3.10-original/dbxml/src/dbxml/optimizer/CostBasedOptimizer.hpp	2006-10-30 17:45:59.000000000 +0000
+++ dbxml-2.3.10/dbxml/src/dbxml/optimizer/CostBasedOptimizer.hpp	2007-03-21 20:29:19.000000000 +0000
@@ -34,7 +34,7 @@
 private:
 	void compressSteps(DbXmlNav *nav);
 	DbXmlNav::Steps::reverse_iterator findBestIndex(DbXmlNav::Steps::reverse_iterator start,
-		DbXmlNav::Steps::reverse_iterator end);
+		DbXmlNav::Steps::reverse_iterator end, bool findJoin);
 
 	bool isASTNodeReversible(ASTNode *ast);
 	bool reverseASTNode(ASTNode *ast, Join::Type &axis, LookupIndex *index, DbXmlNav *&reverse);