Escape patch applied - Mailing list pgsql-patches
From | Bruce Momjian |
---|---|
Subject | Escape patch applied |
Date | |
Msg-id | 200506260324.j5Q3O2Y09878@candle.pha.pa.us Whole thread Raw |
Responses |
Re: Escape patch applied
|
List | pgsql-patches |
I have applied the E'' escape patch to CVS head. I am attaching a smaller version that doesn't have the escape_string_warning GUC and none of the adjustments to our code to use E''. I am thinking I should apply this to 8.0.X and 7.4.X? OK? Earlier versions? -- Bruce Momjian | http://candle.pha.pa.us pgman@candle.pha.pa.us | (610) 359-1001 + If your life is a hard drive, | 13 Roberts Road + Christ can be your backup. | Newtown Square, Pennsylvania 19073 Index: doc/src/sgml/runtime.sgml =================================================================== RCS file: /cvsroot/pgsql/doc/src/sgml/runtime.sgml,v retrieving revision 1.301.4.7 diff -c -c -r1.301.4.7 runtime.sgml *** doc/src/sgml/runtime.sgml 17 Jun 2005 16:46:45 -0000 1.301.4.7 --- doc/src/sgml/runtime.sgml 26 Jun 2005 03:19:52 -0000 *************** *** 3767,3772 **** --- 3767,3803 ---- </listitem> </varlistentry> + <varlistentry id="guc-escape-string-syntax" xreflabel="escape_string_syntax"> + <term><varname>escape_string_syntax</varname> (<type>boolean</type>)</term> + <indexterm><primary>strings</><secondary>escape</></> + <indexterm> + <primary><varname>escape_string_syntax</> configuration parameter</primary> + </indexterm> + <listitem> + <para> + Reports whether escape string syntax (<literal>E''</>) is + supported. This variable is used by applications that need to + determine if escape string syntax can be used in their code. + </para> + </listitem> + </varlistentry> + + <varlistentry id="guc-sql-standard-strings" xreflabel="standard_compliant_strings"> + <term><varname>standard_compliant_strings</varname> (<type>boolean</type>)</term> + <indexterm><primary>strings</><secondary>escape</></> + <indexterm> + <primary><varname>standard_compliant_strings</> configuration parameter</primary> + </indexterm> + <listitem> + <para> + Reports whether ordinary, non-escape syntax strings + (<literal>''</>) treat backslashes literally, as specified in + the SQL standard. This variable is used by applications that + need to know how ordinary strings are processed`. + </para> + </listitem> + </varlistentry> + </variablelist> </sect2> Index: doc/src/sgml/syntax.sgml =================================================================== RCS file: /cvsroot/pgsql/doc/src/sgml/syntax.sgml,v retrieving revision 1.99 diff -c -c -r1.99 syntax.sgml *** doc/src/sgml/syntax.sgml 23 Dec 2004 05:37:40 -0000 1.99 --- doc/src/sgml/syntax.sgml 26 Jun 2005 03:19:53 -0000 *************** *** 247,255 **** write two adjacent single quotes, e.g. <literal>'Dianne''s horse'</literal>. <productname>PostgreSQL</productname> also allows single quotes ! to be escaped with a backslash (<literal>\</literal>), so for ! example the same string could be written ! <literal>'Dianne\'s horse'</literal>. </para> <para> --- 247,256 ---- write two adjacent single quotes, e.g. <literal>'Dianne''s horse'</literal>. <productname>PostgreSQL</productname> also allows single quotes ! to be escaped with a backslash (<literal>\'</literal>). However, ! future versions of <productname>PostgreSQL</productname> will not ! support this so applications using this should convert to the ! standard-compliant method outlined above. </para> <para> *************** *** 267,272 **** --- 268,287 ---- string constant, write two backslashes. </para> + <note> + <para> + While ordinary strings now support C-style backslash escapes, + future versions will generate warnings for such usage and + eventually treat backslashes as literal characters to be + standard-compliant. The proper way to specify escape processing is + to use the escape string syntax to indicate that escape + processing is desired. Escape string syntax is specified by placing + the the letter <literal>E</literal> (upper or lower case) before + the string, e.g. <literal>E'\041'</>. This method will work in all + future versions of <productname>PostgreSQL</productname>. + </para> + </note> + <para> The character with the code zero cannot be in a string constant. </para> Index: src/backend/parser/scan.l =================================================================== RCS file: /cvsroot/pgsql/src/backend/parser/scan.l,v retrieving revision 1.119 diff -c -c -r1.119 scan.l *** src/backend/parser/scan.l 31 Dec 2004 22:00:27 -0000 1.119 --- src/backend/parser/scan.l 26 Jun 2005 03:19:54 -0000 *************** *** 167,173 **** * xqcat allows strings to cross input lines */ quote ' ! xqstart {quote} xqstop {quote} xqdouble {quote}{quote} xqinside [^\\']+ --- 167,173 ---- * xqcat allows strings to cross input lines */ quote ' ! xqstart [eE]?{quote} xqstop {quote} xqdouble {quote}{quote} xqinside [^\\']+ Index: src/backend/utils/misc/guc.c =================================================================== RCS file: /cvsroot/pgsql/src/backend/utils/misc/guc.c,v retrieving revision 1.252.4.1 diff -c -c -r1.252.4.1 guc.c *** src/backend/utils/misc/guc.c 25 Mar 2005 16:17:38 -0000 1.252.4.1 --- src/backend/utils/misc/guc.c 26 Jun 2005 03:19:57 -0000 *************** *** 185,190 **** --- 185,192 ---- static int max_identifier_length; static int block_size; static bool integer_datetimes; + static bool escape_string_syntax; + static bool standard_compliant_strings; /* should be static, but commands/variable.c needs to get at it */ char *session_authorization_string; *************** *** 851,856 **** --- 853,878 ---- #endif }, + { + {"escape_string_syntax", PGC_INTERNAL, PRESET_OPTIONS, + gettext_noop("Escape string syntax (E'') is supported."), + NULL, + GUC_REPORT | GUC_NOT_IN_SAMPLE | GUC_DISALLOW_IN_FILE + }, + &escape_string_syntax, + true, NULL, NULL + }, + + { + {"standard_compliant_strings", PGC_INTERNAL, PRESET_OPTIONS, + gettext_noop("'' strings treat backslashes literally."), + NULL, + GUC_REPORT | GUC_NOT_IN_SAMPLE | GUC_DISALLOW_IN_FILE + }, + &standard_compliant_strings, + false, NULL, NULL + }, + /* End-of-list marker */ { {NULL, 0, 0, NULL, NULL}, NULL, false, NULL, NULL
pgsql-patches by date: