Example #1
0
 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;
     }
 }
Example #2
0
 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);
 }
Example #4
0
 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;
     }
 }