bool UpdateIndexData::mightBeIndexed(const FieldRef& path) const {
    if (_allPathsIndexed) {
        return true;
    }

    FieldRef canonicalPath = getCanonicalIndexField(path);

    for (const auto& idx : _canonicalPaths) {
        if (_startsWith(canonicalPath, idx) || _startsWith(idx, canonicalPath))
            return true;
    }

    for (const auto& pathComponent : _pathComponents) {
        for (size_t partIdx = 0; partIdx < path.numParts(); ++partIdx) {
            if (pathComponent == path.getPart(partIdx)) {
                return true;
            }
        }
    }

    return false;
}
Esempio n. 2
0
    TEST( UpdateIndexDataTest, getCanonicalIndexField1 ) {
        string x;

        ASSERT_FALSE( getCanonicalIndexField( "a", &x ) );
        ASSERT_FALSE( getCanonicalIndexField( "aaa", &x ) );
        ASSERT_FALSE( getCanonicalIndexField( "a.b", &x ) );

        ASSERT_TRUE( getCanonicalIndexField( "a.$", &x ) );
        ASSERT_EQUALS( x, "a" );
        ASSERT_TRUE( getCanonicalIndexField( "a.0", &x ) );
        ASSERT_EQUALS( x, "a" );
        ASSERT_TRUE( getCanonicalIndexField( "a.123", &x ) );
        ASSERT_EQUALS( x, "a" );

        ASSERT_TRUE( getCanonicalIndexField( "a.$.b", &x ) );
        ASSERT_EQUALS( x, "a.b" );
        ASSERT_TRUE( getCanonicalIndexField( "a.0.b", &x ) );
        ASSERT_EQUALS( x, "a.b" );
        ASSERT_TRUE( getCanonicalIndexField( "a.123.b", &x ) );
        ASSERT_EQUALS( x, "a.b" );

        ASSERT_FALSE( getCanonicalIndexField( "a.$ref", &x ) );
        ASSERT_FALSE( getCanonicalIndexField( "a.$ref.b", &x ) );


        ASSERT_FALSE( getCanonicalIndexField( "a.c$d.b", &x ) );

        ASSERT_FALSE( getCanonicalIndexField( "a.123a", &x ) );
        ASSERT_FALSE( getCanonicalIndexField( "a.a123", &x ) );
        ASSERT_FALSE( getCanonicalIndexField( "a.123a.b", &x ) );
        ASSERT_FALSE( getCanonicalIndexField( "a.a123.b", &x ) );

        ASSERT_FALSE( getCanonicalIndexField( "a.", &x ) );
    }
void UpdateIndexData::addPath(const FieldRef& path) {
    _canonicalPaths.insert(getCanonicalIndexField(path));
}