thswlsqls opened a new issue, #39100: URL: https://github.com/apache/shardingsphere/issues/39100
## Bug Report ### Which version of ShardingSphere did you use? master @ a14fa59423c ### Which project did you use? ShardingSphere-JDBC or ShardingSphere-Proxy? Both (kernel-level SQL binder) ### Expected behavior On SQL Server, a real column named `ROWNUM` (or `ROWNUM_`, `ROW_NUMBER`) is bound as a column so it resolves to its owner table. ### Actual behavior `ColumnSegmentBinder.isUnparenthesizedFunction()` treats such an identifier as a niladic function and skips column binding, producing wrong bind output. ### Reason analyze (If you can) `SQLServerFunctionOption.getUnparenthesizedFunctionNames()` (database/connector/dialect/sqlserver/.../metadata/database/option/SQLServerFunctionOption.java line 32) lists `ROWNUM`, `ROWNUM_`, `ROW_NUMBER`. These are Oracle pseudo-columns; SQL Server has no `ROWNUM`/`ROWNUM_`, and `ROW_NUMBER` always requires `()` + `OVER`. Only Oracle among the sibling dialects legitimately keeps them. A maintainer TODO on line 31 already flagged their removal. The set is consumed by `ColumnSegmentBinder.isUnparenthesizedFunction()` (infra/binder/core/.../expression/type/ColumnSegmentBinder.java line 141-143), which skips binding for any identifier in the set. ### Steps to reproduce the behavior, such as: SQL to execute, sharding rule configuration, when exception occur etc. Bind `SELECT ROWNUM FROM t` against a SQL Server table `t` having a `ROWNUM` column; the column is not bound to `t`. ### Example codes for reproduce this issue (such as a github link). N/A -- This is an automated message from the Apache Git Service. To respond to the message, please log on to GitHub and use the URL above to go to the specific comment. To unsubscribe, e-mail: [email protected] For queries about this service, please contact Infrastructure at: [email protected]
