summaryrefslogtreecommitdiffstats
path: root/bitbake/lib/bb/persist_data.py
diff options
context:
space:
mode:
authorBernhard Reutner-Fischer <rep.dot.nop@gmail.com>2010-06-04 14:04:41 +0200
committerRichard Purdie <rpurdie@linux.intel.com>2010-07-02 15:41:35 +0100
commit726802b98071f6139c9305be0383a2be20a37f4e (patch)
tree0864d2a7084f1681c6f14660f4940ca5ddb00672 /bitbake/lib/bb/persist_data.py
parent30216c65e59e7072bed5001598240dcc58017940 (diff)
downloadpoky-726802b98071f6139c9305be0383a2be20a37f4e.tar.gz
persist_data: cache connection and use cursor
Store database connection to persistent database in fetcher. (Bitbake rev: 8a6876752b90efd81d92f0947bfc9527d8260969) Signed-off-by: Bernhard Reutner-Fischer <rep.dot.nop@gmail.com> Signed-off-by: Chris Larson <chris_larson@mentor.com> Signed-off-by: Richard Purdie <rpurdie@linux.intel.com>
Diffstat (limited to 'bitbake/lib/bb/persist_data.py')
-rw-r--r--bitbake/lib/bb/persist_data.py21
1 files changed, 13 insertions, 8 deletions
diff --git a/bitbake/lib/bb/persist_data.py b/bitbake/lib/bb/persist_data.py
index 80ddeb5560..df0409cd8a 100644
--- a/bitbake/lib/bb/persist_data.py
+++ b/bitbake/lib/bb/persist_data.py
@@ -43,7 +43,10 @@ class PersistData:
43 43
44 Why sqlite? It handles all the locking issues for us. 44 Why sqlite? It handles all the locking issues for us.
45 """ 45 """
46 def __init__(self, d): 46 def __init__(self, d, persistent_database_connection):
47 if "connection" in persistent_database_connection:
48 self.cursor = persistent_database_connection["connection"].cursor()
49 return
47 self.cachedir = bb.data.getVar("PERSISTENT_DIR", d, True) or bb.data.getVar("CACHE", d, True) 50 self.cachedir = bb.data.getVar("PERSISTENT_DIR", d, True) or bb.data.getVar("CACHE", d, True)
48 if self.cachedir in [None, '']: 51 if self.cachedir in [None, '']:
49 bb.msg.fatal(bb.msg.domain.PersistData, "Please set the 'PERSISTENT_DIR' or 'CACHE' variable.") 52 bb.msg.fatal(bb.msg.domain.PersistData, "Please set the 'PERSISTENT_DIR' or 'CACHE' variable.")
@@ -55,27 +58,29 @@ class PersistData:
55 self.cachefile = os.path.join(self.cachedir, "bb_persist_data.sqlite3") 58 self.cachefile = os.path.join(self.cachedir, "bb_persist_data.sqlite3")
56 bb.msg.debug(1, bb.msg.domain.PersistData, "Using '%s' as the persistent data cache" % self.cachefile) 59 bb.msg.debug(1, bb.msg.domain.PersistData, "Using '%s' as the persistent data cache" % self.cachefile)
57 60
58 self.connection = sqlite3.connect(self.cachefile, timeout=5, isolation_level=None) 61 connection = sqlite3.connect(self.cachefile, timeout=5, isolation_level=None)
62 persistent_database_connection["connection"] = connection
63 self.cursor = persistent_database_connection["connection"].cursor()
59 64
60 def addDomain(self, domain): 65 def addDomain(self, domain):
61 """ 66 """
62 Should be called before any domain is used 67 Should be called before any domain is used
63 Creates it if it doesn't exist. 68 Creates it if it doesn't exist.
64 """ 69 """
65 self.connection.execute("CREATE TABLE IF NOT EXISTS %s(key TEXT, value TEXT);" % domain) 70 self.cursor.execute("CREATE TABLE IF NOT EXISTS %s(key TEXT, value TEXT);" % domain)
66 71
67 def delDomain(self, domain): 72 def delDomain(self, domain):
68 """ 73 """
69 Removes a domain and all the data it contains 74 Removes a domain and all the data it contains
70 """ 75 """
71 self.connection.execute("DROP TABLE IF EXISTS %s;" % domain) 76 self.cursor.execute("DROP TABLE IF EXISTS %s;" % domain)
72 77
73 def getKeyValues(self, domain): 78 def getKeyValues(self, domain):
74 """ 79 """
75 Return a list of key + value pairs for a domain 80 Return a list of key + value pairs for a domain
76 """ 81 """
77 ret = {} 82 ret = {}
78 data = self.connection.execute("SELECT key, value from %s;" % domain) 83 data = self.cursor.execute("SELECT key, value from %s;" % domain)
79 for row in data: 84 for row in data:
80 ret[str(row[0])] = str(row[1]) 85 ret[str(row[0])] = str(row[1])
81 86
@@ -85,7 +90,7 @@ class PersistData:
85 """ 90 """
86 Return the value of a key for a domain 91 Return the value of a key for a domain
87 """ 92 """
88 data = self.connection.execute("SELECT * from %s where key=?;" % domain, [key]) 93 data = self.cursor.execute("SELECT * from %s where key=?;" % domain, [key])
89 for row in data: 94 for row in data:
90 return row[1] 95 return row[1]
91 96
@@ -93,7 +98,7 @@ class PersistData:
93 """ 98 """
94 Sets the value of a key for a domain 99 Sets the value of a key for a domain
95 """ 100 """
96 data = self.connection.execute("SELECT * from %s where key=?;" % domain, [key]) 101 data = self.cursor.execute("SELECT * from %s where key=?;" % domain, [key])
97 rows = 0 102 rows = 0
98 for row in data: 103 for row in data:
99 rows = rows + 1 104 rows = rows + 1
@@ -111,7 +116,7 @@ class PersistData:
111 def _execute(self, *query): 116 def _execute(self, *query):
112 while True: 117 while True:
113 try: 118 try:
114 self.connection.execute(*query) 119 self.cursor.execute(*query)
115 return 120 return
116 except sqlite3.OperationalError as e: 121 except sqlite3.OperationalError as e:
117 if 'database is locked' in str(e): 122 if 'database is locked' in str(e):