Skip to content

Commit

Permalink
Merge pull request #4071 from nextcloud/issue-173-database-conversion…
Browse files Browse the repository at this point in the history
…-failure

Make sure blob columns are correctly converted as parameters
  • Loading branch information
nickvergessen authored Apr 4, 2017
2 parents e0227cb + 75eee31 commit 75657c1
Showing 1 changed file with 30 additions and 1 deletion.
31 changes: 30 additions & 1 deletion core/Command/Db/ConvertType.php
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -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
Expand Down Expand Up @@ -304,7 +308,12 @@ protected function copyTable(Connection $fromDB, Connection $toDB, $table, Input
}

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();
}
Expand All @@ -313,6 +322,26 @@ protected function copyTable(Connection $fromDB, Connection $toDB, $table, Input
$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 {
Expand Down

0 comments on commit 75657c1

Please sign in to comment.