diff options
author | Tom Lane | 2011-08-25 18:44:17 +0000 |
---|---|---|
committer | Tom Lane | 2011-08-25 18:44:17 +0000 |
commit | ecf248737a4c0705bf7d79fdd52b5271618f7103 (patch) | |
tree | 0800695b14b94748696a5f152520ccba39ff32ed | |
parent | 77ce50a40364a3605f775d3f0efca2e1caa70291 (diff) |
Add makefile rules to check for backtracking in backend and psql lexers.
Per discussion, we should enforce the policy of "no backtracking" in these
performance-sensitive scanners.
-rw-r--r-- | src/backend/parser/Makefile | 5 | ||||
-rw-r--r-- | src/backend/parser/scan.l | 3 | ||||
-rw-r--r-- | src/bin/psql/Makefile | 5 |
3 files changed, 9 insertions, 4 deletions
diff --git a/src/backend/parser/Makefile b/src/backend/parser/Makefile index 665250b9e7..0bdb3249a2 100644 --- a/src/backend/parser/Makefile +++ b/src/backend/parser/Makefile @@ -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 diff --git a/src/backend/parser/scan.l b/src/backend/parser/scan.l index 4f9af543d6..12db1900a0 100644 --- a/src/backend/parser/scan.l +++ b/src/backend/parser/scan.l @@ -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 diff --git a/src/bin/psql/Makefile b/src/bin/psql/Makefile index ce990ce08a..c0219c023c 100644 --- a/src/bin/psql/Makefile +++ b/src/bin/psql/Makefile @@ -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 |