Example #1
0
 /**
  * Renders the One_Query into an xpath that can fetch results from the XML-datastore
  *
  * @param One_Query $query
  */
 public function render(One_Query $query)
 {
     $this->query = $query;
     $this->scheme = $this->query;
     $resources = $this->scheme->getResources();
     if (trim($query->getRaw()) != '') {
         return $query->getRaw();
     }
     $xpath = $resources['item'];
     // add possible filters to the query
     if (isset($resources['filter'])) {
         $filters = explode(';', $resources['filter']);
         if (count($filters) > 0) {
             foreach ($filters as $filterName) {
                 if ($filterName != '') {
                     $filter = One_Repository::getFilter($filterName, $query->name());
                     $filter->affect($query);
                 }
             }
         }
     }
     $whereClauses = $query->getWhereClauses();
     if (!is_null($whereClauses)) {
         $clauses = $this->whereClauses($whereClauses);
         if (!is_null($clauses)) {
             $xpath .= '[' . $clauses . ']';
         }
     }
     return $xpath;
 }
Example #2
0
 /**
  * One_Renderer_Interspire renders an instance of One_Query into an understandable "query" for Interspire
  * @param One_Query $query
  * @return array
  */
 public function render(One_Query $query)
 {
     $this->query = $query;
     $this->scheme = $this->query->getScheme();
     $resources = $this->scheme->getResources();
     // add possible filters to the query
     if (isset($resources['filter'])) {
         $filters = explode(';', $resources['filter']);
         if (count($filters) > 0) {
             foreach ($filters as $filterName) {
                 if ($filterName != '') {
                     $filter = One_Repository::getFilter($filterName, $query->getScheme()->name());
                     $filter->affect($query);
                 }
             }
         }
     }
     $details = array();
     // For interspire, you can basicly only use the where clauses and even still only certain fields
     // The validation of the fields must be done in the functions themselves because they are too random
     // get where clauses
     $whereClauses = $query->getWhereClauses();
     if (!is_null($whereClauses)) {
         $details = $this->whereClauses($whereClauses);
     }
     $order = $query->getOrder();
     if (!is_null($query->getOrder())) {
         $details['SortInfo'] = $this->createOrder();
     }
     return $details;
 }
Example #3
0
 /**
  * Render the query
  *
  * @param One_Query $query
  * @return string
  */
 public function render(One_Query $query, $overrideFilters = false)
 {
     $this->query = $query;
     $this->scheme = $this->query->getScheme();
     // if the person wants to perform a raw query, return the raw query
     if (!is_null($query->getRaw())) {
         if (One_Config::get('debug.query')) {
             echo '<pre>';
             var_dump($query->getRaw());
             echo '</pre>';
         }
         return $query->getRaw();
     }
     $this->query = $query;
     $this->scheme = $this->query->getScheme();
     $resources = $this->scheme->getResources();
     // fetch collection to fetch data from
     $this->_collection = $resources['collection'];
     // add possible filters to the query
     if (!$overrideFilters && isset($resources['filter'])) {
         $filters = explode(';', $resources['filter']);
         if (count($filters) > 0) {
             foreach ($filters as $filterName) {
                 if ($filterName != '') {
                     $filter = One_Repository::getFilter($filterName, $query->getScheme()->getName());
                     $filter->affect($query);
                 }
             }
         }
     }
     $findQuery = array('fields' => array(), 'query' => array());
     if (count($query->getSelect()) > 0) {
         $findQuery['fields'] = $this->createSelects($query->getSelect());
     }
     // get where clauses
     $whereClauses = $query->getWhereClauses();
     $where = NULL;
     if (!is_null($whereClauses)) {
         $where = $this->whereClauses($whereClauses);
     }
     if (!is_null($where)) {
         $findQuery['query'] = $where;
     }
     if (One_Config::get('debug.query')) {
         echo '<pre>';
         var_dump($findQuery);
         echo '</pre>';
     }
     $findQuery = json_encode($findQuery);
     return $findQuery;
 }
Example #4
0
 public function selectCount($scheme, $options = null)
 {
     $factory = One_Repository::getFactory($scheme);
     $q = $factory->selectQuery();
     $condition = $options['query'];
     if ($condition) {
         /*$filters = array();
         		parse_str( $this->getVariable('filters', ''), $filters );*/
         $c = One_Repository::getFilter($condition, $q->getScheme()->getName());
         $c->affect($q);
     }
     return $q->getCount($q);
 }
