Skip to content
Draft
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
33 changes: 33 additions & 0 deletions scylla.go
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,7 @@ const (
lwtAddMetadataMarkKey = "SCYLLA_LWT_ADD_METADATA_MARK"
rateLimitError = "SCYLLA_RATE_LIMIT_ERROR"
tabletsRoutingV1 = "TABLETS_ROUTING_V1"
scyllaUseMetadataId = "SCYLLA_USE_METADATA_ID"
)

// "tabletsRoutingV1" CQL Protocol Extension.
Expand Down Expand Up @@ -186,6 +187,33 @@ func (ext *lwtAddMetadataMarkExt) name() string {
return lwtAddMetadataMarkKey
}

// "SCYLLA_USE_METADATA_ID" CQL Protocol Extension.
// Enables storing and updating metadata IDs for prepared statements, similar to CQL v5.
// When negotiated, the driver tracks metadata changes and updates cached metadata accordingly.
type scyllaUseMetadataIdExt struct {
}

var _ cqlProtocolExtension = &scyllaUseMetadataIdExt{}

func newScyllaUseMetadataIdExt(supported map[string][]string) *scyllaUseMetadataIdExt {
if _, found := supported[scyllaUseMetadataId]; found {
return &scyllaUseMetadataIdExt{}
}
return nil
}

// name implements cqlProtocolExtension.
func (ext *scyllaUseMetadataIdExt) name() string {
return scyllaUseMetadataId
}

// serialize implements cqlProtocolExtension.
func (ext *scyllaUseMetadataIdExt) serialize() map[string]string {
return map[string]string{
scyllaUseMetadataId: "",
}
}

func parseSupported(supported map[string][]string, logger StdLogger) scyllaSupported {
const (
scyllaShard = "SCYLLA_SHARD"
Expand Down Expand Up @@ -278,6 +306,11 @@ func parseCQLProtocolExtensions(supported map[string][]string, logger StdLogger)
exts = append(exts, tabletsExt)
}

scyllaUseMetadataId := newScyllaUseMetadataIdExt(supported)
if scyllaUseMetadataId != nil {
exts = append(exts, scyllaUseMetadataId)
}

return exts
}

Expand Down