OqlQueryParameter.class.php

Go to the documentation of this file.
00001 <?php
00002 /****************************************************************************
00003  *   Copyright (C) 2008 by Vladlen Y. Koshelev                              *
00004  *                                                                          *
00005  *   This program is free software; you can redistribute it and/or modify   *
00006  *   it under the terms of the GNU Lesser General Public License as         *
00007  *   published by the Free Software Foundation; either version 3 of the     *
00008  *   License, or (at your option) any later version.                        *
00009  *                                                                          *
00010  ****************************************************************************/
00011 
00015     class OqlQueryParameter
00016     {
00017         private $value      = null;
00018         private $bindable   = false;
00019         
00023         public static function create()
00024         {
00025             return new self;
00026         }
00027         
00028         public function getValue()
00029         {
00030             return $this->value;
00031         }
00032         
00036         public function setValue($value)
00037         {
00038             $this->value = $value;
00039             
00040             return $this;
00041         }
00042         
00043         public function isBindable()
00044         {
00045             return $this->bindable;
00046         }
00047         
00051         public function setBindable($orly = true)
00052         {
00053             $this->bindable = ($orly === true);
00054             
00055             return $this;
00056         }
00057         
00058         public function evaluate($values)
00059         {
00060             if ($this->isBindable()) {
00061                 Assert::isPositiveInteger(
00062                     $this->getValue(),
00063                     'wrong substitution number: $'.$this->getValue()
00064                 );
00065                 Assert::isIndexExists(
00066                     $values,
00067                     $this->getValue(),
00068                     'parameter $'.$this->getValue().' is not binded'
00069                 );
00070                 
00071                 $value = $values[$this->getValue()];
00072                 
00073             } else
00074                 $value = $this->getValue();
00075             
00076             if ($value instanceof Query) {
00077                 return $value;
00078             
00079             } elseif ($value instanceof Identifiable) {
00080                 return $value->getId();
00081             
00082             } elseif (is_array($value)) {
00083                 $list = array();
00084                 foreach ($value as $key => $parameter) {
00085                     if ($parameter instanceof OqlQueryParameter)
00086                         $list[$key] = $parameter->evaluate($values);
00087                     else
00088                         $list[$key] = $parameter;
00089                 }
00090                 
00091                 return $list;
00092             }
00093             
00094             return $value;
00095         }
00096     }
00097 ?>