]> source.dussan.org Git - nextcloud-server.git/commitdiff
Change OC_DB_Schema to use DI for db connection object
authorBart Visscher <bartv@thisnet.nl>
Mon, 29 Jul 2013 15:46:20 +0000 (17:46 +0200)
committerBart Visscher <bartv@thisnet.nl>
Fri, 2 Aug 2013 11:14:18 +0000 (13:14 +0200)
lib/db.php
lib/db/schema.php

index dd48c3294907cd3ddcbaa2f1ae11381778b4438e..a618e8ebb94f7642dac3784e58e636eb94f0adb0 100644 (file)
@@ -397,7 +397,8 @@ class OC_DB {
         */
        public static function getDbStructure( $file, $mode=MDB2_SCHEMA_DUMP_STRUCTURE) {
                self::connectDoctrine();
-               return OC_DB_Schema::getDbStructure(self::$DOCTRINE, $file);
+               $schema = new \OC\DB\Schema(self::$connection);
+               return $schema->getDbStructure($file);
        }
 
        /**
@@ -409,7 +410,9 @@ class OC_DB {
         */
        public static function createDbFromStructure( $file ) {
                self::connectDoctrine();
-               return OC_DB_Schema::createDbFromStructure(self::$DOCTRINE, $file);
+               $schema = new \OC\DB\Schema(self::$connection);
+               $result = $schema->createDbFromStructure($file);
+               return $result;
        }
 
        /**
@@ -420,8 +423,9 @@ class OC_DB {
         */
        public static function updateDbFromStructure($file) {
                self::connectDoctrine();
+               $schema = new \OC\DB\Schema(self::$connection);
                try {
-                       $result = OC_DB_Schema::updateDbFromStructure(self::$DOCTRINE, $file);
+                       $result = $schema->updateDbFromStructure($file);
                } catch (Exception $e) {
                        OC_Log::write('core', 'Failed to update database structure ('.$e.')', OC_Log::FATAL);
                        throw $e;
@@ -601,7 +605,8 @@ class OC_DB {
         */
        public static function dropTable($tableName) {
                self::connectDoctrine();
-               OC_DB_Schema::dropTable(self::$DOCTRINE, $tableName);
+               $schema = new \OC\DB\Schema(self::$connection);
+               $schema->dropTable($tableName);
        }
 
        /**
@@ -610,7 +615,8 @@ class OC_DB {
         */
        public static function removeDBStructure($file) {
                self::connectDoctrine();
-               OC_DB_Schema::removeDBStructure(self::$DOCTRINE, $file);
+               $schema = new \OC\DB\Schema(self::$connection);
+               $schema->removeDBStructure($file);
        }
 
        /**
@@ -619,7 +625,8 @@ class OC_DB {
         */
        public static function replaceDB( $file ) {
                self::connectDoctrine();
-               OC_DB_Schema::replaceDB(self::$DOCTRINE, $file);
+               $schema = new \OC\DB\Schema(self::$connection);
+               $schema->replaceDB($file);
        }
 
        /**
index bc82249609dd021d53d6f7ee4ad54b0354a85229..b2dd982e8ea80dc42c3adb315d605a7d311b8d55 100644 (file)
@@ -6,47 +6,55 @@
  * See the COPYING-README file.
  */
 
-class OC_DB_Schema {
+namespace OC\DB;
+
+class Schema {
+       /**
+        * @var \Doctrine\DBAL\Connection $conn
+        */
+       protected $conn;
+
+       public function __construct(Connection $conn) {
+               $this->conn = $conn;
+       }
+
        /**
         * @brief saves database scheme to xml file
-        * @param \Doctrine\DBAL\Connection $conn
         * @param string $file name of file
         * @param int|string $mode
         * @return bool
         *
         * TODO: write more documentation
         */
-       public static function getDbStructure( $conn, $file, $mode=MDB2_SCHEMA_DUMP_STRUCTURE) {
-               $sm = $conn->getSchemaManager();
+       public function getDbStructure( $file, $mode=MDB2_SCHEMA_DUMP_STRUCTURE) {
+               $sm = $this->conn->getSchemaManager();
 
-               return OC_DB_MDB2SchemaWriter::saveSchemaToFile($file, $sm);
+               return \OC_DB_MDB2SchemaWriter::saveSchemaToFile($file, $sm);
        }
 
        /**
         * @brief Creates tables from XML file
-        * @param \Doctrine\DBAL\Connection $conn
         * @param string $file file to read structure from
         * @return bool
         *
         * TODO: write more documentation
         */
-       public static function createDbFromStructure( $conn, $file ) {
-               $schemaReader = new \OC\DB\MDB2SchemaReader(\OC_Config::getObject(), $conn->getDatabasePlatform());
+       public function createDbFromStructure( $file ) {
+               $schemaReader = new \OC\DB\MDB2SchemaReader(\OC_Config::getObject(), $this->conn->getDatabasePlatform());
                $toSchema = $schemaReader->loadSchemaFromFile($file);
-               return self::executeSchemaChange($conn, $toSchema);
+               return $this->executeSchemaChange($toSchema);
        }
 
        /**
         * @brief update the database scheme
-        * @param \Doctrine\DBAL\Connection $conn
         * @param string $file file to read structure from
         * @return bool
         */
-       public static function updateDbFromStructure($conn, $file) {
-               $sm = $conn->getSchemaManager();
+       public function updateDbFromStructure($file) {
+               $sm = $this->conn->getSchemaManager();
                $fromSchema = $sm->createSchema();
 
-               $schemaReader = new \OC\DB\MDB2SchemaReader(\OC_Config::getObject(), $conn->getDatabasePlatform());
+               $schemaReader = new \OC\DB\MDB2SchemaReader(\OC_Config::getObject(), $this->conn->getDatabasePlatform());
                $toSchema = $schemaReader->loadSchemaFromFile($file);
 
                // remove tables we don't know about
@@ -65,43 +73,34 @@ class OC_DB_Schema {
                $comparator = new \Doctrine\DBAL\Schema\Comparator();
                $schemaDiff = $comparator->compare($fromSchema, $toSchema);
 
-               $platform = $conn->getDatabasePlatform();
+               $platform = $this->conn->getDatabasePlatform();
                $tables = $schemaDiff->newTables + $schemaDiff->changedTables + $schemaDiff->removedTables;
                foreach($tables as $tableDiff) {
                        $tableDiff->name = $platform->quoteIdentifier($tableDiff->name);
                }
 
-
-               //$from = $fromSchema->toSql($conn->getDatabasePlatform());
-               //$to = $toSchema->toSql($conn->getDatabasePlatform());
-               //echo($from[9]);
-               //echo '<br>';
-               //echo($to[9]);
-               //var_dump($from, $to);
-               return self::executeSchemaChange($conn, $schemaDiff);
+               return $this->executeSchemaChange($schemaDiff);
        }
 
        /**
         * @brief drop a table
-        * @param \Doctrine\DBAL\Connection $conn
         * @param string $tableName the table to drop
         */
-       public static function dropTable($conn, $tableName) {
-               $sm = $conn->getSchemaManager();
+       public function dropTable($tableName) {
+               $sm = $this->conn->getSchemaManager();
                $fromSchema = $sm->createSchema();
                $toSchema = clone $fromSchema;
                $toSchema->dropTable($tableName);
-               $sql = $fromSchema->getMigrateToSql($toSchema, $conn->getDatabasePlatform());
-               $conn->execute($sql);
+               $sql = $fromSchema->getMigrateToSql($toSchema, $this->conn->getDatabasePlatform());
+               $this->conn->execute($sql);
        }
 
        /**
         * remove all tables defined in a database structure xml file
-        * @param \Doctrine\DBAL\Connection $conn
         * @param string $file the xml file describing the tables
         */
-       public static function removeDBStructure($conn, $file) {
-               $schemaReader = new \OC\DB\MDB2SchemaReader(\OC_Config::getObject(), $conn->getDatabasePlatform());
+       public function removeDBStructure($file) {
+               $schemaReader = new \OC\DB\MDB2SchemaReader(\OC_Config::getObject(), $this->conn->getDatabasePlatform());
                $fromSchema = $schemaReader->loadSchemaFromFile($file);
                $toSchema = clone $fromSchema;
                foreach($toSchema->getTables() as $table) {
@@ -109,42 +108,40 @@ class OC_DB_Schema {
                }
                $comparator = new \Doctrine\DBAL\Schema\Comparator();
                $schemaDiff = $comparator->compare($fromSchema, $toSchema);
-               self::executeSchemaChange($conn, $schemaDiff);
+               $this->executeSchemaChange($schemaDiff);
        }
 
        /**
         * @brief replaces the ownCloud tables with a new set
-        * @param \Doctrine\DBAL\Connection $conn
         * @param $file string path to the MDB2 xml db export file
         */
-       public static function replaceDB( $conn, $file ) {
-               $apps = OC_App::getAllApps();
-               self::beginTransaction();
+       public function replaceDB( $file ) {
+               $apps = \OC_App::getAllApps();
+               $this->conn->beginTransaction();
                // Delete the old tables
-               self::removeDBStructure( $conn, OC::$SERVERROOT . '/db_structure.xml' );
+               $this->removeDBStructure( OC::$SERVERROOT . '/db_structure.xml' );
 
                foreach($apps as $app) {
-                       $path = OC_App::getAppPath($app).'/appinfo/database.xml';
+                       $path = \OC_App::getAppPath($app).'/appinfo/database.xml';
                        if(file_exists($path)) {
-                               self::removeDBStructure( $conn, $path );
+                               $this->removeDBStructure( $path );
                        }
                }
 
                // Create new tables
-               self::commit();
+               $this->conn->commit();
        }
 
        /**
-        * @param \Doctrine\DBAL\Connection $conn
         * @param \Doctrine\DBAL\Schema\Schema $schema
         * @return bool
         */
-       private static function executeSchemaChange($conn, $schema) {
-               $conn->beginTransaction();
-               foreach($schema->toSql($conn->getDatabasePlatform()) as $sql) {
-                       $conn->query($sql);
+       private function executeSchemaChange($schema) {
+               $this->conn->beginTransaction();
+               foreach($schema->toSql($this->conn->getDatabasePlatform()) as $sql) {
+                       $this->conn->query($sql);
                }
-               $conn->commit();
+               $this->conn->commit();
                return true;
        }
 }