9
9
"github.com/stretchr/testify/require"
10
10
11
11
"github.com/grafana/loki/v3/pkg/dataobj/sections/logs"
12
+ "github.com/grafana/loki/v3/pkg/engine/internal/datatype"
12
13
"github.com/grafana/loki/v3/pkg/engine/internal/types"
13
14
"github.com/grafana/loki/v3/pkg/engine/planner/physical"
14
15
)
@@ -31,6 +32,10 @@ func tsColExpr() *physical.ColumnExpr {
31
32
return newColumnExpr (types .ColumnNameBuiltinTimestamp , types .ColumnTypeBuiltin )
32
33
}
33
34
35
+ func ts (t time.Time ) datatype.Timestamp {
36
+ return datatype .Timestamp (t .UnixNano ())
37
+ }
38
+
34
39
func TestMapTimestampPredicate (t * testing.T ) {
35
40
time100 := time .Unix (0 , 100 ).UTC ()
36
41
time200 := time .Unix (0 , 200 ).UTC ()
@@ -47,7 +52,7 @@ func TestMapTimestampPredicate(t *testing.T) {
47
52
expr : & physical.BinaryExpr {
48
53
Left : tsColExpr (),
49
54
Op : types .BinaryOpEq ,
50
- Right : physical .NewLiteral (time100 ),
55
+ Right : physical .NewLiteral (ts ( time100 ) ),
51
56
},
52
57
want : logs.TimeRangeRowPredicate {
53
58
StartTime : time100 ,
@@ -61,7 +66,7 @@ func TestMapTimestampPredicate(t *testing.T) {
61
66
expr : & physical.BinaryExpr {
62
67
Left : tsColExpr (),
63
68
Op : types .BinaryOpGt ,
64
- Right : physical .NewLiteral (time100 ),
69
+ Right : physical .NewLiteral (ts ( time100 ) ),
65
70
},
66
71
want : logs.TimeRangeRowPredicate {
67
72
StartTime : time100 ,
@@ -75,7 +80,7 @@ func TestMapTimestampPredicate(t *testing.T) {
75
80
expr : & physical.BinaryExpr {
76
81
Left : tsColExpr (),
77
82
Op : types .BinaryOpGte ,
78
- Right : physical .NewLiteral (time100 ),
83
+ Right : physical .NewLiteral (ts ( time100 ) ),
79
84
},
80
85
want : logs.TimeRangeRowPredicate {
81
86
StartTime : time100 ,
@@ -89,7 +94,7 @@ func TestMapTimestampPredicate(t *testing.T) {
89
94
expr : & physical.BinaryExpr {
90
95
Left : tsColExpr (),
91
96
Op : types .BinaryOpLt ,
92
- Right : physical .NewLiteral (time100 ),
97
+ Right : physical .NewLiteral (ts ( time100 ) ),
93
98
},
94
99
want : logs.TimeRangeRowPredicate {
95
100
StartTime : testOpenStart ,
@@ -103,7 +108,7 @@ func TestMapTimestampPredicate(t *testing.T) {
103
108
expr : & physical.BinaryExpr {
104
109
Left : tsColExpr (),
105
110
Op : types .BinaryOpLte ,
106
- Right : physical .NewLiteral (time100 ),
111
+ Right : physical .NewLiteral (ts ( time100 ) ),
107
112
},
108
113
want : logs.TimeRangeRowPredicate {
109
114
StartTime : testOpenStart ,
@@ -120,7 +125,7 @@ func TestMapTimestampPredicate(t *testing.T) {
120
125
Right : & physical.BinaryExpr {
121
126
Left : tsColExpr (),
122
127
Op : types .BinaryOpLt ,
123
- Right : physical .NewLiteral (time100 ),
128
+ Right : physical .NewLiteral (ts ( time100 ) ),
124
129
},
125
130
},
126
131
errMatch : "invalid RHS for comparison: expected literal timestamp, got *physical.BinaryExpr" ,
@@ -136,23 +141,23 @@ func TestMapTimestampPredicate(t *testing.T) {
136
141
Right : & physical.BinaryExpr {
137
142
Left : tsColExpr (),
138
143
Op : types .BinaryOpLte ,
139
- Right : physical .NewLiteral (time200 ),
144
+ Right : physical .NewLiteral (ts ( time200 ) ),
140
145
},
141
146
},
142
147
},
143
148
errMatch : "invalid RHS for comparison: expected literal timestamp, got *physical.BinaryExpr" ,
144
149
},
145
150
{
146
151
desc : "input is not BinaryExpr" ,
147
- expr : physical .NewLiteral (time100 ),
152
+ expr : physical .NewLiteral (ts ( time100 ) ),
148
153
errMatch : "unsupported expression type for timestamp predicate: *physical.LiteralExpr, expected *physical.BinaryExpr" ,
149
154
},
150
155
{
151
156
desc : "LHS of BinaryExpr is not ColumnExpr" ,
152
157
expr : & physical.BinaryExpr {
153
- Left : physical .NewLiteral (time100 ),
158
+ Left : physical .NewLiteral (ts ( time100 ) ),
154
159
Op : types .BinaryOpEq ,
155
- Right : physical .NewLiteral (time200 ),
160
+ Right : physical .NewLiteral (ts ( time200 ) ),
156
161
},
157
162
errMatch : "invalid LHS for comparison: expected timestamp column, got 1970-01-01T00:00:00.0000001Z" ,
158
163
},
@@ -161,7 +166,7 @@ func TestMapTimestampPredicate(t *testing.T) {
161
166
expr : & physical.BinaryExpr {
162
167
Left : newColumnExpr ("other_col" , types .ColumnTypeBuiltin ),
163
168
Op : types .BinaryOpEq ,
164
- Right : physical .NewLiteral (time100 ),
169
+ Right : physical .NewLiteral (ts ( time100 ) ),
165
170
},
166
171
errMatch : "invalid LHS for comparison: expected timestamp column, got builtin.other_col" ,
167
172
},
@@ -188,7 +193,7 @@ func TestMapTimestampPredicate(t *testing.T) {
188
193
expr : & physical.BinaryExpr {
189
194
Left : tsColExpr (),
190
195
Op : types .BinaryOpAnd ,
191
- Right : physical .NewLiteral (time100 ),
196
+ Right : physical .NewLiteral (ts ( time100 ) ),
192
197
},
193
198
errMatch : "invalid left operand for AND: unsupported expression type for timestamp predicate: *physical.ColumnExpr, expected *physical.BinaryExpr" ,
194
199
},
@@ -200,7 +205,7 @@ func TestMapTimestampPredicate(t *testing.T) {
200
205
Right : & physical.BinaryExpr {
201
206
Left : tsColExpr (),
202
207
Op : types .BinaryOpGt ,
203
- Right : physical .NewLiteral (time100 ),
208
+ Right : physical .NewLiteral (ts ( time100 ) ),
204
209
},
205
210
},
206
211
errMatch : "unsupported operator for timestamp predicate: OR" ,
@@ -211,13 +216,13 @@ func TestMapTimestampPredicate(t *testing.T) {
211
216
Left : & physical.BinaryExpr {
212
217
Left : tsColExpr (),
213
218
Op : types .BinaryOpGt ,
214
- Right : physical .NewLiteral (time100 ),
219
+ Right : physical .NewLiteral (ts ( time100 ) ),
215
220
},
216
221
Op : types .BinaryOpAnd ,
217
222
Right : & physical.BinaryExpr {
218
223
Left : tsColExpr (),
219
224
Op : types .BinaryOpLt ,
220
- Right : physical .NewLiteral (time200 ),
225
+ Right : physical .NewLiteral (ts ( time200 ) ),
221
226
},
222
227
},
223
228
want : logs.TimeRangeRowPredicate {
@@ -233,13 +238,13 @@ func TestMapTimestampPredicate(t *testing.T) {
233
238
Left : & physical.BinaryExpr {
234
239
Left : tsColExpr (),
235
240
Op : types .BinaryOpGte ,
236
- Right : physical .NewLiteral (time100 ),
241
+ Right : physical .NewLiteral (ts ( time100 ) ),
237
242
},
238
243
Op : types .BinaryOpAnd ,
239
244
Right : & physical.BinaryExpr {
240
245
Left : tsColExpr (),
241
246
Op : types .BinaryOpLte ,
242
- Right : physical .NewLiteral (time200 ),
247
+ Right : physical .NewLiteral (ts ( time200 ) ),
243
248
},
244
249
},
245
250
want : logs.TimeRangeRowPredicate {
@@ -255,13 +260,13 @@ func TestMapTimestampPredicate(t *testing.T) {
255
260
Left : & physical.BinaryExpr {
256
261
Left : tsColExpr (),
257
262
Op : types .BinaryOpGte ,
258
- Right : physical .NewLiteral (time100 ),
263
+ Right : physical .NewLiteral (ts ( time100 ) ),
259
264
},
260
265
Op : types .BinaryOpAnd ,
261
266
Right : & physical.BinaryExpr {
262
267
Left : tsColExpr (),
263
268
Op : types .BinaryOpLt ,
264
- Right : physical .NewLiteral (time100 ),
269
+ Right : physical .NewLiteral (ts ( time100 ) ),
265
270
},
266
271
},
267
272
errMatch : "impossible time range: start_time (1970-01-01 00:00:00.0000001 +0000 UTC) equals end_time (1970-01-01 00:00:00.0000001 +0000 UTC) but the range is exclusive" ,
@@ -272,13 +277,13 @@ func TestMapTimestampPredicate(t *testing.T) {
272
277
Left : & physical.BinaryExpr {
273
278
Left : tsColExpr (),
274
279
Op : types .BinaryOpGt ,
275
- Right : physical .NewLiteral (time100 ),
280
+ Right : physical .NewLiteral (ts ( time100 ) ),
276
281
},
277
282
Op : types .BinaryOpAnd ,
278
283
Right : & physical.BinaryExpr {
279
284
Left : tsColExpr (),
280
285
Op : types .BinaryOpLte ,
281
- Right : physical .NewLiteral (time100 ),
286
+ Right : physical .NewLiteral (ts ( time100 ) ),
282
287
},
283
288
},
284
289
errMatch : "impossible time range: start_time (1970-01-01 00:00:00.0000001 +0000 UTC) equals end_time (1970-01-01 00:00:00.0000001 +0000 UTC) but the range is exclusive" ,
@@ -289,13 +294,13 @@ func TestMapTimestampPredicate(t *testing.T) {
289
294
Left : & physical.BinaryExpr {
290
295
Left : tsColExpr (),
291
296
Op : types .BinaryOpGte ,
292
- Right : physical .NewLiteral (time100 ),
297
+ Right : physical .NewLiteral (ts ( time100 ) ),
293
298
},
294
299
Op : types .BinaryOpAnd ,
295
300
Right : & physical.BinaryExpr {
296
301
Left : tsColExpr (),
297
302
Op : types .BinaryOpLte ,
298
- Right : physical .NewLiteral (time100 ),
303
+ Right : physical .NewLiteral (ts ( time100 ) ),
299
304
},
300
305
},
301
306
want : logs.TimeRangeRowPredicate {
@@ -311,13 +316,13 @@ func TestMapTimestampPredicate(t *testing.T) {
311
316
Left : & physical.BinaryExpr {
312
317
Left : tsColExpr (),
313
318
Op : types .BinaryOpEq ,
314
- Right : physical .NewLiteral (time100 ),
319
+ Right : physical .NewLiteral (ts ( time100 ) ),
315
320
},
316
321
Op : types .BinaryOpAnd ,
317
322
Right : & physical.BinaryExpr {
318
323
Left : tsColExpr (),
319
324
Op : types .BinaryOpEq ,
320
- Right : physical .NewLiteral (time200 ),
325
+ Right : physical .NewLiteral (ts ( time200 ) ),
321
326
},
322
327
},
323
328
errMatch : "impossible time range: start_time (1970-01-01 00:00:00.0000002 +0000 UTC) is after end_time (1970-01-01 00:00:00.0000001 +0000 UTC)" ,
@@ -328,13 +333,13 @@ func TestMapTimestampPredicate(t *testing.T) {
328
333
Left : & physical.BinaryExpr {
329
334
Left : tsColExpr (),
330
335
Op : types .BinaryOpLt ,
331
- Right : physical .NewLiteral (time100 ),
336
+ Right : physical .NewLiteral (ts ( time100 ) ),
332
337
},
333
338
Op : types .BinaryOpAnd ,
334
339
Right : & physical.BinaryExpr {
335
340
Left : tsColExpr (),
336
341
Op : types .BinaryOpGt ,
337
- Right : physical .NewLiteral (time200 ),
342
+ Right : physical .NewLiteral (ts ( time200 ) ),
338
343
},
339
344
},
340
345
errMatch : "impossible time range: start_time (1970-01-01 00:00:00.0000002 +0000 UTC) is after end_time (1970-01-01 00:00:00.0000001 +0000 UTC)" ,
@@ -346,20 +351,20 @@ func TestMapTimestampPredicate(t *testing.T) {
346
351
Left : & physical.BinaryExpr {
347
352
Left : tsColExpr (),
348
353
Op : types .BinaryOpGt ,
349
- Right : physical .NewLiteral (time100 ),
354
+ Right : physical .NewLiteral (ts ( time100 ) ),
350
355
},
351
356
Op : types .BinaryOpAnd ,
352
357
Right : & physical.BinaryExpr {
353
358
Left : tsColExpr (),
354
359
Op : types .BinaryOpLt ,
355
- Right : physical .NewLiteral (time300 ),
360
+ Right : physical .NewLiteral (ts ( time300 ) ),
356
361
},
357
362
},
358
363
Op : types .BinaryOpAnd ,
359
364
Right : & physical.BinaryExpr {
360
365
Left : tsColExpr (),
361
366
Op : types .BinaryOpEq ,
362
- Right : physical .NewLiteral (time200 ),
367
+ Right : physical .NewLiteral (ts ( time200 ) ),
363
368
},
364
369
},
365
370
want : logs.TimeRangeRowPredicate {
@@ -375,13 +380,13 @@ func TestMapTimestampPredicate(t *testing.T) {
375
380
Left : & physical.BinaryExpr { // Invalid: LHS not timestamp column
376
381
Left : newColumnExpr ("not_ts" , types .ColumnTypeBuiltin ),
377
382
Op : types .BinaryOpGt ,
378
- Right : physical .NewLiteral (time100 ),
383
+ Right : physical .NewLiteral (ts ( time100 ) ),
379
384
},
380
385
Op : types .BinaryOpAnd ,
381
386
Right : & physical.BinaryExpr {
382
387
Left : tsColExpr (),
383
388
Op : types .BinaryOpLt ,
384
- Right : physical .NewLiteral (time200 ),
389
+ Right : physical .NewLiteral (ts ( time200 ) ),
385
390
},
386
391
},
387
392
errMatch : "invalid left operand for AND: invalid LHS for comparison: expected timestamp column, got builtin.not_ts" ,
@@ -392,7 +397,7 @@ func TestMapTimestampPredicate(t *testing.T) {
392
397
Left : & physical.BinaryExpr {
393
398
Left : tsColExpr (),
394
399
Op : types .BinaryOpGt ,
395
- Right : physical .NewLiteral (time100 ),
400
+ Right : physical .NewLiteral (ts ( time100 ) ),
396
401
},
397
402
Op : types .BinaryOpAnd ,
398
403
Right : & physical.BinaryExpr { // Invalid: RHS literal not timestamp
@@ -409,13 +414,13 @@ func TestMapTimestampPredicate(t *testing.T) {
409
414
Left : & physical.BinaryExpr {
410
415
Left : tsColExpr (),
411
416
Op : types .BinaryOpLt ,
412
- Right : physical .NewLiteral (time100 ),
417
+ Right : physical .NewLiteral (ts ( time100 ) ),
413
418
},
414
419
Op : types .BinaryOpAnd ,
415
420
Right : & physical.BinaryExpr {
416
421
Left : tsColExpr (),
417
422
Op : types .BinaryOpLt ,
418
- Right : physical .NewLiteral (time200 ),
423
+ Right : physical .NewLiteral (ts ( time200 ) ),
419
424
},
420
425
},
421
426
want : logs.TimeRangeRowPredicate {
@@ -431,13 +436,13 @@ func TestMapTimestampPredicate(t *testing.T) {
431
436
Left : & physical.BinaryExpr {
432
437
Left : tsColExpr (),
433
438
Op : types .BinaryOpLt ,
434
- Right : physical .NewLiteral (time200 ),
439
+ Right : physical .NewLiteral (ts ( time200 ) ),
435
440
},
436
441
Op : types .BinaryOpAnd ,
437
442
Right : & physical.BinaryExpr {
438
443
Left : tsColExpr (),
439
444
Op : types .BinaryOpLt ,
440
- Right : physical .NewLiteral (time100 ),
445
+ Right : physical .NewLiteral (ts ( time100 ) ),
441
446
},
442
447
},
443
448
want : logs.TimeRangeRowPredicate {
@@ -620,7 +625,7 @@ func TestMapMetadataPredicate(t *testing.T) {
620
625
name : "error: RHS literal not string for EQ" ,
621
626
expr : & physical.BinaryExpr {
622
627
Left : & physical.ColumnExpr {Ref : types.ColumnRef {Column : "foo" , Type : types .ColumnTypeMetadata }},
623
- Right : physical .NewLiteral (123 ), // Not string
628
+ Right : physical .NewLiteral (int64 ( 123 ) ), // Not string
624
629
Op : types .BinaryOpEq ,
625
630
},
626
631
expectedPred : nil ,
0 commit comments