- package kv
-
- import (
- "encoding/binary"
- "fmt"
- "strconv"
-
- "github.com/google/orderedcode"
- "github.com/tendermint/tendermint/internal/pubsub/query/syntax"
- "github.com/tendermint/tendermint/types"
- )
-
- func intInSlice(a int, list []int) bool {
- for _, b := range list {
- if b == a {
- return true
- }
- }
-
- return false
- }
-
- func int64FromBytes(bz []byte) int64 {
- v, _ := binary.Varint(bz)
- return v
- }
-
- func int64ToBytes(i int64) []byte {
- buf := make([]byte, binary.MaxVarintLen64)
- n := binary.PutVarint(buf, i)
- return buf[:n]
- }
-
- func heightKey(height int64) ([]byte, error) {
- return orderedcode.Append(
- nil,
- types.BlockHeightKey,
- height,
- )
- }
-
- func eventKey(compositeKey, typ, eventValue string, height int64) ([]byte, error) {
- return orderedcode.Append(
- nil,
- compositeKey,
- eventValue,
- height,
- typ,
- )
- }
-
- func parseValueFromPrimaryKey(key []byte) (string, error) {
- var (
- compositeKey string
- height int64
- )
-
- remaining, err := orderedcode.Parse(string(key), &compositeKey, &height)
- if err != nil {
- return "", fmt.Errorf("failed to parse event key: %w", err)
- }
-
- if len(remaining) != 0 {
- return "", fmt.Errorf("unexpected remainder in key: %s", remaining)
- }
-
- return strconv.FormatInt(height, 10), nil
- }
-
- func parseValueFromEventKey(key []byte) (string, error) {
- var (
- compositeKey, typ, eventValue string
- height int64
- )
-
- remaining, err := orderedcode.Parse(string(key), &compositeKey, &eventValue, &height, &typ)
- if err != nil {
- return "", fmt.Errorf("failed to parse event key: %w", err)
- }
-
- if len(remaining) != 0 {
- return "", fmt.Errorf("unexpected remainder in key: %s", remaining)
- }
-
- return eventValue, nil
- }
-
- func lookForHeight(conditions []syntax.Condition) (int64, bool) {
- for _, c := range conditions {
- if c.Tag == types.BlockHeightKey && c.Op == syntax.TEq {
- return int64(c.Arg.Number()), true
- }
- }
-
- return 0, false
- }
|