@@ -227,6 +227,9 @@ QgsPostgresProvider::QgsPostgresProvider( QString const &uri )
227
227
<< QgsVectorDataProvider::NativeType ( tr ( " Array of number (integer - 64bit)" ), QStringLiteral ( " int8[]" ), QVariant::List, -1 , -1 , -1 , -1 , QVariant::LongLong )
228
228
<< QgsVectorDataProvider::NativeType ( tr ( " Array of number (double)" ), QStringLiteral ( " double precision[]" ), QVariant::List, -1 , -1 , -1 , -1 , QVariant::Double )
229
229
<< QgsVectorDataProvider::NativeType ( tr ( " Array of text" ), QStringLiteral ( " text[]" ), QVariant::StringList, -1 , -1 , -1 , -1 , QVariant::String )
230
+
231
+ // boolean
232
+ << QgsVectorDataProvider::NativeType ( tr ( " Boolean" ), QStringLiteral ( " bool" ), QVariant::Bool, -1 , -1 , -1 , -1 )
230
233
);
231
234
232
235
QString key;
@@ -898,7 +901,6 @@ bool QgsPostgresProvider::loadFields()
898
901
fieldSize = -1 ;
899
902
}
900
903
else if ( fieldTypeName == QLatin1String ( " text" ) ||
901
- fieldTypeName == QLatin1String ( " bool" ) ||
902
904
fieldTypeName == QLatin1String ( " geometry" ) ||
903
905
fieldTypeName == QLatin1String ( " inet" ) ||
904
906
fieldTypeName == QLatin1String ( " money" ) ||
@@ -956,6 +958,12 @@ bool QgsPostgresProvider::loadFields()
956
958
fieldSubType = QVariant::String;
957
959
fieldSize = -1 ;
958
960
}
961
+ else if ( fieldTypeName == QLatin1String ( " bool" ) )
962
+ {
963
+ // enum
964
+ fieldType = QVariant::Bool;
965
+ fieldSize = -1 ;
966
+ }
959
967
else
960
968
{
961
969
QgsMessageLog::logMessage ( tr ( " Field %1 ignored, because of unsupported type %2" ).arg ( fieldName, fieldTypeName ), tr ( " PostGIS" ) );
@@ -3615,6 +3623,12 @@ bool QgsPostgresProvider::convertField( QgsField &field, const QMap<QString, QVa
3615
3623
fieldPrec = -1 ;
3616
3624
break ;
3617
3625
3626
+ case QVariant::Bool:
3627
+ fieldType = QStringLiteral ( " bool" );
3628
+ fieldPrec = -1 ;
3629
+ fieldSize = -1 ;
3630
+ break ;
3631
+
3618
3632
default :
3619
3633
return false ;
3620
3634
}
@@ -4106,20 +4120,32 @@ static QVariant parseArray( const QString &txt, QVariant::Type type, QVariant::T
4106
4120
4107
4121
QVariant QgsPostgresProvider::convertValue ( QVariant::Type type, QVariant::Type subType, const QString &value )
4108
4122
{
4123
+ QVariant result;
4109
4124
switch ( type )
4110
4125
{
4111
4126
case QVariant::Map:
4112
- return parseHstore ( value );
4127
+ result = parseHstore ( value );
4128
+ break ;
4113
4129
case QVariant::StringList:
4114
4130
case QVariant::List:
4115
- return parseArray ( value, type, subType );
4131
+ result = parseArray ( value, type, subType );
4132
+ break ;
4133
+ case QVariant::Bool:
4134
+ if ( value == QChar ( ' t' ) )
4135
+ result = true ;
4136
+ else if ( value == QChar ( ' f' ) )
4137
+ result = false ;
4138
+ else
4139
+ result = QVariant ( type );
4140
+ break ;
4116
4141
default :
4117
- {
4118
- QVariant v ( value );
4119
- if ( !v.convert ( type ) || value.isNull () ) return QVariant ( type );
4120
- return v;
4121
- }
4142
+ result = value;
4143
+ if ( !result.convert ( type ) || value.isNull () )
4144
+ result = QVariant ( type );
4145
+ break ;
4122
4146
}
4147
+
4148
+ return result;
4123
4149
}
4124
4150
4125
4151
QList<QgsVectorLayer *> QgsPostgresProvider::searchLayers ( const QList<QgsVectorLayer *> &layers, const QString &connectionInfo, const QString &schema, const QString &tableName )
1 commit comments
3nids commentedon Sep 4, 2017
@m-kuhn I think this break porting projects having expressions with
"my_bool" = 't'
. In my project, this breaks layer symbology. Is there any mean to have some project translation for this or is it too tricky?