diff --git a/CHANGELOG.md b/CHANGELOG.md index 6e040c8bd4a1..4f9f67e4053f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -22,6 +22,7 @@ Here is the list with the changes that were produced since the previous release. ##### Changes * [6361](https://github.com/grafana/loki/pull/6361) **chaudum**: Sum values in unwrapped rate aggregation instead of treating them as counter. +* [6412](https://github.com/grafana/loki/pull/6412) **chaudum**: Add new unwrapped range aggregation `rate_counter()` to LogQL * [6042](https://github.com/grafana/loki/pull/6042) **slim-bean**: Add a new configuration to allow fudging of ingested timestamps to guarantee sort order of duplicate timestamps at query time. * [6120](https://github.com/grafana/loki/pull/6120) **KMiller-Grafana**: Rename configuration parameter fudge_duplicate_timestamp to be increment_duplicate_timestamp. * [5777](https://github.com/grafana/loki/pull/5777) **tatchiuleung**: storage: make Azure blobID chunk delimiter configurable diff --git a/docs/sources/logql/metric_queries.md b/docs/sources/logql/metric_queries.md index e5ad7315db17..c9317e53572a 100644 --- a/docs/sources/logql/metric_queries.md +++ b/docs/sources/logql/metric_queries.md @@ -69,6 +69,7 @@ We currently support the functions: Supported function for operating over unwrapped ranges are: - `rate(unwrapped-range)`: calculates per second rate of the sum of all values in the specified interval. +- `rate_counter(unwrapped-range)`: calculates per second rate of the values in the specified interval and treating them as "counter metric" - `sum_over_time(unwrapped-range)`: the sum of all values in the specified interval. - `avg_over_time(unwrapped-range)`: the average value of all points in the specified interval. - `max_over_time(unwrapped-range)`: the maximum value of all points in the specified interval. diff --git a/docs/sources/upgrading/_index.md b/docs/sources/upgrading/_index.md index 02b6fefa62fb..98638211b5c8 100644 --- a/docs/sources/upgrading/_index.md +++ b/docs/sources/upgrading/_index.md @@ -31,9 +31,15 @@ The output is incredibly verbose as it shows the entire internal config struct u ## 2.6.0 - ### Loki +#### Implementation of unwrapped `rate` aggregation changed + +The implementation of the `rate()` aggregation function changed back to the previous implemention prior to [#5013](https://github.com/grafana/loki/pulls/5013). +This means that the rate per second is calculated based on the sum of the extracted values, instead of the average increase over time. + +If you want the extracted values to be treated as [Counter](https://prometheus.io/docs/concepts/metric_types/#counter) metric, you should use the new `rate_counter()` aggregation function, which calculates the per-second average rate of increase of the vector. + #### Default value for `azure.container-name` changed This value now defaults to `loki`, it was previously set to `cortex`. If you are relying on this container name for your chunks or ruler storage, you will have to manually specify `-azure.container-name=cortex` or `-ruler.storage.azure.container-name=cortex` respectively. diff --git a/pkg/logql/engine_test.go b/pkg/logql/engine_test.go index 689cb04ab782..18fb29e9c456 100644 --- a/pkg/logql/engine_test.go +++ b/pkg/logql/engine_test.go @@ -53,6 +53,7 @@ func TestEngine_LogsRateUnwrap(t *testing.T) { time.Unix(60, 0), logproto.FORWARD, 10, + // create a stream {app="foo"} with 300 samples starting at 46s and ending at 345s with a constant value of 1 [][]logproto.Series{ // 30s range the lower bound of the range is not inclusive only 15 samples will make it 60 included {newSeries(testSize, offset(46, constantValue(1)), `{app="foo"}`)}, @@ -60,6 +61,7 @@ func TestEngine_LogsRateUnwrap(t *testing.T) { []SelectSampleParams{ {&logproto.SampleQueryRequest{Start: time.Unix(30, 0), End: time.Unix(60, 0), Selector: `rate({app="foo"} | unwrap foo[30s])`}}, }, + // there are 15 samples (from 47 to 61) matched from the generated series // SUM(n=47, 61, 1) = 15 // 15 / 30 = 0.5 promql.Vector{promql.Sample{Point: promql.Point{T: 60 * 1000, V: 0.5}, Metric: labels.Labels{labels.Label{Name: "app", Value: "foo"}}}}, @@ -69,6 +71,7 @@ func TestEngine_LogsRateUnwrap(t *testing.T) { time.Unix(60, 0), logproto.FORWARD, 10, + // create a stream {app="foo"} with 300 samples starting at 46s and ending at 345s with an increasing value by 1 [][]logproto.Series{ // 30s range the lower bound of the range is not inclusive only 15 samples will make it 60 included {newSeries(testSize, offset(46, incValue(1)), `{app="foo"}`)}, @@ -76,10 +79,45 @@ func TestEngine_LogsRateUnwrap(t *testing.T) { []SelectSampleParams{ {&logproto.SampleQueryRequest{Start: time.Unix(30, 0), End: time.Unix(60, 0), Selector: `rate({app="foo"} | unwrap foo[30s])`}}, }, - // SUM(n=47, 61, n) = 810 + // there are 15 samples (from 47 to 61) matched from the generated series + // SUM(n=47, 61, n) = (47+48+...+61) = 810 // 810 / 30 = 27 promql.Vector{promql.Sample{Point: promql.Point{T: 60 * 1000, V: 27}, Metric: labels.Labels{labels.Label{Name: "app", Value: "foo"}}}}, }, + { + `rate_counter({app="foo"} | unwrap foo [30s])`, + time.Unix(60, 0), + logproto.FORWARD, + 10, + // create a stream {app="foo"} with 300 samples starting at 46s and ending at 345s with a constant value of 1 + [][]logproto.Series{ + // 30s range the lower bound of the range is not inclusive only 15 samples will make it 60 included + {newSeries(testSize, offset(46, constantValue(1)), `{app="foo"}`)}, + }, + []SelectSampleParams{ + {&logproto.SampleQueryRequest{Start: time.Unix(30, 0), End: time.Unix(60, 0), Selector: `rate_counter({app="foo"} | unwrap foo[30s])`}}, + }, + // there are 15 samples (from 47 to 61) matched from the generated series + // (1 - 1) / 30 = 0 + promql.Vector{promql.Sample{Point: promql.Point{T: 60 * 1000, V: 0}, Metric: labels.Labels{labels.Label{Name: "app", Value: "foo"}}}}, + }, + { + `rate_counter({app="foo"} | unwrap foo [30s])`, + time.Unix(60, 0), + logproto.FORWARD, + 10, + // create a stream {app="foo"} with 300 samples starting at 46s and ending at 345s with an increasing value by 1 + [][]logproto.Series{ + // 30s range the lower bound of the range is not inclusive only 15 samples will make it 60 included + {newSeries(testSize, offset(46, incValue(1)), `{app="foo"}`)}, + }, + []SelectSampleParams{ + {&logproto.SampleQueryRequest{Start: time.Unix(30, 0), End: time.Unix(60, 0), Selector: `rate_counter({app="foo"} | unwrap foo[30s])`}}, + }, + // there are 15 samples (from 47 to 61) matched from the generated series + // (61 - 47) / 30 = 0.4666 + promql.Vector{promql.Sample{Point: promql.Point{T: 60 * 1000, V: 0.46666766666666665}, Metric: labels.Labels{labels.Label{Name: "app", Value: "foo"}}}}, + }, } { test := test t.Run(fmt.Sprintf("%s %s", test.qs, test.direction), func(t *testing.T) { diff --git a/pkg/logql/range_vector.go b/pkg/logql/range_vector.go index da0168ec20f7..99c7755e99cb 100644 --- a/pkg/logql/range_vector.go +++ b/pkg/logql/range_vector.go @@ -189,6 +189,8 @@ func aggregator(r *syntax.RangeAggregationExpr) (RangeVectorAggregator, error) { switch r.Operation { case syntax.OpRangeTypeRate: return rateLogs(r.Left.Interval, r.Left.Unwrap != nil), nil + case syntax.OpRangeTypeRateCounter: + return rateCounter(r.Left.Interval), nil case syntax.OpRangeTypeCount: return countOverTime, nil case syntax.OpRangeTypeBytesRate: @@ -233,6 +235,92 @@ func rateLogs(selRange time.Duration, computeValues bool) func(samples []promql. } } +// rateCounter calculates the per-second rate of values extracted from log lines +// and treat them like a "counter" metric. +func rateCounter(selRange time.Duration) func(samples []promql.Point) float64 { + return func(samples []promql.Point) float64 { + return extrapolatedRate(samples, selRange, true, true) + } +} + +// extrapolatedRate function is taken from prometheus code promql/functions.go:59 +// extrapolatedRate is a utility function for rate/increase/delta. +// It calculates the rate (allowing for counter resets if isCounter is true), +// extrapolates if the first/last sample is close to the boundary, and returns +// the result as either per-second (if isRate is true) or overall. +func extrapolatedRate(samples []promql.Point, selRange time.Duration, isCounter, isRate bool) float64 { + // No sense in trying to compute a rate without at least two points. Drop + // this Vector element. + if len(samples) < 2 { + return 0 + } + var ( + rangeStart = samples[0].T - durationMilliseconds(selRange) + rangeEnd = samples[len(samples)-1].T + ) + + resultValue := samples[len(samples)-1].V - samples[0].V + if isCounter { + var lastValue float64 + for _, sample := range samples { + if sample.V < lastValue { + resultValue += lastValue + } + lastValue = sample.V + } + } + + // Duration between first/last samples and boundary of range. + durationToStart := float64(samples[0].T-rangeStart) / 1000 + durationToEnd := float64(rangeEnd-samples[len(samples)-1].T) / 1000 + + sampledInterval := float64(samples[len(samples)-1].T-samples[0].T) / 1000 + averageDurationBetweenSamples := sampledInterval / float64(len(samples)-1) + + if isCounter && resultValue > 0 && samples[0].V >= 0 { + // Counters cannot be negative. If we have any slope at + // all (i.e. resultValue went up), we can extrapolate + // the zero point of the counter. If the duration to the + // zero point is shorter than the durationToStart, we + // take the zero point as the start of the series, + // thereby avoiding extrapolation to negative counter + // values. + durationToZero := sampledInterval * (samples[0].V / resultValue) + if durationToZero < durationToStart { + durationToStart = durationToZero + } + } + + // If the first/last samples are close to the boundaries of the range, + // extrapolate the result. This is as we expect that another sample + // will exist given the spacing between samples we've seen thus far, + // with an allowance for noise. + extrapolationThreshold := averageDurationBetweenSamples * 1.1 + extrapolateToInterval := sampledInterval + + if durationToStart < extrapolationThreshold { + extrapolateToInterval += durationToStart + } else { + extrapolateToInterval += averageDurationBetweenSamples / 2 + } + if durationToEnd < extrapolationThreshold { + extrapolateToInterval += durationToEnd + } else { + extrapolateToInterval += averageDurationBetweenSamples / 2 + } + resultValue = resultValue * (extrapolateToInterval / sampledInterval) + if isRate { + seconds := selRange.Seconds() + resultValue = resultValue / seconds + } + + return resultValue +} + +func durationMilliseconds(d time.Duration) int64 { + return int64(d / (time.Millisecond / time.Nanosecond)) +} + // rateLogBytes calculates the per-second rate of log bytes. func rateLogBytes(selRange time.Duration) func(samples []promql.Point) float64 { return func(samples []promql.Point) float64 { diff --git a/pkg/logql/syntax/ast.go b/pkg/logql/syntax/ast.go index 19203c1004f6..cc060d980da2 100644 --- a/pkg/logql/syntax/ast.go +++ b/pkg/logql/syntax/ast.go @@ -616,20 +616,21 @@ const ( OpTypeTopK = "topk" // range vector ops - OpRangeTypeCount = "count_over_time" - OpRangeTypeRate = "rate" - OpRangeTypeBytes = "bytes_over_time" - OpRangeTypeBytesRate = "bytes_rate" - OpRangeTypeAvg = "avg_over_time" - OpRangeTypeSum = "sum_over_time" - OpRangeTypeMin = "min_over_time" - OpRangeTypeMax = "max_over_time" - OpRangeTypeStdvar = "stdvar_over_time" - OpRangeTypeStddev = "stddev_over_time" - OpRangeTypeQuantile = "quantile_over_time" - OpRangeTypeFirst = "first_over_time" - OpRangeTypeLast = "last_over_time" - OpRangeTypeAbsent = "absent_over_time" + OpRangeTypeCount = "count_over_time" + OpRangeTypeRate = "rate" + OpRangeTypeRateCounter = "rate_counter" + OpRangeTypeBytes = "bytes_over_time" + OpRangeTypeBytesRate = "bytes_rate" + OpRangeTypeAvg = "avg_over_time" + OpRangeTypeSum = "sum_over_time" + OpRangeTypeMin = "min_over_time" + OpRangeTypeMax = "max_over_time" + OpRangeTypeStdvar = "stdvar_over_time" + OpRangeTypeStddev = "stddev_over_time" + OpRangeTypeQuantile = "quantile_over_time" + OpRangeTypeFirst = "first_over_time" + OpRangeTypeLast = "last_over_time" + OpRangeTypeAbsent = "absent_over_time" // binops - logical/set OpTypeOr = "or" @@ -772,7 +773,9 @@ func (e RangeAggregationExpr) validate() error { } if e.Left.Unwrap != nil { switch e.Operation { - case OpRangeTypeAvg, OpRangeTypeSum, OpRangeTypeMax, OpRangeTypeMin, OpRangeTypeStddev, OpRangeTypeStdvar, OpRangeTypeQuantile, OpRangeTypeRate, OpRangeTypeAbsent, OpRangeTypeFirst, OpRangeTypeLast: + case OpRangeTypeAvg, OpRangeTypeSum, OpRangeTypeMax, OpRangeTypeMin, OpRangeTypeStddev, + OpRangeTypeStdvar, OpRangeTypeQuantile, OpRangeTypeRate, OpRangeTypeRateCounter, + OpRangeTypeAbsent, OpRangeTypeFirst, OpRangeTypeLast: return nil default: return fmt.Errorf("invalid aggregation %s with unwrap", e.Operation) diff --git a/pkg/logql/syntax/expr.y b/pkg/logql/syntax/expr.y index 0e817a0e2e43..21c8c1e7ed7d 100644 --- a/pkg/logql/syntax/expr.y +++ b/pkg/logql/syntax/expr.y @@ -107,7 +107,7 @@ import ( %token IDENTIFIER STRING NUMBER %token DURATION RANGE %token MATCHERS LABELS EQ RE NRE OPEN_BRACE CLOSE_BRACE OPEN_BRACKET CLOSE_BRACKET COMMA DOT PIPE_MATCH PIPE_EXACT - OPEN_PARENTHESIS CLOSE_PARENTHESIS BY WITHOUT COUNT_OVER_TIME RATE SUM AVG MAX MIN COUNT STDDEV STDVAR BOTTOMK TOPK + OPEN_PARENTHESIS CLOSE_PARENTHESIS BY WITHOUT COUNT_OVER_TIME RATE RATE_COUNTER SUM AVG MAX MIN COUNT STDDEV STDVAR BOTTOMK TOPK BYTES_OVER_TIME BYTES_RATE BOOL JSON REGEXP LOGFMT PIPE LINE_FMT LABEL_FMT UNWRAP AVG_OVER_TIME SUM_OVER_TIME MIN_OVER_TIME MAX_OVER_TIME STDVAR_OVER_TIME STDDEV_OVER_TIME QUANTILE_OVER_TIME BYTES_CONV DURATION_CONV DURATION_SECONDS_CONV FIRST_OVER_TIME LAST_OVER_TIME ABSENT_OVER_TIME LABEL_REPLACE UNPACK OFFSET PATTERN IP ON IGNORING GROUP_LEFT GROUP_RIGHT @@ -457,6 +457,7 @@ vectorOp: rangeOp: COUNT_OVER_TIME { $$ = OpRangeTypeCount } | RATE { $$ = OpRangeTypeRate } + | RATE_COUNTER { $$ = OpRangeTypeRateCounter } | BYTES_OVER_TIME { $$ = OpRangeTypeBytes } | BYTES_RATE { $$ = OpRangeTypeBytesRate } | AVG_OVER_TIME { $$ = OpRangeTypeAvg } diff --git a/pkg/logql/syntax/expr.y.go b/pkg/logql/syntax/expr.y.go index 11d1d6ea93e5..0aa6a3c7f728 100644 --- a/pkg/logql/syntax/expr.y.go +++ b/pkg/logql/syntax/expr.y.go @@ -1,18 +1,16 @@ // Code generated by goyacc -p expr -o pkg/logql/syntax/expr.y.go pkg/logql/syntax/expr.y. DO NOT EDIT. -//line pkg/logql/syntax/expr.y:2 package syntax import __yyfmt__ "fmt" -//line pkg/logql/syntax/expr.y:2 + import ( "github.com/grafana/loki/pkg/logql/log" "github.com/prometheus/prometheus/model/labels" "time" ) -//line pkg/logql/syntax/expr.y:12 type exprSymType struct { yys int Expr Expr @@ -88,62 +86,63 @@ const BY = 57367 const WITHOUT = 57368 const COUNT_OVER_TIME = 57369 const RATE = 57370 -const SUM = 57371 -const AVG = 57372 -const MAX = 57373 -const MIN = 57374 -const COUNT = 57375 -const STDDEV = 57376 -const STDVAR = 57377 -const BOTTOMK = 57378 -const TOPK = 57379 -const BYTES_OVER_TIME = 57380 -const BYTES_RATE = 57381 -const BOOL = 57382 -const JSON = 57383 -const REGEXP = 57384 -const LOGFMT = 57385 -const PIPE = 57386 -const LINE_FMT = 57387 -const LABEL_FMT = 57388 -const UNWRAP = 57389 -const AVG_OVER_TIME = 57390 -const SUM_OVER_TIME = 57391 -const MIN_OVER_TIME = 57392 -const MAX_OVER_TIME = 57393 -const STDVAR_OVER_TIME = 57394 -const STDDEV_OVER_TIME = 57395 -const QUANTILE_OVER_TIME = 57396 -const BYTES_CONV = 57397 -const DURATION_CONV = 57398 -const DURATION_SECONDS_CONV = 57399 -const FIRST_OVER_TIME = 57400 -const LAST_OVER_TIME = 57401 -const ABSENT_OVER_TIME = 57402 -const LABEL_REPLACE = 57403 -const UNPACK = 57404 -const OFFSET = 57405 -const PATTERN = 57406 -const IP = 57407 -const ON = 57408 -const IGNORING = 57409 -const GROUP_LEFT = 57410 -const GROUP_RIGHT = 57411 -const OR = 57412 -const AND = 57413 -const UNLESS = 57414 -const CMP_EQ = 57415 -const NEQ = 57416 -const LT = 57417 -const LTE = 57418 -const GT = 57419 -const GTE = 57420 -const ADD = 57421 -const SUB = 57422 -const MUL = 57423 -const DIV = 57424 -const MOD = 57425 -const POW = 57426 +const RATE_COUNTER = 57371 +const SUM = 57372 +const AVG = 57373 +const MAX = 57374 +const MIN = 57375 +const COUNT = 57376 +const STDDEV = 57377 +const STDVAR = 57378 +const BOTTOMK = 57379 +const TOPK = 57380 +const BYTES_OVER_TIME = 57381 +const BYTES_RATE = 57382 +const BOOL = 57383 +const JSON = 57384 +const REGEXP = 57385 +const LOGFMT = 57386 +const PIPE = 57387 +const LINE_FMT = 57388 +const LABEL_FMT = 57389 +const UNWRAP = 57390 +const AVG_OVER_TIME = 57391 +const SUM_OVER_TIME = 57392 +const MIN_OVER_TIME = 57393 +const MAX_OVER_TIME = 57394 +const STDVAR_OVER_TIME = 57395 +const STDDEV_OVER_TIME = 57396 +const QUANTILE_OVER_TIME = 57397 +const BYTES_CONV = 57398 +const DURATION_CONV = 57399 +const DURATION_SECONDS_CONV = 57400 +const FIRST_OVER_TIME = 57401 +const LAST_OVER_TIME = 57402 +const ABSENT_OVER_TIME = 57403 +const LABEL_REPLACE = 57404 +const UNPACK = 57405 +const OFFSET = 57406 +const PATTERN = 57407 +const IP = 57408 +const ON = 57409 +const IGNORING = 57410 +const GROUP_LEFT = 57411 +const GROUP_RIGHT = 57412 +const OR = 57413 +const AND = 57414 +const UNLESS = 57415 +const CMP_EQ = 57416 +const NEQ = 57417 +const LT = 57418 +const LTE = 57419 +const GT = 57420 +const GTE = 57421 +const ADD = 57422 +const SUB = 57423 +const MUL = 57424 +const DIV = 57425 +const MOD = 57426 +const POW = 57427 var exprToknames = [...]string{ "$end", @@ -174,6 +173,7 @@ var exprToknames = [...]string{ "WITHOUT", "COUNT_OVER_TIME", "RATE", + "RATE_COUNTER", "SUM", "AVG", "MAX", @@ -231,17 +231,14 @@ var exprToknames = [...]string{ "MOD", "POW", } - var exprStatenames = [...]string{} const exprEofCode = 1 const exprErrCode = 2 const exprInitialStackSize = 16 -//line pkg/logql/syntax/expr.y:488 -//line yacctab:1 -var exprExca = [...]int8{ +var exprExca = [...]int{ -1, 1, 1, -1, -2, 0, @@ -249,112 +246,113 @@ var exprExca = [...]int8{ const exprPrivate = 57344 -const exprLast = 532 - -var exprAct = [...]int16{ - 248, 195, 76, 4, 176, 58, 164, 5, 169, 204, - 67, 112, 50, 57, 122, 135, 69, 2, 45, 46, - 47, 48, 49, 50, 72, 42, 43, 44, 51, 52, - 55, 56, 53, 54, 45, 46, 47, 48, 49, 50, - 43, 44, 51, 52, 55, 56, 53, 54, 45, 46, - 47, 48, 49, 50, 47, 48, 49, 50, 131, 133, - 134, 65, 320, 100, 178, 133, 134, 104, 63, 64, - 148, 149, 228, 124, 188, 229, 227, 146, 147, 139, - 251, 251, 137, 61, 256, 144, 51, 52, 55, 56, - 53, 54, 45, 46, 47, 48, 49, 50, 253, 145, - 294, 320, 294, 150, 151, 152, 153, 154, 155, 156, - 157, 158, 159, 160, 161, 162, 163, 323, 119, 85, - 132, 66, 340, 173, 335, 184, 179, 182, 183, 180, - 181, 328, 166, 226, 191, 253, 116, 253, 317, 77, - 78, 186, 265, 101, 265, 202, 198, 311, 191, 310, - 254, 196, 206, 207, 199, 65, 286, 252, 75, 65, - 77, 78, 63, 64, 194, 302, 63, 64, 327, 65, - 260, 275, 214, 215, 216, 254, 63, 64, 325, 257, - 65, 194, 252, 65, 165, 197, 65, 63, 64, 197, - 63, 64, 253, 63, 64, 246, 249, 301, 255, 197, - 258, 137, 100, 261, 104, 262, 265, 304, 250, 247, - 197, 309, 259, 197, 285, 66, 197, 253, 263, 66, - 269, 271, 274, 276, 119, 279, 277, 65, 82, 66, - 206, 265, 251, 119, 63, 64, 308, 284, 166, 206, - 66, 295, 116, 66, 191, 119, 66, 166, 200, 273, - 287, 116, 289, 291, 126, 293, 100, 60, 272, 166, - 292, 303, 288, 116, 219, 100, 192, 224, 305, 187, - 225, 223, 86, 87, 88, 89, 90, 91, 92, 93, - 94, 95, 96, 97, 98, 99, 206, 66, 125, 314, - 315, 297, 298, 299, 100, 316, 119, 283, 167, 165, - 206, 318, 319, 265, 265, 270, 206, 324, 267, 266, - 167, 165, 213, 136, 116, 119, 15, 212, 12, 208, - 330, 12, 331, 332, 12, 205, 138, 211, 222, 138, - 210, 185, 6, 116, 336, 143, 19, 20, 33, 34, - 36, 37, 35, 38, 39, 40, 41, 21, 22, 142, - 141, 107, 109, 108, 81, 117, 118, 23, 24, 25, - 26, 27, 28, 29, 74, 338, 334, 30, 31, 32, - 18, 203, 110, 307, 111, 264, 220, 217, 209, 12, - 201, 193, 130, 221, 218, 333, 322, 6, 16, 17, - 128, 19, 20, 33, 34, 36, 37, 35, 38, 39, - 40, 41, 21, 22, 127, 243, 321, 129, 244, 242, - 80, 300, 23, 24, 25, 26, 27, 28, 29, 290, - 281, 282, 30, 31, 32, 18, 140, 240, 79, 237, - 241, 239, 238, 236, 12, 234, 339, 231, 235, 233, - 232, 230, 6, 16, 17, 119, 19, 20, 33, 34, - 36, 37, 35, 38, 39, 40, 41, 21, 22, 3, - 337, 326, 313, 116, 312, 278, 68, 23, 24, 25, - 26, 27, 28, 29, 268, 245, 190, 30, 31, 32, - 18, 107, 109, 108, 189, 117, 118, 256, 280, 188, - 187, 177, 113, 174, 172, 171, 329, 71, 16, 17, - 73, 306, 110, 170, 111, 73, 177, 114, 168, 103, - 175, 106, 105, 59, 120, 115, 121, 102, 84, 83, - 11, 10, 9, 123, 14, 8, 296, 13, 7, 70, - 62, 1, +const exprLast = 535 + +var exprAct = [...]int{ + + 249, 196, 77, 4, 177, 59, 165, 5, 170, 205, + 68, 113, 51, 58, 123, 136, 70, 2, 46, 47, + 48, 49, 50, 51, 73, 43, 44, 45, 52, 53, + 56, 57, 54, 55, 46, 47, 48, 49, 50, 51, + 44, 45, 52, 53, 56, 57, 54, 55, 46, 47, + 48, 49, 50, 51, 48, 49, 50, 51, 252, 132, + 134, 135, 66, 321, 101, 179, 134, 135, 105, 64, + 65, 149, 150, 229, 125, 189, 230, 228, 147, 148, + 140, 257, 252, 138, 295, 254, 145, 52, 53, 56, + 57, 54, 55, 46, 47, 48, 49, 50, 51, 324, + 146, 62, 295, 253, 151, 152, 153, 154, 155, 156, + 157, 158, 159, 160, 161, 162, 163, 164, 302, 321, + 254, 255, 133, 67, 174, 86, 66, 185, 180, 183, + 184, 181, 182, 64, 65, 227, 303, 66, 254, 254, + 78, 79, 187, 341, 64, 65, 203, 199, 195, 336, + 329, 266, 197, 66, 208, 200, 312, 198, 66, 255, + 64, 65, 102, 258, 66, 64, 65, 328, 198, 66, + 326, 64, 65, 215, 216, 217, 64, 65, 305, 225, + 195, 188, 226, 224, 198, 66, 296, 67, 76, 198, + 78, 79, 64, 65, 120, 198, 247, 250, 67, 256, + 61, 259, 138, 101, 262, 105, 263, 253, 252, 251, + 248, 286, 117, 260, 67, 120, 198, 120, 120, 67, + 264, 270, 272, 275, 277, 67, 280, 278, 192, 167, + 67, 167, 167, 117, 220, 117, 117, 298, 299, 300, + 266, 223, 266, 254, 266, 311, 67, 310, 207, 309, + 287, 288, 207, 290, 292, 207, 294, 101, 120, 207, + 266, 293, 304, 289, 201, 268, 101, 276, 120, 306, + 266, 274, 167, 207, 273, 267, 117, 192, 271, 207, + 12, 168, 166, 168, 166, 166, 117, 318, 139, 285, + 315, 316, 209, 192, 127, 101, 317, 126, 206, 261, + 284, 214, 319, 320, 137, 108, 110, 109, 325, 118, + 119, 257, 12, 213, 131, 193, 120, 15, 212, 211, + 139, 331, 186, 332, 333, 12, 111, 144, 112, 143, + 142, 82, 75, 6, 117, 337, 339, 19, 20, 21, + 34, 35, 37, 38, 36, 39, 40, 41, 42, 22, + 23, 335, 308, 108, 110, 109, 265, 118, 119, 24, + 25, 26, 27, 28, 29, 30, 129, 221, 218, 31, + 32, 33, 18, 204, 111, 210, 112, 202, 194, 222, + 128, 12, 219, 130, 244, 334, 323, 245, 243, 6, + 16, 17, 322, 19, 20, 21, 34, 35, 37, 38, + 36, 39, 40, 41, 42, 22, 23, 241, 301, 238, + 242, 240, 239, 237, 291, 24, 25, 26, 27, 28, + 29, 30, 282, 283, 340, 31, 32, 33, 18, 141, + 235, 81, 232, 236, 234, 233, 231, 12, 80, 338, + 83, 3, 327, 314, 313, 6, 16, 17, 69, 19, + 20, 21, 34, 35, 37, 38, 36, 39, 40, 41, + 42, 22, 23, 281, 279, 269, 178, 114, 246, 191, + 190, 24, 25, 26, 27, 28, 29, 30, 189, 188, + 175, 31, 32, 33, 18, 87, 88, 89, 90, 91, + 92, 93, 94, 95, 96, 97, 98, 99, 100, 173, + 172, 72, 16, 17, 74, 330, 307, 171, 74, 178, + 115, 169, 104, 176, 107, 106, 60, 121, 116, 122, + 103, 85, 84, 11, 10, 9, 124, 14, 8, 297, + 13, 7, 71, 63, 1, } +var exprPact = [...]int{ -var exprPact = [...]int16{ - 309, -1000, -45, -1000, -1000, 213, 309, -1000, -1000, -1000, - -1000, -1000, 495, 341, 135, -1000, 421, 403, 331, -1000, + 310, -1000, -46, -1000, -1000, 155, 310, -1000, -1000, -1000, + -1000, -1000, 499, 309, 165, -1000, 431, 424, 308, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - -1000, -1000, 79, 79, 79, 79, 79, 79, 79, 79, - 79, 79, 79, 79, 79, 79, 79, 213, -1000, 47, - 310, -1000, 8, -1000, -1000, -1000, -1000, 264, 230, -45, - 388, 366, -1000, 46, 306, 419, 327, 326, 312, -1000, - -1000, 309, 309, 11, 2, -1000, 309, 309, 309, 309, - 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, - -1000, -1000, -1000, -1000, 228, -1000, -1000, 498, -1000, 489, - -1000, 488, -1000, -1000, -1000, -1000, 291, 487, 501, 52, - -1000, -1000, -1000, 308, -1000, -1000, -1000, -1000, -1000, 500, - -1000, 484, 483, 478, 470, 242, 362, 172, 303, 224, - 361, 364, 301, 295, 359, -31, 307, 304, 294, 289, - 13, 13, -27, -27, -72, -72, -72, -72, -61, -61, - -61, -61, -61, -61, 228, 291, 291, 291, 358, -1000, - 372, -1000, -1000, 240, -1000, 357, -1000, 371, 263, 68, - 433, 431, 425, 423, 401, 469, -1000, -1000, -1000, -1000, - -1000, -1000, 114, 303, 169, 148, 166, 440, 155, 146, - 114, 309, 194, 356, 285, -1000, -1000, 284, -1000, 468, - 281, 234, 225, 147, 219, 228, 113, 498, 459, -1000, - 486, 415, 274, -1000, -1000, -1000, 214, -1000, -1000, -1000, + -1000, -1000, -1000, 84, 84, 84, 84, 84, 84, 84, + 84, 84, 84, 84, 84, 84, 84, 84, 155, -1000, + 48, 311, -1000, 8, -1000, -1000, -1000, -1000, 273, 270, + -46, 364, 298, -1000, 47, 297, 422, 307, 306, 304, + -1000, -1000, 310, 310, 11, 2, -1000, 310, 310, 310, + 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, + 310, -1000, -1000, -1000, -1000, 212, -1000, -1000, 502, -1000, + 494, -1000, 493, -1000, -1000, -1000, -1000, 189, 474, 504, + 53, -1000, -1000, -1000, 299, -1000, -1000, -1000, -1000, -1000, + 503, -1000, 473, 472, 464, 463, 291, 359, 171, 265, + 240, 358, 366, 274, 268, 356, -32, 296, 295, 290, + 278, 13, 13, -28, -28, -73, -73, -73, -73, -62, + -62, -62, -62, -62, -62, 212, 189, 189, 189, 349, + -1000, 370, -1000, -1000, 210, -1000, 348, -1000, 367, 175, + 69, 428, 426, 405, 403, 380, 462, -1000, -1000, -1000, + -1000, -1000, -1000, 115, 265, 144, 198, 150, 263, 139, + 275, 115, 310, 196, 337, 251, -1000, -1000, 241, -1000, + 459, 254, 250, 247, 243, 253, 212, 213, 502, 458, + -1000, 461, 417, 277, -1000, -1000, -1000, 266, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - -1000, -1000, -1000, -1000, -1000, 190, -1000, 132, 145, 54, - 145, 411, 17, 291, 17, 91, 236, 402, 173, 141, - -1000, -1000, 183, -1000, 309, 496, -1000, -1000, 354, 212, - -1000, 187, -1000, -1000, 125, -1000, 123, -1000, -1000, -1000, - -1000, -1000, -1000, 458, 456, -1000, 114, 54, 145, 54, - -1000, -1000, 228, -1000, 17, -1000, 115, -1000, -1000, -1000, - 18, 397, 377, 93, 114, 154, -1000, 455, -1000, -1000, - -1000, -1000, 144, 107, -1000, 54, -1000, 491, 57, 54, - 37, 17, 17, 376, -1000, -1000, 347, -1000, -1000, 100, - 54, -1000, -1000, 17, 454, -1000, -1000, 346, 430, 98, - -1000, + -1000, -1000, -1000, -1000, -1000, -1000, 187, -1000, 226, 123, + 40, 123, 406, -6, 189, -6, 93, 181, 399, 94, + 112, -1000, -1000, 154, -1000, 310, 501, -1000, -1000, 333, + 225, -1000, 223, -1000, -1000, 221, -1000, 132, -1000, -1000, + -1000, -1000, -1000, -1000, 438, 437, -1000, 115, 40, 123, + 40, -1000, -1000, 212, -1000, -6, -1000, 264, -1000, -1000, + -1000, 18, 383, 377, 75, 115, 146, -1000, 436, -1000, + -1000, -1000, -1000, 143, 126, -1000, 40, -1000, 500, 74, + 40, 33, -6, -6, 376, -1000, -1000, 332, -1000, -1000, + 125, 40, -1000, -1000, -6, 433, -1000, -1000, 317, 418, + 119, -1000, } +var exprPgo = [...]int{ -var exprPgo = [...]int16{ - 0, 531, 16, 530, 2, 9, 459, 3, 15, 11, - 529, 528, 527, 526, 7, 525, 524, 523, 522, 521, - 520, 228, 519, 518, 517, 13, 5, 516, 515, 514, - 6, 513, 83, 512, 511, 4, 510, 509, 8, 508, - 1, 507, 492, 0, + 0, 534, 16, 533, 2, 9, 441, 3, 15, 11, + 532, 531, 530, 529, 7, 528, 527, 526, 525, 524, + 523, 440, 522, 521, 520, 13, 5, 519, 518, 517, + 6, 516, 101, 515, 514, 4, 513, 512, 8, 511, + 1, 510, 467, 0, } +var exprR1 = [...]int{ -var exprR1 = [...]int8{ 0, 1, 2, 2, 7, 7, 7, 7, 7, 7, 6, 6, 6, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, @@ -373,11 +371,11 @@ var exprR1 = [...]int8{ 23, 23, 23, 23, 21, 21, 21, 21, 21, 21, 21, 21, 19, 19, 19, 16, 16, 16, 16, 16, 16, 16, 16, 16, 12, 12, 12, 12, 12, 12, - 12, 12, 12, 12, 12, 12, 12, 12, 43, 5, - 5, 4, 4, 4, 4, + 12, 12, 12, 12, 12, 12, 12, 12, 12, 43, + 5, 5, 4, 4, 4, 4, } +var exprR2 = [...]int{ -var exprR2 = [...]int8{ 0, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 2, 3, 2, 3, 4, 5, 3, 4, 5, 6, 3, 4, 5, 6, 3, 4, 5, 6, 4, @@ -396,91 +394,91 @@ var exprR2 = [...]int8{ 5, 4, 5, 4, 1, 1, 2, 4, 5, 2, 4, 5, 1, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, - 3, 4, 4, 3, 3, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, + 1, 3, 4, 4, 3, 3, } +var exprChk = [...]int{ -var exprChk = [...]int16{ -1000, -1, -2, -6, -7, -14, 23, -11, -15, -18, - -19, -20, 15, -12, -16, 7, 79, 80, 61, 27, - 28, 38, 39, 48, 49, 50, 51, 52, 53, 54, - 58, 59, 60, 29, 30, 33, 31, 32, 34, 35, - 36, 37, 70, 71, 72, 79, 80, 81, 82, 83, - 84, 73, 74, 77, 78, 75, 76, -25, -26, -31, - 44, -32, -3, 21, 22, 14, 74, -7, -6, -2, - -10, 2, -9, 5, 23, 23, -4, 25, 26, 7, - 7, 23, -21, -22, -23, 40, -21, -21, -21, -21, + -19, -20, 15, -12, -16, 7, 80, 81, 62, 27, + 28, 29, 39, 40, 49, 50, 51, 52, 53, 54, + 55, 59, 60, 61, 30, 31, 34, 32, 33, 35, + 36, 37, 38, 71, 72, 73, 80, 81, 82, 83, + 84, 85, 74, 75, 78, 79, 76, 77, -25, -26, + -31, 45, -32, -3, 21, 22, 14, 75, -7, -6, + -2, -10, 2, -9, 5, 23, 23, -4, 25, 26, + 7, 7, 23, -21, -22, -23, 41, -21, -21, -21, -21, -21, -21, -21, -21, -21, -21, -21, -21, -21, - -26, -32, -24, -37, -30, -33, -34, 41, 43, 42, - 62, 64, -9, -42, -41, -28, 23, 45, 46, 5, - -29, -27, 6, -17, 65, 24, 24, 16, 2, 19, - 16, 12, 74, 13, 14, -8, 7, -14, 23, -7, - 7, 23, 23, 23, -7, -2, 66, 67, 68, 69, - -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, - -2, -2, -2, -2, -30, 71, 19, 70, -39, -38, - 5, 6, 6, -30, 6, -36, -35, 5, 12, 74, - 77, 78, 75, 76, 73, 23, -9, 6, 6, 6, - 6, 2, 24, 19, 9, -40, -25, 44, -14, -8, - 24, 19, -7, 7, -5, 24, 5, -5, 24, 19, - 23, 23, 23, 23, -30, -30, -30, 19, 12, 24, - 19, 12, 65, 8, 4, 7, 65, 8, 4, 7, - 8, 4, 7, 8, 4, 7, 8, 4, 7, 8, - 4, 7, 8, 4, 7, 6, -4, -8, -43, -40, - -25, 63, 9, 44, 9, -40, 47, 24, -40, -25, - 24, -4, -7, 24, 19, 19, 24, 24, 6, -5, - 24, -5, 24, 24, -5, 24, -5, -38, 6, -35, - 2, 5, 6, 23, 23, 24, 24, -40, -25, -40, - 8, -43, -30, -43, 9, 5, -13, 55, 56, 57, - 9, 24, 24, -40, 24, -7, 5, 19, 24, 24, - 24, 24, 6, 6, -4, -40, -43, 23, -43, -40, - 44, 9, 9, 24, -4, 24, 6, 24, 24, 5, - -40, -43, -43, 9, 19, 24, -43, 6, 19, 6, - 24, + -21, -26, -32, -24, -37, -30, -33, -34, 42, 44, + 43, 63, 65, -9, -42, -41, -28, 23, 46, 47, + 5, -29, -27, 6, -17, 66, 24, 24, 16, 2, + 19, 16, 12, 75, 13, 14, -8, 7, -14, 23, + -7, 7, 23, 23, 23, -7, -2, 67, 68, 69, + 70, -2, -2, -2, -2, -2, -2, -2, -2, -2, + -2, -2, -2, -2, -2, -30, 72, 19, 71, -39, + -38, 5, 6, 6, -30, 6, -36, -35, 5, 12, + 75, 78, 79, 76, 77, 74, 23, -9, 6, 6, + 6, 6, 2, 24, 19, 9, -40, -25, 45, -14, + -8, 24, 19, -7, 7, -5, 24, 5, -5, 24, + 19, 23, 23, 23, 23, -30, -30, -30, 19, 12, + 24, 19, 12, 66, 8, 4, 7, 66, 8, 4, + 7, 8, 4, 7, 8, 4, 7, 8, 4, 7, + 8, 4, 7, 8, 4, 7, 6, -4, -8, -43, + -40, -25, 64, 9, 45, 9, -40, 48, 24, -40, + -25, 24, -4, -7, 24, 19, 19, 24, 24, 6, + -5, 24, -5, 24, 24, -5, 24, -5, -38, 6, + -35, 2, 5, 6, 23, 23, 24, 24, -40, -25, + -40, 8, -43, -30, -43, 9, 5, -13, 56, 57, + 58, 9, 24, 24, -40, 24, -7, 5, 19, 24, + 24, 24, 24, 6, 6, -4, -40, -43, 23, -43, + -40, 45, 9, 9, 24, -4, 24, 6, 24, 24, + 5, -40, -43, -43, 9, 19, 24, -43, 6, 19, + 6, 24, } +var exprDef = [...]int{ -var exprDef = [...]int16{ 0, -2, 1, 2, 3, 10, 0, 4, 5, 6, 7, 8, 0, 0, 0, 162, 0, 0, 0, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, - 185, 186, 187, 165, 166, 167, 168, 169, 170, 171, - 172, 173, 148, 148, 148, 148, 148, 148, 148, 148, - 148, 148, 148, 148, 148, 148, 148, 11, 69, 71, - 0, 80, 0, 56, 57, 58, 59, 3, 2, 0, - 0, 0, 63, 0, 0, 0, 0, 0, 0, 163, - 164, 0, 0, 154, 155, 149, 0, 0, 0, 0, + 185, 186, 187, 188, 165, 166, 167, 168, 169, 170, + 171, 172, 173, 148, 148, 148, 148, 148, 148, 148, + 148, 148, 148, 148, 148, 148, 148, 148, 11, 69, + 71, 0, 80, 0, 56, 57, 58, 59, 3, 2, + 0, 0, 0, 63, 0, 0, 0, 0, 0, 0, + 163, 164, 0, 0, 154, 155, 149, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 70, 81, 72, 73, 74, 75, 76, 82, 83, 0, - 85, 0, 95, 96, 97, 98, 0, 0, 0, 0, - 110, 111, 78, 0, 77, 9, 12, 60, 61, 0, - 62, 0, 0, 0, 0, 0, 0, 0, 0, 3, - 162, 0, 0, 0, 3, 133, 0, 0, 156, 159, - 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, - 144, 145, 146, 147, 100, 0, 0, 0, 87, 106, - 105, 84, 86, 0, 88, 94, 91, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 64, 65, 66, 67, - 68, 38, 45, 0, 13, 0, 0, 0, 0, 0, - 49, 0, 3, 162, 0, 193, 189, 0, 194, 0, - 0, 0, 0, 0, 101, 102, 103, 0, 0, 99, - 0, 0, 0, 117, 124, 131, 0, 116, 123, 130, - 112, 119, 126, 113, 120, 127, 114, 121, 128, 115, - 122, 129, 118, 125, 132, 0, 47, 0, 14, 17, - 33, 0, 21, 0, 25, 0, 0, 0, 0, 0, - 37, 51, 3, 50, 0, 0, 191, 192, 0, 0, - 151, 0, 153, 157, 0, 160, 0, 107, 104, 92, - 93, 89, 90, 0, 0, 79, 46, 18, 34, 35, - 188, 22, 41, 26, 29, 39, 0, 42, 43, 44, - 15, 0, 0, 0, 52, 3, 190, 0, 150, 152, - 158, 161, 0, 0, 48, 36, 30, 0, 16, 19, - 0, 23, 27, 0, 53, 54, 0, 108, 109, 0, - 20, 24, 28, 31, 0, 40, 32, 0, 0, 0, - 55, + 0, 70, 81, 72, 73, 74, 75, 76, 82, 83, + 0, 85, 0, 95, 96, 97, 98, 0, 0, 0, + 0, 110, 111, 78, 0, 77, 9, 12, 60, 61, + 0, 62, 0, 0, 0, 0, 0, 0, 0, 0, + 3, 162, 0, 0, 0, 3, 133, 0, 0, 156, + 159, 134, 135, 136, 137, 138, 139, 140, 141, 142, + 143, 144, 145, 146, 147, 100, 0, 0, 0, 87, + 106, 105, 84, 86, 0, 88, 94, 91, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 64, 65, 66, + 67, 68, 38, 45, 0, 13, 0, 0, 0, 0, + 0, 49, 0, 3, 162, 0, 194, 190, 0, 195, + 0, 0, 0, 0, 0, 101, 102, 103, 0, 0, + 99, 0, 0, 0, 117, 124, 131, 0, 116, 123, + 130, 112, 119, 126, 113, 120, 127, 114, 121, 128, + 115, 122, 129, 118, 125, 132, 0, 47, 0, 14, + 17, 33, 0, 21, 0, 25, 0, 0, 0, 0, + 0, 37, 51, 3, 50, 0, 0, 192, 193, 0, + 0, 151, 0, 153, 157, 0, 160, 0, 107, 104, + 92, 93, 89, 90, 0, 0, 79, 46, 18, 34, + 35, 189, 22, 41, 26, 29, 39, 0, 42, 43, + 44, 15, 0, 0, 0, 52, 3, 191, 0, 150, + 152, 158, 161, 0, 0, 48, 36, 30, 0, 16, + 19, 0, 23, 27, 0, 53, 54, 0, 108, 109, + 0, 20, 24, 28, 31, 0, 40, 32, 0, 0, + 0, 55, } +var exprTok1 = [...]int{ -var exprTok1 = [...]int8{ 1, } +var exprTok2 = [...]int{ -var exprTok2 = [...]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, @@ -489,10 +487,9 @@ var exprTok2 = [...]int8{ 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, + 82, 83, 84, 85, } - -var exprTok3 = [...]int8{ +var exprTok3 = [...]int{ 0, } @@ -502,7 +499,6 @@ var exprErrorMessages = [...]struct { msg string }{} -//line yaccpar:1 /* parser for yacc output */ @@ -574,9 +570,9 @@ func exprErrorMessage(state, lookAhead int) string { expected := make([]int, 0, 4) // Look for shiftable tokens. - base := int(exprPact[state]) + base := exprPact[state] for tok := TOKSTART; tok-1 < len(exprToknames); tok++ { - if n := base + tok; n >= 0 && n < exprLast && int(exprChk[int(exprAct[n])]) == tok { + if n := base + tok; n >= 0 && n < exprLast && exprChk[exprAct[n]] == tok { if len(expected) == cap(expected) { return res } @@ -586,13 +582,13 @@ func exprErrorMessage(state, lookAhead int) string { if exprDef[state] == -2 { i := 0 - for exprExca[i] != -1 || int(exprExca[i+1]) != state { + for exprExca[i] != -1 || exprExca[i+1] != state { i += 2 } // Look for tokens that we accept or reduce. for i += 2; exprExca[i] >= 0; i += 2 { - tok := int(exprExca[i]) + tok := exprExca[i] if tok < TOKSTART || exprExca[i+1] == 0 { continue } @@ -623,30 +619,30 @@ func exprlex1(lex exprLexer, lval *exprSymType) (char, token int) { token = 0 char = lex.Lex(lval) if char <= 0 { - token = int(exprTok1[0]) + token = exprTok1[0] goto out } if char < len(exprTok1) { - token = int(exprTok1[char]) + token = exprTok1[char] goto out } if char >= exprPrivate { if char < exprPrivate+len(exprTok2) { - token = int(exprTok2[char-exprPrivate]) + token = exprTok2[char-exprPrivate] goto out } } for i := 0; i < len(exprTok3); i += 2 { - token = int(exprTok3[i+0]) + token = exprTok3[i+0] if token == char { - token = int(exprTok3[i+1]) + token = exprTok3[i+1] goto out } } out: if token == 0 { - token = int(exprTok2[1]) /* unknown char */ + token = exprTok2[1] /* unknown char */ } if exprDebug >= 3 { __yyfmt__.Printf("lex %s(%d)\n", exprTokname(token), uint(char)) @@ -701,7 +697,7 @@ exprstack: exprS[exprp].yys = exprstate exprnewstate: - exprn = int(exprPact[exprstate]) + exprn = exprPact[exprstate] if exprn <= exprFlag { goto exprdefault /* simple state */ } @@ -712,8 +708,8 @@ exprnewstate: if exprn < 0 || exprn >= exprLast { goto exprdefault } - exprn = int(exprAct[exprn]) - if int(exprChk[exprn]) == exprtoken { /* valid shift */ + exprn = exprAct[exprn] + if exprChk[exprn] == exprtoken { /* valid shift */ exprrcvr.char = -1 exprtoken = -1 exprVAL = exprrcvr.lval @@ -726,7 +722,7 @@ exprnewstate: exprdefault: /* default state action */ - exprn = int(exprDef[exprstate]) + exprn = exprDef[exprstate] if exprn == -2 { if exprrcvr.char < 0 { exprrcvr.char, exprtoken = exprlex1(exprlex, &exprrcvr.lval) @@ -735,18 +731,18 @@ exprdefault: /* look through exception table */ xi := 0 for { - if exprExca[xi+0] == -1 && int(exprExca[xi+1]) == exprstate { + if exprExca[xi+0] == -1 && exprExca[xi+1] == exprstate { break } xi += 2 } for xi += 2; ; xi += 2 { - exprn = int(exprExca[xi+0]) + exprn = exprExca[xi+0] if exprn < 0 || exprn == exprtoken { break } } - exprn = int(exprExca[xi+1]) + exprn = exprExca[xi+1] if exprn < 0 { goto ret0 } @@ -768,10 +764,10 @@ exprdefault: /* find a state where "error" is a legal shift action */ for exprp >= 0 { - exprn = int(exprPact[exprS[exprp].yys]) + exprErrCode + exprn = exprPact[exprS[exprp].yys] + exprErrCode if exprn >= 0 && exprn < exprLast { - exprstate = int(exprAct[exprn]) /* simulate a shift of "error" */ - if int(exprChk[exprstate]) == exprErrCode { + exprstate = exprAct[exprn] /* simulate a shift of "error" */ + if exprChk[exprstate] == exprErrCode { goto exprstack } } @@ -807,7 +803,7 @@ exprdefault: exprpt := exprp _ = exprpt // guard against "declared and not used" - exprp -= int(exprR2[exprn]) + exprp -= exprR2[exprn] // exprp is now the index of $0. Perform the default action. Iff the // reduced production is ε, $1 is possibly out of range. if exprp+1 >= len(exprS) { @@ -818,16 +814,16 @@ exprdefault: exprVAL = exprS[exprp+1] /* consult goto table to find next state */ - exprn = int(exprR1[exprn]) - exprg := int(exprPgo[exprn]) + exprn = exprR1[exprn] + exprg := exprPgo[exprn] exprj := exprg + exprS[exprp].yys + 1 if exprj >= exprLast { - exprstate = int(exprAct[exprg]) + exprstate = exprAct[exprg] } else { - exprstate = int(exprAct[exprj]) - if int(exprChk[exprstate]) != -exprn { - exprstate = int(exprAct[exprg]) + exprstate = exprAct[exprj] + if exprChk[exprstate] != -exprn { + exprstate = exprAct[exprg] } } // dummy call; replaced with literal code @@ -835,888 +831,740 @@ exprdefault: case 1: exprDollar = exprS[exprpt-1 : exprpt+1] -//line pkg/logql/syntax/expr.y:125 { exprlex.(*parser).expr = exprDollar[1].Expr } case 2: exprDollar = exprS[exprpt-1 : exprpt+1] -//line pkg/logql/syntax/expr.y:128 { exprVAL.Expr = exprDollar[1].LogExpr } case 3: exprDollar = exprS[exprpt-1 : exprpt+1] -//line pkg/logql/syntax/expr.y:129 { exprVAL.Expr = exprDollar[1].MetricExpr } case 4: exprDollar = exprS[exprpt-1 : exprpt+1] -//line pkg/logql/syntax/expr.y:133 { exprVAL.MetricExpr = exprDollar[1].RangeAggregationExpr } case 5: exprDollar = exprS[exprpt-1 : exprpt+1] -//line pkg/logql/syntax/expr.y:134 { exprVAL.MetricExpr = exprDollar[1].VectorAggregationExpr } case 6: exprDollar = exprS[exprpt-1 : exprpt+1] -//line pkg/logql/syntax/expr.y:135 { exprVAL.MetricExpr = exprDollar[1].BinOpExpr } case 7: exprDollar = exprS[exprpt-1 : exprpt+1] -//line pkg/logql/syntax/expr.y:136 { exprVAL.MetricExpr = exprDollar[1].LiteralExpr } case 8: exprDollar = exprS[exprpt-1 : exprpt+1] -//line pkg/logql/syntax/expr.y:137 { exprVAL.MetricExpr = exprDollar[1].LabelReplaceExpr } case 9: exprDollar = exprS[exprpt-3 : exprpt+1] -//line pkg/logql/syntax/expr.y:138 { exprVAL.MetricExpr = exprDollar[2].MetricExpr } case 10: exprDollar = exprS[exprpt-1 : exprpt+1] -//line pkg/logql/syntax/expr.y:142 { exprVAL.LogExpr = newMatcherExpr(exprDollar[1].Selector) } case 11: exprDollar = exprS[exprpt-2 : exprpt+1] -//line pkg/logql/syntax/expr.y:143 { exprVAL.LogExpr = newPipelineExpr(newMatcherExpr(exprDollar[1].Selector), exprDollar[2].PipelineExpr) } case 12: exprDollar = exprS[exprpt-3 : exprpt+1] -//line pkg/logql/syntax/expr.y:144 { exprVAL.LogExpr = exprDollar[2].LogExpr } case 13: exprDollar = exprS[exprpt-2 : exprpt+1] -//line pkg/logql/syntax/expr.y:148 { exprVAL.LogRangeExpr = newLogRange(newMatcherExpr(exprDollar[1].Selector), exprDollar[2].duration, nil, nil) } case 14: exprDollar = exprS[exprpt-3 : exprpt+1] -//line pkg/logql/syntax/expr.y:149 { exprVAL.LogRangeExpr = newLogRange(newMatcherExpr(exprDollar[1].Selector), exprDollar[2].duration, nil, exprDollar[3].OffsetExpr) } case 15: exprDollar = exprS[exprpt-4 : exprpt+1] -//line pkg/logql/syntax/expr.y:150 { exprVAL.LogRangeExpr = newLogRange(newMatcherExpr(exprDollar[2].Selector), exprDollar[4].duration, nil, nil) } case 16: exprDollar = exprS[exprpt-5 : exprpt+1] -//line pkg/logql/syntax/expr.y:151 { exprVAL.LogRangeExpr = newLogRange(newMatcherExpr(exprDollar[2].Selector), exprDollar[4].duration, nil, exprDollar[5].OffsetExpr) } case 17: exprDollar = exprS[exprpt-3 : exprpt+1] -//line pkg/logql/syntax/expr.y:152 { exprVAL.LogRangeExpr = newLogRange(newMatcherExpr(exprDollar[1].Selector), exprDollar[2].duration, exprDollar[3].UnwrapExpr, nil) } case 18: exprDollar = exprS[exprpt-4 : exprpt+1] -//line pkg/logql/syntax/expr.y:153 { exprVAL.LogRangeExpr = newLogRange(newMatcherExpr(exprDollar[1].Selector), exprDollar[2].duration, exprDollar[4].UnwrapExpr, exprDollar[3].OffsetExpr) } case 19: exprDollar = exprS[exprpt-5 : exprpt+1] -//line pkg/logql/syntax/expr.y:154 { exprVAL.LogRangeExpr = newLogRange(newMatcherExpr(exprDollar[2].Selector), exprDollar[4].duration, exprDollar[5].UnwrapExpr, nil) } case 20: exprDollar = exprS[exprpt-6 : exprpt+1] -//line pkg/logql/syntax/expr.y:155 { exprVAL.LogRangeExpr = newLogRange(newMatcherExpr(exprDollar[2].Selector), exprDollar[4].duration, exprDollar[6].UnwrapExpr, exprDollar[5].OffsetExpr) } case 21: exprDollar = exprS[exprpt-3 : exprpt+1] -//line pkg/logql/syntax/expr.y:156 { exprVAL.LogRangeExpr = newLogRange(newMatcherExpr(exprDollar[1].Selector), exprDollar[3].duration, exprDollar[2].UnwrapExpr, nil) } case 22: exprDollar = exprS[exprpt-4 : exprpt+1] -//line pkg/logql/syntax/expr.y:157 { exprVAL.LogRangeExpr = newLogRange(newMatcherExpr(exprDollar[1].Selector), exprDollar[3].duration, exprDollar[2].UnwrapExpr, exprDollar[4].OffsetExpr) } case 23: exprDollar = exprS[exprpt-5 : exprpt+1] -//line pkg/logql/syntax/expr.y:158 { exprVAL.LogRangeExpr = newLogRange(newMatcherExpr(exprDollar[2].Selector), exprDollar[5].duration, exprDollar[3].UnwrapExpr, nil) } case 24: exprDollar = exprS[exprpt-6 : exprpt+1] -//line pkg/logql/syntax/expr.y:159 { exprVAL.LogRangeExpr = newLogRange(newMatcherExpr(exprDollar[2].Selector), exprDollar[5].duration, exprDollar[3].UnwrapExpr, exprDollar[6].OffsetExpr) } case 25: exprDollar = exprS[exprpt-3 : exprpt+1] -//line pkg/logql/syntax/expr.y:160 { exprVAL.LogRangeExpr = newLogRange(newPipelineExpr(newMatcherExpr(exprDollar[1].Selector), exprDollar[2].PipelineExpr), exprDollar[3].duration, nil, nil) } case 26: exprDollar = exprS[exprpt-4 : exprpt+1] -//line pkg/logql/syntax/expr.y:161 { exprVAL.LogRangeExpr = newLogRange(newPipelineExpr(newMatcherExpr(exprDollar[1].Selector), exprDollar[2].PipelineExpr), exprDollar[3].duration, nil, exprDollar[4].OffsetExpr) } case 27: exprDollar = exprS[exprpt-5 : exprpt+1] -//line pkg/logql/syntax/expr.y:162 { exprVAL.LogRangeExpr = newLogRange(newPipelineExpr(newMatcherExpr(exprDollar[2].Selector), exprDollar[3].PipelineExpr), exprDollar[5].duration, nil, nil) } case 28: exprDollar = exprS[exprpt-6 : exprpt+1] -//line pkg/logql/syntax/expr.y:163 { exprVAL.LogRangeExpr = newLogRange(newPipelineExpr(newMatcherExpr(exprDollar[2].Selector), exprDollar[3].PipelineExpr), exprDollar[5].duration, nil, exprDollar[6].OffsetExpr) } case 29: exprDollar = exprS[exprpt-4 : exprpt+1] -//line pkg/logql/syntax/expr.y:164 { exprVAL.LogRangeExpr = newLogRange(newPipelineExpr(newMatcherExpr(exprDollar[1].Selector), exprDollar[2].PipelineExpr), exprDollar[4].duration, exprDollar[3].UnwrapExpr, nil) } case 30: exprDollar = exprS[exprpt-5 : exprpt+1] -//line pkg/logql/syntax/expr.y:165 { exprVAL.LogRangeExpr = newLogRange(newPipelineExpr(newMatcherExpr(exprDollar[1].Selector), exprDollar[2].PipelineExpr), exprDollar[4].duration, exprDollar[3].UnwrapExpr, exprDollar[5].OffsetExpr) } case 31: exprDollar = exprS[exprpt-6 : exprpt+1] -//line pkg/logql/syntax/expr.y:166 { exprVAL.LogRangeExpr = newLogRange(newPipelineExpr(newMatcherExpr(exprDollar[2].Selector), exprDollar[3].PipelineExpr), exprDollar[6].duration, exprDollar[4].UnwrapExpr, nil) } case 32: exprDollar = exprS[exprpt-7 : exprpt+1] -//line pkg/logql/syntax/expr.y:167 { exprVAL.LogRangeExpr = newLogRange(newPipelineExpr(newMatcherExpr(exprDollar[2].Selector), exprDollar[3].PipelineExpr), exprDollar[6].duration, exprDollar[4].UnwrapExpr, exprDollar[7].OffsetExpr) } case 33: exprDollar = exprS[exprpt-3 : exprpt+1] -//line pkg/logql/syntax/expr.y:168 { exprVAL.LogRangeExpr = newLogRange(newPipelineExpr(newMatcherExpr(exprDollar[1].Selector), exprDollar[3].PipelineExpr), exprDollar[2].duration, nil, nil) } case 34: exprDollar = exprS[exprpt-4 : exprpt+1] -//line pkg/logql/syntax/expr.y:169 { exprVAL.LogRangeExpr = newLogRange(newPipelineExpr(newMatcherExpr(exprDollar[1].Selector), exprDollar[4].PipelineExpr), exprDollar[2].duration, nil, exprDollar[3].OffsetExpr) } case 35: exprDollar = exprS[exprpt-4 : exprpt+1] -//line pkg/logql/syntax/expr.y:170 { exprVAL.LogRangeExpr = newLogRange(newPipelineExpr(newMatcherExpr(exprDollar[1].Selector), exprDollar[3].PipelineExpr), exprDollar[2].duration, exprDollar[4].UnwrapExpr, nil) } case 36: exprDollar = exprS[exprpt-5 : exprpt+1] -//line pkg/logql/syntax/expr.y:171 { exprVAL.LogRangeExpr = newLogRange(newPipelineExpr(newMatcherExpr(exprDollar[1].Selector), exprDollar[4].PipelineExpr), exprDollar[2].duration, exprDollar[5].UnwrapExpr, exprDollar[3].OffsetExpr) } case 37: exprDollar = exprS[exprpt-3 : exprpt+1] -//line pkg/logql/syntax/expr.y:172 { exprVAL.LogRangeExpr = exprDollar[2].LogRangeExpr } case 39: exprDollar = exprS[exprpt-3 : exprpt+1] -//line pkg/logql/syntax/expr.y:177 { exprVAL.UnwrapExpr = newUnwrapExpr(exprDollar[3].str, "") } case 40: exprDollar = exprS[exprpt-6 : exprpt+1] -//line pkg/logql/syntax/expr.y:178 { exprVAL.UnwrapExpr = newUnwrapExpr(exprDollar[5].str, exprDollar[3].ConvOp) } case 41: exprDollar = exprS[exprpt-3 : exprpt+1] -//line pkg/logql/syntax/expr.y:179 { exprVAL.UnwrapExpr = exprDollar[1].UnwrapExpr.addPostFilter(exprDollar[3].LabelFilter) } case 42: exprDollar = exprS[exprpt-1 : exprpt+1] -//line pkg/logql/syntax/expr.y:183 { exprVAL.ConvOp = OpConvBytes } case 43: exprDollar = exprS[exprpt-1 : exprpt+1] -//line pkg/logql/syntax/expr.y:184 { exprVAL.ConvOp = OpConvDuration } case 44: exprDollar = exprS[exprpt-1 : exprpt+1] -//line pkg/logql/syntax/expr.y:185 { exprVAL.ConvOp = OpConvDurationSeconds } case 45: exprDollar = exprS[exprpt-4 : exprpt+1] -//line pkg/logql/syntax/expr.y:189 { exprVAL.RangeAggregationExpr = newRangeAggregationExpr(exprDollar[3].LogRangeExpr, exprDollar[1].RangeOp, nil, nil) } case 46: exprDollar = exprS[exprpt-6 : exprpt+1] -//line pkg/logql/syntax/expr.y:190 { exprVAL.RangeAggregationExpr = newRangeAggregationExpr(exprDollar[5].LogRangeExpr, exprDollar[1].RangeOp, nil, &exprDollar[3].str) } case 47: exprDollar = exprS[exprpt-5 : exprpt+1] -//line pkg/logql/syntax/expr.y:191 { exprVAL.RangeAggregationExpr = newRangeAggregationExpr(exprDollar[3].LogRangeExpr, exprDollar[1].RangeOp, exprDollar[5].Grouping, nil) } case 48: exprDollar = exprS[exprpt-7 : exprpt+1] -//line pkg/logql/syntax/expr.y:192 { exprVAL.RangeAggregationExpr = newRangeAggregationExpr(exprDollar[5].LogRangeExpr, exprDollar[1].RangeOp, exprDollar[7].Grouping, &exprDollar[3].str) } case 49: exprDollar = exprS[exprpt-4 : exprpt+1] -//line pkg/logql/syntax/expr.y:197 { exprVAL.VectorAggregationExpr = mustNewVectorAggregationExpr(exprDollar[3].MetricExpr, exprDollar[1].VectorOp, nil, nil) } case 50: exprDollar = exprS[exprpt-5 : exprpt+1] -//line pkg/logql/syntax/expr.y:198 { exprVAL.VectorAggregationExpr = mustNewVectorAggregationExpr(exprDollar[4].MetricExpr, exprDollar[1].VectorOp, exprDollar[2].Grouping, nil) } case 51: exprDollar = exprS[exprpt-5 : exprpt+1] -//line pkg/logql/syntax/expr.y:199 { exprVAL.VectorAggregationExpr = mustNewVectorAggregationExpr(exprDollar[3].MetricExpr, exprDollar[1].VectorOp, exprDollar[5].Grouping, nil) } case 52: exprDollar = exprS[exprpt-6 : exprpt+1] -//line pkg/logql/syntax/expr.y:201 { exprVAL.VectorAggregationExpr = mustNewVectorAggregationExpr(exprDollar[5].MetricExpr, exprDollar[1].VectorOp, nil, &exprDollar[3].str) } case 53: exprDollar = exprS[exprpt-7 : exprpt+1] -//line pkg/logql/syntax/expr.y:202 { exprVAL.VectorAggregationExpr = mustNewVectorAggregationExpr(exprDollar[5].MetricExpr, exprDollar[1].VectorOp, exprDollar[7].Grouping, &exprDollar[3].str) } case 54: exprDollar = exprS[exprpt-7 : exprpt+1] -//line pkg/logql/syntax/expr.y:203 { exprVAL.VectorAggregationExpr = mustNewVectorAggregationExpr(exprDollar[6].MetricExpr, exprDollar[1].VectorOp, exprDollar[2].Grouping, &exprDollar[4].str) } case 55: exprDollar = exprS[exprpt-12 : exprpt+1] -//line pkg/logql/syntax/expr.y:208 { exprVAL.LabelReplaceExpr = mustNewLabelReplaceExpr(exprDollar[3].MetricExpr, exprDollar[5].str, exprDollar[7].str, exprDollar[9].str, exprDollar[11].str) } case 56: exprDollar = exprS[exprpt-1 : exprpt+1] -//line pkg/logql/syntax/expr.y:212 { exprVAL.Filter = labels.MatchRegexp } case 57: exprDollar = exprS[exprpt-1 : exprpt+1] -//line pkg/logql/syntax/expr.y:213 { exprVAL.Filter = labels.MatchEqual } case 58: exprDollar = exprS[exprpt-1 : exprpt+1] -//line pkg/logql/syntax/expr.y:214 { exprVAL.Filter = labels.MatchNotRegexp } case 59: exprDollar = exprS[exprpt-1 : exprpt+1] -//line pkg/logql/syntax/expr.y:215 { exprVAL.Filter = labels.MatchNotEqual } case 60: exprDollar = exprS[exprpt-3 : exprpt+1] -//line pkg/logql/syntax/expr.y:219 { exprVAL.Selector = exprDollar[2].Matchers } case 61: exprDollar = exprS[exprpt-3 : exprpt+1] -//line pkg/logql/syntax/expr.y:220 { exprVAL.Selector = exprDollar[2].Matchers } case 62: exprDollar = exprS[exprpt-3 : exprpt+1] -//line pkg/logql/syntax/expr.y:221 { } case 63: exprDollar = exprS[exprpt-1 : exprpt+1] -//line pkg/logql/syntax/expr.y:225 { exprVAL.Matchers = []*labels.Matcher{exprDollar[1].Matcher} } case 64: exprDollar = exprS[exprpt-3 : exprpt+1] -//line pkg/logql/syntax/expr.y:226 { exprVAL.Matchers = append(exprDollar[1].Matchers, exprDollar[3].Matcher) } case 65: exprDollar = exprS[exprpt-3 : exprpt+1] -//line pkg/logql/syntax/expr.y:230 { exprVAL.Matcher = mustNewMatcher(labels.MatchEqual, exprDollar[1].str, exprDollar[3].str) } case 66: exprDollar = exprS[exprpt-3 : exprpt+1] -//line pkg/logql/syntax/expr.y:231 { exprVAL.Matcher = mustNewMatcher(labels.MatchNotEqual, exprDollar[1].str, exprDollar[3].str) } case 67: exprDollar = exprS[exprpt-3 : exprpt+1] -//line pkg/logql/syntax/expr.y:232 { exprVAL.Matcher = mustNewMatcher(labels.MatchRegexp, exprDollar[1].str, exprDollar[3].str) } case 68: exprDollar = exprS[exprpt-3 : exprpt+1] -//line pkg/logql/syntax/expr.y:233 { exprVAL.Matcher = mustNewMatcher(labels.MatchNotRegexp, exprDollar[1].str, exprDollar[3].str) } case 69: exprDollar = exprS[exprpt-1 : exprpt+1] -//line pkg/logql/syntax/expr.y:237 { exprVAL.PipelineExpr = MultiStageExpr{exprDollar[1].PipelineStage} } case 70: exprDollar = exprS[exprpt-2 : exprpt+1] -//line pkg/logql/syntax/expr.y:238 { exprVAL.PipelineExpr = append(exprDollar[1].PipelineExpr, exprDollar[2].PipelineStage) } case 71: exprDollar = exprS[exprpt-1 : exprpt+1] -//line pkg/logql/syntax/expr.y:242 { exprVAL.PipelineStage = exprDollar[1].LineFilters } case 72: exprDollar = exprS[exprpt-2 : exprpt+1] -//line pkg/logql/syntax/expr.y:243 { exprVAL.PipelineStage = exprDollar[2].LabelParser } case 73: exprDollar = exprS[exprpt-2 : exprpt+1] -//line pkg/logql/syntax/expr.y:244 { exprVAL.PipelineStage = exprDollar[2].JSONExpressionParser } case 74: exprDollar = exprS[exprpt-2 : exprpt+1] -//line pkg/logql/syntax/expr.y:245 { exprVAL.PipelineStage = &LabelFilterExpr{LabelFilterer: exprDollar[2].LabelFilter} } case 75: exprDollar = exprS[exprpt-2 : exprpt+1] -//line pkg/logql/syntax/expr.y:246 { exprVAL.PipelineStage = exprDollar[2].LineFormatExpr } case 76: exprDollar = exprS[exprpt-2 : exprpt+1] -//line pkg/logql/syntax/expr.y:247 { exprVAL.PipelineStage = exprDollar[2].LabelFormatExpr } case 77: exprDollar = exprS[exprpt-1 : exprpt+1] -//line pkg/logql/syntax/expr.y:251 { exprVAL.FilterOp = OpFilterIP } case 78: exprDollar = exprS[exprpt-2 : exprpt+1] -//line pkg/logql/syntax/expr.y:255 { exprVAL.LineFilter = newLineFilterExpr(exprDollar[1].Filter, "", exprDollar[2].str) } case 79: exprDollar = exprS[exprpt-5 : exprpt+1] -//line pkg/logql/syntax/expr.y:256 { exprVAL.LineFilter = newLineFilterExpr(exprDollar[1].Filter, exprDollar[2].FilterOp, exprDollar[4].str) } case 80: exprDollar = exprS[exprpt-1 : exprpt+1] -//line pkg/logql/syntax/expr.y:260 { exprVAL.LineFilters = exprDollar[1].LineFilter } case 81: exprDollar = exprS[exprpt-2 : exprpt+1] -//line pkg/logql/syntax/expr.y:261 { exprVAL.LineFilters = newNestedLineFilterExpr(exprDollar[1].LineFilters, exprDollar[2].LineFilter) } case 82: exprDollar = exprS[exprpt-1 : exprpt+1] -//line pkg/logql/syntax/expr.y:265 { exprVAL.LabelParser = newLabelParserExpr(OpParserTypeJSON, "") } case 83: exprDollar = exprS[exprpt-1 : exprpt+1] -//line pkg/logql/syntax/expr.y:266 { exprVAL.LabelParser = newLabelParserExpr(OpParserTypeLogfmt, "") } case 84: exprDollar = exprS[exprpt-2 : exprpt+1] -//line pkg/logql/syntax/expr.y:267 { exprVAL.LabelParser = newLabelParserExpr(OpParserTypeRegexp, exprDollar[2].str) } case 85: exprDollar = exprS[exprpt-1 : exprpt+1] -//line pkg/logql/syntax/expr.y:268 { exprVAL.LabelParser = newLabelParserExpr(OpParserTypeUnpack, "") } case 86: exprDollar = exprS[exprpt-2 : exprpt+1] -//line pkg/logql/syntax/expr.y:269 { exprVAL.LabelParser = newLabelParserExpr(OpParserTypePattern, exprDollar[2].str) } case 87: exprDollar = exprS[exprpt-2 : exprpt+1] -//line pkg/logql/syntax/expr.y:273 { exprVAL.JSONExpressionParser = newJSONExpressionParser(exprDollar[2].JSONExpressionList) } case 88: exprDollar = exprS[exprpt-2 : exprpt+1] -//line pkg/logql/syntax/expr.y:275 { exprVAL.LineFormatExpr = newLineFmtExpr(exprDollar[2].str) } case 89: exprDollar = exprS[exprpt-3 : exprpt+1] -//line pkg/logql/syntax/expr.y:278 { exprVAL.LabelFormat = log.NewRenameLabelFmt(exprDollar[1].str, exprDollar[3].str) } case 90: exprDollar = exprS[exprpt-3 : exprpt+1] -//line pkg/logql/syntax/expr.y:279 { exprVAL.LabelFormat = log.NewTemplateLabelFmt(exprDollar[1].str, exprDollar[3].str) } case 91: exprDollar = exprS[exprpt-1 : exprpt+1] -//line pkg/logql/syntax/expr.y:283 { exprVAL.LabelsFormat = []log.LabelFmt{exprDollar[1].LabelFormat} } case 92: exprDollar = exprS[exprpt-3 : exprpt+1] -//line pkg/logql/syntax/expr.y:284 { exprVAL.LabelsFormat = append(exprDollar[1].LabelsFormat, exprDollar[3].LabelFormat) } case 94: exprDollar = exprS[exprpt-2 : exprpt+1] -//line pkg/logql/syntax/expr.y:288 { exprVAL.LabelFormatExpr = newLabelFmtExpr(exprDollar[2].LabelsFormat) } case 95: exprDollar = exprS[exprpt-1 : exprpt+1] -//line pkg/logql/syntax/expr.y:291 { exprVAL.LabelFilter = log.NewStringLabelFilter(exprDollar[1].Matcher) } case 96: exprDollar = exprS[exprpt-1 : exprpt+1] -//line pkg/logql/syntax/expr.y:292 { exprVAL.LabelFilter = exprDollar[1].IPLabelFilter } case 97: exprDollar = exprS[exprpt-1 : exprpt+1] -//line pkg/logql/syntax/expr.y:293 { exprVAL.LabelFilter = exprDollar[1].UnitFilter } case 98: exprDollar = exprS[exprpt-1 : exprpt+1] -//line pkg/logql/syntax/expr.y:294 { exprVAL.LabelFilter = exprDollar[1].NumberFilter } case 99: exprDollar = exprS[exprpt-3 : exprpt+1] -//line pkg/logql/syntax/expr.y:295 { exprVAL.LabelFilter = exprDollar[2].LabelFilter } case 100: exprDollar = exprS[exprpt-2 : exprpt+1] -//line pkg/logql/syntax/expr.y:296 { exprVAL.LabelFilter = log.NewAndLabelFilter(exprDollar[1].LabelFilter, exprDollar[2].LabelFilter) } case 101: exprDollar = exprS[exprpt-3 : exprpt+1] -//line pkg/logql/syntax/expr.y:297 { exprVAL.LabelFilter = log.NewAndLabelFilter(exprDollar[1].LabelFilter, exprDollar[3].LabelFilter) } case 102: exprDollar = exprS[exprpt-3 : exprpt+1] -//line pkg/logql/syntax/expr.y:298 { exprVAL.LabelFilter = log.NewAndLabelFilter(exprDollar[1].LabelFilter, exprDollar[3].LabelFilter) } case 103: exprDollar = exprS[exprpt-3 : exprpt+1] -//line pkg/logql/syntax/expr.y:299 { exprVAL.LabelFilter = log.NewOrLabelFilter(exprDollar[1].LabelFilter, exprDollar[3].LabelFilter) } case 104: exprDollar = exprS[exprpt-3 : exprpt+1] -//line pkg/logql/syntax/expr.y:303 { exprVAL.JSONExpression = log.NewJSONExpr(exprDollar[1].str, exprDollar[3].str) } case 105: exprDollar = exprS[exprpt-1 : exprpt+1] -//line pkg/logql/syntax/expr.y:304 { exprVAL.JSONExpression = log.NewJSONExpr(exprDollar[1].str, exprDollar[1].str) } case 106: exprDollar = exprS[exprpt-1 : exprpt+1] -//line pkg/logql/syntax/expr.y:307 { exprVAL.JSONExpressionList = []log.JSONExpression{exprDollar[1].JSONExpression} } case 107: exprDollar = exprS[exprpt-3 : exprpt+1] -//line pkg/logql/syntax/expr.y:308 { exprVAL.JSONExpressionList = append(exprDollar[1].JSONExpressionList, exprDollar[3].JSONExpression) } case 108: exprDollar = exprS[exprpt-6 : exprpt+1] -//line pkg/logql/syntax/expr.y:312 { exprVAL.IPLabelFilter = log.NewIPLabelFilter(exprDollar[5].str, exprDollar[1].str, log.LabelFilterEqual) } case 109: exprDollar = exprS[exprpt-6 : exprpt+1] -//line pkg/logql/syntax/expr.y:313 { exprVAL.IPLabelFilter = log.NewIPLabelFilter(exprDollar[5].str, exprDollar[1].str, log.LabelFilterNotEqual) } case 110: exprDollar = exprS[exprpt-1 : exprpt+1] -//line pkg/logql/syntax/expr.y:317 { exprVAL.UnitFilter = exprDollar[1].DurationFilter } case 111: exprDollar = exprS[exprpt-1 : exprpt+1] -//line pkg/logql/syntax/expr.y:318 { exprVAL.UnitFilter = exprDollar[1].BytesFilter } case 112: exprDollar = exprS[exprpt-3 : exprpt+1] -//line pkg/logql/syntax/expr.y:321 { exprVAL.DurationFilter = log.NewDurationLabelFilter(log.LabelFilterGreaterThan, exprDollar[1].str, exprDollar[3].duration) } case 113: exprDollar = exprS[exprpt-3 : exprpt+1] -//line pkg/logql/syntax/expr.y:322 { exprVAL.DurationFilter = log.NewDurationLabelFilter(log.LabelFilterGreaterThanOrEqual, exprDollar[1].str, exprDollar[3].duration) } case 114: exprDollar = exprS[exprpt-3 : exprpt+1] -//line pkg/logql/syntax/expr.y:323 { exprVAL.DurationFilter = log.NewDurationLabelFilter(log.LabelFilterLesserThan, exprDollar[1].str, exprDollar[3].duration) } case 115: exprDollar = exprS[exprpt-3 : exprpt+1] -//line pkg/logql/syntax/expr.y:324 { exprVAL.DurationFilter = log.NewDurationLabelFilter(log.LabelFilterLesserThanOrEqual, exprDollar[1].str, exprDollar[3].duration) } case 116: exprDollar = exprS[exprpt-3 : exprpt+1] -//line pkg/logql/syntax/expr.y:325 { exprVAL.DurationFilter = log.NewDurationLabelFilter(log.LabelFilterNotEqual, exprDollar[1].str, exprDollar[3].duration) } case 117: exprDollar = exprS[exprpt-3 : exprpt+1] -//line pkg/logql/syntax/expr.y:326 { exprVAL.DurationFilter = log.NewDurationLabelFilter(log.LabelFilterEqual, exprDollar[1].str, exprDollar[3].duration) } case 118: exprDollar = exprS[exprpt-3 : exprpt+1] -//line pkg/logql/syntax/expr.y:327 { exprVAL.DurationFilter = log.NewDurationLabelFilter(log.LabelFilterEqual, exprDollar[1].str, exprDollar[3].duration) } case 119: exprDollar = exprS[exprpt-3 : exprpt+1] -//line pkg/logql/syntax/expr.y:331 { exprVAL.BytesFilter = log.NewBytesLabelFilter(log.LabelFilterGreaterThan, exprDollar[1].str, exprDollar[3].bytes) } case 120: exprDollar = exprS[exprpt-3 : exprpt+1] -//line pkg/logql/syntax/expr.y:332 { exprVAL.BytesFilter = log.NewBytesLabelFilter(log.LabelFilterGreaterThanOrEqual, exprDollar[1].str, exprDollar[3].bytes) } case 121: exprDollar = exprS[exprpt-3 : exprpt+1] -//line pkg/logql/syntax/expr.y:333 { exprVAL.BytesFilter = log.NewBytesLabelFilter(log.LabelFilterLesserThan, exprDollar[1].str, exprDollar[3].bytes) } case 122: exprDollar = exprS[exprpt-3 : exprpt+1] -//line pkg/logql/syntax/expr.y:334 { exprVAL.BytesFilter = log.NewBytesLabelFilter(log.LabelFilterLesserThanOrEqual, exprDollar[1].str, exprDollar[3].bytes) } case 123: exprDollar = exprS[exprpt-3 : exprpt+1] -//line pkg/logql/syntax/expr.y:335 { exprVAL.BytesFilter = log.NewBytesLabelFilter(log.LabelFilterNotEqual, exprDollar[1].str, exprDollar[3].bytes) } case 124: exprDollar = exprS[exprpt-3 : exprpt+1] -//line pkg/logql/syntax/expr.y:336 { exprVAL.BytesFilter = log.NewBytesLabelFilter(log.LabelFilterEqual, exprDollar[1].str, exprDollar[3].bytes) } case 125: exprDollar = exprS[exprpt-3 : exprpt+1] -//line pkg/logql/syntax/expr.y:337 { exprVAL.BytesFilter = log.NewBytesLabelFilter(log.LabelFilterEqual, exprDollar[1].str, exprDollar[3].bytes) } case 126: exprDollar = exprS[exprpt-3 : exprpt+1] -//line pkg/logql/syntax/expr.y:341 { exprVAL.NumberFilter = log.NewNumericLabelFilter(log.LabelFilterGreaterThan, exprDollar[1].str, mustNewFloat(exprDollar[3].str)) } case 127: exprDollar = exprS[exprpt-3 : exprpt+1] -//line pkg/logql/syntax/expr.y:342 { exprVAL.NumberFilter = log.NewNumericLabelFilter(log.LabelFilterGreaterThanOrEqual, exprDollar[1].str, mustNewFloat(exprDollar[3].str)) } case 128: exprDollar = exprS[exprpt-3 : exprpt+1] -//line pkg/logql/syntax/expr.y:343 { exprVAL.NumberFilter = log.NewNumericLabelFilter(log.LabelFilterLesserThan, exprDollar[1].str, mustNewFloat(exprDollar[3].str)) } case 129: exprDollar = exprS[exprpt-3 : exprpt+1] -//line pkg/logql/syntax/expr.y:344 { exprVAL.NumberFilter = log.NewNumericLabelFilter(log.LabelFilterLesserThanOrEqual, exprDollar[1].str, mustNewFloat(exprDollar[3].str)) } case 130: exprDollar = exprS[exprpt-3 : exprpt+1] -//line pkg/logql/syntax/expr.y:345 { exprVAL.NumberFilter = log.NewNumericLabelFilter(log.LabelFilterNotEqual, exprDollar[1].str, mustNewFloat(exprDollar[3].str)) } case 131: exprDollar = exprS[exprpt-3 : exprpt+1] -//line pkg/logql/syntax/expr.y:346 { exprVAL.NumberFilter = log.NewNumericLabelFilter(log.LabelFilterEqual, exprDollar[1].str, mustNewFloat(exprDollar[3].str)) } case 132: exprDollar = exprS[exprpt-3 : exprpt+1] -//line pkg/logql/syntax/expr.y:347 { exprVAL.NumberFilter = log.NewNumericLabelFilter(log.LabelFilterEqual, exprDollar[1].str, mustNewFloat(exprDollar[3].str)) } case 133: exprDollar = exprS[exprpt-4 : exprpt+1] -//line pkg/logql/syntax/expr.y:352 { exprVAL.BinOpExpr = mustNewBinOpExpr("or", exprDollar[3].BinOpModifier, exprDollar[1].Expr, exprDollar[4].Expr) } case 134: exprDollar = exprS[exprpt-4 : exprpt+1] -//line pkg/logql/syntax/expr.y:353 { exprVAL.BinOpExpr = mustNewBinOpExpr("and", exprDollar[3].BinOpModifier, exprDollar[1].Expr, exprDollar[4].Expr) } case 135: exprDollar = exprS[exprpt-4 : exprpt+1] -//line pkg/logql/syntax/expr.y:354 { exprVAL.BinOpExpr = mustNewBinOpExpr("unless", exprDollar[3].BinOpModifier, exprDollar[1].Expr, exprDollar[4].Expr) } case 136: exprDollar = exprS[exprpt-4 : exprpt+1] -//line pkg/logql/syntax/expr.y:355 { exprVAL.BinOpExpr = mustNewBinOpExpr("+", exprDollar[3].BinOpModifier, exprDollar[1].Expr, exprDollar[4].Expr) } case 137: exprDollar = exprS[exprpt-4 : exprpt+1] -//line pkg/logql/syntax/expr.y:356 { exprVAL.BinOpExpr = mustNewBinOpExpr("-", exprDollar[3].BinOpModifier, exprDollar[1].Expr, exprDollar[4].Expr) } case 138: exprDollar = exprS[exprpt-4 : exprpt+1] -//line pkg/logql/syntax/expr.y:357 { exprVAL.BinOpExpr = mustNewBinOpExpr("*", exprDollar[3].BinOpModifier, exprDollar[1].Expr, exprDollar[4].Expr) } case 139: exprDollar = exprS[exprpt-4 : exprpt+1] -//line pkg/logql/syntax/expr.y:358 { exprVAL.BinOpExpr = mustNewBinOpExpr("/", exprDollar[3].BinOpModifier, exprDollar[1].Expr, exprDollar[4].Expr) } case 140: exprDollar = exprS[exprpt-4 : exprpt+1] -//line pkg/logql/syntax/expr.y:359 { exprVAL.BinOpExpr = mustNewBinOpExpr("%", exprDollar[3].BinOpModifier, exprDollar[1].Expr, exprDollar[4].Expr) } case 141: exprDollar = exprS[exprpt-4 : exprpt+1] -//line pkg/logql/syntax/expr.y:360 { exprVAL.BinOpExpr = mustNewBinOpExpr("^", exprDollar[3].BinOpModifier, exprDollar[1].Expr, exprDollar[4].Expr) } case 142: exprDollar = exprS[exprpt-4 : exprpt+1] -//line pkg/logql/syntax/expr.y:361 { exprVAL.BinOpExpr = mustNewBinOpExpr("==", exprDollar[3].BinOpModifier, exprDollar[1].Expr, exprDollar[4].Expr) } case 143: exprDollar = exprS[exprpt-4 : exprpt+1] -//line pkg/logql/syntax/expr.y:362 { exprVAL.BinOpExpr = mustNewBinOpExpr("!=", exprDollar[3].BinOpModifier, exprDollar[1].Expr, exprDollar[4].Expr) } case 144: exprDollar = exprS[exprpt-4 : exprpt+1] -//line pkg/logql/syntax/expr.y:363 { exprVAL.BinOpExpr = mustNewBinOpExpr(">", exprDollar[3].BinOpModifier, exprDollar[1].Expr, exprDollar[4].Expr) } case 145: exprDollar = exprS[exprpt-4 : exprpt+1] -//line pkg/logql/syntax/expr.y:364 { exprVAL.BinOpExpr = mustNewBinOpExpr(">=", exprDollar[3].BinOpModifier, exprDollar[1].Expr, exprDollar[4].Expr) } case 146: exprDollar = exprS[exprpt-4 : exprpt+1] -//line pkg/logql/syntax/expr.y:365 { exprVAL.BinOpExpr = mustNewBinOpExpr("<", exprDollar[3].BinOpModifier, exprDollar[1].Expr, exprDollar[4].Expr) } case 147: exprDollar = exprS[exprpt-4 : exprpt+1] -//line pkg/logql/syntax/expr.y:366 { exprVAL.BinOpExpr = mustNewBinOpExpr("<=", exprDollar[3].BinOpModifier, exprDollar[1].Expr, exprDollar[4].Expr) } case 148: exprDollar = exprS[exprpt-0 : exprpt+1] -//line pkg/logql/syntax/expr.y:370 { exprVAL.BoolModifier = &BinOpOptions{VectorMatching: &VectorMatching{Card: CardOneToOne}} } case 149: exprDollar = exprS[exprpt-1 : exprpt+1] -//line pkg/logql/syntax/expr.y:374 { exprVAL.BoolModifier = &BinOpOptions{VectorMatching: &VectorMatching{Card: CardOneToOne}, ReturnBool: true} } case 150: exprDollar = exprS[exprpt-5 : exprpt+1] -//line pkg/logql/syntax/expr.y:381 { exprVAL.OnOrIgnoringModifier = exprDollar[1].BoolModifier exprVAL.OnOrIgnoringModifier.VectorMatching.On = true @@ -1724,53 +1572,45 @@ exprdefault: } case 151: exprDollar = exprS[exprpt-4 : exprpt+1] -//line pkg/logql/syntax/expr.y:387 { exprVAL.OnOrIgnoringModifier = exprDollar[1].BoolModifier exprVAL.OnOrIgnoringModifier.VectorMatching.On = true } case 152: exprDollar = exprS[exprpt-5 : exprpt+1] -//line pkg/logql/syntax/expr.y:392 { exprVAL.OnOrIgnoringModifier = exprDollar[1].BoolModifier exprVAL.OnOrIgnoringModifier.VectorMatching.MatchingLabels = exprDollar[4].Labels } case 153: exprDollar = exprS[exprpt-4 : exprpt+1] -//line pkg/logql/syntax/expr.y:397 { exprVAL.OnOrIgnoringModifier = exprDollar[1].BoolModifier } case 154: exprDollar = exprS[exprpt-1 : exprpt+1] -//line pkg/logql/syntax/expr.y:403 { exprVAL.BinOpModifier = exprDollar[1].BoolModifier } case 155: exprDollar = exprS[exprpt-1 : exprpt+1] -//line pkg/logql/syntax/expr.y:404 { exprVAL.BinOpModifier = exprDollar[1].OnOrIgnoringModifier } case 156: exprDollar = exprS[exprpt-2 : exprpt+1] -//line pkg/logql/syntax/expr.y:406 { exprVAL.BinOpModifier = exprDollar[1].OnOrIgnoringModifier exprVAL.BinOpModifier.VectorMatching.Card = CardManyToOne } case 157: exprDollar = exprS[exprpt-4 : exprpt+1] -//line pkg/logql/syntax/expr.y:411 { exprVAL.BinOpModifier = exprDollar[1].OnOrIgnoringModifier exprVAL.BinOpModifier.VectorMatching.Card = CardManyToOne } case 158: exprDollar = exprS[exprpt-5 : exprpt+1] -//line pkg/logql/syntax/expr.y:416 { exprVAL.BinOpModifier = exprDollar[1].OnOrIgnoringModifier exprVAL.BinOpModifier.VectorMatching.Card = CardManyToOne @@ -1778,21 +1618,18 @@ exprdefault: } case 159: exprDollar = exprS[exprpt-2 : exprpt+1] -//line pkg/logql/syntax/expr.y:422 { exprVAL.BinOpModifier = exprDollar[1].OnOrIgnoringModifier exprVAL.BinOpModifier.VectorMatching.Card = CardOneToMany } case 160: exprDollar = exprS[exprpt-4 : exprpt+1] -//line pkg/logql/syntax/expr.y:427 { exprVAL.BinOpModifier = exprDollar[1].OnOrIgnoringModifier exprVAL.BinOpModifier.VectorMatching.Card = CardOneToMany } case 161: exprDollar = exprS[exprpt-5 : exprpt+1] -//line pkg/logql/syntax/expr.y:432 { exprVAL.BinOpModifier = exprDollar[1].OnOrIgnoringModifier exprVAL.BinOpModifier.VectorMatching.Card = CardOneToMany @@ -1800,199 +1637,171 @@ exprdefault: } case 162: exprDollar = exprS[exprpt-1 : exprpt+1] -//line pkg/logql/syntax/expr.y:440 { exprVAL.LiteralExpr = mustNewLiteralExpr(exprDollar[1].str, false) } case 163: exprDollar = exprS[exprpt-2 : exprpt+1] -//line pkg/logql/syntax/expr.y:441 { exprVAL.LiteralExpr = mustNewLiteralExpr(exprDollar[2].str, false) } case 164: exprDollar = exprS[exprpt-2 : exprpt+1] -//line pkg/logql/syntax/expr.y:442 { exprVAL.LiteralExpr = mustNewLiteralExpr(exprDollar[2].str, true) } case 165: exprDollar = exprS[exprpt-1 : exprpt+1] -//line pkg/logql/syntax/expr.y:446 { exprVAL.VectorOp = OpTypeSum } case 166: exprDollar = exprS[exprpt-1 : exprpt+1] -//line pkg/logql/syntax/expr.y:447 { exprVAL.VectorOp = OpTypeAvg } case 167: exprDollar = exprS[exprpt-1 : exprpt+1] -//line pkg/logql/syntax/expr.y:448 { exprVAL.VectorOp = OpTypeCount } case 168: exprDollar = exprS[exprpt-1 : exprpt+1] -//line pkg/logql/syntax/expr.y:449 { exprVAL.VectorOp = OpTypeMax } case 169: exprDollar = exprS[exprpt-1 : exprpt+1] -//line pkg/logql/syntax/expr.y:450 { exprVAL.VectorOp = OpTypeMin } case 170: exprDollar = exprS[exprpt-1 : exprpt+1] -//line pkg/logql/syntax/expr.y:451 { exprVAL.VectorOp = OpTypeStddev } case 171: exprDollar = exprS[exprpt-1 : exprpt+1] -//line pkg/logql/syntax/expr.y:452 { exprVAL.VectorOp = OpTypeStdvar } case 172: exprDollar = exprS[exprpt-1 : exprpt+1] -//line pkg/logql/syntax/expr.y:453 { exprVAL.VectorOp = OpTypeBottomK } case 173: exprDollar = exprS[exprpt-1 : exprpt+1] -//line pkg/logql/syntax/expr.y:454 { exprVAL.VectorOp = OpTypeTopK } case 174: exprDollar = exprS[exprpt-1 : exprpt+1] -//line pkg/logql/syntax/expr.y:458 { exprVAL.RangeOp = OpRangeTypeCount } case 175: exprDollar = exprS[exprpt-1 : exprpt+1] -//line pkg/logql/syntax/expr.y:459 { exprVAL.RangeOp = OpRangeTypeRate } case 176: exprDollar = exprS[exprpt-1 : exprpt+1] -//line pkg/logql/syntax/expr.y:460 { - exprVAL.RangeOp = OpRangeTypeBytes + exprVAL.RangeOp = OpRangeTypeRateCounter } case 177: exprDollar = exprS[exprpt-1 : exprpt+1] -//line pkg/logql/syntax/expr.y:461 { - exprVAL.RangeOp = OpRangeTypeBytesRate + exprVAL.RangeOp = OpRangeTypeBytes } case 178: exprDollar = exprS[exprpt-1 : exprpt+1] -//line pkg/logql/syntax/expr.y:462 { - exprVAL.RangeOp = OpRangeTypeAvg + exprVAL.RangeOp = OpRangeTypeBytesRate } case 179: exprDollar = exprS[exprpt-1 : exprpt+1] -//line pkg/logql/syntax/expr.y:463 { - exprVAL.RangeOp = OpRangeTypeSum + exprVAL.RangeOp = OpRangeTypeAvg } case 180: exprDollar = exprS[exprpt-1 : exprpt+1] -//line pkg/logql/syntax/expr.y:464 { - exprVAL.RangeOp = OpRangeTypeMin + exprVAL.RangeOp = OpRangeTypeSum } case 181: exprDollar = exprS[exprpt-1 : exprpt+1] -//line pkg/logql/syntax/expr.y:465 { - exprVAL.RangeOp = OpRangeTypeMax + exprVAL.RangeOp = OpRangeTypeMin } case 182: exprDollar = exprS[exprpt-1 : exprpt+1] -//line pkg/logql/syntax/expr.y:466 { - exprVAL.RangeOp = OpRangeTypeStdvar + exprVAL.RangeOp = OpRangeTypeMax } case 183: exprDollar = exprS[exprpt-1 : exprpt+1] -//line pkg/logql/syntax/expr.y:467 { - exprVAL.RangeOp = OpRangeTypeStddev + exprVAL.RangeOp = OpRangeTypeStdvar } case 184: exprDollar = exprS[exprpt-1 : exprpt+1] -//line pkg/logql/syntax/expr.y:468 { - exprVAL.RangeOp = OpRangeTypeQuantile + exprVAL.RangeOp = OpRangeTypeStddev } case 185: exprDollar = exprS[exprpt-1 : exprpt+1] -//line pkg/logql/syntax/expr.y:469 { - exprVAL.RangeOp = OpRangeTypeFirst + exprVAL.RangeOp = OpRangeTypeQuantile } case 186: exprDollar = exprS[exprpt-1 : exprpt+1] -//line pkg/logql/syntax/expr.y:470 { - exprVAL.RangeOp = OpRangeTypeLast + exprVAL.RangeOp = OpRangeTypeFirst } case 187: exprDollar = exprS[exprpt-1 : exprpt+1] -//line pkg/logql/syntax/expr.y:471 { - exprVAL.RangeOp = OpRangeTypeAbsent + exprVAL.RangeOp = OpRangeTypeLast } case 188: + exprDollar = exprS[exprpt-1 : exprpt+1] + { + exprVAL.RangeOp = OpRangeTypeAbsent + } + case 189: exprDollar = exprS[exprpt-2 : exprpt+1] -//line pkg/logql/syntax/expr.y:475 { exprVAL.OffsetExpr = newOffsetExpr(exprDollar[2].duration) } - case 189: + case 190: exprDollar = exprS[exprpt-1 : exprpt+1] -//line pkg/logql/syntax/expr.y:478 { exprVAL.Labels = []string{exprDollar[1].str} } - case 190: + case 191: exprDollar = exprS[exprpt-3 : exprpt+1] -//line pkg/logql/syntax/expr.y:479 { exprVAL.Labels = append(exprDollar[1].Labels, exprDollar[3].str) } - case 191: + case 192: exprDollar = exprS[exprpt-4 : exprpt+1] -//line pkg/logql/syntax/expr.y:483 { exprVAL.Grouping = &Grouping{Without: false, Groups: exprDollar[3].Labels} } - case 192: + case 193: exprDollar = exprS[exprpt-4 : exprpt+1] -//line pkg/logql/syntax/expr.y:484 { exprVAL.Grouping = &Grouping{Without: true, Groups: exprDollar[3].Labels} } - case 193: + case 194: exprDollar = exprS[exprpt-3 : exprpt+1] -//line pkg/logql/syntax/expr.y:485 { exprVAL.Grouping = &Grouping{Without: false, Groups: nil} } - case 194: + case 195: exprDollar = exprS[exprpt-3 : exprpt+1] -//line pkg/logql/syntax/expr.y:486 { exprVAL.Grouping = &Grouping{Without: true, Groups: nil} } diff --git a/pkg/logql/syntax/lex.go b/pkg/logql/syntax/lex.go index fb52282c4691..8ce429fdb221 100644 --- a/pkg/logql/syntax/lex.go +++ b/pkg/logql/syntax/lex.go @@ -76,20 +76,21 @@ var tokens = map[string]int{ // functionTokens are tokens that needs to be suffixes with parenthesis var functionTokens = map[string]int{ // range vec ops - OpRangeTypeRate: RATE, - OpRangeTypeCount: COUNT_OVER_TIME, - OpRangeTypeBytesRate: BYTES_RATE, - OpRangeTypeBytes: BYTES_OVER_TIME, - OpRangeTypeAvg: AVG_OVER_TIME, - OpRangeTypeSum: SUM_OVER_TIME, - OpRangeTypeMin: MIN_OVER_TIME, - OpRangeTypeMax: MAX_OVER_TIME, - OpRangeTypeStdvar: STDVAR_OVER_TIME, - OpRangeTypeStddev: STDDEV_OVER_TIME, - OpRangeTypeQuantile: QUANTILE_OVER_TIME, - OpRangeTypeFirst: FIRST_OVER_TIME, - OpRangeTypeLast: LAST_OVER_TIME, - OpRangeTypeAbsent: ABSENT_OVER_TIME, + OpRangeTypeRate: RATE, + OpRangeTypeRateCounter: RATE_COUNTER, + OpRangeTypeCount: COUNT_OVER_TIME, + OpRangeTypeBytesRate: BYTES_RATE, + OpRangeTypeBytes: BYTES_OVER_TIME, + OpRangeTypeAvg: AVG_OVER_TIME, + OpRangeTypeSum: SUM_OVER_TIME, + OpRangeTypeMin: MIN_OVER_TIME, + OpRangeTypeMax: MAX_OVER_TIME, + OpRangeTypeStdvar: STDVAR_OVER_TIME, + OpRangeTypeStddev: STDDEV_OVER_TIME, + OpRangeTypeQuantile: QUANTILE_OVER_TIME, + OpRangeTypeFirst: FIRST_OVER_TIME, + OpRangeTypeLast: LAST_OVER_TIME, + OpRangeTypeAbsent: ABSENT_OVER_TIME, // vec ops OpTypeSum: SUM, diff --git a/pkg/logql/syntax/lex_test.go b/pkg/logql/syntax/lex_test.go index 5f94fc8be139..99c97af76d25 100644 --- a/pkg/logql/syntax/lex_test.go +++ b/pkg/logql/syntax/lex_test.go @@ -64,6 +64,7 @@ func TestLex(t *testing.T) { }}, {`{ foo = "ba\"r" }`, []int{OPEN_BRACE, IDENTIFIER, EQ, STRING, CLOSE_BRACE}}, {`rate({foo="bar"}[10s])`, []int{RATE, OPEN_PARENTHESIS, OPEN_BRACE, IDENTIFIER, EQ, STRING, CLOSE_BRACE, RANGE, CLOSE_PARENTHESIS}}, + {`rate_counter({foo="bar"} | unwrap foo[10s])`, []int{RATE_COUNTER, OPEN_PARENTHESIS, OPEN_BRACE, IDENTIFIER, EQ, STRING, CLOSE_BRACE, PIPE, UNWRAP, IDENTIFIER, RANGE, CLOSE_PARENTHESIS}}, {`count_over_time({foo="bar"}[5m])`, []int{COUNT_OVER_TIME, OPEN_PARENTHESIS, OPEN_BRACE, IDENTIFIER, EQ, STRING, CLOSE_BRACE, RANGE, CLOSE_PARENTHESIS}}, {`count_over_time({foo="bar"} |~ "\\w+" | unwrap foo[5m])`, []int{COUNT_OVER_TIME, OPEN_PARENTHESIS, OPEN_BRACE, IDENTIFIER, EQ, STRING, CLOSE_BRACE, PIPE_MATCH, STRING, PIPE, UNWRAP, IDENTIFIER, RANGE, CLOSE_PARENTHESIS}}, {`sum(count_over_time({foo="bar"}[5m])) by (foo,bar)`, []int{SUM, OPEN_PARENTHESIS, COUNT_OVER_TIME, OPEN_PARENTHESIS, OPEN_BRACE, IDENTIFIER, EQ, STRING, CLOSE_BRACE, RANGE, CLOSE_PARENTHESIS, CLOSE_PARENTHESIS, BY, OPEN_PARENTHESIS, IDENTIFIER, COMMA, IDENTIFIER, CLOSE_PARENTHESIS}},