mirror of
				https://github.com/postgres/postgres.git
				synced 2025-11-03 09:13:20 +03:00 
			
		
		
		
	Treat timeline IDs as unsigned in replication parser
Timeline IDs are unsigned ints everywhere, except the replication parser treated them as signed ints.
This commit is contained in:
		@@ -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;
 | 
			
		||||
 
 | 
			
		||||
@@ -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}+		{
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user