greenlion / PHP-SQL-Parser

A pure PHP SQL (non validating) parser w/ focus on MySQL dialect of SQL
BSD 3-Clause "New" or "Revised" License
601 stars 156 forks source link

CURRENT_TIMESTAMP is detected as a reserved word an generate errors when used in JOIN clause #368

Open mvachette opened 1 year ago

mvachette commented 1 year ago

The following code will produce an error

$sql = "SELECT foo FROM barTable LEFT JOIN bazTable ON barTable.a = bazTable.a AND bazTable.d <= CURRENT_TIMESTAMP"; 

$parser = new PHPSQLParser();
$creator = new PHPSQLCreator();

$parser->parse($sql);

$creator->create($parser->parsed);

Error : PHPSQLParser\exceptions\UnableToCreateSQLException : unknown [expr_type] = reserved in "expression ref_clause" [6]

This is due to the fact that "CURRENT_TIMESTAMP" is not detected as a function.

I managed to solve this by adding "CURRENT_TIMESTAMP" to the list of functions in the PHPSQLParserConstants class. I will propose a PR with this fix.