Yaffs site version 1.1
[yaffs-website] / vendor / drupal / console / src / Command / Database / QueryCommand.php
1 <?php
2
3 /**
4  * @file
5  * Contains \Drupal\Console\Command\Database\QueryCommand.
6  *
7  *
8  * @TODO:
9  *         - mysql -H option for html
10  *         - mysql -X option for xml
11  */
12
13 namespace Drupal\Console\Command\Database;
14
15 use Symfony\Component\Console\Input\InputArgument;
16 use Symfony\Component\Console\Input\InputInterface;
17 use Symfony\Component\Console\Input\InputOption;
18 use Symfony\Component\Console\Output\OutputInterface;
19 use Symfony\Component\Process\ProcessBuilder;
20 use Symfony\Component\Console\Command\Command;
21 use Drupal\Console\Core\Command\Shared\CommandTrait;
22 use Drupal\Console\Command\Shared\ConnectTrait;
23 use Drupal\Console\Core\Style\DrupalStyle;
24
25 class QueryCommand extends Command
26 {
27     use ConnectTrait;
28     use CommandTrait;
29
30     /**
31      * {@inheritdoc}
32      */
33     protected function configure()
34     {
35         $this
36             ->setName('database:query')
37             ->setDescription($this->trans('commands.database.query.description'))
38             ->addArgument(
39                 'query',
40                 InputArgument::REQUIRED,
41                 $this->trans('commands.database.query.arguments.query')
42             )
43             ->addArgument(
44                 'database',
45                 InputArgument::OPTIONAL,
46                 $this->trans('commands.database.query.arguments.database'),
47                 'default'
48             )
49             ->addOption('quick', null, InputOption::VALUE_NONE, $this->trans('commands.database.query.options.quick'))
50             ->addOption('debug', null, InputOption::VALUE_NONE, $this->trans('commands.database.query.options.debug'))
51             ->addOption('html', null, InputOption::VALUE_NONE, $this->trans('commands.database.query.options.html'))
52             ->addOption('xml', null, InputOption::VALUE_NONE, $this->trans('commands.database.query.options.xml'))
53             ->addOption('raw', null, InputOption::VALUE_NONE, $this->trans('commands.database.query.options.raw'))
54             ->addOption('vertical', null, InputOption::VALUE_NONE, $this->trans('commands.database.query.options.vertical'))
55             ->addOption('batch', null, InputOption::VALUE_NONE, $this->trans('commands.database.query.options.batch'))
56
57             ->setHelp($this->trans('commands.database.query.help'));
58     }
59
60     /**
61      * {@inheritdoc}
62      */
63     protected function execute(InputInterface $input, OutputInterface $output)
64     {
65         $io = new DrupalStyle($input, $output);
66
67         $query = $input->getArgument('query');
68         $database = $input->getArgument('database');
69         $learning = $input->getOption('learning');
70
71         $databaseConnection = $this->resolveConnection($io, $database);
72
73         $connection = sprintf(
74             '%s -A --database=%s --user=%s --password=%s --host=%s --port=%s',
75             $databaseConnection['driver'],
76             $databaseConnection['database'],
77             $databaseConnection['username'],
78             $databaseConnection['password'],
79             $databaseConnection['host'],
80             $databaseConnection['port']
81         );
82
83         $args = explode(' ', $connection);
84         $args[] = sprintf('--execute=%s', $query);
85
86         $opts = ["quick", "debug", "html", "xml", "raw", "vertical", "batch"];
87         array_walk(
88             $opts, function ($opt) use ($input, &$args) {
89                 if ($input->getOption($opt)) {
90                     switch ($opt) {
91                     case "quick":
92                         $args[] = "--quick";
93                         break;
94                     case "debug":
95                         $args[] = "-T";
96                         break;
97                     case "html":
98                         $args[] = "-H";
99                         break;
100                     case "xml":
101                         $args[] = "-X";
102                         break;
103                     case "raw":
104                         $args[] = "--raw";
105                         break;
106                     case "vertical":
107                         $args[] = "-E";
108                         break;
109                     case "batch":
110                         $args[] = "--batch";
111                         break;
112                     }
113                 }
114             }
115         );
116
117         if ($learning) {
118             $io->commentBlock(
119                 implode(" ", $args)
120             );
121         }
122
123         $processBuilder = new ProcessBuilder([]);
124         $processBuilder->setArguments($args);
125         $process = $processBuilder->getProcess();
126         $process->setTty('true');
127         $process->run();
128
129         if (!$process->isSuccessful()) {
130             throw new \RuntimeException($process->getErrorOutput());
131         }
132
133         return 0;
134     }
135 }