Squiz Matrix  4.12.2
 All Data Structures Namespaces Functions Variables Pages
MatrixDAL.inc
1 <?php
18 require_once dirname(__FILE__).'/../DAL/DAL.inc';
19 
45 class MatrixDAL extends DAL
46 {
47 
48 
53  function __construct()
54  {
55  parent::__construct();
56 
57  }//end constructor
58 
59 
76  public static function getQuery($systemid, $queryid, $params=Array(), $bindValues=TRUE)
77  {
78  // Work out the class and method name to call.
79  $class = $systemid.'Queries';
80  $function = 'prepare'.$queryid.'Query';
81 
82  self::requireQueryClass($systemid);
83 
84  // Should we include the class here?
85  if (method_exists($class, $function) === FALSE) {
86  // Query not found. Throw DALException exception?
87  throw new DALException('Could not load query '.$queryid.' in system '.$systemid);
88  } else {
89  return call_user_func(array($class, $function), $params, $bindValues);
90  }
91 
92  }//end getQuery()
93 
94 
95 
96 
106  public static function executeGrouped($systemid, $queryid, $params=Array())
107  {
108  $query = self::getQuery($systemid, $queryid, $params);
109  return self::getGrouped($query);
110 
111  }//end executeGrouped()
112 
113 
123  public static function executeGroupedAssoc($systemid, $queryid, $params=Array())
124  {
125  $query = self::getQuery($systemid, $queryid, $params);
126  return self::getGroupedAssoc($query);
127 
128  }//end executeGrouped()
129 
130 
143  public static function executeAssoc($systemid, $queryid, $col=NULL, $params=Array())
144  {
145  if ((func_num_args() === 3) && is_array($col)) {
146  $params = $col;
147  $col = NULL;
148  }
149  $query = self::getQuery($systemid, $queryid, $params);
150  $res = self::getAssoc($query, $col);
151 
152  return $res;
153 
154  }//end executeAssoc()
155 
156 
168  public static function executeAll($systemid, $queryid, $params=Array())
169  {
170  $query = self::getQuery($systemid, $queryid, $params);
171  return self::getAll($query);
172 
173  }//end executeAll()
174 
175 
187  public static function executeOne($systemid, $queryid, $params=Array())
188  {
189  $query = self::getQuery($systemid, $queryid, $params);
190  $result = self::getOne($query);
191 
192  // Oracle returns resourceid for LOB fields.
193  // If result is a resource then retreive its contents.
194  if (is_resource($result) === TRUE) {
195  $result = stream_get_contents($result);
196  }
197 
198  return $result;
199 
200  }//end executeOne()
201 
202 
216  public static function executeQuery($systemid, $queryid=NULL, $params=Array())
217  {
218  $query = NULL;
219  if (($systemid instanceof Query) === TRUE) {
220  self::_startQueryTimer($systemid);
221  $dalQuery = $systemid;
222  $query = $dalQuery->prepare();
223  } else if ($queryid === NULL) {
224  throw new DALException('No queryid provided for executeQuery.');
225  } else {
226  $dalQuery = self::getQuery($systemid, $queryid, $params);
227  self::_startQueryTimer($dalQuery);
228  $query = $dalQuery->prepare();
229  }
230 
231  try {
232  self::execPdoQuery($query);
233  } catch (PDOException $e) {
234  throw new DALException($e->getMessage());
235  }
236 
237  if (self::getDbType() == 'oci') {
238  // OCI:
239  $dalQuery->releaseLobs();
240  $rows = oci_num_rows($query);
241  } else {
242  $rows = (int)$query->rowCount();
243  }
244 
245  // DB2 returns -1 rows if no rows were affected.
246  if ($rows === -1) {
247  $rows = 0;
248  }
249 
250  self::_endQueryTimer();
251 
252  return $rows;
253 
254  }//end executeQuery()
255 
256 
257 
273  public static function preparePdoQuery($sql)
274  {
275  $dbh = self::getDb();
276  $db_type = self::getDbType();
277 
278  if ($db_type === 'oci') {
279  // OCI:
280  $query = oci_parse($dbh, $sql);
281  } else {
282  $query = $dbh->prepare($sql);
283  }
284 
285  return $query;
286 
287  }//end preparePdoQuery()
288 
289 
308  public static function bindValueToPdo($query, $name, $value, $dataType=NULL)
309  {
310  $dbh = self::getDb();
311  $db_type = self::getDbType();
312 
313  if ($db_type === 'oci') {
314  // OCI:
315  // LOB handling needs a descriptor to be created.
316  if ($dataType == 'PDO::PARAM_LOB') {
317  $lob = oci_new_descriptor($dbh);
318  $lob->write($value);
319  $ret_val = oci_bind_by_name($query, ':'.$name, $lob, SQLT_CLOB);
320  } else {
321  $ret_val = oci_bind_by_name($query, ':'.$name, $value);
322  }
323  if ($ret_val === FALSE) {
324  $oci_error = oci_error($query);
325  throw new Exception('Unable to bind variable "'.$name.'" to query: '.$oci_error['code'].' '.$oci_error['message']);
326  }
327  } else {
328  if ($dataType === NULL) {
329  $query->bindValue(':'.$name, $value);
330  } else {
331  $query->bindValue(':'.$name, $value, $dataType);
332  }
333  }
334 
335  }//end bindValueToPdo()
336 
337 
356  public static function bindValueToPdoByRef($query, $name, &$value, $dataType=NULL, $maxLength=NULL)
357  {
358  $dbh = self::getDb();
359  $db_type = self::getDbType();
360 
361  if ($db_type === 'oci') {
362  // OCI:
363  // LOB handling needs a descriptor to be created.
364  if ($dataType == 'PDO::PARAM_LOB') {
365  $lob = oci_new_descriptor($dbh);
366  $lob->write($value);
367  $ret_val = oci_bind_by_name($query, ':'.$name, $lob, SQLT_CLOB);
368  } else {
369  if ($dataType & PDO::PARAM_INPUT_OUTPUT) {
370  $ret_val = oci_bind_by_name($query, ':'.$name, $value, $maxLength);
371  } else {
372  $ret_val = oci_bind_by_name($query, ':'.$name, $value);
373  }
374  if (!$ret_val) {
375  $oci_error = oci_error($query);
376  throw new DALException('Unable to bind Oracle variable by reference: '.$oci_error['code'].' '.$oci_error['message']);
377  }
378  }
379  } else {
380  if ($dataType === NULL) {
381  $query->bindValue(':'.$name, $value);
382  } else {
383  $query->bindValue(':'.$name, $value, $dataType, $maxLength);
384  }
385  }
386 
387  }//end bindValueToPdoByRef()
388 
389 
397  public static function bindValuesToPdo($query, $name, $value)
398  {
399 
400  }//end bindValuesToPdo()
401 
402 
417  protected static function _getPdoDataType($systemId, $table, $column, $dataType=NULL)
418  {
419  if ($dataType === NULL) {
420  return 'PDO::PARAM_STR';
421  // $dataType = self::getTableColumnTypes($systemId, $table, $column);
422  }
423 
424  switch (strtoupper($dataType)) {
425  case 'NUMERIC':
426  case 'DECIMAL':
427  case 'INTEGER':
428  case 'SMALLINT':
429  case 'REAL':
430  case 'DOUBLE PRECISION':
431  case 'FLOAT':
432  $pdoType = 'PDO::PARAM_INT';
433  break;
434  case 'BOOLEAN':
435  $pdoType = 'PDO::PARAM_BOOL';
436  break;
437  default:
438  $pdoType = 'PDO::PARAM_STR';
439  }
440 
441  return $pdoType;
442 
443  }//end _getPdoDataType()
444 
445 
463  public static function quote($value)
464  {
465  $quoted_value = NULL;
466  if (self::getDbType() == 'oci') {
467  // We don't have PDO to help us here
468  $quoted_value = '\''.str_replace('\'', '\'\'', $value).'\'';
469  } else {
470  $db = self::getDb();
471  $quoted_value = $db->quote($value);
472  if ($quoted_value === FALSE) {
473  // If PDO won't quote it for us...
474  $quoted_value = '\''.str_replace('\'', '\'\'', $value).'\'';
475  }
476  }
477 
478  return $quoted_value;
479 
480  }//end quote()
481 
482 
483 }
484 ?>