]> granicus.if.org Git - php/commitdiff
Fixed pdo_firebird tests failures
authorDmitry Stogov <dmitry@zend.com>
Mon, 11 Aug 2014 19:56:34 +0000 (23:56 +0400)
committerDmitry Stogov <dmitry@zend.com>
Mon, 11 Aug 2014 19:56:34 +0000 (23:56 +0400)
ext/pdo/tests/bug65946.phpt
ext/pdo/tests/bug_38253.phpt
ext/pdo_firebird/firebird_statement.c

index 1c4bd8d6c42873357e8ab5c3e8f190c6107f8bed..4b63a14bb5e7209029d04d4a613c9b10ef05cd66 100644 (file)
@@ -16,7 +16,12 @@ $db = PDOTest::factory();
 $db->setAttribute(PDO::ATTR_EMULATE_PREPARES, true);
 $db->exec('CREATE TABLE test(id int)');
 $db->exec('INSERT INTO test VALUES(1)');
-$stmt = $db->prepare('SELECT * FROM test LIMIT :limit');
+if ($db->getAttribute(PDO::ATTR_DRIVER_NAME) == 'firebird') {
+       $sql = 'SELECT FIRST :limit * FROM test';
+} else {
+       $sql = 'SELECT * FROM test LIMIT :limit';
+}
+$stmt = $db->prepare($sql);
 $stmt->bindValue('limit', 1, PDO::PARAM_INT);
 if(!($res = $stmt->execute())) var_dump($stmt->errorInfo());
 if(!($res = $stmt->execute())) var_dump($stmt->errorInfo());
index 4453c3bb23b76f2112830d9d3b5fc28f1ab65c32..e749970a5f7132565f2cbb057a04f14c8b2f240f 100644 (file)
@@ -22,11 +22,11 @@ $stmt = $pdo->prepare ("SELECT * FROM test");
 $stmt->execute();
 var_dump($stmt->fetchAll());
 
-$pdo = PDOTest::factory();
-
 if ($pdo->getAttribute(PDO::ATTR_DRIVER_NAME) == 'oci') {
     $type = "clob";
-} else{
+} else if ($pdo->getAttribute(PDO::ATTR_DRIVER_NAME) == 'firebird') {
+    $type = 'BLOB SUB_TYPE TEXT';
+} else {
     $type = "text";
 }
 
index 586960cbf74d3968d569d056611319b6569b762d..d21273366b4270ca3074413b5821b530e8d6f29b 100644 (file)
@@ -437,7 +437,7 @@ static int firebird_bind_blob(pdo_stmt_t *stmt, ISC_QUAD *blob_id, zval *param T
                put_cnt += chunk_size;
        }
        
-       zval_ptr_dtor(param);
+       zval_dtor(param);
 
        if (isc_close_blob(H->isc_status, &h)) {
                RECORD_ERROR(stmt);
@@ -521,6 +521,19 @@ static int firebird_stmt_param_hook(pdo_stmt_t *stmt, struct pdo_bound_param_dat
                        } else {
                                parameter = &param->parameter;
                        }
+                       
+                       if (Z_TYPE_P(parameter) == IS_RESOURCE) {
+                               php_stream *stm;
+
+                               php_stream_from_zval_no_verify(stm, parameter);
+                               if (stm) {
+                                       zval_ptr_dtor(parameter);
+                                       ZVAL_STR(parameter, php_stream_copy_to_mem(stm, PHP_STREAM_COPY_ALL, 0));
+                               } else {
+                                       pdo_raise_impl_error(stmt->dbh, stmt, "HY105", "Expected a stream resource" TSRMLS_CC);
+                                       return 0;
+                               }
+                       }
 
                        switch (var->sqltype & ~1) {
                                case SQL_ARRAY:
@@ -601,6 +614,8 @@ static int firebird_stmt_param_hook(pdo_stmt_t *stmt, struct pdo_bound_param_dat
                        } else {
                                parameter = &param->parameter;
                        }
+                       zval_ptr_dtor(parameter);
+                       ZVAL_NULL(parameter);
                        
                        if (firebird_stmt_get_col(stmt, param->paramno, &value, &value_len, &caller_frees TSRMLS_CC)) {
                                switch (PDO_PARAM_TYPE(param->param_type)) {