@@ -180,6 +180,113 @@ class QueryIntegerProperty<EntityT> extends QueryProperty<EntityT, int> {
180
180
_opList (list, _ConditionOp .notOneOf, alias);
181
181
}
182
182
183
+ /// This wraps [QueryIntegerProperty] for [DateTime] properties to avoid
184
+ /// having to manually convert to [DateTime.millisecondsSinceEpoch] when
185
+ /// creating query conditions.
186
+ class QueryDateProperty <EntityT > extends QueryIntegerProperty <EntityT > {
187
+ QueryDateProperty (super .model);
188
+
189
+ int _convert (DateTime value) => value.millisecondsSinceEpoch;
190
+
191
+ /// Like [equals] , but converts to [DateTime.millisecondsSinceEpoch] for you.
192
+ Condition <EntityT > equalsMilliseconds (DateTime value, {String ? alias}) =>
193
+ equals (_convert (value), alias: alias);
194
+
195
+ /// Like [notEquals] , but converts to [DateTime.millisecondsSinceEpoch] for you.
196
+ Condition <EntityT > notEqualsMilliseconds (DateTime value, {String ? alias}) =>
197
+ notEquals (_convert (value), alias: alias);
198
+
199
+ /// Like [greaterThan] , but converts to [DateTime.millisecondsSinceEpoch] for you.
200
+ Condition <EntityT > greaterThanMilliseconds (DateTime value, {String ? alias}) =>
201
+ greaterThan (_convert (value), alias: alias);
202
+
203
+ /// Like [greaterOrEqual] , but converts to [DateTime.millisecondsSinceEpoch] for you.
204
+ Condition <EntityT > greaterOrEqualMilliseconds (DateTime value,
205
+ {String ? alias}) =>
206
+ greaterOrEqual (_convert (value), alias: alias);
207
+
208
+ /// Like [lessThan] , but converts to [DateTime.millisecondsSinceEpoch] for you.
209
+ Condition <EntityT > lessThanMilliseconds (DateTime value, {String ? alias}) =>
210
+ lessThan (_convert (value), alias: alias);
211
+
212
+ /// Like [lessOrEqual] , but converts to [DateTime.millisecondsSinceEpoch] for you.
213
+ Condition <EntityT > lessOrEqualMilliseconds (DateTime value, {String ? alias}) =>
214
+ lessOrEqual (_convert (value), alias: alias);
215
+
216
+ /// Like [between] , but converts to [DateTime.millisecondsSinceEpoch] for you.
217
+ Condition <EntityT > betweenMilliseconds (DateTime value1, DateTime value2,
218
+ {String ? alias}) =>
219
+ between (_convert (value1), _convert (value2), alias: alias);
220
+
221
+ /// Like [oneOf] , but converts to [DateTime.millisecondsSinceEpoch] for you.
222
+ Condition <EntityT > oneOfMilliseconds (List <DateTime > values,
223
+ {String ? alias}) =>
224
+ oneOf (values.map (_convert).toList (), alias: alias);
225
+
226
+ /// Like [notOneOf] , but converts to [DateTime.millisecondsSinceEpoch] for you.
227
+ Condition <EntityT > notOneOfMilliseconds (List <DateTime > values,
228
+ {String ? alias}) =>
229
+ notOneOf (values.map (_convert).toList (), alias: alias);
230
+ }
231
+
232
+ /// This wraps [QueryIntegerProperty] for [DateTime] properties annotated with
233
+ /// `@Property(type: PropertyType.dateNano)` to avoid having to manually convert
234
+ /// to nanoseconds ([DateTime.microsecondsSinceEpoch] `* 1000` ) when creating
235
+ /// query conditions.
236
+ class QueryDateNanoProperty <EntityT > extends QueryIntegerProperty <EntityT > {
237
+ QueryDateNanoProperty (super .model);
238
+
239
+ int _convert (DateTime value) => value.microsecondsSinceEpoch * 1000 ;
240
+
241
+ /// Like [equals] , but converts to nanoseconds
242
+ /// ([DateTime.microsecondsSinceEpoch] `* 1000` ) for you.
243
+ Condition <EntityT > equalsNanoseconds (DateTime value, {String ? alias}) =>
244
+ equals (_convert (value), alias: alias);
245
+
246
+ /// Like [notEquals] , but converts to nanoseconds
247
+ /// ([DateTime.microsecondsSinceEpoch] `* 1000` ) for you.
248
+ Condition <EntityT > notEqualsNanoseconds (DateTime value, {String ? alias}) =>
249
+ notEquals (_convert (value), alias: alias);
250
+
251
+ /// Like [greaterThan] , but converts to nanoseconds
252
+ /// ([DateTime.microsecondsSinceEpoch] `* 1000` ) for you.
253
+ Condition <EntityT > greaterThanNanoseconds (DateTime value, {String ? alias}) =>
254
+ greaterThan (_convert (value), alias: alias);
255
+
256
+ /// Like [greaterOrEqual] , but converts to nanoseconds
257
+ /// ([DateTime.microsecondsSinceEpoch] `* 1000` ) for you.
258
+ Condition <EntityT > greaterOrEqualNanoseconds (DateTime value,
259
+ {String ? alias}) =>
260
+ greaterOrEqual (_convert (value), alias: alias);
261
+
262
+ /// Like [lessThan] , but converts to nanoseconds
263
+ /// ([DateTime.microsecondsSinceEpoch] `* 1000` ) for you.
264
+ Condition <EntityT > lessThanNanoseconds (DateTime value, {String ? alias}) =>
265
+ lessThan (_convert (value), alias: alias);
266
+
267
+ /// Like [lessOrEqual] , but converts to nanoseconds
268
+ /// ([DateTime.microsecondsSinceEpoch] `* 1000` ) for you.
269
+ Condition <EntityT > lessOrEqualNanoseconds (DateTime value, {String ? alias}) =>
270
+ lessOrEqual (_convert (value), alias: alias);
271
+
272
+ /// Like [between] , but converts to nanoseconds
273
+ /// ([DateTime.microsecondsSinceEpoch] `* 1000` ) for you.
274
+ Condition <EntityT > betweenNanoseconds (DateTime value1, DateTime value2,
275
+ {String ? alias}) =>
276
+ between (_convert (value1), _convert (value2), alias: alias);
277
+
278
+ /// Like [oneOf] , but converts to nanoseconds
279
+ /// ([DateTime.microsecondsSinceEpoch] `* 1000` ) for you.
280
+ Condition <EntityT > oneOfNanoseconds (List <DateTime > values, {String ? alias}) =>
281
+ oneOf (values.map (_convert).toList (), alias: alias);
282
+
283
+ /// Like [notOneOf] , but converts to nanoseconds
284
+ /// ([DateTime.microsecondsSinceEpoch] `* 1000` ) for you.
285
+ Condition <EntityT > notOneOfNanoseconds (List <DateTime > values,
286
+ {String ? alias}) =>
287
+ notOneOf (values.map (_convert).toList (), alias: alias);
288
+ }
289
+
183
290
/// For integer vectors (excluding [QueryByteVectorProperty] ) greater, less and
184
291
/// equal are supported on elements of the vector (e.g. "has element greater").
185
292
class QueryIntegerVectorProperty <EntityT > extends QueryProperty <EntityT , int > {
0 commit comments