Changeset 133

Show
Ignore:
Timestamp:
05/04/08 15:02:02 (8 months ago)
Author:
zork
Message:

load simple objects and binded vars

Files:

Legend:

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

    r130 r133  
    1717  : IStream(), 
    1818    ConvSpecContainer(pSpecs), 
    19     mCurrentNode(pNode) 
     19    mParentNode(pNode) 
    2020{ 
     21  mCurrentNode = mParentNode->children; 
     22  setNextNode(); 
    2123} 
     24 
     25void 
     26XMLIStream::setNextNode() { 
     27  while( mCurrentNode && xmlIsBlankNode(mCurrentNode) == 1) 
     28    mCurrentNode = mCurrentNode->next; 
     29}; 
    2230 
    2331void  
     
    2836void  
    2937XMLIStream::destroy() { 
    30   mCurrentNode = NULL; 
     38  mParentNode = mCurrentNode =NULL; 
    3139}; 
    3240 
    3341bool  
    3442XMLIStream::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; 
    3675}; 
    3776 
    3877bool  
    3978XMLIStream::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  }; 
    4198}; 
    4299 
  • trunk/dba/dba/xmlistream.h

    r130 r133  
    3232    virtual ~XMLIStream(); 
    3333  private: 
     34    xmlNodePtr mParentNode; 
    3435    xmlNodePtr mCurrentNode; 
    3536     
    3637    virtual void setIdsCondition(const char* pFKeyName, id pRelationId, const std::vector<id>& pIds); 
     38    void setNextNode(); 
    3739}; 
    3840 
  • trunk/dba/dba/xmlostream.cpp

    r132 r133  
    1818  : OStream(), 
    1919    ConvSpecContainer(pSpecs), 
    20     mCurrentNode(pNode) 
     20    mParentNode(pNode) 
    2121{ 
     22  mCurrentNode = mParentNode->children; 
    2223} 
    2324 
     
    3940bool  
    4041XMLOStream::erase(Storeable* pObject) { 
    41   //TODO 
     42  //file is always created from scratch 
     43  return true; 
    4244}; 
    4345 
    4446bool  
    4547XMLOStream::update(Storeable* pObject) { 
    46   //TODO 
     48  //file is always created from scratch 
     49  store(pObject); 
    4750}; 
    4851 
     
    9598      break; 
    9699  }; 
    97   xmlAddChild(mCurrentNode, node); 
     100  xmlAddChild(mParentNode, node); 
    98101}; 
    99102 
  • trunk/dba/dba/xmlostream.h

    r131 r133  
    3939    virtual ~XMLOStream(); 
    4040  private: 
     41    xmlNodePtr mParentNode; 
    4142    xmlNodePtr mCurrentNode; 
    4243     
  • trunk/dba/test/main.cpp

    r132 r133  
    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::storeVar)); 
     153  runner.addTest(new CppUnit::TestCaller<dba_tests::XMLTestCase>("debug_test",&dba_tests::XMLTestCase::varLoad)); 
    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

    r132 r133  
    1414#include "dba/fileutils.h" 
    1515#include "dba/int_filter.h" 
     16 
     17#include <fstream> 
    1618 
    1719namespace dba_tests { 
     
    116118}; 
    117119 
     120void 
     121XMLTestCase::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 
     131void 
     132XMLTestCase::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 
     156void 
     157XMLTestCase::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}; 
    118180 
    119181} //namespace 
  • trunk/dba/test/xmltestcase.h

    r132 r133  
    3030      CPPUNIT_TEST(simpleStore); 
    3131      CPPUNIT_TEST(storeVar); 
     32      CPPUNIT_TEST(emptyLoad); 
     33      CPPUNIT_TEST(simpleLoad); 
     34      CPPUNIT_TEST(varLoad); 
    3235    CPPUNIT_TEST_SUITE_END(); 
    3336  public: 
     
    3538    virtual void tearDown(); 
    3639    virtual ~XMLTestCase(); 
    37          
     40 
    3841    //tests 
    3942    void empty(); 
     
    4144    void simpleStore(); 
    4245    void storeVar(); 
     46    void emptyLoad(); 
     47    void simpleLoad(); 
     48    void varLoad(); 
    4349  private: 
    4450    bool compareXML(const char* pFilename, const char* pData);