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