data_model.py 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. """
  2. /***************************************************************************
  3. Name : DB Manager
  4. Description : Database manager plugin for QGIS
  5. Date : May 23, 2011
  6. copyright : (C) 2011 by Giuseppe Sucameli
  7. email : brush.tyler@gmail.com
  8. ***************************************************************************/
  9. /***************************************************************************
  10. * *
  11. * This program is free software; you can redistribute it and/or modify *
  12. * it under the terms of the GNU General Public License as published by *
  13. * the Free Software Foundation; either version 2 of the License, or *
  14. * (at your option) any later version. *
  15. * *
  16. ***************************************************************************/
  17. """
  18. from qgis.core import QgsMessageLog
  19. from ..data_model import (TableDataModel,
  20. SqlResultModel,
  21. SqlResultModelAsync,
  22. SqlResultModelTask)
  23. from ..plugin import BaseError
  24. class GPKGTableDataModel(TableDataModel):
  25. def __init__(self, table, parent=None):
  26. TableDataModel.__init__(self, table, parent)
  27. # fields_txt = ", ".join(self.fields)
  28. # table_txt = self.db.quoteId((self.table.schemaName(), self.table.name))
  29. # run query and get results
  30. # sql = "SELECT %s FROM %s" % (fields_txt, table_txt)
  31. # self.resdata = self.db._fetchAll(sql, include_fid_and_geometry = True)
  32. self.resdata = self.db._fetchAllFromLayer(table)
  33. self.fetchedFrom = 0
  34. self.fetchedCount = len(self.resdata)
  35. def _sanitizeTableField(self, field):
  36. return self.db.quoteId(field.name)
  37. def rowCount(self, index=None):
  38. return self.fetchedCount
  39. class GPKGSqlResultModelTask(SqlResultModelTask):
  40. def __init__(self, db, sql, parent):
  41. super().__init__(db, sql, parent)
  42. def run(self):
  43. try:
  44. self.model = GPKGSqlResultModel(self.db, self.sql, None)
  45. except BaseError as e:
  46. self.error = e
  47. QgsMessageLog.logMessage(e.msg)
  48. return False
  49. return True
  50. def cancel(self):
  51. self.db.connector.cancel()
  52. SqlResultModelTask.cancel(self)
  53. class GPKGSqlResultModelAsync(SqlResultModelAsync):
  54. def __init__(self, db, sql, parent):
  55. super().__init__()
  56. self.task = GPKGSqlResultModelTask(db, sql, parent)
  57. self.task.taskCompleted.connect(self.modelDone)
  58. self.task.taskTerminated.connect(self.modelDone)
  59. class GPKGSqlResultModel(SqlResultModel):
  60. pass