Skip to content

[BUG] pgsql order by 中COLLATE子句会丢失 #6573

@iQiFengLe

Description

@iQiFengLe

Database Type

postgresql

Database Version

postgresql 15

Druid Version

1.2.21

JDK Version

OpenJDK 8

Error SQL

sql例子:
修改前: SELECT "md"."nodeName","md"."formId","md"."ownerType",CASE WHEN ((CASE WHEN (jsonb_path_exists("md"."dynamicData",?::jsonpath)) THEN 1 ELSE 0 END) = ? OR upper(jsonb_typeof("md"."dynamicData" #> ?::text[])) = ?) THEN ? ELSE "md"."dynamicData" #>> ?::text[] END AS "supportPositionCols","md"."addTime","md"."addUserId","md"."lastUpdateUserId","md"."ownerId",CASE WHEN ((CASE WHEN (jsonb_path_exists("md"."dynamicData",?::jsonpath)) THEN 1 ELSE 0 END) = ? OR upper(jsonb_typeof("md"."dynamicData" #> ?::text[])) = ?) THEN ? ELSE "md"."dynamicData" #>> ?::text[] END AS "title",CASE WHEN ((CASE WHEN (jsonb_path_exists("md"."dynamicData",?::jsonpath)) THEN 1 ELSE 0 END) = ? OR upper(jsonb_typeof("md"."dynamicData" #> ?::text[])) = ?) THEN ? ELSE "md"."dynamicData" #>> ?::text[] END AS "field1jcr8g98m","md"."dataId","md"."appId",CASE WHEN ((CASE WHEN (jsonb_path_exists("md"."dynamicData",?::jsonpath)) THEN 1 ELSE 0 END) = ? OR upper(jsonb_typeof("md"."dynamicData" #> ?::text[])) = ?) THEN ? ELSE "md"."dynamicData" #>> ?::text[] END AS "field1jcr8aulu",CASE WHEN ((CASE WHEN (jsonb_path_exists("md"."dynamicData",?::jsonpath)) THEN 1 ELSE 0 END) = ? OR upper(jsonb_typeof("md"."dynamicData" #> ?::text[])) = ?) THEN ? ELSE "md"."dynamicData" #>> ?::text[] END AS "field1jcr8avk4","md"."flowStatus","md"."nodeId","md"."lastUpdateTime" FROM form_data_rows AS md WHERE "md"."appId" = ? AND "md"."formId" = ? ORDER BY (CASE WHEN ((CASE WHEN (jsonb_path_exists("md"."dynamicData",?::jsonpath)) THEN 1 ELSE 0 END) = ? OR upper(jsonb_typeof("md"."dynamicData" #> ?::text[])) = ?) THEN ? ELSE "md"."dynamicData" #>> ?::text[] END)::text COLLATE "zh-Hans-x-icu" DESC LIMIT ?

修改后: SELECT "md"."nodeName", "md"."formId", "md"."ownerType"
, CASE
WHEN CASE
WHEN jsonb_path_exists("md"."dynamicData", ?::jsonpath) THEN 1
ELSE 0
END = ?
OR upper(jsonb_typeof("md"."dynamicData" #> ?::text[])) = ?
THEN ?
ELSE "md"."dynamicData" #>> ?::text[]
END AS "supportPositionCols", "md"."addTime", "md"."addUserId", "md"."lastUpdateUserId", "md"."ownerId"
, CASE
WHEN CASE
WHEN jsonb_path_exists("md"."dynamicData", ?::jsonpath) THEN 1
ELSE 0
END = ?
OR upper(jsonb_typeof("md"."dynamicData" #> ?::text[])) = ?
THEN ?
ELSE "md"."dynamicData" #>> ?::text[]
END AS "title"
, CASE
WHEN CASE
WHEN jsonb_path_exists("md"."dynamicData", ?::jsonpath) THEN 1
ELSE 0
END = ?
OR upper(jsonb_typeof("md"."dynamicData" #> ?::text[])) = ?
THEN ?
ELSE "md"."dynamicData" #>> ?::text[]
END AS "field1jcr8g98m", "md"."dataId", "md"."appId"
, CASE
WHEN CASE
WHEN jsonb_path_exists("md"."dynamicData", ?::jsonpath) THEN 1
ELSE 0
END = ?
OR upper(jsonb_typeof("md"."dynamicData" #> ?::text[])) = ?
THEN ?
ELSE "md"."dynamicData" #>> ?::text[]
END AS "field1jcr8aulu"
, CASE
WHEN CASE
WHEN jsonb_path_exists("md"."dynamicData", ?::jsonpath) THEN 1
ELSE 0
END = ?
OR upper(jsonb_typeof("md"."dynamicData" #> ?::text[])) = ?
THEN ?
ELSE "md"."dynamicData" #>> ?::text[]
END AS "field1jcr8avk4", "md"."flowStatus", "md"."nodeId", "md"."lastUpdateTime"
FROM form_data_rows md
WHERE "md"."appId" = ?
AND "md"."formId" = ?
AND ("md"."ownerType" = ?
AND "md"."ownerId" = ?
AND "md"."isDeleted" = 0)
ORDER BY CASE
WHEN CASE
WHEN jsonb_path_exists("md"."dynamicData", ?::jsonpath) THEN 1
ELSE 0
END = ?
OR upper(jsonb_typeof("md"."dynamicData" #> ?::text[])) = ?
THEN ?
ELSE "md"."dynamicData" #>> ?::text[]
END::text DESC
LIMIT ?

无执行错误,只是从SQLStatement 到sql发生语句丢失
debug了下从sql到 SQLStatement 后order by items 中的COLLATE 就丢失了

Testcase Code

No response

Stacktrace Info

No response

Error Info

No response

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions