Skip to content

Commit cdaec4a

Browse files
authoredJun 17, 2019
Merge pull request #30183 from m-kuhn/backport-30173-to-release-3_4
[dbmanager] allow to import GEOMETRY tables
2 parents 271deff + 7caa167 commit cdaec4a

File tree

1 file changed

+35
-3
lines changed
  • python/plugins/db_manager/db_plugins

1 file changed

+35
-3
lines changed
 

‎python/plugins/db_manager/db_plugins/plugin.py

Lines changed: 35 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,12 @@
2727
from qgis.PyQt.QtGui import QKeySequence, QIcon
2828

2929
from qgis.gui import QgsMessageBar
30-
from qgis.core import Qgis, QgsApplication, QgsSettings
30+
from qgis.core import (
31+
Qgis,
32+
QgsApplication,
33+
QgsSettings,
34+
QgsWkbTypes
35+
)
3136
from ..db_plugins import createDbPlugin
3237

3338

@@ -517,8 +522,28 @@ def rasterTablesFactory(self, row, db, schema=None):
517522
def tables(self, schema=None, sys_tables=False):
518523
tables = self.connector.getTables(schema.name if schema else None, sys_tables)
519524
if tables is not None:
520-
tables = [self.tablesFactory(x, self, schema) for x in tables]
521-
return tables
525+
ret = []
526+
for t in tables:
527+
table = self.tablesFactory(t, self, schema)
528+
ret.append(table)
529+
530+
# Similarly to what to browser does, if the geom type is generic geometry,
531+
# we additionnly add three copies of the layer to allow importing
532+
if isinstance(table, VectorTable):
533+
if table.geomType == 'GEOMETRY':
534+
point_table = self.tablesFactory(t, self, schema)
535+
point_table.geomType = 'POINT'
536+
ret.append(point_table)
537+
538+
line_table = self.tablesFactory(t, self, schema)
539+
line_table.geomType = 'LINESTRING'
540+
ret.append(line_table)
541+
542+
poly_table = self.tablesFactory(t, self, schema)
543+
poly_table.geomType = 'POLYGON'
544+
ret.append(poly_table)
545+
546+
return ret
522547

523548
def createTable(self, table, fields, schema=None):
524549
field_defs = [x.definition() for x in fields]
@@ -683,6 +708,13 @@ def uri(self):
683708
geomCol = self.geomColumn if self.type in [Table.VectorType, Table.RasterType] else ""
684709
uniqueCol = self.getValidQgisUniqueFields(True) if self.isView else None
685710
uri.setDataSource(schema, self.name, geomCol if geomCol else None, None, uniqueCol.name if uniqueCol else "")
711+
uri.setSrid(str(self.srid))
712+
for f in self.fields():
713+
if f.primaryKey:
714+
uri.setKeyColumn(f.name)
715+
break
716+
uri.setWkbType(QgsWkbTypes.parseType(self.geomType))
717+
686718
return uri
687719

688720
def mimeUri(self):

0 commit comments

Comments
 (0)
Please sign in to comment.