Implemented test for method QgsMssqlProvider::defaultValue

This commit is contained in:
Damiano Lombardi 2020-09-14 15:59:56 +02:00
parent 53c0d4003b
commit 85b0590c6e
2 changed files with 47 additions and 25 deletions

View File

@ -478,44 +478,52 @@ QString QgsMssqlProvider::quotedIdentifier( const QString &value )
QString QgsMssqlProvider::defaultValueClause( int fieldId ) const
{
QString defVal = mDefaultValues.value( fieldId, QString() );
const QString defVal = mDefaultValues.value( fieldId, QString() );
if ( defVal.isEmpty() )
return QString();
// NOTE: If EvaluateDefaultValues is activated it is impossible to get the defaultValueClause.
// This also apply to QgsPostgresProvider::defaultValueClause.
if ( !providerProperty( EvaluateDefaultValues, false ).toBool() && !defVal.isEmpty() )
{
if ( !providerProperty( EvaluateDefaultValues, false ).toBool() )
return defVal;
}
return QString();
}
QVariant QgsMssqlProvider::defaultValue( int fieldId ) const
{
QString defVal = mDefaultValues.value( fieldId, QString() );
const QString defVal = mDefaultValues.value( fieldId, QString() );
if ( providerProperty( EvaluateDefaultValues, false ).toBool() && !defVal.isEmpty() )
if ( defVal.isEmpty() )
return QVariant();
if ( !providerProperty( EvaluateDefaultValues, false ).toBool() )
return QVariant();
QString sql = QStringLiteral( "select %1" )
.arg( defVal );
QSqlQuery query = createQuery();
query.setForwardOnly( true );
if ( !query.exec( sql ) )
{
QString sql = QStringLiteral( "select %1" )
.arg( defVal );
QSqlQuery query = createQuery();
query.setForwardOnly( true );
if ( !query.exec( sql ) )
{
QgsDebugMsg( query.lastError().text() );
pushError( tr( "Could not execute query" ) );
return QVariant();
}
if ( !query.next() )
return QVariant();
return query.value( 0 );
const QString errorMessage( tr( "Could not execute query: %1" ).arg( query.lastError().text() ) );
QgsDebugMsg( errorMessage );
pushError( errorMessage );
return QVariant();
}
return QVariant();
if ( !query.next() )
{
const QString errorMessage( tr( "Could not fetch next query value: %1" ).arg( query.lastError().text() ) );
QgsDebugMsg( errorMessage );
pushError( errorMessage );
return QVariant();
}
return query.value( 0 );
}
QString QgsMssqlProvider::storageType() const

View File

@ -26,7 +26,8 @@ from qgis.core import (QgsSettings,
QgsProviderRegistry,
NULL,
QgsVectorLayerExporter,
QgsCoordinateReferenceSystem)
QgsCoordinateReferenceSystem,
QgsDataProvider)
from qgis.PyQt.QtCore import QDate, QTime, QDateTime, QVariant
from utilities import unitTestDataPath
@ -514,6 +515,19 @@ class TestPyQgsMssqlProvider(unittest.TestCase, ProviderTestCase):
self.assertTrue(vl.isValid())
self.assertEqual(vl.dataProvider().extent().toString(1), 'Empty')
def testEvaluateDefaultValueClause(self):
vl = QgsVectorLayer(
'%s table="qgis_test"."someData" sql=' %
(self.dbconn), "testdatetimes", "mssql")
# Activate EvaluateDefaultValues
vl.dataProvider().setProviderProperty(QgsDataProvider.EvaluateDefaultValues, True)
name_index = vl.fields().lookupField('name')
defaultValue = vl.dataProvider().defaultValue(name_index)
self.assertEqual(defaultValue, 'qgis')
if __name__ == '__main__':
unittest.main()