Search in sources :

Example 11 with DataType

use of com.datastax.oss.driver.api.core.type.DataType in project java-driver by datastax.

the class DefaultTupleValue method equals.

@Override
public boolean equals(Object o) {
    if (this == o) {
        return true;
    }
    if (!(o instanceof TupleValue)) {
        return false;
    }
    TupleValue that = (TupleValue) o;
    if (!type.equals(that.getType())) {
        return false;
    }
    for (int i = 0; i < values.length; i++) {
        DataType innerThisType = type.getComponentTypes().get(i);
        DataType innerThatType = that.getType().getComponentTypes().get(i);
        if (!innerThisType.equals(innerThatType)) {
            return false;
        }
        Object thisValue = this.codecRegistry().codecFor(innerThisType).decode(this.getBytesUnsafe(i), this.protocolVersion());
        Object thatValue = that.codecRegistry().codecFor(innerThatType).decode(that.getBytesUnsafe(i), that.protocolVersion());
        if (!Objects.equals(thisValue, thatValue)) {
            return false;
        }
    }
    return true;
}
Also used : DataType(com.datastax.oss.driver.api.core.type.DataType) TupleValue(com.datastax.oss.driver.api.core.data.TupleValue)

Example 12 with DataType

use of com.datastax.oss.driver.api.core.type.DataType in project java-driver by datastax.

the class DefaultUdtValue method equals.

@Override
public boolean equals(Object o) {
    if (this == o) {
        return true;
    }
    if (!(o instanceof UdtValue)) {
        return false;
    }
    UdtValue that = (UdtValue) o;
    if (!type.equals(that.getType())) {
        return false;
    }
    for (int i = 0; i < values.length; i++) {
        DataType innerThisType = type.getFieldTypes().get(i);
        DataType innerThatType = that.getType().getFieldTypes().get(i);
        Object thisValue = this.codecRegistry().codecFor(innerThisType).decode(this.getBytesUnsafe(i), this.protocolVersion());
        Object thatValue = that.codecRegistry().codecFor(innerThatType).decode(that.getBytesUnsafe(i), that.protocolVersion());
        if (!Objects.equals(thisValue, thatValue)) {
            return false;
        }
    }
    return true;
}
Also used : UdtValue(com.datastax.oss.driver.api.core.data.UdtValue) DataType(com.datastax.oss.driver.api.core.type.DataType)

Example 13 with DataType

use of com.datastax.oss.driver.api.core.type.DataType in project java-driver by datastax.

the class DefaultCreateAggregate method asCql.

@NonNull
@Override
public String asCql() {
    StringBuilder builder = new StringBuilder();
    builder.append("CREATE ");
    if (orReplace) {
        builder.append("OR REPLACE ");
    }
    builder.append("AGGREGATE ");
    if (ifNotExists) {
        builder.append("IF NOT EXISTS ");
    }
    CqlHelper.qualify(keyspace, functionName, builder);
    builder.append(" (");
    boolean first = true;
    for (DataType param : parameters) {
        if (first) {
            first = false;
        } else {
            builder.append(',');
        }
        builder.append(param.asCql(false, true));
    }
    builder.append(')');
    if (sFunc != null) {
        builder.append(" SFUNC ");
        builder.append(sFunc.asCql(true));
    }
    if (sType != null) {
        builder.append(" STYPE ");
        builder.append(sType.asCql(false, true));
    }
    if (finalFunc != null) {
        builder.append(" FINALFUNC ");
        builder.append(finalFunc.asCql(true));
    }
    if (term != null) {
        builder.append(" INITCOND ");
        term.appendTo(builder);
    }
    return builder.toString();
}
Also used : DataType(com.datastax.oss.driver.api.core.type.DataType) NonNull(edu.umd.cs.findbugs.annotations.NonNull)

Example 14 with DataType

use of com.datastax.oss.driver.api.core.type.DataType in project java-driver by datastax.

the class RequestLogFormatter method appendValues.

/**
 * @return the number of values that can still be appended after this, or -1 if the max was
 *     reached by this call.
 */
