diff options
Diffstat (limited to 'ext/pgsql/tests')
56 files changed, 2490 insertions, 0 deletions
diff --git a/ext/pgsql/tests/01createdb.phpt b/ext/pgsql/tests/01createdb.phpt new file mode 100644 index 0000000..1584939 --- /dev/null +++ b/ext/pgsql/tests/01createdb.phpt @@ -0,0 +1,28 @@ +--TEST-- +PostgreSQL create db +--SKIPIF-- +<?php include("skipif.inc"); ?> +--FILE-- +<?php +// create test table + +include('config.inc'); + +$db = pg_connect($conn_str); +if (!@pg_num_rows(@pg_query($db, "SELECT * FROM ".$table_name))) +{ + @pg_query($db,$table_def); // Create table here + for ($i=0; $i < $num_test_record; $i++) { + pg_query($db,"INSERT INTO ".$table_name." VALUES ($i, 'ABC');"); + } +} +else { + echo pg_last_error()."\n"; +} + +pg_close($db); + +echo "OK"; +?> +--EXPECT-- +OK diff --git a/ext/pgsql/tests/02connection.phpt b/ext/pgsql/tests/02connection.phpt new file mode 100644 index 0000000..234427b --- /dev/null +++ b/ext/pgsql/tests/02connection.phpt @@ -0,0 +1,59 @@ +--TEST-- +PostgreSQL connection +--SKIPIF-- +<?php include("skipif.inc"); ?> +--FILE-- +<?php +// connection function tests + +include('config.inc'); + +$db = pg_pconnect($conn_str); +var_dump($db); + +if (pg_connection_status($db) != PGSQL_CONNECTION_OK) +{ + echo "pg_connection_status() error\n"; +} +if (!pg_connection_reset($db)) +{ + echo "pg_connection_reset() error\n"; +} +if (pg_connection_busy($db)) +{ + echo "pg_connection_busy() error\n"; +} +if (function_exists('pg_transaction_status')) { + if (pg_transaction_status($db) != PGSQL_TRANSACTION_IDLE) + { + echo "pg_transaction_status() error\n"; + } +} +if (false === pg_host($db)) +{ + echo "pg_host() error\n"; +} +if (!pg_dbname($db)) +{ + echo "pg_dbname() error\n"; +} +if (!pg_port($db)) +{ + echo "pg_port() error\n"; +} +if (pg_tty($db)) +{ + echo "pg_tty() error\n"; +} +if (pg_options($db)) +{ + echo "pg_options() error\n"; +} + +pg_close($db); + +?> +===DONE=== +--EXPECTF-- +resource(%d) of type (pgsql link%s) +===DONE=== diff --git a/ext/pgsql/tests/03sync_query.phpt b/ext/pgsql/tests/03sync_query.phpt new file mode 100644 index 0000000..afb6bb4 --- /dev/null +++ b/ext/pgsql/tests/03sync_query.phpt @@ -0,0 +1,73 @@ +--TEST-- +PostgreSQL sync query +--SKIPIF-- +<?php include("skipif.inc"); ?> +--FILE-- +<?php + +include('config.inc'); + +$db = pg_connect($conn_str); + +$result = pg_query($db, "SELECT * FROM ".$table_name.";"); +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); +if (function_exists('pg_result_error_field')) { + pg_result_error_field($result, PGSQL_DIAG_SEVERITY); + pg_result_error_field($result, PGSQL_DIAG_SQLSTATE); + pg_result_error_field($result, PGSQL_DIAG_MESSAGE_PRIMARY); + pg_result_error_field($result, PGSQL_DIAG_MESSAGE_DETAIL); + pg_result_error_field($result, PGSQL_DIAG_MESSAGE_HINT); + pg_result_error_field($result, PGSQL_DIAG_STATEMENT_POSITION); + if (defined('PGSQL_DIAG_INTERNAL_POSITION')) + { + pg_result_error_field($result, PGSQL_DIAG_INTERNAL_POSITION); + } + if (defined('PGSQL_DIAG_INTERNAL_QUERY')) + { + pg_result_error_field($result, PGSQL_DIAG_INTERNAL_QUERY); + } + pg_result_error_field($result, PGSQL_DIAG_CONTEXT); + pg_result_error_field($result, PGSQL_DIAG_SOURCE_FILE); + pg_result_error_field($result, PGSQL_DIAG_SOURCE_LINE); + pg_result_error_field($result, PGSQL_DIAG_SOURCE_FUNCTION); +} +pg_num_rows(pg_query($db, "SELECT * FROM ".$table_name.";")); +pg_num_fields(pg_query($db, "SELECT * FROM ".$table_name.";")); +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($db, "INSERT INTO ".$table_name." VALUES (9999, 'ABC');"); +pg_last_oid($result); + +pg_free_result($result); +pg_close($db); + +echo "OK"; +?> +--EXPECT-- +OK diff --git a/ext/pgsql/tests/04async_query.phpt b/ext/pgsql/tests/04async_query.phpt new file mode 100644 index 0000000..7711240 --- /dev/null +++ b/ext/pgsql/tests/04async_query.phpt @@ -0,0 +1,65 @@ +--TEST-- +PostgreSQL async query +--SKIPIF-- +<?php include("skipif.inc"); ?> +--FILE-- +<?php + +include('config.inc'); + +$db = pg_connect($conn_str); + +if (!pg_send_query($db, "SELECT * FROM ".$table_name.";")) { + echo "pg_send_query() 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($db, "SELECT * FROM ".$table_name.";")); +pg_num_fields(pg_query($db, "SELECT * FROM ".$table_name.";")); +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($db, "INSERT INTO ".$table_name." VALUES (8888, 'GGG');")) +{ + echo "pg_send_query() error\n"; +} + +pg_last_oid($result); +pg_free_result($result); + + +echo "OK"; +?> +--EXPECT-- +OK diff --git a/ext/pgsql/tests/05large_object.phpt b/ext/pgsql/tests/05large_object.phpt new file mode 100644 index 0000000..a6f3019 --- /dev/null +++ b/ext/pgsql/tests/05large_object.phpt @@ -0,0 +1,82 @@ +--TEST-- +PostgreSQL large object +--SKIPIF-- +<?php include("skipif.inc"); ?> +--FILE-- +<?php + +include('config.inc'); + +$db = pg_connect($conn_str); + +echo "create/write/close LO\n"; +pg_exec ($db, "begin"); +$oid = pg_lo_create ($db); +if (!$oid) echo ("pg_lo_create() error\n"); +$handle = pg_lo_open ($db, $oid, "w"); +if (!$handle) echo ("pg_lo_open() error\n"); +pg_lo_write ($handle, "large object data\n"); +pg_lo_close ($handle); +pg_exec ($db, "commit"); + +echo "open/read/tell/seek/close LO\n"; +pg_exec ($db, "begin"); +$handle = pg_lo_open ($db, $oid, "w"); +pg_lo_read($handle, 100); +pg_lo_tell($handle); +pg_lo_seek($handle, 2); +pg_lo_close($handle); +pg_exec ($db, "commit"); + +echo "open/read_all/close LO\n"; +pg_exec ($db, "begin"); +$handle = pg_lo_open ($db, $oid, "w"); +pg_lo_read_all($handle); +if (pg_last_error()) echo "pg_lo_read_all() error\n".pg_last_error(); +pg_lo_close($handle); +pg_exec ($db, "commit"); + +echo "unlink LO\n"; +pg_exec ($db, "begin"); +pg_lo_unlink($db, $oid) or print("pg_lo_unlink() error 1\n"); +pg_exec ($db, "commit"); + +// more pg_lo_unlink() tests +echo "Test without connection\n"; +pg_exec ($db, "begin"); +$oid = pg_lo_create ($db) or print("pg_lo_create() error\n"); +pg_lo_unlink($oid) or print("pg_lo_unlink() error 2\n"); +pg_exec ($db, "commit"); + +echo "Test with string oid value\n"; +pg_exec ($db, "begin"); +$oid = pg_lo_create ($db) or print("pg_lo_create() error\n"); +pg_lo_unlink($db, (string)$oid) or print("pg_lo_unlink() error 3\n"); +pg_exec ($db, "commit"); + +echo "import/export LO\n"; +$path = dirname(__FILE__) . '/'; +pg_query($db, 'begin'); +$oid = pg_lo_import($db, $path . 'php.gif'); +pg_query($db, 'commit'); +pg_query($db, 'begin'); +@unlink($path . 'php.gif.exported'); +pg_lo_export($oid, $path . 'php.gif.exported', $db); +if (!file_exists($path . 'php.gif.exported')) { + echo "Export failed\n"; +} +@unlink($path . 'php.gif.exported'); +pg_query($db, 'commit'); + +echo "OK"; +?> +--EXPECT-- +create/write/close LO +open/read/tell/seek/close LO +open/read_all/close LO +large object data +unlink LO +Test without connection +Test with string oid value +import/export LO +OK diff --git a/ext/pgsql/tests/06copy.phpt b/ext/pgsql/tests/06copy.phpt new file mode 100644 index 0000000..bed783a --- /dev/null +++ b/ext/pgsql/tests/06copy.phpt @@ -0,0 +1,22 @@ +--TEST-- +PostgreSQL copy functions +--SKIPIF-- +<?php include("skipif.inc"); ?> +--FILE-- +<?php + +include('config.inc'); + +$db = pg_connect($conn_str); + +$rows = pg_copy_to($db, $table_name); + +pg_query($db, "DELETE FROM $table_name"); + +pg_copy_from($db, $table_name, $rows); + +echo "OK"; + +?> +--EXPECT-- +OK diff --git a/ext/pgsql/tests/07optional.phpt b/ext/pgsql/tests/07optional.phpt new file mode 100644 index 0000000..9fa6f16 --- /dev/null +++ b/ext/pgsql/tests/07optional.phpt @@ -0,0 +1,24 @@ +--TEST-- +PostgreSQL optional functions +--SKIPIF-- +<?php include("skipif.inc"); ?> +--FILE-- +<?php +// optional functions + +include('config.inc'); + +$db = pg_connect($conn_str); +$enc = pg_client_encoding($db); + +pg_set_client_encoding($db, $enc); + +if (function_exists('pg_set_error_verbosity')) { + pg_set_error_verbosity(PGSQL_ERRORS_TERSE); + pg_set_error_verbosity(PGSQL_ERRORS_DEFAULT); + pg_set_error_verbosity(PGSQL_ERRORS_VERBOSE); +} +echo "OK"; +?> +--EXPECT-- +OK diff --git a/ext/pgsql/tests/08escape.phpt b/ext/pgsql/tests/08escape.phpt new file mode 100644 index 0000000..90b4ed8 --- /dev/null +++ b/ext/pgsql/tests/08escape.phpt @@ -0,0 +1,95 @@ +--TEST-- +PostgreSQL escape functions +--SKIPIF-- +<?php include("skipif.inc"); ?> +--FILE-- +<?php + +include 'config.inc'; +define('FILE_NAME', dirname(__FILE__) . '/php.gif'); + +// pg_escape_string() test +$before = "ABC\\ABC\'"; +$expect = "ABC\\\\ABC\\'"; +$expect2 = "ABC\\\\ABC\\\\''"; //the way escape string differs from PostgreSQL 9.0 +$after = pg_escape_string($before); +if ($expect === $after || $expect2 === $after) { + echo "pg_escape_string() is Ok\n"; +} +else { + echo "pg_escape_string() is NOT Ok\n"; + var_dump($before); + var_dump($after); + var_dump($expect); +} + +// pg_escape_bytea() test +$before = "ABC\\ABC"; +$expect = "ABC\\\\\\\\ABC"; +$after = pg_escape_bytea($before); +if ($expect === $after) { + echo "pg_escape_bytea() is Ok\n"; +} +else { + echo "pg_escape_byte() is NOT Ok\n"; + var_dump($before); + var_dump($after); + var_dump($expect); +} + +// Test using database +$data = file_get_contents(FILE_NAME); +$db = pg_connect($conn_str); + +// Insert binary to DB +$escaped_data = pg_escape_bytea($data); +pg_query("DELETE FROM ".$table_name." WHERE num = -9999;"); +$sql = "INSERT INTO ".$table_name." (num, bin) VALUES (-9999, CAST ('".$escaped_data."' AS BYTEA));"; +pg_query($db, $sql); + +// Retrieve binary from DB +$sql = "SELECT bin::bytea FROM ".$table_name." WHERE num = -9999"; +$result = pg_query($db, $sql); +$row = pg_fetch_array($result, 0, PGSQL_ASSOC); + +if ($data === pg_unescape_bytea($row['bin'])) { + echo "pg_escape_bytea() actually works with database\n"; +} +else { + echo "pg_escape_bytea() is broken\n"; +} + +// pg_escape_literal/pg_escape_identifier +$before = "ABC\\ABC\'"; +$expect = " E'ABC\\\\ABC\\\\'''"; +$after = pg_escape_literal($before); +if ($expect === $after) { + echo "pg_escape_literal() is Ok\n"; +} +else { + echo "pg_escape_literal() is NOT Ok\n"; + var_dump($before); + var_dump($after); + var_dump($expect); +} + +$before = "ABC\\ABC\'"; +$expect = "\"ABC\ABC\'\""; +$after = pg_escape_identifier($before); +if ($expect === $after) { + echo "pg_escape_identifier() is Ok\n"; +} +else { + echo "pg_escape_identifier() is NOT Ok\n"; + var_dump($before); + var_dump($after); + var_dump($expect); +} + +?> +--EXPECT-- +pg_escape_string() is Ok +pg_escape_bytea() is Ok +pg_escape_bytea() actually works with database +pg_escape_literal() is Ok +pg_escape_identifier() is Ok
\ No newline at end of file diff --git a/ext/pgsql/tests/09notice.phpt b/ext/pgsql/tests/09notice.phpt new file mode 100644 index 0000000..3167069 --- /dev/null +++ b/ext/pgsql/tests/09notice.phpt @@ -0,0 +1,38 @@ +--TEST-- +PostgreSQL notice function +--SKIPIF-- +<?php + +include("skipif.inc"); + +_skip_lc_messages(); + +?> +--INI-- +pgsql.log_notice=1 +pgsql.ignore_notices=0 +--FILE-- +<?php +include 'config.inc'; +include 'lcmess.inc'; + +$db = pg_connect($conn_str); + +_set_lc_messages(); + +pg_query($db, "BEGIN;"); +pg_query($db, "BEGIN;"); + +$msg = pg_last_notice($db); +if ($msg === FALSE) { + echo "Cannot find notice message in hash\n"; + var_dump($msg); +} +echo $msg."\n"; +echo "pg_last_notice() is Ok\n"; + +?> +--EXPECTF-- +Notice: pg_query(): %s already a transaction in progress in %s on line %d +%s already a transaction in progress +pg_last_notice() is Ok diff --git a/ext/pgsql/tests/10pg_convert.phpt b/ext/pgsql/tests/10pg_convert.phpt new file mode 100644 index 0000000..73bf2b6 --- /dev/null +++ b/ext/pgsql/tests/10pg_convert.phpt @@ -0,0 +1,29 @@ +--TEST-- +PostgreSQL pg_convert() +--SKIPIF-- +<?php +include("skipif.inc"); +skip_server_version('8.5dev', '>='); +?> +--FILE-- +<?php +error_reporting(E_ALL); + +include 'config.inc'; + +$db = pg_connect($conn_str); + +$fields = array('num'=>'1234', 'str'=>'AAA', 'bin'=>'BBB'); +$converted = pg_convert($db, $table_name, $fields); + +var_dump($converted); +?> +--EXPECT-- +array(3) { + ["num"]=> + string(4) "1234" + ["str"]=> + string(5) "'AAA'" + ["bin"]=> + string(5) "'BBB'" +} diff --git a/ext/pgsql/tests/10pg_convert_85.phpt b/ext/pgsql/tests/10pg_convert_85.phpt new file mode 100644 index 0000000..4f1c92b --- /dev/null +++ b/ext/pgsql/tests/10pg_convert_85.phpt @@ -0,0 +1,29 @@ +--TEST-- +PostgreSQL pg_convert() (8.5+) +--SKIPIF-- +<?php +include("skipif.inc"); +skip_server_version('8.5dev', '<'); +?> +--FILE-- +<?php +error_reporting(E_ALL); + +include 'config.inc'; + +$db = pg_connect($conn_str); + +$fields = array('num'=>'1234', 'str'=>'AAA', 'bin'=>'BBB'); +$converted = pg_convert($db, $table_name, $fields); + +var_dump($converted); +?> +--EXPECT-- +array(3) { + ["num"]=> + string(4) "1234" + ["str"]=> + string(5) "'AAA'" + ["bin"]=> + string(11) "'\\x424242'" +} diff --git a/ext/pgsql/tests/11pg_meta_data.phpt b/ext/pgsql/tests/11pg_meta_data.phpt new file mode 100644 index 0000000..a7f8ed4 --- /dev/null +++ b/ext/pgsql/tests/11pg_meta_data.phpt @@ -0,0 +1,64 @@ +--TEST-- +PostgreSQL pg_metadata() +--SKIPIF-- +<?php include("skipif.inc"); ?> +--FILE-- +<?php +error_reporting(E_ALL); + +include 'config.inc'; + +$db = pg_connect($conn_str); + +$meta = pg_meta_data($db, $table_name); + +var_dump($meta); +?> +--EXPECT-- +array(3) { + ["num"]=> + array(6) { + ["num"]=> + int(1) + ["type"]=> + string(4) "int4" + ["len"]=> + int(4) + ["not null"]=> + bool(false) + ["has default"]=> + bool(false) + ["array dims"]=> + int(0) + } + ["str"]=> + array(6) { + ["num"]=> + int(2) + ["type"]=> + string(4) "text" + ["len"]=> + int(-1) + ["not null"]=> + bool(false) + ["has default"]=> + bool(false) + ["array dims"]=> + int(0) + } + ["bin"]=> + array(6) { + ["num"]=> + int(3) + ["type"]=> + string(5) "bytea" + ["len"]=> + int(-1) + ["not null"]=> + bool(false) + ["has default"]=> + bool(false) + ["array dims"]=> + int(0) + } +} diff --git a/ext/pgsql/tests/12pg_insert.phpt b/ext/pgsql/tests/12pg_insert.phpt new file mode 100644 index 0000000..f5cd868 --- /dev/null +++ b/ext/pgsql/tests/12pg_insert.phpt @@ -0,0 +1,24 @@ +--TEST-- +PostgreSQL pg_insert() +--SKIPIF-- +<?php +include("skipif.inc"); +skip_server_version('8.5dev', '>='); +?> +--FILE-- +<?php +error_reporting(E_ALL); + +include 'config.inc'; + +$db = pg_connect($conn_str); +$fields = array('num'=>'1234', 'str'=>'AAA', 'bin'=>'BBB'); + +pg_insert($db, $table_name, $fields) or print "Error in test 1\n"; +echo pg_insert($db, $table_name, $fields, PGSQL_DML_STRING)."\n"; + +echo "Ok\n"; +?> +--EXPECT-- +INSERT INTO php_pgsql_test (num,str,bin) VALUES (1234,'AAA','BBB'); +Ok diff --git a/ext/pgsql/tests/12pg_insert_85.phpt b/ext/pgsql/tests/12pg_insert_85.phpt new file mode 100644 index 0000000..a85dea0 --- /dev/null +++ b/ext/pgsql/tests/12pg_insert_85.phpt @@ -0,0 +1,24 @@ +--TEST-- +PostgreSQL pg_insert() (8.5+) +--SKIPIF-- +<?php +include("skipif.inc"); +skip_server_version('8.5dev', '<'); +?> +--FILE-- +<?php +error_reporting(E_ALL); + +include 'config.inc'; + +$db = pg_connect($conn_str); +$fields = array('num'=>'1234', 'str'=>'AAA', 'bin'=>'BBB'); + +pg_insert($db, $table_name, $fields) or print "Error in test 1\n"; +echo pg_insert($db, $table_name, $fields, PGSQL_DML_STRING)."\n"; + +echo "Ok\n"; +?> +--EXPECT-- +INSERT INTO php_pgsql_test (num,str,bin) VALUES (1234,'AAA','\\x424242'); +Ok diff --git a/ext/pgsql/tests/13pg_select.phpt b/ext/pgsql/tests/13pg_select.phpt new file mode 100644 index 0000000..f1504a8 --- /dev/null +++ b/ext/pgsql/tests/13pg_select.phpt @@ -0,0 +1,37 @@ +--TEST-- +PostgreSQL pg_select() +--SKIPIF-- +<?php +include("skipif.inc"); +skip_server_version('8.5dev', '>='); +?> +--FILE-- +<?php +error_reporting(E_ALL); + +include 'config.inc'; + +$db = pg_connect($conn_str); +$fields = array('num'=>'1234', 'str'=>'ABC', 'bin'=>'XYZ'); +$ids = array('num'=>'1234'); + +$res = pg_select($db, $table_name, $ids) or print "Error\n"; +var_dump($res); +echo pg_select($db, $table_name, $ids, PGSQL_DML_STRING)."\n"; +echo "Ok\n"; + +?> +--EXPECT-- +array(1) { + [0]=> + array(3) { + ["num"]=> + string(4) "1234" + ["str"]=> + string(3) "AAA" + ["bin"]=> + string(3) "BBB" + } +} +SELECT * FROM php_pgsql_test WHERE num=1234; +Ok diff --git a/ext/pgsql/tests/13pg_select_85.phpt b/ext/pgsql/tests/13pg_select_85.phpt new file mode 100644 index 0000000..e6d86bd --- /dev/null +++ b/ext/pgsql/tests/13pg_select_85.phpt @@ -0,0 +1,37 @@ +--TEST-- +PostgreSQL pg_select() (8.5+) +--SKIPIF-- +<?php +include("skipif.inc"); +skip_server_version('8.5dev', '<'); +?> +--FILE-- +<?php +error_reporting(E_ALL); + +include 'config.inc'; + +$db = pg_connect($conn_str); +$fields = array('num'=>'1234', 'str'=>'ABC', 'bin'=>'XYZ'); +$ids = array('num'=>'1234'); + +$res = pg_select($db, $table_name, $ids) or print "Error\n"; +var_dump($res); +echo pg_select($db, $table_name, $ids, PGSQL_DML_STRING)."\n"; +echo "Ok\n"; + +?> +--EXPECT-- +array(1) { + [0]=> + array(3) { + ["num"]=> + string(4) "1234" + ["str"]=> + string(3) "AAA" + ["bin"]=> + string(8) "\x424242" + } +} +SELECT * FROM php_pgsql_test WHERE num=1234; +Ok diff --git a/ext/pgsql/tests/14pg_update.phpt b/ext/pgsql/tests/14pg_update.phpt new file mode 100644 index 0000000..b41dd1a --- /dev/null +++ b/ext/pgsql/tests/14pg_update.phpt @@ -0,0 +1,25 @@ +--TEST-- +PostgreSQL pg_update() +--SKIPIF-- +<?php +include("skipif.inc"); +skip_server_version('8.5dev', '>='); +?> +--FILE-- +<?php +error_reporting(E_ALL); + +include 'config.inc'; + +$db = pg_connect($conn_str); +$fields = array('num'=>'1234', 'str'=>'ABC', 'bin'=>'XYZ'); +$ids = array('num'=>'1234'); + +pg_update($db, $table_name, $fields, $ids) or print "Error in test 1\n"; +echo pg_update($db, $table_name, $fields, $ids, PGSQL_DML_STRING)."\n"; + +echo "Ok\n"; +?> +--EXPECT-- +UPDATE php_pgsql_test SET num=1234,str='ABC',bin='XYZ' WHERE num=1234; +Ok diff --git a/ext/pgsql/tests/14pg_update_85.phpt b/ext/pgsql/tests/14pg_update_85.phpt new file mode 100644 index 0000000..f1c77ea --- /dev/null +++ b/ext/pgsql/tests/14pg_update_85.phpt @@ -0,0 +1,25 @@ +--TEST-- +PostgreSQL pg_update() (8.5+) +--SKIPIF-- +<?php +include("skipif.inc"); +skip_server_version('8.5dev', '<'); +?> +--FILE-- +<?php +error_reporting(E_ALL); + +include 'config.inc'; + +$db = pg_connect($conn_str); +$fields = array('num'=>'1234', 'str'=>'ABC', 'bin'=>'XYZ'); +$ids = array('num'=>'1234'); + +pg_update($db, $table_name, $fields, $ids) or print "Error in test 1\n"; +echo pg_update($db, $table_name, $fields, $ids, PGSQL_DML_STRING)."\n"; + +echo "Ok\n"; +?> +--EXPECT-- +UPDATE php_pgsql_test SET num=1234,str='ABC',bin='\\x58595a' WHERE num=1234; +Ok diff --git a/ext/pgsql/tests/15pg_delete.phpt b/ext/pgsql/tests/15pg_delete.phpt new file mode 100644 index 0000000..e35f4ba --- /dev/null +++ b/ext/pgsql/tests/15pg_delete.phpt @@ -0,0 +1,23 @@ +--TEST-- +PostgreSQL pg_delete() +--SKIPIF-- +<?php include("skipif.inc"); ?> +--FILE-- +<?php +error_reporting(E_ALL); + +include 'config.inc'; + +$db = pg_connect($conn_str); + +$fields = array('num'=>'1234', 'str'=>'XXX', 'bin'=>'YYY'); +$ids = array('num'=>'1234'); +if (!pg_delete($db, $table_name, $ids)) { + echo "Error\n"; +} +else { + echo "Ok\n"; +} +?> +--EXPECT-- +Ok diff --git a/ext/pgsql/tests/16pg_result_status.phpt b/ext/pgsql/tests/16pg_result_status.phpt new file mode 100644 index 0000000..268dc9f --- /dev/null +++ b/ext/pgsql/tests/16pg_result_status.phpt @@ -0,0 +1,19 @@ +--TEST-- +PostgreSQL pg_result_status() +--SKIPIF-- +<?php include("skipif.inc"); ?> +--FILE-- +<?php +include 'config.inc'; + +$db = pg_connect($conn_str); + +$sql = "SELECT * FROM ".$table_name." WHERE num = -2"; +$result = pg_query($db, "BEGIN;END"); + +echo pg_result_status($result)."\n"; +echo pg_result_status($result, PGSQL_STATUS_STRING)."\n"; +?> +--EXPECT-- +1 +COMMIT diff --git a/ext/pgsql/tests/17result.phpt b/ext/pgsql/tests/17result.phpt new file mode 100644 index 0000000..c3f9959 --- /dev/null +++ b/ext/pgsql/tests/17result.phpt @@ -0,0 +1,67 @@ +--TEST-- +PostgreSQL pg_fetch_*() functions +--SKIPIF-- +<?php include("skipif.inc"); ?> +--FILE-- +<?php +error_reporting(E_ALL); + +include 'config.inc'; + +$db = pg_connect($conn_str); + +$sql = "SELECT * FROM $table_name"; +$result = pg_query($db, $sql) or die('Cannot qeury db'); +$rows = pg_num_rows($result); + +var_dump(pg_result_seek($result, 1)); +var_dump(pg_fetch_object($result)); +var_dump(pg_fetch_array($result, 1)); +var_dump(pg_fetch_row($result, 1)); +var_dump(pg_fetch_assoc($result, 1)); +var_dump(pg_result_seek($result, 0)); + +echo "Ok\n"; +?> +--EXPECT-- +bool(true) +object(stdClass)#1 (3) { + ["num"]=> + string(1) "1" + ["str"]=> + string(3) "ABC" + ["bin"]=> + NULL +} +array(6) { + [0]=> + string(1) "1" + ["num"]=> + string(1) "1" + [1]=> + string(3) "ABC" + ["str"]=> + string(3) "ABC" + [2]=> + NULL + ["bin"]=> + NULL +} +array(3) { + [0]=> + string(1) "1" + [1]=> + string(3) "ABC" + [2]=> + NULL +} +array(3) { + ["num"]=> + string(1) "1" + ["str"]=> + string(3) "ABC" + ["bin"]=> + NULL +} +bool(true) +Ok diff --git a/ext/pgsql/tests/18pg_escape_bytea.phpt b/ext/pgsql/tests/18pg_escape_bytea.phpt new file mode 100644 index 0000000..43f98c4 --- /dev/null +++ b/ext/pgsql/tests/18pg_escape_bytea.phpt @@ -0,0 +1,28 @@ +--TEST-- +PostgreSQL pg_escape_bytea() functions +--SKIPIF-- +<?php include("skipif.inc"); ?> +--FILE-- +<?php +// optional functions + +include('config.inc'); + +$image = file_get_contents(dirname(__FILE__) . '/php.gif'); +$esc_image = pg_escape_bytea($image); + +$db = pg_connect($conn_str); +pg_query($db, 'INSERT INTO '.$table_name.' (num, bin) VALUES (9876, \''.$esc_image.'\');'); +$result = pg_query($db, 'SELECT * FROM '.$table_name.' WHERE num = 9876'); +$rows = pg_fetch_all($result); +$unesc_image = pg_unescape_bytea($rows[0]['bin']); + +if ($unesc_image !== $image) { + echo "NG"; +} +else { + echo "OK"; +} +?> +--EXPECT-- +OK diff --git a/ext/pgsql/tests/19pg_ping.phpt b/ext/pgsql/tests/19pg_ping.phpt new file mode 100644 index 0000000..9059bde --- /dev/null +++ b/ext/pgsql/tests/19pg_ping.phpt @@ -0,0 +1,15 @@ +--TEST-- +PostgreSQL pg_ping() functions +--SKIPIF-- +<?php include("skipif.inc"); ?> +--FILE-- +<?php +// optional functions + +include('config.inc'); + +$db = pg_connect($conn_str); +var_dump(pg_ping($db)); +?> +--EXPECT-- +bool(true) diff --git a/ext/pgsql/tests/20pg_get_pid.phpt b/ext/pgsql/tests/20pg_get_pid.phpt new file mode 100644 index 0000000..06cdfa8 --- /dev/null +++ b/ext/pgsql/tests/20pg_get_pid.phpt @@ -0,0 +1,17 @@ +--TEST-- +PostgreSQL pg_get_pid() functions +--SKIPIF-- +<?php include("skipif.inc"); ?> +--FILE-- +<?php +// optional functions + +include('config.inc'); + +$db = pg_connect($conn_str); +$pid = pg_get_pid($db); + +is_integer($pid) ? print 'OK' : print 'NG'; +?> +--EXPECT-- +OK diff --git a/ext/pgsql/tests/21pg_get_notify.phpt b/ext/pgsql/tests/21pg_get_notify.phpt new file mode 100644 index 0000000..9171fc0 --- /dev/null +++ b/ext/pgsql/tests/21pg_get_notify.phpt @@ -0,0 +1,20 @@ +--TEST-- +PostgreSQL pg_get_notify() functions +--SKIPIF-- +<?php include("skipif.inc"); ?> +--FILE-- +<?php +// optional functions + +include('config.inc'); + +$db = pg_connect($conn_str); +pg_query($db, 'LISTEN test_msg'); +pg_query($db, 'NOTIFY test_msg'); + +$msg = pg_get_notify($db); + +isset($msg['message'],$msg['pid']) ? print 'OK' : print 'NG'; +?> +--EXPECT-- +OK diff --git a/ext/pgsql/tests/22pg_fetch_object.phpt b/ext/pgsql/tests/22pg_fetch_object.phpt new file mode 100644 index 0000000..76a3fbe --- /dev/null +++ b/ext/pgsql/tests/22pg_fetch_object.phpt @@ -0,0 +1,37 @@ +--TEST-- +PostgreSQL pg_fetch_object() +--SKIPIF-- +<?php include("skipif.inc"); ?> +--FILE-- +<?php +error_reporting(E_ALL); + +include 'config.inc'; + +class test_class { + function __construct($arg1, $arg2) { + echo __METHOD__ . "($arg1,$arg2)\n"; + } +} + +$db = pg_connect($conn_str); + +$sql = "SELECT * FROM $table_name WHERE num = 0"; +$result = pg_query($db, $sql) or die('Cannot qeury db'); +$rows = pg_num_rows($result); + +var_dump(pg_fetch_object($result, NULL, 'test_class', array(1, 2))); + +echo "Ok\n"; +?> +--EXPECT-- +test_class::__construct(1,2) +object(test_class)#1 (3) { + ["num"]=> + string(1) "0" + ["str"]=> + string(3) "ABC" + ["bin"]=> + NULL +} +Ok diff --git a/ext/pgsql/tests/23sync_query_params.phpt b/ext/pgsql/tests/23sync_query_params.phpt new file mode 100644 index 0000000..6959cd7 --- /dev/null +++ b/ext/pgsql/tests/23sync_query_params.phpt @@ -0,0 +1,59 @@ +--TEST-- +PostgreSQL sync query params +--SKIPIF-- +<?php +include("skipif.inc"); +if (!function_exists('pg_query_params')) die('skip function pg_query_params() does not exist'); +?> +--FILE-- +<?php + +include('config.inc'); + +$db = pg_connect($conn_str); + +$version = pg_version($db); +if ($version['protocol'] >= 3) { + $result = pg_query_params($db, "SELECT * FROM ".$table_name." WHERE num > \$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 0000000..ea8f146 --- /dev/null +++ b/ext/pgsql/tests/24sync_query_prepared.phpt @@ -0,0 +1,65 @@ +--TEST-- +PostgreSQL sync prepared queries +--SKIPIF-- +<?php +include("skipif.inc"); +if (!function_exists('pg_prepare')) die('skip function pg_prepare() does not exist'); +?> +--FILE-- +<?php + +include('config.inc'); + +$db = pg_connect($conn_str); + +$version = pg_version($db); +if ($version['protocol'] >= 3) { + $result = pg_prepare($db, "php_test", "SELECT * FROM ".$table_name." WHERE num > \$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 0000000..6e7dafe --- /dev/null +++ b/ext/pgsql/tests/25async_query_params.phpt @@ -0,0 +1,70 @@ +--TEST-- +PostgreSQL async query params +--SKIPIF-- +<?php +include("skipif.inc"); +if (!function_exists('pg_send_query_params')) die('skip function pg_send_query_params() does not exist'); +?> +--FILE-- +<?php + +include('config.inc'); + +$db = pg_connect($conn_str); + +$version = pg_version($db); +if ($version['protocol'] >= 3) { + if (!pg_send_query_params($db, "SELECT * FROM ".$table_name." WHERE num > \$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); +} +pg_close($db); + +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 0000000..bda363b --- /dev/null +++ b/ext/pgsql/tests/26async_query_prepared.phpt @@ -0,0 +1,106 @@ +--TEST-- +PostgreSQL async prepared queries +--SKIPIF-- +<?php +include("skipif.inc"); +if (!function_exists('pg_send_prepare')) die('skip function pg_send_prepare() does not exist'); +?> +--FILE-- +<?php + +include('config.inc'); + +$db = pg_connect($conn_str); + +$version = pg_version($db); +if ($version['protocol'] >= 3) { + if (!pg_send_prepare($db, 'php_test', "SELECT * FROM ".$table_name." WHERE num > \$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); +} +pg_close($db); + +echo "OK"; +?> +--EXPECT-- +OK diff --git a/ext/pgsql/tests/27large_object_oid.phpt b/ext/pgsql/tests/27large_object_oid.phpt new file mode 100644 index 0000000..0a469bc --- /dev/null +++ b/ext/pgsql/tests/27large_object_oid.phpt @@ -0,0 +1,47 @@ +--TEST-- +PostgreSQL create large object with given oid +--SKIPIF-- +<?php +include("skipif.inc"); +$v = pg_version($conn); +if (version_compare("8.3", $v["client"]) > 0) die("skip - requires pg client >= 8.3\n"); +if (version_compare("8.3", $v["server"]) > 0) die("skip - requires pg server >= 8.3\n"); +?> +--FILE-- +<?php + +include('config.inc'); + +$db = pg_connect($conn_str); + +echo "create LO from int\n"; +pg_exec ($db, "begin"); +$oid = pg_lo_create ($db, 21000); +if (!$oid) echo ("pg_lo_create() error\n"); +if ($oid != 21000) echo ("pg_lo_create() wrong id\n"); +pg_lo_unlink ($db, $oid); +pg_exec ($db, "commit"); + +echo "create LO from string\n"; +pg_exec ($db, "begin"); +$oid = pg_lo_create ($db, "21001"); +if (!$oid) echo ("pg_lo_create() error\n"); +if ($oid != 21001) echo ("pg_lo_create() wrong id\n"); +pg_lo_unlink ($db, $oid); +pg_exec ($db, "commit"); + +echo "create LO using default connection\n"; +pg_exec ("begin"); +$oid = pg_lo_create (21002); +if (!$oid) echo ("pg_lo_create() error\n"); +if ($oid != 21002) echo ("pg_lo_create() wrong id\n"); +pg_lo_unlink ($oid); +pg_exec ("commit"); + +echo "OK"; +?> +--EXPECT-- +create LO from int +create LO from string +create LO using default connection +OK diff --git a/ext/pgsql/tests/28large_object_import_oid.phpt b/ext/pgsql/tests/28large_object_import_oid.phpt new file mode 100644 index 0000000..323d179 --- /dev/null +++ b/ext/pgsql/tests/28large_object_import_oid.phpt @@ -0,0 +1,48 @@ +--TEST-- +PostgreSQL import large object with given oid +--SKIPIF-- +<?php +include("skipif.inc"); +$v = pg_version($conn); +if (version_compare("8.4devel", $v["client"]) > 0) die("skip - requires pg client >= 8.4\n"); +if (version_compare("8.4devel", $v["server"]) > 0) die("skip - requires pg server >= 8.4\n"); +?> +--FILE-- +<?php + +include('config.inc'); + +$db = pg_connect($conn_str); + +echo "import LO from int\n"; +pg_exec($db, 'begin'); +$oid = pg_lo_import($db, __FILE__, 21003); +if (!$oid) echo ("pg_lo_import() error\n"); +if ($oid != 21003) echo ("pg_lo_import() wrong id\n"); +pg_lo_unlink ($db, $oid); +pg_exec($db, 'commit'); + +echo "import LO from string\n"; +pg_exec($db, 'begin'); +$oid = pg_lo_import($db, __FILE__, "21004"); +if (!$oid) echo ("pg_lo_import() error\n"); +if ($oid != 21004) echo ("pg_lo_import() wrong id\n"); +pg_lo_unlink ($db, $oid); +pg_exec($db, 'commit'); + +echo "import LO using default connection\n"; +pg_exec('begin'); +$oid = pg_lo_import($db, __FILE__, 21005); +if (!$oid) echo ("pg_lo_import() error\n"); +if ($oid != 21005) echo ("pg_lo_import() wrong id\n"); +pg_lo_unlink ($oid); +pg_exec('commit'); + + +echo "OK"; +?> +--EXPECT-- +import LO from int +import LO from string +import LO using default connection +OK diff --git a/ext/pgsql/tests/80_bug14383.phpt b/ext/pgsql/tests/80_bug14383.phpt new file mode 100644 index 0000000..a736f34 --- /dev/null +++ b/ext/pgsql/tests/80_bug14383.phpt @@ -0,0 +1,52 @@ +--TEST-- +Bug #14383 (using postgres with DBA causes DBA not to be able to find any keys) +--SKIPIF-- +<?php +require_once(dirname(__FILE__).'/../../dba/tests/skipif.inc'); +require_once('skipif.inc'); +?> +--FILE-- +<?php +require_once('config.inc'); + +$dbh = @pg_connect($conn_str); +if (!$dbh) { + die ("Could not connect to the server"); +} +pg_close($dbh); + +require_once(dirname(__FILE__).'/../../dba/tests/test.inc'); +require_once(dirname(__FILE__).'/../../dba/tests/dba_handler.inc'); + +?> +--EXPECTF-- +database handler: %s +3NYNYY +Content String 2 +Content 2 replaced +Read during write:%sallowed +Content 2 replaced 2nd time +The 6th value +array(3) { + ["key number 6"]=> + string(13) "The 6th value" + ["key2"]=> + string(27) "Content 2 replaced 2nd time" + ["key5"]=> + string(23) "The last content string" +} +--NO-LOCK-- +3NYNYY +Content String 2 +Content 2 replaced +Read during write: not allowed +Content 2 replaced 2nd time +The 6th value +array(3) { + ["key number 6"]=> + string(13) "The 6th value" + ["key2"]=> + string(27) "Content 2 replaced 2nd time" + ["key5"]=> + string(23) "The last content string" +} diff --git a/ext/pgsql/tests/80_bug24499.phpt b/ext/pgsql/tests/80_bug24499.phpt new file mode 100644 index 0000000..32e789d --- /dev/null +++ b/ext/pgsql/tests/80_bug24499.phpt @@ -0,0 +1,66 @@ +--TEST-- +Bug #24499 (Notice: Undefined property: stdClass::) +--SKIPIF-- +<?php +require_once('skipif.inc'); +?> +--FILE-- +<?php + +require_once('config.inc'); + +$dbh = @pg_connect($conn_str); +if (!$dbh) { + die ("Could not connect to the server"); +} + +@pg_query("DROP SEQUENCE id_id_seq"); +@pg_query("DROP TABLE id"); +pg_query("CREATE TABLE id (id SERIAL, t INT)"); + +for ($i=0; $i<4; $i++) { + pg_query("INSERT INTO id (t) VALUES ($i)"); +} + +class Id +{ + public $id; + + public function getId() + { + global $dbh; + + $q = pg_query($dbh, "SELECT id FROM id"); + print_r(pg_fetch_array($q)); + print_r(pg_fetch_array($q)); + $id = pg_fetch_object($q); + var_dump($id); + return $id->id; + } +} + +$id = new Id(); +var_dump($id->getId()); + +pg_close($dbh); + +echo "Done\n"; + +?> +--EXPECTF-- +Array +( + [0] => 1 + [id] => 1 +) +Array +( + [0] => 2 + [id] => 2 +) +object(stdClass)#%d (1) { + ["id"]=> + string(1) "3" +} +string(1) "3" +Done diff --git a/ext/pgsql/tests/80_bug27597.phpt b/ext/pgsql/tests/80_bug27597.phpt new file mode 100644 index 0000000..7d5b5db --- /dev/null +++ b/ext/pgsql/tests/80_bug27597.phpt @@ -0,0 +1,60 @@ +--TEST-- +Bug #27597 (pg_fetch_array not returning false) +--SKIPIF-- +<?php +require_once('skipif.inc'); +?> +--FILE-- +<?php + +require_once(dirname(__FILE__) . '/config.inc'); + +$dbh = @pg_connect($conn_str); +if (!$dbh) { + die ("Could not connect to the server"); +} + +@pg_query("DROP TABLE id"); +pg_query("CREATE TABLE id (id INT)"); + +for ($i=0; $i<4; $i++) { + pg_query("INSERT INTO id (id) VALUES ($i)"); +} + +function xi_fetch_array($res, $type = PGSQL_ASSOC) { + $a = pg_fetch_array($res, NULL, $type) ; + return $a ; +} + +$res = pg_query("SELECT * FROM id"); +$i = 0; // endless-loop protection +while($row = xi_fetch_array($res)) { + print_r($row); + if ($i++ > 4) { + echo "ENDLESS-LOOP"; + exit(1); + } +} + +pg_close($dbh); + +?> +===DONE=== +--EXPECTF-- +Array +( + [id] => 0 +) +Array +( + [id] => 1 +) +Array +( + [id] => 2 +) +Array +( + [id] => 3 +) +===DONE=== diff --git a/ext/pgsql/tests/80_bug32223.phpt b/ext/pgsql/tests/80_bug32223.phpt new file mode 100644 index 0000000..573742c --- /dev/null +++ b/ext/pgsql/tests/80_bug32223.phpt @@ -0,0 +1,58 @@ +--TEST-- +Bug #32223 (weird behaviour of pg_last_notice) +--SKIPIF-- +<?php +require_once('skipif.inc'); + +_skip_lc_messages(); + +@pg_query($conn, "CREATE LANGUAGE 'plpgsql' HANDLER plpgsql_call_handler LANCOMPILER 'PL/pgSQL'"); +$res = @pg_query($conn, "CREATE OR REPLACE FUNCTION test_notice() RETURNS boolean AS ' +begin + RAISE NOTICE ''11111''; + return ''f''; +end; +' LANGUAGE plpgsql;"); +if (!$res) die('skip PLPGSQL not available'); +?> +--FILE-- +<?php + +require_once('config.inc'); +require_once('lcmess.inc'); + +$dbh = @pg_connect($conn_str); +if (!$dbh) { + die ("Could not connect to the server"); +} + +_set_lc_messages(); + +$res = pg_query($dbh, "CREATE OR REPLACE FUNCTION test_notice() RETURNS boolean AS ' +begin + RAISE NOTICE ''11111''; + return ''f''; +end; +' LANGUAGE plpgsql;"); + + +$res = pg_query($dbh, 'SELECT test_notice()'); +$row = pg_fetch_row($res, 0); +var_dump($row); +pg_free_result($res); +if ($row[0] == 'f') +{ + var_dump(pg_last_notice($dbh)); +} + +pg_close($dbh); + +?> +===DONE=== +--EXPECTF-- +array(1) { + [0]=> + string(1) "f" +} +string(14) "NOTICE: 11111" +===DONE=== diff --git a/ext/pgsql/tests/80_bug32223b.phpt b/ext/pgsql/tests/80_bug32223b.phpt new file mode 100644 index 0000000..aada3f0 --- /dev/null +++ b/ext/pgsql/tests/80_bug32223b.phpt @@ -0,0 +1,60 @@ +--TEST-- +Bug #32223 (weird behaviour of pg_last_notice using define) +--SKIPIF-- +<?php +require_once('skipif.inc'); + +_skip_lc_messages(); + +@pg_query($conn, "CREATE LANGUAGE 'plpgsql' HANDLER plpgsql_call_handler LANCOMPILER 'PL/pgSQL'"); +$res = @pg_query($conn, "CREATE OR REPLACE FUNCTION test_notice() RETURNS boolean AS ' +begin + RAISE NOTICE ''11111''; + return ''f''; +end; +' LANGUAGE plpgsql;"); +if (!$res) die('skip PLPGSQL not available'); +?> +--FILE-- +<?php + +require_once('config.inc'); +require_once('lcmess.inc'); + +define('dbh', pg_connect($conn_str)); +if (!dbh) { + die ("Could not connect to the server"); +} + +_set_lc_messages(); + +$res = pg_query(dbh, "CREATE OR REPLACE FUNCTION test_notice() RETURNS boolean AS ' +begin + RAISE NOTICE ''11111''; + return ''f''; +end; +' LANGUAGE plpgsql;"); + +function tester() { + $res = pg_query(dbh, 'SELECT test_notice()'); + $row = pg_fetch_row($res, 0); + var_dump($row); + pg_free_result($res); + if ($row[0] == 'f') + { + var_dump(pg_last_notice(dbh)); + } +} +tester(); + +pg_close(dbh); + +?> +===DONE=== +--EXPECTF-- +array(1) { + [0]=> + string(1) "f" +} +string(14) "NOTICE: 11111" +===DONE=== diff --git a/ext/pgsql/tests/80_bug36625.phpt b/ext/pgsql/tests/80_bug36625.phpt new file mode 100644 index 0000000..a95cea7 --- /dev/null +++ b/ext/pgsql/tests/80_bug36625.phpt @@ -0,0 +1,49 @@ +--TEST-- +Bug #36625 (pg_trace() does not work) +--SKIPIF-- +<?php +require_once('skipif.inc'); +?> +--FILE-- +<?php + +require_once('config.inc'); + +$dbh = @pg_connect($conn_str); +if (!$dbh) { + die ('Could not connect to the server'); +} + +$tracefile = dirname(__FILE__) . '/trace.tmp'; + +@unlink($tracefile); +var_dump(file_exists($tracefile)); + +pg_trace($tracefile, 'w', $dbh); +$res = pg_query($dbh, 'select 1'); +var_dump($res); +pg_close($dbh); + +$found = 0; +function search_trace_file($line) +{ + if (strpos($line, '"select 1"') !== false || strpos($line, "'select 1'") !== false) { + $GLOBALS['found']++; + } +} + +$trace = file($tracefile); +array_walk($trace, 'search_trace_file'); +var_dump($found > 0); +var_dump(file_exists($tracefile)); + +?> +===DONE=== +--CLEAN-- +<?php unlink($tracefile); ?> +--EXPECTF-- +bool(false) +resource(%d) of type (pgsql result) +bool(true) +bool(true) +===DONE=== diff --git a/ext/pgsql/tests/80_bug39971.phpt b/ext/pgsql/tests/80_bug39971.phpt new file mode 100644 index 0000000..45d2631 --- /dev/null +++ b/ext/pgsql/tests/80_bug39971.phpt @@ -0,0 +1,30 @@ +--TEST-- +Bug #39971 (pg_insert/pg_update do not allow now() to be used for timestamp fields) +--SKIPIF-- +<?php +require_once('skipif.inc'); +?> +--FILE-- +<?php + +require_once('config.inc'); + +$dbh = @pg_connect($conn_str); +if (!$dbh) { + die ("Could not connect to the server"); +} + +pg_query("CREATE TABLE php_test (id SERIAL, tm timestamp NOT NULL)"); + +$values = array('tm' => 'now()'); +pg_insert($dbh, 'php_test', $values); + +$ids = array('id' => 1); +pg_update($dbh, 'php_test', $values, $ids); + +pg_query($dbh, "DROP TABLE php_test"); +pg_close($dbh); +?> +===DONE=== +--EXPECT-- +===DONE=== diff --git a/ext/pgsql/tests/80_bug42783.phpt b/ext/pgsql/tests/80_bug42783.phpt new file mode 100644 index 0000000..575e527 --- /dev/null +++ b/ext/pgsql/tests/80_bug42783.phpt @@ -0,0 +1,34 @@ +--TEST-- +Bug #42783 (pg_insert() does not support an empty value array) +--SKIPIF-- +<?php +require_once('skipif.inc'); +?> +--FILE-- +<?php + +require_once('config.inc'); + +$dbh = @pg_connect($conn_str); +if (!$dbh) { + die ("Could not connect to the server"); +} + +pg_query("CREATE TABLE php_test (id SERIAL PRIMARY KEY, time TIMESTAMP NOT NULL DEFAULT now())"); + +pg_insert($dbh, 'php_test', array()); + +var_dump(pg_fetch_assoc(pg_query("SELECT * FROM php_test"))); + +pg_query($dbh, "DROP TABLE php_test"); +pg_close($dbh); +?> +===DONE=== +--EXPECTF-- +array(2) { + ["id"]=> + string(%d) "%d" + ["time"]=> + string(%d) "%s" +} +===DONE=== diff --git a/ext/pgsql/tests/98old_api.phpt b/ext/pgsql/tests/98old_api.phpt new file mode 100644 index 0000000..b391097 --- /dev/null +++ b/ext/pgsql/tests/98old_api.phpt @@ -0,0 +1,33 @@ +--TEST-- +PostgreSQL old api +--SKIPIF-- +<?php include("skipif.inc"); ?> +--FILE-- +<?php + +include('config.inc'); + +$db = pg_connect($conn_str); +$result = pg_exec("SELECT * FROM ".$table_name); +pg_numrows($result); +pg_numfields($result); +pg_fieldname($result, 0); +pg_fieldsize($result, 0); +pg_fieldtype($result, 0); +pg_fieldprtlen($result, 0); +pg_fieldisnull($result, 0); + +pg_result($result,0,0); +$result = pg_exec("INSERT INTO ".$table_name." VALUES (7777, 'KKK')"); +$oid = pg_getlastoid($result); +pg_freeresult($result); +pg_errormessage(); +$result = pg_exec("UPDATE ".$table_name." SET str = 'QQQ' WHERE str like 'RGD';"); +pg_cmdtuples($result); + + + +echo "OK"; +?> +--EXPECT-- +OK diff --git a/ext/pgsql/tests/9999dropdb.phpt b/ext/pgsql/tests/9999dropdb.phpt new file mode 100644 index 0000000..c60eeda --- /dev/null +++ b/ext/pgsql/tests/9999dropdb.phpt @@ -0,0 +1,18 @@ +--TEST-- +PostgreSQL drop db +--SKIPIF-- +<?php include("skipif.inc"); ?> +--FILE-- +<?php +// drop test table + +include('config.inc'); + +$db = pg_connect($conn_str); +pg_query($db, "DROP TABLE ".$table_name); + +echo "OK"; + +?> +--EXPECT-- +OK diff --git a/ext/pgsql/tests/README b/ext/pgsql/tests/README new file mode 100644 index 0000000..1a29a34 --- /dev/null +++ b/ext/pgsql/tests/README @@ -0,0 +1,16 @@ +Test scripts assumes: + - PostgreSQL server is installed locally + - there is a PostgreSQL account for the users running the test scripts + - there is database named "test" + +For instance, if your login name is 'testuser', you should have PostgreSQL +user account named 'testuser' and grant that user access to the database +'test'. + +If you have account and database, type "createdb test" from command prompt +to create the database to execute the test scripts. By executing the above +command as the same user running the tests you ensure that the user is +granted access to the database. + +If you find problems in PostgreSQL module, please mail to +intenals@lists.php.net, helly@php.net or yohgaki@php.net. diff --git a/ext/pgsql/tests/bug37100.phpt b/ext/pgsql/tests/bug37100.phpt new file mode 100644 index 0000000..fa6b9ba --- /dev/null +++ b/ext/pgsql/tests/bug37100.phpt @@ -0,0 +1,46 @@ +--TEST-- +Bug #37100 (data is returned truncated with BINARY CURSOR) +--SKIPIF-- +<?php +include("skipif.inc"); +skip_server_version('8.5dev', '>='); +?> +--FILE-- +<?php + +include 'config.inc'; + +$db = pg_connect($conn_str); + +@pg_query('DROP TABLE test_bug'); + +pg_query('CREATE TABLE test_bug (binfield byteA) ;'); +pg_query("INSERT INTO test_bug VALUES (decode('0103AA000812','hex'))"); + + +$data = pg_query("SELECT binfield FROM test_bug"); +$res = pg_fetch_result($data,0); +var_dump($res); +var_dump(bin2hex(pg_unescape_bytea($res))); + +$sql = "BEGIN; DECLARE mycursor BINARY CURSOR FOR SELECT binfield FROM test_bug; FETCH ALL IN mycursor;"; + +$data = pg_query($sql); +$res = pg_fetch_result($data,0); + +var_dump(strlen($res)); +var_dump(bin2hex($res)); + +pg_close($db); + +$db = pg_connect($conn_str); +pg_query('DROP TABLE test_bug'); +pg_close($db); + + +?> +--EXPECT-- +string(24) "\001\003\252\000\010\022" +string(12) "0103aa000812" +int(6) +string(12) "0103aa000812" diff --git a/ext/pgsql/tests/bug37100_85.phpt b/ext/pgsql/tests/bug37100_85.phpt new file mode 100644 index 0000000..aa24776 --- /dev/null +++ b/ext/pgsql/tests/bug37100_85.phpt @@ -0,0 +1,46 @@ +--TEST-- +Bug #37100 (data is returned truncated with BINARY CURSOR) (8.5+) +--SKIPIF-- +<?php +include("skipif.inc"); +skip_server_version('8.5dev', '<'); +?> +--FILE-- +<?php + +include 'config.inc'; + +$db = pg_connect($conn_str); + +@pg_query('DROP TABLE test_bug'); + +pg_query('CREATE TABLE test_bug (binfield byteA) ;'); +pg_query("INSERT INTO test_bug VALUES (decode('0103AA000812','hex'))"); + + +$data = pg_query("SELECT binfield FROM test_bug"); +$res = pg_fetch_result($data,0); +var_dump($res); +var_dump(bin2hex(pg_unescape_bytea($res))); + +$sql = "BEGIN; DECLARE mycursor BINARY CURSOR FOR SELECT binfield FROM test_bug; FETCH ALL IN mycursor;"; + +$data = pg_query($sql); +$res = pg_fetch_result($data,0); + +var_dump(strlen($res)); +var_dump(bin2hex($res)); + +pg_close($db); + +$db = pg_connect($conn_str); +pg_query('DROP TABLE test_bug'); +pg_close($db); + + +?> +--EXPECT-- +string(14) "\x0103aa000812" +string(12) "0103aa000812" +int(6) +string(12) "0103aa000812" diff --git a/ext/pgsql/tests/bug47199.phpt b/ext/pgsql/tests/bug47199.phpt new file mode 100644 index 0000000..5bfac0b --- /dev/null +++ b/ext/pgsql/tests/bug47199.phpt @@ -0,0 +1,67 @@ +--TEST-- +Bug #47199 (pg_delete fails on NULL) +--SKIPIF-- +<?php +require_once('skipif.inc'); +?> +--FILE-- +<?php + +require_once('config.inc'); + +$dbh = pg_connect($conn_str); +$tbl_name = 'test_47199'; +@pg_query("DROP TABLE $tbl_name"); +pg_query("CREATE TABLE $tbl_name (null_field INT, not_null_field INT NOT NULL)"); + +pg_insert($dbh, $tbl_name, array('null_field' => null, 'not_null_field' => 1)); +pg_insert($dbh, $tbl_name, array('null_field' => null, 'not_null_field' => 2)); + +var_dump(pg_fetch_all(pg_query('SELECT * FROM '. $tbl_name))); + +$query = pg_delete($dbh, $tbl_name, array('null_field' => NULL,'not_null_field' => 2), PGSQL_DML_STRING|PGSQL_DML_EXEC); + +echo $query, "\n"; + +$query = pg_update($dbh, $tbl_name, array('null_field' => NULL, 'not_null_field' => 0), array('not_null_field' => 1, 'null_field' => ''), PGSQL_DML_STRING|PGSQL_DML_EXEC); + +echo $query, "\n"; + +var_dump(pg_fetch_all(pg_query('SELECT * FROM '. $tbl_name))); + +@pg_query("DROP TABLE $tbl_name"); +pg_close($dbh); + +echo PHP_EOL."Done".PHP_EOL; + +?> +--EXPECTF-- +array(2) { + [0]=> + array(2) { + ["null_field"]=> + NULL + ["not_null_field"]=> + string(1) "1" + } + [1]=> + array(2) { + ["null_field"]=> + NULL + ["not_null_field"]=> + string(1) "2" + } +} +DELETE FROM test_47199 WHERE null_field IS NULL AND not_null_field=2; +UPDATE test_47199 SET null_field=NULL,not_null_field=0 WHERE not_null_field=1 AND null_field IS NULL; +array(1) { + [0]=> + array(2) { + ["null_field"]=> + NULL + ["not_null_field"]=> + string(1) "0" + } +} + +Done
\ No newline at end of file diff --git a/ext/pgsql/tests/bug60244.phpt b/ext/pgsql/tests/bug60244.phpt new file mode 100644 index 0000000..94568b6 --- /dev/null +++ b/ext/pgsql/tests/bug60244.phpt @@ -0,0 +1,57 @@ +--TEST-- +Bug #60244 (pg_fetch_* functions do not validate that row param is >0) +--SKIPIF-- +<?php +include("skipif.inc"); +?> +--FILE-- +<?php + +include 'config.inc'; + +$db = pg_connect($conn_str); +$result = pg_query("select 'a' union select 'b'"); + +var_dump(pg_fetch_array($result, -1)); +var_dump(pg_fetch_assoc($result, -1)); +var_dump(pg_fetch_object($result, -1)); +var_dump(pg_fetch_row($result, -1)); + +var_dump(pg_fetch_array($result, 0)); +var_dump(pg_fetch_assoc($result, 0)); +var_dump(pg_fetch_object($result, 0)); +var_dump(pg_fetch_row($result, 0)); + +pg_close($db); + +?> +--EXPECTF-- +Warning: pg_fetch_array(): The row parameter must be greater or equal to zero in %sbug60244.php on line %d +bool(false) + +Warning: pg_fetch_assoc(): The row parameter must be greater or equal to zero in %sbug60244.php on line %d +bool(false) + +Warning: pg_fetch_object(): The row parameter must be greater or equal to zero in %sbug60244.php on line %d +bool(false) + +Warning: pg_fetch_row(): The row parameter must be greater or equal to zero in %sbug60244.php on line %d +bool(false) +array(2) { + [0]=> + string(1) "a" + ["?column?"]=> + string(1) "a" +} +array(1) { + ["?column?"]=> + string(1) "a" +} +object(stdClass)#1 (1) { + ["?column?"]=> + string(1) "a" +} +array(1) { + [0]=> + string(1) "a" +} diff --git a/ext/pgsql/tests/config.inc b/ext/pgsql/tests/config.inc new file mode 100644 index 0000000..2b5f05a --- /dev/null +++ b/ext/pgsql/tests/config.inc @@ -0,0 +1,12 @@ +<?php +// These vars are used to connect db and create test table. +// values can be set to meet your environment + +$conn_str = "host=localhost dbname=test"; // connection string +$table_name = "php_pgsql_test"; // test table that should be exist +$num_test_record = 1000; // Number of records to create + +$table_def = "CREATE TABLE php_pgsql_test (num int, str text, bin bytea);"; // Test table +$field_name = "num"; // For pg_field_num() + +?>
\ No newline at end of file diff --git a/ext/pgsql/tests/lcmess.inc b/ext/pgsql/tests/lcmess.inc new file mode 100644 index 0000000..6e0ac25 --- /dev/null +++ b/ext/pgsql/tests/lcmess.inc @@ -0,0 +1,21 @@ +<?php + +function _skip_lc_messages($lc_messages = 'C') +{ + if (!_set_lc_messages($lc_messages)) { + die("skip Cannot set LC_MESSAGES to '{$lc_messages}'\n"); + } +} + +function _set_lc_messages($lc_messages = 'C') +{ + if (pg_result(pg_query("SHOW LC_MESSAGES"), 0, 0) != $lc_messages) { + if (!@pg_exec("SET LC_MESSAGES='{$lc_messages}'")) { + return false; + } + } + + return true; +} + +?> diff --git a/ext/pgsql/tests/pg_delete_001.phpt b/ext/pgsql/tests/pg_delete_001.phpt new file mode 100644 index 0000000..abb65be --- /dev/null +++ b/ext/pgsql/tests/pg_delete_001.phpt @@ -0,0 +1,86 @@ +--TEST-- +PostgreSQL pg_delete() - basic test using schema +--SKIPIF-- +<?php include("skipif.inc"); ?> +--FILE-- +<?php + +include('config.inc'); + +$conn = pg_connect($conn_str); + +pg_query('CREATE SCHEMA phptests'); + +pg_query('CREATE TABLE foo (id INT, id2 INT)'); +pg_query('CREATE TABLE phptests.foo (id INT, id2 INT)'); + +pg_insert($conn, 'foo', array('id' => 1, 'id2' => 1)); +pg_insert($conn, 'foo', array('id' => 1, 'id2' => 2)); +pg_insert($conn, 'foo', array('id' => 1, 'id2' => 2)); +pg_insert($conn, 'foo', array('id' => 3, 'id2' => 3)); + +pg_insert($conn, 'phptests.foo', array('id' => 1, 'id2' => 1)); +pg_insert($conn, 'phptests.foo', array('id' => 1, 'id2' => 2)); +pg_insert($conn, 'phptests.foo', array('id' => 2, 'id2' => 3)); +pg_insert($conn, 'phptests.foo', array('id' => 2, 'id2' => 3)); + +pg_delete($conn, 'foo', array('id' => 1, 'id2' => 0)); +pg_delete($conn, 'foo', array('id' => 1, 'id2' => 2)); +var_dump(pg_delete($conn, 'foo', array('id' => 1, 'id2' => 2), PGSQL_DML_STRING)); + +pg_delete($conn, 'phptests.foo', array('id' => 2, 'id2' => 1)); +pg_delete($conn, 'phptests.foo', array('id' => 2, 'id2' => 3)); +var_dump(pg_delete($conn, 'phptests.foo', array('id' => 2, 'id2' => 3), PGSQL_DML_STRING)); + +var_dump(pg_fetch_all(pg_query('SELECT * FROM foo'))); +var_dump(pg_fetch_all(pg_query('SELECT * FROM phptests.foo'))); + +/* Inexistent */ +pg_delete($conn, 'bar', array('id' => 1, 'id2' => 2)); +var_dump(pg_delete($conn, 'bar', array('id' => 1, 'id2' => 2), PGSQL_DML_STRING)); + +pg_query('DROP TABLE foo'); +pg_query('DROP TABLE phptests.foo'); +pg_query('DROP SCHEMA phptests'); + +?> +--EXPECTF-- +string(37) "DELETE FROM foo WHERE id=1 AND id2=2;" +string(46) "DELETE FROM phptests.foo WHERE id=2 AND id2=3;" +array(2) { + [0]=> + array(2) { + ["id"]=> + string(1) "1" + ["id2"]=> + string(1) "1" + } + [1]=> + array(2) { + ["id"]=> + string(1) "3" + ["id2"]=> + string(1) "3" + } +} +array(2) { + [0]=> + array(2) { + ["id"]=> + string(1) "1" + ["id2"]=> + string(1) "1" + } + [1]=> + array(2) { + ["id"]=> + string(1) "1" + ["id2"]=> + string(1) "2" + } +} + +Warning: pg_delete(): Table 'bar' doesn't exists in %s on line %d + +Warning: pg_delete(): Table 'bar' doesn't exists in %s on line %d +bool(false) diff --git a/ext/pgsql/tests/pg_insert_001.phpt b/ext/pgsql/tests/pg_insert_001.phpt new file mode 100644 index 0000000..7d27219 --- /dev/null +++ b/ext/pgsql/tests/pg_insert_001.phpt @@ -0,0 +1,40 @@ +--TEST-- +PostgreSQL pg_select() - basic test using schema +--SKIPIF-- +<?php include("skipif.inc"); ?> +--FILE-- +<?php + +include('config.inc'); + +$conn = pg_connect($conn_str); + +pg_query('CREATE SCHEMA phptests'); +pg_query('CREATE TABLE phptests.foo (id INT, id2 INT)'); + + +pg_insert($conn, 'foo', array('id' => 1, 'id2' => 1)); + +pg_insert($conn, 'phptests.foo', array('id' => 1, 'id2' => 2)); + +var_dump(pg_insert($conn, 'phptests.foo', array('id' => 1, 'id2' => 2), PGSQL_DML_STRING)); + +var_dump(pg_select($conn, 'phptests.foo', array('id' => 1))); + +pg_query('DROP TABLE phptests.foo'); +pg_query('DROP SCHEMA phptests'); + +?> +--EXPECTF-- + +Warning: pg_insert(): Table 'foo' doesn't exists in %s on line %d +string(47) "INSERT INTO phptests.foo (id,id2) VALUES (1,2);" +array(1) { + [0]=> + array(2) { + ["id"]=> + string(1) "1" + ["id2"]=> + string(1) "2" + } +} diff --git a/ext/pgsql/tests/pg_meta_data_001.phpt b/ext/pgsql/tests/pg_meta_data_001.phpt new file mode 100644 index 0000000..2841de8 --- /dev/null +++ b/ext/pgsql/tests/pg_meta_data_001.phpt @@ -0,0 +1,92 @@ +--TEST-- +PostgreSQL pg_meta_data() - basic test using schema +--SKIPIF-- +<?php include("skipif.inc"); ?> +--FILE-- +<?php + +include('config.inc'); + +$conn = pg_connect($conn_str); + +pg_query('CREATE SCHEMA phptests'); + +pg_query('CREATE TABLE phptests.foo (id INT, id2 INT)'); + +pg_query('CREATE TABLE foo (id INT, id3 INT)'); + + +var_dump(pg_meta_data($conn, 'foo')); +var_dump(pg_meta_data($conn, 'phptests.foo')); + + +pg_query('DROP TABLE foo'); +pg_query('DROP TABLE phptests.foo'); +pg_query('DROP SCHEMA phptests'); + +?> +--EXPECT-- +array(2) { + ["id"]=> + array(6) { + ["num"]=> + int(1) + ["type"]=> + string(4) "int4" + ["len"]=> + int(4) + ["not null"]=> + bool(false) + ["has default"]=> + bool(false) + ["array dims"]=> + int(0) + } + ["id3"]=> + array(6) { + ["num"]=> + int(2) + ["type"]=> + string(4) "int4" + ["len"]=> + int(4) + ["not null"]=> + bool(false) + ["has default"]=> + bool(false) + ["array dims"]=> + int(0) + } +} +array(2) { + ["id"]=> + array(6) { + ["num"]=> + int(1) + ["type"]=> + string(4) "int4" + ["len"]=> + int(4) + ["not null"]=> + bool(false) + ["has default"]=> + bool(false) + ["array dims"]=> + int(0) + } + ["id2"]=> + array(6) { + ["num"]=> + int(2) + ["type"]=> + string(4) "int4" + ["len"]=> + int(4) + ["not null"]=> + bool(false) + ["has default"]=> + bool(false) + ["array dims"]=> + int(0) + } +} diff --git a/ext/pgsql/tests/pg_select_001.phpt b/ext/pgsql/tests/pg_select_001.phpt new file mode 100644 index 0000000..9bcf130 --- /dev/null +++ b/ext/pgsql/tests/pg_select_001.phpt @@ -0,0 +1,63 @@ +--TEST-- +PostgreSQL pg_select() - basic test using schema +--SKIPIF-- +<?php include("skipif.inc"); ?> +--FILE-- +<?php + +include('config.inc'); + +$conn = pg_connect($conn_str); + +pg_query('CREATE SCHEMA phptests'); + +pg_query('CREATE TABLE phptests.foo (id INT, id2 INT)'); +pg_query('INSERT INTO phptests.foo VALUES (1,2)'); +pg_query('INSERT INTO phptests.foo VALUES (2,3)'); + +pg_query('CREATE TABLE phptests.bar (id4 INT, id3 INT)'); +pg_query('INSERT INTO phptests.bar VALUES (4,5)'); +pg_query('INSERT INTO phptests.bar VALUES (6,7)'); + +/* Inexistent table */ +var_dump(pg_select($conn, 'foo', array('id' => 1))); + +/* Existent column */ +var_dump(pg_select($conn, 'phptests.foo', array('id' => 1))); + +/* Testing with inexistent column */ +var_dump(pg_select($conn, 'phptests.bar', array('id' => 1))); + +/* Existent column */ +var_dump(pg_select($conn, 'phptests.bar', array('id4' => 4))); + + +pg_query('DROP TABLE phptests.foo'); +pg_query('DROP TABLE phptests.bar'); +pg_query('DROP SCHEMA phptests'); + +?> +--EXPECTF-- +Warning: pg_select(): Table 'foo' doesn't exists in %s on line %d +bool(false) +array(1) { + [0]=> + array(2) { + ["id"]=> + string(1) "1" + ["id2"]=> + string(1) "2" + } +} + +Notice: pg_select(): Invalid field name (id) in values in %s on line %d +bool(false) +array(1) { + [0]=> + array(2) { + ["id4"]=> + string(1) "4" + ["id3"]=> + string(1) "5" + } +} diff --git a/ext/pgsql/tests/pg_update_001.phpt b/ext/pgsql/tests/pg_update_001.phpt new file mode 100644 index 0000000..95fa692 --- /dev/null +++ b/ext/pgsql/tests/pg_update_001.phpt @@ -0,0 +1,51 @@ +--TEST-- +PostgreSQL pg_update() - basic test using schema +--SKIPIF-- +<?php include("skipif.inc"); ?> +--FILE-- +<?php + +include('config.inc'); + +$conn = pg_connect($conn_str); + +pg_query('CREATE SCHEMA phptests'); + +pg_query('CREATE TABLE foo (id INT, id2 INT)'); +pg_query('CREATE TABLE phptests.foo (id INT, id2 INT)'); + + +pg_insert($conn, 'foo', array('id' => 1, 'id2' => 1)); +pg_insert($conn, 'phptests.foo', array('id' => 1, 'id2' => 2)); + +pg_update($conn, 'foo', array('id' => 10), array('id' => 1)); +var_dump(pg_update($conn, 'foo', array('id' => 10), array('id' => 1), PGSQL_DML_STRING)); + +pg_update($conn, 'phptests.foo', array('id' => 100), array('id2' => 2)); +var_dump(pg_update($conn, 'phptests.foo', array('id' => 100), array('id2' => 2), PGSQL_DML_STRING)); + +$rs = pg_query('SELECT * FROM foo UNION SELECT * FROM phptests.foo'); +while ($row = pg_fetch_assoc($rs)) { + var_dump($row); +} + +pg_query('DROP TABLE foo'); +pg_query('DROP TABLE phptests.foo'); +pg_query('DROP SCHEMA phptests'); + +?> +--EXPECT-- +string(32) "UPDATE foo SET id=10 WHERE id=1;" +string(43) "UPDATE phptests.foo SET id=100 WHERE id2=2;" +array(2) { + ["id"]=> + string(2) "10" + ["id2"]=> + string(1) "1" +} +array(2) { + ["id"]=> + string(3) "100" + ["id2"]=> + string(1) "2" +} diff --git a/ext/pgsql/tests/php.gif b/ext/pgsql/tests/php.gif Binary files differnew file mode 100644 index 0000000..7beda43 --- /dev/null +++ b/ext/pgsql/tests/php.gif diff --git a/ext/pgsql/tests/skipif.inc b/ext/pgsql/tests/skipif.inc new file mode 100644 index 0000000..7c5153e --- /dev/null +++ b/ext/pgsql/tests/skipif.inc @@ -0,0 +1,32 @@ +<?php +// This script prints "skip" unless: +// * the pgsql extension is built-in or loadable, AND +// * there is a database called "test" accessible +// with no username/password, AND +// * we have create/drop privileges on the entire "test" +// database + +include("config.inc"); +include("lcmess.inc"); + +if (!extension_loaded("pgsql")) { + die("skip\n"); +} +$conn = @pg_connect($conn_str); +if (!is_resource($conn)) { + die("skip could not connect\n"); +} + +function skip_server_version($version, $op = '<') { _skip_version('server', $version, $op); } +function skip_client_version($version, $op = '<') { _skip_version('client', $version, $op); } + + +function _skip_version($type, $version, $op) +{ + $pg = pg_parameter_status($type.'_version'); + if (version_compare($pg, $version, $op)) { + die("skip {$type} version {$pg} is {$op} {$version}\n"); + } +} + +?> |