From 15948a7b4be6c39a35317014e5d7ea335d7825ba Mon Sep 17 00:00:00 2001 From: v-kaywon Date: Fri, 31 Mar 2017 15:17:12 -0700 Subject: [PATCH 01/40] increase coverage for pdo connection options --- source/pdo_sqlsrv/php_pdo_sqlsrv.h | 10 ++--- .../pdo_construct_TransactionIsolation.phpt | 35 ++++++++++++++++ .../pdo_construct_conn_options.phpt | 42 +++++++++++++++++++ 3 files changed, 82 insertions(+), 5 deletions(-) create mode 100644 test/pdo_sqlsrv/pdo_construct_TransactionIsolation.phpt create mode 100644 test/pdo_sqlsrv/pdo_construct_conn_options.phpt diff --git a/source/pdo_sqlsrv/php_pdo_sqlsrv.h b/source/pdo_sqlsrv/php_pdo_sqlsrv.h index 78aec643..853fd732 100644 --- a/source/pdo_sqlsrv/php_pdo_sqlsrv.h +++ b/source/pdo_sqlsrv/php_pdo_sqlsrv.h @@ -53,11 +53,11 @@ enum PDO_SQLSRV_ATTR { // valid set of values for TransactionIsolation connection option namespace PDOTxnIsolationValues { - const char READ_UNCOMMITTED[] = "READ_UNCOMMITTED"; - const char READ_COMMITTED[] = "READ_COMMITTED"; - const char REPEATABLE_READ[] = "REPEATABLE_READ"; - const char SERIALIZABLE[] = "SERIALIZABLE"; - const char SNAPSHOT[] = "SNAPSHOT"; + const char READ_UNCOMMITTED[] = "PDO::SQLSRV_TXN_READ_UNCOMMITTED"; + const char READ_COMMITTED[] = "PDO::SQLSRV_TXN_READ_COMMITTED"; + const char REPEATABLE_READ[] = "PDO::SQLSRV_TXN_REPEATABLE_READ"; + const char SERIALIZABLE[] = "PDO::SQLSRV_TXN_SERIALIZABLE"; + const char SNAPSHOT[] = "PDO::SQLSRV_TXN_SNAPSHOT"; } //********************************************************************************************************************************* diff --git a/test/pdo_sqlsrv/pdo_construct_TransactionIsolation.phpt b/test/pdo_sqlsrv/pdo_construct_TransactionIsolation.phpt new file mode 100644 index 00000000..780234b8 --- /dev/null +++ b/test/pdo_sqlsrv/pdo_construct_TransactionIsolation.phpt @@ -0,0 +1,35 @@ +--TEST-- +Test PDO::__Construct connection option TransactionIsolation +--SKIPIF-- + +--FILE-- + + +--EXPECT-- + +Test Successful \ No newline at end of file diff --git a/test/pdo_sqlsrv/pdo_construct_conn_options.phpt b/test/pdo_sqlsrv/pdo_construct_conn_options.phpt new file mode 100644 index 00000000..1b89a3c9 --- /dev/null +++ b/test/pdo_sqlsrv/pdo_construct_conn_options.phpt @@ -0,0 +1,42 @@ +--TEST-- +Test PDO::__Construct by passing connection options +--SKIPIF-- + +--FILE-- + + +--EXPECT-- + +Test Successful \ No newline at end of file From e58e61b7fcd8d633f4f86c1e72c77fde20ef6130 Mon Sep 17 00:00:00 2001 From: v-kaywon Date: Fri, 31 Mar 2017 15:28:54 -0700 Subject: [PATCH 02/40] changed transactionIsolation test --- source/pdo_sqlsrv/php_pdo_sqlsrv.h | 10 +++++----- .../pdo_sqlsrv/pdo_construct_TransactionIsolation.phpt | 10 +++++----- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/source/pdo_sqlsrv/php_pdo_sqlsrv.h b/source/pdo_sqlsrv/php_pdo_sqlsrv.h index 853fd732..78aec643 100644 --- a/source/pdo_sqlsrv/php_pdo_sqlsrv.h +++ b/source/pdo_sqlsrv/php_pdo_sqlsrv.h @@ -53,11 +53,11 @@ enum PDO_SQLSRV_ATTR { // valid set of values for TransactionIsolation connection option namespace PDOTxnIsolationValues { - const char READ_UNCOMMITTED[] = "PDO::SQLSRV_TXN_READ_UNCOMMITTED"; - const char READ_COMMITTED[] = "PDO::SQLSRV_TXN_READ_COMMITTED"; - const char REPEATABLE_READ[] = "PDO::SQLSRV_TXN_REPEATABLE_READ"; - const char SERIALIZABLE[] = "PDO::SQLSRV_TXN_SERIALIZABLE"; - const char SNAPSHOT[] = "PDO::SQLSRV_TXN_SNAPSHOT"; + const char READ_UNCOMMITTED[] = "READ_UNCOMMITTED"; + const char READ_COMMITTED[] = "READ_COMMITTED"; + const char REPEATABLE_READ[] = "REPEATABLE_READ"; + const char SERIALIZABLE[] = "SERIALIZABLE"; + const char SNAPSHOT[] = "SNAPSHOT"; } //********************************************************************************************************************************* diff --git a/test/pdo_sqlsrv/pdo_construct_TransactionIsolation.phpt b/test/pdo_sqlsrv/pdo_construct_TransactionIsolation.phpt index 780234b8..24eb86d2 100644 --- a/test/pdo_sqlsrv/pdo_construct_TransactionIsolation.phpt +++ b/test/pdo_sqlsrv/pdo_construct_TransactionIsolation.phpt @@ -16,11 +16,11 @@ function Connect($value) { // TEST BEGIN try { -Connect("PDO::SQLSRV_TXN_READ_UNCOMMITTED"); -Connect("PDO::SQLSRV_TXN_READ_COMMITTED"); -Connect("PDO::SQLSRV_TXN_REPEATABLE_READ"); -Connect("PDO::SQLSRV_TXN_SNAPSHOT"); -Connect("PDO::SQLSRV_TXN_SERIALIZABLE"); +Connect("READ_UNCOMMITTED"); +Connect("READ_COMMITTED"); +Connect("REPEATABLE_READ"); +Connect("SNAPSHOT"); +Connect("SERIALIZABLE"); echo "Test Successful"; } From 523b7e5ccc7873068ff279b570959b72efb8eea7 Mon Sep 17 00:00:00 2001 From: v-kaywon Date: Fri, 31 Mar 2017 16:49:40 -0700 Subject: [PATCH 03/40] more tests --- test/pdo_sqlsrv/pdo_construct_attr.phpt | 47 +++++++++++++++++++++++++ 1 file changed, 47 insertions(+) create mode 100644 test/pdo_sqlsrv/pdo_construct_attr.phpt diff --git a/test/pdo_sqlsrv/pdo_construct_attr.phpt b/test/pdo_sqlsrv/pdo_construct_attr.phpt new file mode 100644 index 00000000..4b248412 --- /dev/null +++ b/test/pdo_sqlsrv/pdo_construct_attr.phpt @@ -0,0 +1,47 @@ +--TEST-- +Test PDO::__Construct by passing connection options +--SKIPIF-- + +--FILE-- + 3, + PDO::ATTR_CASE => 2, + PDO::ATTR_PREFETCH => false, + PDO::ATTR_TIMEOUT => 35, + PDO::ATTR_STRINGIFY_FETCHES => true, + PDO::SQLSRV_ATTR_DIRECT_QUERY => true, + PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC, + PDO::ATTR_ORACLE_NULLS => PDO::NULL_NATURAL, + PDO::SQLSRV_ATTR_CLIENT_BUFFER_MAX_KB_SIZE => -1, + PDO::SQLSRV_ATTR_DIRECT_QUERY => true + ); + + $database = "tempdb"; + $dsn = "sqlsrv:Server = $serverName; Database = $database"; + + $conn = new PDO( $dsn, $username, $password, $attr); + + $stmt = $conn->prepare("SELECT 1"); + $stmt->execute(); + + $stmt = NULL; + $conn = NULL; + + + echo "Test Successful"; +} +catch( PDOException $e ) { + var_dump( $e ); + exit; +} +?> + +--EXPECT-- + +Test Successful \ No newline at end of file From c8188e41b0439b467550e1ef5ef973c600391c51 Mon Sep 17 00:00:00 2001 From: v-kaywon Date: Fri, 31 Mar 2017 17:09:40 -0700 Subject: [PATCH 04/40] added pdo commit and rolled back tests --- test/pdo_sqlsrv/pdo_commit.phpt | 31 +++++++++++++++++++++++++++ test/pdo_sqlsrv/pdo_rollback.phpt | 35 +++++++++++++++++++++++++++++++ 2 files changed, 66 insertions(+) create mode 100644 test/pdo_sqlsrv/pdo_commit.phpt create mode 100644 test/pdo_sqlsrv/pdo_rollback.phpt diff --git a/test/pdo_sqlsrv/pdo_commit.phpt b/test/pdo_sqlsrv/pdo_commit.phpt new file mode 100644 index 00000000..ff6186fd --- /dev/null +++ b/test/pdo_sqlsrv/pdo_commit.phpt @@ -0,0 +1,31 @@ +--TEST-- +starts a transaction, insert 2 rows and commit the transaction +--SKIPIF-- + +--FILE-- +exec("IF OBJECT_ID('Table1', 'U') IS NOT NULL DROP TABLE Table1"); + $conn->exec("CREATE TABLE Table1(col1 CHARACTER(1), col2 CHARACTER(1)) "); + + $conn->beginTransaction(); + $ret = $conn->exec("insert into Table1(col1, col2) values('a', 'b') "); + $ret = $conn->exec("insert into Table1(col1, col2) values('a', 'c') "); + + //revert the inserts + $ret = $conn->exec("delete from Table1 where col1 = 'a'"); + $conn->commit(); + echo $ret." rows affected\n"; + + //drop the created temp table + $conn->exec("DROP TABLE Table1 "); + + //free statement and connection + $ret=NULL; + $conn=NULL; +?> +--EXPECT-- +2 rows affected \ No newline at end of file diff --git a/test/pdo_sqlsrv/pdo_rollback.phpt b/test/pdo_sqlsrv/pdo_rollback.phpt new file mode 100644 index 00000000..bd7adf96 --- /dev/null +++ b/test/pdo_sqlsrv/pdo_rollback.phpt @@ -0,0 +1,35 @@ +--TEST-- +starts a transaction, insert 2 rows and commit the transaction +--SKIPIF-- + +--FILE-- +exec("IF OBJECT_ID('Table1', 'U') IS NOT NULL DROP TABLE Table1"); + $conn->exec("CREATE TABLE Table1(col1 CHARACTER(1), col2 CHARACTER(1)) "); + + $conn->beginTransaction(); + $ret = $conn->exec("insert into Table1(col1, col2) values('a', 'b') "); + $ret = $conn->exec("insert into Table1(col1, col2) values('a', 'c') "); + + //revert the inserts + $ret = $conn->exec("delete from Table1 where col1 = 'a'"); + $conn->rollback(); + $stmt = $conn->query("SELECT * FROM Table1"); + if ( count( $stmt->fetchAll() ) == 0 ) + echo "Transaction rolled back successfully\n"; + else + echo "Transaction failed to roll back\n"; + + //drop the created temp table + $conn->exec("DROP TABLE Table1 "); + + //free statement and connection + $ret=NULL; + $conn=NULL; +?> +--EXPECT-- +Transaction rolled back successfully \ No newline at end of file From ff2b9106b1a7432042e74291cb00807bd736907e Mon Sep 17 00:00:00 2001 From: v-kaywon Date: Fri, 31 Mar 2017 17:36:26 -0700 Subject: [PATCH 05/40] added test for get and set connection attribute --- test/pdo_sqlsrv/pdo_get_set_attr.phpt | 225 ++++++++++++++++++++++++++ 1 file changed, 225 insertions(+) create mode 100644 test/pdo_sqlsrv/pdo_get_set_attr.phpt diff --git a/test/pdo_sqlsrv/pdo_get_set_attr.phpt b/test/pdo_sqlsrv/pdo_get_set_attr.phpt new file mode 100644 index 00000000..eb34ac71 --- /dev/null +++ b/test/pdo_sqlsrv/pdo_get_set_attr.phpt @@ -0,0 +1,225 @@ +--TEST-- +Test PDO::setAttribute() and PDO::getAttribute() methods. +--SKIPIF-- + +--FILE-- +getAttribute( constant($attr) ); + var_dump( $result); + } + catch ( PDOException $e) + { + echo $e->getMessage() . "\n"; + } + } + + function set_attr( $conn, $attr, $val ) + { + try { + + echo "Set Result $attr :\n"; + $result = $conn->setAttribute( constant($attr), $val ); + var_dump( $result); + } + catch ( PDOException $e) + { + echo $e->getMessage() . "\n"; + } + } + +function set_get_attr($testName, $conn, $attr, $val) +{ + try { + + echo "\n". $testName . ":\n"; + set_attr($conn, $attr, $val ); + get_attr($conn, $attr ); + } + catch(PDOException $e) + { + var_dump($e); + } +} + +try +{ + $database = "tempdb"; + $conn = new PDO("sqlsrv:Server=$serverName;Database=$database", $username, $password); + $values = array ( + "PDO::ATTR_ERRMODE" => 2, + "PDO::ATTR_SERVER_VERSION" => "whatever", + "PDO::ATTR_DRIVER_NAME" => "whatever", + "PDO::ATTR_STRINGIFY_FETCHES" => true, + "PDO::ATTR_CLIENT_VERSION" => "whatever", + "PDO::ATTR_SERVER_INFO" => "whatever", + "PDO::ATTR_CASE" => 2, + "PDO::SQLSRV_ATTR_ENCODING" => 3, + "PDO::ATTR_DEFAULT_FETCH_MODE" => PDO::FETCH_ASSOC, + "PDO::ATTR_ORACLE_NULLS" => PDO::NULL_NATURAL, + "PDO::SQLSRV_ATTR_CLIENT_BUFFER_MAX_KB_SIZE" => 5120, + "PDO::SQLSRV_ATTR_DIRECT_QUERY" => true, + "PDO::ATTR_STATEMENT_CLASS" => array('CustomPDOStatement', array()), + "PDO::SQLSRV_ATTR_QUERY_TIMEOUT" => 10, + "PDO::SQLSRV_ATTR_FETCHES_NUMERIC_TYPE" => false + ); + + $attributes = array ( + "PDO::ATTR_ERRMODE", + "PDO::ATTR_SERVER_VERSION", + "PDO::ATTR_DRIVER_NAME", + "PDO::ATTR_STRINGIFY_FETCHES", + "PDO::ATTR_CLIENT_VERSION", + "PDO::ATTR_SERVER_INFO", + "PDO::ATTR_CASE", + "PDO::SQLSRV_ATTR_ENCODING", + "PDO::ATTR_DEFAULT_FETCH_MODE", + "PDO::ATTR_ORACLE_NULLS", + "PDO::SQLSRV_ATTR_CLIENT_BUFFER_MAX_KB_SIZE", + "PDO::SQLSRV_ATTR_DIRECT_QUERY", + "PDO::ATTR_STATEMENT_CLASS", + "PDO::SQLSRV_ATTR_QUERY_TIMEOUT", + "PDO::SQLSRV_ATTR_FETCHES_NUMERIC_TYPE" + ); + $i = 1; + foreach( $attributes as $attr ) + { + $testName = "Test_". $i; + $i = $i + 1; + set_get_attr($testName, $conn, $attr, $values[$attr]); + } +} + +catch( PDOException $e ) { + + var_dump( $e ); + exit; +} +?> + +--EXPECTREGEX-- + +Test_1: +Set Result PDO::ATTR_ERRMODE : +bool\(true\) +Get Result PDO::ATTR_ERRMODE : +int\(2\) + +Test_2: +Set Result PDO::ATTR_SERVER_VERSION : +SQLSTATE\[IMSSP\]: A read-only attribute was designated on the PDO object. +Get Result PDO::ATTR_SERVER_VERSION : +string\([0-9]*\) "[0-9]{2}.[0-9]{2}.[0-9]{4}" + +Test_3: +Set Result PDO::ATTR_DRIVER_NAME : +SQLSTATE\[IMSSP\]: A read-only attribute was designated on the PDO object. +Get Result PDO::ATTR_DRIVER_NAME : +string\(6\) "sqlsrv" + +Test_4: +Set Result PDO::ATTR_STRINGIFY_FETCHES : +bool\(true\) +Get Result PDO::ATTR_STRINGIFY_FETCHES : +bool\(true\) + +Test_5: +Set Result PDO::ATTR_CLIENT_VERSION : +SQLSTATE\[IMSSP\]: A read-only attribute was designated on the PDO object. +Get Result PDO::ATTR_CLIENT_VERSION : +array\(4\) { + \[\"(DriverDllName|DriverName)\"\]=> + string\(15\) \"msodbcsql[0-9]{2}\.dll|string\(24\) \"libmsodbcsql-[0-9]{2}\.[0-9]\.so\.[0-9]\.[0-9]\" + \["DriverODBCVer"\]=> + string\(5\) \"[0-9]{1,2}\.[0-9]{1,2}\" + \["DriverVer"\]=> + string\(10\) "[0-9]{2}.[0-9]{2}.[0-9]{4}" + \["ExtensionVer"\]=> + string\([0-9]*\) \"[0-9]\.[0-9]\.[0-9](\-((rc)|(preview))(\.[0-9]+)?)?(\+[0-9]+)?\" +} + +Test_6: +Set Result PDO::ATTR_SERVER_INFO : +SQLSTATE\[IMSSP\]: A read-only attribute was designated on the PDO object. +Get Result PDO::ATTR_SERVER_INFO : +array\(3\) { + \["CurrentDatabase"\]=> + string\([0-9]*\) ".*" + \["SQLServerVersion"\]=> + string\(10\) "[0-9]{2}.[0-9]{2}.[0-9]{4}" + \["SQLServerName"\]=> + string\([0-9]*\) ".*" +} + +Test_7: +Set Result PDO::ATTR_CASE : +bool\(true\) +Get Result PDO::ATTR_CASE : +int\(2\) + +Test_8: +Set Result PDO::SQLSRV_ATTR_ENCODING : +bool\(true\) +Get Result PDO::SQLSRV_ATTR_ENCODING : +int\(3\) + +Test_9: +Set Result PDO::ATTR_DEFAULT_FETCH_MODE : +bool\(true\) +Get Result PDO::ATTR_DEFAULT_FETCH_MODE : +int\(2\) + +Test_10: +Set Result PDO::ATTR_ORACLE_NULLS : +bool\(true\) +Get Result PDO::ATTR_ORACLE_NULLS : +int\(0\) + +Test_11: +Set Result PDO::SQLSRV_ATTR_CLIENT_BUFFER_MAX_KB_SIZE : +bool\(true\) +Get Result PDO::SQLSRV_ATTR_CLIENT_BUFFER_MAX_KB_SIZE : +int\(5120\) + +Test_12: +Set Result PDO::SQLSRV_ATTR_DIRECT_QUERY : +bool\(true\) +Get Result PDO::SQLSRV_ATTR_DIRECT_QUERY : +bool\(true\) + +Test_13: +Set Result PDO::ATTR_STATEMENT_CLASS : +bool\(true\) +Get Result PDO::ATTR_STATEMENT_CLASS : +array\(2\) { + \[0\]=> + string\(18\) "CustomPDOStatement" + \[1\]=> + array\(0\) { + } +} + +Test_14: +Set Result PDO::SQLSRV_ATTR_QUERY_TIMEOUT : +bool(true) +Get Result PDO::SQLSRV_ATTR_QUERY_TIMEOUT : +int(10) + +Test_15: +Set Result PDO::SQLSRV_ATTR_FETCHES_NUMERIC_TYPE : +bool(true) +Get Result PDO::SQLSRV_ATTR_FETCHES_NUMERIC_TYPE : +bool(false) \ No newline at end of file From 6a9b91081115873a612e99c6863a22240a706a8c Mon Sep 17 00:00:00 2001 From: v-kaywon Date: Mon, 3 Apr 2017 09:30:41 -0700 Subject: [PATCH 06/40] fixed pdo_get_set_attr.phpt reges expected output --- test/pdo_sqlsrv/pdo_get_set_attr.phpt | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/test/pdo_sqlsrv/pdo_get_set_attr.phpt b/test/pdo_sqlsrv/pdo_get_set_attr.phpt index eb34ac71..2f54d650 100644 --- a/test/pdo_sqlsrv/pdo_get_set_attr.phpt +++ b/test/pdo_sqlsrv/pdo_get_set_attr.phpt @@ -214,12 +214,12 @@ array\(2\) { Test_14: Set Result PDO::SQLSRV_ATTR_QUERY_TIMEOUT : -bool(true) +bool\(true\) Get Result PDO::SQLSRV_ATTR_QUERY_TIMEOUT : -int(10) +int\(10\) Test_15: Set Result PDO::SQLSRV_ATTR_FETCHES_NUMERIC_TYPE : -bool(true) +bool\(true\) Get Result PDO::SQLSRV_ATTR_FETCHES_NUMERIC_TYPE : -bool(false) \ No newline at end of file +bool\(false\) \ No newline at end of file From ca855dc857501597deef3d48c8c9c936afb07c25 Mon Sep 17 00:00:00 2001 From: v-kaywon Date: Mon, 3 Apr 2017 10:02:26 -0700 Subject: [PATCH 07/40] added test for lastinsertid --- test/pdo_sqlsrv/pdo_lastInsertId.phpt | 58 +++++++++++++++++++++++++++ 1 file changed, 58 insertions(+) create mode 100644 test/pdo_sqlsrv/pdo_lastInsertId.phpt diff --git a/test/pdo_sqlsrv/pdo_lastInsertId.phpt b/test/pdo_sqlsrv/pdo_lastInsertId.phpt new file mode 100644 index 00000000..9c55b21f --- /dev/null +++ b/test/pdo_sqlsrv/pdo_lastInsertId.phpt @@ -0,0 +1,58 @@ +--TEST-- +Test the PDO::lastInsertId() method. +--SKIPIF-- +--FILE-- +exec("IF OBJECT_ID('tmp_table1', 'U') IS NOT NULL DROP TABLE [tmp_table1]"); + $conn->exec("IF OBJECT_ID('tmp_table2', 'U') IS NOT NULL DROP TABLE [tmp_table2]"); + $conn->exec("IF OBJECT_ID('tmp_table3', 'U') IS NOT NULL DROP TABLE [tmp_table3]"); + $conn->exec('CREATE TABLE tmp_table1(id INT IDENTITY(100,2), val INT)'); + $conn->exec('CREATE TABLE tmp_table2(id INT IDENTITY(200,2), val INT)'); + $conn->exec('CREATE TABLE tmp_table3(id INT, val INT)'); + + $conn->exec('INSERT INTO tmp_table1 VALUES(1)'); + $conn->exec('INSERT INTO tmp_table2 VALUES(2)'); + $id = $conn->lastInsertId(); + var_dump($id); + $id = $conn->lastInsertId('tmp_table1'); + var_dump($id); + + $conn->exec('INSERT INTO tmp_table2 VALUES(3)'); + $conn->exec('INSERT INTO tmp_table1 VALUES(4)'); + $id = $conn->lastInsertId(); + var_dump($id); + $id = $conn->lastInsertId('tmp_table2'); + var_dump($id); + + // Should return empty string as the table does not have an IDENTITY column. + $conn->exec('INSERT INTO tmp_table3 VALUES(1,1)'); + $id = $conn->lastInsertId(); + var_dump($id); + + // clean up + $conn->exec('DROP TABLE tmp_table1'); + $conn->exec('DROP TABLE tmp_table2'); + $conn->exec('DROP TABLE tmp_table3'); +} + +catch( PDOException $e ) { + var_dump( $e ); + exit; +} + + +?> +--EXPECT-- +string(3) "200" +string(3) "100" +string(3) "102" +string(3) "202" +string(0) "" From 3fc7d812058de663fb5c69f5c1910884bc9a2269 Mon Sep 17 00:00:00 2001 From: v-kaywon Date: Mon, 3 Apr 2017 13:31:09 -0700 Subject: [PATCH 08/40] fixed pdo_construct_Transaction.phpt --- test/pdo_sqlsrv/pdo_construct_TransactionIsolation.phpt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/pdo_sqlsrv/pdo_construct_TransactionIsolation.phpt b/test/pdo_sqlsrv/pdo_construct_TransactionIsolation.phpt index 24eb86d2..bd327782 100644 --- a/test/pdo_sqlsrv/pdo_construct_TransactionIsolation.phpt +++ b/test/pdo_sqlsrv/pdo_construct_TransactionIsolation.phpt @@ -8,7 +8,7 @@ function Connect($value) { require("autonomous_setup.php"); $database = "tempdb"; $dsn = "sqlsrv:Server = $serverName;" . - "Database = $database" ;//. + "Database = $database;" . "TransactionIsolation = $value"; $conn = new PDO( $dsn, $username, $password ); $conn = NULL; From 6dbc588bc7070217081e7ceaee39fdad64eb8617 Mon Sep 17 00:00:00 2001 From: v-kaywon Date: Mon, 3 Apr 2017 14:01:30 -0700 Subject: [PATCH 09/40] add test for invalid connection option --- test/pdo_sqlsrv/pdo_invalide_conn_opt.phpt | 37 ++++++++++++++++++++++ 1 file changed, 37 insertions(+) create mode 100644 test/pdo_sqlsrv/pdo_invalide_conn_opt.phpt diff --git a/test/pdo_sqlsrv/pdo_invalide_conn_opt.phpt b/test/pdo_sqlsrv/pdo_invalide_conn_opt.phpt new file mode 100644 index 00000000..11452e1a --- /dev/null +++ b/test/pdo_sqlsrv/pdo_invalide_conn_opt.phpt @@ -0,0 +1,37 @@ +--TEST-- +Test PDO::__Construct by passing connection options +--SKIPIF-- + +--FILE-- +errorInfo ); + exit; +} +?> + +--EXPECT-- + +array(3) { + [0]=> + string(5) "IMSSP" + [1]=> + int(-42) + [2]=> + string(64) "An invalid keyword 'InvalidKey' was specified in the DSN string." +} \ No newline at end of file From 2c9a4b67d81666dff58920f5364cee45c6227cad Mon Sep 17 00:00:00 2001 From: v-kaywon Date: Mon, 3 Apr 2017 14:42:53 -0700 Subject: [PATCH 10/40] added tests for invalid connection option and invalid transaction isolation value --- ...ct_TransactionIsolation_invalid_value.phpt | 37 +++++++++++++++++++ ...onn_opt.phpt => pdo_invalid_conn_opt.phpt} | 3 +- 2 files changed, 38 insertions(+), 2 deletions(-) create mode 100644 test/pdo_sqlsrv/pdo_construct_TransactionIsolation_invalid_value.phpt rename test/pdo_sqlsrv/{pdo_invalide_conn_opt.phpt => pdo_invalid_conn_opt.phpt} (89%) diff --git a/test/pdo_sqlsrv/pdo_construct_TransactionIsolation_invalid_value.phpt b/test/pdo_sqlsrv/pdo_construct_TransactionIsolation_invalid_value.phpt new file mode 100644 index 00000000..0b9687fc --- /dev/null +++ b/test/pdo_sqlsrv/pdo_construct_TransactionIsolation_invalid_value.phpt @@ -0,0 +1,37 @@ +--TEST-- +Test PDO::__Construct connection option TransactionIsolation with invalid value +--SKIPIF-- + +--FILE-- +errorInfo ); +} +?> + +--EXPECT-- + +array(3) { + [0]=> + string(5) "IMSSP" + [1]=> + int(-63) + [2]=> + string(88) "An invalid value was specified for the keyword 'TransactionIsolation' in the DSN string." +} \ No newline at end of file diff --git a/test/pdo_sqlsrv/pdo_invalide_conn_opt.phpt b/test/pdo_sqlsrv/pdo_invalid_conn_opt.phpt similarity index 89% rename from test/pdo_sqlsrv/pdo_invalide_conn_opt.phpt rename to test/pdo_sqlsrv/pdo_invalid_conn_opt.phpt index 11452e1a..a5d5ecc7 100644 --- a/test/pdo_sqlsrv/pdo_invalide_conn_opt.phpt +++ b/test/pdo_sqlsrv/pdo_invalid_conn_opt.phpt @@ -1,5 +1,5 @@ --TEST-- -Test PDO::__Construct by passing connection options +Test PDO::__Construct with invalid connection option --SKIPIF-- --FILE-- @@ -21,7 +21,6 @@ try } catch( PDOException $e ) { var_dump( $e->errorInfo ); - exit; } ?> From 95e5fdd0550a242116d0b437865c2e955248161c Mon Sep 17 00:00:00 2001 From: v-kaywon Date: Mon, 3 Apr 2017 15:42:41 -0700 Subject: [PATCH 11/40] added tests for prepare options and invalid option --- .../pdo_prepare_invalid_option_key.phpt | 36 ++++++++++++++++ test/pdo_sqlsrv/pdo_prepare_options.phpt | 42 +++++++++++++++++++ 2 files changed, 78 insertions(+) create mode 100644 test/pdo_sqlsrv/pdo_prepare_invalid_option_key.phpt create mode 100644 test/pdo_sqlsrv/pdo_prepare_options.phpt diff --git a/test/pdo_sqlsrv/pdo_prepare_invalid_option_key.phpt b/test/pdo_sqlsrv/pdo_prepare_invalid_option_key.phpt new file mode 100644 index 00000000..e9f824e7 --- /dev/null +++ b/test/pdo_sqlsrv/pdo_prepare_invalid_option_key.phpt @@ -0,0 +1,36 @@ +--TEST-- +Test PDO::prepare by passing in a string key +--SKIPIF-- + +--FILE-- + PDO::ERRMODE_EXCEPTION); + $conn = new PDO( $dsn, $username, $password, $attr); + + $stmt = $conn->prepare( "SELECT 1", array( "PDO::ATTR_CURSOR" => PDO::CURSOR_FWDONLY )); + + + echo "Test Successful"; +} +catch( PDOException $e ) { + var_dump( $e->errorInfo ); +} +?> + +--EXPECT-- + +array(3) { + [0]=> + string(5) "IMSSP" + [1]=> + int(-43) + [2]=> + string(42) "An invalid statement option was specified." +} \ No newline at end of file diff --git a/test/pdo_sqlsrv/pdo_prepare_options.phpt b/test/pdo_sqlsrv/pdo_prepare_options.phpt new file mode 100644 index 00000000..56a69125 --- /dev/null +++ b/test/pdo_sqlsrv/pdo_prepare_options.phpt @@ -0,0 +1,42 @@ +--TEST-- +Test PDO::prepare by passing in attributes +--SKIPIF-- + +--FILE-- + PDO::SQLSRV_ENCODING_UTF8, + PDO::ATTR_STATEMENT_CLASS => array('CustomPDOStatement', array()), + PDO::SQLSRV_ATTR_DIRECT_QUERY => true, + PDO::ATTR_EMULATE_PREPARES => false, + PDO::SQLSRV_ATTR_FETCHES_NUMERIC_TYPE => true + ); + $conn = new PDO( $dsn, $username, $password); + + $stmt = $conn->prepare( "SELECT 1", $prep_attr ); + + + echo "Test Successful"; +} +catch( PDOException $e ) { + var_dump( $e->errorInfo ); + exit; +} +?> + +--EXPECT-- + +Test Successful \ No newline at end of file From a2f16cb5752603e5b6b2df8a67f62c948777578e Mon Sep 17 00:00:00 2001 From: v-kaywon Date: Mon, 3 Apr 2017 17:00:23 -0700 Subject: [PATCH 12/40] add test for getting invalid connection attributes --- test/pdo_sqlsrv/pdo_get_attr_invalid.phpt | 38 +++++++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100644 test/pdo_sqlsrv/pdo_get_attr_invalid.phpt diff --git a/test/pdo_sqlsrv/pdo_get_attr_invalid.phpt b/test/pdo_sqlsrv/pdo_get_attr_invalid.phpt new file mode 100644 index 00000000..99701aa1 --- /dev/null +++ b/test/pdo_sqlsrv/pdo_get_attr_invalid.phpt @@ -0,0 +1,38 @@ +--TEST-- +Test getting invalid attributes +--SKIPIF-- + +--FILE-- + PDO::ERRMODE_SILENT)); + +@$conn->getAttribute( PDO::ATTR_FETCH_TABLE_NAMES ); +print_r (($conn->errorInfo())[2]); +echo "\n"; + +@$conn->getAttribute( PDO::ATTR_CURSOR ); +print_r (($conn->errorInfo())[2]); +echo "\n"; + +@$conn->getAttribute( PDO::ATTR_CONNECTION_STATUS ); +print_r (($conn->errorInfo())[2]); +echo "\n"; +} +catch ( PDOException $e ){ + exit; +} + +?> + +--EXPECT-- + +An unsupported attribute was designated on the PDO object. +The given attribute is only supported on the PDOStatement object. +An invalid attribute was designated on the PDO object. \ No newline at end of file From fe0f48151ba587969edecb8c71ef9f3df1124022 Mon Sep 17 00:00:00 2001 From: v-kaywon Date: Mon, 3 Apr 2017 17:17:32 -0700 Subject: [PATCH 13/40] added test for setting invalid encoding attributes --- .../pdo_set_attr_invalid_encoding.phpt | 40 +++++++++++++++++++ 1 file changed, 40 insertions(+) create mode 100644 test/pdo_sqlsrv/pdo_set_attr_invalid_encoding.phpt diff --git a/test/pdo_sqlsrv/pdo_set_attr_invalid_encoding.phpt b/test/pdo_sqlsrv/pdo_set_attr_invalid_encoding.phpt new file mode 100644 index 00000000..f89a620b --- /dev/null +++ b/test/pdo_sqlsrv/pdo_set_attr_invalid_encoding.phpt @@ -0,0 +1,40 @@ +--TEST-- +Test setting invalid encoding attributes +--SKIPIF-- + +--FILE-- + PDO::ERRMODE_SILENT)); + +// valid option: should have no error +@$conn->setAttribute( PDO::SQLSRV_ATTR_ENCODING, PDO::SQLSRV_ENCODING_DEFAULT ); +print_r (($conn->errorInfo())[2]); +echo "\n"; + +// PDO::SQLSRV_ENCODING_UTF8 should not be quoted +@$conn->setAttribute( PDO::SQLSRV_ATTR_ENCODING, "PDO::SQLSRV_ENCODING_UTF8" ); +print_r (($conn->errorInfo())[2]); +echo "\n"; + +// PDO::SQLSRV_ENCODING_BINARY is not supported +@$conn->setAttribute( PDO::SQLSRV_ATTR_ENCODING, PDO::SQLSRV_ENCODING_BINARY ); +print_r (($conn->errorInfo())[2]); +echo "\n"; +} +catch ( PDOException $e ){ + exit; +} + +?> + +--EXPECT-- + +An invalid encoding was specified for SQLSRV_ATTR_ENCODING. +An invalid encoding was specified for SQLSRV_ATTR_ENCODING. \ No newline at end of file From a2740bb95aad1fec6a4ee2dc034ab3a03f535f3c Mon Sep 17 00:00:00 2001 From: v-kaywon Date: Tue, 4 Apr 2017 09:44:27 -0700 Subject: [PATCH 14/40] added test for setting invalid connection attributes --- test/pdo_sqlsrv/pdo_set_attr_invalid.phpt | 34 +++++++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100644 test/pdo_sqlsrv/pdo_set_attr_invalid.phpt diff --git a/test/pdo_sqlsrv/pdo_set_attr_invalid.phpt b/test/pdo_sqlsrv/pdo_set_attr_invalid.phpt new file mode 100644 index 00000000..c559e267 --- /dev/null +++ b/test/pdo_sqlsrv/pdo_set_attr_invalid.phpt @@ -0,0 +1,34 @@ +--TEST-- +Test setting invalid value or key +--SKIPIF-- + +--FILE-- + PDO::ERRMODE_SILENT)); + +// Negative value for query timeout: should raise error +@$conn->setAttribute( PDO::SQLSRV_ATTR_QUERY_TIMEOUT, -1 ); +print_r (($conn->errorInfo())[2]); +echo "\n"; + +// PDO::ATTR_CURSOR is a Statement Level Attribute only +@$conn->setAttribute( PDO::ATTR_CURSOR, PDO::CURSOR_SCROLL ); +print_r (($conn->errorInfo())[2]); +} +catch ( PDOException $e ){ + exit; +} + +?> + +--EXPECT-- + +Invalid value -1 specified for option PDO::SQLSRV_ATTR_QUERY_TIMEOUT. +The given attribute is only supported on the PDOStatement object. \ No newline at end of file From 4ff9aae5854478e7b1c36db0864ef4107dd46b28 Mon Sep 17 00:00:00 2001 From: v-kaywon Date: Tue, 4 Apr 2017 11:42:53 -0700 Subject: [PATCH 15/40] test for direction execution of an invalid query --- test/pdo_sqlsrv/pdo_exec_invalid_query.phpt | 26 +++++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100644 test/pdo_sqlsrv/pdo_exec_invalid_query.phpt diff --git a/test/pdo_sqlsrv/pdo_exec_invalid_query.phpt b/test/pdo_sqlsrv/pdo_exec_invalid_query.phpt new file mode 100644 index 00000000..5b81cf8f --- /dev/null +++ b/test/pdo_sqlsrv/pdo_exec_invalid_query.phpt @@ -0,0 +1,26 @@ +--TEST-- +direct execution of an invalid query +--SKIPIF-- + +--FILE-- +exec("IF OBJECT_ID('table1', 'U') IS NOT NULL DROP TABLE table1"); + + // execute a query with typo + $conn->exec("CRETE TABLE tmp_table(id INT NOT NULL PRIMARY KEY, val VARCHAR(10)) "); + print_r( $conn->errorCode() ); + echo "\n"; + + // execute a properly formatted query + $conn->exec("CREATE TABLE table1(id INT NOT NULL PRIMARY KEY, val VARCHAR(10)) "); + print_r( $conn->errorCode() ); + echo "\n"; + +?> +--EXPECT-- +42000 +00000 \ No newline at end of file From 65c79ef3446d785c1246beee4280af2904ee3835 Mon Sep 17 00:00:00 2001 From: v-kaywon Date: Tue, 4 Apr 2017 12:35:08 -0700 Subject: [PATCH 16/40] added test for pdo construct without server specified --- test/pdo_sqlsrv/pdo_construct_no_server.phpt | 22 ++++++++++++++++++++ 1 file changed, 22 insertions(+) create mode 100644 test/pdo_sqlsrv/pdo_construct_no_server.phpt diff --git a/test/pdo_sqlsrv/pdo_construct_no_server.phpt b/test/pdo_sqlsrv/pdo_construct_no_server.phpt new file mode 100644 index 00000000..56bca4d3 --- /dev/null +++ b/test/pdo_sqlsrv/pdo_construct_no_server.phpt @@ -0,0 +1,22 @@ +--TEST-- +Test PDO::__Construct without specifying the Server +--SKIPIF-- + +--FILE-- +errorInfo)[2] ); +} +?> + +--EXPECT-- + +Server keyword was not specified in the DSN string. \ No newline at end of file From 4b8d8411a7969da7def97d69304bd6985c1373e9 Mon Sep 17 00:00:00 2001 From: v-kaywon Date: Tue, 4 Apr 2017 15:28:33 -0700 Subject: [PATCH 17/40] add test for different formatted dsn string in pdo construct --- .../pdo_construct_dsn_format_incorrect.phpt | 113 ++++++++++++++++++ 1 file changed, 113 insertions(+) create mode 100644 test/pdo_sqlsrv/pdo_construct_dsn_format_incorrect.phpt diff --git a/test/pdo_sqlsrv/pdo_construct_dsn_format_incorrect.phpt b/test/pdo_sqlsrv/pdo_construct_dsn_format_incorrect.phpt new file mode 100644 index 00000000..20a208a7 --- /dev/null +++ b/test/pdo_sqlsrv/pdo_construct_dsn_format_incorrect.phpt @@ -0,0 +1,113 @@ +--TEST-- +Test PDO::__Construct without specifying the Server +--SKIPIF-- + +--FILE-- +errorInfo)[2] ); + echo "\n"; +} + +//dsn with double right curly braces +try +{ + $conn = new PDO( "sqlsrv:Server =$serverName; Database = {tempdb}}", $username, $password ); +} +catch( PDOException $e ) { + print_r( ($e->errorInfo)[2] ); + echo "\n"; +} + +//dsn with double right curly braces and semicolon +try +{ + $conn = new PDO( "sqlsrv:Server =$serverName; Database = {tempdb}};", $username, $password ); +} +catch( PDOException $e ) { + print_r( ($e->errorInfo)[2] ); + echo "\n"; +} + +//dsn with right curly braces and other symbol +try +{ + $conn = new PDO( "sqlsrv:Server =$serverName; Database = {tempdb}?", $username, $password ); +} +catch( PDOException $e ) { + print_r( ($e->errorInfo)[2] ); + echo "\n"; +} + +//dsn with no equal sign in one option +try +{ + $conn = new PDO( "sqlsrv:Server =$serverName; Database", $username, $password ); +} +catch( PDOException $e ) { + print_r( ($e->errorInfo)[2] ); + echo "\n"; +} + +//dsn with no keys +try +{ + // Try to connect with no server specific + @$conn = new PDO( "sqlsrv:", $username, $password ); +} +catch( PDOException $e ) { + print_r( ($e->errorInfo)[2] ); + echo "\n"; +} + +echo "\n"; +/*----------Connection option cases that is OK----------*/ + +try +{ + //dsn with curly braces + $conn = new PDO( "sqlsrv:Server =$serverName; Database = {tempdb}", $username, $password ); + echo "value in curly braces OK\n"; + + //dsn with curly braces and semicolon + @$conn = new PDO( "sqlsrv:Server =$serverName; Database = {tempdb};", $username, $password ); + echo "value in curly braces followed by a semicolon OK\n"; + + //dsn with curly braces and trailing spaces + @$conn = new PDO( "sqlsrv:Server =$serverName; Database = {tempdb} ", $username, $password ); + echo "value in curly braces followed by trailing spaces OK\n"; + + //dsn with no value specified and ends with semicolon + $conn = new PDO( "sqlsrv:Server =$serverName; Database = ;", $username, $password ); + echo "dsn with no value specified and ends with semicolon OK\n"; +} +catch( PDOException $e ) { + print_r( ($e->errorInfo)[2] ); +} + + +?> + +--EXPECT-- + +An extra semi-colon was encountered in the DSN string at character (byte-count) position '24' . +An unescaped right brace (}) was found in the DSN string for keyword 'Database'. All right braces must be escaped with another right brace (}}). +An expected right brace (}) was not found in the DSN string for the value of the keyword 'Database'. +An invalid value was specified for the keyword 'Database' in the DSN string. +The DSN string ended unexpectedly. +An invalid DSN string was specified. + +value in curly braces OK +value in curly braces followed by a semicolon OK +value in curly braces followed by trailing spaces OK +dsn with no value specified and ends with semicolon OK \ No newline at end of file From 8b233b9096adc1b80583e6018c9d917dd0ee3e35 Mon Sep 17 00:00:00 2001 From: v-kaywon Date: Tue, 4 Apr 2017 15:43:19 -0700 Subject: [PATCH 18/40] fix expected position of double semicolon to use regex due to different length of server name --- .../pdo_construct_dsn_format_incorrect.phpt | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/test/pdo_sqlsrv/pdo_construct_dsn_format_incorrect.phpt b/test/pdo_sqlsrv/pdo_construct_dsn_format_incorrect.phpt index 20a208a7..38c94da0 100644 --- a/test/pdo_sqlsrv/pdo_construct_dsn_format_incorrect.phpt +++ b/test/pdo_sqlsrv/pdo_construct_dsn_format_incorrect.phpt @@ -98,14 +98,14 @@ catch( PDOException $e ) { ?> ---EXPECT-- +--EXPECTREGEX-- -An extra semi-colon was encountered in the DSN string at character (byte-count) position '24' . -An unescaped right brace (}) was found in the DSN string for keyword 'Database'. All right braces must be escaped with another right brace (}}). -An expected right brace (}) was not found in the DSN string for the value of the keyword 'Database'. -An invalid value was specified for the keyword 'Database' in the DSN string. -The DSN string ended unexpectedly. -An invalid DSN string was specified. +An extra semi-colon was encountered in the DSN string at character \(byte-count\) position '[0-9]+' \. +An unescaped right brace \(\}\) was found in the DSN string for keyword 'Database'\. All right braces must be escaped with another right brace \(\}\}\)\. +An expected right brace \(\}\) was not found in the DSN string for the value of the keyword 'Database'\. +An invalid value was specified for the keyword 'Database' in the DSN string\. +The DSN string ended unexpectedly\. +An invalid DSN string was specified\. value in curly braces OK value in curly braces followed by a semicolon OK From 7901d72f038299199faf46fe35ead44393bd9d76 Mon Sep 17 00:00:00 2001 From: v-kaywon Date: Tue, 4 Apr 2017 17:13:17 -0700 Subject: [PATCH 19/40] add test for warnings at connection and statement levels --- test/pdo_sqlsrv/pdo_warnings.phpt | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100644 test/pdo_sqlsrv/pdo_warnings.phpt diff --git a/test/pdo_sqlsrv/pdo_warnings.phpt b/test/pdo_sqlsrv/pdo_warnings.phpt new file mode 100644 index 00000000..c922888b --- /dev/null +++ b/test/pdo_sqlsrv/pdo_warnings.phpt @@ -0,0 +1,31 @@ +--TEST-- +Test warnings on connection and statement levels +--SKIPIF-- + +--FILE-- +setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING ); + + // raise a warning in connection + $conn->getAttribute( PDO::ATTR_TIMEOUT ); + + $conn->exec("IF OBJECT_ID('table1', 'U') IS NOT NULL DROP TABLE table1"); + + // raise a warning in statement + $statement = $conn->prepare("CRATE TABLE table1(id INT NOT NULL PRIMARY KEY, val VARCHAR(10)) "); + $statement->execute(); + + +?> +--EXPECTREGEX-- +Warning: SQLSTATE: IMSSP +Error Code: -38 +Error Message: An unsupported attribute was designated on the PDO object\. + in .+(\/|\\)pdo_warnings\.php on line [0-9]+ + +Warning: PDO::getAttribute\(\): SQLSTATE\[IM001\]: Driver does not support this function: driver does not support that attribute in .+(\/|\\)pdo_warnings\.php on line [0-9]+ + +Warning: PDOStatement::execute\(\): SQLSTATE\[42000\]: Syntax error or access violation: 156 \[Microsoft\]\[ODBC Driver [0-9]+ for SQL Server\]\[SQL Server\]Incorrect syntax near the keyword 'TABLE'\. in .+(\/|\\)pdo_warnings\.php on line [0-9]+ \ No newline at end of file From ed4e8649af203cbb5ed8e525ecbb9c962ef58e31 Mon Sep 17 00:00:00 2001 From: v-kaywon Date: Tue, 4 Apr 2017 17:30:17 -0700 Subject: [PATCH 20/40] close connection in pdo_warnings.phpt --- test/pdo_sqlsrv/pdo_warnings.phpt | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/test/pdo_sqlsrv/pdo_warnings.phpt b/test/pdo_sqlsrv/pdo_warnings.phpt index c922888b..5fbbb625 100644 --- a/test/pdo_sqlsrv/pdo_warnings.phpt +++ b/test/pdo_sqlsrv/pdo_warnings.phpt @@ -18,7 +18,8 @@ Test warnings on connection and statement levels $statement = $conn->prepare("CRATE TABLE table1(id INT NOT NULL PRIMARY KEY, val VARCHAR(10)) "); $statement->execute(); - + $statement = NULL; + $conn = NULL; ?> --EXPECTREGEX-- Warning: SQLSTATE: IMSSP From d682702152e44f8255b511b888ec6dcb894ea031 Mon Sep 17 00:00:00 2001 From: v-kaywon Date: Tue, 4 Apr 2017 17:53:11 -0700 Subject: [PATCH 21/40] added test for setting and getting pdo statement attributes --- .../pdo_sqlsrv/pdostatement_get_set_attr.phpt | 194 ++++++++++++++++++ 1 file changed, 194 insertions(+) create mode 100644 test/pdo_sqlsrv/pdostatement_get_set_attr.phpt diff --git a/test/pdo_sqlsrv/pdostatement_get_set_attr.phpt b/test/pdo_sqlsrv/pdostatement_get_set_attr.phpt new file mode 100644 index 00000000..5013b753 --- /dev/null +++ b/test/pdo_sqlsrv/pdostatement_get_set_attr.phpt @@ -0,0 +1,194 @@ +--TEST-- +Test setting and getting various statement attributes. +--SKIPIF-- + +--FILE-- +prepare( "Select * from temptb", $arr ); + return $stmt; + } + + catch( PDOException $e) + { + echo $e->getMessage() . "\n\n"; + return NULL; + } + } + + function set_stmt_attr($conn, $attr, $val) + { + $stmt = NULL; + try + { + echo "Set Attribute: " . $attr . "\n"; + $stmt = $conn->prepare( "Select * from temptb"); + } + catch( PDOException $e) + { + echo $e->getMessage() . "\n\n"; + return NULL; + } + + try { + $res = $stmt->setAttribute(constant($attr), $val); + var_dump($res); + echo "\n\n"; + } + + catch( PDOException $e) + { + echo $e->getMessage() . "\n\n"; + } + return $stmt; + } + + function get_stmt_attr($stmt, $attr) + { + try + { + echo "Get Attribute: " . $attr. "\n"; + $res = $stmt->getAttribute(constant($attr)); + var_dump($res); + echo "\n"; + } + + catch( PDOException $e) + { + echo $e->getMessage() . "\n\n"; + } + } + +// valid + function Test1($conn) + { + echo "Test1 - Set stmt option: SQLSRV_ATTR_ENCODING, ATTR_CURSOR, SQLSRV_ATTR_QUERY_TIMEOUT \n"; + set_stmt_option($conn, array(PDO::SQLSRV_ATTR_ENCODING => 3, PDO::ATTR_CURSOR => PDO::CURSOR_FWDONLY, PDO::SQLSRV_ATTR_QUERY_TIMEOUT => 44)); + echo "Test Successful\n\n"; + } + + // invalid + function Test2($conn) + { + echo "Test2 - Set stmt option: 'QueryTimeout' \n"; + set_stmt_option($conn, array("QueryTimeout" => 44 )); + } + + // valid attributes + function Test3($conn) + { + echo "Test3 \n"; + $attr = "PDO::ATTR_CURSOR"; + $stmt = set_stmt_attr($conn, $attr, 1); + if($stmt) + get_stmt_attr($stmt, $attr); + else + echo "Test3: stmt was null"; + } + + // not supported attribute + function Test4($conn) + { + echo "Test4 \n"; + $attr = "PDO::ATTR_SERVER_VERSION"; + $stmt = set_stmt_attr($conn, $attr, "whatever"); + get_stmt_attr($stmt, $attr); + } + + // not supported attribute value + function Test5($conn) + { + echo "Test5 \n"; + $attr = "PDO::ATTR_CURSOR"; + $stmt = set_stmt_attr($conn, $attr, 3); + get_stmt_attr($stmt, $attr); + } + + // valid GET/SET attribute and set option + function Test6($conn) + { + echo "Test6 - Set stmt option: SQLSRV_ATTR_ENCODING \n"; + set_stmt_option($conn, array(PDO::SQLSRV_ATTR_ENCODING => 3)); + + $attr = "PDO::ATTR_CURSOR"; + $stmt = set_stmt_attr($conn, $attr, 1); + get_stmt_attr($stmt, $attr); + + $attr = "PDO::SQLSRV_ATTR_QUERY_TIMEOUT"; + $stmt = set_stmt_attr($conn, $attr, 45); + get_stmt_attr($stmt, $attr); + + } + + +try +{ + $conn = new PDO( "sqlsrv:Server=$serverName; Database = tempdb ", $username, $password); + $conn->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION ); + $conn->exec("IF OBJECT_ID('temptb', 'U') IS NOT NULL DROP TABLE temptb"); + $conn->exec("CREATE TABLE temptb(id INT NOT NULL PRIMARY KEY, val VARCHAR(10)) "); + + test1($conn); + test2($conn); + test3($conn); + test4($conn); + test5($conn); + test6($conn); + +} + +catch( PDOException $e ) { + + var_dump( $e ); + exit; +} + +?> + +--EXPECTREGEX-- +Test1 - Set stmt option: SQLSRV_ATTR_ENCODING, ATTR_CURSOR, SQLSRV_ATTR_QUERY_TIMEOUT +Test Successful + +Test2 - Set stmt option: 'QueryTimeout' +SQLSTATE\[IMSSP\]: An invalid statement option was specified. + +Test3 +Set Attribute: PDO::ATTR_CURSOR +SQLSTATE\[IMSSP\]: The PDO::ATTR_CURSOR and PDO::SQLSRV_ATTR_CURSOR_SCROLL_TYPE attributes may only be set in the \$driver_options array of PDO::prepare. + +Get Attribute: PDO::ATTR_CURSOR +int\(0\) + +Test4 +Set Attribute: PDO::ATTR_SERVER_VERSION +(SQLSTATE\[IMSSP\]: An invalid attribute was designated on the PDOStatement object.)|(SQLSTATE\[IM001\]: Driver does not support this function: driver doesn't support getting that attribute) + +Get Attribute: PDO::ATTR_SERVER_VERSION +SQLSTATE\[IMSSP\]: An invalid attribute was designated on the PDOStatement object. + +Test5 +Set Attribute: PDO::ATTR_CURSOR +SQLSTATE\[IMSSP\]: The PDO::ATTR_CURSOR and PDO::SQLSRV_ATTR_CURSOR_SCROLL_TYPE attributes may only be set in the \$driver_options array of PDO::prepare. + +Get Attribute: PDO::ATTR_CURSOR +int\(0\) + +Test6 - Set stmt option: SQLSRV_ATTR_ENCODING +Set Attribute: PDO::ATTR_CURSOR +SQLSTATE\[IMSSP\]: The PDO::ATTR_CURSOR and PDO::SQLSRV_ATTR_CURSOR_SCROLL_TYPE attributes may only be set in the \$driver_options array of PDO::prepare. + +Get Attribute: PDO::ATTR_CURSOR +int\(0\) + +Set Attribute: PDO::SQLSRV_ATTR_QUERY_TIMEOUT +bool\(true\) + + +Get Attribute: PDO::SQLSRV_ATTR_QUERY_TIMEOUT +int\(45\) \ No newline at end of file From fc37444cbec9ace7d9aae857946de5531a02b11f Mon Sep 17 00:00:00 2001 From: v-kaywon Date: Thu, 6 Apr 2017 16:25:21 -0700 Subject: [PATCH 22/40] changed description in pdo_set_attr_invalid.phtp --- test/pdo_sqlsrv/pdo_set_attr_invalid.phpt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/pdo_sqlsrv/pdo_set_attr_invalid.phpt b/test/pdo_sqlsrv/pdo_set_attr_invalid.phpt index c559e267..562cc845 100644 --- a/test/pdo_sqlsrv/pdo_set_attr_invalid.phpt +++ b/test/pdo_sqlsrv/pdo_set_attr_invalid.phpt @@ -1,5 +1,5 @@ --TEST-- -Test setting invalid value or key +Test setting invalid value or key i connection attributes --SKIPIF-- --FILE-- From 83af4d02289242a0ba0ab44c1646b868094471cd Mon Sep 17 00:00:00 2001 From: v-kaywon Date: Thu, 6 Apr 2017 16:35:03 -0700 Subject: [PATCH 23/40] test --- test/pdo_sqlsrv/pdo_set_attr_invalid.phpt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/pdo_sqlsrv/pdo_set_attr_invalid.phpt b/test/pdo_sqlsrv/pdo_set_attr_invalid.phpt index 562cc845..6210994b 100644 --- a/test/pdo_sqlsrv/pdo_set_attr_invalid.phpt +++ b/test/pdo_sqlsrv/pdo_set_attr_invalid.phpt @@ -1,5 +1,5 @@ --TEST-- -Test setting invalid value or key i connection attributes +Test setting invalid value or key i connection attributes --SKIPIF-- --FILE-- From 3848c41108fe5875c722e997a6d93bb2c6d5213a Mon Sep 17 00:00:00 2001 From: v-kaywon Date: Fri, 7 Apr 2017 17:09:18 -0700 Subject: [PATCH 24/40] added tests for different invalid options for pdo::prepare --- .../pdo_prepare_invalid_cursor.phpt | 36 ++++++++++++++ .../pdo_prepare_invalid_encoding.phpt | 36 ++++++++++++++ ...pdo_prepare_invalid_scrollable_cursor.phpt | 36 ++++++++++++++ .../pdostatement_bindcolumn_odd_types.phpt | 47 +++++++++++++++++++ 4 files changed, 155 insertions(+) create mode 100644 test/pdo_sqlsrv/pdo_prepare_invalid_cursor.phpt create mode 100644 test/pdo_sqlsrv/pdo_prepare_invalid_encoding.phpt create mode 100644 test/pdo_sqlsrv/pdo_prepare_invalid_scrollable_cursor.phpt create mode 100644 test/pdo_sqlsrv/pdostatement_bindcolumn_odd_types.phpt diff --git a/test/pdo_sqlsrv/pdo_prepare_invalid_cursor.phpt b/test/pdo_sqlsrv/pdo_prepare_invalid_cursor.phpt new file mode 100644 index 00000000..0b7737a7 --- /dev/null +++ b/test/pdo_sqlsrv/pdo_prepare_invalid_cursor.phpt @@ -0,0 +1,36 @@ +--TEST-- +Test PDO::prepare by passing in invalid cursor value +--SKIPIF-- + +--FILE-- +setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION ); + + // PDO::CURSOR_FWDONLY should not be quoted + $stmt1 = $conn->prepare( "SELECT 1", array( PDO::ATTR_CURSOR => "PDO::CURSOR_FWDONLY" )); + + // 10 is an invalid value for PDO::ATTR_CURSOR + $stmt2 = $conn->prepare( "SELECT 2", array( PDO::ATTR_CURSOR => 10 )); + + if ( $stmt1 || $stmt2 ) + { + echo "Invalid values for PDO::ATTR_CURSOR should return false.\n"; + } else { + echo "Invalid values for PDO::ATTR_CURSOR return false.\n"; + } +} +catch( PDOException $e ) { + var_dump( $e->errorInfo ); +} +?> + +--EXPECT-- + +Invalid values for PDO::ATTR_CURSOR return false. \ No newline at end of file diff --git a/test/pdo_sqlsrv/pdo_prepare_invalid_encoding.phpt b/test/pdo_sqlsrv/pdo_prepare_invalid_encoding.phpt new file mode 100644 index 00000000..63c13354 --- /dev/null +++ b/test/pdo_sqlsrv/pdo_prepare_invalid_encoding.phpt @@ -0,0 +1,36 @@ +--TEST-- +Test PDO::prepare by passing in invalid encoding values +--SKIPIF-- + +--FILE-- +setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION ); + + // PDO::SQLSRV_ENCODING_SYSTEM should not be quoted + $stmt1 = $conn->prepare( "SELECT 1", array( PDO::SQLSRV_ATTR_ENCODING => "PDO::SQLSRV_ENCODING_SYSTEM" )); + + // 10 is an invalid value for PDO::SQLSRV_ATTR_ENCODING + $stmt2 = $conn->prepare( "SELECT 2", array( PDO::SQLSRV_ATTR_ENCODING => 10 )); + + if ( $stmt1 || $stmt2 ) + { + echo "Invalid values for PDO::SQLSRV_ATTR_ENCODING should return false.\n"; + } else { + echo "Invalid values for PDO::SQLSRV_ATTR_ENCODING return false.\n"; + } +} +catch( PDOException $e ) { + var_dump( $e->errorInfo ); +} +?> + +--EXPECT-- + +Invalid values for PDO::SQLSRV_ATTR_ENCODING return false. \ No newline at end of file diff --git a/test/pdo_sqlsrv/pdo_prepare_invalid_scrollable_cursor.phpt b/test/pdo_sqlsrv/pdo_prepare_invalid_scrollable_cursor.phpt new file mode 100644 index 00000000..2d14d803 --- /dev/null +++ b/test/pdo_sqlsrv/pdo_prepare_invalid_scrollable_cursor.phpt @@ -0,0 +1,36 @@ +--TEST-- +Test PDO::prepare by passing in invalid scrollable type value +--SKIPIF-- + +--FILE-- +setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION ); + + // PDO::SQLSRV_CURSOR_BUFFERED should not be quoted + $stmt1 = $conn->prepare( "SELECT 1", array( PDO::ATTR_CURSOR => PDO::CURSOR_SCROLL, PDO::SQLSRV_ATTR_CURSOR_SCROLL_TYPE => "PDO::SQLSRV_CURSOR_BUFFERED" )); + + // if ATTR_CURSOR is FWDONLY, cannot get SCROLL_TYPE + $stmt2 = $conn->prepare( "SELECT 2", array( PDO::ATTR_CURSOR => PDO::CURSOR_FWDONLY, PDO::SQLSRV_ATTR_CURSOR_SCROLL_TYPE => PDO::SQLSRV_CURSOR_BUFFERED )); + + if ( $stmt1 || $stmt2 ) + { + echo "Invalid values for PDO::SQLSRV_ATTR_CURSOR_SCROLL_TYPE should return false.\n"; + } else { + echo "Invalid values for PDO::SQLSRV_ATTR_CURSOR_SCROLL_TYPE return false.\n"; + } +} +catch( PDOException $e ) { + var_dump( $e->errorInfo ); +} +?> + +--EXPECT-- + +Invalid values for PDO::SQLSRV_ATTR_CURSOR_SCROLL_TYPE return false. \ No newline at end of file diff --git a/test/pdo_sqlsrv/pdostatement_bindcolumn_odd_types.phpt b/test/pdo_sqlsrv/pdostatement_bindcolumn_odd_types.phpt new file mode 100644 index 00000000..4fb2258a --- /dev/null +++ b/test/pdo_sqlsrv/pdostatement_bindcolumn_odd_types.phpt @@ -0,0 +1,47 @@ +--TEST-- +Test the bindColumn method using PDO::PARAM_NULL and PDO::PARAM_STMT +--SKIPIF-- +--FILE-- +setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION ); + $conn->exec("IF OBJECT_ID('temptb', 'U') IS NOT NULL DROP TABLE temptb"); + $conn->exec("CREATE TABLE temptb(IntCol INT, CharCol NVARCHAR(20)) "); + $conn->exec("INSERT INTO temptb (IntCol, CharCol) VALUES (10, 'ten')"); + + $stmt = $conn->prepare("SELECT IntCol FROM temptb"); + $stmt->execute(); + + // PARAM_NULL returns null + $stmt->bindColumn('IntCol', $intCol, PDO::PARAM_NULL); + $row = $stmt->fetch(PDO::FETCH_BOUND); + if ($intCol == NULL) { + echo "intCol is NULL\n"; + } else { + echo "intCol should have been NULL\n"; + } + + $stmt = $conn->prepare("SELECT CharCol FROM temptb"); + $stmt->execute(); + + // PARAM_STMT is not support and should throw an exception + $stmt->bindColumn('CharCol', $charCol, PDO::PARAM_STMT); + $row = $stmt->fetch(PDO::FETCH_BOUND); + echo "PARAM_STMT should have thrown an exception\n"; + +} +catch (PDOException $e) +{ + print_r($e->errorInfo[2]); + echo "\n"; +} + +?> +--EXPECT-- +intCol is NULL +PDO::PARAM_STMT is not a supported parameter type. \ No newline at end of file From 69976af3a04873ff7e8a0513c7387657f8a61405 Mon Sep 17 00:00:00 2001 From: v-kaywon Date: Wed, 12 Apr 2017 09:26:14 -0700 Subject: [PATCH 25/40] fixed pdo commit and rollback tests --- test/pdo_sqlsrv/pdo_commit.phpt | 17 ++++++++++++----- test/pdo_sqlsrv/pdo_rollback.phpt | 8 +++++--- 2 files changed, 17 insertions(+), 8 deletions(-) diff --git a/test/pdo_sqlsrv/pdo_commit.phpt b/test/pdo_sqlsrv/pdo_commit.phpt index ff6186fd..7c74ee3e 100644 --- a/test/pdo_sqlsrv/pdo_commit.phpt +++ b/test/pdo_sqlsrv/pdo_commit.phpt @@ -1,5 +1,5 @@ --TEST-- -starts a transaction, insert 2 rows and commit the transaction +starts a transaction, delete rows and commit the transaction --SKIPIF-- --FILE-- @@ -11,14 +11,20 @@ starts a transaction, insert 2 rows and commit the transaction $conn->exec("IF OBJECT_ID('Table1', 'U') IS NOT NULL DROP TABLE Table1"); $conn->exec("CREATE TABLE Table1(col1 CHARACTER(1), col2 CHARACTER(1)) "); - $conn->beginTransaction(); $ret = $conn->exec("insert into Table1(col1, col2) values('a', 'b') "); $ret = $conn->exec("insert into Table1(col1, col2) values('a', 'c') "); //revert the inserts - $ret = $conn->exec("delete from Table1 where col1 = 'a'"); + $conn->beginTransaction(); + $rows = $conn->exec("delete from Table1 where col1 = 'a'"); $conn->commit(); - echo $ret." rows affected\n"; + echo $rows." rows affected\n"; + + $stmt = $conn->query("select * from Table1"); + if ( count( $stmt->fetchAll() ) == 0 ) + echo "Transaction committed successfully\n"; + else + echo "Transaction failed to commit\n"; //drop the created temp table $conn->exec("DROP TABLE Table1 "); @@ -28,4 +34,5 @@ starts a transaction, insert 2 rows and commit the transaction $conn=NULL; ?> --EXPECT-- -2 rows affected \ No newline at end of file +2 rows affected +Transaction committed successfully \ No newline at end of file diff --git a/test/pdo_sqlsrv/pdo_rollback.phpt b/test/pdo_sqlsrv/pdo_rollback.phpt index bd7adf96..0a82268d 100644 --- a/test/pdo_sqlsrv/pdo_rollback.phpt +++ b/test/pdo_sqlsrv/pdo_rollback.phpt @@ -1,5 +1,5 @@ --TEST-- -starts a transaction, insert 2 rows and commit the transaction +starts a transaction, delete rows and rollback the transaction --SKIPIF-- --FILE-- @@ -11,15 +11,17 @@ starts a transaction, insert 2 rows and commit the transaction $conn->exec("IF OBJECT_ID('Table1', 'U') IS NOT NULL DROP TABLE Table1"); $conn->exec("CREATE TABLE Table1(col1 CHARACTER(1), col2 CHARACTER(1)) "); - $conn->beginTransaction(); $ret = $conn->exec("insert into Table1(col1, col2) values('a', 'b') "); $ret = $conn->exec("insert into Table1(col1, col2) values('a', 'c') "); //revert the inserts + $conn->beginTransaction(); $ret = $conn->exec("delete from Table1 where col1 = 'a'"); $conn->rollback(); $stmt = $conn->query("SELECT * FROM Table1"); - if ( count( $stmt->fetchAll() ) == 0 ) + + // Table1 should still have 2 rows since delete was rolled back + if ( count( $stmt->fetchAll() ) == 2 ) echo "Transaction rolled back successfully\n"; else echo "Transaction failed to roll back\n"; From 910e337a1648a428cc1bba5d8f97eb87f2bddb00 Mon Sep 17 00:00:00 2001 From: v-kaywon Date: Wed, 12 Apr 2017 09:32:54 -0700 Subject: [PATCH 26/40] merged two transaction isolation tests --- .../pdo_construct_TransactionIsolation.phpt | 30 +++++++++++---- ...ct_TransactionIsolation_invalid_value.phpt | 37 ------------------- 2 files changed, 22 insertions(+), 45 deletions(-) delete mode 100644 test/pdo_sqlsrv/pdo_construct_TransactionIsolation_invalid_value.phpt diff --git a/test/pdo_sqlsrv/pdo_construct_TransactionIsolation.phpt b/test/pdo_sqlsrv/pdo_construct_TransactionIsolation.phpt index bd327782..0dca6c07 100644 --- a/test/pdo_sqlsrv/pdo_construct_TransactionIsolation.phpt +++ b/test/pdo_sqlsrv/pdo_construct_TransactionIsolation.phpt @@ -12,24 +12,38 @@ function Connect($value) { "TransactionIsolation = $value"; $conn = new PDO( $dsn, $username, $password ); $conn = NULL; + echo "Test Successful\n"; } // TEST BEGIN try { -Connect("READ_UNCOMMITTED"); -Connect("READ_COMMITTED"); -Connect("REPEATABLE_READ"); -Connect("SNAPSHOT"); -Connect("SERIALIZABLE"); + Connect("READ_UNCOMMITTED"); + Connect("READ_COMMITTED"); + Connect("REPEATABLE_READ"); + Connect("SNAPSHOT"); + Connect("SERIALIZABLE"); + Connect("INVALID_KEY"); - echo "Test Successful"; + echo "Test Successful"; } catch( PDOException $e ) { - var_dump( $e ); + var_dump( $e->errorInfo ); exit; } ?> --EXPECT-- -Test Successful \ No newline at end of file +Test Successful +Test Successful +Test Successful +Test Successful +Test Successful +array(3) { + [0]=> + string(5) "IMSSP" + [1]=> + int(-63) + [2]=> + string(88) "An invalid value was specified for the keyword 'TransactionIsolation' in the DSN string." +} \ No newline at end of file diff --git a/test/pdo_sqlsrv/pdo_construct_TransactionIsolation_invalid_value.phpt b/test/pdo_sqlsrv/pdo_construct_TransactionIsolation_invalid_value.phpt deleted file mode 100644 index 0b9687fc..00000000 --- a/test/pdo_sqlsrv/pdo_construct_TransactionIsolation_invalid_value.phpt +++ /dev/null @@ -1,37 +0,0 @@ ---TEST-- -Test PDO::__Construct connection option TransactionIsolation with invalid value ---SKIPIF-- - ---FILE-- -errorInfo ); -} -?> - ---EXPECT-- - -array(3) { - [0]=> - string(5) "IMSSP" - [1]=> - int(-63) - [2]=> - string(88) "An invalid value was specified for the keyword 'TransactionIsolation' in the DSN string." -} \ No newline at end of file From 9d136d541eac63c50bc26959c5887ea97e540761 Mon Sep 17 00:00:00 2001 From: v-kaywon Date: Wed, 12 Apr 2017 10:05:20 -0700 Subject: [PATCH 27/40] mergerd pdo_construct_dsn_format_incorrect and pdo_construct_no_server and renamed to pdo_construct_dsn_error --- test/pdo_sqlsrv/pdo_construct_attr.phpt | 11 ++++++++-- ...rect.phpt => pdo_construct_dsn_error.phpt} | 14 ++++++++++-- test/pdo_sqlsrv/pdo_construct_no_server.phpt | 22 ------------------- 3 files changed, 21 insertions(+), 26 deletions(-) rename test/pdo_sqlsrv/{pdo_construct_dsn_format_incorrect.phpt => pdo_construct_dsn_error.phpt} (87%) delete mode 100644 test/pdo_sqlsrv/pdo_construct_no_server.phpt diff --git a/test/pdo_sqlsrv/pdo_construct_attr.phpt b/test/pdo_sqlsrv/pdo_construct_attr.phpt index 4b248412..0cde5aad 100644 --- a/test/pdo_sqlsrv/pdo_construct_attr.phpt +++ b/test/pdo_sqlsrv/pdo_construct_attr.phpt @@ -1,5 +1,5 @@ --TEST-- -Test PDO::__Construct by passing connection options +Test PDO::__Construct by passing different connection attributes --SKIPIF-- --FILE-- @@ -18,7 +18,7 @@ try PDO::SQLSRV_ATTR_DIRECT_QUERY => true, PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC, PDO::ATTR_ORACLE_NULLS => PDO::NULL_NATURAL, - PDO::SQLSRV_ATTR_CLIENT_BUFFER_MAX_KB_SIZE => -1, + PDO::SQLSRV_ATTR_CLIENT_BUFFER_MAX_KB_SIZE => 10240, PDO::SQLSRV_ATTR_DIRECT_QUERY => true ); @@ -30,6 +30,9 @@ try $stmt = $conn->prepare("SELECT 1"); $stmt->execute(); + // fetch result, which should be stringified since ATTR_STRINGIFY_FETCHES is on + var_dump(($stmt->fetch(PDO::FETCH_ASSOC))); + $stmt = NULL; $conn = NULL; @@ -44,4 +47,8 @@ catch( PDOException $e ) { --EXPECT-- +array(1) { + [""]=> + string(1) "1" +} Test Successful \ No newline at end of file diff --git a/test/pdo_sqlsrv/pdo_construct_dsn_format_incorrect.phpt b/test/pdo_sqlsrv/pdo_construct_dsn_error.phpt similarity index 87% rename from test/pdo_sqlsrv/pdo_construct_dsn_format_incorrect.phpt rename to test/pdo_sqlsrv/pdo_construct_dsn_error.phpt index 38c94da0..4e44a26f 100644 --- a/test/pdo_sqlsrv/pdo_construct_dsn_format_incorrect.phpt +++ b/test/pdo_sqlsrv/pdo_construct_dsn_error.phpt @@ -1,5 +1,5 @@ --TEST-- -Test PDO::__Construct without specifying the Server +Test PDO::__Construct with incorrectly formatted DSN or no Server specified in DSN --SKIPIF-- --FILE-- @@ -9,7 +9,6 @@ require_once("autonomous_setup.php"); /*----------Connection option cases that raises errors----------*/ //dsn with 2 consecutive semicolons - try { $conn = new PDO( "sqlsrv:Server = $serverName;;", $username, $password ); @@ -69,6 +68,16 @@ catch( PDOException $e ) { print_r( ($e->errorInfo)[2] ); echo "\n"; } +// Try to connect with no server specified +try +{ + $database = "tempdb"; + @$conn = new PDO( "sqlsrv:Database = $database", $username, $password ); +} +catch( PDOException $e ) { + print_r( ($e->errorInfo)[2] ); + echo "\n"; +} echo "\n"; /*----------Connection option cases that is OK----------*/ @@ -106,6 +115,7 @@ An expected right brace \(\}\) was not found in the DSN string for the value of An invalid value was specified for the keyword 'Database' in the DSN string\. The DSN string ended unexpectedly\. An invalid DSN string was specified\. +Server keyword was not specified in the DSN string\. value in curly braces OK value in curly braces followed by a semicolon OK diff --git a/test/pdo_sqlsrv/pdo_construct_no_server.phpt b/test/pdo_sqlsrv/pdo_construct_no_server.phpt deleted file mode 100644 index 56bca4d3..00000000 --- a/test/pdo_sqlsrv/pdo_construct_no_server.phpt +++ /dev/null @@ -1,22 +0,0 @@ ---TEST-- -Test PDO::__Construct without specifying the Server ---SKIPIF-- - ---FILE-- -errorInfo)[2] ); -} -?> - ---EXPECT-- - -Server keyword was not specified in the DSN string. \ No newline at end of file From d5238008d7783affb008a42d00b2fcde5b091b9a Mon Sep 17 00:00:00 2001 From: v-kaywon Date: Wed, 12 Apr 2017 11:10:58 -0700 Subject: [PATCH 28/40] changed pdo_lastInsertId.phpt so lastInsertId does not take in table names; fixed indentation --- test/pdo_sqlsrv/pdo_construct_attr.phpt | 27 ++- .../pdo_construct_conn_options.phpt | 34 ++-- test/pdo_sqlsrv/pdo_exec_invalid_query.phpt | 7 +- test/pdo_sqlsrv/pdo_get_attr_invalid.phpt | 24 +-- test/pdo_sqlsrv/pdo_get_set_attr.phpt | 156 +++++++++--------- test/pdo_sqlsrv/pdo_invalid_conn_opt.phpt | 11 +- test/pdo_sqlsrv/pdo_lastInsertId.phpt | 6 - 7 files changed, 129 insertions(+), 136 deletions(-) diff --git a/test/pdo_sqlsrv/pdo_construct_attr.phpt b/test/pdo_sqlsrv/pdo_construct_attr.phpt index 0cde5aad..9b0dd2b6 100644 --- a/test/pdo_sqlsrv/pdo_construct_attr.phpt +++ b/test/pdo_sqlsrv/pdo_construct_attr.phpt @@ -9,21 +9,20 @@ require_once("autonomous_setup.php"); try { - $attr = array( - PDO::SQLSRV_ATTR_ENCODING => 3, - PDO::ATTR_CASE => 2, - PDO::ATTR_PREFETCH => false, - PDO::ATTR_TIMEOUT => 35, - PDO::ATTR_STRINGIFY_FETCHES => true, - PDO::SQLSRV_ATTR_DIRECT_QUERY => true, - PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC, - PDO::ATTR_ORACLE_NULLS => PDO::NULL_NATURAL, - PDO::SQLSRV_ATTR_CLIENT_BUFFER_MAX_KB_SIZE => 10240, - PDO::SQLSRV_ATTR_DIRECT_QUERY => true - ); + $attr = array( PDO::SQLSRV_ATTR_ENCODING => 3, + PDO::ATTR_CASE => 2, + PDO::ATTR_PREFETCH => false, + PDO::ATTR_TIMEOUT => 35, + PDO::ATTR_STRINGIFY_FETCHES => true, + PDO::SQLSRV_ATTR_DIRECT_QUERY => true, + PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC, + PDO::ATTR_ORACLE_NULLS => PDO::NULL_NATURAL, + PDO::SQLSRV_ATTR_CLIENT_BUFFER_MAX_KB_SIZE => 10240, + PDO::SQLSRV_ATTR_DIRECT_QUERY => true + ); $database = "tempdb"; - $dsn = "sqlsrv:Server = $serverName; Database = $database"; + $dsn = "sqlsrv:Server = $serverName; Database = $database"; $conn = new PDO( $dsn, $username, $password, $attr); @@ -37,7 +36,7 @@ try $conn = NULL; - echo "Test Successful"; + echo "Test Successful"; } catch( PDOException $e ) { var_dump( $e ); diff --git a/test/pdo_sqlsrv/pdo_construct_conn_options.phpt b/test/pdo_sqlsrv/pdo_construct_conn_options.phpt index 1b89a3c9..67a97571 100644 --- a/test/pdo_sqlsrv/pdo_construct_conn_options.phpt +++ b/test/pdo_sqlsrv/pdo_construct_conn_options.phpt @@ -10,26 +10,26 @@ require_once("autonomous_setup.php"); try { $database = "tempdb"; - $dsn = "sqlsrv:Server = $serverName;" . - "ConnectionPooling = false;" . - "APP = whatever;" . - "LoginTimeout = 1;" . - "ApplicationIntent = ReadOnly;" . - "Database = $database;" . - "Encrypt = false;" . - "Failover_Partner = whatever;" . - "MultipleActiveResultSets = true;" . - "MultiSubnetFailover = NO;" . - "QuotedId = false;" . - "TraceFile = whatever;" . - "TraceOn = true;" . - "TrustServerCertificate = false;" . - "WSID = whatever;" - ; + $dsn = "sqlsrv:Server = $serverName;" . + "ConnectionPooling = false;" . + "APP = whatever;" . + "LoginTimeout = 1;" . + "ApplicationIntent = ReadOnly;" . + "Database = $database;" . + "Encrypt = false;" . + "Failover_Partner = whatever;" . + "MultipleActiveResultSets = true;" . + "MultiSubnetFailover = NO;" . + "QuotedId = false;" . + "TraceFile = whatever;" . + "TraceOn = true;" . + "TrustServerCertificate = false;" . + "WSID = whatever;" + ; $conn = new PDO( $dsn, $username, $password); - echo "Test Successful"; + echo "Test Successful"; } catch( PDOException $e ) { var_dump( $e ); diff --git a/test/pdo_sqlsrv/pdo_exec_invalid_query.phpt b/test/pdo_sqlsrv/pdo_exec_invalid_query.phpt index 5b81cf8f..141959d1 100644 --- a/test/pdo_sqlsrv/pdo_exec_invalid_query.phpt +++ b/test/pdo_sqlsrv/pdo_exec_invalid_query.phpt @@ -10,8 +10,8 @@ direct execution of an invalid query $conn->exec("IF OBJECT_ID('table1', 'U') IS NOT NULL DROP TABLE table1"); - // execute a query with typo - $conn->exec("CRETE TABLE tmp_table(id INT NOT NULL PRIMARY KEY, val VARCHAR(10)) "); + // execute a query with typo (spelling error in CREATE) + $conn->exec("CRETE TABLE table1(id INT NOT NULL PRIMARY KEY, val VARCHAR(10)) "); print_r( $conn->errorCode() ); echo "\n"; @@ -20,6 +20,9 @@ direct execution of an invalid query print_r( $conn->errorCode() ); echo "\n"; + // drop table1 and free connections + $conn->exec("DROP TABLE table1"); + $conn = NULL; ?> --EXPECT-- 42000 diff --git a/test/pdo_sqlsrv/pdo_get_attr_invalid.phpt b/test/pdo_sqlsrv/pdo_get_attr_invalid.phpt index 99701aa1..88f70a59 100644 --- a/test/pdo_sqlsrv/pdo_get_attr_invalid.phpt +++ b/test/pdo_sqlsrv/pdo_get_attr_invalid.phpt @@ -8,22 +8,22 @@ Test getting invalid attributes require_once("autonomous_setup.php"); try{ -$database = "tempdb"; -$dsn = "sqlsrv:Server = $serverName; Database = $database"; + $database = "tempdb"; + $dsn = "sqlsrv:Server = $serverName; Database = $database"; -$conn = new PDO( $dsn, $username, $password, array(PDO::ATTR_ERRMODE => PDO::ERRMODE_SILENT)); + $conn = new PDO( $dsn, $username, $password, array(PDO::ATTR_ERRMODE => PDO::ERRMODE_SILENT)); -@$conn->getAttribute( PDO::ATTR_FETCH_TABLE_NAMES ); -print_r (($conn->errorInfo())[2]); -echo "\n"; + @$conn->getAttribute( PDO::ATTR_FETCH_TABLE_NAMES ); + print_r (($conn->errorInfo())[2]); + echo "\n"; -@$conn->getAttribute( PDO::ATTR_CURSOR ); -print_r (($conn->errorInfo())[2]); -echo "\n"; + @$conn->getAttribute( PDO::ATTR_CURSOR ); + print_r (($conn->errorInfo())[2]); + echo "\n"; -@$conn->getAttribute( PDO::ATTR_CONNECTION_STATUS ); -print_r (($conn->errorInfo())[2]); -echo "\n"; + @$conn->getAttribute( PDO::ATTR_CONNECTION_STATUS ); + print_r (($conn->errorInfo())[2]); + echo "\n"; } catch ( PDOException $e ){ exit; diff --git a/test/pdo_sqlsrv/pdo_get_set_attr.phpt b/test/pdo_sqlsrv/pdo_get_set_attr.phpt index 2f54d650..a200585c 100644 --- a/test/pdo_sqlsrv/pdo_get_set_attr.phpt +++ b/test/pdo_sqlsrv/pdo_get_set_attr.phpt @@ -5,102 +5,100 @@ Test PDO::setAttribute() and PDO::getAttribute() methods. --FILE-- getAttribute( constant($attr) ); - var_dump( $result); - } - catch ( PDOException $e) - { - echo $e->getMessage() . "\n"; - } - } + echo "Get Result $attr :\n"; + $result = $conn->getAttribute( constant($attr) ); + var_dump( $result); + } + catch ( PDOException $e) + { + echo $e->getMessage() . "\n"; + } +} - function set_attr( $conn, $attr, $val ) - { - try { +function set_attr( $conn, $attr, $val ) +{ + try { - echo "Set Result $attr :\n"; - $result = $conn->setAttribute( constant($attr), $val ); - var_dump( $result); - } - catch ( PDOException $e) - { - echo $e->getMessage() . "\n"; - } - } + echo "Set Result $attr :\n"; + $result = $conn->setAttribute( constant($attr), $val ); + var_dump( $result); + } + catch ( PDOException $e) + { + echo $e->getMessage() . "\n"; + } +} function set_get_attr($testName, $conn, $attr, $val) { - try { + try { - echo "\n". $testName . ":\n"; - set_attr($conn, $attr, $val ); - get_attr($conn, $attr ); - } - catch(PDOException $e) - { - var_dump($e); - } + echo "\n". $testName . ":\n"; + set_attr($conn, $attr, $val ); + get_attr($conn, $attr ); + } + catch(PDOException $e) + { + var_dump($e); + } } try { - $database = "tempdb"; - $conn = new PDO("sqlsrv:Server=$serverName;Database=$database", $username, $password); - $values = array ( - "PDO::ATTR_ERRMODE" => 2, - "PDO::ATTR_SERVER_VERSION" => "whatever", - "PDO::ATTR_DRIVER_NAME" => "whatever", - "PDO::ATTR_STRINGIFY_FETCHES" => true, - "PDO::ATTR_CLIENT_VERSION" => "whatever", - "PDO::ATTR_SERVER_INFO" => "whatever", - "PDO::ATTR_CASE" => 2, - "PDO::SQLSRV_ATTR_ENCODING" => 3, - "PDO::ATTR_DEFAULT_FETCH_MODE" => PDO::FETCH_ASSOC, - "PDO::ATTR_ORACLE_NULLS" => PDO::NULL_NATURAL, - "PDO::SQLSRV_ATTR_CLIENT_BUFFER_MAX_KB_SIZE" => 5120, - "PDO::SQLSRV_ATTR_DIRECT_QUERY" => true, - "PDO::ATTR_STATEMENT_CLASS" => array('CustomPDOStatement', array()), - "PDO::SQLSRV_ATTR_QUERY_TIMEOUT" => 10, - "PDO::SQLSRV_ATTR_FETCHES_NUMERIC_TYPE" => false - ); + $database = "tempdb"; + $conn = new PDO("sqlsrv:Server=$serverName;Database=$database", $username, $password); + $values = array ( "PDO::ATTR_ERRMODE" => 2, + "PDO::ATTR_SERVER_VERSION" => "whatever", + "PDO::ATTR_DRIVER_NAME" => "whatever", + "PDO::ATTR_STRINGIFY_FETCHES" => true, + "PDO::ATTR_CLIENT_VERSION" => "whatever", + "PDO::ATTR_SERVER_INFO" => "whatever", + "PDO::ATTR_CASE" => PDO::CASE_LOWER, + "PDO::SQLSRV_ATTR_ENCODING" => PDO::SQLSRV_ENCODING_SYSTEM, + "PDO::ATTR_DEFAULT_FETCH_MODE" => PDO::FETCH_ASSOC, + "PDO::ATTR_ORACLE_NULLS" => PDO::NULL_NATURAL, + "PDO::SQLSRV_ATTR_CLIENT_BUFFER_MAX_KB_SIZE" => 5120, + "PDO::SQLSRV_ATTR_DIRECT_QUERY" => true, + "PDO::ATTR_STATEMENT_CLASS" => array('CustomPDOStatement', array()), + "PDO::SQLSRV_ATTR_QUERY_TIMEOUT" => 10, + "PDO::SQLSRV_ATTR_FETCHES_NUMERIC_TYPE" => false + ); - $attributes = array ( - "PDO::ATTR_ERRMODE", - "PDO::ATTR_SERVER_VERSION", - "PDO::ATTR_DRIVER_NAME", - "PDO::ATTR_STRINGIFY_FETCHES", - "PDO::ATTR_CLIENT_VERSION", - "PDO::ATTR_SERVER_INFO", - "PDO::ATTR_CASE", - "PDO::SQLSRV_ATTR_ENCODING", - "PDO::ATTR_DEFAULT_FETCH_MODE", - "PDO::ATTR_ORACLE_NULLS", - "PDO::SQLSRV_ATTR_CLIENT_BUFFER_MAX_KB_SIZE", - "PDO::SQLSRV_ATTR_DIRECT_QUERY", - "PDO::ATTR_STATEMENT_CLASS", - "PDO::SQLSRV_ATTR_QUERY_TIMEOUT", - "PDO::SQLSRV_ATTR_FETCHES_NUMERIC_TYPE" - ); - $i = 1; - foreach( $attributes as $attr ) - { + $attributes = array ( "PDO::ATTR_ERRMODE", + "PDO::ATTR_SERVER_VERSION", + "PDO::ATTR_DRIVER_NAME", + "PDO::ATTR_STRINGIFY_FETCHES", + "PDO::ATTR_CLIENT_VERSION", + "PDO::ATTR_SERVER_INFO", + "PDO::ATTR_CASE", + "PDO::SQLSRV_ATTR_ENCODING", + "PDO::ATTR_DEFAULT_FETCH_MODE", + "PDO::ATTR_ORACLE_NULLS", + "PDO::SQLSRV_ATTR_CLIENT_BUFFER_MAX_KB_SIZE", + "PDO::SQLSRV_ATTR_DIRECT_QUERY", + "PDO::ATTR_STATEMENT_CLASS", + "PDO::SQLSRV_ATTR_QUERY_TIMEOUT", + "PDO::SQLSRV_ATTR_FETCHES_NUMERIC_TYPE" + ); + $i = 1; + foreach( $attributes as $attr ) + { $testName = "Test_". $i; $i = $i + 1; - set_get_attr($testName, $conn, $attr, $values[$attr]); - } + set_get_attr($testName, $conn, $attr, $values[$attr]); + } } catch( PDOException $e ) { diff --git a/test/pdo_sqlsrv/pdo_invalid_conn_opt.phpt b/test/pdo_sqlsrv/pdo_invalid_conn_opt.phpt index a5d5ecc7..9bd60c76 100644 --- a/test/pdo_sqlsrv/pdo_invalid_conn_opt.phpt +++ b/test/pdo_sqlsrv/pdo_invalid_conn_opt.phpt @@ -10,14 +10,13 @@ require_once("autonomous_setup.php"); try { $database = "tempdb"; - $dsn = "sqlsrv:Server = $serverName;" . - "Database = $database;" . - "InvalidKey = true;" - ; + $dsn = "sqlsrv:Server = $serverName;" . + "Database = $database;" . + "InvalidKey = true;" + ; $conn = new PDO( $dsn, $username, $password); - - echo "Test Successful"; + echo "Test Successful"; } catch( PDOException $e ) { var_dump( $e->errorInfo ); diff --git a/test/pdo_sqlsrv/pdo_lastInsertId.phpt b/test/pdo_sqlsrv/pdo_lastInsertId.phpt index 9c55b21f..6beeef8c 100644 --- a/test/pdo_sqlsrv/pdo_lastInsertId.phpt +++ b/test/pdo_sqlsrv/pdo_lastInsertId.phpt @@ -22,15 +22,11 @@ try $conn->exec('INSERT INTO tmp_table2 VALUES(2)'); $id = $conn->lastInsertId(); var_dump($id); - $id = $conn->lastInsertId('tmp_table1'); - var_dump($id); $conn->exec('INSERT INTO tmp_table2 VALUES(3)'); $conn->exec('INSERT INTO tmp_table1 VALUES(4)'); $id = $conn->lastInsertId(); var_dump($id); - $id = $conn->lastInsertId('tmp_table2'); - var_dump($id); // Should return empty string as the table does not have an IDENTITY column. $conn->exec('INSERT INTO tmp_table3 VALUES(1,1)'); @@ -52,7 +48,5 @@ catch( PDOException $e ) { ?> --EXPECT-- string(3) "200" -string(3) "100" string(3) "102" -string(3) "202" string(0) "" From 371e019511d4b2151422b0334d77fbc97f8b65b6 Mon Sep 17 00:00:00 2001 From: v-kaywon Date: Wed, 12 Apr 2017 11:21:54 -0700 Subject: [PATCH 29/40] change pdo_prepare_invalid_cursor.phpt so it prints out errorinfo --- test/pdo_sqlsrv/pdo_lastInsertId.phpt | 46 +++++++++---------- .../pdo_prepare_invalid_cursor.phpt | 14 +++--- 2 files changed, 29 insertions(+), 31 deletions(-) diff --git a/test/pdo_sqlsrv/pdo_lastInsertId.phpt b/test/pdo_sqlsrv/pdo_lastInsertId.phpt index 6beeef8c..2e488f31 100644 --- a/test/pdo_sqlsrv/pdo_lastInsertId.phpt +++ b/test/pdo_sqlsrv/pdo_lastInsertId.phpt @@ -8,35 +8,35 @@ require_once("autonomous_setup.php"); try { - $database = "tempdb"; + $database = "tempdb"; $conn = new PDO("sqlsrv:Server=$serverName;Database=$database", $username, $password); - $conn->exec("IF OBJECT_ID('tmp_table1', 'U') IS NOT NULL DROP TABLE [tmp_table1]"); - $conn->exec("IF OBJECT_ID('tmp_table2', 'U') IS NOT NULL DROP TABLE [tmp_table2]"); - $conn->exec("IF OBJECT_ID('tmp_table3', 'U') IS NOT NULL DROP TABLE [tmp_table3]"); - $conn->exec('CREATE TABLE tmp_table1(id INT IDENTITY(100,2), val INT)'); - $conn->exec('CREATE TABLE tmp_table2(id INT IDENTITY(200,2), val INT)'); - $conn->exec('CREATE TABLE tmp_table3(id INT, val INT)'); + $conn->exec("IF OBJECT_ID('tmp_table1', 'U') IS NOT NULL DROP TABLE [tmp_table1]"); + $conn->exec("IF OBJECT_ID('tmp_table2', 'U') IS NOT NULL DROP TABLE [tmp_table2]"); + $conn->exec("IF OBJECT_ID('tmp_table3', 'U') IS NOT NULL DROP TABLE [tmp_table3]"); + $conn->exec('CREATE TABLE tmp_table1(id INT IDENTITY(100,2), val INT)'); + $conn->exec('CREATE TABLE tmp_table2(id INT IDENTITY(200,2), val INT)'); + $conn->exec('CREATE TABLE tmp_table3(id INT, val INT)'); - $conn->exec('INSERT INTO tmp_table1 VALUES(1)'); - $conn->exec('INSERT INTO tmp_table2 VALUES(2)'); - $id = $conn->lastInsertId(); - var_dump($id); + $conn->exec('INSERT INTO tmp_table1 VALUES(1)'); + $conn->exec('INSERT INTO tmp_table2 VALUES(2)'); + $id = $conn->lastInsertId(); + var_dump($id); - $conn->exec('INSERT INTO tmp_table2 VALUES(3)'); - $conn->exec('INSERT INTO tmp_table1 VALUES(4)'); - $id = $conn->lastInsertId(); - var_dump($id); + $conn->exec('INSERT INTO tmp_table2 VALUES(3)'); + $conn->exec('INSERT INTO tmp_table1 VALUES(4)'); + $id = $conn->lastInsertId(); + var_dump($id); - // Should return empty string as the table does not have an IDENTITY column. - $conn->exec('INSERT INTO tmp_table3 VALUES(1,1)'); - $id = $conn->lastInsertId(); - var_dump($id); + // Should return empty string as the table does not have an IDENTITY column. + $conn->exec('INSERT INTO tmp_table3 VALUES(1,1)'); + $id = $conn->lastInsertId(); + var_dump($id); - // clean up - $conn->exec('DROP TABLE tmp_table1'); - $conn->exec('DROP TABLE tmp_table2'); - $conn->exec('DROP TABLE tmp_table3'); + // clean up + $conn->exec('DROP TABLE tmp_table1'); + $conn->exec('DROP TABLE tmp_table2'); + $conn->exec('DROP TABLE tmp_table3'); } catch( PDOException $e ) { diff --git a/test/pdo_sqlsrv/pdo_prepare_invalid_cursor.phpt b/test/pdo_sqlsrv/pdo_prepare_invalid_cursor.phpt index 0b7737a7..50488ce8 100644 --- a/test/pdo_sqlsrv/pdo_prepare_invalid_cursor.phpt +++ b/test/pdo_sqlsrv/pdo_prepare_invalid_cursor.phpt @@ -11,20 +11,17 @@ try { $database = "tempdb"; $conn = new PDO( "sqlsrv:Server = $serverName; Database = $database", $username, $password); - //$conn->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION ); // PDO::CURSOR_FWDONLY should not be quoted $stmt1 = $conn->prepare( "SELECT 1", array( PDO::ATTR_CURSOR => "PDO::CURSOR_FWDONLY" )); + print_r(($conn->errorInfo())[2]); + echo "\n"; // 10 is an invalid value for PDO::ATTR_CURSOR $stmt2 = $conn->prepare( "SELECT 2", array( PDO::ATTR_CURSOR => 10 )); + print_r(($conn->errorInfo())[2]); + echo "\n"; - if ( $stmt1 || $stmt2 ) - { - echo "Invalid values for PDO::ATTR_CURSOR should return false.\n"; - } else { - echo "Invalid values for PDO::ATTR_CURSOR return false.\n"; - } } catch( PDOException $e ) { var_dump( $e->errorInfo ); @@ -33,4 +30,5 @@ catch( PDOException $e ) { --EXPECT-- -Invalid values for PDO::ATTR_CURSOR return false. \ No newline at end of file +An invalid cursor type was specified for either PDO::ATTR_CURSOR or PDO::SQLSRV_ATTR_CURSOR_SCROLL_TYPE +An invalid cursor type was specified for either PDO::ATTR_CURSOR or PDO::SQLSRV_ATTR_CURSOR_SCROLL_TYPE \ No newline at end of file From e59bde3d3844dd07d97a6d63228a65de6db1fac4 Mon Sep 17 00:00:00 2001 From: v-kaywon Date: Wed, 12 Apr 2017 11:24:52 -0700 Subject: [PATCH 30/40] change pdo_prepare_invalid_encoding.phpt so it prints out errorinfo --- test/pdo_sqlsrv/pdo_prepare_invalid_encoding.phpt | 15 ++++++--------- 1 file changed, 6 insertions(+), 9 deletions(-) diff --git a/test/pdo_sqlsrv/pdo_prepare_invalid_encoding.phpt b/test/pdo_sqlsrv/pdo_prepare_invalid_encoding.phpt index 63c13354..41d53c72 100644 --- a/test/pdo_sqlsrv/pdo_prepare_invalid_encoding.phpt +++ b/test/pdo_sqlsrv/pdo_prepare_invalid_encoding.phpt @@ -11,20 +11,16 @@ try { $database = "tempdb"; $conn = new PDO( "sqlsrv:Server = $serverName; Database = $database", $username, $password); - //$conn->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION ); // PDO::SQLSRV_ENCODING_SYSTEM should not be quoted $stmt1 = $conn->prepare( "SELECT 1", array( PDO::SQLSRV_ATTR_ENCODING => "PDO::SQLSRV_ENCODING_SYSTEM" )); + print_r(($conn->errorInfo())[2]); + echo "\n"; // 10 is an invalid value for PDO::SQLSRV_ATTR_ENCODING $stmt2 = $conn->prepare( "SELECT 2", array( PDO::SQLSRV_ATTR_ENCODING => 10 )); - - if ( $stmt1 || $stmt2 ) - { - echo "Invalid values for PDO::SQLSRV_ATTR_ENCODING should return false.\n"; - } else { - echo "Invalid values for PDO::SQLSRV_ATTR_ENCODING return false.\n"; - } + print_r(($conn->errorInfo())[2]); + echo "\n"; } catch( PDOException $e ) { var_dump( $e->errorInfo ); @@ -33,4 +29,5 @@ catch( PDOException $e ) { --EXPECT-- -Invalid values for PDO::SQLSRV_ATTR_ENCODING return false. \ No newline at end of file +An invalid encoding was specified for SQLSRV_ATTR_ENCODING. +An invalid encoding was specified for SQLSRV_ATTR_ENCODING. \ No newline at end of file From 6fb68c9b61a9aeb8d16f5d1b09436ecb1267cb03 Mon Sep 17 00:00:00 2001 From: v-kaywon Date: Wed, 12 Apr 2017 11:33:07 -0700 Subject: [PATCH 31/40] commit and rollback tests set stmt to null at the end --- test/pdo_sqlsrv/pdo_commit.phpt | 1 + test/pdo_sqlsrv/pdo_prepare_invalid_option_key.phpt | 4 ++-- test/pdo_sqlsrv/pdo_prepare_invalid_scrollable_cursor.phpt | 2 +- test/pdo_sqlsrv/pdo_prepare_options.phpt | 5 ++--- test/pdo_sqlsrv/pdo_rollback.phpt | 1 + 5 files changed, 7 insertions(+), 6 deletions(-) diff --git a/test/pdo_sqlsrv/pdo_commit.phpt b/test/pdo_sqlsrv/pdo_commit.phpt index 7c74ee3e..d89ded4d 100644 --- a/test/pdo_sqlsrv/pdo_commit.phpt +++ b/test/pdo_sqlsrv/pdo_commit.phpt @@ -31,6 +31,7 @@ starts a transaction, delete rows and commit the transaction //free statement and connection $ret=NULL; + $stmt = NULL; $conn=NULL; ?> --EXPECT-- diff --git a/test/pdo_sqlsrv/pdo_prepare_invalid_option_key.phpt b/test/pdo_sqlsrv/pdo_prepare_invalid_option_key.phpt index e9f824e7..c65bec0e 100644 --- a/test/pdo_sqlsrv/pdo_prepare_invalid_option_key.phpt +++ b/test/pdo_sqlsrv/pdo_prepare_invalid_option_key.phpt @@ -10,14 +10,14 @@ require_once("autonomous_setup.php"); try { $database = "tempdb"; - $dsn = "sqlsrv:Server = $serverName; Database = $database"; + $dsn = "sqlsrv:Server = $serverName; Database = $database"; $attr = array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION); $conn = new PDO( $dsn, $username, $password, $attr); $stmt = $conn->prepare( "SELECT 1", array( "PDO::ATTR_CURSOR" => PDO::CURSOR_FWDONLY )); - echo "Test Successful"; + echo "Test Successful"; } catch( PDOException $e ) { var_dump( $e->errorInfo ); diff --git a/test/pdo_sqlsrv/pdo_prepare_invalid_scrollable_cursor.phpt b/test/pdo_sqlsrv/pdo_prepare_invalid_scrollable_cursor.phpt index 2d14d803..cca2e519 100644 --- a/test/pdo_sqlsrv/pdo_prepare_invalid_scrollable_cursor.phpt +++ b/test/pdo_sqlsrv/pdo_prepare_invalid_scrollable_cursor.phpt @@ -16,7 +16,7 @@ try // PDO::SQLSRV_CURSOR_BUFFERED should not be quoted $stmt1 = $conn->prepare( "SELECT 1", array( PDO::ATTR_CURSOR => PDO::CURSOR_SCROLL, PDO::SQLSRV_ATTR_CURSOR_SCROLL_TYPE => "PDO::SQLSRV_CURSOR_BUFFERED" )); - // if ATTR_CURSOR is FWDONLY, cannot get SCROLL_TYPE + // if ATTR_CURSOR is FWDONLY, cannot set SCROLL_TYPE $stmt2 = $conn->prepare( "SELECT 2", array( PDO::ATTR_CURSOR => PDO::CURSOR_FWDONLY, PDO::SQLSRV_ATTR_CURSOR_SCROLL_TYPE => PDO::SQLSRV_CURSOR_BUFFERED )); if ( $stmt1 || $stmt2 ) diff --git a/test/pdo_sqlsrv/pdo_prepare_options.phpt b/test/pdo_sqlsrv/pdo_prepare_options.phpt index 56a69125..e7dea4ce 100644 --- a/test/pdo_sqlsrv/pdo_prepare_options.phpt +++ b/test/pdo_sqlsrv/pdo_prepare_options.phpt @@ -17,7 +17,7 @@ try } $database = "tempdb"; - $dsn = "sqlsrv:Server = $serverName; Database = $database"; + $dsn = "sqlsrv:Server = $serverName; Database = $database"; $prep_attr = array(PDO::SQLSRV_ATTR_ENCODING => PDO::SQLSRV_ENCODING_UTF8, PDO::ATTR_STATEMENT_CLASS => array('CustomPDOStatement', array()), PDO::SQLSRV_ATTR_DIRECT_QUERY => true, @@ -28,8 +28,7 @@ try $stmt = $conn->prepare( "SELECT 1", $prep_attr ); - - echo "Test Successful"; + echo "Test Successful"; } catch( PDOException $e ) { var_dump( $e->errorInfo ); diff --git a/test/pdo_sqlsrv/pdo_rollback.phpt b/test/pdo_sqlsrv/pdo_rollback.phpt index 0a82268d..2ef5d345 100644 --- a/test/pdo_sqlsrv/pdo_rollback.phpt +++ b/test/pdo_sqlsrv/pdo_rollback.phpt @@ -31,6 +31,7 @@ starts a transaction, delete rows and rollback the transaction //free statement and connection $ret=NULL; + $stmt = NULL; $conn=NULL; ?> --EXPECT-- From caec6805355fcf6db51b89454623837531647e74 Mon Sep 17 00:00:00 2001 From: v-kaywon Date: Wed, 12 Apr 2017 11:40:26 -0700 Subject: [PATCH 32/40] added catch block in pdo_warnings.phpt --- test/pdo_sqlsrv/pdo_set_attr_invalid.phpt | 22 +++++++------- .../pdo_set_attr_invalid_encoding.phpt | 30 +++++++++---------- test/pdo_sqlsrv/pdo_warnings.phpt | 6 ++++ 3 files changed, 32 insertions(+), 26 deletions(-) diff --git a/test/pdo_sqlsrv/pdo_set_attr_invalid.phpt b/test/pdo_sqlsrv/pdo_set_attr_invalid.phpt index 6210994b..3ddc8eda 100644 --- a/test/pdo_sqlsrv/pdo_set_attr_invalid.phpt +++ b/test/pdo_sqlsrv/pdo_set_attr_invalid.phpt @@ -1,5 +1,5 @@ --TEST-- -Test setting invalid value or key i connection attributes +Test setting invalid value or key in connection attributes --SKIPIF-- --FILE-- @@ -8,19 +8,19 @@ Test setting invalid value or key i connection attributes require_once("autonomous_setup.php"); try{ -$database = "tempdb"; -$dsn = "sqlsrv:Server = $serverName; Database = $database"; + $database = "tempdb"; + $dsn = "sqlsrv:Server = $serverName; Database = $database"; -$conn = new PDO( $dsn, $username, $password, array(PDO::ATTR_ERRMODE => PDO::ERRMODE_SILENT)); + $conn = new PDO( $dsn, $username, $password, array(PDO::ATTR_ERRMODE => PDO::ERRMODE_SILENT)); -// Negative value for query timeout: should raise error -@$conn->setAttribute( PDO::SQLSRV_ATTR_QUERY_TIMEOUT, -1 ); -print_r (($conn->errorInfo())[2]); -echo "\n"; + // Negative value for query timeout: should raise error + @$conn->setAttribute( PDO::SQLSRV_ATTR_QUERY_TIMEOUT, -1 ); + print_r (($conn->errorInfo())[2]); + echo "\n"; -// PDO::ATTR_CURSOR is a Statement Level Attribute only -@$conn->setAttribute( PDO::ATTR_CURSOR, PDO::CURSOR_SCROLL ); -print_r (($conn->errorInfo())[2]); + // PDO::ATTR_CURSOR is a Statement Level Attribute only + @$conn->setAttribute( PDO::ATTR_CURSOR, PDO::CURSOR_SCROLL ); + print_r (($conn->errorInfo())[2]); } catch ( PDOException $e ){ exit; diff --git a/test/pdo_sqlsrv/pdo_set_attr_invalid_encoding.phpt b/test/pdo_sqlsrv/pdo_set_attr_invalid_encoding.phpt index f89a620b..71b0b582 100644 --- a/test/pdo_sqlsrv/pdo_set_attr_invalid_encoding.phpt +++ b/test/pdo_sqlsrv/pdo_set_attr_invalid_encoding.phpt @@ -8,25 +8,25 @@ Test setting invalid encoding attributes require_once("autonomous_setup.php"); try{ -$database = "tempdb"; -$dsn = "sqlsrv:Server = $serverName; Database = $database"; + $database = "tempdb"; + $dsn = "sqlsrv:Server = $serverName; Database = $database"; -$conn = new PDO( $dsn, $username, $password, array(PDO::ATTR_ERRMODE => PDO::ERRMODE_SILENT)); + $conn = new PDO( $dsn, $username, $password, array(PDO::ATTR_ERRMODE => PDO::ERRMODE_SILENT)); -// valid option: should have no error -@$conn->setAttribute( PDO::SQLSRV_ATTR_ENCODING, PDO::SQLSRV_ENCODING_DEFAULT ); -print_r (($conn->errorInfo())[2]); -echo "\n"; + // valid option: should have no error + @$conn->setAttribute( PDO::SQLSRV_ATTR_ENCODING, PDO::SQLSRV_ENCODING_DEFAULT ); + print_r (($conn->errorInfo())[2]); + echo "\n"; -// PDO::SQLSRV_ENCODING_UTF8 should not be quoted -@$conn->setAttribute( PDO::SQLSRV_ATTR_ENCODING, "PDO::SQLSRV_ENCODING_UTF8" ); -print_r (($conn->errorInfo())[2]); -echo "\n"; + // PDO::SQLSRV_ENCODING_UTF8 should not be quoted + @$conn->setAttribute( PDO::SQLSRV_ATTR_ENCODING, "PDO::SQLSRV_ENCODING_UTF8" ); + print_r (($conn->errorInfo())[2]); + echo "\n"; -// PDO::SQLSRV_ENCODING_BINARY is not supported -@$conn->setAttribute( PDO::SQLSRV_ATTR_ENCODING, PDO::SQLSRV_ENCODING_BINARY ); -print_r (($conn->errorInfo())[2]); -echo "\n"; + // PDO::SQLSRV_ENCODING_BINARY is not supported + @$conn->setAttribute( PDO::SQLSRV_ATTR_ENCODING, PDO::SQLSRV_ENCODING_BINARY ); + print_r (($conn->errorInfo())[2]); + echo "\n"; } catch ( PDOException $e ){ exit; diff --git a/test/pdo_sqlsrv/pdo_warnings.phpt b/test/pdo_sqlsrv/pdo_warnings.phpt index 5fbbb625..c87d51a1 100644 --- a/test/pdo_sqlsrv/pdo_warnings.phpt +++ b/test/pdo_sqlsrv/pdo_warnings.phpt @@ -4,6 +4,7 @@ Test warnings on connection and statement levels --FILE-- errorInfo ); + exit; +} ?> --EXPECTREGEX-- Warning: SQLSTATE: IMSSP From 6f84d3642dd69a3b91344a6909fc3376eb767321 Mon Sep 17 00:00:00 2001 From: v-kaywon Date: Wed, 12 Apr 2017 12:25:40 -0700 Subject: [PATCH 33/40] fix indentations and comments --- .../pdostatement_bindcolumn_odd_types.phpt | 24 +++++++++---------- .../pdo_sqlsrv/pdostatement_get_set_attr.phpt | 4 ---- 2 files changed, 12 insertions(+), 16 deletions(-) diff --git a/test/pdo_sqlsrv/pdostatement_bindcolumn_odd_types.phpt b/test/pdo_sqlsrv/pdostatement_bindcolumn_odd_types.phpt index 4fb2258a..1be5e3a6 100644 --- a/test/pdo_sqlsrv/pdostatement_bindcolumn_odd_types.phpt +++ b/test/pdo_sqlsrv/pdostatement_bindcolumn_odd_types.phpt @@ -8,17 +8,17 @@ require_once("autonomous_setup.php"); try { - $conn = new PDO( "sqlsrv:Server=$serverName; Database = tempdb ", $username, $password); + $conn = new PDO( "sqlsrv:Server=$serverName; Database = tempdb ", $username, $password); $conn->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION ); - $conn->exec("IF OBJECT_ID('temptb', 'U') IS NOT NULL DROP TABLE temptb"); - $conn->exec("CREATE TABLE temptb(IntCol INT, CharCol NVARCHAR(20)) "); - $conn->exec("INSERT INTO temptb (IntCol, CharCol) VALUES (10, 'ten')"); + $conn->exec("IF OBJECT_ID('table1', 'U') IS NOT NULL DROP TABLE table1"); + $conn->exec("CREATE TABLE table1(IntCol INT, CharCol NVARCHAR(20)) "); + $conn->exec("INSERT INTO table1 (IntCol, CharCol) VALUES (10, 'ten')"); - $stmt = $conn->prepare("SELECT IntCol FROM temptb"); - $stmt->execute(); + $stmt = $conn->prepare("SELECT IntCol FROM table1"); + $stmt->execute(); // PARAM_NULL returns null - $stmt->bindColumn('IntCol', $intCol, PDO::PARAM_NULL); + $stmt->bindColumn('IntCol', $intCol, PDO::PARAM_NULL); $row = $stmt->fetch(PDO::FETCH_BOUND); if ($intCol == NULL) { echo "intCol is NULL\n"; @@ -26,18 +26,18 @@ try echo "intCol should have been NULL\n"; } - $stmt = $conn->prepare("SELECT CharCol FROM temptb"); - $stmt->execute(); + $stmt = $conn->prepare("SELECT CharCol FROM table1"); + $stmt->execute(); - // PARAM_STMT is not support and should throw an exception - $stmt->bindColumn('CharCol', $charCol, PDO::PARAM_STMT); + // PARAM_STMT is not supported and should throw an exception + $stmt->bindColumn('CharCol', $charCol, PDO::PARAM_STMT); $row = $stmt->fetch(PDO::FETCH_BOUND); echo "PARAM_STMT should have thrown an exception\n"; } catch (PDOException $e) { - print_r($e->errorInfo[2]); + print_r($e->errorInfo[2]); echo "\n"; } diff --git a/test/pdo_sqlsrv/pdostatement_get_set_attr.phpt b/test/pdo_sqlsrv/pdostatement_get_set_attr.phpt index 5013b753..b155ba77 100644 --- a/test/pdo_sqlsrv/pdostatement_get_set_attr.phpt +++ b/test/pdo_sqlsrv/pdostatement_get_set_attr.phpt @@ -116,10 +116,6 @@ require_once("autonomous_setup.php"); echo "Test6 - Set stmt option: SQLSRV_ATTR_ENCODING \n"; set_stmt_option($conn, array(PDO::SQLSRV_ATTR_ENCODING => 3)); - $attr = "PDO::ATTR_CURSOR"; - $stmt = set_stmt_attr($conn, $attr, 1); - get_stmt_attr($stmt, $attr); - $attr = "PDO::SQLSRV_ATTR_QUERY_TIMEOUT"; $stmt = set_stmt_attr($conn, $attr, 45); get_stmt_attr($stmt, $attr); From 2966956f03b146973e655bf4a1bf0d65b15fd1b1 Mon Sep 17 00:00:00 2001 From: v-kaywon Date: Wed, 12 Apr 2017 12:28:09 -0700 Subject: [PATCH 34/40] fix indentation in pdostatement_get_set_attr.phpt --- .../pdo_sqlsrv/pdostatement_get_set_attr.phpt | 202 +++++++++--------- 1 file changed, 98 insertions(+), 104 deletions(-) diff --git a/test/pdo_sqlsrv/pdostatement_get_set_attr.phpt b/test/pdo_sqlsrv/pdostatement_get_set_attr.phpt index b155ba77..b3a17fa2 100644 --- a/test/pdo_sqlsrv/pdostatement_get_set_attr.phpt +++ b/test/pdo_sqlsrv/pdostatement_get_set_attr.phpt @@ -7,135 +7,135 @@ Test setting and getting various statement attributes. require_once("autonomous_setup.php"); - function set_stmt_option($conn, $arr) - { - try { +function set_stmt_option($conn, $arr) +{ + try { - $stmt = $conn->prepare( "Select * from temptb", $arr ); - return $stmt; - } + $stmt = $conn->prepare( "Select * from temptb", $arr ); + return $stmt; + } - catch( PDOException $e) + catch( PDOException $e) { - echo $e->getMessage() . "\n\n"; - return NULL; + echo $e->getMessage() . "\n\n"; + return NULL; } - } +} - function set_stmt_attr($conn, $attr, $val) - { - $stmt = NULL; - try - { - echo "Set Attribute: " . $attr . "\n"; - $stmt = $conn->prepare( "Select * from temptb"); - } - catch( PDOException $e) +function set_stmt_attr($conn, $attr, $val) +{ + $stmt = NULL; + try { - echo $e->getMessage() . "\n\n"; - return NULL; + echo "Set Attribute: " . $attr . "\n"; + $stmt = $conn->prepare( "Select * from temptb"); + } + catch( PDOException $e) + { + echo $e->getMessage() . "\n\n"; + return NULL; } try { - $res = $stmt->setAttribute(constant($attr), $val); - var_dump($res); - echo "\n\n"; - } + $res = $stmt->setAttribute(constant($attr), $val); + var_dump($res); + echo "\n\n"; + } - catch( PDOException $e) + catch( PDOException $e) { - echo $e->getMessage() . "\n\n"; + echo $e->getMessage() . "\n\n"; } return $stmt; - } +} - function get_stmt_attr($stmt, $attr) - { - try - { - echo "Get Attribute: " . $attr. "\n"; - $res = $stmt->getAttribute(constant($attr)); - var_dump($res); - echo "\n"; - } - - catch( PDOException $e) +function get_stmt_attr($stmt, $attr) +{ + try { - echo $e->getMessage() . "\n\n"; + echo "Get Attribute: " . $attr. "\n"; + $res = $stmt->getAttribute(constant($attr)); + var_dump($res); + echo "\n"; + } + + catch( PDOException $e) + { + echo $e->getMessage() . "\n\n"; } - } +} // valid function Test1($conn) - { - echo "Test1 - Set stmt option: SQLSRV_ATTR_ENCODING, ATTR_CURSOR, SQLSRV_ATTR_QUERY_TIMEOUT \n"; - set_stmt_option($conn, array(PDO::SQLSRV_ATTR_ENCODING => 3, PDO::ATTR_CURSOR => PDO::CURSOR_FWDONLY, PDO::SQLSRV_ATTR_QUERY_TIMEOUT => 44)); - echo "Test Successful\n\n"; - } +{ + echo "Test1 - Set stmt option: SQLSRV_ATTR_ENCODING, ATTR_CURSOR, SQLSRV_ATTR_QUERY_TIMEOUT \n"; + set_stmt_option($conn, array(PDO::SQLSRV_ATTR_ENCODING => 3, PDO::ATTR_CURSOR => PDO::CURSOR_FWDONLY, PDO::SQLSRV_ATTR_QUERY_TIMEOUT => 44)); + echo "Test Successful\n\n"; +} - // invalid - function Test2($conn) - { - echo "Test2 - Set stmt option: 'QueryTimeout' \n"; - set_stmt_option($conn, array("QueryTimeout" => 44 )); - } +// invalid +function Test2($conn) +{ + echo "Test2 - Set stmt option: 'QueryTimeout' \n"; + set_stmt_option($conn, array("QueryTimeout" => 44 )); +} - // valid attributes - function Test3($conn) - { - echo "Test3 \n"; - $attr = "PDO::ATTR_CURSOR"; - $stmt = set_stmt_attr($conn, $attr, 1); - if($stmt) - get_stmt_attr($stmt, $attr); - else - echo "Test3: stmt was null"; - } +// valid attributes +function Test3($conn) +{ + echo "Test3 \n"; + $attr = "PDO::ATTR_CURSOR"; + $stmt = set_stmt_attr($conn, $attr, 1); + if($stmt) + get_stmt_attr($stmt, $attr); + else + echo "Test3: stmt was null"; +} - // not supported attribute - function Test4($conn) - { - echo "Test4 \n"; - $attr = "PDO::ATTR_SERVER_VERSION"; - $stmt = set_stmt_attr($conn, $attr, "whatever"); - get_stmt_attr($stmt, $attr); - } +// not supported attribute +function Test4($conn) +{ + echo "Test4 \n"; + $attr = "PDO::ATTR_SERVER_VERSION"; + $stmt = set_stmt_attr($conn, $attr, "whatever"); + get_stmt_attr($stmt, $attr); +} - // not supported attribute value - function Test5($conn) - { - echo "Test5 \n"; - $attr = "PDO::ATTR_CURSOR"; - $stmt = set_stmt_attr($conn, $attr, 3); - get_stmt_attr($stmt, $attr); - } +// not supported attribute value +function Test5($conn) +{ + echo "Test5 \n"; + $attr = "PDO::ATTR_CURSOR"; + $stmt = set_stmt_attr($conn, $attr, 3); + get_stmt_attr($stmt, $attr); +} - // valid GET/SET attribute and set option - function Test6($conn) - { - echo "Test6 - Set stmt option: SQLSRV_ATTR_ENCODING \n"; - set_stmt_option($conn, array(PDO::SQLSRV_ATTR_ENCODING => 3)); +// valid GET/SET attribute and set option +function Test6($conn) +{ + echo "Test6 - Set stmt option: SQLSRV_ATTR_ENCODING \n"; + set_stmt_option($conn, array(PDO::SQLSRV_ATTR_ENCODING => 3)); - $attr = "PDO::SQLSRV_ATTR_QUERY_TIMEOUT"; - $stmt = set_stmt_attr($conn, $attr, 45); - get_stmt_attr($stmt, $attr); + $attr = "PDO::SQLSRV_ATTR_QUERY_TIMEOUT"; + $stmt = set_stmt_attr($conn, $attr, 45); + get_stmt_attr($stmt, $attr); - } +} try { - $conn = new PDO( "sqlsrv:Server=$serverName; Database = tempdb ", $username, $password); - $conn->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION ); - $conn->exec("IF OBJECT_ID('temptb', 'U') IS NOT NULL DROP TABLE temptb"); - $conn->exec("CREATE TABLE temptb(id INT NOT NULL PRIMARY KEY, val VARCHAR(10)) "); + $conn = new PDO( "sqlsrv:Server=$serverName; Database = tempdb ", $username, $password); + $conn->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION ); + $conn->exec("IF OBJECT_ID('temptb', 'U') IS NOT NULL DROP TABLE temptb"); + $conn->exec("CREATE TABLE temptb(id INT NOT NULL PRIMARY KEY, val VARCHAR(10)) "); - test1($conn); - test2($conn); - test3($conn); - test4($conn); - test5($conn); - test6($conn); + test1($conn); + test2($conn); + test3($conn); + test4($conn); + test5($conn); + test6($conn); } @@ -176,12 +176,6 @@ Get Attribute: PDO::ATTR_CURSOR int\(0\) Test6 - Set stmt option: SQLSRV_ATTR_ENCODING -Set Attribute: PDO::ATTR_CURSOR -SQLSTATE\[IMSSP\]: The PDO::ATTR_CURSOR and PDO::SQLSRV_ATTR_CURSOR_SCROLL_TYPE attributes may only be set in the \$driver_options array of PDO::prepare. - -Get Attribute: PDO::ATTR_CURSOR -int\(0\) - Set Attribute: PDO::SQLSRV_ATTR_QUERY_TIMEOUT bool\(true\) From 733ac45497b223b268aa862664ba484e839b675f Mon Sep 17 00:00:00 2001 From: v-kaywon Date: Thu, 13 Apr 2017 09:28:24 -0700 Subject: [PATCH 35/40] fix spacing in pdo_commit.phpt --- test/pdo_sqlsrv/pdo_commit.phpt | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/test/pdo_sqlsrv/pdo_commit.phpt b/test/pdo_sqlsrv/pdo_commit.phpt index d89ded4d..f44ffd36 100644 --- a/test/pdo_sqlsrv/pdo_commit.phpt +++ b/test/pdo_sqlsrv/pdo_commit.phpt @@ -30,9 +30,8 @@ starts a transaction, delete rows and commit the transaction $conn->exec("DROP TABLE Table1 "); //free statement and connection - $ret=NULL; $stmt = NULL; - $conn=NULL; + $conn = NULL; ?> --EXPECT-- 2 rows affected From 0d4a2573d4c53adc6ee7afaf27dd11e857d6eb4e Mon Sep 17 00:00:00 2001 From: v-kaywon Date: Thu, 13 Apr 2017 09:33:44 -0700 Subject: [PATCH 36/40] merge pdo_commit and pdo_rollback and renamed to pdo_transaction.phpt --- test/pdo_sqlsrv/pdo_commit.phpt | 38 ------------------- ...pdo_rollback.phpt => pdo_transaction.phpt} | 23 ++++++++--- 2 files changed, 18 insertions(+), 43 deletions(-) delete mode 100644 test/pdo_sqlsrv/pdo_commit.phpt rename test/pdo_sqlsrv/{pdo_rollback.phpt => pdo_transaction.phpt} (62%) diff --git a/test/pdo_sqlsrv/pdo_commit.phpt b/test/pdo_sqlsrv/pdo_commit.phpt deleted file mode 100644 index f44ffd36..00000000 --- a/test/pdo_sqlsrv/pdo_commit.phpt +++ /dev/null @@ -1,38 +0,0 @@ ---TEST-- -starts a transaction, delete rows and commit the transaction ---SKIPIF-- - ---FILE-- -exec("IF OBJECT_ID('Table1', 'U') IS NOT NULL DROP TABLE Table1"); - $conn->exec("CREATE TABLE Table1(col1 CHARACTER(1), col2 CHARACTER(1)) "); - - $ret = $conn->exec("insert into Table1(col1, col2) values('a', 'b') "); - $ret = $conn->exec("insert into Table1(col1, col2) values('a', 'c') "); - - //revert the inserts - $conn->beginTransaction(); - $rows = $conn->exec("delete from Table1 where col1 = 'a'"); - $conn->commit(); - echo $rows." rows affected\n"; - - $stmt = $conn->query("select * from Table1"); - if ( count( $stmt->fetchAll() ) == 0 ) - echo "Transaction committed successfully\n"; - else - echo "Transaction failed to commit\n"; - - //drop the created temp table - $conn->exec("DROP TABLE Table1 "); - - //free statement and connection - $stmt = NULL; - $conn = NULL; -?> ---EXPECT-- -2 rows affected -Transaction committed successfully \ No newline at end of file diff --git a/test/pdo_sqlsrv/pdo_rollback.phpt b/test/pdo_sqlsrv/pdo_transaction.phpt similarity index 62% rename from test/pdo_sqlsrv/pdo_rollback.phpt rename to test/pdo_sqlsrv/pdo_transaction.phpt index 2ef5d345..9ea26f48 100644 --- a/test/pdo_sqlsrv/pdo_rollback.phpt +++ b/test/pdo_sqlsrv/pdo_transaction.phpt @@ -14,9 +14,9 @@ starts a transaction, delete rows and rollback the transaction $ret = $conn->exec("insert into Table1(col1, col2) values('a', 'b') "); $ret = $conn->exec("insert into Table1(col1, col2) values('a', 'c') "); - //revert the inserts + //revert the inserts but roll back $conn->beginTransaction(); - $ret = $conn->exec("delete from Table1 where col1 = 'a'"); + $rows = $conn->exec("delete from Table1 where col1 = 'a'"); $conn->rollback(); $stmt = $conn->query("SELECT * FROM Table1"); @@ -25,14 +25,27 @@ starts a transaction, delete rows and rollback the transaction echo "Transaction rolled back successfully\n"; else echo "Transaction failed to roll back\n"; + + //revert the inserts then commit + $conn->beginTransaction(); + $rows = $conn->exec("delete from Table1 where col1 = 'a'"); + $conn->commit(); + echo $rows." rows affected\n"; + + $stmt = $conn->query("select * from Table1"); + if ( count( $stmt->fetchAll() ) == 0 ) + echo "Transaction committed successfully\n"; + else + echo "Transaction failed to commit\n"; //drop the created temp table $conn->exec("DROP TABLE Table1 "); //free statement and connection - $ret=NULL; $stmt = NULL; - $conn=NULL; + $conn = NULL; ?> --EXPECT-- -Transaction rolled back successfully \ No newline at end of file +Transaction rolled back successfully +2 rows affected +Transaction committed successfully \ No newline at end of file From 18d26338ad3683b5977579e91aad432f161ed5c8 Mon Sep 17 00:00:00 2001 From: v-kaywon Date: Thu, 13 Apr 2017 13:00:54 -0700 Subject: [PATCH 37/40] change test description in pdo_transaction.phpt --- test/pdo_sqlsrv/pdo_transaction.phpt | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/test/pdo_sqlsrv/pdo_transaction.phpt b/test/pdo_sqlsrv/pdo_transaction.phpt index 9ea26f48..28d395ce 100644 --- a/test/pdo_sqlsrv/pdo_transaction.phpt +++ b/test/pdo_sqlsrv/pdo_transaction.phpt @@ -1,5 +1,6 @@ --TEST-- -starts a transaction, delete rows and rollback the transaction +starts a transaction, delete rows and rollback the transaction then +starts a transaction, delete rows and commit --SKIPIF-- --FILE-- @@ -9,14 +10,14 @@ starts a transaction, delete rows and rollback the transaction $conn = new PDO( "sqlsrv:Server=$serverName; Database = tempdb ", $username, $password); $conn->exec("IF OBJECT_ID('Table1', 'U') IS NOT NULL DROP TABLE Table1"); - $conn->exec("CREATE TABLE Table1(col1 CHARACTER(1), col2 CHARACTER(1)) "); + $conn->exec("CREATE TABLE Table1(col1 CHARACTER(1), col2 CHARACTER(1))"); - $ret = $conn->exec("insert into Table1(col1, col2) values('a', 'b') "); - $ret = $conn->exec("insert into Table1(col1, col2) values('a', 'c') "); + $ret = $conn->exec("INSERT INTO Table1(col1, col2) VALUES('a', 'b')"); + $ret = $conn->exec("INSERT INTO Table1(col1, col2) VALUES('a', 'c')"); //revert the inserts but roll back $conn->beginTransaction(); - $rows = $conn->exec("delete from Table1 where col1 = 'a'"); + $rows = $conn->exec("DELETE FROM Table1 WHERE col1 = 'a'"); $conn->rollback(); $stmt = $conn->query("SELECT * FROM Table1"); @@ -28,18 +29,18 @@ starts a transaction, delete rows and rollback the transaction //revert the inserts then commit $conn->beginTransaction(); - $rows = $conn->exec("delete from Table1 where col1 = 'a'"); + $rows = $conn->exec("DELETE FROM Table1 WHERE col1 = 'a'"); $conn->commit(); echo $rows." rows affected\n"; - $stmt = $conn->query("select * from Table1"); + $stmt = $conn->query("SELECT * FROM Table1"); if ( count( $stmt->fetchAll() ) == 0 ) echo "Transaction committed successfully\n"; else echo "Transaction failed to commit\n"; //drop the created temp table - $conn->exec("DROP TABLE Table1 "); + $conn->exec("DROP TABLE Table1"); //free statement and connection $stmt = NULL; From bdd8f35a4a34198aa81871c02c645b2e35ae1f41 Mon Sep 17 00:00:00 2001 From: v-kaywon Date: Thu, 13 Apr 2017 13:27:41 -0700 Subject: [PATCH 39/40] fix spacing in pdo_transaction --- test/pdo_sqlsrv/pdo_transaction.phpt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/pdo_sqlsrv/pdo_transaction.phpt b/test/pdo_sqlsrv/pdo_transaction.phpt index 28d395ce..724b0628 100644 --- a/test/pdo_sqlsrv/pdo_transaction.phpt +++ b/test/pdo_sqlsrv/pdo_transaction.phpt @@ -7,7 +7,7 @@ starts a transaction, delete rows and commit exec("IF OBJECT_ID('Table1', 'U') IS NOT NULL DROP TABLE Table1"); $conn->exec("CREATE TABLE Table1(col1 CHARACTER(1), col2 CHARACTER(1))"); From fb7e7bf65b7a67c72d905fb06c133e4fdd427bab Mon Sep 17 00:00:00 2001 From: v-kaywon Date: Thu, 13 Apr 2017 14:01:45 -0700 Subject: [PATCH 40/40] fix test description in pdo_transaction.phpt --- test/pdo_sqlsrv/pdo_transaction.phpt | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/test/pdo_sqlsrv/pdo_transaction.phpt b/test/pdo_sqlsrv/pdo_transaction.phpt index 724b0628..87332715 100644 --- a/test/pdo_sqlsrv/pdo_transaction.phpt +++ b/test/pdo_sqlsrv/pdo_transaction.phpt @@ -1,6 +1,5 @@ --TEST-- -starts a transaction, delete rows and rollback the transaction then -starts a transaction, delete rows and commit +starts a transaction, delete rows and rollback the transaction; starts a transaction, delete rows and commit --SKIPIF-- --FILE--