protected int appendValues(Request request, int maxValues, int maxValueLength, boolean addSeparator, StringBuilder builder) {
    if (request instanceof BatchStatement) {
        BatchStatement batch = (BatchStatement) request;
        for (BatchableStatement<?> child : batch) {
            maxValues = appendValues(child, maxValues, maxValueLength, addSeparator, builder);
            if (addSeparator) {
                addSeparator = false;
            }
            if (maxValues < 0) {
                return -1;
            }
        }
    } else if (request instanceof BoundStatement) {
        BoundStatement statement = (BoundStatement) request;
        ColumnDefinitions definitions = statement.getPreparedStatement().getVariableDefinitions();
        List<ByteBuffer> values = statement.getValues();
        assert definitions.size() == values.size();
        if (definitions.size() > 0) {
            if (addSeparator) {
                builder.append(' ');
            }
            builder.append('[');
            for (int i = 0; i < definitions.size(); i++) {
                if (i > 0) {
                    builder.append(", ");
                }
                maxValues -= 1;
                if (maxValues < 0) {
                    builder.append(FURTHER_VALUES_TRUNCATED);
                    return -1;
                }
                builder.append(definitions.get(i).getName().asCql(true)).append('=');
                if (!statement.isSet(i)) {
                    builder.append("<UNSET>");
                } else {
                    ByteBuffer value = values.get(i);
                    DataType type = definitions.get(i).getType();
                    appendValue(value, type, maxValueLength, builder);
                }
            }
            builder.append(']');
        }
    } else if (request instanceof SimpleStatement) {
        SimpleStatement statement = (SimpleStatement) request;
        if (!statement.getPositionalValues().isEmpty()) {
            if (addSeparator) {
                builder.append(' ');
            }
            builder.append('[');
            int i = 0;
            for (Object value : statement.getPositionalValues()) {
                if (i > 0) {
                    builder.append(", ");
                }
                maxValues -= 1;
                if (maxValues < 0) {
                    builder.append(FURTHER_VALUES_TRUNCATED);
                    return -1;
                }
                builder.append('v').append(i).append('=');
                appendValue(value, maxValueLength, builder);
                i += 1;
            }
            builder.append(']');
        } else if (!statement.getNamedValues().isEmpty()) {
            if (addSeparator) {
                builder.append(' ');
            }
            builder.append('[');
            int i = 0;
            for (Map.Entry<CqlIdentifier, Object> entry : statement.getNamedValues().entrySet()) {
                if (i > 0) {
                    builder.append(", ");
                }
                maxValues -= 1;
                if (maxValues < 0) {
                    builder.append(FURTHER_VALUES_TRUNCATED);
                    return -1;
                }
                builder.append(entry.getKey().asCql(true)).append('=');
                appendValue(entry.getValue(), maxValueLength, builder);
                i += 1;
            }
            builder.append(']');
        }
    }
    return maxValues;
}
Also used : ColumnDefinitions(com.datastax.oss.driver.api.core.cql.ColumnDefinitions) SimpleStatement(com.datastax.oss.driver.api.core.cql.SimpleStatement) BatchStatement(com.datastax.oss.driver.api.core.cql.BatchStatement) DataType(com.datastax.oss.driver.api.core.type.DataType) List(java.util.List) BoundStatement(com.datastax.oss.driver.api.core.cql.BoundStatement) ByteBuffer(java.nio.ByteBuffer)

Example 15 with DataType

use of com.datastax.oss.driver.api.core.type.DataType in project java-driver by datastax.

the class DseTableParser method parseTable.

