@Test public void testSerializeDeserialize() throws Exception { ColumnDefinition cd0 = new ColumnDefinition(ByteBufferUtil.bytes("TestColumnDefinitionName0"), BytesType.instance, IndexType.KEYS, null, "random index name 0", null); ColumnDefinition cd1 = new ColumnDefinition(ByteBufferUtil.bytes("TestColumnDefinition1"), LongType.instance, null, null, null, null); testSerializeDeserialize(cd0); testSerializeDeserialize(cd1); }
private static CFMetaData perRowIndexedCFMD(String ksName, String cfName, boolean withOldCfIds) { final Map<String, String> indexOptions = Collections.singletonMap( SecondaryIndex.CUSTOM_INDEX_OPTION_NAME, PerRowSecondaryIndexTest.TestIndex.class.getName()); return standardCFMD(ksName, cfName, withOldCfIds) .keyValidator(AsciiType.instance) .columnMetadata(new HashMap<ByteBuffer, ColumnDefinition>() {{ ByteBuffer cName = ByteBuffer.wrap("indexed".getBytes(Charsets.UTF_8)); put(cName, new ColumnDefinition(cName, AsciiType.instance, IndexType.CUSTOM, indexOptions, ByteBufferUtil.bytesToHex(cName), null)); }}); }
private static CFMetaData compositeIndexCFMD(String ksName, String cfName, final Boolean withIdxType, boolean withOldCfIds) throws ConfigurationException { final Map<String, String> idxOpts = Collections.singletonMap(CompositesIndex.PREFIX_SIZE_OPTION, "1"); final CompositeType composite = CompositeType.getInstance(Arrays.asList(new AbstractType<?>[]{UTF8Type.instance, UTF8Type.instance})); return new CFMetaData(ksName, cfName, ColumnFamilyType.Standard, composite, null) .columnMetadata(new HashMap<ByteBuffer, ColumnDefinition>() {{ ByteBuffer cName = ByteBuffer.wrap("col1".getBytes(Charsets.UTF_8)); IndexType idxType = withIdxType ? IndexType.COMPOSITES : null; put(cName, new ColumnDefinition(cName, UTF8Type.instance, idxType, idxOpts, withIdxType ? "col1_idx" : null, 1)); }}); }
@Test public void testSerializeDeserialize() throws Exception { ColumnDefinition cd0 = new ColumnDefinition(ByteBufferUtil.bytes("TestColumnDefinitionName0"), BytesType.instance, IndexType.KEYS, "random index name 0"); ColumnDefinition cd1 = new ColumnDefinition(ByteBufferUtil.bytes("TestColumnDefinition1"), LongType.instance, null, null); testSerializeDeserialize(cd0); testSerializeDeserialize(cd1); }
public static List<ColumnDefinition> getIndexMetadata( String indexes ) { if ( indexes == null ) { return null; } String[] index_entries = split( indexes, ',' ); List<ColumnDef> columns = new ArrayList<ColumnDef>(); for ( String index_entry : index_entries ) { String column_name = stringOrSubstringBeforeFirst( index_entry, ':' ).trim(); String comparer = substringAfterLast( index_entry, ":" ).trim(); if ( StringUtils.isBlank( comparer ) ) { comparer = "UUIDType"; } if ( StringUtils.isNotBlank( column_name ) ) { ColumnDef cd = new ColumnDef( bytebuffer( column_name ), comparer ); cd.setIndex_name( column_name ); cd.setIndex_type( IndexType.KEYS ); columns.add( cd ); } } return ThriftColumnDef.fromThriftList( columns ); }
@Test public void testThriftConversion() throws Exception { CfDef cfDef = new CfDef().setDefault_validation_class(AsciiType.class.getCanonicalName()) .setComment("Test comment") .setColumn_metadata(columnDefs) .setKeyspace(KEYSPACE) .setName(COLUMN_FAMILY); // convert Thrift to CFMetaData CFMetaData cfMetaData = CFMetaData.fromThrift(cfDef); CfDef thriftCfDef = new CfDef(); thriftCfDef.keyspace = KEYSPACE; thriftCfDef.name = COLUMN_FAMILY; thriftCfDef.default_validation_class = cfDef.default_validation_class; thriftCfDef.comment = cfDef.comment; thriftCfDef.column_metadata = new ArrayList<ColumnDef>(); for (ColumnDef columnDef : columnDefs) { ColumnDef c = new ColumnDef(); c.name = ByteBufferUtil.clone(columnDef.name); c.validation_class = columnDef.getValidation_class(); c.index_name = columnDef.getIndex_name(); c.index_type = IndexType.KEYS; thriftCfDef.column_metadata.add(c); } CfDef converted = cfMetaData.toThrift(); assertEquals(thriftCfDef.keyspace, converted.keyspace); assertEquals(thriftCfDef.name, converted.name); assertEquals(thriftCfDef.default_validation_class, converted.default_validation_class); assertEquals(thriftCfDef.comment, converted.comment); assertEquals(new HashSet<>(thriftCfDef.column_metadata), new HashSet<>(converted.column_metadata)); }
@Test public void testThriftConversion() throws Exception { CfDef cfDef = new CfDef().setDefault_validation_class(AsciiType.class.getCanonicalName()) .setComment("Test comment") .setColumn_metadata(columnDefs) .setKeyspace(KEYSPACE) .setName(COLUMN_FAMILY); // convert Thrift to CFMetaData CFMetaData cfMetaData = CFMetaData.fromThrift(cfDef); CfDef thriftCfDef = new CfDef(); thriftCfDef.keyspace = KEYSPACE; thriftCfDef.name = COLUMN_FAMILY; thriftCfDef.default_validation_class = cfDef.default_validation_class; thriftCfDef.comment = cfDef.comment; thriftCfDef.column_metadata = new ArrayList<ColumnDef>(); for (ColumnDef columnDef : columnDefs) { ColumnDef c = new ColumnDef(); c.name = ByteBufferUtil.clone(columnDef.name); c.validation_class = columnDef.getValidation_class(); c.index_name = columnDef.getIndex_name(); c.index_type = IndexType.KEYS; thriftCfDef.column_metadata.add(c); } CfDef converted = cfMetaData.toThrift(); assertEquals(thriftCfDef.keyspace, converted.keyspace); assertEquals(thriftCfDef.name, converted.name); assertEquals(thriftCfDef.default_validation_class, converted.default_validation_class); assertEquals(thriftCfDef.comment, converted.comment); assertEquals(thriftCfDef.column_metadata, converted.column_metadata); }
@Test public void testThriftConversion() throws Exception { CfDef cfDef = new CfDef().setDefault_validation_class(AsciiType.class.getCanonicalName()) .setComment("Test comment") .setColumn_metadata(columnDefs) .setKeyspace(KEYSPACE1) .setName(CF_STANDARD1); // convert Thrift to CFMetaData CFMetaData cfMetaData = ThriftConversion.fromThrift(cfDef); CfDef thriftCfDef = new CfDef(); thriftCfDef.keyspace = KEYSPACE1; thriftCfDef.name = CF_STANDARD1; thriftCfDef.default_validation_class = cfDef.default_validation_class; thriftCfDef.comment = cfDef.comment; thriftCfDef.column_metadata = new ArrayList<>(); for (ColumnDef columnDef : columnDefs) { ColumnDef c = new ColumnDef(); c.name = ByteBufferUtil.clone(columnDef.name); c.validation_class = columnDef.getValidation_class(); c.index_name = columnDef.getIndex_name(); c.index_type = IndexType.KEYS; thriftCfDef.column_metadata.add(c); } CfDef converted = ThriftConversion.toThrift(cfMetaData); assertEquals(thriftCfDef.keyspace, converted.keyspace); assertEquals(thriftCfDef.name, converted.name); assertEquals(thriftCfDef.default_validation_class, converted.default_validation_class); assertEquals(thriftCfDef.comment, converted.comment); assertEquals(new HashSet<>(thriftCfDef.column_metadata), new HashSet<>(converted.column_metadata)); }
@Test public void testThriftConversion() throws Exception { CfDef cfDef = new CfDef().setDefault_validation_class(AsciiType.class.getCanonicalName()) .setComment("Test comment") .setColumn_metadata(columnDefs) .setKeyspace(KEYSPACE1) .setName(CF_STANDARD1); // convert Thrift to CFMetaData CFMetaData cfMetaData = CFMetaData.fromThrift(cfDef); CfDef thriftCfDef = new CfDef(); thriftCfDef.keyspace = KEYSPACE1; thriftCfDef.name = CF_STANDARD1; thriftCfDef.default_validation_class = cfDef.default_validation_class; thriftCfDef.comment = cfDef.comment; thriftCfDef.column_metadata = new ArrayList<ColumnDef>(); for (ColumnDef columnDef : columnDefs) { ColumnDef c = new ColumnDef(); c.name = ByteBufferUtil.clone(columnDef.name); c.validation_class = columnDef.getValidation_class(); c.index_name = columnDef.getIndex_name(); c.index_type = IndexType.KEYS; thriftCfDef.column_metadata.add(c); } CfDef converted = cfMetaData.toThrift(); assertEquals(thriftCfDef.keyspace, converted.keyspace); assertEquals(thriftCfDef.name, converted.name); assertEquals(thriftCfDef.default_validation_class, converted.default_validation_class); assertEquals(thriftCfDef.comment, converted.comment); assertEquals(new HashSet<>(thriftCfDef.column_metadata), new HashSet<>(converted.column_metadata)); }
public void announceMigration() throws InvalidRequestException, ConfigurationException { logger.debug("Updating column {} definition for index {}", columnName, indexName); CFMetaData cfm = Schema.instance.getCFMetaData(keyspace(), columnFamily()).clone(); CFDefinition cfDef = cfm.getCfDef(); ColumnDefinition cd = cfm.getColumnDefinition(columnName.key); if (isCustom) { cd.setIndexType(IndexType.CUSTOM, Collections.singletonMap(SecondaryIndex.CUSTOM_INDEX_OPTION_NAME, indexClass)); } else if (cfDef.isComposite) { CompositeType composite = (CompositeType)cfm.comparator; Map<String, String> opts = new HashMap<String, String>(); opts.put(CompositesIndex.PREFIX_SIZE_OPTION, String.valueOf(composite.types.size() - (cfDef.hasCollections ? 2 : 1))); cd.setIndexType(IndexType.COMPOSITES, opts); } else { cd.setIndexType(IndexType.KEYS, Collections.<String, String>emptyMap()); } cd.setIndexName(indexName); cfm.addDefaultIndexNames(); MigrationManager.announceColumnFamilyUpdate(cfm); }
public ColumnDefinition(ByteBuffer name, AbstractType<?> validator, IndexType index_type, Map<String, String> index_options, String index_name, Integer componentIndex) { assert name != null && validator != null; this.name = name; this.index_name = index_name; this.validator = validator; this.componentIndex = componentIndex; this.setIndexType(index_type, index_options); }
public ColumnDef toThrift() { ColumnDef cd = new ColumnDef(); cd.setName(ByteBufferUtil.clone(name)); cd.setValidation_class(validator.toString()); cd.setIndex_type(index_type == null ? null : IndexType.valueOf(index_type.name())); cd.setIndex_name(index_name == null ? null : index_name); cd.setIndex_options(index_options == null ? null : Maps.newHashMap(index_options)); return cd; }
/** * Deserialize columns from low-level representation * * @return Thrift-based deserialized representation of the column * @param row */ public static List<ColumnDefinition> fromSchema(Row row, CFMetaData cfm) { if (row.cf == null) return Collections.emptyList(); List<ColumnDefinition> cds = new ArrayList<ColumnDefinition>(); for (UntypedResultSet.Row result : QueryProcessor.resultify("SELECT * FROM system.schema_columns", row)) { try { IndexType index_type = null; Map<String,String> index_options = null; String index_name = null; Integer componentIndex = null; if (result.has("index_type")) index_type = IndexType.valueOf(result.getString("index_type")); if (result.has("index_options")) index_options = FBUtilities.fromJsonMap(result.getString("index_options")); if (result.has("index_name")) index_name = result.getString("index_name"); if (result.has("component_index")) componentIndex = result.getInt("component_index"); cds.add(new ColumnDefinition(cfm.getColumnDefinitionComparator(componentIndex).fromString(result.getString("column_name")), TypeParser.parse(result.getString("validator")), index_type, index_options, index_name, componentIndex)); } catch (RequestValidationException e) { throw new RuntimeException(e); } } return cds; }
@Deprecated public static ColumnDefinition columnFromAvro(org.apache.cassandra.db.migration.avro.ColumnDef cd) { IndexType index_type = cd.index_type == null ? null : Enum.valueOf(IndexType.class, cd.index_type.name()); String index_name = cd.index_name == null ? null : cd.index_name.toString(); try { AbstractType<?> validatorType = TypeParser.parse(cd.validation_class); return new ColumnDefinition(ByteBufferUtil.clone(cd.name), validatorType, index_type, ColumnDefinition.getStringMap(cd.index_options), index_name, null); } catch (RequestValidationException e) { throw new RuntimeException(e); } }
@Test public void testThriftToAvroConversion() throws Exception { CfDef cfDef = new CfDef().setDefault_validation_class(AsciiType.class.getCanonicalName()) .setComment("Test comment") .setColumn_metadata(columnDefs) .setKeyspace(KEYSPACE) .setName(COLUMN_FAMILY); // convert Thrift to CFMetaData CFMetaData cfMetaData = CFMetaData.fromThrift(cfDef); // make a correct Avro object CfDef thriftCfDef = new CfDef(); thriftCfDef.keyspace = KEYSPACE; thriftCfDef.name = COLUMN_FAMILY; thriftCfDef.default_validation_class = cfDef.default_validation_class; thriftCfDef.comment = cfDef.comment; thriftCfDef.column_metadata = new ArrayList<ColumnDef>(); for (ColumnDef columnDef : columnDefs) { ColumnDef c = new ColumnDef(); c.name = ByteBufferUtil.clone(columnDef.name); c.validation_class = columnDef.getValidation_class(); c.index_name = columnDef.getIndex_name(); c.index_type = IndexType.KEYS; thriftCfDef.column_metadata.add(c); } CfDef converted = cfMetaData.toThrift(); assertEquals(thriftCfDef.keyspace, converted.keyspace); assertEquals(thriftCfDef.name, converted.name); assertEquals(thriftCfDef.default_validation_class, converted.default_validation_class); assertEquals(thriftCfDef.comment, converted.comment); assertEquals(thriftCfDef.column_metadata, converted.column_metadata); }
private static CFMetaData indexCFMD(String ksName, String cfName, final Boolean withIdxType, boolean withOldCfIds) throws ConfigurationException { return standardCFMD(ksName, cfName, withOldCfIds) .keyValidator(AsciiType.instance) .columnMetadata(new HashMap<ByteBuffer, ColumnDefinition>() {{ ByteBuffer cName = ByteBuffer.wrap("birthdate".getBytes(Charsets.UTF_8)); IndexType keys = withIdxType ? IndexType.KEYS : null; put(cName, new ColumnDefinition(cName, LongType.instance, keys, null, withIdxType ? ByteBufferUtil.bytesToHex(cName) : null, null)); }}); }
public ColumnDefinition(ByteBuffer name, AbstractType validator, IndexType index_type, String index_name) { this.name = name; this.index_type = index_type; this.index_name = index_name; this.validator = validator; }