xmltype_01.phpt   [plain text]


--TEST--
Basic XMLType test
--SKIPIF--
<?php if (!extension_loaded('oci8')) die("skip no oci8 extension"); ?>
--FILE--
<?php

require(dirname(__FILE__)."/connect.inc");

// Initialization

$stmts = array(
	"drop table xtt",
	"create table xtt
		   (xt_id number, xt_spec xmltype)
		   xmltype xt_spec store as clob",
	"insert into xtt (xt_id, xt_spec) values
	  (1,
	   xmltype('<?xml version=\"1.0\"?>
		<Xt>
		  <XtId>1</XtId>
		  <Size>Big</Size>
		  <Area>12345</Area>
		  <Hardness>20</Hardness>
		  <Lip>Curved</Lip>
		  <Color>Red</Color>
		  <Nice>N</Nice>
		  <Compact>Tiny</Compact>
		  <Material>Steel</Material>
		</Xt>'))"
);

foreach ($stmts as $q) {
	$s = oci_parse($c, $q);
	$r = @oci_execute($s);
	if (!$r) {
		$m = oci_error($s);
		if ($m['code'] != 942) {  // table or view doesn't exist
			echo $m['message'], "\n";
		}
	}
}

function do_query($c)
{
	$s = oci_parse($c, 'select XMLType.getClobVal(xt_spec)
				        from xtt where xt_id = 1');
	oci_execute($s);
	$row = oci_fetch_row($s);	
	$data = $row[0]->load();
	var_dump($data);
	return($data);
}

// Check
echo "Initial Data\n";
$data = do_query($c);

// Manipulate the data using SimpleXML
$sx = simplexml_load_string($data);
$sx->Hardness = $sx->Hardness - 1;
$sx->Nice = 'Y';

// Insert changes using a temporary CLOB
$s = oci_parse($c, 'update xtt
					set xt_spec = XMLType(:clob)
					where xt_id = 1');
$lob = oci_new_descriptor($c, OCI_D_LOB);	
oci_bind_by_name($s, ':clob', $lob, -1, OCI_B_CLOB);
$lob->writeTemporary($sx->asXml()); 
oci_execute($s);	
$lob->close();

// Verify
echo "Verify\n";
$data = do_query($c);

// Cleanup

$stmts = array(
	"drop table xtt",
);

foreach ($stmts as $q) {
	$s = oci_parse($c, $q);
	@oci_execute($s);
}

echo "Done\n";

?>
--EXPECT--
Initial Data
string(250) "<?xml version="1.0"?>
		<Xt>
		  <XtId>1</XtId>
		  <Size>Big</Size>
		  <Area>12345</Area>
		  <Hardness>20</Hardness>
		  <Lip>Curved</Lip>
		  <Color>Red</Color>
		  <Nice>N</Nice>
		  <Compact>Tiny</Compact>
		  <Material>Steel</Material>
		</Xt>"
Verify
string(249) "<?xml version="1.0"?>
<Xt>
		  <XtId>1</XtId>
		  <Size>Big</Size>
		  <Area>12345</Area>
		  <Hardness>19</Hardness>
		  <Lip>Curved</Lip>
		  <Color>Red</Color>
		  <Nice>Y</Nice>
		  <Compact>Tiny</Compact>
		  <Material>Steel</Material>
		</Xt>
"
Done