private function processCollectionUpdates(QueryWriter $queryWriter, UnitOfWork $uow)
 {
     foreach ($uow->getCollectionUpdates() as $coll) {
         $assoc = $coll->getMapping();
         if (isset($assoc['embedded'])) {
             continue;
         }
         $owner = $coll->getOwner();
         $ownerRef = strval($this->getDocReference($owner));
         $fieldName = $assoc['fieldName'];
         switch ($assoc['association']) {
             case ClassMetadata::LINK_BAG_EDGE:
                 if (!$assoc['indirect']) {
                     // nothing to do, as insert / update / delete is handled by cascade operations
                     continue;
                 }
                 if ($assoc['direction'] === 'out') {
                     $rids = [$ownerRef, null];
                     $pos = 1;
                 } else {
                     $rids = [null, $ownerRef];
                     $pos = 0;
                 }
                 // add new edges
                 foreach ($coll->getInsertDiff() as $key => $related) {
                     $rids[$pos] = $this->getDocReference($related);
                     $queryWriter->addCreateLightEdgeQuery($assoc['oclass'], $rids);
                 }
                 foreach ($coll->getDeleteDiff() as $related) {
                     $rids[$pos] = $this->getDocReference($related);
                     $queryWriter->addDeleteEdgeQuery($assoc['oclass'], $rids);
                 }
                 continue;
             case ClassMetadata::LINK_MAP:
                 foreach ($coll->getInsertDiff() as $key => $doc) {
                     $queryWriter->addCollectionMapPutQuery($ownerRef, $fieldName, $key, $uow->getDocumentRid($doc));
                 }
                 foreach ($coll->getDeleteDiff() as $key => $doc) {
                     $queryWriter->addCollectionMapDelQuery($ownerRef, $fieldName, $key);
                 }
                 continue;
             default:
                 $rids = array_map(function ($doc) use($uow) {
                     return $uow->getDocumentRid($doc);
                 }, $coll->getInsertDiff());
                 if (count($rids) > 0) {
                     $queryWriter->addCollectionAddQuery($ownerRef, $fieldName, implode(',', $rids));
                 }
                 $rids = array_map(function ($doc) use($uow) {
                     return $uow->getDocumentRid($doc);
                 }, $coll->getDeleteDiff());
                 if (count($rids) > 0) {
                     $queryWriter->addCollectionDelQuery($ownerRef, $fieldName, implode(',', $rids));
                 }
                 continue;
         }
     }
 }