aboutsummaryrefslogtreecommitdiff
path: root/contrib/native
diff options
context:
space:
mode:
authornorrislee <norrislee18@hotmail.com>2015-01-05 15:28:34 -0800
committerParth Chandra <pchandra@maprtech.com>2015-01-06 09:00:14 -0800
commit07f276d686c99bc6485661ece0425c1a187aa802 (patch)
tree2a822a1667ea504b3379ab59e61953887d2284a0 /contrib/native
parentb491cdb37ea066e2aa041fcca706cc62c8881767 (diff)
DRILL-1533: C++ Drill Client always sets hasSchemaChanged to true for every new record batch
Diffstat (limited to 'contrib/native')
-rw-r--r--contrib/native/client/src/clientlib/drillClientImpl.cpp51
1 files changed, 23 insertions, 28 deletions
diff --git a/contrib/native/client/src/clientlib/drillClientImpl.cpp b/contrib/native/client/src/clientlib/drillClientImpl.cpp
index 23dc407d4..5b390ef70 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