From 2374ba3c7dd879144ce2b0ccc17c50a39892ebf7 Mon Sep 17 00:00:00 2001 From: Josh Pollock <josh@calderawp.com> Date: Thu, 5 Apr 2018 20:51:01 -0400 Subject: [PATCH] delete by entry ids --- Tests/Integration/Delete/EntryTest.php | 35 ++++++++++++++++++++++++++ src/Delete/Entry.php | 11 ++++++++ src/Exceptions/Exception.php | 8 ++++++ src/QueryBuilder.php | 24 ++++++++++++++++-- src/Select/Entry.php | 8 +++--- src/Select/SelectQueryBuilder.php | 8 +++--- 6 files changed, 83 insertions(+), 11 deletions(-) create mode 100644 src/Exceptions/Exception.php diff --git a/Tests/Integration/Delete/EntryTest.php b/Tests/Integration/Delete/EntryTest.php index 071f3ad..fa8b577 100644 --- a/Tests/Integration/Delete/EntryTest.php +++ b/Tests/Integration/Delete/EntryTest.php @@ -4,6 +4,7 @@ namespace calderawp\CalderaFormsQuery\Tests\Integration\Delete; +use calderawp\CalderaFormsQuery\Delete\Entry; use calderawp\CalderaFormsQuery\Tests\Integration\IntegrationTestCase; class EntryTest extends IntegrationTestCase @@ -159,7 +160,41 @@ class EntryTest extends IntegrationTestCase ) )); + } + + /** + * Test querying by IDs + * + * @covers Entry::deleteByEntryIds() + */ + public function testByEntryIds() + { + $entryIdOne = $this->createEntryWithMockFormAndGetEntryId(); + $entryIdTwo = $this->createEntryWithMockFormAndGetEntryId(); + $entryIdThree = $this->createEntryWithMockFormAndGetEntryId(); + + //Delete results IN One and Three + $entryGenerator = $this->entryDeleteGeneratorFactory(); + $sql = $entryGenerator->deleteByEntryIds( [ + $entryIdOne, + $entryIdThree + ]) + ->getPreparedSql(); + $this->queryWithWPDB($sql); + + //Query for entry Two expect 1 result + $entryGenerator = $this->entryGeneratorFactory(); + $sql = $entryGenerator->queryByEntryId($entryIdTwo) + ->getPreparedSql(); + $results = $this->queryWithWPDB( $sql ); + $this->assertSame( 1, count( $results ) ); + //Query for entry One expect 0 result + $entryGenerator = $this->entryGeneratorFactory(); + $sql = $entryGenerator->queryByEntryId($entryIdOne) + ->getPreparedSql(); + $results = $this->queryWithWPDB( $sql ); + $this->assertSame( 0, count( $results ) ); } diff --git a/src/Delete/Entry.php b/src/Delete/Entry.php index edbf882..28d6434 100644 --- a/src/Delete/Entry.php +++ b/src/Delete/Entry.php @@ -28,6 +28,17 @@ class Entry extends DeleteQueryBuilder return $this->is('id', $entryId); } + /** + * Delete an array of entries + * + * @param array $entryIds + * @return $this + */ + public function deleteByEntryIds(array $entryIds) + { + return $this->in($entryIds); + } + /** * Delete entries belonging to a specific user ID * diff --git a/src/Exceptions/Exception.php b/src/Exceptions/Exception.php new file mode 100644 index 0000000..6303eff --- /dev/null +++ b/src/Exceptions/Exception.php @@ -0,0 +1,8 @@ +<?php + +namespace calderawp\CalderaFormsQuery\Exceptions; + +class Exception extends \Exception +{ + +} \ No newline at end of file diff --git a/src/QueryBuilder.php b/src/QueryBuilder.php index 3a9a311..6dc87a8 100644 --- a/src/QueryBuilder.php +++ b/src/QueryBuilder.php @@ -3,7 +3,7 @@ namespace calderawp\CalderaFormsQuery; -use calderawp\CalderaFormsQuery\Select\DoesSelectQuery; +use calderawp\CalderaFormsQuery\Exceptions\Exception; use NilPortugues\Sql\QueryBuilder\Manipulation\AbstractBaseQuery; /** @@ -94,12 +94,17 @@ abstract class QueryBuilder implements CreatesSqlQueries * * @param string $sql SQL query with substitutions * @return string + * @throws Exception */ protected function substituteValues($sql) { $values = $this->getBuilder()->getValues(); foreach ($values as $identifier => $value) { - $values[$identifier] = $this->surroundValue($value); + if (is_array( $value ) || is_object( $value ) ) { + continue; + } else { + $values[$identifier] = $this->surroundValue($value); + } } return str_replace(array_keys($values), array_values($values), $sql); } @@ -153,4 +158,19 @@ abstract class QueryBuilder implements CreatesSqlQueries { return $this->substituteValues($this->getBuilder()->write($this->getCurrentQuery())); } + + /** + * Add a WHERE IN() + * + * @param array $entryIds + * @return $this + */ + protected function in(array $entryIds) + { + $this + ->getCurrentQuery() + ->where() + ->in('id', $entryIds); + return $this; + } } diff --git a/src/Select/Entry.php b/src/Select/Entry.php index 7aa2824..c1fea30 100644 --- a/src/Select/Entry.php +++ b/src/Select/Entry.php @@ -42,11 +42,7 @@ class Entry extends SelectQueryBuilder */ public function queryByEntryIds(array $entryIds) { - $this - ->getSelectQuery() - ->where() - ->in( 'id', $entryIds ); - return $this; + return $this->in($entryIds); } /** @@ -59,4 +55,6 @@ class Entry extends SelectQueryBuilder { return $this->is('user_id', $userId); } + + } diff --git a/src/Select/SelectQueryBuilder.php b/src/Select/SelectQueryBuilder.php index eb45d07..9c06624 100644 --- a/src/Select/SelectQueryBuilder.php +++ b/src/Select/SelectQueryBuilder.php @@ -3,11 +3,7 @@ namespace calderawp\CalderaFormsQuery\Select; -use calderawp\CalderaFormsQuery\CreatesSqlQueries; -use calderawp\CalderaFormsQuery\MySqlBuilder; use calderawp\CalderaFormsQuery\QueryBuilder; -use NilPortugues\Sql\QueryBuilder\Manipulation\AbstractBaseQuery; -use NilPortugues\Sql\QueryBuilder\Manipulation\Delete; use NilPortugues\Sql\QueryBuilder\Manipulation\Select; abstract class SelectQueryBuilder extends QueryBuilder implements DoesSelectQuery @@ -56,8 +52,12 @@ abstract class SelectQueryBuilder extends QueryBuilder implements DoesSelectQuer return $this; } + /** + * Set new query in selectQuery prop + */ private function setNewQuery() { $this->selectQuery = new \NilPortugues\Sql\QueryBuilder\Manipulation\Select($this->getTableName()); } + } -- GitLab