TEST(TestCommand, testFindCommand) { cout << "testFindCommand" << endl; FileOutputStream* fos = new FileOutputStream("test.dat", "wb"); CommandWriter* commandWriter = new CommandWriter(fos); FindCommand cmd; cmd.setDB("testdb"); cmd.setNameSpace("test.namespace.db"); cmd.setSelect("*"); cmd.setFilter("$'a.b.c' == 1"); commandWriter->writeCommand(&cmd); fos->close(); delete fos; delete commandWriter; FileInputStream* fis = new FileInputStream("test.dat", "rb"); CommandReader* reader = new CommandReader(fis); FindCommand* rdCmd = (FindCommand*) reader->readCommand(); EXPECT_TRUE(rdCmd != NULL); EXPECT_TRUE(rdCmd->select()->compare("*") == 0); EXPECT_TRUE(rdCmd->nameSpace()->compare("test.namespace.db") == 0); EXPECT_TRUE(rdCmd->DB()->compare("testdb") == 0); EXPECT_TRUE(rdCmd->filter()->compare("$'a.b.c' == 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; }
std::vector<BSONObj*>* Connection::find(const std::string& db, const std::string& ns, const std::string& select, const std::string& filter) throw(ParseException) { if (_logger->isDebug()) _logger->debug("executing find db: %s, ns: %s, select: %s, filter: %s", db.c_str(), ns.c_str(), select.c_str(), filter.c_str()); try { FilterParser* parser = FilterParser::parse(filter); delete parser; } catch (ParseException e) { _logger->error("An error ocurred parsing the filter %s", filter.c_str()); throw e; } FindCommand cmd; cmd.setFilter(filter); cmd.setSelect(select); cmd.setDB(db); cmd.setNameSpace(ns); _commandWriter->writeCommand(&cmd); cmd.readResult(_inputStream); std::vector<BSONObj*>* result = (std::vector<BSONObj*>*)cmd.result(); return result; }