0006-Temporary-fix-for-collation-20241105.patch

application/x-patch

Filename: 0006-Temporary-fix-for-collation-20241105.patch
Type: application/x-patch
Part: 5
Message: Re: SQL Property Graph Queries (SQL/PGQ)

Patch

Same data as JSON: GET /api/v1/attachments/:id/patch the parsed metadata as JSON — format, series position, per-file stats; never the diff bytes. API reference →
Format: format-patch
Series: patch 0006
Subject: Temporary fix for collation
File+
src/backend/rewrite/rewriteGraphTable.c 12 3
From d98ce62e39dab622c546a6294ad45d3f0312817e Mon Sep 17 00:00:00 2001
From: Ashutosh Bapat <ashutosh.bapat.oss@gmail.com>
Date: Mon, 28 Oct 2024 16:36:27 +0530
Subject: [PATCH 7/8] Temporary fix for collation

The equality operator on string operands requires collation. Supply it.
This temporary fix is required for some queries added for RLS testing.

A better fix is to use FK/PK style quals. We will work on it next.

Author: Ashutosh Bapat
---
 src/backend/rewrite/rewriteGraphTable.c | 15 ++++++++++++---
 1 file changed, 12 insertions(+), 3 deletions(-)

diff --git a/src/backend/rewrite/rewriteGraphTable.c b/src/backend/rewrite/rewriteGraphTable.c
index 9c14fa3b1b7..326e35da150 100644
--- a/src/backend/rewrite/rewriteGraphTable.c
+++ b/src/backend/rewrite/rewriteGraphTable.c
@@ -1150,23 +1150,32 @@ build_edge_vertex_link_quals(HeapTuple edgetup, int edgerti, int refrti, AttrNum
 	{
 		AttrNumber	keyattn = DatumGetInt16(d1[i]);
 		AttrNumber	refattn = DatumGetInt16(d2[i]);
+		Var		   *keyvar;
+		Var		   *refvar;
 		Oid			atttypid;
+		int32		atttypmod;
+		Oid			attcoll;
 		TypeCacheEntry *typentry;
 		OpExpr	   *op;
 
+		get_atttypetypmodcoll(pgeform->pgerelid, keyattn, &atttypid, &atttypmod, &attcoll);
+		keyvar = makeVar(edgerti, keyattn, atttypid, atttypmod, attcoll, 0);
+
 		/*
 		 * TODO: Assumes types the same on both sides; no collations yet. Some
 		 * of this could probably be shared with foreign key triggers.
 		 */
-		atttypid = get_atttype(pgeform->pgerelid, keyattn);
+		/* get_atttypetypmodcoll(, refattn, &atttypid, &atttypmod, &attcoll); */
+		refvar = makeVar(refrti, refattn, atttypid, atttypmod, attcoll, 0);
+
 		typentry = lookup_type_cache(atttypid, TYPECACHE_EQ_OPR);
 
 		op = makeNode(OpExpr);
 		op->location = -1;
 		op->opno = typentry->eq_opr;
+		op->inputcollid = attcoll;
 		op->opresulttype = BOOLOID;
-		op->args = list_make2(makeVar(edgerti, keyattn, atttypid, -1, 0, 0),
-							  makeVar(refrti, refattn, atttypid, -1, 0, 0));
+		op->args = list_make2(keyvar, refvar);
 		quals = lappend(quals, op);
 	}
 
-- 
2.34.1