Exemple #1
0
def test_should_insert():
    udb = Udb({
        'a': UdbBtreeIndex(['a']),
        'ab': UdbBtreeIndex(['a', 'b']),
        'b': UdbBtreeIndex(['b']),
    })

    a = {'a': 1, 'b': 1}
    b = {'a': 2, 'b': 2}
    c = {'a': 3, 'b': 3}

    udb.insert(a)
    udb.insert(b)
    udb.insert(c)

    assert list(udb.select()) == [
        {
            'a': 1,
            'b': 1,
            '__rev__': 0
        },
        {
            'a': 2,
            'b': 2,
            '__rev__': 1
        },
        {
            'a': 3,
            'b': 3,
            '__rev__': 2
        },
    ]
    assert len(udb.indexes['a']) == 3
    assert len(udb.indexes['ab']) == 3
    assert len(udb.indexes['b']) == 3
def test_should_delete_by_query():
    udb = Udb({
        'a': UdbBtreeIndex(['a']),
        'ab': UdbBtreeIndex(['a', 'b']),
        'b': UdbBtreeIndex(['b']),
    })

    a = {'a': 1, 'b': 1}
    b = {'a': 2, 'b': 2}
    c = {'a': 3, 'b': 3}

    udb.insert(a)
    udb.insert(b)
    udb.insert(c)

    delete_count = udb.delete({'a': 2})

    assert delete_count == 1
    assert list(udb.select()) == [{
        'a': 1,
        'b': 1,
        '__rev__': 0
    }, {
        'a': 3,
        'b': 3,
        '__rev__': 2
    }]
    assert len(udb.indexes['a']) == 2
    assert len(udb.indexes['ab']) == 2
    assert len(udb.indexes['b']) == 2
Exemple #3
0
def test_should_update_all():
    udb = Udb({
        'a': UdbBtreeIndex(['a']),
        'ab': UdbBtreeIndex(['a', 'b']),
        'b': UdbBtreeIndex(['b']),
    })

    a = {'a': 1, 'b': 1}
    b = {'a': 2, 'b': 2}
    c = {'a': 3, 'b': 3}

    udb.insert(a)
    udb.insert(b)
    udb.insert(c)

    update_count = udb.update({'a': 1})

    assert update_count == 3
    assert list(udb.select()) == [{
        'a': 1, 'b': 1, '__rev__': 4
    }, {
        'a': 1, 'b': 2, '__rev__': 4
    }, {
        'a': 1, 'b': 3, '__rev__': 4
    }]
    assert len(udb.indexes['a']) == 1
    assert len(udb.indexes['ab']) == 3
    assert len(udb.indexes['b']) == 3
def test_should_delete_all():
    udb = Udb({
        'a': UdbBtreeIndex(['a']),
        'ab': UdbBtreeIndex(['a', 'b']),
        'b': UdbBtreeIndex(['b']),
    })

    a = {'a': 1, 'b': 1}
    b = {'a': 2, 'b': 2}
    c = {'a': 3, 'b': 3}

    udb.insert(a)
    udb.insert(b)
    udb.insert(c)

    delete_count = udb.delete()

    assert delete_count == 3
    assert list(udb.select()) == []
    assert len(udb.indexes['a']) == 0
    assert len(udb.indexes['ab']) == 0
    assert len(udb.indexes['b']) == 0
def test_should_delete_rotating_delete_buffer():
    udb = Udb({
        'a': UdbBtreeIndex(['a']),
    })

    for i in range(0, 10000):
        udb.insert({'a': i})

    delete_count = udb.delete({'a': {'$lte': 4999}})

    assert delete_count == 5000

    for i, r in enumerate(udb.select({})):
        assert r['a'] == i + 5000
def test_should_select_by_full_covered_query():
    udb = Udb({
        'a': UdbBtreeIndex(['a']),
        'ab': UdbBtreeIndex(['a', 'b']),
        'b': UdbBtreeIndex(['b']),
    })

    a = {'a': 1, 'b': 1, 'c': 1}
    b = {'a': 2, 'b': 2, 'c': 2}
    c = {'a': 3, 'b': 3, 'c': 3}

    udb.insert(a)
    udb.insert(b)
    udb.insert(c)

    records = list(udb.select({'a': 2, 'b': 2}))

    assert len(records) == 1
    assert records[0] == {'a': 2, 'b': 2, 'c': 2, '__rev__': 1}

    records = list(udb.select({'a': 0, 'b': 0}))

    assert len(records) == 0
def test_should_select_by_subset_using_indexes():
    udb = Udb({
        'a': UdbBtreeIndex(['a']),
        'ab': UdbBtreeIndex(['a', 'b']),
        'b': UdbBtreeIndex(['b']),
    })

    a = {'a': 1, 'b': 1, 'c': 1}
    b = {'a': 1, 'b': 2, 'c': 2}
    c = {'a': 3, 'b': 3, 'c': 3}

    udb.insert(a)
    udb.insert(b)
    udb.insert(c)

    records = list(udb.select({'a': 1}, offset=1, limit=5, use_indexes=['ab']))

    assert len(records) == 1
    assert records[0] == {'a': 1, 'b': 2, 'c': 2, '__rev__': 1}

    records = list(udb.select({'a': 1}, offset=9, limit=5, use_indexes=['ab']))

    assert len(records) == 0
def test_should_select_using_btree_index_by_range():
    udb = Udb(indexes={'a': UdbBtreeIndex(['a', 'b', 'c'])})

    udb.insert({'a': 1, 'b': 0, 'c': 0})
    udb.insert({'a': 1, 'b': 1, 'c': 1})
    udb.insert({'a': 1, 'b': 1, 'c': 2})
    udb.insert({'a': 1, 'b': 2, 'c': 3})

    assert list(udb.select({
        'a': 1,
        'b': 1,
        'c': {
            '$gt': 1
        }
    })) == [
        {
            '__rev__': 2,
            'a': 1,
            'b': 1,
            'c': 2
        },
    ]
    assert list(udb.select({
        'a': 1,
        'b': 1,
        'c': {
            '$gte': 1
        }
    })) == [
        {
            '__rev__': 1,
            'a': 1,
            'b': 1,
            'c': 1
        },
        {
            '__rev__': 2,
            'a': 1,
            'b': 1,
            'c': 2
        },
    ]
    assert list(udb.select({
        'a': 1,
        'b': 1,
        'c': {
            '$lt': 2
        }
    })) == [
        {
            '__rev__': 1,
            'a': 1,
            'b': 1,
            'c': 1
        },
    ]
    assert list(udb.select({
        'a': 1,
        'b': 1,
        'c': {
            '$lte': 2
        }
    })) == [
        {
            '__rev__': 1,
            'a': 1,
            'b': 1,
            'c': 1
        },
        {
            '__rev__': 2,
            'a': 1,
            'b': 1,
            'c': 2
        },
    ]