// GenericRepositoryOperator_t.cxx #include "dataset_catalog/GenericRepositoryOperator.h" #include "dataset_util/ThreadCredential.h" #include "dataset_catalog/SqlGenericRepository.h" #include "dataset_sql/SqlResultTable.h" #include "dataset_sql/SqlResult.h" #include #include using std::cout; using std::endl; using std::string; using dset::SqlResult; using dset::SqlResultTable; using dset::SqlGenericRepository; using dset::GenericRepository; using dset::GenericRepositoryOperator; typedef GenericRepository::IdList IdList; typedef GenericRepositoryOperator::ObjList ObjList; namespace { void msg(string txt) { cout << "--- " << txt << " ---" << endl; } } // end unnamed namespace int GenericRepositoryOperator_t() { msg("Begin testing GenericRepositoryOperator"); msg("Set thread ownership to gain write access"); string owner = "me"; ThreadCredential().set_default_owner(owner); cout << ThreadCredential() << endl; //Constructing a Result set to construct a SqlResultTable. string names[9] = { "identifier", "idhi", "idlo", "sxml", "owner", "ctime", "comment", "created", "lastModified" }; SqlResult::NameList cols(names, names+9); SqlResult res1(cols); SqlResult res2(cols); msg("Insert rows into table 1"); SqlResult::Row row0, row1, row2, row3; row0["idhi"] = "0"; row0["idlo"] = "0"; row0["sxml"] = "dataset"; res1.insert_row(row0); row1["idhi"] = "400"; row1["idlo"] = "3"; row1["sxml"] = ""; res1.insert_row(row1); row2["idhi"] = "100"; row2["idlo"] = "2"; row2["sxml"] = ""; res1.insert_row(row2); row3["idhi"] = "200"; row3["idlo"] = "1"; row3["sxml"] = ""; res1.insert_row(row3); cout << res1; SqlResultTable table1(res1); SqlGenericRepository rep1(table1); assert(rep1.is_valid()); msg("Insert rows into table 2"); row0["idhi"] = "0"; row0["idlo"] = "0"; row0["sxml"] = "dataset"; res2.insert_row(row0); row1["idhi"] = "400"; row1["idlo"] = "3"; row1["sxml"] = "Inconsistent dataset1"; res2.insert_row(row1); row2["idhi"] = "100"; row2["idlo"] = "2"; row2["sxml"] = "Inconsistent dataset2"; res2.insert_row(row2); cout << res2; SqlResultTable table2(res2); SqlGenericRepository rep2(table2); assert(rep2.is_valid()); msg("Constructor"); GenericRepository &r1 = rep1; GenericRepository &r2 = rep2; GenericRepositoryOperator gr(r1, r2); msg("Check validity"); assert(gr.is_valid()); msg("Merge repositories"); assert(gr.merge() == 0); gr.result(r1, r2); msg("Detination repository after merging"); IdList lst2 = r2.get_ids(); for(unsigned int i = 0; i < lst2.size(); ++i) { cout << "idhi-idlo - " << lst2[i] << endl; cout << "sxml - " << r2.get(lst2[i]) << endl; } msg("Retrieve the list of ids of inconsistent duplicates"); IdList lst = gr.inconsistent_duplicate_ids(); for( IdList::const_iterator it = lst.begin(); it != lst.end(); ++it ) cout << *it << endl; msg("Retrieve the list of inconsistent duplicates"); ObjList olst = gr.inconsistent_duplicates(); for( ObjList::const_iterator it = olst.begin(); it != olst.end(); ++it ) cout << *it << endl; msg("Retrieve the 2 repositories"); gr.result(r1, r2); assert(r1.is_valid()); assert(r2.is_valid()); msg("All tests passed successfully"); return 0; } #ifdef CTEST_MAIN int main() { return GenericRepositoryOperator_t(); } #endif