Skip to content

Commit 221ba9c

Browse files
author
Hugo Mercier
committed
[spatialite] Fix geometry column name case sensitivity
1 parent 12a4e7d commit 221ba9c

File tree

2 files changed

+25
-4
lines changed

2 files changed

+25
-4
lines changed

src/providers/spatialite/qgsspatialiteprovider.cpp

+4-4
Original file line numberDiff line numberDiff line change
@@ -425,7 +425,7 @@ QgsSpatiaLiteProvider::QgsSpatiaLiteProvider( QString const &uri )
425425

426426
// parsing members from the uri structure
427427
mTableName = anUri.table();
428-
mGeometryColumn = anUri.geometryColumn();
428+
mGeometryColumn = anUri.geometryColumn().toLower();
429429
mSqlitePath = anUri.database();
430430
mSubsetString = anUri.sql();
431431
mPrimaryKey = anUri.keyColumn();
@@ -612,7 +612,7 @@ void QgsSpatiaLiteProvider::loadFieldsAbstractInterface( gaiaVectorLayerPtr lyr
612612
while ( fld )
613613
{
614614
QString name = QString::fromUtf8( fld->AttributeFieldName );
615-
if ( name != mGeometryColumn )
615+
if ( name.toLower() != mGeometryColumn )
616616
{
617617
const char *type = "TEXT";
618618
QVariant::Type fieldType = QVariant::String; // default: SQLITE_TEXT
@@ -746,7 +746,7 @@ void QgsSpatiaLiteProvider::loadFields()
746746
QgsDebugMsg( "found primaryKey " + name );
747747
}
748748

749-
if ( name != mGeometryColumn )
749+
if ( name.toLower() != mGeometryColumn )
750750
{
751751
// for sure any SQLite value can be represented as SQLITE_TEXT
752752
QVariant::Type fieldType = QVariant::String;
@@ -813,7 +813,7 @@ void QgsSpatiaLiteProvider::loadFields()
813813
QgsDebugMsg( "found primaryKey " + name );
814814
}
815815

816-
if ( name != mGeometryColumn )
816+
if ( name.toLower() != mGeometryColumn )
817817
{
818818
// for sure any SQLite value can be represented as SQLITE_TEXT
819819
QVariant::Type fieldType = QVariant::String;

tests/src/python/test_qgsspatialiteprovider.py

+21
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,18 @@ def setUpClass(cls):
8282
sql += "VALUES (2, 'toto', GeomFromText('POLYGON((0 0,1 0,1 1,0 1,0 0))', 4326))"
8383
cur.execute(sql)
8484

85+
# simple table with a geometry column named 'Geometry'
86+
sql = "CREATE TABLE test_n (Id INTEGER NOT NULL PRIMARY KEY, name TEXT NOT NULL)"
87+
cur.execute(sql)
88+
sql = "SELECT AddGeometryColumn('test_n', 'Geometry', 4326, 'POLYGON', 'XY')"
89+
cur.execute(sql)
90+
sql = "INSERT INTO test_n (id, name, geometry) "
91+
sql += "VALUES (1, 'toto', GeomFromText('POLYGON((0 0,1 0,1 1,0 1,0 0))', 4326))"
92+
cur.execute(sql)
93+
sql = "INSERT INTO test_n (id, name, geometry) "
94+
sql += "VALUES (2, 'toto', GeomFromText('POLYGON((0 0,1 0,1 1,0 1,0 0))', 4326))"
95+
cur.execute(sql)
96+
8597
cur.execute( "COMMIT" )
8698
con.close()
8799

@@ -165,5 +177,14 @@ def test_queries(self):
165177
assert(sum_id1 == 3)
166178
assert(sum_id2 == 3)
167179

180+
def test_case(self):
181+
"""Test case sensitivity issues"""
182+
l = QgsVectorLayer("dbname=%s table='test_n' (geometry) key='id'" % self.dbname, "test_n1", "spatialite")
183+
assert(l.isValid())
184+
assert(l.dataProvider().fields().count() == 2)
185+
fields = [f.name() for f in l.dataProvider().fields()]
186+
assert('Geometry' not in fields)
187+
188+
168189
if __name__ == '__main__':
169190
unittest.main()

0 commit comments

Comments
 (0)