Initial SQLite development #1
|
@ -27,7 +27,9 @@ class Custom
|
||||||
$stmt = Configuration::dbConn()->prepare($query);
|
$stmt = Configuration::dbConn()->prepare($query);
|
||||||
} catch (PDOException $ex) {
|
} catch (PDOException $ex) {
|
||||||
$keyword = explode(' ', $query, 2)[0];
|
$keyword = explode(' ', $query, 2)[0];
|
||||||
throw new DocumentException("Error executing $keyword statement: " . Configuration::dbConn()->errorCode(),
|
throw new DocumentException(
|
||||||
|
sprintf("Error executing %s statement: [%s] %s", $keyword, Configuration::dbConn()->errorCode(),
|
||||||
|
Configuration::dbConn()->errorInfo()[2]),
|
||||||
previous: $ex);
|
previous: $ex);
|
||||||
}
|
}
|
||||||
foreach ($parameters as $key => $value) {
|
foreach ($parameters as $key => $value) {
|
||||||
|
|
|
@ -2,9 +2,7 @@
|
||||||
|
|
||||||
namespace BitBadger\PDODocument\Mapper;
|
namespace BitBadger\PDODocument\Mapper;
|
||||||
|
|
||||||
use BitBadger\PDODocument\Configuration;
|
use BitBadger\PDODocument\{Configuration, DocumentException, Mode};
|
||||||
use BitBadger\PDODocument\DocumentException;
|
|
||||||
use BitBadger\PDODocument\Mode;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Map an EXISTS result to a boolean value
|
* Map an EXISTS result to a boolean value
|
||||||
|
|
|
@ -2,8 +2,7 @@
|
||||||
|
|
||||||
namespace BitBadger\PDODocument\Query;
|
namespace BitBadger\PDODocument\Query;
|
||||||
|
|
||||||
use BitBadger\PDODocument\Field;
|
use BitBadger\PDODocument\{Field, Query};
|
||||||
use BitBadger\PDODocument\Query;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Queries for counting documents
|
* Queries for counting documents
|
||||||
|
|
|
@ -2,9 +2,7 @@
|
||||||
|
|
||||||
namespace BitBadger\PDODocument\Query;
|
namespace BitBadger\PDODocument\Query;
|
||||||
|
|
||||||
use BitBadger\PDODocument\Configuration;
|
use BitBadger\PDODocument\{Configuration, DocumentException, Mode};
|
||||||
use BitBadger\PDODocument\DocumentException;
|
|
||||||
use BitBadger\PDODocument\Mode;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Queries to define tables and indexes
|
* Queries to define tables and indexes
|
||||||
|
|
|
@ -2,8 +2,7 @@
|
||||||
|
|
||||||
namespace BitBadger\PDODocument\Query;
|
namespace BitBadger\PDODocument\Query;
|
||||||
|
|
||||||
use BitBadger\PDODocument\Field;
|
use BitBadger\PDODocument\{Field, Query};
|
||||||
use BitBadger\PDODocument\Query;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Queries to delete documents
|
* Queries to delete documents
|
||||||
|
|
|
@ -2,8 +2,7 @@
|
||||||
|
|
||||||
namespace BitBadger\PDODocument\Query;
|
namespace BitBadger\PDODocument\Query;
|
||||||
|
|
||||||
use BitBadger\PDODocument\Field;
|
use BitBadger\PDODocument\{Field, Query};
|
||||||
use BitBadger\PDODocument\Query;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Queries to determine document existence
|
* Queries to determine document existence
|
||||||
|
|
|
@ -2,8 +2,7 @@
|
||||||
|
|
||||||
namespace BitBadger\PDODocument\Query;
|
namespace BitBadger\PDODocument\Query;
|
||||||
|
|
||||||
use BitBadger\PDODocument\Field;
|
use BitBadger\PDODocument\{Field, Query};
|
||||||
use BitBadger\PDODocument\Query;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Queries for retrieving documents
|
* Queries for retrieving documents
|
||||||
|
|
|
@ -2,11 +2,7 @@
|
||||||
|
|
||||||
namespace BitBadger\PDODocument\Query;
|
namespace BitBadger\PDODocument\Query;
|
||||||
|
|
||||||
use BitBadger\PDODocument\Configuration;
|
use BitBadger\PDODocument\{Configuration, DocumentException, Field, Mode, Query};
|
||||||
use BitBadger\PDODocument\DocumentException;
|
|
||||||
use BitBadger\PDODocument\Field;
|
|
||||||
use BitBadger\PDODocument\Mode;
|
|
||||||
use BitBadger\PDODocument\Query;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Queries to perform partial updates on documents
|
* Queries to perform partial updates on documents
|
||||||
|
|
|
@ -2,11 +2,7 @@
|
||||||
|
|
||||||
namespace BitBadger\PDODocument\Query;
|
namespace BitBadger\PDODocument\Query;
|
||||||
|
|
||||||
use BitBadger\PDODocument\Configuration;
|
use BitBadger\PDODocument\{Configuration, DocumentException, Field, Mode, Query};
|
||||||
use BitBadger\PDODocument\DocumentException;
|
|
||||||
use BitBadger\PDODocument\Field;
|
|
||||||
use BitBadger\PDODocument\Mode;
|
|
||||||
use BitBadger\PDODocument\Query;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Queries to remove fields from documents
|
* Queries to remove fields from documents
|
||||||
|
|
|
@ -2,13 +2,8 @@
|
||||||
|
|
||||||
namespace Test\Integration\SQLite;
|
namespace Test\Integration\SQLite;
|
||||||
|
|
||||||
use BitBadger\PDODocument\Count;
|
use BitBadger\PDODocument\{Count, Custom, DocumentException, Query};
|
||||||
use BitBadger\PDODocument\Custom;
|
use BitBadger\PDODocument\Mapper\{CountMapper, DocumentMapper};
|
||||||
use BitBadger\PDODocument\DocumentException;
|
|
||||||
use BitBadger\PDODocument\Mapper\CountMapper;
|
|
||||||
use BitBadger\PDODocument\Mapper\DocumentMapper;
|
|
||||||
use BitBadger\PDODocument\Mapper\StringMapper;
|
|
||||||
use BitBadger\PDODocument\Query;
|
|
||||||
use PHPUnit\Framework\TestCase;
|
use PHPUnit\Framework\TestCase;
|
||||||
use Test\Integration\TestDocument;
|
use Test\Integration\TestDocument;
|
||||||
|
|
||||||
|
@ -105,12 +100,8 @@ class CustomTest extends TestCase
|
||||||
public function testNonQuerySucceedsWhenOperatingOnData()
|
public function testNonQuerySucceedsWhenOperatingOnData()
|
||||||
{
|
{
|
||||||
Custom::nonQuery('DELETE FROM ' . ThrowawayDb::TABLE, []);
|
Custom::nonQuery('DELETE FROM ' . ThrowawayDb::TABLE, []);
|
||||||
try {
|
|
||||||
$remaining = Count::all(ThrowawayDb::TABLE);
|
$remaining = Count::all(ThrowawayDb::TABLE);
|
||||||
$this->assertEquals(0, $remaining, 'There should be no documents remaining in the table');
|
$this->assertEquals(0, $remaining, 'There should be no documents remaining in the table');
|
||||||
} finally {
|
|
||||||
$this->dbName = ThrowawayDb::exchange($this->dbName);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public function testNonQuerySucceedsWhenNoDataMatchesWhereClause()
|
public function testNonQuerySucceedsWhenNoDataMatchesWhereClause()
|
||||||
|
|
58
tests/integration/sqlite/DefinitionTest.php
Normal file
58
tests/integration/sqlite/DefinitionTest.php
Normal file
|
@ -0,0 +1,58 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Test\Integration\SQLite;
|
||||||
|
|
||||||
|
use BitBadger\PDODocument\{Custom, Definition, DocumentException};
|
||||||
|
use BitBadger\PDODocument\Mapper\ExistsMapper;
|
||||||
|
use PHPUnit\Framework\TestCase;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* SQLite integration tests for the Definition class
|
||||||
|
*/
|
||||||
|
class DefinitionTest extends TestCase
|
||||||
|
{
|
||||||
|
/** @var string Database name for throwaway database */
|
||||||
|
private string $dbName;
|
||||||
|
|
||||||
|
protected function setUp(): void
|
||||||
|
{
|
||||||
|
parent::setUp();
|
||||||
|
$this->dbName = ThrowawayDb::create(withData: false);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected function tearDown(): void
|
||||||
|
{
|
||||||
|
ThrowawayDb::destroy($this->dbName);
|
||||||
|
parent::tearDown();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Does the given named object exist in the database?
|
||||||
|
*
|
||||||
|
* @param string $name The name of the object whose existence should be verified
|
||||||
|
* @return bool True if the object exists, false if not
|
||||||
|
* @throws DocumentException If any is encountered
|
||||||
|
*/
|
||||||
|
private function itExists(string $name): bool
|
||||||
|
{
|
||||||
|
return Custom::scalar('SELECT EXISTS (SELECT 1 FROM sqlite_master WHERE name = :name)',
|
||||||
|
[':name' => $name], new ExistsMapper());
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testEnsureTableSucceeds()
|
||||||
|
{
|
||||||
|
$this->assertFalse($this->itExists('ensured'), 'The table should not exist already');
|
||||||
|
$this->assertFalse($this->itExists('idx_ensured_key'), 'The key index should not exist already');
|
||||||
|
Definition::ensureTable('ensured');
|
||||||
|
$this->assertTrue($this->itExists('ensured'), 'The table should now exist');
|
||||||
|
$this->assertTrue($this->itExists('idx_ensured_key'), 'The key index should now exist');
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testEnsureFieldIndexSucceeds()
|
||||||
|
{
|
||||||
|
$this->assertFalse($this->itExists('idx_ensured_test'), 'The index should not exist already');
|
||||||
|
Definition::ensureTable('ensured');
|
||||||
|
Definition::ensureFieldIndex('ensured', 'test', ['name', 'age']);
|
||||||
|
$this->assertTrue($this->itExists('idx_ensured_test'), 'The index should now exist');
|
||||||
|
}
|
||||||
|
}
|
59
tests/integration/sqlite/PatchTest.php
Normal file
59
tests/integration/sqlite/PatchTest.php
Normal file
|
@ -0,0 +1,59 @@
|
||||||
|
<?php declare(strict_types=1);
|
||||||
|
|
||||||
|
namespace Test\Integration\SQLite;
|
||||||
|
|
||||||
|
use BitBadger\PDODocument\{Count, Field, Find, Patch};
|
||||||
|
use PHPUnit\Framework\Attributes\TestDox;
|
||||||
|
use PHPUnit\Framework\TestCase;
|
||||||
|
use Test\Integration\TestDocument;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* SQLite integration tests for the Patch class
|
||||||
|
*/
|
||||||
|
class PatchTest extends TestCase
|
||||||
|
{
|
||||||
|
/** @var string Database name for throwaway database */
|
||||||
|
private string $dbName;
|
||||||
|
|
||||||
|
protected function setUp(): void
|
||||||
|
{
|
||||||
|
parent::setUp();
|
||||||
|
$this->dbName = ThrowawayDb::create();
|
||||||
|
}
|
||||||
|
|
||||||
|
protected function tearDown(): void
|
||||||
|
{
|
||||||
|
ThrowawayDb::destroy($this->dbName);
|
||||||
|
parent::tearDown();
|
||||||
|
}
|
||||||
|
|
||||||
|
#[TestDox('By ID succeeds when a document is updated')]
|
||||||
|
public function testByIdSucceedsWhenADocumentIsUpdated(): void
|
||||||
|
{
|
||||||
|
Patch::byId(ThrowawayDb::TABLE, 'one', ['num_value' => 44]);
|
||||||
|
$doc = Find::byId(ThrowawayDb::TABLE, 'one', TestDocument::class);
|
||||||
|
$this->assertNotFalse($doc, 'There should have been a document returned');
|
||||||
|
$this->assertEquals(44, $doc->num_value, 'The updated document is not correct');
|
||||||
|
}
|
||||||
|
|
||||||
|
#[TestDox('By ID succeeds when no document is updated')]
|
||||||
|
public function testByIdSucceedsWhenNoDocumentIsUpdated(): void
|
||||||
|
{
|
||||||
|
Patch::byId(ThrowawayDb::TABLE, 'forty-seven', ['foo' => 'green']);
|
||||||
|
$this->assertTrue(true, 'The above not throwing an exception is the test');
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public function testByFieldsSucceedsWhenADocumentIsUpdated(): void
|
||||||
|
{
|
||||||
|
Patch::byFields(ThrowawayDb::TABLE, [Field::EQ('value', 'purple')], ['num_value' => 77]);
|
||||||
|
$after = Count::byFields(ThrowawayDb::TABLE, [Field::EQ('num_value', 77)]);
|
||||||
|
$this->assertEquals(2, $after, 'There should have been 2 documents updated');
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testByFieldsSucceedsWhenNoDocumentIsUpdated(): void
|
||||||
|
{
|
||||||
|
Patch::byFields(ThrowawayDb::TABLE, [Field::EQ('value', 'burgundy')], ['foo' => 'green']);
|
||||||
|
$this->assertTrue(true, 'The above not throwing an exception is the test');
|
||||||
|
}
|
||||||
|
}
|
|
@ -2,8 +2,7 @@
|
||||||
|
|
||||||
namespace Test\Unit;
|
namespace Test\Unit;
|
||||||
|
|
||||||
use BitBadger\PDODocument\Configuration;
|
use BitBadger\PDODocument\{Configuration, DocumentException};
|
||||||
use BitBadger\PDODocument\DocumentException;
|
|
||||||
use PHPUnit\Framework\Attributes\TestDox;
|
use PHPUnit\Framework\Attributes\TestDox;
|
||||||
use PHPUnit\Framework\TestCase;
|
use PHPUnit\Framework\TestCase;
|
||||||
|
|
||||||
|
@ -34,6 +33,7 @@ class ConfigurationTest extends TestCase
|
||||||
public function testDbConnFailsWhenNoDSNSpecified(): void
|
public function testDbConnFailsWhenNoDSNSpecified(): void
|
||||||
{
|
{
|
||||||
$this->expectException(DocumentException::class);
|
$this->expectException(DocumentException::class);
|
||||||
|
Configuration::$pdoDSN = '';
|
||||||
Configuration::dbConn();
|
Configuration::dbConn();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -2,8 +2,7 @@
|
||||||
|
|
||||||
namespace Test\Unit;
|
namespace Test\Unit;
|
||||||
|
|
||||||
use BitBadger\PDODocument\Field;
|
use BitBadger\PDODocument\{Field, Op};
|
||||||
use BitBadger\PDODocument\Op;
|
|
||||||
use PHPUnit\Framework\Attributes\TestDox;
|
use PHPUnit\Framework\Attributes\TestDox;
|
||||||
use PHPUnit\Framework\TestCase;
|
use PHPUnit\Framework\TestCase;
|
||||||
|
|
||||||
|
|
|
@ -2,8 +2,7 @@
|
||||||
|
|
||||||
namespace Test\Unit\Mapper;
|
namespace Test\Unit\Mapper;
|
||||||
|
|
||||||
use BitBadger\PDODocument\DocumentException;
|
use BitBadger\PDODocument\{DocumentException, Field};
|
||||||
use BitBadger\PDODocument\Field;
|
|
||||||
use BitBadger\PDODocument\Mapper\DocumentMapper;
|
use BitBadger\PDODocument\Mapper\DocumentMapper;
|
||||||
use PHPUnit\Framework\Attributes\TestDox;
|
use PHPUnit\Framework\Attributes\TestDox;
|
||||||
use PHPUnit\Framework\TestCase;
|
use PHPUnit\Framework\TestCase;
|
||||||
|
|
|
@ -2,10 +2,8 @@
|
||||||
|
|
||||||
namespace Test\Unit\Mapper;
|
namespace Test\Unit\Mapper;
|
||||||
|
|
||||||
use BitBadger\PDODocument\Configuration;
|
use BitBadger\PDODocument\{Configuration, DocumentException, Mode};
|
||||||
use BitBadger\PDODocument\DocumentException;
|
|
||||||
use BitBadger\PDODocument\Mapper\ExistsMapper;
|
use BitBadger\PDODocument\Mapper\ExistsMapper;
|
||||||
use BitBadger\PDODocument\Mode;
|
|
||||||
use PHPUnit\Framework\Attributes\TestDox;
|
use PHPUnit\Framework\Attributes\TestDox;
|
||||||
use PHPUnit\Framework\TestCase;
|
use PHPUnit\Framework\TestCase;
|
||||||
|
|
||||||
|
|
|
@ -1,12 +1,8 @@
|
||||||
<?php declare(strict_types=1);
|
<?php declare(strict_types=1);
|
||||||
|
|
||||||
namespace Tests\Unit;
|
namespace Test\Unit;
|
||||||
|
|
||||||
use BitBadger\PDODocument\Configuration;
|
use BitBadger\PDODocument\{Configuration, DocumentException, Field, Mode, Parameters};
|
||||||
use BitBadger\PDODocument\DocumentException;
|
|
||||||
use BitBadger\PDODocument\Field;
|
|
||||||
use BitBadger\PDODocument\Mode;
|
|
||||||
use BitBadger\PDODocument\Parameters;
|
|
||||||
use PHPUnit\Framework\Attributes\TestDox;
|
use PHPUnit\Framework\Attributes\TestDox;
|
||||||
use PHPUnit\Framework\TestCase;
|
use PHPUnit\Framework\TestCase;
|
||||||
|
|
||||||
|
|
|
@ -2,9 +2,7 @@
|
||||||
|
|
||||||
namespace Test\Unit\Query;
|
namespace Test\Unit\Query;
|
||||||
|
|
||||||
use BitBadger\PDODocument\Configuration;
|
use BitBadger\PDODocument\{Configuration, DocumentException, Mode};
|
||||||
use BitBadger\PDODocument\DocumentException;
|
|
||||||
use BitBadger\PDODocument\Mode;
|
|
||||||
use BitBadger\PDODocument\Query\Definition;
|
use BitBadger\PDODocument\Query\Definition;
|
||||||
use PHPUnit\Framework\Attributes\TestDox;
|
use PHPUnit\Framework\Attributes\TestDox;
|
||||||
use PHPUnit\Framework\TestCase;
|
use PHPUnit\Framework\TestCase;
|
||||||
|
|
|
@ -2,10 +2,7 @@
|
||||||
|
|
||||||
namespace Test\Unit\Query;
|
namespace Test\Unit\Query;
|
||||||
|
|
||||||
use BitBadger\PDODocument\Configuration;
|
use BitBadger\PDODocument\{Configuration, DocumentException, Field, Mode};
|
||||||
use BitBadger\PDODocument\DocumentException;
|
|
||||||
use BitBadger\PDODocument\Field;
|
|
||||||
use BitBadger\PDODocument\Mode;
|
|
||||||
use BitBadger\PDODocument\Query\Patch;
|
use BitBadger\PDODocument\Query\Patch;
|
||||||
use PHPUnit\Framework\Attributes\TestDox;
|
use PHPUnit\Framework\Attributes\TestDox;
|
||||||
use PHPUnit\Framework\TestCase;
|
use PHPUnit\Framework\TestCase;
|
||||||
|
|
|
@ -2,11 +2,7 @@
|
||||||
|
|
||||||
namespace Test\Unit\Query;
|
namespace Test\Unit\Query;
|
||||||
|
|
||||||
use BitBadger\PDODocument\Configuration;
|
use BitBadger\PDODocument\{Configuration, DocumentException, Field, Mode, Parameters};
|
||||||
use BitBadger\PDODocument\DocumentException;
|
|
||||||
use BitBadger\PDODocument\Field;
|
|
||||||
use BitBadger\PDODocument\Mode;
|
|
||||||
use BitBadger\PDODocument\Parameters;
|
|
||||||
use BitBadger\PDODocument\Query\RemoveFields;
|
use BitBadger\PDODocument\Query\RemoveFields;
|
||||||
use PHPUnit\Framework\Attributes\TestDox;
|
use PHPUnit\Framework\Attributes\TestDox;
|
||||||
use PHPUnit\Framework\TestCase;
|
use PHPUnit\Framework\TestCase;
|
||||||
|
|
|
@ -2,8 +2,7 @@
|
||||||
|
|
||||||
namespace Test\Unit;
|
namespace Test\Unit;
|
||||||
|
|
||||||
use BitBadger\PDODocument\Field;
|
use BitBadger\PDODocument\{Field, Query};
|
||||||
use BitBadger\PDODocument\Query;
|
|
||||||
use PHPUnit\Framework\Attributes\TestDox;
|
use PHPUnit\Framework\Attributes\TestDox;
|
||||||
use PHPUnit\Framework\TestCase;
|
use PHPUnit\Framework\TestCase;
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user