]> source.dussan.org Git - nextcloud-server.git/commitdiff
provide function for updating the database scheme
authorRobin Appelman <icewind1991@gmail.com>
Sun, 23 Oct 2011 13:25:38 +0000 (15:25 +0200)
committerRobin Appelman <icewind1991@gmail.com>
Sun, 23 Oct 2011 13:25:38 +0000 (15:25 +0200)
lib/db.php

index 58479bacfb9562abb3bbbd89187d05f9cda93574..421b08c2320cb9376a0b8842c62ba4c8036e072a 100644 (file)
@@ -263,7 +263,7 @@ class OC_DB {
         *
         * TODO: write more documentation
         */
-       public static function getDbStructure( $file ){
+       public static function getDbStructure( $file ,$mode=MDB2_SCHEMA_DUMP_STRUCTURE){
                self::connectScheme();
 
                // write the scheme
@@ -299,7 +299,7 @@ class OC_DB {
                $file2 = tempnam( get_temp_dir(), 'oc_db_scheme_' );
                $content = str_replace( '*dbname*', $CONFIG_DBNAME, $content );
                $content = str_replace( '*dbprefix*', $CONFIG_DBTABLEPREFIX, $content );
-               if( $CONFIG_DBTYPE == 'pgsql' ){ //mysql support it too but sqlite don't
+               if( $CONFIG_DBTYPE == 'pgsql' ){ //mysql support it too but sqlite doesn't
                        $content = str_replace( '<default>0000-00-00 00:00:00</default>', '<default>CURRENT_TIMESTAMP</default>', $content );
                }
                file_put_contents( $file2, $content );
@@ -326,6 +326,39 @@ class OC_DB {
 
                return true;
        }
+       
+       /**
+        * @brief update the database scheme
+        * @param $file file to read structure from
+        */
+       public static function updateDbFromStructure($file){
+               $CONFIG_DBNAME  = OC_Config::getValue( "dbname", "owncloud" );
+               $CONFIG_DBTABLEPREFIX = OC_Config::getValue( "dbtableprefix", "oc_" );
+               $CONFIG_DBTYPE = OC_Config::getValue( "dbtype", "sqlite" );
+
+               self::connectScheme();
+
+               // read file
+               $content = file_get_contents( $file );
+               
+               // Make changes and save them to a temporary file
+               $file2 = tempnam( get_temp_dir(), 'oc_db_scheme_' );
+               $content = str_replace( '*dbname*', $CONFIG_DBNAME, $content );
+               $content = str_replace( '*dbprefix*', $CONFIG_DBTABLEPREFIX, $content );
+               if( $CONFIG_DBTYPE == 'pgsql' ){ //mysql support it too but sqlite doesn't
+                       $content = str_replace( '<default>0000-00-00 00:00:00</default>', '<default>CURRENT_TIMESTAMP</default>', $content );
+               }
+               file_put_contents( $file2, $content );
+               $previousSchema = self::$schema->getDefinitionFromDatabase();
+               $op = $schema->updateDatabase($file2, $previousSchema, array(), false);
+
+               if (PEAR::isError($op)) {
+                   $error = $op->getMessage();
+                   OC_Log::write('core','Failed to update database structure ('.$error.')',OC_Log::FATAL);
+                   return false;
+               }
+               return true;
+       }
 
        /**
         * @brief connects to a MDB2 database scheme