2017-12-14 10:37:11 -05:00
< ? php
2019-12-03 13:57:53 -05:00
2018-05-24 04:37:33 -04:00
declare ( strict_types = 1 );
2019-12-03 13:57:53 -05:00
2017-12-14 10:37:11 -05:00
/**
* @ copyright Copyright ( c ) 2017 Bjoern Schiessle < bjoern @ schiessle . org >
*
2019-12-03 13:57:53 -05:00
* @ author Bjoern Schiessle < bjoern @ schiessle . org >
2021-06-04 15:52:51 -04:00
* @ author Christoph Wurst < christoph @ winzerhof - wurst . at >
2019-12-03 13:57:53 -05:00
* @ author Joas Schilling < coding @ schilljs . com >
2020-12-16 08:54:15 -05:00
* @ author Julius Härtl < jus @ bitgrid . net >
2020-08-24 08:54:25 -04:00
* @ author Mario Danic < mario @ lovelyhq . com >
2019-12-03 13:57:53 -05:00
* @ author Morris Jobke < hey @ morrisjobke . de >
* @ author Robin Appelman < robin @ icewind . nl >
* @ author Roeland Jago Douma < roeland @ famdouma . nl >
2020-03-31 04:49:10 -04:00
* @ author Thomas Citharel < nextcloud @ tcit . fr >
2019-12-03 13:57:53 -05:00
*
2017-12-14 10:37:11 -05:00
* @ license GNU AGPL version 3 or any later version
*
* This program is free software : you can redistribute it and / or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation , either version 3 of the
* License , or ( at your option ) any later version .
*
* This program is distributed in the hope that it will be useful ,
* but WITHOUT ANY WARRANTY ; without even the implied warranty of
2021-06-04 15:52:51 -04:00
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE . See the
2017-12-14 10:37:11 -05:00
* GNU Affero General Public License for more details .
*
* You should have received a copy of the GNU Affero General Public License
2019-12-03 13:57:53 -05:00
* along with this program . If not , see < http :// www . gnu . org / licenses />.
2017-12-14 10:37:11 -05:00
*
*/
namespace OC\Core\Command\Db ;
2021-08-26 08:25:17 -04:00
use Doctrine\DBAL\Platforms\PostgreSQL94Platform ;
2021-01-03 09:28:31 -05:00
use OC\DB\Connection ;
2017-12-14 10:37:11 -05:00
use OC\DB\SchemaWrapper ;
2023-07-14 04:34:09 -04:00
use OCP\DB\Events\AddMissingIndicesEvent ;
use OCP\EventDispatcher\IEventDispatcher ;
2017-12-14 10:37:11 -05:00
use OCP\IDBConnection ;
use Symfony\Component\Console\Command\Command ;
2022-02-21 12:32:17 -05:00
use Symfony\Component\Console\Input\InputOption ;
2017-12-14 10:37:11 -05:00
use Symfony\Component\Console\Input\InputInterface ;
use Symfony\Component\Console\Output\OutputInterface ;
2018-05-24 04:37:33 -04:00
use Symfony\Component\EventDispatcher\EventDispatcherInterface ;
use Symfony\Component\EventDispatcher\GenericEvent ;
2017-12-14 10:37:11 -05:00
2017-12-15 04:45:00 -05:00
/**
* Class AddMissingIndices
*
* if you added any new indices to the database , this is the right place to add
2020-03-11 07:29:52 -04:00
* your update routine for existing instances
2017-12-15 04:45:00 -05:00
*
* @ package OC\Core\Command\Db
*/
class AddMissingIndices extends Command {
2022-04-12 11:55:01 -04:00
private Connection $connection ;
2023-07-14 04:34:09 -04:00
private IEventDispatcher $eventDispatcher ;
2022-04-12 11:55:01 -04:00
private EventDispatcherInterface $dispatcher ;
2018-05-24 04:37:33 -04:00
2023-07-14 04:34:09 -04:00
public function __construct ( Connection $connection , IEventDispatcher $eventDispatcher , EventDispatcherInterface $dispatcher ) {
2017-12-14 10:37:11 -05:00
parent :: __construct ();
2018-05-24 04:37:33 -04:00
$this -> connection = $connection ;
2023-07-14 04:34:09 -04:00
$this -> eventDispatcher = $eventDispatcher ;
2018-05-24 04:37:33 -04:00
$this -> dispatcher = $dispatcher ;
2017-12-14 10:37:11 -05:00
}
protected function configure () {
$this
2017-12-15 04:45:00 -05:00
-> setName ( 'db:add-missing-indices' )
2022-02-21 12:32:17 -05:00
-> setDescription ( 'Add missing indices to the database tables' )
-> addOption ( 'dry-run' , null , InputOption :: VALUE_NONE , " Output the SQL queries instead of running them. " );
2017-12-14 10:37:11 -05:00
}
2020-06-26 08:54:51 -04:00
protected function execute ( InputInterface $input , OutputInterface $output ) : int {
2023-07-14 04:34:09 -04:00
$dryRun = $input -> getOption ( 'dry-run' );
$this -> addCoreIndexes ( $output , $dryRun );
2017-12-15 04:45:00 -05:00
2018-05-24 04:37:33 -04:00
// Dispatch event so apps can also update indexes if needed
$event = new GenericEvent ( $output );
$this -> dispatcher -> dispatch ( IDBConnection :: ADD_MISSING_INDEXES_EVENT , $event );
2023-07-14 04:34:09 -04:00
$event = new AddMissingIndicesEvent ();
$this -> eventDispatcher -> dispatchTyped ( $event );
$missingIndices = $event -> getMissingIndices ();
if ( $missingIndices !== []) {
$schema = new SchemaWrapper ( $this -> connection );
foreach ( $missingIndices as $missingIndex ) {
if ( $schema -> hasTable ( $missingIndex [ 'tableName' ])) {
$table = $schema -> getTable ( $missingIndex [ 'tableName' ]);
if ( ! $table -> hasIndex ( $missingIndex [ 'indexName' ])) {
$output -> writeln ( '<info>Adding additional ' . $missingIndex [ 'indexName' ] . ' index to the ' . $table -> getName () . ' table, this can take some time...</info>' );
$table -> addIndex ( $missingIndex [ 'columns' ], $missingIndex [ 'indexName' ]);
$sqlQueries = $this -> connection -> migrateToSchema ( $schema -> getWrappedSchema (), $dryRun );
if ( $dryRun && $sqlQueries !== null ) {
$output -> writeln ( $sqlQueries );
}
$output -> writeln ( '<info>' . $table -> getName () . ' table updated successfully.</info>' );
}
}
}
}
2020-06-26 08:54:51 -04:00
return 0 ;
2017-12-15 04:45:00 -05:00
}
/**
* add missing indices to the share table
*
* @ param OutputInterface $output
2022-02-21 12:32:17 -05:00
* @ param bool $dryRun If true , will return the sql queries instead of running them .
2017-12-15 04:45:00 -05:00
* @ throws \Doctrine\DBAL\Schema\SchemaException
*/
2022-02-21 12:32:17 -05:00
private function addCoreIndexes ( OutputInterface $output , bool $dryRun ) : void {
2017-12-15 04:45:00 -05:00
$output -> writeln ( '<info>Check indices of the share table.</info>' );
2017-12-14 10:37:11 -05:00
$schema = new SchemaWrapper ( $this -> connection );
$updated = false ;
2018-05-24 04:37:33 -04:00
if ( $schema -> hasTable ( 'share' )) {
$table = $schema -> getTable ( 'share' );
2017-12-14 10:37:11 -05:00
if ( ! $table -> hasIndex ( 'share_with_index' )) {
2018-06-03 07:32:49 -04:00
$output -> writeln ( '<info>Adding additional share_with index to the share table, this can take some time...</info>' );
2017-12-14 10:37:11 -05:00
$table -> addIndex ([ 'share_with' ], 'share_with_index' );
2022-02-21 12:32:17 -05:00
$sqlQueries = $this -> connection -> migrateToSchema ( $schema -> getWrappedSchema (), $dryRun );
if ( $dryRun && $sqlQueries !== null ) {
$output -> writeln ( $sqlQueries );
}
2017-12-14 10:37:11 -05:00
$updated = true ;
$output -> writeln ( '<info>Share table updated successfully.</info>' );
}
2018-06-03 07:32:49 -04:00
if ( ! $table -> hasIndex ( 'parent_index' )) {
$output -> writeln ( '<info>Adding additional parent index to the share table, this can take some time...</info>' );
$table -> addIndex ([ 'parent' ], 'parent_index' );
2022-02-21 12:32:17 -05:00
$sqlQueries = $this -> connection -> migrateToSchema ( $schema -> getWrappedSchema (), $dryRun );
if ( $dryRun && $sqlQueries !== null ) {
$output -> writeln ( $sqlQueries );
}
2018-06-03 07:32:49 -04:00
$updated = true ;
$output -> writeln ( '<info>Share table updated successfully.</info>' );
}
2018-10-01 17:59:36 -04:00
2018-11-06 09:20:39 -05:00
if ( ! $table -> hasIndex ( 'owner_index' )) {
2018-10-01 17:59:36 -04:00
$output -> writeln ( '<info>Adding additional owner index to the share table, this can take some time...</info>' );
$table -> addIndex ([ 'uid_owner' ], 'owner_index' );
2022-02-21 12:32:17 -05:00
$sqlQueries = $this -> connection -> migrateToSchema ( $schema -> getWrappedSchema (), $dryRun );
if ( $dryRun && $sqlQueries !== null ) {
$output -> writeln ( $sqlQueries );
}
2018-10-01 17:59:36 -04:00
$updated = true ;
$output -> writeln ( '<info>Share table updated successfully.</info>' );
}
2018-11-06 09:20:39 -05:00
if ( ! $table -> hasIndex ( 'initiator_index' )) {
2018-10-01 17:59:36 -04:00
$output -> writeln ( '<info>Adding additional initiator index to the share table, this can take some time...</info>' );
$table -> addIndex ([ 'uid_initiator' ], 'initiator_index' );
2022-02-21 12:32:17 -05:00
$sqlQueries = $this -> connection -> migrateToSchema ( $schema -> getWrappedSchema (), $dryRun );
if ( $dryRun && $sqlQueries !== null ) {
$output -> writeln ( $sqlQueries );
}
2018-10-01 17:59:36 -04:00
$updated = true ;
$output -> writeln ( '<info>Share table updated successfully.</info>' );
}
2017-12-14 10:37:11 -05:00
}
2018-12-21 07:02:25 -05:00
$output -> writeln ( '<info>Check indices of the filecache table.</info>' );
2018-07-19 11:30:41 -04:00
if ( $schema -> hasTable ( 'filecache' )) {
$table = $schema -> getTable ( 'filecache' );
if ( ! $table -> hasIndex ( 'fs_mtime' )) {
$output -> writeln ( '<info>Adding additional mtime index to the filecache table, this can take some time...</info>' );
$table -> addIndex ([ 'mtime' ], 'fs_mtime' );
2022-02-21 12:32:17 -05:00
$sqlQueries = $this -> connection -> migrateToSchema ( $schema -> getWrappedSchema (), $dryRun );
if ( $dryRun && $sqlQueries !== null ) {
$output -> writeln ( $sqlQueries );
}
2018-07-19 11:30:41 -04:00
$updated = true ;
$output -> writeln ( '<info>Filecache table updated successfully.</info>' );
}
2020-09-22 09:15:34 -04:00
if ( ! $table -> hasIndex ( 'fs_size' )) {
$output -> writeln ( '<info>Adding additional size index to the filecache table, this can take some time...</info>' );
$table -> addIndex ([ 'size' ], 'fs_size' );
2022-02-21 12:32:17 -05:00
$sqlQueries = $this -> connection -> migrateToSchema ( $schema -> getWrappedSchema (), $dryRun );
if ( $dryRun && $sqlQueries !== null ) {
$output -> writeln ( $sqlQueries );
}
2020-09-22 09:15:34 -04:00
$updated = true ;
$output -> writeln ( '<info>Filecache table updated successfully.</info>' );
}
2021-10-07 10:11:49 -04:00
if ( ! $table -> hasIndex ( 'fs_id_storage_size' )) {
$output -> writeln ( '<info>Adding additional size index to the filecache table, this can take some time...</info>' );
$table -> addIndex ([ 'fileid' , 'storage' , 'size' ], 'fs_id_storage_size' );
2022-02-21 12:32:17 -05:00
$sqlQueries = $this -> connection -> migrateToSchema ( $schema -> getWrappedSchema (), $dryRun );
if ( $dryRun && $sqlQueries !== null ) {
$output -> writeln ( $sqlQueries );
}
2021-10-07 10:11:49 -04:00
$updated = true ;
$output -> writeln ( '<info>Filecache table updated successfully.</info>' );
}
2021-08-26 08:25:17 -04:00
if ( ! $table -> hasIndex ( 'fs_storage_path_prefix' ) && ! $schema -> getDatabasePlatform () instanceof PostgreSQL94Platform ) {
2021-03-11 10:37:23 -05:00
$output -> writeln ( '<info>Adding additional path index to the filecache table, this can take some time...</info>' );
$table -> addIndex ([ 'storage' , 'path' ], 'fs_storage_path_prefix' , [], [ 'lengths' => [ null , 64 ]]);
2022-02-21 12:32:17 -05:00
$sqlQueries = $this -> connection -> migrateToSchema ( $schema -> getWrappedSchema (), $dryRun );
2023-02-15 09:57:44 -05:00
if ( $dryRun && $sqlQueries !== null ) {
$output -> writeln ( $sqlQueries );
}
$updated = true ;
$output -> writeln ( '<info>Filecache table updated successfully.</info>' );
}
if ( ! $table -> hasIndex ( 'fs_parent' )) {
$output -> writeln ( '<info>Adding additional parent index to the filecache table, this can take some time...</info>' );
$table -> addIndex ([ 'parent' ], 'fs_parent' );
$sqlQueries = $this -> connection -> migrateToSchema ( $schema -> getWrappedSchema (), $dryRun );
2022-02-21 12:32:17 -05:00
if ( $dryRun && $sqlQueries !== null ) {
$output -> writeln ( $sqlQueries );
}
2021-03-11 10:37:23 -05:00
$updated = true ;
$output -> writeln ( '<info>Filecache table updated successfully.</info>' );
}
2018-07-19 11:30:41 -04:00
}
2018-12-21 07:02:25 -05:00
$output -> writeln ( '<info>Check indices of the twofactor_providers table.</info>' );
if ( $schema -> hasTable ( 'twofactor_providers' )) {
$table = $schema -> getTable ( 'twofactor_providers' );
if ( ! $table -> hasIndex ( 'twofactor_providers_uid' )) {
$output -> writeln ( '<info>Adding additional twofactor_providers_uid index to the twofactor_providers table, this can take some time...</info>' );
$table -> addIndex ([ 'uid' ], 'twofactor_providers_uid' );
2022-02-21 12:32:17 -05:00
$sqlQueries = $this -> connection -> migrateToSchema ( $schema -> getWrappedSchema (), $dryRun );
if ( $dryRun && $sqlQueries !== null ) {
$output -> writeln ( $sqlQueries );
}
2018-12-21 07:02:25 -05:00
$updated = true ;
$output -> writeln ( '<info>Twofactor_providers table updated successfully.</info>' );
}
}
2019-03-27 06:42:33 -04:00
$output -> writeln ( '<info>Check indices of the login_flow_v2 table.</info>' );
if ( $schema -> hasTable ( 'login_flow_v2' )) {
$table = $schema -> getTable ( 'login_flow_v2' );
if ( ! $table -> hasIndex ( 'poll_token' )) {
$output -> writeln ( '<info>Adding additional indeces to the login_flow_v2 table, this can take some time...</info>' );
foreach ( $table -> getIndexes () as $index ) {
$columns = $index -> getColumns ();
if ( $columns === [ 'poll_token' ] ||
$columns === [ 'login_token' ] ||
$columns === [ 'timestamp' ]) {
$table -> dropIndex ( $index -> getName ());
}
}
$table -> addUniqueIndex ([ 'poll_token' ], 'poll_token' );
$table -> addUniqueIndex ([ 'login_token' ], 'login_token' );
$table -> addIndex ([ 'timestamp' ], 'timestamp' );
2022-02-21 12:32:17 -05:00
$sqlQueries = $this -> connection -> migrateToSchema ( $schema -> getWrappedSchema (), $dryRun );
if ( $dryRun && $sqlQueries !== null ) {
$output -> writeln ( $sqlQueries );
}
2019-03-27 06:42:33 -04:00
$updated = true ;
$output -> writeln ( '<info>login_flow_v2 table updated successfully.</info>' );
}
}
$output -> writeln ( '<info>Check indices of the whats_new table.</info>' );
if ( $schema -> hasTable ( 'whats_new' )) {
$table = $schema -> getTable ( 'whats_new' );
if ( ! $table -> hasIndex ( 'version' )) {
$output -> writeln ( '<info>Adding version index to the whats_new table, this can take some time...</info>' );
foreach ( $table -> getIndexes () as $index ) {
if ( $index -> getColumns () === [ 'version' ]) {
$table -> dropIndex ( $index -> getName ());
}
}
$table -> addUniqueIndex ([ 'version' ], 'version' );
2022-02-21 12:32:17 -05:00
$sqlQueries = $this -> connection -> migrateToSchema ( $schema -> getWrappedSchema (), $dryRun );
if ( $dryRun && $sqlQueries !== null ) {
$output -> writeln ( $sqlQueries );
}
2019-03-27 06:42:33 -04:00
$updated = true ;
$output -> writeln ( '<info>whats_new table updated successfully.</info>' );
}
}
$output -> writeln ( '<info>Check indices of the cards table.</info>' );
2020-11-27 07:24:33 -05:00
$cardsUpdated = false ;
2019-03-27 06:42:33 -04:00
if ( $schema -> hasTable ( 'cards' )) {
$table = $schema -> getTable ( 'cards' );
2020-11-27 07:24:33 -05:00
if ( $table -> hasIndex ( 'addressbookid_uri_index' )) {
2022-02-16 12:42:14 -05:00
if ( $table -> hasIndex ( 'cards_abiduri' )) {
$table -> dropIndex ( 'addressbookid_uri_index' );
} else {
$output -> writeln ( '<info>Renaming addressbookid_uri_index index to cards_abiduri in the cards table, this can take some time...</info>' );
2020-11-27 07:24:33 -05:00
2022-02-16 12:42:14 -05:00
foreach ( $table -> getIndexes () as $index ) {
if ( $index -> getColumns () === [ 'addressbookid' , 'uri' ]) {
$table -> renameIndex ( 'addressbookid_uri_index' , 'cards_abiduri' );
}
2020-11-27 07:24:33 -05:00
}
}
2022-02-21 12:32:17 -05:00
$sqlQueries = $this -> connection -> migrateToSchema ( $schema -> getWrappedSchema (), $dryRun );
if ( $dryRun && $sqlQueries !== null ) {
$output -> writeln ( $sqlQueries );
}
2020-11-27 07:24:33 -05:00
$cardsUpdated = true ;
}
2019-03-27 07:11:35 -04:00
if ( ! $table -> hasIndex ( 'cards_abid' )) {
$output -> writeln ( '<info>Adding cards_abid index to the cards table, this can take some time...</info>' );
2019-03-27 06:42:33 -04:00
foreach ( $table -> getIndexes () as $index ) {
if ( $index -> getColumns () === [ 'addressbookid' ]) {
$table -> dropIndex ( $index -> getName ());
}
}
2019-03-27 07:11:35 -04:00
$table -> addIndex ([ 'addressbookid' ], 'cards_abid' );
2022-02-21 12:32:17 -05:00
$sqlQueries = $this -> connection -> migrateToSchema ( $schema -> getWrappedSchema (), $dryRun );
if ( $dryRun && $sqlQueries !== null ) {
$output -> writeln ( $sqlQueries );
}
2020-11-27 07:24:33 -05:00
$cardsUpdated = true ;
}
if ( ! $table -> hasIndex ( 'cards_abiduri' )) {
$output -> writeln ( '<info>Adding cards_abiduri index to the cards table, this can take some time...</info>' );
foreach ( $table -> getIndexes () as $index ) {
if ( $index -> getColumns () === [ 'addressbookid' , 'uri' ]) {
$table -> dropIndex ( $index -> getName ());
}
}
$table -> addIndex ([ 'addressbookid' , 'uri' ], 'cards_abiduri' );
2022-02-21 12:32:17 -05:00
$sqlQueries = $this -> connection -> migrateToSchema ( $schema -> getWrappedSchema (), $dryRun );
if ( $dryRun && $sqlQueries !== null ) {
$output -> writeln ( $sqlQueries );
}
2020-11-27 07:24:33 -05:00
$cardsUpdated = true ;
}
if ( $cardsUpdated ) {
2019-03-27 06:42:33 -04:00
$updated = true ;
$output -> writeln ( '<info>cards table updated successfully.</info>' );
}
}
$output -> writeln ( '<info>Check indices of the cards_properties table.</info>' );
if ( $schema -> hasTable ( 'cards_properties' )) {
$table = $schema -> getTable ( 'cards_properties' );
2019-03-27 07:11:35 -04:00
if ( ! $table -> hasIndex ( 'cards_prop_abid' )) {
$output -> writeln ( '<info>Adding cards_prop_abid index to the cards_properties table, this can take some time...</info>' );
2019-03-27 06:42:33 -04:00
foreach ( $table -> getIndexes () as $index ) {
if ( $index -> getColumns () === [ 'addressbookid' ]) {
$table -> dropIndex ( $index -> getName ());
}
}
2019-03-27 07:11:35 -04:00
$table -> addIndex ([ 'addressbookid' ], 'cards_prop_abid' );
2022-02-21 12:32:17 -05:00
$sqlQueries = $this -> connection -> migrateToSchema ( $schema -> getWrappedSchema (), $dryRun );
if ( $dryRun && $sqlQueries !== null ) {
$output -> writeln ( $sqlQueries );
}
2019-03-27 06:42:33 -04:00
$updated = true ;
$output -> writeln ( '<info>cards_properties table updated successfully.</info>' );
}
}
2019-10-06 09:04:27 -04:00
$output -> writeln ( '<info>Check indices of the calendarobjects_props table.</info>' );
if ( $schema -> hasTable ( 'calendarobjects_props' )) {
$table = $schema -> getTable ( 'calendarobjects_props' );
if ( ! $table -> hasIndex ( 'calendarobject_calid_index' )) {
$output -> writeln ( '<info>Adding calendarobject_calid_index index to the calendarobjects_props table, this can take some time...</info>' );
$table -> addIndex ([ 'calendarid' , 'calendartype' ], 'calendarobject_calid_index' );
2022-02-21 12:32:17 -05:00
$sqlQueries = $this -> connection -> migrateToSchema ( $schema -> getWrappedSchema (), $dryRun );
if ( $dryRun && $sqlQueries !== null ) {
$output -> writeln ( $sqlQueries );
}
2019-10-06 09:04:27 -04:00
$updated = true ;
$output -> writeln ( '<info>calendarobjects_props table updated successfully.</info>' );
}
}
2019-10-07 08:39:27 -04:00
$output -> writeln ( '<info>Check indices of the schedulingobjects table.</info>' );
if ( $schema -> hasTable ( 'schedulingobjects' )) {
$table = $schema -> getTable ( 'schedulingobjects' );
if ( ! $table -> hasIndex ( 'schedulobj_principuri_index' )) {
$output -> writeln ( '<info>Adding schedulobj_principuri_index index to the schedulingobjects table, this can take some time...</info>' );
$table -> addIndex ([ 'principaluri' ], 'schedulobj_principuri_index' );
2022-02-21 12:32:17 -05:00
$sqlQueries = $this -> connection -> migrateToSchema ( $schema -> getWrappedSchema (), $dryRun );
if ( $dryRun && $sqlQueries !== null ) {
$output -> writeln ( $sqlQueries );
}
2019-10-07 08:39:27 -04:00
$updated = true ;
$output -> writeln ( '<info>schedulingobjects table updated successfully.</info>' );
}
}
2020-04-29 18:13:13 -04:00
$output -> writeln ( '<info>Check indices of the oc_properties table.</info>' );
if ( $schema -> hasTable ( 'properties' )) {
$table = $schema -> getTable ( 'properties' );
2021-12-23 05:34:51 -05:00
$propertiesUpdated = false ;
2020-04-29 18:13:13 -04:00
if ( ! $table -> hasIndex ( 'properties_path_index' )) {
$output -> writeln ( '<info>Adding properties_path_index index to the oc_properties table, this can take some time...</info>' );
$table -> addIndex ([ 'userid' , 'propertypath' ], 'properties_path_index' );
2022-02-21 12:32:17 -05:00
$sqlQueries = $this -> connection -> migrateToSchema ( $schema -> getWrappedSchema (), $dryRun );
if ( $dryRun && $sqlQueries !== null ) {
$output -> writeln ( $sqlQueries );
}
2021-12-23 05:34:51 -05:00
$propertiesUpdated = true ;
}
if ( ! $table -> hasIndex ( 'properties_pathonly_index' )) {
$output -> writeln ( '<info>Adding properties_pathonly_index index to the oc_properties table, this can take some time...</info>' );
$table -> addIndex ([ 'propertypath' ], 'properties_pathonly_index' );
2022-02-21 12:32:17 -05:00
$sqlQueries = $this -> connection -> migrateToSchema ( $schema -> getWrappedSchema (), $dryRun );
if ( $dryRun && $sqlQueries !== null ) {
$output -> writeln ( $sqlQueries );
}
2021-12-23 05:34:51 -05:00
$propertiesUpdated = true ;
}
if ( $propertiesUpdated ) {
2020-04-29 18:13:13 -04:00
$updated = true ;
$output -> writeln ( '<info>oc_properties table updated successfully.</info>' );
}
}
2021-12-01 17:57:40 -05:00
$output -> writeln ( '<info>Check indices of the oc_jobs table.</info>' );
if ( $schema -> hasTable ( 'jobs' )) {
$table = $schema -> getTable ( 'jobs' );
if ( ! $table -> hasIndex ( 'job_lastcheck_reserved' )) {
$output -> writeln ( '<info>Adding job_lastcheck_reserved index to the oc_jobs table, this can take some time...</info>' );
$table -> addIndex ([ 'last_checked' , 'reserved_at' ], 'job_lastcheck_reserved' );
2022-02-21 12:32:17 -05:00
$sqlQueries = $this -> connection -> migrateToSchema ( $schema -> getWrappedSchema (), $dryRun );
if ( $dryRun && $sqlQueries !== null ) {
$output -> writeln ( $sqlQueries );
}
2021-12-01 17:57:40 -05:00
$updated = true ;
$output -> writeln ( '<info>oc_properties table updated successfully.</info>' );
}
}
2022-02-07 03:25:27 -05:00
$output -> writeln ( '<info>Check indices of the oc_direct_edit table.</info>' );
if ( $schema -> hasTable ( 'direct_edit' )) {
$table = $schema -> getTable ( 'direct_edit' );
if ( ! $table -> hasIndex ( 'direct_edit_timestamp' )) {
$output -> writeln ( '<info>Adding direct_edit_timestamp index to the oc_direct_edit table, this can take some time...</info>' );
$table -> addIndex ([ 'timestamp' ], 'direct_edit_timestamp' );
2022-02-21 12:32:17 -05:00
$sqlQueries = $this -> connection -> migrateToSchema ( $schema -> getWrappedSchema (), $dryRun );
if ( $dryRun && $sqlQueries !== null ) {
$output -> writeln ( $sqlQueries );
}
2022-02-07 03:25:27 -05:00
$updated = true ;
$output -> writeln ( '<info>oc_direct_edit table updated successfully.</info>' );
}
}
2022-02-07 03:55:39 -05:00
$output -> writeln ( '<info>Check indices of the oc_preferences table.</info>' );
if ( $schema -> hasTable ( 'preferences' )) {
$table = $schema -> getTable ( 'preferences' );
if ( ! $table -> hasIndex ( 'preferences_app_key' )) {
$output -> writeln ( '<info>Adding preferences_app_key index to the oc_preferences table, this can take some time...</info>' );
$table -> addIndex ([ 'appid' , 'configkey' ], 'preferences_app_key' );
$this -> connection -> migrateToSchema ( $schema -> getWrappedSchema ());
$updated = true ;
$output -> writeln ( '<info>oc_properties table updated successfully.</info>' );
}
}
2022-07-29 08:43:26 -04:00
$output -> writeln ( '<info>Check indices of the oc_mounts table.</info>' );
if ( $schema -> hasTable ( 'mounts' )) {
$table = $schema -> getTable ( 'mounts' );
if ( ! $table -> hasIndex ( 'mounts_class_index' )) {
$output -> writeln ( '<info>Adding mounts_class_index index to the oc_mounts table, this can take some time...</info>' );
$table -> addIndex ([ 'mount_provider_class' ], 'mounts_class_index' );
$this -> connection -> migrateToSchema ( $schema -> getWrappedSchema ());
$updated = true ;
$output -> writeln ( '<info>oc_mounts table updated successfully.</info>' );
}
2023-04-13 11:19:26 -04:00
if ( ! $table -> hasIndex ( 'mounts_user_root_path_index' )) {
$output -> writeln ( '<info>Adding mounts_user_root_path_index index to the oc_mounts table, this can take some time...</info>' );
$table -> addIndex ([ 'user_id' , 'root_id' , 'mount_point' ], 'mounts_user_root_path_index' , [], [ 'lengths' => [ null , null , 128 ]]);
$this -> connection -> migrateToSchema ( $schema -> getWrappedSchema ());
$updated = true ;
$output -> writeln ( '<info>oc_mounts table updated successfully.</info>' );
}
2022-07-29 08:43:26 -04:00
}
2023-06-21 09:10:06 -04:00
$output -> writeln ( '<info>Check indices of the oc_systemtag_object_mapping table.</info>' );
2023-07-13 17:34:39 -04:00
if ( $schema -> hasTable ( 'systemtag_object_mapping' )) {
$table = $schema -> getTable ( 'systemtag_object_mapping' );
2023-06-21 09:10:06 -04:00
if ( ! $table -> hasIndex ( 'systag_by_tagid' )) {
$output -> writeln ( '<info>Adding systag_by_tagid index to the oc_systemtag_object_mapping table, this can take some time...</info>' );
$table -> addIndex ([ 'systemtagid' , 'objecttype' ], 'systag_by_tagid' );
$this -> connection -> migrateToSchema ( $schema -> getWrappedSchema ());
$updated = true ;
$output -> writeln ( '<info>oc_systemtag_object_mapping table updated successfully.</info>' );
}
}
2017-12-14 10:37:11 -05:00
if ( ! $updated ) {
2017-12-15 04:45:00 -05:00
$output -> writeln ( '<info>Done.</info>' );
2017-12-14 10:37:11 -05:00
}
}
}