Changeset 174
- Timestamp:
- 07/30/08 16:29:06 (4 months ago)
- Files:
-
- trunk/dba/dba/ostream.cpp (modified) (2 diffs)
- trunk/dba/dba/xmlostream.cpp (modified) (6 diffs)
- trunk/dba/test/main.cpp (modified) (2 diffs)
- trunk/dba/test/xmltestcase.cpp (modified) (1 diff)
- trunk/dba/test/xmltestcase.h (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
trunk/dba/dba/ostream.cpp
r138 r174 116 116 while(table != NULL) { 117 117 ColMemberEntry* member = table->getMembers(); 118 initMemberChildrenStore(*pObject,*member); 118 119 while(member != NULL) { 119 120 //getTableName uses create() to call Storeable::getRootTable() … … 126 127 const char* obj_table = member->getTableName(); 127 128 //call archive specific store alghoritm 128 initMemberChildrenStore(*pObject,*member);129 129 bool was_changed = putMemberChildren(pObject, *member, filter, obj_table); 130 endMemberChildrenStore(*pObject,*member);131 130 if (!ret) ret = was_changed; 132 131 //move forward in loop 133 132 member = member->getNextMember(); 134 133 }; 134 endMemberChildrenStore(*pObject,*member); 135 135 //move forward in loop 136 136 table = table->getNextTable(); trunk/dba/dba/xmlostream.cpp
r166 r174 149 149 xmlNodePtr node = createNode(current->name); 150 150 if (!mReplaceParentNode) { 151 debug("Adding child node '%s' to '%s'", getRootTableName(*pObject), (const char*)mParentNode->name); 151 152 //store table is readed from last element to first 152 153 //and from child table to parent. … … 160 161 node->nsDef = xmlCopyNamespaceList(mParentNode->nsDef); 161 162 xmlFree(xmlDocSetRootElement(mDocument,node)); 163 //no mParentNode means that we are the parent node 164 mParentNode = NULL; 162 165 mReplaceParentNode = false; 163 166 }; … … 177 180 XMLOStream::initMemberChildrenStore(const Storeable& pObject, const ColMemberEntry& pMember) { 178 181 //set new parent node for storing subobjects 179 mParentNode = mParentNode->children; 182 if (mParentNode != NULL) { 183 debug("going down to first child of mParent '%s'", (const char*)mParentNode->name); 184 mParentNode = mParentNode->children; 185 } else { 186 mParentNode = xmlDocGetRootElement(mDocument); 187 debug("mParent set to '%s'", (const char*)mParentNode->name); 188 }; 180 189 }; 181 190 … … 185 194 //in hierarchy. After storing all children we have to reset it back to 186 195 //parent of pObject node 187 mParentNode = mParentNode->parent; 196 if (mParentNode != xmlDocGetRootElement(mDocument)) { 197 debug("up from mParent '%s'", (const char*)mParentNode->name); 198 mParentNode = mParentNode->parent; 199 }; 188 200 if (mParentNode == NULL) 189 201 throw DatabaseException("Internal error: parent node is NULL"); … … 208 220 bool ret = false; 209 221 if (!pObject->isDeleted()) { 222 /* if (mParentNode != NULL) { 223 debug("going down to first child of mParent '%s'", (const char*)mParentNode->name); 224 mParentNode = mParentNode->children; 225 } else { 226 mParentNode = xmlDocGetRootElement(mDocument); 227 debug("mParent set to '%s'", (const char*)mParentNode->name); 228 };*/ 210 229 std::auto_ptr<CollectionFilterIterator> iterator(pFilter.createIterator()); 211 230 //do not create fkey node if list is empty … … 227 246 }; 228 247 }; 248 /* if (mParentNode != xmlDocGetRootElement(mDocument)) { 249 debug("up from mParent '%s'", (const char*)mParentNode->name); 250 mParentNode = mParentNode->parent; 251 };*/ 229 252 }; 230 253 return ret; trunk/dba/test/main.cpp
r169 r174 144 144 CppUnit::BriefTestProgressListener listener; 145 145 runner.eventManager().addListener(&listener); 146 runner.addTest( CppUnit::TestFactoryRegistry::getRegistry().makeTest() );146 //runner.addTest( CppUnit::TestFactoryRegistry::getRegistry().makeTest() ); 147 147 //runner.addTest(new CppUnit::TestCaller<SQLite3SQLArchiveTestCase>("debug_test",&SQLite3SQLArchiveTestCase::sqlError)); 148 148 //runner.addTest(new CppUnit::TestCaller<PostgresSQLArchiveTestCase>("debug_test",&PostgresSQLArchiveTestCase::sqlError)); … … 150 150 //runner.addTest(new CppUnit::TestCaller<dba_tests::CSVTestCase>("debug_test",&dba_tests::CSVTestCase::invalidPos)); 151 151 //runner.addTest(new CppUnit::TestCaller<SQLite3SQLArchiveTestCase>("debug_test",&SQLite3SQLArchiveTestCase::transactions_rollback)); 152 //runner.addTest(dba_tests::XMLTestCase::suite());153 //runner.addTest(new CppUnit::TestCaller<dba_tests::XMLTestCase>("debug_test",&dba_tests::XMLTestCase::s ublist_two_store));152 runner.addTest(dba_tests::XMLTestCase::suite()); 153 //runner.addTest(new CppUnit::TestCaller<dba_tests::XMLTestCase>("debug_test",&dba_tests::XMLTestCase::storeBug1)); 154 154 //runner.addTest(new CppUnit::TestCaller<dba_tests::XMLTestCase>("debug_test",&dba_tests::XMLTestCase::store_two)); 155 155 //runner.addTest(new CppUnit::TestCaller<OdbcPluginTestCase>("debug_test",&OdbcPluginTestCase::dbConnection)); trunk/dba/test/xmltestcase.cpp
r173 r174 832 832 }; 833 833 834 struct Address : public dba::Storeable { 835 DECLARE_STORE_TABLE(); 836 std::string mData; 837 }; 838 839 BEGIN_STORE_TABLE(Address,dba::Storeable,"address") 840 BIND_STR(mData,dba::String,"data") 841 END_STORE_TABLE() 842 843 struct Patient : public dba::Storeable { 844 DECLARE_STORE_TABLE(); 845 Address mAddress; 846 }; 847 848 BEGIN_STORE_TABLE(Patient,dba::Storeable,"patient") 849 BIND_COL(mAddress,dba::Single,NULL) 850 END_STORE_TABLE() 851 852 853 struct Report : public dba::Storeable { 854 DECLARE_STORE_TABLE(); 855 }; 856 857 BEGIN_STORE_TABLE(Report,dba::Storeable,"report") 858 END_STORE_TABLE() 859 860 struct Request : public dba::Storeable { 861 DECLARE_STORE_TABLE(); 862 Patient mPatient; 863 Report mReport; 864 }; 865 866 BEGIN_STORE_TABLE(Request,dba::Storeable,"request") 867 BIND_COL(mReport,dba::Single,NULL) 868 BIND_COL(mPatient,dba::Single,NULL) 869 END_STORE_TABLE() 870 871 void 872 XMLTestCase::storeBug1() { 873 const char* result = 874 "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n" 875 "<request>\n" 876 " <report/>\n" 877 " <patient>\n" 878 " <address/>\n" 879 " </patient>\n" 880 "</request>\n" 881 ; 882 { 883 dba::XMLArchive ar; 884 ar.setRootNodeName(NULL); 885 //ar.useElements(); 886 unlink("storebug1.xml"); 887 ar.open("storebug1.xml"); 888 Request obj1; 889 dba::XMLOStream stream(ar.getOStream()); 890 stream.enableDebug(); 891 stream.open(); 892 stream.put(&obj1); 893 } 894 CPPUNIT_ASSERT(compareXML("storebug1.xml",result)); 895 }; 834 896 835 897 } //namespace trunk/dba/test/xmltestcase.h
r169 r174 53 53 CPPUNIT_TEST(loadFromElements); 54 54 CPPUNIT_TEST(storeToElements); 55 CPPUNIT_TEST(storeBug1); 55 56 CPPUNIT_TEST_SUITE_END(); 56 57 public: … … 89 90 void loadFromElements(); 90 91 void storeToElements(); 92 void storeBug1(); 91 93 private: 92 94 bool compareXML(const char* pFilename, const char* pData);
