~brian-murray/software-center/apport-hook

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
#!/usr/bin/python

import os
import sys
import xapian

sys.path.insert(0, "../")
from softwarecenter.enums import XAPIAN_VALUE_PKGNAME, XAPIAN_VALUE_APPNAME
from softwarecenter.paths import XAPIAN_BASE_PATH
from softwarecenter.utils import ExecutionTime

def run_benchmark(db):
    # test postlist
    with ExecutionTime('postlist("")'):
        for m in db.postlist(""):
            pass

    # test postlist + get_document
    with ExecutionTime('postlist+get_document'):
        for m in db.postlist(""):
            doc = db.get_document(m.docid)

    # test postlist + get_document
    with ExecutionTime('postlist+get_document+get_value'):
        for m in db.postlist(""):
            doc = db.get_document(m.docid)
            doc.get_value(XAPIAN_VALUE_PKGNAME)

def run_query(parser, search_term):
    search_query = parser.parse_query(search_term, 
                                      xapian.QueryParser.FLAG_PARTIAL|
                                      xapian.QueryParser.FLAG_BOOLEAN)
    enquire = xapian.Enquire(db)
    enquire.set_query(search_query)
    with ExecutionTime("enquire"):
        mset = enquire.get_mset(0, db.get_doccount())
        print "len mset: ", len(mset)

if __name__ == "__main__":

    pathname = os.path.join(XAPIAN_BASE_PATH, "xapian")
    db = xapian.Database(pathname)

    print "app db only"
    run_benchmark(db)
    
    print "with apt-xapian-index"
    axi = xapian.Database("/var/lib/apt-xapian-index/index")
    db.add_database(axi)
    run_benchmark(db)

    print "simple query: a"
    parser = xapian.QueryParser()
    run_query(parser, "a")
    run_query(parser, "ab")
    run_query(parser, "abc")

    print "with db query: a"
    parser.set_database(db)
    parser.add_boolean_prefix("pkg", "AP")
    parser.set_default_op(xapian.Query.OP_AND)
    run_query(parser, "a")
    run_query(parser, "ab")
    run_query(parser, "abc")

    print "query for all !ATapplication"
    search_query = xapian.Query(xapian.Query.OP_AND_NOT, 
                                xapian.Query(""), 
                                xapian.Query("ATapplication"))
    enquire = xapian.Enquire(db)
    enquire.set_query(search_query)
    with ExecutionTime("enquire"):
        mset = enquire.get_mset(0, db.get_doccount())
        print "len mset: ", len(mset)

    print "look at all !ATapplication"
    search_query = xapian.Query(xapian.Query.OP_AND_NOT, 
                                xapian.Query(""), 
                                xapian.Query("ATapplication"))
    enquire = xapian.Enquire(db)
    enquire.set_query(search_query)
    with ExecutionTime("enquire"):
        mset = enquire.get_mset(0, db.get_doccount())
        print "len mset: ", len(mset)
        for m in mset:
            doc = m.document
            appname = doc.get_value(XAPIAN_VALUE_APPNAME)
            pkgname = doc.get_value(XAPIAN_VALUE_PKGNAME)