diff --git a/lib/Cake/Model/Datasource/Database/Dialect/SqliteDialectTrait.php b/lib/Cake/Model/Datasource/Database/Dialect/SqliteDialectTrait.php index a5b02343cbe..6c667364cd7 100644 --- a/lib/Cake/Model/Datasource/Database/Dialect/SqliteDialectTrait.php +++ b/lib/Cake/Model/Datasource/Database/Dialect/SqliteDialectTrait.php @@ -142,4 +142,15 @@ public function extraSchemaColumns() { return []; } +/** + * Get the SQL to list the tables in Sqlite + * + * @param array $config The connection configuration to use for + * getting tables from. + * @return array An array of (sql, params) to execute. + */ + public function listTablesSql() { + return ["SELECT name FROM sqlite_master WHERE type='table' ORDER BY name", []]; + } + } diff --git a/lib/Cake/Test/TestCase/Model/Datasource/Database/Driver/SqliteTest.php b/lib/Cake/Test/TestCase/Model/Datasource/Database/Driver/SqliteTest.php index 06589a15d7b..22a47e726a6 100644 --- a/lib/Cake/Test/TestCase/Model/Datasource/Database/Driver/SqliteTest.php +++ b/lib/Cake/Test/TestCase/Model/Datasource/Database/Driver/SqliteTest.php @@ -18,6 +18,7 @@ namespace Cake\Test\TestCase\Model\Datasource\Database\Driver; use Cake\Core\Configure; +use Cake\Model\Datasource\Database\Connection; use Cake\Model\Datasource\Database\Driver\Sqlite; use Cake\Testsuite\TestCase; use \PDO; @@ -182,4 +183,54 @@ public function testConvertColumnType($input, $expected) { $this->assertEquals($driver->convertColumn($input), $expected); } +/** + * Creates tables for testing listTables/describe() + * + * @param Connection $connection + * @return void + */ + protected function _createTables($connection) { + $connection->execute('DROP TABLE IF EXISTS articles'); + $connection->execute('DROP TABLE IF EXISTS authors'); + + $table = <<execute($table); + + $table = <<execute($table); + } + +/** + * Test listing tables with Sqlite + * + * @return void + */ + public function testListTables() { + $connection = new Connection(Configure::read('Datasource.test')); + $this->_createTables($connection); + + $result = $connection->listTables(); + $this->assertInternalType('array', $result); + $this->assertCount(3, $result); + $this->assertEquals('articles', $result[0]); + $this->assertEquals('authors', $result[1]); + $this->assertEquals('sqlite_sequence', $result[2]); + } + }