예제 #1
0
static double timePass(int pass, struct sqlConnection *conn, char *table,
                       int size, struct chromSize *chroms)
/* one time pass for the given size */
{
struct chromRange *ranges = buildRanges(size, chroms);
long startTime = clock1000();
struct chromRange *range;
for (range = ranges; range != NULL; range = range->next)
    queryRange(conn, table, range);

double elapsed = ((double)(clock1000()-startTime))/1000.0;
printf("pass: %d  range size: %d  ranges: %d  time: %g seconds\n", pass, size,
       slCount(ranges), elapsed);
slFreeList(&ranges);
sqlUpdate(conn, NOSQLINJ "flush tables");
return elapsed;
}
예제 #2
0
MojErr MojDbQueryPlan::init(const MojDbQuery& query, const MojDbIndex& index)
{
	m_query = query;
	m_locale = index.locale();
	m_idPropIndex = index.idIndex();
	m_ranges.clear();

	MojErr err = MojErrNone;
	if (index.includeDeleted() && !m_query.where().contains(MojDb::DelKey)) {
		err = m_query.where(MojDb::DelKey, MojDbQuery::OpEq, false);
		MojErrCheck(err);
	}
	// build ranges from where clauses
	err = buildRanges(index);
	MojErrCheck(err);
	if (query.desc()) {
		// reverse ranges if descending
		err = m_ranges.reverse();
		MojErrCheck(err);
	}
	return MojErrNone;
}