Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

where中 table_name.column_name in (?,?)无法解析表达式 #214

Closed
gfreezy opened this issue Jan 4, 2017 · 3 comments
Closed

where中 table_name.column_name in (?,?)无法解析表达式 #214

gfreezy opened this issue Jan 4, 2017 · 3 comments

Comments

@gfreezy
Copy link
Contributor

gfreezy commented Jan 4, 2017

select * from tbl where tbl.id in (?, ?) 里面的 tbl.id in (?, ) tbl 没有被解析出来。

日志如下

Logic SQL: SELECT board.id, board.author_id, board.title, board.description, board.accessibility, board.create_time, board.update_time FROM board WHERE board.id IN (?, ?), [23524622263648256, 23524622263648256]
2017-01-04 22:25:28.646 DEBUG 4234 --- [nio-8080-exec-1] c.d.d.r.sharding.parser.SQLParseEngine   : Parsed SQL result: SQLParsedResult(routeContext=RouteContext(tables=[Table(name=board, alias=Optional.absent())], sqlStatementType=null, sqlBuilder=null), generatedKeyContext=GeneratedKeyContext(columns=[], columnNameToIndexMap={}, valueTable={}, rowIndex=0, columnIndex=0, autoGeneratedKeys=0, columnIndexes=null, columnNames=null), conditionContexts=[ConditionContext(conditions={Condition.Column(columnName=id, tableName=board)=Condition(column=Condition.Column(columnName=id, tableName=board), operator=IN, values=[23524622263648256, 23524622263648256], valueIndices=[0, 1])})], mergeContext=MergeContext(orderByColumns=[], groupByColumns=[], aggregationColumns=[], limit=null))
2017-01-04 22:25:28.648 DEBUG 4234 --- [nio-8080-exec-1] c.d.d.r.sharding.parser.SQLParseEngine   : Parsed SQL: SELECT [Token(board)].id, [Token(board)].author_id, [Token(board)].title, [Token(board)].description, [Token(board)].accessibility , [Token(board)].create_time, [Token(board)].update_time FROM [Token(board)] WHERE board.id IN (?, ?)
2017-01-04 22:25:28.651 DEBUG 4234 --- [nio-8080-exec-1] c.d.d.r.s.r.single.SingleTableRouter     : Before database sharding board routes db names: [ds_0, ds_1] sharding columns: [id] sharding values: [ShardingValue(logicTableName=board, columnName=id, value=null, values=[23524622263648256, 23524622263648256], valueRange=null)]
2017-01-04 22:25:28.654 DEBUG 4234 --- [nio-8080-exec-1] c.d.d.r.s.r.single.SingleTableRouter     : After database sharding board result: [ds_0]
2017-01-04 22:25:28.654 DEBUG 4234 --- [nio-8080-exec-1] c.d.d.r.s.r.single.SingleTableRouter     : Before table sharding board routes db names: [DataNode(dataSourceName=ds_0, tableName=board_0002), DataNode(dataSourceName=ds_1, tableName=board_0002), DataNode(dataSourceName=ds_0, tableName=board_0000), DataNode(dataSourceName=ds_1, tableName=board_0000), DataNode(dataSourceName=ds_0, tableName=board_0001), DataNode(dataSourceName=ds_1, tableName=board_0001)] sharding columns: [id] sharding values: [ShardingValue(logicTableName=board, columnName=id, value=null, values=[23524622263648256, 23524622263648256], valueRange=null)]
2017-01-04 22:25:28.654 DEBUG 4234 --- [nio-8080-exec-1] c.d.d.r.s.r.single.SingleTableRouter     : After table sharding board result: [board_0001]
2017-01-04 22:25:28.659 DEBUG 4234 --- [nio-8080-exec-1] c.d.d.r.sharding.router.SQLRouteEngine   : final route result is 1 target
2017-01-04 22:25:28.659 DEBUG 4234 --- [nio-8080-exec-1] c.d.d.r.sharding.router.SQLRouteEngine   : ds_0:SELECT board_0001.id, board_0001.author_id, board_0001.title, board_0001.description, board_0001.accessibility , board_0001.create_time, board_0001.update_time FROM board_0001 WHERE board.id IN (?, ?) [23524622263648256, 23524622263648256]
2017-01-04 22:25:28.659 DEBUG 4234 --- [nio-8080-exec-1] c.d.d.r.sharding.router.SQLRouteEngine   : merge context:MergeContext(orderByColumns=[], groupByColumns=[], aggregationColumns=[], limit=null)
@hanahmily hanahmily changed the title select * from tbl where tbl.id in (?, ?) 没有正确解析 where中 table_name.column_name in (?,?)无法解析表达式 Jan 5, 2017
@hanahmily
Copy link
Contributor

    public final boolean visit(final SQLPropertyExpr x) {
        //对于in表达式,它的parent是null,所以没有解析出来。
        if (!(x.getParent() instanceof SQLBinaryOpExpr) && !(x.getParent() instanceof SQLSelectItem)) {
            return super.visit(x);
        }
        if (!(x.getOwner() instanceof SQLIdentifierExpr)) {
            return super.visit(x);
        }
        String tableOrAliasName = ((SQLIdentifierExpr) x.getOwner()).getLowerName();
        if (getParseContext().isBinaryOperateWithAlias(x, tableOrAliasName)) {
            return super.visit(x);
        }
        printToken(tableOrAliasName);
        print(".");
        print(x.getName());
        return false;
    }

@gfreezy
Copy link
Contributor Author

gfreezy commented Jan 7, 2017

应该怎么修,可以大概解释下吗,我可以来改

@gfreezy
Copy link
Contributor Author

gfreezy commented Jan 7, 2017

druid 新版本已经修复了这个bug,可以将 sjdbc 的 druid 依赖升级吗

alibaba/druid@3cf7cdf

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

2 participants