prometheus/promql/parser/generated_parser.y.go
György Krajcsovits 2f144dd3ad feat(promql): offset from static time expression
Related to #12318 .

Allow using a PromQL expression for setting the offset, provided that:

the expression evaluates to a scalar
the expression does not contain vector selector (no TSDB access)
the expression does not call the info() function (no TSDB access)
the time() function is only called on the top level of the expression,
  not inside a subquery

We'll call such expression a time expression.

During parsing we no longer set OriginalOffset field in sub-queries and
vector selectors, instead we set a new OriginalOffsetExpr field to the
time expression, even if the expression is a literal number.

Before evaluating the overall PromQL expression, the engine shall
evaluate the time expressions and set the OriginalOffset field in vector
selectors and subqueries to the calculated value. This makes the change
fairly non intrusive. Later we can change the code to start using the
expression more directly. Note: this prohibits using time() function
inside a sub-query as the evaluation time is not constant inside a
sub-query.

Signed-off-by: György Krajcsovits <gyorgy.krajcsovits@grafana.com>
2025-02-03 13:08:35 +01:00

1986 lines
49 KiB
Go

// Code generated by goyacc -l -o promql/parser/generated_parser.y.go promql/parser/generated_parser.y. DO NOT EDIT.
package parser
import __yyfmt__ "fmt"
import (
"math"
"strconv"
"time"
"github.com/prometheus/prometheus/model/histogram"
"github.com/prometheus/prometheus/model/labels"
"github.com/prometheus/prometheus/model/value"
"github.com/prometheus/prometheus/promql/parser/posrange"
"github.com/prometheus/common/model"
)
type yySymType struct {
yys int
node Node
item Item
matchers []*labels.Matcher
matcher *labels.Matcher
label labels.Label
labels labels.Labels
lblList []labels.Label
strings []string
series []SequenceValue
histogram *histogram.FloatHistogram
descriptors map[string]interface{}
bucket_set []float64
int int64
uint uint64
float float64
}
const EQL = 57346
const BLANK = 57347
const COLON = 57348
const COMMA = 57349
const COMMENT = 57350
const DURATION = 57351
const EOF = 57352
const ERROR = 57353
const IDENTIFIER = 57354
const LEFT_BRACE = 57355
const LEFT_BRACKET = 57356
const LEFT_PAREN = 57357
const OPEN_HIST = 57358
const CLOSE_HIST = 57359
const METRIC_IDENTIFIER = 57360
const NUMBER = 57361
const RIGHT_BRACE = 57362
const RIGHT_BRACKET = 57363
const RIGHT_PAREN = 57364
const SEMICOLON = 57365
const SPACE = 57366
const STRING = 57367
const TIMES = 57368
const histogramDescStart = 57369
const SUM_DESC = 57370
const COUNT_DESC = 57371
const SCHEMA_DESC = 57372
const OFFSET_DESC = 57373
const NEGATIVE_OFFSET_DESC = 57374
const BUCKETS_DESC = 57375
const NEGATIVE_BUCKETS_DESC = 57376
const ZERO_BUCKET_DESC = 57377
const ZERO_BUCKET_WIDTH_DESC = 57378
const CUSTOM_VALUES_DESC = 57379
const COUNTER_RESET_HINT_DESC = 57380
const histogramDescEnd = 57381
const operatorsStart = 57382
const ADD = 57383
const DIV = 57384
const EQLC = 57385
const EQL_REGEX = 57386
const GTE = 57387
const GTR = 57388
const LAND = 57389
const LOR = 57390
const LSS = 57391
const LTE = 57392
const LUNLESS = 57393
const MOD = 57394
const MUL = 57395
const NEQ = 57396
const NEQ_REGEX = 57397
const POW = 57398
const SUB = 57399
const AT = 57400
const ATAN2 = 57401
const operatorsEnd = 57402
const aggregatorsStart = 57403
const AVG = 57404
const BOTTOMK = 57405
const COUNT = 57406
const COUNT_VALUES = 57407
const GROUP = 57408
const MAX = 57409
const MIN = 57410
const QUANTILE = 57411
const STDDEV = 57412
const STDVAR = 57413
const SUM = 57414
const TOPK = 57415
const LIMITK = 57416
const LIMIT_RATIO = 57417
const aggregatorsEnd = 57418
const keywordsStart = 57419
const BOOL = 57420
const BY = 57421
const GROUP_LEFT = 57422
const GROUP_RIGHT = 57423
const IGNORING = 57424
const OFFSET = 57425
const ON = 57426
const WITHOUT = 57427
const keywordsEnd = 57428
const preprocessorStart = 57429
const START = 57430
const END = 57431
const preprocessorEnd = 57432
const counterResetHintsStart = 57433
const UNKNOWN_COUNTER_RESET = 57434
const COUNTER_RESET = 57435
const NOT_COUNTER_RESET = 57436
const GAUGE_TYPE = 57437
const counterResetHintsEnd = 57438
const startSymbolsStart = 57439
const START_METRIC = 57440
const START_SERIES_DESCRIPTION = 57441
const START_EXPRESSION = 57442
const START_METRIC_SELECTOR = 57443
const startSymbolsEnd = 57444
var yyToknames = [...]string{
"$end",
"error",
"$unk",
"EQL",
"BLANK",
"COLON",
"COMMA",
"COMMENT",
"DURATION",
"EOF",
"ERROR",
"IDENTIFIER",
"LEFT_BRACE",
"LEFT_BRACKET",
"LEFT_PAREN",
"OPEN_HIST",
"CLOSE_HIST",
"METRIC_IDENTIFIER",
"NUMBER",
"RIGHT_BRACE",
"RIGHT_BRACKET",
"RIGHT_PAREN",
"SEMICOLON",
"SPACE",
"STRING",
"TIMES",
"histogramDescStart",
"SUM_DESC",
"COUNT_DESC",
"SCHEMA_DESC",
"OFFSET_DESC",
"NEGATIVE_OFFSET_DESC",
"BUCKETS_DESC",
"NEGATIVE_BUCKETS_DESC",
"ZERO_BUCKET_DESC",
"ZERO_BUCKET_WIDTH_DESC",
"CUSTOM_VALUES_DESC",
"COUNTER_RESET_HINT_DESC",
"histogramDescEnd",
"operatorsStart",
"ADD",
"DIV",
"EQLC",
"EQL_REGEX",
"GTE",
"GTR",
"LAND",
"LOR",
"LSS",
"LTE",
"LUNLESS",
"MOD",
"MUL",
"NEQ",
"NEQ_REGEX",
"POW",
"SUB",
"AT",
"ATAN2",
"operatorsEnd",
"aggregatorsStart",
"AVG",
"BOTTOMK",
"COUNT",
"COUNT_VALUES",
"GROUP",
"MAX",
"MIN",
"QUANTILE",
"STDDEV",
"STDVAR",
"SUM",
"TOPK",
"LIMITK",
"LIMIT_RATIO",
"aggregatorsEnd",
"keywordsStart",
"BOOL",
"BY",
"GROUP_LEFT",
"GROUP_RIGHT",
"IGNORING",
"OFFSET",
"ON",
"WITHOUT",
"keywordsEnd",
"preprocessorStart",
"START",
"END",
"preprocessorEnd",
"counterResetHintsStart",
"UNKNOWN_COUNTER_RESET",
"COUNTER_RESET",
"NOT_COUNTER_RESET",
"GAUGE_TYPE",
"counterResetHintsEnd",
"startSymbolsStart",
"START_METRIC",
"START_SERIES_DESCRIPTION",
"START_EXPRESSION",
"START_METRIC_SELECTOR",
"startSymbolsEnd",
}
var yyStatenames = [...]string{}
const yyEofCode = 1
const yyErrCode = 2
const yyInitialStackSize = 16
var yyExca = [...]int16{
-1, 1,
1, -1,
-2, 0,
-1, 37,
1, 142,
10, 142,
24, 142,
-2, 0,
-1, 61,
2, 185,
15, 185,
79, 185,
85, 185,
-2, 103,
-1, 62,
2, 186,
15, 186,
79, 186,
85, 186,
-2, 104,
-1, 63,
2, 187,
15, 187,
79, 187,
85, 187,
-2, 106,
-1, 64,
2, 188,
15, 188,
79, 188,
85, 188,
-2, 107,
-1, 65,
2, 189,
15, 189,
79, 189,
85, 189,
-2, 108,
-1, 66,
2, 190,
15, 190,
79, 190,
85, 190,
-2, 113,
-1, 67,
2, 191,
15, 191,
79, 191,
85, 191,
-2, 115,
-1, 68,
2, 192,
15, 192,
79, 192,
85, 192,
-2, 117,
-1, 69,
2, 193,
15, 193,
79, 193,
85, 193,
-2, 118,
-1, 70,
2, 194,
15, 194,
79, 194,
85, 194,
-2, 119,
-1, 71,
2, 195,
15, 195,
79, 195,
85, 195,
-2, 120,
-1, 72,
2, 196,
15, 196,
79, 196,
85, 196,
-2, 121,
-1, 73,
2, 197,
15, 197,
79, 197,
85, 197,
-2, 125,
-1, 74,
2, 198,
15, 198,
79, 198,
85, 198,
-2, 126,
-1, 205,
9, 247,
12, 247,
13, 247,
18, 247,
19, 247,
25, 247,
41, 247,
47, 247,
48, 247,
51, 247,
57, 247,
62, 247,
63, 247,
64, 247,
65, 247,
66, 247,
67, 247,
68, 247,
69, 247,
70, 247,
71, 247,
72, 247,
73, 247,
74, 247,
75, 247,
79, 247,
83, 247,
85, 247,
88, 247,
89, 247,
-2, 0,
-1, 206,
9, 247,
12, 247,
13, 247,
18, 247,
19, 247,
25, 247,
41, 247,
47, 247,
48, 247,
51, 247,
57, 247,
62, 247,
63, 247,
64, 247,
65, 247,
66, 247,
67, 247,
68, 247,
69, 247,
70, 247,
71, 247,
72, 247,
73, 247,
74, 247,
75, 247,
79, 247,
83, 247,
85, 247,
88, 247,
89, 247,
-2, 0,
}
const yyPrivate = 57344
const yyLast = 804
var yyAct = [...]int16{
155, 339, 337, 158, 344, 231, 39, 197, 281, 44,
296, 295, 84, 120, 82, 234, 181, 109, 108, 46,
351, 352, 353, 354, 111, 244, 110, 159, 205, 206,
112, 250, 203, 6, 204, 330, 135, 362, 233, 113,
334, 333, 309, 272, 60, 154, 271, 269, 298, 130,
157, 307, 55, 316, 201, 329, 361, 163, 56, 360,
246, 247, 54, 115, 248, 116, 107, 162, 307, 270,
268, 114, 261, 223, 328, 235, 237, 239, 240, 241,
249, 251, 254, 255, 256, 257, 258, 262, 263, 164,
122, 236, 238, 242, 243, 245, 252, 253, 265, 315,
152, 259, 260, 111, 117, 165, 338, 304, 103, 112,
106, 172, 303, 264, 314, 151, 113, 166, 193, 191,
176, 313, 170, 173, 171, 153, 168, 302, 169, 2,
3, 4, 5, 107, 199, 105, 160, 161, 202, 187,
189, 192, 190, 207, 208, 209, 210, 211, 212, 213,
214, 215, 216, 217, 218, 219, 220, 221, 200, 345,
89, 91, 222, 77, 163, 35, 183, 275, 224, 225,
7, 100, 101, 163, 162, 103, 104, 106, 90, 273,
228, 234, 276, 162, 227, 363, 327, 182, 326, 183,
123, 244, 122, 267, 164, 131, 164, 250, 277, 226,
121, 230, 105, 325, 233, 164, 185, 324, 266, 163,
165, 323, 165, 86, 293, 294, 184, 186, 297, 162,
322, 165, 55, 10, 274, 321, 246, 247, 320, 185,
248, 319, 54, 79, 318, 317, 129, 299, 261, 184,
186, 235, 237, 239, 240, 241, 249, 251, 254, 255,
256, 257, 258, 262, 263, 85, 88, 236, 238, 242,
243, 245, 252, 253, 301, 83, 36, 259, 260, 1,
50, 55, 305, 188, 306, 308, 78, 310, 86, 49,
128, 54, 127, 300, 311, 312, 136, 137, 138, 139,
140, 141, 142, 143, 144, 145, 146, 147, 148, 149,
150, 195, 8, 48, 47, 163, 37, 167, 198, 331,
134, 332, 201, 180, 55, 162, 123, 45, 179, 340,
341, 342, 336, 43, 54, 343, 121, 347, 346, 349,
348, 178, 132, 174, 119, 355, 356, 164, 55, 86,
357, 53, 77, 42, 56, 85, 359, 22, 54, 133,
41, 175, 40, 165, 57, 83, 59, 126, 51, 9,
9, 364, 125, 81, 196, 358, 278, 87, 86, 194,
75, 229, 80, 350, 156, 124, 18, 19, 58, 232,
20, 52, 118, 0, 0, 0, 76, 0, 0, 0,
0, 61, 62, 63, 64, 65, 66, 67, 68, 69,
70, 71, 72, 73, 74, 0, 0, 0, 13, 0,
0, 0, 24, 0, 30, 0, 0, 31, 32, 55,
38, 107, 53, 77, 0, 56, 280, 0, 22, 54,
0, 0, 0, 279, 0, 57, 0, 283, 284, 282,
289, 291, 288, 290, 285, 286, 287, 292, 0, 91,
0, 75, 0, 0, 0, 0, 0, 18, 19, 100,
101, 20, 0, 103, 0, 106, 90, 76, 0, 0,
0, 0, 61, 62, 63, 64, 65, 66, 67, 68,
69, 70, 71, 72, 73, 74, 0, 0, 0, 13,
105, 0, 0, 24, 0, 30, 0, 55, 31, 32,
53, 77, 0, 56, 335, 0, 22, 54, 0, 0,
0, 0, 0, 57, 0, 283, 284, 282, 289, 291,
288, 290, 285, 286, 287, 292, 0, 0, 0, 75,
0, 0, 0, 0, 0, 18, 19, 0, 0, 20,
0, 0, 0, 17, 77, 76, 0, 0, 0, 22,
61, 62, 63, 64, 65, 66, 67, 68, 69, 70,
71, 72, 73, 74, 0, 0, 0, 13, 0, 0,
0, 24, 0, 30, 0, 0, 31, 32, 18, 19,
0, 0, 20, 0, 0, 0, 17, 35, 0, 0,
0, 0, 22, 11, 12, 14, 15, 16, 21, 23,
25, 26, 27, 28, 29, 33, 34, 0, 0, 0,
13, 0, 0, 0, 24, 0, 30, 0, 0, 31,
32, 18, 19, 0, 0, 20, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 11, 12, 14, 15,
16, 21, 23, 25, 26, 27, 28, 29, 33, 34,
107, 0, 0, 13, 0, 0, 0, 24, 177, 30,
0, 0, 31, 32, 0, 0, 0, 0, 0, 107,
0, 0, 0, 0, 0, 0, 0, 89, 91, 92,
0, 93, 94, 95, 96, 97, 98, 99, 100, 101,
102, 0, 103, 104, 106, 90, 89, 91, 92, 0,
93, 94, 95, 96, 97, 98, 99, 100, 101, 102,
0, 103, 104, 106, 90, 107, 0, 0, 0, 105,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 107, 0, 0, 0, 105, 0,
0, 0, 89, 91, 92, 0, 93, 94, 95, 0,
97, 98, 99, 100, 101, 102, 0, 103, 104, 106,
90, 89, 91, 92, 0, 93, 94, 0, 0, 97,
98, 0, 100, 101, 102, 0, 103, 104, 106, 90,
0, 0, 0, 0, 105, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 105,
}
var yyPact = [...]int16{
31, 160, 574, 574, 410, 531, -1000, -1000, -1000, 152,
-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, 343, -1000, 254, -1000, 655,
-1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000,
-1000, -1000, 24, 101, -1000, -1000, 488, -1000, 488, 150,
-1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000,
-1000, -1000, -1000, -1000, -1000, -1000, -1000, 314, -1000, -1000,
355, -1000, -1000, 278, 232, -1000, -1000, 25, -1000, -42,
-42, -42, -42, -42, -42, -42, -42, -42, -42, -42,
-42, -42, -42, -42, -42, 43, 48, 305, 101, -55,
-1000, 109, 109, 329, -1000, 636, 52, -1000, 311, -1000,
-1000, 185, 162, -1000, -1000, 253, -1000, 117, -1000, 116,
296, 488, -1000, -50, -52, -1000, 488, 488, 488, 488,
488, 488, 488, 488, 488, 488, 488, 488, 488, 488,
488, -1000, 213, -1000, -1000, -1000, 58, -1000, -1000, -1000,
-1000, -1000, -1000, -1000, 200, 200, 178, -1000, -1000, -1000,
-1000, 179, -1000, -1000, 91, -1000, 655, -1000, -1000, 188,
-1000, 45, -1000, -1000, -1000, -1000, -1000, 44, -1000, -1000,
-1000, -1000, -1000, -1000, -1000, 17, 153, 141, -1000, -1000,
-1000, 409, 407, 109, 109, 109, 109, 52, 52, 119,
119, 119, 720, 701, 119, 119, 720, 52, 52, 119,
52, 407, -1000, 26, -1000, -1000, -1000, 262, -1000, 105,
-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, 488, -1000, -1000, -1000, -1000,
-1000, -1000, 32, 32, 16, 32, 38, 38, 97, 36,
-1000, -1000, 229, 228, 225, 222, 219, 214, 205, 201,
197, 182, 180, -1000, -1000, -1000, -1000, -1000, -1000, 53,
-1000, -1000, -1000, 13, -1000, 655, -1000, -1000, -1000, 32,
-1000, 15, 14, 487, -1000, -1000, -1000, 49, 155, 155,
155, 200, 145, 145, 49, 145, 49, -72, -1000, -1000,
-1000, -1000, -1000, 32, 32, -1000, -1000, -1000, 32, -1000,
-1000, -1000, -1000, -1000, -1000, 155, -1000, -1000, -1000, -1000,
-1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 35, -1000,
164, -1000, -1000, -1000, -1000,
}
var yyPgo = [...]int16{
0, 382, 13, 381, 5, 16, 379, 356, 378, 374,
12, 373, 223, 302, 372, 14, 371, 10, 11, 369,
367, 7, 366, 8, 4, 365, 2, 1, 3, 364,
27, 0, 358, 352, 18, 195, 350, 349, 6, 343,
333, 17, 332, 44, 323, 9, 317, 310, 19, 304,
303, 279, 270, 269, 266,
}
var yyR1 = [...]int8{
0, 53, 53, 53, 53, 53, 53, 53, 38, 38,
38, 38, 38, 38, 38, 38, 38, 38, 38, 38,
33, 33, 33, 33, 34, 34, 36, 36, 36, 36,
36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
36, 36, 35, 37, 37, 47, 47, 42, 42, 42,
42, 17, 17, 17, 17, 16, 16, 16, 4, 4,
4, 39, 41, 41, 40, 40, 40, 48, 46, 46,
46, 46, 32, 32, 32, 9, 9, 44, 50, 50,
50, 50, 50, 50, 51, 52, 52, 52, 43, 43,
43, 1, 1, 1, 2, 2, 2, 2, 2, 2,
2, 13, 13, 7, 7, 7, 7, 7, 7, 7,
7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
7, 7, 7, 7, 7, 7, 7, 12, 12, 12,
12, 14, 14, 14, 15, 15, 15, 15, 15, 15,
15, 54, 20, 20, 20, 20, 19, 19, 19, 19,
19, 19, 19, 19, 19, 29, 29, 29, 21, 21,
21, 21, 22, 22, 22, 23, 23, 23, 23, 23,
23, 23, 23, 23, 23, 23, 24, 24, 25, 25,
25, 11, 11, 11, 11, 3, 3, 3, 3, 3,
3, 3, 3, 3, 3, 3, 3, 3, 3, 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,
5, 5, 5, 5, 45, 45, 28, 28, 30, 30,
31, 31, 27, 26, 26, 49, 10, 18, 18,
}
var yyR2 = [...]int8{
0, 2, 2, 2, 2, 2, 2, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
3, 3, 2, 2, 2, 2, 4, 4, 4, 4,
4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
4, 4, 1, 0, 1, 3, 3, 1, 1, 3,
3, 3, 4, 2, 1, 3, 1, 2, 1, 1,
1, 2, 3, 2, 3, 1, 2, 3, 3, 4,
3, 3, 3, 5, 3, 1, 1, 4, 6, 5,
6, 5, 4, 3, 2, 2, 1, 1, 3, 4,
2, 3, 1, 2, 3, 3, 1, 3, 3, 2,
1, 2, 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, 3, 4, 2,
0, 3, 1, 2, 3, 3, 1, 3, 3, 2,
1, 2, 0, 3, 2, 1, 1, 3, 1, 3,
4, 1, 3, 5, 5, 1, 1, 1, 4, 3,
3, 2, 3, 1, 2, 3, 3, 3, 3, 3,
3, 3, 3, 3, 3, 3, 4, 3, 3, 1,
2, 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, 2, 1, 1, 1, 0, 1,
}
var yyChk = [...]int16{
-1000, -53, 98, 99, 100, 101, 2, 10, -13, -7,
-12, 62, 63, 79, 64, 65, 66, 12, 47, 48,
51, 67, 18, 68, 83, 69, 70, 71, 72, 73,
85, 88, 89, 74, 75, 13, -54, -13, 10, -38,
-33, -36, -39, -44, -45, -46, -48, -49, -50, -51,
-52, -32, -3, 12, 19, 9, 15, 25, -8, -7,
-43, 62, 63, 64, 65, 66, 67, 68, 69, 70,
71, 72, 73, 74, 75, 41, 57, 13, -52, -12,
-14, 20, -15, 12, -10, 2, 25, -20, 2, 41,
59, 42, 43, 45, 46, 47, 48, 49, 50, 51,
52, 53, 54, 56, 57, 83, 58, 14, -34, -41,
2, 79, 85, 15, -41, -38, -38, -43, -1, 20,
-2, 12, -10, 2, 20, 7, 2, 4, 2, 4,
24, -35, -42, -37, -47, 78, -35, -35, -35, -35,
-35, -35, -35, -35, -35, -35, -35, -35, -35, -35,
-35, -45, 57, -48, 2, -31, -9, 2, -28, -30,
88, 89, 19, 9, 41, 57, -45, 2, -41, -34,
-17, 15, 2, -17, -40, 22, -38, 22, 20, 7,
2, -5, 2, 4, 54, 44, 55, -5, 20, -15,
25, 2, 25, 2, -19, 5, -29, -21, 12, -28,
-30, 16, -38, 82, 84, 80, 81, -38, -38, -38,
-38, -38, -38, -38, -38, -38, -38, -38, -38, -38,
-38, -38, -45, 15, -28, -28, 21, 6, 2, -16,
22, -4, -6, 25, 2, 62, 78, 63, 79, 64,
65, 66, 80, 81, 12, 82, 47, 48, 51, 67,
18, 68, 83, 84, 69, 70, 71, 72, 73, 88,
89, 59, 74, 75, 22, 7, 20, -2, 25, 2,
25, 2, 26, 26, -30, 26, 41, 57, -22, 24,
17, -23, 30, 28, 29, 35, 36, 37, 33, 31,
34, 32, 38, -17, -17, -18, -17, -18, 22, -45,
21, 2, 22, 7, 2, -38, -27, 19, -27, 26,
-27, -21, -21, 24, 17, 2, 17, 6, 6, 6,
6, 6, 6, 6, 6, 6, 6, 6, 21, 2,
22, -4, -27, 26, 26, 17, -23, -26, 57, -27,
-31, -31, -31, -28, -24, 14, -24, -26, -24, -26,
-11, 92, 93, 94, 95, -27, -27, -27, -25, -31,
24, 21, 2, 21, -31,
}
var yyDef = [...]int16{
0, -2, 130, 130, 0, 0, 7, 6, 1, 130,
102, 103, 104, 105, 106, 107, 108, 109, 110, 111,
112, 113, 114, 115, 116, 117, 118, 119, 120, 121,
122, 123, 124, 125, 126, 0, 2, -2, 3, 4,
8, 9, 10, 11, 12, 13, 14, 15, 16, 17,
18, 19, 0, 109, 234, 235, 0, 245, 0, 86,
87, -2, -2, -2, -2, -2, -2, -2, -2, -2,
-2, -2, -2, -2, -2, 228, 229, 0, 5, 101,
0, 129, 132, 0, 136, 140, 246, 141, 145, 43,
43, 43, 43, 43, 43, 43, 43, 43, 43, 43,
43, 43, 43, 43, 43, 0, 0, 0, 0, 22,
23, 0, 0, 0, 61, 0, 84, 85, 0, 90,
92, 0, 96, 100, 127, 0, 133, 0, 139, 0,
144, 0, 42, 47, 48, 44, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 68, 0, 70, 71, 72, 0, 74, 240, 241,
75, 76, 236, 237, 0, 0, 0, 83, 20, 21,
24, 0, 54, 25, 0, 63, 65, 67, 88, 0,
93, 0, 99, 230, 231, 232, 233, 0, 128, 131,
134, 137, 135, 138, 143, 146, 148, 151, 155, 156,
157, 0, 26, 0, 0, -2, -2, 27, 28, 29,
30, 31, 32, 33, 34, 35, 36, 37, 38, 39,
40, 41, 69, 0, 238, 239, 77, 0, 82, 0,
53, 56, 58, 59, 60, 199, 200, 201, 202, 203,
204, 205, 206, 207, 208, 209, 210, 211, 212, 213,
214, 215, 216, 217, 218, 219, 220, 221, 222, 223,
224, 225, 226, 227, 62, 66, 89, 91, 94, 98,
95, 97, 0, 0, 0, 0, 0, 0, 0, 0,
161, 163, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 45, 46, 49, 248, 50, 73, 0,
79, 81, 51, 0, 57, 64, 147, 242, 149, 0,
152, 0, 0, 0, 159, 164, 160, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 78, 80,
52, 55, 150, 0, 0, 158, 162, 165, 0, 244,
166, 167, 168, 169, 170, 0, 171, 172, 173, 174,
175, 181, 182, 183, 184, 153, 154, 243, 0, 179,
0, 177, 180, 176, 178,
}
var yyTok1 = [...]int8{
1,
}
var yyTok2 = [...]int8{
2, 3, 4, 5, 6, 7, 8, 9, 10, 11,
12, 13, 14, 15, 16, 17, 18, 19, 20, 21,
22, 23, 24, 25, 26, 27, 28, 29, 30, 31,
32, 33, 34, 35, 36, 37, 38, 39, 40, 41,
42, 43, 44, 45, 46, 47, 48, 49, 50, 51,
52, 53, 54, 55, 56, 57, 58, 59, 60, 61,
62, 63, 64, 65, 66, 67, 68, 69, 70, 71,
72, 73, 74, 75, 76, 77, 78, 79, 80, 81,
82, 83, 84, 85, 86, 87, 88, 89, 90, 91,
92, 93, 94, 95, 96, 97, 98, 99, 100, 101,
102,
}
var yyTok3 = [...]int8{
0,
}
var yyErrorMessages = [...]struct {
state int
token int
msg string
}{}
/* parser for yacc output */
var (
yyDebug = 0
yyErrorVerbose = false
)
type yyLexer interface {
Lex(lval *yySymType) int
Error(s string)
}
type yyParser interface {
Parse(yyLexer) int
Lookahead() int
}
type yyParserImpl struct {
lval yySymType
stack [yyInitialStackSize]yySymType
char int
}
func (p *yyParserImpl) Lookahead() int {
return p.char
}
func yyNewParser() yyParser {
return &yyParserImpl{}
}
const yyFlag = -1000
func yyTokname(c int) string {
if c >= 1 && c-1 < len(yyToknames) {
if yyToknames[c-1] != "" {
return yyToknames[c-1]
}
}
return __yyfmt__.Sprintf("tok-%v", c)
}
func yyStatname(s int) string {
if s >= 0 && s < len(yyStatenames) {
if yyStatenames[s] != "" {
return yyStatenames[s]
}
}
return __yyfmt__.Sprintf("state-%v", s)
}
func yyErrorMessage(state, lookAhead int) string {
const TOKSTART = 4
if !yyErrorVerbose {
return "syntax error"
}
for _, e := range yyErrorMessages {
if e.state == state && e.token == lookAhead {
return "syntax error: " + e.msg
}
}
res := "syntax error: unexpected " + yyTokname(lookAhead)
// To match Bison, suggest at most four expected tokens.
expected := make([]int, 0, 4)
// Look for shiftable tokens.
base := int(yyPact[state])
for tok := TOKSTART; tok-1 < len(yyToknames); tok++ {
if n := base + tok; n >= 0 && n < yyLast && int(yyChk[int(yyAct[n])]) == tok {
if len(expected) == cap(expected) {
return res
}
expected = append(expected, tok)
}
}
if yyDef[state] == -2 {
i := 0
for yyExca[i] != -1 || int(yyExca[i+1]) != state {
i += 2
}
// Look for tokens that we accept or reduce.
for i += 2; yyExca[i] >= 0; i += 2 {
tok := int(yyExca[i])
if tok < TOKSTART || yyExca[i+1] == 0 {
continue
}
if len(expected) == cap(expected) {
return res
}
expected = append(expected, tok)
}
// If the default action is to accept or reduce, give up.
if yyExca[i+1] != 0 {
return res
}
}
for i, tok := range expected {
if i == 0 {
res += ", expecting "
} else {
res += " or "
}
res += yyTokname(tok)
}
return res
}
func yylex1(lex yyLexer, lval *yySymType) (char, token int) {
token = 0
char = lex.Lex(lval)
if char <= 0 {
token = int(yyTok1[0])
goto out
}
if char < len(yyTok1) {
token = int(yyTok1[char])
goto out
}
if char >= yyPrivate {
if char < yyPrivate+len(yyTok2) {
token = int(yyTok2[char-yyPrivate])
goto out
}
}
for i := 0; i < len(yyTok3); i += 2 {
token = int(yyTok3[i+0])
if token == char {
token = int(yyTok3[i+1])
goto out
}
}
out:
if token == 0 {
token = int(yyTok2[1]) /* unknown char */
}
if yyDebug >= 3 {
__yyfmt__.Printf("lex %s(%d)\n", yyTokname(token), uint(char))
}
return char, token
}
func yyParse(yylex yyLexer) int {
return yyNewParser().Parse(yylex)
}
func (yyrcvr *yyParserImpl) Parse(yylex yyLexer) int {
var yyn int
var yyVAL yySymType
var yyDollar []yySymType
_ = yyDollar // silence set and not used
yyS := yyrcvr.stack[:]
Nerrs := 0 /* number of errors */
Errflag := 0 /* error recovery flag */
yystate := 0
yyrcvr.char = -1
yytoken := -1 // yyrcvr.char translated into internal numbering
defer func() {
// Make sure we report no lookahead when not parsing.
yystate = -1
yyrcvr.char = -1
yytoken = -1
}()
yyp := -1
goto yystack
ret0:
return 0
ret1:
return 1
yystack:
/* put a state and value onto the stack */
if yyDebug >= 4 {
__yyfmt__.Printf("char %v in %v\n", yyTokname(yytoken), yyStatname(yystate))
}
yyp++
if yyp >= len(yyS) {
nyys := make([]yySymType, len(yyS)*2)
copy(nyys, yyS)
yyS = nyys
}
yyS[yyp] = yyVAL
yyS[yyp].yys = yystate
yynewstate:
yyn = int(yyPact[yystate])
if yyn <= yyFlag {
goto yydefault /* simple state */
}
if yyrcvr.char < 0 {
yyrcvr.char, yytoken = yylex1(yylex, &yyrcvr.lval)
}
yyn += yytoken
if yyn < 0 || yyn >= yyLast {
goto yydefault
}
yyn = int(yyAct[yyn])
if int(yyChk[yyn]) == yytoken { /* valid shift */
yyrcvr.char = -1
yytoken = -1
yyVAL = yyrcvr.lval
yystate = yyn
if Errflag > 0 {
Errflag--
}
goto yystack
}
yydefault:
/* default state action */
yyn = int(yyDef[yystate])
if yyn == -2 {
if yyrcvr.char < 0 {
yyrcvr.char, yytoken = yylex1(yylex, &yyrcvr.lval)
}
/* look through exception table */
xi := 0
for {
if yyExca[xi+0] == -1 && int(yyExca[xi+1]) == yystate {
break
}
xi += 2
}
for xi += 2; ; xi += 2 {
yyn = int(yyExca[xi+0])
if yyn < 0 || yyn == yytoken {
break
}
}
yyn = int(yyExca[xi+1])
if yyn < 0 {
goto ret0
}
}
if yyn == 0 {
/* error ... attempt to resume parsing */
switch Errflag {
case 0: /* brand new error */
yylex.Error(yyErrorMessage(yystate, yytoken))
Nerrs++
if yyDebug >= 1 {
__yyfmt__.Printf("%s", yyStatname(yystate))
__yyfmt__.Printf(" saw %s\n", yyTokname(yytoken))
}
fallthrough
case 1, 2: /* incompletely recovered error ... try again */
Errflag = 3
/* find a state where "error" is a legal shift action */
for yyp >= 0 {
yyn = int(yyPact[yyS[yyp].yys]) + yyErrCode
if yyn >= 0 && yyn < yyLast {
yystate = int(yyAct[yyn]) /* simulate a shift of "error" */
if int(yyChk[yystate]) == yyErrCode {
goto yystack
}
}
/* the current p has no shift on "error", pop stack */
if yyDebug >= 2 {
__yyfmt__.Printf("error recovery pops state %d\n", yyS[yyp].yys)
}
yyp--
}
/* there is no state on the stack with an error shift ... abort */
goto ret1
case 3: /* no shift yet; clobber input char */
if yyDebug >= 2 {
__yyfmt__.Printf("error recovery discards %s\n", yyTokname(yytoken))
}
if yytoken == yyEofCode {
goto ret1
}
yyrcvr.char = -1
yytoken = -1
goto yynewstate /* try again in the same state */
}
}
/* reduction by production yyn */
if yyDebug >= 2 {
__yyfmt__.Printf("reduce %v in:\n\t%v\n", yyn, yyStatname(yystate))
}
yynt := yyn
yypt := yyp
_ = yypt // guard against "declared and not used"
yyp -= int(yyR2[yyn])
// yyp is now the index of $0. Perform the default action. Iff the
// reduced production is ε, $1 is possibly out of range.
if yyp+1 >= len(yyS) {
nyys := make([]yySymType, len(yyS)*2)
copy(nyys, yyS)
yyS = nyys
}
yyVAL = yyS[yyp+1]
/* consult goto table to find next state */
yyn = int(yyR1[yyn])
yyg := int(yyPgo[yyn])
yyj := yyg + yyS[yyp].yys + 1
if yyj >= yyLast {
yystate = int(yyAct[yyg])
} else {
yystate = int(yyAct[yyj])
if int(yyChk[yystate]) != -yyn {
yystate = int(yyAct[yyg])
}
}
// dummy call; replaced with literal code
switch yynt {
case 1:
yyDollar = yyS[yypt-2 : yypt+1]
{
yylex.(*parser).generatedParserResult = yyDollar[2].labels
}
case 3:
yyDollar = yyS[yypt-2 : yypt+1]
{
yylex.(*parser).addParseErrf(posrange.PositionRange{}, "no expression found in input")
}
case 4:
yyDollar = yyS[yypt-2 : yypt+1]
{
yylex.(*parser).generatedParserResult = yyDollar[2].node
}
case 5:
yyDollar = yyS[yypt-2 : yypt+1]
{
yylex.(*parser).generatedParserResult = yyDollar[2].node
}
case 7:
yyDollar = yyS[yypt-1 : yypt+1]
{
yylex.(*parser).unexpected("", "")
}
case 20:
yyDollar = yyS[yypt-3 : yypt+1]
{
yyVAL.node = yylex.(*parser).newAggregateExpr(yyDollar[1].item, yyDollar[2].node, yyDollar[3].node)
}
case 21:
yyDollar = yyS[yypt-3 : yypt+1]
{
yyVAL.node = yylex.(*parser).newAggregateExpr(yyDollar[1].item, yyDollar[3].node, yyDollar[2].node)
}
case 22:
yyDollar = yyS[yypt-2 : yypt+1]
{
yyVAL.node = yylex.(*parser).newAggregateExpr(yyDollar[1].item, &AggregateExpr{}, yyDollar[2].node)
}
case 23:
yyDollar = yyS[yypt-2 : yypt+1]
{
yylex.(*parser).unexpected("aggregation", "")
yyVAL.node = yylex.(*parser).newAggregateExpr(yyDollar[1].item, &AggregateExpr{}, Expressions{})
}
case 24:
yyDollar = yyS[yypt-2 : yypt+1]
{
yyVAL.node = &AggregateExpr{
Grouping: yyDollar[2].strings,
}
}
case 25:
yyDollar = yyS[yypt-2 : yypt+1]
{
yyVAL.node = &AggregateExpr{
Grouping: yyDollar[2].strings,
Without: true,
}
}
case 26:
yyDollar = yyS[yypt-4 : yypt+1]
{
yyVAL.node = yylex.(*parser).newBinaryExpression(yyDollar[1].node, yyDollar[2].item, yyDollar[3].node, yyDollar[4].node)
}
case 27:
yyDollar = yyS[yypt-4 : yypt+1]
{
yyVAL.node = yylex.(*parser).newBinaryExpression(yyDollar[1].node, yyDollar[2].item, yyDollar[3].node, yyDollar[4].node)
}
case 28:
yyDollar = yyS[yypt-4 : yypt+1]
{
yyVAL.node = yylex.(*parser).newBinaryExpression(yyDollar[1].node, yyDollar[2].item, yyDollar[3].node, yyDollar[4].node)
}
case 29:
yyDollar = yyS[yypt-4 : yypt+1]
{
yyVAL.node = yylex.(*parser).newBinaryExpression(yyDollar[1].node, yyDollar[2].item, yyDollar[3].node, yyDollar[4].node)
}
case 30:
yyDollar = yyS[yypt-4 : yypt+1]
{
yyVAL.node = yylex.(*parser).newBinaryExpression(yyDollar[1].node, yyDollar[2].item, yyDollar[3].node, yyDollar[4].node)
}
case 31:
yyDollar = yyS[yypt-4 : yypt+1]
{
yyVAL.node = yylex.(*parser).newBinaryExpression(yyDollar[1].node, yyDollar[2].item, yyDollar[3].node, yyDollar[4].node)
}
case 32:
yyDollar = yyS[yypt-4 : yypt+1]
{
yyVAL.node = yylex.(*parser).newBinaryExpression(yyDollar[1].node, yyDollar[2].item, yyDollar[3].node, yyDollar[4].node)
}
case 33:
yyDollar = yyS[yypt-4 : yypt+1]
{
yyVAL.node = yylex.(*parser).newBinaryExpression(yyDollar[1].node, yyDollar[2].item, yyDollar[3].node, yyDollar[4].node)
}
case 34:
yyDollar = yyS[yypt-4 : yypt+1]
{
yyVAL.node = yylex.(*parser).newBinaryExpression(yyDollar[1].node, yyDollar[2].item, yyDollar[3].node, yyDollar[4].node)
}
case 35:
yyDollar = yyS[yypt-4 : yypt+1]
{
yyVAL.node = yylex.(*parser).newBinaryExpression(yyDollar[1].node, yyDollar[2].item, yyDollar[3].node, yyDollar[4].node)
}
case 36:
yyDollar = yyS[yypt-4 : yypt+1]
{
yyVAL.node = yylex.(*parser).newBinaryExpression(yyDollar[1].node, yyDollar[2].item, yyDollar[3].node, yyDollar[4].node)
}
case 37:
yyDollar = yyS[yypt-4 : yypt+1]
{
yyVAL.node = yylex.(*parser).newBinaryExpression(yyDollar[1].node, yyDollar[2].item, yyDollar[3].node, yyDollar[4].node)
}
case 38:
yyDollar = yyS[yypt-4 : yypt+1]
{
yyVAL.node = yylex.(*parser).newBinaryExpression(yyDollar[1].node, yyDollar[2].item, yyDollar[3].node, yyDollar[4].node)
}
case 39:
yyDollar = yyS[yypt-4 : yypt+1]
{
yyVAL.node = yylex.(*parser).newBinaryExpression(yyDollar[1].node, yyDollar[2].item, yyDollar[3].node, yyDollar[4].node)
}
case 40:
yyDollar = yyS[yypt-4 : yypt+1]
{
yyVAL.node = yylex.(*parser).newBinaryExpression(yyDollar[1].node, yyDollar[2].item, yyDollar[3].node, yyDollar[4].node)
}
case 41:
yyDollar = yyS[yypt-4 : yypt+1]
{
yyVAL.node = yylex.(*parser).newBinaryExpression(yyDollar[1].node, yyDollar[2].item, yyDollar[3].node, yyDollar[4].node)
}
case 43:
yyDollar = yyS[yypt-0 : yypt+1]
{
yyVAL.node = &BinaryExpr{
VectorMatching: &VectorMatching{Card: CardOneToOne},
}
}
case 44:
yyDollar = yyS[yypt-1 : yypt+1]
{
yyVAL.node = &BinaryExpr{
VectorMatching: &VectorMatching{Card: CardOneToOne},
ReturnBool: true,
}
}
case 45:
yyDollar = yyS[yypt-3 : yypt+1]
{
yyVAL.node = yyDollar[1].node
yyVAL.node.(*BinaryExpr).VectorMatching.MatchingLabels = yyDollar[3].strings
}
case 46:
yyDollar = yyS[yypt-3 : yypt+1]
{
yyVAL.node = yyDollar[1].node
yyVAL.node.(*BinaryExpr).VectorMatching.MatchingLabels = yyDollar[3].strings
yyVAL.node.(*BinaryExpr).VectorMatching.On = true
}
case 49:
yyDollar = yyS[yypt-3 : yypt+1]
{
yyVAL.node = yyDollar[1].node
yyVAL.node.(*BinaryExpr).VectorMatching.Card = CardManyToOne
yyVAL.node.(*BinaryExpr).VectorMatching.Include = yyDollar[3].strings
}
case 50:
yyDollar = yyS[yypt-3 : yypt+1]
{
yyVAL.node = yyDollar[1].node
yyVAL.node.(*BinaryExpr).VectorMatching.Card = CardOneToMany
yyVAL.node.(*BinaryExpr).VectorMatching.Include = yyDollar[3].strings
}
case 51:
yyDollar = yyS[yypt-3 : yypt+1]
{
yyVAL.strings = yyDollar[2].strings
}
case 52:
yyDollar = yyS[yypt-4 : yypt+1]
{
yyVAL.strings = yyDollar[2].strings
}
case 53:
yyDollar = yyS[yypt-2 : yypt+1]
{
yyVAL.strings = []string{}
}
case 54:
yyDollar = yyS[yypt-1 : yypt+1]
{
yylex.(*parser).unexpected("grouping opts", "\"(\"")
yyVAL.strings = nil
}
case 55:
yyDollar = yyS[yypt-3 : yypt+1]
{
yyVAL.strings = append(yyDollar[1].strings, yyDollar[3].item.Val)
}
case 56:
yyDollar = yyS[yypt-1 : yypt+1]
{
yyVAL.strings = []string{yyDollar[1].item.Val}
}
case 57:
yyDollar = yyS[yypt-2 : yypt+1]
{
yylex.(*parser).unexpected("grouping opts", "\",\" or \")\"")
yyVAL.strings = yyDollar[1].strings
}
case 58:
yyDollar = yyS[yypt-1 : yypt+1]
{
if !model.LabelName(yyDollar[1].item.Val).IsValid() {
yylex.(*parser).addParseErrf(yyDollar[1].item.PositionRange(), "invalid label name for grouping: %q", yyDollar[1].item.Val)
}
yyVAL.item = yyDollar[1].item
}
case 59:
yyDollar = yyS[yypt-1 : yypt+1]
{
unquoted := yylex.(*parser).unquoteString(yyDollar[1].item.Val)
if !model.LabelName(unquoted).IsValid() {
yylex.(*parser).addParseErrf(yyDollar[1].item.PositionRange(), "invalid label name for grouping: %q", unquoted)
}
yyVAL.item = yyDollar[1].item
yyVAL.item.Pos++
yyVAL.item.Val = unquoted
}
case 60:
yyDollar = yyS[yypt-1 : yypt+1]
{
yylex.(*parser).unexpected("grouping opts", "label")
yyVAL.item = Item{}
}
case 61:
yyDollar = yyS[yypt-2 : yypt+1]
{
fn, exist := getFunction(yyDollar[1].item.Val, yylex.(*parser).functions)
if !exist {
yylex.(*parser).addParseErrf(yyDollar[1].item.PositionRange(), "unknown function with name %q", yyDollar[1].item.Val)
}
if fn != nil && fn.Experimental && !EnableExperimentalFunctions {
yylex.(*parser).addParseErrf(yyDollar[1].item.PositionRange(), "function %q is not enabled", yyDollar[1].item.Val)
}
yyVAL.node = &Call{
Func: fn,
Args: yyDollar[2].node.(Expressions),
PosRange: posrange.PositionRange{
Start: yyDollar[1].item.Pos,
End: yylex.(*parser).lastClosing,
},
}
}
case 62:
yyDollar = yyS[yypt-3 : yypt+1]
{
yyVAL.node = yyDollar[2].node
}
case 63:
yyDollar = yyS[yypt-2 : yypt+1]
{
yyVAL.node = Expressions{}
}
case 64:
yyDollar = yyS[yypt-3 : yypt+1]
{
yyVAL.node = append(yyDollar[1].node.(Expressions), yyDollar[3].node.(Expr))
}
case 65:
yyDollar = yyS[yypt-1 : yypt+1]
{
yyVAL.node = Expressions{yyDollar[1].node.(Expr)}
}
case 66:
yyDollar = yyS[yypt-2 : yypt+1]
{
yylex.(*parser).addParseErrf(yyDollar[2].item.PositionRange(), "trailing commas not allowed in function call args")
yyVAL.node = yyDollar[1].node
}
case 67:
yyDollar = yyS[yypt-3 : yypt+1]
{
yyVAL.node = &ParenExpr{Expr: yyDollar[2].node.(Expr), PosRange: mergeRanges(&yyDollar[1].item, &yyDollar[3].item)}
}
case 68:
yyDollar = yyS[yypt-3 : yypt+1]
{
numLit, _ := yyDollar[3].node.(*NumberLiteral)
dur := &NumberLiteral{Val: numLit.Val}
yylex.(*parser).addOffset(yyDollar[1].node, dur)
yyVAL.node = yyDollar[1].node
}
case 69:
yyDollar = yyS[yypt-4 : yypt+1]
{
numLit, _ := yyDollar[4].node.(*NumberLiteral)
dur := &NumberLiteral{Val: numLit.Val * -1.0}
yylex.(*parser).addOffset(yyDollar[1].node, dur)
yyVAL.node = yyDollar[1].node
}
case 70:
yyDollar = yyS[yypt-3 : yypt+1]
{
dur, _ := yyDollar[3].node.(*ParenExpr)
if dur.Type() != ValueTypeScalar {
yylex.(*parser).unexpected("offset", "time expression does not evaluate to a scalar")
}
yylex.(*parser).addOffset(yyDollar[1].node, dur)
}
case 71:
yyDollar = yyS[yypt-3 : yypt+1]
{
yylex.(*parser).unexpected("offset", "number or duration or time expression in parentheses")
yyVAL.node = yyDollar[1].node
}
case 72:
yyDollar = yyS[yypt-3 : yypt+1]
{
yylex.(*parser).setTimestamp(yyDollar[1].node, yyDollar[3].float)
yyVAL.node = yyDollar[1].node
}
case 73:
yyDollar = yyS[yypt-5 : yypt+1]
{
yylex.(*parser).setAtModifierPreprocessor(yyDollar[1].node, yyDollar[3].item)
yyVAL.node = yyDollar[1].node
}
case 74:
yyDollar = yyS[yypt-3 : yypt+1]
{
yylex.(*parser).unexpected("@", "timestamp")
yyVAL.node = yyDollar[1].node
}
case 77:
yyDollar = yyS[yypt-4 : yypt+1]
{
var errMsg string
vs, ok := yyDollar[1].node.(*VectorSelector)
if !ok {
errMsg = "ranges only allowed for vector selectors"
} else if vs.OriginalOffsetExpr != nil {
errMsg = "no offset modifiers allowed before range"
} else if vs.Timestamp != nil {
errMsg = "no @ modifiers allowed before range"
}
if errMsg != "" {
errRange := mergeRanges(&yyDollar[2].item, &yyDollar[4].item)
yylex.(*parser).addParseErrf(errRange, "%s", errMsg)
}
numLit, _ := yyDollar[3].node.(*NumberLiteral)
yyVAL.node = &MatrixSelector{
VectorSelector: yyDollar[1].node.(Expr),
Range: time.Duration(numLit.Val*1000) * time.Millisecond,
EndPos: yylex.(*parser).lastClosing,
}
}
case 78:
yyDollar = yyS[yypt-6 : yypt+1]
{
numLitRange, _ := yyDollar[3].node.(*NumberLiteral)
numLitStep, _ := yyDollar[5].node.(*NumberLiteral)
yyVAL.node = &SubqueryExpr{
Expr: yyDollar[1].node.(Expr),
Range: time.Duration(numLitRange.Val*1000) * time.Millisecond,
Step: time.Duration(numLitStep.Val*1000) * time.Millisecond,
EndPos: yyDollar[6].item.Pos + 1,
}
}
case 79:
yyDollar = yyS[yypt-5 : yypt+1]
{
numLitRange, _ := yyDollar[3].node.(*NumberLiteral)
yyVAL.node = &SubqueryExpr{
Expr: yyDollar[1].node.(Expr),
Range: time.Duration(numLitRange.Val*1000) * time.Millisecond,
Step: 0,
EndPos: yyDollar[5].item.Pos + 1,
}
}
case 80:
yyDollar = yyS[yypt-6 : yypt+1]
{
yylex.(*parser).unexpected("subquery selector", "\"]\"")
yyVAL.node = yyDollar[1].node
}
case 81:
yyDollar = yyS[yypt-5 : yypt+1]
{
yylex.(*parser).unexpected("subquery selector", "number or duration or \"]\"")
yyVAL.node = yyDollar[1].node
}
case 82:
yyDollar = yyS[yypt-4 : yypt+1]
{
yylex.(*parser).unexpected("subquery or range", "\":\" or \"]\"")
yyVAL.node = yyDollar[1].node
}
case 83:
yyDollar = yyS[yypt-3 : yypt+1]
{
yylex.(*parser).unexpected("subquery selector", "number or duration")
yyVAL.node = yyDollar[1].node
}
case 84:
yyDollar = yyS[yypt-2 : yypt+1]
{
if nl, ok := yyDollar[2].node.(*NumberLiteral); ok {
if yyDollar[1].item.Typ == SUB {
nl.Val *= -1
}
nl.PosRange.Start = yyDollar[1].item.Pos
yyVAL.node = nl
} else {
yyVAL.node = &UnaryExpr{Op: yyDollar[1].item.Typ, Expr: yyDollar[2].node.(Expr), StartPos: yyDollar[1].item.Pos}
}
}
case 85:
yyDollar = yyS[yypt-2 : yypt+1]
{
vs := yyDollar[2].node.(*VectorSelector)
vs.PosRange = mergeRanges(&yyDollar[1].item, vs)
vs.Name = yyDollar[1].item.Val
yylex.(*parser).assembleVectorSelector(vs)
yyVAL.node = vs
}
case 86:
yyDollar = yyS[yypt-1 : yypt+1]
{
vs := &VectorSelector{
Name: yyDollar[1].item.Val,
LabelMatchers: []*labels.Matcher{},
PosRange: yyDollar[1].item.PositionRange(),
}
yylex.(*parser).assembleVectorSelector(vs)
yyVAL.node = vs
}
case 87:
yyDollar = yyS[yypt-1 : yypt+1]
{
vs := yyDollar[1].node.(*VectorSelector)
yylex.(*parser).assembleVectorSelector(vs)
yyVAL.node = vs
}
case 88:
yyDollar = yyS[yypt-3 : yypt+1]
{
yyVAL.node = &VectorSelector{
LabelMatchers: yyDollar[2].matchers,
PosRange: mergeRanges(&yyDollar[1].item, &yyDollar[3].item),
}
}
case 89:
yyDollar = yyS[yypt-4 : yypt+1]
{
yyVAL.node = &VectorSelector{
LabelMatchers: yyDollar[2].matchers,
PosRange: mergeRanges(&yyDollar[1].item, &yyDollar[4].item),
}
}
case 90:
yyDollar = yyS[yypt-2 : yypt+1]
{
yyVAL.node = &VectorSelector{
LabelMatchers: []*labels.Matcher{},
PosRange: mergeRanges(&yyDollar[1].item, &yyDollar[2].item),
}
}
case 91:
yyDollar = yyS[yypt-3 : yypt+1]
{
if yyDollar[1].matchers != nil {
yyVAL.matchers = append(yyDollar[1].matchers, yyDollar[3].matcher)
} else {
yyVAL.matchers = yyDollar[1].matchers
}
}
case 92:
yyDollar = yyS[yypt-1 : yypt+1]
{
yyVAL.matchers = []*labels.Matcher{yyDollar[1].matcher}
}
case 93:
yyDollar = yyS[yypt-2 : yypt+1]
{
yylex.(*parser).unexpected("label matching", "\",\" or \"}\"")
yyVAL.matchers = yyDollar[1].matchers
}
case 94:
yyDollar = yyS[yypt-3 : yypt+1]
{
yyVAL.matcher = yylex.(*parser).newLabelMatcher(yyDollar[1].item, yyDollar[2].item, yyDollar[3].item)
}
case 95:
yyDollar = yyS[yypt-3 : yypt+1]
{
yyVAL.matcher = yylex.(*parser).newLabelMatcher(yyDollar[1].item, yyDollar[2].item, yyDollar[3].item)
}
case 96:
yyDollar = yyS[yypt-1 : yypt+1]
{
yyVAL.matcher = yylex.(*parser).newMetricNameMatcher(yyDollar[1].item)
}
case 97:
yyDollar = yyS[yypt-3 : yypt+1]
{
yylex.(*parser).unexpected("label matching", "string")
yyVAL.matcher = nil
}
case 98:
yyDollar = yyS[yypt-3 : yypt+1]
{
yylex.(*parser).unexpected("label matching", "string")
yyVAL.matcher = nil
}
case 99:
yyDollar = yyS[yypt-2 : yypt+1]
{
yylex.(*parser).unexpected("label matching", "label matching operator")
yyVAL.matcher = nil
}
case 100:
yyDollar = yyS[yypt-1 : yypt+1]
{
yylex.(*parser).unexpected("label matching", "identifier or \"}\"")
yyVAL.matcher = nil
}
case 101:
yyDollar = yyS[yypt-2 : yypt+1]
{
b := labels.NewBuilder(yyDollar[2].labels)
b.Set(labels.MetricName, yyDollar[1].item.Val)
yyVAL.labels = b.Labels()
}
case 102:
yyDollar = yyS[yypt-1 : yypt+1]
{
yyVAL.labels = yyDollar[1].labels
}
case 127:
yyDollar = yyS[yypt-3 : yypt+1]
{
yyVAL.labels = labels.New(yyDollar[2].lblList...)
}
case 128:
yyDollar = yyS[yypt-4 : yypt+1]
{
yyVAL.labels = labels.New(yyDollar[2].lblList...)
}
case 129:
yyDollar = yyS[yypt-2 : yypt+1]
{
yyVAL.labels = labels.New()
}
case 130:
yyDollar = yyS[yypt-0 : yypt+1]
{
yyVAL.labels = labels.New()
}
case 131:
yyDollar = yyS[yypt-3 : yypt+1]
{
yyVAL.lblList = append(yyDollar[1].lblList, yyDollar[3].label)
}
case 132:
yyDollar = yyS[yypt-1 : yypt+1]
{
yyVAL.lblList = []labels.Label{yyDollar[1].label}
}
case 133:
yyDollar = yyS[yypt-2 : yypt+1]
{
yylex.(*parser).unexpected("label set", "\",\" or \"}\"")
yyVAL.lblList = yyDollar[1].lblList
}
case 134:
yyDollar = yyS[yypt-3 : yypt+1]
{
yyVAL.label = labels.Label{Name: yyDollar[1].item.Val, Value: yylex.(*parser).unquoteString(yyDollar[3].item.Val)}
}
case 135:
yyDollar = yyS[yypt-3 : yypt+1]
{
yyVAL.label = labels.Label{Name: yyDollar[1].item.Val, Value: yylex.(*parser).unquoteString(yyDollar[3].item.Val)}
}
case 136:
yyDollar = yyS[yypt-1 : yypt+1]
{
yyVAL.label = labels.Label{Name: labels.MetricName, Value: yyDollar[1].item.Val}
}
case 137:
yyDollar = yyS[yypt-3 : yypt+1]
{
yylex.(*parser).unexpected("label set", "string")
yyVAL.label = labels.Label{}
}
case 138:
yyDollar = yyS[yypt-3 : yypt+1]
{
yylex.(*parser).unexpected("label set", "string")
yyVAL.label = labels.Label{}
}
case 139:
yyDollar = yyS[yypt-2 : yypt+1]
{
yylex.(*parser).unexpected("label set", "\"=\"")
yyVAL.label = labels.Label{}
}
case 140:
yyDollar = yyS[yypt-1 : yypt+1]
{
yylex.(*parser).unexpected("label set", "identifier or \"}\"")
yyVAL.label = labels.Label{}
}
case 141:
yyDollar = yyS[yypt-2 : yypt+1]
{
yylex.(*parser).generatedParserResult = &seriesDescription{
labels: yyDollar[1].labels,
values: yyDollar[2].series,
}
}
case 142:
yyDollar = yyS[yypt-0 : yypt+1]
{
yyVAL.series = []SequenceValue{}
}
case 143:
yyDollar = yyS[yypt-3 : yypt+1]
{
yyVAL.series = append(yyDollar[1].series, yyDollar[3].series...)
}
case 144:
yyDollar = yyS[yypt-2 : yypt+1]
{
yyVAL.series = yyDollar[1].series
}
case 145:
yyDollar = yyS[yypt-1 : yypt+1]
{
yylex.(*parser).unexpected("series values", "")
yyVAL.series = nil
}
case 146:
yyDollar = yyS[yypt-1 : yypt+1]
{
yyVAL.series = []SequenceValue{{Omitted: true}}
}
case 147:
yyDollar = yyS[yypt-3 : yypt+1]
{
yyVAL.series = []SequenceValue{}
for i := uint64(0); i < yyDollar[3].uint; i++ {
yyVAL.series = append(yyVAL.series, SequenceValue{Omitted: true})
}
}
case 148:
yyDollar = yyS[yypt-1 : yypt+1]
{
yyVAL.series = []SequenceValue{{Value: yyDollar[1].float}}
}
case 149:
yyDollar = yyS[yypt-3 : yypt+1]
{
yyVAL.series = []SequenceValue{}
// Add an additional value for time 0, which we ignore in tests.
for i := uint64(0); i <= yyDollar[3].uint; i++ {
yyVAL.series = append(yyVAL.series, SequenceValue{Value: yyDollar[1].float})
}
}
case 150:
yyDollar = yyS[yypt-4 : yypt+1]
{
yyVAL.series = []SequenceValue{}
// Add an additional value for time 0, which we ignore in tests.
for i := uint64(0); i <= yyDollar[4].uint; i++ {
yyVAL.series = append(yyVAL.series, SequenceValue{Value: yyDollar[1].float})
yyDollar[1].float += yyDollar[2].float
}
}
case 151:
yyDollar = yyS[yypt-1 : yypt+1]
{
yyVAL.series = []SequenceValue{{Histogram: yyDollar[1].histogram}}
}
case 152:
yyDollar = yyS[yypt-3 : yypt+1]
{
yyVAL.series = []SequenceValue{}
// Add an additional value for time 0, which we ignore in tests.
for i := uint64(0); i <= yyDollar[3].uint; i++ {
yyVAL.series = append(yyVAL.series, SequenceValue{Histogram: yyDollar[1].histogram})
//$1 += $2
}
}
case 153:
yyDollar = yyS[yypt-5 : yypt+1]
{
val, err := yylex.(*parser).histogramsIncreaseSeries(yyDollar[1].histogram, yyDollar[3].histogram, yyDollar[5].uint)
if err != nil {
yylex.(*parser).addSemanticError(err)
}
yyVAL.series = val
}
case 154:
yyDollar = yyS[yypt-5 : yypt+1]
{
val, err := yylex.(*parser).histogramsDecreaseSeries(yyDollar[1].histogram, yyDollar[3].histogram, yyDollar[5].uint)
if err != nil {
yylex.(*parser).addSemanticError(err)
}
yyVAL.series = val
}
case 155:
yyDollar = yyS[yypt-1 : yypt+1]
{
if yyDollar[1].item.Val != "stale" {
yylex.(*parser).unexpected("series values", "number or \"stale\"")
}
yyVAL.float = math.Float64frombits(value.StaleNaN)
}
case 158:
yyDollar = yyS[yypt-4 : yypt+1]
{
yyVAL.histogram = yylex.(*parser).buildHistogramFromMap(&yyDollar[2].descriptors)
}
case 159:
yyDollar = yyS[yypt-3 : yypt+1]
{
yyVAL.histogram = yylex.(*parser).buildHistogramFromMap(&yyDollar[2].descriptors)
}
case 160:
yyDollar = yyS[yypt-3 : yypt+1]
{
m := yylex.(*parser).newMap()
yyVAL.histogram = yylex.(*parser).buildHistogramFromMap(&m)
}
case 161:
yyDollar = yyS[yypt-2 : yypt+1]
{
m := yylex.(*parser).newMap()
yyVAL.histogram = yylex.(*parser).buildHistogramFromMap(&m)
}
case 162:
yyDollar = yyS[yypt-3 : yypt+1]
{
yyVAL.descriptors = *(yylex.(*parser).mergeMaps(&yyDollar[1].descriptors, &yyDollar[3].descriptors))
}
case 163:
yyDollar = yyS[yypt-1 : yypt+1]
{
yyVAL.descriptors = yyDollar[1].descriptors
}
case 164:
yyDollar = yyS[yypt-2 : yypt+1]
{
yylex.(*parser).unexpected("histogram description", "histogram description key, e.g. buckets:[5 10 7]")
}
case 165:
yyDollar = yyS[yypt-3 : yypt+1]
{
yyVAL.descriptors = yylex.(*parser).newMap()
yyVAL.descriptors["schema"] = yyDollar[3].int
}
case 166:
yyDollar = yyS[yypt-3 : yypt+1]
{
yyVAL.descriptors = yylex.(*parser).newMap()
yyVAL.descriptors["sum"] = yyDollar[3].float
}
case 167:
yyDollar = yyS[yypt-3 : yypt+1]
{
yyVAL.descriptors = yylex.(*parser).newMap()
yyVAL.descriptors["count"] = yyDollar[3].float
}
case 168:
yyDollar = yyS[yypt-3 : yypt+1]
{
yyVAL.descriptors = yylex.(*parser).newMap()
yyVAL.descriptors["z_bucket"] = yyDollar[3].float
}
case 169:
yyDollar = yyS[yypt-3 : yypt+1]
{
yyVAL.descriptors = yylex.(*parser).newMap()
yyVAL.descriptors["z_bucket_w"] = yyDollar[3].float
}
case 170:
yyDollar = yyS[yypt-3 : yypt+1]
{
yyVAL.descriptors = yylex.(*parser).newMap()
yyVAL.descriptors["custom_values"] = yyDollar[3].bucket_set
}
case 171:
yyDollar = yyS[yypt-3 : yypt+1]
{
yyVAL.descriptors = yylex.(*parser).newMap()
yyVAL.descriptors["buckets"] = yyDollar[3].bucket_set
}
case 172:
yyDollar = yyS[yypt-3 : yypt+1]
{
yyVAL.descriptors = yylex.(*parser).newMap()
yyVAL.descriptors["offset"] = yyDollar[3].int
}
case 173:
yyDollar = yyS[yypt-3 : yypt+1]
{
yyVAL.descriptors = yylex.(*parser).newMap()
yyVAL.descriptors["n_buckets"] = yyDollar[3].bucket_set
}
case 174:
yyDollar = yyS[yypt-3 : yypt+1]
{
yyVAL.descriptors = yylex.(*parser).newMap()
yyVAL.descriptors["n_offset"] = yyDollar[3].int
}
case 175:
yyDollar = yyS[yypt-3 : yypt+1]
{
yyVAL.descriptors = yylex.(*parser).newMap()
yyVAL.descriptors["counter_reset_hint"] = yyDollar[3].item
}
case 176:
yyDollar = yyS[yypt-4 : yypt+1]
{
yyVAL.bucket_set = yyDollar[2].bucket_set
}
case 177:
yyDollar = yyS[yypt-3 : yypt+1]
{
yyVAL.bucket_set = yyDollar[2].bucket_set
}
case 178:
yyDollar = yyS[yypt-3 : yypt+1]
{
yyVAL.bucket_set = append(yyDollar[1].bucket_set, yyDollar[3].float)
}
case 179:
yyDollar = yyS[yypt-1 : yypt+1]
{
yyVAL.bucket_set = []float64{yyDollar[1].float}
}
case 234:
yyDollar = yyS[yypt-1 : yypt+1]
{
yyVAL.node = &NumberLiteral{
Val: yylex.(*parser).number(yyDollar[1].item.Val),
PosRange: yyDollar[1].item.PositionRange(),
}
}
case 235:
yyDollar = yyS[yypt-1 : yypt+1]
{
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.node = &NumberLiteral{
Val: dur.Seconds(),
PosRange: yyDollar[1].item.PositionRange(),
}
}
case 236:
yyDollar = yyS[yypt-1 : yypt+1]
{
yyVAL.float = yylex.(*parser).number(yyDollar[1].item.Val)
}
case 237:
yyDollar = yyS[yypt-1 : yypt+1]
{
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 238:
yyDollar = yyS[yypt-2 : yypt+1]
{
yyVAL.float = yyDollar[2].float
}
case 239:
yyDollar = yyS[yypt-2 : yypt+1]
{
yyVAL.float = -yyDollar[2].float
}
case 242:
yyDollar = yyS[yypt-1 : yypt+1]
{
var err error
yyVAL.uint, err = strconv.ParseUint(yyDollar[1].item.Val, 10, 64)
if err != nil {
yylex.(*parser).addParseErrf(yyDollar[1].item.PositionRange(), "invalid repetition in series values: %s", err)
}
}
case 243:
yyDollar = yyS[yypt-2 : yypt+1]
{
yyVAL.int = -int64(yyDollar[2].uint)
}
case 244:
yyDollar = yyS[yypt-1 : yypt+1]
{
yyVAL.int = int64(yyDollar[1].uint)
}
case 245:
yyDollar = yyS[yypt-1 : yypt+1]
{
yyVAL.node = &StringLiteral{
Val: yylex.(*parser).unquoteString(yyDollar[1].item.Val),
PosRange: yyDollar[1].item.PositionRange(),
}
}
case 246:
yyDollar = yyS[yypt-1 : yypt+1]
{
yyVAL.item = Item{
Typ: METRIC_IDENTIFIER,
Pos: yyDollar[1].item.PositionRange().Start,
Val: yylex.(*parser).unquoteString(yyDollar[1].item.Val),
}
}
case 247:
yyDollar = yyS[yypt-0 : yypt+1]
{
yyVAL.strings = nil
}
}
goto yystack /* stack new state and value */
}