/** * 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()); } }
/** * 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; }
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; } }
/** * 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); } }
/** * 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); }