Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
More tests for execSql
  • Loading branch information
elpaso committed Jul 6, 2021
1 parent 2c123dc commit 5d5e828
Show file tree
Hide file tree
Showing 5 changed files with 56 additions and 16 deletions.
10 changes: 9 additions & 1 deletion src/providers/mssql/qgsmssqlproviderconnection.cpp
Expand Up @@ -271,7 +271,6 @@ QgsAbstractDatabaseProviderConnection::QueryResult QgsMssqlProviderConnection::e
{
results.appendColumn( rec.field( idx ).name() );
}
iterator->nextRow();
return results;
}

Expand All @@ -280,6 +279,15 @@ QgsAbstractDatabaseProviderConnection::QueryResult QgsMssqlProviderConnection::e
}


QgssMssqlProviderResultIterator::QgssMssqlProviderResultIterator( bool resolveTypes, int columnCount, const QSqlQuery &query )
: mResolveTypes( resolveTypes )
, mColumnCount( columnCount )
, mQuery( query )
{
// Load first row
nextRow();
}

QVariantList QgssMssqlProviderResultIterator::nextRowPrivate()
{
const QVariantList currentRow = mNextRow;
Expand Down
6 changes: 1 addition & 5 deletions src/providers/mssql/qgsmssqlproviderconnection.h
Expand Up @@ -25,11 +25,7 @@
struct QgssMssqlProviderResultIterator: public QgsAbstractDatabaseProviderConnection::QueryResult::QueryResultIterator
{

QgssMssqlProviderResultIterator( bool resolveTypes, int columnCount, const QSqlQuery &query )
: mResolveTypes( resolveTypes )
, mColumnCount( columnCount )
, mQuery( query )
{}
QgssMssqlProviderResultIterator( bool resolveTypes, int columnCount, const QSqlQuery &query );

private:

Expand Down
2 changes: 1 addition & 1 deletion src/providers/oracle/qgsoracleproviderconnection.cpp
Expand Up @@ -113,7 +113,7 @@ void QgsOracleProviderConnection::setDefaultCapabilities()
Capability::DeleteSpatialIndex,
Capability::DeleteField,
Capability::DeleteFieldCascade,
Capability::AddField
Capability::AddField,
};
mGeometryColumnCapabilities =
{
Expand Down
17 changes: 17 additions & 0 deletions tests/src/python/test_qgsproviderconnection_mssql.py
Expand Up @@ -19,6 +19,7 @@
QgsVectorLayer,
QgsProviderRegistry,
QgsDataSourceUri,
QgsAbstractDatabaseProviderConnection,
)
from qgis.testing import unittest

Expand Down Expand Up @@ -126,6 +127,22 @@ def test_schemas_filtering(self):
self.assertEqual(len(schemas), 1)
self.assertEqual(schemas, ['qgis_test'])

def test_exec_sql(self):

md = QgsProviderRegistry.instance().providerMetadata('mssql')
conn = md.createConnection(self.uri, {})

results = conn.executeSql('select * from qgis_test.some_poly_data')

rows = []
results2 = conn.execSql('select * from qgis_test.some_poly_data')

while results2.hasNextRow():
rows.append(results2.nextRow())

self.assertEqual(len(rows), 4)
self.assertEqual(rows, results)


if __name__ == '__main__':
unittest.main()
37 changes: 28 additions & 9 deletions tests/src/python/test_qgsproviderconnection_oracle.py
Expand Up @@ -19,7 +19,9 @@
QgsVectorLayer,
QgsProviderRegistry,
QgsDataSourceUri,
QgsAbstractDatabaseProviderConnection
QgsAbstractDatabaseProviderConnection,
QgsProviderConnectionException,

)
from qgis.testing import unittest
from qgis.PyQt.QtSql import QSqlDatabase, QSqlQuery
Expand All @@ -44,6 +46,14 @@ class TestPyQgsProviderConnectionOracle(unittest.TestCase, TestPyQgsProviderConn
myUtf8Table = 'MYUTF8\U0001F604TABLE'
geometryColumnName = 'GEOM'

def execSQLCommand(self, sql, ignore_errors=False):
self.assertTrue(self.conn)
query = QSqlQuery(self.conn)
res = query.exec_(sql)
if not ignore_errors:
self.assertTrue(res, sql + ': ' + query.lastError().text())
query.finish()

@classmethod
def setUpClass(cls):
"""Run before all tests"""
Expand All @@ -63,15 +73,24 @@ def setUpClass(cls):
cls.conn.setDatabaseName(os.environ['QGIS_ORACLETEST_DBNAME'])
cls.conn.setUserName('QGIS')
cls.conn.setPassword('qgis')
assert cls.conn.open()

def execSQLCommand(self, sql, ignore_errors=False):
self.assertTrue(self.conn)
query = QSqlQuery(self.conn)
res = query.exec_(sql)
if not ignore_errors:
self.assertTrue(res, sql + ': ' + query.lastError().text())
query.finish()
# Start clean
md = QgsProviderRegistry.instance().providerMetadata('oracle')
conn = md.createConnection(cls.dbconn, {})

for table_name in (cls.myNewTable, cls.myVeryNewTable):

try:
conn.dropVectorTable('QGIS', table_name)
except QgsProviderConnectionException:
pass

try:
conn.executeSql(f"DELETE FROM user_sdo_geom_metadata WHERE TABLE_NAME = '{table_name}'")
except QgsProviderConnectionException:
pass

assert cls.conn.open()

def test_tables_with_options(self):

Expand Down

0 comments on commit 5d5e828

Please sign in to comment.