public DseTableMetadata parseTable(AdminRow tableRow, CqlIdentifier keyspaceId, Map<CqlIdentifier, UserDefinedType> userTypes, Multimap<CqlIdentifier, AdminRow> vertices, Multimap<CqlIdentifier, AdminRow> edges) {
    // Cassandra <= 2.2:
    // CREATE TABLE system.schema_columnfamilies (
    // keyspace_name text,
    // columnfamily_name text,
    // bloom_filter_fp_chance double,
    // caching text,
    // cf_id uuid,
    // column_aliases text, (2.1 only)
    // comment text,
    // compaction_strategy_class text,
    // compaction_strategy_options text,
    // comparator text,
    // compression_parameters text,
    // default_time_to_live int,
    // default_validator text,
    // dropped_columns map<text, bigint>,
    // gc_grace_seconds int,
    // index_interval int,
    // is_dense boolean, (2.1 only)
    // key_aliases text, (2.1 only)
    // key_validator text,
    // local_read_repair_chance double,
    // max_compaction_threshold int,
    // max_index_interval int,
    // memtable_flush_period_in_ms int,
    // min_compaction_threshold int,
    // min_index_interval int,
    // read_repair_chance double,
    // speculative_retry text,
    // subcomparator text,
    // type text,
    // value_alias text, (2.1 only)
    // PRIMARY KEY (keyspace_name, columnfamily_name)
    // ) WITH CLUSTERING ORDER BY (columnfamily_name ASC)
    // 
    // Cassandra 3.0:
    // CREATE TABLE system_schema.tables (
    // keyspace_name text,
    // table_name text,
    // bloom_filter_fp_chance double,
    // caching frozen<map<text, text>>,
    // cdc boolean,
    // comment text,
    // compaction frozen<map<text, text>>,
    // compression frozen<map<text, text>>,
    // crc_check_chance double,
    // dclocal_read_repair_chance double,
    // default_time_to_live int,
    // extensions frozen<map<text, blob>>,
    // flags frozen<set<text>>,
    // gc_grace_seconds int,
    // id uuid,
    // max_index_interval int,
    // memtable_flush_period_in_ms int,
    // min_index_interval int,
    // read_repair_chance double,
    // speculative_retry text,
    // PRIMARY KEY (keyspace_name, table_name)
    // ) WITH CLUSTERING ORDER BY (table_name ASC)
    CqlIdentifier tableId = CqlIdentifier.fromInternal(tableRow.getString(tableRow.contains("table_name") ? "table_name" : "columnfamily_name"));
    UUID uuid = tableRow.contains("id") ? tableRow.getUuid("id") : tableRow.getUuid("cf_id");
    List<RawColumn> rawColumns = RawColumn.toRawColumns(rows.columns().getOrDefault(keyspaceId, ImmutableMultimap.of()).get(tableId));
    if (rawColumns.isEmpty()) {
        LOG.warn("[{}] Processing TABLE refresh for {}.{} but found no matching rows, skipping", logPrefix, keyspaceId, tableId);
        return null;
    }
    boolean isCompactStorage;
    if (tableRow.contains("flags")) {
        Set<String> flags = tableRow.getSetOfString("flags");
        boolean isDense = flags.contains("dense");
        boolean isSuper = flags.contains("super");
        boolean isCompound = flags.contains("compound");
        isCompactStorage = isSuper || isDense || !isCompound;
        boolean isStaticCompact = !isSuper && !isDense && !isCompound;
        if (isStaticCompact) {
            RawColumn.pruneStaticCompactTableColumns(rawColumns);
        } else if (isDense) {
            RawColumn.pruneDenseTableColumnsV3(rawColumns);
        }
    } else {
        boolean isDense = tableRow.getBoolean("is_dense");
        if (isDense) {
            RawColumn.pruneDenseTableColumnsV2(rawColumns);
        }
        DataTypeClassNameCompositeParser.ParseResult comparator = new DataTypeClassNameCompositeParser().parseWithComposite(tableRow.getString("comparator"), keyspaceId, userTypes, context);
        isCompactStorage = isDense || !comparator.isComposite;
    }
    Collections.sort(rawColumns);
    ImmutableMap.Builder<CqlIdentifier, ColumnMetadata> allColumnsBuilder = ImmutableMap.builder();
    ImmutableList.Builder<ColumnMetadata> partitionKeyBuilder = ImmutableList.builder();
    ImmutableMap.Builder<ColumnMetadata, ClusteringOrder> clusteringColumnsBuilder = ImmutableMap.builder();
    ImmutableMap.Builder<CqlIdentifier, IndexMetadata> indexesBuilder = ImmutableMap.builder();
    for (RawColumn raw : rawColumns) {
        DataType dataType = rows.dataTypeParser().parse(keyspaceId, raw.dataType, userTypes, context);
        DseColumnMetadata column = new DefaultDseColumnMetadata(keyspaceId, tableId, raw.name, dataType, raw.kind.equals(RawColumn.KIND_STATIC));
        switch(raw.kind) {
            case RawColumn.KIND_PARTITION_KEY:
                partitionKeyBuilder.add(column);
                break;
            case RawColumn.KIND_CLUSTERING_COLUMN:
                clusteringColumnsBuilder.put(column, raw.reversed ? ClusteringOrder.DESC : ClusteringOrder.ASC);
                break;
            default:
        }
        allColumnsBuilder.put(column.getName(), column);
        DseIndexMetadata index = buildLegacyIndex(raw, column);
        if (index != null) {
            indexesBuilder.put(index.getName(), index);
        }
    }
    Map<CqlIdentifier, Object> options;
    try {
        options = parseOptions(tableRow);
    } catch (Exception e) {
        // Options change the most often, so be especially lenient if anything goes wrong.
        Loggers.warnWithException(LOG, "[{}] Error while parsing options for {}.{}, getOptions() will be empty", logPrefix, keyspaceId, tableId, e);
        options = Collections.emptyMap();
    }
    Collection<AdminRow> indexRows = rows.indexes().getOrDefault(keyspaceId, ImmutableMultimap.of()).get(tableId);
    for (AdminRow indexRow : indexRows) {
        DseIndexMetadata index = buildModernIndex(keyspaceId, tableId, indexRow);
        indexesBuilder.put(index.getName(), index);
    }
    return new DefaultDseTableMetadata(keyspaceId, tableId, uuid, isCompactStorage, false, partitionKeyBuilder.build(), clusteringColumnsBuilder.build(), allColumnsBuilder.build(), options, indexesBuilder.build(), buildVertex(tableId, vertices), buildEdge(tableId, edges, vertices));
}
Also used : DefaultDseColumnMetadata(com.datastax.dse.driver.internal.core.metadata.schema.DefaultDseColumnMetadata) ColumnMetadata(com.datastax.oss.driver.api.core.metadata.schema.ColumnMetadata) DseColumnMetadata(com.datastax.dse.driver.api.core.metadata.schema.DseColumnMetadata) ImmutableList(com.datastax.oss.driver.shaded.guava.common.collect.ImmutableList) DseIndexMetadata(com.datastax.dse.driver.api.core.metadata.schema.DseIndexMetadata) DefaultDseIndexMetadata(com.datastax.dse.driver.internal.core.metadata.schema.DefaultDseIndexMetadata) DefaultDseTableMetadata(com.datastax.dse.driver.internal.core.metadata.schema.DefaultDseTableMetadata) RawColumn(com.datastax.oss.driver.internal.core.metadata.schema.parsing.RawColumn) DataType(com.datastax.oss.driver.api.core.type.DataType) UUID(java.util.UUID) IndexMetadata(com.datastax.oss.driver.api.core.metadata.schema.IndexMetadata) DseIndexMetadata(com.datastax.dse.driver.api.core.metadata.schema.DseIndexMetadata) DefaultDseIndexMetadata(com.datastax.dse.driver.internal.core.metadata.schema.DefaultDseIndexMetadata) DefaultDseColumnMetadata(com.datastax.dse.driver.internal.core.metadata.schema.DefaultDseColumnMetadata) DseColumnMetadata(com.datastax.dse.driver.api.core.metadata.schema.DseColumnMetadata) DataTypeClassNameCompositeParser(com.datastax.oss.driver.internal.core.metadata.schema.parsing.DataTypeClassNameCompositeParser) CqlIdentifier(com.datastax.oss.driver.api.core.CqlIdentifier) ImmutableMap(com.datastax.oss.driver.shaded.guava.common.collect.ImmutableMap) DefaultDseColumnMetadata(com.datastax.dse.driver.internal.core.metadata.schema.DefaultDseColumnMetadata) ClusteringOrder(com.datastax.oss.driver.api.core.metadata.schema.ClusteringOrder) AdminRow(com.datastax.oss.driver.internal.core.adminrequest.AdminRow)

