Merge pull request #12995 from owncloud/tbelau666-master

Use Doctrines filter by table name
This commit is contained in:
Thomas Müller 2015-01-09 14:17:14 +01:00
commit 1f1643b35f
7 changed files with 47 additions and 32 deletions

View File

@ -228,6 +228,8 @@ class ConvertType extends Command {
} }
protected function getTables(Connection $db) { protected function getTables(Connection $db) {
$db->getConfiguration()->
setFilterSchemaAssetsExpression('/^'.$this->config->getSystemValue('dbtableprefix', 'oc_').'/');
return $db->getSchemaManager()->listTableNames(); return $db->getSchemaManager()->listTableNames();
} }
@ -264,7 +266,7 @@ class ConvertType extends Command {
$this->copyTable($fromDB, $toDB, $table, $input, $output); $this->copyTable($fromDB, $toDB, $table, $input, $output);
} }
if ($input->getArgument('type') === 'pgsql') { if ($input->getArgument('type') === 'pgsql') {
$tools = new \OC\DB\PgSqlTools; $tools = new \OC\DB\PgSqlTools($this->config);
$tools->resynchronizeDatabaseSequences($toDB); $tools->resynchronizeDatabaseSequences($toDB);
} }
// save new database config // save new database config

View File

@ -36,9 +36,7 @@ class MDB2SchemaManager {
* TODO: write more documentation * TODO: write more documentation
*/ */
public function getDbStructure($file, $mode = MDB2_SCHEMA_DUMP_STRUCTURE) { public function getDbStructure($file, $mode = MDB2_SCHEMA_DUMP_STRUCTURE) {
$sm = $this->conn->getSchemaManager(); return \OC_DB_MDB2SchemaWriter::saveSchemaToFile($file, $this->conn);
return \OC_DB_MDB2SchemaWriter::saveSchemaToFile($file, $sm);
} }
/** /**
@ -60,19 +58,19 @@ class MDB2SchemaManager {
public function getMigrator() { public function getMigrator() {
$random = \OC::$server->getSecureRandom()->getMediumStrengthGenerator(); $random = \OC::$server->getSecureRandom()->getMediumStrengthGenerator();
$platform = $this->conn->getDatabasePlatform(); $platform = $this->conn->getDatabasePlatform();
$config = \OC::$server->getConfig();
if ($platform instanceof SqlitePlatform) { if ($platform instanceof SqlitePlatform) {
$config = \OC::$server->getConfig();
return new SQLiteMigrator($this->conn, $random, $config); return new SQLiteMigrator($this->conn, $random, $config);
} else if ($platform instanceof OraclePlatform) { } else if ($platform instanceof OraclePlatform) {
return new OracleMigrator($this->conn, $random); return new OracleMigrator($this->conn, $random, $config);
} else if ($platform instanceof MySqlPlatform) { } else if ($platform instanceof MySqlPlatform) {
return new MySQLMigrator($this->conn, $random); return new MySQLMigrator($this->conn, $random, $config);
} else if ($platform instanceof SQLServerPlatform) { } else if ($platform instanceof SQLServerPlatform) {
return new MsSqlMigrator($this->conn, $random); return new MsSqlMigrator($this->conn, $random, $config);
} else if ($platform instanceof PostgreSqlPlatform) { } else if ($platform instanceof PostgreSqlPlatform) {
return new Migrator($this->conn, $random); return new Migrator($this->conn, $random, $config);
} else { } else {
return new NoCheckMigrator($this->conn, $random); return new NoCheckMigrator($this->conn, $random, $config);
} }
} }

View File

@ -10,16 +10,22 @@ class OC_DB_MDB2SchemaWriter {
/** /**
* @param string $file * @param string $file
* @param \Doctrine\DBAL\Schema\AbstractSchemaManager $sm * @param \OC\DB\Connection $conn
* @return bool * @return bool
*/ */
static public function saveSchemaToFile($file, $sm) { static public function saveSchemaToFile($file, \OC\DB\Connection $conn) {
$config = \OC::$server->getConfig();
$xml = new SimpleXMLElement('<database/>'); $xml = new SimpleXMLElement('<database/>');
$xml->addChild('name', OC_Config::getValue( "dbname", "owncloud" )); $xml->addChild('name', $config->getSystemValue('dbname', 'owncloud'));
$xml->addChild('create', 'true'); $xml->addChild('create', 'true');
$xml->addChild('overwrite', 'false'); $xml->addChild('overwrite', 'false');
$xml->addChild('charset', 'utf8'); $xml->addChild('charset', 'utf8');
foreach ($sm->listTables() as $table) {
$conn->getConfiguration()->
setFilterSchemaAssetsExpression('/^' . $config->getSystemValue('dbtableprefix', 'oc_') . '/');
foreach ($conn->getSchemaManager()->listTables() as $table) {
self::saveTable($table, $xml->addChild('table')); self::saveTable($table, $xml->addChild('table'));
} }
file_put_contents($file, $xml->asXML()); file_put_contents($file, $xml->asXML());

View File

@ -14,6 +14,7 @@ use \Doctrine\DBAL\Schema\Table;
use \Doctrine\DBAL\Schema\Schema; use \Doctrine\DBAL\Schema\Schema;
use \Doctrine\DBAL\Schema\SchemaConfig; use \Doctrine\DBAL\Schema\SchemaConfig;
use \Doctrine\DBAL\Schema\Comparator; use \Doctrine\DBAL\Schema\Comparator;
use OCP\IConfig;
use OCP\Security\ISecureRandom; use OCP\Security\ISecureRandom;
class Migrator { class Migrator {
@ -28,13 +29,18 @@ class Migrator {
*/ */
private $random; private $random;
/** @var IConfig */
protected $config;
/** /**
* @param \Doctrine\DBAL\Connection $connection * @param \Doctrine\DBAL\Connection $connection
* @param ISecureRandom $random * @param ISecureRandom $random
* @param IConfig $config
*/ */
public function __construct(\Doctrine\DBAL\Connection $connection, ISecureRandom $random) { public function __construct(\Doctrine\DBAL\Connection $connection, ISecureRandom $random, IConfig $config) {
$this->connection = $connection; $this->connection = $connection;
$this->random = $random; $this->random = $random;
$this->config = $config;
} }
/** /**
@ -70,6 +76,8 @@ class Migrator {
*/ */
$tables = $targetSchema->getTables(); $tables = $targetSchema->getTables();
$this->connection->getConfiguration()->
setFilterSchemaAssetsExpression('/^' . $this->config->getSystemValue('dbtableprefix', 'oc_') . '/');
$existingTables = $this->connection->getSchemaManager()->listTableNames(); $existingTables = $this->connection->getSchemaManager()->listTableNames();
foreach ($tables as $table) { foreach ($tables as $table) {
@ -153,6 +161,8 @@ class Migrator {
} }
protected function getDiff(Schema $targetSchema, \Doctrine\DBAL\Connection $connection) { protected function getDiff(Schema $targetSchema, \Doctrine\DBAL\Connection $connection) {
$connection->getConfiguration()->
setFilterSchemaAssetsExpression('/^' . $this->config->getSystemValue('dbtableprefix', 'oc_') . '/');
$sourceSchema = $connection->getSchemaManager()->createSchema(); $sourceSchema = $connection->getSchemaManager()->createSchema();
// remove tables we don't know about // remove tables we don't know about

View File

@ -8,11 +8,23 @@
*/ */
namespace OC\DB; namespace OC\DB;
use OCP\IConfig;
/** /**
* Various PostgreSQL specific helper functions. * Various PostgreSQL specific helper functions.
*/ */
class PgSqlTools { class PgSqlTools {
/** @var \OCP\IConfig */
private $config;
/**
* @param \OCP\IConfig $config
*/
public function __construct(IConfig $config) {
$this->config = $config;
}
/** /**
* @brief Resynchronizes all sequences of a database after using INSERTs * @brief Resynchronizes all sequences of a database after using INSERTs
* without leaving out the auto-incremented column. * without leaving out the auto-incremented column.
@ -21,6 +33,9 @@ class PgSqlTools {
*/ */
public function resynchronizeDatabaseSequences(Connection $conn) { public function resynchronizeDatabaseSequences(Connection $conn) {
$databaseName = $conn->getDatabase(); $databaseName = $conn->getDatabase();
$conn->getConfiguration()->
setFilterSchemaAssetsExpression('/^' . $this->config->getSystemValue('dbtableprefix', 'oc_') . '/');
foreach ($conn->getSchemaManager()->listSequences() as $sequence) { foreach ($conn->getSchemaManager()->listSequences() as $sequence) {
$sequenceName = $sequence->getName(); $sequenceName = $sequence->getName();
$sqlInfo = 'SELECT table_schema, table_name, column_name $sqlInfo = 'SELECT table_schema, table_name, column_name

View File

@ -10,25 +10,9 @@ namespace OC\DB;
use Doctrine\DBAL\DBALException; use Doctrine\DBAL\DBALException;
use Doctrine\DBAL\Schema\Schema; use Doctrine\DBAL\Schema\Schema;
use OCP\Security\ISecureRandom;
class SQLiteMigrator extends Migrator { class SQLiteMigrator extends Migrator {
/**
* @var \OCP\IConfig
*/
private $config;
/**
* @param \Doctrine\DBAL\Connection $connection
* @param ISecureRandom $random
* @param \OCP\IConfig $config
*/
public function __construct(\Doctrine\DBAL\Connection $connection, ISecureRandom $random, \OCP\IConfig $config) {
parent::__construct($connection, $random);
$this->config = $config;
}
/** /**
* @param \Doctrine\DBAL\Schema\Schema $targetSchema * @param \Doctrine\DBAL\Schema\Schema $targetSchema
* @throws \OC\DB\MigrationException * @throws \OC\DB\MigrationException

View File

@ -39,7 +39,7 @@ class Migrator extends \Test\TestCase {
$this->markTestSkipped('DB migration tests are not supported on MSSQL'); $this->markTestSkipped('DB migration tests are not supported on MSSQL');
} }
$this->manager = new \OC\DB\MDB2SchemaManager($this->connection); $this->manager = new \OC\DB\MDB2SchemaManager($this->connection);
$this->tableName = strtolower($this->getUniqueID('test_')); $this->tableName = strtolower($this->getUniqueID('oc_test_'));
} }
protected function tearDown() { protected function tearDown() {