Handle oc_dav_properties migration

Signed-off-by: Julius Härtl <jus@bitgrid.net>
This commit is contained in:
Julius Härtl 2020-12-07 13:51:17 +01:00
parent df44acfa07
commit de369fdeaa
No known key found for this signature in database
GPG Key ID: 4C614C6ED2CDE6DF
1 changed files with 75 additions and 0 deletions

View File

@ -31,11 +31,37 @@ namespace OC\Core\Migrations;
use Doctrine\DBAL\Types\Types;
use OCP\DB\ISchemaWrapper;
use OCP\IDBConnection;
use OCP\Migration\IOutput;
use OCP\Migration\SimpleMigrationStep;
class Version13000Date20170718121200 extends SimpleMigrationStep {
/** @var IDBConnection */
private $connection;
public function __construct(IDBConnection $connection) {
$this->connection = $connection;
}
public function preSchemaChange(IOutput $output, \Closure $schemaClosure, array $options) {
/** @var ISchemaWrapper $schema */
$schema = $schemaClosure();
if (!$schema->hasTable('properties')) {
return;
}
// in case we have a properties table from oc we drop it since we will only migrate
// the dav_properties values in the postSchemaChange step
$table = $schema->getTable('properties');
if ($table->hasColumn('fileid')) {
$qb = $this->connection->getQueryBuilder();
$qb->delete('properties');
$qb->execute();
}
}
/**
* @param IOutput $output
* @param \Closure $schemaClosure The `\Closure` returns a `ISchemaWrapper`
@ -329,6 +355,27 @@ class Version13000Date20170718121200 extends SimpleMigrationStep {
$table->setPrimaryKey(['id']);
$table->addIndex(['userid'], 'property_index');
$table->addIndex(['userid', 'propertypath'], 'properties_path_index');
} else {
$table = $schema->getTable('properties');
if ($table->hasColumn('propertytype')) {
$table->dropColumn('propertytype');
}
if ($table->hasColumn('fileid')) {
$table->dropColumn('fileid');
}
if (!$table->hasColumn('propertypath')) {
$table->addColumn('propertypath', 'string', [
'notnull' => true,
'length' => 255,
]);
}
if (!$table->hasColumn('userid')) {
$table->addColumn('userid', 'string', [
'notnull' => false,
'length' => 64,
'default' => '',
]);
}
}
if (!$schema->hasTable('share')) {
@ -956,4 +1003,32 @@ class Version13000Date20170718121200 extends SimpleMigrationStep {
}
return $schema;
}
public function postSchemaChange(IOutput $output, \Closure $schemaClosure, array $options) {
/** @var ISchemaWrapper $schema */
$schema = $schemaClosure();
if (!$schema->hasTable('dav_properties')) {
return;
}
$query = $this->connection->getQueryBuilder();
$query->select('*')
->from('dav_properties');
$insert = $this->connection->getQueryBuilder();
$insert->insert('properties')
->setValue('propertypath', $insert->createParameter('propertypath'))
->setValue('propertyname', $insert->createParameter('propertyname'))
->setValue('propertyvalue', $insert->createParameter('propertyvalue'))
->setValue('userid', $insert->createParameter('userid'));
$result = $query->execute();
while ($row = $result->fetch()) {
preg_match('/(calendar)\/([A-z0-9-@_]+)\//', $row['propertypath'], $match);
$insert->setParameter('propertypath', (string) $row['propertypath'])
->setParameter('propertyname', (string) $row['propertyname'])
->setParameter('propertyvalue', (string) $row['propertyvalue'])
->setParameter('userid', (string) ($match[2] ?? ''));
$insert->execute();
}
}
}