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]

Reply via email to