Documentation
¶
Overview ¶
Package document defines types to manipulate and compare documents and values.
Index ¶
- Variables
- func ArrayContains(a Array, v Value) (bool, error)
- func ArrayLength(a Array) (int, error)
- func Fields(d Document) ([]string, error)
- func IteratorToJSON(w io.Writer, s Iterator) error
- func IteratorToJSONArray(w io.Writer, s Iterator) error
- func Length(d Document) (int, error)
- func MapScan(d Document, t interface{}) error
- func MarshalJSON(d Document) ([]byte, error)
- func MarshalJSONArray(a Array) ([]byte, error)
- func Scan(d Document, targets ...interface{}) error
- func ScanValue(v Value, t interface{}) error
- func SliceScan(a Array, t interface{}) error
- func StructScan(d Document, t interface{}) error
- type Aggregator
- type AggregatorBuilder
- type Array
- type Document
- type ErrUnsupportedType
- type FieldBuffer
- func (fb *FieldBuffer) Add(field string, v Value) *FieldBuffer
- func (fb *FieldBuffer) Apply(fn func(p Path, v Value) (Value, error)) error
- func (fb *FieldBuffer) Clone() *FieldBuffer
- func (fb *FieldBuffer) Copy(d Document) error
- func (fb *FieldBuffer) Delete(path Path) error
- func (fb *FieldBuffer) Fields() []string
- func (fb FieldBuffer) GetByField(field string) (Value, error)
- func (fb FieldBuffer) Iterate(fn func(field string, value Value) error) error
- func (fb *FieldBuffer) Key() (Value, error)
- func (fb FieldBuffer) Len() int
- func (fb *FieldBuffer) MarshalJSON() ([]byte, error)
- func (fb *FieldBuffer) RawKey() []byte
- func (fb *FieldBuffer) Replace(field string, v Value) error
- func (fb *FieldBuffer) Reset()
- func (fb *FieldBuffer) ScanDocument(d Document) error
- func (fb *FieldBuffer) Set(path Path, v Value) error
- func (fb *FieldBuffer) UnmarshalJSON(data []byte) error
- type Iterator
- type IteratorFunc
- type Keyer
- type Path
- type PathFragment
- type Scanner
- type Stream
- func (s Stream) Aggregate(aggregatorBuilders ...AggregatorBuilder) Stream
- func (s Stream) Append(it Iterator) Stream
- func (s Stream) Count() (int, error)
- func (s Stream) Filter(fn func(d Document) (bool, error)) Stream
- func (s Stream) First() (d Document, err error)
- func (s Stream) GroupBy(groupFn func(d Document) (Value, error)) Stream
- func (s Stream) IsEmpty() bool
- func (s Stream) Iterate(fn func(d Document) error) error
- func (s Stream) Limit(n int) Stream
- func (s Stream) Map(fn func(d Document) (Document, error)) Stream
- func (s Stream) Offset(n int) Stream
- func (s Stream) Pipe(op StreamOperator) Stream
- type StreamOperator
- type Value
- func NewArrayValue(a Array) Value
- func NewBlobValue(x []byte) Value
- func NewBoolValue(x bool) Value
- func NewDocumentValue(d Document) Value
- func NewDoubleValue(x float64) Value
- func NewIntegerValue(x int64) Value
- func NewNullValue() Value
- func NewTextValue(x string) Value
- func NewValue(x interface{}) (Value, error)
- func NewZeroValue(t ValueType) Value
- func (v Value) Add(u Value) (res Value, err error)
- func (v Value) Append(buf []byte) ([]byte, error)
- func (v Value) BitwiseAnd(u Value) (res Value, err error)
- func (v Value) BitwiseOr(u Value) (res Value, err error)
- func (v Value) BitwiseXor(u Value) (res Value, err error)
- func (v Value) CastAs(t ValueType) (Value, error)
- func (v Value) CastAsArray() (Value, error)
- func (v Value) CastAsBlob() (Value, error)
- func (v Value) CastAsBool() (Value, error)
- func (v Value) CastAsDocument() (Value, error)
- func (v Value) CastAsDouble() (Value, error)
- func (v Value) CastAsInteger() (Value, error)
- func (v Value) CastAsText() (Value, error)
- func (v Value) Div(u Value) (res Value, err error)
- func (v Value) IsEqual(other Value) (bool, error)
- func (v Value) IsGreaterThan(other Value) (bool, error)
- func (v Value) IsGreaterThanOrEqual(other Value) (bool, error)
- func (v Value) IsLesserThan(other Value) (bool, error)
- func (v Value) IsLesserThanOrEqual(other Value) (bool, error)
- func (v Value) IsNotEqual(other Value) (bool, error)
- func (v Value) IsTruthy() (bool, error)
- func (v Value) IsZeroValue() (bool, error)
- func (v Value) MarshalBinary() ([]byte, error)
- func (v Value) MarshalJSON() ([]byte, error)
- func (v Value) Mod(u Value) (res Value, err error)
- func (v Value) Mul(u Value) (res Value, err error)
- func (v Value) Scan(t interface{}) error
- func (v Value) String() string
- func (v Value) Sub(u Value) (res Value, err error)
- func (v *Value) UnmarshalBinary(data []byte) error
- type ValueBuffer
- func (vb *ValueBuffer) Append(v Value) *ValueBuffer
- func (vb *ValueBuffer) Apply(fn func(p Path, v Value) (Value, error)) error
- func (vb *ValueBuffer) Copy(a Array) error
- func (vb *ValueBuffer) GetByIndex(i int) (Value, error)
- func (vb *ValueBuffer) Iterate(fn func(i int, value Value) error) error
- func (vb *ValueBuffer) Len() int
- func (vb ValueBuffer) MarshalJSON() ([]byte, error)
- func (vb *ValueBuffer) Replace(index int, v Value) error
- func (vb *ValueBuffer) ScanArray(a Array) error
- func (vb *ValueBuffer) UnmarshalJSON(data []byte) error
- type ValueEncoder
- type ValueType
Examples ¶
Constants ¶
This section is empty.
Variables ¶
var ErrFieldNotFound = errors.New("field not found")
ErrFieldNotFound must be returned by Document implementations, when calling the GetByField method and the field wasn't found in the document.
var ErrStreamClosed = errors.New("stream closed")
ErrStreamClosed is used to indicate that a stream must be closed.
var (
ErrValueNotFound = errors.New("value not found")
)
ErrValueNotFound must be returned by Array implementations, when calling the GetByIndex method and the index wasn't found in the array.
Functions ¶
func ArrayContains ¶
ArrayContains iterates over a and returns whether v is equal to one of its values.
func ArrayLength ¶
ArrayLength returns the length of an array.
func Fields ¶ added in v0.8.0
Fields returns a list of all the fields at the root of the document sorted lexicographically.
func IteratorToJSON ¶
IteratorToJSON encodes all the documents of an iterator to JSON stream.
func IteratorToJSONArray ¶
IteratorToJSONArray encodes all the documents of an iterator to a JSON array.
func MarshalJSON ¶ added in v0.8.0
MarshalJSON encodes a document to json.
func MarshalJSONArray ¶ added in v0.8.0
MarshalJSONArray encodes an array to json.
func SliceScan ¶
SliceScan scans a document array into a slice or fixed size array. t must be a pointer to a valid slice or array.
It t is a slice pointer and its capacity is too low, a new slice will be allocated. Otherwise, its length is set to 0 so that its content is overrided.
If t is an array pointer, its capacity must be bigger than the length of a, otherwise an error is returned.
func StructScan ¶
StructScan scans d into t. t is expected to be a pointer to a struct.
By default, each struct field name is lowercased and the document's GetByField method is called with that name. If there is a match, the value is converted to the struct field type when possible, otherwise an error is returned. The decoding of each struct field can be customized by the format string stored under the "genji" key stored in the struct field's tag. The content of the format string is used instead of the struct field name and passed to the GetByField method.
Types ¶
type Aggregator ¶ added in v0.8.0
type Aggregator interface { Add(d Document) error Aggregate(fb *FieldBuffer) error }
An Aggregator aggregates documents into a single one.
type AggregatorBuilder ¶ added in v0.8.0
type AggregatorBuilder interface {
Aggregator(group Value) Aggregator
}
An AggregatorBuilder can build aggregators on demand.
type Array ¶
type Array interface { // Iterate goes through all the values of the array and calls the given function by passing each one of them. // If the given function returns an error, the iteration stops. Iterate(fn func(i int, value Value) error) error // GetByIndex returns a value by index of the array. GetByIndex(i int) (Value, error) }
An Array contains a set of values.
type Document ¶
type Document interface { // Iterate goes through all the fields of the document and calls the given function by passing each one of them. // If the given function returns an error, the iteration stops. Iterate(fn func(field string, value Value) error) error // GetByField returns a value by field name. // Must return ErrFieldNotFound if the field doesnt exist. GetByField(field string) (Value, error) }
A Document represents a group of key value pairs.
func NewFromJSON ¶
NewFromJSON creates a document from raw JSON data. The returned document will lazily decode the data. If data is not a valid json object, calls to Iterate or GetByField will return an error.
func NewFromMap ¶
NewFromMap creates a document from a map. Due to the way maps are designed, iteration order is not guaranteed.
func NewFromStruct ¶
NewFromStruct creates a document from a struct using reflection.
type ErrUnsupportedType ¶
type ErrUnsupportedType struct { Value interface{} Msg string }
ErrUnsupportedType is used to skip struct or array fields that are not supported.
func (*ErrUnsupportedType) Error ¶
func (e *ErrUnsupportedType) Error() string
type FieldBuffer ¶
type FieldBuffer struct { EncodedKey []byte DecodedKey Value // contains filtered or unexported fields }
FieldBuffer stores a group of fields in memory. It implements the Document interface.
func (*FieldBuffer) Add ¶
func (fb *FieldBuffer) Add(field string, v Value) *FieldBuffer
Add a field to the buffer.
func (*FieldBuffer) Clone ¶ added in v0.10.0
func (fb *FieldBuffer) Clone() *FieldBuffer
Clone the buffer.
func (*FieldBuffer) Copy ¶
func (fb *FieldBuffer) Copy(d Document) error
Copy deep copies every value of the document to the buffer. If a value is a document or an array, it will be stored as a FieldBuffer or ValueBuffer respectively.
func (*FieldBuffer) Delete ¶
func (fb *FieldBuffer) Delete(path Path) error
Delete a field from the buffer.
func (*FieldBuffer) Fields ¶ added in v0.8.0
func (fb *FieldBuffer) Fields() []string
Fields returns a sorted list of root field names.
func (FieldBuffer) GetByField ¶
func (fb FieldBuffer) GetByField(field string) (Value, error)
GetByField returns a value by field. Returns an error if the field doesn't exists.
func (FieldBuffer) Iterate ¶
func (fb FieldBuffer) Iterate(fn func(field string, value Value) error) error
Iterate goes through all the fields of the document and calls the given function by passing each one of them. If the given function returns an error, the iteration stops.
func (*FieldBuffer) MarshalJSON ¶
func (fb *FieldBuffer) MarshalJSON() ([]byte, error)
MarshalJSON implements the json.Marshaler interface.
func (*FieldBuffer) RawKey ¶ added in v0.10.0
func (fb *FieldBuffer) RawKey() []byte
RawKey returns the encoded key of the document, if any.
func (*FieldBuffer) Replace ¶
func (fb *FieldBuffer) Replace(field string, v Value) error
Replace the value of the field by v.
func (*FieldBuffer) ScanDocument ¶
func (fb *FieldBuffer) ScanDocument(d Document) error
ScanDocument copies all the fields of d to the buffer.
func (*FieldBuffer) Set ¶
func (fb *FieldBuffer) Set(path Path, v Value) error
Set replaces a field if it already exists or creates one if not.
func (*FieldBuffer) UnmarshalJSON ¶
func (fb *FieldBuffer) UnmarshalJSON(data []byte) error
UnmarshalJSON implements the json.Unmarshaler interface.
type Iterator ¶
type Iterator interface { // Iterate goes through all the documents and calls the given function by passing each one of them. // If the given function returns an error, the iteration stops. Iterate(fn func(d Document) error) error }
An Iterator can iterate over documents.
func NewIterator ¶
NewIterator creates an iterator that iterates over documents.
type IteratorFunc ¶ added in v0.8.0
The IteratorFunc type is an adapter to allow the use of ordinary functions as Iterators. If f is a function with the appropriate signature, IteratorFunc(f) is an Iterator that calls f.
type Keyer ¶
A Keyer returns the key identifying documents in their storage. This is usually implemented by documents read from storages.
type Path ¶ added in v0.9.0
type Path []PathFragment
A Path represents the path to a particular value within a document.
func NewPath ¶ added in v0.10.0
NewPath creates a path from a list of strings representing either a field name or an array index in string form.
func (Path) GetValueFromArray ¶ added in v0.10.0
GetValueFromArray returns the value at path p from a.
func (Path) GetValueFromDocument ¶ added in v0.10.0
GetValueFromDocument returns the value at path p from d.
type PathFragment ¶ added in v0.9.0
PathFragment is a fragment of a path representing either a field name or the index of an array.
type Stream ¶
type Stream struct {
// contains filtered or unexported fields
}
Stream reads documents of an iterator one by one and passes them through a list of functions for transformation.
func (Stream) Aggregate ¶ added in v0.8.0
func (s Stream) Aggregate(aggregatorBuilders ...AggregatorBuilder) Stream
Aggregate builds a list of aggregators for each group of documents and passes each document of the stream to them.
func (Stream) Filter ¶
Filter each received document using fn. If fn returns true, the document is kept, otherwise it is skipped. If fn returns an error, the stream is interrupted.
func (Stream) First ¶
First runs the stream, returns the first document found and closes the stream. If the stream is empty, all return values are nil.
Example ¶
package main import ( "fmt" "log" "github.com/genjidb/genji" "github.com/genjidb/genji/document" ) func main() { db, err := genji.Open(":memory:") if err != nil { log.Fatal(err) } defer db.Close() err = db.Exec("CREATE TABLE user") if err != nil { log.Fatal(err) } err = db.Exec("INSERT INTO user (id, name, age) VALUES (?, ?, ?)", 10, "foo", 15) if err != nil { log.Fatal(err) } result, err := db.Query("SELECT id, name, age FROM user WHERE name = ?", "foo") if err != nil { panic(err) } defer result.Close() d, err := result.First() if err != nil { panic(err) } var id uint64 var name string var age uint8 err = document.Scan(d, &id, &name, &age) if err != nil { panic(err) } fmt.Println(id, name, age) }
Output: 10 foo 15
func (Stream) GroupBy ¶ added in v0.8.0
GroupBy tags each document with the group they belong to. The group is determined by the value returned by groupFn.
func (Stream) Iterate ¶
Iterate calls the underlying iterator's iterate method. If this stream was created using the Pipe method, it will apply fn to any document passed by the underlying iterator. If fn returns a document, it will be passed to the next stream. If it returns a nil document, the document will be ignored. If it returns an error, the stream will be interrupted and that error will bubble up and returned by fn, unless that error is ErrStreamClosed, in which case the Iterate method will stop the iteration and return nil. It implements the Iterator interface.
Example ¶
package main import ( "fmt" "log" "github.com/genjidb/genji" "github.com/genjidb/genji/document" ) func main() { type User struct { ID int64 Name string Age uint32 Address struct { City string ZipCode string } } db, err := genji.Open(":memory:") if err != nil { log.Fatal(err) } defer db.Close() err = db.Exec("CREATE TABLE IF NOT EXISTS user") if err != nil { log.Fatal(err) } for i := 1; i <= 10; i++ { err = db.Exec("INSERT INTO user VALUES ?", &User{ ID: int64(i), Name: fmt.Sprintf("foo%d", i), Age: uint32(i * 10), Address: struct { City string ZipCode string }{ City: "Lyon", ZipCode: fmt.Sprintf("69%03d", i), }, }) if err != nil { log.Fatal(err) } } result, err := db.Query(`SELECT id, name, age, address FROM user WHERE age >= 18`) if err != nil { panic(err) } defer result.Close() err = result.Iterate(func(d document.Document) error { // Scan into a struct var u User err = document.StructScan(d, &u) if err != nil { return err } fmt.Println(u) // Or scan individual variables // Types of variables don't have to exactly match with the types stored var id uint64 var name []byte var age uint8 var address map[string]string err = document.Scan(d, &id, &name, &age, &address) if err != nil { return err } fmt.Println(id, string(name), age, address) return nil }) if err != nil { panic(err) } }
Output: {2 foo2 20 {Lyon 69002}} 2 foo2 20 map[city:Lyon zipcode:69002] {3 foo3 30 {Lyon 69003}} 3 foo3 30 map[city:Lyon zipcode:69003] {4 foo4 40 {Lyon 69004}} 4 foo4 40 map[city:Lyon zipcode:69004] {5 foo5 50 {Lyon 69005}} 5 foo5 50 map[city:Lyon zipcode:69005] {6 foo6 60 {Lyon 69006}} 6 foo6 60 map[city:Lyon zipcode:69006] {7 foo7 70 {Lyon 69007}} 7 foo7 70 map[city:Lyon zipcode:69007] {8 foo8 80 {Lyon 69008}} 8 foo8 80 map[city:Lyon zipcode:69008] {9 foo9 90 {Lyon 69009}} 9 foo9 90 map[city:Lyon zipcode:69009] {10 foo10 100 {Lyon 69010}} 10 foo10 100 map[city:Lyon zipcode:69010]
func (Stream) Limit ¶
Limit interrupts the stream once the number of passed documents have reached n.
func (Stream) Map ¶
Map applies fn to each received document and passes it to the next stream. If fn returns an error, the stream is interrupted.
func (Stream) Pipe ¶
func (s Stream) Pipe(op StreamOperator) Stream
Pipe creates a new Stream who can read its data from s and apply op to every document passed by its Iterate method.
type StreamOperator ¶
An StreamOperator is used to modify a stream. If a stream operator returns a document, it will be passed to the next stream. If it returns a nil document, the document will be ignored. If it returns an error, the stream will be interrupted and that error will bubble up and returned by this function, unless that error is ErrStreamClosed, in which case the Iterate method will stop the iteration and return nil. Stream operators can be reused, and thus, any state or side effect should be kept within the operator closure unless the nature of the operator prevents that.
type Value ¶
type Value struct { Type ValueType V interface{} }
A Value stores encoded data alongside its type.
func NewDocumentValue ¶
NewDocumentValue returns a value of type Document.
func NewDoubleValue ¶ added in v0.7.0
NewDoubleValue encodes x and returns a value.
func NewIntegerValue ¶ added in v0.7.0
NewIntegerValue encodes x and returns a value whose type depends on the magnitude of x.
func NewZeroValue ¶
NewZeroValue returns a value whose value is equal to the Go zero value of the selected type.
func (Value) Add ¶
Add u to v and return the result. Only numeric values and booleans can be added together.
func (Value) Append ¶ added in v0.9.0
Append appends to buf a binary representation of v. The encoded value doesn't include type information.
func (Value) BitwiseAnd ¶
BitwiseAnd calculates v & u and returns the result. Only numeric values and booleans can be calculated together. If both v and u are integers, the result will be an integer.
func (Value) BitwiseOr ¶
BitwiseOr calculates v | u and returns the result. Only numeric values and booleans can be calculated together. If both v and u are integers, the result will be an integer.
func (Value) BitwiseXor ¶
BitwiseXor calculates v ^ u and returns the result. Only numeric values and booleans can be calculated together. If both v and u are integers, the result will be an integer.
func (Value) CastAsArray ¶ added in v0.7.0
CastAsArray casts according to the following rules: Text: decodes a JSON array, otherwise fails. Any other type is considered an invalid cast.
func (Value) CastAsBlob ¶ added in v0.7.0
CastAsBlob casts according to the following rules: Text: decodes a base64 string, otherwise fails. Any other type is considered an invalid cast.
func (Value) CastAsBool ¶ added in v0.7.0
CastAsBool casts according to the following rules: Integer: true if truthy, otherwise false. Text: uses strconv.Parsebool to determine the boolean value, it fails if the text doesn't contain a valid boolean. Any other type is considered an invalid cast.
func (Value) CastAsDocument ¶ added in v0.7.0
CastAsDocument casts according to the following rules: Text: decodes a JSON object, otherwise fails. Any other type is considered an invalid cast.
func (Value) CastAsDouble ¶ added in v0.7.0
CastAsDouble casts according to the following rules: Integer: returns a double version of the integer. Text: uses strconv.ParseFloat to determine the double value, it fails if the text doesn't contain a valid float value. Any other type is considered an invalid cast.
func (Value) CastAsInteger ¶ added in v0.7.0
CastAsInteger casts according to the following rules: Bool: returns 1 if true, 0 if false. Double: cuts off the decimal and remaining numbers. Text: uses strconv.ParseInt to determine the integer value, then casts it to an integer. If it fails uses strconv.ParseFloat to determine the double value, then casts it to an integer It fails if the text doesn't contain a valid float value. Any other type is considered an invalid cast.
func (Value) CastAsText ¶ added in v0.7.0
CastAsText returns a JSON representation of v. If the representation is a string, it gets unquoted.
func (Value) Div ¶
Div calculates v / u and returns the result. Only numeric values and booleans can be calculated together. If both v and u are integers, the result will be an integer.
func (Value) IsGreaterThan ¶
IsGreaterThan returns true if v is greather than the given value.
func (Value) IsGreaterThanOrEqual ¶
IsGreaterThanOrEqual returns true if v is greather than or equal to the given value.
func (Value) IsLesserThan ¶
IsLesserThan returns true if v is lesser than the given value.
func (Value) IsLesserThanOrEqual ¶
IsLesserThanOrEqual returns true if v is lesser than or equal to the given value.
func (Value) IsNotEqual ¶
IsNotEqual returns true if v is not equal to the given value.
func (Value) IsZeroValue ¶
IsZeroValue indicates if the value data is the zero value for the value type. This function doesn't perform any allocation.
func (Value) MarshalBinary ¶ added in v0.9.0
MarshalBinary returns a binary representation of v. The encoded value doesn't include type information.
func (Value) MarshalJSON ¶
MarshalJSON implements the json.Marshaler interface.
func (Value) Mod ¶
Mod calculates v / u and returns the result. Only numeric values and booleans can be calculated together. If both v and u are integers, the result will be an integer.
func (Value) Mul ¶
Mul calculates v * u and returns the result. Only numeric values and booleans can be calculated together.
func (Value) String ¶
String returns a string representation of the value. It implements the fmt.Stringer interface.
func (Value) Sub ¶
Sub calculates v - u and returns the result. Only numeric values and booleans can be calculated together.
func (*Value) UnmarshalBinary ¶ added in v0.9.0
UnmarshalBinary decodes data to v. Data must not contain type information, instead, v.Type must be set.
type ValueBuffer ¶
type ValueBuffer struct {
// contains filtered or unexported fields
}
ValueBuffer is an array that holds values in memory.
func NewValueBuffer ¶
func NewValueBuffer(values ...Value) *ValueBuffer
NewValueBuffer creates a buffer of values.
func (*ValueBuffer) Append ¶
func (vb *ValueBuffer) Append(v Value) *ValueBuffer
Append a value to the buffer and return a new buffer.
func (*ValueBuffer) Copy ¶
func (vb *ValueBuffer) Copy(a Array) error
Copy deep copies all the values from the given array. If a value is a document or an array, it will be stored as a *FieldBuffer or *ValueBuffer respectively.
func (*ValueBuffer) GetByIndex ¶
func (vb *ValueBuffer) GetByIndex(i int) (Value, error)
GetByIndex returns a value set at the given index. If the index is out of range it returns an error.
func (*ValueBuffer) Iterate ¶
func (vb *ValueBuffer) Iterate(fn func(i int, value Value) error) error
Iterate over all the values of the buffer. It implements the Array interface.
func (*ValueBuffer) Len ¶ added in v0.10.0
func (vb *ValueBuffer) Len() int
Len returns the length the of array
func (ValueBuffer) MarshalJSON ¶
func (vb ValueBuffer) MarshalJSON() ([]byte, error)
MarshalJSON implements the json.Marshaler interface.
func (*ValueBuffer) Replace ¶
func (vb *ValueBuffer) Replace(index int, v Value) error
Replace the value of the index by v.
func (*ValueBuffer) ScanArray ¶
func (vb *ValueBuffer) ScanArray(a Array) error
ScanArray copies all the values of a to the buffer.
func (*ValueBuffer) UnmarshalJSON ¶
func (vb *ValueBuffer) UnmarshalJSON(data []byte) error
UnmarshalJSON implements the json.Unmarshaler interface.
type ValueEncoder ¶ added in v0.9.0
type ValueEncoder struct {
// contains filtered or unexported fields
}
ValueEncoder encodes natural sort-ordered representations of values. Type information is encoded alongside each value.
func NewValueEncoder ¶ added in v0.9.0
func NewValueEncoder(w io.Writer) *ValueEncoder
NewValueEncoder creates a ValueEncoder that writes to w.
func (*ValueEncoder) Encode ¶ added in v0.9.0
func (ve *ValueEncoder) Encode(v Value) error
Encode v to the writer.
type ValueType ¶
type ValueType uint8
ValueType represents a value type supported by the database.
const ( NullValue ValueType = 0x80 BoolValue ValueType = 0x81 // integer family: 0x90 to 0x9F IntegerValue ValueType = 0x90 // double family: 0xA0 to 0xAF DoubleValue ValueType = 0xA0 // string family: 0xC0 to 0xCF TextValue ValueType = 0xC0 // blob family: 0xD0 to 0xDF BlobValue ValueType = 0xD0 // array family: 0xE0 to 0xEF ArrayValue ValueType = 0xE0 // document family: 0xF0 to 0xFF DocumentValue ValueType = 0xF0 )
List of supported value types. These types are separated by family so that when new types are introduced we don't need to modify them.
Source Files
¶
Directories
¶
Path | Synopsis |
---|---|
Package encoding defines types that deal with document encoding.
|
Package encoding defines types that deal with document encoding. |
encodingtest
Package encodingtest provides a test suite for testing codec implementations.
|
Package encodingtest provides a test suite for testing codec implementations. |