XpressEngine Core  1.11.2
 All Classes Namespaces Files Functions Variables Pages
DBParser.class.php
Go to the documentation of this file.
1 <?php
2 /* Copyright (C) NAVER <http://www.navercorp.com> */
3 
17 class DBParser
18 {
19 
32 
44 
53 
64  {
65  $this->escape_char_left = $escape_char_left;
66  if($escape_char_right !== "")
67  {
68  $this->escape_char_right = $escape_char_right;
69  }
70  else
71  {
72  $this->escape_char_right = $escape_char_left;
73  }
74  $this->table_prefix = $table_prefix;
75  }
76 
83  function getEscapeChar($leftOrRight)
84  {
85  if($leftOrRight === 'left')
86  {
88  }
89  else
90  {
92  }
93  }
94 
101  function escape($name)
102  {
103  return $this->escape_char_left . $name . $this->escape_char_right;
104  }
105 
112  function escapeString($name)
113  {
114  return "'" . $this->escapeStringValue($name) . "'";
115  }
116 
123  function escapeStringValue($value)
124  {
125  if($value == "*")
126  {
127  return $value;
128  }
129  if(is_string($value))
130  {
131  return $value = str_replace("'", "''", $value);
132  }
133  return $value;
134  }
135 
143  function parseTableName($name)
144  {
145  return $this->table_prefix . $name;
146  }
147 
155  function parseColumnName($name)
156  {
157  return $this->escapeColumn($name);
158  }
159 
166  function escapeColumn($column_name)
167  {
168  if($this->isUnqualifiedColumnName($column_name))
169  {
170  return $this->escape($column_name);
171  }
172  if($this->isQualifiedColumnName($column_name))
173  {
174  list($table, $column) = explode('.', $column_name);
175  // $table can also be an alias, so the prefix should not be added
176  return $this->escape($table) . '.' . $this->escape($column);
177  //return $this->escape($this->parseTableName($table)).'.'.$this->escape($column);
178  }
179  }
180 
190  function isUnqualifiedColumnName($column_name)
191  {
192  if(strpos($column_name, '.') === FALSE && strpos($column_name, '(') === FALSE)
193  {
194  return TRUE;
195  }
196  return FALSE;
197  }
198 
208  function isQualifiedColumnName($column_name)
209  {
210  if(strpos($column_name, '.') !== FALSE && strpos($column_name, '(') === FALSE)
211  {
212  return TRUE;
213  }
214  return FALSE;
215  }
216 
235  function parseExpression($column_name)
236  {
237  $functions = preg_split('/([\+\-\*\/\ ])/', $column_name, -1, PREG_SPLIT_DELIM_CAPTURE | PREG_SPLIT_NO_EMPTY);
238  foreach($functions as $k => $v)
239  {
240  $function = &$functions[$k];
241  if(strlen($function) == 1)
242  {
243  continue; // skip delimiters
244  }
245  $pos = strrpos("(", $function);
246  $matches = preg_split('/([a-zA-Z0-9_*]+)/', $function, -1, PREG_SPLIT_DELIM_CAPTURE | PREG_SPLIT_NO_EMPTY);
247  $total_brackets = substr_count($function, "(");
248  $brackets = 0;
249  foreach($matches as $i => $j)
250  {
251  $match = &$matches[$i];
252  if($match == '(')
253  {
254  $brackets++;
255  continue;
256  }
257  if(strpos($match, ')') !== FALSE)
258  {
259  continue;
260  }
261  if(in_array($match, array(',', '.')))
262  {
263  continue;
264  }
265  if($brackets == $total_brackets)
266  {
267  if(!is_numeric($match) && !in_array(strtoupper($match), array('UNSIGNED', 'INTEGER', 'AS')))
268  {
269  $match = $this->escapeColumnExpression($match);
270  }
271  }
272  }
273  $function = implode('', $matches);
274  }
275  return implode('', $functions);
276  }
277 
284  function isStar($column_name)
285  {
286  if(substr($column_name, -1) == '*')
287  {
288  return TRUE;
289  }
290  return FALSE;
291  }
292 
300  function isStarFunction($column_name)
301  {
302  if(strpos($column_name, "(*)") !== FALSE)
303  {
304  return TRUE;
305  }
306  return FALSE;
307  }
308 
314  function escapeColumnExpression($column_name)
315  {
316  if($this->isStar($column_name))
317  {
318  return $column_name;
319  }
320  if($this->isStarFunction($column_name))
321  {
322  return $column_name;
323  }
324  if(stripos($column_name, 'distinct') !== FALSE)
325  {
326  return $column_name;
327  }
328  return $this->escapeColumn($column_name);
329  }
330 
331 }
332 /* End of file DBParser.class.php */
333 /* Location: ./classes/xml/xmlquery/DBParser.class.php */
isUnqualifiedColumnName($column_name)
getEscapeChar($leftOrRight)
isStarFunction($column_name)
escapeStringValue($value)
parseExpression($column_name)
escape($name)
isStar($column_name)
isQualifiedColumnName($column_name)
parseColumnName($name)
escapeColumn($column_name)
escapeString($name)
__construct($escape_char_left, $escape_char_right="", $table_prefix="xe_")
escapeColumnExpression($column_name)
parseTableName($name)