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

对复杂sql使用SchemaStatVisitor获取Conditions不全信息 #5829

Closed
canglangX opened this issue Apr 8, 2024 · 1 comment
Closed

对复杂sql使用SchemaStatVisitor获取Conditions不全信息 #5829

canglangX opened this issue Apr 8, 2024 · 1 comment

Comments

@canglangX
Copy link

canglangX commented Apr 8, 2024

duird version: 1.2.22

1、复现代码:
import com.alibaba.druid.DbType;
import com.alibaba.druid.sql.SQLUtils;
import com.alibaba.druid.sql.ast.SQLStatement;
import com.alibaba.druid.sql.visitor.SchemaStatVisitor;
import com.alibaba.druid.util.JdbcConstants;

import java.util.List;

public class TestCondition {
public static void main(String[] args) {
String sql = "SELECT * FROM (SELECT id, org_id, NAME, age, phone, email, ( SELECT dep_name FROM dept WHERE dep_id = @depid ) FROM USER t \n" +
"WHERE t.is_delete = 0 AND t.id IN ( SELECT id FROM USER WHERE org_id = @orgid ) AND create_time>= @CreateTime AND age = @Age AND type IN @type AND state <> @State \n" +
"AND ( name = @name OR user_name = @name ) ) AS a \n" +
"WHERE a.org_id = @orgid AND id IN @id AND email LIKE '%@163.com' AND phone = @phone";
System.out.println(sql);
DbType dbType = JdbcConstants.MYSQL;
List stmtList = SQLUtils.parseStatements(sql, dbType);
SQLStatement stmt = stmtList.get(0);
SchemaStatVisitor statVisitor = SQLUtils.createSchemaStatVisitor(dbType);
stmt.accept(statVisitor);
System.out.println(statVisitor.getConditions());
}
}

问题:getConditions不包含sql结尾的email 、phone 等condition

@lizongbo
Copy link
Collaborator

lizongbo commented May 5, 2024

子查询嵌套太多,无法回溯找到字段所属表名,无法采集信息。

@lizongbo lizongbo closed this as completed May 5, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants