006.phpt   [plain text]


--TEST--
InterBase: binding (may take a while)
--SKIPIF--
<?php include("skipif.inc"); ?>
--FILE--
<?php /* $Id: 006.phpt,v 1.11 2004/05/30 16:20:25 abies Exp $ */

	require("interbase.inc");
	
	ibase_connect($test_base);
	
	ibase_query(
		"create table test6 (
			iter		integer,
			v_char		char(1000),
			v_date      timestamp,
			v_decimal   decimal(12,3),
			v_double  	double precision,
			v_float     float,
			v_integer   integer,
			v_numeric   numeric(4,2),
			v_smallint  smallint,
			v_varchar   varchar(10000)
			)");
	ibase_query(
		"create procedure add1 (arg integer)
		returns (result integer)
		as 
		begin
			result = arg +1;
		end");
	ibase_commit();

	/* if timefmt not supported, hide error */
	ini_set('ibase.timestampformat',"%m/%d/%Y %H:%M:%S");

	echo "insert\n";

	for($iter = 0; $iter < 3; $iter++) {
		/* prepare data  */
		$v_char = rand_str(1000);
		$v_date = rand_datetime();
		$v_decimal = rand_number(12,3);
		$v_double  = rand_number(20);
		$v_float   = rand_number(7);
		$v_integer = rand_number(9,0);
		$v_numeric = rand_number(4,2);
		$v_smallint = rand_number(5) % 32767;
		$v_varchar = rand_str(10000);

		ibase_query("insert into test6
			(iter,v_char,v_date,v_decimal,v_double,v_float,
			v_integer,v_numeric,v_smallint,v_varchar)
			values (?,?,?,?,?,?,?,?,?,?)",
			$iter, $v_char, $v_date, $v_decimal, $v_double, $v_float,
			$v_integer, $v_numeric, $v_smallint, $v_varchar);
		$sel = ibase_query("select * from test6 where iter = ?", $iter);

		$row = ibase_fetch_object($sel);
		if(substr($row->V_CHAR,0,strlen($v_char)) != $v_char) {
			echo " CHAR fail:\n";
			echo " in:  $v_char\n";
			echo " out: $row->V_CHAR\n";
		}
		if($row->V_DATE != $v_date) {
			echo " DATE fail\n";
			echo " in:  $v_date\n";
			echo " out: $row->V_DATE\n";
		}
		if($row->V_DECIMAL != $v_decimal) {
			echo " DECIMAL fail\n";
			echo " in:  $v_decimal\n";
			echo " out: $row->V_DECIMAL\n";
		}
		if(abs($row->V_DOUBLE - $v_double) > abs($v_double / 1E15)) {
			echo " DOUBLE fail\n";
			echo " in:  $v_double\n";
			echo " out: $row->V_DOUBLE\n";
		}
		if(abs($row->V_FLOAT - $v_float) > abs($v_float / 1E7)) {
			echo " FLOAT fail\n";
			echo " in:  $v_float\n";
			echo " out: $row->V_FLOAT\n";
		}
		if($row->V_INTEGER != $v_integer) {
			echo " INTEGER fail\n";
			echo " in:  $v_integer\n";
			echo " out: $row->V_INTEGER\n";
		}
		if ($row->V_NUMERIC != $v_numeric) {
			echo " NUMERIC fail\n";
			echo " in:  $v_numeric\n";
			echo " out: $row->V_NUMERIC\n";
		}
		if ($row->V_SMALLINT != $v_smallint) {
			echo " SMALLINT fail\n";
			echo " in:  $v_smallint\n";
			echo " out: $row->V_SMALLINT\n";
		}
		if ($row->V_VARCHAR != $v_varchar) {
			echo " VARCHAR fail:\n";
			echo " in:  $v_varchar\n";
			echo " out: $row->V_VARCHAR\n";
		}
		ibase_free_result($sel);
	}/* for($iter)*/

	echo "select\n";
	for($iter = 0; $iter < 3; $iter++) {
		/* prepare data  */
		$v_char = rand_str(1000);
		$v_date = (int)rand_number(10,0,0);
		$v_decimal = rand_number(12,3);
		$v_double  = rand_number(20);
		$v_float   = rand_number(7);
		$v_integer = rand_number(9,0);
		$v_numeric = rand_number(4,2);
		$v_smallint = rand_number(5) % 32767;
		$v_varchar = rand_str(10000);

		/* clear table*/
		ibase_query("delete from test6");

		/* make one record */
		ibase_query("insert into test6
			(iter, v_char,v_date,v_decimal,
			v_integer,v_numeric,v_smallint,v_varchar)
			values (666, '$v_char',?,$v_decimal, $v_integer,
			$v_numeric, $v_smallint, '$v_varchar')",$v_date);

		/* test all types */
		if(!($sel = ibase_query(
			"select iter from test6 where v_char = ?", $v_char)) ||
			!ibase_fetch_row($sel)) {
			echo "CHAR fail\n";
		}
		ibase_free_result($sel);
		if(!($sel = ibase_query(
			"select iter from test6 where v_date = ?", $v_date)) ||
			!ibase_fetch_row($sel)) {
			echo "DATE fail\n";
		}
		ibase_free_result($sel);
		if(!($sel = ibase_query(
			"select iter from test6 where v_decimal = ?", $v_decimal)) ||
			!ibase_fetch_row($sel)) {
			echo "DECIMAL fail\n";
		}
		ibase_free_result($sel);
		if(!($sel = ibase_query(
			"select iter from test6 where v_integer = ?", $v_integer)) ||
			!ibase_fetch_row($sel)) {
			echo "INTEGER fail\n";
		}
		ibase_free_result($sel);
		if(!($sel = ibase_query(
			"select iter from test6 where v_numeric = ?", $v_numeric)) ||
			!ibase_fetch_row($sel)) {
			echo "NUMERIC fail\n";
		}
		ibase_free_result($sel);
		if(!($sel = ibase_query(
			"select iter from test6 where v_smallint = ?", $v_smallint)) ||
			!ibase_fetch_row($sel)) {
			echo "SMALLINT fail\n";
		}
		ibase_free_result($sel);
		if(!($sel = ibase_query(
			"select iter from test6 where v_varchar = ?", $v_varchar)) ||
			!ibase_fetch_row($sel)) {
			echo "VARCHAR fail\n";
		}
		ibase_free_result($sel);
        
	} /*for iter*/

	echo "prepare and exec insert\n";

    /* prepare table */
	ibase_query("delete from test6");

	/* prepare query */
	$query = ibase_prepare(
		"insert into test6 (v_integer) values (?)");

	for($i = 0; $i < 10; $i++) {
		ibase_execute($query, $i);
	}

	out_table("test6");

	ibase_free_query($query);

	echo "prepare and exec select\n";

	/* prepare query */
	$query = ibase_prepare("select * from test6
		where v_integer between ? and ?");

	$low_border = 2;
	$high_border = 6;

	$res = ibase_execute($query, $low_border, $high_border);
	out_result($res, "test6");
	ibase_free_result($res);

	$low_border = 0;
	$high_border = 4;
	$res = ibase_execute($query, $low_border, $high_border);
	out_result($res, "test6");
	ibase_free_result($res);

	$res = ibase_execute($query, "5", 7.5);
	out_result($res, "test6");
	ibase_free_result($res);

	ibase_free_query($query);

	/* test execute procedure */
	$query = ibase_prepare("execute procedure add1(?)");
	$res = array();
	for ($i = 0; $i < 10; $i++) {
		$res[] = ibase_execute($query,$i);
	}
	ibase_free_query($query);
	foreach ($res as $r) {
		out_result($r, "proc add1");
		ibase_free_result($r);
	}

	ibase_close();
	echo "end of test\n";
?>
--EXPECT--
insert
select
prepare and exec insert
--- test6 ---
						0				
						1				
						2				
						3				
						4				
						5				
						6				
						7				
						8				
						9				
---
prepare and exec select
--- test6 ---
						2				
						3				
						4				
						5				
						6				
---
--- test6 ---
						0				
						1				
						2				
						3				
						4				
---
--- test6 ---
						5				
						6				
						7				
---
--- proc add1 ---
1	
---
--- proc add1 ---
2	
---
--- proc add1 ---
3	
---
--- proc add1 ---
4	
---
--- proc add1 ---
5	
---
--- proc add1 ---
6	
---
--- proc add1 ---
7	
---
--- proc add1 ---
8	
---
--- proc add1 ---
9	
---
--- proc add1 ---
10	
---
end of test