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(); }
void PrintVirutalFucAddr() { B1 b1(1), b2(2); D1 d1(3), d2(4); B1 * pd1 = &d1, * pd2 = &d2; cout << "b1对象地址:" << &b1 << endl; cout << "b2对象地址:" << &b2 << endl; cout << "d1对象地址:" << &d1 << endl; cout << "d2对象地址:" << &d2 << endl; cout << "pd1对象地址:" << pd1 << endl; cout << "pd2对象地址:" << pd2 << endl; cout << "b1虚函数表地址:" << (int*)*(int*)(&b1) << endl; cout << "b2虚函数表地址:" << (int*)*(int*)(&b2) << endl; cout << "d1虚函数表地址:" << (int*)*(int*)(&d1) << endl; cout << "d2虚函数表地址:" << (int*)*(int*)(&d2) << endl; cout << "pd1虚函数表地址:" << (int*)*(int*)(pd1) << endl; cout << "pd2虚函数表地址:" << (int*)*(int*)(pd2) << endl; cout << "b1虚函数表 — 第一个函数地址:" << (int*)*((int*)*(int*)(&b1) + 0) << endl; cout << "b2虚函数表 — 第一个函数地址:" << (int*)*((int*)*(int*)(&b2) + 0) << endl; cout << "d1虚函数表 — 第一个函数地址:" << (int*)*((int*)*(int*)(&d1) + 0) << endl; cout << "d2虚函数表 — 第一个函数地址:" << (int*)*((int*)*(int*)(&d2) + 0) << endl; cout << "pd1虚函数表 — 第一个函数地址:" << (int*)*((int*)*(int*)(pd1) + 0) << endl; cout << "pd2虚函数表 — 第一个函数地址:" << (int*)*((int*)*(int*)(pd2) + 0) << endl; cout << "b1虚函数表 — 第二个函数地址:" << (int*)*((int*)*(int*)(&b1) + 1) << endl; cout << "b2虚函数表 — 第二个函数地址:" << (int*)*((int*)*(int*)(&b2) + 1) << endl; cout << "d1虚函数表 — 第二个函数地址:" << (int*)*((int*)*(int*)(&d1) + 1) << endl; cout << "d2虚函数表 — 第二个函数地址:" << (int*)*((int*)*(int*)(&d2) + 1) << endl; cout << "pd1虚函数表 — 第二个函数地址:" << (int*)*((int*)*(int*)(pd1) + 1) << endl; cout << "pd2虚函数表 — 第二个函数地址:" << (int*)*((int*)*(int*)(pd2) + 1) << endl; typedef void (*VFUN)(void); cout << "b1 与 d1 执行第一个函数地址" << endl; VFUN pv1 = (VFUN)*((int*)*(int*)(&b1)); VFUN pv2 = (VFUN)*((int*)*(int*)(&d1)); pv1(); pv2(); cout << "b1 与 d1 执行第二个函数地址" << endl; pv1 = (VFUN)*((int*)*(int*)(&b1) + 1); pv2 = (VFUN)*((int*)*(int*)(&d1) + 1); pv1(); pv2(); cout << "b1 与 d1 执行第四个函数地址" << endl; pv1 = (VFUN)*((int*)*(int*)(&b1) + 3); pv2 = (VFUN)*((int*)*(int*)(&d1) + 3); //pv1(); error //pv2(); error typedef void (*VFUN2)(B1*); VFUN2 pv3 = (VFUN2)*((int*)*(int*)(&b1) + 3); VFUN2 pv4 = (VFUN2)*((int*)*(int*)(&d1) + 3); pv3(&b1); pv4(&d1); cout << "sizeof(int*): " << sizeof(int*) << endl; cout << "sizeof(double): " << sizeof(double) << endl; cout << "sizeof(float): " << sizeof(float) << endl; cout << "sizeof(unsigned long): " << sizeof(unsigned long) << endl; cout << "sizeof(long): " << sizeof(long) << endl; cout << "sizeof(unsigned int): " << sizeof(unsigned int) << endl; cout << "sizeof(int): " << sizeof(int) << endl; cout << "sizeof(unsigned short): " << sizeof(unsigned short) << endl; cout << "sizeof(short): " << sizeof(short) << endl; }
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(); }
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(); }