2007-08-30 17:33:00 +00:00
|
|
|
--TEST--
|
|
|
|
Basic XMLType test
|
|
|
|
--SKIPIF--
|
|
|
|
<?php if (!extension_loaded('oci8')) die("skip no oci8 extension"); ?>
|
2008-07-16 19:52:01 +00:00
|
|
|
<?php if (!extension_loaded("simplexml")) die("skip no simplexml extension"; ?>
|
2007-08-30 17:33:00 +00:00
|
|
|
--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);
|
2008-07-16 19:52:01 +00:00
|
|
|
$row = oci_fetch_row($s);
|
2007-08-30 17:33:00 +00:00
|
|
|
$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');
|
2008-07-16 19:52:01 +00:00
|
|
|
$lob = oci_new_descriptor($c, OCI_D_LOB);
|
2007-08-30 17:33:00 +00:00
|
|
|
oci_bind_by_name($s, ':clob', $lob, -1, OCI_B_CLOB);
|
2008-07-16 19:52:01 +00:00
|
|
|
$lob->writeTemporary($sx->asXml());
|
|
|
|
oci_execute($s);
|
2007-08-30 17:33:00 +00:00
|
|
|
$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
|