コード例 #1
0
ファイル: main.cpp プロジェクト: FikiHafana/djondb
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);
}
コード例 #2
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;
}
コード例 #3
0
ファイル: connection.cpp プロジェクト: hecogo/djondb
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;
}