Merge pull request #2713 from nirvn/fix_memory_layer_datetime

[memorylayer] fix missing datetime field type
This commit is contained in:
Nyall Dawson 2016-01-27 10:27:54 +11:00
commit e42819d442
2 changed files with 13 additions and 3 deletions

View File

@ -86,6 +86,7 @@ QgsMemoryProvider::QgsMemoryProvider( const QString& uri )
// date type
<< QgsVectorDataProvider::NativeType( tr( "Date" ), "date", QVariant::Date, -1, -1, -1, -1 )
<< QgsVectorDataProvider::NativeType( tr( "Date & Time" ), "datetime", QVariant::DateTime, -1, -1, -1, -1 )
// integer types
<< QgsVectorDataProvider::NativeType( tr( "Whole number (smallint - 16bit)" ), "int2", QVariant::Int, -1, -1, 0, 0 )
@ -106,7 +107,7 @@ QgsMemoryProvider::QgsMemoryProvider( const QString& uri )
{
QList<QgsField> attributes;
QRegExp reFieldDef( "\\:"
"(int|integer|real|double|string|date)" // type
"(int|integer|real|double|string|date|datetime)" // type
"(?:\\((\\d+)" // length
"(?:\\,(\\d+))?" // precision
"\\))?"
@ -142,7 +143,13 @@ QgsMemoryProvider::QgsMemoryProvider( const QString& uri )
{
type = QVariant::Date;
typeName = "date";
length = 10;
length = -1;
}
else if ( typeName == "datetime" )
{
type = QVariant::DateTime;
typeName = "datetime";
length = -1;
}
if ( reFieldDef.cap( 2 ) != "" )
@ -350,6 +357,7 @@ bool QgsMemoryProvider::addAttributes( const QList<QgsField> &attributes )
case QVariant::Double:
case QVariant::String:
case QVariant::Date:
case QVariant::DateTime:
case QVariant::LongLong:
break;
default:

View File

@ -191,7 +191,9 @@ class TestPyQgsMemoryProvider(TestCase, ProviderTestCase):
# Add some fields to the layer
myFields = [QgsField('TestInt', QVariant.Int, 'integer', 2, 0),
QgsField('TestDbl', QVariant.Double, 'double', 8, 6),
QgsField('TestString', QVariant.String, 'string', 50, 0)]
QgsField('TestString', QVariant.String, 'string', 50, 0),
QgsField('TestDate', QVariant.Date, 'date'),
QgsField('TestDateTime', QVariant.DateTime, 'datetime')]
assert myMemoryLayer.startEditing()
for f in myFields:
assert myMemoryLayer.addAttribute(f)