Example #5
0
 /**
  * Processes any possibly given filters and alters the One_Query object accordingly
  *
  * @param One_Query $q
  */
 protected function processQueryConditions($q)
 {
     $condition = $this->getVariable('query', '');
     if ($condition) {
         $filters = array();
         parse_str($this->getVariable('filters', ''), $filters);
         $c = One_Repository::getFilter($condition, $q->getScheme()->getName(), $filters);
         $c->affect($q);
     }
 }
Example #6
0
 /**
  * Render the query
  *
  * @param One_Query $query
  * @return string
  */
 public function render(One_Query $query, $overrideFilters = false)
 {
     $this->query = $query;
     $this->scheme = $this->query->getScheme();
     // if the person wants to perform a raw query, return the raw query
     if (!is_null($query->getRaw())) {
         if (One_Config::get('debug.query')) {
             echo '<pre>';
             var_dump($query->getRaw());
             echo '</pre>';
         }
         return $query->getRaw();
     }
     $this->query = $query;
     $this->scheme = $this->query->getScheme();
     $resources = $this->scheme->getResources();
     // fetch main table to fetch data from
     $this->mainTable = $resources['table'];
     $this->defineRole('$self$');
     // add possible filters to the query
     if (!$overrideFilters && isset($resources['filter'])) {
         $filters = explode(';', $resources['filter']);
         if (count($filters) > 0) {
             foreach ($filters as $filterName) {
                 if ($filterName != '') {
                     $filter = One_Repository::getFilter($filterName, $query->getScheme()->getName());
                     $filter->affect($query);
                 }
             }
         }
     }
     // TR20100531 No longer needs to be run after the rest since joins are now checked while adding
     // sselects, order, ...
     $joins = NULL;
     $qJoins = $query->getJoins();
     if (count($qJoins) > 0) {
         foreach ($qJoins as $join => $type) {
             $this->defineRole($join);
             $query->setRoleAlias($join, $this->aliases[$join]);
             $joins .= $this->createJoin($query->getRole($join), $type);
         }
     }
     $selects = $this->aliases['$self$'] . '.*';
     if (count($query->getSelect()) > 0) {
         $selects = $this->createSelects($query->getSelect());
     }
     // get where clauses
     $whereClauses = $query->getWhereClauses();
     $where = NULL;
     if (!is_null($whereClauses)) {
         $where = $this->whereClauses($whereClauses);
     }
     // get having clauses
     $havingClauses = $query->getHavingClauses();
     $having = NULL;
     if (!is_null($havingClauses)) {
         $having = $this->whereClauses($havingClauses);
     }
     // get order
     $order = $this->createOrder();
     //get grouping
     $group = $this->createGroup();
     // get limit
     $limit = $this->createLimit();
     $sql = 'SELECT ' . $selects . ' FROM ' . $this->mainTable . ' ' . $this->aliases['$self$'];
     if (!is_null($joins)) {
         $sql .= $joins;
     }
     if (!is_null($where)) {
         $sql .= ' WHERE ' . $where;
     }
     if (!is_null($group)) {
         $sql .= ' GROUP BY ' . $group;
     }
     if (!is_null($having)) {
         $sql .= ' HAVING ' . $having;
     }
     if (!is_null($order)) {
         $sql .= ' ORDER BY ' . $order;
     }
     if (!is_null($limit)) {
         /* Use the following format to replace MySQL LIMIT for PL/SQL :
         
         				SELECT * FROM (
         						SELECT rownum rnum, a.*
         						FROM(
         								SELECT fieldA,fieldB
         								FROM table
         								ORDER BY fieldA
         						) a
         						WHERE rownum <= START + LIMIT
         				)
         				WHERE rnum >= START
         
         				** or **
         
         				SELECT rownum rnum, a.*
         				FROM(
         						SELECT fieldA,fieldB
         						FROM table
         						ORDER BY fieldA
         				) a
         				WHERE rownum <= LIMIT
         
         
         			*/
         $qLimit = $this->query->getLimit();
         if (isset($qLimit['start']) && intval($qLimit['start']) > -1) {
             $start = intval($qLimit['start']);
         } else {
             $start = 0;
         }
         if (isset($qLimit['limit']) && intval($qLimit['limit']) > 0) {
             $limit = intval($qLimit['limit']);
         } else {
             $limit = 50;
         }
         // @TODO: clean this up
         // create alias for rownum field
         $rnfield = $this->createAlias();
         $subsel = $this->createAlias();
         $sql = "SELECT rownum {$rnfield}, {$subsel}.* FROM ( {$sql} ) {$subsel} WHERE rownum <= {$limit}";
         if ($start) {
             $sql = "SELECT * FROM ( {$sql} )  WHERE {$rnfield} > {$start}";
         }
     }
     if (One_Config::get('debug.query')) {
         echo '<pre>';
         var_dump($sql);
         echo '</pre>';
     }
     return $sql;
 }
