Changeset 158
- Timestamp:
- 07/11/08 10:15:57 (6 months ago)
- Files:
-
- branches/debea_1_2/dba/dba/csv.cpp (modified) (5 diffs)
- branches/debea_1_2/dba/test/csvtestcase.cpp (modified) (1 diff)
- branches/debea_1_2/dba/test/csvtestcase.h (modified) (2 diffs)
- branches/debea_1_2/dba/test/main.cpp (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
branches/debea_1_2/dba/dba/csv.cpp
r123 r158 317 317 }; 318 318 319 #ifdef DBA_COMPAT_1_0 319 #ifdef DBA_COMPAT_1_0 320 320 CSVIStream* 321 321 CSVArchive::getOIStream() { … … 644 644 // for(list<string>::const_iterator it = mValues.begin(); it != mValues.end(); it++) cerr << "val:" << *it << endl; 645 645 const StoreTable* tbl = Stream::getTable(*pObject); 646 std::string data; 647 const char* current_table_name = tbl->getTableName(); 648 if (current_table_name == NULL) 649 throw APIException("Root table has no name"); 650 while(tbl != NULL) { 651 if (tbl->getTableName() != NULL) 652 current_table_name = tbl->getTableName(); 653 StoreTableMember* member = tbl->getMembers(); 654 while (member != NULL) { 655 // cerr << "setting member " << member -> name << " binded to " << member << endl; 656 unsigned int pos = getMappingPosByName(mMappings, current_table_name, member->getMemberName()); 657 dba::StoreableFilterBase* filter(member->getFilter()); 658 setFilterPtr(*filter,(char*)pObject + (int)(member->getMemberOffset() + tbl->getClassOffset())); 659 if (pos != (unsigned)-1) { 660 //we got mapping for column but we cannot find 661 //that column data in csv file 662 if (mValues.size() <= pos) { 663 string s; 664 s += "Column " + dba::toStr(pos) + " for mapping " + current_table_name + "." + member->getMemberName() + " not found "; 665 throw DataException(s); 646 if (tbl != NULL) { 647 std::string data; 648 const char* current_table_name = tbl->getTableName(); 649 if (current_table_name == NULL) 650 throw APIException("Root table has no name"); 651 while(tbl != NULL) { 652 if (tbl->getTableName() != NULL) 653 current_table_name = tbl->getTableName(); 654 StoreTableMember* member = tbl->getMembers(); 655 while (member != NULL) { 656 // cerr << "setting member " << member -> name << " binded to " << member << endl; 657 unsigned int pos = getMappingPosByName(mMappings, current_table_name, member->getMemberName()); 658 dba::StoreableFilterBase* filter(member->getFilter()); 659 setFilterPtr(*filter,(char*)pObject + (int)(member->getMemberOffset() + tbl->getClassOffset())); 660 if (pos != (unsigned)-1) { 661 //we got mapping for column but we cannot find 662 //that column data in csv file 663 if (mValues.size() <= pos) { 664 string s; 665 s += "Column " + dba::toStr(pos) + " for mapping " + current_table_name + "." + member->getMemberName() + " not found "; 666 throw DataException(s); 667 }; 668 data = getValueByIndex(mValues, pos); 669 filter->fromString(mConvSpecs, data); 670 } else { 671 data.erase(); 672 filter->fromNull(); 666 673 }; 667 data = getValueByIndex(mValues, pos); 668 filter->fromString(mConvSpecs, data); 669 } else { 670 data.erase(); 671 filter->fromNull(); 674 member = member->getNextMember(); 672 675 }; 673 member = member->getNextMember(); 674 }; 675 tbl = tbl->getNextTable(); 676 }; 677 list<mapping>::iterator mit = find_if(mMappings.begin(), mMappings.end(), mappingMatcher("id")); 678 if (mit != mMappings.end()) { 679 if (mit -> fnumber != -1) { 680 data = getValueByIndex(mValues, mit -> fnumber); 681 int id; 682 dba::convert(data,id); 683 Stream::alterId(pObject,id); 684 Stream::makeOk(pObject); 676 tbl = tbl->getNextTable(); 677 }; 678 list<mapping>::iterator mit = find_if(mMappings.begin(), mMappings.end(), mappingMatcher("id")); 679 if (mit != mMappings.end()) { 680 if (mit -> fnumber != -1) { 681 data = getValueByIndex(mValues, mit -> fnumber); 682 int id; 683 dba::convert(data,id); 684 Stream::alterId(pObject,id); 685 Stream::makeOk(pObject); 686 }; 685 687 }; 686 688 }; … … 720 722 }; 721 723 722 723 724 void 724 725 CSVIStream::close() { … … 727 728 }; 728 729 729 st ring730 CSVIStream::getValueByIndex(const list<st ring>& pValue, int pPos) {730 std::string 731 CSVIStream::getValueByIndex(const list<std::string>& pValue, int pPos) { 731 732 list<string>::const_iterator it = pValue.begin(); 732 733 int i = 0; … … 737 738 it++; 738 739 }; 739 return NULL; 740 std::string err("Field index"); 741 err += pPos; 742 err += " is out of bounds"; 743 throw DataException(err.c_str()); 744 //unreachable code 745 return std::string(); 740 746 }; 741 747 branches/debea_1_2/dba/test/csvtestcase.cpp
r41 r158 486 486 }; 487 487 488 void 489 CSVTestCase::invalidPos() { 490 const char* data = 491 "1,2"; 492 { 493 unlink("invalid_pos.csv"); 494 std::ofstream file("invalid_pos.csv"); 495 file << data; 496 }; 497 dba::CSVArchive ar; 498 ar.hasColumnNames(false); 499 ar.addMapping(0,"test","a"); 500 ar.addMapping(1,"test","b"); 501 ar.addMapping(2,"test","str"); 502 ar.open("invalid_pos.csv"); 503 504 std::string binded; 505 506 dba::CSVIStream istream = ar.getIStream(); 507 istream.bind("test", "str", new dba::String(binded)); 508 dba::Storeable t; 509 istream.open(t); 510 try { 511 istream.getNext(&t); 512 CPPUNIT_ASSERT_MESSAGE("no exception on missing mapping",false); 513 } catch (const dba::DataException& pEx) { 514 //test passed 515 }; 516 }; 517 488 518 };//namespace 489 519 branches/debea_1_2/dba/test/csvtestcase.h
r20 r158 51 51 CPPUNIT_TEST(sepTest); 52 52 CPPUNIT_TEST(autoBindedVars); 53 CPPUNIT_TEST(invalidPos); 53 54 CPPUNIT_TEST_SUITE_END(); 54 55 … … 67 68 void openNonCSVFileForWriteTest2(); 68 69 void spaceSeparator(); 70 void invalidPos(); 69 71 private: 70 72 class CSVTester : public dba::Storeable { branches/debea_1_2/dba/test/main.cpp
r117 r158 143 143 CppUnit::BriefTestProgressListener listener; 144 144 runner.eventManager().addListener(&listener); 145 runner.addTest( CppUnit::TestFactoryRegistry::getRegistry().makeTest() );145 //runner.addTest( CppUnit::TestFactoryRegistry::getRegistry().makeTest() ); 146 146 //runner.addTest(new CppUnit::TestCaller<SQLite3SQLArchiveTestCase>("debug_test",&SQLite3SQLArchiveTestCase::sqlError)); 147 147 //runner.addTest(new CppUnit::TestCaller<PostgresSQLArchiveTestCase>("debug_test",&PostgresSQLArchiveTestCase::sqlError)); 148 148 //runner.addTest(new CppUnit::TestCaller<dba_tests::StringFilter>("debug_test",&dba_tests::StringFilter::test17)); 149 //runner.addTest(new CppUnit::TestCaller<dba_tests::CSVTestCase>("debug_test",&dba_tests::CSVTestCase::manual));149 runner.addTest(new CppUnit::TestCaller<dba_tests::CSVTestCase>("debug_test",&dba_tests::CSVTestCase::invalidPos)); 150 150 //runner.addTest(new CppUnit::TestCaller<SQLite3SQLArchiveTestCase>("debug_test",&SQLite3SQLArchiveTestCase::transactions_rollback)); 151 151 //runner.addTest(dba_tests::ConnectStringTestCase::suite());
