diff --git a/src/Lunr/Gravity/Database/DatabaseQueryResultInterface.php b/src/Lunr/Gravity/Database/DatabaseQueryResultInterface.php
index 7a28899433e7db4e6c7fbb01809cd4841b93602b..eec40a8807a80e36058e51e9b02364c10590bebd 100644
--- a/src/Lunr/Gravity/Database/DatabaseQueryResultInterface.php
+++ b/src/Lunr/Gravity/Database/DatabaseQueryResultInterface.php
@@ -65,14 +65,14 @@ interface DatabaseQueryResultInterface
     /**
      * Returns the number of rows affected by the last query.
      *
-     * @return mixed $number Number of rows in the result set.
+     * @return mixed $number Number of affected rows in the result set.
      */
     public function affected_rows();
 
     /**
-     * Returns the number of rows in the result set.
+     * Returns the number of rows in the query.
      *
-     * @return mixed $number Number of rows in the result set.
+     * @return Integer $number Number of rows in the result set.
      */
     public function number_of_rows();
 
diff --git a/src/Lunr/Gravity/Database/SQLite3/SQLite3QueryResult.php b/src/Lunr/Gravity/Database/SQLite3/SQLite3QueryResult.php
new file mode 100644
index 0000000000000000000000000000000000000000..b6212633870cf6a507d41afae6cd354a284a1885
--- /dev/null
+++ b/src/Lunr/Gravity/Database/SQLite3/SQLite3QueryResult.php
@@ -0,0 +1,323 @@
+<?php
+
+/**
+ * Contains SQLite3QueryResult class.
+ *
+ * PHP Version 5.6
+ *
+ * @package    Lunr\Gravity\Database\SQLite3
+ * @author     Ruben de Groot <r.degroot@m2mobi.com>
+ * @copyright  2012-2016, M2Mobi BV, Amsterdam, The Netherlands
+ * @license    http://lunr.nl/LICENSE MIT License
+ */
+
+namespace Lunr\Gravity\Database\SQLite3;
+
+use Lunr\Gravity\Database\DatabaseQueryResultInterface;
+
+/**
+ * Class SQLite3QueryResult
+ *
+ * This class contains methods for the result of a query using SQLite3.
+ */
+class SQLite3QueryResult implements DatabaseQueryResultInterface
+{
+
+    /**
+     * The Sqlite3 error code for transaction deadlock.
+     * @var Integer
+     */
+    const DEADLOCK_ERR_CODE = 6;
+
+    /**
+     * The query string that was executed.
+     * @var String
+     */
+    protected $query;
+
+    /**
+     * Return value from sqlite3->query().
+     * @var mixed
+     */
+    protected $result;
+
+    /**
+     * Shared instance of the sqlite3 class.
+     * @var LunrSQLite3
+     */
+    protected $sqlite3;
+
+    /**
+     * Flag whether the query was successful or not.
+     * @var Boolean
+     */
+    protected $success;
+
+    /**
+     * Flag whether the memory has been freed or not.
+     * @var Boolean
+     */
+    protected $freed;
+
+    /**
+     * Description of the error.
+     * @var String
+     */
+    protected $error_message;
+
+    /**
+     * Error code.
+     * @var Integer
+     */
+    protected $error_number;
+
+    /**
+     * Auto incremented ID generated on last insert.
+     * @var mixed
+     */
+    protected $insert_id;
+
+    /**
+     * Number of affected rows.
+     * @var Integer
+     */
+    protected $affected_rows;
+
+    /**
+     * Constructor to build the results.
+     *
+     * @param String      $query   Executed query
+     * @param mixed       $result  Query result
+     * @param LunrSQLite3 $sqlite3 Instance of the LunrSQLite3 class
+     */
+    public function __construct($query, $result, $sqlite3)
+    {
+        if (is_object($result))
+        {
+            $this->success = TRUE;
+            $this->freed   = FALSE;
+        }
+        else
+        {
+            $this->success = $result;
+            $this->freed   = TRUE;
+        }
+
+        $this->result  = $result;
+        $this->sqlite3 = $sqlite3;
+        $this->query   = $query;
+
+        $this->error_message = $sqlite3->lastErrorMsg();
+        $this->error_number  = $sqlite3->lastErrorCode();
+        $this->insert_id     = $sqlite3->lastInsertRowID();
+        $this->affected_rows = $sqlite3->changes();
+    }
+
+    /**
+     * Destructor to free the results.
+     */
+    public function __destruct()
+    {
+        $this->free_result();
+
+        unset($this->success);
+        unset($this->freed);
+        unset($this->result);
+        unset($this->sqlite3);
+        unset($this->query);
+        unset($this->error_message);
+        unset($this->error_number);
+        unset($this->insert_id);
+        unset($this->affected_rows);
+    }
+
+    /**
+     * Free memory associated with a result.
+     *
+     * @return void
+     */
+    protected function free_result()
+    {
+        if ($this->freed === FALSE)
+        {
+            $this->result->finalize();
+            $this->freed = TRUE;
+        }
+    }
+
+    /**
+     * Check whether the query has a deadlock or not.
+     *
+     * @return Boolean $return TRUE if it failed, FALSE otherwise
+     */
+    public function has_deadlock()
+    {
+        return ($this->error_number == self::DEADLOCK_ERR_CODE);
+    }
+
+    /**
+     * Check whether the query has failed or not.
+     *
+     * @return Boolean $return TRUE if it failed, FALSE otherwise
+     */
+    public function has_failed()
+    {
+        return !$this->success;
+    }
+
+    /**
+     * Get string description of the error, if there was one.
+     *
+     * @return String $message Error Message
+     */
+    public function error_message()
+    {
+        return $this->error_message;
+    }
+
+    /**
+     * Get numerical error code of the error, if there was one.
+     *
+     * @return Integer $code Error Code
+     */
+    public function error_number()
+    {
+        return $this->error_number;
+    }
+
+    /**
+     * Get auto incremented ID generated on last insert.
+     *
+     * @return mixed $id If the number is greater than maximal int value it's a String
+     *                   otherwise an Integer
+     */
+    public function insert_id()
+    {
+        return $this->insert_id;
+    }
+
+    /**
+     * Get the executed query.
+     *
+     * @return String $query The executed query
+     */
+    public function query()
+    {
+        return $this->query;
+    }
+
+    /**
+     * Returns the number of rows affected by the last query.
+     *
+     * @return mixed $number Number of rows in the result set.
+     */
+    public function affected_rows()
+    {
+        return $this->affected_rows;
+    }
+
+    /**
+     * Returns the number of rows in the query. 
+     *
+     * @return Integer $number Number of rows in the result set. 
+     */
+    public function number_of_rows()
+    {
+        $count = 0;
+
+        while ($this->result->fetchArray(SQLITE3_ASSOC))
+        {
+            $count++;
+        }
+
+        return $count;
+    }
+
+    /**
+     * Get the entire result set as an array.
+     *
+     * @return array $output Result set as array
+     */
+    public function result_array()
+    {
+        $output = [];
+
+        if (!is_object($this->result))
+        {
+            return $output;
+        }
+
+        while ($row = $this->result->fetchArray(SQLITE3_ASSOC))
+        {
+            $output[] = $row;
+        }
+
+        $this->free_result();
+
+        return $output;
+    }
+
+    /**
+     * Get the first row of the result set.
+     *
+     * @return array $output First result row as array
+     */
+    public function result_row()
+    {
+        $output = is_object($this->result) ? $this->result->fetchArray(SQLITE3_ASSOC) : [];
+
+        $this->free_result();
+
+        return $output;
+    }
+
+    /**
+     * Get a specific column of the result set.
+     *
+     * @param String $column Column or Alias name
+     *
+     * @return array $output Result column as array
+     */
+    public function result_column($column)
+    {
+        $output = [];
+
+        if (!is_object($this->result))
+        {
+            return $output;
+        }
+
+        while ($row = $this->result->fetchArray(SQLITE3_ASSOC))
+        {
+            $output[] = $row[$column];
+        }
+
+        $this->free_result();
+
+        return $output;
+    }
+
+    /**
+     * Get a specific column of the first row of the result set.
+     *
+     * @param String $column Column or Alias name
+     *
+     * @return mixed $output NULL if it does not exist, the value otherwise
+     */
+    public function result_cell($column)
+    {
+        if (!is_object($this->result))
+        {
+            return NULL;
+        }
+
+        $line = $this->result->fetchArray(SQLITE3_ASSOC);
+
+        $this->free_result();
+
+        return isset($line[$column]) ? $line[$column] : NULL;
+    }
+
+}
+
+?>
diff --git a/src/Lunr/Gravity/Database/SQLite3/Tests/SQLite3QueryResultBaseTest.php b/src/Lunr/Gravity/Database/SQLite3/Tests/SQLite3QueryResultBaseTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..f038d12da628045c5b328e9ca01ca3db6b09a9d2
--- /dev/null
+++ b/src/Lunr/Gravity/Database/SQLite3/Tests/SQLite3QueryResultBaseTest.php
@@ -0,0 +1,159 @@
+<?php
+
+/**
+ * Contains SQLite3QueryResultBaseTest class.
+ *
+ * PHP Version 5.6
+ *
+ * @package    Lunr\Gravity\Database\SQLite3
+ * @author     Ruben de Groot <r.degroot@m2mobi.com>
+ * @copyright  2012-2016, M2Mobi BV, Amsterdam, The Netherlands
+ * @license    http://lunr.nl/LICENSE MIT License
+ */
+
+namespace Lunr\Gravity\Database\SQLite3\Tests;
+
+/**
+ * This class contains the basic tests.
+ *
+ * @covers Lunr\Gravity\Database\SQLite3\SQLite3QueryResult
+ */
+class SQLite3QueryResultBaseTest extends SQLite3QueryResultTest
+{
+
+    /**
+     * Override the default setUp with a setup with no result.
+     */
+    public function setUp()
+    {
+        $this->setUpWithNoResult();
+    }
+
+    /**
+     * Test that error message is empty on successful query.
+     *
+     * @covers Lunr\Gravity\Database\SQLite3\SQLite3QueryResult::error_message
+     */
+    public function testErrorMessageIsEmpty()
+    {
+        $property = $this->get_accessible_reflection_property('error_message');
+        $this->assertSame('', $property->getValue($this->class));
+    }
+
+    /**
+     * Test that error number is zero on successful query.
+     *
+     * @covers Lunr\Gravity\Database\SQLite3\SQLite3QueryResult::error_number
+     */
+    public function testErrorNumberIsZero()
+    {
+        $property = $this->get_accessible_reflection_property('error_number');
+        $this->assertSame(0, $property->getValue($this->class));
+    }
+
+    /**
+     * Test that error number is zero on successful query.
+     *
+     * @covers Lunr\Gravity\Database\SQLite3\SQLite3QueryResult::insert_id
+     */
+    public function testInsertIDIsZero()
+    {
+        $property = $this->get_accessible_reflection_property('insert_id');
+        $this->assertSame(0, $property->getValue($this->class));
+    }
+
+    /**
+     * Test that affected rows is a number on successful query.
+     *
+     * @covers Lunr\Gravity\Database\SQLite3\SQLite3QueryResult::affected_rows
+     */
+    public function testAffectedRowsIsNumber()
+    {
+        $property = $this->get_accessible_reflection_property('affected_rows');
+        $this->assertInternalType('int', $property->getValue($this->class));
+    }
+
+    /**
+     * Test that the query is passed correctly on successful query.
+     *
+     * @covers Lunr\Gravity\Database\SQLite3\SQLite3QueryResult::query
+     */
+    public function testQueryIsPassedCorrectly()
+    {
+        $property = $this->get_accessible_reflection_property('query');
+        $this->assertSame($this->query, $property->getValue($this->class));
+    }
+
+    /**
+     * Test that affected_rows() returns a number.
+     *
+     * @covers Lunr\Gravity\Database\MySQL\MySQLQueryResult::affected_rows
+     */
+    public function testAffectedRowsReturnsNumber()
+    {
+        $this->set_reflection_property_value('affected_rows', 12);
+        $this->assertSame(12, $this->class->affected_rows());
+    }
+
+    /**
+     * Test that error_message() returns a string.
+     *
+     * @covers Lunr\Gravity\Database\MySQL\MySQLQueryResult::error_message
+     */
+    public function testErrorMessageReturnsString()
+    {
+        $this->set_reflection_property_value('error_message', '');
+        $this->assertSame('', $this->class->error_message());
+    }
+
+    /**
+     * Test that error_number() returns a number.
+     *
+     * @covers Lunr\Gravity\Database\MySQL\MySQLQueryResult::error_number
+     */
+    public function testErrorNumberReturnsNumber()
+    {
+        $this->set_reflection_property_value('error_number', 0);
+        $this->assertSame(0, $this->class->error_number());
+    }
+
+    /**
+     * Test that insert_id() returns a number.
+     *
+     * @covers Lunr\Gravity\Database\MySQL\MySQLQueryResult::insert_id
+     */
+    public function testInsertIDReturnsNumber()
+    {
+        $this->set_reflection_property_value('insert_id', 0);
+        $this->assertSame(0, $this->class->insert_id());
+    }
+
+    /**
+     * Test that query() returns a string.
+     *
+     * @covers Lunr\Gravity\Database\MySQL\MySQLQueryResult::query
+     */
+    public function testQueryReturnsString()
+    {
+        $this->set_reflection_property_value('query', '');
+        $this->assertSame('', $this->class->query());
+    }
+
+    /**
+     * Test that the sqlite3 class is passed by reference.
+     *
+     * @covers Lunr\Gravity\Database\SQLite3\SQLite3QueryResult::sqlite3
+     */
+    public function testSQLite3IsPassedByReference()
+    {
+        $property = $this->get_accessible_reflection_property('sqlite3');
+
+        $value = $property->getValue($this->class);
+
+        $this->assertInstanceOf(\SQLite3::class, $value);
+        $this->assertSame($this->sqlite3, $value);
+    }
+
+}
+
+?>
\ No newline at end of file
diff --git a/src/Lunr/Gravity/Database/SQLite3/Tests/SQLite3QueryResultFailedTest.php b/src/Lunr/Gravity/Database/SQLite3/Tests/SQLite3QueryResultFailedTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..0e2edc08ea5d346ccf93b6d03c5c0a8236ca8d8f
--- /dev/null
+++ b/src/Lunr/Gravity/Database/SQLite3/Tests/SQLite3QueryResultFailedTest.php
@@ -0,0 +1,189 @@
+<?php
+
+/**
+ * Contains SQLite3QueryResultFailedTest class.
+ *
+ * PHP Version 5.6
+ *
+ * @package    Lunr\Gravity\Database\SQLite3
+ * @author     Ruben de Groot <r.degroot@m2mobi.com>
+ * @copyright  2012-2016, M2Mobi BV, Amsterdam, The Netherlands
+ * @license    http://lunr.nl/LICENSE MIT License
+ */
+
+namespace Lunr\Gravity\Database\SQLite3\Tests;
+
+/**
+ * This class contains the tests for testing a failed query.
+ *
+ * @covers Lunr\Gravity\Database\SQLite3\SQLite3QueryResult
+ */
+class SQLite3QueryResultFailedTest extends SQLite3QueryResultTest
+{
+
+    /**
+     * Override the default setUp with a setup with a failed query.
+     */
+    public function setUp()
+    {
+        $this->setUpWithFailedQuery();
+    }
+
+    /**
+     * Test that the success flag is FALSE.
+     *
+     * @covers Lunr\Gravity\Database\SQLite3\SQLite3QueryResult::success
+     */
+    public function testSuccessIsFalse()
+    {
+        $property = $this->get_accessible_reflection_property('success');
+
+        $this->assertFalse($property->getValue($this->class));
+    }
+
+    /**
+     * Test that the result value is FALSE.
+     *
+     * @covers Lunr\Gravity\Database\SQLite3\SQLite3QueryResult::result
+     */
+    public function testResultIsFalse()
+    {
+        $property = $this->get_accessible_reflection_property('result');
+
+        $this->assertFalse($property->getValue($this->class));
+    }
+
+    /**
+     * Test that the freed flag is TRUE.
+     *
+     * @covers Lunr\Gravity\Database\SQLite3\SQLite3QueryResult::freed
+     */
+    public function testFreedIsTrue()
+    {
+        $property = $this->get_accessible_reflection_property('freed');
+
+        $this->assertTrue($property->getValue($this->class));
+    }
+
+    /**
+     * Test that the has_failed() method returns TRUE.
+     *
+     * @covers Lunr\Gravity\Database\MySQL\MySQLQueryResult::has_failed
+     */
+    public function testHasFailedReturnsTrue()
+    {
+        $this->assertTrue($this->class->has_failed());
+    }
+
+    /**
+     * Test that error message is a string on failed query.
+     *
+     * @covers Lunr\Gravity\Database\SQLite3\SQLite3QueryResult::error_message
+     */
+    public function testErrorMessageIsString()
+    {
+        $property = $this->get_accessible_reflection_property('error_message');
+
+        $this->assertInternalType('string', $property->getValue($this->class));
+    }
+
+    /**
+     * Test that error number is a number on a failed query.
+     *
+     * @covers Lunr\Gravity\Database\SQLite3\SQLite3QueryResult::error_number
+     */
+    public function testErrorNumberIsNumber()
+    {
+        $property = $this->get_accessible_reflection_property('error_number');
+
+        $this->assertInternalType('int', $property->getValue($this->class));
+    }
+
+    /**
+     * Test that error number is zero on successful query.
+     *
+     * @covers Lunr\Gravity\Database\SQLite3\SQLite3QueryResult::insert_id
+     */
+    public function testInsertIDIsZero()
+    {
+        $property = $this->get_accessible_reflection_property('insert_id');
+
+        $this->assertEquals(0, $property->getValue($this->class));
+    }
+
+    /**
+     * Test that result_array() returns an empty array.
+     *
+     * @covers Lunr\Gravity\Database\MySQL\MySQLQueryResult::result_array
+     */
+    public function testResultArrayReturnsEmptyArray()
+    {
+        $value = $this->class->result_array();
+
+        $this->assertInternalType('array', $value);
+        $this->assertEmpty($value);
+    }
+
+    /**
+     * Test that result_row() returns an empty array.
+     *
+     * @covers Lunr\Gravity\Database\MySQL\MySQLQueryResult::result_row
+     */
+    public function testResultRowReturnsEmptyArray()
+    {
+        $value = $this->class->result_row();
+
+        $this->assertInternalType('array', $value);
+        $this->assertEmpty($value);
+    }
+
+    /**
+     * Test that result_column() returns an empty array.
+     *
+     * @covers Lunr\Gravity\Database\MySQL\MySQLQueryResult::result_column
+     */
+    public function testResultColumnReturnsEmptyArray()
+    {
+        $value = $this->class->result_column('column');
+
+        $this->assertInternalType('array', $value);
+        $this->assertEmpty($value);
+    }
+
+    /**
+     * Test that result_cell() returns NULL.
+     *
+     * @covers Lunr\Gravity\Database\MySQL\MySQLQueryResult::result_cell
+     */
+    public function testResultCellReturnsNull()
+    {
+        $this->assertNull($this->class->result_cell('cell'));
+    }
+
+    /**
+     * Test that the has_deadlock() method returns TRUE.
+     *
+     * @covers Lunr\Gravity\Database\MySQL\MySQLQueryResult::has_deadlock
+     */
+    public function testHasDeadlockReturnsTrue()
+    {
+        $this->set_reflection_property_value('error_number', 6);
+
+        $this->assertTrue($this->class->has_deadlock());
+    }
+
+    /**
+     * Test that the has_deadlock() method returns FALSE.
+     *
+     * @covers Lunr\Gravity\Database\MySQL\MySQLQueryResult::has_deadlock
+     */
+    public function testHasDeadlockReturnsFalse()
+    {
+        $this->set_reflection_property_value('error_number', 999);
+
+        $this->assertFalse($this->class->has_deadlock());
+    }
+
+}
+
+?>
\ No newline at end of file
diff --git a/src/Lunr/Gravity/Database/SQLite3/Tests/SQLite3QueryResultFreeTest.php b/src/Lunr/Gravity/Database/SQLite3/Tests/SQLite3QueryResultFreeTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..f9c4aa4e4cb23fcb902f844ae0294ca40ad16793
--- /dev/null
+++ b/src/Lunr/Gravity/Database/SQLite3/Tests/SQLite3QueryResultFreeTest.php
@@ -0,0 +1,178 @@
+<?php
+
+/**
+ * Contains SQLite3QueryResultFreeTest class.
+ *
+ * PHP Version 5.6
+ *
+ * @package    Lunr\Gravity\Database\SQLite3
+ * @author     Ruben de Groot <r.degroot@m2mobi.com>
+ * @copyright  2012-2016, M2Mobi BV, Amsterdam, The Netherlands
+ * @license    http://lunr.nl/LICENSE MIT License
+ */
+
+namespace Lunr\Gravity\Database\SQLite3\Tests;
+
+/**
+ * This class contains the tests for testing if the data is freed when there is a result.
+ *
+ * @covers Lunr\Gravity\Database\SQLite3\SQLite3QueryResult
+ */
+class SQLite3QueryResultFreeTest extends SQLite3QueryResultTest
+{
+
+    /**
+     * Override the default setUp with a setup with a result.
+     */
+    public function setUp()
+    {
+        $this->setUpWithResult();
+    }
+
+    /**
+     * Test that free_result() does try to free the result data if freed is FALSE.
+     *
+     * @covers Lunr\Gravity\Database\MySQL\MySQLQueryResult::free_result
+     */
+    public function testFreeResultFreesIfFreedIsFalse()
+    {
+        $this->sqlite3_result->expects($this->once())
+                             ->method('finalize');
+
+        $method = $this->get_accessible_reflection_method('free_result');
+        $method->invoke($this->class);
+    }
+
+    /**
+     * Test that free_result() does not try to free the result data if freed is TRUE.
+     *
+     * @covers Lunr\Gravity\Database\MySQL\MySQLQueryResult::free_result
+     */
+    public function testFreeResultDoesNotFreeIfFreedIsTrue()
+    {
+        $this->set_reflection_property_value('freed', TRUE);
+
+        $this->sqlite3_result->expects($this->never())
+                             ->method('finalize');
+
+        $method = $this->get_accessible_reflection_method('free_result');
+        $method->invoke($this->class);
+
+        $this->set_reflection_property_value('freed', FALSE);
+    }
+
+    /**
+     * Test that result_array() will free the fetched data if freed is FALSE.
+     *
+     * @covers Lunr\Gravity\Database\MySQL\MySQLQueryResult::result_array
+     */
+    public function testResultArrayFreesDataIfFreedIsFalse()
+    {
+        $this->sqlite3_result->expects($this->once())
+                             ->method('finalize');
+
+        $this->class->result_array();
+    }
+
+    /**
+     * Test that result_array() will not free the fetched data if freed is TRUE.
+     *
+     * @covers Lunr\Gravity\Database\MySQL\MySQLQueryResult::result_array
+     */
+    public function testResultArrayDoesNotFreeDataIfFreedIsTrue()
+    {
+        $this->set_reflection_property_value('freed', TRUE);
+
+        $this->sqlite3_result->expects($this->never())
+                             ->method('finalize');
+
+        $this->class->result_array();
+    }
+
+    /**
+     * Test that result_row() will free the fetched data if freed is FALSE.
+     *
+     * @covers Lunr\Gravity\Database\MySQL\MySQLQueryResult::result_row
+     */
+    public function testResultRowFreesDataIfFreedIsFalse()
+    {
+        $this->sqlite3_result->expects($this->once())
+                             ->method('finalize');
+
+        $this->class->result_row();
+    }
+
+    /**
+     * Test that result_row() will not free the fetched data if freed is TRUE.
+     *
+     * @covers Lunr\Gravity\Database\MySQL\MySQLQueryResult::result_row
+     */
+    public function testResultRowDoesNotFreeDataIfFreedIsTrue()
+    {
+        $this->set_reflection_property_value('freed', TRUE);
+
+        $this->sqlite3_result->expects($this->never())
+                             ->method('finalize');
+
+        $this->class->result_row();
+    }
+
+    /**
+     * Test that result_column() will free the fetched data if freed is FALSE.
+     *
+     * @covers Lunr\Gravity\Database\MySQL\MySQLQueryResult::result_column
+     */
+    public function testResultColumnFreesDataIfFreedIsFalse()
+    {
+        $this->sqlite3_result->expects($this->once())
+                             ->method('finalize');
+
+        $this->class->result_column('col');
+    }
+
+    /**
+     * Test that result_column() will not free the fetched data if freed is TRUE.
+     *
+     * @covers Lunr\Gravity\Database\MySQL\MySQLQueryResult::result_column
+     */
+    public function testResultColumnDoesNotFreeDataIfFreedIsTrue()
+    {
+        $this->set_reflection_property_value('freed', TRUE);
+
+        $this->sqlite3_result->expects($this->never())
+                             ->method('finalize');
+
+        $this->class->result_column('col');
+    }
+
+    /**
+     * Test that result_cell() will free the fetched data if freed is FALSE.
+     *
+     * @covers Lunr\Gravity\Database\MySQL\MySQLQueryResult::result_cell
+     */
+    public function testResultCellFreesDataIfFreedIsFalse()
+    {
+        $this->sqlite3_result->expects($this->once())
+                             ->method('finalize');
+
+        $this->class->result_cell('cell');
+    }
+
+    /**
+     * Test that result_cell() will not free the fetched data if freed is TRUE.
+     *
+     * @covers Lunr\Gravity\Database\MySQL\MySQLQueryResult::result_cell
+     */
+    public function testResultCellDoesNotFreeDataIfFreedIsTrue()
+    {
+        $this->set_reflection_property_value('freed', TRUE);
+
+        $this->sqlite3_result->expects($this->never())
+                             ->method('finalize');
+
+        $this->class->result_cell('cell');
+    }
+
+}
+
+?>
\ No newline at end of file
diff --git a/src/Lunr/Gravity/Database/SQLite3/Tests/SQLite3QueryResultNoResultTest.php b/src/Lunr/Gravity/Database/SQLite3/Tests/SQLite3QueryResultNoResultTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..524cd446fba1bdfe2be0a841c85fbaa53bcb88ee
--- /dev/null
+++ b/src/Lunr/Gravity/Database/SQLite3/Tests/SQLite3QueryResultNoResultTest.php
@@ -0,0 +1,128 @@
+<?php
+
+/**
+ * Contains SQLite3QueryResultNoResultTest class.
+ *
+ * PHP Version 5.6
+ *
+ * @package    Lunr\Gravity\Database\SQLite3
+ * @author     Ruben de Groot <r.degroot@m2mobi.com>
+ * @copyright  2012-2016, M2Mobi BV, Amsterdam, The Netherlands
+ * @license    http://lunr.nl/LICENSE MIT License
+ */
+
+namespace Lunr\Gravity\Database\SQLite3\Tests;
+
+/**
+ * This class contains the tests for testing a successful connection with no result.
+ *
+ * @covers Lunr\Gravity\Database\SQLite3\SQLite3QueryResult
+ */
+class SQLite3QueryResultNoResultTest extends SQLite3QueryResultTest
+{
+
+    /**
+     * Override the default setUp with a setup with no result.
+     */
+    public function setUp()
+    {
+        $this->setUpWithNoResult();
+    }
+
+    /**
+     * Test that the success flag is TRUE.
+     *
+     * @covers Lunr\Gravity\Database\SQLite3\SQLite3QueryResult::success
+     */
+    public function testSuccessIsTrue()
+    {
+        $this->get_accessible_reflection_property('success');
+        $this->assertTrue($this->get_reflection_property_value('success'));
+    }
+
+    /**
+     * Test that the result value is FALSE.
+     *
+     * In the setUp the result is set to TRUE when there is an empty result.
+     *
+     * @covers Lunr\Gravity\Database\SQLite3\SQLite3QueryResult::result
+     */
+    public function testResultIsEmpty()
+    {
+        $this->get_accessible_reflection_property('result');
+        $this->assertTrue($this->get_reflection_property_value('result'));
+    }
+
+    /**
+     * Test that the freed flag is TRUE.
+     *
+     * @covers Lunr\Gravity\Database\SQLite3\SQLite3QueryResult::freed
+     */
+    public function testFreedIsTrue()
+    {
+        $this->get_accessible_reflection_property('freed');
+        $this->assertTrue($this->get_reflection_property_value('freed'));
+    }
+
+    /**
+     * Test that the has_failed() method returns FALSE.
+     *
+     * @covers Lunr\Gravity\Database\MySQL\MySQLQueryResult::has_failed
+     */
+    public function testHasFailedReturnsFalse()
+    {
+        $this->assertFalse($this->class->has_failed());
+    }
+
+    /**
+     * Test that result_array() returns an empty array.
+     *
+     * @covers Lunr\Gravity\Database\MySQL\MySQLQueryResult::result_array
+     */
+    public function testResultArrayReturnsEmptyArray()
+    {
+        $value = $this->class->result_array();
+
+        $this->assertInternalType('array', $value);
+        $this->assertEmpty($value);
+    }
+
+    /**
+     * Test that result_row() returns an empty array.
+     *
+     * @covers Lunr\Gravity\Database\MySQL\MySQLQueryResult::result_row
+     */
+    public function testResultRowReturnsEmptyArray()
+    {
+        $value = $this->class->result_row();
+
+        $this->assertInternalType('array', $value);
+        $this->assertEmpty($value);
+    }
+
+    /**
+     * Test that result_column() returns an empty array.
+     *
+     * @covers Lunr\Gravity\Database\MySQL\MySQLQueryResult::result_column
+     */
+    public function testResultColumnReturnsEmptyArray()
+    {
+        $value = $this->class->result_column('column');
+
+        $this->assertInternalType('array', $value);
+        $this->assertEmpty($value);
+    }
+
+    /**
+     * Test that result_cell() returns NULL.
+     *
+     * @covers Lunr\Gravity\Database\MySQL\MySQLQueryResult::result_cell
+     */
+    public function testResultCellReturnsNull()
+    {
+        $this->assertNull($this->class->result_cell('cell'));
+    }
+
+}
+
+?>
\ No newline at end of file
diff --git a/src/Lunr/Gravity/Database/SQLite3/Tests/SQLite3QueryResultResultTest.php b/src/Lunr/Gravity/Database/SQLite3/Tests/SQLite3QueryResultResultTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..77176e784aad90bad7eb49c246fb7b41b034a539
--- /dev/null
+++ b/src/Lunr/Gravity/Database/SQLite3/Tests/SQLite3QueryResultResultTest.php
@@ -0,0 +1,174 @@
+<?php
+
+/**
+ * Contains SQLite3QueryResultResultTest class.
+ *
+ * PHP Version 5.6
+ *
+ * @package    Lunr\Gravity\Database\SQLite3
+ * @author     Ruben de Groot <r.degroot@m2mobi.com>
+ * @copyright  2012-2016, M2Mobi BV, Amsterdam, The Netherlands
+ * @license    http://lunr.nl/LICENSE MIT License
+ */
+
+namespace Lunr\Gravity\Database\SQLite3\Tests;
+
+/**
+ * This class contains the tests for testing a successful connection with a result.
+ *
+ * @covers Lunr\Gravity\Database\SQLite3\SQLite3QueryResult
+ */
+class SQLite3QueryResultResultTest extends SQLite3QueryResultTest
+{
+
+    /**
+     * Override the default setUp with a setup with a result.
+     */
+    public function setUp()
+    {
+        $this->setUpWithResult();
+    }
+
+    /**
+     * Test that the success flag is TRUE.
+     *
+     * @covers Lunr\Gravity\Database\SQLite3\SQLite3QueryResult::success
+     */
+    public function testSuccessIsTrue()
+    {
+        $this->get_accessible_reflection_property('success');
+        $this->assertTrue($this->get_reflection_property_value('success'));
+    }
+
+    /**
+     * Test that the freed flag is FALSE.
+     *
+     * @covers Lunr\Gravity\Database\SQLite3\SQLite3QueryResult::freed
+     */
+    public function testFreedIsFalse()
+    {
+        $this->get_accessible_reflection_property('freed');
+        $this->assertFalse($this->get_reflection_property_value('freed'));
+    }
+
+    /**
+     * Test that the has_failed() method returns FALSE.
+     *
+     * @covers Lunr\Gravity\Database\MySQL\MySQLQueryResult::has_failed
+     */
+    public function testHasFailedReturnsFalse()
+    {
+        $this->assertFalse($this->class->has_failed());
+    }
+
+    /**
+     * Test that affected_rows() returns a number.
+     *
+     * @covers Lunr\Gravity\Database\SQLite3\SQLite3QueryResult::affected_rows
+     */
+    public function testAffectedRowsReturnsNumber()
+    {
+        $this->set_reflection_property_value('affected_rows', 8);
+        $this->assertSame(8, $this->class->affected_rows());
+    }
+
+    /**
+     * Test that result_row() returns an one-dimensional array.
+     *
+     * @covers Lunr\Gravity\Database\SQLite3\SQLite3QueryResult::result_row
+     */
+    public function testResultRowReturnsArray()
+    {
+        $result = array('col1' => 'val1', 'col2' => 'val2');
+
+        $this->sqlite3_result->expects($this->once())
+                             ->method('fetchArray')
+                             ->will($this->returnValue($result));
+
+        $value = $this->class->result_row();
+
+        $this->assertInternalType('array', $value);
+        $this->assertEquals($result, $value);
+    }
+
+    /**
+     * Test that result_array() returns an multidimensional array.
+     *
+     * @covers Lunr\Gravity\Database\SQLite3\SQLite3QueryResult::result_array
+     */
+    public function testResultArrayReturnsArray()
+    {
+        $result = array(0 => array('col1' => 'val1', 'col2' => 'val2'), 1 => array('col1' => 'val3', 'col2' => 'val4'));
+
+        $this->sqlite3_result->expects($this->at(0))
+                             ->method('fetchArray')
+                             ->will($this->returnValue($result[0]));
+        $this->sqlite3_result->expects($this->at(1))
+                             ->method('fetchArray')
+                             ->will($this->returnValue($result[1]));
+        $this->sqlite3_result->expects($this->at(2))
+                             ->method('fetchArray')
+                             ->will($this->returnValue(NULL));
+
+        $value = $this->class->result_array();
+
+        $this->assertInternalType('array', $value);
+        $this->assertEquals($result, $value);
+    }
+
+    /**
+     * Test that result_column() returns an one-dimensional array.
+     *
+     * @covers Lunr\Gravity\Database\SQLite3\SQLite3QueryResult::result_column
+     */
+    public function testResultColumnReturnsArray()
+    {
+        $result = array('val1', 'val3');
+
+        $this->sqlite3_result->expects($this->at(0))
+                             ->method('fetchArray')
+                             ->will($this->returnValue(array('col1' => 'val1', 'col2' => 'val2')));
+        $this->sqlite3_result->expects($this->at(1))
+                             ->method('fetchArray')
+                             ->will($this->returnValue(array('col1' => 'val3', 'col2' => 'val4')));
+        $this->sqlite3_result->expects($this->at(2))
+                             ->method('fetchArray')
+                             ->will($this->returnValue(NULL));
+
+        $value = $this->class->result_column('col1');
+
+        $this->assertInternalType('array', $value);
+        $this->assertEquals($result, $value);
+    }
+
+    /**
+     * Test that result_cell() returns value.
+     *
+     * @covers Lunr\Gravity\Database\SQLite3\SQLite3QueryResult::result_cell
+     */
+    public function testResultCellReturnsValue()
+    {
+        $this->sqlite3_result->expects($this->once())
+                             ->method('fetchArray')
+                             ->will($this->returnValue(array('cell' => 'value')));
+
+        $this->assertEquals('value', $this->class->result_cell('cell'));
+    }
+
+    /**
+     * Test that result_cell() returns NULL if the column does not exist.
+     *
+     * @covers Lunr\Gravity\Database\SQLite3\SQLite3QueryResult::result_cell
+     */
+    public function testResultCellReturnsNullIfColumnDoesNotExist()
+    {
+        $this->sqlite3_result->expects($this->once())
+                             ->method('fetchArray')
+                             ->will($this->returnValue(array('cell' => 'value')));
+
+        $this->assertNull($this->class->result_cell('cell1'));
+    }
+
+}
+
+?>
\ No newline at end of file
diff --git a/src/Lunr/Gravity/Database/SQLite3/Tests/SQLite3QueryResultTest.php b/src/Lunr/Gravity/Database/SQLite3/Tests/SQLite3QueryResultTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..8d1d9de5de81611fbad622d4430864c3139e813c
--- /dev/null
+++ b/src/Lunr/Gravity/Database/SQLite3/Tests/SQLite3QueryResultTest.php
@@ -0,0 +1,127 @@
+<?php
+
+/**
+ * Contains SQLite3QueryResultTest class.
+ *
+ * PHP Version 5.6
+ *
+ * @package    Lunr\Gravity\Database\SQLite3
+ * @author     Ruben de Groot <r.degroot@m2mobi.com>
+ * @copyright  2012-2016, M2Mobi BV, Amsterdam, The Netherlands
+ * @license    http://lunr.nl/LICENSE MIT License
+ */
+
+namespace Lunr\Gravity\Database\SQLite3\Tests;
+
+use Lunr\Gravity\Database\SQLite3\SQLite3QueryResult;
+use Lunr\Halo\LunrBaseTest;
+use ReflectionClass;
+use SQLite3;
+use SQLite3Result;
+
+/**
+ * This class contains common constructors/destructors and data providers
+ * for testing the SQLite3QueryResult class.
+ *
+ * @covers Lunr\Gravity\Database\SQLite3\SQLite3QueryResult
+ */
+class SQLite3QueryResultTest extends LunrBaseTest
+{
+
+    /**
+     * Instance of the SQLite3 class.
+     * @var SQLite3
+     */
+    protected $sqlite3;
+
+    /**
+     * The executed query.
+     * @var String
+     */
+    protected $query;
+
+    /**
+     * Instance of the SQLite3Result class.
+     * @var SQLite3Result
+     */
+    protected $sqlite3_result;
+
+    /**
+     * TestCase Constructor passing a SQLite3Result object.
+     *
+     * @return void
+     */
+    public function setUpWithResult()
+    {
+        $this->sqlite3 = $this->getMock('Lunr\Gravity\Database\SQLite3\LunrSQLite3');
+
+        $this->query = 'SELECT * FROM table';
+
+        $this->sqlite3_result = $this->getMockBuilder('SQLite3Result')
+                                     ->disableOriginalConstructor()
+                                     ->getMock();
+
+        $this->class = new SQLite3QueryResult($this->query, $this->sqlite3_result, $this->sqlite3);
+
+        $this->reflection = new ReflectionClass('Lunr\Gravity\Database\SQLite3\SQLite3QueryResult');
+    }
+
+    /**
+     * TestCase Constructor with a TRUE instead of a SQLite3Result object.
+     *
+     * @return void
+     */
+    public function setUpWithNoResult()
+    {
+        $this->sqlite3 = $this->getMock('Lunr\Gravity\Database\SQLite3\LunrSQLite3');
+
+        $this->query = 'SELECT * FROM table';
+
+        $this->sqlite3_result = TRUE;
+
+        $this->class = new SQLite3QueryResult($this->query, $this->sqlite3_result, $this->sqlite3);
+
+        $this->reflection = new ReflectionClass('Lunr\Gravity\Database\SQLite3\SQLite3QueryResult');
+
+        $this->set_reflection_property_value('affected_rows', 12);
+        $this->set_reflection_property_value('insert_id', 0);
+        $this->set_reflection_property_value('error_message', '');
+        $this->set_reflection_property_value('error_number', 0);
+    }
+
+    /**
+     * TestCase Constructor with a FALSE instead of a SQLite3Result object.
+     *
+     * @return void
+     */
+    public function setUpWithFailedQuery()
+    {
+        $this->sqlite3 = $this->getMock('Lunr\Gravity\Database\SQLite3\LunrSQLite3');
+
+        $this->query = 'SELECT * FROM table';
+
+        $this->sqlite3_result = FALSE;
+
+        $this->class = new SQLite3QueryResult($this->query, $this->sqlite3_result, $this->sqlite3);
+
+        $this->reflection = new ReflectionClass('Lunr\Gravity\Database\SQLite3\SQLite3QueryResult');
+
+        $this->set_reflection_property_value('error_message', 'The query failed.');
+        $this->set_reflection_property_value('error_number', 8);
+    }
+
+    /**
+     * TestCase Destructor.
+     */
+    public function tearDown()
+    {
+        unset($this->sqlite3);
+        unset($this->query);
+        unset($this->sqlite3_result);
+        unset($this->class);
+        unset($this->reflection);
+    }
+
+}
+
+?>
\ No newline at end of file
diff --git a/tests/phpunit.xml b/tests/phpunit.xml
index 5aee930dca578369bc4d89c77054a12ba7562647..6ed66f752d6993019af1a8b1673a6c8dd216e28a 100644
--- a/tests/phpunit.xml
+++ b/tests/phpunit.xml
@@ -98,6 +98,7 @@
             <file>../src/Lunr/Gravity/Database/MySQL/Tests/MySQLQueryResultFailedTest.php</file>
             <file>../src/Lunr/Gravity/Database/MySQL/Tests/MySQLQueryResultSuccessTest.php</file>
             <file>../src/Lunr/Gravity/Database/MySQL/Tests/MySQLQueryResultResultTest.php</file>
