コード例 #1
0
int main()
{
	const int buffsize = 1 << 4;
	const int threads = THREADS;

	vector<string> tmpfileint;
	vector<string> tmpfiledouble;

	for (int i=0; i<threads; ++i)
	{
		ostringstream oss;
		oss << "testfileinttoint" << setfill('0') << setw(2) << i << ".tmp";
		tmpfileint.push_back(oss.str());
		createfileint(oss.str().c_str(), i, TUPLES);
	}
	for (int i=0; i<threads; ++i)
	{
		ostringstream oss;
		oss << "testfileinttodouble" << setfill('0') << setw(2) << i << ".tmp";
		tmpfiledouble.push_back(oss.str());
		createfiledouble(oss.str().c_str(), i, TUPLES);
	}

	Config cfg;

	cfg.getRoot().add("path", Setting::TypeString) = "./";
	cfg.getRoot().add("buffsize", Setting::TypeInt) = buffsize;

	// Init node1a
	Setting& scannode1 = cfg.getRoot().add("scan1", Setting::TypeGroup);
	scannode1.add("filetype", Setting::TypeString) = "text";
	Setting& files1 = scannode1.add("files", Setting::TypeList);
	Setting& mapping1 = scannode1.add("mapping", Setting::TypeList);
	for (int i=0; i<threads; ++i)
	{
		files1.add(Setting::TypeString) = tmpfileint.at(i);
		Setting& mapping1group = mapping1.add(Setting::TypeList);
		mapping1group.add(Setting::TypeInt) = i;
	}
	Setting& schemanode1 = scannode1.add("schema", Setting::TypeList);
	schemanode1.add(Setting::TypeString) = "long";
	schemanode1.add(Setting::TypeString) = "long";

	// Init node1b
	Setting& scannode2 = cfg.getRoot().add("scan2", Setting::TypeGroup);
	scannode2.add("filetype", Setting::TypeString) = "text";
	Setting& files2 = scannode2.add("files", Setting::TypeList);
	Setting& mapping2 = scannode2.add("mapping", Setting::TypeList);
	for (int i=0; i<threads; ++i)
	{
		files2.add(Setting::TypeString) = tmpfiledouble.at(i);
		Setting& mapping2group = mapping2.add(Setting::TypeList);
		mapping2group.add(Setting::TypeInt) = i;
	}
	Setting& schemanode2 = scannode2.add("schema", Setting::TypeList);
	schemanode2.add(Setting::TypeString) = "long";
	schemanode2.add(Setting::TypeString) = "dec";

	// Init node2
	Setting& joinnode = cfg.getRoot().add("join", Setting::TypeGroup);

	joinnode.add("mostfreqbuildkeyoccurances", Setting::TypeInt) = 1;

	// Partition group tree.
	Setting& pgnode = joinnode.add("threadgroups", Setting::TypeList);
	for (int i=0; i<threads; ++i)
	{
		Setting& singlepart = pgnode.add(Setting::TypeArray);
		singlepart.add(Setting::TypeInt) = i;
	}

	// Join attribute and projection tree.
	joinnode.add("buildjattr", Setting::TypeInt) = 0;
	joinnode.add("probejattr", Setting::TypeInt) = 0;

	Setting& projectnode = joinnode.add("projection", Setting::TypeList);
	projectnode.add(Setting::TypeString) = "B$1";
	projectnode.add(Setting::TypeString) = "P$1";

	// Init node3
	Setting& mergenode = cfg.getRoot().add("merge", Setting::TypeGroup);
	mergenode.add("threads", Setting::TypeInt) = threads;

//	cfg.write(stdout);

	// build plan tree
	q.tree = &node3;
	node3.nextOp = &node2;
	node2.buildOp = &node1a;
	node2.probeOp = &node1b;

	// initialize each node
	node1a.init(cfg, scannode1);
	node1b.init(cfg, scannode2);
	node2.init(cfg, joinnode);
	node3.init(cfg, mergenode);

#ifdef VERBOSE
	cout << "---------- QUERY PLAN START ----------" << endl;
	PrettyPrinterVisitor ppv;
	q.accept(&ppv);
	cout << "----------- QUERY PLAN END -----------" << endl;
#endif

	compute();

	for (int i=0; i<TUPLES*THREADS; ++i) 
	{
		const int correctcount = 1;
		if (verify[i] < correctcount)
			fail("Tuples are missing from output.");
		if (verify[i] > correctcount)
			fail("Extra tuples are in output.");
	}

	q.destroynofree();

	for (int i=0; i<threads; ++i)
	{
		deletefile(tmpfileint.at(i).c_str());
		deletefile(tmpfiledouble.at(i).c_str());
	}

	return 0;
}
コード例 #2
0
int main()
{
	const int aggbuckets = 4;
	const int buffsize = 16;

	createaggfile(tempfilename, TUPLES);

	AggregateSum node1;
	MergeOp mergeop;
	AggregateSum node2;
	ParallelScanOp node3;

	Config cfg;

	// init node1
	Setting& aggnode1 = cfg.getRoot().add("aggsumpre", Setting::TypeGroup);
	aggnode1.add("field", Setting::TypeInt) = 0;
	aggnode1.add("sumfield", Setting::TypeInt) = 1;
	Setting& agghashnode1 = aggnode1.add("hash", Setting::TypeGroup);
	agghashnode1.add("fn", Setting::TypeString) = "modulo";
	agghashnode1.add("buckets", Setting::TypeInt) = aggbuckets;
	agghashnode1.add("field", Setting::TypeInt) = 0;
	
	// init mergeop
	Setting& mergenode = cfg.getRoot().add("merge", Setting::TypeGroup);
	mergenode.add("threads", Setting::TypeInt) = THREADS;

	// init node2
	Setting& aggnode2 = cfg.getRoot().add("aggsumpost", Setting::TypeGroup);
	aggnode2.add("field", Setting::TypeInt) = 0;
	aggnode2.add("sumfield", Setting::TypeInt) = 1;
	Setting& agghashnode2 = aggnode2.add("hash", Setting::TypeGroup);
	agghashnode2.add("fn", Setting::TypeString) = "modulo";
	agghashnode2.add("buckets", Setting::TypeInt) = aggbuckets;
	agghashnode2.add("field", Setting::TypeInt) = 0;
	
	// init node3
	cfg.getRoot().add("path", Setting::TypeString) = "./";
	cfg.getRoot().add("buffsize", Setting::TypeInt) = buffsize;

	Setting& scannode = cfg.getRoot().add("scan", Setting::TypeGroup);
	scannode.add("filetype", Setting::TypeString) = "text";
	Setting& files = scannode.add("files", Setting::TypeList);
	files.add(Setting::TypeString) = tempfilename;
	Setting& mapping = scannode.add("mapping", Setting::TypeList);
	Setting& mappinggroup0 = mapping.add(Setting::TypeList);
	for (int i=0; i<THREADS; ++i)
		mappinggroup0.add(Setting::TypeInt) = i;
	Setting& schemanode = scannode.add("schema", Setting::TypeList);
	schemanode.add(Setting::TypeString) = "long";
	schemanode.add(Setting::TypeString) = "dec";

	// build plan tree
	q.tree = &node1;
	node1.nextOp = &mergeop;
	mergeop.nextOp = &node2;
	node2.nextOp = &node3;

	// initialize each node
	node3.init(cfg, scannode);
	node2.init(cfg, aggnode2);
	mergeop.init(cfg, mergenode);
	node1.init(cfg, aggnode1);

#ifdef VERBOSE
	cout << "---------- QUERY PLAN START ----------" << endl;
	PrettyPrinterVisitor ppv;
	q.accept(&ppv);
	cout << "----------- QUERY PLAN END -----------" << endl;
#endif

	compute();

	q.destroynofree();

	deletefile(tempfilename);

	return 0;
}
コード例 #3
0
int main()
{
	const int buffsize = 1 << 4;
	const int threads = 2;

	const char* tmpfileint1 = "testfileinttoint1.tmp";
	const char* tmpfileint2 = "testfileinttoint2.tmp";
	const char* tmpfiledouble = "testfileinttodouble.tmp";
	const char* tmpfileempty = "empty.tmp";

	Config cfg;

	createfileodd(tmpfileint1, TUPLES);
	createfileeven(tmpfileint2, TUPLES);
	createfilespecialdouble(tmpfiledouble);
	createfileeven(tmpfileempty, 0);

	cfg.getRoot().add("path", Setting::TypeString) = "./";
	cfg.getRoot().add("buffsize", Setting::TypeInt) = buffsize;

	// Init node1a
	Setting& scannode1 = cfg.getRoot().add("scan1", Setting::TypeGroup);
	scannode1.add("filetype", Setting::TypeString) = "text";
	Setting& files1 = scannode1.add("files", Setting::TypeList);
	files1.add(Setting::TypeString) = tmpfileint1;
	files1.add(Setting::TypeString) = tmpfileint2;
	Setting& mapping1 = scannode1.add("mapping", Setting::TypeList);
	Setting& mapping1group0 = mapping1.add(Setting::TypeList);
	mapping1group0.add(Setting::TypeInt) = 0;
	Setting& mapping1group1 = mapping1.add(Setting::TypeList);
	mapping1group1.add(Setting::TypeInt) = 1;
	Setting& schemanode1 = scannode1.add("schema", Setting::TypeList);
	schemanode1.add(Setting::TypeString) = "long";
	schemanode1.add(Setting::TypeString) = "long";

	// Init node1b
	Setting& scannode2 = cfg.getRoot().add("scan2", Setting::TypeGroup);
	scannode2.add("filetype", Setting::TypeString) = "text";
	Setting& files2 = scannode2.add("files", Setting::TypeList);
	files2.add(Setting::TypeString) = tmpfiledouble;
	files2.add(Setting::TypeString) = tmpfileempty;
	Setting& mapping2 = scannode2.add("mapping", Setting::TypeList);
	Setting& mapping2group0 = mapping2.add(Setting::TypeList);
	mapping2group0.add(Setting::TypeInt) = 0;
	Setting& mapping2group1 = mapping2.add(Setting::TypeList);
	mapping2group1.add(Setting::TypeInt) = 1;
	Setting& schemanode2 = scannode2.add("schema", Setting::TypeList);
	schemanode2.add(Setting::TypeString) = "long";
	schemanode2.add(Setting::TypeString) = "dec";

	// Init node2
	Setting& joinnode = cfg.getRoot().add("join", Setting::TypeGroup);

	joinnode.add("maxbuildtuples", Setting::TypeInt) = TUPLES * 2;
	joinnode.add("maxprobetuples", Setting::TypeInt) = TUPLES * 2;

	// Partition group tree.
	Setting& pgnode = joinnode.add("threadgroups", Setting::TypeList);
	Setting& partone = pgnode.add(Setting::TypeArray);
	for (int i=0; i<threads; ++i)
		partone.add(Setting::TypeInt) = i;

	// Join attribute and projection tree.
	joinnode.add("buildjattr", Setting::TypeInt) = 0;
	joinnode.add("probejattr", Setting::TypeInt) = 0;

	Setting& projectnode = joinnode.add("projection", Setting::TypeList);
	projectnode.add(Setting::TypeString) = "B$1";
	projectnode.add(Setting::TypeString) = "P$1";

	// Init node3
	Setting& mergenode = cfg.getRoot().add("merge", Setting::TypeGroup);
	mergenode.add("threads", Setting::TypeInt) = threads;

//	cfg.write(stdout);

	// build plan tree
	q.tree = &node3;
	node3.nextOp = &node2;
	node2.buildOp = &node1a;
	node2.probeOp = &node1b;

	// initialize each node
	node1a.init(cfg, scannode1);
	node1b.init(cfg, scannode2);
	node2.init(cfg, joinnode);
	node3.init(cfg, mergenode);

#ifdef VERBOSE
	cout << "---------- QUERY PLAN START ----------" << endl;
	PrettyPrinterVisitor ppv;
	q.accept(&ppv);
	cout << "----------- QUERY PLAN END -----------" << endl;
#endif

	compute();

	// Step 1: All ``vals'' keys present exactly once.
	// Erase verify array for next step.
	//
	for (unsigned int i=0; i<vals.size(); ++i) {
		if (verify.at(vals.at(i)) < 1)
			fail("Tuples are missing from output.");
		if (verify.at(vals.at(i)) > 1)
			fail("Expected value encountered multiple times.");
		verify.at(vals.at(i)) = 0;
	}

	// Setp 2: Verification array is empty, aka. nothing extra produced.
	//
	for (unsigned int i=0; i<verify.size(); ++i) {
		if (verify.at(i) != 0)
			fail("Extra tuples are in output.");
	}

	q.destroynofree();

	deletefile(tmpfileint1);
	deletefile(tmpfileint2);
	deletefile(tmpfiledouble);
	deletefile(tmpfileempty);

	return 0;
}
コード例 #4
0
int main()
{
    const int buffsize = 1 << 4;
    const int threads = 4;

    const char* tmpfileint = "testfileinttoint.tmp";
    const char* tmpfiledouble = "testfileinttodouble.tmp";

    Config cfg;

    createfile(tmpfileint, TUPLES);
    createfiledouble(tmpfiledouble, TUPLES);

    cfg.getRoot().add("path", Setting::TypeString) = "./";
    cfg.getRoot().add("buffsize", Setting::TypeInt) = buffsize;

    // Init node1a
    Setting& scannode1 = cfg.getRoot().add("scan1", Setting::TypeGroup);
    scannode1.add("filetype", Setting::TypeString) = "text";
    Setting& files1 = scannode1.add("files", Setting::TypeList);
    files1.add(Setting::TypeString) = tmpfileint;
    Setting& mapping1 = scannode1.add("mapping", Setting::TypeList);
    Setting& mapping1group0 = mapping1.add(Setting::TypeList);
    for (int i=0; i<threads; ++i)
        mapping1group0.add(Setting::TypeInt) = i;
    Setting& schemanode1 = scannode1.add("schema", Setting::TypeList);
    schemanode1.add(Setting::TypeString) = "long";
    schemanode1.add(Setting::TypeString) = "long";

    // Init node1b
    Setting& scannode2 = cfg.getRoot().add("scan2", Setting::TypeGroup);
    scannode2.add("filetype", Setting::TypeString) = "text";
    Setting& files2 = scannode2.add("files", Setting::TypeList);
    files2.add(Setting::TypeString) = tmpfiledouble;
    Setting& mapping2 = scannode2.add("mapping", Setting::TypeList);
    Setting& mapping2group0 = mapping2.add(Setting::TypeList);
    for (int i=0; i<threads; ++i)
        mapping2group0.add(Setting::TypeInt) = i;
    Setting& schemanode2 = scannode2.add("schema", Setting::TypeList);
    schemanode2.add(Setting::TypeString) = "long";
    schemanode2.add(Setting::TypeString) = "dec";

    // Init node2
    Setting& joinnode = cfg.getRoot().add("join", Setting::TypeGroup);

    joinnode.add("maxbuildtuples", Setting::TypeInt) = TUPLES * 2;
    joinnode.add("maxprobetuples", Setting::TypeInt) = TUPLES * 2;

    // Partition group tree.
    Setting& pgnode = joinnode.add("threadgroups", Setting::TypeList);
    Setting& singlepart = pgnode.add(Setting::TypeArray);
    for (int i=0; i<threads; ++i)
        singlepart.add(Setting::TypeInt) = i;

    // Join attribute and projection tree.
    joinnode.add("buildjattr", Setting::TypeInt) = 0;
    joinnode.add("probejattr", Setting::TypeInt) = 0;

    Setting& projectnode = joinnode.add("projection", Setting::TypeList);
    projectnode.add(Setting::TypeString) = "B$1";
    projectnode.add(Setting::TypeString) = "P$1";

    // Init node3
    Setting& mergenode = cfg.getRoot().add("merge", Setting::TypeGroup);
    mergenode.add("threads", Setting::TypeInt) = threads;

//	cfg.write(stdout);

    // build plan tree
    q.tree = &node3;
    node3.nextOp = &node2;
    node2.buildOp = &node1a;
    node2.probeOp = &node1b;

    // initialize each node
    node1a.init(cfg, scannode1);
    node1b.init(cfg, scannode2);
    node2.init(cfg, joinnode);
    node3.init(cfg, mergenode);

#ifdef VERBOSE
    cout << "---------- QUERY PLAN START ----------" << endl;
    PrettyPrinterVisitor ppv;
    q.accept(&ppv);
    cout << "----------- QUERY PLAN END -----------" << endl;
#endif

    compute();

    for (int i=0; i<TUPLES; ++i) {
        if (verify[i] < 1)
            fail("Tuples are missing from output.");
        if (verify[i] > 1)
            fail("Extra tuples are in output.");
    }

    q.destroynofree();

    deletefile(tmpfileint);
    deletefile(tmpfiledouble);

    return 0;
}