/** * Returns the type of a given field. * * @param name the name of the field. Note that {@code name} obey the usual CQL identifier rules: * it should be quoted if it denotes a case sensitive identifier (you can use {@link * Metadata#quote} for the quoting). * @return the type of field {@code name} if this UDT has a field of this name, {@code null} * otherwise. * @throws IllegalArgumentException if {@code name} is not a field of this UDT definition. */ public DataType getFieldType(String name) { int[] idx = byName.get(Metadata.handleId(name)); if (idx == null) throw new IllegalArgumentException(name + " is not a field defined in this definition"); return byIdx[idx[0]].getType(); }
@Test(groups = "unit") public void parseUserTypes() { String s = "org.apache.cassandra.db.marshal.UserType(foo,61646472657373,737472656574:org.apache.cassandra.db.marshal.UTF8Type,7a6970636f6465:org.apache.cassandra.db.marshal.Int32Type,70686f6e6573:org.apache.cassandra.db.marshal.SetType(org.apache.cassandra.db.marshal.UserType(foo,70686f6e65,6e616d65:org.apache.cassandra.db.marshal.UTF8Type,6e756d626572:org.apache.cassandra.db.marshal.UTF8Type)))"; UserType def = (UserType) DataTypeClassNameParser.parseOne(s, protocolVersion, codecRegistry); assertEquals(def.getKeyspace(), "foo"); assertEquals(def.getTypeName(), "address"); Iterator<UserType.Field> iter = def.iterator(); UserType.Field field1 = iter.next(); assertEquals(field1.getName(), "street"); assertEquals(field1.getType(), DataType.text()); UserType.Field field2 = iter.next(); assertEquals(field2.getName(), "zipcode"); assertEquals(field2.getType(), DataType.cint()); UserType.Field field3 = iter.next(); assertEquals(field3.getName(), "phones"); DataType st = field3.getType(); assertEquals(st.getName(), DataType.Name.SET); UserType subDef = (UserType) st.getTypeArguments().get(0); assertEquals(subDef.getKeyspace(), "foo"); assertEquals(subDef.getTypeName(), "phone"); Iterator<UserType.Field> subIter = subDef.iterator(); UserType.Field subField1 = subIter.next(); assertEquals(subField1.getName(), "name"); assertEquals(subField1.getType(), DataType.text()); UserType.Field subField2 = subIter.next(); assertEquals(subField2.getName(), "number"); assertEquals(subField2.getType(), DataType.text()); }
ByteBuffer buf = value.slice(); buf.limit(size); AppendValueToChannel(field.getType(), buf, channel); value.position(value.position() + size);
int weight = level; for (UserType.Field field : ((UserType) cqlType)) { weight += weigh(field.getType(), level + 1);
int weight = level; for (UserType.Field field : ((UserType) cqlType)) { weight += weigh(field.getType(), level + 1);
@Test(groups = "unit") public void parseUserTypes() { String s = "org.apache.cassandra.db.marshal.UserType(foo,61646472657373,737472656574:org.apache.cassandra.db.marshal.UTF8Type,7a6970636f6465:org.apache.cassandra.db.marshal.Int32Type,70686f6e6573:org.apache.cassandra.db.marshal.SetType(org.apache.cassandra.db.marshal.UserType(foo,70686f6e65,6e616d65:org.apache.cassandra.db.marshal.UTF8Type,6e756d626572:org.apache.cassandra.db.marshal.UTF8Type)))"; UserType def = (UserType) DataTypeClassNameParser.parseOne(s, protocolVersion, codecRegistry); assertEquals(def.getKeyspace(), "foo"); assertEquals(def.getTypeName(), "address"); Iterator<UserType.Field> iter = def.iterator(); UserType.Field field1 = iter.next(); assertEquals(field1.getName(), "street"); assertEquals(field1.getType(), DataType.text()); UserType.Field field2 = iter.next(); assertEquals(field2.getName(), "zipcode"); assertEquals(field2.getType(), DataType.cint()); UserType.Field field3 = iter.next(); assertEquals(field3.getName(), "phones"); DataType st = field3.getType(); assertEquals(st.getName(), DataType.Name.SET); UserType subDef = (UserType) st.getTypeArguments().get(0); assertEquals(subDef.getKeyspace(), "foo"); assertEquals(subDef.getTypeName(), "phone"); Iterator<UserType.Field> subIter = subDef.iterator(); UserType.Field subField1 = subIter.next(); assertEquals(subField1.getName(), "name"); assertEquals(subField1.getType(), DataType.text()); UserType.Field subField2 = subIter.next(); assertEquals(subField2.getName(), "number"); assertEquals(subField2.getType(), DataType.text()); }
int weight = level; for (UserType.Field field : ((UserType) cqlType)) { weight += weigh(field.getType(), level + 1);
/** * Visit a {@link UserType} and its fields. * * @param userType * @param typeFilter */ private void visitTypes(UserType userType, Predicate<CqlIdentifier> typeFilter) { CqlIdentifier typeName = CqlIdentifier.of(userType.getTypeName()); if (!typeFilter.test(typeName)) { return; } for (Field field : userType) { if (field.getType() instanceof UserType) { addDependency((UserType) field.getType(), typeName, typeFilter); return; } doWithTypeArguments(field.getType(), it -> { if (it instanceof UserType) { addDependency((UserType) it, typeName, typeFilter); } }); } }
/** * Returns the type of a given field. * * @param name the name of the field. Note that {@code name} obey the usual * CQL identifier rules: it should be quoted if it denotes a case sensitive * identifier (you can use {@link Metadata#quote} for the quoting). * @return the type of field {@code name} if this UDT has a field of this * name, {@code null} otherwise. * @throws IllegalArgumentException if {@code name} is not a field of this * UDT definition. */ public DataType getFieldType(String name) { int[] idx = byName.get(Metadata.handleId(name)); if (idx == null) throw new IllegalArgumentException(name + " is not a field defined in this definition"); return byIdx[idx[0]].getType(); }
/** * Returns the type of a given field. * * @param name the name of the field. Note that {@code name} obey the usual * CQL identifier rules: it should be quoted if it denotes a case sensitive * identifier (you can use {@link Metadata#quote} for the quoting). * @return the type of field {@code name} if this UDT has a field of this * name, {@code null} otherwise. * @throws IllegalArgumentException if {@code name} is not a field of this * UDT definition. */ public DataType getFieldType(String name) { int[] idx = byName.get(Metadata.handleId(name)); if (idx == null) throw new IllegalArgumentException(name + " is not a field defined in this definition"); return byIdx[idx[0]].getType(); }
/** * Returns the type of a given field. * * @param name the name of the field. Note that {@code name} obey the usual * CQL identifier rules: it should be quoted if it denotes a case sensitive * identifier (you can use {@link Metadata#quote} for the quoting). * @return the type of field {@code name} if this UDT has a field of this * name, {@code null} otherwise. * @throws IllegalArgumentException if {@code name} is not a field of this * UDT definition. */ public DataType getFieldType(String name) { int[] idx = byName.get(Metadata.handleId(name)); if (idx == null) throw new IllegalArgumentException(name + " is not a field defined in this definition"); return byIdx[idx[0]].getType(); }
@Override protected DataType getType(int i) { return definition.byIdx[i].getType(); }
@Override protected DataType getType(int i) { return definition.byIdx[i].getType(); }
@Override protected DataType getType(int i) { return definition.byIdx[i].getType(); }
public static <T> FieldMapper<T, SettableByIndexData> newUDTMapper(Type target, UserType tt, MapperConfig<DatastaxColumnKey, ?> config, ReflectionService reflectionService) { SettableDataMapperBuilder<T> builder = newFieldMapperBuilder(config, reflectionService, target); Iterator<UserType.Field> iterator = tt.iterator(); int i = 0; while(iterator.hasNext()) { UserType.Field f = iterator.next(); builder.addColumn(new DatastaxColumnKey(f.getName(), i, f.getType())); i++; } return builder.mapper(); }
public static <P> ContextualSourceMapper<GettableByIndexData, P> newUDTMapper(Type target, UserType tt, DatastaxMapperFactory factory) { ConstantSourceMapperBuilder<GettableByIndexData, P, DatastaxColumnKey> builder = newFieldMapperBuilder(factory, target); Iterator<UserType.Field> iterator = tt.iterator(); int i = 0; while(iterator.hasNext()) { UserType.Field f = iterator.next(); FieldMapperColumnDefinition<DatastaxColumnKey> identity = FieldMapperColumnDefinition.identity(); builder.addMapping(new DatastaxColumnKey(f.getName(), i, f.getType()), identity); i ++; } return builder.mapper(); }
weight += weigh(field.getType(), level + 1);
private boolean dependsOn(UserType udt1, UserType udt2) { for (UserType.Field field : udt1) { if (references(field.getType(), udt2)) { return true; } } return false; }
@Override protected DataType getType(int i) { return definition.byIdx[i].getType(); }