From b439c9f2b08a65f149bd595488d27937fd35eaf5 Mon Sep 17 00:00:00 2001
From: Josh Pollock <josh@calderawp.com>
Date: Wed, 4 Apr 2018 20:50:07 -0400
Subject: [PATCH] allow resetting query

---
 Tests/Unit/Delete/DeleteQueryBuilderTest.php | 14 ++++++++++++++
 Tests/Unit/Select/SelectQueryBuilderTest.php | 13 +++++++++++++
 src/CreatesSqlQueries.php                    |  8 ++++++++
 src/QueryBuilder.php                         | 12 ++++++++++++
 src/Select/SelectQueryBuilder.php            |  2 ++
 5 files changed, 49 insertions(+)

diff --git a/Tests/Unit/Delete/DeleteQueryBuilderTest.php b/Tests/Unit/Delete/DeleteQueryBuilderTest.php
index a52929f..be97ae6 100644
--- a/Tests/Unit/Delete/DeleteQueryBuilderTest.php
+++ b/Tests/Unit/Delete/DeleteQueryBuilderTest.php
@@ -96,4 +96,18 @@ class DeleteQueryBuilderTest extends TestCase
 				->getName()
 		);
 	}
+
+	/**
+	 * Test reset of builder
+	 *
+	 * @covers DeleteQueryBuilder::resetBuilder()
+	 * @covers DeleteQueryBuilder::$deleteQuery
+	 */
+	public function testResetOfBuilder()
+	{
+		$entryGenerator = $this->entryDeleteGeneratorFactory();
+		$newBuilder = new MySqlBuilder();
+		$entryGenerator->resetBuilder( $newBuilder );
+		$this->assertSame( $newBuilder, $entryGenerator->getBuilder( ) );
+	}
 }
diff --git a/Tests/Unit/Select/SelectQueryBuilderTest.php b/Tests/Unit/Select/SelectQueryBuilderTest.php
index 2c3c8f1..f3a1555 100644
--- a/Tests/Unit/Select/SelectQueryBuilderTest.php
+++ b/Tests/Unit/Select/SelectQueryBuilderTest.php
@@ -109,4 +109,17 @@ class SelectQueryBuilderTest extends TestCase
 		$this->assertEquals(Entry::DESC, 'DESC');
 		$this->assertEquals(EntryValues::DESC, 'DESC');
 	}
+
+	/**
+	 * Test reset of builder
+	 *
+	 * @covers SelectQueryBuilder::resetBuilder()
+	 */
+	public function testResetOfBuilder()
+	{
+		$entryGenerator = $this->entryGeneratorFactory();
+		$newBuilder = new MySqlBuilder();
+		$entryGenerator->resetBuilder( $newBuilder );
+		$this->assertSame( $newBuilder, $entryGenerator->getBuilder( ) );
+	}
 }
diff --git a/src/CreatesSqlQueries.php b/src/CreatesSqlQueries.php
index 546475d..dde4600 100644
--- a/src/CreatesSqlQueries.php
+++ b/src/CreatesSqlQueries.php
@@ -31,4 +31,12 @@ interface CreatesSqlQueries
 	 * @return MySqlBuilder
 	 */
 	public function getBuilder();
+
+	/**
+	 * Reset the query builder
+	 *
+	 * @param MySqlBuilder|null $builder New builder or null to use default empty
+	 * @return $this
+	 */
+	public function resetBuilder( MySqlBuilder $builder = null );
 }
diff --git a/src/QueryBuilder.php b/src/QueryBuilder.php
index 67ef15c..22b17f3 100644
--- a/src/QueryBuilder.php
+++ b/src/QueryBuilder.php
@@ -44,6 +44,18 @@ abstract class QueryBuilder implements CreatesSqlQueries
 		$this->tableName = $tableName;
 	}
 
+	/** @inheritdoc */
+	public function resetBuilder(MySqlBuilder $builder = null)
+	{
+		if( ! $builder ){
+			$builder = new MySqlBuilder();
+		}
+
+		$this->builder = $builder;
+		return $this;
+
+	}
+
 	/**
 	 * @return AbstractBaseQuery
 	 */
diff --git a/src/Select/SelectQueryBuilder.php b/src/Select/SelectQueryBuilder.php
index 16f8fbf..57891b5 100644
--- a/src/Select/SelectQueryBuilder.php
+++ b/src/Select/SelectQueryBuilder.php
@@ -47,4 +47,6 @@ abstract class SelectQueryBuilder extends QueryBuilder implements DoesSelectQuer
 		$this->getCurrentQuery()->orderBy($column, $order);
 		return $this;
 	}
+
+
 }
-- 
GitLab