Skip to content

Parsing insert queries with functions trims commas #450

Closed
@gachowy

Description

@gachowy

Hello,

I discovered that there could be something wrong with parsing commas in MySQL functions like concat or replace.

When I'm trying to parse, and fetch values, or rebuild INSERT queries, which contains some concat, or replace, it 'eats' all commas, which makes output queries as invalid.

Sample parsed queries:

INSERT INTO `some_table` VALUES (replace('something_camel_case','_', ''));
INSERT INTO `some_table` VALUES (concat('value1', 'value2', 'value3'));

Output queries:

INSERT INTO `some_table` VALUES (replace('something_camel_case''_' ''));
INSERT INTO `some_table` VALUES (concat('value1' 'value2' 'value3'));

Version: 5.7.0
PHP: 8.2.6

Code example:

<?php

use PhpMyAdmin\SqlParser\Parser;
use PhpMyAdmin\SqlParser\Statements\InsertStatement;

require_once __DIR__ . '/vendor/autoload.php';

$inputQueries = "
INSERT INTO `some_table` VALUES (replace('something_camel_case','_', ''));
INSERT INTO `some_table` VALUES (concat('value1', 'value2', 'value3'));
";

$parser = new Parser($inputQueries);

foreach ($parser->statements as $statement) {
    if ($statement instanceof InsertStatement) {
        var_dump($statement->values[0]->raw[0]);
    }
    var_dump($statement->build());
}

Metadata

Metadata

Assignees

Labels

Type

No type

Projects

No projects

Milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions