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) {
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':
* 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);
}
$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) {
* @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());