On Wed, May 31, 2023 5:41 PM shveta malik <shveta.ma...@gmail.com> wrote: > > On Mon, May 29, 2023 at 11:45 AM Yu Shi (Fujitsu) <shiy.f...@fujitsu.com> > wrote: > > > > 0008 patch > > ----- > > 4. > > case AT_AddColumn: > > /* XXX need to set the "recurse" bit > > somewhere? */ > > Assert(IsA(subcmd->def, ColumnDef)); > > - tree = deparse_ColumnDef(rel, dpcontext, > > false, > > - > > (ColumnDef *) subcmd->def, true, > &expr); > > > > mark_function_volatile(context, expr); > > > > After this change, `expr` is not assigned a value when > > mark_function_volatile is > called. > > > > Corrected. >
It looks the call to mark_function_volatile() is removed in this case. I think we still need it, otherwise we won't know if the command contains a volatile function. (see check_command_publishable().) > > 5. > > create table p1(f1 int); > > create table p1_c1() inherits(p1); > > alter table p1 add constraint inh_check_constraint1 check (f1 > 0); > > alter table p1_c1 add constraint inh_check_constraint1 check (f1 > 0); > > > > The re-formed command of the last command is "ALTER TABLE public.p1_c1", > which > > seems to be wrong. > > > > Fixed, second alter-table should actually be no-op in terms of > deparsing. But when it is run without running the first alter-table > command, it should generate the reformed command. > If the second alter-table is no-op in terms of deparsing, the dumped result of origin command and that of re-formed command will be different. This seems to be because `conislocal` column of pg_constraint has different values. (After the second alter-table, its value is changed from false to true.) Regards, Shi Yu