예제 #1
0
def test_should_insert_with_initial_value_instead_of_default():
    udb = Udb(schema={'b': 2})

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

    udb.insert(a)

    assert list(udb.select()) == [{'a': 1, 'b': 3, 'c': 1, '__rev__': 0}]
예제 #2
0
def test_should_insert_with_default_value_as_current_timestamp():
    udb = Udb(schema={'b': current_timestamp()})

    a = {'a': 1, 'c': 1}

    udb.insert(a)

    assert list(udb.select()) == [{'a': 1, 'b': a['b'], 'c': 1, '__rev__': 0}]
예제 #3
0
def test_should_insert_with_default_value_as_callable():
    udb = Udb(schema={'b': lambda key, values: 2})

    a = {'a': 1, 'c': 1}

    udb.insert(a)

    assert list(udb.select()) == [{'a': 1, 'b': 2, 'c': 1, '__rev__': 0}]
예제 #4
0
def test_should_validate_query():
    i = Udb({
        'a': UdbIndexA(['a']),
        'b': UdbIndexB(['b']),
    })

    assert i.validate_query({'a': None}) is True
    assert UdbIndexA.q == {'a': None}
    assert UdbIndexB.q == {'a': None}
예제 #5
0
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
예제 #6
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
예제 #7
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
예제 #8
0
def test_should_select_using_seq_scan_by_gt_operator():
    udb = Udb()

    a = {'a': None, '__rev__': 0}
    b = {'a': False, '__rev__': 1}
    c = {'a': True, '__rev__': 2}
    d = {'a': -1, '__rev__': 3}
    e = {'a': 1, '__rev__': 4}
    f = {'a': '1', '__rev__': 5}

    udb.insert(a)
    udb.insert(b)
    udb.insert(c)
    udb.insert(d)
    udb.insert(e)
    udb.insert(f)

    records = list(udb.select({'a': {'$gt': None}}))

    assert records == [b, c, d, e, f]
예제 #9
0
def test_should_select_using_reverse_sort():
    udb = Udb()

    a = {'a': 6, '__rev__': 0}
    b = {'a': 1, '__rev__': 1}
    c = {'a': 5, '__rev__': 2}
    d = {'a': 2, '__rev__': 3}
    e = {'a': 4, '__rev__': 4}
    f = {'a': 3, '__rev__': 5}

    udb.insert(a)
    udb.insert(b)
    udb.insert(c)
    udb.insert(d)
    udb.insert(e)
    udb.insert(f)

    records = list(udb.select(sort='-a'))

    assert records == [a, c, e, f, d, b]
예제 #10
0
def test_should_raise_conflict_error_on_uniq_index():
    udb = Udb({
        'a': UdbBtreeUniqIndex(['a']),
        'ab': UdbBtreeUniqIndex(['a', 'b']),
        'b': UdbBtreeUniqIndex(['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)

    with pytest.raises(Exception) as excinfo:
        udb.insert({'a': 2})

    assert isinstance(excinfo.value, ConstraintError) is True
예제 #11
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
예제 #12
0
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
예제 #13
0
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
예제 #14
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
예제 #15
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
        },
    ]
예제 #16
0
def test_should_select_by_range():
    udb = Udb()

    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
        },
    ]