mirror of
https://github.com/qgis/QGIS.git
synced 2025-04-13 00:03:09 -04:00
Merge pull request #9086 from elpaso/bugfix-21151-db-manager-comments-armageddon
Quick and dirty patch to DB-Manager after PR 8831
This commit is contained in:
commit
e4df72ee3f
@ -301,6 +301,10 @@ class GPKGTableField(TableField):
|
||||
self.num, self.name, self.dataType, self.notNull, self.default, self.primaryKey = row
|
||||
self.hasDefault = self.default
|
||||
|
||||
def getComment(self):
|
||||
"""Returns the comment for a field"""
|
||||
return ''
|
||||
|
||||
|
||||
class GPKGTableIndex(TableIndex):
|
||||
|
||||
|
@ -91,7 +91,8 @@ class OracleDBPlugin(DBPlugin):
|
||||
uri = QgsDataSourceUri()
|
||||
|
||||
settingsList = ["host", "port", "database", "username", "password"]
|
||||
host, port, database, username, password = [settings.value(x, "", type=str) for x in settingsList]
|
||||
host, port, database, username, password = [
|
||||
settings.value(x, "", type=str) for x in settingsList]
|
||||
|
||||
# get all of the connexion options
|
||||
|
||||
@ -202,7 +203,8 @@ class ORDatabase(Database):
|
||||
uri = self.uri()
|
||||
con = self.database().connector
|
||||
|
||||
uri.setDataSource(u"", u"({}\n)".format(sql), geomCol, filter, uniqueCol.strip(u'"'))
|
||||
uri.setDataSource(u"", u"({}\n)".format(
|
||||
sql), geomCol, filter, uniqueCol.strip(u'"'))
|
||||
if avoidSelectById:
|
||||
uri.disableSelectAtId(True)
|
||||
provider = self.dbplugin().providerName()
|
||||
@ -522,7 +524,7 @@ class ORTableField(TableField):
|
||||
def type2String(self):
|
||||
if (u"TIMESTAMP" in self.dataType or
|
||||
self.dataType in [u"DATE", u"SDO_GEOMETRY",
|
||||
u"BINARY_FLOAT", u"BINARY_DOUBLE"]):
|
||||
u"BINARY_FLOAT", u"BINARY_DOUBLE"]):
|
||||
return u"{}".format(self.dataType)
|
||||
if self.charMaxLen in [None, -1]:
|
||||
return u"{}".format(self.dataType)
|
||||
@ -557,6 +559,10 @@ class ORTableField(TableField):
|
||||
self.table().refreshIndexes()
|
||||
return ret
|
||||
|
||||
def getComment(self):
|
||||
"""Returns the comment for a field"""
|
||||
return ''
|
||||
|
||||
|
||||
class ORTableConstraint(TableConstraint):
|
||||
|
||||
|
@ -294,6 +294,10 @@ class SLTableField(TableField):
|
||||
self.num, self.name, self.dataType, self.notNull, self.default, self.primaryKey = row
|
||||
self.hasDefault = self.default
|
||||
|
||||
def getComment(self):
|
||||
"""Returns the comment for a field"""
|
||||
return ''
|
||||
|
||||
|
||||
class SLTableIndex(TableIndex):
|
||||
|
||||
|
@ -192,3 +192,7 @@ class LTableField(TableField):
|
||||
TableField.__init__(self, table)
|
||||
self.num, self.name, self.dataType, self.notNull, self.default, self.primaryKey = row
|
||||
self.hasDefault = self.default
|
||||
|
||||
def getComment(self):
|
||||
"""Returns the comment for a field"""
|
||||
return ''
|
||||
|
@ -56,18 +56,23 @@ class DlgFieldProperties(QDialog, Ui_Dialog):
|
||||
self.chkNull.setChecked(not fld.notNull)
|
||||
if fld.hasDefault:
|
||||
self.editDefault.setText(fld.default)
|
||||
# Check with SQL query if a comment exists for the field
|
||||
sql_cpt = "Select count(*) from pg_description pd, pg_class pc, pg_attribute pa where relname = '%s' and attname = '%s' and pa.attrelid = pc.oid and pd.objoid = pc.oid and pd.objsubid = pa.attnum" % (self.table.name, self.editName.text())
|
||||
# Get the comment for the field with SQL Query
|
||||
sql = "Select pd.description from pg_description pd, pg_class pc, pg_attribute pa where relname = '%s' and attname = '%s' and pa.attrelid = pc.oid and pd.objoid = pc.oid and pd.objsubid = pa.attnum" % (self.table.name, self.editName.text())
|
||||
c = self.db.connector._execute(None, sql_cpt) # Execute check query
|
||||
res = self.db.connector._fetchone(c)[0] # Fetch data
|
||||
# Check if result is 1 then it's ok, else we don't want to get a value
|
||||
if res == 1:
|
||||
c = self.db.connector._execute(None, sql) # Execute query returning the comment value
|
||||
res = self.db.connector._fetchone(c)[0] # Fetch the comment value
|
||||
self.db.connector._close_cursor(c) # Close cursor
|
||||
self.editCom.setText(res) # Set comment value
|
||||
# This is an ugly patch, but the comments PR https://github.com/qgis/QGIS/pull/8831 added
|
||||
# support for postgres only and broke all the others :(
|
||||
try:
|
||||
# Check with SQL query if a comment exists for the field
|
||||
sql_cpt = "Select count(*) from pg_description pd, pg_class pc, pg_attribute pa where relname = '%s' and attname = '%s' and pa.attrelid = pc.oid and pd.objoid = pc.oid and pd.objsubid = pa.attnum" % (self.table.name, self.editName.text())
|
||||
# Get the comment for the field with SQL Query
|
||||
sql = "Select pd.description from pg_description pd, pg_class pc, pg_attribute pa where relname = '%s' and attname = '%s' and pa.attrelid = pc.oid and pd.objoid = pc.oid and pd.objsubid = pa.attnum" % (self.table.name, self.editName.text())
|
||||
c = self.db.connector._execute(None, sql_cpt) # Execute check query
|
||||
res = self.db.connector._fetchone(c)[0] # Fetch data
|
||||
# Check if result is 1 then it's ok, else we don't want to get a value
|
||||
if res == 1:
|
||||
c = self.db.connector._execute(None, sql) # Execute query returning the comment value
|
||||
res = self.db.connector._fetchone(c)[0] # Fetch the comment value
|
||||
self.db.connector._close_cursor(c) # Close cursor
|
||||
self.editCom.setText(res) # Set comment value
|
||||
except:
|
||||
self.editCom.setEnabled(False)
|
||||
|
||||
def getField(self, newCopy=False):
|
||||
fld = TableField(self.table) if not self.fld or newCopy else self.fld
|
||||
|
@ -29,7 +29,7 @@ from qgis.PyQt.QtWidgets import QDialog, QMessageBox, QApplication
|
||||
from qgis.utils import OverrideCursor
|
||||
|
||||
from .db_plugins.data_model import TableFieldsModel, TableConstraintsModel, TableIndexesModel
|
||||
from .db_plugins.plugin import BaseError
|
||||
from .db_plugins.plugin import BaseError, DbError
|
||||
from .dlg_db_error import DlgDbError
|
||||
|
||||
from .dlg_field_properties import DlgFieldProperties
|
||||
@ -333,25 +333,37 @@ class DlgTableProperties(QDialog, Ui_Dialog):
|
||||
DlgDbError.showError(e, self)
|
||||
|
||||
def createComment(self):
|
||||
#Function that add a comment to the selected table
|
||||
"""Adds a comment to the selected table"""
|
||||
|
||||
try:
|
||||
#Using the db connector, executing de SQL query Comment on table
|
||||
self.db.connector._execute(None, 'COMMENT ON TABLE "{0}"."{1}" IS E\'{2}\';'.format(self.table.schema().name, self.table.name, self.viewComment.text()))
|
||||
except DbError as e:
|
||||
DlgDbError.showError(e, self)
|
||||
return
|
||||
except Exception as e:
|
||||
# This is an ugly patch, but the comments PR https://github.com/qgis/QGIS/pull/8831 added
|
||||
# support for postgres only and broke all the others :(
|
||||
QMessageBox.information(self, self.tr("Add comment"), self.tr("Comments are not supported for this database."))
|
||||
return
|
||||
self.refresh()
|
||||
#Display successful message
|
||||
QMessageBox.information(self, self.tr("Add comment"), self.tr("Table successfully commented"))
|
||||
|
||||
def deleteComment(self):
|
||||
#Function that drop the comment to the selected table
|
||||
"""Drops the comment on the selected table"""
|
||||
|
||||
try:
|
||||
#Using the db connector, executing de SQL query Comment on table using the NULL definition
|
||||
self.db.connector._execute(None, 'COMMENT ON TABLE "{0}"."{1}" IS NULL;'.format(self.table.schema().name, self.table.name))
|
||||
except DbError as e:
|
||||
DlgDbError.showError(e, self)
|
||||
return
|
||||
except Exception as e:
|
||||
# This is an ugly patch, but the comments PR https://github.com/qgis/QGIS/pull/8831 added
|
||||
# support for postgres only and broke all the others :(
|
||||
QMessageBox.information(self, self.tr("Add comment"), self.tr("Comments are not supported for this database."))
|
||||
return
|
||||
self.refresh()
|
||||
#Refresh line edit, put a void comment
|
||||
self.viewComment.setText('')
|
||||
|
Loading…
x
Reference in New Issue
Block a user