Drush: lib/Drush/Sql/SqlBase.php Source File

  1. 7.x doxygen/html/SqlBase_8php_source.html
  2. master doxygen/html/SqlBase_8php_source.html
1 <?php
2 
3 namespace Drush\Sql;
4 
5 class SqlBase {
6 
7  // An Drupal style array containing specs for connecting to database.
8  public $db_spec;
9 
10  // Default code appended to sql-query connections.
11  public $query_extra = '';
12 
13  // The way you pass a sql file when issueing a query.
14  public $query_file = '<';
15 
16  /**
17  * Typically, SqlBase objects are contructed via drush_sql_get_class().
18  */
19  public function __construct($db_spec = NULL) {
20  $this->db_spec = $db_spec;
21  }
22 
23  /*
24  * Get the current $db_spec.
25  */
26  public function db_spec() {
27  return $this->db_spec;
28  }
29 
30  /**
31  * The unix command used to connect to the database.
32  * @return string
33  */
34  public function command() {}
35 
36  /**
37  * A string for connecting to a database.
38  *
39  * @param bool $hide_password
40  * If TRUE, DBMS should try to hide password from process list.
41  * On mysql, that means using --defaults-extra-file to supply the user+password.
42  *
43  * @return string
44  */
45  public function connect($hide_password = TRUE) {
46  return trim($this->command() . ' ' . $this->creds($hide_password) . ' ' . drush_get_option('extra', $this->query_extra));
47  }
48 
49 
50  public function dump($file = '') {
51  $table_selection = $this->get_expanded_table_selection();
52  $file = $this->dumpFile($file);
53  list($cmd, $file) = $this->dumpCmd($table_selection, $file);
54  list($cmd, $file) = $this->dumpGzip($cmd, $file);
55  // Avoid the php memory of the $output array in drush_shell_exec().
56  if (!$return = drush_op_system($cmd)) {
57  if ($file) {
58  drush_log(dt('Database dump saved to !path', array('!path' => $file)), 'success');
60  }
61  }
62  else {
63  return drush_set_error('DRUSH_SQL_DUMP_FAIL', 'Database dump failed');
64  }
65  }
66 
67  /*
68  * Build bash for dumping a database.
69  *
70  * @param array $table_selection
71  * Supported keys: 'skip', 'structure', 'tables'.
72  * @param file
73  * Destination for the dump file.
74  * @return array
75  * A two item indexed array.
76  * 1. A mysqldump/pg_dump/sqlite3/etc statement that is ready for executing.
77  * 2. The filepath where the dump will be saved.
78  */
79  public function dumpCmd($table_selection, $file) {}
80 
81  public function dumpFile($file) {
82  $database = $this->db_spec['database'];
83 
84  // $file is passed in to us usually via --result-file. If the user
85  // has set $options['result-file'] = TRUE, then we
86  // will generate an SQL dump file in the same backup
87  // directory that pm-updatecode uses.
88  if ($file) {
89  if ($file === TRUE) {
90  // User did not pass a specific value for --result-file. Make one.
91  $backup = drush_include_engine('version_control', 'backup');
92  $backup_dir = $backup->prepare_backup_dir($database);
93  if (empty($backup_dir)) {
94  $backup_dir = drush_find_tmp();
95  }
96  $file = $backup_dir . '/@DATABASE_@DATE.sql';
97  }
98  $file = str_replace(array('@DATABASE', '@DATE'), array($database, gmdate('Ymd_His')), $file);
99  }
100  return $file;
101  }
102 
103  /*
104  * Bash which gzips dump file if specified.
105  *
106  * @param string $file
107  *
108  * @return array
109  */
110  function dumpGzip($cmd, $file) {
111  $suffix = '';
112  if (drush_get_option('gzip')) {
113  if ($file) {
114  $escfile = drush_escapeshellarg($file);
115  if (drush_get_context('DRUSH_AFFIRMATIVE')) {
116  // Gzip the result-file without Gzip confirmation
117  $suffix = " && gzip -f $escfile";
118  $file .= '.gz';
119  }
120  else {
121  // Gzip the result-file
122  $suffix = " && gzip $escfile";
123  $file .= '.gz';
124  }
125  }
126  else {
127  // gzip via pipe since user has not specified a file.
128  $suffix = "| gzip";
129  }
130  }
131  return array($cmd . $suffix, $file);
132  }
133 
134  /**
135  * Execute a SQL query.
136  *
137  * Note: This is an API function. Try to avoid using drush_get_option() and instead
138  * get params passed in.
139  *
140  * @param string $query
141  * The SQL to be executed. Should be NULL if $file is provided.
142  * @param string $input_file
143  * A path to a file containing the SQL to be executed.
144  * @param bool $silent
145  * Don't print query results to screen.
146  * @param string $result_file
147  * A path to save query results to.
148  */
149  public function query($query, $input_file = NULL, $silent = TRUE, $result_file = '') {
150  $input_file_original = $input_file;
151  if ($input_file && drush_file_is_tarball($input_file)) {
152  if (drush_shell_exec('gunzip %s', $input_file)) {
153  $input_file = trim($input_file, '.gz');
154  }
155  else {
156  return drush_set_error(dt('Failed to gunzip input file.'));
157  }
158  }
159 
160  // Save $query to a tmp file if needed. We will redirect it in.
161  if (!$input_file) {
162  $query = $this->query_prefix($query);
163  $query = $this->query_format($query);
164  $input_file = drush_save_data_to_temp_file($query);
165  }
166 
167  $parts = array(
168  $this->command(),
169  $this->creds(),
170  $this->silent(),
171  drush_get_option('extra', $this->query_extra),
172  $this->query_file,
173  drush_escapeshellarg($input_file),
174  );
175  $exec = implode(' ', $parts);
176 
177  if ($result_file) {
178  $exec .= ' > '. drush_escapeshellarg($result_file);
179  }
180 
181  // In --verbose mode, drush_shell_exec() will show the call to mysql/psql/sqlite,
182  // but the sql query itself is stored in a temp file and not displayed.
183  // We show the query when --debug is used and this function created the temp file.
184  if ((drush_get_context('DRUSH_DEBUG') || drush_get_context('DRUSH_SIMULATE')) && empty($input_file_original)) {
185  drush_log('sql-query: ' . $query, 'status');
186  }
187 
188  $success = drush_shell_exec($exec);
189 
190  if ($success && drush_get_option('file-delete')) {
191  drush_op('drush_delete_dir', $input_file);
192  }
193 
194  return $success;
195  }
196 
197  /*
198  * A string to add to the command when queries should not print their results.
199  */
200  public function silent() {}
201 
202  public function query_prefix($query) {
203  // Inject table prefixes as needed.
205  // Enable prefix processing which can be dangerous so off by default. See http://drupal.org/node/1219850.
206  if (drush_get_option('db-prefix')) {
207  if (drush_drupal_major_version() >= 7) {
208  $query = Database::getConnection()->prefixTables($query);
209  }
210  else {
211  $query = db_prefix_tables($query);
212  }
213  }
214  }
215  return $query;
216  }
217 
218 
219  public function query_format($query) {
220  return $query;
221  }
222 
223  public function drop($tables) {
224  if ($tables) {
225  $sql = 'DROP TABLE '. implode(', ', $tables);
226  return $this->query($sql);
227  }
228  }
229 
230  /**
231  * Build a SQL string for dropping and creating a database.
232  *
233  * @param string dbname
234  * The database name.
235  * @param boolean $quoted
236  * Quote the database name. Mysql uses backticks to quote which can cause problems
237  * in a Windows shell. Set TRUE if the CREATE is not running on the bash command line.
238  */
239  public function createdb_sql($dbname, $quoted = FALSE) {}
240 
241  /**
242  * Create a new database.
243  *
244  * @param boolean $quoted
245  * Quote the database name. Mysql uses backticks to quote which can cause problems
246  * in a Windows shell. Set TRUE if the CREATE is not running on the bash command line.
247  */
248  public function createdb($quoted = FALSE) {
249  $dbname = $this->db_spec['database'];
250  $sql = $this->createdb_sql($dbname);
251  // Adjust connection to allow for superuser creds if provided.
252  $this->su();
253  return $this->query($sql);
254  }
255 
256  /**
257  * Drop all tables (if DB exists) or CREATE target database.
258  *
259  * return boolean
260  * TRUE or FALSE depending on success.
261  */
262  public function drop_or_create() {
263  if ($this->db_exists()) {
264  $this->drop($this->listTables());
265  }
266  else {
267  $this->createdb();
268  }
269  }
270 
271  /*
272  * Determine if the specified DB already exists.
273  *
274  * @return bool
275  */
276  public function db_exists() {}
277 
278  public function delete() {}
279 
280  /**
281  * Build a fragment connection parameters.
282  *
283  * @param bool $hide_password
284  * If TRUE, DBMS should try to hide password from process list.
285  * On mysql, that means using --defaults-extra-file to supply the user+password.
286  * @return string
287  */
288  public function creds($hide_password = TRUE) {}
289 
290  /**
291  * The active database driver.
292  * @return string
293  */
294  public function scheme() {
295  return $this->db_spec['driver'];
296  }
297 
298  /**
299  * Get a list of all table names and expand input that may contain
300  * wildcards (`*`) if necessary so that the array returned only contains valid
301  * table names i.e. actual tables that exist, without a wildcard.
302  *
303  * @return array
304  * An array of tables with each table name in the appropriate
305  * element of the array.
306  */
307  public function get_expanded_table_selection() {
308  $table_selection = drush_sql_get_table_selection();
309  // Get the existing table names in the specified database.
310  $db_tables = $this->listTables();
311  if (isset($table_selection['skip'])) {
312  $table_selection['skip'] = _drush_sql_expand_and_filter_tables($table_selection['skip'], $db_tables);
313  }
314  if (isset($table_selection['structure'])) {
315  $table_selection['structure'] = _drush_sql_expand_and_filter_tables($table_selection['structure'], $db_tables);
316  }
317  if (isset($table_selection['tables'])) {
318  $table_selection['tables'] = _drush_sql_expand_and_filter_tables($table_selection['tables'], $db_tables);
319  }
320  return $table_selection;
321  }
322 
323  /**
324  * Extract the name of all existing tables in the given database.
325  *
326  * @return array
327  * An array of table names which exist in the current database.
328  */
329  public function listTables() {}
330 
331  /*
332  * Helper method to turn associative array into options with values.
333  *
334  * @return string
335  * A bash fragment.
336  */
337  public function params_to_options($parameters) {
338  // Turn each parameter into a valid parameter string.
339  $parameter_strings = array();
340  foreach ($parameters as $key => $value) {
341  // Only escape the values, not the keys or the rest of the string.
342  $value = drush_escapeshellarg($value);
343  $parameter_strings[] = "--$key=$value";
344  }
345 
346  // Join the parameters and return.
347  return implode(' ', $parameter_strings);
348  }
349 
350  /**
351  * Adjust DB connection with superuser credentials if provided.
352  *
353  * The options 'db-su' and 'db-su-pw' will be retreived from the
354  * specified site alias record, if it exists and contains those items.
355  * If it does not, they will be fetched via drush_get_option.
356  *
357  * Note that in the context of sql-sync, the site alias record will
358  * be taken from the target alias (e.g. `drush sql-sync @source @target`),
359  * which will be overlayed with any options that begin with 'target-';
360  * therefore, the commandline options 'target-db-su' and 'target-db-su-pw'
361  * may also affect the operation of this function.
362  *
363  * @return null
364  */
365  public function su() {
366  $create_db_target = $this->db_spec;
367 
368  $create_db_target['database'] = '';
369  $db_superuser = drush_get_option('db-su');
370  if (isset($db_superuser)) {
371  $create_db_target['username'] = $db_superuser;
372  }
373  $db_su_pw = drush_get_option('db-su-pw');
374  // If --db-su-pw is not provided and --db-su is, default to empty password.
375  // This way db cli command will take password from .my.cnf or .pgpass.
376  if (!empty($db_su_pw)) {
377  $create_db_target['password'] = $db_su_pw;
378  }
379  elseif (isset($db_superuser)) {
380  unset($create_db_target['password']);
381  }
382  $this->db_spec = $create_db_target;
383  }
384 }

