@@ -107,6 +107,14 @@ bool QgsOgrProvider::convertField( QgsField &field, const QTextCodec &encoding )
107
107
ogrType = OFTReal;
108
108
break ;
109
109
110
+ case QVariant::Date:
111
+ ogrType = OFTDate;
112
+ break ;
113
+
114
+ case QVariant::DateTime:
115
+ ogrType = OFTDateTime;
116
+ break ;
117
+
110
118
default :
111
119
return false ;
112
120
}
@@ -336,11 +344,12 @@ QgsOgrProvider::QgsOgrProvider( QString const & uri )
336
344
QgsMessageLog::logMessage ( tr ( " Data source is invalid (%1)" ).arg ( QString::fromUtf8 ( CPLGetLastErrorMsg () ) ), tr ( " OGR" ) );
337
345
}
338
346
339
- // FIXME: sync with app/qgsnewvectorlayerdialog.cpp
340
347
mNativeTypes
341
348
<< QgsVectorDataProvider::NativeType ( tr ( " Whole number (integer)" ), " integer" , QVariant::Int, 1 , 10 )
342
349
<< QgsVectorDataProvider::NativeType ( tr ( " Decimal number (real)" ), " double" , QVariant::Double, 1 , 20 , 0 , 15 )
343
350
<< QgsVectorDataProvider::NativeType ( tr ( " Text (string)" ), " string" , QVariant::String, 1 , 255 )
351
+ << QgsVectorDataProvider::NativeType ( tr ( " Date" ), " date" , QVariant::Date )
352
+ << QgsVectorDataProvider::NativeType ( tr ( " Date & Time" ), " datetime" , QVariant::DateTime )
344
353
;
345
354
}
346
355
@@ -557,10 +566,10 @@ void QgsOgrProvider::loadFields()
557
566
{
558
567
case OFTInteger: varType = QVariant::Int; break ;
559
568
case OFTReal: varType = QVariant::Double; break ;
560
- // unsupported in OGR 1.3
561
- // case OFTDateTime: varType = QVariant::DateTime; break;
562
569
#if defined(GDAL_VERSION_NUM) && GDAL_VERSION_NUM >= 1400
563
- case OFTString: varType = QVariant::String; break ;
570
+ case OFTDate: varType = QVariant::Date; break ;
571
+ case OFTDateTime: varType = QVariant::DateTime; break ;
572
+ case OFTString:
564
573
#endif
565
574
default : varType = QVariant::String; // other unsupported, leave it as a string
566
575
}
@@ -800,6 +809,25 @@ bool QgsOgrProvider::addFeature( QgsFeature& f )
800
809
OGR_F_SetFieldDouble ( feature, targetAttributeId, attrVal.toDouble () );
801
810
break ;
802
811
812
+ case OFTDate:
813
+ OGR_F_SetFieldDateTime ( feature, targetAttributeId,
814
+ attrVal.toDate ().year (),
815
+ attrVal.toDate ().month (),
816
+ attrVal.toDate ().day (),
817
+ 0 , 0 , 0 ,
818
+ 0 );
819
+ break ;
820
+ case OFTDateTime:
821
+ OGR_F_SetFieldDateTime ( feature, targetAttributeId,
822
+ attrVal.toDateTime ().date ().year (),
823
+ attrVal.toDateTime ().date ().month (),
824
+ attrVal.toDateTime ().date ().day (),
825
+ attrVal.toDateTime ().time ().hour (),
826
+ attrVal.toDateTime ().time ().minute (),
827
+ attrVal.toDateTime ().time ().second (),
828
+ 0 );
829
+ break ;
830
+
803
831
case OFTString:
804
832
QgsDebugMsg ( QString ( " Writing string attribute %1 with %2, encoding %3" )
805
833
.arg ( targetAttributeId )
@@ -870,6 +898,12 @@ bool QgsOgrProvider::addAttributes( const QList<QgsField> &attributes )
870
898
case QVariant::Double:
871
899
type = OFTReal;
872
900
break ;
901
+ case QVariant::Date:
902
+ type = OFTDate;
903
+ break ;
904
+ case QVariant::DateTime:
905
+ type = OFTDateTime;
906
+ break ;
873
907
case QVariant::String:
874
908
type = OFTString;
875
909
break ;
@@ -976,6 +1010,24 @@ bool QgsOgrProvider::changeAttributeValues( const QgsChangedAttributesMap & attr
976
1010
case OFTReal:
977
1011
OGR_F_SetFieldDouble ( of, f, it2->toDouble () );
978
1012
break ;
1013
+ case OFTDate:
1014
+ OGR_F_SetFieldDateTime ( of, f,
1015
+ it2->toDate ().year (),
1016
+ it2->toDate ().month (),
1017
+ it2->toDate ().day (),
1018
+ 0 , 0 , 0 ,
1019
+ 0 );
1020
+ break ;
1021
+ case OFTDateTime:
1022
+ OGR_F_SetFieldDateTime ( of, f,
1023
+ it2->toDateTime ().date ().year (),
1024
+ it2->toDateTime ().date ().month (),
1025
+ it2->toDateTime ().date ().day (),
1026
+ it2->toDateTime ().time ().hour (),
1027
+ it2->toDateTime ().time ().minute (),
1028
+ it2->toDateTime ().time ().second (),
1029
+ 0 );
1030
+ break ;
979
1031
case OFTString:
980
1032
OGR_F_SetFieldString ( of, f, mEncoding ->fromUnicode ( it2->toString () ).constData () );
981
1033
break ;
@@ -1843,6 +1895,14 @@ QGISEXTERN bool createEmptyDataSource( const QString &uri,
1843
1895
field = OGR_Fld_Create ( TO8 ( it->first ), OFTString );
1844
1896
OGR_Fld_SetWidth ( field, width );
1845
1897
}
1898
+ else if ( fields[0 ] == " Date" )
1899
+ {
1900
+ field = OGR_Fld_Create ( TO8 ( it->first ), OFTDate );
1901
+ }
1902
+ else if ( fields[0 ] == " DateTime" )
1903
+ {
1904
+ field = OGR_Fld_Create ( TO8 ( it->first ), OFTDateTime );
1905
+ }
1846
1906
else
1847
1907
{
1848
1908
continue ;
0 commit comments