const ValueNode* AccessNodePtr(const ValueNode::Container& con, const string& name) { const auto i(con.find(ValueNode(0, name))); return i != end(con) ? &*i : nullptr; }
int main(int argc, char *argv[]){ PosVal *pv1 = new IntPosVal(2, 2126); PosVal *pv2 = new IntPosVal(3, 2126); PosVal *pv3 = new FloatPosVal(1, 4.4); PosVal *pv4 = new FloatPosVal(2, 3.4); ValueNode vn1 = ValueNode(pv1); ValueNode vn2 = ValueNode(pv2); ValueNode vn3 = ValueNode(pv3); ValueNode vn4 = ValueNode(pv4); AxprNode av1 = AxprNode(EQ); av1.setNode(&vn1, &vn2); AxprNode av2 = AxprNode(EQ); av2.setNode(&vn3, &vn4); AxprNode av3 = AxprNode(OR); av3.setNode(&av1, &av2); if(*(int *)av1.getValue()){ cout << "Equal" << endl; }else{ cout << "Not equal" << endl; } if(*(int *)av2.getValue()){ cout << "Equal" << endl; }else{ cout << "Not equal" << endl; } if(*(int *)av3.getValue()){ cout << "OK" << endl; }else{ cout << "NG" << endl; } }
void VarAssign::isValid (NodeValidator* v) { // Check self Node::isValid(v); v->ensure(ChildCount() == 2, "VarAssign must have exactly 2 children"); v->ensure(hasExprType(), "VarAssign must have an expression type"); // Check NAME node v->ensure(NameNode() != NULL, "VarAssign must have a name node"); if (NameNode() != NULL) { v->ensure(NameNode()->hasExprType(), "VarAssign : Name node must have an expression type"); } if (ValueNode() != NULL) { // Check VALUE node v->ensure(ValueNode()->hasExprType(), "VarAssign : Value node must have an expression type"); // TODO Should check that the var type and the value type have the expr type. // Take care of pointers. } }
ValueNode TransformNPLA1(const ValueNode& node, std::function<NodeMapper> mapper) { auto s(node.GetSize()); if(s == 0) return {0, "", node ? Deliteralize(Access<string>(node)) : string()}; auto i(node.begin()); if(s == 1) return TransformNPLA1(*i, mapper); const auto& name(ParseNPLANodeString(*i)); if(!name.empty()) yunseq(++i, --s); if(s == 1) { auto&& n(TransformNPLA1(*i, mapper)); if(n.GetName().empty()) return {0, name, std::move(n.Value)}; return {ValueNode::Container{std::move(n)}, name}; } auto p_node_con(make_unique<ValueNode::Container>()); std::for_each(i, node.end(), [&](const ValueNode& nd){ auto&& n(mapper ? mapper(nd) : TransformNPLA1(nd, mapper)); p_node_con->insert(n.GetName().empty() ? ValueNode(0, '$' + std::to_string(p_node_con->size()), std::move(n.Value)) : std::move(n)); }); return {std::move(p_node_con), name}; }
int main(){ chdir(QUERY_DATA_PATH); EnvDB *env = new EnvDB(); env->open(); BDBOpe db_r(env->getEnv(), "REGION20.row"); BDBOpe db_n(env->getEnv(), "NATION20.row"); BDBOpe db_c(env->getEnv(), "CUSTOMER20.row"); BDBOpe db_o(env->getEnv(), "ORDERS20.row"); BDBOpe db_l(env->getEnv(), "LINEITEM20.row"); BDBOpe db_s(env->getEnv(), "SUPPLIER20.row"); Operator *o1, *o2, *o3, *o4, *o5, *o6, *o7, *o8, *o9, *o10; Operator *o11, *o12, *o13, *o14, *o15, *o16, *o17, *o18, *o19, *o20; Operator *o21, *o22, *o23; db_r.open(); db_n.open(); db_c.open(); db_o.open(); db_l.open(); db_s.open(); TABLE_REC tableRec_r; TABLE_REC tableRec_n; TABLE_REC tableRec_c; TABLE_REC tableRec_o; TABLE_REC tableRec_l; TABLE_REC tableRec_s; /* set table info */ tableRec_r.tableID = 9; tableRec_r.attriNum = 3; tableRec_n.tableID = 10; tableRec_n.attriNum = 4; tableRec_c.tableID = 14; tableRec_c.attriNum = 8; tableRec_o.tableID = 15; tableRec_o.attriNum = 9; tableRec_l.tableID = 16; tableRec_l.attriNum = 16; tableRec_s.tableID = 11; tableRec_s.attriNum = 7; /* aet attriRec */ ATTRIBUTE_REC attriRec_r[tableRec_r.attriNum]; ATTRIBUTE_REC attriRec_n[tableRec_n.attriNum]; ATTRIBUTE_REC attriRec_c[tableRec_c.attriNum]; ATTRIBUTE_REC attriRec_o[tableRec_o.attriNum]; ATTRIBUTE_REC attriRec_l[tableRec_l.attriNum]; ATTRIBUTE_REC attriRec_s[tableRec_s.attriNum]; AttributeManager AM(env->getEnv()); AM.getForTableID(tableRec_r, attriRec_r); AM.getForTableID(tableRec_n, attriRec_n); AM.getForTableID(tableRec_c, attriRec_c); AM.getForTableID(tableRec_o, attriRec_o); AM.getForTableID(tableRec_l, attriRec_l); AM.getForTableID(tableRec_s, attriRec_s); /* selection1 */ FixStrPosVal pv1(1,25); string str1("ASIA"); pv1.setStr(str1); ValueNode vn1 = ValueNode(&pv1); ColumnRefNode cn1; cn1.tableID = 9; cn1.attriID = 2; AxprNode an1 = AxprNode(EQ, &cn1, &vn1); /* selection2 */ DatePosVal pv2(1,(unsigned char *)"1994-01-01"); DatePosVal pv3(1,(unsigned char *)"1995-01-01"); ValueNode vn2 = ValueNode(&pv2); ValueNode vn3 = ValueNode(&pv3); ColumnRefNode cn2; cn2.tableID = 15; cn2.attriID = 5; AxprNode an2 = AxprNode(GE, &cn2, &vn2); AxprNode an3 = AxprNode(LT, &cn2, &vn3); AxprNode an4 = AxprNode(AND, &an2, &an3); /* GROUP */ IntPosVal pv5(1, 1); ValueNode vn5 = ValueNode(&pv5); ColumnRefNode cn4[2]; cn4[0].tableID = 16; cn4[0].attriID = 6; cn4[1].tableID = 16; cn4[1].attriID = 7; ArithmeticNode arith1(SUB, &vn5, &cn4[1]); ArithmeticNode arith2(MUL, &cn4[0], &arith1); Aggregation *aggre[1]; aggre[0] = new Sum(&arith2, 2); OPERATION_NODE group[1]; group[0].tableID = 10; group[0].attributeID = 2; /* Join1 */ OPERATION_NODE pn1[2]; pn1[0].tableID = 9; pn1[0].attributeID = 1; pn1[1].tableID = 10; pn1[1].attributeID = 3; JOIN_OPERATION_NODE jpn1[1]; jpn1[0].rightNode = pn1[0]; jpn1[0].leftNode = pn1[1]; /* Join2 */ OPERATION_NODE pn2[2]; pn2[0].tableID = 10; pn2[0].attributeID = 1; pn2[1].tableID = 11; pn2[1].attributeID = 4; JOIN_OPERATION_NODE jpn2[1]; jpn2[0].rightNode = pn2[0]; jpn2[0].leftNode = pn2[1]; /* Join3 */ OPERATION_NODE pn3[2]; pn3[0].tableID = 11; pn3[0].attributeID = 1; pn3[1].tableID = 16; pn3[1].attributeID = 3; JOIN_OPERATION_NODE jpn3[1]; jpn3[0].rightNode = pn3[0]; jpn3[0].leftNode = pn3[1]; /* Join4 */ OPERATION_NODE pn4[2]; pn4[0].tableID = 15; pn4[0].attributeID = 1; pn4[1].tableID = 16; pn4[1].attributeID = 1; JOIN_OPERATION_NODE jpn4[1]; jpn4[0].rightNode = pn4[0]; jpn4[0].leftNode = pn4[1]; /* Join5 */ OPERATION_NODE pn5[4]; pn5[0].tableID = 14; pn5[0].attributeID = 1; pn5[1].tableID = 14; pn5[1].attributeID = 4; pn5[2].tableID = 15; pn5[2].attributeID = 2; pn5[3].tableID = 11; pn5[3].attributeID = 4; JOIN_OPERATION_NODE jpn5[2]; jpn5[0].rightNode = pn5[0]; jpn5[0].leftNode = pn5[2]; jpn5[1].rightNode = pn5[1]; jpn5[1].leftNode = pn5[3]; /* Projection1 */ OPERATION_NODE pro1[1]; pro1[0].tableID = 9; pro1[0].attributeID = 1; /* Projection2 */ OPERATION_NODE pro2[2]; pro2[0].tableID = 10; pro2[0].attributeID = 1; pro2[1].tableID = 10; pro2[1].attributeID = 2; /* Projection3 */ OPERATION_NODE pro3[3]; pro3[0].tableID = 11; pro3[0].attributeID = 1; pro3[1].tableID = 11; pro3[1].attributeID = 4; pro3[2].tableID = 10; pro3[2].attributeID = 2; /* Projection4 */ OPERATION_NODE pro4[5]; pro4[0].tableID = 16; pro4[0].attributeID = 1; pro4[1].tableID = 16; pro4[1].attributeID = 6; pro4[2].tableID = 16; pro4[2].attributeID = 7; pro4[3].tableID = 11; pro4[3].attributeID = 4; pro4[4].tableID = 10; pro4[4].attributeID = 2; /* Projection5 */ OPERATION_NODE pro5[2]; pro5[0].tableID = 15; pro5[0].attributeID = 1; pro5[1].tableID = 15; pro5[1].attributeID = 2; /* Projection6 */ OPERATION_NODE pro6[2]; pro6[0].tableID = 14; pro6[0].attributeID = 1; pro6[1].tableID = 14; pro6[1].attributeID = 4; /* Projection7 */ OPERATION_NODE pro7[3]; pro7[0].tableID = 10; pro7[0].attributeID = 2; pro7[1].tableID = 16; pro7[1].attributeID = 6; pro7[2].tableID = 16; pro7[2].attributeID = 7; /* Sort 1 */ OPERATION_NODE so1[1]; so1[0].tableID = 0; so1[0].attributeID = 0; so1[0].position = 1; so1[0].option = 1; o1 = new Scan(&db_r, attriRec_r, 3); // cout << "OK new o1" << endl; o2 = new Selection((Node *)&an1 ,(unsigned int)1); // cout << "OK new o2" << endl; o2->setPreOperator(o1); //r_regionkey o3 = new Projection(pro1, 1); o3->setPreOperator(o2); // cout << "OK new o3" << endl; o4 = new Scan(&db_n, attriRec_n, 4); // cout << "OK new o4" << endl; o5 = new OneSideHashJoin(o3, o4 , jpn1, 1); // cout << "OK new o5" << endl; //n_natonkey, n_name o6 = new Projection(pro2, 2); o6->setPreOperator(o5); // cout << "OK new o6" << endl; o7 = new Scan(&db_s, attriRec_s, 7); // cout << "OK new o7" << endl; o8 = new OneSideHashJoin(o6, o7 , jpn2, 1); // cout << "OK new o8" << endl; //s_suppkey, s_nationkey, n_name o9 = new Projection(pro3, 3); o9->setPreOperator(o8); // cout << "OK new o9" << endl; o10 = new Scan(&db_l, attriRec_l, 16); // cout << "OK new o10" << endl; o11 = new OneSideHashJoin(o9, o10 , jpn3, 1); // cout << "OK new o11" << endl; //l_orderkey, l_extendedprice, l_discount, s_nationkey, n_name o12 = new Projection(pro4, 5); o12->setPreOperator(o11); // cout << "OK new o12" << endl; o13 = new Scan(&db_o, attriRec_o, 9); // cout << "OK new o13" << endl; o14 = new Selection((Node *)&an4 ,(unsigned int)2); // cout << "OK new o14" << endl; o14->setPreOperator(o13); //o_orderkey, o_custkey o15 = new Projection(pro5, 2); o15->setPreOperator(o14); // cout << "OK new o15" << endl; o16 = new OneSideHashJoin(o15, o12 , jpn4, 1); // cout << "OK new o16" << endl; o17 = new Scan(&db_c, attriRec_c, 8); // cout << "OK new o17" << endl; //c_custkey, c_nationkey o18 = new Projection(pro6, 2); o18->setPreOperator(o17); // cout << "OK new o18" << endl; o19 = new OneSideHashJoin(o18, o16 , jpn5, 2); // cout << "OK new o19" << endl; //n_name, l_extendedprice, l_discount o20 = new Projection(pro7, 3); o20->setPreOperator(o19); // cout << "OK new o20" << endl; o21 = new GroupBy(group, 1, aggre, 1); o21->setPreOperator(o20); // cout << "OK new o21" << endl; o22 = new Sort(so1, 1); o22->setPreOperator(o21); // cout << "OK new o22" << endl; o23 = new OutPut(STD_OUT); // cout << "OK new o23" << endl; o23->setPreOperator(o22); o23->init(env->getEnv()); cout << "TEST START Q5 NSM20" << endl; cout << setprecision(2); cout << setiosflags(ios::fixed); o23->exec(); }
int main(){ chdir(QUERY_DATA_PATH); EnvDB *env = new EnvDB(); env->open(); BDBOpe db_r_1(env->getEnv(), "1.1.DSM"); BDBOpe db_r_2(env->getEnv(), "1.2.DSM"); BDBOpe db_n_1(env->getEnv(), "2.1.DSM"); BDBOpe db_n_2(env->getEnv(), "2.2.DSM"); BDBOpe db_n_3(env->getEnv(), "2.3.DSM"); BDBOpe db_s_1(env->getEnv(), "3.1.DSM"); BDBOpe db_s_4(env->getEnv(), "3.4.DSM"); BDBOpe db_c_1(env->getEnv(), "6.1.DSM"); BDBOpe db_c_4(env->getEnv(), "6.4.DSM"); BDBOpe db_o_1(env->getEnv(), "7.1.DSM"); BDBOpe db_o_2(env->getEnv(), "7.2.DSM"); BDBOpe db_o_5(env->getEnv(), "7.5.DSM"); BDBOpe db_l_1(env->getEnv(), "8.1.DSM"); BDBOpe db_l_3(env->getEnv(), "8.3.DSM"); BDBOpe db_l_6(env->getEnv(), "8.6.DSM"); BDBOpe db_l_7(env->getEnv(), "8.7.DSM"); db_r_1.open(); db_r_2.open(); db_n_1.open(); db_n_2.open(); db_n_3.open(); db_s_1.open(); db_s_4.open(); db_c_1.open(); db_c_4.open(); db_o_1.open(); db_o_2.open(); db_o_5.open(); db_l_1.open(); db_l_3.open(); db_l_6.open(); db_l_7.open(); Operator *o1, *o2, *o3, *o4, *o5, *o6, *o7, *o8, *o9, *o10; Operator *o11, *o12, *o13, *o14, *o15, *o16, *o17, *o18, *o19, *o20; Operator *o21, *o22, *o23, *o24, *o25, *o26, *o27, *o28, *o29, *o30; Operator *o31, *o32, *o33, *o34, *o35, *o36, *o37, *o38, *o39; TABLE_REC tableRec_r; TABLE_REC tableRec_n; TABLE_REC tableRec_c; TABLE_REC tableRec_o; TABLE_REC tableRec_l; TABLE_REC tableRec_s; /* set table info */ tableRec_r.tableID = 1; tableRec_r.attriNum = 3; tableRec_n.tableID = 2; tableRec_n.attriNum = 4; tableRec_s.tableID = 3; tableRec_s.attriNum = 7; tableRec_c.tableID = 6; tableRec_c.attriNum = 8; tableRec_o.tableID = 7; tableRec_o.attriNum = 9; tableRec_l.tableID = 8; tableRec_l.attriNum = 16; /* aet attriRec */ ATTRIBUTE_REC attriRec_r[tableRec_r.attriNum]; ATTRIBUTE_REC attriRec_n[tableRec_n.attriNum]; ATTRIBUTE_REC attriRec_s[tableRec_s.attriNum]; ATTRIBUTE_REC attriRec_c[tableRec_c.attriNum]; ATTRIBUTE_REC attriRec_o[tableRec_o.attriNum]; ATTRIBUTE_REC attriRec_l[tableRec_l.attriNum]; AttributeManager AM(env->getEnv()); AM.getForTableID(tableRec_r, attriRec_r); AM.getForTableID(tableRec_n, attriRec_n); AM.getForTableID(tableRec_c, attriRec_c); AM.getForTableID(tableRec_o, attriRec_o); AM.getForTableID(tableRec_l, attriRec_l); AM.getForTableID(tableRec_s, attriRec_s); /* selection1 */ FixStrPosVal pv1(1,25); string str1("ASIA"); pv1.setStr(str1); ValueNode vn1 = ValueNode(&pv1); ColumnRefNode cn1; cn1.tableID = 1; cn1.attriID = 2; AxprNode an1 = AxprNode(EQ, &cn1, &vn1); /* selection2 */ DatePosVal pv2(1,(unsigned char *)"1994-01-01"); DatePosVal pv3(1,(unsigned char *)"1995-01-01"); ValueNode vn2 = ValueNode(&pv2); ValueNode vn3 = ValueNode(&pv3); ColumnRefNode cn2; cn2.tableID = 7; cn2.attriID = 5; AxprNode an2 = AxprNode(GE, &cn2, &vn2); AxprNode an3 = AxprNode(LT, &cn2, &vn3); AxprNode an4 = AxprNode(AND, &an2, &an3); /* GROUP */ IntPosVal pv5(1, 1); ValueNode vn5 = ValueNode(&pv5); ColumnRefNode cn4[2]; cn4[0].tableID = 8; cn4[0].attriID = 6; cn4[1].tableID = 8; cn4[1].attriID = 7; ArithmeticNode arith1(SUB, &vn5, &cn4[1]); ArithmeticNode arith2(MUL, &cn4[0], &arith1); Aggregation *aggre[1]; aggre[0] = new Sum(&arith2, 2); OPERATION_NODE group[1]; group[0].tableID = 2; group[0].attributeID = 2; /* Sort 1 */ OPERATION_NODE so1[1]; so1[0].tableID = 0; so1[0].attributeID = 0; so1[0].position = 1; so1[0].option = 1; /* Projection1 */ OPERATION_NODE pro1[2]; pro1[0].tableID = 2; pro1[0].attributeID = 1; pro1[1].tableID = 2; pro1[1].attributeID = 2; /* Projection2 */ OPERATION_NODE pro2[3]; pro2[0].tableID = 3; pro2[0].attributeID = 1; pro2[1].tableID = 3; pro2[1].attributeID = 4; pro2[2].tableID = 2; pro2[2].attributeID = 2; /* Projection3 */ OPERATION_NODE pro3[3]; pro3[0].tableID = 2; pro3[0].attributeID = 2; pro3[1].tableID = 8; pro3[1].attributeID = 6; pro3[2].tableID = 8; pro3[2].attributeID = 7; OPERATION_NODE op1; op1.tableID = 2; op1.attributeID = 3; OPERATION_NODE op2; op2.tableID = 3; op2.attributeID = 4; OPERATION_NODE op3; op3.tableID = 8; op3.attributeID = 3; OPERATION_NODE op4; op4.tableID = 7; op4.attributeID = 2; OPERATION_NODE op5; op5.tableID = 6; op5.attributeID = 4; /* Join1 */ OPERATION_NODE pn1[4]; pn1[0].tableID = 6; pn1[0].attributeID = 1; pn1[1].tableID = 6; pn1[1].attributeID = 4; pn1[2].tableID = 7; pn1[2].attributeID = 2; pn1[3].tableID = 3; pn1[3].attributeID = 4; JOIN_OPERATION_NODE jpn1[2]; jpn1[0].rightNode = pn1[0]; jpn1[0].leftNode = pn1[2]; jpn1[1].rightNode = pn1[1]; jpn1[1].leftNode = pn1[3]; /* exec */ o1 = new ScanDSM(&db_r_2, &attriRec_r[1], 1); // cout << "OK new o1" << endl; o2 = new SelectBitOut((Node *)&an1 ,(unsigned int)1); // cout << "OK new o2" << endl; o2->setPreOperator(o1); o3 = new ScanDSM(&db_r_1, &attriRec_r[0], 1); // cout << "OK new o3" << endl; o4 = new BitFilter(o3, o2); // cout << "OK new o4" << endl; o5 = new ScanDSM(&db_n_3, &attriRec_n[2], 1); // cout << "OK new o5" << endl; o6 = new JoinIndex_OneHash(o4, o5); // cout << "OK new o6" << endl; o7 = new ScanDSM(&db_n_1, &attriRec_n[0], 1); // cout << "OK new o7" << endl; o8 = new ScanFromJI(o7, o6, &op1); // cout << "OK new o8" << endl; o9 = new ScanDSM(&db_n_2, &attriRec_n[1], 1); // cout << "OK new o9" << endl; //n_name, n_natonkey, r_regionkey, n_nationkey o10 = new ScanFromJI(o9, o8, &op1); // cout << "OK new o10" << endl; //n_name, n_natonkey o11 = new Projection(pro1, 2); o11->setPreOperator(o10); // cout << "OK new o11" << endl; o12 = new ScanDSM(&db_s_4, &attriRec_s[3], 1); // cout << "OK new o12" << endl; o13 = new JoinIndex_OneHash(o11, o12); // cout << "OK new o13" << endl; o14 = new ScanDSM(&db_s_1, &attriRec_s[0], 1); // cout << "OK new o14" << endl; o15 = new ScanFromJI(o14, o13, &op2); // cout << "OK new o15" << endl; //s_suppkey s_nationkey n_name o16 = new Projection(pro2, 3); o16->setPreOperator(o15); // cout << "OK new o16" << endl; o17 = new ScanDSM(&db_l_3, &attriRec_l[2], 1); // cout << "OK new o17" << endl; o18 = new JoinIndex_OneHash(o16, o17); // cout << "OK new o18" << endl; o19 = new ScanDSM(&db_l_6, &attriRec_l[5], 1); // cout << "OK new o19" << endl; o20 = new ScanFromJI(o19, o18, &op3); // cout << "OK new o20" << endl; o21 = new ScanDSM(&db_l_7, &attriRec_l[6], 1); // cout << "OK new o21" << endl; o22 = new ScanFromJI(o21, o20, &op3); // cout << "OK new o22" << endl; o23 = new ScanDSM(&db_l_1, &attriRec_l[0], 1); // cout << "OK new o23" << endl; //l_orderkey, l_extendedprice, l_discount, s_suppkey, s_nationkey, n_name, l_suppkey o24 = new ScanFromJI(o23, o22, &op3); // cout << "OK new o24" << endl; o25 = new ScanDSM(&db_o_5, &attriRec_o[4], 1); // cout << "OK new o25" << endl; o26 = new SelectBitOut((Node *)&an4 ,(unsigned int)2); // cout << "OK new o26" << endl; o26->setPreOperator(o25); o27 = new ScanDSM(&db_o_2, &attriRec_o[1], 1); // cout << "OK new o27" << endl; o28 = new BitFilter(o27, o26); // cout << "OK new o28" << endl; o29 = new ScanDSM(&db_o_1, &attriRec_o[0], 1); // cout << "OK new o29" << endl; //o_order, o_custkey o30 = new ScanFromJI(o29, o28, &op4); // cout << "OK new o30" << endl; //o_custkey, o_orderkey, l_orderkey, l_extendedprice, l_discount, s_suppkey, s_nationkey, n_name, l_suppkey o31 = new JoinIndex_OneHash(o30, o24); // cout << "OK new o31" << endl; o32 = new ScanDSM(&db_c_4, &attriRec_c[3], 1); // cout << "OK new o32" << endl; o33 = new ScanDSM(&db_c_1, &attriRec_c[0], 1); // cout << "OK new o33" << endl; o34 = new ScanFromJI(o33, o32, &op5); // cout << "OK new o34" << endl; o35 = new OneSideHashJoin(o34, o31 , jpn1, 2); // cout << "OK new o31" << endl; o36 = new Projection(pro3, 3); o36->setPreOperator(o35); // cout << "OK new o36" << endl; o37 = new GroupBy(group, 1, aggre, 1); o37->setPreOperator(o36); // cout << "OK new o37" << endl; o38 = new Sort(so1, 1); o38->setPreOperator(o37); // cout << "OK new o38" << endl; o39 = new OutPut(STD_OUT); // cout << "OK new o39" << endl; o39->setPreOperator(o38); o39->init(env->getEnv()); cout << "TEST START" << endl; cout << setprecision(4); cout << setiosflags(ios::fixed); o39->exec(); }
int main(){ chdir("../RunData"); BDBOpe db_r("REGION.row"); BDBOpe db_n1("NATION.row"); BDBOpe db_c("CUSTOMER.row"); BDBOpe db_o("ORDERS.row"); BDBOpe db_l("LINEITEM.row"); BDBOpe db_p("PART.row"); BDBOpe db_s("SUPPLIER.row"); BDBOpe db_n2("NATION.row"); Operator *o1, *o2, *o3, *o4, *o5, *o6, *o7, *o8, *o9, *o10; Operator *o11, *o12, *o13, *o14, *o15, *o16, *o17, *o18, *o19, *o20; Operator *o21, *o22, *o23, *o24, *o25, *o26, *o27, *o28, *o29, *o30; db_r.open(); db_n1.open(); db_c.open(); db_o.open(); db_l.open(); db_p.open(); db_s.open(); db_n2.open(); TABLE_REC tableRec_r; TABLE_REC tableRec_n1; TABLE_REC tableRec_c; TABLE_REC tableRec_o; TABLE_REC tableRec_l; TABLE_REC tableRec_p; TABLE_REC tableRec_s; TABLE_REC tableRec_n2; /* set table info */ tableRec_r.tableID = 1; tableRec_r.attriNum = 3; tableRec_n1.tableID = 2; tableRec_n1.attriNum = 4; tableRec_c.tableID = 6; tableRec_c.attriNum = 8; tableRec_o.tableID = 7; tableRec_o.attriNum = 9; tableRec_l.tableID = 8; tableRec_l.attriNum = 16; tableRec_p.tableID = 4; tableRec_p.attriNum = 9; tableRec_s.tableID = 3; tableRec_s.attriNum = 7; tableRec_n2.tableID = 2; tableRec_n2.attriNum = 4; /* aet attriRec */ ATTRIBUTE_REC attriRec_r[tableRec_r.attriNum]; ATTRIBUTE_REC attriRec_n1[tableRec_n1.attriNum]; ATTRIBUTE_REC attriRec_c[tableRec_c.attriNum]; ATTRIBUTE_REC attriRec_o[tableRec_o.attriNum]; ATTRIBUTE_REC attriRec_l[tableRec_l.attriNum]; ATTRIBUTE_REC attriRec_p[tableRec_p.attriNum]; ATTRIBUTE_REC attriRec_s[tableRec_s.attriNum]; ATTRIBUTE_REC attriRec_n2[tableRec_n2.attriNum]; AttributeManager AM_r; AttributeManager AM_n1; AttributeManager AM_c; AttributeManager AM_o; AttributeManager AM_l; AttributeManager AM_p; AttributeManager AM_s; AttributeManager AM_n2; AM_r.getForTableID(tableRec_r, attriRec_r); for(int i=0 ; i < (int)tableRec_r.attriNum ; i++){ cout << attriRec_r[i].attributeName << endl; } AM_n1.getForTableID(tableRec_n1, attriRec_n1); for(int i=0 ; i < (int)tableRec_n1.attriNum ; i++){ cout << attriRec_n1[i].attributeName << endl; } AM_c.getForTableID(tableRec_c, attriRec_c); for(int i=0 ; i < (int)tableRec_c.attriNum ; i++){ cout << attriRec_c[i].attributeName << endl; } AM_o.getForTableID(tableRec_o, attriRec_o); for(int i=0 ; i < (int)tableRec_o.attriNum ; i++){ cout << attriRec_o[i].attributeName << endl; } AM_l.getForTableID(tableRec_l, attriRec_l); for(int i=0 ; i < (int)tableRec_l.attriNum ; i++){ cout << attriRec_l[i].attributeName << endl; } AM_p.getForTableID(tableRec_p, attriRec_p); for(int i=0 ; i < (int)tableRec_p.attriNum ; i++){ cout << attriRec_p[i].attributeName << endl; } AM_s.getForTableID(tableRec_s, attriRec_s); for(int i=0 ; i < (int)tableRec_s.attriNum ; i++){ cout << attriRec_s[i].attributeName << endl; } AM_n2.getForTableID(tableRec_n2, attriRec_n2); for(int i=0 ; i < (int)tableRec_n2.attriNum ; i++){ cout << attriRec_n2[i].attributeName << endl; } /* selection1 */ FixStrPosVal pv1(1,25); string str1("AMERICA"); pv1.setStr(str1); ValueNode vn1 = ValueNode(&pv1); ColumnRefNode cn1; cn1.tableID = 1; cn1.attriID = 2; AxprNode an1 = AxprNode(EQ, &cn1, &vn1); /* selection2 */ DatePosVal pv2(1,(unsigned char *)"1995-01-01"); DatePosVal pv3(1,(unsigned char *)"1996-12-31"); ValueNode vn2 = ValueNode(&pv2); ValueNode vn3 = ValueNode(&pv3); ColumnRefNode cn2; cn2.tableID = 7; cn2.attriID = 5; AxprNode an2 = AxprNode(GE, &cn2, &vn2); AxprNode an3 = AxprNode(LE, &cn2, &vn3); AxprNode an4 = AxprNode(AND, &an2, &an3); /* selection3 */ VarStrPosVal pv4(1,25); string str2("ECONOMY ANODIZED STEEL"); pv4.set((unsigned char*)str2.c_str()); ValueNode vn4 = ValueNode(&pv4); ColumnRefNode cn3; cn3.tableID = 4; cn3.attriID = 5; AxprNode an5 = AxprNode(EQ, &cn3, &vn4); /* GROUP */ IntPosVal pv5(1, 1); ValueNode vn5 = ValueNode(&pv5); ColumnRefNode cn4[2]; cn4[0].tableID = 8; cn4[0].attriID = 6; cn4[1].tableID = 8; cn4[1].attriID = 7; ArithmeticNode arith1(SUB, &vn5, &cn4[1]); ArithmeticNode arith2(MUL, &cn4[0], &arith1); Aggregation *aggre[1]; aggre[0] = new Sum(&arith2, 2); OPERATION_NODE group[1]; group[0].tableID = 7; group[0].attributeID = 5; /* Join1 */ OPERATION_NODE pn1[2]; pn1[0].tableID = 1; pn1[0].attributeID = 1; pn1[1].tableID = 2; pn1[1].attributeID = 3; JOIN_OPERATION_NODE jpn1[1]; jpn1[0].rightNode = pn1[0]; jpn1[0].leftNode = pn1[1]; /* Join2 */ OPERATION_NODE pn2[2]; pn2[0].tableID = 2; pn2[0].attributeID = 1; pn2[1].tableID = 6; pn2[1].attributeID = 4; JOIN_OPERATION_NODE jpn2[1]; jpn2[0].rightNode = pn2[0]; jpn2[0].leftNode = pn2[1]; /* Join3 */ OPERATION_NODE pn3[2]; pn3[0].tableID = 6; pn3[0].attributeID = 1; pn3[1].tableID = 7; pn3[1].attributeID = 2; JOIN_OPERATION_NODE jpn3[1]; jpn3[0].rightNode = pn3[0]; jpn3[0].leftNode = pn3[1]; /* Join4 */ OPERATION_NODE pn4[2]; pn4[0].tableID = 7; pn4[0].attributeID = 1; pn4[1].tableID = 8; pn4[1].attributeID = 1; JOIN_OPERATION_NODE jpn4[1]; jpn4[0].rightNode = pn4[0]; jpn4[0].leftNode = pn4[1]; /* Join5 */ OPERATION_NODE pn5[2]; pn5[0].tableID = 4; pn5[0].attributeID = 1; pn5[1].tableID = 8; pn5[1].attributeID = 2; JOIN_OPERATION_NODE jpn5[1]; jpn5[0].rightNode = pn5[0]; jpn5[0].leftNode = pn5[1]; /* Join6 */ OPERATION_NODE pn6[2]; pn6[0].tableID = 3; pn6[0].attributeID = 1; pn6[1].tableID = 8; pn6[1].attributeID = 3; JOIN_OPERATION_NODE jpn6[1]; jpn6[0].rightNode = pn6[0]; jpn6[0].leftNode = pn6[1]; /* Join7 */ OPERATION_NODE pn7[2]; pn7[0].tableID = 2; pn7[0].attributeID = 1; pn7[1].tableID = 3; pn7[1].attributeID = 4; JOIN_OPERATION_NODE jpn7[1]; jpn7[0].rightNode = pn7[0]; jpn7[0].leftNode = pn7[1]; /* Projection1 */ OPERATION_NODE pro1[1]; pro1[0].tableID = 1; pro1[0].attributeID = 1; /* Projection2 */ OPERATION_NODE pro2[2]; pro2[0].tableID = 2; pro2[0].attributeID = 1; pro2[1].tableID = 2; pro2[1].attributeID = 3; /* Projection3 */ OPERATION_NODE pro3[1]; pro3[0].tableID = 6; pro3[0].attributeID = 1; /* Projection4 */ OPERATION_NODE pro4[2]; pro4[0].tableID = 7; pro4[0].attributeID = 1; pro4[1].tableID = 7; pro4[1].attributeID = 5; /* Projection5 */ OPERATION_NODE pro5[1]; pro5[0].tableID = 4; pro5[0].attributeID = 1; /* Projection6 */ OPERATION_NODE pro6[2]; pro6[0].tableID = 3; pro6[0].attributeID = 1; pro6[1].tableID = 3; pro6[1].attributeID = 4; /* Projection7 */ OPERATION_NODE pro7[2]; pro7[0].tableID = 2; pro7[0].attributeID = 1; pro7[1].tableID = 2; pro7[1].attributeID = 2; /* Projection8 */ OPERATION_NODE pro8[7]; pro8[0].tableID = 7; pro8[0].attributeID = 5; pro8[1].tableID = 2; pro8[1].attributeID = 2; pro8[2].tableID = 8; pro8[2].attributeID = 6; pro8[3].tableID = 8; pro8[3].attributeID = 7; pro8[4].tableID = 8; pro8[4].attributeID = 1; pro8[5].tableID = 8; pro8[5].attributeID = 2; pro8[6].tableID = 8; pro8[6].attributeID = 3; /* Extract */ OPERATION_NODE ex[1]; ex[0].tableID = 7; ex[0].attributeID = 5; /* Sort 1 */ OPERATION_NODE so1[1]; so1[0].tableID = 7; so1[0].attributeID = 5; so1[0].option = 0; o1 = new Scan(&db_r, attriRec_r, 3); cout << "OK new o1" << endl; o2 = new Selection((Node *)&an1 ,(unsigned int)1); cout << "OK new o2" << endl; o2->setPreOperator(o1); o3 = new Projection(pro1, 1); o3->setPreOperator(o2); cout << "OK new o3" << endl; o4 = new Scan(&db_n1, attriRec_n1, 4); cout << "OK new o4" << endl; o5 = new OneSideHashJoin(o3, o4 , jpn1, 1); cout << "OK new o5" << endl; o6 = new Projection(pro2, 1); o6->setPreOperator(o5); cout << "OK new o6" << endl; o7 = new Scan(&db_c, attriRec_c, 8); cout << "OK new o7" << endl; o8 = new OneSideHashJoin(o6, o7 , jpn2, 1); cout << "OK new o8" << endl; o9 = new Projection(pro3, 1); o9->setPreOperator(o8); cout << "OK new o9" << endl; o10 = new Scan(&db_o, attriRec_o, 9); cout << "OK new o10" << endl; o11 = new Selection((Node *)&an4 ,(unsigned int)2); cout << "OK new o11" << endl; o11->setPreOperator(o10); o12 = new OneSideHashJoin(o9, o11 , jpn3, 1); cout << "OK new o12" << endl; o13 = new Projection(pro4, 2); o13->setPreOperator(o12); cout << "OK new o13" << endl; o14 = new Scan(&db_l, attriRec_l, 16); cout << "OK new o14" << endl; o15 = new OneSideHashJoin(o13, o14 , jpn4, 1); cout << "OK new o15" << endl; o16 = new Scan(&db_p, attriRec_p, 9); cout << "OK new o16" << endl; o17 = new Selection((Node *)&an5 ,(unsigned int)1); cout << "OK new o17" << endl; o17->setPreOperator(o16); o18 = new Projection(pro5, 1); o18->setPreOperator(o17); cout << "OK new o18" << endl; o19 = new OneSideHashJoin(o18, o15 , jpn5, 1); cout << "OK new o19" << endl; o20 = new Scan(&db_s, attriRec_s, 7); cout << "OK new o20" << endl; o21 = new Projection(pro6, 2); o21->setPreOperator(o20); cout << "OK new o21" << endl; o22 = new OneSideHashJoin(o21, o19 , jpn6, 1); cout << "OK new o22" << endl; o23 = new Scan(&db_n2, attriRec_n2, 4); cout << "OK new o23" << endl; o24 = new Projection(pro7, 2); o24->setPreOperator(o23); cout << "OK new o24" << endl; o25 = new OneSideHashJoin(o24, o22 , jpn7, 1); cout << "OK new o25" << endl; o26 = new Extract(ex, true, false, false); o26->setPreOperator(o25); cout << "OK new o26" << endl; o27 = new Projection(pro8, 7); o27->setPreOperator(o26); cout << "OK new o27" << endl; o28 = new GroupBy(group, 1, aggre, 1); o28->setPreOperator(o27); cout << "OK new o28" << endl; o29 = new Sort(so1, 1); o29->setPreOperator(o28); cout << "OK new o29" << endl; o30 = new OutPut(STD_OUT); cout << "OK new o30" << endl; o30->setPreOperator(o29); o30->init(); cout << "TEST START" << endl; cout << setprecision(2); cout << setiosflags(ios::fixed); o30->exec(); }
int main(){ chdir(QUERY_DATA_PATH); EnvDB *env = new EnvDB(); env->open(); BDBOpe db_r_1(env->getEnv(), "1.1.DSM"); BDBOpe db_r_2(env->getEnv(), "1.2.DSM"); BDBOpe db_n_1(env->getEnv(), "2.1.DSM"); BDBOpe db_n2_1(env->getEnv(), "2.1.DSM"); BDBOpe db_n2_2(env->getEnv(), "2.2.DSM"); BDBOpe db_n_3(env->getEnv(), "2.3.DSM"); BDBOpe db_s_1(env->getEnv(), "3.1.DSM"); BDBOpe db_s_4(env->getEnv(), "3.4.DSM"); BDBOpe db_p_1(env->getEnv(), "4.1.DSM"); BDBOpe db_p_5(env->getEnv(), "4.5.DSM"); BDBOpe db_c_1(env->getEnv(), "6.1.DSM"); BDBOpe db_c_4(env->getEnv(), "6.4.DSM"); BDBOpe db_o_1(env->getEnv(), "7.1.DSM"); BDBOpe db_o_2(env->getEnv(), "7.2.DSM"); BDBOpe db_o_5(env->getEnv(), "7.5.DSM"); BDBOpe db_l_1(env->getEnv(), "8.1.DSM"); BDBOpe db_l_2(env->getEnv(), "8.2.DSM"); BDBOpe db_l_3(env->getEnv(), "8.3.DSM"); BDBOpe db_l_6(env->getEnv(), "8.6.DSM"); BDBOpe db_l_7(env->getEnv(), "8.7.DSM"); Operator *o1, *o2, *o3, *o4, *o5, *o6, *o7, *o8, *o9, *o10; Operator *o11, *o12, *o13, *o14, *o15, *o16, *o17, *o18, *o19, *o20; Operator *o21, *o22, *o23, *o24, *o25, *o26, *o27, *o28, *o29, *o30; Operator *o31, *o32, *o33, *o34, *o35, *o36, *o37, *o38, *o39, *o40; Operator *o41, *o42, *o43, *o44, *o45, *o46, *o47, *o48, *o49, *o50, *o51; db_r_1.open(); db_r_2.open(); db_n_1.open(); db_n2_1.open(); db_n2_2.open(); db_n_3.open(); db_s_1.open(); db_s_4.open(); db_p_1.open(); db_p_5.open(); db_c_1.open(); db_c_4.open(); db_o_1.open(); db_o_2.open(); db_o_5.open(); db_l_1.open(); db_l_2.open(); db_l_3.open(); db_l_6.open(); db_l_7.open(); TABLE_REC tableRec_r; TABLE_REC tableRec_n; TABLE_REC tableRec_s; TABLE_REC tableRec_p; TABLE_REC tableRec_c; TABLE_REC tableRec_o; TABLE_REC tableRec_l; tableRec_r.tableID = 1; tableRec_r.attriNum = 3; tableRec_n.tableID = 2; tableRec_n.attriNum = 4; tableRec_s.tableID = 3; tableRec_s.attriNum = 7; tableRec_p.tableID = 4; tableRec_p.attriNum = 9; tableRec_c.tableID = 6; tableRec_c.attriNum = 8; tableRec_o.tableID = 7; tableRec_o.attriNum = 9; tableRec_l.tableID = 8; tableRec_l.attriNum = 16; ATTRIBUTE_REC attriRec_r[tableRec_r.attriNum]; ATTRIBUTE_REC attriRec_n[tableRec_n.attriNum]; ATTRIBUTE_REC attriRec_s[tableRec_s.attriNum]; ATTRIBUTE_REC attriRec_p[tableRec_p.attriNum]; ATTRIBUTE_REC attriRec_c[tableRec_c.attriNum]; ATTRIBUTE_REC attriRec_o[tableRec_o.attriNum]; ATTRIBUTE_REC attriRec_l[tableRec_l.attriNum]; AttributeManager AM(env->getEnv()); AM.getForTableID(tableRec_r, attriRec_r); /* for(int i=0 ; i < (int)tableRec_r.attriNum ; i++){ cout << attriRec_r[i].attributeName << endl; } */ AM.getForTableID(tableRec_n, attriRec_n); /* for(int i=0 ; i < (int)tableRec_n.attriNum ; i++){ cout << attriRec_n[i].attributeName << endl; } */ AM.getForTableID(tableRec_s, attriRec_s); /* for(int i=0 ; i < (int)tableRec_s.attriNum ; i++){ cout << attriRec_s[i].attributeName << endl; } */ AM.getForTableID(tableRec_p, attriRec_p); /* for(int i=0 ; i < (int)tableRec_p.attriNum ; i++){ cout << attriRec_p[i].attributeName << endl; } */ AM.getForTableID(tableRec_c, attriRec_c); /* for(int i=0 ; i < (int)tableRec_c.attriNum ; i++){ cout << attriRec_c[i].attributeName << endl; } */ AM.getForTableID(tableRec_o, attriRec_o); /* for(int i=0 ; i < (int)tableRec_o.attriNum ; i++){ cout << attriRec_o[i].attributeName << endl; } */ AM.getForTableID(tableRec_l, attriRec_l); /* for(int i=0 ; i < (int)tableRec_l.attriNum ; i++){ cout << attriRec_l[i].attributeName << endl; } */ /* selection1 */ FixStrPosVal pv1(1,25); string str1("AMERICA"); pv1.setStr(str1); ValueNode vn1 = ValueNode(&pv1); ColumnRefNode cn1; cn1.tableID = 1; cn1.attriID = 2; AxprNode an1 = AxprNode(EQ, &cn1, &vn1); /* selection2 */ DatePosVal pv2(1,(unsigned char *)"1995-01-01"); DatePosVal pv3(1,(unsigned char *)"1996-12-31"); ValueNode vn2 = ValueNode(&pv2); ValueNode vn3 = ValueNode(&pv3); ColumnRefNode cn2; cn2.tableID = 7; cn2.attriID = 5; AxprNode an2 = AxprNode(GE, &cn2, &vn2); AxprNode an3 = AxprNode(LE, &cn2, &vn3); AxprNode an4 = AxprNode(AND, &an2, &an3); /* selection3 */ VarStrPosVal pv4(1,25); string str2("ECONOMY ANODIZED STEEL"); pv4.set((unsigned char*)str2.c_str()); ValueNode vn4 = ValueNode(&pv4); ColumnRefNode cn3; cn3.tableID = 4; cn3.attriID = 5; AxprNode an5 = AxprNode(EQ, &cn3, &vn4); /*Join1*/ OPERATION_NODE jop1, jop2; jop1.tableID = 6; jop1.attributeID = 4; jop2.tableID = 6; jop2.attributeID = 1; JOIN_OPERATION_NODE jon1; jon1.rightNode = jop1; jon1.leftNode = jop2; /*Join2*/ OPERATION_NODE jop3, jop4; jop3.tableID = 7; jop3.attributeID = 2; jop4.tableID = 7; jop4.attributeID = 5; JOIN_OPERATION_NODE jon2; jon2.rightNode = jop3; jon2.leftNode = jop4; /*Join3*/ OPERATION_NODE jop5, jop6; jop5.tableID = 7; jop5.attributeID = 5; jop6.tableID = 7; jop6.attributeID = 1; JOIN_OPERATION_NODE jon3; jon3.rightNode = jop5; jon3.leftNode = jop6; /*Join4*/ OPERATION_NODE jop7, jop8; jop7.tableID = 7; jop7.attributeID = 1; jop8.tableID = 8; jop8.attributeID = 1; JOIN_OPERATION_NODE jon4; jon4.rightNode = jop7; jon4.leftNode = jop8; /*Join5*/ OPERATION_NODE jop9, jop10; jop9.tableID = 4; jop9.attributeID = 1; jop10.tableID = 8; jop10.attributeID = 2; JOIN_OPERATION_NODE jon5; jon5.rightNode = jop9; jon5.leftNode = jop10; /*Join6*/ OPERATION_NODE jop11, jop12; jop11.tableID = 6; jop11.attributeID = 1; jop12.tableID = 7; jop12.attributeID = 2; JOIN_OPERATION_NODE jon6; jon6.rightNode = jop11; jon6.leftNode = jop12; /*Join7*/ OPERATION_NODE jop13, jop14; jop13.tableID = 3; jop13.attributeID = 1; jop14.tableID = 8; jop14.attributeID = 3; JOIN_OPERATION_NODE jon7; jon7.rightNode = jop13; jon7.leftNode = jop14; /*Join8*/ OPERATION_NODE jop15, jop16; jop15.tableID = 2; jop15.attributeID = 1; jop16.tableID = 3; jop16.attributeID = 4; JOIN_OPERATION_NODE jon8; jon8.rightNode = jop15; jon8.leftNode = jop16; /* Projection1 */ OPERATION_NODE pro1[1]; pro1[0].tableID = 6; pro1[0].attributeID = 1; /* Projection2 */ OPERATION_NODE pro2[2]; pro2[0].tableID = 7; pro2[0].attributeID = 1; pro2[1].tableID = 7; pro2[1].attributeID = 5; /* Projection3 */ OPERATION_NODE pro3[1]; pro3[0].tableID = 8; pro3[0].attributeID = 2; /* Projection4 */ OPERATION_NODE pro4[2]; pro4[0].tableID = 8; pro4[0].attributeID = 3; pro4[1].tableID = 2; pro4[1].attributeID = 2; /* Projection5 */ OPERATION_NODE pro5[4]; pro5[0].tableID = 7; pro5[0].attributeID = 5; pro5[1].tableID = 2; pro5[1].attributeID = 2; pro5[2].tableID = 8; pro5[2].attributeID = 6; pro5[3].tableID = 8; pro5[3].attributeID = 7; /* Extract */ OPERATION_NODE ex[1]; ex[0].tableID = 7; ex[0].attributeID = 5; /* GROUP */ IntPosVal pv5(1, 1); ValueNode vn5 = ValueNode(&pv5); ColumnRefNode cn4[2]; cn4[0].tableID = 8; cn4[0].attriID = 6; cn4[1].tableID = 8; cn4[1].attriID = 7; ArithmeticNode arith1(SUB, &vn5, &cn4[1]); ArithmeticNode arith2(MUL, &cn4[0], &arith1); Aggregation *aggre[1]; aggre[0] = new Sum(&arith2, 2); OPERATION_NODE group[1]; group[0].tableID = 7; group[0].attributeID = 5; /* Sort 1 */ OPERATION_NODE so1[1]; so1[0].tableID = 7; so1[0].attributeID = 5; so1[0].option = 0; OPERATION_NODE op1; op1.tableID = 2; op1.attributeID = 3; OPERATION_NODE op2; op2.tableID = 6; op2.attributeID = 4; OPERATION_NODE op3; op3.tableID = 7; op3.attributeID = 5; OPERATION_NODE op4; op4.tableID = 8; op4.attributeID = 1; OPERATION_NODE op5; op5.tableID = 3; op5.attributeID = 4; OPERATION_NODE op6; op6.tableID = 2; op6.attributeID = 2; OPERATION_NODE op7; op7.tableID = 8; op7.attributeID = 2; o1 = new ScanDSM(&db_r_2, &attriRec_r[1], 1); o2 = new SelectBitOut((Node *)&an1 ,(unsigned int)1); o2->setPreOperator(o1); o3 = new ScanDSM(&db_r_1, &attriRec_r[0], 1); o4 = new BitFilter(o3, o2); o5 = new ScanDSM(&db_n_3, &attriRec_n[2], 1); o6 = new JoinIndex_OneHash(o4, o5); o7 = new ScanDSM(&db_n_1, &attriRec_n[0], 1); o8 = new ScanFromJI(o7, o6, &op1); o9 = new ScanDSM(&db_c_4, &attriRec_c[3], 1); o10 = new JoinIndex_OneHash(o8, o9); o11 = new ScanDSM(&db_c_1, &attriRec_c[0], 1); o12 = new ScanFromJI(o11, o10, &op2); o13 = new Projection(pro1, 1); o13->setPreOperator(o12); /* o14 = new ScanDSM(&db_o_2, &attriRec_o[1], 1); // cout << "OK new o14" << endl; o15 = new JoinIndex_OneHash(o13, o14); // cout << "OK new o15" << endl; */ o14 = new ScanDSM(&db_o_5, &attriRec_o[4], 1); o15 = new Selection((Node *)&an4 ,(unsigned int)2); o15->setPreOperator(o14); o16 = new ScanDSM(&db_o_2, &attriRec_o[1], 1); o17 = new ScanFromJI(o16, o15, &op3); o18 = new ScanDSM(&db_o_1, &attriRec_o[0], 1); o19 = new ScanFromJI(o18, o17, &op3); o20 = new ScanDSM(&db_p_5, &attriRec_p[4], 1); o21 = new SelectBitOut((Node *)&an5 ,1); o21->setPreOperator(o20); o22 = new ScanDSM(&db_p_1, &attriRec_p[0], 1); o23 = new BitFilter(o22, o21); o24 = new ScanDSM(&db_l_2, &attriRec_l[1], 1); o25 = new JoinIndex_OneHash(o23, o24, &jon5); o26 = new ScanDSM(&db_l_1, &attriRec_l[0], 1); o27 = new ScanFromJI(o26, o25, &op7); o28 = new JoinIndex_OneHash(o19, o27, &jon4); o29 = new JoinIndex_OneHash(o13, o28, &jon6); o30 = new ScanDSM(&db_s_4, &attriRec_s[3], 1); o31 = new ScanDSM(&db_s_1, &attriRec_s[0], 1); o32 = new ScanFromJI(o31, o30, &op5); o33 = new ScanDSM(&db_l_3, &attriRec_l[2], 1); o34 = new ScanFromJI(o33, o29, &op7); o35 = new JoinIndex_OneHash(o32, o34, &jon7); o36 = new ScanDSM(&db_n2_1, &attriRec_n[0], 1); o37 = new ScanDSM(&db_n2_2, &attriRec_n[1], 1); o38 = new ScanFromJI(o36, o37, &op6); o40 = new JoinIndex_OneHash(o38, o35, &jon8); o41 = new ScanDSM(&db_l_6, &attriRec_l[5], 1); o42 = new ScanFromJI(o41, o40, &op4); o43 = new ScanDSM(&db_l_7, &attriRec_l[6], 1); o44 = new ScanFromJI(o43, o42, &op4); o45 = new Projection(pro5, 4); o45->setPreOperator(o44); o46 = new Extract(ex, true, false, false); o46->setPreOperator(o45); o47 = new GroupBy(group, 1, aggre, 1); o47->setPreOperator(o46); o48 = new Sort(so1, 1); o48->setPreOperator(o47); o49 = new OutPut(TIME_OUT); o49->setPreOperator(o48); o49->init(env->getEnv()); cout << "TEST START" << endl; cout << setprecision(2); cout << setiosflags(ios::fixed); o49->exec(); }
int main(){ chdir("../RunData"); BDBOpe db_r_1("1.1.DSM"); BDBOpe db_r_2("1.2.DSM"); BDBOpe db_n_1("2.1.DSM"); BDBOpe db_n_2("2.2.DSM"); BDBOpe db_n_3("2.3.DSM"); BDBOpe db_c_1("6.1.DSM"); BDBOpe db_c_4("6.4.DSM"); BDBOpe db_o_1("7.1.DSM"); BDBOpe db_o_2("7.2.DSM"); BDBOpe db_o_5("7.5.DSM"); Operator *o1, *o2, *o3, *o4, *o5, *o6, *o7, *o8, *o9, *o10; Operator *o11, *o12, *o13, *o14, *o15, *o16, *o17, *o18, *o19, *o20; Operator *o21, *o22, *o23, *o24, *o25, *o26, *o27, *o28, *o29, *o30; db_r_1.open(); db_r_2.open(); db_n_1.open(); db_n_2.open(); db_n_3.open(); db_c_1.open(); db_c_4.open(); db_o_1.open(); db_o_2.open(); db_o_5.open(); TABLE_REC tableRec_r; TABLE_REC tableRec_n; TABLE_REC tableRec_c; TABLE_REC tableRec_o; tableRec_r.tableID = 1; tableRec_r.attriNum = 3; tableRec_n.tableID = 2; tableRec_n.attriNum = 4; tableRec_c.tableID = 6; tableRec_c.attriNum = 8; tableRec_o.tableID = 7; tableRec_o.attriNum = 9; ATTRIBUTE_REC attriRec_r[tableRec_r.attriNum]; ATTRIBUTE_REC attriRec_n[tableRec_n.attriNum]; ATTRIBUTE_REC attriRec_c[tableRec_c.attriNum]; ATTRIBUTE_REC attriRec_o[tableRec_o.attriNum]; AttributeManager AM_r; AttributeManager AM_n; AttributeManager AM_c; AttributeManager AM_o; AM_r.getForTableID(tableRec_r, attriRec_r); for(int i=0 ; i < (int)tableRec_r.attriNum ; i++){ cout << attriRec_r[i].attributeName << endl; } AM_n.getForTableID(tableRec_n, attriRec_n); for(int i=0 ; i < (int)tableRec_n.attriNum ; i++){ cout << attriRec_n[i].attributeName << endl; } AM_c.getForTableID(tableRec_c, attriRec_c); for(int i=0 ; i < (int)tableRec_c.attriNum ; i++){ cout << attriRec_c[i].attributeName << endl; } AM_o.getForTableID(tableRec_o, attriRec_o); for(int i=0 ; i < (int)tableRec_o.attriNum ; i++){ cout << attriRec_o[i].attributeName << endl; } /* selection1 */ FixStrPosVal pv1(1,25); string str1("AMERICA"); pv1.setStr(str1); ValueNode vn1 = ValueNode(&pv1); ColumnRefNode cn1; cn1.tableID = 1; cn1.attriID = 2; AxprNode an1 = AxprNode(EQ, &cn1, &vn1); /* selection2 */ DatePosVal pv2(1,(unsigned char *)"1995-01-01"); DatePosVal pv3(1,(unsigned char *)"1996-12-31"); ValueNode vn2 = ValueNode(&pv2); ValueNode vn3 = ValueNode(&pv3); ColumnRefNode cn2; cn2.tableID = 7; cn2.attriID = 5; AxprNode an2 = AxprNode(GE, &cn2, &vn2); AxprNode an3 = AxprNode(LE, &cn2, &vn3); AxprNode an4 = AxprNode(AND, &an2, &an3); /*Join1*/ OPERATION_NODE jop1, jop2; jop1.tableID = 6; jop1.attributeID = 4; jop2.tableID = 6; jop2.attributeID = 1; JOIN_OPERATION_NODE jon1; jon1.rightNode = jop1; jon1.leftNode = jop2; /*Join2*/ OPERATION_NODE jop3, jop4; jop3.tableID = 7; jop3.attributeID = 2; jop4.tableID = 7; jop4.attributeID = 5; JOIN_OPERATION_NODE jon2; jon2.rightNode = jop3; jon2.leftNode = jop4; /*Join3*/ OPERATION_NODE jop5, jop6; jop5.tableID = 7; jop5.attributeID = 5; jop6.tableID = 7; jop6.attributeID = 1; JOIN_OPERATION_NODE jon3; jon3.rightNode = jop5; jon3.leftNode = jop6; /* Projection */ OPERATION_NODE pro1[1]; pro1[0].tableID = 6; pro1[0].attributeID = 1; OPERATION_NODE op1; op1.tableID = 2; op1.attributeID = 3; OPERATION_NODE op2; op2.tableID = 6; op2.attributeID = 4; OPERATION_NODE op3; op3.tableID = 7; op3.attributeID = 2; o1 = new ScanDSM(&db_r_2, &attriRec_r[1], 1); cout << "OK new o1" << endl; o2 = new SelectBitOut((Node *)&an1 ,(unsigned int)1); cout << "OK new o2" << endl; o2->setPreOperator(o1); o3 = new ScanDSM(&db_r_1, attriRec_r, 1); cout << "OK new o3" << endl; o4 = new BitFilter(o3, o2); cout << "OK new o4" << endl; o5 = new ScanDSM(&db_n_3, &attriRec_n[2], 1); cout << "OK new o5" << endl; o6 = new JoinIndex_OneHash(o4, o5); cout << "OK new o6" << endl; o7 = new ScanDSM(&db_n_1, &attriRec_n[0], 1); cout << "OK new o7" << endl; o8 = new ScanFromJI(o7, o6, &op1); cout << "OK new o8" << endl; o9 = new ScanDSM(&db_c_4, &attriRec_c[3], 1); cout << "OK new o9" << endl; o10 = new JoinIndex_OneHash(o8, o9); cout << "OK new o10" << endl; o11 = new ScanDSM(&db_c_1, &attriRec_c[0], 1); cout << "OK new o11" << endl; o12 = new ScanFromJI(o11, o10, &op2); cout << "OK new o8" << endl; o13 = new Projection(pro1, 1); o13->setPreOperator(o12); o14 = new ScanDSM(&db_o_2, &attriRec_o[1], 1); cout << "OK new o14" << endl; o15 = new JoinIndex_OneHash(o13, o14); cout << "OK new o15" << endl; o16 = new ScanDSM(&db_o_5, &attriRec_o[4], 1); cout << "OK new o16" << endl; o17 = new Selection((Node *)&an4 ,(unsigned int)2); cout << "OK new o17" << endl; o17->setPreOperator(o16); o18 = new ScanFromJI(o17, o15, &op3); cout << "OK new o18" << endl; o19 = new ScanDSM(&db_o_1, &attriRec_o[0], 1); cout << "OK new o19" << endl; o20 = new ScanFromJI(o19, o18, &op3); cout << "OK new o20" << endl; /* o16 = new BitSort(); o16->setPreOperator(o15); o16 = new ScanDSM(&db_o_1, &attriRec_o[0], 1); cout << "OK new o16" << endl; o17 = new BitFilter(o16, o15); cout << "OK new o17" << endl; o17->init(); /* o2 = new ScanDSM(&db4, attriRec_n + 2, 1); cout << "OK new o2" << endl; JoinIndex_OneHash *JI = new JoinIndex_OneHash(o1, o2); JI->init(); o3 = new ScanDSM(&db2, attriRec_r + 1, 1); cout << "OK new o3" << endl; o4 = new ScanDSM(&db3, attriRec_n + 1, 1); cout << "OK new o4" << endl; */ /* JOIN_INDEX *J = JI->createJoinIndex(); J->ScanNode->setkey(1); cout << J->ScanNode->getRow(NULL, 0) << endl; o5 = new JoinFromJoinIndex(o3, o4, JI->createJoinIndex(), &jon); cout << "OK new o5" << endl; */ o30 = new OutPut(STD_OUT); cout << "OK new o20" << endl; o30->setPreOperator(o20); o30->init(); cout << "TEST START" << endl; o30->exec(); /* o7 = new OutPut(STD_OUT); cout << "OK new o7" << endl; o7->setPreOperator(o2); o7->init(); cout << "TEST START" << endl; o7->exec(); */ }
int main(){ chdir(QUERY_DATA_PATH); EnvDB *env = new EnvDB(); env->open(); BDBOpe db_r_1(env->getEnv(), "1.1.DSM"); BDBOpe db_r_2(env->getEnv(), "1.2.DSM"); BDBOpe db_n_1(env->getEnv(), "2.1.DSM"); BDBOpe db_n_2(env->getEnv(), "2.2.DSM"); BDBOpe db_n_3(env->getEnv(), "2.3.DSM"); BDBOpe db_s_1(env->getEnv(), "3.1.DSM"); BDBOpe db_s_4(env->getEnv(), "3.4.DSM"); BDBOpe db_c_1(env->getEnv(), "6.1.DSM"); BDBOpe db_c_4(env->getEnv(), "6.4.DSM"); BDBOpe db_o(env->getEnv(), "ORDERS.row"); BDBOpe db_l(env->getEnv(), "LINEITEM.row"); SecondDB *sDB,*sDB_o; int (*pf)(Db *sdbp, const Dbt*pkey, const Dbt *pdata, Dbt *skey); pf = L_1_secondary; sDB = new SecondDB(env->getEnv(), "8.1.secondary"); sDB->setNumCmp(); int (*pf_o)(Db *sdbp, const Dbt*pkey, const Dbt *pdata, Dbt *skey); pf_o = O_2_secondary; sDB_o = new SecondDB(env->getEnv(), "7.2.secondary"); sDB_o->setNumCmp(); db_r_1.open(); db_r_2.open(); db_n_1.open(); db_n_2.open(); db_n_3.open(); db_s_1.open(); db_s_4.open(); db_c_1.open(); db_c_4.open(); db_o.open(); db_l.open(); sDB->open(0); db_l.associate(sDB->getDb(), pf); sDB->openCursor(); sDB_o->open(0); db_o.associate(sDB_o->getDb(), pf_o); sDB_o->openCursor(); Operator *o1, *o2, *o3, *o4, *o5, *o6, *o7, *o8, *o9, *o10; Operator *o11, *o12, *o13, *o14, *o15, *o16, *o17, *o18, *o19, *o20; Operator *o21, *o22, *o23, *o24, *o25, *o26, *o27, *o28, *o29, *o30; Operator *o31, *o32, *o33, *o34, *o35, *o36, *o37, *o38, *o39, *o40; TABLE_REC tableRec_r; TABLE_REC tableRec_n; TABLE_REC tableRec_c; TABLE_REC tableRec_o; TABLE_REC tableRec_l; TABLE_REC tableRec_s; /* set table info */ tableRec_r.tableID = 1; tableRec_r.attriNum = 3; tableRec_n.tableID = 2; tableRec_n.attriNum = 4; tableRec_s.tableID = 3; tableRec_s.attriNum = 7; tableRec_c.tableID = 6; tableRec_c.attriNum = 8; tableRec_o.tableID = 7; tableRec_o.attriNum = 9; tableRec_l.tableID = 8; tableRec_l.attriNum = 16; /* aet attriRec */ ATTRIBUTE_REC attriRec_r[tableRec_r.attriNum]; ATTRIBUTE_REC attriRec_n[tableRec_n.attriNum]; ATTRIBUTE_REC attriRec_s[tableRec_s.attriNum]; ATTRIBUTE_REC attriRec_c[tableRec_c.attriNum]; ATTRIBUTE_REC attriRec_o[tableRec_o.attriNum]; ATTRIBUTE_REC attriRec_l[tableRec_l.attriNum]; AttributeManager AM(env->getEnv()); AM.getForTableID(tableRec_r, attriRec_r); AM.getForTableID(tableRec_n, attriRec_n); AM.getForTableID(tableRec_c, attriRec_c); AM.getForTableID(tableRec_o, attriRec_o); AM.getForTableID(tableRec_l, attriRec_l); AM.getForTableID(tableRec_s, attriRec_s); /* selection1 */ FixStrPosVal pv1(1,25); string str1("ASIA"); pv1.setStr(str1); ValueNode vn1 = ValueNode(&pv1); ColumnRefNode cn1; cn1.tableID = 1; cn1.attriID = 2; AxprNode an1 = AxprNode(EQ, &cn1, &vn1); /* selection2 */ DatePosVal pv2(1,(unsigned char *)"1994-01-01"); DatePosVal pv3(1,(unsigned char *)"1995-01-01"); ValueNode vn2 = ValueNode(&pv2); ValueNode vn3 = ValueNode(&pv3); ColumnRefNode cn2; cn2.tableID = 7; cn2.attriID = 5; AxprNode an2 = AxprNode(GE, &cn2, &vn2); AxprNode an3 = AxprNode(LT, &cn2, &vn3); AxprNode an4 = AxprNode(AND, &an2, &an3); /* GROUP */ IntPosVal pv5(1, 1); ValueNode vn5 = ValueNode(&pv5); ColumnRefNode cn4[2]; cn4[0].tableID = 8; cn4[0].attriID = 6; cn4[1].tableID = 8; cn4[1].attriID = 7; ArithmeticNode arith1(SUB, &vn5, &cn4[1]); ArithmeticNode arith2(MUL, &cn4[0], &arith1); Aggregation *aggre[1]; aggre[0] = new Sum(&arith2, 2); OPERATION_NODE group[1]; group[0].tableID = 2; group[0].attributeID = 2; /* Sort 1 */ OPERATION_NODE so1[1]; so1[0].tableID = 0; so1[0].attributeID = 0; so1[0].position = 1; so1[0].option = 1; /* Projection1 */ OPERATION_NODE pro1[2]; pro1[0].tableID = 2; pro1[0].attributeID = 1; pro1[1].tableID = 2; pro1[1].attributeID = 2; /* Projection2 */ OPERATION_NODE pro2[3]; pro2[0].tableID = 3; pro2[0].attributeID = 1; pro2[1].tableID = 3; pro2[1].attributeID = 4; pro2[2].tableID = 2; pro2[2].attributeID = 2; /* Projection3 */ OPERATION_NODE pro3[3]; pro3[0].tableID = 2; pro3[0].attributeID = 2; pro3[1].tableID = 8; pro3[1].attributeID = 6; pro3[2].tableID = 8; pro3[2].attributeID = 7; /* Projection4 */ OPERATION_NODE pro4[3]; pro4[0].tableID = 2; pro4[0].attributeID = 2; pro4[1].tableID = 6; pro4[1].attributeID = 1; pro4[2].tableID =6; pro4[2].attributeID = 4; /* Projection5 */ OPERATION_NODE pro5[3]; pro5[0].tableID = 2; pro5[0].attributeID = 2; pro5[1].tableID = 6; pro5[1].attributeID = 4; pro5[2].tableID = 7; pro5[2].attributeID = 1; /* Projection6 */ OPERATION_NODE pro6[5]; pro6[0].tableID = 2; pro6[0].attributeID = 2; pro6[1].tableID = 6; pro6[1].attributeID = 4; pro6[2].tableID = 8; pro6[2].attributeID = 3; pro6[3].tableID = 8; pro6[3].attributeID = 6; pro6[4].tableID = 8; pro6[4].attributeID = 7; /* Projection11 */ OPERATION_NODE pro11[4]; pro11[0].tableID = 2; pro11[0].attributeID = 2; pro11[1].tableID = 6; pro11[1].attributeID = 4; pro11[2].tableID = 7; pro11[2].attributeID = 1; pro11[3].tableID = 7; pro11[3].attributeID = 5; OPERATION_NODE op1; op1.tableID = 2; op1.attributeID = 3; OPERATION_NODE op2; op2.tableID = 3; op2.attributeID = 4; OPERATION_NODE op3; op3.tableID = 8; op3.attributeID = 3; OPERATION_NODE op4; op4.tableID = 7; op4.attributeID = 2; OPERATION_NODE op5; op5.tableID = 6; op5.attributeID = 4; /* index position */ OPERATION_NODE pro10[1]; pro10[0].tableID = 7; pro10[0].attributeID = 1; /* Join1 */ OPERATION_NODE pn1[2]; pn1[0].tableID = 2; pn1[0].attributeID = 1; pn1[1].tableID = 6; pn1[1].attributeID = 4; JOIN_OPERATION_NODE jpn1[1]; jpn1[0].rightNode = pn1[0]; jpn1[0].leftNode = pn1[1]; /* Join2 */ OPERATION_NODE pn2[2]; pn2[0].tableID = 6; pn2[0].attributeID = 1; pn2[1].tableID = 7; pn2[1].attributeID = 2; JOIN_OPERATION_NODE jpn2[1]; jpn2[0].rightNode = pn2[0]; jpn2[0].leftNode = pn2[1]; /* Join3 */ OPERATION_NODE pn3[2]; pn3[0].tableID = 7; pn3[0].attributeID = 1; pn3[1].tableID = 8; pn3[1].attributeID = 1; JOIN_OPERATION_NODE jpn3[1]; jpn3[0].rightNode = pn3[0]; jpn3[0].leftNode = pn3[1]; /* Join4 */ OPERATION_NODE pn4[4]; pn4[0].tableID = 3; pn4[0].attributeID = 1; pn4[1].tableID = 3; pn4[1].attributeID = 4; pn4[2].tableID = 8; pn4[2].attributeID = 3; pn4[3].tableID = 6; pn4[3].attributeID = 4; JOIN_OPERATION_NODE jpn4[2]; jpn4[0].rightNode = pn4[0]; jpn4[0].leftNode = pn4[2]; jpn4[1].rightNode = pn4[1]; jpn4[1].leftNode = pn4[3]; /* exec */ o1 = new ScanDSM(&db_r_2, &attriRec_r[1], 1); o2 = new SelectBitOut((Node *)&an1 ,(unsigned int)1); o2->setPreOperator(o1); o3 = new ScanDSM(&db_r_1, &attriRec_r[0], 1); o4 = new BitFilter(o3, o2); o5 = new ScanDSM(&db_n_3, &attriRec_n[2], 1); o6 = new JoinIndex_OneHash(o4, o5); o7 = new ScanDSM(&db_n_1, &attriRec_n[0], 1); o8 = new ScanFromJI(o7, o6, &op1); o9 = new ScanDSM(&db_n_2, &attriRec_n[1], 1); //n_name, n_natonkey, r_regionkey, n_nationkey o10 = new ScanFromJI(o9, o8, &op1); //n_name, n_natonkey o11 = new Projection(pro1, 2); o11->setPreOperator(o10); o12 = new ScanDSM(&db_c_4, &attriRec_c[3], 1); o13 = new ScanDSM(&db_c_1, &attriRec_c[0], 1); o14 = new ScanFromJI(o13, o12, &op5); o15 = new OneSideHashJoin(o10, o14 , jpn1, 1); //n_name, c_custkey, c_nationkey o16 = new Projection(pro4, 3); o16->setPreOperator(o15); /* ======== Nested Loop Join with Index ============ */ IndexScan *IS_o = new IndexScan((BDBOpe *)sDB_o, attriRec_o, 9); o17 = new NestedJoin_Index(IS_o, o16, pn2); o18 = new Projection(pro11, 4); o18->setPreOperator(o17); //o17 = new ScanDSM(&db_o_5, &attriRec_o[4], 1); o19 = new Selection((Node *)&an4 ,(unsigned int)2); o19->setPreOperator(o18); //o19 = new ScanDSM(&db_o_2, &attriRec_o[1], 1); //o20 = new BitFilter(o19, o18); /* ======================================================= */ //o21 = new ScanDSM(&db_o_1, &attriRec_o[0], 1); //o_order, o_custkey //o22 = new ScanFromJI(o21, o20, &op4); //n_name, c_custkey, c_nationkey, o_order, o_custkey //o23 = new OneSideHashJoin(o16, o22 , jpn2, 1); //n_name, c_nationkey, o_order o24 = new Projection(pro5, 3); o24->setPreOperator(o19); /* ======== Nested Loop Join with Index ============ */ IndexScan *IS = new IndexScan((BDBOpe *)sDB, attriRec_l, 16); o25 = new NestedJoin_Index(IS, o24, pro10); o26 = new Projection(pro6, 5); o26->setPreOperator(o25); /* ======================================================= */ //l_orderkey, l_extendedprice, l_discount, l_suppkey o33 = new ScanDSM(&db_s_4, &attriRec_s[3], 1); o34 = new ScanDSM(&db_s_1, &attriRec_s[0], 1); o35 = new ScanFromJI(o34, o33, &op2); o36 = new OneSideHashJoin(o35, o26 , jpn4, 2); o37 = new Projection(pro3, 3); o37->setPreOperator(o36); o38 = new GroupBy(group, 1, aggre, 1); o38->setPreOperator(o37); o39 = new Sort(so1, 1); o39->setPreOperator(o38); o40 = new OutPut(TIME_OUT); o40->setPreOperator(o39); o40->init(env->getEnv()); cout << "TEST START Q5" << endl; cout << setprecision(4); cout << setiosflags(ios::fixed); o40->exec(); }
int main(){ chdir(QUERY_DATA_PATH); EnvDB *env = new EnvDB(); env->open(); BDBOpe db_r_1(env->getEnv(), "1.1.DSM"); BDBOpe db_r_2(env->getEnv(), "1.2.DSM"); BDBOpe db_n_1(env->getEnv(), "2.1.DSM"); BDBOpe db_n2_1(env->getEnv(), "2.1.DSM"); BDBOpe db_n2_2(env->getEnv(), "2.2.DSM"); BDBOpe db_n_3(env->getEnv(), "2.3.DSM"); BDBOpe db_s_1(env->getEnv(), "3.1.DSM"); BDBOpe db_s_4(env->getEnv(), "3.4.DSM"); BDBOpe db_p_1(env->getEnv(), "4.1.DSM"); BDBOpe db_p_5(env->getEnv(), "4.5.DSM"); BDBOpe db_c_1(env->getEnv(), "6.1.DSM"); BDBOpe db_c_4(env->getEnv(), "6.4.DSM"); BDBOpe db_o(env->getEnv(), "ORDERS.row"); BDBOpe db_l(env->getEnv(), "LINEITEM.row"); SecondDB *sDB1; int (*pf1)(Db *sdbp, const Dbt*pkey, const Dbt *pdata, Dbt *skey); pf1 = L_1_secondary; sDB1 = new SecondDB(env->getEnv(), "8.1.secondary"); sDB1->setNumCmp(); SecondDB *sDB2; int (*pf2)(Db *sdbp, const Dbt*pkey, const Dbt *pdata, Dbt *skey); pf2 = O_2_secondary; sDB2 = new SecondDB(env->getEnv(), "7.2.secondary"); sDB2->setNumCmp(); Operator *o1, *o2, *o3, *o4, *o5, *o6, *o7, *o8, *o9, *o10; Operator *o11, *o12, *o13, *o14, *o15, *o16, *o17, *o18, *o19, *o20; Operator *o21, *o22, *o23, *o24, *o25, *o26, *o27, *o28, *o29, *o30; Operator *o31, *o32, *o33, *o34, *o35, *o36, *o37, *o38, *o39, *o40; Operator *o41, *o42, *o43, *o44, *o45, *o46, *o47, *o48, *o49, *o50, *o51; db_r_1.open(); db_r_2.open(); db_n_1.open(); db_n2_1.open(); db_n2_2.open(); db_n_3.open(); db_s_1.open(); db_s_4.open(); db_p_1.open(); db_p_5.open(); db_c_1.open(); db_c_4.open(); db_o.open(); sDB2->open(0); db_o.associate(sDB2->getDb(), pf2); sDB2->openCursor(); db_l.open(); sDB1->open(0); db_l.associate(sDB1->getDb(), pf1); sDB1->openCursor(); TABLE_REC tableRec_r; TABLE_REC tableRec_n; TABLE_REC tableRec_s; TABLE_REC tableRec_p; TABLE_REC tableRec_c; TABLE_REC tableRec_o; TABLE_REC tableRec_l; tableRec_r.tableID = 1; tableRec_r.attriNum = 3; tableRec_n.tableID = 2; tableRec_n.attriNum = 4; tableRec_s.tableID = 3; tableRec_s.attriNum = 7; tableRec_p.tableID = 4; tableRec_p.attriNum = 9; tableRec_c.tableID = 6; tableRec_c.attriNum = 8; tableRec_o.tableID = 7; tableRec_o.attriNum = 9; tableRec_l.tableID = 8; tableRec_l.attriNum = 16; ATTRIBUTE_REC attriRec_r[tableRec_r.attriNum]; ATTRIBUTE_REC attriRec_n[tableRec_n.attriNum]; ATTRIBUTE_REC attriRec_s[tableRec_s.attriNum]; ATTRIBUTE_REC attriRec_p[tableRec_p.attriNum]; ATTRIBUTE_REC attriRec_c[tableRec_c.attriNum]; ATTRIBUTE_REC attriRec_o[tableRec_o.attriNum]; ATTRIBUTE_REC attriRec_l[tableRec_l.attriNum]; AttributeManager AM(env->getEnv()); AM.getForTableID(tableRec_r, attriRec_r); AM.getForTableID(tableRec_n, attriRec_n); AM.getForTableID(tableRec_s, attriRec_s); AM.getForTableID(tableRec_p, attriRec_p); AM.getForTableID(tableRec_c, attriRec_c); AM.getForTableID(tableRec_o, attriRec_o); AM.getForTableID(tableRec_l, attriRec_l); /* selection1 */ FixStrPosVal pv1(1,25); string str1("AMERICA"); pv1.setStr(str1); ValueNode vn1 = ValueNode(&pv1); ColumnRefNode cn1; cn1.tableID = 1; cn1.attriID = 2; AxprNode an1 = AxprNode(EQ, &cn1, &vn1); /* selection2 */ DatePosVal pv2(1,(unsigned char *)"1995-01-01"); DatePosVal pv3(1,(unsigned char *)"1996-12-31"); ValueNode vn2 = ValueNode(&pv2); ValueNode vn3 = ValueNode(&pv3); ColumnRefNode cn2; cn2.tableID = 7; cn2.attriID = 5; AxprNode an2 = AxprNode(GE, &cn2, &vn2); AxprNode an3 = AxprNode(LE, &cn2, &vn3); AxprNode an4 = AxprNode(AND, &an2, &an3); /* selection3 */ VarStrPosVal pv4(1,25); string str2("ECONOMY ANODIZED STEEL"); pv4.set((unsigned char*)str2.c_str()); ValueNode vn4 = ValueNode(&pv4); ColumnRefNode cn3; cn3.tableID = 4; cn3.attriID = 5; AxprNode an5 = AxprNode(EQ, &cn3, &vn4); /*Join1*/ OPERATION_NODE jop1, jop2; jop1.tableID = 6; jop1.attributeID = 4; jop2.tableID = 6; jop2.attributeID = 1; JOIN_OPERATION_NODE jon1; jon1.rightNode = jop1; jon1.leftNode = jop2; /*Join2*/ OPERATION_NODE jop3, jop4; jop3.tableID = 7; jop3.attributeID = 2; jop4.tableID = 7; jop4.attributeID = 5; JOIN_OPERATION_NODE jon2; jon2.rightNode = jop3; jon2.leftNode = jop4; /*Join3*/ OPERATION_NODE jop5, jop6; jop5.tableID = 7; jop5.attributeID = 5; jop6.tableID = 7; jop6.attributeID = 1; JOIN_OPERATION_NODE jon3; jon3.rightNode = jop5; jon3.leftNode = jop6; /*Join4*/ OPERATION_NODE jop7, jop8; jop7.tableID = 7; jop7.attributeID = 1; jop8.tableID = 8; jop8.attributeID = 1; JOIN_OPERATION_NODE jon4; jon4.rightNode = jop7; jon4.leftNode = jop8; /*Join5*/ OPERATION_NODE jop9, jop10; jop9.tableID = 4; jop9.attributeID = 1; jop10.tableID = 8; jop10.attributeID = 2; JOIN_OPERATION_NODE jon5; jon5.rightNode = jop9; jon5.leftNode = jop10; /*Join6*/ OPERATION_NODE jop11, jop12; jop11.tableID = 3; jop11.attributeID = 1; jop12.tableID = 8; jop12.attributeID = 3; JOIN_OPERATION_NODE jon6; jon6.rightNode = jop11; jon6.leftNode = jop12; /* Projection1 */ OPERATION_NODE pro1[1]; pro1[0].tableID = 6; pro1[0].attributeID = 1; /* Projection2 */ OPERATION_NODE pro2[2]; pro2[0].tableID = 7; pro2[0].attributeID = 1; pro2[1].tableID = 7; pro2[1].attributeID = 5; /* Projection3 */ OPERATION_NODE pro3[1]; pro3[0].tableID = 8; pro3[0].attributeID = 2; /* Projection4 */ OPERATION_NODE pro4[2]; pro4[0].tableID = 8; pro4[0].attributeID = 3; pro4[1].tableID = 2; pro4[1].attributeID = 2; /* Projection5 */ OPERATION_NODE pro5[4]; pro5[0].tableID = 7; pro5[0].attributeID = 5; pro5[1].tableID = 2; pro5[1].attributeID = 2; pro5[2].tableID = 8; pro5[2].attributeID = 6; pro5[3].tableID = 8; pro5[3].attributeID = 7; /* Projection6 */ OPERATION_NODE pro6[5]; pro6[0].tableID = 7; pro6[0].attributeID = 5; pro6[1].tableID = 8; pro6[1].attributeID = 2; pro6[2].tableID = 8; pro6[2].attributeID = 3; pro6[3].tableID = 8; pro6[3].attributeID = 6; pro6[4].tableID = 8; pro6[4].attributeID = 7; /* Projection7 */ OPERATION_NODE pro7[4]; pro7[0].tableID = 7; pro7[0].attributeID = 5; pro7[1].tableID = 8; pro7[1].attributeID = 3; pro7[2].tableID = 8; pro7[2].attributeID = 6; pro7[3].tableID = 8; pro7[3].attributeID = 7; /* Projection8 */ OPERATION_NODE pro8[2]; pro8[0].tableID = 3; pro8[0].attributeID = 1; pro8[1].tableID = 2; pro8[1].attributeID = 2; /* Projection9 */ OPERATION_NODE pro9[4]; pro9[0].tableID = 2; pro9[0].attributeID = 2; pro9[1].tableID = 7; pro9[1].attributeID = 5; pro9[2].tableID = 8; pro9[2].attributeID = 6; pro9[3].tableID = 8; pro9[3].attributeID = 7; /* Extract */ OPERATION_NODE ex[1]; ex[0].tableID = 7; ex[0].attributeID = 5; /* GROUP */ IntPosVal pv5(1, 1); ValueNode vn5 = ValueNode(&pv5); ColumnRefNode cn4[2]; cn4[0].tableID = 8; cn4[0].attriID = 6; cn4[1].tableID = 8; cn4[1].attriID = 7; ArithmeticNode arith1(SUB, &vn5, &cn4[1]); ArithmeticNode arith2(MUL, &cn4[0], &arith1); Aggregation *aggre[1]; aggre[0] = new Sum(&arith2, 2); OPERATION_NODE group[1]; group[0].tableID = 7; group[0].attributeID = 5; /* Sort 1 */ OPERATION_NODE so1[1]; so1[0].tableID = 7; so1[0].attributeID = 5; so1[0].option = 0; OPERATION_NODE op1; op1.tableID = 2; op1.attributeID = 3; OPERATION_NODE op2; op2.tableID = 6; op2.attributeID = 4; OPERATION_NODE op3; op3.tableID = 7; op3.attributeID = 2; OPERATION_NODE op4; op4.tableID = 8; op4.attributeID = 1; OPERATION_NODE op5; op5.tableID = 3; op5.attributeID = 4; OPERATION_NODE op6; op6.tableID = 2; op6.attributeID = 2; /* index position */ OPERATION_NODE idx1[1]; idx1[0].tableID = 7; idx1[0].attributeID = 1; /* index position */ OPERATION_NODE idx2[1]; idx2[0].tableID = 6; idx2[0].attributeID = 1; //===============================================================- o1 = new ScanDSM(&db_r_2, &attriRec_r[1], 1); // cout << "OK new o1" << endl; o2 = new SelectBitOut((Node *)&an1 ,(unsigned int)1); // cout << "OK new o2" << endl; o2->setPreOperator(o1); o3 = new ScanDSM(&db_r_1, attriRec_r, 1); // cout << "OK new o3" << endl; o4 = new BitFilter(o3, o2); // cout << "OK new o4" << endl; o5 = new ScanDSM(&db_n_3, &attriRec_n[2], 1); // cout << "OK new o5" << endl; o6 = new JoinIndex_OneHash(o4, o5); // cout << "OK new o6" << endl; o7 = new ScanDSM(&db_n_1, &attriRec_n[0], 1); // cout << "OK new o7" << endl; o8 = new ScanFromJI(o7, o6, &op1); // cout << "OK new o8" << endl; o9 = new ScanDSM(&db_c_4, &attriRec_c[3], 1); // cout << "OK new o9" << endl; o10 = new JoinIndex_OneHash(o8, o9); // cout << "OK new o10" << endl; o11 = new ScanDSM(&db_c_1, &attriRec_c[0], 1); // cout << "OK new o11" << endl; o12 = new ScanFromJI(o11, o10, &op2); // cout << "OK new o12" << endl; o13 = new Projection(pro1, 1); o13->setPreOperator(o12); /* ======== Nested Loop Join with Index ============ */ IndexScan *IS2 = new IndexScan((BDBOpe *)sDB2, attriRec_o, 9); o14 = new NestedJoin_Index(IS2, o13, idx2); //l_partkey, l_suppkey, l_extentdedprice, l_discount, o_orderdate //o15 = new Projection(pro6, 5); //o15->setPreOperator(o22); /* ======================================================= */ o17 = new Selection((Node *)&an4 ,(unsigned int)2); // cout << "OK new o17" << endl; o17->setPreOperator(o14); o21 = new Projection(pro2, 2); o21->setPreOperator(o17); // cout << "OK new o21" << endl; /* ======== Nested Loop Join with Index ============ */ IndexScan *IS1 = new IndexScan((BDBOpe *)sDB1, attriRec_l, 16); o22 = new NestedJoin_Index(IS1, o21, idx1); //l_partkey, l_suppkey, l_extentdedprice, l_discount, o_orderdate o23 = new Projection(pro6, 5); o23->setPreOperator(o22); /* ======================================================= */ o24 = new ScanDSM(&db_p_5, &attriRec_p[4], 1); // cout << "OK new o24" << endl; o25 = new SelectBitOut((Node *)&an5 ,1); // cout << "OK new o25" << endl; o25->setPreOperator(o24); o26 = new ScanDSM(&db_p_1, &attriRec_p[0], 1); // cout << "OK new o26" << endl; o27 = new BitFilter(o26, o25); // cout << "OK new o27" << endl; o29 = new OneSideHashJoin(o27, o23, &jon5, 1); // cout << "OK new o29" << endl; o30 = new Projection(pro7, 4); o30->setPreOperator(o29); // cout << "OK new o30" << endl; o32 = new ScanDSM(&db_n2_1, &attriRec_n[0], 1); // cout << "OK new o32" << endl; /**/ o33 = new ScanDSM(&db_n2_2, &attriRec_n[1], 1); // cout << "OK new o33" << endl; o34 = new ScanFromJI(o32, o33, &op6); // cout << "OK new o34" << endl; /* */ o35 = new ScanDSM(&db_s_4, &attriRec_s[3], 1); // cout << "OK new o35" << endl; o36 = new JoinIndex_OneHash(o34, o35); // cout << "OK new o36" << endl; o37 = new ScanDSM(&db_s_1, &attriRec_s[0], 1); // cout << "OK new o37" << endl; o38 = new ScanFromJI(o37, o36, &op5); // cout << "OK new o38" << endl; o39 = new Projection(pro8, 2); o39->setPreOperator(o38); o40 = new OneSideHashJoin(o39, o30, &jon6,1); // cout << "OK new o40" << endl; o41 = new Projection(pro9, 4); o41->setPreOperator(o40); // cout << "OK new o41" << endl; /*l_suppkey, n_name, l_partkey, o_orderdate,*/ o48 = new Extract(ex, true, false, false); o48->setPreOperator(o41); // cout << "OK new o48" << endl; o49 = new GroupBy(group, 1, aggre, 1); o49->setPreOperator(o48); // cout << "OK new o49" << endl; o50 = new Sort(so1, 1); o50->setPreOperator(o49); // cout << "OK new o50" << endl; o51 = new OutPut(TIME_OUT); // cout << "OK new o51" << endl; o51->setPreOperator(o50); o51->init(env->getEnv()); cout << "TEST START" << endl; cout << setprecision(2); cout << setiosflags(ios::fixed); o51->exec(); }
void UnaryOp::isValid (NodeValidator* v) { Node::isValid(v); v->ensure(ValueNode() != NULL, "UnaryOp must have a value node"); }
int main(){ chdir("../RunData"); BDBOpe db_r_1("1.1.DSM"); BDBOpe db_r_2("1.2.DSM"); BDBOpe db_n_1("2.1.DSM"); BDBOpe db_n2_1("2.1.DSM"); BDBOpe db_n2_2("2.2.DSM"); BDBOpe db_n_3("2.3.DSM"); BDBOpe db_s_1("3.1.DSM"); BDBOpe db_s_4("3.4.DSM"); BDBOpe db_p_1("4.1.DSM"); BDBOpe db_p_5("4.5.DSM"); BDBOpe db_c_1("6.1.DSM"); BDBOpe db_c_4("6.4.DSM"); BDBOpe db_o_1("7.1.DSM"); BDBOpe db_o_2("7.2.DSM"); BDBOpe db_o_5("7.5.DSM"); BDBOpe db_l_1("8.1.DSM"); BDBOpe db_l_2("8.2.DSM"); BDBOpe db_l_3("8.3.DSM"); BDBOpe db_l_6("8.6.DSM"); BDBOpe db_l_7("8.7.DSM"); Operator *o1, *o2, *o3, *o4, *o5, *o6, *o7, *o8, *o9, *o10; Operator *o11, *o12, *o13, *o14, *o15, *o16, *o17, *o18, *o19, *o20; Operator *o21, *o22, *o23, *o24, *o25, *o26, *o27, *o28, *o29, *o30; Operator *o31, *o32, *o33, *o34, *o35, *o36, *o37, *o38, *o39, *o40; Operator *o41, *o42, *o43, *o44, *o45, *o46, *o47, *o48, *o49, *o50, *o51; db_r_1.open(); db_r_2.open(); db_n_1.open(); db_n2_1.open(); db_n2_2.open(); db_n_3.open(); db_s_1.open(); db_s_4.open(); db_p_1.open(); db_p_5.open(); db_c_1.open(); db_c_4.open(); db_o_1.open(); db_o_2.open(); db_o_5.open(); db_l_1.open(); db_l_2.open(); db_l_3.open(); db_l_6.open(); db_l_7.open(); TABLE_REC tableRec_r; TABLE_REC tableRec_n; TABLE_REC tableRec_s; TABLE_REC tableRec_p; TABLE_REC tableRec_c; TABLE_REC tableRec_o; TABLE_REC tableRec_l; tableRec_r.tableID = 1; tableRec_r.attriNum = 3; tableRec_n.tableID = 2; tableRec_n.attriNum = 4; tableRec_s.tableID = 3; tableRec_s.attriNum = 7; tableRec_p.tableID = 4; tableRec_p.attriNum = 9; tableRec_c.tableID = 6; tableRec_c.attriNum = 8; tableRec_o.tableID = 7; tableRec_o.attriNum = 9; tableRec_l.tableID = 8; tableRec_l.attriNum = 16; ATTRIBUTE_REC attriRec_r[tableRec_r.attriNum]; ATTRIBUTE_REC attriRec_n[tableRec_n.attriNum]; ATTRIBUTE_REC attriRec_s[tableRec_s.attriNum]; ATTRIBUTE_REC attriRec_p[tableRec_p.attriNum]; ATTRIBUTE_REC attriRec_c[tableRec_c.attriNum]; ATTRIBUTE_REC attriRec_o[tableRec_o.attriNum]; ATTRIBUTE_REC attriRec_l[tableRec_l.attriNum]; AttributeManager AM_r; AttributeManager AM_n; AttributeManager AM_s; AttributeManager AM_p; AttributeManager AM_c; AttributeManager AM_o; AttributeManager AM_l; AM_r.getForTableID(tableRec_r, attriRec_r); for(int i=0 ; i < (int)tableRec_r.attriNum ; i++){ cout << attriRec_r[i].attributeName << endl; } AM_n.getForTableID(tableRec_n, attriRec_n); for(int i=0 ; i < (int)tableRec_n.attriNum ; i++){ cout << attriRec_n[i].attributeName << endl; } AM_s.getForTableID(tableRec_s, attriRec_s); for(int i=0 ; i < (int)tableRec_s.attriNum ; i++){ cout << attriRec_s[i].attributeName << endl; } AM_p.getForTableID(tableRec_p, attriRec_p); for(int i=0 ; i < (int)tableRec_p.attriNum ; i++){ cout << attriRec_p[i].attributeName << endl; } AM_c.getForTableID(tableRec_c, attriRec_c); for(int i=0 ; i < (int)tableRec_c.attriNum ; i++){ cout << attriRec_c[i].attributeName << endl; } AM_o.getForTableID(tableRec_o, attriRec_o); for(int i=0 ; i < (int)tableRec_o.attriNum ; i++){ cout << attriRec_o[i].attributeName << endl; } AM_l.getForTableID(tableRec_l, attriRec_l); for(int i=0 ; i < (int)tableRec_l.attriNum ; i++){ cout << attriRec_l[i].attributeName << endl; } /* selection1 */ FixStrPosVal pv1(1,25); string str1("AMERICA"); pv1.setStr(str1); ValueNode vn1 = ValueNode(&pv1); ColumnRefNode cn1; cn1.tableID = 1; cn1.attriID = 2; AxprNode an1 = AxprNode(EQ, &cn1, &vn1); /* selection2 */ DatePosVal pv2(1,(unsigned char *)"1995-01-01"); DatePosVal pv3(1,(unsigned char *)"1996-12-31"); ValueNode vn2 = ValueNode(&pv2); ValueNode vn3 = ValueNode(&pv3); ColumnRefNode cn2; cn2.tableID = 7; cn2.attriID = 5; AxprNode an2 = AxprNode(GE, &cn2, &vn2); AxprNode an3 = AxprNode(LE, &cn2, &vn3); AxprNode an4 = AxprNode(AND, &an2, &an3); /* selection3 */ VarStrPosVal pv4(1,25); string str2("ECONOMY ANODIZED STEEL"); pv4.set((unsigned char*)str2.c_str()); ValueNode vn4 = ValueNode(&pv4); ColumnRefNode cn3; cn3.tableID = 4; cn3.attriID = 5; AxprNode an5 = AxprNode(EQ, &cn3, &vn4); /*Join1*/ OPERATION_NODE jop1, jop2; jop1.tableID = 6; jop1.attributeID = 4; jop2.tableID = 6; jop2.attributeID = 1; JOIN_OPERATION_NODE jon1; jon1.rightNode = jop1; jon1.leftNode = jop2; /*Join2*/ OPERATION_NODE jop3, jop4; jop3.tableID = 7; jop3.attributeID = 2; jop4.tableID = 7; jop4.attributeID = 5; JOIN_OPERATION_NODE jon2; jon2.rightNode = jop3; jon2.leftNode = jop4; /*Join3*/ OPERATION_NODE jop5, jop6; jop5.tableID = 7; jop5.attributeID = 5; jop6.tableID = 7; jop6.attributeID = 1; JOIN_OPERATION_NODE jon3; jon3.rightNode = jop5; jon3.leftNode = jop6; /*Join4*/ OPERATION_NODE jop7, jop8; jop7.tableID = 7; jop7.attributeID = 1; jop8.tableID = 8; jop8.attributeID = 1; JOIN_OPERATION_NODE jon4; jon4.rightNode = jop7; jon4.leftNode = jop8; /*Join5*/ OPERATION_NODE jop9, jop10; jop9.tableID = 4; jop9.attributeID = 1; jop10.tableID = 8; jop10.attributeID = 2; JOIN_OPERATION_NODE jon5; jon5.rightNode = jop9; jon5.leftNode = jop10; /* Projection1 */ OPERATION_NODE pro1[1]; pro1[0].tableID = 6; pro1[0].attributeID = 1; /* Projection2 */ OPERATION_NODE pro2[2]; pro2[0].tableID = 7; pro2[0].attributeID = 1; pro2[1].tableID = 7; pro2[1].attributeID = 5; /* Projection3 */ OPERATION_NODE pro3[1]; pro3[0].tableID = 8; pro3[0].attributeID = 2; /* Projection4 */ OPERATION_NODE pro4[2]; pro4[0].tableID = 8; pro4[0].attributeID = 3; pro4[1].tableID = 2; pro4[1].attributeID = 2; /* Projection5 */ OPERATION_NODE pro5[4]; pro5[0].tableID = 7; pro5[0].attributeID = 5; pro5[1].tableID = 2; pro5[1].attributeID = 2; pro5[2].tableID = 8; pro5[2].attributeID = 6; pro5[3].tableID = 8; pro5[3].attributeID = 7; /* Extract */ OPERATION_NODE ex[1]; ex[0].tableID = 7; ex[0].attributeID = 5; /* GROUP */ IntPosVal pv5(1, 1); ValueNode vn5 = ValueNode(&pv5); ColumnRefNode cn4[2]; cn4[0].tableID = 8; cn4[0].attriID = 6; cn4[1].tableID = 8; cn4[1].attriID = 7; ArithmeticNode arith1(SUB, &vn5, &cn4[1]); ArithmeticNode arith2(MUL, &cn4[0], &arith1); Aggregation *aggre[1]; aggre[0] = new Sum(&arith2, 2); OPERATION_NODE group[1]; group[0].tableID = 7; group[0].attributeID = 5; /* Sort 1 */ OPERATION_NODE so1[1]; so1[0].tableID = 7; so1[0].attributeID = 5; so1[0].option = 0; OPERATION_NODE op1; op1.tableID = 2; op1.attributeID = 3; OPERATION_NODE op2; op2.tableID = 6; op2.attributeID = 4; OPERATION_NODE op3; op3.tableID = 7; op3.attributeID = 2; OPERATION_NODE op4; op4.tableID = 8; op4.attributeID = 1; OPERATION_NODE op5; op5.tableID = 3; op5.attributeID = 4; OPERATION_NODE op6; op6.tableID = 2; op6.attributeID = 2; o1 = new ScanDSM(&db_r_2, &attriRec_r[1], 1); cout << "OK new o1" << endl; o2 = new SelectBitOut((Node *)&an1 ,(unsigned int)1); cout << "OK new o2" << endl; o2->setPreOperator(o1); o3 = new ScanDSM(&db_r_1, attriRec_r, 1); cout << "OK new o3" << endl; o4 = new BitFilter(o3, o2); cout << "OK new o4" << endl; o5 = new ScanDSM(&db_n_3, &attriRec_n[2], 1); cout << "OK new o5" << endl; o6 = new JoinIndex_OneHash(o4, o5); cout << "OK new o6" << endl; o7 = new ScanDSM(&db_n_1, &attriRec_n[0], 1); cout << "OK new o7" << endl; o8 = new ScanFromJI(o7, o6, &op1); cout << "OK new o8" << endl; o9 = new ScanDSM(&db_c_4, &attriRec_c[3], 1); cout << "OK new o9" << endl; o10 = new JoinIndex_OneHash(o8, o9); cout << "OK new o10" << endl; o11 = new ScanDSM(&db_c_1, &attriRec_c[0], 1); cout << "OK new o11" << endl; o12 = new ScanFromJI(o11, o10, &op2); cout << "OK new o8" << endl; o13 = new Projection(pro1, 1); o13->setPreOperator(o12); o14 = new ScanDSM(&db_o_2, &attriRec_o[1], 1); cout << "OK new o14" << endl; o15 = new JoinIndex_OneHash(o13, o14); cout << "OK new o15" << endl; o16 = new ScanDSM(&db_o_5, &attriRec_o[4], 1); cout << "OK new o16" << endl; o17 = new Selection((Node *)&an4 ,(unsigned int)2); cout << "OK new o17" << endl; o17->setPreOperator(o16); o18 = new ScanFromJI(o17, o15, &op3); cout << "OK new o18" << endl; o19 = new ScanDSM(&db_o_1, &attriRec_o[0], 1); cout << "OK new o19" << endl; o20 = new ScanFromJI(o19, o18, &op3); cout << "OK new o20" << endl; o21 = new Projection(pro2, 2); o21->setPreOperator(o20); cout << "OK new o21" << endl; o22 = new ScanDSM(&db_l_1, &attriRec_l[0], 1); cout << "OK new o22" << endl; /*o_orderkey, o_orderdate, l_orderkey*/ o23 = new JoinIndex_OneHash(o21, o22, &jon4); cout << "OK new o23" << endl; o24 = new ScanDSM(&db_p_5, &attriRec_p[4], 1); cout << "OK new o24" << endl; o25 = new SelectBitOut((Node *)&an5 ,1); cout << "OK new o25" << endl; o25->setPreOperator(o24); o26 = new ScanDSM(&db_p_1, &attriRec_p[0], 1); cout << "OK new o26" << endl; o27 = new BitFilter(o26, o25); cout << "OK new o27" << endl; o28 = new ScanDSM(&db_l_2, &attriRec_l[1], 1); cout << "OK new o28" << endl; o29 = new JoinIndex_OneHash(o27, o28, &jon5); cout << "OK new o29" << endl; o30 = new Projection(pro3, 1); o30->setPreOperator(o29); cout << "OK new o30" << endl; /*l_partkey, o_orderkey, o_orderdate, l_orderkey*/ o31 = new ScanFromJI(o30, o23, &op4); cout << "OK new o31" << endl; o32 = new ScanDSM(&db_n2_1, &attriRec_n[0], 1); cout << "OK new o32" << endl; /**/ o33 = new ScanDSM(&db_n2_2, &attriRec_n[1], 1); cout << "OK new o33" << endl; o34 = new ScanFromJI(o32, o33, &op6); cout << "OK new o34" << endl; /* */ o35 = new ScanDSM(&db_s_4, &attriRec_s[3], 1); cout << "OK new o35" << endl; o36 = new JoinIndex_OneHash(o34, o35); cout << "OK new o36" << endl; o37 = new ScanDSM(&db_s_1, &attriRec_s[0], 1); cout << "OK new o37" << endl; o38 = new ScanFromJI(o37, o36, &op5); cout << "OK new o38" << endl; o39 = new ScanDSM(&db_l_3, &attriRec_l[2], 1); cout << "OK new o39" << endl; o40 = new JoinIndex_OneHash(o38, o39); cout << "OK new o40" << endl; o41 = new Projection(pro4, 2); o41->setPreOperator(o40); cout << "OK new o41" << endl; /*l_suppkey, n_name, l_partkey, o_orderkey, o_orderdate, l_orderkey*/ o42 = new ScanFromJI(o41, o31, &op4); cout << "OK new o42" << endl; o43 = new ScanDSM(&db_l_6, &attriRec_l[5], 1); cout << "OK new o43" << endl; /*l_extendedproce, l_suppkey, n_name, l_partkey, o_orderkey, o_orderdate, l_orderkey*/ o44 = new ScanFromJI(o43, o42, &op4); cout << "OK new o44" << endl; o45 = new ScanDSM(&db_l_7, &attriRec_l[6], 1); cout << "OK new o45" << endl; /*l_discount, l_extendedproce, l_suppkey, n_name, l_partkey, o_orderkey, o_orderdate, l_orderkey*/ o46 = new ScanFromJI(o45, o44, &op4); cout << "OK new o46" << endl; o47 = new Projection(pro5, 4); o47->setPreOperator(o46); o48 = new Extract(ex, true, false, false); o48->setPreOperator(o47); cout << "OK new o48" << endl; o49 = new GroupBy(group, 1, aggre, 1); o49->setPreOperator(o48); cout << "OK new o49" << endl; o50 = new Sort(so1, 1); o50->setPreOperator(o49); cout << "OK new o50" << endl; o51 = new OutPut(STD_OUT); cout << "OK new o51" << endl; o51->setPreOperator(o50); o51->init(); cout << "TEST START" << endl; o51->exec(); }
int main(){ chdir(QUERY_DATA_PATH); EnvDB *env = new EnvDB(); env->open(); BDBOpe db_l_5(env->getEnv(), "8.5.DSM"); BDBOpe db_l_6(env->getEnv(), "8.6.DSM"); BDBOpe db_l_7(env->getEnv(), "8.7.DSM"); BDBOpe db_l_11(env->getEnv(), "8.11.DSM"); Operator *o1, *o2, *o3, *o4, *o5, *o6, *o7, *o8, *o9, *o10; Operator *o11, *o12; db_l_5.open(); db_l_6.open(); db_l_7.open(); db_l_11.open(); TABLE_REC tableRec_l; tableRec_l.tableID = 8; tableRec_l.attriNum = 16; ATTRIBUTE_REC attriRec_l[tableRec_l.attriNum]; AttributeManager AM(env->getEnv()); AM.getForTableID(tableRec_l, attriRec_l); /* selection1 */ DatePosVal pv1(1,(unsigned char *)"1994-01-01"); ValueNode vn1 = ValueNode(&pv1); ColumnRefNode cn1; cn1.tableID = 8; cn1.attriID = 11; AxprNode an1 = AxprNode(GE, &cn1, &vn1); DatePosVal pv2(1,(unsigned char *)"1995-01-01"); ValueNode vn2 = ValueNode(&pv2); ColumnRefNode cn2; cn2.tableID = 8; cn2.attriID = 11; AxprNode an2 = AxprNode(LT, &cn2, &vn2); AxprNode an7 = AxprNode(AND, &an1, &an2); /* selection3 */ FloatPosVal pv3(1, 0.06-0.01); FloatPosVal pv4(1, 0.06+0.01); ValueNode vn3 = ValueNode(&pv3); ValueNode vn4 = ValueNode(&pv4); ColumnRefNode cn3; cn3.tableID = 8; cn3.attriID = 7; AxprNode an3 = AxprNode(GE, &cn3, &vn3); AxprNode an4 = AxprNode(LE, &cn3, &vn4); AxprNode an5 = AxprNode(AND, &an3, &an4); /* selection4 */ FloatPosVal pv5(1, 24); ValueNode vn5 = ValueNode(&pv5); ColumnRefNode cn4; cn4.tableID = 8; cn4.attriID = 5; AxprNode an6 = AxprNode(LT, &cn4, &vn5); /* AGGREGATION */ ColumnRefNode cn5[2]; cn5[0].tableID = 8; cn5[0].attriID = 6; cn5[1].tableID = 8; cn5[1].attriID = 7; ArithmeticNode arith1(MUL, &cn5[0], &cn5[1]); Aggregation *aggre[1]; aggre[0] = new Sum(&arith1, 2); OPERATION_NODE op1; op1.tableID = 8; op1.attributeID = 7; o1 = new ScanDSM(&db_l_11, &attriRec_l[10], 1); // cout << "OK new o1" << endl; o2 = new SelectBitOut((Node *)&an7 ,(unsigned int)2); // cout << "OK new o2" << endl; o2->setPreOperator(o1); o3 = new ScanDSM(&db_l_5, &attriRec_l[4], 1); // cout << "OK new o3" << endl; o4 = new BitFilter(o3, o2); // cout << "OK new o4" << endl; o5 = new Selection((Node *)&an6 ,(unsigned int)1); // cout << "OK new o5" << endl; o5->setPreOperator(o4); o6 = new ScanDSM(&db_l_7, &attriRec_l[6], 1); // cout << "OK new o6" << endl; o7 = new Selection((Node *)&an5 ,(unsigned int)2); // cout << "OK new o7" << endl; o7->setPreOperator(o6); o8 = new ScanFromJI(o5, o7, &op1); // cout << "OK new o8" << endl; o9 = new ScanDSM(&db_l_6, &attriRec_l[5], 1); // cout << "OK new o9" << endl; o10 = new ScanFromJI(o9, o8, &op1); // cout << "OK new o10" << endl; o11 = new AggreOut(aggre, 1); o11->setPreOperator(o10); // cout << "OK new o11" << endl; o12 = new OutPut(STD_OUT); // cout << "OK new o12" << endl; o12->setPreOperator(o11); o12->init(env->getEnv()); cout << "TEST START" << endl; cout << setprecision(6); cout << setiosflags(ios::fixed); o12->exec(); }