From af4c26ead237a8a379d186dff0b741dd38729c36 Mon Sep 17 00:00:00 2001 From: rawbytes Date: Wed, 4 Feb 2004 05:43:19 +0000 Subject: [PATCH] fixed segfault errors git-svn-id: http://svn.osgeo.org/qgis/trunk@688 c8812cc2-4d05-0410-92ff-de0c093fc19c --- tools/spit/qgsshapefile.cpp | 31 ++++++++-------- tools/spit/qgsspit.cpp | 72 ++++++++++++++++++++++++++++++------- tools/spit/spit.kdevses | 6 ++-- 3 files changed, 80 insertions(+), 29 deletions(-) diff --git a/tools/spit/qgsshapefile.cpp b/tools/spit/qgsshapefile.cpp index 6481526703e..50e10eb7dc8 100644 --- a/tools/spit/qgsshapefile.cpp +++ b/tools/spit/qgsshapefile.cpp @@ -136,7 +136,6 @@ bool QgsShapeFile::insertLayer(QString dbname, QString geom_col, QString srid, P connect(pro, SIGNAL(cancelled()), this, SLOT(cancelImport())); import_cancelled = false; bool result = true; - QString message; QString query = "CREATE TABLE "+table_name+"(gid int4 PRIMARY KEY, "; for(int n=0; nGetNextFeature(); if(feat){ OGRGeometry *geom = feat->GetGeometryRef(); @@ -206,15 +208,17 @@ bool QgsShapeFile::insertLayer(QString dbname, QString geom_col, QString srid, P } query += QString("GeometryFromText(\'")+geometry+QString("\', ")+srid+QString("))"); - PQclear(res); - if(result) res = PQexec(conn, (const char *)query); - message = PQresultErrorMessage(res); - if(message != ""){ + if(result) + res = PQexec(conn, (const char *)query); + if(PQresultStatus(res)!=PGRES_COMMAND_OK){ // flag error and send query and error message to stdout on debug result = false; qWarning(query); - qWarning(PQresultErrorMessage(res)); } + else { + PQclear(res); + } + pro->setProgress(pro->progress()+1); qApp->processEvents(); delete[] geo_temp; @@ -223,7 +227,6 @@ bool QgsShapeFile::insertLayer(QString dbname, QString geom_col, QString srid, P } } ogrLayer->ResetReading(); - PQclear(res); return result; } diff --git a/tools/spit/qgsspit.cpp b/tools/spit/qgsspit.cpp index d03961312c6..25a165b9c6f 100644 --- a/tools/spit/qgsspit.cpp +++ b/tools/spit/qgsspit.cpp @@ -268,7 +268,14 @@ void QgsSpit::import(){ pro->setProgress(pro->progress()+fileList[i]->getFeatureCount()); continue; } - PQexec(pd, "BEGIN"); + + res = PQexec(pd, "BEGIN"); + if(PQresultStatus(res)!=PGRES_COMMAND_OK){ + qWarning(PQresultErrorMessage(res)); + } + else { + PQclear(res); + } fileList[i]->setTable(tblShapefiles->text(i, 3)); pro->setLabelText("Importing files\n"+fileList[i]->getName()); @@ -276,14 +283,26 @@ void QgsSpit::import(){ int rel_exists2 = 0; QString query = "SELECT f_table_name FROM geometry_columns WHERE f_table_name=\'"+fileList[i]->getTable()+"\'"; res = PQexec(pd, (const char *)query); - rel_exists1 = PQntuples(res); - PQclear(res); - query = "SELECT relname FROM pg_tables WHERE tablename=\'"+fileList[i]->getTable()+"\'"; + if(PQresultStatus(res)!=PGRES_COMMAND_OK){ + qWarning(PQresultErrorMessage(res)); + } + else { + PQclear(res); + } + + //rel_exists1 = PQntuples(res); + + query = "SELECT tablename FROM pg_tables WHERE tablename=\'"+fileList[i]->getTable()+"\'"; res = PQexec(pd, (const char *)query); - rel_exists2 = PQntuples(res); - PQclear(res); + if(PQresultStatus(res)!=PGRES_COMMAND_OK){ + qWarning(PQresultErrorMessage(res)); + } + else { + PQclear(res); + } + //rel_exists2 = PQntuples(res); - std::cout<< rel_exists1 << " " << rel_exists2 << std::endl; + //std::cout<< rel_exists1 << " " << rel_exists2 << std::endl; QMessageBox *del_confirm; if(rel_exists1!=0 || rel_exists2!=0){ @@ -301,15 +320,31 @@ void QgsSpit::import(){ query = "SELECT DropGeometryColumn(\'"+QString(settings.readEntry(key + "/database"))+"\', \'"+ fileList[i]->getTable()+"\', \'"+txtGeomName->text()+"')"; res = PQexec(pd, (const char *)query); - PQclear(res); + if(PQresultStatus(res)!=PGRES_COMMAND_OK){ + qWarning(PQresultErrorMessage(res)); + } + else { + PQclear(res); + } } else if (del_confirm->exec() == QMessageBox::Yes && rel_exists2!=0){ query = "DROP TABLE " + fileList[i]->getTable(); res = PQexec(pd, (const char *)query); - PQclear(res); + if(PQresultStatus(res)!=PGRES_COMMAND_OK){ + qWarning(PQresultErrorMessage(res)); + } + else { + PQclear(res); + } } else { - PQexec(pd, "ROLLBACK"); + res = PQexec(pd, "ROLLBACK"); + if(PQresultStatus(res)!=PGRES_COMMAND_OK){ + qWarning(PQresultErrorMessage(res)); + } + else { + PQclear(res); + } } } @@ -318,12 +353,25 @@ void QgsSpit::import(){ if(!finished){ QMessageBox::warning(this, "Import Shapefiles", "Problem inserting features from file:\n"+fileList[i]->getName()); - PQexec(pd, "ROLLBACK"); + res = PQexec(pd, "ROLLBACK"); + if(PQresultStatus(res)!=PGRES_COMMAND_OK){ + qWarning(PQresultErrorMessage(res)); + } + else { + PQclear(res); + } } pro->setProgress(pro->progress()+fileList[i]->getFeatureCount()); } else{ // if file has been imported, remove it from the list - PQexec(pd, "COMMIT"); + res = PQexec(pd, "COMMIT"); + if(PQresultStatus(res)!=PGRES_COMMAND_OK){ + qWarning(PQresultErrorMessage(res)); + } + else { + PQclear(res); + } + for(int j=0; jnumRows(); j++){ if(tblShapefiles->text(j,0)==QString(fileList[i]->getName())){ tblShapefiles->selectRow(j); diff --git a/tools/spit/spit.kdevses b/tools/spit/spit.kdevses index 1d4cf90d33d..f920edb1340 100644 --- a/tools/spit/spit.kdevses +++ b/tools/spit/spit.kdevses @@ -5,10 +5,10 @@ - + - - + +