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; }
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; }