Exemple #1
0
def create_index(index_name, table, col, buf):
    schemas = load(table_schema_file)
    if table in schemas:
        schema = schemas[table]
    else:
        raise MiniSQLError('table {} does not exit'.format(table))

    index_file = index_file_prefix.format(index_name)
    if os.path.exists(index_file):
        raise MiniSQLError('index {} all ready exits'.format(index_name))

    tree = BPlusTree(TREE_ORDER)

    table_blocks = []
    for i, b in enumerate(buf.header):
        if b['table'] == table:
            table_blocks.append(i)

    idx = schema['cols'].index(col)

    for block_idx in table_blocks:
        b = buf.get_block(block_idx)
        records = b.data()

        for i, r in enumerate(records):
            ptr = block_idx * MAX_RECORDS_PER_BLOCK + i
            tree.insert(r[idx], ptr)

    schemas[table]['index'].append([col, index_name])

    dump(schemas, table_schema_file)
    dump(tree, index_file)

    log('create index {}'.format(index_name))
Exemple #2
0
def test_contains():
    bt = BPlusTree(20)
    key_a = index.Span(1, 6)
    key_b = index.Span(6, 10)
    bt.insert(key_a, "a_value")
    bt.insert(key_b, "b_value")
    assert key_a in bt
    assert key_b in bt
    assert bt[key_a] == "a_value"
    assert bt[key_b] == "b_value"
Exemple #3
0
def test_contains():
    bt = BPlusTree(20)
    key_a = index.Span(1, 6)
    key_b = index.Span(6, 10)
    bt.insert(key_a, "a_value")
    bt.insert(key_b, "b_value")
    assert key_a in bt
    assert key_b in bt
    assert bt[key_a] == "a_value"
    assert bt[key_b] == "b_value"
Exemple #4
0
def test_additions_sorted():
    bt = BPlusTree(20)
    rl = [index.Span(a, a + 5) for a in range(0, 100, 5)]

    for item in rl:
        bt.insert(item, str(item))

    for item in rl:
        assert str(item) == bt[item]

    assert rl == list(bt)
Exemple #5
0
def test_additions_sorted():
    bt = BPlusTree(20)
    rl = [index.Span(a, a + 5) for a in range(0, 100, 5)]

    for item in rl:
        bt.insert(item, str(item))

    for item in rl:
        assert str(item) == bt[item]

    assert rl == list(bt)
Exemple #6
0
def test_additions_sorted():
    bt = BPlusTree(20)
    l = range(2000)

    for item in l:
        bt.insert(item, str(item))

    for item in l:
        assert str(item) == bt[item]

    assert l == list(bt)
Exemple #7
0
def test_additions_sorted():
    bt = BPlusTree(20)
    l = range(2000)

    for item in l:
        bt.insert(item, str(item))

    for item in l:
        assert str(item) == bt[item]

    assert l == list(bt)
Exemple #8
0
def test_split():
    bt = BPlusTree(20)
    key_a = index.Span(1, 6)
    key_b = index.Span(3, 10)
    key_a_prime = index.Span(1, 3)
    bt.insert(key_a, "a_value")
    bt.insert(key_b, "b_value")
    assert not (key_a in bt)
    assert key_a_prime in bt
    assert key_b in bt
    assert bt[key_a_prime] == "a_value"
    assert bt[key_b] == "b_value"
Exemple #9
0
def test_split():
    bt = BPlusTree(20)
    key_a = index.Span(1, 6)
    key_b = index.Span(3, 10)
    key_a_prime = index.Span(1, 3)
    bt.insert(key_a, "a_value")
    bt.insert(key_b, "b_value")
    assert not (key_a in bt)
    assert key_a_prime in bt
    assert key_b in bt
    assert bt[key_a_prime] == "a_value"
    assert bt[key_b] == "b_value"
Exemple #10
0
def test_additions_random():
    bt = BPlusTree(20)
    l = range(2000)
    random.shuffle(l)

    for item in l:
        bt.insert(item, str(item))

    for item in l:
        assert str(item) == bt[item]

    assert range(2000) == list(bt)
Exemple #11
0
def test_additions_random():
    bt = BPlusTree(20)
    l = range(2000)
    random.shuffle(l)

    for item in l:
        bt.insert(item, str(item))

    for item in l:
        assert str(item) == bt[item]

    assert range(2000) == list(bt)
Exemple #12
0
def test_bulkload():
    bt = BPlusTree.bulkload(zip(range(2000), map(str, range(2000))), 20)

    assert list(bt) == range(2000)

    assert list(bt.iteritems()) == zip(range(2000), map(str, range(2000)))
Exemple #13
0
def test_bulkload():
    bt = BPlusTree.bulkload(zip(range(2000), map(str, range(2000))), 20)

    assert list(bt) == range(2000)

    assert list(bt.iteritems()) ==  zip(range(2000), map(str, range(2000)))