Changeset 140

Show
Ignore:
Timestamp:
05/24/08 20:45:40 (8 months ago)
Author:
zork
Message:

* Fixed recursion in xml store (replaced store with put for children)
* Removed fkey node attach when collection to store is empty

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/dba/dba/xmlostream.cpp

    r138 r140  
    136136  bool ret = false; 
    137137  if (!pObject->isDeleted()) { 
    138     if (pMember.getFKeyName() != NULL) { 
    139       xmlAddChild(mParentNode, xmlNewNode(NULL, (xmlChar*)pMember.getFKeyName())); 
    140       mParentNode = mParentNode->children; 
    141     }; 
    142138    std::auto_ptr<CollectionFilterIterator> iterator(pFilter.createIterator()); 
    143     while(iterator->hasNext()) { 
    144       Storeable& toStore = (Storeable&)(iterator->get()); 
    145       if (!toStore.isDeleted()) { 
    146         was_changed = store(&toStore); 
    147         if (!ret) ret = was_changed
     139    //do not create fkey node if list is empty 
     140    if (iterator->hasNext()) { 
     141      if (pMember.getFKeyName() != NULL) { 
     142        xmlAddChild(mParentNode, xmlNewNode(NULL, (xmlChar*)pMember.getFKeyName())); 
     143        mParentNode = mParentNode->children
    148144      }; 
    149       iterator->moveForward(); 
    150     }; 
    151     if (pMember.getFKeyName() != NULL) { 
    152       mParentNode = mParentNode->parent; 
     145      while(iterator->hasNext()) { 
     146        Storeable& toStore = (Storeable&)(iterator->get()); 
     147        if (!toStore.isDeleted()) { 
     148          was_changed = put(&toStore); 
     149          if (!ret) ret = was_changed; 
     150        }; 
     151        iterator->moveForward(); 
     152      }; 
     153      if (pMember.getFKeyName() != NULL) { 
     154        mParentNode = mParentNode->parent; 
     155      }; 
    153156    }; 
    154157  }; 
  • trunk/dba/test/main.cpp

    r136 r140  
    144144  CppUnit::BriefTestProgressListener listener; 
    145145  runner.eventManager().addListener(&listener); 
    146   runner.addTest( CppUnit::TestFactoryRegistry::getRegistry().makeTest() ); 
     146  //runner.addTest( CppUnit::TestFactoryRegistry::getRegistry().makeTest() ); 
    147147  //runner.addTest(new CppUnit::TestCaller<SQLite3SQLArchiveTestCase>("debug_test",&SQLite3SQLArchiveTestCase::sqlError)); 
    148148  //runner.addTest(new CppUnit::TestCaller<PostgresSQLArchiveTestCase>("debug_test",&PostgresSQLArchiveTestCase::sqlError)); 
     
    151151  //runner.addTest(new CppUnit::TestCaller<SQLite3SQLArchiveTestCase>("debug_test",&SQLite3SQLArchiveTestCase::transactions_rollback)); 
    152152  //runner.addTest(dba_tests::XMLTestCase::suite()); 
    153   //runner.addTest(new CppUnit::TestCaller<dba_tests::XMLTestCase>("debug_test",&dba_tests::XMLTestCase::sublist_one)); 
     153  runner.addTest(new CppUnit::TestCaller<dba_tests::XMLTestCase>("debug_test",&dba_tests::XMLTestCase::sublist_tree_store)); 
    154154  //runner.addTest(new CppUnit::TestCaller<OdbcPluginTestCase>("debug_test",&OdbcPluginTestCase::dbConnection)); 
    155155  //runner.addTest(new CppUnit::TestCaller<PostgresSQLArchiveTestCase>("debug_test",&PostgresSQLArchiveTestCase::sqlError)); 
  • trunk/dba/test/xmltestcase.cpp

    r139 r140  
    353353}; 
    354354 
     355void  
     356XMLTestCase::sublist_tree_store() { 
     357  const char* result =  
     358"<?xml version=\"1.0\" encoding=\"utf-8\"?>\n" 
     359"<dba>\n" 
     360"  <test_objects i_value=\"1\" f_value=\"1\" s_value=\"1\" d_value=\"2008-01-01Z00:00:00\">\n" 
     361"    <fk_owner>\n" 
     362"      <test_objects i_value=\"2\" f_value=\"2\" s_value=\"2\" d_value=\"2008-01-01Z00:00:00\">\n" 
     363"        <fk_owner>\n" 
     364"          <test_objects i_value=\"3\" f_value=\"3\" s_value=\"3\" d_value=\"2008-01-01Z00:00:00\"/>\n" 
     365"        </fk_owner>\n" 
     366"      </test_objects>\n" 
     367"    </fk_owner>\n" 
     368"  </test_objects>\n" 
     369"</dba>\n"; 
     370  { 
     371    dba::XMLArchive ar; 
     372    unlink("sublist_tree.xml"); 
     373    ar.open("sublist_tree.xml"); 
     374    TreeObject root(1,1,"1"); 
     375    TreeObject middle(2,2,"2"); 
     376    TreeObject last(3,3,"3"); 
     377    middle.mLeafs.push_back(last); 
     378    root.mLeafs.push_back(middle); 
     379 
     380    dba::XMLOStream stream(ar.getOStream()); 
     381    stream.open(); 
     382    stream.put(&root); 
     383  } 
     384  CPPUNIT_ASSERT(compareXML("sublist_tree.xml",result)); 
     385}; 
     386 
     387void  
     388XMLTestCase::sublist_three_simple() { 
     389  const char* result =  
     390"<?xml version=\"1.0\" encoding=\"utf-8\"?>\n" 
     391"<dba>\n" 
     392"  <three_lists three_name=\"sub\">\n" 
     393"    <fk_three_owner>\n" 
     394"      <obj_with_list name=\"sub_0\">\n" 
     395"        <fk_owner>\n" 
     396"          <test_objects i_value=\"0\" f_value=\"0\" s_value=\"test_object\" d_value=\"2008-01-01Z00:00:00\"/>\n" 
     397"        </fk_owner>\n" 
     398"      </obj_with_list>\n" 
     399"    </fk_three_owner>\n" 
     400"  </three_lists>\n" 
     401"</dba>\n"; 
     402  { 
     403    dba::XMLArchive ar; 
     404    unlink("sublist_three_simple.xml"); 
     405    ar.open("sublist_three_simple.xml"); 
     406    ThreeLists root("sub",1,1); 
     407 
     408    dba::XMLOStream stream(ar.getOStream()); 
     409    stream.open(); 
     410    stream.put(&root); 
     411  } 
     412  CPPUNIT_ASSERT(compareXML("sublist_three_simple.xml",result)); 
     413}; 
     414 
    355415 
    356416} //namespace 
  • trunk/dba/test/xmltestcase.h

    r139 r140  
    3939      CPPUNIT_TEST(sublist_one_store_nofk); 
    4040      CPPUNIT_TEST(sublist_one_load_nofk); 
     41      CPPUNIT_TEST(sublist_tree_store); 
     42      CPPUNIT_TEST(sublist_three_simple); 
    4143    CPPUNIT_TEST_SUITE_END(); 
    4244  public: 
     
    5961    void sublist_one_store_nofk(); 
    6062    void sublist_one_load_nofk(); 
     63    void sublist_tree_store(); 
     64    void sublist_three_simple(); 
    6165  private: 
    6266    bool compareXML(const char* pFilename, const char* pData);