https://github/adejanovski/cassandra-jdbc-wrapper很棒,但是有点过时了。例如,它具有Java 1.6的目标,它使用密钥库的3.0.0版本(datastax),其中最终版本为3.8.0(当前版本为4.4),等等。它可以连接到Cassandra 3.x但缺少一些最新功能。
我们已经能够派生该项目,并将datastax库更新为3.8.0,但我一直坚持添加'duration'数据类型。有一张表(似乎)将有线协议的protocolId
数据类型映射到实现它的包装器类。我已经搜索了datastax代码(支持该数据类型)和cassandra代码,并且由于所有内容都使用了枚举(yay!)而不是更加不透明的protocolId而被完全迷住了,但是我没有能够找到在Cassadra服务器侧进行关联的位置。
所以有两个问题。首先,该项目已经有一个分支添加了对“持续时间”类型的支持吗? (我希望可以对项目及其分支进行代码搜索。)
第二,协议标识是什么/在哪里定义?
至此,我几乎准备好添加一些工具,以便“未知编解码器”消息添加更多详细信息。可以,但是可能很脆弱。
有关JDBC与CQL的注意事项:我们的当前代码是几年前由重用我们广泛的JDBC基础结构的人编写的。它“足够好”,但是需要维护的JDBC驱动程序。现在很明显,我们应该重构代码以使用CQL,但这将花费一些时间来编写和测试,并且客户需要解决方案now。我们找到了一种商业解决方案,但是它与我们的系统不兼容,因为我们是从mongo商店而不是文件系统中加载jar。 (不要问。)分叉这个驾驶员给了我们一些喘息的空间。
如果有帮助,这是com.github.adejanovski.cassandra.jdbc
中的表:
public enum DataTypeEnum {
ASCII (1, String.class, DataType.Name.ASCII),
BIGINT (2, Long.class, DataType.Name.BIGINT),
BLOB (3, ByteBuffer.class, DataType.Name.BLOB),
BOOLEAN (4, Boolean.class, DataType.Name.BOOLEAN),
COUNTER (5, Long.class, DataType.Name.COUNTER),
DECIMAL (6, BigDecimal.class, DataType.Name.DECIMAL),
DOUBLE (7, Double.class, DataType.Name.DOUBLE),
FLOAT (8, Float.class, DataType.Name.FLOAT),
INET (16, InetAddress.class, DataType.Name.INET),
INT (9, Integer.class, DataType.Name.INT),
TEXT (10, String.class, DataType.Name.TEXT),
TIMESTAMP (11, Date.class, DataType.Name.TIMESTAMP),
UUID (12, UUID.class, DataType.Name.UUID),
VARCHAR (13, String.class, DataType.Name.VARCHAR),
VARINT (14, BigInteger.class, DataType.Name.VARINT),
TIMEUUID (15, UUID.class, DataType.Name.TIMEUUID),
LIST (32, List.class, DataType.Name.LIST),
SET (34, Set.class, DataType.Name.SET),
MAP (33, Map.class, DataType.Name.MAP),
UDT (48, UDTValue.class, DataType.Name.UDT),
TUPLE (49, TupleValue.class, DataType.Name.TUPLE),
CUSTOM (0, ByteBuffer.class, DataType.Name.CUSTOM),
SMALLINT (19, Integer.class, DataType.Name.SMALLINT),
TINYINT (20, Integer.class, DataType.Name.TINYINT),
DATE (17, Date.class, DataType.Name.DATE),
TIME (18, Date.class, DataType.Name.TIME),
DURATION (???, Duration.class, DataType.Name.DURATION);
final int protocolId;
final Class<?> javaType;
final Name cqlType;
private static final DataTypeEnum[] nameToIds;
private static final Map<DataType.Name, DataTypeEnum> cqlDataTypeToDataType;
类型代码及其编码信息在CQL protocol specification - Duration type is in the version 5中定义-此类型的标识符为0x15(21)。您也可以在source code of the Java driver中找到所有代码。