diff options
author | Peter Eisentraut <peter_e@gmx.net> | 2013-08-14 23:18:49 -0400 |
---|---|---|
committer | Peter Eisentraut <peter_e@gmx.net> | 2013-08-14 23:18:49 -0400 |
commit | 229fb58d4ff6fc4cd61fc5045edeb25f7fc4800e (patch) | |
tree | 8de60b3542beeb11110db0085756c435db87331d | |
parent | 32f7c0ae1725031e8ed3620e06e94007a171d6d5 (diff) |
Treat timeline IDs as unsigned in replication parser
Timeline IDs are unsigned ints everywhere, except the replication parser
treated them as signed ints.
-rw-r--r-- | src/backend/replication/repl_gram.y | 14 | ||||
-rw-r--r-- | src/backend/replication/repl_scanner.l | 4 |
2 files changed, 9 insertions, 9 deletions
diff --git a/src/backend/replication/repl_gram.y b/src/backend/replication/repl_gram.y index bce18b84767..8c8378045e6 100644 --- a/src/backend/replication/repl_gram.y +++ b/src/backend/replication/repl_gram.y @@ -56,7 +56,7 @@ Node *replication_parse_result; %union { char *str; bool boolval; - int32 intval; + uint32 uintval; XLogRecPtr recptr; Node *node; @@ -66,7 +66,7 @@ Node *replication_parse_result; /* Non-keyword tokens */ %token <str> SCONST -%token <intval> ICONST +%token <uintval> UCONST %token <recptr> RECPTR /* Keyword tokens. */ @@ -85,7 +85,7 @@ Node *replication_parse_result; %type <node> base_backup start_replication identify_system timeline_history %type <list> base_backup_opt_list %type <defelt> base_backup_opt -%type <intval> opt_timeline +%type <uintval> opt_timeline %% firstcmd: command opt_semicolon @@ -175,12 +175,12 @@ start_replication: ; opt_timeline: - K_TIMELINE ICONST + K_TIMELINE UCONST { if ($2 <= 0) ereport(ERROR, (errcode(ERRCODE_SYNTAX_ERROR), - (errmsg("invalid timeline %d", $2)))); + (errmsg("invalid timeline %u", $2)))); $$ = $2; } | /* nothing */ { $$ = 0; } @@ -190,14 +190,14 @@ opt_timeline: * TIMELINE_HISTORY %d */ timeline_history: - K_TIMELINE_HISTORY ICONST + K_TIMELINE_HISTORY UCONST { TimeLineHistoryCmd *cmd; if ($2 <= 0) ereport(ERROR, (errcode(ERRCODE_SYNTAX_ERROR), - (errmsg("invalid timeline %d", $2)))); + (errmsg("invalid timeline %u", $2)))); cmd = makeNode(TimeLineHistoryCmd); cmd->timeline = $2; diff --git a/src/backend/replication/repl_scanner.l b/src/backend/replication/repl_scanner.l index b4743e6357d..3d930f13012 100644 --- a/src/backend/replication/repl_scanner.l +++ b/src/backend/replication/repl_scanner.l @@ -83,8 +83,8 @@ TIMELINE_HISTORY { return K_TIMELINE_HISTORY; } " " ; {digit}+ { - yylval.intval = pg_atoi(yytext, sizeof(int32), 0); - return ICONST; + yylval.uintval = strtoul(yytext, NULL, 10); + return UCONST; } {hexdigit}+\/{hexdigit}+ { |