Beispiel #1
0
 /**
  * Checks if value is a Filter
  *
  * @param   mixed       $value          Value to evaluate
  * @param   array       $requirements   Array of constraints
  * @return  array       Cleared value
  * @throws  InvalidDataException        If the value is not a Filter or fails constraints checks
  */
 public static function checkFilters($value, array $requirements)
 {
     $filters = array();
     if (is_array($value)) {
         // Check if we are dealing with filters or one Filter
         if (is_array($value[0])) {
             foreach ($value as $filter) {
                 $filters[] = FilterType::check($filter, $requirements);
             }
         } else {
             $filters[] = FilterType::check($value, $requirements);
         }
     }
     return $filters;
 }
Beispiel #2
0
 public function testFilterToCriterionPassBooleanType()
 {
     $filter = 'and-id-bool-value-true';
     $this->assertInstanceOf('Ucc\\Data\\Filter\\Criterion\\Criterion', FilterType::criteriaToCriterion($filter));
     $filter = 'and-id-bool-value-false';
     $this->assertInstanceOf('Ucc\\Data\\Filter\\Criterion\\Criterion', FilterType::criteriaToCriterion($filter));
 }
Beispiel #3
0
 public function expandSimpleQueryProvider()
 {
     // test WHERE and SORT
     $data = array();
     $options = array();
     $query = new Query();
     $sql = 'SELECT * FROM `products` ';
     $expectedSql = 'SELECT * FROM `products` WHERE (`name` LIKE CONCAT("%", :0_filter_0, "%") COLLATE utf8_general_ci OR `name` LIKE CONCAT("%", :0_filter_1, "%") COLLATE utf8_general_ci AND `price` > :0_filter_2) GROUP BY `name`,`price` ORDER BY `name` ASC,`price` DESC';
     $expectedParams = array('0_filter_0' => 'galaxy', '0_filter_1' => '4s', '0_filter_2' => '100');
     $query->setStatement($sql);
     $expected = new Query();
     $expected->setStatement($expectedSql)->setParameters($expectedParams);
     $sort1 = new Sort();
     $sort1->setField('name');
     $sort2 = new Sort();
     $sort2->setField('price')->setDirection('DESC');
     $filterA = new Filter();
     $criterions = array(FilterType::criteriaToCriterion('and-name-inci-value-galaxy'), FilterType::criteriaToCriterion('or-name-inci-value-4s'), FilterType::criteriaToCriterion('and-price-gt-value-100'));
     $filterA->setCriterions($criterions);
     $options = array('sort' => array($sort1, $sort2), 'group' => array('name', 'price'), 'filter' => array($filterA));
     $data[] = array($query, $options, $expected);
     // test HAVING
     $query = new Query();
     $query->setStatement($sql);
     $sql = 'SELECT * FROM `products` ';
     $expectedSql = 'SELECT * FROM `products` HAVING (`name` = CAST(`price` AS CHAR) COLLATE utf8_bin OR `clicks` > `price`)';
     $expected = new Query();
     $expected->setStatement($expectedSql);
     $fieldMap = array('name' => 'having');
     $filterA = new Filter();
     $criterions = array(FilterType::criteriaToCriterion('and-name-eq-field-price'), FilterType::criteriaToCriterion('or-clicks-gt-field-price'));
     $filterA->setCriterions($criterions);
     $options = array('filter' => array($filterA));
     $data[] = array($query, $options, $expected, $fieldMap);
     // test * in field map
     $query = new Query();
     $query->setStatement($sql);
     $sql = 'SELECT * FROM `products` ';
     $expectedSql = 'SELECT * FROM `products` HAVING (`name` = CAST(`price` AS CHAR) COLLATE utf8_bin OR `clicks` > `price`)';
     $expected = new Query();
     $expected->setStatement($expectedSql);
     $fieldMap = array('*' => 'having');
     $filterA = new Filter();
     $criterions = array(FilterType::criteriaToCriterion('and-name-eq-field-price'), FilterType::criteriaToCriterion('or-clicks-gt-field-price'));
     $filterA->setCriterions($criterions);
     $options = array('filter' => array($filterA));
     $data[] = array($query, $options, $expected, $fieldMap);
     // test LIMIT and offset
     $query = new Query();
     $query->setStatement($sql);
     $sql = 'SELECT * FROM `products` ';
     $expectedSql = 'SELECT * FROM `products` WHERE (`name` = CAST(`price` AS CHAR) COLLATE utf8_bin OR `clicks` > `price`) LIMIT 10,20';
     $expected = new Query();
     $expected->setStatement($expectedSql);
     $filterA = new Filter();
     $criterions = array(FilterType::criteriaToCriterion('and-name-eq-field-price'), FilterType::criteriaToCriterion('or-clicks-gt-field-price'));
     $filterA->setCriterions($criterions);
     $options = array('filter' => array($filterA), 'limit' => 20, 'offset' => 10);
     $data[] = array($query, $options, $expected);
     // test Single Filter
     $sql = 'SELECT * FROM `orders` ';
     $querySingle = new Query();
     $querySingle->setStatement($sql);
     $expectedSql = 'SELECT * FROM `orders` WHERE (`id` > :0_filter_0 AND `id` >= :0_filter_1) LIMIT 2,100';
     $expectedParams = array('0_filter_0' => '1', '0_filter_1' => '2');
     $expected = new Query();
     $expected->setStatement($expectedSql)->setParameters($expectedParams);
     $filterSingle = new Filter();
     $criterions = array(FilterType::criteriaToCriterion('and-id-gt-value-1'), FilterType::criteriaToCriterion('and-id-ge-value-2'));
     $filterSingle->setCriterions($criterions);
     $options = array('filter' => $filterSingle, 'limit' => 100, 'offset' => 2);
     $data[] = array($querySingle, $options, $expected);
     return $data;
 }
Beispiel #4
0
 public function criterionOperandToMethodProvider()
 {
     $data = array();
     // Bool compare
     $criterion = FilterType::criteriaToCriterion('and-foo-bool-value-1');
     $expectedMethod = 'criterionToBool';
     $data[] = array($criterion, $expectedMethod);
     $data[] = array($criterion, $expectedMethod);
     // Direct compare
     $criterion = FilterType::criteriaToCriterion('and-foo-nei-field-bar');
     $expectedMethod = 'criterionToDirect';
     $data[] = array($criterion, $expectedMethod);
     $criterion = FilterType::criteriaToCriterion('and-foo-ne-field-bar');
     $data[] = array($criterion, $expectedMethod);
     $criterion = FilterType::criteriaToCriterion('and-foo-eq-field-bar');
     $data[] = array($criterion, $expectedMethod);
     $criterion = FilterType::criteriaToCriterion('and-foo-eqi-field-bar');
     $data[] = array($criterion, $expectedMethod);
     // Relative compare
     $criterion = FilterType::criteriaToCriterion('and-foo-gt-field-bar');
     $expectedMethod = 'criterionToRelative';
     $data[] = array($criterion, $expectedMethod);
     $criterion = FilterType::criteriaToCriterion('and-foo-ge-field-bar');
     $data[] = array($criterion, $expectedMethod);
     $criterion = FilterType::criteriaToCriterion('and-foo-lt-field-bar');
     $data[] = array($criterion, $expectedMethod);
     $criterion = FilterType::criteriaToCriterion('and-foo-le-field-bar');
     $data[] = array($criterion, $expectedMethod);
     // Contains compare
     $criterion = FilterType::criteriaToCriterion('and-foo-inc-value-1,2,3');
     $expectedMethod = 'criterionToContains';
     $data[] = array($criterion, $expectedMethod);
     $criterion = FilterType::criteriaToCriterion('and-foo-ninc-value-1,2,3');
     $data[] = array($criterion, $expectedMethod);
     $criterion = FilterType::criteriaToCriterion('and-foo-inci-value-1,2,3');
     $data[] = array($criterion, $expectedMethod);
     $criterion = FilterType::criteriaToCriterion('and-foo-ninci-value-1,2,3');
     $data[] = array($criterion, $expectedMethod);
     // Begins with compare
     $criterion = FilterType::criteriaToCriterion('and-foo-begins-field-bar');
     $expectedMethod = 'criterionToBegins';
     $data[] = array($criterion, $expectedMethod);
     $criterion = FilterType::criteriaToCriterion('and-foo-nbegins-field-bar');
     $data[] = array($criterion, $expectedMethod);
     $criterion = FilterType::criteriaToCriterion('and-foo-beginsi-field-bar');
     $data[] = array($criterion, $expectedMethod);
     $criterion = FilterType::criteriaToCriterion('and-foo-nbeginsi-field-bar');
     $data[] = array($criterion, $expectedMethod);
     // Regex compare
     $criterion = FilterType::criteriaToCriterion('and-foo-re-value-^1');
     $expectedMethod = 'criterionToRegex';
     $data[] = array($criterion, $expectedMethod);
     // In compare
     $criterion = FilterType::criteriaToCriterion('and-foo-in-field-1,2,3');
     $expectedMethod = 'criterionToIn';
     $data[] = array($criterion, $expectedMethod);
     $criterion = FilterType::criteriaToCriterion('and-foo-nin-field-1,2,3');
     $data[] = array($criterion, $expectedMethod);
     $criterion = FilterType::criteriaToCriterion('and-foo-ini-field-1,2,3');
     $data[] = array($criterion, $expectedMethod);
     $criterion = FilterType::criteriaToCriterion('and-foo-nini-field-1,2,3');
     $data[] = array($criterion, $expectedMethod);
     // No method
     $criterion = new Criterion();
     $expectedMethod = false;
     $data[] = array($criterion, $expectedMethod);
     return $data;
 }