53
53
import com .datastax .oss .driver .api .core .metadata .schema .ColumnMetadata ;
54
54
import com .datastax .oss .driver .api .core .metadata .schema .KeyspaceMetadata ;
55
55
import com .datastax .oss .driver .api .core .metadata .schema .TableMetadata ;
56
+ import com .datastax .oss .driver .api .core .type .CqlVectorType ;
57
+ import com .datastax .oss .driver .api .core .type .DataType ;
56
58
import com .datastax .oss .driver .api .core .type .DataTypes ;
59
+ import com .datastax .oss .driver .api .core .type .codec .TypeCodec ;
60
+ import com .datastax .oss .driver .api .core .type .reflect .GenericType ;
57
61
import com .datastax .oss .driver .internal .core .auth .PlainTextAuthProvider ;
58
62
import com .datastax .oss .driver .internal .core .config .typesafe .DefaultDriverConfigLoader ;
59
63
import com .datastax .oss .driver .internal .core .config .typesafe .DefaultProgrammaticDriverConfigLoaderBuilder ;
64
+ import com .datastax .oss .driver .internal .core .type .codec .CqlVectorCodec ;
65
+ import com .datastax .oss .driver .internal .core .type .codec .registry .DefaultCodecRegistry ;
60
66
import com .datastax .oss .driver .shaded .guava .common .annotations .VisibleForTesting ;
61
67
import com .datastax .oss .driver .shaded .guava .common .collect .ImmutableMap ;
62
68
import com .datastax .oss .dsbulk .codecs .api .ConvertingCodecFactory ;
63
69
import com .typesafe .config .Config ;
64
70
import com .typesafe .config .ConfigFactory ;
65
71
import edu .umd .cs .findbugs .annotations .NonNull ;
72
+ import edu .umd .cs .findbugs .annotations .Nullable ;
66
73
import java .net .InetSocketAddress ;
67
74
import java .nio .file .Path ;
68
75
import java .util .Collection ;
@@ -89,6 +96,21 @@ public class LifeCycleManager {
89
96
private static final ConcurrentMap <String , InstanceState > INSTANCE_STATES =
90
97
new ConcurrentHashMap <>();
91
98
private static MetricRegistry metricRegistry = new MetricRegistry ();
99
+ private static final DefaultCodecRegistry CODEC_REGISTRY =
100
+ new DefaultCodecRegistry ("default-registry" ) {
101
+
102
+ protected TypeCodec <?> createCodec (
103
+ @ Nullable DataType cqlType ,
104
+ @ Nullable GenericType <?> javaType ,
105
+ boolean isJavaCovariant ) {
106
+ if (cqlType instanceof CqlVectorType ) {
107
+ log .info ("Automatically Registering codec for CqlVectorType {}" , cqlType );
108
+ CqlVectorType vectorType = (CqlVectorType ) cqlType ;
109
+ return new CqlVectorCodec <>(vectorType , codecFor (vectorType .getSubtype ()));
110
+ }
111
+ return super .createCodec (cqlType , javaType , isJavaCovariant );
112
+ }
113
+ };
92
114
93
115
/** This is a utility class that no one should instantiate. */
94
116
private LifeCycleManager () {}
@@ -420,7 +442,8 @@ private static InstanceState buildInstanceState(CqlSession session, CassandraSin
420
442
.stream ()
421
443
.map (
422
444
topicConfig -> {
423
- ConvertingCodecFactory codecFactory = topicConfig .createCodecFactory ();
445
+ ConvertingCodecFactory codecFactory =
446
+ topicConfig .createCodecFactory (CODEC_REGISTRY );
424
447
TopicState topicState = new TopicState (codecFactory );
425
448
topicStates .put (topicConfig .getTopicName (), topicState );
426
449
@@ -485,6 +508,7 @@ public static CqlSession buildCqlSession(
485
508
SslConfig sslConfig = config .getSslConfig ();
486
509
CqlSessionBuilder builder =
487
510
new SessionBuilder (sslConfig )
511
+ .withCodecRegistry (CODEC_REGISTRY )
488
512
.withApplicationVersion (version )
489
513
.withApplicationName (applicationName )
490
514
.withClientId (generateClientId (config .getInstanceName ()));
0 commit comments