public inbox for [email protected]  
help / color / mirror / Atom feed
From: Tender Wang <[email protected]>
To: Alexander Korotkov <[email protected]>
Cc: Alexander Pyhalov <[email protected]>
Cc: Maxim Orlov <[email protected]>
Cc: [email protected]
Subject: Re: postgres_fdw could deparse ArrayCoerceExpr
Date: Fri, 18 Jul 2025 22:33:50 +0800
Message-ID: <CAHewXNn=_ykCtcTw5SCfZ-eVr4m+Cuc804rGeMsKuj=D4xpL4w@mail.gmail.com> (raw)
In-Reply-To: <CAPpHfdvYO92VgOjOKeejqoGavg5q3pcYB55C_n+2OkTs4m-71w@mail.gmail.com>
References: <[email protected]>
	<CACG=ezYRyy0quCUPAOze+zRA6qdndFbJ_pKDGVVHa+rZVv390w@mail.gmail.com>
	<[email protected]>
	<CACG=ezamc2JY7SkhfBMWsybf-O+nSPzK36cMcDg8yCjFWM3R0Q@mail.gmail.com>
	<CACG=ezYDjmTtVqKHxcMzq8KrnNV1sMTBuf1ZxLPx7jPKTKCoaw@mail.gmail.com>
	<CACG=ezZ5g=8nKHqdc-rJQNd31jJ1t_aLgWSDcFPNBMxfG4-KsA@mail.gmail.com>
	<CAPpHfdtoZNDzqm=n9tDFRtCrswJJ533zWmyZ_EZdqew+7EYxeQ@mail.gmail.com>
	<[email protected]>
	<CAPpHfdutHWetLMuhYnpfUZoqVnzRr_YyfwE2AzvJPQoK_B+vPQ@mail.gmail.com>
	<CAPpHfdvYO92VgOjOKeejqoGavg5q3pcYB55C_n+2OkTs4m-71w@mail.gmail.com>

Alexander Korotkov <[email protected]> 于2025年7月16日周三 05:56写道:

> On Wed, Jun 4, 2025 at 11:52 PM Alexander Korotkov <[email protected]>
> wrote:
> > On Wed, Jun 4, 2025 at 6:15 PM Alexander Pyhalov
> > <[email protected]> wrote:
> > > Alexander Korotkov писал(а) 2025-06-04 14:29:
> > > > On Wed, Jan 29, 2025 at 11:59 AM Maxim Orlov <[email protected]>
> wrote:
> > > >>
> > > >> One important note here. This patch will change cast behaviour in
> case
> > > >> of local and foreign types are mismatched.
> > > >> The problem is if we cannot convert types locally, this does not
> mean
> > > >> that it is also true for a foreign wrapped data.
> > > >> In any case, it's up to the committer to decide whether this change
> is
> > > >> needed or not.
> > > >
> > > > I have two question regarding this aspect.
> > > > 1) Is it the same with regular type conversion?
> > >
> > > Yes, it's the same.
> > >
> > > CREATE TYPE enum_of_int_like AS enum('1', '2', '3', '4');
> > > CREATE TABLE conversions(id int, d enum_of_int_like);
> > > CREATE FOREIGN TABLE ft_conversions (id int, d char(1))
> > > SERVER loopback options (table_name 'conversions');
> > > SET plan_cache_mode = force_generic_plan;
> > > PREPARE s(varchar) AS SELECT count(*) FROM ft_conversions where d=$1;
> > > EXPLAIN (VERBOSE, COSTS OFF)
> > > EXECUTE s('1');
> > >                                          QUERY PLAN
> > >
> -------------------------------------------------------------------------------------------
> > >   Foreign Scan
> > >     Output: (count(*))
> > >     Relations: Aggregate on (public.ft_conversions)
> > >     Remote SQL: SELECT count(*) FROM public.conversions WHERE ((d =
> > > $1::character varying))
> > > (4 rows)
> > >
> > > EXECUTE s('1');
> > > ERROR:  operator does not exist: public.enum_of_int_like = character
> > > varying
> > > HINT:  No operator matches the given name and argument types. You might
> > > need to add explicit type casts.
> > >
> > > > 2) Can we fallback to remote type conversion in local type conversion
> > > > fails?
> > >
> > > It's the opposite - we've already planned (and deparsed) statement,
> > > using remote type conversion.
> > > When plan execution fails, there's nothing we can do.
> > > We'll get
> > >
> > > PREPARE s(varchar[]) AS SELECT count(*) FROM ft_conversions where
> > > d=ANY($1);
> > > EXPLAIN (VERBOSE, COSTS OFF)
> > > EXECUTE s(ARRAY['1','2']);
> > >                                              QUERY PLAN
> > >
> ---------------------------------------------------------------------------------------------------
> > >   Foreign Scan
> > >     Output: (count(*))
> > >     Relations: Aggregate on (public.ft_conversions)
> > >     Remote SQL: SELECT count(*) FROM public.conversions WHERE ((d = ANY
> > > ($1::character varying[])))
> > > (4 rows)
> > >
> > > EXECUTE s(ARRAY['1','2']);
> > > ERROR:  operator does not exist: public.enum_of_int_like = character
> > > varying
> > > HINT:  No operator matches the given name and argument types. You might
> > > need to add explicit type casts.
> >
> > Got it, thank you for the explanation.  I thin it's fair that array
> > coercion works the same way as a regular cast.
>
> I've written a commit message for this patch.  I'm going to push this
> if no objections.
>