Aggregations

DataType (com.datastax.oss.driver.api.core.type.DataType)73 NonNull (edu.umd.cs.findbugs.annotations.NonNull)21 CqlIdentifier (com.datastax.oss.driver.api.core.CqlIdentifier)19 SetType (com.datastax.oss.driver.api.core.type.SetType)10 ImmutableList (com.datastax.oss.driver.shaded.guava.common.collect.ImmutableList)10 ImmutableMap (com.datastax.oss.driver.shaded.guava.common.collect.ImmutableMap)10 UserDefinedType (com.datastax.oss.driver.api.core.type.UserDefinedType)9 CheckReturnValue (edu.umd.cs.findbugs.annotations.CheckReturnValue)9 ColumnMetadata (com.datastax.oss.driver.api.core.metadata.schema.ColumnMetadata)8 Map (java.util.Map)8 UdtValue (com.datastax.oss.driver.api.core.data.UdtValue)7 ClusteringOrder (com.datastax.oss.driver.api.core.metadata.schema.ClusteringOrder)7 ListType (com.datastax.oss.driver.api.core.type.ListType)7 MapType (com.datastax.oss.driver.api.core.type.MapType)7 TupleValue (com.datastax.oss.driver.api.core.data.TupleValue)6 Nullable (edu.umd.cs.findbugs.annotations.Nullable)6 UUID (java.util.UUID)6 TupleType (com.datastax.oss.driver.api.core.type.TupleType)5 CodecRegistry (com.datastax.oss.driver.api.core.type.codec.registry.CodecRegistry)5 List (java.util.List)5