File

doxygen/html/SqlBase_8php_source.html
View source
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<title>Drush: lib/Drush/Sql/SqlBase.php Source File</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/search.js"></script>
<script type="text/javascript">
  $(document).ready(function() { searchBox.OnSelectItem(0); });
</script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
 <tbody>
 <tr style="height: 56px;">
  <td style="padding-left: 0.5em;">
   <div id="projectname">Drush
   </div>
  </td>
 </tr>
 </tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.1.2 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search",false,'Search');
</script>
  <div id="navrow1" class="tabs">
    <ul class="tablist">
      <li><a href="index.html"><span>Main&#160;Page</span></a></li>
      <li><a href="pages.html"><span>Related&#160;Pages</span></a></li>
      <li><a href="modules.html"><span>Modules</span></a></li>
      <li><a href="annotated.html"><span>Classes</span></a></li>
      <li class="current"><a href="files.html"><span>Files</span></a></li>
      <li>
        <div id="MSearchBox" class="MSearchBoxInactive">
        <span class="left">
          <img id="MSearchSelect" src="search/mag_sel.png"
               onmouseover="return searchBox.OnSearchSelectShow()"
               onmouseout="return searchBox.OnSearchSelectHide()"
               alt=""/>
          <input type="text" id="MSearchField" value="Search" accesskey="S"
               onfocus="searchBox.OnSearchFieldFocus(true)" 
               onblur="searchBox.OnSearchFieldFocus(false)" 
               onkeyup="searchBox.OnSearchFieldChange(event)"/>
          </span><span class="right">
            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
          </span>
        </div>
      </li>
    </ul>
  </div>
  <div id="navrow2" class="tabs2">
    <ul class="tablist">
      <li><a href="files.html"><span>File&#160;List</span></a></li>
      <li><a href="globals.html"><span>File&#160;Members</span></a></li>
    </ul>
  </div>
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
     onmouseover="return searchBox.OnSearchSelectShow()"
     onmouseout="return searchBox.OnSearchSelectHide()"
     onkeydown="return searchBox.OnSearchSelectKey(event)">
<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark">&#160;</span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark">&#160;</span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark">&#160;</span>Files</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark">&#160;</span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark">&#160;</span>Variables</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(5)"><span class="SelectionMark">&#160;</span>Groups</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(6)"><span class="SelectionMark">&#160;</span>Pages</a></div>

<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0" 
        name="MSearchResults" id="MSearchResults">
</iframe>
</div>

<div id="nav-path" class="navpath">
  <ul>
<li class="navelem"><a class="el" href="dir_97aefd0d527b934f1d99a682da8fe6a9.html">lib</a></li><li class="navelem"><a class="el" href="dir_7b370e47d51b6becf2e7a17c4b4a6c45.html">Drush</a></li><li class="navelem"><a class="el" href="dir_ab5a934f6f39e187629835dadebb7e6d.html">Sql</a></li>  </ul>
</div>
</div><!-- top -->
<div class="header">
  <div class="headertitle">
