filter

package
v0.0.0-rc1 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Sep 16, 2024 License: Apache-2.0 Imports: 5 Imported by: 0

README

Filter

Эта библиотека решает задачу по парсингу аргумента filter в операциях листинга для облачных провайдеров. Спецификация языка запросов описана тут

Преимущества/сложности которые поможет решить эта библиотека:

  1. Не нужно учиться парсить новый язык запросов:
  • учитываются регистронезависимость операнда
  • учитываются регистрозависимостью аргументов
  • учитываются single и double quoted strings
  • поддержан лист аргументов
  1. При ошибке парсинга подсказывается проблемное место

Примеры использования

Пример использования можно найти в начале тестов

Известные баги:

  1. https://st.yandex-team.ru/MDB-8004

Documentation

Index

Examples

Constants

This section is empty.

Variables

This section is empty.

Functions

This section is empty.

Types

type OperatorType

type OperatorType int
const (
	Equals OperatorType = iota
	NotEquals
	Less
	LessOrEquals
	Greater
	GreaterOrEquals
	In
	NotIn
	Match
	NotMatch
)

func (OperatorType) String

func (o OperatorType) String() string

type SyntaxError

type SyntaxError struct {
	Message string
}

func (*SyntaxError) Error

func (e *SyntaxError) Error() string

type Term

type Term struct {
	Attribute string
	Operator  OperatorType
	Value     Value
}

Term ...

func Parse

func Parse(filtersString string) ([]Term, error)

Parse filter string and returns list of Term

Example
package main

import (
	"fmt"
	"strings"

	"github.com/doublecloud/transfer/library/go/yandex/cloud/filter"
)

func main() {
	terms, err := filter.Parse("id != 1 anD status = 'Ok'")
	if err != nil {
		panic(err)
	}

	query := "SELECT * FROM table WHERE "
	var where []string
	for _, term := range terms {
		switch term.Attribute {
		case "id":
			// checks are skipped
			where = append(where, fmt.Sprintf("id != %d", term.Value.AsInt()))
		case "status":
			// checks are skipped
			where = append(where, fmt.Sprintf("status = %s", term.Value.AsString()))
		}
	}
	query += strings.Join(where, " AND ")

	fmt.Println(query)
}
Output:

SELECT * FROM table WHERE id != 1 AND status = Ok

type Value

type Value struct {
	// contains filtered or unexported fields
}

func (Value) AsBool

func (v Value) AsBool() bool

func (Value) AsBoolList

func (v Value) AsBoolList() []bool

func (Value) AsFloat

func (v Value) AsFloat() float64

func (Value) AsFloatList

func (v Value) AsFloatList() []float64

func (Value) AsInt

func (v Value) AsInt() int64

func (Value) AsIntList

func (v Value) AsIntList() []int64

func (Value) AsString

func (v Value) AsString() string

func (Value) AsStringList

func (v Value) AsStringList() []string

func (Value) AsTime

func (v Value) AsTime() time.Time

func (Value) AsTimeList

func (v Value) AsTimeList() []time.Time

func (Value) IsBool

func (v Value) IsBool() bool

func (Value) IsBoolList

func (v Value) IsBoolList() bool

func (Value) IsFloat

func (v Value) IsFloat() bool

func (Value) IsFloatList

func (v Value) IsFloatList() bool

func (Value) IsInt

func (v Value) IsInt() bool

func (Value) IsIntList

func (v Value) IsIntList() bool

func (Value) IsNull

func (v Value) IsNull() bool

func (Value) IsString

func (v Value) IsString() bool

func (Value) IsStringList

func (v Value) IsStringList() bool

func (Value) IsTime

func (v Value) IsTime() bool

func (Value) IsTimeList

func (v Value) IsTimeList() bool

func (Value) Type

func (v Value) Type() string

Directories

Path Synopsis

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL