mirror of
https://github.com/qgis/QGIS.git
synced 2025-04-15 00:04:00 -04:00
DBManager: use the first suitable field loading a view (fix #5676)
This commit is contained in:
parent
2921588099
commit
53b57d1441
@ -27,7 +27,7 @@ def description():
|
|||||||
return "Manage your databases within QGis"
|
return "Manage your databases within QGis"
|
||||||
|
|
||||||
def version():
|
def version():
|
||||||
return "0.1.19"
|
return "0.1.20"
|
||||||
|
|
||||||
def qgisMinimumVersion():
|
def qgisMinimumVersion():
|
||||||
return "1.5.0"
|
return "1.5.0"
|
||||||
|
@ -549,7 +549,8 @@ class Table(DbItemObject):
|
|||||||
uri = self.database().uri()
|
uri = self.database().uri()
|
||||||
schema = self.schemaName() if self.schemaName() else ''
|
schema = self.schemaName() if self.schemaName() else ''
|
||||||
geomCol = self.geomColumn if self.type in [Table.VectorType, Table.RasterType] else QString()
|
geomCol = self.geomColumn if self.type in [Table.VectorType, Table.RasterType] else QString()
|
||||||
uri.setDataSource(schema, self.name, geomCol if geomCol else QString())
|
uniqueCol = self.getValidQGisUniqueFields(True) if self.isView else None
|
||||||
|
uri.setDataSource(schema, self.name, geomCol if geomCol else QString(), QString(), uniqueCol.name if uniqueCol else QString() )
|
||||||
return uri
|
return uri
|
||||||
|
|
||||||
def mimeUri(self):
|
def mimeUri(self):
|
||||||
@ -567,7 +568,7 @@ class Table(DbItemObject):
|
|||||||
def getValidQGisUniqueFields(self, onlyOne=False):
|
def getValidQGisUniqueFields(self, onlyOne=False):
|
||||||
""" list of fields valid to load the table as layer in QGis canvas.
|
""" list of fields valid to load the table as layer in QGis canvas.
|
||||||
QGis automatically search for a valid unique field, so it's
|
QGis automatically search for a valid unique field, so it's
|
||||||
needed only for queries (e.g. SELECT * FROM table LIMIT 1)"""
|
needed only for queries and views """
|
||||||
|
|
||||||
ret = []
|
ret = []
|
||||||
|
|
||||||
@ -575,15 +576,20 @@ class Table(DbItemObject):
|
|||||||
pkcols = filter(lambda x: x.primaryKey, self.fields())
|
pkcols = filter(lambda x: x.primaryKey, self.fields())
|
||||||
if len(pkcols) == 1: ret.append( pkcols[0] )
|
if len(pkcols) == 1: ret.append( pkcols[0] )
|
||||||
|
|
||||||
# add both serial and int4 fields with an unique index
|
# then add both oid, serial and int fields with an unique index
|
||||||
indexes = self.indexes()
|
indexes = self.indexes()
|
||||||
if indexes != None:
|
if indexes != None:
|
||||||
for idx in indexes:
|
for idx in indexes:
|
||||||
if idx.isUnique and len(idx.columns) == 1:
|
if idx.isUnique and len(idx.columns) == 1:
|
||||||
fld = idx.fields()[ idx.columns[0] ]
|
fld = idx.fields()[ idx.columns[0] ]
|
||||||
if fld and fld not in ret and fld.dataType in ["oid", "serial", "int4"]:
|
if fld.dataType in ["oid", "serial", "int4", "int8"] and fld not in ret:
|
||||||
ret.append( fld )
|
ret.append( fld )
|
||||||
|
|
||||||
|
# and finally append the other suitable fields
|
||||||
|
for fld in self.fields():
|
||||||
|
if fld.dataType in ["oid", "serial", "int4", "int8"] and fld not in ret:
|
||||||
|
ret.append( fld )
|
||||||
|
|
||||||
if onlyOne:
|
if onlyOne:
|
||||||
return ret[0] if len(ret) > 0 else None
|
return ret[0] if len(ret) > 0 else None
|
||||||
return ret
|
return ret
|
||||||
|
Loading…
x
Reference in New Issue
Block a user