Squiz Matrix  4.12.2
 All Data Structures Namespaces Functions Variables Pages
DALUpdateParser.inc
1 <?php
13 require_once 'DAL/Parsers/DALQueryParser.inc';
14 require_once 'DAL/Parsers/DALWhereParser.inc';
15 require_once 'XML/XML.inc';
16 
25 {
26 
27 
36  private function __construct()
37  {
38 
39  }//end __construct()
40 
41 
57  public static function parse(DomElement $xmlQuery)
58  {
59  $query = array();
60 
61  $updateTag = $xmlQuery->getElementsByTagName('update')->item(0);
62  if ($updateTag !== NULL) {
63  $query['UPDATE'] = array();
64 
65  // Insert fields.
66  $fieldsTag = $updateTag->getElementsByTagName('fields')->item(0);
67  if ($fieldsTag !== NULL) {
68  $query['UPDATE']['table'] = $fieldsTag->getAttribute('table');
69 
70  $qfields = array();
71  $fields = $fieldsTag->getElementsByTagName('field');
72  foreach ($fields as $field) {
73  $qfields[] = $field->nodeValue;
74  }
75  }
76 
77  $query['UPDATE']['FIELDS'] = $qfields;
78 
79  // Get fields.
80  $valuesTag = $updateTag->getElementsByTagName('values')->item(0);
81 
82  // Add values.
83  foreach ($valuesTag->childNodes as $value) {
84  if ($value->nodeType === XML_ELEMENT_NODE) {
85  $vCol = $value->getAttribute('column');
86  if (XML::hasChildElements($value) === TRUE) {
87  $qvals[$vCol] = self::parseSingleField(XML::getFirstChildElement($value));
88  } else {
89  $qvals[$vCol] = $value->nodeValue;
90  }
91  }
92  }
93 
94  $query['UPDATE']['VALUES'] = $qvals;
95 
96  // Get where clause if there is any.
97  $where = DALWhereParser::parse($updateTag);
98  $query['UPDATE'] = array_merge($query['UPDATE'], $where);
99  }//end if
100 
101  return $query;
102 
103  }//end parse()
104 
105 
120  public static function validate(DomElement $query)
121  {
122  $updateTag = $query->getElementsByTagName('update')->item(0);
123  if ($updateTag === NULL) {
124  throw new DALParserException('Update tag not found.');
125  }
126 
127  // Update tag must have fields tag.
128  $fieldsTag = $updateTag->getElementsByTagName('fields');
129  if ($fieldsTag->length !== 0) {
130  $fieldsTag = $fieldsTag->item(0);
131  $parentTagName = $fieldsTag->parentNode->tagName;
132  } else {
133  $fieldsTag = NULL;
134  }
135 
136  if (($fieldsTag === NULL) || ($parentTagName !== 'update')) {
137  $msg = 'Update query must have fields tag.';
138  throw new DALParserException($msg);
139  }
140 
141  self::validateFieldsTag($fieldsTag);
142 
143  $valuesTag = $updateTag->getElementsByTagName('values')->item(0);
144  if ($valuesTag === NULL) {
145  $msg = 'Update query must have values tag.';
146  throw new DALParserException($msg);
147  }
148 
149  self::validateValuesTag($valuesTag);
150 
151  $whereTag = $updateTag->getElementsByTagName('where')->item(0);
152  if ($whereTag !== NULL) {
153  DALWhereParser::validate($whereTag);
154  }
155 
156  }//end validate()
157 
158 
159 }//end class
160 
161 ?>