github.com/ydb-platform/ydb-go-sdk/v3@v3.57.0/internal/scanner/scanner.go (about)

     1  package scanner
     2  
     3  import (
     4  	"io"
     5  	"time"
     6  
     7  	"github.com/ydb-platform/ydb-go-sdk/v3/internal/decimal"
     8  	"github.com/ydb-platform/ydb-go-sdk/v3/internal/types"
     9  	"github.com/ydb-platform/ydb-go-sdk/v3/internal/value"
    10  )
    11  
    12  // RawValue scanning non-primitive yql types or for own implementation scanner native API
    13  type RawValue interface {
    14  	Path() string
    15  	WritePathTo(w io.Writer) (n int64, err error)
    16  	Type() types.Type
    17  	Bool() (v bool)
    18  	Int8() (v int8)
    19  	Uint8() (v uint8)
    20  	Int16() (v int16)
    21  	Uint16() (v uint16)
    22  	Int32() (v int32)
    23  	Uint32() (v uint32)
    24  	Int64() (v int64)
    25  	Uint64() (v uint64)
    26  	Float() (v float32)
    27  	Double() (v float64)
    28  	Date() (v time.Time)
    29  	Datetime() (v time.Time)
    30  	Timestamp() (v time.Time)
    31  	Interval() (v time.Duration)
    32  	TzDate() (v time.Time)
    33  	TzDatetime() (v time.Time)
    34  	TzTimestamp() (v time.Time)
    35  	String() (v []byte)
    36  	UTF8() (v string)
    37  	YSON() (v []byte)
    38  	JSON() (v []byte)
    39  	UUID() (v [16]byte)
    40  	JSONDocument() (v []byte)
    41  	DyNumber() (v string)
    42  	Value() value.Value
    43  
    44  	// Any returns any primitive or optional value.
    45  	// Currently, it may return one of these types:
    46  	//
    47  	//   bool
    48  	//   int8
    49  	//   uint8
    50  	//   int16
    51  	//   uint16
    52  	//   int32
    53  	//   uint32
    54  	//   int64
    55  	//   uint64
    56  	//   float32
    57  	//   float64
    58  	//   []byte
    59  	//   string
    60  	//   [16]byte
    61  	//
    62  	Any() interface{}
    63  
    64  	// Unwrap unwraps current item under scan interpreting it as Optional<Type> types.
    65  	Unwrap()
    66  	AssertType(t types.Type) bool
    67  	IsNull() bool
    68  	IsOptional() bool
    69  
    70  	// ListIn interprets current item under scan as a ydb's list.
    71  	// It returns the size of the nested items.
    72  	// If current item under scan is not a list types, it returns -1.
    73  	ListIn() (size int)
    74  
    75  	// ListItem selects current item i-th element as an item to scan.
    76  	// ListIn() must be called before.
    77  	ListItem(i int)
    78  
    79  	// ListOut leaves list entered before by ListIn() call.
    80  	ListOut()
    81  
    82  	// TupleIn interprets current item under scan as a ydb's tuple.
    83  	// It returns the size of the nested items.
    84  	TupleIn() (size int)
    85  
    86  	// TupleItem selects current item i-th element as an item to scan.
    87  	// Note that TupleIn() must be called before.
    88  	// It panics if it is out of bounds.
    89  	TupleItem(i int)
    90  
    91  	// TupleOut leaves tuple entered before by TupleIn() call.
    92  	TupleOut()
    93  
    94  	// StructIn interprets current item under scan as a ydb's struct.
    95  	// It returns the size of the nested items – the struct fields values.
    96  	// If there is no current item under scan it returns -1.
    97  	StructIn() (size int)
    98  
    99  	// StructField selects current item i-th field value as an item to scan.
   100  	// Note that StructIn() must be called before.
   101  	// It panics if i is out of bounds.
   102  	StructField(i int) (name string)
   103  
   104  	// StructOut leaves struct entered before by StructIn() call.
   105  	StructOut()
   106  
   107  	// DictIn interprets current item under scan as a ydb's dict.
   108  	// It returns the size of the nested items pairs.
   109  	// If there is no current item under scan it returns -1.
   110  	DictIn() (size int)
   111  
   112  	// DictKey selects current item i-th pair key as an item to scan.
   113  	// Note that DictIn() must be called before.
   114  	// It panics if i is out of bounds.
   115  	DictKey(i int)
   116  
   117  	// DictPayload selects current item i-th pair value as an item to scan.
   118  	// Note that DictIn() must be called before.
   119  	// It panics if i is out of bounds.
   120  	DictPayload(i int)
   121  
   122  	// DictOut leaves dict entered before by DictIn() call.
   123  	DictOut()
   124  
   125  	// Variant unwraps current item under scan interpreting it as Variant<Type> types.
   126  	// It returns non-empty name of a field that is filled for struct-based
   127  	// variant.
   128  	// It always returns an index of filled field of a Type.
   129  	Variant() (name string, index uint32)
   130  
   131  	// Decimal returns decimal value represented by big-endian 128 bit signed integer.
   132  	Decimal(t types.Type) (v [16]byte)
   133  
   134  	// UnwrapDecimal returns decimal value represented by big-endian 128 bit signed
   135  	// integer and its types information.
   136  	UnwrapDecimal() decimal.Decimal
   137  	IsDecimal() bool
   138  	Err() error
   139  }
   140  
   141  // Scanner scanning raw ydb types
   142  type Scanner interface {
   143  	// UnmarshalYDB must be implemented on client-side for unmarshal raw ydb value.
   144  	UnmarshalYDB(raw RawValue) error
   145  }