diff --git a/src/providers/oracle/qgsoracleprovider.cpp b/src/providers/oracle/qgsoracleprovider.cpp index 18af214d8f24..5060bc969def 100644 --- a/src/providers/oracle/qgsoracleprovider.cpp +++ b/src/providers/oracle/qgsoracleprovider.cpp @@ -3093,8 +3093,8 @@ QgsVectorLayerExporter::ExportError QgsOracleProvider::createEmptyLayer( } } - if ( !exec( qry, QString( "INSERT INTO mdsys.user_sdo_geom_metadata(table_name,column_name,srid,diminfo) VALUES (?,?,?,?)" ), - QVariantList() << tableName.toUpper() << geometryColumn.toUpper() << srid << diminfo ) ) + if ( !exec( qry, QStringLiteral( "INSERT INTO mdsys.user_sdo_geom_metadata(table_name,column_name,srid,diminfo) VALUES (?,?,?,%1)" ).arg( diminfo ), + QVariantList() << tableName.toUpper() << geometryColumn.toUpper() << srid ) ) { throw OracleException( tr( "Could not insert metadata." ), qry ); } diff --git a/tests/src/python/test_provider_oracle.py b/tests/src/python/test_provider_oracle.py index 149059919b8c..d1f2447ae006 100644 --- a/tests/src/python/test_provider_oracle.py +++ b/tests/src/python/test_provider_oracle.py @@ -24,7 +24,10 @@ QgsFeature, QgsGeometry, QgsWkbTypes, - QgsDataProvider + QgsDataProvider, + QgsVectorLayerExporter, + QgsFields, + QgsCoordinateReferenceSystem ) from qgis.PyQt.QtCore import QDate, QTime, QDateTime, QVariant @@ -819,6 +822,21 @@ def testEvaluateDefaultValues(self): attributes = [feat.attributes() for feat in vl.getFeatures()] self.assertEqual(attributes, [[1, 'qgis'], [2, 'test'], [3, 'qgis'], [4, 'test']]) + def testCreateEmptyLayer(self): + uri = self.dbconn + "srid=4326 type=POINT table=\"EMPTY_LAYER\" (GEOM)" + exporter = QgsVectorLayerExporter(uri=uri, provider='oracle', fields=QgsFields(), geometryType=QgsWkbTypes.Point, crs=QgsCoordinateReferenceSystem(4326), overwrite=True) + self.assertEqual(exporter.errorCount(), 0) + self.assertEqual(exporter.errorCode(), 0) + # check IF there is an empty table (will throw error if the EMPTY_LAYER table does not excist) + self.execSQLCommand('SELECT count(*) FROM "QGIS"."EMPTY_LAYER"') + vl = QgsVectorLayer( + self.dbconn + ' sslmode=disable table="QGIS"."EMPTY_LAYER" sql=', + 'test', 'oracle') + self.assertTrue(vl.isValid()) + # cleanup + self.execSQLCommand('DROP TABLE "QGIS"."EMPTY_LAYER"') + self.execSQLCommand("DELETE FROM user_sdo_geom_metadata where TABLE_NAME='EMPTY_LAYER'") + if __name__ == '__main__': unittest.main()