cache/sqlite.py: fix getitem order assumption
authorZac Medico <zmedico@gentoo.org>
Tue, 18 Sep 2012 19:01:59 +0000 (12:01 -0700)
committerZac Medico <zmedico@gentoo.org>
Tue, 18 Sep 2012 19:01:59 +0000 (12:01 -0700)
The order assumption was incorrect when new columns were added, since
they could be added in any order.

pym/portage/cache/sqlite.py

index a6a3e066d20aec0946f26b4dddaa7b76ee2e8eb4..1038bb2ab4fc75cec63a4de6fd1ddb74b5507041 100644 (file)
@@ -29,6 +29,7 @@ class database(fs_template.FsBased):
                self._allowed_keys = ["_mtime_", "_eclasses_"]
                self._allowed_keys.extend(self._known_keys)
                self._allowed_keys.sort()
+               self._allowed_keys_set = frozenset(self._allowed_keys)
                self.location = os.path.join(self.location, 
                        self.label.lstrip(os.path.sep).rstrip(os.path.sep))
 
@@ -93,9 +94,6 @@ class database(fs_template.FsBased):
                self._db_table["packages"]["table_name"] = mytable
                self._db_table["packages"]["package_id"] = "internal_db_package_id"
                self._db_table["packages"]["package_key"] = "portage_package_key"
-               self._db_table["packages"]["internal_columns"] = \
-                       [self._db_table["packages"]["package_id"],
-                       self._db_table["packages"]["package_key"]]
                create_statement = []
                create_statement.append("CREATE TABLE")
                create_statement.append(mytable)
@@ -110,9 +108,6 @@ class database(fs_template.FsBased):
                create_statement.append(")")
                
                self._db_table["packages"]["create"] = " ".join(create_statement)
-               self._db_table["packages"]["columns"] = \
-                       self._db_table["packages"]["internal_columns"] + \
-                       self._allowed_keys
 
                cursor = self._db_cursor
                for k, v in self._db_table.items():
@@ -212,11 +207,10 @@ class database(fs_template.FsBased):
                else:
                        raise cache_errors.CacheCorruption(cpv, "key is not unique")
                d = {}
-               internal_columns = self._db_table["packages"]["internal_columns"]
-               column_index = -1
-               for k in self._db_table["packages"]["columns"]:
-                       column_index +=1
-                       if k not in internal_columns:
+               allowed_keys_set = self._allowed_keys_set
+               for column_index, column_info in enumerate(cursor.description):
+                       k = column_info[0]
+                       if k in allowed_keys_set:
                                d[k] = result[0][column_index]
 
                return d