def getUniqueSchemaName(self, name): return 'qgis_test_' + QgsHanaProviderUtils.generateSchemaName( self.conn, name)
def createVectorLayer(self, conn_parameters, layer_name): return QgsHanaProviderUtils.createVectorLayer( self.uri + ' ' + conn_parameters, layer_name)
def tearDownClass(cls): """Run after all tests""" QgsHanaProviderUtils.cleanUp(cls.conn, cls.schemaName) cls.conn.close()
def testTableUri(self): """Create a connection from a layer uri and create a table URI""" md = self.createProviderMetadata() conn = md.createConnection(self.uri, {}) vl = QgsHanaProviderUtils.createVectorLayer(conn.tableUri(self.schemaName, 'some_data'), 'test')
def createVectorLayer(self, conn_parameters, layer_name): layer = QgsHanaProviderUtils.createVectorLayer(self.uri + ' ' + conn_parameters, layer_name) self.assertTrue(layer.isValid()) return layer
def is_crs_installed(srid): num_crs = QgsHanaProviderUtils.executeSQLFetchOne(self.conn, f'SELECT COUNT(*) FROM SYS.ST_SPATIAL_REFERENCE_SYSTEMS ' f'WHERE SRS_ID = {srid}') return num_crs == 1
def testCreateLayerViaExport(self): def runTest(crs, primaryKey, attributeNames, attributeValues): self.assertTrue(crs.isValid()) layer = QgsVectorLayer(f"Point?crs={crs.authid()}", "new_table", "memory") pr = layer.dataProvider() fields = [QgsField("fldid", QVariant.LongLong), QgsField("fldtxt", QVariant.String), QgsField("fldint", QVariant.Int)] if primaryKey == "fldid": constraints = QgsFieldConstraints() constraints.setConstraint(QgsFieldConstraints.ConstraintNotNull, QgsFieldConstraints.ConstraintOriginProvider) constraints.setConstraint(QgsFieldConstraints.ConstraintUnique, QgsFieldConstraints.ConstraintOriginProvider) fields[0].setConstraints(constraints) layer.startEditing() for f in fields: layer.addAttribute(f) layer.commitChanges(True) f1 = QgsFeature() f1.setAttributes([1, "test", 11]) f1.setGeometry(QgsGeometry.fromPointXY(QgsPointXY(1, 2))) f2 = QgsFeature() f2.setAttributes([2, "test2", 13]) f3 = QgsFeature() f3.setAttributes([3, "test2", NULL]) f3.setGeometry(QgsGeometry.fromPointXY(QgsPointXY(3, 2))) f4 = QgsFeature() f4.setAttributes([4, NULL, 13]) f4.setGeometry(QgsGeometry.fromPointXY(QgsPointXY(4, 3))) pr.addFeatures([f1, f2, f3, f4]) layer.commitChanges() QgsHanaProviderUtils.dropTableIfExists(self.conn, self.schemaName, 'import_data') uri = self.uri + f' key=\'{primaryKey}\' table="{self.schemaName}"."import_data" (geom) sql=' error, message = QgsVectorLayerExporter.exportLayer(layer, uri, 'hana', crs) self.assertEqual(error, QgsVectorLayerExporter.NoError) import_layer = self.createVectorLayer( f'key=\'{primaryKey}\' table="{self.schemaName}"."import_data" (geom) sql=', 'testimportedlayer') self.assertEqual(import_layer.wkbType(), QgsWkbTypes.Point) self.assertEqual([f.name() for f in import_layer.fields()], attributeNames) features = [f.attributes() for f in import_layer.getFeatures()] self.assertEqual(features, attributeValues) geom = [f.geometry().asWkt() for f in import_layer.getFeatures()] self.assertEqual(geom, ['Point (1 2)', '', 'Point (3 2)', 'Point (4 3)']) QgsHanaProviderUtils.dropTableIfExists(self.conn, self.schemaName, 'import_data') def is_crs_installed(srid): num_crs = QgsHanaProviderUtils.executeSQLFetchOne(self.conn, f'SELECT COUNT(*) FROM SYS.ST_SPATIAL_REFERENCE_SYSTEMS ' f'WHERE SRS_ID = {srid}') return num_crs == 1 crs_4326 = QgsCoordinateReferenceSystem('EPSG:4326') # primary key already exists in the imported layer runTest(crs_4326, 'fldid', ['fldid', 'fldtxt', 'fldint'], [[1, 'test', 11], [2, 'test2', 13], [3, 'test2', NULL], [4, NULL, 13]]) # primary key doesn't exist in the imported layer runTest(crs_4326, 'pk', ['pk', 'fldid', 'fldtxt', 'fldint'], [[1, 1, 'test', 11], [2, 2, 'test2', 13], [3, 3, 'test2', NULL], [4, 4, NULL, 13]]) # crs id that do not exist # unfortunately, we cannot test new units of measure as # QgsCoordinateReferenceSystem does not allow creating # a new crs object from WKT that contain custom AUTHORITY # or UNIT values. unknown_srid = 3395 if not is_crs_installed(unknown_srid): crs = QgsCoordinateReferenceSystem.fromEpsgId(unknown_srid) runTest(crs, 'fldid', ['fldid', 'fldtxt', 'fldint'], [[1, 'test', 11], [2, 'test2', 13], [3, 'test2', NULL], [4, NULL, 13]]) self.assertTrue(is_crs_installed(unknown_srid)) QgsHanaProviderUtils.executeSQL(self.conn, f'DROP SPATIAL REFERENCE SYSTEM "{crs.description()}"')