@@ -40,6 +40,7 @@ public void TestStoreAsEpoch()
40
40
EpochDate2 = EpochDate ,
41
41
NonEpochDate1 = EpochDate ,
42
42
NonEpochDate2 = EpochDate ,
43
+ NullableEpochDate2 = EpochDate ,
43
44
LongEpochDate1 = LongEpochDate ,
44
45
LongEpochDate2 = LongEpochDate . AddMonths ( 3 ) ,
45
46
NullableLongEpochDate2 = LongEpochDate . AddMonths ( - 3 )
@@ -50,13 +51,17 @@ public void TestStoreAsEpoch()
50
51
var storedEmployee = Context . Load < EpochEmployee > ( employee . Name , employee . Age ) ;
51
52
Assert . IsNotNull ( storedEmployee ) ;
52
53
ApproximatelyEqual ( EpochDate , storedEmployee . CreationTime ) ;
54
+ Assert . IsNull ( storedEmployee . NullableEpochDate1 ) ;
55
+ ApproximatelyEqual ( EpochDate , storedEmployee . NullableEpochDate2 . Value ) ;
53
56
ApproximatelyEqual ( LongEpochDate , storedEmployee . LongEpochDate1 ) ;
54
57
ApproximatelyEqual ( LongEpochDate . AddMonths ( 3 ) , storedEmployee . LongEpochDate2 ) ;
55
58
Assert . IsNull ( storedEmployee . NullableLongEpochDate1 ) ;
56
59
ApproximatelyEqual ( LongEpochDate . AddMonths ( - 3 ) , storedEmployee . NullableLongEpochDate2 . Value ) ;
57
60
storedEmployee = Context . Load < EpochEmployee > ( employee ) ;
58
61
Assert . IsNotNull ( storedEmployee ) ;
59
62
ApproximatelyEqual ( EpochDate , storedEmployee . CreationTime ) ;
63
+ Assert . IsNull ( storedEmployee . NullableEpochDate1 ) ;
64
+ ApproximatelyEqual ( EpochDate , storedEmployee . NullableEpochDate2 . Value ) ;
60
65
ApproximatelyEqual ( LongEpochDate , storedEmployee . LongEpochDate1 ) ;
61
66
ApproximatelyEqual ( LongEpochDate . AddMonths ( 3 ) , storedEmployee . LongEpochDate2 ) ;
62
67
Assert . IsNull ( storedEmployee . NullableLongEpochDate1 ) ;
@@ -66,6 +71,8 @@ public void TestStoreAsEpoch()
66
71
var storedNumericEmployee = Context . Load < NumericEpochEmployee > ( employee . CreationTime , employee . Name ) ;
67
72
Assert . IsNotNull ( storedNumericEmployee ) ;
68
73
ApproximatelyEqual ( EpochDate , storedNumericEmployee . CreationTime ) ;
74
+ Assert . IsNull ( storedNumericEmployee . NullableEpochDate1 ) ;
75
+ ApproximatelyEqual ( EpochDate , storedNumericEmployee . NullableEpochDate2 . Value ) ;
69
76
ApproximatelyEqual ( LongEpochDate , storedNumericEmployee . LongEpochDate1 ) ;
70
77
ApproximatelyEqual ( LongEpochDate . AddMonths ( 3 ) , storedNumericEmployee . LongEpochDate2 ) ;
71
78
Assert . IsNull ( storedEmployee . NullableLongEpochDate1 ) ;
@@ -74,6 +81,8 @@ public void TestStoreAsEpoch()
74
81
storedNumericEmployee = Context . Load < NumericEpochEmployee > ( numericEmployee ) ;
75
82
Assert . IsNotNull ( storedNumericEmployee ) ;
76
83
ApproximatelyEqual ( EpochDate , storedNumericEmployee . CreationTime ) ;
84
+ Assert . IsNull ( storedNumericEmployee . NullableEpochDate1 ) ;
85
+ ApproximatelyEqual ( EpochDate , storedNumericEmployee . NullableEpochDate2 . Value ) ;
77
86
ApproximatelyEqual ( LongEpochDate , storedNumericEmployee . LongEpochDate1 ) ;
78
87
ApproximatelyEqual ( LongEpochDate . AddMonths ( 3 ) , storedNumericEmployee . LongEpochDate2 ) ;
79
88
Assert . IsNull ( storedEmployee . NullableLongEpochDate1 ) ;
@@ -82,6 +91,8 @@ public void TestStoreAsEpoch()
82
91
var doc = Context . ToDocument ( employee ) ;
83
92
ApproximatelyEqual ( EpochDate , doc [ "CreationTime" ] . AsDateTime ( ) ) ;
84
93
ApproximatelyEqual ( EpochDate , doc [ "EpochDate2" ] . AsDateTime ( ) ) ;
94
+ Assert . IsNull ( doc [ "NullableEpochDate1" ] . AsPrimitive ( ) . Value ) ;
95
+ ApproximatelyEqual ( EpochDate , doc [ "NullableEpochDate2" ] . AsDateTime ( ) ) ;
85
96
ApproximatelyEqual ( EpochDate , doc [ "NonEpochDate1" ] . AsDateTime ( ) ) ;
86
97
ApproximatelyEqual ( EpochDate , doc [ "NonEpochDate1" ] . AsDateTime ( ) ) ;
87
98
ApproximatelyEqual ( LongEpochDate , doc [ "LongEpochDate1" ] . AsDateTime ( ) ) ;
@@ -92,6 +103,8 @@ public void TestStoreAsEpoch()
92
103
var docV1 = doc . ForceConversion ( DynamoDBEntryConversion . V1 ) ;
93
104
ApproximatelyEqual ( EpochDate , docV1 [ "CreationTime" ] . AsDateTime ( ) ) ;
94
105
ApproximatelyEqual ( EpochDate , docV1 [ "EpochDate2" ] . AsDateTime ( ) ) ;
106
+ Assert . IsNull ( docV1 [ "NullableEpochDate1" ] . AsPrimitive ( ) . Value ) ;
107
+ ApproximatelyEqual ( EpochDate , docV1 [ "NullableEpochDate2" ] . AsDateTime ( ) ) ;
95
108
ApproximatelyEqual ( EpochDate , docV1 [ "NonEpochDate1" ] . AsDateTime ( ) ) ;
96
109
ApproximatelyEqual ( EpochDate , docV1 [ "NonEpochDate1" ] . AsDateTime ( ) ) ;
97
110
ApproximatelyEqual ( LongEpochDate , docV1 [ "LongEpochDate1" ] . AsDateTime ( ) ) ;
@@ -102,6 +115,8 @@ public void TestStoreAsEpoch()
102
115
var docV2 = doc . ForceConversion ( DynamoDBEntryConversion . V2 ) ;
103
116
ApproximatelyEqual ( EpochDate , docV2 [ "CreationTime" ] . AsDateTime ( ) ) ;
104
117
ApproximatelyEqual ( EpochDate , docV2 [ "EpochDate2" ] . AsDateTime ( ) ) ;
118
+ Assert . IsNull ( docV2 [ "NullableEpochDate1" ] . AsPrimitive ( ) . Value ) ;
119
+ ApproximatelyEqual ( EpochDate , docV2 [ "NullableEpochDate2" ] . AsDateTime ( ) ) ;
105
120
ApproximatelyEqual ( EpochDate , docV2 [ "NonEpochDate1" ] . AsDateTime ( ) ) ;
106
121
ApproximatelyEqual ( EpochDate , docV2 [ "NonEpochDate1" ] . AsDateTime ( ) ) ;
107
122
ApproximatelyEqual ( LongEpochDate , docV2 [ "LongEpochDate1" ] . AsDateTime ( ) ) ;
@@ -118,6 +133,8 @@ public void TestStoreAsEpoch()
118
133
var epochMap = epochTable . ToAttributeMap ( doc ) ;
119
134
Assert . IsNotNull ( epochMap [ "CreationTime" ] . N ) ;
120
135
Assert . IsNotNull ( epochMap [ "EpochDate2" ] . N ) ;
136
+ Assert . IsFalse ( epochMap . ContainsKey ( "NullableEpochDate1" ) ) ;
137
+ Assert . IsNotNull ( epochMap [ "NullableEpochDate2" ] . N ) ;
121
138
Assert . IsNotNull ( epochMap [ "NonEpochDate1" ] . S ) ;
122
139
Assert . IsNotNull ( epochMap [ "NonEpochDate2" ] . S ) ;
123
140
Assert . IsNotNull ( epochMap [ "LongEpochDate1" ] . N ) ;
@@ -172,7 +189,7 @@ public void TestStoreAsEpoch(Table hashRangeTable, Table numericHashRangeTable)
172
189
// construct tables with StoreAsEpoch and StoreAsEpochLong
173
190
var config = new TableConfig ( hashRangeTable . TableName )
174
191
{
175
- AttributesToStoreAsEpoch = new List < string > { "CreationTime" , "EpochDate2" } ,
192
+ AttributesToStoreAsEpoch = new List < string > { "CreationTime" , "EpochDate2" , "NullableEpochDate1" , "NullableEpochDate2" } ,
176
193
AttributesToStoreAsEpochLong = new List < string > { "LongEpochDate" , "NullableLongEpochDate1" , "NullableLongEpochDate2" }
177
194
} ;
178
195
var epochTable = Table . LoadTable ( Client , config ) ;
@@ -181,7 +198,7 @@ public void TestStoreAsEpoch(Table hashRangeTable, Table numericHashRangeTable)
181
198
182
199
config = new TableConfig ( numericHashRangeTable . TableName )
183
200
{
184
- AttributesToStoreAsEpoch = new List < string > { "CreationTime" , "EpochDate2" } ,
201
+ AttributesToStoreAsEpoch = new List < string > { "CreationTime" , "EpochDate2" , "NullableEpochDate1" , "NullableEpochDate2" } ,
185
202
AttributesToStoreAsEpochLong = new List < string > { "LongEpochDate" , "NullableLongEpochDate1" , "NullableLongEpochDate2" }
186
203
} ;
187
204
var numericEpochTable = Table . LoadTable ( Client , config ) ;
@@ -193,6 +210,8 @@ public void TestStoreAsEpoch(Table hashRangeTable, Table numericHashRangeTable)
193
210
Assert . IsNotNull ( map [ "CreationTime" ] . S ) ;
194
211
Assert . IsNotNull ( map [ "EpochDate2" ] . S ) ;
195
212
Assert . IsNotNull ( map [ "NonEpochDate" ] . S ) ;
213
+ Assert . IsNotNull ( map [ "NullableEpochDate1" ] . S ) ;
214
+ Assert . IsFalse ( map . ContainsKey ( "NullableEpochDate2" ) ) ;
196
215
Assert . IsNotNull ( map [ "LongEpochDate" ] . S ) ;
197
216
Assert . IsNotNull ( map [ "NullableLongEpochDate1" ] . S ) ;
198
217
Assert . IsFalse ( map . ContainsKey ( "NullableLongEpochDate2" ) ) ;
@@ -201,7 +220,9 @@ public void TestStoreAsEpoch(Table hashRangeTable, Table numericHashRangeTable)
201
220
Assert . IsNotNull ( epochMap [ "CreationTime" ] . N ) ;
202
221
Assert . IsNotNull ( epochMap [ "EpochDate2" ] . N ) ;
203
222
Assert . IsNotNull ( epochMap [ "NonEpochDate" ] . S ) ;
223
+ Assert . IsNotNull ( epochMap [ "NullableEpochDate1" ] . N ) ;
204
224
Assert . IsNotNull ( epochMap [ "LongEpochDate" ] . N ) ;
225
+ Assert . IsNotNull ( epochMap [ "NullableLongEpochDate1" ] . N ) ;
205
226
206
227
// put
207
228
epochTable . PutItem ( CreateTestDocument ( ) ) ;
@@ -241,6 +262,8 @@ public void TestStoreAsEpoch(Table hashRangeTable, Table numericHashRangeTable)
241
262
doc2 [ "CreationTime" ] = EpochDate ;
242
263
doc2 [ "EpochDate2" ] = EpochDate ;
243
264
doc2 [ "NonEpochDate" ] = EpochDate ;
265
+ doc2 [ "NullableEpochDate1" ] = ( DateTime ? ) EpochDate ;
266
+ doc2 [ "NullableEpochDate2" ] = ( DateTime ? ) null ;
244
267
doc2 [ "LongEpochDate" ] = LongEpochDate ;
245
268
doc2 [ "NullableLongEpochDate1" ] = ( DateTime ? ) LongEpochDate ;
246
269
doc2 [ "NullableLongEpochDate2" ] = ( DateTime ? ) null ;
@@ -335,6 +358,8 @@ private static Document CreateTestDocument()
335
358
doc [ "CreationTime" ] = EpochDate ;
336
359
doc [ "EpochDate2" ] = EpochDate ;
337
360
doc [ "NonEpochDate" ] = EpochDate ;
361
+ doc [ "NullableEpochDate1" ] = ( DateTime ? ) EpochDate ;
362
+ doc [ "NullableEpochDate2" ] = ( DateTime ? ) null ;
338
363
doc [ "LongEpochDate" ] = LongEpochDate ;
339
364
doc [ "NullableLongEpochDate1" ] = ( DateTime ? ) LongEpochDate ;
340
365
doc [ "NullableLongEpochDate2" ] = ( DateTime ? ) null ;
@@ -348,6 +373,7 @@ private static void TestWrittenData(Primitive hash, Primitive range, Table hashR
348
373
Assert . AreEqual ( EpochSeconds , nonEpochDoc [ "CreationTime" ] . AsInt ( ) ) ;
349
374
Assert . AreEqual ( EpochSeconds , nonEpochDoc [ "EpochDate2" ] . AsInt ( ) ) ;
350
375
ApproximatelyEqual ( EpochDate , nonEpochDoc [ "NonEpochDate" ] . AsDateTime ( ) ) ;
376
+ Assert . AreEqual ( EpochSeconds , nonEpochDoc [ "NullableEpochDate1" ] . AsInt ( ) ) ;
351
377
Assert . AreEqual ( LongEpochSeconds , nonEpochDoc [ "LongEpochDate" ] . AsLong ( ) ) ;
352
378
Assert . AreEqual ( LongEpochSeconds , nonEpochDoc [ "NullableLongEpochDate1" ] . AsLong ( ) ) ;
353
379
Assert . IsFalse ( nonEpochDoc . ContainsKey ( "NullableLongEpochDate2" ) ) ;
@@ -359,6 +385,7 @@ private static void TestWrittenData(Primitive hash, Primitive range, Table hashR
359
385
ApproximatelyEqual ( EpochDate , epochDoc [ "CreationTime" ] . AsDateTime ( ) ) ;
360
386
ApproximatelyEqual ( EpochDate , epochDoc [ "EpochDate2" ] . AsDateTime ( ) ) ;
361
387
ApproximatelyEqual ( EpochDate , epochDoc [ "NonEpochDate" ] . AsDateTime ( ) ) ;
388
+ ApproximatelyEqual ( EpochDate , epochDoc [ "NullableEpochDate1" ] . AsDateTime ( ) ) ;
362
389
ApproximatelyEqual ( LongEpochDate , epochDoc [ "LongEpochDate" ] . AsDateTime ( ) ) ;
363
390
ApproximatelyEqual ( LongEpochDate , epochDoc [ "NullableLongEpochDate1" ] . AsDateTime ( ) ) ;
364
391
if ( checkForConditionalUpdate )
@@ -374,6 +401,7 @@ private static void TestForInts(List<Document> nonEpochDocs)
374
401
Assert . AreEqual ( EpochSeconds , ed [ "CreationTime" ] . AsInt ( ) ) ;
375
402
Assert . AreEqual ( EpochSeconds , ed [ "EpochDate2" ] . AsInt ( ) ) ;
376
403
ApproximatelyEqual ( EpochDate , ed [ "NonEpochDate" ] . AsDateTime ( ) ) ;
404
+ Assert . AreEqual ( EpochSeconds , ed [ "NullableEpochDate1" ] . AsInt ( ) ) ;
377
405
Assert . AreEqual ( LongEpochSeconds , ed [ "LongEpochDate" ] . AsLong ( ) ) ;
378
406
Assert . AreEqual ( LongEpochSeconds , ed [ "NullableLongEpochDate1" ] . AsLong ( ) ) ;
379
407
}
@@ -386,6 +414,7 @@ private static void TestForDateTime(List<Document> epochDocs)
386
414
ApproximatelyEqual ( EpochDate , ed [ "CreationTime" ] . AsDateTime ( ) ) ;
387
415
ApproximatelyEqual ( EpochDate , ed [ "EpochDate2" ] . AsDateTime ( ) ) ;
388
416
ApproximatelyEqual ( EpochDate , ed [ "NonEpochDate" ] . AsDateTime ( ) ) ;
417
+ ApproximatelyEqual ( EpochDate , ed [ "NullableEpochDate1" ] . AsDateTime ( ) ) ;
389
418
ApproximatelyEqual ( LongEpochDate , ed [ "LongEpochDate" ] . AsDateTime ( ) ) ;
390
419
ApproximatelyEqual ( LongEpochDate , ed [ "NullableLongEpochDate1" ] . AsDateTime ( ) ) ;
391
420
}
0 commit comments