Thread

Commits

  1. More code review for get_qual_for_list().

  1. fix side-effect in get_qual_for_list()

    Jeevan Ladhe <jeevan.ladhe@enterprisedb.com> — 2017-05-25T19:12:14Z

    Hi,
    
    While working on one of the crash reported on default partition for list
    partitioning table[1] I found some strange behavior in get_qual_for_list()
    while
    I tried to call it from the new code I wrote for default partition.
    
    After debugging, I noticed that the function get_qual_for_list() is
    implicitly
    manipulating the (PartitionBoundSpec) spec->listdatums list. AFAICU, this
    manipulation is needed just to construct a list of datums to be passed to
    ArrayExpr, and this should be done without manipulating the original list.
    The function name is get_qual_for_list(), which implies that this function
    returns something and does not modify anything.
    
    I have made this change in attached patch, as I think this is useful for
    future
    developments, as there may be a need in future to call get_qual_for_list()
    from
    other places, and the caller might not expect that PartitionBoundSpec gets
    modified.
    
    PFA.
    
    [1] *https://www.postgresql.org/message-id/flat/CAOgcT0PLPge%3D5U6%3DGU5SnC3_8yutCbWWOiUva3Cw94M9zpbvgQ%40mail.gmail.com
    <https://www.postgresql.org/message-id/flat/CAOgcT0PLPge%3D5U6%3DGU5SnC3_8yutCbWWOiUva3Cw94M9zpbvgQ%40mail.gmail.com>*
    
    Regards,
    Jeevan Ladhe
    
  2. Re: fix side-effect in get_qual_for_list()

    Ashutosh Bapat <ashutosh.bapat@enterprisedb.com> — 2017-05-26T14:32:04Z

    On Thu, May 25, 2017 at 3:12 PM, Jeevan Ladhe
    <jeevan.ladhe@enterprisedb.com> wrote:
    > Hi,
    >
    > While working on one of the crash reported on default partition for list
    > partitioning table[1] I found some strange behavior in get_qual_for_list()
    > while
    > I tried to call it from the new code I wrote for default partition.
    >
    > After debugging, I noticed that the function get_qual_for_list() is
    > implicitly
    > manipulating the (PartitionBoundSpec) spec->listdatums list. AFAICU, this
    > manipulation is needed just to construct a list of datums to be passed to
    > ArrayExpr, and this should be done without manipulating the original list.
    > The function name is get_qual_for_list(), which implies that this function
    > returns something and does not modify anything.
    >
    > I have made this change in attached patch, as I think this is useful for
    > future
    > developments, as there may be a need in future to call get_qual_for_list()
    > from
    > other places, and the caller might not expect that PartitionBoundSpec gets
    > modified.
    >
    
    Thanks for catching this. For now this isn't a problem since
    generate_partition_qual() is crafting PartitionBoundInfo which it
    doesn't use anywhere else. But if the function gets used where the
    PartitionBoundSpec is being used somewhere else as well. While you are
    at it, can we use castNode() in place of
    PartitionBoundSpec *spec = (PartitionBoundSpec *) bound; Or do you
    think it should be done separately?
    
    -- 
    Best Wishes,
    Ashutosh Bapat
    EnterpriseDB Corporation
    The Postgres Database Company
    
    
    
  3. Re: fix side-effect in get_qual_for_list()

    Jeevan Ladhe <jeevan.ladhe@enterprisedb.com> — 2017-05-26T19:46:38Z

    Hi Ashutosh,
    
    Thanks for catching this. For now this isn't a problem since
    > generate_partition_qual() is crafting PartitionBoundInfo which it
    > doesn't use anywhere else. But if the function gets used where the
    > PartitionBoundSpec is being used somewhere else as well.
    
    
    Yes, this behavior currently does not affect adversely, but I think this
    function is quite useful for future enhancements and should be fixed.
    
    While you are
    > at it, can we use castNode() in place of
    > PartitionBoundSpec *spec = (PartitionBoundSpec *) bound; Or do you
    > think it should be done separately?
    >
    
    I have made this change at couple of places applicable.
    
    PFA.
    
    Regards,
    Jeevan Ladhe
    
  4. Re: fix side-effect in get_qual_for_list()

    Jeevan Ladhe <jeevan.ladhe@enterprisedb.com> — 2017-05-29T11:13:43Z

    Hi,
    
    I have rebased the patch on recent commit.
    
    With recent commits, some of the hunks in the v2 patch related to
    castNode, are not needed.
    
    PFA.
    
    Regards,
    Jeevan Ladhe
    
    On Sat, May 27, 2017 at 1:16 AM, Jeevan Ladhe <jeevan.ladhe@enterprisedb.com
    > wrote:
    
    > Hi Ashutosh,
    >
    > Thanks for catching this. For now this isn't a problem since
    >> generate_partition_qual() is crafting PartitionBoundInfo which it
    >> doesn't use anywhere else. But if the function gets used where the
    >> PartitionBoundSpec is being used somewhere else as well.
    >
    >
    > Yes, this behavior currently does not affect adversely, but I think this
    > function is quite useful for future enhancements and should be fixed.
    >
    > While you are
    >> at it, can we use castNode() in place of
    >> PartitionBoundSpec *spec = (PartitionBoundSpec *) bound; Or do you
    >> think it should be done separately?
    >>
    >
    > I have made this change at couple of places applicable.
    >
    > PFA.
    >
    > Regards,
    > Jeevan Ladhe
    >
    
  5. Re: fix side-effect in get_qual_for_list()

    Tom Lane <tgl@sss.pgh.pa.us> — 2017-05-29T18:25:01Z

    Jeevan Ladhe <jeevan.ladhe@enterprisedb.com> writes:
    > I have rebased the patch on recent commit.
    
    Pushed with some further tweaking.
    
    			regards, tom lane
    
    
    
  6. Re: fix side-effect in get_qual_for_list()

    Jeevan Ladhe <jeevan.ladhe@enterprisedb.com> — 2017-05-29T18:42:53Z

    On Mon, May 29, 2017 at 11:55 PM, Tom Lane <tgl@sss.pgh.pa.us> wrote:
    
    > Jeevan Ladhe <jeevan.ladhe@enterprisedb.com> writes:
    > > I have rebased the patch on recent commit.
    >
    > Pushed with some further tweaking.
    >
    
    Thanks Tom for taking care of this.
    
    Regards,
    Jeevan Ladhe