示例#1
0
文件: db.cpp 项目: joshmg/db2
vector<row> database::refine(const query &q, const vector<row> &rows) {
  vector<row> results;

  for (int i=0;i<rows.size();i++) {
    if (q.eval(rows[i]) && !rows[i].is_empty()) results.push_back(rows[i]);
  }

  return results;
}
示例#2
0
文件: table.cpp 项目: joshmg/db2
vector<row> table::select(const query &q) {
  vector<row> results;

  row temp_row;
  // perform key-search
  if (q.singularity(_key)) {
    for (int i=0;i<_keys.size();i++) {
      temp_row.add((*_keys[i].col), _keys[i].data);
      if (q.partial_eval(_key, temp_row)) {
        results.push_back(read_row(_keys[i].fpos/_row_size));
        //if (results.back().is_empty()) results.pop_back();
        if (results.back().is_empty() || !q.eval(results.back())) {
          results.erase(results.end()-1);
        }
      }
      temp_row.clear();
      if (q._limit > -1 && results.size() >= q._limit) break; //results.erase(results.end()-1);
    }
    
/*    for (int i=0;i<results.size();i++) {
      if (results[i].is_empty() || !q.eval(results[i])) {
        results.erase(results.begin()+i);
        --i;
      }
    }*/
    
    // truncate results to q._limit
    /*if (q._limit > -1) while (results.size() > q._limit) {
      if (results.size() == 0) break;
      results.erase(results.end()-1);
    }*/
  }
  // perform full search:
  else {
    for (int i=0;i<_row_count;i++) {
      results.push_back(read_row(i));
      if (results.back().is_empty() || !q.eval(results.back())) results.pop_back();
      // limit results size to q._limit
      if (results.size() >= q._limit) break;
    }
  }

  return results;
}