Re: ECPG bug: "unterminated quoted identifier"

From: 1250kv <1250kv(at)gmail(dot)com>
To: Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us>
Cc: PostgreSQL mailing lists <pgsql-bugs(at)lists(dot)postgresql(dot)org>
Subject: Re: ECPG bug: "unterminated quoted identifier"
Date: 2020-10-20 22:51:09
Message-ID: CA+4qtLdi58jvzOacFTWBySF2gQcuC6JOMhh+cX0K=K53sq0aFw@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-bugs

>>You can't use C literal syntax inside a SQL code
>>segment, whether or not the command would work otherwise.
I have come across cases in which there is a need to use nested double
quotes inside C string literal.
This is necessary for correct access to database objects whose names
contain uppercase characters.

CREATE FUNCTION "My_Func"(IN p_i INTEGER)
RETURNS INTEGER
AS
$BODY$
BEGIN
RETURN p_i + 1;
END;
$BODY$
LANGUAGE plpgsql;

int main()
{
EXEC SQL int i;

EXEC SQL EXECUTE IMMEDIATE "DO $$\n\
BEGIN\n\
:i := embeddedc.\"My_Func\"(:i);\n\
END\n\
$$";

return 0;
}

Result: ERROR: syntax error at or near "My_Func"

I have discovered another workaround (in addition to what I showed
earlier): \" could be replaced with \x22.

However, I believe that this is a bug in the ECPG lexical analyzer.

On Tue, Oct 20, 2020 at 11:10 PM Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us> wrote:

> 1250kv <1250kv(at)gmail(dot)com> writes:
> > EXEC SQL char *bar = foo;
>
> I think it's pure luck that that doesn't throw an error.
> You should not be using the EXEC SQL prefix for something
> that isn't a SQL command.
>
> Anyway, the problem you're hitting here is that as soon as you
> say EXEC SQL, the syntax rules for quoted strings change.
> This is not well documented, and I think it's got some bugs
> in itself [1], but "EXEC SQL char *bar = "aaa\"bbb";" is just
> wrong. You can't use C literal syntax inside a SQL code
> segment, whether or not the command would work otherwise.
>
> regards, tom lane
>
> [1]
> https://www.postgresql.org/message-id/673825.1603223178%40sss.pgh.pa.us
>

In response to

Responses

Browse pgsql-bugs by date

  From Date Subject
Next Message Andres Freund 2020-10-21 00:45:02 Re: PostgresSQL 10 | Driver 42.2.5 | Float Conversion Issue
Previous Message Tom Lane 2020-10-20 20:10:10 Re: ECPG bug: "unterminated quoted identifier"