Re: Add support for AT LOCAL

Vik Fearing <vik@postgresfriends.org>

From: Vik Fearing <vik@postgresfriends.org>
To: Michael Paquier <michael@paquier.xyz>
Cc: cary huang <hcary328@gmail.com>, pgsql-hackers@lists.postgresql.org
Date: 2023-10-04T14:49:03Z
Lists: pgsql-hackers

Attachments

On 9/29/23 09:27, Michael Paquier wrote:
> On Sat, Sep 23, 2023 at 12:54:01AM +0200, Vik Fearing wrote:
>> On 9/22/23 23:46, cary huang wrote:
>>> I think this feature can be a useful addition in dealing with time
>>> zones. I have applied and tried out the patch, The feature works as
>>> described and seems promising. The problem with compilation failure
>>> was probably reported on CirrusCI when compiled on different
>>> platforms. I have run the latest patch on my own Cirrus CI environment
>>> and everything checked out fine.
>>
>> Thank you for reviewing!
> 
> +            | a_expr AT LOCAL                        %prec AT
> +                {
> +                    /* Use the value of the session's time zone */
> +                    FuncCall *tz = makeFuncCall(SystemFuncName("current_setting"),
> +                                                list_make1(makeStringConst("TimeZone", -1)),
> +                                                COERCE_SQL_SYNTAX,
> +                                                -1);
> +                    $$ = (Node *) makeFuncCall(SystemFuncName("timezone"),
> +                                               list_make2(tz, $1),
> +                                               COERCE_SQL_SYNTAX,
> +                                               @2);
> 
> As the deparsing code introduced by this patch is showing, this leads
> to a lot of extra complexity.  And, actually, this can be quite
> expensive as well with these two layers of functions.  Note also that
> in comparison to SQLValueFunctions, COERCE_SQL_SYNTAX does less
> inlining.  So here comes my question: why doesn't this stuff just use
> one underlying function to do this job?

Okay.  Here is a v3 using that approach.
-- 
Vik Fearing

Commits

  1. Dodge a compiler bug affecting timetz_zone/timetz_izone.

  2. Back-patch test cases for timetz_zone/timetz_izone.

  3. Add regression test coverage for timetz_izone().

  4. Add support for AT LOCAL

  5. doc: Mention timezone(zone, time) in section for AT TIME ZONE

  6. Use HASH_BLOBS for xidhash.