This is an automated email from the ASF dual-hosted git repository.

joaoreis pushed a commit to branch trunk
in repository https://gitbox.apache.org/repos/asf/cassandra-gocql-driver.git


The following commit(s) were added to refs/heads/trunk by this push:
     new b25d2811 Update API documentation for 2.0 release
b25d2811 is described below

commit b25d2811e7c4233bd429458f7f055f2979598b30
Author: João Reis <[email protected]>
AuthorDate: Tue Jul 22 17:18:08 2025 +0100

    Update API documentation for 2.0 release
    
    This patch updates the existing API documentation and adds new 
documentation for types and methods that lack it.
    
    Patch by João Reis; reviewed by Bohdan Siryk for CASSGO-78
---
 CHANGELOG.md            |   1 +
 address_translators.go  |   1 +
 cluster.go              |  12 ++++-
 compressor.go           |   3 ++
 conn.go                 |   3 ++
 cqltypes.go             |   1 +
 errors.go               |  24 +++++++++
 frame.go                |   3 ++
 gocqlzap/zap.go         |   3 ++
 gocqlzerolog/zerolog.go |   5 ++
 helpers.go              |  69 +++++++++++++++++++++---
 logger.go               |   9 +++-
 marshal.go              |  89 +++++-------------------------
 metadata.go             |  29 ++++++++--
 policies.go             |  13 +++++
 session.go              | 140 +++++++++++++++++++++++++++++++++++++++++++++++-
 types.go                |   4 ++
 uuid.go                 |   3 ++
 vector.go               |   4 ++
 version.go              |   4 ++
 20 files changed, 328 insertions(+), 92 deletions(-)