+	    <file>../src/Lunr/Gravity/Database/MySQL/Tests/MySQLQueryResultFreeTest.php</file>
             <file>../src/Lunr/Gravity/Database/MySQL/Tests/MySQLAsyncQueryResultBaseTest.php</file>
             <file>../src/Lunr/Gravity/Database/MySQL/Tests/MySQLAsyncQueryResultFetchTest.php</file>
             <file>../src/Lunr/Gravity/Database/Tests/DatabaseDMLQueryBuilderBaseTest.php</file>
@@ -126,7 +127,7 @@
             <file>../src/Lunr/Gravity/Database/MySQL/Tests/MySQLDMLQueryBuilderInsertTest.php</file>
             <file>../src/Lunr/Gravity/Database/MySQL/Tests/MySQLDMLQueryBuilderUpdateTest.php</file>
             <file>../src/Lunr/Gravity/Database/MySQL/Tests/MySQLDMLQueryBuilderConditionTest.php</file>
-            <file>../src/Lunr/Gravity/Database/MySQL/Tests/MySQLDMLQueryBuilderGroupByTest.php</file>
+            <file>../src/Lunr/Gravity/Database/MySQL/Tests/MySQLDMLQueryBuilderGroupByTest.php</file>	
             <file>../src/Lunr/Gravity/Database/MySQL/Tests/MySQLSimpleDMLQueryBuilderBaseTest.php</file>
             <file>../src/Lunr/Gravity/Database/MySQL/Tests/MySQLSimpleDMLQueryBuilderConditionalTest.php</file>
             <file>../src/Lunr/Gravity/Database/MySQL/Tests/MySQLSimpleDMLQueryBuilderSelectTest.php</file>
