Back to godoc.org

Package spanutil

v0.0.0-...-1557bcf
Latest Go to latest

The latest major version is .

Published: Aug 13, 2020 | License: Apache-2.0 | Module: github.com/luci/luci-go

Overview

Package span contains utility functions to interact with the underlying Spanner storage. It does not attempt to encapsulate Spanner.

Index

Variables

var ErrNoResults = iterator.Done

ErrNoResults is an error returned when a query unexpectedly has no results.

func FromSpanner

func FromSpanner(row *spanner.Row, ptrs ...interface{}) error

FromSpanner is a shortcut for (&Buffer{}).FromSpanner. Appropriate when FromSpanner is called only once, whereas Buffer is reusable throughout function.

func IncRowCount

func IncRowCount(ctx context.Context, count int, table Table, rowStatus RowStatus, realm string)

IncRowCount increments the row counter.

func InsertMap

func InsertMap(table string, in map[string]interface{}) *spanner.Mutation

InsertMap is a shortcut for spanner.InsertMap with ToSpannerMap applied to in.

func InsertOrUpdateMap

func InsertOrUpdateMap(table string, in map[string]interface{}) *spanner.Mutation

InsertOrUpdateMap is a shortcut for spanner.InsertOrUpdateMap with ToSpannerMap applied to in.

func Query

func Query(ctx context.Context, st spanner.Statement, fn func(row *spanner.Row) error) error

Query executes a query. Ensures st.Params are Spanner-compatible by modifying st.Params in place.

func QueryFirstRow

func QueryFirstRow(ctx context.Context, st spanner.Statement, ptrs ...interface{}) error

QueryFirstRow executes a query, reads the first row into ptrs and stops the iterator. Returns ErrNoResults if the query does not return at least one row.

func ReadRow

func ReadRow(ctx context.Context, table string, key spanner.Key, ptrMap map[string]interface{}) error

ReadRow reads a single row from the database and reads its values. ptrMap must map from column names to pointers where the values will be written.

func ToSpanner

func ToSpanner(v interface{}) interface{}

ToSpanner converts values from Go types to Spanner types. In addition to supported types in FromSpanner, also supports []interface{} and map[string]interface{}.

func ToSpannerMap

func ToSpannerMap(values map[string]interface{}) map[string]interface{}

ToSpannerMap converts a map of Go values to a map of Spanner values. See also ToSpanner.

func ToSpannerSlice

func ToSpannerSlice(values ...interface{}) []interface{}

ToSpannerSlice converts a slice of Go values to a slice of Spanner values. See also ToSpanner.

func UpdateMap

func UpdateMap(table string, in map[string]interface{}) *spanner.Mutation

UpdateMap is a shortcut for spanner.UpdateMap with ToSpannerMap applied to in.

type Buffer

type Buffer struct {
	NullString            spanner.NullString
	NullTime              spanner.NullTime
	Int64                 int64
	StringSlice           []string
	ByteSlice, ByteSlice2 []byte
}

Buffer can convert a value from a Spanner type to a Go type. Supported types:

- Value and Ptr
- string
- tspb.Timestamp
- pb.InvocationState
- pb.TestStatus
- pb.Variant
- pb.StringPair
- proto.Message

TODO(nodir): move to buffer.go

func (*Buffer) FromSpanner

func (b *Buffer) FromSpanner(row *spanner.Row, ptrs ...interface{}) error

FromSpanner reads values from row to ptrs, converting types from Spanner to Go along the way.

type Compressed

type Compressed []byte

Compressed instructs ToSpanner and FromSpanner functions to compress the content with https://godoc.org/github.com/klauspost/compress/zstd encoding.

func (*Compressed) FromSpanner

func (c *Compressed) FromSpanner(b *Buffer) error

FromSpanner implements Ptr.

func (*Compressed) SpannerPtr

func (c *Compressed) SpannerPtr(b *Buffer) interface{}

SpannerPtr implements Ptr.

func (Compressed) ToSpanner

func (c Compressed) ToSpanner() interface{}

ToSpanner implements Value.

type Ptr

type Ptr interface {
	// SpannerPtr returns to a pointer of a type supported by Spanner client.
	// SpannerPtr must use one of typed buffers in b.
	SpannerPtr(b *Buffer) interface{}
	// FromSpanner replaces Ptr value with the value in the typed buffer returned
	// by SpannerPtr.
	FromSpanner(b *Buffer) error
}

Ptr can be used a destination of reading a Spanner cell. Typically if type *T implements Ptr, then T implements Value.

type RowStatus

type RowStatus string

RowStatus is a status of a row. Used in metrics.

const (
	Inserted RowStatus = "INSERTED"
	Deleted  RowStatus = "DELETED"
)

Values of RowStatus type.

type Table

type Table string

Table identifies a Spanner table. Used in metrics.

const (
	TestResults Table = "TestResults"
	Invocations Table = "Invocations"
)

Values of Table type.

type Value

type Value interface {
	// ToSpanner returns a value of a type supported by Spanner client.
	ToSpanner() interface{}
}

Value can be converted to a Spanner value. Typically if type T implements Value, then *T implements Ptr.

Package Files

Documentation was rendered with GOOS=linux and GOARCH=amd64.

Jump to identifier

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to identifier