Implement canFetchMore for SQL completion.

This just forwards canFetchMore and fetchMore to the underlying tables.
It seems to be returning True and fetching in some cases (with a large
history), so I guess it is useful?
This commit is contained in:
Ryan Roden-Corrent 2017-02-15 20:55:27 -05:00
parent ffd044b52b
commit 02fb1a037c
3 changed files with 32 additions and 4 deletions

View File

@ -91,6 +91,19 @@ class SqlCompletionModel(QAbstractItemModel):
self.pattern = '' self.pattern = ''
self.delete_cur_item = delete_cur_item self.delete_cur_item = delete_cur_item
def _cat_from_idx(self, index):
"""Return the category pointed to by the given index.
Args:
idx: A QModelIndex
Returns:
A _SqlCompletionCategory if the index points at one, else None
"""
# items hold an index to the parent category in their internalPointer
# categories have an empty internalPointer
if index.isValid() and not index.internalPointer():
return self._categories[index.row()]
def new_category(self, name, select='*', where=None, sort_by=None, def new_category(self, name, select='*', where=None, sort_by=None,
sort_order=None, limit=None): sort_order=None, limit=None):
"""Create a new completion category and add it to this model. """Create a new completion category and add it to this model.
@ -184,17 +197,31 @@ class SqlCompletionModel(QAbstractItemModel):
if not parent.isValid(): if not parent.isValid():
# top-level # top-level
return len(self._categories) return len(self._categories)
elif parent.internalPointer() or parent.column() != 0: cat = self._cat_from_idx(parent)
if not cat or parent.column() != 0:
# item or nonzero category column (only first col has children) # item or nonzero category column (only first col has children)
return 0 return 0
else: else:
# category # category
return self._categories[parent.row()].rowCount() return cat.rowCount()
def columnCount(self, parent=QModelIndex()): def columnCount(self, parent=QModelIndex()):
# pylint: disable=unused-argument # pylint: disable=unused-argument
return 3 return 3
def canFetchMore(self, parent):
"""Override to forward the call to the tables."""
cat = self._cat_from_idx(parent)
if cat:
return cat.canFetchMore()
return False
def fetchMore(self, parent):
"""Override to forward the call to the tables."""
cat = self._cat_from_idx(parent)
if cat:
cat.fetchMore()
def count(self): def count(self):
"""Return the count of non-category items.""" """Return the count of non-category items."""
return sum(t.rowCount() for t in self._categories) return sum(t.rowCount() for t in self._categories)

View File

@ -47,13 +47,13 @@ def run_query(querystr, values=None):
Args: Args:
values: A list of positional parameter bindings. values: A list of positional parameter bindings.
""" """
log.completion.debug('Running SQL query: "{}"'.format(querystr)) log.sql.debug('Running SQL query: "{}"'.format(querystr))
database = QSqlDatabase.database() database = QSqlDatabase.database()
query = QSqlQuery(database) query = QSqlQuery(database)
query.prepare(querystr) query.prepare(querystr)
for val in values or []: for val in values or []:
query.addBindValue(val) query.addBindValue(val)
log.completion.debug('Query bindings: {}'.format(query.boundValues())) log.sql.debug('Query bindings: {}'.format(query.boundValues()))
if not query.exec_(): if not query.exec_():
raise SqlException('Failed to exec query "{}": "{}"'.format( raise SqlException('Failed to exec query "{}": "{}"'.format(
querystr, query.lastError().text())) querystr, query.lastError().text()))

View File

@ -141,6 +141,7 @@ sessions = logging.getLogger('sessions')
webelem = logging.getLogger('webelem') webelem = logging.getLogger('webelem')
prompt = logging.getLogger('prompt') prompt = logging.getLogger('prompt')
network = logging.getLogger('network') network = logging.getLogger('network')
sql = logging.getLogger('sql')
ram_handler = None ram_handler = None