コード例 #1
0
BSONArrayObj* DjondbConnection::find(const char* db, const char* ns, const char* select, const char* filter, const BSONObj& options) {
	if (_logger->isDebug()) _logger->debug("executing find db: %s, ns: %s, select: %s, filter: %s", db, ns, select, filter);

	if (!isOpen()) {
		throw DjondbException(D_ERROR_CONNECTION, "Not connected to any server");
	}
	try {
		FilterParser* parser = FilterParser::parse(filter);
		delete parser;
	} catch (ParseException e) {
		_logger->error("An error ocurred parsing the filter %s", filter);
		throw DjondbException(e.errorCode(), e.what());
	}
	FindCommand cmd;
	cmd.setFilter(filter);
	cmd.setSelect(select);
	cmd.setDB(db);
	cmd.setNameSpace(ns);
	cmd.setOptions(&options);
	prepareOptions((Command*)&cmd);
	_commandWriter->writeCommand(&cmd);
	
	cmd.readResult(_inputStream);
	BSONArrayObj* result = (BSONArrayObj*)cmd.result();

	return result;
}