Răsfoiți Sursa

- further bug fixes for db_postgres_fetch_result and db_postgres_store_result
- return also for all other abnormal query states an error, as the result set
is here set to zero too
- this is probably a little bit to strict, but in the openser context this
types normally should not happen
- as the old behaviour could lead to crashes if this gets eventually reported
from the driver, this is surely an improvement :-)
(most query user check only for return value < 0, and not for == 0)
- in case for the PGRES_EMPTY_QUERY this could be not recognized as error
from upper layers at all, as this is defined as zero in the pg driver..
- small indention fixes


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

Henning Westerholt 17 ani în urmă
părinte
comite
2377652dac
1 a modificat fișierele cu 14 adăugiri și 8 ștergeri
  1. 14 8
      modules/db_postgres/km_dbase.c

+ 14 - 8
modules/db_postgres/km_dbase.c

@@ -241,18 +241,21 @@ int db_postgres_fetch_result(const db_con_t* _con, db_res_t** _res, const int nr
 				return -3;
 
 			case PGRES_EMPTY_QUERY:
+			/* notice or warning */
+			case PGRES_NONFATAL_ERROR:
+			/* status for COPY command, not used */
 			case PGRES_COPY_OUT:
 			case PGRES_COPY_IN:
+			/* unexpected response */
 			case PGRES_BAD_RESPONSE:
-			case PGRES_NONFATAL_ERROR:
 				LM_WARN("%p - probable invalid query\n", _con);
 			default:
 				LM_WARN("%p - PQresultStatus(%s)\n",
 					_con, PQresStatus(pqresult));
 				if (*_res) 
 					db_free_result(*_res);
-        		*_res = 0;
-				return 0;
+				*_res = 0;
+				return -4;
 		}
 
 	} else {
@@ -427,12 +430,12 @@ int db_postgres_store_result(const db_con_t* _con, db_res_t** _r)
 				LM_ERR("%p Error returned from convert_result()\n", _con);
 				if (*_r) db_free_result(*_r);
 
-        		*_r = 0;
+				*_r = 0;
 				rc = -4;
 			}
 			rc =  0;
 			break;
-
+		/* query failed */
 		case PGRES_FATAL_ERROR:
 			LM_ERR("%p - invalid query, execution aborted\n", _con);
 			LM_ERR("%p: %s\n", _con, PQresStatus(pqresult));
@@ -443,18 +446,21 @@ int db_postgres_store_result(const db_con_t* _con, db_res_t** _r)
 			break;
 
 		case PGRES_EMPTY_QUERY:
+		/* notice or warning */
+		case PGRES_NONFATAL_ERROR:
+		/* status for COPY command, not used */
 		case PGRES_COPY_OUT:
 		case PGRES_COPY_IN:
+		/* unexpected response */
 		case PGRES_BAD_RESPONSE:
-		case PGRES_NONFATAL_ERROR:
 			LM_WARN("%p Probable invalid query\n", _con);
 		default:
 			LM_WARN("%p: %s\n", _con, PQresStatus(pqresult));
-        	LM_WARN("%p: %s\n", _con, PQresultErrorMessage(CON_RESULT(_con)));
+			LM_WARN("%p: %s\n", _con, PQresultErrorMessage(CON_RESULT(_con)));
 			if (*_r) db_free_result(*_r);
 
 			*_r = 0;
-			rc = (int)pqresult;
+			rc = -4;
 			break;
 	}