neosync icon indicating copy to clipboard operation
neosync copied to clipboard

Bug: MySQL WHERE clause column qualification fails when column is on right side of comparison operator.

Open kmirzavaziri opened this issue 9 months ago • 2 comments

Bug description

MySQL WHERE clause column qualification fails when the column is on the right side of a comparison operator. This causes the query to be generated incorrectly as the table alias is not properly added to the column name.

For example, with the WHERE clause 100 > user_id, the generated query incorrectly shows:

WHERE 100 > user_id

Instead of the correct:

WHERE 100 > t_09a0eed1cbbe07ca.user_id

This only affects MySQL queries. PostgreSQL queries work correctly regardless of column position.

How to reproduce

  1. Use MySQL driver with a query having a WHERE clause
  2. Put the column name on the right side of comparison (e.g., 100 > user_id)
  3. Run the query builder
  4. Observe that the generated query has unqualified column name

Minimal reproduction test:

func Test_BuildQuery_MySQLColumnQualification(t *testing.T) {
    t.Run("mysql column on right", func(t *testing.T) {
        assert.Equal(t,
            "SELECT `orders`.`order_id`, `orders`.`user_id` FROM `public`.`orders` AS `orders` INNER JOIN `public`.`users` AS `t_09a0eed1cbbe07ca` ON (`t_09a0eed1cbbe07ca`.`user_id` = `orders`.`user_id`) WHERE 100 > t_09a0eed1cbbe07ca.user_id ORDER BY `orders`.`order_id` ASC",
            buildOrdersUsersSubsettingQuery(t, "100 > user_id", sqlmanager_shared.MysqlDriver),
        )
    })
}

Environment

  • MySQL driver
  • Go version: latest
  • OS: any

Additional context

  • Only affects MySQL queries
  • Only happens when column is on right side of comparison
  • PostgreSQL queries work correctly in all cases due to different AST traversal approach

kmirzavaziri avatar Apr 18 '25 08:04 kmirzavaziri

I've submitted a PR to fix this issue: #3495

cc @nickzelei @evisdrenova

kmirzavaziri avatar Apr 18 '25 08:04 kmirzavaziri

Thanks! Will review!

evisdrenova avatar Apr 18 '25 18:04 evisdrenova