Adding some constraints about PK
This commit is contained in:
parent
0e49600951
commit
0b54511565
25
XMLDB.php
25
XMLDB.php
@ -70,6 +70,13 @@ class XMLDB{
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function pkAlreadyExists($pk, $table = '*'){
|
||||||
|
if($this->selectFromPK($table, $pk , 'count') > 0){
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
public function selectTable($name, $format = 'node'){
|
public function selectTable($name, $format = 'node'){
|
||||||
return $this->select($name, null, null, null, $format);
|
return $this->select($name, null, null, null, $format);
|
||||||
@ -165,8 +172,8 @@ class XMLDB{
|
|||||||
if (!$from) {
|
if (!$from) {
|
||||||
throw new Exception('uhoh, no table selected');
|
throw new Exception('uhoh, no table selected');
|
||||||
}
|
}
|
||||||
if($id != null && count($id) == 1){
|
if($id != null){
|
||||||
$attribute .= '[@' . $this->_primaryKey . ' = "' . $id . '"]';
|
$attribute = '[@' . $this->_primaryKey . ' = "' . $id . '"]';
|
||||||
}
|
}
|
||||||
if($attributes != null){
|
if($attributes != null){
|
||||||
foreach($attributes as $attributeName=>$attributeValue)
|
foreach($attributes as $attributeName=>$attributeValue)
|
||||||
@ -233,7 +240,7 @@ class XMLDB{
|
|||||||
|
|
||||||
// TODO other $where and $position
|
// TODO other $where and $position
|
||||||
public function insertNode($node, $table = null, $position = null){
|
public function insertNode($node, $table = null, $position = null){
|
||||||
if(!is_array($node) || !isset($node['name']))
|
if(!is_array($node) || !isset($node['name']) || !isset($node['attributes']))
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
// Creating the node from an array
|
// Creating the node from an array
|
||||||
@ -252,17 +259,17 @@ class XMLDB{
|
|||||||
|
|
||||||
// Inserting the node into the DB
|
// Inserting the node into the DB
|
||||||
// case : creation of a new table
|
// case : creation of a new table
|
||||||
if($table == null){
|
if($table == null && !$this->tableAlreadyExists($node['name'])){
|
||||||
$this->_doc->firstChild->appendChild($element);
|
$this->_doc->firstChild->appendChild($element);
|
||||||
}else{
|
}else if($table != null){
|
||||||
// case : insertion into the end of table
|
// case : insertion into the end of table
|
||||||
//TODO checking if PK already exists
|
if(!$this->tableAlreadyExists($table) || $this->pkAlreadyExists($node['attributes'][$this->_primaryKey], $table)){
|
||||||
$request = $this->_xpath->query('//table[@name = "'.$table.'"]');
|
|
||||||
if($request->length != 1){
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
$request = $this->_xpath->query('//table[@name = "'.$table.'"]');
|
||||||
$request->item(0)->appendChild($element);
|
$request->item(0)->appendChild($element);
|
||||||
}
|
}else
|
||||||
|
return false;
|
||||||
return $this->save();
|
return $this->save();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -67,7 +67,17 @@ else
|
|||||||
$result = $xmldbtest->selectFromChilds('table1',array('visibility'=>'true', 'x'=>'32'));
|
$result = $xmldbtest->selectFromChilds('table1',array('visibility'=>'true', 'x'=>'32'));
|
||||||
echo count($result).' results<br/><br/>';
|
echo count($result).' results<br/><br/>';
|
||||||
|
|
||||||
|
echo '<br/>Testing insertNode that already exist (should do "ko")<br/>';
|
||||||
|
if($xmldbtest->insertNode(array('name'=>'item', 'attributes'=>array('id'=>'test'), 'childs'=>array('visibility'=>'true', 'x'=>'33')), 'table1'))
|
||||||
|
echo "ok<br/><br/>";
|
||||||
|
else
|
||||||
|
echo "ko<br/><br/>";
|
||||||
|
|
||||||
|
echo '<br/>Testing insertNode that doesn\'t exist (should do "ok")<br/>';
|
||||||
|
if($xmldbtest->insertNode(array('name'=>'item', 'attributes'=>array('id'=>'test2'), 'childs'=>array('visibility'=>'true', 'x'=>'33')), 'table1'))
|
||||||
|
echo "ok<br/><br/>";
|
||||||
|
else
|
||||||
|
echo "ko<br/><br/>";
|
||||||
|
|
||||||
echo '<br/>Testing updatingNodeAttribute with no insert (should be ok and change the item "links" into "zelda" haha)<br/>';
|
echo '<br/>Testing updatingNodeAttribute with no insert (should be ok and change the item "links" into "zelda" haha)<br/>';
|
||||||
if($xmldbtest->updateNodeAttribute('table1', array('id', 'links'), array('id', 'zelda')))
|
if($xmldbtest->updateNodeAttribute('table1', array('id', 'links'), array('id', 'zelda')))
|
||||||
|
Loading…
Reference in New Issue
Block a user