int main() { // create scheme TTable::Schema AnimalS; AnimalS.Add(TPair<TStr,TTable::TYPE>("Animal", TTable::STR)); AnimalS.Add(TPair<TStr,TTable::TYPE>("Size", TTable::STR)); AnimalS.Add(TPair<TStr,TTable::TYPE>("Location", TTable::STR)); AnimalS.Add(TPair<TStr,TTable::TYPE>("Number", TTable::INT)); // create table PTable T = TTable::LoadSS("Animals", AnimalS, "animals.txt"); //PTable T = TTable::LoadSS("Animals", AnimalS, "animals.txt"); T->Unique("Animal"); //TTable Ts = *T; not working because of problem with copy-c'tor PTable Ts = TTable::LoadSS("Animals_s", AnimalS, "animals.txt"); Ts->Unique("Animal"); // test Select // create predicate tree: find all animals that are big and african or medium and Australian TPredicate::TAtomicPredicate A1(TPredicate::STR, true, TPredicate::EQ, "Location", "", 0, 0, "Africa"); TPredicate::TPredicateNode N1(A1); // Location == "Africa" TPredicate::TAtomicPredicate A2(TPredicate::STR, true, TPredicate::EQ, "Size", "", 0, 0, "big"); TPredicate::TPredicateNode N2(A2); // Size == "big" TPredicate::TPredicateNode N3(TPredicate::AND); N3.AddLeftChild(&N1); N3.AddRightChild(&N2); TPredicate::TAtomicPredicate A4(TPredicate::STR, true, TPredicate::EQ, "Location", "", 0, 0, "Australia"); TPredicate::TPredicateNode N4(A4); TPredicate::TAtomicPredicate A5(TPredicate::STR, true, TPredicate::EQ, "Size", "", 0, 0, "medium"); TPredicate::TPredicateNode N5(A5); TPredicate::TPredicateNode N6(TPredicate::AND); N6.AddLeftChild(&N4); N6.AddRightChild(&N5); TPredicate::TPredicateNode N7(TPredicate::OR); N7.AddLeftChild(&N3); N7.AddRightChild(&N6); TPredicate Pred(&N7); Ts->Select(Pred); TStrV GroupBy; GroupBy.Add("Location"); T->Group("LocationGroup", GroupBy); GroupBy.Add("Size"); T->Group("LocationSizeGroup", GroupBy); T->Count("LocationCount", "Location"); PTable Tj = T->Join("Location", *Ts, "Location"); //print table T->SaveSS("animals_out_T.txt"); Ts->SaveSS("animals_out_Ts.txt"); Tj->SaveSS("animals_out_Tj.txt"); return 0; }
int main(){ // create scheme TTable::Schema AnimalS; AnimalS.Add(TPair<TStr,TTable::TYPE>("Animal", TTable::STR)); AnimalS.Add(TPair<TStr,TTable::TYPE>("Size", TTable::STR)); AnimalS.Add(TPair<TStr,TTable::TYPE>("Location", TTable::STR)); AnimalS.Add(TPair<TStr,TTable::TYPE>("Number", TTable::INT)); // create table PTable T1 = TTable::LoadSS("Animals1", AnimalS, "animals.txt"); PTable T2 = TTable::LoadSS("Animals2", AnimalS, "animals.txt"); // test Select // create predicate tree: find all animals that are big and african or medium and Australian TPredicate::TAtomicPredicate A1(TPredicate::STR, true, TPredicate::EQ, "Size", "", 0, 0, "big"); TPredicate::TPredicateNode N1(A1); // Size == "big" TPredicate Pred(&N1); T1->Select(Pred); T1->SaveSS("animals_out_T1.txt"); PTable Tj = T1->Join("Location", *T2, "Location"); TStrV GroupBy; GroupBy.Add("Animals1.Animal"); GroupBy.Add("Animals2.Animal"); Tj->Group("AnimalPair", GroupBy); Tj->Unique("AnimalPair"); //print table Tj->SaveSS("animals_out_Tj_1.txt"); // Join on Location to get animal pairs // select the animal pairs of animals of the same size // group by (Animal, Animal) // unique by group idx /* PTable T3 = TTable::LoadSS("Animals3", AnimalS, "../../testfiles/animals.txt"); //PTable T4 = TTable::LoadSS("Animals4", AnimalS, "../../testfiles/animals.txt"); TTable T4 = *T3; T4.Name = "Animals4"; PTable To = T3->Join("Location", T4, "Location"); TPredicate::TAtomicPredicate A2(TPredicate::STR, false, TPredicate::EQ, "Animals3.Size", "Animals4.Size"); TPredicate::TPredicateNode N2(A2); TPredicate Pred2(&N2); To->Select(Pred2); TStrV GroupBy1; GroupBy1.Add("Animals3.Animal"); GroupBy1.Add("Animals4.Animal"); To->Group("AnimalPair", GroupBy1); To->Unique("AnimalPair"); //print table To->SaveSS("../../testfiles/animals_out_To_1.txt"); return 0; */ PTable T3 = TTable::LoadSS("Animals3", AnimalS, "animals.txt"); PTable T4 = TTable::LoadSS("Animals4", AnimalS, "animals.txt"); PTable To = T3->Join("Location", *T4, "Location"); TPredicate::TAtomicPredicate A2(TPredicate::STR, false, TPredicate::EQ, "Animals3.Size", "Animals4.Size"); TPredicate::TPredicateNode N2(A2); TPredicate Pred2(&N2); To->Select(Pred2); TStrV GroupBy1; GroupBy1.Add("Animals3.Animal"); GroupBy1.Add("Animals4.Animal"); To->Group("AnimalPair", GroupBy1); To->Unique("AnimalPair"); //print table To->SaveSS("animals_out_To_1.txt"); return 0; }