Repository: drill Updated Branches: refs/heads/master b491cdb37 -> 363d30b54
DRILL-1533: C++ Drill Client always sets hasSchemaChanged to true for every new record batch Project: http://git-wip-us.apache.org/repos/asf/drill/repo Commit: http://git-wip-us.apache.org/repos/asf/drill/commit/07f276d6 Tree: http://git-wip-us.apache.org/repos/asf/drill/tree/07f276d6 Diff: http://git-wip-us.apache.org/repos/asf/drill/diff/07f276d6 Branch: refs/heads/master Commit: 07f276d686c99bc6485661ece0425c1a187aa802 Parents: b491cdb Author: norrislee <norrisle...@hotmail.com> Authored: Mon Jan 5 15:28:34 2015 -0800 Committer: Parth Chandra <pchan...@maprtech.com> Committed: Tue Jan 6 09:00:14 2015 -0800 ---------------------------------------------------------------------- .../client/src/clientlib/drillClientImpl.cpp | 51 +++++++++----------- 1 file changed, 23 insertions(+), 28 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/drill/blob/07f276d6/contrib/native/client/src/clientlib/drillClientImpl.cpp ---------------------------------------------------------------------- diff --git a/contrib/native/client/src/clientlib/drillClientImpl.cpp b/contrib/native/client/src/clientlib/drillClientImpl.cpp index 23dc407..5b390ef 100644 --- a/contrib/native/client/src/clientlib/drillClientImpl.cpp +++ b/contrib/native/client/src/clientlib/drillClientImpl.cpp @@ -923,49 +923,44 @@ status_t DrillClientQueryResult::setupColumnDefs(exec::shared::QueryResult* pQue bool isFirstIter=false; boost::lock_guard<boost::mutex> schLock(this->m_schemaMutex); - FieldDefPtr prevSchema=this->m_columnDefs; isFirstIter=this->m_numBatches==1?true:false; std::map<std::string, Drill::FieldMetadata*> oldSchema; if(!m_columnDefs->empty()){ - for(std::vector<Drill::FieldMetadata*>::iterator it = prevSchema->begin(); it != prevSchema->end(); ++it){ + for(std::vector<Drill::FieldMetadata*>::iterator it = this->m_columnDefs->begin(); it != this->m_columnDefs->end(); ++it){ // the key is the field_name + type char type[256]; sprintf(type, ":%d:%d",(*it)->getMinorType(), (*it)->getDataMode() ); std::string k= (*it)->getName()+type; oldSchema[k]=*it; + delete *it; } } m_columnDefs->clear(); size_t numFields=pQueryResult->def().field_size(); - for(size_t i=0; i<numFields; i++){ - Drill::FieldMetadata* fmd= new Drill::FieldMetadata; - fmd->set(pQueryResult->def().field(i)); - this->m_columnDefs->push_back(fmd); - - //Look for changes in the vector and trigger a Schema change event if necessary. - //If vectors are different, then call the schema change listener. - char type[256]; - sprintf(type, ":%d:%d",fmd->getMinorType(), fmd->getDataMode() ); - std::string k= fmd->getName()+type; - std::map<std::string, Drill::FieldMetadata*>::iterator iter=oldSchema.find(k); - if(iter==oldSchema.end()){ - // not found - hasSchemaChanged=true; - }else{ - oldSchema.erase(iter); + if (numFields > 0){ + for(size_t i=0; i<numFields; i++){ + Drill::FieldMetadata* fmd= new Drill::FieldMetadata; + fmd->set(pQueryResult->def().field(i)); + this->m_columnDefs->push_back(fmd); + + //Look for changes in the vector and trigger a Schema change event if necessary. + //If vectors are different, then call the schema change listener. + char type[256]; + sprintf(type, ":%d:%d",fmd->getMinorType(), fmd->getDataMode() ); + std::string k= fmd->getName()+type; + std::map<std::string, Drill::FieldMetadata*>::iterator iter=oldSchema.find(k); + if(iter==oldSchema.end()){ + // not found + hasSchemaChanged=true; + }else{ + oldSchema.erase(iter); + } } - } - if(oldSchema.size()>0){ - hasSchemaChanged=true; - } - - //free memory allocated for FieldMetadata objects saved in previous columnDefs; - if(!prevSchema->empty()){ - for(std::vector<Drill::FieldMetadata*>::iterator it = prevSchema->begin(); it != prevSchema->end(); ++it){ - delete *it; + if(oldSchema.size()>0){ + hasSchemaChanged=true; + oldSchema.clear(); } } - prevSchema->clear(); this->m_bHasSchemaChanged=hasSchemaChanged&&!isFirstIter; if(this->m_bHasSchemaChanged){ //invoke schema change Listener