@@ -234,6 +234,7 @@ public function check( $_, $assoc_args ) {
234
234
$ assoc_args
235
235
);
236
236
237
+ WP_CLI ::debug ( 'Associative arguments: ' . json_encode ( $ assoc_args ), 'db ' );
237
238
WP_CLI ::success ( 'Database checked. ' );
238
239
}
239
240
@@ -277,6 +278,7 @@ public function optimize( $_, $assoc_args ) {
277
278
$ assoc_args
278
279
);
279
280
281
+ WP_CLI ::debug ( 'Associative arguments: ' . json_encode ( $ assoc_args ), 'db ' );
280
282
WP_CLI ::success ( 'Database optimized. ' );
281
283
}
282
284
@@ -320,6 +322,7 @@ public function repair( $_, $assoc_args ) {
320
322
$ assoc_args
321
323
);
322
324
325
+ WP_CLI ::debug ( 'Associative arguments: ' . json_encode ( $ assoc_args ), 'db ' );
323
326
WP_CLI ::success ( 'Database repaired. ' );
324
327
}
325
328
@@ -354,7 +357,7 @@ public function repair( $_, $assoc_args ) {
354
357
*
355
358
* @alias connect
356
359
*/
357
- public function cli ( $ args , $ assoc_args ) {
360
+ public function cli ( $ _ , $ assoc_args ) {
358
361
359
362
$ command = sprintf ( '/usr/bin/env mysql%s --no-auto-rehash ' , $ this ->get_defaults_flag_string ( $ assoc_args ) );
360
363
WP_CLI ::debug ( "Running shell command: {$ command }" , 'db ' );
@@ -363,6 +366,7 @@ public function cli( $args, $assoc_args ) {
363
366
$ assoc_args ['database ' ] = DB_NAME ;
364
367
}
365
368
369
+ WP_CLI ::debug ( 'Associative arguments: ' . json_encode ( $ assoc_args ), 'db ' );
366
370
self ::run ( $ command , $ assoc_args );
367
371
}
368
372
@@ -436,6 +440,7 @@ public function query( $args, $assoc_args ) {
436
440
$ assoc_args ['execute ' ] = $ this ->get_sql_mode_query ( $ assoc_args ) . $ assoc_args ['execute ' ];
437
441
}
438
442
443
+ WP_CLI ::debug ( 'Associative arguments: ' . json_encode ( $ assoc_args ), 'db ' );
439
444
self ::run ( $ command , $ assoc_args );
440
445
}
441
446
@@ -581,6 +586,7 @@ public function export( $args, $assoc_args ) {
581
586
// Remove parameters not needed for SQL run.
582
587
unset( $ assoc_args ['porcelain ' ] );
583
588
589
+ WP_CLI ::debug ( 'Associative arguments: ' . json_encode ( $ assoc_args ), 'db ' );
584
590
self ::run ( $ escaped_command , $ assoc_args );
585
591
586
592
if ( $ porcelain ) {
@@ -654,6 +660,7 @@ public function import( $args, $assoc_args ) {
654
660
655
661
$ command = sprintf ( '/usr/bin/env mysql%s --no-auto-rehash ' , $ this ->get_defaults_flag_string ( $ assoc_args ) );
656
662
WP_CLI ::debug ( "Running shell command: {$ command }" , 'db ' );
663
+ WP_CLI ::debug ( 'Associative arguments: ' . json_encode ( $ assoc_args ), 'db ' );
657
664
658
665
self ::run ( $ command , $ mysql_args );
659
666
@@ -984,7 +991,7 @@ public function size( $args, $assoc_args ) {
984
991
}
985
992
986
993
if ( ! empty ( $ size_format ) && ! $ tables && ! $ format && ! $ human_readable && true !== $ all_tables && true !== $ all_tables_with_prefix ) {
987
- WP_CLI ::Line ( filter_var ( $ rows [0 ]['Size ' ], FILTER_SANITIZE_NUMBER_INT ) );
994
+ WP_CLI ::line ( filter_var ( $ rows [0 ]['Size ' ], FILTER_SANITIZE_NUMBER_INT ) );
988
995
} else {
989
996
// Display the rows.
990
997
$ args = [
@@ -1442,7 +1449,7 @@ private static function get_create_query() {
1442
1449
/**
1443
1450
* Run a single query via the 'mysql' binary.
1444
1451
*
1445
- * This includes necessary setup to make sure the queries behave similar
1452
+ * This includes the necessary setup to make sure the queries behave similar
1446
1453
* to what WPDB produces.
1447
1454
*
1448
1455
* @param string $query Query to execute.
@@ -1452,6 +1459,8 @@ protected function run_query( $query, $assoc_args = [] ) {
1452
1459
// Ensure that the SQL mode is compatible with WPDB.
1453
1460
$ query = $ this ->get_sql_mode_query ( $ assoc_args ) . $ query ;
1454
1461
1462
+ WP_CLI ::debug ( "Query: {$ query }" , 'db ' );
1463
+
1455
1464
self ::run (
1456
1465
sprintf (
1457
1466
'/usr/bin/env mysql%s --no-auto-rehash ' ,
@@ -1783,12 +1792,32 @@ protected function get_sql_mode_query( $assoc_args, $modes = [] ) {
1783
1792
1784
1793
$ modes = array_change_key_case ( $ modes , CASE_UPPER );
1785
1794
1795
+ $ is_mode_adaptation_needed = false ;
1786
1796
foreach ( $ modes as $ i => $ mode ) {
1787
1797
if ( in_array ( $ mode , $ this ->sql_incompatible_modes , true ) ) {
1788
1798
unset( $ modes [ $ i ] );
1799
+ $ is_mode_adaptation_needed = true ;
1789
1800
}
1790
1801
}
1791
1802
1803
+ if ( ! $ is_mode_adaptation_needed ) {
1804
+ WP_CLI ::debug (
1805
+ sprintf (
1806
+ 'SQL modes look fine: %s ' ,
1807
+ json_encode ( $ modes )
1808
+ )
1809
+ );
1810
+ return '' ;
1811
+ }
1812
+
1813
+ WP_CLI ::debug (
1814
+ sprintf (
1815
+ 'SQL mode adaptation is needed: %s => %s ' ,
1816
+ json_encode ( $ this ->get_current_sql_modes ( $ assoc_args ) ),
1817
+ json_encode ( $ modes )
1818
+ )
1819
+ );
1820
+
1792
1821
$ modes_str = implode ( ', ' , $ modes );
1793
1822
1794
1823
return "SET SESSION sql_mode=' {$ modes_str }'; " ;
@@ -1803,9 +1832,18 @@ protected function get_sql_mode_query( $assoc_args, $modes = [] ) {
1803
1832
protected function get_current_sql_modes ( $ assoc_args ) {
1804
1833
static $ modes = null ;
1805
1834
1806
- // Make sure the provided argument don't interfere with the expected
1835
+ // Make sure the provided arguments don't interfere with the expected
1807
1836
// output here.
1808
- unset( $ assoc_args ['column-names ' ], $ assoc_args ['html ' ] );
1837
+ $ args = $ assoc_args ;
1838
+ unset(
1839
+ $ args ['column-names ' ],
1840
+ $ args ['result-format ' ],
1841
+ $ args ['json ' ],
1842
+ $ args ['html ' ],
1843
+ $ args ['table ' ],
1844
+ $ args ['tabbed ' ],
1845
+ $ args ['vertical ' ]
1846
+ );
1809
1847
1810
1848
if ( null === $ modes ) {
1811
1849
$ modes = [];
@@ -1815,7 +1853,7 @@ protected function get_current_sql_modes( $assoc_args ) {
1815
1853
'/usr/bin/env mysql%s --no-auto-rehash --batch --skip-column-names ' ,
1816
1854
$ this ->get_defaults_flag_string ( $ assoc_args )
1817
1855
),
1818
- array_merge ( $ assoc_args , [ 'execute ' => 'SELECT @@SESSION.sql_mode ' ] ),
1856
+ array_merge ( $ args , [ 'execute ' => 'SELECT @@SESSION.sql_mode ' ] ),
1819
1857
false
1820
1858
);
1821
1859
@@ -1831,7 +1869,7 @@ protected function get_current_sql_modes( $assoc_args ) {
1831
1869
$ modes = array_filter (
1832
1870
array_map (
1833
1871
'trim ' ,
1834
- preg_split ( "/ \r\n| \n| \r/ " , $ stdout )
1872
+ preg_split ( "/ \r\n| \n| \r|, / " , $ stdout )
1835
1873
)
1836
1874
);
1837
1875
}
0 commit comments