[prev in list] [next in list] [prev in thread] [next in thread]
List: postgresql-general
Subject: Re: [GENERAL] Comments with embedded single quotes
From: Bruce Momjian <pgman () candle ! pha ! pa ! us>
Date: 2000-06-30 17:51:51
[Download RAW message or body]
[ Charset ISO-8859-1 unsupported, converting... ]
> Bruce Momjian writes:
>
> > OK, here is the patch. The problem was that quotes were being checked
> > before checking if we were in a comment. Patch applied to current tree
> > only.
>
> Nope, now we have the inverse problem. Try
>
> SELECT 'aa--bb';
>
> The timestamp test is now failing because of this.
OK, new patch. I also renamed xcomment to in_xcomment. The important
point, now commented, is that we have to test if we are in quote or an
xcomment before testing for the start of quotes or xcomments.
--
Bruce Momjian | http://www.op.net/~candle
pgman@candle.pha.pa.us | (610) 853-3000
+ If your life is a hard drive, | 830 Blythe Avenue
+ Christ can be your backup. | Drexel Hill, Pennsylvania 19026
["/bjm/diff" (/bjm/diff)]
? config.log
? config.cache
? config.status
? GNUmakefile
? src/GNUmakefile
? src/Makefile.global
? src/log
? src/Makefile.custom
? src/crtags
? src/backend/postgres
? src/backend/catalog/genbki.sh
? src/backend/catalog/global1.bki.source
? src/backend/catalog/global1.description
? src/backend/catalog/local1_template1.bki.source
? src/backend/catalog/local1_template1.description
? src/backend/port/Makefile
? src/backend/utils/Gen_fmgrtab.sh
? src/bin/initdb/initdb
? src/bin/initlocation/initlocation
? src/bin/ipcclean/ipcclean
? src/bin/pg_ctl/pg_ctl
? src/bin/pg_dump/Makefile
? src/bin/pg_dump/pg_dump
? src/bin/pg_id/pg_id
? src/bin/pg_passwd/pg_passwd
? src/bin/pg_version/Makefile
? src/bin/pg_version/pg_version
? src/bin/pgaccess/pgaccess
? src/bin/pgtclsh/mkMakefile.tcldefs.sh
? src/bin/pgtclsh/mkMakefile.tkdefs.sh
? src/bin/pgtclsh/pgtclsh
? src/bin/pgtclsh/Makefile.tkdefs
? src/bin/pgtclsh/Makefile.tcldefs
? src/bin/pgtclsh/pgtksh
? src/bin/psql/psql
? src/bin/psql/Makefile
? src/bin/scripts/createlang
? src/include/version.h
? src/include/config.h
? src/include/parser/parse.h
? src/include/utils/fmgroids.h
? src/interfaces/Makefile
? src/interfaces/ecpg/lib/Makefile
? src/interfaces/ecpg/lib/libecpg.so.3.1.1
? src/interfaces/ecpg/preproc/Makefile
? src/interfaces/ecpg/preproc/ecpg
? src/interfaces/libpgeasy/Makefile
? src/interfaces/libpgeasy/libpgeasy.so.2.1
? src/interfaces/libpgtcl/Makefile
? src/interfaces/libpgtcl/libpgtcl.so.2.1
? src/interfaces/libpq/Makefile
? src/interfaces/libpq/libpq.so.2.1
? src/interfaces/libpq++/Makefile
? src/interfaces/odbc/GNUmakefile
? src/interfaces/perl5/GNUmakefile
? src/interfaces/python/GNUmakefile
? src/pl/Makefile
? src/pl/plperl/GNUmakefile
? src/pl/plpgsql/src/Makefile
? src/pl/plpgsql/src/mklang.sql
? src/pl/plpgsql/src/libplpgsql.so.1.0
? src/pl/tcl/mkMakefile.tcldefs.sh
? src/pl/tcl/Makefile.tcldefs
? src/test/regress/GNUmakefile
Index: src/bin/psql/mainloop.c
===================================================================
RCS file: /home/projects/pgsql/cvsroot/pgsql/src/bin/psql/mainloop.c,v
retrieving revision 1.31
diff -c -r1.31 mainloop.c
*** src/bin/psql/mainloop.c 2000/06/29 16:27:57 1.31
--- src/bin/psql/mainloop.c 2000/06/30 18:02:06
***************
*** 44,50 ****
bool success;
volatile char in_quote; /* == 0 for no in_quote */
! volatile bool xcomment; /* in extended comment */
volatile int paren_level;
unsigned int query_start;
volatile int count_eof = 0;
--- 44,50 ----
bool success;
volatile char in_quote; /* == 0 for no in_quote */
! volatile bool in_xcomment; /* in extended comment */
volatile int paren_level;
unsigned int query_start;
volatile int count_eof = 0;
***************
*** 80,86 ****
exit(EXIT_FAILURE);
}
! xcomment = false;
in_quote = 0;
paren_level = 0;
slashCmdStatus = CMD_UNKNOWN; /* set default */
--- 80,86 ----
exit(EXIT_FAILURE);
}
! in_xcomment = false;
in_quote = 0;
paren_level = 0;
slashCmdStatus = CMD_UNKNOWN; /* set default */
***************
*** 123,129 ****
resetPQExpBuffer(query_buf);
/* reset parsing state */
! xcomment = false;
in_quote = 0;
paren_level = 0;
count_eof = 0;
--- 123,129 ----
resetPQExpBuffer(query_buf);
/* reset parsing state */
! in_xcomment = false;
in_quote = 0;
paren_level = 0;
count_eof = 0;
***************
*** 147,153 ****
line = xstrdup(query_buf->data);
resetPQExpBuffer(query_buf);
/* reset parsing state since we are rescanning whole line */
! xcomment = false;
in_quote = 0;
paren_level = 0;
slashCmdStatus = CMD_UNKNOWN;
--- 147,153 ----
line = xstrdup(query_buf->data);
resetPQExpBuffer(query_buf);
/* reset parsing state since we are rescanning whole line */
! in_xcomment = false;
in_quote = 0;
paren_level = 0;
slashCmdStatus = CMD_UNKNOWN;
***************
*** 168,174 ****
prompt_status = PROMPT_SINGLEQUOTE;
else if (in_quote && in_quote == '"')
prompt_status = PROMPT_DOUBLEQUOTE;
! else if (xcomment)
prompt_status = PROMPT_COMMENT;
else if (paren_level)
prompt_status = PROMPT_PAREN;
--- 168,174 ----
prompt_status = PROMPT_SINGLEQUOTE;
else if (in_quote && in_quote == '"')
prompt_status = PROMPT_DOUBLEQUOTE;
! else if (in_xcomment)
prompt_status = PROMPT_COMMENT;
else if (paren_level)
prompt_status = PROMPT_PAREN;
***************
*** 296,337 ****
bslash_count = 0;
rescan:
! /* start of extended comment? */
! if (line[i] == '/' && line[i + thislen] == '*')
{
! xcomment = true;
! ADVANCE_1;
}
/* in extended comment? */
! else if (xcomment)
{
if (line[i] == '*' && line[i + thislen] == '/')
{
! xcomment = false;
ADVANCE_1;
}
}
-
- /* single-line comment? truncate line */
- else if (line[i] == '-' && line[i + thislen] == '-')
- {
- line[i] = '\0'; /* remove comment */
- break;
- }
! /* in quote? */
! else if (in_quote)
{
! /* end of quote */
! if (line[i] == in_quote && bslash_count % 2 == 0)
! in_quote = '\0';
}
/* start of quote */
else if (!was_bslash &&
(line[i] == '\'' || line[i] == '"'))
in_quote = line[i];
/* count nested parentheses */
else if (line[i] == '(')
--- 296,345 ----
bslash_count = 0;
rescan:
! /*
! * It is important to place the in_* test routines
! * before the in_* detection routines.
! * i.e. we have to test if we are in a quote before
! * testing for comments. bjm 2000-06-30
! */
!
! /* in quote? */
! if (in_quote)
{
! /* end of quote */
! if (line[i] == in_quote && bslash_count % 2 == 0)
! in_quote = '\0';
}
/* in extended comment? */
! else if (in_xcomment)
{
if (line[i] == '*' && line[i + thislen] == '/')
{
! in_xcomment = false;
ADVANCE_1;
}
}
! /* start of extended comment? */
! else if (line[i] == '/' && line[i + thislen] == '*')
{
! in_xcomment = true;
! ADVANCE_1;
}
/* start of quote */
else if (!was_bslash &&
(line[i] == '\'' || line[i] == '"'))
in_quote = line[i];
+
+
+ /* single-line comment? truncate line */
+ else if (line[i] == '-' && line[i + thislen] == '-')
+ {
+ line[i] = '\0'; /* remove comment */
+ break;
+ }
/* count nested parentheses */
else if (line[i] == '(')
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic