Skip to content

Commit

Permalink
query: fixed bad filter value formatting
Browse files Browse the repository at this point in the history
  • Loading branch information
bauer01 committed Jan 12, 2016
1 parent fe5d242 commit 9f0098e
Show file tree
Hide file tree
Showing 2 changed files with 43 additions and 12 deletions.
12 changes: 8 additions & 4 deletions src/Query.php
Original file line number Diff line number Diff line change
Expand Up @@ -165,7 +165,7 @@ private function _formatFilter(array $filter, $or = false)
// NOT IN

foreach ($value as $index => $item) {
$value[$index] = $name . " != '" . $item . "'";
$value[$index] = $name . " != " . (is_string($item) ? "'" . $item . "'" : $item);
}

$value = "(" . implode(" AND ", $value) . ")";
Expand All @@ -185,7 +185,11 @@ private function _formatFilter(array $filter, $or = false)
} else {

$modifier = "IN";
$value = "('" . implode("','", $value) . "')";
if (array_filter($value, 'is_string')) {
$value = "('" . implode("','", $value) . ")";
} else {
$value = "(" . implode(",", $value) . ")";
}
}
} elseif (in_array($modifier, [Filter::EQUAL, Filter::NOT], true)) {
// IS, IS NOT, =, !=
Expand Down Expand Up @@ -219,12 +223,12 @@ private function _formatFilter(array $filter, $or = false)
} else {
$modifier = "!=";
}
$value = "'" . $value . "'";
$value = is_string($value) ? "'" . $value . "'" : $value;
}
} else {
// Other modifiers

$value = "'" . $value . "'";
$value = is_string($value) ? "'" . $value . "'" : $value;
}

if (is_bool($value)) {
Expand Down
43 changes: 35 additions & 8 deletions tests/cases/Query.phpt
Original file line number Diff line number Diff line change
Expand Up @@ -22,14 +22,23 @@ class QueryTest extends Tester\TestCase
{
$this->query->setFilter(["in" => [Filter::EQUAL => [1, 2]]]);
Assert::same(
"objednavka-prijata/(in IN ('1','2')).json?code-as-id=true",
"objednavka-prijata/(in IN (1,2)).json?code-as-id=true",
rawurldecode($this->query->getRaw())
);
}

public function testSetFilterEqual()
{
$this->query->setFilter(["equal" => [Filter::EQUAL=> 1]]);
Assert::same(
"objednavka-prijata/(equal = 1).json?code-as-id=true",
rawurldecode($this->query->getRaw())
);
}

public function testSetFilterEqualString()
{
$this->query->setFilter(["equal" => [Filter::EQUAL=> "1"]]);
Assert::same(
"objednavka-prijata/(equal = '1').json?code-as-id=true",
rawurldecode($this->query->getRaw())
Expand All @@ -40,14 +49,23 @@ class QueryTest extends Tester\TestCase
{
$this->query->setFilter(["notEqual" => [Filter::NOT => 1]]);
Assert::same(
"objednavka-prijata/(notEqual != '1').json?code-as-id=true",
"objednavka-prijata/(notEqual != 1).json?code-as-id=true",
rawurldecode($this->query->getRaw())
);
}

public function testSetFilterGreater()
{
$this->query->setFilter(["greater" => [Filter::GREATER => 1]]);
Assert::same(
"objednavka-prijata/(greater > 1).json?code-as-id=true",
rawurldecode($this->query->getRaw())
);
}

public function testSetFilterGreaterString()
{
$this->query->setFilter(["greater" => [Filter::GREATER => "1"]]);
Assert::same(
"objednavka-prijata/(greater > '1').json?code-as-id=true",
rawurldecode($this->query->getRaw())
Expand All @@ -58,7 +76,7 @@ class QueryTest extends Tester\TestCase
{
$this->query->setFilter(["less" => [Filter::LESS => 1]]);
Assert::same(
"objednavka-prijata/(less < '1').json?code-as-id=true",
"objednavka-prijata/(less < 1).json?code-as-id=true",
rawurldecode($this->query->getRaw())
);
}
Expand All @@ -67,7 +85,7 @@ class QueryTest extends Tester\TestCase
{
$this->query->setFilter(["lessEqual" => [Filter::LESSEQUAL => 1]]);
Assert::same(
"objednavka-prijata/(lessEqual <= '1').json?code-as-id=true",
"objednavka-prijata/(lessEqual <= 1).json?code-as-id=true",
rawurldecode($this->query->getRaw())
);
}
Expand All @@ -76,7 +94,7 @@ class QueryTest extends Tester\TestCase
{
$this->query->setFilter(["greaterEqual" => [Filter::GREATEREQUAL => 1]]);
Assert::same(
"objednavka-prijata/(greaterEqual >= '1').json?code-as-id=true",
"objednavka-prijata/(greaterEqual >= 1).json?code-as-id=true",
rawurldecode($this->query->getRaw())
);
}
Expand Down Expand Up @@ -183,6 +201,15 @@ class QueryTest extends Tester\TestCase
public function testSetFilterNotIn()
{
$this->query->setFilter(["notIn" => [Filter::NOT => [1, 2]]]);
Assert::same(
"objednavka-prijata/((notIn != 1 AND notIn != 2)).json?code-as-id=true",
rawurldecode($this->query->getRaw())
);
}

public function testSetFilterNotInStrings()
{
$this->query->setFilter(["notIn" => [Filter::NOT => ["1", "2"]]]);
Assert::same(
"objednavka-prijata/((notIn != '1' AND notIn != '2')).json?code-as-id=true",
rawurldecode($this->query->getRaw())
Expand Down Expand Up @@ -249,7 +276,7 @@ class QueryTest extends Tester\TestCase
]
);
Assert::same(
"objednavka-prijata/(id > '1' AND id < '2').json?code-as-id=true",
"objednavka-prijata/(id > 1 AND id < 2).json?code-as-id=true",
rawurldecode($this->query->getRaw())
);
}
Expand All @@ -269,7 +296,7 @@ class QueryTest extends Tester\TestCase
]
);
Assert::same(
"objednavka-prijata/(((one = '1' AND two = '2') AND (three = '3' AND four = '4'))).json?code-as-id=true",
"objednavka-prijata/(((one = 1 AND two = 2) AND (three = 3 AND four = 4))).json?code-as-id=true",
rawurldecode($this->query->getRaw())
);
}
Expand All @@ -291,7 +318,7 @@ class QueryTest extends Tester\TestCase
]
);
Assert::same(
"objednavka-prijata/(((one = '1' AND two = '2') AND (((three = '3' OR four = '4'))))).json?code-as-id=true",
"objednavka-prijata/(((one = 1 AND two = 2) AND (((three = 3 OR four = 4))))).json?code-as-id=true",
rawurldecode($this->query->getRaw())
);
}
Expand Down

0 comments on commit 9f0098e

Please sign in to comment.