Skip to content

Commit b2a13cf

Browse files
author
g_j_m
committed
Cope with postgres schema and table names that contain . characters.
git-svn-id: http://svn.osgeo.org/qgis/trunk@6152 c8812cc2-4d05-0410-92ff-de0c093fc19c
1 parent f3861ad commit b2a13cf

File tree

3 files changed

+22
-13
lines changed

3 files changed

+22
-13
lines changed

src/gui/qgsdbsourceselect.cpp

+6-4
Original file line numberDiff line numberDiff line change
@@ -561,12 +561,14 @@ bool QgsDbSourceSelect::getGeometryColumnInfo(PGconn *pg,
561561

562562
if (schemaName.length() > 0)
563563
{
564+
v += '"';
564565
v += schemaName;
565-
v += ".";
566+
v += "\".";
566567
}
567568

569+
v += '"';
568570
v += tableName;
569-
v += " (";
571+
v += "\" (";
570572
v += PQgetvalue(result, idx, PQfnumber(result, "f_geometry_column"));
571573
v += ")";
572574

@@ -665,8 +667,8 @@ QString QgsDbSourceSelect::fullDescription(QString schema, QString table,
665667
{
666668
QString full_desc = "";
667669
if (schema.length() > 0)
668-
full_desc = schema + ".";
669-
full_desc += table + " (" + column + ")";
670+
full_desc = '"' + schema + "\".\"";
671+
full_desc += table + "\" (" + column + ")";
670672
return full_desc;
671673
}
672674
void QgsDbSourceSelect::dbChanged()

src/gui/qgsvectorlayer.cpp

+6-3
Original file line numberDiff line numberDiff line change
@@ -2267,9 +2267,12 @@ bool QgsVectorLayer::setDataProvider( QString const & provider )
22672267
{
22682268
QgsDebugMsg("Beautifying layer name " + name());
22692269
// adjust the display name for postgres layers
2270-
QString lName(name());
2271-
lName = lName.mid(lName.find(".") + 1);
2272-
lName = lName.left(lName.find("(") - 1); // Take one away, to avoid a trailing space
2270+
QRegExp reg("\".+\"\.\"(.+)\"");
2271+
reg.indexIn(name());
2272+
QStringList stuff = reg.capturedTexts();
2273+
QString lName = stuff[1];
2274+
if (lName.length() == 0) // fallback
2275+
lName = name();
22732276
setLayerName(lName);
22742277
QgsDebugMsg("Beautifying layer name " + name());
22752278
}

src/providers/postgres/qgspostgresprovider.cpp

+10-6
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727
#include <QEvent>
2828
#include <QCustomEvent>
2929
#include <QTextOStream>
30+
#include <QRegExp>
3031

3132
// for ntohl
3233
#ifdef WIN32
@@ -104,14 +105,17 @@ QgsPostgresProvider::QgsPostgresProvider(QString const & uri)
104105
qDebug( (const char*)(QString("SQL is ") + sqlWhereClause).toLocal8Bit().data() );
105106
qDebug( "Connection info is " + connInfo);
106107
#endif
107-
// calculate the schema if specified
108-
mSchemaName = "";
109-
if (mTableName.find(".") > -1) {
110-
mSchemaName = mTableName.left(mTableName.find("."));
111-
}
108+
109+
// Pick up some stuff from the uri: basically two bits of text
110+
// inside double quote marks, separated by a .
111+
QRegExp reg("\"(.+)\"\.\"(.+)\"");
112+
reg.indexIn(mTableName);
113+
QStringList stuff = reg.capturedTexts();
114+
115+
mSchemaName = stuff[1];
116+
mTableName = stuff[2];
112117
geometryColumn = mTableName.mid(mTableName.find(" (") + 2);
113118
geometryColumn.truncate(geometryColumn.length() - 1);
114-
mTableName = mTableName.mid(mTableName.find(".") + 1, mTableName.find(" (") - (mTableName.find(".") + 1));
115119

116120
// Keep a schema qualified table name for convenience later on.
117121
if (mSchemaName.length() > 0)

0 commit comments

Comments
 (0)