/** * Fix mime types */ public function run() { if (!$this->connection->getDatabasePlatform() instanceof MySqlPlatform) { $this->emit('\\OC\\Repair', 'info', array('Not a mysql database -> nothing to no')); return; } $tables = $this->getAllNonUTF8BinTables($this->connection); foreach ($tables as $table) { $query = $this->connection->prepare('ALTER TABLE `' . $table . '` CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;'); $query->execute(); } }
/** * Fix mime types */ public function run(IOutput $output) { if (!$this->connection->getDatabasePlatform() instanceof MySqlPlatform) { $output->info('Not a mysql database -> nothing to no'); return; } $tables = $this->getAllNonUTF8BinTables($this->connection); foreach ($tables as $table) { $output->info("Change collation for {$table} ..."); $query = $this->connection->prepare('ALTER TABLE `' . $table . '` CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;'); $query->execute(); } }
/** * drop a table - the database prefix will be prepended * @param string $tableName the table to drop */ public static function dropTable($tableName) { $tableName = OC_Config::getValue('dbtableprefix', 'oc_') . trim($tableName); self::$connection->beginTransaction(); $platform = self::$connection->getDatabasePlatform(); $sql = $platform->getDropTableSQL($platform->quoteIdentifier($tableName)); self::$connection->query($sql); self::$connection->commit(); }
/** * @param \Doctrine\DBAL\Schema\Schema $schema * @return string */ public function generateChangeScript($schema) { $script = ''; $sqls = $schema->toSql($this->conn->getDatabasePlatform()); foreach ($sqls as $sql) { $script .= $sql . ';'; $script .= PHP_EOL; } return $script; }
/** * @param \Doctrine\DBAL\Schema\Schema $schema * @return bool */ private function executeSchemaChange($schema) { $this->conn->beginTransaction(); foreach ($schema->toSql($this->conn->getDatabasePlatform()) as $sql) { $this->conn->query($sql); } $this->conn->commit(); if ($this->conn->getDatabasePlatform() instanceof SqlitePlatform) { \OC_DB::reconnect(); } return true; }
/** * Fix mime types */ public function run(IOutput $out) { if (!$this->connection->getDatabasePlatform() instanceof SqlitePlatform) { return; } $sourceSchema = $this->connection->getSchemaManager()->createSchema(); $schemaDiff = new SchemaDiff(); foreach ($sourceSchema->getTables() as $tableSchema) { $primaryKey = $tableSchema->getPrimaryKey(); if (!$primaryKey) { continue; } $columnNames = $primaryKey->getColumns(); // add a column diff for every primary key column, // but do not actually change anything, this will // force the generation of SQL statements to alter // those tables, which will then trigger the // specific SQL code from OCSqlitePlatform try { $tableDiff = new TableDiff($tableSchema->getName()); $tableDiff->fromTable = $tableSchema; foreach ($columnNames as $columnName) { $columnSchema = $tableSchema->getColumn($columnName); $columnDiff = new ColumnDiff($columnSchema->getName(), $columnSchema); $tableDiff->changedColumns[] = $columnDiff; $schemaDiff->changedTables[] = $tableDiff; } } catch (SchemaException $e) { // ignore } } $this->connection->beginTransaction(); foreach ($schemaDiff->toSql($this->connection->getDatabasePlatform()) as $sql) { $this->connection->query($sql); } $this->connection->commit(); }