From d9515de496725cf1d40f8db690296ab73abc5612 Mon Sep 17 00:00:00 2001 From: Dipesh Dhameliya Date: Fri, 31 Jan 2025 10:00:12 +0000 Subject: [PATCH 1/2] Fixed transformation of like node for ci_as collation --- contrib/babelfishpg_tsql/src/collation.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/contrib/babelfishpg_tsql/src/collation.c b/contrib/babelfishpg_tsql/src/collation.c index 1210aa93a44..1063090dc96 100644 --- a/contrib/babelfishpg_tsql/src/collation.c +++ b/contrib/babelfishpg_tsql/src/collation.c @@ -392,6 +392,7 @@ transform_from_ci_as_for_likenode(Node *node, OpExpr *op, like_ilike_info_t like } patt = (Const *) rightop; + patt->constcollid = op->inputcollid; /* extract pattern */ pstatus = pattern_fixed_prefix_wrapper(patt, 1, coll_info_of_inputcollid.oid, @@ -409,7 +410,7 @@ transform_from_ci_as_for_likenode(Node *node, OpExpr *op, like_ilike_info_t like if (pstatus == Pattern_Prefix_Exact) { op_str = like_entry.is_not_match ? "<>" : "="; - optup = compatible_oper(NULL, list_make1(makeString(op_str)), ltypeId, ltypeId, + optup = compatible_oper(NULL, list_make1(makeString(op_str)), ltypeId, rtypeId, true, -1); if (optup == (Operator) NULL) return node; @@ -429,7 +430,7 @@ transform_from_ci_as_for_likenode(Node *node, OpExpr *op, like_ilike_info_t like Const *highest_sort_key; /* construct leftop >= pattern */ - optup = compatible_oper(NULL, list_make1(makeString(">=")), ltypeId, ltypeId, + optup = compatible_oper(NULL, list_make1(makeString(">=")), ltypeId, rtypeId, true, -1); if (optup == (Operator) NULL) return node; @@ -450,7 +451,7 @@ transform_from_ci_as_for_likenode(Node *node, OpExpr *op, like_ilike_info_t like InvalidOid, coll_info_of_inputcollid.oid, oprfuncid(optup)); ReleaseSysCache(optup); /* construct leftop < pattern */ - optup = compatible_oper(NULL, list_make1(makeString("<")), ltypeId, ltypeId, + optup = compatible_oper(NULL, list_make1(makeString("<")), ltypeId, rtypeId, true, -1); if (optup == (Operator) NULL) return node; From 5fd4e45a2bd9064dc604a2c29c72874ad4860950 Mon Sep 17 00:00:00 2001 From: Dipesh Dhameliya Date: Fri, 31 Jan 2025 11:43:59 +0000 Subject: [PATCH 2/2] Fixed Collate expr appearing on left node --- contrib/babelfishpg_tsql/src/collation.c | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/contrib/babelfishpg_tsql/src/collation.c b/contrib/babelfishpg_tsql/src/collation.c index 1063090dc96..1d3bdeb1c95 100644 --- a/contrib/babelfishpg_tsql/src/collation.c +++ b/contrib/babelfishpg_tsql/src/collation.c @@ -394,6 +394,12 @@ transform_from_ci_as_for_likenode(Node *node, OpExpr *op, like_ilike_info_t like patt = (Const *) rightop; patt->constcollid = op->inputcollid; + /* we also want left operand to match this expected cs_as collation */ + if (IsA(linitial(op->args), CollateExpr)) + { + ((CollateExpr *) linitial(op->args))->collOid = op->inputcollid; + } + /* extract pattern */ pstatus = pattern_fixed_prefix_wrapper(patt, 1, coll_info_of_inputcollid.oid, &prefix, NULL); @@ -439,7 +445,7 @@ transform_from_ci_as_for_likenode(Node *node, OpExpr *op, like_ilike_info_t like InvalidOid, coll_info_of_inputcollid.oid, oprfuncid(optup)); ReleaseSysCache(optup); /* construct pattern||E'\uFFFF' */ - highest_sort_key = makeConst(TEXTOID, -1, coll_info_of_inputcollid.oid, -1, + highest_sort_key = makeConst(TEXTOID, -1, DEFAULT_COLLATION_OID, -1, PointerGetDatum(cstring_to_text(SORT_KEY_STR)), false, false); optup = compatible_oper(NULL, list_make1(makeString("||")), rtypeId, rtypeId, @@ -448,7 +454,7 @@ transform_from_ci_as_for_likenode(Node *node, OpExpr *op, like_ilike_info_t like return node; concat_expr = make_op_with_func(oprid(optup), rtypeId, false, (Expr *) prefix, (Expr *) highest_sort_key, - InvalidOid, coll_info_of_inputcollid.oid, oprfuncid(optup)); + DEFAULT_COLLATION_OID, DEFAULT_COLLATION_OID, oprfuncid(optup)); ReleaseSysCache(optup); /* construct leftop < pattern */ optup = compatible_oper(NULL, list_make1(makeString("<")), ltypeId, rtypeId,