[SR-Dev] git:janakj/postgres: - fix PGRES_FATAL_ERROR bug in postgres driver

Jan Janak jan at iptel.org
Wed Feb 18 01:26:21 CET 2009


Module: sip-router
Branch: janakj/postgres
Commit: a698aa66d1e3a1576859a35d783136661f2b882a
URL:    http://git.sip-router.org/cgi-bin/gitweb.cgi/sip-router/?a=commit;h=a698aa66d1e3a1576859a35d783136661f2b882a

Author: Henning Westerholt <henning.westerholt at 1und1.de>
Committer: Henning Westerholt <henning.westerholt at 1und1.de>
Date:   Wed Jul  9 14:30:06 2008 +0000

- fix PGRES_FATAL_ERROR bug in postgres driver
- the result set was cleared in this case, but no error was> returned
- reported from Andrew O. Zhukov, gnugk at telegroup dot com dot ua
- small indention fixes


git-svn-id: https://openser.svn.sourceforge.net/svnroot/openser/trunk@4467 689a6050-402a-0410-94f2-e92a70836424

---

 modules/db_postgres/km_dbase.c |   25 ++++++++++++++++++++++---
 1 files changed, 22 insertions(+), 3 deletions(-)

diff --git a/modules/db_postgres/km_dbase.c b/modules/db_postgres/km_dbase.c
index c00029e..a094c70 100644
--- a/modules/db_postgres/km_dbase.c
+++ b/modules/db_postgres/km_dbase.c
@@ -199,7 +199,7 @@ int db_postgres_fetch_result(const db_con_t* _con, db_res_t** _res, const int nr
 		if (*_res)
 			db_free_result(*_res);
 
-        *_res = 0;
+		*_res = 0;
 		return 0;
 	}
 
@@ -223,6 +223,7 @@ int db_postgres_fetch_result(const db_con_t* _con, db_res_t** _res, const int nr
 			case PGRES_COMMAND_OK:
 				/* Successful completion of a command returning no data (such as INSERT or UPDATE). */
 				return 0;
+
 			case PGRES_TUPLES_OK:
 				/* Successful completion of a command returning data (such as a SELECT or SHOW). */
 				if (db_postgres_get_columns(_con, *_res) < 0) {
@@ -230,12 +231,20 @@ int db_postgres_fetch_result(const db_con_t* _con, db_res_t** _res, const int nr
 					return -2;
 				}
 				break;
+
+			case PGRES_FATAL_ERROR:
+				LM_ERR("%p - invalid query, execution aborted\n", _con);
+				LM_ERR("%p - PQresultStatus(%s)\n", _con, PQresStatus(pqresult));
+				if (*_res)
+					db_free_result(*_res);
+				*_res = 0;
+				return -3;
+
 			case PGRES_EMPTY_QUERY:
 			case PGRES_COPY_OUT:
 			case PGRES_COPY_IN:
 			case PGRES_BAD_RESPONSE:
 			case PGRES_NONFATAL_ERROR:
-			case PGRES_FATAL_ERROR:
 				LM_WARN("%p - probable invalid query\n", _con);
 			default:
 				LM_WARN("%p - PQresultStatus(%s)\n",
@@ -411,6 +420,7 @@ int db_postgres_store_result(const db_con_t* _con, db_res_t** _r)
 		/* Successful completion of a command returning no data (such as INSERT or UPDATE). */
 		rc = 0;
 		break;
+
 		case PGRES_TUPLES_OK:
 			/* Successful completion of a command returning data (such as a SELECT or SHOW). */
 			if (db_postgres_convert_result(_con, *_r) < 0) {
@@ -422,12 +432,21 @@ int db_postgres_store_result(const db_con_t* _con, db_res_t** _r)
 			}
 			rc =  0;
 			break;
+
+		case PGRES_FATAL_ERROR:
+			LM_ERR("%p - invalid query, execution aborted\n", _con);
+			LM_ERR("%p: %s\n", _con, PQresStatus(pqresult));
+			LM_ERR("%p: %s\n", _con, PQresultErrorMessage(CON_RESULT(_con)));
+			if (*_r) db_free_result(*_r);
+			*_r = 0;
+			rc = -3;
+			break;
+
 		case PGRES_EMPTY_QUERY:
 		case PGRES_COPY_OUT:
 		case PGRES_COPY_IN:
 		case PGRES_BAD_RESPONSE:
 		case PGRES_NONFATAL_ERROR:
-		case PGRES_FATAL_ERROR:
 			LM_WARN("%p Probable invalid query\n", _con);
 		default:
 			LM_WARN("%p: %s\n", _con, PQresStatus(pqresult));




More information about the sr-dev mailing list