1--TEST--
2PDO_DBLIB: driver supports exceptions
3--SKIPIF--
4<?php
5if (!extension_loaded('pdo_dblib')) die('skip not loaded');
6require __DIR__ . '/config.inc';
7
8if (!driver_supports_batch_statements_without_select($db)) die('xfail test will fail with this version of FreeTDS');
9?>
10--FILE--
11<?php
12require __DIR__ . '/config.inc';
13
14$stmt = $db->query(
15"create table #php_pdo(id int);" .
16"insert into #php_pdo values(1), (2), (3);" .
17"select * from #php_pdo;" .
18"begin try " .
19"  update #php_pdo set id = 'f';" .
20"end try " .
21"begin catch " .
22"  throw;" .
23"end catch " .
24"select * from #php_pdo;" .
25"delete from #php_pdo;" .
26"drop table #php_pdo;"
27);
28
29// check results from the create table
30var_dump($stmt->rowCount());
31var_dump($stmt->nextRowset());
32
33// check results from the first insert
34var_dump($stmt->rowCount());
35var_dump($stmt->nextRowset());
36
37// check results from the select
38var_dump($stmt->rowCount());
39var_dump($stmt->nextRowset());
40
41// check results from try
42var_dump($stmt->rowCount());
43var_dump($stmt->nextRowset());
44
45// check results from the update
46var_dump($stmt->rowCount());
47var_dump($stmt->nextRowset());
48
49// check that the update statement throws an error
50try {
51  var_dump($stmt->rowCount());
52  var_dump($stmt->nextRowset());
53} catch (PDOException $e) {
54  var_dump($e->getMessage());
55}
56
57// once an error is thrown, the batch is terminated.
58// there should no results from here on
59// check results from the select
60var_dump($stmt->fetchAll());
61var_dump($stmt->rowCount());
62var_dump($stmt->nextRowset());
63
64// check results from the delete
65var_dump($stmt->rowCount());
66var_dump($stmt->nextRowset());
67
68// check results from the drop
69var_dump($stmt->rowCount());
70var_dump($stmt->nextRowset());
71
72// check that there are no more results
73var_dump($stmt->rowCount());
74var_dump($stmt->nextRowset());
75
76?>
77--EXPECT--
78int(-1)
79bool(true)
80int(3)
81bool(true)
82int(-1)
83bool(true)
84int(-1)
85bool(true)
86int(0)
87bool(true)
88int(-1)
89string(68) "SQLSTATE[HY000]: General error: PDO_DBLIB: dbresults() returned FAIL"
90array(0) {
91}
92int(-1)
93bool(false)
94int(-1)
95bool(false)
96int(-1)
97bool(false)
98int(-1)
99bool(false)
100