From 90f7e248be1311590b563ace4d20159678806b89 Mon Sep 17 00:00:00 2001 From: prabatuty Date: Fri, 2 Apr 2010 16:09:19 +0000 Subject: [PATCH] fix for more than 3 table join wrong result --- include/JoinTableImpl.h | 3 ++- src/storage/JoinTableImpl.cxx | 9 +++++---- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/include/JoinTableImpl.h b/include/JoinTableImpl.h index bacbe1ae..5fc6a7b6 100644 --- a/include/JoinTableImpl.h +++ b/include/JoinTableImpl.h @@ -90,7 +90,8 @@ class JoinTableImpl:public Table bool availableLeft; bool isFirstFetch; bool isReturnNull; - bool isOuterJoin; + //bool isOuterJoin; + bool isOptimized; bool isLeftRecOver; bool isFirstCall; bool leftSideFail; diff --git a/src/storage/JoinTableImpl.cxx b/src/storage/JoinTableImpl.cxx index 06ba0711..61bda191 100644 --- a/src/storage/JoinTableImpl.cxx +++ b/src/storage/JoinTableImpl.cxx @@ -31,7 +31,8 @@ JoinTableImpl::JoinTableImpl() availableLeft = true; isFirstFetch = true; isReturnNull = false; - isOuterJoin = false; + //isOuterJoin = false; + isOptimized = false; leftSideFail = false; jType = INNER_JOIN; isNestedLoop = true; @@ -227,12 +228,12 @@ DbRetVal JoinTableImpl::execute() //if( jType != LEFT_JOIN) optimize(); if (leftTableHdl->getName()) { //printf("left execute call %s", leftTableHdl->getName()); - optimize(); + if (!isOptimized) { optimize(); isOptimized = true; } leftTableHdl->execute(); leftTableHdl->fetch(); }else if (isFirstCall) { //printf("First call"); - optimize(); + if (!isOptimized) { optimize(); isOptimized = true; } leftTableHdl->execute(); void *rec = leftTableHdl->fetch(); //printf("rec value is %x\n", rec); @@ -240,7 +241,7 @@ DbRetVal JoinTableImpl::execute() } rightTableHdl->execute(); TableImpl *tImpl = (TableImpl*) rightTableHdl; - isOuterJoin= true; + //isOuterJoin= true; isFirstFetch = true; return OK; } -- 2.11.4.GIT