summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTom Lane2011-08-25 18:44:17 +0000
committerTom Lane2011-08-25 18:44:17 +0000
commitecf248737a4c0705bf7d79fdd52b5271618f7103 (patch)
tree0800695b14b94748696a5f152520ccba39ff32ed
parent77ce50a40364a3605f775d3f0efca2e1caa70291 (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/Makefile5
-rw-r--r--src/backend/parser/scan.l3
-rw-r--r--src/bin/psql/Makefile5
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