void MenuShit::releaseContext() { releaseDocument(); context->RemoveReference(); //release context context = NULL; }
DocumentSource::GetNextResult DocumentSourceOut::getNext() { pExpCtx->checkForInterrupt(); if (_done) { return GetNextResult::makeEOF(); } if (!_initialized) { initialize(); } // Insert all documents into temp collection, batching to perform vectored inserts. vector<BSONObj> bufferedObjects; int bufferedBytes = 0; auto nextInput = pSource->getNext(); for (; nextInput.isAdvanced(); nextInput = pSource->getNext()) { BSONObj toInsert = nextInput.releaseDocument().toBson(); bufferedBytes += toInsert.objsize(); if (!bufferedObjects.empty() && (bufferedBytes > BSONObjMaxUserSize || bufferedObjects.size() >= write_ops::kMaxWriteBatchSize)) { spill(bufferedObjects); bufferedObjects.clear(); bufferedBytes = toInsert.objsize(); } bufferedObjects.push_back(toInsert); } if (!bufferedObjects.empty()) spill(bufferedObjects); switch (nextInput.getStatus()) { case GetNextResult::ReturnStatus::kAdvanced: { MONGO_UNREACHABLE; // We consumed all advances above. } case GetNextResult::ReturnStatus::kPauseExecution: { return nextInput; // Propagate the pause. } case GetNextResult::ReturnStatus::kEOF: { auto renameCommandObj = BSON("renameCollection" << _tempNs.ns() << "to" << _outputNs.ns() << "dropTarget" << true); auto status = pExpCtx->mongoProcessInterface->renameIfOptionsAndIndexesHaveNotChanged( pExpCtx->opCtx, renameCommandObj, _outputNs, _originalOutOptions, _originalIndexes); uassert(16997, str::stream() << "$out failed: " << status.reason(), status.isOK()); // We don't need to drop the temp collection in our destructor if the rename succeeded. _tempNs = {}; _done = true; // $out doesn't currently produce any outputs. return nextInput; } } MONGO_UNREACHABLE; }
bool MenuShit::setDocument(string _fileName) { releaseDocument(); bool success = false; if(context != NULL) { m_document1 = context->LoadDocument(_fileName.c_str()); m_document2 = context->LoadDocument(_fileName.c_str()); if(m_document1 != NULL) { m_document1->GetElementById("title")->SetInnerRML("DELUXE"); Rocket::Core::Element *element = m_document1->GetElementById("btn"); if(element != NULL) { m_btn1 = new ButtonEvent( m_document1, "Changed" ); element->AddEventListener( "click", m_btn1 ); } success = true; m_document1->Show(); m_document1->RemoveReference(); } if(m_document2 != NULL) { m_document2->GetElementById("title")->SetInnerRML("DESTINY"); success = true; m_document2->Show(); m_document2->RemoveReference(); } } return success; }
TEST_F(DocumentSourceMatchTest, ShouldCorrectlyJoinWithSubsequentMatch) { const auto match = DocumentSourceMatch::create(BSON("a" << 1), getExpCtx()); const auto secondMatch = DocumentSourceMatch::create(BSON("b" << 1), getExpCtx()); match->joinMatchWith(secondMatch); const auto mock = DocumentSourceMock::create({Document{{"a", 1}, {"b", 1}}, Document{{"a", 2}, {"b", 1}}, Document{{"a", 1}, {"b", 2}}, Document{{"a", 2}, {"b", 2}}}); match->setSource(mock.get()); // The first result should match. auto next = match->getNext(); ASSERT_TRUE(next.isAdvanced()); ASSERT_DOCUMENT_EQ(next.releaseDocument(), (Document{{"a", 1}, {"b", 1}})); // The rest should not match. ASSERT_TRUE(match->getNext().isEOF()); ASSERT_TRUE(match->getNext().isEOF()); ASSERT_TRUE(match->getNext().isEOF()); }