Merge pull request #12995 from owncloud/tbelau666-master
Use Doctrines filter by table name
This commit is contained in:
commit
1f1643b35f
|
@ -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
|
||||||
|
|
|
@ -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();
|
||||||
if ($platform instanceof SqlitePlatform) {
|
|
||||||
$config = \OC::$server->getConfig();
|
$config = \OC::$server->getConfig();
|
||||||
|
if ($platform instanceof SqlitePlatform) {
|
||||||
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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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());
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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() {
|
||||||
|
|
Loading…
Reference in New Issue