diff --git a/CHANGELOG.md b/CHANGELOG.md
index ec7d0861..a8c38812 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -35,6 +35,7 @@ and this project adheres to [Semantic 
Versioning](https://semver.org/spec/v2.0.0
 - Add way to create HostInfo objects for testing purposes (CASSGO-71)
 - Add missing Context methods on Query and Batch (CASSGO-81)
 - Update example and test code for 2.0 release (CASSGO-80)
+- Add API docs for 2.0 release (CASSGO-78)
 
 ### Changed
 
diff --git a/address_translators.go b/address_translators.go
index 8c0f7780..6246c661 100644
--- a/address_translators.go
+++ b/address_translators.go
@@ -36,6 +36,7 @@ type AddressTranslator interface {
        Translate(addr net.IP, port int) (net.IP, int)
 }
 
+// AddressTranslatorFunc is a function type that implements AddressTranslator.
 type AddressTranslatorFunc func(addr net.IP, port int) (net.IP, int)
 
 func (fn AddressTranslatorFunc) Translate(addr net.IP, port int) (net.IP, int) 
{
diff --git a/cluster.go b/cluster.go
index 812e459f..aec8be64 100644
--- a/cluster.go
+++ b/cluster.go
@@ -288,6 +288,11 @@ type ClusterConfig struct {
        disableControlConn bool
 }
 
+// Dialer is the interface that wraps the DialContext method for establishing 
network connections to Cassandra nodes.
+//
+// This interface allows customization of how gocql establishes TCP 
connections, which is useful for:
+// connecting through proxies or load balancers, custom TLS configurations, 
custom timeouts/keep-alive
+// settings, service mesh integration, testing with mocked connections, and 
corporate network routing.
 type Dialer interface {
        DialContext(ctx context.Context, network, addr string) (net.Conn, error)
 }
@@ -357,7 +362,10 @@ func (cfg *ClusterConfig) filterHost(host *HostInfo) bool {
 }
 
 var (
-       ErrNoHosts              = errors.New("no hosts provided")
+       // ErrNoHosts is returned when no hosts are provided to the cluster 
configuration.
+       ErrNoHosts = errors.New("no hosts provided")
+       // ErrNoConnectionsStarted is returned when no connections could be 
established during session creation.
        ErrNoConnectionsStarted = errors.New("no connections were made when 
creating the session")
-       ErrHostQueryFailed      = errors.New("unable to populate Hosts")
+       // Deprecated: Never used or returned by the driver.
+       ErrHostQueryFailed = errors.New("unable to populate Hosts")
 )
diff --git a/compressor.go b/compressor.go
index a4c305b7..ccb743a6 100644
--- a/compressor.go
+++ b/compressor.go
@@ -24,6 +24,9 @@
 
 package gocql
 
+// Compressor defines the interface for frame compression and decompression.
+// Implementations provide compression algorithms like Snappy and LZ4 that can 
be used
+// to reduce network traffic between the driver and Cassandra nodes.
 type Compressor interface {
        Name() string
 
diff --git a/conn.go b/conn.go
index bf5a493d..ddf13081 100644
--- a/conn.go
+++ b/conn.go
@@ -68,6 +68,7 @@ func JoinHostPort(addr string, port int) string {
        return addr
 }
 
+// Authenticator handles authentication challenges and responses during 
connection setup.
 type Authenticator interface {
        Challenge(req []byte) (resp []byte, auth Authenticator, err error)
        Success(data []byte) error
@@ -132,6 +133,7 @@ type SslOptions struct {
        EnableHostVerification bool
 }
 
+// ConnConfig contains configuration options for establishing connections to 
Cassandra nodes.
 type ConnConfig struct {
        ProtoVersion   int
        CQLVersion     string
@@ -150,6 +152,7 @@ type ConnConfig struct {
        disableCoalesce bool
 }
 
+// ConnErrorHandler handles connection errors and state changes for 
connections.
 type ConnErrorHandler interface {
        HandleError(conn *Conn, err error, closed bool)
 }
diff --git a/cqltypes.go b/cqltypes.go
index ce2e1cee..813a3296 100644
--- a/cqltypes.go
+++ b/cqltypes.go
@@ -24,6 +24,7 @@
 
 package gocql
 
+// Duration represents a Cassandra duration type, which consists of months, 
days, and nanoseconds components.
 type Duration struct {
        Months      int32
        Days        int32
diff --git a/errors.go b/errors.go
index d64c4620..2d1c2205 100644
--- a/errors.go
+++ b/errors.go
@@ -111,6 +111,7 @@ const (
        ErrCodeUnprepared = 0x2500
 )
 
+// RequestError represents errors returned by Cassandra server.
 type RequestError interface {
        Code() int
        Message() string
@@ -140,6 +141,8 @@ func (e errorFrame) String() string {
        return fmt.Sprintf("[error code=%x message=%q]", e.code, e.message)
 }
 
+// RequestErrUnavailable represents an unavailable error returned by Cassandra.
+// This error occurs when there are not enough nodes available to fulfill the 
request.
 type RequestErrUnavailable struct {
        errorFrame
        Consistency Consistency
@@ -151,8 +154,14 @@ func (e *RequestErrUnavailable) String() string {
        return fmt.Sprintf("[request_error_unavailable consistency=%s 
required=%d alive=%d]", e.Consistency, e.Required, e.Alive)
 }
 
+// ErrorMap maps node IP addresses to their respective error codes for 
read/write failure responses.
+// Each entry represents a node that failed during the operation, with the key 
being the node's
+// IP address as a string and the value being the specific error code returned 
by that node.
 type ErrorMap map[string]uint16
 
+// RequestErrWriteTimeout represents a write timeout error returned by 
Cassandra.
+// This error occurs when a write request times out after the coordinator
+// has successfully written to some replicas but not enough to satisfy the 
required consistency level.
 type RequestErrWriteTimeout struct {
        errorFrame
        Consistency Consistency
@@ -161,6 +170,8 @@ type RequestErrWriteTimeout struct {
        WriteType   string
 }
 
+// RequestErrWriteFailure represents a write failure error returned by 
Cassandra.
+// This error occurs when a write request fails on one or more replicas.
 type RequestErrWriteFailure struct {
        errorFrame
        Consistency Consistency
@@ -171,10 +182,15 @@ type RequestErrWriteFailure struct {
        ErrorMap    ErrorMap
 }
 
+// RequestErrCDCWriteFailure represents a CDC write failure error returned by 
Cassandra.
+// This error occurs when a write to the Change Data Capture log fails.
 type RequestErrCDCWriteFailure struct {
        errorFrame
 }
 
+// RequestErrReadTimeout represents a read timeout error returned by Cassandra.
+// This error occurs when a read request times out after the coordinator
+// has received some responses but not enough to satisfy the required 
consistency level.
 type RequestErrReadTimeout struct {
        errorFrame
        Consistency Consistency
@@ -183,17 +199,23 @@ type RequestErrReadTimeout struct {
        DataPresent byte
 }
 
+// RequestErrAlreadyExists represents an "already exists" error returned by 
Cassandra.
+// This error occurs when attempting to create a keyspace or table that 
already exists.
 type RequestErrAlreadyExists struct {
        errorFrame
        Keyspace string
        Table    string
 }
 
+// RequestErrUnprepared represents an "unprepared" error returned by Cassandra.
+// This error occurs when a prepared statement is no longer available on the 
server.
 type RequestErrUnprepared struct {
        errorFrame
        StatementId []byte
 }
 
+// RequestErrReadFailure represents a read failure error returned by Cassandra.
+// This error occurs when a read request fails on one or more replicas.
 type RequestErrReadFailure struct {
        errorFrame
        Consistency Consistency
@@ -204,6 +226,8 @@ type RequestErrReadFailure struct {
        ErrorMap    ErrorMap
 }
 
+// RequestErrFunctionFailure represents a function failure error returned by 
Cassandra.
+// This error occurs when a user-defined function fails during execution.
 type RequestErrFunctionFailure struct {
        errorFrame
        Keyspace string
diff --git a/frame.go b/frame.go
index 7e551c23..0ee6a2e1 100644
--- a/frame.go
+++ b/frame.go
@@ -196,6 +196,9 @@ const (
        flagBetaProtocol  byte = 0x10
 )
 
+// Consistency represents the consistency level for read and write operations.
+// Available levels: Any, One, Two, Three, Quorum, All, LocalQuorum, 
EachQuorum,
+// Serial, LocalSerial, LocalOne.
 type Consistency uint16
 
 // SerialConsistency is deprecated. Use Consistency instead.
diff --git a/gocqlzap/zap.go b/gocqlzap/zap.go
index 14251057..6413cff9 100644
--- a/gocqlzap/zap.go
+++ b/gocqlzap/zap.go
@@ -24,8 +24,11 @@ import (
        gocql "github.com/apache/cassandra-gocql-driver/v2"
 )
 
+// DefaultName is the default logger name used when creating a new zap logger.
 const DefaultName = "gocql"
 
+// Logger represents a structured logger that integrates zap logging with 
gocql.
+// It extends gocql.StructuredLogger with access to the underlying zap logger.
 type Logger interface {
        gocql.StructuredLogger
        ZapLogger() *zap.Logger
diff --git a/gocqlzerolog/zerolog.go b/gocqlzerolog/zerolog.go
index e9435855..7a257a0e 100644
--- a/gocqlzerolog/zerolog.go
+++ b/gocqlzerolog/zerolog.go
@@ -24,9 +24,14 @@ import (
        gocql "github.com/apache/cassandra-gocql-driver/v2"
 )
 
+// DefaultName is the default logger name used when creating a new zerolog 
logger.
 const DefaultName = "gocql"
+
+// DefaultNameField is the default field name used to identify the logger in 
log entries.
 const DefaultNameField = "logger"
 
+// Logger represents a structured logger that integrates zerolog logging with 
gocql.
+// It extends gocql.StructuredLogger with access to the underlying zerolog 
logger.
 type Logger interface {
        gocql.StructuredLogger
        ZerologLogger() zerolog.Logger
diff --git a/helpers.go b/helpers.go
index baae5ce0..9cd14cfe 100644
--- a/helpers.go
+++ b/helpers.go
@@ -42,7 +42,7 @@ func dereference(i interface{}) interface{} {
        return reflect.Indirect(reflect.ValueOf(i)).Interface()
 }
 
-// TupeColumnName will return the column name of a tuple value in a column 
named
+// TupleColumnName 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.
 func TupleColumnName(c string, n int) string {
@@ -81,8 +81,60 @@ func (iter *Iter) RowData() (RowData, error) {
        return rowData, nil
 }
 
-// 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{}
+// SliceMap is a helper function to make the API easier to use.
+// It returns the data from the query in the form of []map[string]interface{}.
+//
+// Columns are automatically converted to Go types based on their CQL type.
+// The following table shows exactly what Go type to expect when accessing map 
values:
+//
+//     CQL Type             | Go Type (Non-NULL)   | Go Value for NULL    | 
Type Assertion Example
+//     ascii                | string               | ""                   | 
row["col"].(string)
+//     bigint               | int64                | int64(0)             | 
row["col"].(int64)
+//     blob                 | []byte               | []byte(nil)          | 
row["col"].([]byte)
+//     boolean              | bool                 | false                | 
row["col"].(bool)
+//     counter              | int64                | int64(0)             | 
row["col"].(int64)
+//     date                 | time.Time            | time.Time{}          | 
row["col"].(time.Time)
+//     decimal              | *inf.Dec             | (*inf.Dec)(nil)      | 
row["col"].(*inf.Dec)
+//     double               | float64              | float64(0)           | 
row["col"].(float64)
+//     duration             | gocql.Duration       | gocql.Duration{}     | 
row["col"].(gocql.Duration)
+//     float                | float32              | float32(0)           | 
row["col"].(float32)
+//     inet                 | net.IP               | net.IP(nil)          | 
row["col"].(net.IP)
+//     int                  | int                  | int(0)               | 
row["col"].(int)
+//     list<T>              | []T                  | []T(nil)             | 
row["col"].([]string)
+//     map<K,V>             | map[K]V              | map[K]V(nil)         | 
row["col"].(map[string]int)
+//     set<T>               | []T                  | []T(nil)             | 
row["col"].([]int)
+//     smallint             | int16                | int16(0)             | 
row["col"].(int16)
+//     text                 | string               | ""                   | 
row["col"].(string)
+//     time                 | time.Duration        | time.Duration(0)     | 
row["col"].(time.Duration)
+//     timestamp            | time.Time            | time.Time{}          | 
row["col"].(time.Time)
+//     timeuuid             | gocql.UUID           | gocql.UUID{}         | 
row["col"].(gocql.UUID)
+//     tinyint              | int8                 | int8(0)              | 
row["col"].(int8)
+//     tuple<T1,T2,...>     | (see below)          | (see below)          | 
(see below)
+//     uuid                 | gocql.UUID           | gocql.UUID{}         | 
row["col"].(gocql.UUID)
+//     varchar              | string               | ""                   | 
row["col"].(string)
+//     varint               | *big.Int             | (*big.Int)(nil)      | 
row["col"].(*big.Int)
+//     vector<T,N>          | []T                  | []T(nil)             | 
row["col"].([]float32)
+//
+// Special Cases:
+//
+// Tuple Types: Tuple elements are split into separate map entries with keys 
like "column[0]", "column[1]", etc.
+// Use TupleColumnName to generate the correct key:
+//
+//     // For tuple<int, text> column named "my_tuple"
+//     elem0 := row[gocql.TupleColumnName("my_tuple", 0)].(int)
+//     elem1 := row[gocql.TupleColumnName("my_tuple", 1)].(string)
+//
+// User-Defined Types (UDTs): Returned as map[string]interface{} with field 
names as keys:
+//
+//     udt := row["my_udt"].(map[string]interface{})
+//     name := udt["name"].(string)
+//     age := udt["age"].(int)
+//
+// Important Notes:
+//   - Always use type assertions when accessing map values: 
row["col"].(ExpectedType)
+//   - NULL database values return Go zero values or nil for pointer types
+//   - Collection types (list, set, map, vector) return nil slices/maps for 
NULL values
+//   - Migration from v1.x: inet columns now return net.IP instead of string 
values
 func (iter *Iter) SliceMap() ([]map[string]interface{}, error) {
        if iter.err != nil {
                return nil, iter.err
@@ -104,11 +156,16 @@ func (iter *Iter) SliceMap() ([]map[string]interface{}, 
error) {
 }
 
 // MapScan takes a map[string]interface{} and populates it with a row
-// that is returned from cassandra.
+// 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
+// are replaced with non pointer types before the call returns.
+//
+// Columns are automatically converted to Go types based on their CQL type.
+// See SliceMap for the complete CQL to Go type mapping table and examples.
+//
+// Usage Examples:
 //
 //     iter := session.Query(`SELECT * FROM mytable`).Iter()
 //     for {
@@ -123,7 +180,7 @@ func (iter *Iter) SliceMap() ([]map[string]interface{}, 
error) {
 //             }
 //     }
 //
-// You can also pass pointers in the map before each call
+// 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
diff --git a/logger.go b/logger.go
index e01bf684..df865c84 100644
--- a/logger.go
+++ b/logger.go
@@ -183,6 +183,9 @@ func writeLogMsg(buf *bytes.Buffer, prefix string, msg 
string, fields []LogField
        writeFields(buf, fields)
 }
 
+// LogLevel represents the level of logging to be performed.
+// Higher values indicate more verbose logging.
+// Available levels: LogLevelDebug, LogLevelInfo, LogLevelWarn, LogLevelError, 
LogLevelNone.
 type LogLevel int
 
 const (
@@ -212,6 +215,8 @@ func (recv LogLevel) String() string {
        }
 }
 
+// LogField represents a structured log field with a name and value.
+// It is used to provide structured logging information.
 type LogField struct {
        Name  string
        Value LogFieldValue
@@ -277,7 +282,9 @@ type LogFieldValue struct {
        any interface{}
 }
 
-// LogFieldValueType is the type of a LogFieldValue.
+// LogFieldValueType represents the type of a LogFieldValue.
+// It is used to determine how to interpret the value stored in LogFieldValue.
+// Available types: LogFieldTypeAny, LogFieldTypeBool, LogFieldTypeInt64, 
LogFieldTypeString.
 type LogFieldValueType int
 
 // It's important that LogFieldTypeAny is 0 so that a zero Value represents 
nil.
diff --git a/marshal.go b/marshal.go
index 5562d9fd..9252c8c0 100644
--- a/marshal.go
+++ b/marshal.go
@@ -47,6 +47,7 @@ var (
 )
 
 var (
+       // Deprecated: Never used or returned by the driver.
        ErrorUDTUnavailable = errors.New("UDT are not available on protocols 
less than 3, please update config")
 )
 
@@ -69,49 +70,7 @@ type Unmarshaler interface {
 // If value implements Marshaler, its MarshalCQL method is called to marshal 
the data.
 // If value is a pointer, the pointed-to value is marshaled.
 //
-// Supported conversions are as follows, other type combinations may be added 
in the future:
-//
-//     CQL type                    | Go type (value)    | Note
-//     varchar, ascii, blob, text  | string, []byte     |
-//     boolean                     | bool               |
-//     tinyint, smallint, int      | integer types      |
-//     tinyint, smallint, int      | string             | formatted as base 10 
number
-//     bigint, counter             | integer types      |
-//     bigint, counter             | big.Int            | according to 
cassandra bigint specification the big.Int value limited to int64 size(an 
eight-byte two's complement integer.)
-//     bigint, counter             | string             | formatted as base 10 
number
-//     float                       | float32            |
-//     double                      | float64            |
-//     decimal                     | inf.Dec            |
-//     time                        | int64              | nanoseconds since 
start of day
-//     time                        | time.Duration      | duration since start 
of day
-//     timestamp                   | int64              | milliseconds since 
Unix epoch
-//     timestamp                   | time.Time          |
-//     list, set                   | slice, array       |
-//     list, set                   | map[X]struct{}     |
-//     map                         | map[X]Y            |
-//     uuid, timeuuid              | gocql.UUID         |
-//     uuid, timeuuid              | [16]byte           | raw UUID bytes
-//     uuid, timeuuid              | []byte             | raw UUID bytes, 
length must be 16 bytes
-//     uuid, timeuuid              | string             | hex representation, 
see ParseUUID
-//     varint                      | integer types      |
-//     varint                      | big.Int            |
-//     varint                      | string             | value of number in 
decimal notation
-//     inet                        | net.IP             |
-//     inet                        | string             | IPv4 or IPv6 address 
string
-//     tuple                       | slice, array       |
-//     tuple                       | struct             | fields are marshaled 
in order of declaration
-//     user-defined type           | gocql.UDTMarshaler | MarshalUDT is called
-//     user-defined type           | map[string]interface{} |
-//     user-defined type           | struct             | struct fields' cql 
tags are used for column names
-//     date                        | int64              | milliseconds since 
Unix epoch to start of day (in UTC)
-//     date                        | time.Time          | start of day (in UTC)
-//     date                        | string             | parsed using 
"2006-01-02" format
-//     duration                    | int64              | duration in 
nanoseconds
-//     duration                    | time.Duration      |
-//     duration                    | gocql.Duration     |
-//     duration                    | string             | parsed with 
time.ParseDuration
-//
-// The marshal/unmarshal error provides a list of supported types when an 
unsupported type is attempted.
+// For supported Go to CQL type conversions, see Session.Query documentation.
 func Marshal(info TypeInfo, value interface{}) ([]byte, error) {
        if valueRef := reflect.ValueOf(value); valueRef.Kind() == reflect.Ptr {
                if valueRef.IsNil() {
@@ -139,38 +98,7 @@ func Marshal(info TypeInfo, value interface{}) ([]byte, 
error) {
 // If value is a pointer to pointer, it is set to nil if the CQL value is
 // null. Otherwise, nulls are unmarshalled as zero value.
 //
-// Supported conversions are as follows, other type combinations may be added 
in the future:
-//
-//     CQL type                                | Go type (value)         | Note
-//     varchar, ascii, blob, text              | *string                 |
-//     varchar, ascii, blob, text              | *[]byte                 | 
non-nil buffer is reused
-//     bool                                    | *bool                   |
-//     tinyint, smallint, int, bigint, counter | *integer types          |
-//     tinyint, smallint, int, bigint, counter | *big.Int                |
-//     tinyint, smallint, int, bigint, counter | *string                 | 
formatted as base 10 number
-//     float                                   | *float32                |
-//     double                                  | *float64                |
-//     decimal                                 | *inf.Dec                |
-//     time                                    | *int64                  | 
nanoseconds since start of day
-//     time                                    | *time.Duration          |
-//     timestamp                               | *int64                  | 
milliseconds since Unix epoch
-//     timestamp                               | *time.Time              |
-//     list, set                               | *slice, *array          |
-//     map                                     | *map[X]Y                |
-//     uuid, timeuuid                          | *string                 | see 
UUID.String
-//     uuid, timeuuid                          | *[]byte                 | raw 
UUID bytes
-//     uuid, timeuuid                          | *gocql.UUID             |
-//     timeuuid                                | *time.Time              | 
timestamp of the UUID
-//     inet                                    | *net.IP                 |
-//     inet                                    | *string                 | 
IPv4 or IPv6 address string
-//     tuple                                   | *slice, *array          |
-//     tuple                                   | *struct                 | 
struct fields are set in order of declaration
-//     user-defined types                      | gocql.UDTUnmarshaler    | 
UnmarshalUDT is called
-//     user-defined types                      | *map[string]interface{} |
-//     user-defined types                      | *struct                 | cql 
tag is used to determine field name
-//     date                                    | *time.Time              | 
time of beginning of the day (in UTC)
-//     date                                    | *string                 | 
formatted with 2006-01-02 format
-//     duration                                | *gocql.Duration         |
+// For supported CQL to Go type conversions, see Iter.Scan documentation.
 func Unmarshal(info TypeInfo, data []byte, value interface{}) error {
        if v, ok := value.(Unmarshaler); ok {
                return v.UnmarshalCQL(info, data)
@@ -1866,6 +1794,8 @@ func (t listSetCQLType) TypeInfoFromString(proto int, 
name string) (TypeInfo, er
        }, nil
 }
 
+// CollectionType represents type information for Cassandra collection types 
(list, set, map).
+// It provides marshaling and unmarshaling for collection types.
 type CollectionType struct {
        typ  Type
        Key  TypeInfo // only used for TypeMap
@@ -2542,7 +2472,8 @@ func (t tupleCQLType) TypeInfoFromString(proto int, name 
string) (TypeInfo, erro
        }, nil
 }
 
-// TODO: move to types.go
+// TupleTypeInfo represents type information for Cassandra tuple types.
+// It contains information about the element types in the tuple.
 type TupleTypeInfo struct {
        Elems []TypeInfo
 }
@@ -2882,11 +2813,15 @@ func (u udtCQLType) TypeInfoFromString(proto int, name 
string) (TypeInfo, error)
        return ti, nil
 }
 
+// UDTField represents a field in a User Defined Type.
+// It contains the field name and its type information.
 type UDTField struct {
        Name string
        Type TypeInfo
 }
 
+// UDTTypeInfo represents type information for Cassandra User Defined Types 
(UDT).
+// It contains the keyspace, type name, and field definitions.
 type UDTTypeInfo struct {
        Keyspace string
        Name     string
@@ -3102,6 +3037,7 @@ func (udt UDTTypeInfo) Unmarshal(data []byte, value 
interface{}) error {
        return nil
 }
 
+// MarshalError represents an error that occurred during marshaling.
 type MarshalError string
 
 func (m MarshalError) Error() string {
@@ -3112,6 +3048,7 @@ func marshalErrorf(format string, args ...interface{}) 
MarshalError {
        return MarshalError(fmt.Sprintf(format, args...))
 }
 
+// UnmarshalError represents an error that occurred during unmarshaling.
 type UnmarshalError string
 
 func (m UnmarshalError) Error() string {
diff --git a/metadata.go b/metadata.go
index a8996f0d..a1e98eda 100644
--- a/metadata.go
+++ b/metadata.go
@@ -135,14 +135,28 @@ type MaterializedViewMetadata struct {
        baseTableName string
 }
 
+// UserTypeMetadata represents metadata information about a Cassandra User 
Defined Type (UDT).
+// This Go struct holds descriptive information about a UDT that exists in the 
Cassandra schema,
+// including the type name, keyspace, field names, and field types. It is not 
the UDT itself,
+// but rather a representation of the UDT's schema structure for use within 
the gocql driver.
+//
+// A Cassandra User Defined Type is a custom data type that allows you to 
group related fields
+// together. This metadata struct provides the necessary information to 
marshal and unmarshal
+// values to and from the corresponding UDT in Cassandra.
+//
+// For type information used in marshaling/unmarshaling operations, see 
UDTTypeInfo.
+// Actual UDT values are typically represented as map[string]interface{}, Go 
structs with
+// cql tags, or types implementing UDTMarshaler/UDTUnmarshaler interfaces.
 type UserTypeMetadata struct {
-       Keyspace   string
-       Name       string
-       FieldNames []string
-       FieldTypes []TypeInfo
+       Keyspace   string     // The keyspace where the UDT is defined
+       Name       string     // The name of the User Defined Type
+       FieldNames []string   // Ordered list of field names in the UDT
+       FieldTypes []TypeInfo // Corresponding type information for each field
 }
 
-// the ordering of the column with regard to its comparator
+// ColumnOrder represents the ordering of a column with regard to its 
comparator.
+// It indicates whether the column is sorted in ascending or descending order.
+// Available values: ASC, DESC.
 type ColumnOrder bool
 
 const (
@@ -150,12 +164,17 @@ const (
        DESC ColumnOrder = true
 )
 
+// ColumnIndexMetadata represents metadata for a column index in Cassandra.
+// It contains the index name, type, and configuration options.
 type ColumnIndexMetadata struct {
        Name    string
        Type    string
        Options map[string]interface{}
 }
 
+// ColumnKind represents the kind of column in a Cassandra table.
+// It indicates whether the column is part of the partition key, clustering 
key, or a regular column.
+// Available values: ColumnUnkownKind, ColumnPartitionKey, 
ColumnClusteringKey, ColumnRegular, ColumnCompact, ColumnStatic.
 type ColumnKind int
 
 const (
diff --git a/policies.go b/policies.go
index 8db55bf2..8f968087 100644
--- a/policies.go
+++ b/policies.go
@@ -122,6 +122,8 @@ type RetryableQuery interface {
        Context() context.Context
 }
 
+// RetryType represents the type of retry that should be performed by the 
retry policy.
+// Available types: Retry, RetryNextHost, Ignore, Rethrow.
 type RetryType uint16
 
 const (
@@ -265,6 +267,9 @@ func (e *ExponentialBackoffRetryPolicy) napTime(attempts 
int) time.Duration {
        return getExponentialTime(e.Min, e.Max, attempts)
 }
 
+// HostStateNotifier is an interface for notifying about host state changes.
+// It allows host selection policies to be informed when hosts are added, 
removed,
+// or change their availability status.
 type HostStateNotifier interface {
        AddHost(host *HostInfo)
        RemoveHost(host *HostInfo)
@@ -272,6 +277,8 @@ type HostStateNotifier interface {
        HostDown(host *HostInfo)
 }
 
+// KeyspaceUpdateEvent represents a keyspace change event.
+// It contains information about which keyspace changed and what type of 
change occurred.
 type KeyspaceUpdateEvent struct {
        Keyspace string
        Change   string
@@ -947,16 +954,22 @@ func (e *ExponentialReconnectionPolicy) GetMaxRetries() 
int {
        return e.MaxRetries
 }
 
+// SpeculativeExecutionPolicy defines the interface for speculative execution 
policies.
+// These policies determine when and how many speculative queries to execute.
 type SpeculativeExecutionPolicy interface {
        Attempts() int
        Delay() time.Duration
 }
 
+// NonSpeculativeExecution is a policy that disables speculative execution.
+// It implements SpeculativeExecutionPolicy with zero attempts.
 type NonSpeculativeExecution struct{}
 
 func (sp NonSpeculativeExecution) Attempts() int        { return 0 } // No 
additional attempts
 func (sp NonSpeculativeExecution) Delay() time.Duration { return 1 } // The 
delay. Must be positive to be used in a ticker.
 
+// SimpleSpeculativeExecution is a policy that enables speculative execution
+// with a fixed number of attempts and delay.
 type SimpleSpeculativeExecution struct {
        NumAttempts  int
        TimeoutDelay time.Duration
diff --git a/session.go b/session.go
index 625dac4a..722161f1 100644
--- a/session.go
+++ b/session.go
@@ -427,6 +427,48 @@ func (s *Session) reconnectDownedHosts(intv time.Duration) 
{
 // 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.
+//
+// Supported Go to CQL type conversions for query parameters are as follows:
+//
+//     Go type (value)             | CQL type                    | Note
+//     string, []byte              | varchar, ascii, blob, text  |
+//     bool                        | boolean                     |
+//     integer types               | tinyint, smallint, int      |
+//     string                      | tinyint, smallint, int      | formatted 
as base 10 number
+//     integer types               | bigint, counter             |
+//     big.Int                     | bigint, counter             | according 
to cassandra bigint specification the big.Int value limited to int64 size(an 
eight-byte two's complement integer.)
+//     string                      | bigint, counter             | formatted 
as base 10 number
+//     float32                     | float                       |
+//     float64                     | double                      |
+//     inf.Dec                     | decimal                     |
+//     int64                       | time                        | nanoseconds 
since start of day
+//     time.Duration               | time                        | duration 
since start of day
+//     int64                       | timestamp                   | 
milliseconds since Unix epoch
+//     time.Time                   | timestamp                   |
+//     slice, array                | list, set                   |
+//     map[X]struct{}              | list, set                   |
+//     map[X]Y                     | map                         |
+//     gocql.UUID                  | uuid, timeuuid              |
+//     [16]byte                    | uuid, timeuuid              | raw UUID 
bytes
+//     []byte                      | uuid, timeuuid              | raw UUID 
bytes, length must be 16 bytes
+//     string                      | uuid, timeuuid              | hex 
representation, see ParseUUID
+//     integer types               | varint                      |
+//     big.Int                     | varint                      |
+//     string                      | varint                      | value of 
number in decimal notation
+//     net.IP                      | inet                        |
+//     string                      | inet                        | IPv4 or 
IPv6 address string
+//     slice, array                | tuple                       |
+//     struct                      | tuple                       | fields are 
marshaled in order of declaration
+//     gocql.UDTMarshaler          | user-defined type           | MarshalUDT 
is called
+//     map[string]interface{}      | user-defined type           |
+//     struct                      | user-defined type           | struct 
fields' cql tags are used for column names
+//     int64                       | date                        | 
milliseconds since Unix epoch to start of day (in UTC)
+//     time.Time                   | date                        | start of 
day (in UTC)
+//     string                      | date                        | parsed 
using "2006-01-02" format
+//     int64                       | duration                    | duration in 
nanoseconds
+//     time.Duration               | duration                    |
+//     gocql.Duration              | duration                    |
+//     string                      | duration                    | parsed with 
time.ParseDuration
 func (s *Session) Query(stmt string, values ...interface{}) *Query {
        qry := &Query{}
        qry.session = s
@@ -437,6 +479,8 @@ func (s *Session) Query(stmt string, values ...interface{}) 
*Query {
        return qry
 }
 
+// QueryInfo represents metadata information about a prepared query.
+// It contains the query ID, argument information, result information, and 
primary key columns.
 type QueryInfo struct {
        Id          []byte
        Args        []ColumnInfo
@@ -450,6 +494,8 @@ type QueryInfo struct {
 // 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.
+//
+// For supported Go to CQL type conversions for query parameters, see 
Session.Query documentation.
 func (s *Session) Bind(stmt string, b func(q *QueryInfo) ([]interface{}, 
error)) *Query {
        qry := &Query{}
        qry.session = s
@@ -1206,6 +1252,8 @@ func (q *Query) Idempotent(value bool) *Query {
 
 // Bind sets query arguments of query. This can also be used to rebind new 
query arguments
 // to an existing query instance.
+//
+// For supported Go to CQL type conversions for query parameters, see 
Session.Query documentation.
 func (q *Query) Bind(v ...interface{}) *Query {
        q.values = v
        return q
@@ -1291,6 +1339,9 @@ func (q *Query) iterInternal(c *Conn, ctx 
context.Context) *Iter {
 // 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.
+//
+// Columns are automatically converted to Go types based on their CQL type.
+// See Iter.SliceMap for the complete CQL to Go type mapping table and 
examples.
 func (q *Query) MapScan(m map[string]interface{}) error {
        return q.MapScanContext(q.context, m)
 }
@@ -1310,6 +1361,8 @@ func (q *Query) MapScanContext(ctx context.Context, m 
map[string]interface{}) er
 // 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.
+//
+// For supported CQL to Go type conversions, see Iter.Scan documentation.
 func (q *Query) Scan(dest ...interface{}) error {
        return q.ScanContext(q.context, dest...)
 }
@@ -1317,6 +1370,8 @@ func (q *Query) Scan(dest ...interface{}) error {
 // ScanContext executes the query with the provided context, 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.
+//
+// For supported CQL to Go type conversions, see Iter.Scan documentation.
 func (q *Query) ScanContext(ctx context.Context, dest ...interface{}) error {
        iter := q.IterContext(ctx)
        if err := iter.checkErrAndNotFound(); err != nil {
@@ -1334,6 +1389,8 @@ func (q *Query) ScanContext(ctx context.Context, dest 
...interface{}) error {
 // 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. Use MapScanCAS to capture them safely.
+//
+// For supported CQL to Go type conversions, see Iter.Scan documentation.
 func (q *Query) ScanCAS(dest ...interface{}) (applied bool, err error) {
        return q.ScanCASContext(q.context, dest...)
 }
@@ -1346,6 +1403,8 @@ func (q *Query) ScanCAS(dest ...interface{}) (applied 
bool, err error) {
 // 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. Use MapScanCAS to capture them safely.
+//
+// For supported CQL to Go type conversions, see Iter.Scan documentation.
 func (q *Query) ScanCASContext(ctx context.Context, dest ...interface{}) 
(applied bool, err error) {
        q.disableSkipMetadata = true
        iter := q.IterContext(ctx)
@@ -1521,6 +1580,8 @@ type Scanner interface {
        // 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.
+       //
+       // For supported CQL to Go type conversions, see Iter.Scan 
documentation.
        Scan(...interface{}) error
 
        // Err returns the if there was one during iteration that resulted in 
iteration being unable to complete.
@@ -1645,6 +1706,68 @@ func (iter *Iter) readColumn() ([]byte, error) {
 // 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.
+//
+// Supported CQL to Go type conversions are as follows, other type 
combinations may be added in the future:
+//
+//     CQL Type                     | Go Type (dest)              | Note
+//     ascii, text, varchar         | *string                     |
+//     ascii, text, varchar         | *[]byte                     | non-nil 
buffer is reused
+//     bigint, counter              | *int64                      |
+//     bigint, counter              | *int, *int32, *int16, *int8 | with range 
checking
+//     bigint, counter              | *uint64, *uint32, *uint16   | with range 
checking
+//     bigint, counter              | *big.Int                    |
+//     bigint, counter              | *string                     | formatted 
as base 10 number
+//     blob                         | *[]byte                     | non-nil 
buffer is reused
+//     boolean                      | *bool                       |
+//     date                         | *time.Time                  | start of 
day in UTC
+//     date                         | *string                     | formatted 
as "2006-01-02"
+//     decimal                      | *inf.Dec                    |
+//     double                       | *float64                    |
+//     duration                     | *gocql.Duration             |
+//     duration                     | *time.Duration              | with range 
checking
+//     float                        | *float32                    |
+//     inet                         | *net.IP                     |
+//     inet                         | *string                     | IPv4 or 
IPv6 address string
+//     int                          | *int                        |
+//     int                          | *int32, *int16, *int8       | with range 
checking
+//     int                          | *uint32, *uint16, *uint8    | with range 
checking
+//     list<T>, set<T>              | *[]T                        |
+//     list<T>, set<T>              | *[N]T                       | array with 
compatible size
+//     map<K,V>                     | *map[K]V                    |
+//     smallint                     | *int16                      |
+//     smallint                     | *int, *int32, *int8         | with range 
checking
+//     smallint                     | *uint16, *uint8             | with range 
checking
+//     time                         | *time.Duration              | 
nanoseconds since start of day
+//     time                         | *int64                      | 
nanoseconds since start of day
+//     timestamp                    | *time.Time                  |
+//     timestamp                    | *int64                      | 
milliseconds since Unix epoch
+//     timeuuid                     | *gocql.UUID                 |
+//     timeuuid                     | *time.Time                  | timestamp 
of the UUID
+//     timeuuid                     | *string                     | hex 
representation
+//     timeuuid                     | *[]byte                     | 16-byte 
raw UUID
+//     tinyint                      | *int8                       |
+//     tinyint                      | *int, *int32, *int16        | with range 
checking
+//     tinyint                      | *uint8                      | with range 
checking
+//     tuple<T1,T2,...>             | *[]interface{}              |
+//     tuple<T1,T2,...>             | *[N]interface{}             | array with 
compatible size
+//     tuple<T1,T2,...>             | *struct                     | fields 
unmarshaled in declaration order
+//     user-defined types           | gocql.UDTUnmarshaler        | 
UnmarshalUDT is called
+//     user-defined types           | *map[string]interface{}     |
+//     user-defined types           | *struct                     | cql tag or 
field name matching
+//     uuid                         | *gocql.UUID                 |
+//     uuid                         | *string                     | hex 
representation
+//     uuid                         | *[]byte                     | 16-byte 
raw UUID
+//     varint                       | *big.Int                    |
+//     varint                       | *int64, *int32, *int16, *int8 | with 
range checking
+//     varint                       | *string                     | formatted 
as base 10 number
+//     vector<T,N>                  | *[]T                        |
+//     vector<T,N>                  | *[N]T                       | array with 
exact size match
+//
+// Important Notes:
+//   - NULL values are unmarshaled as zero values of the destination type
+//   - Use **Type (pointer to pointer) to distinguish NULL from zero values
+//   - Range checking prevents overflow when converting between numeric types
+//   - For SliceMap/MapScan type mappings, see Iter.SliceMap documentation
 func (iter *Iter) Scan(dest ...interface{}) bool {
        if iter.err != nil {
                return false
@@ -1894,7 +2017,9 @@ func (b *Batch) SpeculativeExecutionPolicy(sp 
SpeculativeExecutionPolicy) *Batch
        return b
 }
 
-// Query adds the query to the batch operation
+// Query adds the query to the batch operation.
+//
+// For supported Go to CQL type conversions for query parameters, see 
Session.Query documentation.
 func (b *Batch) Query(stmt string, args ...interface{}) *Batch {
        b.Entries = append(b.Entries, BatchEntry{Stmt: stmt, Args: args})
        return b
@@ -1903,6 +2028,8 @@ func (b *Batch) Query(stmt string, args ...interface{}) 
*Batch {
 // 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.
+//
+// For supported Go to CQL type conversions for query parameters, see 
Session.Query documentation.
 func (b *Batch) Bind(stmt string, bind func(q *QueryInfo) ([]interface{}, 
error)) {
        b.Entries = append(b.Entries, BatchEntry{Stmt: stmt, binding: bind})
 }
@@ -2025,6 +2152,8 @@ func (b *Batch) WithNowInSeconds(now int) *Batch {
        return b
 }
 
+// BatchType represents the type of batch.
+// Available types: LoggedBatch, UnloggedBatch, CounterBatch.
 type BatchType byte
 
 const (
@@ -2033,6 +2162,8 @@ const (
        CounterBatch  BatchType = 2
 )
 
+// BatchEntry represents a single statement within a batch operation.
+// It contains the statement, arguments, and execution metadata.
 type BatchEntry struct {
        Stmt       string
        Args       []interface{}
@@ -2040,6 +2171,8 @@ type BatchEntry struct {
        binding    func(q *QueryInfo) ([]interface{}, error)
 }
 
+// ColumnInfo represents metadata about a column in a query result.
+// It contains the keyspace, table, column name, and type information.
 type ColumnInfo struct {
        Keyspace string
        Table    string
@@ -2263,6 +2396,7 @@ type ConnectObserver interface {
        ObserveConnect(ObservedConnect)
 }
 
+// Deprecated: Unused
 type Error struct {
        Code    int
        Message string
@@ -2285,12 +2419,14 @@ var (
        ErrNoMetadata           = errors.New("no metadata available")
 )
 
+// ErrProtocol represents a protocol-level error.
 type ErrProtocol struct{ error }
 
+// NewErrProtocol creates a new protocol error with the specified format and 
arguments.
 func NewErrProtocol(format string, args ...interface{}) error {
        return ErrProtocol{fmt.Errorf(format, args...)}
 }
 
 // BatchSizeMaximum is the maximum number of statements a batch operation can 
have.
-// This limit is set by cassandra and could change in the future.
+// This limit is set by Cassandra and could change in the future.
 const BatchSizeMaximum = 65535
diff --git a/types.go b/types.go
index ce8fee0d..a3289a51 100644
--- a/types.go
+++ b/types.go
@@ -622,6 +622,10 @@ var GlobalTypes = func() *RegisteredTypes {
 }()
 
 // Type is the identifier of a Cassandra internal datatype.
+// Available types include: TypeCustom, TypeAscii, TypeBigInt, TypeBlob, 
TypeBoolean, TypeCounter,
+// TypeDecimal, TypeDouble, TypeFloat, TypeInt, TypeText, TypeTimestamp, 
TypeUUID, TypeVarchar,
+// TypeVarint, TypeTimeUUID, TypeInet, TypeDate, TypeTime, TypeSmallInt, 
TypeTinyInt, TypeDuration,
+// TypeList, TypeMap, TypeSet, TypeUDT, TypeTuple.
 type Type int
 
 const (
diff --git a/uuid.go b/uuid.go
index cc5f1c21..018bc6f8 100644
--- a/uuid.go
+++ b/uuid.go
@@ -40,6 +40,9 @@ import (
        "time"
 )
 
+// UUID represents a 16-byte Universally Unique Identifier as defined by RFC 
4122.
+// It provides methods for generating, parsing, and manipulating UUIDs, with 
support
+// for both random (version 4) and time-based (version 1) UUIDs.
 type UUID [16]byte
 
 var hardwareAddr []byte
diff --git a/vector.go b/vector.go
index 72a11c2c..4a468b44 100644
--- a/vector.go
+++ b/vector.go
@@ -60,6 +60,10 @@ func (v vectorCQLType) TypeInfoFromString(proto int, name 
string) (TypeInfo, err
        }, nil
 }
 
+// VectorType represents a Cassandra vector type, which stores an array of 
values
+// with a fixed dimension. It's commonly used for machine learning 
applications and
+// similarity searches. The SubType defines the element type and Dimensions 
specifies
+// the fixed size of the vector.
 type VectorType struct {
        SubType    TypeInfo
        Dimensions int
diff --git a/version.go b/version.go
index 73484e70..412e5f41 100644
--- a/version.go
+++ b/version.go
@@ -36,8 +36,12 @@ const (
        mainPackage = "github.com/apache/cassandra-gocql-driver/v2"
 )
 
+// driverName contains the name of the gocql driver.
+// It is automatically populated during package initialization from build 
information.
 var driverName string
 
+// driverVersion contains the version of the gocql driver.
+// It is automatically populated during package initialization from build 
information.
 var driverVersion string
 
 func init() {


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to