protected function execute(InputInterface $input, OutputInterface $output) { $logger = $this->getService('logger'); $metadata_file = $input->getOption('metadata-file'); $diff_opts = $this->getDiffOptions($input); if (!is_readable($metadata_file)) { $logger->error("Unable to access metadata file {$metadata_file}."); $output->writeln(''); $output->writeln("Use \"{$this->getProgramName()} metadata:dump\" first to dump the current table state."); return ExitCode::EXIT_METADATA_NOT_FOUND; } try { $meta = new Metadata($logger, $this->getService('sugarcrm.pdo'), $metadata_file); $base = $meta->loadFromDb(); $new = $meta->loadFromFile(); $diff_res = $meta->diff($base, $new, $diff_opts['mode'], $diff_opts['fields']); $logger->info("Fields metadata loaded from {$metadata_file}."); if ($input->getOption('sql')) { $output->writeln($meta->generateSqlQueries($diff_res)); } if ($input->getOption('force')) { $meta->executeQueries($diff_res); $output->writeln('DB updated successfuly.'); } else { $output->writeln('No action done. Use --force to execute the queries.'); } } catch (SugarException $e) { $logger->error('An error occured while loading the metadata.'); $logger->error($e->getMessage()); return ExitCode::EXIT_UNKNOWN_SUGAR_ERROR; } }
public function testRealDb() { $meta = new Metadata(new NullLogger(), $this->getPdo()); $db = $meta->loadFromDb(); $meta->setDefFile(__DIR__ . '/metadata/metadata_base.yaml'); $base = $meta->loadFromFile(); $this->assertEquals($base, $db); $meta->setDefFile(__DIR__ . '/metadata/metadata_new.yaml'); $new = $meta->loadFromFile(); $diff = $meta->diff($base, $new); $meta->executeQueries($diff); $expected = new \PHPUnit_Extensions_Database_DataSet_YamlDataSet(__DIR__ . '/metadata/db_new_dataset.yaml'); $queryTable = $this->getConnection()->createQueryTable('fields_meta_data', 'SELECT * FROM fields_meta_data ORDER BY BINARY id ASC'); $this->assertTablesEqual($expected->getTable('fields_meta_data'), $queryTable); }