]> granicus.if.org Git - postgresql/commitdiff
Add makefile rules to check for backtracking in backend and psql lexers.
authorTom Lane <tgl@sss.pgh.pa.us>
Thu, 25 Aug 2011 18:44:17 +0000 (14:44 -0400)
committerTom Lane <tgl@sss.pgh.pa.us>
Thu, 25 Aug 2011 18:44:17 +0000 (14:44 -0400)
Per discussion, we should enforce the policy of "no backtracking" in these
performance-sensitive scanners.

src/backend/parser/Makefile
src/backend/parser/scan.l
src/bin/psql/Makefile

index 665250b9e760b80ae4d7f7da9d6fd306fd32b783..0bdb3249a2e963aee87cdc4821a693225ff8b459 100644 (file)
@@ -17,7 +17,7 @@ OBJS= analyze.o gram.o keywords.o kwlookup.o parser.o \
       parse_expr.o parse_func.o parse_node.o parse_oper.o parse_param.o \
       parse_relation.o parse_target.o parse_type.o parse_utilcmd.o scansup.o
 
-FLEXFLAGS = -CF
+FLEXFLAGS = -CF -b -p -p
 
 include $(top_srcdir)/src/backend/common.mk
 
@@ -51,6 +51,7 @@ endif
 scan.c: scan.l
 ifdef FLEX
        $(FLEX) $(FLEXFLAGS) -o'$@' $<
+       @if [ `wc -l <lex.backup` -eq 1 ]; then rm lex.backup; else echo "Scanner requires backup, see lex.backup."; exit 1; fi
 else
        @$(missing) flex $< $@
 endif
@@ -62,3 +63,5 @@ gram.o keywords.o parser.o: gram.h
 
 # gram.c, gram.h, and scan.c are in the distribution tarball, so they
 # are not cleaned here.
+clean distclean maintainer-clean:
+       rm -f lex.backup
index 4f9af543d6831fe9e73bc3a8b3ab7ec17e9897c3..12db1900a0b686297a9a50b6e361b08f8fa3a2d8 100644 (file)
@@ -17,7 +17,8 @@
  * for handling float numbers and continued string literals.  If you change
  * the lexical rules, verify that you haven't broken the no-backtrack
  * property by running flex with the "-b" option and checking that the
- * resulting "lex.backup" file says that no backing up is needed.
+ * resulting "lex.backup" file says that no backing up is needed.  (As of
+ * Postgres 9.2, this check is made automatically by the Makefile.)
  *
  *
  * Portions Copyright (c) 1996-2011, PostgreSQL Global Development Group
index ce990ce08a5eece0b532c0e4b97a8641219ebfff..c0219c023cf358ed67edf4fa11445a68a7e0c661 100644 (file)
@@ -26,7 +26,7 @@ OBJS= command.o common.o help.o input.o stringutils.o mainloop.o copy.o \
        sql_help.o \
        $(WIN32RES)
 
-FLEXFLAGS = -Cfe
+FLEXFLAGS = -Cfe -b -p -p
 
 
 all: psql
@@ -52,6 +52,7 @@ mainloop.o: psqlscan.c
 psqlscan.c: psqlscan.l
 ifdef FLEX
        $(FLEX) $(FLEXFLAGS) -o'$@' $<
+       @if [ `wc -l <lex.backup` -eq 1 ]; then rm lex.backup; else echo "Scanner requires backup, see lex.backup."; exit 1; fi
 else
        @$(missing) flex $< $@
 endif
@@ -70,7 +71,7 @@ uninstall:
 
 # psqlscan.c is in the distribution tarball, so is not cleaned here
 clean distclean:
-       rm -f psql$(X) $(OBJS) dumputils.c keywords.c kwlookup.c
+       rm -f psql$(X) $(OBJS) dumputils.c keywords.c kwlookup.c lex.backup
 
 maintainer-clean: distclean
        rm -f sql_help.h sql_help.c psqlscan.c