Doctrine MongoDB ODM
  1. Doctrine MongoDB ODM
  2. MODM-80

Changeset for embedded documents calculates to an unnecessary pullAll() and pushAll() in some cases.

    Details

    • Type: Bug Bug
    • Status: Resolved
    • Priority: Major Major
    • Resolution: Fixed
    • Affects Version/s: 1.0.0BETA2
    • Fix Version/s: 1.0.0BETA2
    • Component/s: Persister
    • Labels:
      None

      Description

      When embedded documents are persisted and then some of them are removed in just the right way, the resulting update will issue a $pullAll for ALL of the embedded documents and then a $pushAll on whichever embedded documents weren't actually removed. Obviously, only a $pullAll on the removed items is necessary.

      Additionally, while the $pullAll and the $pushAll seem like they should add up to the correct finish (though inefficient), the removed items appear to not be removed correctly. The $pullAll falls correctly into the if loop found here: http://github.com/doctrine/mongodb-odm/blob/master/lib/Doctrine/ODM/MongoDB/Persisters/BasicDocumentPersister.php#L230, but the end result of that $pullAll in this case is that some items are not removed.

      A test case for this is here: http://github.com/weaverryan/mongodb-odm/commit/9968697a2c07e31ecfdd8d55ecbf9bf39183d01e. The first case, testModifyGroupsArrayDirectly() tests for this. The second case relates to MODM-79.

      Thanks - I've found the issue particular strange to nail down and inconsistent. If you spot any issues in my test cases, let me know.

        Activity

        Hide
        Jonathan H. Wage added a comment -

        This is not a problem anymore after the recent refactoring!

        Show
        Jonathan H. Wage added a comment - This is not a problem anymore after the recent refactoring!

          People

          • Assignee:
            Jonathan H. Wage
            Reporter:
            Ryan Weaver
          • Votes:
            0 Vote for this issue
            Watchers:
            0 Start watching this issue

            Dates

            • Created:
              Updated:
              Resolved: