ProtocolID для «продолжительности» в проводном протоколе Кассандры? - PullRequest
1 голос
/ 30 января 2020

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;

1 Ответ

1 голос
/ 30 января 2020

Коды для типов вместе с информацией об их кодировании определены в Спецификация протокола CQL - Тип длительности указан в версии 5 - этот тип имеет идентификатор 0x15 (21). Вы также можете найти все коды в исходном коде драйвера Java .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...