Documentation ¶
Overview ¶
Package gocql implements a fast and robust Cassandra driver for the Go programming language.
Copyright (c) 2012 The gocql Authors. All rights reserved. Use of this source code is governed by a BSD-style license that can be found in the LICENSE file. This file will be the future home for more policies
The uuid package can be used to generate and parse universally unique identifiers, a standardized format in the form of a 128 bit number.
Index ¶
- Constants
- Variables
- func JoinHostPort(addr string, port int) string
- func Marshal(info TypeInfo, value interface{}) ([]byte, error)
- func NamedValue(name string, value interface{}) interface{}
- func NewErrProtocol(format string, args ...interface{}) error
- func TupleColumnName(c string, n int) string
- func Unmarshal(info TypeInfo, data []byte, value interface{}) error
- type AddressTranslator
- type AddressTranslatorFunc
- type Authenticator
- type Batch
- func (b *Batch) Attempts() int
- func (b *Batch) Bind(stmt string, bind func(q *QueryInfo) ([]interface{}, error))
- func (b *Batch) DefaultTimestamp(enable bool) *Batch
- func (b *Batch) GetConsistency() Consistency
- func (b *Batch) GetRoutingKey() ([]byte, error)
- func (b *Batch) Latency() int64
- func (b *Batch) Query(stmt string, args ...interface{})
- func (b *Batch) RetryPolicy(r RetryPolicy) *Batch
- func (b *Batch) SerialConsistency(cons SerialConsistency) *Batch
- func (b *Batch) Size() int
- func (b *Batch) WithContext(ctx context.Context) *Batch
- func (b *Batch) WithTimestamp(timestamp int64) *Batch
- type BatchEntry
- type BatchType
- type ClusterConfig
- type CollectionType
- type ColumnIndexMetadata
- type ColumnInfo
- type ColumnKind
- type ColumnMetadata
- type ColumnOrder
- type Compressor
- type Conn
- func (c *Conn) Address() string
- func (c *Conn) AvailableStreams() int
- func (c *Conn) Close()
- func (c *Conn) Closed() bool
- func (c *Conn) Pick(qry *Query) *Conn
- func (c *Conn) Read(p []byte) (n int, err error)
- func (c *Conn) UseKeyspace(keyspace string) error
- func (c *Conn) Write(p []byte) (int, error)
- type ConnConfig
- type ConnErrorHandler
- type Consistency
- type ErrProtocol
- type Error
- type ExecutableQuery
- type ExponentialBackoffRetryPolicy
- type HostFilter
- type HostFilterFunc
- type HostInfo
- func (h *HostInfo) BroadcastAddress() net.IP
- func (h *HostInfo) ClusterName() string
- func (h *HostInfo) ConnectAddress() net.IP
- func (h *HostInfo) DSEVersion() string
- func (h *HostInfo) DataCenter() string
- func (h *HostInfo) Equal(host *HostInfo) bool
- func (h *HostInfo) Graph() bool
- func (h *HostInfo) HostID() string
- func (h *HostInfo) IsUp() bool
- func (h *HostInfo) ListenAddress() net.IP
- func (h *HostInfo) Partitioner() string
- func (h *HostInfo) Peer() net.IP
- func (h *HostInfo) Port() int
- func (h *HostInfo) PreferredIP() net.IP
- func (h *HostInfo) RPCAddress() net.IP
- func (h *HostInfo) Rack() string
- func (h *HostInfo) SetConnectAddress(address net.IP) *HostInfo
- func (h *HostInfo) State() nodeState
- func (h *HostInfo) String() string
- func (h *HostInfo) Tokens() []string
- func (h *HostInfo) Version() cassVersion
- func (h *HostInfo) WorkLoad() string
- type HostSelectionPolicy
- type HostStateNotifier
- type Iter
- func (iter *Iter) Close() error
- func (iter *Iter) Columns() []ColumnInfo
- func (iter *Iter) GetCustomPayload() map[string][]byte
- func (iter *Iter) Host() *HostInfo
- func (iter *Iter) MapScan(m map[string]interface{}) bool
- func (iter *Iter) NumRows() int
- func (iter *Iter) PageState() []byte
- func (iter *Iter) RowData() (RowData, error)
- func (iter *Iter) Scan(dest ...interface{}) bool
- func (iter *Iter) Scanner() Scanner
- func (iter *Iter) SliceMap() ([]map[string]interface{}, error)
- func (iter *Iter) Warnings() []string
- func (iter *Iter) WillSwitchPage() bool
- type KeyspaceMetadata
- type MarshalError
- type Marshaler
- type NativeType
- type NextHost
- type Node
- type PasswordAuthenticator
- type PoolConfig
- type Query
- func (q *Query) Attempts() int
- func (q *Query) Bind(v ...interface{}) *Query
- func (q *Query) Consistency(c Consistency) *Query
- func (q *Query) DefaultTimestamp(enable bool) *Query
- func (q *Query) Exec() error
- func (q *Query) GetConsistency() Consistency
- func (q *Query) GetRoutingKey() ([]byte, error)
- func (q *Query) Iter() *Iter
- func (q *Query) Latency() int64
- func (q *Query) MapScan(m map[string]interface{}) error
- func (q *Query) MapScanCAS(dest map[string]interface{}) (applied bool, err error)
- func (q *Query) NoSkipMetadata() *Query
- func (q *Query) PageSize(n int) *Query
- func (q *Query) PageState(state []byte) *Query
- func (q *Query) Prefetch(p float64) *Query
- func (q *Query) Release()
- func (q *Query) RetryPolicy(r RetryPolicy) *Query
- func (q *Query) RoutingKey(routingKey []byte) *Query
- func (q *Query) Scan(dest ...interface{}) error
- func (q *Query) ScanCAS(dest ...interface{}) (applied bool, err error)
- func (q *Query) SerialConsistency(cons SerialConsistency) *Query
- func (q Query) String() string
- func (q *Query) Trace(trace Tracer) *Query
- func (q *Query) WithContext(ctx context.Context) *Query
- func (q *Query) WithTimestamp(timestamp int64) *Query
- type QueryInfo
- type RequestErrAlreadyExists
- type RequestErrFunctionFailure
- type RequestErrReadFailure
- type RequestErrReadTimeout
- type RequestErrUnavailable
- type RequestErrUnprepared
- type RequestErrWriteFailure
- type RequestErrWriteTimeout
- type RequestError
- type RetryPolicy
- type RetryableQuery
- type RoundRobin
- type RowData
- type Scanner
- type SelectedHost
- type SerialConsistency
- type Session
- func (s *Session) Bind(stmt string, b func(q *QueryInfo) ([]interface{}, error)) *Query
- func (s *Session) Close()
- func (s *Session) Closed() bool
- func (s *Session) ExecuteBatch(batch *Batch) error
- func (s *Session) ExecuteBatchCAS(batch *Batch, dest ...interface{}) (applied bool, iter *Iter, err error)
- func (s *Session) KeyspaceMetadata(keyspace string) (*KeyspaceMetadata, error)
- func (s *Session) MapExecuteBatchCAS(batch *Batch, dest map[string]interface{}) (applied bool, iter *Iter, err error)
- func (s *Session) NewBatch(typ BatchType) *Batch
- func (s *Session) Query(stmt string, values ...interface{}) *Query
- func (s *Session) SetConsistency(cons Consistency)
- func (s *Session) SetPageSize(n int)
- func (s *Session) SetPrefetch(p float64)
- func (s *Session) SetTrace(trace Tracer)
- type SetHosts
- type SetPartitioner
- type SimpleRetryPolicy
- type SnappyCompressor
- type SslOptions
- type StdLogger
- type TableMetadata
- type Tracer
- type TupleTypeInfo
- type Type
- type TypeInfo
- type UDTField
- type UDTMarshaler
- type UDTTypeInfo
- type UDTUnmarshaler
- type UUID
- func (u UUID) Bytes() []byte
- func (u UUID) MarshalJSON() ([]byte, error)
- func (u UUID) MarshalText() ([]byte, error)
- func (u UUID) Node() []byte
- func (u UUID) String() string
- func (u UUID) Time() time.Time
- func (u UUID) Timestamp() int64
- func (u *UUID) UnmarshalJSON(data []byte) error
- func (u *UUID) UnmarshalText(text []byte) (err error)
- func (u UUID) Variant() int
- func (u UUID) Version() int
- type UnmarshalError
- type Unmarshaler
Constants ¶
const ( NodeUp nodeState = iota NodeDown )
const ( DEFAULT_KEY_ALIAS = "key" DEFAULT_COLUMN_ALIAS = "column" DEFAULT_VALUE_ALIAS = "value" )
default alias values
const ( REVERSED_TYPE = "org.apache.cassandra.db.marshal.ReversedType" COMPOSITE_TYPE = "org.apache.cassandra.db.marshal.CompositeType" COLLECTION_TYPE = "org.apache.cassandra.db.marshal.ColumnToCollectionType" LIST_TYPE = "org.apache.cassandra.db.marshal.ListType" SET_TYPE = "org.apache.cassandra.db.marshal.SetType" MAP_TYPE = "org.apache.cassandra.db.marshal.MapType" )
const ( VariantNCSCompat = 0 VariantIETF = 2 VariantMicrosoft = 6 VariantFuture = 7 )
const BatchSizeMaximum = 65535
BatchSizeMaximum is the maximum number of statements a batch operation can have. This limit is set by cassandra and could change in the future.
Variables ¶
var ( ErrNoHosts = errors.New("no hosts provided") ErrNoConnectionsStarted = errors.New("no connections were made when creating the session") ErrHostQueryFailed = errors.New("unable to populate Hosts") )
var ( ErrQueryArgLength = errors.New("gocql: query argument length mismatch") ErrTimeoutNoResponse = errors.New("gocql: no response received from cassandra within timeout period") ErrTooManyTimeouts = errors.New("gocql: too many query timeouts on the connection") ErrConnectionClosed = errors.New("gocql: connection closed waiting for response") ErrNoStreams = errors.New("gocql: no streams available on connection") )
var ( ErrNotFound = errors.New("not found") ErrUnsupported = errors.New("feature not supported") ErrTooManyStmts = errors.New("too many statements") ErrUseStmt = errors.New("use statements aren't supported. Please see https://github.com/gocql/gocql for explanation.") ErrSessionClosed = errors.New("session has been closed") ErrNoConnections = errors.New("gocql: no hosts available in the pool") ErrNoKeyspace = errors.New("no keyspace provided") ErrKeyspaceDoesNotExist = errors.New("keyspace does not exist") ErrNoMetadata = errors.New("no metadata available") )
var (
ErrFrameTooBig = errors.New("frame length is bigger than the maximum allowed")
)
var (
)var TimeoutLimit int64 = 10
If not zero, how many timeouts we will allow to occur before the connection is closed and restarted. This is to prevent a single query timeout from killing a connection which may be serving more queries just fine. Default is 10, should not be changed concurrently with queries.
var UnsetValue = unsetColumn{}
Functions ¶
func JoinHostPort ¶
JoinHostPort is a utility to return a address string that can be used gocql.Conn to form a connection with a host.
func Marshal ¶
Marshal returns the CQL encoding of the value for the Cassandra internal type described by the info parameter.
func NamedValue ¶
func NamedValue(name string, value interface{}) interface{}
NamedValue produce a value which will bind to the named parameter in a query
func NewErrProtocol ¶
func TupleColumnName ¶
TupeColumnName will return the column name of a tuple value in a column named c at index n. It should be used if a specific element within a tuple is needed to be extracted from a map returned from SliceMap or MapScan.
Types ¶
type AddressTranslator ¶
type AddressTranslator interface { // Translate will translate the provided address and/or port to another // address and/or port. If no translation is possible, Translate will return the // address and port provided to it. Translate(addr net.IP, port int) (net.IP, int) }
AddressTranslator provides a way to translate node addresses (and ports) that are discovered or received as a node event. This can be useful in an ec2 environment, for instance, to translate public IPs to private IPs.
func IdentityTranslator ¶
func IdentityTranslator() AddressTranslator
IdentityTranslator will do nothing but return what it was provided. It is essentially a no-op.
type AddressTranslatorFunc ¶
type Authenticator ¶
type Batch ¶
type Batch struct { Type BatchType Entries []BatchEntry Cons Consistency // contains filtered or unexported fields }
func (*Batch) Bind ¶
Bind adds the query to the batch operation and correlates it with a binding callback that will be invoked when the batch is executed. The binding callback allows the application to define which query argument values will be marshalled as part of the batch execution.
func (*Batch) DefaultTimestamp ¶
DefaultTimestamp will enable the with default timestamp flag on the query. If enable, this will replace the server side assigned timestamp as default timestamp. Note that a timestamp in the query itself will still override this timestamp. This is entirely optional.
Only available on protocol >= 3
func (*Batch) GetConsistency ¶
func (b *Batch) GetConsistency() Consistency
GetConsistency returns the currently configured consistency level for the batch operation.
func (*Batch) GetRoutingKey ¶
func (*Batch) Latency ¶
Latency returns the average number of nanoseconds to execute a single attempt of the batch.
func (*Batch) RetryPolicy ¶
func (b *Batch) RetryPolicy(r RetryPolicy) *Batch
RetryPolicy sets the retry policy to use when executing the batch operation
func (*Batch) SerialConsistency ¶
func (b *Batch) SerialConsistency(cons SerialConsistency) *Batch
SerialConsistency sets the consistency level for the serial phase of conditional updates. That consistency can only be either SERIAL or LOCAL_SERIAL and if not present, it defaults to SERIAL. This option will be ignored for anything else that a conditional update/insert.
Only available for protocol 3 and above
func (*Batch) Size ¶
Size returns the number of batch statements to be executed by the batch operation.
func (*Batch) WithContext ¶
WithContext will set the context to use during a query, it will be used to timeout when waiting for responses from Cassandra.
func (*Batch) WithTimestamp ¶
WithTimestamp will enable the with default timestamp flag on the query like DefaultTimestamp does. But also allows to define value for timestamp. It works the same way as USING TIMESTAMP in the query itself, but should not break prepared query optimization
Only available on protocol >= 3
type BatchEntry ¶
type BatchEntry struct { Stmt string Args []interface{} // contains filtered or unexported fields }
type ClusterConfig ¶
type ClusterConfig struct { // addresses for the initial connections. It is recommended to use the value set in // the Cassandra config for broadcast_address or listen_address, an IP address not // a domain name. This is because events from Cassandra will use the configured IP // address, which is used to index connected hosts. If the domain name specified // resolves to more than 1 IP address then the driver may connect multiple times to // the same host, and will not mark the node being down or up from events. Hosts []string CQLVersion string // CQL version (default: 3.0.0) // ProtoVersion sets the version of the native protocol to use, this will // enable features in the driver for specific protocol versions, generally this // should be set to a known version (2,3,4) for the cluster being connected to. // // If it is 0 or unset (the default) then the driver will attempt to discover the // highest supported protocol for the cluster. In clusters with nodes of different // versions the protocol selected is not defined (ie, it can be any of the supported in the cluster) ProtoVersion int Timeout time.Duration // connection timeout (default: 600ms) ConnectTimeout time.Duration // initial connection timeout, used during initial dial to server (default: 600ms) Port int // port (default: 9042) Keyspace string // initial keyspace (optional) NumConns int // number of connections per host (default: 2) Consistency Consistency // default consistency level (default: Quorum) Compressor Compressor // compression algorithm (default: nil) Authenticator Authenticator // authenticator (default: nil) RetryPolicy RetryPolicy // Default retry policy to use for queries (default: 0) SocketKeepalive time.Duration // The keepalive period to use, enabled if > 0 (default: 0) MaxPreparedStmts int // Sets the maximum cache size for prepared statements globally for gocql (default: 1000) MaxRoutingKeyInfo int // Sets the maximum cache size for query info about statements for each session (default: 1000) PageSize int // Default page size to use for created sessions (default: 5000) SerialConsistency SerialConsistency // Sets the consistency for the serial part of queries, values can be either SERIAL or LOCAL_SERIAL (default: unset) SslOpts *SslOptions DefaultTimestamp bool // Sends a client side timestamp for all requests which overrides the timestamp at which it arrives at the server. (default: true, only enabled for protocol 3 and above) // PoolConfig configures the underlying connection pool, allowing the // configuration of host selection and connection selection policies. PoolConfig PoolConfig // If not zero, gocql attempt to reconnect known DOWN nodes in every ReconnectInterval. ReconnectInterval time.Duration // The maximum amount of time to wait for schema agreement in a cluster after // receiving a schema change frame. (deault: 60s) MaxWaitSchemaAgreement time.Duration // HostFilter will filter all incoming events for host, any which don't pass // the filter will be ignored. If set will take precedence over any options set // via Discovery HostFilter HostFilter // AddressTranslator will translate addresses found on peer discovery and/or // node change events. AddressTranslator AddressTranslator // If IgnorePeerAddr is true and the address in system.peers does not match // the supplied host by either initial hosts or discovered via events then the // host will be replaced with the supplied address. // // For example if an event comes in with host=10.0.0.1 but when looking up that // address in system.local or system.peers returns 127.0.0.1, the peer will be // set to 10.0.0.1 which is what will be used to connect to. IgnorePeerAddr bool // If DisableInitialHostLookup then the driver will not attempt to get host info // from the system.peers table, this will mean that the driver will connect to // hosts supplied and will not attempt to lookup the hosts information, this will // mean that data_centre, rack and token information will not be available and as // such host filtering and token aware query routing will not be available. DisableInitialHostLookup bool // Configure events the driver will register for Events struct { // disable registering for status events (node up/down) DisableNodeStatusEvents bool // disable registering for topology events (node added/removed/moved) DisableTopologyEvents bool // disable registering for schema events (keyspace/table/function removed/created/updated) DisableSchemaEvents bool } // DisableSkipMetadata will override the internal result metadata cache so that the driver does not // send skip_metadata for queries, this means that the result will always contain // the metadata to parse the rows and will not reuse the metadata from the prepared // statement. // // See https://issues.apache.org/jira/browse/CASSANDRA-10786 DisableSkipMetadata bool // contains filtered or unexported fields }
ClusterConfig is a struct to configure the default cluster implementation of gocql. It has a variety of attributes that can be used to modify the behavior to fit the most common use cases. Applications that require a different setup must implement their own cluster.
func NewCluster ¶
func NewCluster(hosts ...string) *ClusterConfig
NewCluster generates a new config for the default cluster implementation.
The supplied hosts are used to initially connect to the cluster then the rest of the ring will be automatically discovered. It is recommended to use the value set in the Cassandra config for broadcast_address or listen_address, an IP address not a domain name. This is because events from Cassandra will use the configured IP address, which is used to index connected hosts. If the domain name specified resolves to more than 1 IP address then the driver may connect multiple times to the same host, and will not mark the node being down or up from events.
func (*ClusterConfig) CreateSession ¶
func (cfg *ClusterConfig) CreateSession() (*Session, error)
CreateSession initializes the cluster based on this config and returns a session object that can be used to interact with the database.
type CollectionType ¶
type CollectionType struct { NativeType Key TypeInfo // only used for TypeMap Elem TypeInfo // only used for TypeMap, TypeList and TypeSet }
func (CollectionType) New ¶
func (t CollectionType) New() interface{}
func (CollectionType) String ¶
func (c CollectionType) String() string
type ColumnIndexMetadata ¶
type ColumnInfo ¶
func (ColumnInfo) String ¶
func (c ColumnInfo) String() string
type ColumnKind ¶
type ColumnKind int
const ( ColumnUnkownKind ColumnKind = iota ColumnPartitionKey ColumnClusteringKey ColumnRegular ColumnCompact ColumnStatic )
func (ColumnKind) String ¶
func (c ColumnKind) String() string
func (*ColumnKind) UnmarshalCQL ¶
func (c *ColumnKind) UnmarshalCQL(typ TypeInfo, p []byte) error
type ColumnMetadata ¶
type ColumnMetadata struct { Keyspace string Table string Name string ComponentIndex int Kind ColumnKind Validator string Type TypeInfo ClusteringOrder string Order ColumnOrder Index ColumnIndexMetadata }
schema metadata for a column
type ColumnOrder ¶
type ColumnOrder bool
the ordering of the column with regard to its comparator
const ( ASC ColumnOrder = false DESC = true )
type Compressor ¶
type Conn ¶
type Conn struct {
// contains filtered or unexported fields
}
Conn is a single connection to a Cassandra node. It can be used to execute queries, but users are usually advised to use a more reliable, higher level API.
func (*Conn) AvailableStreams ¶
func (*Conn) UseKeyspace ¶
type ConnConfig ¶
type ConnConfig struct { ProtoVersion int CQLVersion string Timeout time.Duration ConnectTimeout time.Duration Compressor Compressor Authenticator Authenticator Keepalive time.Duration // contains filtered or unexported fields }
type ConnErrorHandler ¶
type Consistency ¶
type Consistency uint16
const ( Any Consistency = 0x00 One Consistency = 0x01 Two Consistency = 0x02 Three Consistency = 0x03 Quorum Consistency = 0x04 All Consistency = 0x05 LocalQuorum Consistency = 0x06 EachQuorum Consistency = 0x07 LocalOne Consistency = 0x0A )
func MustParseConsistency ¶
func MustParseConsistency(s string) (Consistency, error)
MustParseConsistency is the same as ParseConsistency except it returns an error (never). It is kept here since breaking changes are not good. DEPRECATED: use ParseConsistency if you want a panic on parse error.
func ParseConsistency ¶
func ParseConsistency(s string) Consistency
func ParseConsistencyWrapper ¶
func ParseConsistencyWrapper(s string) (consistency Consistency, err error)
ParseConsistencyWrapper wraps gocql.ParseConsistency to provide an err return instead of a panic
func (Consistency) MarshalText ¶
func (c Consistency) MarshalText() (text []byte, err error)
func (Consistency) String ¶
func (c Consistency) String() string
func (*Consistency) UnmarshalText ¶
func (c *Consistency) UnmarshalText(text []byte) error
type ErrProtocol ¶
type ErrProtocol struct {
// contains filtered or unexported fields
}
type ExecutableQuery ¶
type ExecutableQuery interface { GetRoutingKey() ([]byte, error) RetryableQuery // contains filtered or unexported methods }
type ExponentialBackoffRetryPolicy ¶
ExponentialBackoffRetryPolicy sleeps between attempts
func (*ExponentialBackoffRetryPolicy) Attempt ¶
func (e *ExponentialBackoffRetryPolicy) Attempt(q RetryableQuery) bool
type HostFilter ¶
type HostFilter interface { // Called when a new host is discovered, returning true will cause the host // to be added to the pools. Accept(host *HostInfo) bool }
HostFilter interface is used when a host is discovered via server sent events.
func DataCentreHostFilter ¶
func DataCentreHostFilter(dataCentre string) HostFilter
DataCentreHostFilter filters all hosts such that they are in the same data centre as the supplied data centre.
func DenyAllFilter ¶
func DenyAllFilter() HostFilter
func WhiteListHostFilter ¶
func WhiteListHostFilter(hosts ...string) HostFilter
WhiteListHostFilter filters incoming hosts by checking that their address is in the initial hosts whitelist.
type HostFilterFunc ¶
HostFilterFunc converts a func(host HostInfo) bool into a HostFilter
func (HostFilterFunc) Accept ¶
func (fn HostFilterFunc) Accept(host *HostInfo) bool
type HostInfo ¶
type HostInfo struct {
// contains filtered or unexported fields
}
func (*HostInfo) BroadcastAddress ¶
func (*HostInfo) ClusterName ¶
func (*HostInfo) ConnectAddress ¶
Returns the address that should be used to connect to the host. If you wish to override this, use an AddressTranslator or use a HostFilter to SetConnectAddress()
func (*HostInfo) DSEVersion ¶
func (*HostInfo) DataCenter ¶
func (*HostInfo) ListenAddress ¶
func (*HostInfo) Partitioner ¶
func (*HostInfo) PreferredIP ¶
func (*HostInfo) RPCAddress ¶
type HostSelectionPolicy ¶
type HostSelectionPolicy interface { HostStateNotifier SetPartitioner //Pick returns an iteration function over selected hosts Pick(ExecutableQuery) NextHost }
HostSelectionPolicy is an interface for selecting the most appropriate host to execute a given query.
func DCAwareRoundRobinPolicy ¶
func DCAwareRoundRobinPolicy(localDC string) HostSelectionPolicy
DCAwareRoundRobinPolicy is a host selection policies which will prioritize and return hosts which are in the local datacentre before returning hosts in all other datercentres
func HostPoolHostPolicy ¶
func HostPoolHostPolicy(hp hostpool.HostPool) HostSelectionPolicy
HostPoolHostPolicy is a host policy which uses the bitly/go-hostpool library to distribute queries between hosts and prevent sending queries to unresponsive hosts. When creating the host pool that is passed to the policy use an empty slice of hosts as the hostpool will be populated later by gocql. See below for examples of usage:
// Create host selection policy using a simple host pool cluster.PoolConfig.HostSelectionPolicy = HostPoolHostPolicy(hostpool.New(nil)) // Create host selection policy using an epsilon greedy pool cluster.PoolConfig.HostSelectionPolicy = HostPoolHostPolicy( hostpool.NewEpsilonGreedy(nil, 0, &hostpool.LinearEpsilonValueCalculator{}), )
func RoundRobinHostPolicy ¶
func RoundRobinHostPolicy() HostSelectionPolicy
RoundRobinHostPolicy is a round-robin load balancing policy, where each host is tried sequentially for each query.
func TokenAwareHostPolicy ¶
func TokenAwareHostPolicy(fallback HostSelectionPolicy) HostSelectionPolicy
TokenAwareHostPolicy is a token aware host selection policy, where hosts are selected based on the partition key, so queries are sent to the host which owns the partition. Fallback is used when routing information is not available.
type HostStateNotifier ¶
type Iter ¶
type Iter struct {
// contains filtered or unexported fields
}
Iter represents an iterator that can be used to iterate over all rows that were returned by a query. The iterator might send additional queries to the database during the iteration if paging was enabled.
func (*Iter) Close ¶
Close closes the iterator and returns any errors that happened during the query or the iteration.
func (*Iter) Columns ¶
func (iter *Iter) Columns() []ColumnInfo
Columns returns the name and type of the selected columns.
func (*Iter) GetCustomPayload ¶
GetCustomPayload returns any parsed custom payload results if given in the response from Cassandra. Note that the result is not a copy.
This additional feature of CQL Protocol v4 allows additional results and query information to be returned by custom QueryHandlers running in your C* cluster. See https://datastax.github.io/java-driver/manual/custom_payloads/
func (*Iter) MapScan ¶
MapScan takes a map[string]interface{} and populates it with a row that is returned from cassandra.
Each call to MapScan() must be called with a new map object. During the call to MapScan() any pointers in the existing map are replaced with non pointer types before the call returns
iter := session.Query(`SELECT * FROM mytable`).Iter() for { // New map each iteration row = make(map[string]interface{}) if !iter.MapScan(row) { break } // Do things with row if fullname, ok := row["fullname"]; ok { fmt.Printf("Full Name: %s\n", fullname) } }
You can also pass pointers in the map before each call
var fullName FullName // Implements gocql.Unmarshaler and gocql.Marshaler interfaces var address net.IP var age int iter := session.Query(`SELECT * FROM scan_map_table`).Iter() for { // New map each iteration row := map[string]interface{}{ "fullname": &fullName, "age": &age, "address": &address, } if !iter.MapScan(row) { break } fmt.Printf("First: %s Age: %d Address: %q\n", fullName.FirstName, age, address) }
func (*Iter) NumRows ¶
NumRows returns the number of rows in this pagination, it will update when new pages are fetched, it is not the value of the total number of rows this iter will return unless there is only a single page returned.
func (*Iter) PageState ¶
PageState return the current paging state for a query which can be used for subsequent quries to resume paging this point.
func (*Iter) Scan ¶
Scan consumes the next row of the iterator and copies the columns of the current row into the values pointed at by dest. Use nil as a dest value to skip the corresponding column. Scan might send additional queries to the database to retrieve the next set of rows if paging was enabled.
Scan returns true if the row was successfully unmarshaled or false if the end of the result set was reached or if an error occurred. Close should be called afterwards to retrieve any potential errors.
func (*Iter) Scanner ¶
Scanner returns a row Scanner which provides an interface to scan rows in a manner which is similar to database/sql. The iter should NOT be used again after calling this method.
func (*Iter) SliceMap ¶
SliceMap is a helper function to make the API easier to use returns the data from the query in the form of []map[string]interface{}
func (*Iter) Warnings ¶
Warnings returns any warnings generated if given in the response from Cassandra.
This is only available starting with CQL Protocol v4.
func (*Iter) WillSwitchPage ¶
WillSwitchPage detects if iterator reached end of current page and the next page is available.
type KeyspaceMetadata ¶
type KeyspaceMetadata struct { Name string DurableWrites bool StrategyClass string StrategyOptions map[string]interface{} Tables map[string]*TableMetadata }
schema metadata for a keyspace
type MarshalError ¶
type MarshalError string
func (MarshalError) Error ¶
func (m MarshalError) Error() string
type Marshaler ¶
Marshaler is the interface implemented by objects that can marshal themselves into values understood by Cassandra.
type NativeType ¶
type NativeType struct {
// contains filtered or unexported fields
}
func NewNativeType ¶
func NewNativeType(proto byte, typ Type, custom string) NativeType
func (NativeType) Custom ¶
func (s NativeType) Custom() string
func (NativeType) New ¶
func (t NativeType) New() interface{}
func (NativeType) String ¶
func (s NativeType) String() string
func (NativeType) Type ¶
func (s NativeType) Type() Type
func (NativeType) Version ¶
func (s NativeType) Version() byte
type NextHost ¶
type NextHost func() SelectedHost
NextHost is an iteration function over picked hosts
type PasswordAuthenticator ¶
func (PasswordAuthenticator) Challenge ¶
func (p PasswordAuthenticator) Challenge(req []byte) ([]byte, Authenticator, error)
func (PasswordAuthenticator) Success ¶
func (p PasswordAuthenticator) Success(data []byte) error
type PoolConfig ¶
type PoolConfig struct { // HostSelectionPolicy sets the policy for selecting which host to use for a // given query (default: RoundRobinHostPolicy()) HostSelectionPolicy HostSelectionPolicy }
PoolConfig configures the connection pool used by the driver, it defaults to using a round-robin host selection policy and a round-robin connection selection policy for each host.
type Query ¶
type Query struct {
// contains filtered or unexported fields
}
Query represents a CQL statement that can be executed.
func (*Query) Bind ¶
Bind sets query arguments of query. This can also be used to rebind new query arguments to an existing query instance.
func (*Query) Consistency ¶
func (q *Query) Consistency(c Consistency) *Query
Consistency sets the consistency level for this query. If no consistency level have been set, the default consistency level of the cluster is used.
func (*Query) DefaultTimestamp ¶
DefaultTimestamp will enable the with default timestamp flag on the query. If enable, this will replace the server side assigned timestamp as default timestamp. Note that a timestamp in the query itself will still override this timestamp. This is entirely optional.
Only available on protocol >= 3
func (*Query) GetConsistency ¶
func (q *Query) GetConsistency() Consistency
GetConsistency returns the currently configured consistency level for the query.
func (*Query) GetRoutingKey ¶
GetRoutingKey gets the routing key to use for routing this query. If a routing key has not been explicitly set, then the routing key will be constructed if possible using the keyspace's schema and the query info for this query statement. If the routing key cannot be determined then nil will be returned with no error. On any error condition, an error description will be returned.
func (*Query) Iter ¶
Iter executes the query and returns an iterator capable of iterating over all results.
func (*Query) MapScan ¶
MapScan executes the query, copies the columns of the first selected row into the map pointed at by m and discards the rest. If no rows were selected, ErrNotFound is returned.
func (*Query) MapScanCAS ¶
MapScanCAS executes a lightweight transaction (i.e. an UPDATE or INSERT statement containing an IF clause). If the transaction fails because the existing values did not match, the previous values will be stored in dest map.
As for INSERT .. IF NOT EXISTS, previous values will be returned as if SELECT * FROM. So using ScanCAS with INSERT is inherently prone to column mismatching. MapScanCAS is added to capture them safely.
func (*Query) NoSkipMetadata ¶
NoSkipMetadata will override the internal result metadata cache so that the driver does not send skip_metadata for queries, this means that the result will always contain the metadata to parse the rows and will not reuse the metadata from the prepared staement. This should only be used to work around cassandra bugs, such as when using CAS operations which do not end in Cas.
See https://issues.apache.org/jira/browse/CASSANDRA-11099 https://github.com/gocql/gocql/issues/612
func (*Query) PageSize ¶
PageSize will tell the iterator to fetch the result in pages of size n. This is useful for iterating over large result sets, but setting the page size too low might decrease the performance. This feature is only available in Cassandra 2 and onwards.
func (*Query) PageState ¶
PageState sets the paging state for the query to resume paging from a specific point in time. Setting this will disable to query paging for this query, and must be used for all subsequent pages.
func (*Query) Prefetch ¶
SetPrefetch sets the default threshold for pre-fetching new pages. If there are only p*pageSize rows remaining, the next page will be requested automatically.
func (*Query) Release ¶
func (q *Query) Release()
Release releases a query back into a pool of queries. Released Queries cannot be reused.
Example:
qry := session.Query("SELECT * FROM my_table") qry.Exec() qry.Release()
func (*Query) RetryPolicy ¶
func (q *Query) RetryPolicy(r RetryPolicy) *Query
RetryPolicy sets the policy to use when retrying the query.
func (*Query) RoutingKey ¶
RoutingKey sets the routing key to use when a token aware connection pool is used to optimize the routing of this query.
func (*Query) Scan ¶
Scan executes the query, copies the columns of the first selected row into the values pointed at by dest and discards the rest. If no rows were selected, ErrNotFound is returned.
func (*Query) ScanCAS ¶
ScanCAS executes a lightweight transaction (i.e. an UPDATE or INSERT statement containing an IF clause). If the transaction fails because the existing values did not match, the previous values will be stored in dest.
func (*Query) SerialConsistency ¶
func (q *Query) SerialConsistency(cons SerialConsistency) *Query
SerialConsistency sets the consistency level for the serial phase of conditional updates. That consistency can only be either SERIAL or LOCAL_SERIAL and if not present, it defaults to SERIAL. This option will be ignored for anything else that a conditional update/insert.
func (*Query) Trace ¶
Trace enables tracing of this query. Look at the documentation of the Tracer interface to learn more about tracing.
func (*Query) WithContext ¶
WithContext will set the context to use during a query, it will be used to timeout when waiting for responses from Cassandra.
func (*Query) WithTimestamp ¶
WithTimestamp will enable the with default timestamp flag on the query like DefaultTimestamp does. But also allows to define value for timestamp. It works the same way as USING TIMESTAMP in the query itself, but should not break prepared query optimization
Only available on protocol >= 3
type QueryInfo ¶
type QueryInfo struct { Id []byte Args []ColumnInfo Rval []ColumnInfo PKeyColumns []int }
type RequestErrAlreadyExists ¶
type RequestErrFunctionFailure ¶
type RequestErrReadFailure ¶
type RequestErrReadFailure struct { Consistency Consistency Received int BlockFor int NumFailures int DataPresent bool // contains filtered or unexported fields }
type RequestErrReadTimeout ¶
type RequestErrReadTimeout struct { Consistency Consistency Received int BlockFor int DataPresent byte // contains filtered or unexported fields }
type RequestErrUnavailable ¶
type RequestErrUnavailable struct { // contains filtered or unexported fields }
func (*RequestErrUnavailable) String ¶
func (e *RequestErrUnavailable) String() string
type RequestErrUnprepared ¶
type RequestErrUnprepared struct { StatementId []byte // contains filtered or unexported fields }
type RequestErrWriteFailure ¶
type RequestErrWriteFailure struct { Consistency Consistency Received int BlockFor int NumFailures int WriteType string // contains filtered or unexported fields }
type RequestErrWriteTimeout ¶
type RequestErrWriteTimeout struct { Consistency Consistency Received int BlockFor int WriteType string // contains filtered or unexported fields }
type RequestError ¶
type RetryPolicy ¶
type RetryPolicy interface {
Attempt(RetryableQuery) bool
}
RetryPolicy interface is used by gocql to determine if a query can be attempted again after a retryable error has been received. The interface allows gocql users to implement their own logic to determine if a query can be attempted again.
See SimpleRetryPolicy as an example of implementing and using a RetryPolicy interface.
type RetryableQuery ¶
type RetryableQuery interface { Attempts() int GetConsistency() Consistency }
RetryableQuery is an interface that represents a query or batch statement that exposes the correct functions for the retry policy logic to evaluate correctly.
type RoundRobin ¶
type RoundRobin struct {
// contains filtered or unexported fields
}
func NewRoundRobin ¶
func NewRoundRobin() *RoundRobin
func (*RoundRobin) AddNode ¶
func (r *RoundRobin) AddNode(node Node)
func (*RoundRobin) Close ¶
func (r *RoundRobin) Close()
func (*RoundRobin) Pick ¶
func (r *RoundRobin) Pick(qry *Query) *Conn
func (*RoundRobin) RemoveNode ¶
func (r *RoundRobin) RemoveNode(node Node)
func (*RoundRobin) Size ¶
func (r *RoundRobin) Size() int
type Scanner ¶
type Scanner interface { // Next advances the row pointer to point at the next row, the row is valid until // the next call of Next. It returns true if there is a row which is available to be // scanned into with Scan. // Next must be called before every call to Scan. Next() bool // Scan copies the current row's columns into dest. If the length of dest does not equal // the number of columns returned in the row an error is returned. If an error is encountered // when unmarshalling a column into the value in dest an error is returned and the row is invalidated // until the next call to Next. // Next must be called before calling Scan, if it is not an error is returned. Scan(...interface{}) error // Err returns the if there was one during iteration that resulted in iteration being unable to complete. // Err will also release resources held by the iterator, the Scanner should not used after being called. Err() error }
type SelectedHost ¶
SelectedHost is an interface returned when picking a host from a host selection policy.
type SerialConsistency ¶
type SerialConsistency uint16
const ( Serial SerialConsistency = 0x08 LocalSerial SerialConsistency = 0x09 )
func (SerialConsistency) MarshalText ¶
func (s SerialConsistency) MarshalText() (text []byte, err error)
func (SerialConsistency) String ¶
func (s SerialConsistency) String() string
func (*SerialConsistency) UnmarshalText ¶
func (s *SerialConsistency) UnmarshalText(text []byte) error
type Session ¶
type Session struct {
// contains filtered or unexported fields
}
Session is the interface used by users to interact with the database.
It's safe for concurrent use by multiple goroutines and a typical usage scenario is to have one global session object to interact with the whole Cassandra cluster.
This type extends the Node interface by adding a convinient query builder and automatically sets a default consistency level on all operations that do not have a consistency level set.
func NewSession ¶
func NewSession(cfg ClusterConfig) (*Session, error)
NewSession wraps an existing Node.
func (*Session) Bind ¶
Bind generates a new query object based on the query statement passed in. The query is automatically prepared if it has not previously been executed. The binding callback allows the application to define which query argument values will be marshalled as part of the query execution. During execution, the meta data of the prepared query will be routed to the binding callback, which is responsible for producing the query argument values.
func (*Session) Close ¶
func (s *Session) Close()
Close closes all connections. The session is unusable after this operation.
func (*Session) ExecuteBatch ¶
ExecuteBatch executes a batch operation and returns nil if successful otherwise an error is returned describing the failure.
func (*Session) ExecuteBatchCAS ¶
func (s *Session) ExecuteBatchCAS(batch *Batch, dest ...interface{}) (applied bool, iter *Iter, err error)
ExecuteBatchCAS executes a batch operation and returns true if successful and an iterator (to scan aditional rows if more than one conditional statement) was sent. Further scans on the interator must also remember to include the applied boolean as the first argument to *Iter.Scan
func (*Session) KeyspaceMetadata ¶
func (s *Session) KeyspaceMetadata(keyspace string) (*KeyspaceMetadata, error)
KeyspaceMetadata returns the schema metadata for the keyspace specified. Returns an error if the keyspace does not exist.
func (*Session) MapExecuteBatchCAS ¶
func (s *Session) MapExecuteBatchCAS(batch *Batch, dest map[string]interface{}) (applied bool, iter *Iter, err error)
MapExecuteBatchCAS executes a batch operation much like ExecuteBatchCAS, however it accepts a map rather than a list of arguments for the initial scan.
func (*Session) NewBatch ¶
NewBatch creates a new batch operation using defaults defined in the cluster
func (*Session) Query ¶
Query generates a new query object for interacting with the database. Further details of the query may be tweaked using the resulting query value before the query is executed. Query is automatically prepared if it has not previously been executed.
func (*Session) SetConsistency ¶
func (s *Session) SetConsistency(cons Consistency)
SetConsistency sets the default consistency level for this session. This setting can also be changed on a per-query basis and the default value is Quorum.
func (*Session) SetPageSize ¶
SetPageSize sets the default page size for this session. A value <= 0 will disable paging. This setting can also be changed on a per-query basis.
func (*Session) SetPrefetch ¶
SetPrefetch sets the default threshold for pre-fetching new pages. If there are only p*pageSize rows remaining, the next page will be requested automatically. This value can also be changed on a per-query basis and the default value is 0.25.
type SetHosts ¶
type SetHosts interface {
SetHosts(hosts []*HostInfo)
}
interface to implement to receive the host information
type SetPartitioner ¶
type SetPartitioner interface {
SetPartitioner(partitioner string)
}
interface to implement to receive the partitioner value
type SimpleRetryPolicy ¶
type SimpleRetryPolicy struct {
NumRetries int //Number of times to retry a query
}
SimpleRetryPolicy has simple logic for attempting a query a fixed number of times.
See below for examples of usage:
//Assign to the cluster cluster.RetryPolicy = &gocql.SimpleRetryPolicy{NumRetries: 3} //Assign to a query query.RetryPolicy(&gocql.SimpleRetryPolicy{NumRetries: 1})
func (*SimpleRetryPolicy) Attempt ¶
func (s *SimpleRetryPolicy) Attempt(q RetryableQuery) bool
Attempt tells gocql to attempt the query again based on query.Attempts being less than the NumRetries defined in the policy.
type SnappyCompressor ¶
type SnappyCompressor struct{}
SnappyCompressor implements the Compressor interface and can be used to compress incoming and outgoing frames. The snappy compression algorithm aims for very high speeds and reasonable compression.
func (SnappyCompressor) Name ¶
func (s SnappyCompressor) Name() string
type SslOptions ¶
type SslOptions struct { *tls.Config // CertPath and KeyPath are optional depending on server // config, but both fields must be omitted to avoid using a // client certificate CertPath string KeyPath string CaPath string //optional depending on server config // If you want to verify the hostname and server cert (like a wildcard for cass cluster) then you should turn this on // This option is basically the inverse of InSecureSkipVerify // See InSecureSkipVerify in http://golang.org/pkg/crypto/tls/ for more info EnableHostVerification bool }
type StdLogger ¶
type StdLogger interface { Print(v ...interface{}) Printf(format string, v ...interface{}) Println(v ...interface{}) }
var Logger StdLogger = &defaultLogger{}
type TableMetadata ¶
type TableMetadata struct { Keyspace string Name string KeyValidator string Comparator string DefaultValidator string KeyAliases []string ColumnAliases []string ValueAlias string PartitionKey []*ColumnMetadata ClusteringColumns []*ColumnMetadata Columns map[string]*ColumnMetadata OrderedColumns []string }
schema metadata for a table (a.k.a. column family)
type Tracer ¶
type Tracer interface {
Trace(traceId []byte)
}
Tracer is the interface implemented by query tracers. Tracers have the ability to obtain a detailed event log of all events that happened during the execution of a query from Cassandra. Gathering this information might be essential for debugging and optimizing queries, but this feature should not be used on production systems with very high load.
type TupleTypeInfo ¶
type TupleTypeInfo struct { NativeType Elems []TypeInfo }
func (TupleTypeInfo) New ¶
func (t TupleTypeInfo) New() interface{}
type Type ¶
type Type int
String returns a human readable name for the Cassandra datatype described by t. Type is the identifier of a Cassandra internal datatype.
const ( TypeCustom Type = 0x0000 TypeAscii Type = 0x0001 TypeBigInt Type = 0x0002 TypeBlob Type = 0x0003 TypeBoolean Type = 0x0004 TypeCounter Type = 0x0005 TypeDecimal Type = 0x0006 TypeDouble Type = 0x0007 TypeFloat Type = 0x0008 TypeInt Type = 0x0009 TypeText Type = 0x000A TypeTimestamp Type = 0x000B TypeUUID Type = 0x000C TypeVarchar Type = 0x000D TypeVarint Type = 0x000E TypeTimeUUID Type = 0x000F TypeInet Type = 0x0010 TypeDate Type = 0x0011 TypeTime Type = 0x0012 TypeSmallInt Type = 0x0013 TypeTinyInt Type = 0x0014 TypeList Type = 0x0020 TypeMap Type = 0x0021 TypeSet Type = 0x0022 TypeUDT Type = 0x0030 TypeTuple Type = 0x0031 )
type TypeInfo ¶
type TypeInfo interface { Type() Type Version() byte Custom() string // New creates a pointer to an empty version of whatever type // is referenced by the TypeInfo receiver New() interface{} }
TypeInfo describes a Cassandra specific data type.
type UDTMarshaler ¶
type UDTMarshaler interface { // MarshalUDT will be called for each field in the the UDT returned by Cassandra, // the implementor should marshal the type to return by for example calling // Marshal. MarshalUDT(name string, info TypeInfo) ([]byte, error) }
UDTMarshaler is an interface which should be implemented by users wishing to handle encoding UDT types to sent to Cassandra. Note: due to current implentations methods defined for this interface must be value receivers not pointer receivers.
type UDTTypeInfo ¶
type UDTTypeInfo struct { NativeType KeySpace string Name string Elements []UDTField }
func (UDTTypeInfo) New ¶
func (u UDTTypeInfo) New() interface{}
func (UDTTypeInfo) String ¶
func (u UDTTypeInfo) String() string
type UDTUnmarshaler ¶
type UDTUnmarshaler interface { // UnmarshalUDT will be called for each field in the UDT return by Cassandra, // the implementor should unmarshal the data into the value of their chosing, // for example by calling Unmarshal. UnmarshalUDT(name string, info TypeInfo, data []byte) error }
UDTUnmarshaler should be implemented by users wanting to implement custom UDT unmarshaling.
type UUID ¶
type UUID [16]byte
func ParseUUID ¶
ParseUUID parses a 32 digit hexadecimal number (that might contain hypens) representing an UUID.
func RandomUUID ¶
RandomUUID generates a totally random UUID (version 4) as described in RFC 4122.
func TimeUUID ¶
func TimeUUID() UUID
TimeUUID generates a new time based UUID (version 1) using the current time as the timestamp.
func UUIDFromBytes ¶
UUIDFromBytes converts a raw byte slice to an UUID.
func UUIDFromTime ¶
UUIDFromTime generates a new time based UUID (version 1) as described in RFC 4122. This UUID contains the MAC address of the node that generated the UUID, the given timestamp and a sequence number.
func (UUID) Bytes ¶
Bytes returns the raw byte slice for this UUID. A UUID is always 128 bits (16 bytes) long.
func (UUID) MarshalText ¶
func (UUID) Node ¶
Node extracts the MAC address of the node who generated this UUID. It will return nil if the UUID is not a time based UUID (version 1).
func (UUID) String ¶
String returns the UUID in it's canonical form, a 32 digit hexadecimal number in the form of xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx.
func (UUID) Timestamp ¶
Timestamp extracts the timestamp information from a time based UUID (version 1).
func (*UUID) UnmarshalText ¶
type UnmarshalError ¶
type UnmarshalError string
func (UnmarshalError) Error ¶
func (m UnmarshalError) Error() string
type Unmarshaler ¶
Unmarshaler is the interface implemented by objects that can unmarshal a Cassandra specific description of themselves.