Skip to content

Commit aa36063

Browse files
committed
fix
1 parent edb4c98 commit aa36063

1 file changed

Lines changed: 29 additions & 3 deletions

File tree

wp-includes/sqlite-ast/class-wp-pdo-mysql-on-sqlite.php

Lines changed: 29 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4872,9 +4872,35 @@ function ( $column ) use ( $is_strict_mode, $insert_map ) {
48724872
// Wrap the original insert VALUES, SELECT, or SET list in a FROM clause.
48734873
if ( 'insertFromConstructor' === $node->rule_name ) {
48744874
// VALUES (...)
4875-
$from = $this->translate(
4876-
$node->get_first_child_node( 'insertValues' )
4877-
);
4875+
$insert_values = $node->get_first_child_node( 'insertValues' );
4876+
$from = $this->translate( $insert_values );
4877+
4878+
/**
4879+
* The automatic "columnN" naming for VALUES lists is supported only
4880+
* from SQLite 3.33.0. For older versions, we need to emulate it by
4881+
* prepending a dummy VALUES list header via the UNION ALL operator:
4882+
*
4883+
* SELECT
4884+
* NULL AS `column1`, NULL AS `column2`, ... WHERE FALSE
4885+
* UNION ALL
4886+
* VALUES (value1, value2, ...)
4887+
*/
4888+
$is_values_naming_supported = version_compare( $this->get_sqlite_version(), '3.33.0', '>=' );
4889+
if ( ! $is_values_naming_supported ) {
4890+
$values_list = $insert_values->get_first_child_node( 'valueList' );
4891+
$values = $values_list->get_first_child_node( 'values' );
4892+
$value_count = (
4893+
count( $values->get_child_nodes( 'expr' ) )
4894+
+ count( $values->get_child_nodes( WP_MySQL_Lexer::DEFAULT_SYMBOL ) )
4895+
);
4896+
4897+
$columns_list = '';
4898+
for ( $i = 1; $i <= $value_count; $i++ ) {
4899+
$columns_list .= $i > 1 ? ', ' : '';
4900+
$columns_list .= 'NULL AS ' . $this->quote_sqlite_identifier( 'column' . $i );
4901+
}
4902+
$from = 'SELECT ' . $columns_list . ' WHERE FALSE UNION ALL ' . $from;
4903+
}
48784904
} elseif ( 'insertQueryExpression' === $node->rule_name ) {
48794905
// SELECT ...
48804906
$from = $this->translate(

0 commit comments

Comments
 (0)