mirror of
https://github.com/postgres/postgres.git
synced 2025-08-27 07:42:10 +03:00
Allow forcing nullness of columns during bootstrap.
Bootstrap determines whether a column is null based on simple builtin rules. Those work surprisingly well, but nonetheless a few existing columns aren't set correctly. Additionally there is at least one patch sent to hackers where forcing the nullness of a column would be helpful. The boostrap format has gained FORCE [NOT] NULL for this, which will be emitted by genbki.pl when BKI_FORCE_(NOT_)?NULL is specified for a column in a catalog header. This patch doesn't change the marking of any existing columns. Discussion: 20150215170014.GE15326@awork2.anarazel.de
This commit is contained in:
@@ -107,7 +107,7 @@ static int num_columns_read = 0;
|
||||
%type <list> boot_index_params
|
||||
%type <ielem> boot_index_param
|
||||
%type <str> boot_const boot_ident
|
||||
%type <ival> optbootstrap optsharedrelation optwithoutoids
|
||||
%type <ival> optbootstrap optsharedrelation optwithoutoids boot_column_nullness
|
||||
%type <oidval> oidspec optoideq optrowtypeoid
|
||||
|
||||
%token <str> CONST_P ID
|
||||
@@ -115,6 +115,7 @@ static int num_columns_read = 0;
|
||||
%token XDECLARE INDEX ON USING XBUILD INDICES UNIQUE XTOAST
|
||||
%token COMMA EQUALS LPAREN RPAREN
|
||||
%token OBJ_ID XBOOTSTRAP XSHARED_RELATION XWITHOUT_OIDS XROWTYPE_OID NULLVAL
|
||||
%token XFORCE XNOT XNULL
|
||||
|
||||
%start TopLevel
|
||||
|
||||
@@ -427,14 +428,20 @@ boot_column_list:
|
||||
;
|
||||
|
||||
boot_column_def:
|
||||
boot_ident EQUALS boot_ident
|
||||
boot_ident EQUALS boot_ident boot_column_nullness
|
||||
{
|
||||
if (++numattr > MAXATTR)
|
||||
elog(FATAL, "too many columns");
|
||||
DefineAttr($1, $3, numattr-1);
|
||||
DefineAttr($1, $3, numattr-1, $4);
|
||||
}
|
||||
;
|
||||
|
||||
boot_column_nullness:
|
||||
XFORCE XNOT XNULL { $$ = BOOTCOL_NULL_FORCE_NOT_NULL; }
|
||||
| XFORCE XNULL { $$ = BOOTCOL_NULL_FORCE_NULL; }
|
||||
| { $$ = BOOTCOL_NULL_AUTO; }
|
||||
;
|
||||
|
||||
oidspec:
|
||||
boot_ident { $$ = atooid($1); }
|
||||
;
|
||||
|
Reference in New Issue
Block a user