Add Cursor::$query property
[m6w6/ext-pq] / src / php_pqconn.c
index 10eb5d42d8a392eab8ebdd080fc59ef2ec856430..a455f92ba87e084b5fe79bcac99162347532ba69 100644 (file)
@@ -1288,13 +1288,7 @@ static PHP_METHOD(pqconn, prepare) {
                        if (SUCCESS != php_pqconn_prepare(getThis(), obj, name_str, query_str, params TSRMLS_CC)) {
                                php_pq_params_free(&params);
                        } else {
-                               php_pqstm_t *stm = ecalloc(1, sizeof(*stm));
-
-                               php_pq_object_addref(obj TSRMLS_CC);
-                               stm->conn = obj;
-                               stm->name = estrdup(name_str);
-                               stm->params = params;
-                               ZEND_INIT_SYMTABLE(&stm->bound);
+                               php_pqstm_t *stm = php_pqstm_init(obj, name_str, query_str, params TSRMLS_CC);
 
                                return_value->type = IS_OBJECT;
                                return_value->value.obj = php_pqstm_create_object_ex(php_pqstm_class_entry, stm, NULL TSRMLS_CC);
@@ -1350,13 +1344,7 @@ static PHP_METHOD(pqconn, prepareAsync) {
                        if (SUCCESS != php_pqconn_prepare_async(getThis(), obj, name_str, query_str, params TSRMLS_CC)) {
                                php_pq_params_free(&params);
                        } else {
-                               php_pqstm_t *stm = ecalloc(1, sizeof(*stm));
-
-                               php_pq_object_addref(obj TSRMLS_CC);
-                               stm->conn = obj;
-                               stm->name = estrdup(name_str);
-                               stm->params = params;
-                               ZEND_INIT_SYMTABLE(&stm->bound);
+                               php_pqstm_t *stm = php_pqstm_init(obj, name_str, query_str, params TSRMLS_CC);
 
                                return_value->type = IS_OBJECT;
                                return_value->value.obj = php_pqstm_create_object_ex(php_pqstm_class_entry, stm, NULL TSRMLS_CC);
@@ -1410,18 +1398,13 @@ static PHP_METHOD(pqconn, declare) {
                if (!obj->intern) {
                        throw_exce(EX_UNINITIALIZED TSRMLS_CC, "pq\\Connection not initialized");
                } else {
-                       char *decl = php_pqcur_declare_str(name_str, name_len, flags, query_str, query_len);
+                       int query_offset;
+                       char *decl = php_pqcur_declare_str(name_str, name_len, flags, query_str, query_len, &query_offset);
 
                        if (SUCCESS != php_pqconn_declare(getThis(), obj, decl TSRMLS_CC)) {
                                efree(decl);
                        } else {
-                               php_pqcur_t *cur = ecalloc(1, sizeof(*cur));
-
-                               php_pq_object_addref(obj TSRMLS_CC);
-                               cur->conn = obj;
-                               cur->open = 1;
-                               cur->name = estrdup(name_str);
-                               cur->decl = decl;
+                               php_pqcur_t *cur = php_pqcur_init(obj, name_str, decl, query_offset, flags TSRMLS_CC);
 
                                return_value->type = IS_OBJECT;
                                return_value->value.obj = php_pqcur_create_object_ex(php_pqcur_class_entry, cur, NULL TSRMLS_CC);
@@ -1472,18 +1455,13 @@ static PHP_METHOD(pqconn, declareAsync) {
                if (!obj->intern) {
                        throw_exce(EX_UNINITIALIZED TSRMLS_CC, "pq\\Connection not initialized");
                } else {
-                       char *decl = php_pqcur_declare_str(name_str, name_len, flags, query_str, query_len);
+                       int query_offset;
+                       char *decl = php_pqcur_declare_str(name_str, name_len, flags, query_str, query_len, &query_offset);
 
                        if (SUCCESS != php_pqconn_declare_async(getThis(), obj, decl TSRMLS_CC)) {
                                efree(decl);
                        } else {
-                               php_pqcur_t *cur = ecalloc(1, sizeof(*cur));
-
-                               php_pq_object_addref(obj TSRMLS_CC);
-                               cur->conn = obj;
-                               cur->open = 1;
-                               cur->name = estrdup(name_str);
-                               cur->decl = decl;
+                               php_pqcur_t *cur = php_pqcur_init(obj, name_str, decl, query_offset, flags TSRMLS_CC);
 
                                return_value->type = IS_OBJECT;
                                return_value->value.obj = php_pqcur_create_object_ex(php_pqcur_class_entry, cur, NULL TSRMLS_CC);
@@ -1736,6 +1714,7 @@ static PHP_METHOD(pqconn, startTransactionAsync) {
 
                        php_pq_object_addref(obj TSRMLS_CC);
                        txn->conn = obj;
+                       txn->open = 1;
                        txn->isolation = isolation;
                        txn->readonly = readonly;
                        txn->deferrable = deferrable;