From 1168c306359b2b763274bf2d1fbf21ade775ebcb Mon Sep 17 00:00:00 2001 From: Christopher Kings-Lynne Date: Sat, 19 Mar 2005 08:46:56 +0000 Subject: Added several new functions to support the PostgreSQL v3 protocol introduced in PostgreSQL 7.4. (PHP pg_transaction_status) New function to get in-transaction status of a database connection. (PHP pg_query_params) New function to allow execution of parameterized queries. (PHP pg_prepare) New function to allow preparing named queries. (PHP pg_execute) New function to allow execution of named prepared queries. (PHP pg_send_query_params) New function that is the async equivalent of pg_query_params. (PHP pg_send_prepare) New function that is the async equivalent of pg_prepare. (PHP pg_send_execute) New function that is the async equivalent of pg_execute. (PHP pg_result_error_field) New function that allows highly detailed error information, most importantly the SQLSTATE error code # Regression tests are included for all but 2 functions, the rest will # follow shortly. Docs will also follow shortly. --- ext/pgsql/tests/23sync_query_params.phpt | 53 +++++++++++++++ ext/pgsql/tests/24sync_query_prepared.phpt | 59 +++++++++++++++++ ext/pgsql/tests/25async_query_params.phpt | 63 ++++++++++++++++++ ext/pgsql/tests/26async_query_prepared.phpt | 99 +++++++++++++++++++++++++++++ 4 files changed, 274 insertions(+) create mode 100644 ext/pgsql/tests/23sync_query_params.phpt create mode 100644 ext/pgsql/tests/24sync_query_prepared.phpt create mode 100644 ext/pgsql/tests/25async_query_params.phpt create mode 100644 ext/pgsql/tests/26async_query_prepared.phpt (limited to 'ext/pgsql/tests') diff --git a/ext/pgsql/tests/23sync_query_params.phpt b/ext/pgsql/tests/23sync_query_params.phpt new file mode 100644 index 0000000000..db1cfb24f9 --- /dev/null +++ b/ext/pgsql/tests/23sync_query_params.phpt @@ -0,0 +1,53 @@ +--TEST-- +PostgreSQL sync query params +--SKIPIF-- + +--FILE-- + \$1;", array(100)); +if (!($rows = pg_num_rows($result))) +{ + echo "pg_num_row() error\n"; +} +for ($i=0; $i < $rows; $i++) +{ + pg_fetch_array($result, $i, PGSQL_NUM); +} +for ($i=0; $i < $rows; $i++) +{ + pg_fetch_object($result); +} +for ($i=0; $i < $rows; $i++) +{ + pg_fetch_row($result, $i); +} +for ($i=0; $i < $rows; $i++) +{ + pg_fetch_result($result, $i, 0); +} + +pg_result_error($result); +pg_num_rows(pg_query_params($db, "SELECT * FROM ".$table_name." WHERE num > \$1;", array(100))); +pg_num_fields(pg_query_params($db, "SELECT * FROM ".$table_name." WHERE num > \$1;", array(100))); +pg_field_name($result, 0); +pg_field_num($result, $field_name); +pg_field_size($result, 0); +pg_field_type($result, 0); +pg_field_prtlen($result, 0); +pg_field_is_null($result, 0); + +$result = pg_query_params($db, "INSERT INTO ".$table_name." VALUES (\$1, \$2);", array(9999, "A'BC")); +pg_last_oid($result); + +pg_free_result($result); +pg_close($db); + +echo "OK"; +?> +--EXPECT-- +OK diff --git a/ext/pgsql/tests/24sync_query_prepared.phpt b/ext/pgsql/tests/24sync_query_prepared.phpt new file mode 100644 index 0000000000..273353b6df --- /dev/null +++ b/ext/pgsql/tests/24sync_query_prepared.phpt @@ -0,0 +1,59 @@ +--TEST-- +PostgreSQL sync prepared queries +--SKIPIF-- + +--FILE-- + \$1;"); +pg_result_error($result); +pg_free_result($result); +$result = pg_execute($db, "php_test", array(100)); +if (!($rows = pg_num_rows($result))) +{ + echo "pg_num_row() error\n"; +} +for ($i=0; $i < $rows; $i++) +{ + pg_fetch_array($result, $i, PGSQL_NUM); +} +for ($i=0; $i < $rows; $i++) +{ + pg_fetch_object($result); +} +for ($i=0; $i < $rows; $i++) +{ + pg_fetch_row($result, $i); +} +for ($i=0; $i < $rows; $i++) +{ + pg_fetch_result($result, $i, 0); +} + +pg_result_error($result); +pg_num_rows(pg_execute($db, "php_test", array(100))); +pg_num_fields(pg_execute($db, "php_test", array(100))); +pg_field_name($result, 0); +pg_field_num($result, $field_name); +pg_field_size($result, 0); +pg_field_type($result, 0); +pg_field_prtlen($result, 0); +pg_field_is_null($result, 0); + +$result = pg_prepare($db, "php_test2", "INSERT INTO ".$table_name." VALUES (\$1, \$2);"); +pg_result_error($result); +pg_free_result($result); +$result = pg_execute($db, "php_test2", array(9999, "A'BC")); +pg_last_oid($result); + +pg_free_result($result); +pg_close($db); + +echo "OK"; +?> +--EXPECT-- +OK diff --git a/ext/pgsql/tests/25async_query_params.phpt b/ext/pgsql/tests/25async_query_params.phpt new file mode 100644 index 0000000000..2d0edbb724 --- /dev/null +++ b/ext/pgsql/tests/25async_query_params.phpt @@ -0,0 +1,63 @@ +--TEST-- +PostgreSQL async query params +--SKIPIF-- + +--FILE-- + \$1;", array(100))) { + echo "pg_send_query_params() error\n"; +} +while(pg_connection_busy($db)); // busy wait: intended +if (pg_connection_status($db) === PGSQL_CONNECTION_BAD) { + echo "pg_connection_status() error\n"; +} +if (!($result = pg_get_result($db))) +{ + echo "pg_get_result() error\n"; +} +if (!($rows = pg_num_rows($result))) { + echo "pg_num_rows() error\n"; +} +for ($i=0; $i < $rows; $i++) +{ + pg_fetch_array($result, $i, PGSQL_NUM); +} +for ($i=0; $i < $rows; $i++) +{ + pg_fetch_object($result); +} +for ($i=0; $i < $rows; $i++) +{ + pg_fetch_row($result, $i); +} +for ($i=0; $i < $rows; $i++) +{ + pg_fetch_result($result, $i, 0); +} + +pg_num_rows(pg_query_params($db, "SELECT * FROM ".$table_name." WHERE num > \$1;", array(100))); +pg_num_fields(pg_query_params($db, "SELECT * FROM ".$table_name." WHERE num > \$1;", array(100))); +pg_field_name($result, 0); +pg_field_num($result, $field_name); +pg_field_size($result, 0); +pg_field_type($result, 0); +pg_field_prtlen($result, 0); +pg_field_is_null($result, 0); + +if (!pg_send_query_params($db, "INSERT INTO ".$table_name." VALUES (\$1, \$2);", array(9999, "A'BC"))) +{ + echo "pg_send_query_params() error\n"; +} + +pg_last_oid($result); +pg_free_result($result); + +echo "OK"; +?> +--EXPECT-- +OK diff --git a/ext/pgsql/tests/26async_query_prepared.phpt b/ext/pgsql/tests/26async_query_prepared.phpt new file mode 100644 index 0000000000..84945be323 --- /dev/null +++ b/ext/pgsql/tests/26async_query_prepared.phpt @@ -0,0 +1,99 @@ +--TEST-- +PostgreSQL async prepared queries +--SKIPIF-- + +--FILE-- + \$1;")) { + echo "pg_send_prepare() error\n"; +} +while(pg_connection_busy($db)); // busy wait: intended +if (pg_connection_status($db) === PGSQL_CONNECTION_BAD) { + echo "pg_connection_status() error\n"; +} +if (!($result = pg_get_result($db))) +{ + echo "pg_get_result() error\n"; +} +pg_free_result($result); + +if (!pg_send_execute($db, 'php_test', array(100))) { + echo "pg_send_execute() error\n"; +} +while(pg_connection_busy($db)); // busy wait: intended +if (pg_connection_status($db) === PGSQL_CONNECTION_BAD) { + echo "pg_connection_status() error\n"; +} +if (!($result = pg_get_result($db))) +{ + echo "pg_get_result() error\n"; +} + +if (!($rows = pg_num_rows($result))) { + echo "pg_num_rows() error\n"; +} +for ($i=0; $i < $rows; $i++) +{ + pg_fetch_array($result, $i, PGSQL_NUM); +} +for ($i=0; $i < $rows; $i++) +{ + pg_fetch_object($result); +} +for ($i=0; $i < $rows; $i++) +{ + pg_fetch_row($result, $i); +} +for ($i=0; $i < $rows; $i++) +{ + pg_fetch_result($result, $i, 0); +} + +pg_num_rows(pg_query_params($db, "SELECT * FROM ".$table_name." WHERE num > \$1;", array(100))); +pg_num_fields(pg_query_params($db, "SELECT * FROM ".$table_name." WHERE num > \$1;", array(100))); +pg_field_name($result, 0); +pg_field_num($result, $field_name); +pg_field_size($result, 0); +pg_field_type($result, 0); +pg_field_prtlen($result, 0); +pg_field_is_null($result, 0); + +if (!pg_send_prepare($db, "php_test2", "INSERT INTO ".$table_name." VALUES (\$1, \$2);")) +{ + echo "pg_send_prepare() error\n"; +} +while(pg_connection_busy($db)); // busy wait: intended +if (pg_connection_status($db) === PGSQL_CONNECTION_BAD) { + echo "pg_connection_status() error\n"; +} +if (!($result = pg_get_result($db))) +{ + echo "pg_get_result() error\n"; +} +pg_free_result($result); + +if (!pg_send_execute($db, "php_test2", array(9999, "A'BC"))) +{ + echo "pg_send_execute() error\n"; +} +while(pg_connection_busy($db)); // busy wait: intended +if (pg_connection_status($db) === PGSQL_CONNECTION_BAD) { + echo "pg_connection_status() error\n"; +} +if (!($result = pg_get_result($db))) +{ + echo "pg_get_result() error\n"; +} + +pg_last_oid($result); +pg_free_result($result); + +echo "OK"; +?> +--EXPECT-- +OK -- cgit v1.2.1