<div class="title">SqlBase.php</div>  </div>
</div><!--header-->
<div class="contents">
<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span>&#160;&lt;?php</div>
<div class="line"><a name="l00002"></a><span class="lineno">    2</span>&#160;</div>
<div class="line"><a name="l00003"></a><span class="lineno">    3</span>&#160;<span class="keyword">namespace </span>Drush\Sql;</div>
<div class="line"><a name="l00004"></a><span class="lineno">    4</span>&#160;</div>
<div class="line"><a name="l00005"></a><span class="lineno"><a class="code" href="classDrush_1_1Sql_1_1SqlBase.html">    5</a></span>&#160;<span class="keyword">class </span><a class="code" href="classDrush_1_1Sql_1_1SqlBase.html">SqlBase</a> {</div>
<div class="line"><a name="l00006"></a><span class="lineno">    6</span>&#160;</div>
<div class="line"><a name="l00007"></a><span class="lineno">    7</span>&#160;  <span class="comment">// An Drupal style array containing specs for connecting to database.</span></div>
<div class="line"><a name="l00008"></a><span class="lineno">    8</span>&#160;  <span class="keyword">public</span> $db_spec;</div>
<div class="line"><a name="l00009"></a><span class="lineno">    9</span>&#160;</div>
<div class="line"><a name="l00010"></a><span class="lineno">   10</span>&#160;  <span class="comment">// Default code appended to sql-query connections.</span></div>
<div class="line"><a name="l00011"></a><span class="lineno">   11</span>&#160;  <span class="keyword">public</span> $query_extra = <span class="stringliteral">&#39;&#39;</span>;</div>
<div class="line"><a name="l00012"></a><span class="lineno">   12</span>&#160;</div>
<div class="line"><a name="l00013"></a><span class="lineno">   13</span>&#160;  <span class="comment">// The way you pass a sql file when issueing a query.</span></div>
<div class="line"><a name="l00014"></a><span class="lineno">   14</span>&#160;  <span class="keyword">public</span> $query_file = <span class="charliteral">&#39;&lt;&#39;</span>;</div>
<div class="line"><a name="l00015"></a><span class="lineno">   15</span>&#160;<span class="comment"></span></div>
<div class="line"><a name="l00016"></a><span class="lineno">   16</span>&#160;<span class="comment">  /**</span></div>
<div class="line"><a name="l00017"></a><span class="lineno">   17</span>&#160;<span class="comment">   * Typically, SqlBase objects are contructed via drush_sql_get_class().</span></div>
<div class="line"><a name="l00018"></a><span class="lineno">   18</span>&#160;<span class="comment">   */</span></div>
<div class="line"><a name="l00019"></a><span class="lineno"><a class="code" href="classDrush_1_1Sql_1_1SqlBase.html#a1cc13b953fd93a39669e536ba2929f9a">   19</a></span>&#160;  <span class="keyword">public</span> <span class="keyword">function</span> <a class="code" href="classDrush_1_1Sql_1_1SqlBase.html#a1cc13b953fd93a39669e536ba2929f9a">__construct</a>($db_spec = NULL) {</div>
<div class="line"><a name="l00020"></a><span class="lineno">   20</span>&#160;    $this-&gt;db_spec = $db_spec;</div>
<div class="line"><a name="l00021"></a><span class="lineno">   21</span>&#160;  }</div>
<div class="line"><a name="l00022"></a><span class="lineno">   22</span>&#160;</div>
<div class="line"><a name="l00023"></a><span class="lineno">   23</span>&#160;  <span class="comment">/*</span></div>
<div class="line"><a name="l00024"></a><span class="lineno">   24</span>&#160;<span class="comment">   * Get the current $db_spec.</span></div>
<div class="line"><a name="l00025"></a><span class="lineno">   25</span>&#160;<span class="comment">   */</span></div>
<div class="line"><a name="l00026"></a><span class="lineno">   26</span>&#160;  <span class="keyword">public</span> <span class="keyword">function</span> db_spec() {</div>
<div class="line"><a name="l00027"></a><span class="lineno">   27</span>&#160;    <span class="keywordflow">return</span> $this-&gt;db_spec;</div>
<div class="line"><a name="l00028"></a><span class="lineno">   28</span>&#160;  }</div>
<div class="line"><a name="l00029"></a><span class="lineno">   29</span>&#160;<span class="comment"></span></div>
<div class="line"><a name="l00030"></a><span class="lineno">   30</span>&#160;<span class="comment">  /**</span></div>
<div class="line"><a name="l00031"></a><span class="lineno">   31</span>&#160;<span class="comment">   * The unix command used to connect to the database.</span></div>
<div class="line"><a name="l00032"></a><span class="lineno">   32</span>&#160;<span class="comment">   * @return string</span></div>
<div class="line"><a name="l00033"></a><span class="lineno">   33</span>&#160;<span class="comment">   */</span></div>
<div class="line"><a name="l00034"></a><span class="lineno"><a class="code" href="classDrush_1_1Sql_1_1SqlBase.html#ac29907915d00435d999c4fe5fd611815">   34</a></span>&#160;  <span class="keyword">public</span> <span class="keyword">function</span> <a class="code" href="classDrush_1_1Sql_1_1SqlBase.html#ac29907915d00435d999c4fe5fd611815">command</a>() {}</div>
<div class="line"><a name="l00035"></a><span class="lineno">   35</span>&#160;<span class="comment"></span></div>
<div class="line"><a name="l00036"></a><span class="lineno">   36</span>&#160;<span class="comment">  /**</span></div>
<div class="line"><a name="l00037"></a><span class="lineno">   37</span>&#160;<span class="comment">   * A string for connecting to a database.</span></div>
<div class="line"><a name="l00038"></a><span class="lineno">   38</span>&#160;<span class="comment">   *</span></div>
<div class="line"><a name="l00039"></a><span class="lineno">   39</span>&#160;<span class="comment">   * @param bool $hide_password</span></div>
<div class="line"><a name="l00040"></a><span class="lineno">   40</span>&#160;<span class="comment">   *  If TRUE, DBMS should try to hide password from process list.</span></div>
<div class="line"><a name="l00041"></a><span class="lineno">   41</span>&#160;<span class="comment">   *  On mysql, that means using --defaults-extra-file to supply the user+password.</span></div>
<div class="line"><a name="l00042"></a><span class="lineno">   42</span>&#160;<span class="comment">   *</span></div>
<div class="line"><a name="l00043"></a><span class="lineno">   43</span>&#160;<span class="comment">   * @return string</span></div>
<div class="line"><a name="l00044"></a><span class="lineno">   44</span>&#160;<span class="comment">   */</span></div>
<div class="line"><a name="l00045"></a><span class="lineno"><a class="code" href="classDrush_1_1Sql_1_1SqlBase.html#aa5b21b27ff4dca05535fdbac5d0c603d">   45</a></span>&#160;  <span class="keyword">public</span> <span class="keyword">function</span> <a class="code" href="classDrush_1_1Sql_1_1SqlBase.html#aa5b21b27ff4dca05535fdbac5d0c603d">connect</a>($hide_password = TRUE) {</div>
<div class="line"><a name="l00046"></a><span class="lineno">   46</span>&#160;    <span class="keywordflow">return</span> trim($this-&gt;<a class="code" href="classDrush_1_1Sql_1_1SqlBase.html#ac29907915d00435d999c4fe5fd611815">command</a>() . <span class="charliteral">&#39; &#39;</span> . $this-&gt;<a class="code" href="classDrush_1_1Sql_1_1SqlBase.html#a91bcf21091c60d1c3a85cc1fa07769b5">creds</a>($hide_password) . <span class="charliteral">&#39; &#39;</span> . <a class="code" href="context_8inc.html#afe91fb3e5219ecb2208c3b036b1f0cb8">drush_get_option</a>(<span class="stringliteral">&#39;extra&#39;</span>, $this-&gt;query_extra));</div>
<div class="line"><a name="l00047"></a><span class="lineno">   47</span>&#160;  }</div>
<div class="line"><a name="l00048"></a><span class="lineno">   48</span>&#160;</div>
<div class="line"><a name="l00049"></a><span class="lineno">   49</span>&#160;</div>
<div class="line"><a name="l00050"></a><span class="lineno">   50</span>&#160;  <span class="keyword">public</span> <span class="keyword">function</span> dump($file = <span class="stringliteral">&#39;&#39;</span>) {</div>
<div class="line"><a name="l00051"></a><span class="lineno">   51</span>&#160;    $table_selection = $this-&gt;<a class="code" href="classDrush_1_1Sql_1_1SqlBase.html#af5a9a4ba79d9d75c8230d386ff50545a">get_expanded_table_selection</a>();</div>
<div class="line"><a name="l00052"></a><span class="lineno">   52</span>&#160;    $file = $this-&gt;dumpFile($file);</div>
<div class="line"><a name="l00053"></a><span class="lineno">   53</span>&#160;    list($cmd, $file) = $this-&gt;dumpCmd($table_selection, $file);</div>
<div class="line"><a name="l00054"></a><span class="lineno">   54</span>&#160;    list($cmd, $file) = $this-&gt;dumpGzip($cmd, $file);</div>
<div class="line"><a name="l00055"></a><span class="lineno">   55</span>&#160;    <span class="comment">// Avoid the php memory of the $output array in drush_shell_exec().</span></div>
<div class="line"><a name="l00056"></a><span class="lineno">   56</span>&#160;    <span class="keywordflow">if</span> (!$return = <a class="code" href="group__commandwrappers.html#ga9199c80718bb0497997bd9f7b783911a">drush_op_system</a>($cmd)) {</div>
<div class="line"><a name="l00057"></a><span class="lineno">   57</span>&#160;      <span class="keywordflow">if</span> ($file) {</div>
<div class="line"><a name="l00058"></a><span class="lineno">   58</span>&#160;        <a class="code" href="group__logging.html#gad820f489a93518301794ada4ff7816b6">drush_log</a>(<a class="code" href="group__outputfunctions.html#ga1218abcb1e27dd3bb412113d1e344d96">dt</a>(<span class="stringliteral">&#39;Database dump saved to !path&#39;</span>, array(<span class="stringliteral">&#39;!path&#39;</span> =&gt; $file)), <span class="stringliteral">&#39;success&#39;</span>);</div>
<div class="line"><a name="l00059"></a><span class="lineno">   59</span>&#160;        <a class="code" href="backend_8inc.html#ad8040331b08464a2a48b7ac8a00ed13c">drush_backend_set_result</a>($file);</div>
<div class="line"><a name="l00060"></a><span class="lineno">   60</span>&#160;      }</div>
<div class="line"><a name="l00061"></a><span class="lineno">   61</span>&#160;    }</div>
<div class="line"><a name="l00062"></a><span class="lineno">   62</span>&#160;    <span class="keywordflow">else</span> {</div>
<div class="line"><a name="l00063"></a><span class="lineno">   63</span>&#160;      <span class="keywordflow">return</span> <a class="code" href="group__errorhandling.html#ga23fe9e1e8c1e5ade39256106044b6da4">drush_set_error</a>(<span class="stringliteral">&#39;DRUSH_SQL_DUMP_FAIL&#39;</span>, <span class="stringliteral">&#39;Database dump failed&#39;</span>);</div>
<div class="line"><a name="l00064"></a><span class="lineno">   64</span>&#160;    }</div>
<div class="line"><a name="l00065"></a><span class="lineno">   65</span>&#160;  }</div>
<div class="line"><a name="l00066"></a><span class="lineno">   66</span>&#160;</div>
<div class="line"><a name="l00067"></a><span class="lineno">   67</span>&#160;  <span class="comment">/*</span></div>
<div class="line"><a name="l00068"></a><span class="lineno">   68</span>&#160;<span class="comment">   * Build bash for dumping a database.</span></div>
<div class="line"><a name="l00069"></a><span class="lineno">   69</span>&#160;<span class="comment">   *</span></div>
<div class="line"><a name="l00070"></a><span class="lineno">   70</span>&#160;<span class="comment">   * @param array $table_selection</span></div>
<div class="line"><a name="l00071"></a><span class="lineno">   71</span>&#160;<span class="comment">   *   Supported keys: &#39;skip&#39;, &#39;structure&#39;, &#39;tables&#39;.</span></div>
<div class="line"><a name="l00072"></a><span class="lineno">   72</span>&#160;<span class="comment">   * @param file</span></div>
<div class="line"><a name="l00073"></a><span class="lineno">   73</span>&#160;<span class="comment">   *   Destination for the dump file.</span></div>
<div class="line"><a name="l00074"></a><span class="lineno">   74</span>&#160;<span class="comment">   * @return array</span></div>
<div class="line"><a name="l00075"></a><span class="lineno">   75</span>&#160;<span class="comment">   *   A two item indexed array.</span></div>
<div class="line"><a name="l00076"></a><span class="lineno">   76</span>&#160;<span class="comment">   *     1. A mysqldump/pg_dump/sqlite3/etc statement that is ready for executing.</span></div>
<div class="line"><a name="l00077"></a><span class="lineno">   77</span>&#160;<span class="comment">   *     2. The filepath where the dump will be saved.</span></div>
<div class="line"><a name="l00078"></a><span class="lineno">   78</span>&#160;<span class="comment">   */</span></div>
<div class="line"><a name="l00079"></a><span class="lineno">   79</span>&#160;  <span class="keyword">public</span> <span class="keyword">function</span> dumpCmd($table_selection, $file) {}</div>
<div class="line"><a name="l00080"></a><span class="lineno">   80</span>&#160;</div>
<div class="line"><a name="l00081"></a><span class="lineno">   81</span>&#160;  <span class="keyword">public</span> <span class="keyword">function</span> dumpFile($file) {</div>
<div class="line"><a name="l00082"></a><span class="lineno">   82</span>&#160;    $database = $this-&gt;db_spec[<span class="stringliteral">&#39;database&#39;</span>];</div>
<div class="line"><a name="l00083"></a><span class="lineno">   83</span>&#160;</div>
<div class="line"><a name="l00084"></a><span class="lineno">   84</span>&#160;    <span class="comment">// $file is passed in to us usually via --result-file.  If the user</span></div>
<div class="line"><a name="l00085"></a><span class="lineno">   85</span>&#160;    <span class="comment">// has set $options[&#39;result-file&#39;] = TRUE, then we</span></div>
<div class="line"><a name="l00086"></a><span class="lineno">   86</span>&#160;    <span class="comment">// will generate an SQL dump file in the same backup</span></div>
<div class="line"><a name="l00087"></a><span class="lineno">   87</span>&#160;    <span class="comment">// directory that pm-updatecode uses.</span></div>
<div class="line"><a name="l00088"></a><span class="lineno">   88</span>&#160;    <span class="keywordflow">if</span> ($file) {</div>
<div class="line"><a name="l00089"></a><span class="lineno">   89</span>&#160;      <span class="keywordflow">if</span> ($file === TRUE) {</div>
<div class="line"><a name="l00090"></a><span class="lineno">   90</span>&#160;        <span class="comment">// User did not pass a specific value for --result-file. Make one.</span></div>
<div class="line"><a name="l00091"></a><span class="lineno">   91</span>&#160;        $backup = <a class="code" href="engines_8inc.html#a91df31f18b0a1d05540ccaf85e6d9a88">drush_include_engine</a>(<span class="stringliteral">&#39;version_control&#39;</span>, <span class="stringliteral">&#39;backup&#39;</span>);</div>
<div class="line"><a name="l00092"></a><span class="lineno">   92</span>&#160;        $backup_dir = $backup-&gt;prepare_backup_dir($database);</div>
<div class="line"><a name="l00093"></a><span class="lineno">   93</span>&#160;        <span class="keywordflow">if</span> (empty($backup_dir)) {</div>
<div class="line"><a name="l00094"></a><span class="lineno">   94</span>&#160;          $backup_dir = <a class="code" href="group__filesystemfunctions.html#gad1036a8fb12d105b55de87b4f3fe8002">drush_find_tmp</a>();</div>
<div class="line"><a name="l00095"></a><span class="lineno">   95</span>&#160;        }</div>
<div class="line"><a name="l00096"></a><span class="lineno">   96</span>&#160;        $file = $backup_dir . <span class="stringliteral">&#39;/@DATABASE_@DATE.sql&#39;</span>;</div>
<div class="line"><a name="l00097"></a><span class="lineno">   97</span>&#160;      }</div>
<div class="line"><a name="l00098"></a><span class="lineno">   98</span>&#160;      $file = str_replace(array(<span class="stringliteral">&#39;@DATABASE&#39;</span>, <span class="stringliteral">&#39;@DATE&#39;</span>), array($database, gmdate(<span class="stringliteral">&#39;Ymd_His&#39;</span>)), $file);</div>
<div class="line"><a name="l00099"></a><span class="lineno">   99</span>&#160;    }</div>
<div class="line"><a name="l00100"></a><span class="lineno">  100</span>&#160;    <span class="keywordflow">return</span> $file;</div>
<div class="line"><a name="l00101"></a><span class="lineno">  101</span>&#160;  }</div>
<div class="line"><a name="l00102"></a><span class="lineno">  102</span>&#160;</div>
<div class="line"><a name="l00103"></a><span class="lineno">  103</span>&#160;  <span class="comment">/*</span></div>
<div class="line"><a name="l00104"></a><span class="lineno">  104</span>&#160;<span class="comment">   * Bash which gzips dump file if specified.</span></div>
<div class="line"><a name="l00105"></a><span class="lineno">  105</span>&#160;<span class="comment">   *</span></div>
<div class="line"><a name="l00106"></a><span class="lineno">  106</span>&#160;<span class="comment">   * @param string $file</span></div>
<div class="line"><a name="l00107"></a><span class="lineno">  107</span>&#160;<span class="comment">   *</span></div>
<div class="line"><a name="l00108"></a><span class="lineno">  108</span>&#160;<span class="comment">   * @return array</span></div>
<div class="line"><a name="l00109"></a><span class="lineno">  109</span>&#160;<span class="comment">   */</span></div>
<div class="line"><a name="l00110"></a><span class="lineno">  110</span>&#160;  <span class="keyword">function</span> dumpGzip($cmd, $file) {</div>
<div class="line"><a name="l00111"></a><span class="lineno">  111</span>&#160;    $suffix = <span class="stringliteral">&#39;&#39;</span>;</div>
<div class="line"><a name="l00112"></a><span class="lineno">  112</span>&#160;    <span class="keywordflow">if</span> (<a class="code" href="context_8inc.html#afe91fb3e5219ecb2208c3b036b1f0cb8">drush_get_option</a>(<span class="stringliteral">&#39;gzip&#39;</span>)) {</div>
<div class="line"><a name="l00113"></a><span class="lineno">  113</span>&#160;      <span class="keywordflow">if</span> ($file) {</div>
<div class="line"><a name="l00114"></a><span class="lineno">  114</span>&#160;        $escfile = <a class="code" href="group__commandwrappers.html#gafc52f7e769d935b4d2462467cdf8d5ee">drush_escapeshellarg</a>($file);</div>
<div class="line"><a name="l00115"></a><span class="lineno">  115</span>&#160;        <span class="keywordflow">if</span> (<a class="code" href="context_8inc.html#ad25559f8d7d753f636fbeac347c29fc5">drush_get_context</a>(<span class="stringliteral">&#39;DRUSH_AFFIRMATIVE&#39;</span>)) {</div>
<div class="line"><a name="l00116"></a><span class="lineno">  116</span>&#160;          <span class="comment">// Gzip the result-file without Gzip confirmation</span></div>
<div class="line"><a name="l00117"></a><span class="lineno">  117</span>&#160;          $suffix = <span class="stringliteral">&quot; &amp;&amp; gzip -f $escfile&quot;</span>;</div>
<div class="line"><a name="l00118"></a><span class="lineno">  118</span>&#160;          $file .= <span class="stringliteral">&#39;.gz&#39;</span>;</div>
<div class="line"><a name="l00119"></a><span class="lineno">  119</span>&#160;        }</div>
<div class="line"><a name="l00120"></a><span class="lineno">  120</span>&#160;        <span class="keywordflow">else</span> {</div>
<div class="line"><a name="l00121"></a><span class="lineno">  121</span>&#160;          <span class="comment">// Gzip the result-file</span></div>
<div class="line"><a name="l00122"></a><span class="lineno">  122</span>&#160;          $suffix = <span class="stringliteral">&quot; &amp;&amp; gzip $escfile&quot;</span>;</div>
<div class="line"><a name="l00123"></a><span class="lineno">  123</span>&#160;          $file .= <span class="stringliteral">&#39;.gz&#39;</span>;</div>
<div class="line"><a name="l00124"></a><span class="lineno">  124</span>&#160;        }</div>
<div class="line"><a name="l00125"></a><span class="lineno">  125</span>&#160;      }</div>
<div class="line"><a name="l00126"></a><span class="lineno">  126</span>&#160;      <span class="keywordflow">else</span> {</div>
<div class="line"><a name="l00127"></a><span class="lineno">  127</span>&#160;        <span class="comment">// gzip via pipe since user has not specified a file.</span></div>
<div class="line"><a name="l00128"></a><span class="lineno">  128</span>&#160;        $suffix = <span class="stringliteral">&quot;| gzip&quot;</span>;</div>
<div class="line"><a name="l00129"></a><span class="lineno">  129</span>&#160;      }</div>
<div class="line"><a name="l00130"></a><span class="lineno">  130</span>&#160;    }</div>
<div class="line"><a name="l00131"></a><span class="lineno">  131</span>&#160;    <span class="keywordflow">return</span> array($cmd . $suffix, $file);</div>
<div class="line"><a name="l00132"></a><span class="lineno">  132</span>&#160;  }</div>
<div class="line"><a name="l00133"></a><span class="lineno">  133</span>&#160;<span class="comment"></span></div>
<div class="line"><a name="l00134"></a><span class="lineno">  134</span>&#160;<span class="comment">  /**</span></div>
<div class="line"><a name="l00135"></a><span class="lineno">  135</span>&#160;<span class="comment">   * Execute a SQL query.</span></div>
<div class="line"><a name="l00136"></a><span class="lineno">  136</span>&#160;<span class="comment">   *</span></div>
<div class="line"><a name="l00137"></a><span class="lineno">  137</span>&#160;<span class="comment">   * Note: This is an API function. Try to avoid using drush_get_option() and instead</span></div>
<div class="line"><a name="l00138"></a><span class="lineno">  138</span>&#160;<span class="comment">   * get params passed in.</span></div>
<div class="line"><a name="l00139"></a><span class="lineno">  139</span>&#160;<span class="comment">   *</span></div>
<div class="line"><a name="l00140"></a><span class="lineno">  140</span>&#160;<span class="comment">   * @param string $query</span></div>
<div class="line"><a name="l00141"></a><span class="lineno">  141</span>&#160;<span class="comment">   *   The SQL to be executed. Should be NULL if $file is provided.</span></div>
<div class="line"><a name="l00142"></a><span class="lineno">  142</span>&#160;<span class="comment">   * @param string $input_file</span></div>
<div class="line"><a name="l00143"></a><span class="lineno">  143</span>&#160;<span class="comment">   *   A path to a file containing the SQL to be executed.</span></div>
<div class="line"><a name="l00144"></a><span class="lineno">  144</span>&#160;<span class="comment">   * @param bool $silent</span></div>
<div class="line"><a name="l00145"></a><span class="lineno">  145</span>&#160;<span class="comment">   *   Don&#39;t print query results to screen.</span></div>
<div class="line"><a name="l00146"></a><span class="lineno">  146</span>&#160;<span class="comment">   * @param string $result_file</span></div>
<div class="line"><a name="l00147"></a><span class="lineno">  147</span>&#160;<span class="comment">   *   A path to save query results to.</span></div>
<div class="line"><a name="l00148"></a><span class="lineno">  148</span>&#160;<span class="comment">   */</span></div>
<div class="line"><a name="l00149"></a><span class="lineno"><a class="code" href="classDrush_1_1Sql_1_1SqlBase.html#a52e0c44fc5008ba624f54c2f439b0ae5">  149</a></span>&#160;  <span class="keyword">public</span> <span class="keyword">function</span> <a class="code" href="classDrush_1_1Sql_1_1SqlBase.html#a52e0c44fc5008ba624f54c2f439b0ae5">query</a>($query, $input_file = NULL, $silent = TRUE, $result_file = <span class="stringliteral">&#39;&#39;</span>) {</div>
<div class="line"><a name="l00150"></a><span class="lineno">  150</span>&#160;    $input_file_original = $input_file;</div>
<div class="line"><a name="l00151"></a><span class="lineno">  151</span>&#160;    <span class="keywordflow">if</span> ($input_file &amp;&amp; <a class="code" href="drush_8inc.html#a78aae9f3ebfdb2bee27dee73fe088652">drush_file_is_tarball</a>($input_file)) {</div>
<div class="line"><a name="l00152"></a><span class="lineno">  152</span>&#160;      <span class="keywordflow">if</span> (<a class="code" href="group__commandwrappers.html#gafd358ceac1286dbdd141ff2b8eb7d556">drush_shell_exec</a>(<span class="stringliteral">&#39;gunzip %s&#39;</span>, $input_file)) {</div>
<div class="line"><a name="l00153"></a><span class="lineno">  153</span>&#160;        $input_file = trim($input_file, <span class="stringliteral">&#39;.gz&#39;</span>);</div>
<div class="line"><a name="l00154"></a><span class="lineno">  154</span>&#160;      }</div>
<div class="line"><a name="l00155"></a><span class="lineno">  155</span>&#160;      <span class="keywordflow">else</span> {</div>
<div class="line"><a name="l00156"></a><span class="lineno">  156</span>&#160;        <span class="keywordflow">return</span> <a class="code" href="group__errorhandling.html#ga23fe9e1e8c1e5ade39256106044b6da4">drush_set_error</a>(<a class="code" href="group__outputfunctions.html#ga1218abcb1e27dd3bb412113d1e344d96">dt</a>(<span class="stringliteral">&#39;Failed to gunzip input file.&#39;</span>));</div>
<div class="line"><a name="l00157"></a><span class="lineno">  157</span>&#160;      }</div>
<div class="line"><a name="l00158"></a><span class="lineno">  158</span>&#160;    }</div>
<div class="line"><a name="l00159"></a><span class="lineno">  159</span>&#160;</div>
<div class="line"><a name="l00160"></a><span class="lineno">  160</span>&#160;    <span class="comment">// Save $query to a tmp file if needed. We will redirect it in.</span></div>
<div class="line"><a name="l00161"></a><span class="lineno">  161</span>&#160;    <span class="keywordflow">if</span> (!$input_file) {</div>
<div class="line"><a name="l00162"></a><span class="lineno">  162</span>&#160;      $query = $this-&gt;query_prefix($query);</div>
<div class="line"><a name="l00163"></a><span class="lineno">  163</span>&#160;      $query = $this-&gt;query_format($query);</div>
<div class="line"><a name="l00164"></a><span class="lineno">  164</span>&#160;      $input_file = <a class="code" href="group__filesystemfunctions.html#gadb66635fa63012fb084f8e96a392776d">drush_save_data_to_temp_file</a>($query);</div>
<div class="line"><a name="l00165"></a><span class="lineno">  165</span>&#160;    }</div>
<div class="line"><a name="l00166"></a><span class="lineno">  166</span>&#160;</div>
<div class="line"><a name="l00167"></a><span class="lineno">  167</span>&#160;    $parts = array(</div>
<div class="line"><a name="l00168"></a><span class="lineno">  168</span>&#160;      $this-&gt;<a class="code" href="classDrush_1_1Sql_1_1SqlBase.html#ac29907915d00435d999c4fe5fd611815">command</a>(),</div>
<div class="line"><a name="l00169"></a><span class="lineno">  169</span>&#160;      $this-&gt;<a class="code" href="classDrush_1_1Sql_1_1SqlBase.html#a91bcf21091c60d1c3a85cc1fa07769b5">creds</a>(),</div>
<div class="line"><a name="l00170"></a><span class="lineno">  170</span>&#160;      $this-&gt;silent(),</div>
<div class="line"><a name="l00171"></a><span class="lineno">  171</span>&#160;      <a class="code" href="context_8inc.html#afe91fb3e5219ecb2208c3b036b1f0cb8">drush_get_option</a>(<span class="stringliteral">&#39;extra&#39;</span>, $this-&gt;query_extra),</div>
<div class="line"><a name="l00172"></a><span class="lineno">  172</span>&#160;      $this-&gt;query_file,</div>
<div class="line"><a name="l00173"></a><span class="lineno">  173</span>&#160;      <a class="code" href="group__commandwrappers.html#gafc52f7e769d935b4d2462467cdf8d5ee">drush_escapeshellarg</a>($input_file),</div>
<div class="line"><a name="l00174"></a><span class="lineno">  174</span>&#160;    );</div>
<div class="line"><a name="l00175"></a><span class="lineno">  175</span>&#160;    $exec = implode(<span class="charliteral">&#39; &#39;</span>, $parts);</div>
<div class="line"><a name="l00176"></a><span class="lineno">  176</span>&#160;</div>
<div class="line"><a name="l00177"></a><span class="lineno">  177</span>&#160;    <span class="keywordflow">if</span> ($result_file) {</div>
<div class="line"><a name="l00178"></a><span class="lineno">  178</span>&#160;      $exec .= <span class="stringliteral">&#39; &gt; &#39;</span>. <a class="code" href="group__commandwrappers.html#gafc52f7e769d935b4d2462467cdf8d5ee">drush_escapeshellarg</a>($result_file);</div>
<div class="line"><a name="l00179"></a><span class="lineno">  179</span>&#160;    }</div>
<div class="line"><a name="l00180"></a><span class="lineno">  180</span>&#160;</div>
<div class="line"><a name="l00181"></a><span class="lineno">  181</span>&#160;    <span class="comment">// In --verbose mode, drush_shell_exec() will show the call to mysql/psql/sqlite,</span></div>
<div class="line"><a name="l00182"></a><span class="lineno">  182</span>&#160;    <span class="comment">// but the sql query itself is stored in a temp file and not displayed.</span></div>
<div class="line"><a name="l00183"></a><span class="lineno">  183</span>&#160;    <span class="comment">// We show the query when --debug is used and this function created the temp file.</span></div>
<div class="line"><a name="l00184"></a><span class="lineno">  184</span>&#160;    <span class="keywordflow">if</span> ((<a class="code" href="context_8inc.html#ad25559f8d7d753f636fbeac347c29fc5">drush_get_context</a>(<span class="stringliteral">&#39;DRUSH_DEBUG&#39;</span>) || <a class="code" href="context_8inc.html#ad25559f8d7d753f636fbeac347c29fc5">drush_get_context</a>(<span class="stringliteral">&#39;DRUSH_SIMULATE&#39;</span>)) &amp;&amp; empty($input_file_original)) {</div>
<div class="line"><a name="l00185"></a><span class="lineno">  185</span>&#160;      <a class="code" href="group__logging.html#gad820f489a93518301794ada4ff7816b6">drush_log</a>(<span class="stringliteral">&#39;sql-query: &#39;</span> . $query, <span class="stringliteral">&#39;status&#39;</span>);</div>
<div class="line"><a name="l00186"></a><span class="lineno">  186</span>&#160;    }</div>
<div class="line"><a name="l00187"></a><span class="lineno">  187</span>&#160;</div>
<div class="line"><a name="l00188"></a><span class="lineno">  188</span>&#160;    $success = <a class="code" href="group__commandwrappers.html#gafd358ceac1286dbdd141ff2b8eb7d556">drush_shell_exec</a>($exec);</div>
<div class="line"><a name="l00189"></a><span class="lineno">  189</span>&#160;</div>
<div class="line"><a name="l00190"></a><span class="lineno">  190</span>&#160;    <span class="keywordflow">if</span> ($success &amp;&amp; <a class="code" href="context_8inc.html#afe91fb3e5219ecb2208c3b036b1f0cb8">drush_get_option</a>(<span class="stringliteral">&#39;file-delete&#39;</span>)) {</div>
<div class="line"><a name="l00191"></a><span class="lineno">  191</span>&#160;      <a class="code" href="drush_8inc.html#a903c36790dbe5525fe9369c8476780af">drush_op</a>(<span class="stringliteral">&#39;drush_delete_dir&#39;</span>, $input_file);</div>
<div class="line"><a name="l00192"></a><span class="lineno">  192</span>&#160;    }</div>
<div class="line"><a name="l00193"></a><span class="lineno">  193</span>&#160;</div>
<div class="line"><a name="l00194"></a><span class="lineno">  194</span>&#160;    <span class="keywordflow">return</span> $success;</div>
<div class="line"><a name="l00195"></a><span class="lineno">  195</span>&#160;  }</div>
<div class="line"><a name="l00196"></a><span class="lineno">  196</span>&#160;</div>
<div class="line"><a name="l00197"></a><span class="lineno">  197</span>&#160;  <span class="comment">/*</span></div>
<div class="line"><a name="l00198"></a><span class="lineno">  198</span>&#160;<span class="comment">   * A string to add to the command when queries should not print their results.</span></div>
<div class="line"><a name="l00199"></a><span class="lineno">  199</span>&#160;<span class="comment">   */</span></div>
<div class="line"><a name="l00200"></a><span class="lineno">  200</span>&#160;  <span class="keyword">public</span> <span class="keyword">function</span> silent() {}</div>
<div class="line"><a name="l00201"></a><span class="lineno">  201</span>&#160;</div>
<div class="line"><a name="l00202"></a><span class="lineno">  202</span>&#160;  <span class="keyword">public</span> <span class="keyword">function</span> query_prefix($query) {</div>
<div class="line"><a name="l00203"></a><span class="lineno">  203</span>&#160;    <span class="comment">// Inject table prefixes as needed.</span></div>
<div class="line"><a name="l00204"></a><span class="lineno">  204</span>&#160;    <span class="keywordflow">if</span> (<a class="code" href="lib_2Drush_2Boot_2bootstrap_8inc.html#a4950178d99fc39c6d9d188d1609612f0">drush_has_boostrapped</a>(<a class="code" href="lib_2Drush_2Boot_2bootstrap_8inc.html#aa37a87c4821273e79353b5d4cb92900f">DRUSH_BOOTSTRAP_DRUPAL_DATABASE</a>)) {</div>
<div class="line"><a name="l00205"></a><span class="lineno">  205</span>&#160;      <span class="comment">// Enable prefix processing which can be dangerous so off by default. See http://drupal.org/node/1219850.</span></div>
<div class="line"><a name="l00206"></a><span class="lineno">  206</span>&#160;      <span class="keywordflow">if</span> (<a class="code" href="context_8inc.html#afe91fb3e5219ecb2208c3b036b1f0cb8">drush_get_option</a>(<span class="stringliteral">&#39;db-prefix&#39;</span>)) {</div>
<div class="line"><a name="l00207"></a><span class="lineno">  207</span>&#160;        <span class="keywordflow">if</span> (<a class="code" href="includes_2drupal_8inc.html#ad2ccab77d4bc8e7355186f26cd328ac0">drush_drupal_major_version</a>() &gt;= 7) {</div>
<div class="line"><a name="l00208"></a><span class="lineno">  208</span>&#160;          $query = Database::getConnection()-&gt;prefixTables($query);</div>
<div class="line"><a name="l00209"></a><span class="lineno">  209</span>&#160;        }</div>
<div class="line"><a name="l00210"></a><span class="lineno">  210</span>&#160;        <span class="keywordflow">else</span> {</div>
<div class="line"><a name="l00211"></a><span class="lineno">  211</span>&#160;          $query = db_prefix_tables($query);</div>
<div class="line"><a name="l00212"></a><span class="lineno">  212</span>&#160;        }</div>
<div class="line"><a name="l00213"></a><span class="lineno">  213</span>&#160;      }</div>
<div class="line"><a name="l00214"></a><span class="lineno">  214</span>&#160;    }</div>
<div class="line"><a name="l00215"></a><span class="lineno">  215</span>&#160;    <span class="keywordflow">return</span> $query;</div>
<div class="line"><a name="l00216"></a><span class="lineno">  216</span>&#160;  }</div>
<div class="line"><a name="l00217"></a><span class="lineno">  217</span>&#160;</div>
<div class="line"><a name="l00218"></a><span class="lineno">  218</span>&#160;</div>
<div class="line"><a name="l00219"></a><span class="lineno">  219</span>&#160;  <span class="keyword">public</span> <span class="keyword">function</span> query_format($query) {</div>
<div class="line"><a name="l00220"></a><span class="lineno">  220</span>&#160;    <span class="keywordflow">return</span> $query;</div>
<div class="line"><a name="l00221"></a><span class="lineno">  221</span>&#160;  }</div>
<div class="line"><a name="l00222"></a><span class="lineno">  222</span>&#160;</div>
<div class="line"><a name="l00223"></a><span class="lineno">  223</span>&#160;  <span class="keyword">public</span> <span class="keyword">function</span> drop($tables) {</div>
<div class="line"><a name="l00224"></a><span class="lineno">  224</span>&#160;    <span class="keywordflow">if</span> ($tables) {</div>
<div class="line"><a name="l00225"></a><span class="lineno">  225</span>&#160;      $sql = <span class="stringliteral">&#39;DROP TABLE &#39;</span>. implode(<span class="stringliteral">&#39;, &#39;</span>, $tables);</div>
<div class="line"><a name="l00226"></a><span class="lineno">  226</span>&#160;      <span class="keywordflow">return</span> $this-&gt;<a class="code" href="classDrush_1_1Sql_1_1SqlBase.html#a52e0c44fc5008ba624f54c2f439b0ae5">query</a>($sql);</div>
<div class="line"><a name="l00227"></a><span class="lineno">  227</span>&#160;    }</div>
<div class="line"><a name="l00228"></a><span class="lineno">  228</span>&#160;  }</div>
<div class="line"><a name="l00229"></a><span class="lineno">  229</span>&#160;<span class="comment"></span></div>
<div class="line"><a name="l00230"></a><span class="lineno">  230</span>&#160;<span class="comment">  /**</span></div>
<div class="line"><a name="l00231"></a><span class="lineno">  231</span>&#160;<span class="comment">   * Build a SQL string for dropping and creating a database.</span></div>
<div class="line"><a name="l00232"></a><span class="lineno">  232</span>&#160;<span class="comment">   *</span></div>
<div class="line"><a name="l00233"></a><span class="lineno">  233</span>&#160;<span class="comment">   * @param string dbname</span></div>
<div class="line"><a name="l00234"></a><span class="lineno">  234</span>&#160;<span class="comment">   *   The database name.</span></div>
<div class="line"><a name="l00235"></a><span class="lineno">  235</span>&#160;<span class="comment">   * @param boolean $quoted</span></div>
<div class="line"><a name="l00236"></a><span class="lineno">  236</span>&#160;<span class="comment">   *   Quote the database name. Mysql uses backticks to quote which can cause problems</span></div>
<div class="line"><a name="l00237"></a><span class="lineno">  237</span>&#160;<span class="comment">   *   in a Windows shell. Set TRUE if the CREATE is not running on the bash command line.</span></div>
<div class="line"><a name="l00238"></a><span class="lineno">  238</span>&#160;<span class="comment">   */</span></div>
<div class="line"><a name="l00239"></a><span class="lineno"><a class="code" href="classDrush_1_1Sql_1_1SqlBase.html#aa2ae58c2f7e5c50e0d786f5d4c47dca3">  239</a></span>&#160;  <span class="keyword">public</span> <span class="keyword">function</span> <a class="code" href="classDrush_1_1Sql_1_1SqlBase.html#aa2ae58c2f7e5c50e0d786f5d4c47dca3">createdb_sql</a>($dbname, $quoted = FALSE) {}</div>
<div class="line"><a name="l00240"></a><span class="lineno">  240</span>&#160;<span class="comment"></span></div>
<div class="line"><a name="l00241"></a><span class="lineno">  241</span>&#160;<span class="comment">  /**</span></div>
<div class="line"><a name="l00242"></a><span class="lineno">  242</span>&#160;<span class="comment">   * Create a new database.</span></div>
<div class="line"><a name="l00243"></a><span class="lineno">  243</span>&#160;<span class="comment">   *</span></div>
<div class="line"><a name="l00244"></a><span class="lineno">  244</span>&#160;<span class="comment">   * @param boolean $quoted</span></div>
<div class="line"><a name="l00245"></a><span class="lineno">  245</span>&#160;<span class="comment">   *   Quote the database name. Mysql uses backticks to quote which can cause problems</span></div>
<div class="line"><a name="l00246"></a><span class="lineno">  246</span>&#160;<span class="comment">   *   in a Windows shell. Set TRUE if the CREATE is not running on the bash command line.</span></div>
<div class="line"><a name="l00247"></a><span class="lineno">  247</span>&#160;<span class="comment">   */</span></div>
<div class="line"><a name="l00248"></a><span class="lineno"><a class="code" href="classDrush_1_1Sql_1_1SqlBase.html#ab535d0d2d28dcbae9c83f1f62328a3a5">  248</a></span>&#160;  <span class="keyword">public</span> <span class="keyword">function</span> <a class="code" href="classDrush_1_1Sql_1_1SqlBase.html#ab535d0d2d28dcbae9c83f1f62328a3a5">createdb</a>($quoted = FALSE) {</div>
<div class="line"><a name="l00249"></a><span class="lineno">  249</span>&#160;    $dbname = $this-&gt;db_spec[<span class="stringliteral">&#39;database&#39;</span>];</div>
<div class="line"><a name="l00250"></a><span class="lineno">  250</span>&#160;    $sql = $this-&gt;<a class="code" href="classDrush_1_1Sql_1_1SqlBase.html#aa2ae58c2f7e5c50e0d786f5d4c47dca3">createdb_sql</a>($dbname);</div>
<div class="line"><a name="l00251"></a><span class="lineno">  251</span>&#160;    <span class="comment">// Adjust connection to allow for superuser creds if provided.</span></div>
<div class="line"><a name="l00252"></a><span class="lineno">  252</span>&#160;    $this-&gt;<a class="code" href="classDrush_1_1Sql_1_1SqlBase.html#acc920b5d18da0987a8888953138c107d">su</a>();</div>
<div class="line"><a name="l00253"></a><span class="lineno">  253</span>&#160;    <span class="keywordflow">return</span> $this-&gt;<a class="code" href="classDrush_1_1Sql_1_1SqlBase.html#a52e0c44fc5008ba624f54c2f439b0ae5">query</a>($sql);</div>
<div class="line"><a name="l00254"></a><span class="lineno">  254</span>&#160;  }</div>
<div class="line"><a name="l00255"></a><span class="lineno">  255</span>&#160;<span class="comment"></span></div>
<div class="line"><a name="l00256"></a><span class="lineno">  256</span>&#160;<span class="comment">  /**</span></div>
<div class="line"><a name="l00257"></a><span class="lineno">  257</span>&#160;<span class="comment">   * Drop all tables (if DB exists) or CREATE target database.</span></div>
<div class="line"><a name="l00258"></a><span class="lineno">  258</span>&#160;<span class="comment">   *</span></div>
<div class="line"><a name="l00259"></a><span class="lineno">  259</span>&#160;<span class="comment">   * return boolean</span></div>
<div class="line"><a name="l00260"></a><span class="lineno">  260</span>&#160;<span class="comment">   *   TRUE or FALSE depending on success.</span></div>
<div class="line"><a name="l00261"></a><span class="lineno">  261</span>&#160;<span class="comment">   */</span></div>
<div class="line"><a name="l00262"></a><span class="lineno"><a class="code" href="classDrush_1_1Sql_1_1SqlBase.html#a68828a0633827f0dde26a869e4b89e86">  262</a></span>&#160;  <span class="keyword">public</span> <span class="keyword">function</span> <a class="code" href="classDrush_1_1Sql_1_1SqlBase.html#a68828a0633827f0dde26a869e4b89e86">drop_or_create</a>() {</div>
<div class="line"><a name="l00263"></a><span class="lineno">  263</span>&#160;    <span class="keywordflow">if</span> ($this-&gt;db_exists()) {</div>
<div class="line"><a name="l00264"></a><span class="lineno">  264</span>&#160;      $this-&gt;drop($this-&gt;<a class="code" href="classDrush_1_1Sql_1_1SqlBase.html#aacc1a40283305b7ee2e1395c27e3971d">listTables</a>());</div>
<div class="line"><a name="l00265"></a><span class="lineno">  265</span>&#160;    }</div>
<div class="line"><a name="l00266"></a><span class="lineno">  266</span>&#160;    <span class="keywordflow">else</span> {</div>
<div class="line"><a name="l00267"></a><span class="lineno">  267</span>&#160;      $this-&gt;<a class="code" href="classDrush_1_1Sql_1_1SqlBase.html#ab535d0d2d28dcbae9c83f1f62328a3a5">createdb</a>();</div>
<div class="line"><a name="l00268"></a><span class="lineno">  268</span>&#160;    }</div>
<div class="line"><a name="l00269"></a><span class="lineno">  269</span>&#160;  }</div>
<div class="line"><a name="l00270"></a><span class="lineno">  270</span>&#160;</div>
<div class="line"><a name="l00271"></a><span class="lineno">  271</span>&#160;  <span class="comment">/*</span></div>
<div class="line"><a name="l00272"></a><span class="lineno">  272</span>&#160;<span class="comment">   * Determine if the specified DB already exists.</span></div>
<div class="line"><a name="l00273"></a><span class="lineno">  273</span>&#160;<span class="comment">   *</span></div>
<div class="line"><a name="l00274"></a><span class="lineno">  274</span>&#160;<span class="comment">   * @return bool</span></div>
<div class="line"><a name="l00275"></a><span class="lineno">  275</span>&#160;<span class="comment">   */</span></div>
<div class="line"><a name="l00276"></a><span class="lineno">  276</span>&#160;  <span class="keyword">public</span> <span class="keyword">function</span> db_exists() {}</div>
<div class="line"><a name="l00277"></a><span class="lineno">  277</span>&#160;</div>
<div class="line"><a name="l00278"></a><span class="lineno">  278</span>&#160;  <span class="keyword">public</span> <span class="keyword">function</span> <span class="keyword">delete</span>() {}</div>
<div class="line"><a name="l00279"></a><span class="lineno">  279</span>&#160;<span class="comment"></span></div>
<div class="line"><a name="l00280"></a><span class="lineno">  280</span>&#160;<span class="comment">  /**</span></div>
<div class="line"><a name="l00281"></a><span class="lineno">  281</span>&#160;<span class="comment">   * Build a fragment connection parameters.</span></div>
<div class="line"><a name="l00282"></a><span class="lineno">  282</span>&#160;<span class="comment">   *</span></div>
<div class="line"><a name="l00283"></a><span class="lineno">  283</span>&#160;<span class="comment">   * @param bool $hide_password</span></div>
<div class="line"><a name="l00284"></a><span class="lineno">  284</span>&#160;<span class="comment">   *  If TRUE, DBMS should try to hide password from process list.</span></div>
<div class="line"><a name="l00285"></a><span class="lineno">  285</span>&#160;<span class="comment">   *  On mysql, that means using --defaults-extra-file to supply the user+password.</span></div>
<div class="line"><a name="l00286"></a><span class="lineno">  286</span>&#160;<span class="comment">   * @return string</span></div>
<div class="line"><a name="l00287"></a><span class="lineno">  287</span>&#160;<span class="comment">   */</span></div>
<div class="line"><a name="l00288"></a><span class="lineno"><a class="code" href="classDrush_1_1Sql_1_1SqlBase.html#a91bcf21091c60d1c3a85cc1fa07769b5">  288</a></span>&#160;  <span class="keyword">public</span> <span class="keyword">function</span> <a class="code" href="classDrush_1_1Sql_1_1SqlBase.html#a91bcf21091c60d1c3a85cc1fa07769b5">creds</a>($hide_password = TRUE) {}</div>
<div class="line"><a name="l00289"></a><span class="lineno">  289</span>&#160;<span class="comment"></span></div>
<div class="line"><a name="l00290"></a><span class="lineno">  290</span>&#160;<span class="comment">  /**</span></div>
<div class="line"><a name="l00291"></a><span class="lineno">  291</span>&#160;<span class="comment">   * The active database driver.</span></div>
<div class="line"><a name="l00292"></a><span class="lineno">  292</span>&#160;<span class="comment">   * @return string</span></div>
<div class="line"><a name="l00293"></a><span class="lineno">  293</span>&#160;<span class="comment">   */</span></div>
<div class="line"><a name="l00294"></a><span class="lineno"><a class="code" href="classDrush_1_1Sql_1_1SqlBase.html#a6c1a1bf889249c917448f356650e62d9">  294</a></span>&#160;  <span class="keyword">public</span> <span class="keyword">function</span> <a class="code" href="classDrush_1_1Sql_1_1SqlBase.html#a6c1a1bf889249c917448f356650e62d9">scheme</a>() {</div>
<div class="line"><a name="l00295"></a><span class="lineno">  295</span>&#160;    <span class="keywordflow">return</span> $this-&gt;db_spec[<span class="stringliteral">&#39;driver&#39;</span>];</div>
<div class="line"><a name="l00296"></a><span class="lineno">  296</span>&#160;  }</div>
<div class="line"><a name="l00297"></a><span class="lineno">  297</span>&#160;<span class="comment"></span></div>
<div class="line"><a name="l00298"></a><span class="lineno">  298</span>&#160;<span class="comment">  /**</span></div>
<div class="line"><a name="l00299"></a><span class="lineno">  299</span>&#160;<span class="comment">   * Get a list of all table names and expand input that may contain</span></div>
<div class="line"><a name="l00300"></a><span class="lineno">  300</span>&#160;<span class="comment">   * wildcards (`*`) if necessary so that the array returned only contains valid</span></div>
<div class="line"><a name="l00301"></a><span class="lineno">  301</span>&#160;<span class="comment">   * table names i.e. actual tables that exist, without a wildcard.</span></div>
<div class="line"><a name="l00302"></a><span class="lineno">  302</span>&#160;<span class="comment">   *</span></div>
<div class="line"><a name="l00303"></a><span class="lineno">  303</span>&#160;<span class="comment">   * @return array</span></div>
<div class="line"><a name="l00304"></a><span class="lineno">  304</span>&#160;<span class="comment">   *   An array of tables with each table name in the appropriate</span></div>
<div class="line"><a name="l00305"></a><span class="lineno">  305</span>&#160;<span class="comment">   *   element of the array.</span></div>
<div class="line"><a name="l00306"></a><span class="lineno">  306</span>&#160;<span class="comment">   */</span></div>
<div class="line"><a name="l00307"></a><span class="lineno"><a class="code" href="classDrush_1_1Sql_1_1SqlBase.html#af5a9a4ba79d9d75c8230d386ff50545a">  307</a></span>&#160;  <span class="keyword">public</span> <span class="keyword">function</span> <a class="code" href="classDrush_1_1Sql_1_1SqlBase.html#af5a9a4ba79d9d75c8230d386ff50545a">get_expanded_table_selection</a>() {</div>
<div class="line"><a name="l00308"></a><span class="lineno">  308</span>&#160;    $table_selection = <a class="code" href="sql_8drush_8inc.html#ae314e0b6e40fe3207c1481649b760c26">drush_sql_get_table_selection</a>();</div>
<div class="line"><a name="l00309"></a><span class="lineno">  309</span>&#160;    <span class="comment">// Get the existing table names in the specified database.</span></div>
<div class="line"><a name="l00310"></a><span class="lineno">  310</span>&#160;    $db_tables = $this-&gt;<a class="code" href="classDrush_1_1Sql_1_1SqlBase.html#aacc1a40283305b7ee2e1395c27e3971d">listTables</a>();</div>
<div class="line"><a name="l00311"></a><span class="lineno">  311</span>&#160;    <span class="keywordflow">if</span> (isset($table_selection[<span class="stringliteral">&#39;skip&#39;</span>])) {</div>
<div class="line"><a name="l00312"></a><span class="lineno">  312</span>&#160;      $table_selection[<span class="stringliteral">&#39;skip&#39;</span>] = <a class="code" href="sql_8drush_8inc.html#a69379e6e5cad1448ab76491b7c4cdd40">_drush_sql_expand_and_filter_tables</a>($table_selection[<span class="stringliteral">&#39;skip&#39;</span>], $db_tables);</div>
<div class="line"><a name="l00313"></a><span class="lineno">  313</span>&#160;    }</div>
<div class="line"><a name="l00314"></a><span class="lineno">  314</span>&#160;    <span class="keywordflow">if</span> (isset($table_selection[<span class="stringliteral">&#39;structure&#39;</span>])) {</div>
<div class="line"><a name="l00315"></a><span class="lineno">  315</span>&#160;      $table_selection[<span class="stringliteral">&#39;structure&#39;</span>] = <a class="code" href="sql_8drush_8inc.html#a69379e6e5cad1448ab76491b7c4cdd40">_drush_sql_expand_and_filter_tables</a>($table_selection[<span class="stringliteral">&#39;structure&#39;</span>], $db_tables);</div>
<div class="line"><a name="l00316"></a><span class="lineno">  316</span>&#160;    }</div>
<div class="line"><a name="l00317"></a><span class="lineno">  317</span>&#160;    <span class="keywordflow">if</span> (isset($table_selection[<span class="stringliteral">&#39;tables&#39;</span>])) {</div>
<div class="line"><a name="l00318"></a><span class="lineno">  318</span>&#160;      $table_selection[<span class="stringliteral">&#39;tables&#39;</span>] = <a class="code" href="sql_8drush_8inc.html#a69379e6e5cad1448ab76491b7c4cdd40">_drush_sql_expand_and_filter_tables</a>($table_selection[<span class="stringliteral">&#39;tables&#39;</span>], $db_tables);</div>
<div class="line"><a name="l00319"></a><span class="lineno">  319</span>&#160;    }</div>
<div class="line"><a name="l00320"></a><span class="lineno">  320</span>&#160;    <span class="keywordflow">return</span> $table_selection;</div>
<div class="line"><a name="l00321"></a><span class="lineno">  321</span>&#160;  }</div>
<div class="line"><a name="l00322"></a><span class="lineno">  322</span>&#160;<span class="comment"></span></div>
<div class="line"><a name="l00323"></a><span class="lineno">  323</span>&#160;<span class="comment">  /**</span></div>
<div class="line"><a name="l00324"></a><span class="lineno">  324</span>&#160;<span class="comment">   * Extract the name of all existing tables in the given database.</span></div>
<div class="line"><a name="l00325"></a><span class="lineno">  325</span>&#160;<span class="comment">   *</span></div>
<div class="line"><a name="l00326"></a><span class="lineno">  326</span>&#160;<span class="comment">   * @return array</span></div>
<div class="line"><a name="l00327"></a><span class="lineno">  327</span>&#160;<span class="comment">   *   An array of table names which exist in the current database.</span></div>
<div class="line"><a name="l00328"></a><span class="lineno">  328</span>&#160;<span class="comment">   */</span></div>
<div class="line"><a name="l00329"></a><span class="lineno"><a class="code" href="classDrush_1_1Sql_1_1SqlBase.html#aacc1a40283305b7ee2e1395c27e3971d">  329</a></span>&#160;  <span class="keyword">public</span> <span class="keyword">function</span> <a class="code" href="classDrush_1_1Sql_1_1SqlBase.html#aacc1a40283305b7ee2e1395c27e3971d">listTables</a>() {}</div>
<div class="line"><a name="l00330"></a><span class="lineno">  330</span>&#160;</div>
<div class="line"><a name="l00331"></a><span class="lineno">  331</span>&#160;  <span class="comment">/*</span></div>
<div class="line"><a name="l00332"></a><span class="lineno">  332</span>&#160;<span class="comment">   * Helper method to turn associative array into options with values.</span></div>
<div class="line"><a name="l00333"></a><span class="lineno">  333</span>&#160;<span class="comment">   *</span></div>
<div class="line"><a name="l00334"></a><span class="lineno">  334</span>&#160;<span class="comment">   * @return string</span></div>
<div class="line"><a name="l00335"></a><span class="lineno">  335</span>&#160;<span class="comment">   *   A bash fragment.</span></div>
<div class="line"><a name="l00336"></a><span class="lineno">  336</span>&#160;<span class="comment">   */</span></div>
<div class="line"><a name="l00337"></a><span class="lineno">  337</span>&#160;  <span class="keyword">public</span> <span class="keyword">function</span> params_to_options($parameters) {</div>
<div class="line"><a name="l00338"></a><span class="lineno">  338</span>&#160;    <span class="comment">// Turn each parameter into a valid parameter string.</span></div>
<div class="line"><a name="l00339"></a><span class="lineno">  339</span>&#160;    $parameter_strings = array();</div>
<div class="line"><a name="l00340"></a><span class="lineno">  340</span>&#160;    <span class="keywordflow">foreach</span> ($parameters as $key =&gt; $value) {</div>
<div class="line"><a name="l00341"></a><span class="lineno">  341</span>&#160;      <span class="comment">// Only escape the values, not the keys or the rest of the string.</span></div>
<div class="line"><a name="l00342"></a><span class="lineno">  342</span>&#160;      $value = <a class="code" href="group__commandwrappers.html#gafc52f7e769d935b4d2462467cdf8d5ee">drush_escapeshellarg</a>($value);</div>
<div class="line"><a name="l00343"></a><span class="lineno">  343</span>&#160;      $parameter_strings[] = <span class="stringliteral">&quot;--$key=$value&quot;</span>;</div>
<div class="line"><a name="l00344"></a><span class="lineno">  344</span>&#160;    }</div>
<div class="line"><a name="l00345"></a><span class="lineno">  345</span>&#160;</div>
<div class="line"><a name="l00346"></a><span class="lineno">  346</span>&#160;    <span class="comment">// Join the parameters and return.</span></div>
<div class="line"><a name="l00347"></a><span class="lineno">  347</span>&#160;    <span class="keywordflow">return</span> implode(<span class="charliteral">&#39; &#39;</span>, $parameter_strings);</div>
<div class="line"><a name="l00348"></a><span class="lineno">  348</span>&#160;  }</div>
<div class="line"><a name="l00349"></a><span class="lineno">  349</span>&#160;<span class="comment"></span></div>
<div class="line"><a name="l00350"></a><span class="lineno">  350</span>&#160;<span class="comment">  /**</span></div>
<div class="line"><a name="l00351"></a><span class="lineno">  351</span>&#160;<span class="comment">   * Adjust DB connection with superuser credentials if provided.</span></div>
<div class="line"><a name="l00352"></a><span class="lineno">  352</span>&#160;<span class="comment">   *</span></div>
<div class="line"><a name="l00353"></a><span class="lineno">  353</span>&#160;<span class="comment">   * The options &#39;db-su&#39; and &#39;db-su-pw&#39; will be retreived from the</span></div>
<div class="line"><a name="l00354"></a><span class="lineno">  354</span>&#160;<span class="comment">   * specified site alias record, if it exists and contains those items.</span></div>
<div class="line"><a name="l00355"></a><span class="lineno">  355</span>&#160;<span class="comment">   * If it does not, they will be fetched via drush_get_option.</span></div>
<div class="line"><a name="l00356"></a><span class="lineno">  356</span>&#160;<span class="comment">   *</span></div>
<div class="line"><a name="l00357"></a><span class="lineno">  357</span>&#160;<span class="comment">   * Note that in the context of sql-sync, the site alias record will</span></div>
<div class="line"><a name="l00358"></a><span class="lineno">  358</span>&#160;<span class="comment">   * be taken from the target alias (e.g. `drush sql-sync @source @target`),</span></div>
<div class="line"><a name="l00359"></a><span class="lineno">  359</span>&#160;<span class="comment">   * which will be overlayed with any options that begin with &#39;target-&#39;;</span></div>
<div class="line"><a name="l00360"></a><span class="lineno">  360</span>&#160;<span class="comment">   * therefore, the commandline options &#39;target-db-su&#39; and &#39;target-db-su-pw&#39;</span></div>
<div class="line"><a name="l00361"></a><span class="lineno">  361</span>&#160;<span class="comment">   * may also affect the operation of this function.</span></div>
<div class="line"><a name="l00362"></a><span class="lineno">  362</span>&#160;<span class="comment">   *</span></div>
<div class="line"><a name="l00363"></a><span class="lineno">  363</span>&#160;<span class="comment">   * @return null</span></div>
<div class="line"><a name="l00364"></a><span class="lineno">  364</span>&#160;<span class="comment">   */</span></div>
<div class="line"><a name="l00365"></a><span class="lineno"><a class="code" href="classDrush_1_1Sql_1_1SqlBase.html#acc920b5d18da0987a8888953138c107d">  365</a></span>&#160;  <span class="keyword">public</span> <span class="keyword">function</span> <a class="code" href="classDrush_1_1Sql_1_1SqlBase.html#acc920b5d18da0987a8888953138c107d">su</a>() {</div>
<div class="line"><a name="l00366"></a><span class="lineno">  366</span>&#160;    $create_db_target = $this-&gt;db_spec;</div>
<div class="line"><a name="l00367"></a><span class="lineno">  367</span>&#160;</div>
<div class="line"><a name="l00368"></a><span class="lineno">  368</span>&#160;    $create_db_target[<span class="stringliteral">&#39;database&#39;</span>] = <span class="stringliteral">&#39;&#39;</span>;</div>
<div class="line"><a name="l00369"></a><span class="lineno">  369</span>&#160;    $db_superuser = <a class="code" href="context_8inc.html#afe91fb3e5219ecb2208c3b036b1f0cb8">drush_get_option</a>(<span class="stringliteral">&#39;db-su&#39;</span>);</div>
<div class="line"><a name="l00370"></a><span class="lineno">  370</span>&#160;    <span class="keywordflow">if</span> (isset($db_superuser)) {</div>
<div class="line"><a name="l00371"></a><span class="lineno">  371</span>&#160;      $create_db_target[<span class="stringliteral">&#39;username&#39;</span>] = $db_superuser;</div>
<div class="line"><a name="l00372"></a><span class="lineno">  372</span>&#160;    }</div>
<div class="line"><a name="l00373"></a><span class="lineno">  373</span>&#160;    $db_su_pw = <a class="code" href="context_8inc.html#afe91fb3e5219ecb2208c3b036b1f0cb8">drush_get_option</a>(<span class="stringliteral">&#39;db-su-pw&#39;</span>);</div>
<div class="line"><a name="l00374"></a><span class="lineno">  374</span>&#160;    <span class="comment">// If --db-su-pw is not provided and --db-su is, default to empty password.</span></div>
<div class="line"><a name="l00375"></a><span class="lineno">  375</span>&#160;    <span class="comment">// This way db cli command will take password from .my.cnf or .pgpass.</span></div>
<div class="line"><a name="l00376"></a><span class="lineno">  376</span>&#160;    <span class="keywordflow">if</span> (!empty($db_su_pw)) {</div>
<div class="line"><a name="l00377"></a><span class="lineno">  377</span>&#160;      $create_db_target[<span class="stringliteral">&#39;password&#39;</span>] = $db_su_pw;</div>
<div class="line"><a name="l00378"></a><span class="lineno">  378</span>&#160;    }</div>
<div class="line"><a name="l00379"></a><span class="lineno">  379</span>&#160;    elseif (isset($db_superuser)) {</div>
<div class="line"><a name="l00380"></a><span class="lineno">  380</span>&#160;      unset($create_db_target[<span class="stringliteral">&#39;password&#39;</span>]);</div>
<div class="line"><a name="l00381"></a><span class="lineno">  381</span>&#160;    }</div>
<div class="line"><a name="l00382"></a><span class="lineno">  382</span>&#160;    $this-&gt;db_spec = $create_db_target;</div>
<div class="line"><a name="l00383"></a><span class="lineno">  383</span>&#160;  }</div>
<div class="line"><a name="l00384"></a><span class="lineno">  384</span>&#160;}</div>
</div><!-- fragment --></div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Wed Oct 8 2014 09:04:54 for Drush by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.1.2
</small></address>
</body>
</html>