From 314968036b431c01fe17db3da1c0555823f6898d Mon Sep 17 00:00:00 2001 From: Aaron Schulz Date: Mon, 25 Mar 2019 23:54:39 -0700 Subject: [PATCH] rdbms: add ATTR_SCHEMAS_AS_TABLE_GROUPS attribute Change-Id: Ia12a00c30039acd6c59726f35d03cc76aa957902 --- includes/libs/rdbms/database/Database.php | 13 +++++++++---- includes/libs/rdbms/database/DatabaseMssql.php | 3 +++ includes/libs/rdbms/database/DatabasePostgres.php | 4 ++++ tests/phpunit/includes/db/DatabasePostgresTest.php | 7 +++++++ .../libs/rdbms/database/DatabaseMssqlTest.php | 7 +++++++ 5 files changed, 30 insertions(+), 4 deletions(-) diff --git a/includes/libs/rdbms/database/Database.php b/includes/libs/rdbms/database/Database.php index 9ce3086c38..e019bc848d 100644 --- a/includes/libs/rdbms/database/Database.php +++ b/includes/libs/rdbms/database/Database.php @@ -61,8 +61,10 @@ abstract class Database implements IDatabase, IMaintainableDatabase, LoggerAware const SLOW_WRITE_SEC = 0.500; const SMALL_WRITE_ROWS = 100; - /** @var string Whether lock granularity is on the level of the entire database */ + /** @var string Lock granularity is on the level of the entire database */ const ATTR_DB_LEVEL_LOCKING = 'db-level-locking'; + /** @var string The SCHEMA keyword refers to a grouping of tables in a database */ + const ATTR_SCHEMAS_AS_TABLE_GROUPS = 'supports-schemas'; /** @var int New Database instance will not be connected yet when returned */ const NEW_UNCONNECTED = 0; @@ -475,12 +477,15 @@ abstract class Database implements IDatabase, IMaintainableDatabase, LoggerAware /** * @param string $dbType A possible DB type (sqlite, mysql, postgres,...) * @param string|null $driver Optional name of a specific DB client driver - * @return array Map of (Database::ATTRIBUTE_* constant => value) for all such constants + * @return array Map of (Database::ATTR_* constant => value) for all such constants * @throws InvalidArgumentException * @since 1.31 */ final public static function attributesFromType( $dbType, $driver = null ) { - static $defaults = [ self::ATTR_DB_LEVEL_LOCKING => false ]; + static $defaults = [ + self::ATTR_DB_LEVEL_LOCKING => false, + self::ATTR_SCHEMAS_AS_TABLE_GROUPS => false + ]; $class = self::getClass( $dbType, $driver ); @@ -544,7 +549,7 @@ abstract class Database implements IDatabase, IMaintainableDatabase, LoggerAware } /** - * @return array Map of (Database::ATTRIBUTE_* constant => value + * @return array Map of (Database::ATTR_* constant => value * @since 1.31 */ protected static function getAttributes() { diff --git a/includes/libs/rdbms/database/DatabaseMssql.php b/includes/libs/rdbms/database/DatabaseMssql.php index ad5cf98f5c..866f5811f4 100644 --- a/includes/libs/rdbms/database/DatabaseMssql.php +++ b/includes/libs/rdbms/database/DatabaseMssql.php @@ -1412,6 +1412,9 @@ class DatabaseMssql extends Database { return "CAST( $field AS NVARCHAR )"; } + public static function getAttributes() { + return [ self::ATTR_SCHEMAS_AS_TABLE_GROUPS => true ]; + } } /** diff --git a/includes/libs/rdbms/database/DatabasePostgres.php b/includes/libs/rdbms/database/DatabasePostgres.php index 481dd9a6be..86be8f4141 100644 --- a/includes/libs/rdbms/database/DatabasePostgres.php +++ b/includes/libs/rdbms/database/DatabasePostgres.php @@ -1458,6 +1458,10 @@ SQL; return $row ? ( strtolower( $row->default_transaction_read_only ) === 'on' ) : false; } + public static function getAttributes() { + return [ self::ATTR_SCHEMAS_AS_TABLE_GROUPS => true ]; + } + /** * @param string $lockName * @return string Integer diff --git a/tests/phpunit/includes/db/DatabasePostgresTest.php b/tests/phpunit/includes/db/DatabasePostgresTest.php index 6b1ed7fa21..e0b81117f9 100644 --- a/tests/phpunit/includes/db/DatabasePostgresTest.php +++ b/tests/phpunit/includes/db/DatabasePostgresTest.php @@ -1,5 +1,6 @@ doTestInsertSelectIgnore(); } + /** + * @covers \Wikimedia\Rdbms\DatabasePostgres::getAttributes + */ + public function testAttributes() { + $this->assertTrue( DatabasePostgres::getAttributes()[Database::ATTR_SCHEMAS_AS_TABLE_GROUPS] ); + } } diff --git a/tests/phpunit/includes/libs/rdbms/database/DatabaseMssqlTest.php b/tests/phpunit/includes/libs/rdbms/database/DatabaseMssqlTest.php index b28a5b9eec..414042ddcf 100644 --- a/tests/phpunit/includes/libs/rdbms/database/DatabaseMssqlTest.php +++ b/tests/phpunit/includes/libs/rdbms/database/DatabaseMssqlTest.php @@ -1,5 +1,6 @@ buildSubstring( 'foo', $start, $length ); } + /** + * @covers \Wikimedia\Rdbms\DatabaseMssql::getAttributes + */ + public function testAttributes() { + $this->assertTrue( DatabaseMssql::getAttributes()[Database::ATTR_SCHEMAS_AS_TABLE_GROUPS] ); + } } -- 2.20.1