string QueryPlan::toString() const { return BSON( "index" << indexKey() << "frv" << ( _frv ? _frv->toString() : "" ) << "order" << _order ).jsonString(); }
void QueryPlan::registerSelf( long long nScanned, CandidatePlanCharacter candidatePlans ) const { // Impossible query constraints can be detected before scanning and historically could not // generate a QueryPattern. if ( _utility == Impossible ) { return; } SimpleMutex::scoped_lock lk( NamespaceDetailsTransient::_qcMutex ); QueryPattern queryPattern = _frs.pattern( _order ); CachedQueryPlan queryPlanToCache( indexKey(), nScanned, candidatePlans ); NamespaceDetailsTransient &nsdt = NamespaceDetailsTransient::get_inlock( ns() ); nsdt.registerCachedQueryPlanForPattern( queryPattern, queryPlanToCache ); }
void EventSendingController::cancelTouchPoint(int index) { WKRetainPtr<WKStringRef> EventSenderMessageName(AdoptWK, WKStringCreateWithUTF8CString("EventSender")); WKRetainPtr<WKMutableDictionaryRef> EventSenderMessageBody(AdoptWK, WKMutableDictionaryCreate()); WKRetainPtr<WKStringRef> subMessageKey(AdoptWK, WKStringCreateWithUTF8CString("SubMessage")); WKRetainPtr<WKStringRef> subMessageName(AdoptWK, WKStringCreateWithUTF8CString("CancelTouchPoint")); WKDictionaryAddItem(EventSenderMessageBody.get(), subMessageKey.get(), subMessageName.get()); WKRetainPtr<WKStringRef> indexKey(AdoptWK, WKStringCreateWithUTF8CString("Index")); WKRetainPtr<WKUInt64Ref> indexRef(AdoptWK, WKUInt64Create(index)); WKDictionaryAddItem(EventSenderMessageBody.get(), indexKey.get(), indexRef.get()); WKBundlePostSynchronousMessage(InjectedBundle::shared().bundle(), EventSenderMessageName.get(), EventSenderMessageBody.get(), 0); }
bool QueryPlan::queryBoundsExactOrderSuffix() const { if ( !indexed() || !_frs.matchPossible() || !_frs.mustBeExactMatchRepresentation() ) { return false; } BSONObj idxKey = indexKey(); BSONObjIterator index( idxKey ); BSONObjIterator order( _order ); int coveredNonUniversalRanges = 0; while( index.more() ) { const FieldRange& indexFieldRange = _frs.range( (*index).fieldName() ); if ( !indexFieldRange.isPointIntervalSet() ) { if ( !indexFieldRange.universal() ) { // The last indexed range may be a non point set containing a single interval. // SERVER-5777 if ( indexFieldRange.intervals().size() > 1 ) { return false; } ++coveredNonUniversalRanges; } break; } ++coveredNonUniversalRanges; if ( order.more() && str::equals( (*index).fieldName(), (*order).fieldName() ) ) { ++order; } ++index; } if ( coveredNonUniversalRanges != _frs.numNonUniversalRanges() ) { return false; } while( index.more() && order.more() ) { if ( !str::equals( (*index).fieldName(), (*order).fieldName() ) ) { return false; } if ( ( elementDirection( *index ) < 0 ) != ( elementDirection( *order ) < 0 ) ) { return false; } ++order; ++index; } return !order.more(); }
shared_ptr<CoveredIndexMatcher> QueryPlan::matcher() const { if ( !_matcher ) { _matcher.reset( new CoveredIndexMatcher( originalQuery(), indexKey() ) ); } return _matcher; }
void QueryPlan::registerSelf( long long nScanned ) const { NamespaceDetailsTransient::get( ns() ).registerIndexForPattern( fbs_.pattern( order_ ), indexKey(), nScanned ); }
int jb() { JET_ERR err; eseInstance instance; if (instance.init(0) != JET_errSuccess) { return instance.getLastError(); } eseSession session; if (session.init(instance.id()) != JET_errSuccess) { return session.getLastError();; } eseDatabase db(session.id()); err = db.open("test2.edb"); if (err == JET_errDatabaseDuplicate ) { err = db.create("test2.edb"); } if (err != JET_errSuccess) { return err; } eseColumn* col0 = new eseColumn("PK", JET_coltypLong, JET_bitColumnAutoincrement); // will be destroyed by table's destructor eseColumn* col1 = new eseColumn("Value", JET_coltypText, 0, 1024, 1200); // will be destroyed by table's destructor eseIndex indexKey("PK_index", IndexKey("+PK"), JET_bitIndexPrimary); eseIndex indexValue("Value_index", IndexKey("+Value"), JET_bitIndexUnique); eseTable table(db.id(), session.id()); switch (err = table.open("TestTable")) { case JET_errSuccess: break; case JET_errObjectNotFound: // Table does not exists, open it err = table.create("TestTable", col0, col1, indexKey, indexValue); if (err != JET_errSuccess) return err; break; default: return err; } // Inserting Values wchar_t* stringsTolnsert[] = { L"FirstInsertedRow2", L"InSecondInsertedRow2", L"ThirdInsertedRow2", L"FourinsertedRow2", L"Fourinse" }; for (size_t n = 0; n != sizeof(stringsTolnsert) / sizeof(stringsTolnsert[0]); ++n) { err = table.insert(1, stringsTolnsert[n]); // insert to the second column (numbering starts from zero) } // List content of the table err = table.setCurrentIndex(indexValue); if (err != JET_errSuccess) return err; for (err = table.setCursor(JET_MoveFirst); JET_errSuccess == err; err = table.setCursor(JET_MoveNext)) { int nPK = 0; err = table.get_column(0, &nPK); if (JET_errSuccess != err) break; std::wcout << nPK; wchar_t buffer[1024] = { 0 }; err = table.get_column(1, buffer, 1024); std::wcout << L'\t' << buffer << std::endl; } if (JET_errNoCurrentRecord != err) return err; std::wcout << std::endl; // Search value in the table err = table.setCursor(JET_MoveFirst); // first movce to begining using the current index if (JET_errSuccess != err) return err; wchar_t bufferSearchCriteria[] = L"Fo"; // then set the search criteria err = ::JetMakeKey(session.id(), table.id(), &bufferSearchCriteria, sizeof(bufferSearchCriteria), JET_bitNewKey); if (JET_errSuccess != err) return err; for (err = ::JetSeek(session.id(), table.id(), JET_bitSeekGE); !(err < 0); err = table.setCursor(JET_MoveNext) ) { int nPK = 0; err = table.get_column(0, &nPK); if (JET_errSuccess != err) break; std::wcout << nPK; wchar_t buffer[1024] = { 0 }; err = table.get_column(1, buffer, 1024); std::wcout << L'\t' << buffer << std::endl; } if (JET_errNoCurrentRecord != err) return err; std::wcout << std::endl; // Another search in the table err = table.setCursor(JET_MoveFirst); if (JET_errSuccess != err) return err; err = ::JetMakeKey(session.id(), table.id(), &bufferSearchCriteria, sizeof(bufferSearchCriteria), JET_bitNewKey | JET_bitPartialColumnStartLimit); if (JET_errSuccess != err) return err; err = ::JetSeek(session.id(), table.id(), JET_bitSeekGE); if (err < 0) return err; err = ::JetMakeKey(session.id(), table.id(), &bufferSearchCriteria, sizeof(bufferSearchCriteria), JET_bitNewKey | JET_bitPartialColumnEndLimit); if (JET_errSuccess != err) return err; for (err = ::JetSetIndexRange(session.id(), table.id(), JET_bitRangeInclusive | JET_bitRangeUpperLimit); !(err < 0); table.setCursor(JET_MoveNext) ) { int nPK = 0; err = table.get_column(0, &nPK); if (JET_errSuccess != err) break; std::wcout << nPK; wchar_t buffer[1024] = { 0 }; err = table.get_column(1, buffer, 1024); std::wcout << L'\t' << buffer << std::endl; } return 0; }
int jb2() { JET_ERR err; eseInstance instance; if (instance.init(0) != JET_errSuccess) { return instance.getLastError(); } eseSession session; if (session.init(instance.id()) != JET_errSuccess) { return session.getLastError();; } eseDatabase db(session.id()); err = db.open("test2.edb"); if (err == JET_errDatabaseDuplicate) { err = db.create("test2.edb"); } if (err != JET_errSuccess) { return err; } // eseColumns will be destroyed by table's destructor eseColumn* col0 = new eseColumn("PK", JET_coltypLong, JET_bitColumnAutoincrement); eseColumn* col1 = new eseColumn("filename", JET_coltypText, 0, 1024); // include path eseColumn* col2 = new eseColumn("size", JET_coltypLongLong); eseColumn* col3 = new eseColumn("changedDate", JET_coltypDateTime); eseColumn* col4 = new eseColumn("status", JET_coltypLong); eseIndex indexKey("PK_index", IndexKey("+PK"), JET_bitIndexPrimary); eseIndex indexFileName("filename_index", IndexKey("+filename"), JET_bitIndexUnique); eseTable table(db.id(), session.id()); switch (err = table.open("FileSystemLog")) { case JET_errSuccess: break; case JET_errObjectNotFound: // Table does not exists, open it err = table.create("FileSystemLog", col0, col1, indexKey, indexFileName); table.create_column(col2); table.create_column(col3); table.create_column(col4); if (err != JET_errSuccess) return err; break; default: return err; } // Inserting Values wchar_t* stringsTolnsert[] = { L"FirstInsertedRow2", L"InSecondInsertedRow2", L"ThirdInsertedRow2", L"FourinsertedRow2", L"Fourinse" }; for (size_t n = 0; n != sizeof(stringsTolnsert) / sizeof(stringsTolnsert[0]); ++n) { err = table.insert(1, stringsTolnsert[n]); // insert to the second column (numbering starts from zero) } // List content of the table err = table.setCurrentIndex(indexFileName); if (err != JET_errSuccess) return err; for (err = table.setCursor(JET_MoveFirst); JET_errSuccess == err; err = table.setCursor(JET_MoveNext)) { int nPK = 0; err = table.get_column(0, &nPK); if (JET_errSuccess != err) break; std::wcout << nPK; wchar_t buffer[1024] = { 0 }; err = table.get_column(1, buffer, 1024); std::wcout << L'\t' << buffer << std::endl; } if (JET_errNoCurrentRecord != err) return err; std::wcout << std::endl; return 0; } /// jb2