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; } }
protected function execute(InputInterface $input, OutputInterface $output) { $logger = $this->getService('logger'); $metadata_file = $input->getOption('metadata-file'); $diff_opts = $this->getDiffOptions($input); try { $meta = new Metadata($logger, $this->getService('sugarcrm.pdo'), $metadata_file); $base = array(); if (is_readable($metadata_file)) { $base = $meta->loadFromFile(); } $new = $meta->loadFromDb(); $diff_res = $meta->diff($base, $new, $diff_opts['mode'], $diff_opts['fields']); $logger->info('Fields metadata loaded from DB.'); $meta->writeFile($diff_res); $output->writeln("Updated file {$metadata_file}."); } catch (SugarException $e) { $logger->error('An error occured while dumping 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); }
protected function execute(InputInterface $input, OutputInterface $output) { $logger = $this->getService('logger'); $metadata_file = $input->getOption('metadata-file'); $style = new OutputFormatterStyle(null, null, array('bold')); $output->getFormatter()->setStyle('b', $style); 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); $dump_fields = $meta->loadFromFile(); $db_fields = $meta->loadFromDb(); $diff = $meta->diff($db_fields, $dump_fields); if (empty($diff[Metadata::ADD]) && empty($diff[Metadata::UPDATE]) && empty($diff[Metadata::DEL])) { $output->writeln('<info>Metadata are synced</info>'); return; } $this->writeAdd($output, $diff[Metadata::ADD]); $this->writeUpdate($output, $diff[Metadata::UPDATE]); $this->writeDel($output, $diff[Metadata::DEL]); if ($input->getOption('quiet') && (!empty($diff[Metadata::ADD]) || !empty($diff[Metadata::DEL]) || !empty($diff[Metadata::UPDATE]))) { return ExitCode::EXIT_STATUS_MODIFICATIONS; } } catch (SugarException $e) { $logger->error('An error occured.'); $logger->error($e->getMessage()); return ExitCode::EXIT_UNKNOWN_SUGAR_ERROR; } }