Changeset 133
- Timestamp:
- 05/04/08 15:02:02 (8 months ago)
- Files:
-
- trunk/dba/dba/xmlistream.cpp (modified) (2 diffs)
- trunk/dba/dba/xmlistream.h (modified) (1 diff)
- trunk/dba/dba/xmlostream.cpp (modified) (3 diffs)
- trunk/dba/dba/xmlostream.h (modified) (1 diff)
- trunk/dba/test/main.cpp (modified) (1 diff)
- trunk/dba/test/xmltestcase.cpp (modified) (2 diffs)
- trunk/dba/test/xmltestcase.h (modified) (3 diffs)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
trunk/dba/dba/xmlistream.cpp
r130 r133 17 17 : IStream(), 18 18 ConvSpecContainer(pSpecs), 19 m CurrentNode(pNode)19 mParentNode(pNode) 20 20 { 21 mCurrentNode = mParentNode->children; 22 setNextNode(); 21 23 } 24 25 void 26 XMLIStream::setNextNode() { 27 while( mCurrentNode && xmlIsBlankNode(mCurrentNode) == 1) 28 mCurrentNode = mCurrentNode->next; 29 }; 22 30 23 31 void … … 28 36 void 29 37 XMLIStream::destroy() { 30 m CurrentNode =NULL;38 mParentNode = mCurrentNode =NULL; 31 39 }; 32 40 33 41 bool 34 42 XMLIStream::getNext(Storeable* pObject) { 35 //TODO 43 if (mCurrentNode == NULL) 44 return false; 45 const StoreTable* tbl = Stream::getTable(*pObject); 46 const char* current_table_name = tbl->getTableName(); 47 if (current_table_name == NULL) 48 throw APIException("Root table has no name"); 49 while(tbl != NULL) { 50 if (tbl->getTableName() != NULL) 51 current_table_name = tbl->getTableName(); 52 StoreTableMember* member = tbl->getMembers(); 53 while (member != NULL) { 54 dba::StoreableFilterBase* filter(member->getFilter()); 55 setFilterPtr(*filter,(char*)pObject + (int)(member->getMemberOffset() + tbl->getClassOffset())); 56 xmlAttrPtr attr = xmlHasProp(mCurrentNode, (xmlChar*)member->getMemberName()); 57 if (attr != NULL) { 58 xmlChar* xmldata = xmlNodeGetContent(attr->children); 59 if (xmldata == NULL) { 60 filter->fromNull(); 61 } else { 62 std::string data((const char*)xmldata); 63 filter->fromString(mConvSpecs, data); 64 }; 65 } else { 66 filter->fromNull(); 67 }; 68 member = member->getNextMember(); 69 }; 70 tbl = tbl->getNextTable(); 71 }; 72 updateVars(); 73 setNextNode(); 74 return true; 36 75 }; 37 76 38 77 bool 39 78 XMLIStream::updateVars() { 40 //TODO 79 if (mCurrentNode == NULL) 80 return false; 81 for(VarMap::iterator it = mBindings.begin(); it != mBindings.end(); it++) { 82 if (!xmlStrcmp((xmlChar*)(it->mTable), mCurrentNode->name)) { 83 xmlAttrPtr attr = xmlHasProp(mCurrentNode, (xmlChar*)it->mField); 84 dba::StoreableFilterBase& filter(*(it->mFilter)); 85 if (attr != NULL) { 86 xmlChar* xmldata = xmlNodeGetContent(attr->children); 87 if (xmldata == NULL) { 88 filter.fromNull(); 89 } else { 90 std::string data((const char*)xmldata); 91 filter.fromString(mConvSpecs, data); 92 }; 93 } else { 94 filter.fromNull(); 95 }; 96 }; 97 }; 41 98 }; 42 99 trunk/dba/dba/xmlistream.h
r130 r133 32 32 virtual ~XMLIStream(); 33 33 private: 34 xmlNodePtr mParentNode; 34 35 xmlNodePtr mCurrentNode; 35 36 36 37 virtual void setIdsCondition(const char* pFKeyName, id pRelationId, const std::vector<id>& pIds); 38 void setNextNode(); 37 39 }; 38 40 trunk/dba/dba/xmlostream.cpp
r132 r133 18 18 : OStream(), 19 19 ConvSpecContainer(pSpecs), 20 m CurrentNode(pNode)20 mParentNode(pNode) 21 21 { 22 mCurrentNode = mParentNode->children; 22 23 } 23 24 … … 39 40 bool 40 41 XMLOStream::erase(Storeable* pObject) { 41 //TODO 42 //file is always created from scratch 43 return true; 42 44 }; 43 45 44 46 bool 45 47 XMLOStream::update(Storeable* pObject) { 46 //TODO 48 //file is always created from scratch 49 store(pObject); 47 50 }; 48 51 … … 95 98 break; 96 99 }; 97 xmlAddChild(m CurrentNode, node);100 xmlAddChild(mParentNode, node); 98 101 }; 99 102 trunk/dba/dba/xmlostream.h
r131 r133 39 39 virtual ~XMLOStream(); 40 40 private: 41 xmlNodePtr mParentNode; 41 42 xmlNodePtr mCurrentNode; 42 43 trunk/dba/test/main.cpp
r132 r133 151 151 //runner.addTest(new CppUnit::TestCaller<SQLite3SQLArchiveTestCase>("debug_test",&SQLite3SQLArchiveTestCase::transactions_rollback)); 152 152 //runner.addTest(dba_tests::XMLTestCase::suite()); 153 runner.addTest(new CppUnit::TestCaller<dba_tests::XMLTestCase>("debug_test",&dba_tests::XMLTestCase:: storeVar));153 runner.addTest(new CppUnit::TestCaller<dba_tests::XMLTestCase>("debug_test",&dba_tests::XMLTestCase::varLoad)); 154 154 //runner.addTest(new CppUnit::TestCaller<OdbcPluginTestCase>("debug_test",&OdbcPluginTestCase::dbConnection)); 155 155 //runner.addTest(new CppUnit::TestCaller<PostgresSQLArchiveTestCase>("debug_test",&PostgresSQLArchiveTestCase::sqlError)); trunk/dba/test/xmltestcase.cpp
r132 r133 14 14 #include "dba/fileutils.h" 15 15 #include "dba/int_filter.h" 16 17 #include <fstream> 16 18 17 19 namespace dba_tests { … … 116 118 }; 117 119 120 void 121 XMLTestCase::emptyLoad() { 122 dba::XMLArchive ar; 123 unlink("emptyload.xml"); 124 ar.open("emptyload.xml"); 125 TestObject obj1; 126 dba::XMLIStream stream(ar.getIStream()); 127 stream.open(obj1); 128 CPPUNIT_ASSERT(!stream.get(&obj1)); 129 }; 130 131 void 132 XMLTestCase::simpleLoad() { 133 const char* data = 134 "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n" 135 "<dba>\n" 136 " <test_objects i_value=\"1\" f_value=\"1.1\" s_value=\"test\" d_value=\"2008-01-01Z00:00:00\"/>\n" 137 "</dba>\n"; 138 { 139 std::ofstream file("simpleload.xml"); 140 file << data; 141 }; 142 { 143 dba::XMLArchive ar; 144 ar.open("simpleload.xml"); 145 TestObject obj1; 146 dba::XMLIStream stream(ar.getIStream()); 147 148 stream.open(obj1); 149 CPPUNIT_ASSERT(stream.getNext(&obj1)); 150 151 TestObject expected(1,1.1,"test",Utils::getDate(2008,1,1,0,0,0)); 152 CPPUNIT_ASSERT(obj1 == expected); 153 }; 154 }; 155 156 void 157 XMLTestCase::varLoad() { 158 const char* data = 159 "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n" 160 "<dba>\n" 161 " <test_objects i_value=\"1\" f_value=\"1.1\" s_value=\"test\" d_value=\"2008-01-01Z00:00:00\" binded=\"4\"/>\n" 162 "</dba>\n"; 163 { 164 std::ofstream file("simpleload.xml"); 165 file << data; 166 }; 167 { 168 dba::XMLArchive ar; 169 ar.open("simpleload.xml"); 170 TestObject obj1; 171 dba::XMLIStream stream(ar.getIStream()); 172 173 int binded = 0; 174 stream.bind("test_objects","binded",new dba::Int(binded)); 175 stream.open(obj1); 176 stream.getNext(&obj1); 177 CPPUNIT_ASSERT(binded == 4); 178 }; 179 }; 118 180 119 181 } //namespace trunk/dba/test/xmltestcase.h
r132 r133 30 30 CPPUNIT_TEST(simpleStore); 31 31 CPPUNIT_TEST(storeVar); 32 CPPUNIT_TEST(emptyLoad); 33 CPPUNIT_TEST(simpleLoad); 34 CPPUNIT_TEST(varLoad); 32 35 CPPUNIT_TEST_SUITE_END(); 33 36 public: … … 35 38 virtual void tearDown(); 36 39 virtual ~XMLTestCase(); 37 40 38 41 //tests 39 42 void empty(); … … 41 44 void simpleStore(); 42 45 void storeVar(); 46 void emptyLoad(); 47 void simpleLoad(); 48 void varLoad(); 43 49 private: 44 50 bool compareXML(const char* pFilename, const char* pData);
