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

解析Postgresql的like查询语句异常 #5822

Closed
jiayfer opened this issue Apr 1, 2024 · 1 comment
Closed

解析Postgresql的like查询语句异常 #5822

jiayfer opened this issue Apr 1, 2024 · 1 comment

Comments

@jiayfer
Copy link

jiayfer commented Apr 1, 2024

Postgresql的sql解析失败,应该和like中的COLLATE 有关。

duird version: 1.2.22
sql:
SELECT id FROM a_product WHERE a_product.tenant_id=123 AND (tenant_id=123 AND del_flg=0 AND (product_name COLLATE "C" ILIKE '%70%' AND (INDEPENDENT_PRODUCT=1 AND ((1711942157815>=START_DATE AND 1711942157815< END_DATE) OR (START_DATE IS NULL AND END_DATE IS NULL) OR (START_DATE IS NULL AND 1711942157815< END_DATE) OR (1711942157815>=START_DATE AND END_DATE IS NULL))) AND id IN (SELECT dbc_relation_2 FROM p_custom_data_408 WHERE p_custom_data_408.tenant_id=123 AND (TENANT_ID=123 AND dbc_relation_1=1706133096090917 AND DELETE_FLG=0 AND dbc_select_2=1)) AND (((EXISTS (SELECT id FROM b_entity_checkbox pickvalue WHERE pickvalue.tenant_id=123 AND (a_product.id=pickvalue.object_id AND item_id=1776944933031192 AND option_code IN (1))) AND 1=1) OR (EXISTS (SELECT id FROM b_entity_checkbox pickvalue WHERE pickvalue.tenant_id=123 AND (a_product.id=pickvalue.object_id AND item_id=1776944933031192 AND option_code IN (2))) AND id=-999999999)) AND dbc_varchar_16='FERT') AND 1=1)) ORDER BY product_name,created_at DESC,id DESC LIMIT 20

代码:
List sqlStatements = SQLUtils.parseStatements(sql, JdbcConstants.POSTGRESQL);

异常信息:
com.alibaba.druid.sql.parser.ParserException: syntax error, expect ), actual IDENTIFIER pos 139, line 1, column 133, token IDENTIFIER COLLATE
at com.alibaba.druid.sql.parser.SQLExprParser.accept(SQLExprParser.java:4668)
at com.alibaba.druid.sql.parser.SQLExprParser.primary(SQLExprParser.java:394)
at com.alibaba.druid.sql.dialect.postgresql.parser.PGExprParser.primary(PGExprParser.java:163)
at com.alibaba.druid.sql.parser.SQLExprParser.bitXor(SQLExprParser.java:153)
at com.alibaba.druid.sql.parser.SQLExprParser.multiplicative(SQLExprParser.java:255)
at com.alibaba.druid.sql.parser.SQLExprParser.additive(SQLExprParser.java:3304)
at com.alibaba.druid.sql.parser.SQLExprParser.shift(SQLExprParser.java:3350)
at com.alibaba.druid.sql.parser.SQLExprParser.bitAnd(SQLExprParser.java:3076)
at com.alibaba.druid.sql.parser.SQLExprParser.bitOr(SQLExprParser.java:3095)
at com.alibaba.druid.sql.parser.SQLExprParser.relational(SQLExprParser.java:3591)
at com.alibaba.druid.sql.parser.SQLExprParser.andRest(SQLExprParser.java:3442)
at com.alibaba.druid.sql.parser.SQLExprParser.expr(SQLExprParser.java:117)
at com.alibaba.druid.sql.parser.SQLExprParser.primary(SQLExprParser.java:369)
at com.alibaba.druid.sql.dialect.postgresql.parser.PGExprParser.primary(PGExprParser.java:163)
at com.alibaba.druid.sql.parser.SQLExprParser.bitXor(SQLExprParser.java:153)
at com.alibaba.druid.sql.parser.SQLExprParser.multiplicative(SQLExprParser.java:255)
at com.alibaba.druid.sql.parser.SQLExprParser.additive(SQLExprParser.java:3304)
at com.alibaba.druid.sql.parser.SQLExprParser.shift(SQLExprParser.java:3350)
at com.alibaba.druid.sql.parser.SQLExprParser.bitAnd(SQLExprParser.java:3076)
at com.alibaba.druid.sql.parser.SQLExprParser.bitOr(SQLExprParser.java:3095)
at com.alibaba.druid.sql.parser.SQLExprParser.relational(SQLExprParser.java:3591)
at com.alibaba.druid.sql.parser.SQLExprParser.andRest(SQLExprParser.java:3442)
at com.alibaba.druid.sql.parser.SQLSelectParser.parseWhere(SQLSelectParser.java:710)
at com.alibaba.druid.sql.dialect.postgresql.parser.PGSelectParser.query(PGSelectParser.java:131)

lizongbo added a commit to lizongbo/druid that referenced this issue May 4, 2024
lizongbo added a commit that referenced this issue May 4, 2024
优化增强解析collate信息 #5822
@lizongbo
Copy link
Collaborator

lizongbo commented May 4, 2024

原来缺少解析collate的逻辑,现在补齐了,等出了1.2.23再验证

@lizongbo lizongbo closed this as completed May 4, 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