Allow durations for number rule

Signed-off-by: darshanime <deathbullet@gmail.com>
This commit is contained in:
darshanime 2024-03-15 00:18:51 +05:30 committed by beorn7
parent cfad8ff3b2
commit bd4ea118e9
5 changed files with 288 additions and 237 deletions

View file

@ -428,7 +428,7 @@ offset_expr: expr OFFSET number_duration_literal
$$ = $1 $$ = $1
} }
| expr OFFSET error | expr OFFSET error
{ yylex.(*parser).unexpected("offset", "integer or duration"); $$ = $1 } { yylex.(*parser).unexpected("offset", "number or duration"); $$ = $1 }
; ;
/* /*
* @ modifiers. * @ modifiers.
@ -504,11 +504,11 @@ subquery_expr : expr LEFT_BRACKET number_duration_literal COLON number_duratio
| expr LEFT_BRACKET number_duration_literal COLON number_duration_literal error | expr LEFT_BRACKET number_duration_literal COLON number_duration_literal error
{ yylex.(*parser).unexpected("subquery selector", "\"]\""); $$ = $1 } { yylex.(*parser).unexpected("subquery selector", "\"]\""); $$ = $1 }
| expr LEFT_BRACKET number_duration_literal COLON error | expr LEFT_BRACKET number_duration_literal COLON error
{ yylex.(*parser).unexpected("subquery selector", "number/duration or \"]\""); $$ = $1 } { yylex.(*parser).unexpected("subquery selector", "number or duration or \"]\""); $$ = $1 }
| expr LEFT_BRACKET number_duration_literal error | expr LEFT_BRACKET number_duration_literal error
{ yylex.(*parser).unexpected("subquery or range", "\":\" or \"]\""); $$ = $1 } { yylex.(*parser).unexpected("subquery or range", "\":\" or \"]\""); $$ = $1 }
| expr LEFT_BRACKET error | expr LEFT_BRACKET error
{ yylex.(*parser).unexpected("subquery selector", "number/duration"); $$ = $1 } { yylex.(*parser).unexpected("subquery selector", "number or duration"); $$ = $1 }
; ;
/* /*
@ -902,7 +902,21 @@ number_duration_literal : NUMBER
} }
; ;
number : NUMBER { $$ = yylex.(*parser).number($1.Val) } ; number : NUMBER
{
$$ = yylex.(*parser).number($1.Val)
}
| DURATION
{
var err error
var dur time.Duration
dur, err = parseDuration($1.Val)
if err != nil {
yylex.(*parser).addParseErr($1.PositionRange(), err)
}
$$ = dur.Seconds()
}
;
signed_number : ADD number { $$ = $2 } signed_number : ADD number { $$ = $2 }
| SUB number { $$ = -$2 } | SUB number { $$ = -$2 }

View file

@ -323,198 +323,198 @@ var yyExca = [...]int16{
78, 188, 78, 188,
84, 188, 84, 188,
-2, 124, -2, 124,
-1, 199,
9, 236,
12, 236,
13, 236,
18, 236,
19, 236,
25, 236,
40, 236,
46, 236,
47, 236,
50, 236,
56, 236,
61, 236,
62, 236,
63, 236,
64, 236,
65, 236,
66, 236,
67, 236,
68, 236,
69, 236,
70, 236,
71, 236,
72, 236,
73, 236,
74, 236,
78, 236,
82, 236,
84, 236,
87, 236,
88, 236,
-2, 0,
-1, 200, -1, 200,
9, 236, 9, 237,
12, 236, 12, 237,
13, 236, 13, 237,
18, 236, 18, 237,
19, 236, 19, 237,
25, 236, 25, 237,
40, 236, 40, 237,
46, 236, 46, 237,
47, 236, 47, 237,
50, 236, 50, 237,
56, 236, 56, 237,
61, 236, 61, 237,
62, 236, 62, 237,
63, 236, 63, 237,
64, 236, 64, 237,
65, 236, 65, 237,
66, 236, 66, 237,
67, 236, 67, 237,
68, 236, 68, 237,
69, 236, 69, 237,
70, 236, 70, 237,
71, 236, 71, 237,
72, 236, 72, 237,
73, 236, 73, 237,
74, 236, 74, 237,
78, 236, 78, 237,
82, 236, 82, 237,
84, 236, 84, 237,
87, 236, 87, 237,
88, 236, 88, 237,
-2, 0,
-1, 201,
9, 237,
12, 237,
13, 237,
18, 237,
19, 237,
25, 237,
40, 237,
46, 237,
47, 237,
50, 237,
56, 237,
61, 237,
62, 237,
63, 237,
64, 237,
65, 237,
66, 237,
67, 237,
68, 237,
69, 237,
70, 237,
71, 237,
72, 237,
73, 237,
74, 237,
78, 237,
82, 237,
84, 237,
87, 237,
88, 237,
-2, 0, -2, 0,
} }
const yyPrivate = 57344 const yyPrivate = 57344
const yyLast = 727 const yyLast = 728
var yyAct = [...]int16{ var yyAct = [...]int16{
155, 330, 328, 274, 335, 152, 225, 39, 191, 44, 155, 331, 329, 275, 336, 152, 226, 39, 192, 44,
288, 287, 156, 118, 82, 177, 55, 106, 6, 53, 289, 288, 156, 118, 82, 178, 55, 106, 6, 53,
77, 109, 56, 133, 108, 22, 54, 110, 107, 171, 77, 109, 56, 133, 108, 22, 54, 110, 107, 172,
159, 197, 57, 198, 199, 200, 60, 111, 325, 151, 300, 198, 57, 199, 200, 201, 60, 111, 326, 151,
324, 301, 320, 307, 265, 154, 55, 75, 128, 105, 325, 302, 321, 308, 266, 154, 55, 75, 128, 105,
159, 160, 349, 18, 19, 290, 54, 20, 306, 308, 291, 300, 160, 18, 19, 309, 54, 20, 307, 218,
105, 319, 159, 76, 113, 305, 114, 161, 61, 62, 105, 320, 159, 76, 113, 306, 114, 330, 61, 62,
63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72,
73, 74, 112, 160, 179, 13, 87, 89, 264, 24, 73, 74, 112, 161, 180, 13, 87, 89, 265, 24,
101, 30, 104, 150, 31, 32, 115, 98, 99, 161, 101, 30, 104, 150, 31, 32, 115, 98, 99, 162,
109, 101, 102, 104, 88, 195, 110, 2, 3, 4, 109, 101, 102, 104, 88, 349, 110, 2, 3, 4,
5, 263, 258, 149, 84, 162, 55, 103, 159, 172, 5, 264, 196, 149, 111, 163, 160, 103, 337, 173,
166, 169, 299, 181, 83, 165, 54, 257, 103, 193, 167, 170, 84, 182, 348, 166, 159, 347, 103, 194,
157, 158, 184, 180, 182, 164, 183, 196, 299, 185, 157, 158, 83, 181, 183, 165, 184, 197, 77, 186,
217, 194, 201, 202, 203, 204, 205, 206, 207, 208, 185, 195, 202, 203, 204, 205, 206, 207, 208, 209,
209, 210, 211, 212, 213, 214, 215, 129, 348, 329, 210, 211, 212, 213, 214, 215, 216, 129, 269, 263,
216, 218, 219, 55, 38, 121, 53, 77, 268, 56, 217, 160, 219, 220, 55, 38, 35, 53, 77, 267,
111, 336, 22, 54, 121, 119, 266, 347, 77, 57, 56, 159, 270, 22, 54, 121, 297, 188, 7, 259,
346, 176, 269, 259, 119, 7, 175, 35, 122, 260, 57, 296, 262, 161, 319, 119, 318, 317, 271, 179,
160, 262, 117, 178, 75, 179, 318, 122, 270, 174, 261, 180, 161, 260, 258, 75, 295, 84, 122, 162,
18, 19, 317, 267, 20, 316, 161, 187, 285, 286, 187, 18, 19, 316, 268, 20, 315, 83, 162, 286,
76, 86, 289, 315, 261, 61, 62, 63, 64, 65, 287, 76, 314, 290, 313, 81, 61, 62, 63, 64,
66, 67, 68, 69, 70, 71, 72, 73, 74, 10,
186, 291, 13, 314, 181, 313, 24, 312, 30, 79,
311, 31, 32, 310, 180, 182, 134, 135, 136, 137,
138, 139, 140, 141, 142, 143, 144, 145, 146, 147,
148, 309, 36, 127, 293, 126, 297, 298, 300, 296,
302, 55, 222, 189, 295, 84, 221, 125, 303, 304,
192, 54, 124, 292, 195, 83, 168, 159, 1, 294,
227, 220, 50, 81, 163, 123, 49, 48, 78, 167,
237, 55, 322, 323, 47, 46, 243, 132, 160, 327,
321, 54, 332, 333, 334, 45, 331, 43, 130, 338,
337, 340, 339, 170, 161, 59, 341, 342, 9, 9,
42, 343, 8, 131, 239, 240, 37, 345, 241, 41,
40, 51, 190, 344, 271, 85, 254, 350, 188, 228,
230, 232, 233, 234, 242, 244, 247, 248, 249, 250,
251, 255, 256, 223, 80, 229, 231, 235, 236, 238,
245, 246, 120, 153, 55, 252, 253, 53, 77, 58,
56, 226, 52, 22, 54, 116, 0, 0, 0, 0,
57, 0, 0, 0, 0, 0, 0, 0, 0, 0,
227, 0, 0, 0, 0, 75, 0, 0, 0, 0,
237, 18, 19, 0, 0, 20, 243, 0, 0, 0,
224, 76, 0, 0, 0, 0, 61, 62, 63, 64,
65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74,
0, 0, 0, 13, 239, 240, 0, 24, 241, 30, 182, 86, 292, 13, 55, 10, 312, 24, 311, 30,
0, 0, 31, 32, 0, 0, 254, 105, 0, 228, 181, 183, 31, 32, 54, 79, 134, 135, 136, 137,
230, 232, 233, 234, 242, 244, 247, 248, 249, 250, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147,
251, 255, 256, 0, 0, 229, 231, 235, 236, 238, 148, 310, 127, 36, 126, 1, 121, 298, 299, 301,
245, 246, 17, 77, 89, 252, 253, 0, 22, 0, 164, 303, 49, 48, 190, 294, 119, 55, 160, 304,
0, 326, 0, 0, 98, 99, 0, 0, 101, 0, 305, 193, 55, 160, 117, 196, 223, 54, 159, 122,
104, 88, 276, 277, 275, 282, 284, 281, 283, 278, 222, 228, 54, 159, 293, 350, 50, 47, 46, 169,
279, 280, 17, 35, 0, 0, 18, 19, 22, 0, 132, 238, 78, 323, 324, 221, 45, 244, 43, 161,
20, 0, 0, 0, 0, 103, 0, 0, 0, 0, 328, 322, 168, 333, 334, 335, 130, 332, 171, 177,
0, 11, 12, 14, 15, 16, 21, 23, 25, 26, 339, 338, 341, 340, 176, 162, 125, 342, 343, 42,
27, 28, 29, 33, 34, 0, 18, 19, 13, 0, 59, 124, 344, 9, 9, 240, 241, 175, 346, 242,
20, 0, 24, 0, 30, 0, 0, 31, 32, 0, 131, 8, 41, 40, 123, 37, 51, 255, 351, 191,
0, 11, 12, 14, 15, 16, 21, 23, 25, 26, 229, 231, 233, 234, 235, 243, 245, 248, 249, 250,
27, 28, 29, 33, 34, 105, 0, 0, 13, 0, 251, 252, 256, 257, 345, 272, 230, 232, 236, 237,
0, 0, 24, 173, 30, 0, 0, 31, 32, 0, 239, 246, 247, 85, 189, 55, 253, 254, 53, 77,
0, 0, 0, 0, 105, 0, 0, 0, 0, 0, 224, 56, 80, 120, 22, 54, 153, 58, 227, 52,
0, 87, 89, 90, 0, 91, 92, 93, 94, 95, 116, 57, 0, 0, 0, 0, 0, 0, 0, 0,
96, 97, 98, 99, 100, 0, 101, 102, 104, 88, 0, 228, 0, 0, 0, 0, 75, 0, 0, 0,
87, 89, 90, 0, 91, 92, 93, 94, 95, 96, 0, 238, 18, 19, 0, 0, 20, 244, 0, 0,
97, 98, 99, 100, 273, 101, 102, 104, 88, 105, 0, 225, 76, 0, 0, 0, 0, 61, 62, 63,
0, 272, 0, 103, 0, 276, 277, 275, 282, 284, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73,
281, 283, 278, 279, 280, 0, 0, 0, 105, 0, 74, 0, 0, 0, 13, 240, 241, 0, 24, 242,
0, 0, 103, 0, 0, 87, 89, 90, 0, 91, 30, 0, 0, 31, 32, 0, 0, 255, 105, 0,
92, 93, 0, 95, 96, 97, 98, 99, 100, 0, 229, 231, 233, 234, 235, 243, 245, 248, 249, 250,
101, 102, 104, 88, 87, 89, 90, 0, 91, 92, 251, 252, 256, 257, 0, 0, 230, 232, 236, 237,
0, 0, 95, 96, 0, 98, 99, 100, 0, 101, 239, 246, 247, 17, 77, 89, 253, 254, 0, 22,
102, 104, 88, 0, 0, 0, 0, 103, 0, 0, 0, 0, 327, 0, 0, 98, 99, 0, 0, 101,
0, 104, 88, 277, 278, 276, 283, 285, 282, 284,
279, 280, 281, 17, 35, 0, 0, 18, 19, 22,
0, 20, 0, 0, 0, 0, 103, 0, 0, 0,
0, 0, 11, 12, 14, 15, 16, 21, 23, 25,
26, 27, 28, 29, 33, 34, 0, 18, 19, 13,
0, 20, 0, 24, 0, 30, 0, 0, 31, 32,
0, 0, 11, 12, 14, 15, 16, 21, 23, 25,
26, 27, 28, 29, 33, 34, 105, 0, 0, 13,
0, 0, 0, 24, 174, 30, 0, 0, 31, 32,
0, 0, 0, 0, 0, 105, 0, 0, 0, 0,
0, 0, 87, 89, 90, 0, 91, 92, 93, 94,
95, 96, 97, 98, 99, 100, 0, 101, 102, 104,
88, 87, 89, 90, 0, 91, 92, 93, 94, 95,
96, 97, 98, 99, 100, 274, 101, 102, 104, 88,
105, 0, 273, 0, 103, 0, 277, 278, 276, 283,
285, 282, 284, 279, 280, 281, 0, 0, 0, 105,
0, 0, 0, 103, 0, 0, 87, 89, 90, 0,
91, 92, 93, 0, 95, 96, 97, 98, 99, 100,
0, 101, 102, 104, 88, 87, 89, 90, 0, 91,
92, 0, 0, 95, 96, 0, 98, 99, 100, 0,
101, 102, 104, 88, 0, 0, 0, 0, 103, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 103, 0, 0, 0, 0, 0, 0, 0, 103,
} }
var yyPact = [...]int16{ var yyPact = [...]int16{
16, 175, 500, 500, 154, 470, -1000, -1000, -1000, 174, 16, 168, 501, 501, 155, 471, -1000, -1000, -1000, 153,
-1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000,
-1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000,
-1000, -1000, -1000, -1000, -1000, 273, -1000, 209, -1000, 580, -1000, -1000, -1000, -1000, -1000, 195, -1000, 229, -1000, 581,
-1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000,
-1000, -1000, 22, 155, -1000, -1000, 365, -1000, 365, 165, -1000, -1000, 22, 99, -1000, -1000, 366, -1000, 366, 125,
-1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000,
-1000, -1000, -1000, -1000, -1000, -1000, -1000, 172, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 264, -1000, -1000,
275, -1000, -1000, 261, -1000, 24, -1000, -54, -54, -54, 324, -1000, -1000, 260, -1000, 24, -1000, -54, -54, -54,
-54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, -54,
-54, -54, -54, 37, 43, 292, 155, -57, -1000, 284, -54, -54, -54, 37, 43, 268, 99, -57, -1000, 297,
284, 7, -1000, 561, 35, -1000, 179, -1000, -1000, 191, 297, 7, -1000, 562, 35, -1000, 317, -1000, -1000, 187,
80, -1000, -1000, -1000, 112, -1000, 205, -1000, 268, 365, 80, -1000, -1000, -1000, 120, -1000, 175, -1000, 269, 366,
-1000, -50, -45, -1000, 365, 365, 365, 365, 365, 365, -1000, -50, -45, -1000, 366, 366, 366, 366, 366, 366,
365, 365, 365, 365, 365, 365, 365, 365, 365, -1000, 366, 366, 366, 366, 366, 366, 366, 366, 366, -1000,
107, -1000, -1000, 125, -1000, -1000, -1000, -1000, -1000, -1000, 225, -1000, -1000, 44, -1000, -1000, -1000, -1000, -1000, -1000,
99, 99, 270, -1000, -1000, -1000, -1000, 398, -1000, -1000, -1000, 107, 107, 284, -1000, -1000, -1000, -1000, 399, -1000,
105, -1000, 580, -1000, -1000, 163, -1000, 189, -1000, -1000, -1000, 172, -1000, 581, -1000, -1000, 173, -1000, 157, -1000,
-1000, -1000, -1000, 86, -1000, -1000, -1000, -1000, -1000, 18, -1000, -1000, -1000, -1000, 86, -1000, -1000, -1000, -1000, -1000,
150, 142, -1000, -1000, -1000, 617, 443, 284, 284, 284, 18, 143, 132, -1000, -1000, -1000, 618, 444, 297, 297,
284, 35, 35, 46, 46, 46, 644, 625, 46, 46, 297, 297, 35, 35, 46, 46, 46, 645, 626, 46,
644, 35, 35, 46, 35, 443, -1000, 33, -1000, -1000, 46, 645, 35, 35, 46, 35, 444, -1000, 28, -1000,
-1000, 262, -1000, 267, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 273, -1000, 174, -1000, -1000, -1000, -1000, -1000,
-1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000,
-1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000,
-1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 365, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 366,
-1000, -1000, -1000, -1000, -1000, 119, 119, 15, 119, 89, -1000, -1000, -1000, -1000, -1000, -1000, 32, 32, 15, 32,
89, 41, 42, -1000, -1000, 255, 237, 234, 231, 229, 96, 96, 41, 38, -1000, -1000, 255, 232, 230, 208,
227, 207, 199, 196, 190, -1000, -1000, -1000, -1000, -1000, 206, 200, 197, 181, 180, 178, -1000, -1000, -1000, -1000,
-1000, 40, -1000, -1000, -1000, 288, -1000, 580, -1000, -1000, -1000, -1000, 40, -1000, -1000, -1000, 289, -1000, 581, -1000,
-1000, 119, -1000, 14, 12, 474, -1000, -1000, -1000, 103, -1000, -1000, 32, -1000, 14, 12, 475, -1000, -1000, -1000,
11, 99, 99, 99, 157, 157, 103, 157, 103, -1000, 11, 152, 107, 107, 107, 104, 104, 11, 104, 11,
-1000, -1000, -1000, -1000, 119, 119, -1000, -1000, -1000, 119, -1000, -1000, -1000, -1000, -1000, 32, 32, -1000, -1000, -1000,
-1000, -1000, -1000, -1000, -1000, -1000, 99, -1000, -1000, -1000, 32, -1000, -1000, -1000, -1000, -1000, -1000, 107, -1000, -1000,
-1000, -1000, -1000, -1000, 156, -1000, 31, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 103, -1000, 274, -1000, -1000,
-1000, -1000, -1000,
} }
var yyPgo = [...]int16{ var yyPgo = [...]int16{
0, 385, 13, 382, 6, 15, 381, 325, 379, 373, 0, 390, 13, 389, 6, 15, 388, 330, 387, 386,
372, 229, 332, 364, 14, 363, 10, 11, 348, 345, 383, 235, 341, 382, 14, 380, 10, 11, 374, 373,
8, 344, 3, 4, 343, 2, 1, 0, 342, 12, 8, 365, 3, 4, 364, 2, 1, 0, 349, 12,
5, 341, 340, 17, 157, 339, 333, 7, 330, 323, 5, 346, 343, 17, 157, 342, 340, 7, 329, 318,
28, 318, 36, 317, 9, 315, 307, 305, 304, 297, 28, 316, 36, 308, 9, 306, 300, 298, 297, 273,
296, 292, 288, 262, 272, 296, 265, 263,
} }
var yyR1 = [...]int8{ var yyR1 = [...]int8{
@ -540,8 +540,8 @@ var yyR1 = [...]int8{
6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
6, 6, 6, 6, 6, 6, 6, 6, 8, 8, 6, 6, 6, 6, 6, 6, 6, 6, 8, 8,
5, 5, 5, 5, 44, 44, 27, 29, 29, 30, 5, 5, 5, 5, 44, 44, 27, 27, 29, 29,
30, 26, 25, 25, 48, 10, 17, 17, 30, 30, 26, 25, 25, 48, 10, 17, 17,
} }
var yyR2 = [...]int8{ var yyR2 = [...]int8{
@ -567,8 +567,8 @@ var yyR2 = [...]int8{
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2,
1, 1, 2, 1, 1, 1, 0, 1, 1, 1, 1, 2, 1, 1, 1, 0, 1,
} }
var yyChk = [...]int16{ var yyChk = [...]int16{
@ -588,26 +588,26 @@ var yyChk = [...]int16{
-41, -36, -46, 77, -34, -34, -34, -34, -34, -34, -41, -36, -46, 77, -34, -34, -34, -34, -34, -34,
-34, -34, -34, -34, -34, -34, -34, -34, -34, -44, -34, -34, -34, -34, -34, -34, -34, -34, -34, -44,
56, 2, -30, -9, 2, -27, -29, 87, 88, 19, 56, 2, -30, -9, 2, -27, -29, 87, 88, 19,
40, 56, -44, 2, -40, -33, -16, 15, 2, -16, 9, 40, 56, -44, 2, -40, -33, -16, 15, 2,
-39, 22, -37, 22, 20, 7, 2, -5, 2, 4, -16, -39, 22, -37, 22, 20, 7, 2, -5, 2,
53, 43, 54, -5, 20, -14, 25, 2, -18, 5, 4, 53, 43, 54, -5, 20, -14, 25, 2, -18,
-28, -20, 12, -27, -29, 16, -37, 81, 83, 79, 5, -28, -20, 12, -27, -29, 16, -37, 81, 83,
80, -37, -37, -37, -37, -37, -37, -37, -37, -37, 79, 80, -37, -37, -37, -37, -37, -37, -37, -37,
-37, -37, -37, -37, -37, -37, -44, 15, -27, -27, -37, -37, -37, -37, -37, -37, -37, -44, 15, -27,
21, 6, 2, -15, 22, -4, -6, 2, 61, 77, -27, 21, 6, 2, -15, 22, -4, -6, 2, 61,
62, 78, 63, 64, 65, 79, 80, 12, 81, 46, 77, 62, 78, 63, 64, 65, 79, 80, 12, 81,
47, 50, 66, 18, 67, 82, 83, 68, 69, 70, 46, 47, 50, 66, 18, 67, 82, 83, 68, 69,
71, 72, 87, 88, 58, 73, 74, 22, 7, 20, 70, 71, 72, 87, 88, 58, 73, 74, 22, 7,
-2, 25, 2, 25, 2, 26, 26, -29, 26, 40, 20, -2, 25, 2, 25, 2, 26, 26, -29, 26,
56, -21, 24, 17, -22, 30, 28, 29, 35, 36, 40, 56, -21, 24, 17, -22, 30, 28, 29, 35,
37, 33, 31, 34, 32, -16, -16, -17, -16, -17, 36, 37, 33, 31, 34, 32, -16, -16, -17, -16,
22, -44, 21, 2, 22, 7, 2, -37, -26, 19, -17, 22, -44, 21, 2, 22, 7, 2, -37, -26,
-26, 26, -26, -20, -20, 24, 17, 2, 17, 6, 19, -26, 26, -26, -20, -20, 24, 17, 2, 17,
6, 6, 6, 6, 6, 6, 6, 6, 6, 21, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
2, 22, -4, -26, 26, 26, 17, -22, -25, 56, 21, 2, 22, -4, -26, 26, 26, 17, -22, -25,
-26, -30, -27, -27, -27, -23, 14, -23, -25, -23, 56, -26, -30, -27, -27, -27, -23, 14, -23, -25,
-25, -26, -26, -26, -24, -27, 24, 21, 2, 21, -23, -25, -26, -26, -26, -24, -27, 24, 21, 2,
-27, 21, -27,
} }
var yyDef = [...]int16{ var yyDef = [...]int16{
@ -616,37 +616,37 @@ var yyDef = [...]int16{
110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119,
120, 121, 122, 123, 124, 0, 2, -2, 3, 4, 120, 121, 122, 123, 124, 0, 2, -2, 3, 4,
8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17,
18, 19, 0, 107, 224, 225, 0, 234, 0, 84, 18, 19, 0, 107, 224, 225, 0, 235, 0, 84,
85, -2, -2, -2, -2, -2, -2, -2, -2, -2, 85, -2, -2, -2, -2, -2, -2, -2, -2, -2,
-2, -2, -2, -2, -2, 218, 219, 0, 5, 99, -2, -2, -2, -2, -2, 218, 219, 0, 5, 99,
0, 127, 130, 0, 135, 136, 140, 43, 43, 43, 0, 127, 130, 0, 135, 136, 140, 43, 43, 43,
43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43,
43, 43, 43, 0, 0, 0, 0, 22, 23, 0, 43, 43, 43, 0, 0, 0, 0, 22, 23, 0,
0, 0, 60, 0, 82, 83, 0, 88, 90, 0, 0, 0, 60, 0, 82, 83, 0, 88, 90, 0,
94, 98, 235, 125, 0, 131, 0, 134, 139, 0, 94, 98, 236, 125, 0, 131, 0, 134, 139, 0,
42, 47, 48, 44, 0, 0, 0, 0, 0, 0, 42, 47, 48, 44, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67,
0, 69, 70, 0, 72, 229, 230, 73, 74, 226, 0, 69, 70, 0, 72, 230, 231, 73, 74, 226,
0, 0, 0, 81, 20, 21, 24, 0, 54, 25, 227, 0, 0, 0, 81, 20, 21, 24, 0, 54,
0, 62, 64, 66, 86, 0, 91, 0, 97, 220, 25, 0, 62, 64, 66, 86, 0, 91, 0, 97,
221, 222, 223, 0, 126, 129, 132, 133, 138, 141, 220, 221, 222, 223, 0, 126, 129, 132, 133, 138,
143, 146, 150, 151, 152, 0, 26, 0, 0, -2, 141, 143, 146, 150, 151, 152, 0, 26, 0, 0,
-2, 27, 28, 29, 30, 31, 32, 33, 34, 35, -2, -2, 27, 28, 29, 30, 31, 32, 33, 34,
36, 37, 38, 39, 40, 41, 68, 0, 227, 228, 35, 36, 37, 38, 39, 40, 41, 68, 0, 228,
75, 0, 80, 0, 53, 56, 58, 59, 189, 190, 229, 75, 0, 80, 0, 53, 56, 58, 59, 189,
191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199,
201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209,
211, 212, 213, 214, 215, 216, 217, 61, 65, 87, 210, 211, 212, 213, 214, 215, 216, 217, 61, 65,
89, 92, 96, 93, 95, 0, 0, 0, 0, 0, 87, 89, 92, 96, 93, 95, 0, 0, 0, 0,
0, 0, 0, 156, 158, 0, 0, 0, 0, 0, 0, 0, 0, 0, 156, 158, 0, 0, 0, 0,
0, 0, 0, 0, 0, 45, 46, 49, 237, 50, 0, 0, 0, 0, 0, 0, 45, 46, 49, 238,
71, 0, 77, 79, 51, 0, 57, 63, 142, 231, 50, 71, 0, 77, 79, 51, 0, 57, 63, 142,
144, 0, 147, 0, 0, 0, 154, 159, 155, 0, 232, 144, 0, 147, 0, 0, 0, 154, 159, 155,
0, 0, 0, 0, 0, 0, 0, 0, 0, 76, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
78, 52, 55, 145, 0, 0, 153, 157, 160, 0, 76, 78, 52, 55, 145, 0, 0, 153, 157, 160,
233, 161, 162, 163, 164, 165, 0, 166, 167, 168, 0, 234, 161, 162, 163, 164, 165, 0, 166, 167,
169, 148, 149, 232, 0, 173, 0, 171, 174, 170, 168, 169, 148, 149, 233, 0, 173, 0, 171, 174,
172, 170, 172,
} }
var yyTok1 = [...]int8{ var yyTok1 = [...]int8{
@ -1308,7 +1308,7 @@ yydefault:
case 69: case 69:
yyDollar = yyS[yypt-3 : yypt+1] yyDollar = yyS[yypt-3 : yypt+1]
{ {
yylex.(*parser).unexpected("offset", "integer or duration") yylex.(*parser).unexpected("offset", "number or duration")
yyVAL.node = yyDollar[1].node yyVAL.node = yyDollar[1].node
} }
case 70: case 70:
@ -1386,7 +1386,7 @@ yydefault:
case 79: case 79:
yyDollar = yyS[yypt-5 : yypt+1] yyDollar = yyS[yypt-5 : yypt+1]
{ {
yylex.(*parser).unexpected("subquery selector", "number/duration or \"]\"") yylex.(*parser).unexpected("subquery selector", "number or duration or \"]\"")
yyVAL.node = yyDollar[1].node yyVAL.node = yyDollar[1].node
} }
case 80: case 80:
@ -1398,7 +1398,7 @@ yydefault:
case 81: case 81:
yyDollar = yyS[yypt-3 : yypt+1] yyDollar = yyS[yypt-3 : yypt+1]
{ {
yylex.(*parser).unexpected("subquery selector", "number/duration") yylex.(*parser).unexpected("subquery selector", "number or duration")
yyVAL.node = yyDollar[1].node yyVAL.node = yyDollar[1].node
} }
case 82: case 82:
@ -1847,16 +1847,27 @@ yydefault:
yyVAL.float = yylex.(*parser).number(yyDollar[1].item.Val) yyVAL.float = yylex.(*parser).number(yyDollar[1].item.Val)
} }
case 227: case 227:
yyDollar = yyS[yypt-2 : yypt+1] yyDollar = yyS[yypt-1 : yypt+1]
{ {
yyVAL.float = yyDollar[2].float var err error
var dur time.Duration
dur, err = parseDuration(yyDollar[1].item.Val)
if err != nil {
yylex.(*parser).addParseErr(yyDollar[1].item.PositionRange(), err)
}
yyVAL.float = dur.Seconds()
} }
case 228: case 228:
yyDollar = yyS[yypt-2 : yypt+1]
{
yyVAL.float = yyDollar[2].float
}
case 229:
yyDollar = yyS[yypt-2 : yypt+1] yyDollar = yyS[yypt-2 : yypt+1]
{ {
yyVAL.float = -yyDollar[2].float yyVAL.float = -yyDollar[2].float
} }
case 231: case 232:
yyDollar = yyS[yypt-1 : yypt+1] yyDollar = yyS[yypt-1 : yypt+1]
{ {
var err error var err error
@ -1865,17 +1876,17 @@ yydefault:
yylex.(*parser).addParseErrf(yyDollar[1].item.PositionRange(), "invalid repetition in series values: %s", err) yylex.(*parser).addParseErrf(yyDollar[1].item.PositionRange(), "invalid repetition in series values: %s", err)
} }
} }
case 232: case 233:
yyDollar = yyS[yypt-2 : yypt+1] yyDollar = yyS[yypt-2 : yypt+1]
{ {
yyVAL.int = -int64(yyDollar[2].uint) yyVAL.int = -int64(yyDollar[2].uint)
} }
case 233: case 234:
yyDollar = yyS[yypt-1 : yypt+1] yyDollar = yyS[yypt-1 : yypt+1]
{ {
yyVAL.int = int64(yyDollar[1].uint) yyVAL.int = int64(yyDollar[1].uint)
} }
case 234: case 235:
yyDollar = yyS[yypt-1 : yypt+1] yyDollar = yyS[yypt-1 : yypt+1]
{ {
yyVAL.node = &StringLiteral{ yyVAL.node = &StringLiteral{
@ -1883,7 +1894,7 @@ yydefault:
PosRange: yyDollar[1].item.PositionRange(), PosRange: yyDollar[1].item.PositionRange(),
} }
} }
case 235: case 236:
yyDollar = yyS[yypt-1 : yypt+1] yyDollar = yyS[yypt-1 : yypt+1]
{ {
yyVAL.item = Item{ yyVAL.item = Item{
@ -1892,7 +1903,7 @@ yydefault:
Val: yylex.(*parser).unquoteString(yyDollar[1].item.Val), Val: yylex.(*parser).unquoteString(yyDollar[1].item.Val),
} }
} }
case 236: case 237:
yyDollar = yyS[yypt-0 : yypt+1] yyDollar = yyS[yypt-0 : yypt+1]
{ {
yyVAL.strings = nil yyVAL.strings = nil

View file

@ -969,7 +969,7 @@ func (l *Lexer) scanNumber() bool {
// Handle digits at the end since we already consumed before this loop. // Handle digits at the end since we already consumed before this loop.
l.acceptRun(digitPattern) l.acceptRun(digitPattern)
} }
// empty string is not a valid number // Empty string is not a valid number.
if l.pos == initialPos { if l.pos == initialPos {
return false return false
} }

View file

@ -2278,6 +2278,24 @@ var testExpr = []struct {
EndPos: 7, EndPos: 7,
}, },
}, },
{
input: `some_metric[5m] @ 1m`,
expected: &MatrixSelector{
VectorSelector: &VectorSelector{
Name: "some_metric",
Timestamp: makeInt64Pointer(60000),
LabelMatchers: []*labels.Matcher{
MustLabelMatcher(labels.MatchEqual, model.MetricNameLabel, "some_metric"),
},
PosRange: posrange.PositionRange{
Start: 0,
End: 11,
},
},
Range: 5 * time.Minute,
EndPos: 20,
},
},
{ {
input: `foo[5mm]`, input: `foo[5mm]`,
fail: true, fail: true,
@ -2335,18 +2353,13 @@ var testExpr = []struct {
{ {
input: `some_metric[5m] OFFSET`, input: `some_metric[5m] OFFSET`,
fail: true, fail: true,
errMsg: "unexpected end of input in offset, expected integer or duration", errMsg: "unexpected end of input in offset, expected number or duration",
}, },
{ {
input: `some_metric OFFSET 1m[5m]`, input: `some_metric OFFSET 1m[5m]`,
fail: true, fail: true,
errMsg: "1:22: parse error: no offset modifiers allowed before range", errMsg: "1:22: parse error: no offset modifiers allowed before range",
}, },
{
input: `some_metric[5m] @ 1m`,
fail: true,
errMsg: "1:19: parse error: unexpected duration \"1m\" in @, expected timestamp",
},
{ {
input: `some_metric[5m] @`, input: `some_metric[5m] @`,
fail: true, fail: true,
@ -3031,6 +3044,11 @@ var testExpr = []struct {
errMsg: "illegal character U+002E '.' in escape sequence", errMsg: "illegal character U+002E '.' in escape sequence",
}, },
// Subquery. // Subquery.
{
input: `foo{bar="baz"}[`,
fail: true,
errMsg: `1:16: parse error: bad number or duration syntax: ""`,
},
{ {
input: `foo{bar="baz"}[10m:6s]`, input: `foo{bar="baz"}[10m:6s]`,
expected: &SubqueryExpr{ expected: &SubqueryExpr{

View file

@ -10,6 +10,14 @@ eval instant at 10s metric @ 100
metric{job="1"} 10 metric{job="1"} 10
metric{job="2"} 20 metric{job="2"} 20
eval instant at 10s metric @ 100s
metric{job="1"} 10
metric{job="2"} 20
eval instant at 10s metric @ 1m40s
metric{job="1"} 10
metric{job="2"} 20
eval instant at 10s metric @ 100 offset 50s eval instant at 10s metric @ 100 offset 50s
metric{job="1"} 5 metric{job="1"} 5
metric{job="2"} 10 metric{job="2"} 10