コード例 #1
0
 /**
  * Creates and stores the parsed AQL array
  */
 public function makeAqlArray()
 {
     $m = $this->_model_name;
     if ($m == 'Model' || !$m) {
         $this->_aql_array = aql2array($this->_aql);
     } else {
         self::$_metadata[$m]['aql_array'] =& aql2array::get($m, $this->getStoredAql());
     }
 }
コード例 #2
0
 /**
  * Returns a getList object with filters defined based on the given AQL
  * @param   string      $aql
  * @param   Boolean     $search_operators
  * @return  \getList
  * @throws  \Exception  if invalid AQL
  */
 public static function autoGenerate($aql, $search_operators = false)
 {
     if (!aql::is_aql($aql)) {
         throw new \Exception('autoGenerate requires AQL.');
     }
     $aql_array = aql2array($aql);
     $min_aql = aql::minAQLFromArr($aql_array);
     $fields = array();
     foreach ($aql_array as $k => $f) {
         $fields = array_merge($fields, $f['fields']);
     }
     $lst = new self();
     $lst->setAQL($min_aql)->defineFilters(array_map(function ($field) use($lst, $search_operators, $fields) {
         $op = array_search($field, $fields);
         return array('operator' => $search_operators ? $op : null, 'callback' => function ($val) use($lst, $fields, $field) {
             $where = \getList::prepVal(\getList::csvToArray($val));
             $lst->where[] = "{$field} in {$where}";
         });
     }, $fields));
     return $lst;
 }
コード例 #3
0
function collection($model, $clause, $duration = null)
{
    $key = "aql:get:{$model}:" . substr(md5(serialize($clause)), 0, 250);
    $collection = mem($key);
    if (!$collection) {
        $aql = aql::get_aql($model);
        // make minimal sql
        $aql_array = aql2array($aql);
        foreach ($aql_array as $i => $block) {
            unset($aql_array[$i]['objects']);
            unset($aql_array[$i]['fields']);
            unset($aql_array[$i]['subqueries']);
        }
        $sql_array = aql::make_sql_array($aql_array, aql::check_clause_array($aql_array, $clause));
        $minimal_sql = $sql_array['sql'];
        $r = sql($minimal_sql);
        $collection = array();
        while (!$r->EOF) {
            $collection[] = $r->Fields(0);
            $r->MoveNext();
        }
        #print_a($collection);
        mem($key, $collection, $duration);
    }
    if (is_array($collection)) {
        //print_a($collection);
        foreach ($collection as $id) {
            $obj = Model::get($model, $id);
            $ret[] = $obj->dataToArray();
        }
        return $ret;
    } else {
        return false;
    }
}
コード例 #4
0
 /**
  * Fetches the aql array by name or creates it and stores it
  * @param   string  $model
  * @param   string  $aql
  * @return  array
  */
 public static function get($model, $aql = null)
 {
     if (!$model || $model == 'model') {
         return array();
     }
     if (self::$aqlArrays[$model]) {
         return self::$aqlArrays[$model];
     } else {
         if (!$aql) {
             if (self::$aqls[$model]) {
                 $aql = self::$aqls[$model];
             } else {
                 $aql = self::$aqls[$model] = aql::get_aql($model);
             }
         }
         return self::$aqlArrays[$model] = aql2array($aql);
     }
 }
コード例 #5
0
 /**
  * Generates the sql_array with different query types based on the given aql
  * and clause array
  * @param   mixed   $aql    string | array
  * @param   array   $clause_array
  * @return  array
  */
 public static function sql($aql, $clause = array())
 {
     if (!is_array($aql)) {
         $aql = aql2array($aql);
     }
     if (is_array($clause)) {
         $clause = self::check_clause_array($aql, $clause);
     }
     return self::make_sql_array($aql, $clause);
 }