@@ -153,6 +154,11 @@
             <file>../src/Lunr/Gravity/Database/SQLite3/Tests/SQLite3DMLQueryBuilderInsertTest.php</file>
             <file>../src/Lunr/Gravity/Database/SQLite3/Tests/SQLite3DMLQueryBuilderQueryTest.php</file>
             <file>../src/Lunr/Gravity/Database/SQLite3/Tests/SQLite3DMLQueryBuilderUpdateTest.php</file>
+	    <file>../src/Lunr/Gravity/Database/SQLite3/Tests/SQLite3QueryResultResultTest.php</file>
+            <file>../src/Lunr/Gravity/Database/SQLite3/Tests/SQLite3QueryResultNoResultTest.php</file>
+	    <file>../src/Lunr/Gravity/Database/SQLite3/Tests/SQLite3QueryResultFreeTest.php</file>
+	    <file>../src/Lunr/Gravity/Database/SQLite3/Tests/SQLite3QueryResultFailedTest.php</file>
+	    <file>../src/Lunr/Gravity/Database/SQLite3/Tests/SQLite3QueryResultBaseTest.php</file>
             <file>../src/Lunr/Gravity/Database/Tests/DatabaseConnectionPoolBaseTest.php</file>
             <file>../src/Lunr/Gravity/Database/Tests/DatabaseConnectionPoolEmptyTest.php</file>
             <file>../src/Lunr/Gravity/Database/Tests/DatabaseConnectionPoolUnsupportedTest.php</file>
