github.com/Bytom/bytom@v1.1.2-0.20210127130405-ae40204c0b09/blockchain/query/filter/expr.go (about)

     1  package filter
     2  
     3  import "fmt"
     4  
     5  type expr interface {
     6  	String() string
     7  }
     8  
     9  type binaryExpr struct {
    10  	op   *binaryOp
    11  	l, r expr
    12  }
    13  
    14  func (e binaryExpr) String() string {
    15  	return e.l.String() + " " + e.op.name + " " + e.r.String()
    16  }
    17  
    18  type attrExpr struct {
    19  	attr string
    20  }
    21  
    22  func (e attrExpr) String() string {
    23  	return e.attr
    24  }
    25  
    26  type selectorExpr struct {
    27  	ident   string
    28  	objExpr expr
    29  }
    30  
    31  func (e selectorExpr) String() string {
    32  	return e.objExpr.String() + "." + e.ident
    33  }
    34  
    35  type parenExpr struct {
    36  	inner expr
    37  }
    38  
    39  func (e parenExpr) String() string {
    40  	return "(" + e.inner.String() + ")"
    41  }
    42  
    43  type valueExpr struct {
    44  	typ   token
    45  	value string
    46  }
    47  
    48  func (e valueExpr) String() string {
    49  	return e.value
    50  }
    51  
    52  type envExpr struct {
    53  	ident string
    54  	expr  expr
    55  }
    56  
    57  func (e envExpr) String() string {
    58  	return e.ident + "(" + e.expr.String() + ")"
    59  }
    60  
    61  type placeholderExpr struct {
    62  	num int
    63  }
    64  
    65  func (e placeholderExpr) String() string {
    66  	return fmt.Sprintf("$%d", e.num)
    67  }
    68  
    69  // Type defines the value types in filter expressions.
    70  type Type int
    71  
    72  //defines the value types in filter expressions.
    73  const (
    74  	Any Type = iota
    75  	Bool
    76  	String
    77  	Integer
    78  	Object
    79  )
    80  
    81  func (t Type) String() string {
    82  	switch t {
    83  	case Any:
    84  		return "any"
    85  	case Bool:
    86  		return "bool"
    87  	case String:
    88  		return "string"
    89  	case Integer:
    90  		return "integer"
    91  	case Object:
    92  		return "object"
    93  	}
    94  	panic("unknown type")
    95  }