Browse Source

Merge pull request #4071 from nextcloud/issue-173-database-conversion-failure

Make sure blob columns are correctly converted as parameters
tags/v12.0.0beta1
Joas Schilling 7 years ago
parent
commit
75657c1a6e
1 changed files with 30 additions and 1 deletions
  1. 30
    1
      core/Command/Db/ConvertType.php

+ 30
- 1
core/Command/Db/ConvertType.php View File

@@ -28,6 +28,7 @@

namespace OC\Core\Command\Db;

use OCP\DB\QueryBuilder\IQueryBuilder;
use \OCP\IConfig;
use OC\DB\Connection;
use OC\DB\ConnectionFactory;
@@ -54,6 +55,9 @@ class ConvertType extends Command implements CompletionAwareInterface {
*/
protected $connectionFactory;

/** @var array */
protected $columnTypes;

/**
* @param \OCP\IConfig $config
* @param \OC\DB\ConnectionFactory $connectionFactory
@@ -304,7 +308,12 @@ class ConvertType extends Command implements CompletionAwareInterface {
}

foreach ($row as $key => $value) {
$insertQuery->setParameter($key, $value);
$type = $this->getColumnType($table, $key);
if ($type !== false) {
$insertQuery->setParameter($key, $value, $type);
} else {
$insertQuery->setParameter($key, $value);
}
}
$insertQuery->execute();
}
@@ -313,6 +322,26 @@ class ConvertType extends Command implements CompletionAwareInterface {
$progress->finish();
}

protected function getColumnType($table, $column) {
if (isset($this->columnTypes[$table][$column])) {
return $this->columnTypes[$table][$column];
}
$prefix = $this->config->getSystemValue('dbtableprefix', 'oc_');

$this->columnTypes[$table][$column] = false;

if ($table === $prefix . 'cards' && $column === 'carddata') {
$this->columnTypes[$table][$column] = IQueryBuilder::PARAM_LOB;
} else if ($column === 'calendardata') {
if ($table === $prefix . 'calendarobjects' ||
$table === $prefix . 'schedulingobjects') {
$this->columnTypes[$table][$column] = IQueryBuilder::PARAM_LOB;
}
}

return $this->columnTypes[$table][$column];
}

protected function convertDB(Connection $fromDB, Connection $toDB, array $tables, InputInterface $input, OutputInterface $output) {
$this->config->setSystemValue('maintenance', true);
try {

Loading…
Cancel
Save