Handle oc_dav_properties migration
Signed-off-by: Julius Härtl <jus@bitgrid.net>
This commit is contained in:
parent
c77e259cfe
commit
28491ad2d8
|
@ -31,11 +31,37 @@ namespace OC\Core\Migrations;
|
||||||
|
|
||||||
use Doctrine\DBAL\Types\Types;
|
use Doctrine\DBAL\Types\Types;
|
||||||
use OCP\DB\ISchemaWrapper;
|
use OCP\DB\ISchemaWrapper;
|
||||||
|
use OCP\IDBConnection;
|
||||||
use OCP\Migration\IOutput;
|
use OCP\Migration\IOutput;
|
||||||
use OCP\Migration\SimpleMigrationStep;
|
use OCP\Migration\SimpleMigrationStep;
|
||||||
|
|
||||||
class Version13000Date20170718121200 extends 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 IOutput $output
|
||||||
* @param \Closure $schemaClosure The `\Closure` returns a `ISchemaWrapper`
|
* @param \Closure $schemaClosure The `\Closure` returns a `ISchemaWrapper`
|
||||||
|
@ -330,6 +356,27 @@ class Version13000Date20170718121200 extends SimpleMigrationStep {
|
||||||
$table->setPrimaryKey(['id']);
|
$table->setPrimaryKey(['id']);
|
||||||
$table->addIndex(['userid'], 'property_index');
|
$table->addIndex(['userid'], 'property_index');
|
||||||
$table->addIndex(['userid', 'propertypath'], 'properties_path_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')) {
|
if (!$schema->hasTable('share')) {
|
||||||
|
@ -965,4 +1012,32 @@ class Version13000Date20170718121200 extends SimpleMigrationStep {
|
||||||
}
|
}
|
||||||
return $schema;
|
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();
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue