diff options
author | lufte <javier@lufte.net> | 2021-07-02 22:18:12 -0300 |
---|---|---|
committer | lufte <javier@lufte.net> | 2021-07-02 22:18:12 -0300 |
commit | 03b8a266455b2cfd0484e1d16ba7e6370ae49655 (patch) | |
tree | 0ac496bdc7e285ddb9d327056f01f6b66793b8cf /qutebrowser | |
parent | b75d23e0b1ad305a681847107bdaff5b870e1fef (diff) | |
download | qutebrowser-03b8a266455b2cfd0484e1d16ba7e6370ae49655.tar.gz qutebrowser-03b8a266455b2cfd0484e1d16ba7e6370ae49655.zip |
The database of a table shouldn't be private
Diffstat (limited to 'qutebrowser')
-rw-r--r-- | qutebrowser/browser/history.py | 41 | ||||
-rw-r--r-- | qutebrowser/misc/sql.py | 28 |
2 files changed, 35 insertions, 34 deletions
diff --git a/qutebrowser/browser/history.py b/qutebrowser/browser/history.py index ada8bf0a6..4163f1957 100644 --- a/qutebrowser/browser/history.py +++ b/qutebrowser/browser/history.py @@ -126,8 +126,8 @@ class CompletionMetaInfo(sql.SqlTable): def __getitem__(self, key): self._check_key(key) - query = self._database.query('SELECT value FROM CompletionMetaInfo ' - 'WHERE key = :key') + query = self.database.query('SELECT value FROM CompletionMetaInfo ' + 'WHERE key = :key') return query.run(key=key).value() def __setitem__(self, key, value): @@ -172,7 +172,6 @@ class WebHistory(sql.SqlTable): 'atime': 'NOT NULL', 'redirect': 'NOT NULL'}, parent=parent) - self.database = database self._progress = progress # Store the last saved url to avoid duplicate immediate saves. self._last_url = None @@ -188,8 +187,8 @@ class WebHistory(sql.SqlTable): self.metainfo.try_recover() rebuild_completion = self.metainfo['force_rebuild'] - if self._database.user_version_changed(): - with self._database.transaction(): + if self.database.user_version_changed(): + with self.database.transaction(): # If the DB user version changed, run a full cleanup and rebuild the # completion history. # @@ -199,7 +198,7 @@ class WebHistory(sql.SqlTable): # VACUUM to make things smaller. self._cleanup_history() rebuild_completion = True - self._database.upgrade_user_version() + self.database.upgrade_user_version() # Get a string of all patterns patterns = config.instance.get_str('completion.web_history.exclude') @@ -217,19 +216,19 @@ class WebHistory(sql.SqlTable): self.create_index('HistoryIndex', 'url') self.create_index('HistoryAtimeIndex', 'atime') self._contains_query = self.contains_query('url') - self._between_query = self._database.query('SELECT * FROM History ' - 'where not redirect ' - 'and not url like "qute://%" ' - 'and atime > :earliest ' - 'and atime <= :latest ' - 'ORDER BY atime desc') - - self._before_query = self._database.query('SELECT * FROM History ' + self._between_query = self.database.query('SELECT * FROM History ' 'where not redirect ' 'and not url like "qute://%" ' + 'and atime > :earliest ' 'and atime <= :latest ' - 'ORDER BY atime desc ' - 'limit :limit offset :offset') + 'ORDER BY atime desc') + + self._before_query = self.database.query('SELECT * FROM History ' + 'where not redirect ' + 'and not url like "qute://%" ' + 'and atime <= :latest ' + 'ORDER BY atime desc ' + 'limit :limit offset :offset') def __repr__(self): return utils.get_repr(self, length=len(self)) @@ -277,7 +276,7 @@ class WebHistory(sql.SqlTable): 'qute://pdfjs%', ] where_clause = ' OR '.join(f"url LIKE '{term}'" for term in terms) - q = self._database.query(f'DELETE FROM History WHERE {where_clause}') + q = self.database.query(f'DELETE FROM History WHERE {where_clause}') entries = q.run() log.sql.debug(f"Cleanup removed {entries.rows_affected()} items") @@ -303,9 +302,9 @@ class WebHistory(sql.SqlTable): QApplication.processEvents() # Select the latest entry for each url - q = self._database.query('SELECT url, title, max(atime) AS atime FROM History ' - 'WHERE NOT redirect ' - 'GROUP BY url ORDER BY atime asc') + q = self.database.query('SELECT url, title, max(atime) AS atime FROM History ' + 'WHERE NOT redirect ' + 'GROUP BY url ORDER BY atime asc') result = q.run() QApplication.processEvents() entries = list(result) @@ -325,7 +324,7 @@ class WebHistory(sql.SqlTable): self._progress.set_maximum(0) # We might have caused fragmentation - let's clean up. - self._database.query('VACUUM').run() + self.database.query('VACUUM').run() QApplication.processEvents() self.completion.insert_batch(data, replace=True) diff --git a/qutebrowser/misc/sql.py b/qutebrowser/misc/sql.py index d8755f0b4..460d88ce9 100644 --- a/qutebrowser/misc/sql.py +++ b/qutebrowser/misc/sql.py @@ -387,12 +387,14 @@ class SqlTable(QObject): Attributes: _name: Name of the SQL table this wraps. + database: The Database to which this table belongs. Signals: changed: Emitted when the table is modified. """ changed = pyqtSignal() + database: Database def __init__(self, database: Database, name: str, fields: List[str], constraints: Optional[Dict[str, str]] = None, @@ -407,7 +409,7 @@ class SqlTable(QObject): """ super().__init__(parent) self._name = name - self._database = database + self.database = database self._create_table(fields, constraints) def _create_table(self, fields: List[str], constraints: Optional[Dict[str, str]], @@ -417,13 +419,13 @@ class SqlTable(QObject): If the table already exists, this does nothing (except with force=True), so it can e.g. be called on every user_version change. """ - if not self._database.user_version_changed() and not force: + if not self.database.user_version_changed() and not force: return constraints = constraints or {} column_defs = [f'{field} {constraints.get(field, "")}' for field in fields] - q = self._database.query( + q = self.database.query( f"CREATE TABLE IF NOT EXISTS {self._name} ({', '.join(column_defs)})" ) q.run() @@ -435,17 +437,17 @@ class SqlTable(QObject): name: Name of the index, should be unique. field: Name of the field to index. """ - if not self._database.user_version_changed(): + if not self.database.user_version_changed(): return - q = self._database.query( + q = self.database.query( f"CREATE INDEX IF NOT EXISTS {name} ON {self._name} ({field})" ) q.run() def __iter__(self) -> Iterator[Any]: """Iterate rows in the table.""" - q = self._database.query(f"SELECT * FROM {self._name}") + q = self.database.query(f"SELECT * FROM {self._name}") q.run() return iter(q) @@ -455,19 +457,19 @@ class SqlTable(QObject): Args: field: Field to match. """ - return self._database.query( + return self.database.query( f"SELECT EXISTS(SELECT * FROM {self._name} WHERE {field} = :val)" ) def __len__(self) -> int: """Return the count of rows in the table.""" - q = self._database.query(f"SELECT count(*) FROM {self._name}") + q = self.database.query(f"SELECT count(*) FROM {self._name}") q.run() return q.value() def __bool__(self) -> bool: """Check whether there's any data in the table.""" - q = self._database.query(f"SELECT 1 FROM {self._name} LIMIT 1") + q = self.database.query(f"SELECT 1 FROM {self._name} LIMIT 1") q.run() return q.query.next() @@ -481,7 +483,7 @@ class SqlTable(QObject): Return: The number of rows deleted. """ - q = self._database.query(f"DELETE FROM {self._name} where {field} = :val") + q = self.database.query(f"DELETE FROM {self._name} where {field} = :val") q.run(val=value) if not q.rows_affected(): raise KeyError('No row with {field} = "{value}"') @@ -491,7 +493,7 @@ class SqlTable(QObject): params = ', '.join(f':{key}' for key in values) columns = ', '.join(values) verb = "REPLACE" if replace else "INSERT" - return self._database.query( + return self.database.query( f"{verb} INTO {self._name} ({columns}) values({params})" ) @@ -520,7 +522,7 @@ class SqlTable(QObject): def delete_all(self) -> None: """Remove all rows from the table.""" - self._database.query(f"DELETE FROM {self._name}").run() + self.database.query(f"DELETE FROM {self._name}").run() self.changed.emit() def select(self, sort_by: str, sort_order: str, limit: int = -1) -> Query: @@ -533,7 +535,7 @@ class SqlTable(QObject): Return: A prepared and executed select query. """ - q = self._database.query( + q = self.database.query( f"SELECT * FROM {self._name} ORDER BY {sort_by} {sort_order} LIMIT :limit" ) q.run(limit=limit) |