only rollback if transaction status indicates need of action
[m6w6/ext-pq] / src / php_pq.c
index 4c970782d6d7f4f68cdbc5041839b1906b17f7a8..a465eeddb99db1f52d0b133162a9d1d3bf6709eb 100644 (file)
@@ -1803,8 +1803,9 @@ static void php_pqconn_persistent_resource_factory_dtor(void *opaque, void *hand
 {
        PGresult *res;
 
+
        /* clean up */
-       if ((res = PQexec(handle, "ROLLBACK; RESET ALL;"))) {
+       if ((res = PQexec(handle, PQtransactionStatus(handle) == PQTRANS_IDLE ? "RESET ALL" : "ROLLBACK; RESET ALL"))) {
                PHP_PQclear(res);
        }
 
@@ -3601,24 +3602,19 @@ static PHP_METHOD(pqstm, descAsync) {
        if (SUCCESS == zend_parse_parameters_none()) {
                php_pqstm_object_t *obj = zend_object_store_get_object(getThis() TSRMLS_CC);
 
-               if (obj->conn && obj->name) {
-                       php_pqconn_object_t *conn_obj = zend_object_store_get_object(obj->conn TSRMLS_CC);
-
-                       if (conn_obj->conn) {
-                               conn_obj->poller = PQconsumeInput;
-                               if (PQsendDescribePrepared(conn_obj->conn, obj->name)) {
-                                       RETVAL_TRUE;
-                               } else {
-                                       php_error_docref(NULL TSRMLS_CC, E_WARNING, "Could not describe statement: %s", PQerrorMessage(conn_obj->conn));
-                                       RETVAL_FALSE;
-                               }
+               if (obj->intern) {
 
-                               php_pqconn_notify_listeners(obj->conn, conn_obj TSRMLS_CC);
+                       obj->intern->conn->intern->poller = PQconsumeInput;
 
+                       if (PQsendDescribePrepared(obj->intern->conn->intern->conn, obj->intern->name)) {
+                               RETVAL_TRUE;
                        } else {
-                               php_error_docref(NULL TSRMLS_CC, E_WARNING, "Connection not initialized");
+                               php_error_docref(NULL TSRMLS_CC, E_WARNING, "Could not describe statement: %s", PHP_PQerrorMessage(obj->intern->conn->intern->conn));
                                RETVAL_FALSE;
                        }
+
+                       php_pqconn_notify_listeners(obj->intern->conn TSRMLS_CC);
+
                } else {
                        php_error_docref(NULL TSRMLS_CC, E_WARNING, "Statement not initialized");
                        RETVAL_FALSE;