From 947e03aab51493a860778a541b31f991006bf6ff Mon Sep 17 00:00:00 2001 From: Bart Visscher Date: Sun, 17 Mar 2013 17:00:07 +0100 Subject: [PATCH] Quote index columns that need it --- lib/db/mdb2schemareader.php | 8 +++++++- lib/db/schema.php | 6 +++--- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/lib/db/mdb2schemareader.php b/lib/db/mdb2schemareader.php index 1d71af1700..827323a551 100644 --- a/lib/db/mdb2schemareader.php +++ b/lib/db/mdb2schemareader.php @@ -9,10 +9,12 @@ class OC_DB_MDB2SchemaReader { static protected $DBNAME; static protected $DBTABLEPREFIX; + static protected $platform; - public static function loadSchemaFromFile($file) { + public static function loadSchemaFromFile($file, $platform) { self::$DBNAME = OC_Config::getValue( "dbname", "owncloud" ); self::$DBTABLEPREFIX = OC_Config::getValue( "dbtableprefix", "oc_" ); + self::$platform = $platform; $schema = new \Doctrine\DBAL\Schema\Schema(); $xml = simplexml_load_file($file); foreach($xml->children() as $child) { @@ -173,6 +175,10 @@ class OC_DB_MDB2SchemaReader { switch($field->getName()) { case 'name': $field_name = (string)$field; + $keywords = self::$platform->getReservedKeywordsList(); + if ($keywords->isKeyword($field_name)) { + $field_name = self::$platform->quoteIdentifier($field_name); + } $fields[] = $field_name; break; case 'sorting': diff --git a/lib/db/schema.php b/lib/db/schema.php index cd356e7ff8..7a1ec20404 100644 --- a/lib/db/schema.php +++ b/lib/db/schema.php @@ -32,7 +32,7 @@ class OC_DB_Schema { * TODO: write more documentation */ public static function createDbFromStructure( $conn, $file ) { - $toSchema = OC_DB_MDB2SchemaReader::loadSchemaFromFile($file); + $toSchema = OC_DB_MDB2SchemaReader::loadSchemaFromFile($file, $conn->getDatabasePlatform()); return self::executeSchemaChange($conn, $toSchema); } @@ -45,7 +45,7 @@ class OC_DB_Schema { $sm = $conn->getSchemaManager(); $fromSchema = $sm->createSchema(); - $toSchema = OC_DB_MDB2SchemaReader::loadSchemaFromFile($file); + $toSchema = OC_DB_MDB2SchemaReader::loadSchemaFromFile($file, $conn->getDatabasePlatform()); // remove tables we don't know about foreach($fromSchema->getTables() as $table) { @@ -84,7 +84,7 @@ class OC_DB_Schema { * @param string $file the xml file describing the tables */ public static function removeDBStructure($conn, $file) { - $fromSchema = OC_DB_MDB2SchemaReader::loadSchemaFromFile($file); + $fromSchema = OC_DB_MDB2SchemaReader::loadSchemaFromFile($file, $conn->getDatabasePlatform()); $toSchema = clone $fromSchema; foreach($toSchema->getTables() as $table) { $toSchema->dropTable($table->getName());