Hi Alexander,

I found a little typo in this commit. Other places use "an"
before  ArrayCoerceExpr.
To be consistent may be better. So, please take a look at the attached
patch.

-- 
Thanks,
Tender Wang

From f348498cf70e68cfdaf8df3a1bed66e6a0bb7f09 Mon Sep 17 00:00:00 2001
From: Tender Wang <[email protected]>
Date: Fri, 18 Jul 2025 22:26:56 +0800
Subject: [PATCH v1] Fix a typo.

---
 contrib/postgres_fdw/deparse.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/contrib/postgres_fdw/deparse.c b/contrib/postgres_fdw/deparse.c
index d761d076dc8..e5b5e1a5f51 100644
--- a/contrib/postgres_fdw/deparse.c
+++ b/contrib/postgres_fdw/deparse.c
@@ -3540,7 +3540,7 @@ deparseRelabelType(RelabelType *node, deparse_expr_cxt *context)
 }
 
 /*
- * Deparse a ArrayCoerceExpr (array-type conversion) node.
+ * Deparse an ArrayCoerceExpr (array-type conversion) node.
  */
 static void
 deparseArrayCoerceExpr(ArrayCoerceExpr *node, deparse_expr_cxt *context)
-- 
2.34.1



Attachments:

  [text/plain] v1-0001-Fix-a-typo.patch (782B, ../CAHewXNn=_ykCtcTw5SCfZ-eVr4m+Cuc804rGeMsKuj=D4xpL4w@mail.gmail.com/3-v1-0001-Fix-a-typo.patch)
  download | inline diff:
From f348498cf70e68cfdaf8df3a1bed66e6a0bb7f09 Mon Sep 17 00:00:00 2001
From: Tender Wang <[email protected]>
Date: Fri, 18 Jul 2025 22:26:56 +0800
Subject: [PATCH v1] Fix a typo.

---
 contrib/postgres_fdw/deparse.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/contrib/postgres_fdw/deparse.c b/contrib/postgres_fdw/deparse.c
index d761d076dc8..e5b5e1a5f51 100644
--- a/contrib/postgres_fdw/deparse.c
+++ b/contrib/postgres_fdw/deparse.c
@@ -3540,7 +3540,7 @@ deparseRelabelType(RelabelType *node, deparse_expr_cxt *context)
 }
 
 /*
- * Deparse a ArrayCoerceExpr (array-type conversion) node.
+ * Deparse an ArrayCoerceExpr (array-type conversion) node.
  */
 static void
 deparseArrayCoerceExpr(ArrayCoerceExpr *node, deparse_expr_cxt *context)
-- 
2.34.1



view thread (8+ messages)  latest in thread

reply

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Reply to all the recipients using the --to and --cc options:
  reply via email

  To: [email protected]
  Cc: [email protected], [email protected], [email protected], [email protected], [email protected]
  Subject: Re: postgres_fdw could deparse ArrayCoerceExpr
  In-Reply-To: <CAHewXNn=_ykCtcTw5SCfZ-eVr4m+Cuc804rGeMsKuj=D4xpL4w@mail.gmail.com>

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

This inbox is served by agora; see mirroring instructions
for how to clone and mirror all data and code used for this inbox