Example #1
0
 /**
  * @param \Freetrix\Main\Data\Connection $connection
  * @param Query                        $query
  *
  * @return bool
  */
 public static function checkQuery(\Freetrix\Main\Data\Connection $connection, Query $query)
 {
     // check interface
     if (!$connection instanceof INosqlPrimarySelector) {
         return false;
     }
     // no expressions in select
     foreach ($query->getSelectChains() as $selectChain) {
         if ($selectChain->getLastElement()->getValue() instanceof ExpressionField) {
             return false;
         }
     }
     // skip empty select, just for not handle this useless case in nosql api
     if (!count($query->getSelect())) {
         return false;
     }
     // if empty joinmap, group, order and simple filter
     if (!count($query->getJoinMap()) && !count($query->getGroupChains()) && !count($query->getOrderChains()) && !count($query->getHavingChains())) {
         $entityPrimary = $query->getEntity()->getPrimary();
         // check for primary singularity
         if (!is_array($entityPrimary)) {
             // check if only primary is in filter
             if (count($query->getFilterChains()) == 1 && key($query->getFilterChains()) === $entityPrimary) {
                 $passFilter = true;
                 // check if only equality operations & 1-level filter
                 foreach ($query->getFilter() as $filterElement => $filterValue) {
                     if (is_numeric($filterElement) && is_array($filterValue)) {
                         // filter has subfilters. not ok
                         $passFilter = false;
                         break;
                     }
                     if ($filterElement === 'LOGIC') {
                         continue;
                     }
                     $operation = substr($filterElement, 0, 1);
                     if ($operation !== '=') {
                         // only equal operation allowed. not ok
                         $passFilter = false;
                         break;
                     }
                 }
                 // fine!
                 if ($passFilter) {
                     return true;
                 }
             }
         }
     }
     return false;
 }