Example #7
0
 /**
  * Render the query
  *
  * @param One_Query $query
  * @return string
  */
 public function render(One_Query $query, $overrideFilters = false)
 {
     $this->query = $query;
     $this->scheme = $this->query->getScheme();
     // if the person wants to perform a raw query, return the raw query
     if (!is_null($query->getRaw())) {
         if (One_Config::get('debug.query')) {
             echo '<pre>';
             var_dump($query->getRaw());
             echo '</pre>';
         }
         return $query->getRaw();
     }
     $this->query = $query;
     $this->scheme = $this->query->getScheme();
     $resources = $this->scheme->getResources();
     // fetch main table to fetch data from
     $this->mainTable = $resources['table'];
     $this->defineRole('$self$');
     // add possible filters to the query
     if (!$overrideFilters && isset($resources['filter'])) {
         $filters = explode(';', $resources['filter']);
         if (count($filters) > 0) {
             foreach ($filters as $filterName) {
                 if ($filterName != '') {
                     $filter = One_Repository::getFilter($filterName, $query->getScheme()->getName());
                     $filter->affect($query);
                 }
             }
         }
     }
     // TR20100531 No longer needs to be run after the rest since joins are now checked while adding
     // sselects, order, ...
     $joins = NULL;
     $qJoins = $query->getJoins();
     if (count($qJoins) > 0) {
         foreach ($qJoins as $join => $type) {
             $this->defineRole($join);
             $query->setRoleAlias($join, $this->aliases[$join]);
             $joins .= $this->createJoin($query->getRole($join), $type);
         }
     }
     // *** TODO: change the '*' to only the relavant fields defined in the scheme
     $selects = $this->aliases['$self$'] . '.*';
     if (count($query->getSelect()) > 0) {
         $selects = $this->createSelects($query->getSelect());
     }
     // get where clauses
     $whereClauses = $query->getWhereClauses();
     $where = NULL;
     if (!is_null($whereClauses)) {
         $where = $this->whereClauses($whereClauses);
     }
     // get having clauses
     $havingClauses = $query->getHavingClauses();
     $having = NULL;
     if (!is_null($havingClauses)) {
         $having = $this->whereClauses($havingClauses);
     }
     // get order
     $order = $this->createOrder();
     //get grouping
     $group = $this->createGroup();
     // get limit
     $limit = $this->createLimit();
     $sql = 'SELECT ' . $selects . ' FROM `' . $this->mainTable . '` ' . $this->aliases['$self$'];
     if (!is_null($joins)) {
         $sql .= $joins;
     }
     if (!is_null($where)) {
         $sql .= ' WHERE ' . $where;
     }
     if (!is_null($group)) {
         $sql .= ' GROUP BY ' . $group;
     }
     if (!is_null($having)) {
         $sql .= ' HAVING ' . $having;
     }
     if (!is_null($order)) {
         $sql .= ' ORDER BY ' . $order;
     }
     if (!is_null($limit)) {
         $sql .= ' LIMIT ' . $limit;
     }
     if (One_Config::get('debug.query')) {
         echo '<pre>';
         var_dump($sql);
         echo '</pre>';
     }
     return $sql;
 }
Example #8
0
 /**
  * Processes any possibly given filters and alters the One_Query object accordingly.
  *
  * The filter option provided by eg. the com_one menu item is a list of filters, comma-separated, to apply.
  * The extraParameters are passed to the filters
  *
  * @param One_Query $query
  * @param array $filters
  */
 protected function processQueryConditions(One_Query $query)
 {
     $filterString = $this->getVariable('filters', '');
     if ($filterString) {
         $filters = explode(',', $filterString);
         $filterParameters = parse_ini_string($this->getVariable('filterParameters', ','));
         foreach ($filters as $filterName) {
             $filter = One_Repository::getFilter($filterName, $query->getScheme()->getName(), $filterParameters);
             $filter->affect($query);
         }
     }
 }