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

Fix support for orderByPosition (ORDER BY 1 ASC/ORDER BY 1 DESC) #345

Closed j-angnoe closed 2 years ago

j-angnoe commented 2 years ago

Currently the PHPSQLCreator will ignore the Order direction when using a positional ORDER BY clause (i.e. ORDER BY 1 ASC, ORDER BY 3 DESC). The reason seems that the OrderBuilder reuses the PositionBuilder (which is also used in GROUP BY statements). This PositionBuilder does not take into account a position.

In SQL it is valid to use a positional order by and being able to sort ascending and descending, so I think this should be reflected by the PHPSQLCreator. That's why i've decided create a new OrderByPositionBuilder which does take into account the order direction. The orderbyposition test has also been updated to reflect this change.

j-angnoe commented 2 years ago

This is a duplicate of https://github.com/greenlion/PHP-SQL-Parser/pull/344, but this PR is from forked fix-order-direction to master instead of master->master.