Federico Cavalieri has proposed merging 
lp:~zorba-coders/zorba/fix-dbedit-parse-xml-segfault into lp:zorba.

Commit message:
Fixed db:edit and fn:parse-xml segfault

Requested reviews:
  Zorba Coders (zorba-coders)

For more details, see:
https://code.launchpad.net/~zorba-coders/zorba/fix-dbedit-parse-xml-segfault/+merge/199707

Fixed db:edit and fn:parse-xml segfault
-- 
https://code.launchpad.net/~zorba-coders/zorba/fix-dbedit-parse-xml-segfault/+merge/199707
Your team Zorba Coders is requested to review the proposed merge of 
lp:~zorba-coders/zorba/fix-dbedit-parse-xml-segfault into lp:zorba.
=== modified file 'src/store/naive/node_items.cpp'
--- src/store/naive/node_items.cpp	2013-09-17 21:12:49 +0000
+++ src/store/naive/node_items.cpp	2013-12-19 19:15:18 +0000
@@ -798,35 +798,24 @@
 
   // Before unswapping root nodes as well, their references in the type maps
   // must be erased.
-  store::Item_t lRootNodeType;
-  store::Item_t lOtherRootNodeType;
-  bool lRootHasType = getTree()->theTypesMap->get(
-      getTree()->theRootNode, lRootNodeType);
-  bool lOtherRootHasType = lOtherItem->getTree()->theTypesMap->get(
-      lOtherItem->getTree()->theRootNode, lOtherRootNodeType);
-  if(lRootHasType)
-  {
-    getTree()->theTypesMap->erase(getTree()->theRootNode);
-  }
-  if(lOtherRootHasType)
-  {
-    lOtherItem->getTree()->theTypesMap->erase(
-        lOtherItem->getTree()->theRootNode);
-  }
+  store::Item_t lRootNodeType = getTree()->getType(getTree()->theRootNode);
+  store::Item_t lOtherRootNodeType = lOtherItem->getTree()->getType(
+      lOtherItem->getTree()->theRootNode);
+
+  if (lRootNodeType != NULL)
+    getTree()->removeType(getTree()->theRootNode);
+  if (lOtherRootNodeType != NULL)
+    lOtherItem->getTree()->removeType(lOtherItem->getTree()->theRootNode);
 
   // Now unswapping root nodes.
   std::swap(getTree()->theRootNode, lOtherItem->getTree()->theRootNode);
 
   // And putting references back into the type maps.
-  if(lRootHasType)
-  {
-    getTree()->theTypesMap->insert(getTree()->theRootNode, lRootNodeType);
-  }
-  if(lOtherRootHasType)
-  {
-    lOtherItem->getTree()->theTypesMap->insert(
-        lOtherItem->getTree()->theRootNode, lOtherRootNodeType);
-  }
+  if (lRootNodeType != NULL)
+    getTree()->addType(getTree()->theRootNode, lRootNodeType);
+  if (lOtherRootNodeType != NULL)
+    lOtherItem->getTree()->addType(lOtherItem->getTree()->theRootNode,
+        lOtherRootNodeType);
 
   // Swap flags expect hasReference.
   bool lHasReference = haveReference();

=== added file 'test/rbkt/ExpQueryResults/zorba/collections/static-edit/static-edit-20.xml.res'
--- test/rbkt/ExpQueryResults/zorba/collections/static-edit/static-edit-20.xml.res	1970-01-01 00:00:00 +0000
+++ test/rbkt/ExpQueryResults/zorba/collections/static-edit/static-edit-20.xml.res	2013-12-19 19:15:18 +0000
@@ -0,0 +1,1 @@
+<a/><d/><c/>

=== added file 'test/rbkt/Queries/zorba/collections/static-edit/static-edit-20.xq'
--- test/rbkt/Queries/zorba/collections/static-edit/static-edit-20.xq	1970-01-01 00:00:00 +0000
+++ test/rbkt/Queries/zorba/collections/static-edit/static-edit-20.xq	2013-12-19 19:15:18 +0000
@@ -0,0 +1,12 @@
+import module namespace ddl = "http://zorba.io/modules/store/static/collections/ddl";;
+import module namespace dml = "http://zorba.io/modules/store/static/collections/dml";;
+
+import module namespace ns = "http://www.example.com/example"; at "../collection_001.xqdata";
+
+ddl:create(xs:QName("ns:collection"));
+
+dml:insert(xs:QName("ns:collection"), (<a/>, <b/>, <c/>));
+
+dml:edit(dml:collection(xs:QName("ns:collection"))[2], parse-xml("<d/>")/*);
+
+dml:collection(xs:QName("ns:collection"))

-- 
Mailing list: https://launchpad.net/~zorba-coders
Post to     : zorba-coders@lists.launchpad.net
Unsubscribe : https://launchpad.net/~zorba-coders
More help   : https://help.launchpad.net/ListHelp

Reply via email to