https://github/adejanovski/cassandra-jdbc-wrapper отлично, но более чем устарело. Например, он имеет цель Java 1.6, использует версию 3.0.0 библиотеки ключей (datastax), где окончательная версия была 3.8.0 (а текущая версия 4.4), и т. Д. c. Он может подключаться к Cassandra 3.x, но ему не хватает некоторых новейших функций.
Мы смогли раскошелиться на проект и обновить библиотеку datastax до 3.8.0, но я застрял при добавлении ' тип данных продолжительности. Есть таблица, которая (кажется) отображает проводной протокол protocolId
для типов данных в класс оболочки, который его реализует. Я искал как код datastax (который поддерживает этот тип данных), так и код cassandra и был полностью озадачен поиском правильного значения, так как все используют enum (yay!) Вместо гораздо более непрозрачного protocolId ... но я не сделал удалось найти, где производится связь на стороне сервера Cassadra.
Итак, два вопроса. Во-первых, есть ли уже форк этого проекта, который добавляет поддержку типа «длительность»? (Я sh смог выполнить поиск кода как по проекту, так и по его форкам.)
Во-вторых, каков идентификатор протокола / где он определен?
При этом Я почти готов добавить немного инструментов, поэтому сообщение «неизвестный код c» добавляет больше деталей. Это сработало бы, но могло бы быть fr agile.
Примечание по JDB C против CQL : наш текущий код был написан несколько лет go кем-то, кто использовал наш обширный JDB C инфраструктура. Это было "достаточно хорошо", но требует поддерживаемых драйверов JDB C. Теперь ясно, что мы должны реорганизовать код для использования CQL, но для написания и тестирования потребуется время, и клиент хочет решение сейчас . Мы нашли коммерческое решение, но оно несовместимо с нашей системой, так как мы загружаем файлы jar из хранилища mon go вместо файловой системы. (Не спрашивайте.) Разрабатывая этот драйвер, мы получим немного передышки.
Если это поможет, это таблица в 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;