prometheus/promql/parser/generated_parser.y.go
zenador 69edd8709b
Add warnings (and annotations) to PromQL query results (#12152)
Return annotations (warnings and infos) from PromQL queries

This generalizes the warnings we have already used before (but only for problems with remote read) as "annotations".

Annotations can be warnings or infos (the latter could be false positives). We do not treat them different in the API for now and return them all as "warnings". It would be easy to distinguish them and return infos separately, should that appear useful in the future.

The new annotations are then used to create a lot of warnings or infos during PromQL evaluations. Partially these are things we have wanted for a long time (e.g. inform the user that they have applied `rate` to a metric that doesn't look like a counter), but the new native histograms have created even more needs for those annotations (e.g. if a query tries to aggregate float numbers with histograms).

The annotations added here are not yet complete. A prominent example would be a warning about a range too short for a rate calculation. But such a warnings is more tricky to create with good fidelity and we will tackle it later.

Another TODO is to take annotations into account when evaluating recording rules.

---------

Signed-off-by: Jeanette Tan <jeanette.tan@grafana.com>
2023-09-14 18:57:31 +02:00

1974 lines
50 KiB
Go

// Code generated by goyacc -o promql/parser/generated_parser.y.go promql/parser/generated_parser.y. DO NOT EDIT.
//line promql/parser/generated_parser.y:15
package parser
import __yyfmt__ "fmt"
//line promql/parser/generated_parser.y:15
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"
)
//line promql/parser/generated_parser.y:30
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
duration time.Duration
}
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 histogramDescEnd = 57379
const operatorsStart = 57380
const ADD = 57381
const DIV = 57382
const EQLC = 57383
const EQL_REGEX = 57384
const GTE = 57385
const GTR = 57386
const LAND = 57387
const LOR = 57388
const LSS = 57389
const LTE = 57390
const LUNLESS = 57391
const MOD = 57392
const MUL = 57393
const NEQ = 57394
const NEQ_REGEX = 57395
const POW = 57396
const SUB = 57397
const AT = 57398
const ATAN2 = 57399
const operatorsEnd = 57400
const aggregatorsStart = 57401
const AVG = 57402
const BOTTOMK = 57403
const COUNT = 57404
const COUNT_VALUES = 57405
const GROUP = 57406
const MAX = 57407
const MIN = 57408
const QUANTILE = 57409
const STDDEV = 57410
const STDVAR = 57411
const SUM = 57412
const TOPK = 57413
const aggregatorsEnd = 57414
const keywordsStart = 57415
const BOOL = 57416
const BY = 57417
const GROUP_LEFT = 57418
const GROUP_RIGHT = 57419
const IGNORING = 57420
const OFFSET = 57421
const ON = 57422
const WITHOUT = 57423
const keywordsEnd = 57424
const preprocessorStart = 57425
const START = 57426
const END = 57427
const preprocessorEnd = 57428
const startSymbolsStart = 57429
const START_METRIC = 57430
const START_SERIES_DESCRIPTION = 57431
const START_EXPRESSION = 57432
const START_METRIC_SELECTOR = 57433
const startSymbolsEnd = 57434
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",
"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",
"aggregatorsEnd",
"keywordsStart",
"BOOL",
"BY",
"GROUP_LEFT",
"GROUP_RIGHT",
"IGNORING",
"OFFSET",
"ON",
"WITHOUT",
"keywordsEnd",
"preprocessorStart",
"START",
"END",
"preprocessorEnd",
"startSymbolsStart",
"START_METRIC",
"START_SERIES_DESCRIPTION",
"START_EXPRESSION",
"START_METRIC_SELECTOR",
"startSymbolsEnd",
}
var yyStatenames = [...]string{}
const yyEofCode = 1
const yyErrCode = 2
const yyInitialStackSize = 16
//line promql/parser/generated_parser.y:916
//line yacctab:1
var yyExca = [...]int16{
-1, 1,
1, -1,
-2, 0,
-1, 35,
1, 131,
10, 131,
24, 131,
-2, 0,
-1, 58,
2, 168,
15, 168,
75, 168,
81, 168,
-2, 97,
-1, 59,
2, 169,
15, 169,
75, 169,
81, 169,
-2, 98,
-1, 60,
2, 170,
15, 170,
75, 170,
81, 170,
-2, 100,
-1, 61,
2, 171,
15, 171,
75, 171,
81, 171,
-2, 101,
-1, 62,
2, 172,
15, 172,
75, 172,
81, 172,
-2, 102,
-1, 63,
2, 173,
15, 173,
75, 173,
81, 173,
-2, 107,
-1, 64,
2, 174,
15, 174,
75, 174,
81, 174,
-2, 109,
-1, 65,
2, 175,
15, 175,
75, 175,
81, 175,
-2, 111,
-1, 66,
2, 176,
15, 176,
75, 176,
81, 176,
-2, 112,
-1, 67,
2, 177,
15, 177,
75, 177,
81, 177,
-2, 113,
-1, 68,
2, 178,
15, 178,
75, 178,
81, 178,
-2, 114,
-1, 69,
2, 179,
15, 179,
75, 179,
81, 179,
-2, 115,
-1, 192,
12, 226,
13, 226,
18, 226,
19, 226,
25, 226,
39, 226,
45, 226,
46, 226,
49, 226,
55, 226,
60, 226,
61, 226,
62, 226,
63, 226,
64, 226,
65, 226,
66, 226,
67, 226,
68, 226,
69, 226,
70, 226,
71, 226,
75, 226,
79, 226,
81, 226,
84, 226,
85, 226,
-2, 0,
-1, 193,
12, 226,
13, 226,
18, 226,
19, 226,
25, 226,
39, 226,
45, 226,
46, 226,
49, 226,
55, 226,
60, 226,
61, 226,
62, 226,
63, 226,
64, 226,
65, 226,
66, 226,
67, 226,
68, 226,
69, 226,
70, 226,
71, 226,
75, 226,
79, 226,
81, 226,
84, 226,
85, 226,
-2, 0,
-1, 214,
21, 224,
-2, 0,
-1, 280,
21, 225,
-2, 0,
}
const yyPrivate = 57344
const yyLast = 756
var yyAct = [...]int16{
149, 317, 315, 263, 322, 146, 218, 184, 37, 142,
275, 276, 150, 113, 77, 101, 220, 102, 6, 104,
148, 190, 103, 191, 126, 105, 230, 192, 193, 153,
287, 334, 236, 312, 311, 106, 308, 153, 257, 255,
249, 289, 153, 254, 335, 121, 172, 144, 173, 154,
333, 258, 154, 332, 145, 248, 278, 154, 306, 232,
233, 153, 108, 234, 109, 155, 316, 259, 155, 107,
287, 247, 296, 155, 221, 223, 225, 226, 227, 235,
237, 240, 241, 242, 243, 244, 175, 100, 222, 224,
228, 229, 231, 238, 239, 104, 174, 176, 245, 246,
143, 105, 151, 152, 2, 3, 4, 5, 188, 57,
156, 295, 82, 84, 210, 166, 160, 163, 159, 158,
106, 323, 186, 93, 94, 100, 294, 96, 97, 99,
83, 189, 178, 293, 187, 100, 194, 195, 196, 197,
198, 199, 200, 201, 202, 203, 204, 205, 206, 207,
208, 84, 98, 209, 220, 211, 212, 122, 253, 180,
72, 93, 94, 33, 230, 96, 110, 99, 83, 215,
236, 284, 162, 214, 217, 96, 283, 99, 7, 281,
145, 252, 179, 251, 10, 161, 145, 170, 213, 115,
98, 282, 169, 307, 74, 305, 256, 232, 233, 114,
98, 234, 273, 274, 277, 168, 304, 250, 303, 247,
302, 301, 221, 223, 225, 226, 227, 235, 237, 240,
241, 242, 243, 244, 280, 300, 222, 224, 228, 229,
231, 238, 239, 157, 299, 298, 245, 246, 297, 81,
145, 127, 128, 129, 130, 131, 132, 133, 134, 135,
136, 137, 138, 139, 140, 141, 286, 288, 285, 290,
79, 182, 120, 34, 119, 48, 291, 292, 185, 262,
78, 73, 188, 8, 118, 153, 261, 35, 177, 117,
265, 266, 264, 270, 272, 269, 271, 267, 268, 115,
309, 310, 116, 1, 279, 154, 47, 314, 46, 114,
319, 320, 321, 45, 318, 44, 324, 112, 326, 325,
79, 155, 125, 327, 328, 43, 51, 72, 329, 53,
78, 42, 22, 52, 331, 41, 165, 56, 76, 54,
9, 9, 123, 336, 164, 40, 124, 39, 38, 49,
183, 330, 260, 70, 80, 181, 216, 75, 147, 18,
19, 55, 219, 20, 171, 50, 111, 0, 0, 71,
0, 0, 0, 0, 58, 59, 60, 61, 62, 63,
64, 65, 66, 67, 68, 69, 0, 0, 0, 13,
0, 0, 0, 24, 0, 30, 0, 0, 31, 32,
36, 0, 51, 72, 0, 53, 313, 0, 22, 52,
0, 0, 0, 0, 0, 54, 0, 265, 266, 264,
270, 272, 269, 271, 267, 268, 0, 0, 0, 70,
0, 0, 0, 0, 0, 18, 19, 0, 0, 20,
0, 0, 0, 0, 0, 71, 0, 0, 0, 0,
58, 59, 60, 61, 62, 63, 64, 65, 66, 67,
68, 69, 0, 0, 0, 13, 0, 0, 0, 24,
0, 30, 0, 0, 31, 32, 51, 72, 0, 53,
0, 0, 22, 52, 0, 0, 0, 0, 0, 54,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 70, 0, 0, 0, 0, 0, 18,
19, 0, 0, 20, 0, 0, 0, 17, 72, 71,
0, 0, 0, 22, 58, 59, 60, 61, 62, 63,
64, 65, 66, 67, 68, 69, 0, 0, 0, 13,
0, 0, 0, 24, 0, 30, 0, 0, 31, 32,
18, 19, 0, 0, 20, 0, 0, 0, 17, 33,
0, 0, 0, 0, 22, 11, 12, 14, 15, 16,
21, 23, 25, 26, 27, 28, 29, 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, 100, 0,
0, 13, 0, 0, 0, 24, 167, 30, 0, 0,
31, 32, 0, 0, 0, 0, 0, 100, 0, 0,
0, 0, 0, 82, 84, 85, 0, 86, 87, 88,
89, 90, 91, 92, 93, 94, 95, 0, 96, 97,
99, 83, 82, 84, 85, 0, 86, 87, 88, 89,
90, 91, 92, 93, 94, 95, 0, 96, 97, 99,
83, 100, 0, 98, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
100, 0, 98, 0, 0, 0, 82, 84, 85, 0,
86, 87, 88, 0, 90, 91, 92, 93, 94, 95,
0, 96, 97, 99, 83, 82, 84, 85, 0, 86,
87, 0, 0, 90, 91, 0, 93, 94, 95, 0,
96, 97, 99, 83, 0, 0, 98, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 98,
}
var yyPact = [...]int16{
16, 168, 536, 536, 380, 495, -1000, -1000, -1000, 150,
-1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000,
-1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000,
-1000, -1000, -1000, 308, -1000, 237, -1000, 613, -1000, -1000,
-1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000,
20, 105, -1000, 454, -1000, 454, 147, -1000, -1000, -1000,
-1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000,
-1000, -1000, 287, -1000, -1000, 272, -1000, -1000, 260, -1000,
21, -1000, -50, -50, -50, -50, -50, -50, -50, -50,
-50, -50, -50, -50, -50, -50, -50, -50, 45, 18,
231, 105, -56, -1000, 170, 170, 304, -1000, 594, 121,
-1000, 185, -1000, -1000, 44, -1000, -1000, 258, -1000, 157,
-1000, 256, 454, -1000, -57, -49, -1000, 454, 454, 454,
454, 454, 454, 454, 454, 454, 454, 454, 454, 454,
454, 454, -1000, 171, -1000, -1000, -1000, 99, -1000, -1000,
-1000, -1000, -1000, -1000, 42, 42, 167, -1000, -1000, -1000,
-1000, 152, -1000, -1000, 33, -1000, 613, -1000, -1000, 187,
-1000, 156, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000,
-1000, -1000, 17, 13, 12, -1000, -1000, -1000, 252, 111,
170, 170, 170, 170, 121, 121, 73, 73, 73, 676,
657, 73, 73, 676, 121, 121, 73, 121, 111, -1000,
34, -1000, -1000, -1000, 177, -1000, 169, -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, 454,
-1000, -1000, -1000, -1000, 51, 51, 15, 51, 92, 92,
109, 55, -1000, -1000, 232, 229, 228, 219, 205, 204,
202, 200, 189, -1000, -1000, -1000, -1000, -1000, -1000, 37,
191, -1000, -1000, 14, -1000, 613, -1000, -1000, -1000, 51,
-1000, 8, 7, 379, -1000, -1000, -1000, 11, 10, 42,
42, 42, 107, 11, 107, 11, -1000, -1000, -1000, -1000,
-1000, 51, 51, -1000, -1000, -1000, 51, -1000, -1000, -1000,
-1000, -1000, -1000, 42, -1000, -1000, -1000, -1000, -1000, -1000,
29, -1000, 23, -1000, -1000, -1000, -1000,
}
var yyPgo = [...]int16{
0, 356, 13, 355, 6, 354, 352, 327, 351, 348,
184, 273, 347, 14, 346, 11, 10, 345, 344, 7,
342, 3, 4, 341, 2, 1, 0, 340, 12, 5,
339, 338, 15, 157, 337, 336, 8, 335, 334, 17,
332, 109, 325, 321, 315, 312, 305, 303, 298, 296,
265, 9, 294, 293, 263,
}
var yyR1 = [...]int8{
0, 53, 53, 53, 53, 53, 53, 53, 36, 36,
36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
31, 31, 31, 31, 32, 32, 34, 34, 34, 34,
34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
34, 34, 33, 35, 35, 45, 45, 40, 40, 40,
40, 15, 15, 15, 15, 14, 14, 14, 4, 4,
37, 39, 39, 38, 38, 38, 46, 44, 44, 44,
30, 30, 30, 9, 9, 42, 48, 48, 48, 48,
48, 49, 50, 50, 50, 41, 41, 41, 1, 1,
1, 2, 2, 2, 2, 11, 11, 7, 7, 7,
7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
7, 7, 7, 7, 7, 7, 7, 7, 7, 10,
10, 10, 10, 12, 12, 12, 13, 13, 13, 13,
54, 18, 18, 18, 18, 17, 17, 17, 17, 17,
17, 17, 17, 17, 27, 27, 27, 19, 19, 19,
19, 20, 20, 20, 21, 21, 21, 21, 21, 21,
21, 21, 21, 22, 22, 23, 23, 23, 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, 8, 8, 5,
5, 5, 5, 43, 26, 28, 28, 29, 29, 25,
24, 24, 51, 47, 52, 52, 16, 16,
}
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,
2, 3, 2, 3, 1, 2, 3, 3, 4, 3,
3, 5, 3, 1, 1, 4, 6, 6, 5, 4,
3, 2, 2, 1, 1, 3, 4, 2, 3, 1,
2, 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, 3,
4, 2, 0, 3, 1, 2, 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, 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, 2, 2, 1, 1, 1,
2, 1, 1, 1, 0, 1, 0, 1,
}
var yyChk = [...]int16{
-1000, -53, 88, 89, 90, 91, 2, 10, -11, -7,
-10, 60, 61, 75, 62, 63, 64, 12, 45, 46,
49, 65, 18, 66, 79, 67, 68, 69, 70, 71,
81, 84, 85, 13, -54, -11, 10, -36, -31, -34,
-37, -42, -43, -44, -46, -47, -48, -49, -50, -30,
-3, 12, 19, 15, 25, -8, -7, -41, 60, 61,
62, 63, 64, 65, 66, 67, 68, 69, 70, 71,
39, 55, 13, -50, -10, -12, 20, -13, 12, 2,
-18, 2, 39, 57, 40, 41, 43, 44, 45, 46,
47, 48, 49, 50, 51, 52, 54, 55, 79, 56,
14, -32, -39, 2, 75, 81, 15, -39, -36, -36,
-41, -1, 20, -2, 12, 2, 20, 7, 2, 4,
2, 24, -33, -40, -35, -45, 74, -33, -33, -33,
-33, -33, -33, -33, -33, -33, -33, -33, -33, -33,
-33, -33, -51, 55, 2, 9, -29, -9, 2, -26,
-28, 84, 85, 19, 39, 55, -51, 2, -39, -32,
-15, 15, 2, -15, -38, 22, -36, 22, 20, 7,
2, -5, 2, 4, 52, 42, 53, 20, -13, 25,
2, -17, 5, -27, -19, 12, -26, -28, 16, -36,
78, 80, 76, 77, -36, -36, -36, -36, -36, -36,
-36, -36, -36, -36, -36, -36, -36, -36, -36, -51,
15, -26, -26, 21, 6, 2, -14, 22, -4, -6,
2, 60, 74, 61, 75, 62, 63, 64, 76, 77,
12, 78, 45, 46, 49, 65, 18, 66, 79, 80,
67, 68, 69, 70, 71, 84, 85, 57, 22, 7,
20, -2, 25, 2, 26, 26, -28, 26, 39, 55,
-20, 24, 17, -21, 30, 28, 29, 35, 36, 33,
31, 34, 32, -15, -15, -16, -15, -16, 22, -52,
-51, 2, 22, 7, 2, -36, -25, 19, -25, 26,
-25, -19, -19, 24, 17, 2, 17, 6, 6, 6,
6, 6, 6, 6, 6, 6, 21, 2, 22, -4,
-25, 26, 26, 17, -21, -24, 55, -25, -29, -26,
-26, -26, -22, 14, -24, -22, -24, -25, -25, -25,
-23, -26, 24, 21, 2, 21, -26,
}
var yyDef = [...]int16{
0, -2, 122, 122, 0, 0, 7, 6, 1, 122,
96, 97, 98, 99, 100, 101, 102, 103, 104, 105,
106, 107, 108, 109, 110, 111, 112, 113, 114, 115,
116, 117, 118, 0, 2, -2, 3, 4, 8, 9,
10, 11, 12, 13, 14, 15, 16, 17, 18, 19,
0, 103, 213, 0, 223, 0, 83, 84, -2, -2,
-2, -2, -2, -2, -2, -2, -2, -2, -2, -2,
207, 208, 0, 5, 95, 0, 121, 124, 0, 129,
130, 134, 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, 60, 0, 81,
82, 0, 87, 89, 0, 94, 119, 0, 125, 0,
128, 133, 0, 42, 47, 48, 44, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 67, 0, 69, 222, 70, 0, 72, 217,
218, 73, 74, 214, 0, 0, 0, 80, 20, 21,
24, 0, 54, 25, 0, 62, 64, 66, 85, 0,
90, 0, 93, 209, 210, 211, 212, 120, 123, 126,
127, 132, 135, 137, 140, 144, 145, 146, 0, 26,
0, 0, -2, -2, 27, 28, 29, 30, 31, 32,
33, 34, 35, 36, 37, 38, 39, 40, 41, 68,
0, 215, 216, 75, -2, 79, 0, 53, 56, 58,
59, 180, 181, 182, 183, 184, 185, 186, 187, 188,
189, 190, 191, 192, 193, 194, 195, 196, 197, 198,
199, 200, 201, 202, 203, 204, 205, 206, 61, 65,
86, 88, 91, 92, 0, 0, 0, 0, 0, 0,
0, 0, 150, 152, 0, 0, 0, 0, 0, 0,
0, 0, 0, 45, 46, 49, 227, 50, 71, 0,
-2, 78, 51, 0, 57, 63, 136, 219, 138, 0,
141, 0, 0, 0, 148, 153, 149, 0, 0, 0,
0, 0, 0, 0, 0, 0, 76, 77, 52, 55,
139, 0, 0, 147, 151, 154, 0, 221, 155, 156,
157, 158, 159, 0, 160, 161, 162, 142, 143, 220,
0, 166, 0, 164, 167, 163, 165,
}
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,
}
var yyTok3 = [...]int8{
0,
}
var yyErrorMessages = [...]struct {
state int
token int
msg string
}{}
//line yaccpar:1
/* 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]
//line promql/parser/generated_parser.y:200
{
yylex.(*parser).generatedParserResult = yyDollar[2].labels
}
case 3:
yyDollar = yyS[yypt-2 : yypt+1]
//line promql/parser/generated_parser.y:203
{
yylex.(*parser).addParseErrf(posrange.PositionRange{}, "no expression found in input")
}
case 4:
yyDollar = yyS[yypt-2 : yypt+1]
//line promql/parser/generated_parser.y:205
{
yylex.(*parser).generatedParserResult = yyDollar[2].node
}
case 5:
yyDollar = yyS[yypt-2 : yypt+1]
//line promql/parser/generated_parser.y:207
{
yylex.(*parser).generatedParserResult = yyDollar[2].node
}
case 7:
yyDollar = yyS[yypt-1 : yypt+1]
//line promql/parser/generated_parser.y:210
{
yylex.(*parser).unexpected("", "")
}
case 20:
yyDollar = yyS[yypt-3 : yypt+1]
//line promql/parser/generated_parser.y:233
{
yyVAL.node = yylex.(*parser).newAggregateExpr(yyDollar[1].item, yyDollar[2].node, yyDollar[3].node)
}
case 21:
yyDollar = yyS[yypt-3 : yypt+1]
//line promql/parser/generated_parser.y:235
{
yyVAL.node = yylex.(*parser).newAggregateExpr(yyDollar[1].item, yyDollar[3].node, yyDollar[2].node)
}
case 22:
yyDollar = yyS[yypt-2 : yypt+1]
//line promql/parser/generated_parser.y:237
{
yyVAL.node = yylex.(*parser).newAggregateExpr(yyDollar[1].item, &AggregateExpr{}, yyDollar[2].node)
}
case 23:
yyDollar = yyS[yypt-2 : yypt+1]
//line promql/parser/generated_parser.y:239
{
yylex.(*parser).unexpected("aggregation", "")
yyVAL.node = yylex.(*parser).newAggregateExpr(yyDollar[1].item, &AggregateExpr{}, Expressions{})
}
case 24:
yyDollar = yyS[yypt-2 : yypt+1]
//line promql/parser/generated_parser.y:247
{
yyVAL.node = &AggregateExpr{
Grouping: yyDollar[2].strings,
}
}
case 25:
yyDollar = yyS[yypt-2 : yypt+1]
//line promql/parser/generated_parser.y:253
{
yyVAL.node = &AggregateExpr{
Grouping: yyDollar[2].strings,
Without: true,
}
}
case 26:
yyDollar = yyS[yypt-4 : yypt+1]
//line promql/parser/generated_parser.y:266
{
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]
//line promql/parser/generated_parser.y:267
{
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]
//line promql/parser/generated_parser.y:268
{
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]
//line promql/parser/generated_parser.y:269
{
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]
//line promql/parser/generated_parser.y:270
{
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]
//line promql/parser/generated_parser.y:271
{
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]
//line promql/parser/generated_parser.y:272
{
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]
//line promql/parser/generated_parser.y:273
{
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]
//line promql/parser/generated_parser.y:274
{
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]
//line promql/parser/generated_parser.y:275
{
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]
//line promql/parser/generated_parser.y:276
{
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]
//line promql/parser/generated_parser.y:277
{
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]
//line promql/parser/generated_parser.y:278
{
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]
//line promql/parser/generated_parser.y:279
{
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]
//line promql/parser/generated_parser.y:280
{
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]
//line promql/parser/generated_parser.y:281
{
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]
//line promql/parser/generated_parser.y:289
{
yyVAL.node = &BinaryExpr{
VectorMatching: &VectorMatching{Card: CardOneToOne},
}
}
case 44:
yyDollar = yyS[yypt-1 : yypt+1]
//line promql/parser/generated_parser.y:294
{
yyVAL.node = &BinaryExpr{
VectorMatching: &VectorMatching{Card: CardOneToOne},
ReturnBool: true,
}
}
case 45:
yyDollar = yyS[yypt-3 : yypt+1]
//line promql/parser/generated_parser.y:302
{
yyVAL.node = yyDollar[1].node
yyVAL.node.(*BinaryExpr).VectorMatching.MatchingLabels = yyDollar[3].strings
}
case 46:
yyDollar = yyS[yypt-3 : yypt+1]
//line promql/parser/generated_parser.y:307
{
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]
//line promql/parser/generated_parser.y:317
{
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]
//line promql/parser/generated_parser.y:323
{
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]
//line promql/parser/generated_parser.y:332
{
yyVAL.strings = yyDollar[2].strings
}
case 52:
yyDollar = yyS[yypt-4 : yypt+1]
//line promql/parser/generated_parser.y:334
{
yyVAL.strings = yyDollar[2].strings
}
case 53:
yyDollar = yyS[yypt-2 : yypt+1]
//line promql/parser/generated_parser.y:336
{
yyVAL.strings = []string{}
}
case 54:
yyDollar = yyS[yypt-1 : yypt+1]
//line promql/parser/generated_parser.y:338
{
yylex.(*parser).unexpected("grouping opts", "\"(\"")
yyVAL.strings = nil
}
case 55:
yyDollar = yyS[yypt-3 : yypt+1]
//line promql/parser/generated_parser.y:344
{
yyVAL.strings = append(yyDollar[1].strings, yyDollar[3].item.Val)
}
case 56:
yyDollar = yyS[yypt-1 : yypt+1]
//line promql/parser/generated_parser.y:346
{
yyVAL.strings = []string{yyDollar[1].item.Val}
}
case 57:
yyDollar = yyS[yypt-2 : yypt+1]
//line promql/parser/generated_parser.y:348
{
yylex.(*parser).unexpected("grouping opts", "\",\" or \")\"")
yyVAL.strings = yyDollar[1].strings
}
case 58:
yyDollar = yyS[yypt-1 : yypt+1]
//line promql/parser/generated_parser.y:352
{
if !isLabel(yyDollar[1].item.Val) {
yylex.(*parser).unexpected("grouping opts", "label")
}
yyVAL.item = yyDollar[1].item
}
case 59:
yyDollar = yyS[yypt-1 : yypt+1]
//line promql/parser/generated_parser.y:359
{
yylex.(*parser).unexpected("grouping opts", "label")
yyVAL.item = Item{}
}
case 60:
yyDollar = yyS[yypt-2 : yypt+1]
//line promql/parser/generated_parser.y:367
{
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)
}
yyVAL.node = &Call{
Func: fn,
Args: yyDollar[2].node.(Expressions),
PosRange: posrange.PositionRange{
Start: yyDollar[1].item.Pos,
End: yylex.(*parser).lastClosing,
},
}
}
case 61:
yyDollar = yyS[yypt-3 : yypt+1]
//line promql/parser/generated_parser.y:384
{
yyVAL.node = yyDollar[2].node
}
case 62:
yyDollar = yyS[yypt-2 : yypt+1]
//line promql/parser/generated_parser.y:386
{
yyVAL.node = Expressions{}
}
case 63:
yyDollar = yyS[yypt-3 : yypt+1]
//line promql/parser/generated_parser.y:390
{
yyVAL.node = append(yyDollar[1].node.(Expressions), yyDollar[3].node.(Expr))
}
case 64:
yyDollar = yyS[yypt-1 : yypt+1]
//line promql/parser/generated_parser.y:392
{
yyVAL.node = Expressions{yyDollar[1].node.(Expr)}
}
case 65:
yyDollar = yyS[yypt-2 : yypt+1]
//line promql/parser/generated_parser.y:394
{
yylex.(*parser).addParseErrf(yyDollar[2].item.PositionRange(), "trailing commas not allowed in function call args")
yyVAL.node = yyDollar[1].node
}
case 66:
yyDollar = yyS[yypt-3 : yypt+1]
//line promql/parser/generated_parser.y:405
{
yyVAL.node = &ParenExpr{Expr: yyDollar[2].node.(Expr), PosRange: mergeRanges(&yyDollar[1].item, &yyDollar[3].item)}
}
case 67:
yyDollar = yyS[yypt-3 : yypt+1]
//line promql/parser/generated_parser.y:413
{
yylex.(*parser).addOffset(yyDollar[1].node, yyDollar[3].duration)
yyVAL.node = yyDollar[1].node
}
case 68:
yyDollar = yyS[yypt-4 : yypt+1]
//line promql/parser/generated_parser.y:418
{
yylex.(*parser).addOffset(yyDollar[1].node, -yyDollar[4].duration)
yyVAL.node = yyDollar[1].node
}
case 69:
yyDollar = yyS[yypt-3 : yypt+1]
//line promql/parser/generated_parser.y:423
{
yylex.(*parser).unexpected("offset", "duration")
yyVAL.node = yyDollar[1].node
}
case 70:
yyDollar = yyS[yypt-3 : yypt+1]
//line promql/parser/generated_parser.y:430
{
yylex.(*parser).setTimestamp(yyDollar[1].node, yyDollar[3].float)
yyVAL.node = yyDollar[1].node
}
case 71:
yyDollar = yyS[yypt-5 : yypt+1]
//line promql/parser/generated_parser.y:435
{
yylex.(*parser).setAtModifierPreprocessor(yyDollar[1].node, yyDollar[3].item)
yyVAL.node = yyDollar[1].node
}
case 72:
yyDollar = yyS[yypt-3 : yypt+1]
//line promql/parser/generated_parser.y:440
{
yylex.(*parser).unexpected("@", "timestamp")
yyVAL.node = yyDollar[1].node
}
case 75:
yyDollar = yyS[yypt-4 : yypt+1]
//line promql/parser/generated_parser.y:450
{
var errMsg string
vs, ok := yyDollar[1].node.(*VectorSelector)
if !ok {
errMsg = "ranges only allowed for vector selectors"
} else if vs.OriginalOffset != 0 {
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, errMsg)
}
yyVAL.node = &MatrixSelector{
VectorSelector: yyDollar[1].node.(Expr),
Range: yyDollar[3].duration,
EndPos: yylex.(*parser).lastClosing,
}
}
case 76:
yyDollar = yyS[yypt-6 : yypt+1]
//line promql/parser/generated_parser.y:475
{
yyVAL.node = &SubqueryExpr{
Expr: yyDollar[1].node.(Expr),
Range: yyDollar[3].duration,
Step: yyDollar[5].duration,
EndPos: yyDollar[6].item.Pos + 1,
}
}
case 77:
yyDollar = yyS[yypt-6 : yypt+1]
//line promql/parser/generated_parser.y:485
{
yylex.(*parser).unexpected("subquery selector", "\"]\"")
yyVAL.node = yyDollar[1].node
}
case 78:
yyDollar = yyS[yypt-5 : yypt+1]
//line promql/parser/generated_parser.y:487
{
yylex.(*parser).unexpected("subquery selector", "duration or \"]\"")
yyVAL.node = yyDollar[1].node
}
case 79:
yyDollar = yyS[yypt-4 : yypt+1]
//line promql/parser/generated_parser.y:489
{
yylex.(*parser).unexpected("subquery or range", "\":\" or \"]\"")
yyVAL.node = yyDollar[1].node
}
case 80:
yyDollar = yyS[yypt-3 : yypt+1]
//line promql/parser/generated_parser.y:491
{
yylex.(*parser).unexpected("subquery selector", "duration")
yyVAL.node = yyDollar[1].node
}
case 81:
yyDollar = yyS[yypt-2 : yypt+1]
//line promql/parser/generated_parser.y:501
{
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 82:
yyDollar = yyS[yypt-2 : yypt+1]
//line promql/parser/generated_parser.y:519
{
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 83:
yyDollar = yyS[yypt-1 : yypt+1]
//line promql/parser/generated_parser.y:527
{
vs := &VectorSelector{
Name: yyDollar[1].item.Val,
LabelMatchers: []*labels.Matcher{},
PosRange: yyDollar[1].item.PositionRange(),
}
yylex.(*parser).assembleVectorSelector(vs)
yyVAL.node = vs
}
case 84:
yyDollar = yyS[yypt-1 : yypt+1]
//line promql/parser/generated_parser.y:537
{
vs := yyDollar[1].node.(*VectorSelector)
yylex.(*parser).assembleVectorSelector(vs)
yyVAL.node = vs
}
case 85:
yyDollar = yyS[yypt-3 : yypt+1]
//line promql/parser/generated_parser.y:545
{
yyVAL.node = &VectorSelector{
LabelMatchers: yyDollar[2].matchers,
PosRange: mergeRanges(&yyDollar[1].item, &yyDollar[3].item),
}
}
case 86:
yyDollar = yyS[yypt-4 : yypt+1]
//line promql/parser/generated_parser.y:552
{
yyVAL.node = &VectorSelector{
LabelMatchers: yyDollar[2].matchers,
PosRange: mergeRanges(&yyDollar[1].item, &yyDollar[4].item),
}
}
case 87:
yyDollar = yyS[yypt-2 : yypt+1]
//line promql/parser/generated_parser.y:559
{
yyVAL.node = &VectorSelector{
LabelMatchers: []*labels.Matcher{},
PosRange: mergeRanges(&yyDollar[1].item, &yyDollar[2].item),
}
}
case 88:
yyDollar = yyS[yypt-3 : yypt+1]
//line promql/parser/generated_parser.y:568
{
if yyDollar[1].matchers != nil {
yyVAL.matchers = append(yyDollar[1].matchers, yyDollar[3].matcher)
} else {
yyVAL.matchers = yyDollar[1].matchers
}
}
case 89:
yyDollar = yyS[yypt-1 : yypt+1]
//line promql/parser/generated_parser.y:576
{
yyVAL.matchers = []*labels.Matcher{yyDollar[1].matcher}
}
case 90:
yyDollar = yyS[yypt-2 : yypt+1]
//line promql/parser/generated_parser.y:578
{
yylex.(*parser).unexpected("label matching", "\",\" or \"}\"")
yyVAL.matchers = yyDollar[1].matchers
}
case 91:
yyDollar = yyS[yypt-3 : yypt+1]
//line promql/parser/generated_parser.y:582
{
yyVAL.matcher = yylex.(*parser).newLabelMatcher(yyDollar[1].item, yyDollar[2].item, yyDollar[3].item)
}
case 92:
yyDollar = yyS[yypt-3 : yypt+1]
//line promql/parser/generated_parser.y:584
{
yylex.(*parser).unexpected("label matching", "string")
yyVAL.matcher = nil
}
case 93:
yyDollar = yyS[yypt-2 : yypt+1]
//line promql/parser/generated_parser.y:586
{
yylex.(*parser).unexpected("label matching", "label matching operator")
yyVAL.matcher = nil
}
case 94:
yyDollar = yyS[yypt-1 : yypt+1]
//line promql/parser/generated_parser.y:588
{
yylex.(*parser).unexpected("label matching", "identifier or \"}\"")
yyVAL.matcher = nil
}
case 95:
yyDollar = yyS[yypt-2 : yypt+1]
//line promql/parser/generated_parser.y:596
{
b := labels.NewBuilder(yyDollar[2].labels)
b.Set(labels.MetricName, yyDollar[1].item.Val)
yyVAL.labels = b.Labels()
}
case 96:
yyDollar = yyS[yypt-1 : yypt+1]
//line promql/parser/generated_parser.y:598
{
yyVAL.labels = yyDollar[1].labels
}
case 119:
yyDollar = yyS[yypt-3 : yypt+1]
//line promql/parser/generated_parser.y:605
{
yyVAL.labels = labels.New(yyDollar[2].lblList...)
}
case 120:
yyDollar = yyS[yypt-4 : yypt+1]
//line promql/parser/generated_parser.y:607
{
yyVAL.labels = labels.New(yyDollar[2].lblList...)
}
case 121:
yyDollar = yyS[yypt-2 : yypt+1]
//line promql/parser/generated_parser.y:609
{
yyVAL.labels = labels.New()
}
case 122:
yyDollar = yyS[yypt-0 : yypt+1]
//line promql/parser/generated_parser.y:611
{
yyVAL.labels = labels.New()
}
case 123:
yyDollar = yyS[yypt-3 : yypt+1]
//line promql/parser/generated_parser.y:615
{
yyVAL.lblList = append(yyDollar[1].lblList, yyDollar[3].label)
}
case 124:
yyDollar = yyS[yypt-1 : yypt+1]
//line promql/parser/generated_parser.y:617
{
yyVAL.lblList = []labels.Label{yyDollar[1].label}
}
case 125:
yyDollar = yyS[yypt-2 : yypt+1]
//line promql/parser/generated_parser.y:619
{
yylex.(*parser).unexpected("label set", "\",\" or \"}\"")
yyVAL.lblList = yyDollar[1].lblList
}
case 126:
yyDollar = yyS[yypt-3 : yypt+1]
//line promql/parser/generated_parser.y:624
{
yyVAL.label = labels.Label{Name: yyDollar[1].item.Val, Value: yylex.(*parser).unquoteString(yyDollar[3].item.Val)}
}
case 127:
yyDollar = yyS[yypt-3 : yypt+1]
//line promql/parser/generated_parser.y:626
{
yylex.(*parser).unexpected("label set", "string")
yyVAL.label = labels.Label{}
}
case 128:
yyDollar = yyS[yypt-2 : yypt+1]
//line promql/parser/generated_parser.y:628
{
yylex.(*parser).unexpected("label set", "\"=\"")
yyVAL.label = labels.Label{}
}
case 129:
yyDollar = yyS[yypt-1 : yypt+1]
//line promql/parser/generated_parser.y:630
{
yylex.(*parser).unexpected("label set", "identifier or \"}\"")
yyVAL.label = labels.Label{}
}
case 130:
yyDollar = yyS[yypt-2 : yypt+1]
//line promql/parser/generated_parser.y:641
{
yylex.(*parser).generatedParserResult = &seriesDescription{
labels: yyDollar[1].labels,
values: yyDollar[2].series,
}
}
case 131:
yyDollar = yyS[yypt-0 : yypt+1]
//line promql/parser/generated_parser.y:650
{
yyVAL.series = []SequenceValue{}
}
case 132:
yyDollar = yyS[yypt-3 : yypt+1]
//line promql/parser/generated_parser.y:652
{
yyVAL.series = append(yyDollar[1].series, yyDollar[3].series...)
}
case 133:
yyDollar = yyS[yypt-2 : yypt+1]
//line promql/parser/generated_parser.y:654
{
yyVAL.series = yyDollar[1].series
}
case 134:
yyDollar = yyS[yypt-1 : yypt+1]
//line promql/parser/generated_parser.y:656
{
yylex.(*parser).unexpected("series values", "")
yyVAL.series = nil
}
case 135:
yyDollar = yyS[yypt-1 : yypt+1]
//line promql/parser/generated_parser.y:660
{
yyVAL.series = []SequenceValue{{Omitted: true}}
}
case 136:
yyDollar = yyS[yypt-3 : yypt+1]
//line promql/parser/generated_parser.y:662
{
yyVAL.series = []SequenceValue{}
for i := uint64(0); i < yyDollar[3].uint; i++ {
yyVAL.series = append(yyVAL.series, SequenceValue{Omitted: true})
}
}
case 137:
yyDollar = yyS[yypt-1 : yypt+1]
//line promql/parser/generated_parser.y:669
{
yyVAL.series = []SequenceValue{{Value: yyDollar[1].float}}
}
case 138:
yyDollar = yyS[yypt-3 : yypt+1]
//line promql/parser/generated_parser.y:671
{
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 139:
yyDollar = yyS[yypt-4 : yypt+1]
//line promql/parser/generated_parser.y:679
{
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 140:
yyDollar = yyS[yypt-1 : yypt+1]
//line promql/parser/generated_parser.y:689
{
yyVAL.series = []SequenceValue{{Histogram: yyDollar[1].histogram}}
}
case 141:
yyDollar = yyS[yypt-3 : yypt+1]
//line promql/parser/generated_parser.y:693
{
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 142:
yyDollar = yyS[yypt-5 : yypt+1]
//line promql/parser/generated_parser.y:702
{
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 143:
yyDollar = yyS[yypt-5 : yypt+1]
//line promql/parser/generated_parser.y:710
{
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 144:
yyDollar = yyS[yypt-1 : yypt+1]
//line promql/parser/generated_parser.y:720
{
if yyDollar[1].item.Val != "stale" {
yylex.(*parser).unexpected("series values", "number or \"stale\"")
}
yyVAL.float = math.Float64frombits(value.StaleNaN)
}
case 147:
yyDollar = yyS[yypt-4 : yypt+1]
//line promql/parser/generated_parser.y:732
{
yyVAL.histogram = yylex.(*parser).buildHistogramFromMap(&yyDollar[2].descriptors)
}
case 148:
yyDollar = yyS[yypt-3 : yypt+1]
//line promql/parser/generated_parser.y:736
{
yyVAL.histogram = yylex.(*parser).buildHistogramFromMap(&yyDollar[2].descriptors)
}
case 149:
yyDollar = yyS[yypt-3 : yypt+1]
//line promql/parser/generated_parser.y:740
{
m := yylex.(*parser).newMap()
yyVAL.histogram = yylex.(*parser).buildHistogramFromMap(&m)
}
case 150:
yyDollar = yyS[yypt-2 : yypt+1]
//line promql/parser/generated_parser.y:745
{
m := yylex.(*parser).newMap()
yyVAL.histogram = yylex.(*parser).buildHistogramFromMap(&m)
}
case 151:
yyDollar = yyS[yypt-3 : yypt+1]
//line promql/parser/generated_parser.y:753
{
yyVAL.descriptors = *(yylex.(*parser).mergeMaps(&yyDollar[1].descriptors, &yyDollar[3].descriptors))
}
case 152:
yyDollar = yyS[yypt-1 : yypt+1]
//line promql/parser/generated_parser.y:757
{
yyVAL.descriptors = yyDollar[1].descriptors
}
case 153:
yyDollar = yyS[yypt-2 : yypt+1]
//line promql/parser/generated_parser.y:760
{
yylex.(*parser).unexpected("histogram description", "histogram description key, e.g. buckets:[5 10 7]")
}
case 154:
yyDollar = yyS[yypt-3 : yypt+1]
//line promql/parser/generated_parser.y:767
{
yyVAL.descriptors = yylex.(*parser).newMap()
yyVAL.descriptors["schema"] = yyDollar[3].int
}
case 155:
yyDollar = yyS[yypt-3 : yypt+1]
//line promql/parser/generated_parser.y:772
{
yyVAL.descriptors = yylex.(*parser).newMap()
yyVAL.descriptors["sum"] = yyDollar[3].float
}
case 156:
yyDollar = yyS[yypt-3 : yypt+1]
//line promql/parser/generated_parser.y:777
{
yyVAL.descriptors = yylex.(*parser).newMap()
yyVAL.descriptors["count"] = yyDollar[3].float
}
case 157:
yyDollar = yyS[yypt-3 : yypt+1]
//line promql/parser/generated_parser.y:782
{
yyVAL.descriptors = yylex.(*parser).newMap()
yyVAL.descriptors["z_bucket"] = yyDollar[3].float
}
case 158:
yyDollar = yyS[yypt-3 : yypt+1]
//line promql/parser/generated_parser.y:787
{
yyVAL.descriptors = yylex.(*parser).newMap()
yyVAL.descriptors["z_bucket_w"] = yyDollar[3].float
}
case 159:
yyDollar = yyS[yypt-3 : yypt+1]
//line promql/parser/generated_parser.y:792
{
yyVAL.descriptors = yylex.(*parser).newMap()
yyVAL.descriptors["buckets"] = yyDollar[3].bucket_set
}
case 160:
yyDollar = yyS[yypt-3 : yypt+1]
//line promql/parser/generated_parser.y:797
{
yyVAL.descriptors = yylex.(*parser).newMap()
yyVAL.descriptors["offset"] = yyDollar[3].int
}
case 161:
yyDollar = yyS[yypt-3 : yypt+1]
//line promql/parser/generated_parser.y:802
{
yyVAL.descriptors = yylex.(*parser).newMap()
yyVAL.descriptors["n_buckets"] = yyDollar[3].bucket_set
}
case 162:
yyDollar = yyS[yypt-3 : yypt+1]
//line promql/parser/generated_parser.y:807
{
yyVAL.descriptors = yylex.(*parser).newMap()
yyVAL.descriptors["n_offset"] = yyDollar[3].int
}
case 163:
yyDollar = yyS[yypt-4 : yypt+1]
//line promql/parser/generated_parser.y:814
{
yyVAL.bucket_set = yyDollar[2].bucket_set
}
case 164:
yyDollar = yyS[yypt-3 : yypt+1]
//line promql/parser/generated_parser.y:818
{
yyVAL.bucket_set = yyDollar[2].bucket_set
}
case 165:
yyDollar = yyS[yypt-3 : yypt+1]
//line promql/parser/generated_parser.y:824
{
yyVAL.bucket_set = append(yyDollar[1].bucket_set, yyDollar[3].float)
}
case 166:
yyDollar = yyS[yypt-1 : yypt+1]
//line promql/parser/generated_parser.y:828
{
yyVAL.bucket_set = []float64{yyDollar[1].float}
}
case 213:
yyDollar = yyS[yypt-1 : yypt+1]
//line promql/parser/generated_parser.y:853
{
yyVAL.node = &NumberLiteral{
Val: yylex.(*parser).number(yyDollar[1].item.Val),
PosRange: yyDollar[1].item.PositionRange(),
}
}
case 214:
yyDollar = yyS[yypt-1 : yypt+1]
//line promql/parser/generated_parser.y:861
{
yyVAL.float = yylex.(*parser).number(yyDollar[1].item.Val)
}
case 215:
yyDollar = yyS[yypt-2 : yypt+1]
//line promql/parser/generated_parser.y:863
{
yyVAL.float = yyDollar[2].float
}
case 216:
yyDollar = yyS[yypt-2 : yypt+1]
//line promql/parser/generated_parser.y:864
{
yyVAL.float = -yyDollar[2].float
}
case 219:
yyDollar = yyS[yypt-1 : yypt+1]
//line promql/parser/generated_parser.y:870
{
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 220:
yyDollar = yyS[yypt-2 : yypt+1]
//line promql/parser/generated_parser.y:879
{
yyVAL.int = -int64(yyDollar[2].uint)
}
case 221:
yyDollar = yyS[yypt-1 : yypt+1]
//line promql/parser/generated_parser.y:880
{
yyVAL.int = int64(yyDollar[1].uint)
}
case 222:
yyDollar = yyS[yypt-1 : yypt+1]
//line promql/parser/generated_parser.y:884
{
var err error
yyVAL.duration, err = parseDuration(yyDollar[1].item.Val)
if err != nil {
yylex.(*parser).addParseErr(yyDollar[1].item.PositionRange(), err)
}
}
case 223:
yyDollar = yyS[yypt-1 : yypt+1]
//line promql/parser/generated_parser.y:895
{
yyVAL.node = &StringLiteral{
Val: yylex.(*parser).unquoteString(yyDollar[1].item.Val),
PosRange: yyDollar[1].item.PositionRange(),
}
}
case 224:
yyDollar = yyS[yypt-0 : yypt+1]
//line promql/parser/generated_parser.y:908
{
yyVAL.duration = 0
}
case 226:
yyDollar = yyS[yypt-0 : yypt+1]
//line promql/parser/generated_parser.y:912
{
yyVAL.strings = nil
}
}
goto yystack /* stack new state and value */
}