diff options
Diffstat (limited to 'src/backend/bootstrap/bootscanner.l')
-rw-r--r-- | src/backend/bootstrap/bootscanner.l | 60 |
1 files changed, 33 insertions, 27 deletions
diff --git a/src/backend/bootstrap/bootscanner.l b/src/backend/bootstrap/bootscanner.l index 3094ccb93f4..d6eae84816b 100644 --- a/src/backend/bootstrap/bootscanner.l +++ b/src/backend/bootstrap/bootscanner.l @@ -1,4 +1,4 @@ -%{ +%top{ /*------------------------------------------------------------------------- * * bootscanner.l @@ -15,11 +15,17 @@ */ #include "postgres.h" +/* + * NB: include bootparse.h only AFTER including bootstrap.h, because bootstrap.h + * includes node definitions needed for YYSTYPE. + */ #include "bootstrap/bootstrap.h" +#include "bootparse.h" #include "utils/guc.h" -/* Not needed now that this file is compiled as part of bootparse. */ -/* #include "bootparse.h" */ +} + +%{ /* LCOV_EXCL_START */ @@ -52,7 +58,7 @@ id [-A-Za-z0-9_]+ sid \'([^']|\'\')*\' /* - * Keyword tokens return the keyword text (as a constant string) in yylval.kw, + * Keyword tokens return the keyword text (as a constant string) in boot_yylval.kw, * just in case that's needed because we want to treat the keyword as an * unreserved identifier. Note that _null_ is not treated as a keyword * for this purpose; it's the one "reserved word" in the bootstrap syntax. @@ -60,23 +66,23 @@ sid \'([^']|\'\')*\' * Notice that all the keywords are case-sensitive, and for historical * reasons some must be upper case. * - * String tokens return a palloc'd string in yylval.str. + * String tokens return a palloc'd string in boot_yylval.str. */ %% -open { yylval.kw = "open"; return OPEN; } +open { boot_yylval.kw = "open"; return OPEN; } -close { yylval.kw = "close"; return XCLOSE; } +close { boot_yylval.kw = "close"; return XCLOSE; } -create { yylval.kw = "create"; return XCREATE; } +create { boot_yylval.kw = "create"; return XCREATE; } -OID { yylval.kw = "OID"; return OBJ_ID; } -bootstrap { yylval.kw = "bootstrap"; return XBOOTSTRAP; } -shared_relation { yylval.kw = "shared_relation"; return XSHARED_RELATION; } -rowtype_oid { yylval.kw = "rowtype_oid"; return XROWTYPE_OID; } +OID { boot_yylval.kw = "OID"; return OBJ_ID; } +bootstrap { boot_yylval.kw = "bootstrap"; return XBOOTSTRAP; } +shared_relation { boot_yylval.kw = "shared_relation"; return XSHARED_RELATION; } +rowtype_oid { boot_yylval.kw = "rowtype_oid"; return XROWTYPE_OID; } -insert { yylval.kw = "insert"; return INSERT_TUPLE; } +insert { boot_yylval.kw = "insert"; return INSERT_TUPLE; } _null_ { return NULLVAL; } @@ -90,25 +96,25 @@ _null_ { return NULLVAL; } ^\#[^\n]* ; /* drop everything after "#" for comments */ -declare { yylval.kw = "declare"; return XDECLARE; } -build { yylval.kw = "build"; return XBUILD; } -indices { yylval.kw = "indices"; return INDICES; } -unique { yylval.kw = "unique"; return UNIQUE; } -index { yylval.kw = "index"; return INDEX; } -on { yylval.kw = "on"; return ON; } -using { yylval.kw = "using"; return USING; } -toast { yylval.kw = "toast"; return XTOAST; } -FORCE { yylval.kw = "FORCE"; return XFORCE; } -NOT { yylval.kw = "NOT"; return XNOT; } -NULL { yylval.kw = "NULL"; return XNULL; } +declare { boot_yylval.kw = "declare"; return XDECLARE; } +build { boot_yylval.kw = "build"; return XBUILD; } +indices { boot_yylval.kw = "indices"; return INDICES; } +unique { boot_yylval.kw = "unique"; return UNIQUE; } +index { boot_yylval.kw = "index"; return INDEX; } +on { boot_yylval.kw = "on"; return ON; } +using { boot_yylval.kw = "using"; return USING; } +toast { boot_yylval.kw = "toast"; return XTOAST; } +FORCE { boot_yylval.kw = "FORCE"; return XFORCE; } +NOT { boot_yylval.kw = "NOT"; return XNOT; } +NULL { boot_yylval.kw = "NULL"; return XNULL; } {id} { - yylval.str = pstrdup(yytext); + boot_yylval.str = pstrdup(yytext); return ID; } {sid} { /* strip quotes and escapes */ - yylval.str = DeescapeQuotedString(yytext); + boot_yylval.str = DeescapeQuotedString(yytext); return ID; } @@ -121,7 +127,7 @@ NULL { yylval.kw = "NULL"; return XNULL; } /* LCOV_EXCL_STOP */ void -yyerror(const char *message) +boot_yyerror(const char *message) { elog(ERROR, "%s at line %d", message, yyline); } |