prepare for UDT collections implementation task
This commit is contained in:
parent
00d309121f
commit
3c7a06024a
21 changed files with 921 additions and 189 deletions
|
@ -24,26 +24,21 @@ import java.util.stream.Collectors;
|
||||||
|
|
||||||
import com.datastax.driver.core.ColumnMetadata;
|
import com.datastax.driver.core.ColumnMetadata;
|
||||||
import com.datastax.driver.core.ColumnMetadata.IndexMetadata;
|
import com.datastax.driver.core.ColumnMetadata.IndexMetadata;
|
||||||
import com.datastax.driver.core.DataType;
|
|
||||||
import com.datastax.driver.core.RegularStatement;
|
import com.datastax.driver.core.RegularStatement;
|
||||||
import com.datastax.driver.core.SimpleStatement;
|
import com.datastax.driver.core.SimpleStatement;
|
||||||
import com.datastax.driver.core.TableMetadata;
|
import com.datastax.driver.core.TableMetadata;
|
||||||
import com.datastax.driver.core.UserType;
|
|
||||||
import com.datastax.driver.core.schemabuilder.Alter;
|
import com.datastax.driver.core.schemabuilder.Alter;
|
||||||
import com.datastax.driver.core.schemabuilder.Create;
|
import com.datastax.driver.core.schemabuilder.Create;
|
||||||
import com.datastax.driver.core.schemabuilder.Create.Options;
|
import com.datastax.driver.core.schemabuilder.Create.Options;
|
||||||
import com.datastax.driver.core.schemabuilder.CreateType;
|
import com.datastax.driver.core.schemabuilder.CreateType;
|
||||||
import com.datastax.driver.core.schemabuilder.SchemaBuilder;
|
import com.datastax.driver.core.schemabuilder.SchemaBuilder;
|
||||||
import com.datastax.driver.core.schemabuilder.SchemaStatement;
|
import com.datastax.driver.core.schemabuilder.SchemaStatement;
|
||||||
import com.datastax.driver.core.schemabuilder.UDTType;
|
|
||||||
import com.noorq.casser.mapping.CasserEntityType;
|
|
||||||
import com.noorq.casser.mapping.CasserEntity;
|
import com.noorq.casser.mapping.CasserEntity;
|
||||||
|
import com.noorq.casser.mapping.CasserEntityType;
|
||||||
import com.noorq.casser.mapping.CasserProperty;
|
import com.noorq.casser.mapping.CasserProperty;
|
||||||
import com.noorq.casser.mapping.IdentityName;
|
|
||||||
import com.noorq.casser.mapping.OrderingDirection;
|
import com.noorq.casser.mapping.OrderingDirection;
|
||||||
import com.noorq.casser.support.CasserMappingException;
|
import com.noorq.casser.support.CasserMappingException;
|
||||||
import com.noorq.casser.support.CqlUtil;
|
import com.noorq.casser.support.CqlUtil;
|
||||||
import com.noorq.casser.support.Either;
|
|
||||||
|
|
||||||
public final class SchemaUtil {
|
public final class SchemaUtil {
|
||||||
|
|
||||||
|
@ -73,19 +68,7 @@ public final class SchemaUtil {
|
||||||
throw new CasserMappingException("primary key columns are not supported in UserDefinedType for " + prop.getPropertyName() + " in entity " + entity);
|
throw new CasserMappingException("primary key columns are not supported in UserDefinedType for " + prop.getPropertyName() + " in entity " + entity);
|
||||||
}
|
}
|
||||||
|
|
||||||
Either<DataType,IdentityName> type = prop.getDataType();
|
prop.getDataType().addColumn(create, prop.getColumnName());
|
||||||
|
|
||||||
if (type.isLeft()) {
|
|
||||||
create.addColumn(prop.getColumnName().toCql(), type.getLeft());
|
|
||||||
}
|
|
||||||
else if (type.isRight()) {
|
|
||||||
UDTType udtType = SchemaBuilder.frozen(type.getRight().toCql());
|
|
||||||
create.addUDTColumn(prop.getColumnName().toCql(), udtType);
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
throwNoMapping(prop);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return create;
|
return create;
|
||||||
|
@ -126,75 +109,13 @@ public final class SchemaUtil {
|
||||||
Collections.sort(clusteringColumns,
|
Collections.sort(clusteringColumns,
|
||||||
OrdinalBasedPropertyComparator.INSTANCE);
|
OrdinalBasedPropertyComparator.INSTANCE);
|
||||||
|
|
||||||
for (CasserProperty prop : partitionKeys) {
|
partitionKeys.forEach(p -> p.getDataType().addColumn(create, p.getColumnName()));
|
||||||
|
clusteringColumns.forEach(p -> p.getDataType().addColumn(create, p.getColumnName()));
|
||||||
Either<DataType,IdentityName> type = prop.getDataType();
|
columns.forEach(p -> p.getDataType().addColumn(create, p.getColumnName()));
|
||||||
|
|
||||||
if (type.isRight()) {
|
|
||||||
throw new CasserMappingException("user defined type can not be a partition key for " + prop.getPropertyName() + " in " + prop.getEntity());
|
|
||||||
}
|
|
||||||
|
|
||||||
create.addPartitionKey(prop.getColumnName().toCql(), type.getLeft());
|
|
||||||
}
|
|
||||||
|
|
||||||
for (CasserProperty prop : clusteringColumns) {
|
|
||||||
|
|
||||||
Either<DataType,IdentityName> type = prop.getDataType();
|
|
||||||
|
|
||||||
if (type.isLeft()) {
|
|
||||||
create.addClusteringColumn(prop.getColumnName().toCql(), type.getLeft());
|
|
||||||
}
|
|
||||||
else if (type.isRight()) {
|
|
||||||
UDTType udtType = SchemaBuilder.frozen(type.getRight().toCql());
|
|
||||||
create.addUDTClusteringColumn(prop.getColumnName().toCql(), udtType);
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
throwNoMapping(prop);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
for (CasserProperty prop : columns) {
|
|
||||||
|
|
||||||
Either<DataType,IdentityName> type = prop.getDataType();
|
|
||||||
|
|
||||||
if (prop.isStatic()) {
|
|
||||||
|
|
||||||
if (type.isLeft()) {
|
|
||||||
create.addStaticColumn(prop.getColumnName().toCql(), type.getLeft());
|
|
||||||
}
|
|
||||||
else if (type.isRight()) {
|
|
||||||
UDTType udtType = SchemaBuilder.frozen(type.getRight().toCql());
|
|
||||||
create.addUDTStaticColumn(prop.getColumnName().toCql(), udtType);
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
throwNoMapping(prop);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
|
|
||||||
if (type.isLeft()) {
|
|
||||||
create.addColumn(prop.getColumnName().toCql(), type.getLeft());
|
|
||||||
}
|
|
||||||
else if (type.isRight()) {
|
|
||||||
UDTType udtType = SchemaBuilder.frozen(type.getRight().toCql());
|
|
||||||
create.addUDTColumn(prop.getColumnName().toCql(), udtType);
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
throwNoMapping(prop);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!clusteringColumns.isEmpty()) {
|
if (!clusteringColumns.isEmpty()) {
|
||||||
|
|
||||||
Options options = create.withOptions();
|
Options options = create.withOptions();
|
||||||
|
clusteringColumns.forEach(p -> options.clusteringOrder(p.getColumnName().toCql(), mapDirection(p.getOrdering())));
|
||||||
for (CasserProperty prop : clusteringColumns) {
|
|
||||||
options.clusteringOrder(prop.getColumnName().toCql(), mapDirection(prop.getOrdering()));
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return create;
|
return create;
|
||||||
|
@ -230,46 +151,11 @@ public final class SchemaUtil {
|
||||||
+ entity);
|
+ entity);
|
||||||
}
|
}
|
||||||
|
|
||||||
Either<DataType,IdentityName> type = prop.getDataType();
|
|
||||||
|
|
||||||
ColumnMetadata columnMetadata = tmd.getColumn(columnName);
|
ColumnMetadata columnMetadata = tmd.getColumn(columnName);
|
||||||
|
SchemaStatement stmt = prop.getDataType().alterColumn(alter, prop.getColumnName(), columnMetadata);
|
||||||
|
|
||||||
if (columnMetadata != null) {
|
if (stmt != null) {
|
||||||
|
result.add(stmt);
|
||||||
if (type.isLeft()) {
|
|
||||||
|
|
||||||
if (!type.getLeft().equals(columnMetadata.getType())) {
|
|
||||||
result.add(alter.alterColumn(prop.getColumnName().toCql()).type(type.getLeft()));
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
else if (type.isRight()) {
|
|
||||||
|
|
||||||
DataType metadataType = columnMetadata.getType();
|
|
||||||
if (metadataType.getName() == DataType.Name.UDT &&
|
|
||||||
metadataType instanceof UserType) {
|
|
||||||
|
|
||||||
UserType metadataUserType = (UserType) metadataType;
|
|
||||||
|
|
||||||
if (!type.getRight().equals(metadataUserType.getTypeName())) {
|
|
||||||
UDTType udtType = SchemaBuilder.frozen(type.getRight().toCql());
|
|
||||||
result.add(alter.alterColumn(prop.getColumnName().toCql()).udtType(udtType));
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
throw new CasserMappingException("expected UserType in metadata " + metadataType + " for " + prop.getPropertyName() + " in " + prop.getEntity());
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
else if (type.isLeft()) {
|
|
||||||
result.add(alter.addColumn(prop.getColumnName().toCql()).type(type.getLeft()));
|
|
||||||
}
|
|
||||||
else if (type.isRight()) {
|
|
||||||
UDTType udtType = SchemaBuilder.frozen(type.getRight().toCql());
|
|
||||||
result.add(alter.addColumn(prop.getColumnName().toCql()).udtType(udtType));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -20,17 +20,16 @@ import java.util.HashMap;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.Optional;
|
import java.util.Optional;
|
||||||
|
|
||||||
import com.datastax.driver.core.DataType;
|
|
||||||
import com.datastax.driver.core.UDTValue;
|
import com.datastax.driver.core.UDTValue;
|
||||||
import com.datastax.driver.core.UserType;
|
import com.datastax.driver.core.UserType;
|
||||||
import com.google.common.collect.HashMultimap;
|
import com.google.common.collect.HashMultimap;
|
||||||
import com.google.common.collect.Multimap;
|
import com.google.common.collect.Multimap;
|
||||||
import com.noorq.casser.mapping.CasserEntityType;
|
|
||||||
import com.noorq.casser.mapping.CasserEntity;
|
import com.noorq.casser.mapping.CasserEntity;
|
||||||
|
import com.noorq.casser.mapping.CasserEntityType;
|
||||||
import com.noorq.casser.mapping.CasserProperty;
|
import com.noorq.casser.mapping.CasserProperty;
|
||||||
import com.noorq.casser.mapping.IdentityName;
|
import com.noorq.casser.mapping.type.AbstractDataType;
|
||||||
|
import com.noorq.casser.mapping.type.UDTDataType;
|
||||||
import com.noorq.casser.support.CasserMappingException;
|
import com.noorq.casser.support.CasserMappingException;
|
||||||
import com.noorq.casser.support.Either;
|
|
||||||
|
|
||||||
public final class SessionRepositoryBuilder {
|
public final class SessionRepositoryBuilder {
|
||||||
|
|
||||||
|
@ -116,9 +115,9 @@ public final class SessionRepositoryBuilder {
|
||||||
|
|
||||||
for (CasserProperty prop : props) {
|
for (CasserProperty prop : props) {
|
||||||
|
|
||||||
Either<DataType, IdentityName> type = prop.getDataType();
|
AbstractDataType type = prop.getDataType();
|
||||||
|
|
||||||
if (type.isRight() && !UDTValue.class.isAssignableFrom(prop.getJavaType())) {
|
if (type instanceof UDTDataType && !UDTValue.class.isAssignableFrom(prop.getJavaType())) {
|
||||||
|
|
||||||
CasserEntity addedUserType = add(prop.getJavaType(), OPTIONAL_UDT);
|
CasserEntity addedUserType = add(prop.getJavaType(), OPTIONAL_UDT);
|
||||||
|
|
||||||
|
|
|
@ -21,16 +21,15 @@ import java.util.HashMap;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.Optional;
|
import java.util.Optional;
|
||||||
|
|
||||||
import com.datastax.driver.core.DataType;
|
|
||||||
import com.datastax.driver.core.UDTValue;
|
import com.datastax.driver.core.UDTValue;
|
||||||
import com.noorq.casser.core.Casser;
|
import com.noorq.casser.core.Casser;
|
||||||
import com.noorq.casser.mapping.CasserEntity;
|
import com.noorq.casser.mapping.CasserEntity;
|
||||||
import com.noorq.casser.mapping.CasserMappingEntity;
|
import com.noorq.casser.mapping.CasserMappingEntity;
|
||||||
import com.noorq.casser.mapping.CasserProperty;
|
import com.noorq.casser.mapping.CasserProperty;
|
||||||
import com.noorq.casser.mapping.IdentityName;
|
import com.noorq.casser.mapping.type.AbstractDataType;
|
||||||
|
import com.noorq.casser.mapping.type.UDTDataType;
|
||||||
import com.noorq.casser.support.CasserException;
|
import com.noorq.casser.support.CasserException;
|
||||||
import com.noorq.casser.support.DslPropertyException;
|
import com.noorq.casser.support.DslPropertyException;
|
||||||
import com.noorq.casser.support.Either;
|
|
||||||
|
|
||||||
public class DslInvocationHandler<E> implements InvocationHandler {
|
public class DslInvocationHandler<E> implements InvocationHandler {
|
||||||
|
|
||||||
|
@ -50,9 +49,9 @@ public class DslInvocationHandler<E> implements InvocationHandler {
|
||||||
|
|
||||||
map.put(prop.getGetterMethod(), prop);
|
map.put(prop.getGetterMethod(), prop);
|
||||||
|
|
||||||
Either<DataType, IdentityName> type = prop.getDataType();
|
AbstractDataType type = prop.getDataType();
|
||||||
|
|
||||||
if (type.isRight() && !UDTValue.class.isAssignableFrom(prop.getJavaType())) {
|
if (type instanceof UDTDataType && !UDTValue.class.isAssignableFrom(prop.getJavaType())) {
|
||||||
|
|
||||||
Object childDsl = Casser.dsl(prop.getJavaType(), classLoader,
|
Object childDsl = Casser.dsl(prop.getJavaType(), classLoader,
|
||||||
Optional.of(new CasserPropertyNode(prop, parent)));
|
Optional.of(new CasserPropertyNode(prop, parent)));
|
||||||
|
@ -83,9 +82,9 @@ public class DslInvocationHandler<E> implements InvocationHandler {
|
||||||
|
|
||||||
if (prop != null) {
|
if (prop != null) {
|
||||||
|
|
||||||
Either<DataType, IdentityName> type = prop.getDataType();
|
AbstractDataType type = prop.getDataType();
|
||||||
|
|
||||||
if (type.isRight()) {
|
if (type instanceof UDTDataType) {
|
||||||
|
|
||||||
Object childDsl = udtMap.get(method);
|
Object childDsl = udtMap.get(method);
|
||||||
|
|
||||||
|
|
|
@ -28,6 +28,7 @@ import java.util.UUID;
|
||||||
import java.util.function.Function;
|
import java.util.function.Function;
|
||||||
|
|
||||||
import com.datastax.driver.core.DataType;
|
import com.datastax.driver.core.DataType;
|
||||||
|
import com.datastax.driver.core.TupleValue;
|
||||||
import com.datastax.driver.core.UDTValue;
|
import com.datastax.driver.core.UDTValue;
|
||||||
import com.datastax.driver.core.UserType;
|
import com.datastax.driver.core.UserType;
|
||||||
import com.noorq.casser.core.SessionRepository;
|
import com.noorq.casser.core.SessionRepository;
|
||||||
|
@ -38,8 +39,10 @@ import com.noorq.casser.mapping.convert.StringToEnumConverter;
|
||||||
import com.noorq.casser.mapping.convert.TimeUUIDToDateConverter;
|
import com.noorq.casser.mapping.convert.TimeUUIDToDateConverter;
|
||||||
import com.noorq.casser.mapping.convert.TypedConverter;
|
import com.noorq.casser.mapping.convert.TypedConverter;
|
||||||
import com.noorq.casser.mapping.convert.UDTValueToEntityConverter;
|
import com.noorq.casser.mapping.convert.UDTValueToEntityConverter;
|
||||||
|
import com.noorq.casser.mapping.type.AbstractDataType;
|
||||||
|
import com.noorq.casser.mapping.type.DTDataType;
|
||||||
|
import com.noorq.casser.mapping.type.UDTDataType;
|
||||||
import com.noorq.casser.support.CasserMappingException;
|
import com.noorq.casser.support.CasserMappingException;
|
||||||
import com.noorq.casser.support.Either;
|
|
||||||
|
|
||||||
public final class CasserMappingProperty implements CasserProperty {
|
public final class CasserMappingProperty implements CasserProperty {
|
||||||
|
|
||||||
|
@ -53,8 +56,11 @@ public final class CasserMappingProperty implements CasserProperty {
|
||||||
private final boolean isStatic;
|
private final boolean isStatic;
|
||||||
private final KeyInformation keyInfo;
|
private final KeyInformation keyInfo;
|
||||||
|
|
||||||
|
private final ColumnType columnType;
|
||||||
|
|
||||||
|
private final Type genericJavaType;
|
||||||
private final Class<?> javaType;
|
private final Class<?> javaType;
|
||||||
private final Either<DataType, IdentityName> columnDataType;
|
private final AbstractDataType dataType;
|
||||||
|
|
||||||
private volatile Optional<Function<Object, Object>> readConverter = null;
|
private volatile Optional<Function<Object, Object>> readConverter = null;
|
||||||
private volatile Optional<Function<Object, Object>> writeConverter = null;
|
private volatile Optional<Function<Object, Object>> writeConverter = null;
|
||||||
|
@ -69,8 +75,11 @@ public final class CasserMappingProperty implements CasserProperty {
|
||||||
this.isStatic = MappingUtil.isStaticColumn(getter);
|
this.isStatic = MappingUtil.isStaticColumn(getter);
|
||||||
this.keyInfo = new KeyInformation(getter);
|
this.keyInfo = new KeyInformation(getter);
|
||||||
|
|
||||||
|
this.columnType = resolveColumnType(keyInfo, isStatic);
|
||||||
|
|
||||||
|
this.genericJavaType = getter.getGenericReturnType();
|
||||||
this.javaType = getter.getReturnType();
|
this.javaType = getter.getReturnType();
|
||||||
this.columnDataType = resolveColumnDataType(getter, this.javaType);
|
this.dataType = resolveAbstractDataType(getter, this.genericJavaType, this.javaType, this.columnType);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -81,12 +90,12 @@ public final class CasserMappingProperty implements CasserProperty {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Class<?> getJavaType() {
|
public Class<?> getJavaType() {
|
||||||
return javaType;
|
return (Class<?>) javaType;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Either<DataType, IdentityName> getDataType() {
|
public AbstractDataType getDataType() {
|
||||||
return columnDataType;
|
return dataType;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -146,9 +155,9 @@ public final class CasserMappingProperty implements CasserProperty {
|
||||||
|
|
||||||
private Function<Object, Object> resolveReadConverter(SessionRepository repository) {
|
private Function<Object, Object> resolveReadConverter(SessionRepository repository) {
|
||||||
|
|
||||||
Either<DataType, IdentityName> columnType = getDataType();
|
AbstractDataType abstractDataType = getDataType();
|
||||||
|
|
||||||
if (columnType.isRight()) {
|
if (abstractDataType instanceof UDTDataType) {
|
||||||
|
|
||||||
Class<Object> javaType = (Class<Object>) getJavaType();
|
Class<Object> javaType = (Class<Object>) getJavaType();
|
||||||
|
|
||||||
|
@ -162,7 +171,7 @@ public final class CasserMappingProperty implements CasserProperty {
|
||||||
new UDTValueToEntityConverter(javaType, repository));
|
new UDTValueToEntityConverter(javaType, repository));
|
||||||
|
|
||||||
}
|
}
|
||||||
else {
|
else if (abstractDataType instanceof DTDataType) {
|
||||||
|
|
||||||
Class<?> propertyType = getJavaType();
|
Class<?> propertyType = getJavaType();
|
||||||
|
|
||||||
|
@ -173,7 +182,7 @@ public final class CasserMappingProperty implements CasserProperty {
|
||||||
new StringToEnumConverter(propertyType));
|
new StringToEnumConverter(propertyType));
|
||||||
}
|
}
|
||||||
|
|
||||||
DataType dataType = columnType.getLeft();
|
DataType dataType = ((DTDataType) abstractDataType).getDataType();
|
||||||
|
|
||||||
if (dataType.getName() == DataType.Name.TIMEUUID && propertyType == Date.class) {
|
if (dataType.getName() == DataType.Name.TIMEUUID && propertyType == Date.class) {
|
||||||
return TypedConverter.create(
|
return TypedConverter.create(
|
||||||
|
@ -184,6 +193,8 @@ public final class CasserMappingProperty implements CasserProperty {
|
||||||
|
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -198,19 +209,21 @@ public final class CasserMappingProperty implements CasserProperty {
|
||||||
|
|
||||||
private Function<Object, Object> resolveWriteConverter(SessionRepository repository) {
|
private Function<Object, Object> resolveWriteConverter(SessionRepository repository) {
|
||||||
|
|
||||||
Either<DataType, IdentityName> columnType = getDataType();
|
AbstractDataType abstractDataType = getDataType();
|
||||||
|
|
||||||
if (columnType.isRight()) {
|
if (abstractDataType instanceof UDTDataType) {
|
||||||
|
|
||||||
if (UDTValue.class.isAssignableFrom(javaType)) {
|
UDTDataType udtDataType = (UDTDataType) abstractDataType;
|
||||||
|
|
||||||
|
if (isUDTValue(javaType)) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
Class<Object> javaType = (Class<Object>) getJavaType();
|
Class<Object> javaType = (Class<Object>) getJavaType();
|
||||||
|
|
||||||
UserType userType = repository.findUserType(columnType.getRight().getName());
|
UserType userType = repository.findUserType(udtDataType.getUdtName().getName());
|
||||||
if (userType == null) {
|
if (userType == null) {
|
||||||
throw new CasserMappingException("UserType not found for " + columnType.getRight() + " with type " + javaType);
|
throw new CasserMappingException("UserType not found for " + udtDataType.getUdtName() + " with type " + javaType);
|
||||||
}
|
}
|
||||||
return TypedConverter.create(
|
return TypedConverter.create(
|
||||||
javaType,
|
javaType,
|
||||||
|
@ -218,11 +231,11 @@ public final class CasserMappingProperty implements CasserProperty {
|
||||||
new EntityToUDTValueConverter(javaType, userType, repository));
|
new EntityToUDTValueConverter(javaType, userType, repository));
|
||||||
|
|
||||||
}
|
}
|
||||||
else {
|
else if (abstractDataType instanceof DTDataType) {
|
||||||
|
|
||||||
Class<?> propertyType = getJavaType();
|
Class<?> javaType = getJavaType();
|
||||||
|
|
||||||
if (Enum.class.isAssignableFrom(propertyType)) {
|
if (Enum.class.isAssignableFrom(javaType)) {
|
||||||
|
|
||||||
return TypedConverter.create(
|
return TypedConverter.create(
|
||||||
Enum.class,
|
Enum.class,
|
||||||
|
@ -231,9 +244,9 @@ public final class CasserMappingProperty implements CasserProperty {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
DataType dataType = columnType.getLeft();
|
DataType dataType = ((DTDataType) abstractDataType).getDataType();
|
||||||
|
|
||||||
if (dataType.getName() == DataType.Name.TIMEUUID && propertyType == Date.class) {
|
if (dataType.getName() == DataType.Name.TIMEUUID && javaType == Date.class) {
|
||||||
|
|
||||||
return TypedConverter.create(
|
return TypedConverter.create(
|
||||||
Date.class,
|
Date.class,
|
||||||
|
@ -243,19 +256,36 @@ public final class CasserMappingProperty implements CasserProperty {
|
||||||
|
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
private static Either<DataType, IdentityName> resolveColumnDataType(Method getter, Class<?> javaType) {
|
private static ColumnType resolveColumnType(KeyInformation keyInfo, boolean isStatic) {
|
||||||
|
if (isStatic) {
|
||||||
|
return ColumnType.STATIC_COLUMN;
|
||||||
|
}
|
||||||
|
else if (keyInfo.isPartitionKey()) {
|
||||||
|
return ColumnType.PARTITION_KEY;
|
||||||
|
}
|
||||||
|
else if (keyInfo.isClusteringColumn()) {
|
||||||
|
return ColumnType.CLUSTERING_COLUMN;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
return ColumnType.COLUMN;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
DataType dataType = resolveDataType(getter, javaType);
|
private static AbstractDataType resolveAbstractDataType(Method getter, Type genericJavaType, Class<?> javaType, ColumnType columnType) {
|
||||||
|
|
||||||
|
DataType dataType = resolveDataType(getter, genericJavaType, javaType);
|
||||||
if (dataType != null) {
|
if (dataType != null) {
|
||||||
return Either.left(dataType);
|
return new DTDataType(columnType, dataType);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
|
|
||||||
IdentityName udtName = null;
|
IdentityName udtName = null;
|
||||||
|
|
||||||
if (UDTValue.class.isAssignableFrom(javaType)) {
|
if (isUDTValue(javaType)) {
|
||||||
UserTypeName userTypeName = getter.getDeclaredAnnotation(UserTypeName.class);
|
UserTypeName userTypeName = getter.getDeclaredAnnotation(UserTypeName.class);
|
||||||
if (userTypeName == null) {
|
if (userTypeName == null) {
|
||||||
throw new CasserMappingException("absent UserTypeName annotation for " + getter);
|
throw new CasserMappingException("absent UserTypeName annotation for " + getter);
|
||||||
|
@ -264,26 +294,31 @@ public final class CasserMappingProperty implements CasserProperty {
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
udtName = MappingUtil.getUserDefinedTypeName(javaType, false);
|
udtName = MappingUtil.getUserDefinedTypeName(javaType, false);
|
||||||
}
|
|
||||||
|
|
||||||
return Either.right(udtName);
|
if (udtName == null) {
|
||||||
|
throw new CasserMappingException("unknown property type for " + getter);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private static DataType resolveDataType(Method getter, Class<?> javaType) {
|
return new UDTDataType(columnType, udtName);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
private static DataType resolveDataType(Method getter, Type genericJavaType, Class<?> javaType) {
|
||||||
|
|
||||||
DataTypeName annotation = getter.getDeclaredAnnotation(DataTypeName.class);
|
DataTypeName annotation = getter.getDeclaredAnnotation(DataTypeName.class);
|
||||||
if (annotation != null && annotation.value() != null) {
|
if (annotation != null && annotation.value() != null) {
|
||||||
return qualifyAnnotatedType(getter, annotation);
|
return qualifyAnnotatedType(getter, annotation);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (Enum.class.isAssignableFrom(javaType)) {
|
if (isEnum(javaType)) {
|
||||||
return DataType.text();
|
return DataType.text();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (isMap(javaType)) {
|
if (isMap(javaType)) {
|
||||||
Type[] args = getTypeParameters(javaType);
|
Type[] args = getTypeParameters(genericJavaType);
|
||||||
ensureTypeArguments(getter, args.length, 2);
|
ensureTypeArguments(getter, args.length, 2);
|
||||||
|
|
||||||
return DataType.map(autodetectPrimitiveType(getter, args[0]),
|
return DataType.map(autodetectPrimitiveType(getter, args[0]),
|
||||||
|
@ -291,14 +326,14 @@ public final class CasserMappingProperty implements CasserProperty {
|
||||||
}
|
}
|
||||||
|
|
||||||
if (isCollectionLike(javaType)) {
|
if (isCollectionLike(javaType)) {
|
||||||
Type[] args = getTypeParameters(javaType);
|
Type[] args = getTypeParameters(genericJavaType);
|
||||||
ensureTypeArguments(getter, args.length, 1);
|
ensureTypeArguments(getter, args.length, 1);
|
||||||
|
|
||||||
if (Set.class.isAssignableFrom(javaType)) {
|
if (isSet(javaType)) {
|
||||||
|
|
||||||
return DataType.set(autodetectPrimitiveType(getter, args[0]));
|
return DataType.set(autodetectPrimitiveType(getter, args[0]));
|
||||||
|
|
||||||
} else if (List.class.isAssignableFrom(javaType)) {
|
} else if (isList(javaType)) {
|
||||||
|
|
||||||
return DataType.list(autodetectPrimitiveType(getter, args[0]));
|
return DataType.list(autodetectPrimitiveType(getter, args[0]));
|
||||||
|
|
||||||
|
@ -345,12 +380,29 @@ public final class CasserMappingProperty implements CasserProperty {
|
||||||
return dataType;
|
return dataType;
|
||||||
}
|
}
|
||||||
|
|
||||||
static DataType autodetectPrimitiveType(Method getter, Type javaType) {
|
static DataType autodetectPrimitiveType(Method getter, Type type) {
|
||||||
DataType dataType = SimpleDataTypes.getDataTypeByJavaClass(javaType);
|
|
||||||
|
DataType dataType = null;
|
||||||
|
|
||||||
|
if (type instanceof Class<?>) {
|
||||||
|
Class<?> javaType = (Class<?>) type;
|
||||||
|
dataType = SimpleDataTypes.getDataTypeByJavaClass(javaType);
|
||||||
|
|
||||||
|
if (dataType == null) {
|
||||||
|
IdentityName udtName = MappingUtil.getUserDefinedTypeName(javaType, false);
|
||||||
|
|
||||||
|
if (udtName != null) {
|
||||||
|
//return SchemaBuilder.frozen(udtName.getName());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
if (dataType == null) {
|
if (dataType == null) {
|
||||||
throw new CasserMappingException(
|
throw new CasserMappingException(
|
||||||
"only primitive types are allowed inside collections for the property " + getter);
|
"unknown type inside collections for the property " + getter);
|
||||||
}
|
}
|
||||||
|
|
||||||
return dataType;
|
return dataType;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -365,24 +417,40 @@ public final class CasserMappingProperty implements CasserProperty {
|
||||||
return Map.class.isAssignableFrom(javaType);
|
return Map.class.isAssignableFrom(javaType);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static boolean isSet(Class<?> javaType) {
|
||||||
|
return Set.class.isAssignableFrom(javaType);
|
||||||
|
}
|
||||||
|
|
||||||
|
static boolean isList(Class<?> javaType) {
|
||||||
|
return List.class.isAssignableFrom(javaType);
|
||||||
|
}
|
||||||
|
|
||||||
|
static boolean isEnum(Class<?> javaType) {
|
||||||
|
return Enum.class.isAssignableFrom(javaType);
|
||||||
|
}
|
||||||
|
|
||||||
static boolean isCollectionLike(Class<?> javaType) {
|
static boolean isCollectionLike(Class<?> javaType) {
|
||||||
|
|
||||||
Class<?> rawType = javaType;
|
if (javaType.isArray() || Iterable.class.equals(javaType)) {
|
||||||
|
|
||||||
if (rawType.isArray() || Iterable.class.equals(rawType)) {
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
return Collection.class.isAssignableFrom(rawType);
|
return Collection.class.isAssignableFrom(javaType);
|
||||||
}
|
}
|
||||||
|
|
||||||
static Type[] getTypeParameters(Class<?> javaTypeAsClass) {
|
static boolean isUDTValue(Class<?> javaType) {
|
||||||
|
return UDTValue.class.isAssignableFrom(javaType);
|
||||||
|
}
|
||||||
|
|
||||||
Type javaType = (Type) javaTypeAsClass;
|
static boolean isTupleValue(Class<?> javaType) {
|
||||||
|
return TupleValue.class.isAssignableFrom(javaType);
|
||||||
|
}
|
||||||
|
|
||||||
if (javaType instanceof ParameterizedType) {
|
static Type[] getTypeParameters(Type genericJavaType) {
|
||||||
|
|
||||||
ParameterizedType type = (ParameterizedType) javaType;
|
if (genericJavaType instanceof ParameterizedType) {
|
||||||
|
|
||||||
|
ParameterizedType type = (ParameterizedType) genericJavaType;
|
||||||
|
|
||||||
return type.getActualTypeArguments();
|
return type.getActualTypeArguments();
|
||||||
}
|
}
|
||||||
|
|
|
@ -19,9 +19,8 @@ import java.lang.reflect.Method;
|
||||||
import java.util.Optional;
|
import java.util.Optional;
|
||||||
import java.util.function.Function;
|
import java.util.function.Function;
|
||||||
|
|
||||||
import com.datastax.driver.core.DataType;
|
|
||||||
import com.noorq.casser.core.SessionRepository;
|
import com.noorq.casser.core.SessionRepository;
|
||||||
import com.noorq.casser.support.Either;
|
import com.noorq.casser.mapping.type.AbstractDataType;
|
||||||
|
|
||||||
public interface CasserProperty {
|
public interface CasserProperty {
|
||||||
|
|
||||||
|
@ -37,7 +36,7 @@ public interface CasserProperty {
|
||||||
|
|
||||||
Class<?> getJavaType();
|
Class<?> getJavaType();
|
||||||
|
|
||||||
Either<DataType, IdentityName> getDataType();
|
AbstractDataType getDataType();
|
||||||
|
|
||||||
boolean isPartitionKey();
|
boolean isPartitionKey();
|
||||||
|
|
||||||
|
|
20
src/main/java/com/noorq/casser/mapping/ColumnType.java
Normal file
20
src/main/java/com/noorq/casser/mapping/ColumnType.java
Normal file
|
@ -0,0 +1,20 @@
|
||||||
|
/*
|
||||||
|
* Copyright (C) 2015 Noorq, Inc.
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
package com.noorq.casser.mapping;
|
||||||
|
|
||||||
|
public enum ColumnType {
|
||||||
|
PARTITION_KEY, CLUSTERING_COLUMN, STATIC_COLUMN, COLUMN;
|
||||||
|
}
|
|
@ -81,11 +81,8 @@ public class SimpleDataTypes {
|
||||||
return nameToDataTypeMap.get(name);
|
return nameToDataTypeMap.get(name);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static DataType getDataTypeByJavaClass(Type type) {
|
public static DataType getDataTypeByJavaClass(Class<?> javaType) {
|
||||||
|
return javaClassToDataTypeMap.get(javaType);
|
||||||
Class<?> javaClass = (Class<?>) type;
|
|
||||||
|
|
||||||
return javaClassToDataTypeMap.get(javaClass);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static DataType.Name[] getDataTypeNamesForArguments(Type[] arguments) {
|
public static DataType.Name[] getDataTypeNamesForArguments(Type[] arguments) {
|
||||||
|
|
|
@ -0,0 +1,55 @@
|
||||||
|
/*
|
||||||
|
* Copyright (C) 2015 Noorq, Inc.
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
package com.noorq.casser.mapping.type;
|
||||||
|
|
||||||
|
import com.datastax.driver.core.ColumnMetadata;
|
||||||
|
import com.datastax.driver.core.schemabuilder.Alter;
|
||||||
|
import com.datastax.driver.core.schemabuilder.Create;
|
||||||
|
import com.datastax.driver.core.schemabuilder.CreateType;
|
||||||
|
import com.datastax.driver.core.schemabuilder.SchemaStatement;
|
||||||
|
import com.noorq.casser.mapping.ColumnType;
|
||||||
|
import com.noorq.casser.mapping.IdentityName;
|
||||||
|
import com.noorq.casser.support.CasserMappingException;
|
||||||
|
|
||||||
|
public abstract class AbstractDataType {
|
||||||
|
|
||||||
|
public abstract void addColumn(Create create, IdentityName columnName);
|
||||||
|
|
||||||
|
public abstract void addColumn(CreateType create, IdentityName columnName);
|
||||||
|
|
||||||
|
public abstract SchemaStatement alterColumn(Alter alter, IdentityName columnName, ColumnMetadata columnMetadata);
|
||||||
|
|
||||||
|
final ColumnType columnType;
|
||||||
|
|
||||||
|
public AbstractDataType(ColumnType columnType) {
|
||||||
|
this.columnType = columnType;
|
||||||
|
}
|
||||||
|
|
||||||
|
public ColumnType getColumnType() {
|
||||||
|
return columnType;
|
||||||
|
}
|
||||||
|
|
||||||
|
void ensureSimpleColumn(IdentityName columnName) {
|
||||||
|
if (columnType != ColumnType.COLUMN) {
|
||||||
|
throwWrongColumnType(columnName);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void throwWrongColumnType(IdentityName columnName) {
|
||||||
|
throw new CasserMappingException("wrong column type " + columnType + " for UserDefinedType in columnName " + columnName);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
109
src/main/java/com/noorq/casser/mapping/type/DTDataType.java
Normal file
109
src/main/java/com/noorq/casser/mapping/type/DTDataType.java
Normal file
|
@ -0,0 +1,109 @@
|
||||||
|
/*
|
||||||
|
* Copyright (C) 2015 Noorq, Inc.
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
package com.noorq.casser.mapping.type;
|
||||||
|
|
||||||
|
import com.datastax.driver.core.ColumnMetadata;
|
||||||
|
import com.datastax.driver.core.DataType;
|
||||||
|
import com.datastax.driver.core.schemabuilder.Alter;
|
||||||
|
import com.datastax.driver.core.schemabuilder.Create;
|
||||||
|
import com.datastax.driver.core.schemabuilder.CreateType;
|
||||||
|
import com.datastax.driver.core.schemabuilder.SchemaStatement;
|
||||||
|
import com.noorq.casser.mapping.ColumnType;
|
||||||
|
import com.noorq.casser.mapping.IdentityName;
|
||||||
|
import com.noorq.casser.support.CasserMappingException;
|
||||||
|
|
||||||
|
public final class DTDataType extends AbstractDataType {
|
||||||
|
|
||||||
|
private final DataType dataType;
|
||||||
|
|
||||||
|
public DTDataType(ColumnType columnType, DataType dataType) {
|
||||||
|
super(columnType);
|
||||||
|
this.dataType = dataType;
|
||||||
|
}
|
||||||
|
|
||||||
|
public DataType getDataType() {
|
||||||
|
return dataType;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void addColumn(Create create, IdentityName columnName) {
|
||||||
|
|
||||||
|
switch(columnType) {
|
||||||
|
|
||||||
|
case PARTITION_KEY:
|
||||||
|
create.addPartitionKey(columnName.toCql(), dataType);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case CLUSTERING_COLUMN:
|
||||||
|
create.addClusteringColumn(columnName.toCql(), dataType);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case STATIC_COLUMN:
|
||||||
|
create.addStaticColumn(columnName.toCql(), dataType);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case COLUMN:
|
||||||
|
create.addColumn(columnName.toCql(), dataType);
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
throwWrongColumnType(columnName);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void addColumn(CreateType create, IdentityName columnName) {
|
||||||
|
|
||||||
|
if (columnType != ColumnType.COLUMN) {
|
||||||
|
throwWrongColumnType(columnName);
|
||||||
|
}
|
||||||
|
|
||||||
|
create.addColumn(columnName.toCql(), dataType);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public SchemaStatement alterColumn(Alter alter, IdentityName columnName, ColumnMetadata columnMetadata) {
|
||||||
|
|
||||||
|
if (columnMetadata != null) {
|
||||||
|
|
||||||
|
if (!dataType.equals(columnMetadata.getType())) {
|
||||||
|
ensureSimpleColumn(columnName);
|
||||||
|
|
||||||
|
return alter.alterColumn(columnName.toCql()).type(dataType);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
|
||||||
|
switch(columnType) {
|
||||||
|
|
||||||
|
case STATIC_COLUMN:
|
||||||
|
return alter.addStaticColumn(columnName.toCql()).type(dataType);
|
||||||
|
|
||||||
|
case COLUMN:
|
||||||
|
return alter.addColumn(columnName.toCql()).type(dataType);
|
||||||
|
|
||||||
|
default:
|
||||||
|
throw new CasserMappingException("unable to alter " + columnType + " column " + columnName);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,63 @@
|
||||||
|
/*
|
||||||
|
* Copyright (C) 2015 Noorq, Inc.
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
package com.noorq.casser.mapping.type;
|
||||||
|
|
||||||
|
import com.datastax.driver.core.ColumnMetadata;
|
||||||
|
import com.datastax.driver.core.DataType;
|
||||||
|
import com.datastax.driver.core.schemabuilder.Alter;
|
||||||
|
import com.datastax.driver.core.schemabuilder.Create;
|
||||||
|
import com.datastax.driver.core.schemabuilder.CreateType;
|
||||||
|
import com.datastax.driver.core.schemabuilder.SchemaBuilder;
|
||||||
|
import com.datastax.driver.core.schemabuilder.SchemaStatement;
|
||||||
|
import com.datastax.driver.core.schemabuilder.UDTType;
|
||||||
|
import com.noorq.casser.mapping.ColumnType;
|
||||||
|
import com.noorq.casser.mapping.IdentityName;
|
||||||
|
import com.noorq.casser.support.CasserMappingException;
|
||||||
|
|
||||||
|
public final class DTKeyUTDValueMapDataType extends AbstractDataType {
|
||||||
|
|
||||||
|
private final DataType keyType;
|
||||||
|
private final IdentityName valueType;
|
||||||
|
|
||||||
|
public DTKeyUTDValueMapDataType(ColumnType columnType, DataType keyType, IdentityName valueType) {
|
||||||
|
super(columnType);
|
||||||
|
this.keyType = keyType;
|
||||||
|
this.valueType = valueType;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void addColumn(Create create, IdentityName columnName) {
|
||||||
|
ensureSimpleColumn(columnName);
|
||||||
|
|
||||||
|
UDTType valueUdtType = SchemaBuilder.frozen(valueType.toCql());
|
||||||
|
create.addUDTMapColumn(columnName.toCql(), keyType, valueUdtType);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void addColumn(CreateType create, IdentityName columnName) {
|
||||||
|
ensureSimpleColumn(columnName);
|
||||||
|
|
||||||
|
UDTType valueUdtType = SchemaBuilder.frozen(valueType.toCql());
|
||||||
|
create.addUDTMapColumn(columnName.toCql(), keyType, valueUdtType);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public SchemaStatement alterColumn(Alter alter, IdentityName columnName,
|
||||||
|
ColumnMetadata columnMetadata) {
|
||||||
|
throw new CasserMappingException("alter of UDTMap column is not possible now for " + columnName);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
123
src/main/java/com/noorq/casser/mapping/type/UDTDataType.java
Normal file
123
src/main/java/com/noorq/casser/mapping/type/UDTDataType.java
Normal file
|
@ -0,0 +1,123 @@
|
||||||
|
/*
|
||||||
|
* Copyright (C) 2015 Noorq, Inc.
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
package com.noorq.casser.mapping.type;
|
||||||
|
|
||||||
|
import com.datastax.driver.core.ColumnMetadata;
|
||||||
|
import com.datastax.driver.core.DataType;
|
||||||
|
import com.datastax.driver.core.UserType;
|
||||||
|
import com.datastax.driver.core.schemabuilder.Alter;
|
||||||
|
import com.datastax.driver.core.schemabuilder.Create;
|
||||||
|
import com.datastax.driver.core.schemabuilder.CreateType;
|
||||||
|
import com.datastax.driver.core.schemabuilder.SchemaBuilder;
|
||||||
|
import com.datastax.driver.core.schemabuilder.SchemaStatement;
|
||||||
|
import com.datastax.driver.core.schemabuilder.UDTType;
|
||||||
|
import com.noorq.casser.mapping.ColumnType;
|
||||||
|
import com.noorq.casser.mapping.IdentityName;
|
||||||
|
|
||||||
|
public final class UDTDataType extends AbstractDataType {
|
||||||
|
|
||||||
|
private final IdentityName udtName;
|
||||||
|
|
||||||
|
public UDTDataType(ColumnType columnType, IdentityName udtName) {
|
||||||
|
super(columnType);
|
||||||
|
this.udtName = udtName;
|
||||||
|
}
|
||||||
|
|
||||||
|
public IdentityName getUdtName() {
|
||||||
|
return udtName;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void addColumn(Create create, IdentityName columnName) {
|
||||||
|
|
||||||
|
UDTType udtType = SchemaBuilder.frozen(udtName.toCql());
|
||||||
|
|
||||||
|
switch(columnType) {
|
||||||
|
|
||||||
|
case PARTITION_KEY:
|
||||||
|
create.addUDTPartitionKey(columnName.toCql(), udtType);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case CLUSTERING_COLUMN:
|
||||||
|
create.addUDTClusteringColumn(columnName.toCql(), udtType);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case STATIC_COLUMN:
|
||||||
|
create.addUDTStaticColumn(columnName.toCql(), udtType);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case COLUMN:
|
||||||
|
create.addUDTColumn(columnName.toCql(), udtType);
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
throwWrongColumnType(columnName);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void addColumn(CreateType create, IdentityName columnName) {
|
||||||
|
ensureSimpleColumn(columnName);
|
||||||
|
|
||||||
|
UDTType udtType = SchemaBuilder.frozen(udtName.toCql());
|
||||||
|
create.addUDTColumn(columnName.toCql(), udtType);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public SchemaStatement alterColumn(Alter alter, IdentityName columnName,
|
||||||
|
ColumnMetadata columnMetadata) {
|
||||||
|
|
||||||
|
ensureSimpleColumn(columnName);
|
||||||
|
|
||||||
|
if (columnMetadata != null) {
|
||||||
|
|
||||||
|
DataType metadataType = columnMetadata.getType();
|
||||||
|
if (metadataType.getName() == DataType.Name.UDT &&
|
||||||
|
metadataType instanceof UserType) {
|
||||||
|
|
||||||
|
UserType metadataUserType = (UserType) metadataType;
|
||||||
|
|
||||||
|
if (!udtName.getName().equals(metadataUserType.getTypeName())) {
|
||||||
|
|
||||||
|
UDTType udtType = SchemaBuilder.frozen(udtName.toCql());
|
||||||
|
return alter.alterColumn(columnName.toCql()).udtType(udtType);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
|
||||||
|
UDTType udtType = SchemaBuilder.frozen(udtName.toCql());
|
||||||
|
return alter.alterColumn(columnName.toCql()).udtType(udtType);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
|
||||||
|
UDTType udtType = SchemaBuilder.frozen(udtName.toCql());
|
||||||
|
return alter.addColumn(columnName.toCql()).udtType(udtType);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,63 @@
|
||||||
|
/*
|
||||||
|
* Copyright (C) 2015 Noorq, Inc.
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
package com.noorq.casser.mapping.type;
|
||||||
|
|
||||||
|
import com.datastax.driver.core.ColumnMetadata;
|
||||||
|
import com.datastax.driver.core.DataType;
|
||||||
|
import com.datastax.driver.core.schemabuilder.Alter;
|
||||||
|
import com.datastax.driver.core.schemabuilder.Create;
|
||||||
|
import com.datastax.driver.core.schemabuilder.CreateType;
|
||||||
|
import com.datastax.driver.core.schemabuilder.SchemaBuilder;
|
||||||
|
import com.datastax.driver.core.schemabuilder.SchemaStatement;
|
||||||
|
import com.datastax.driver.core.schemabuilder.UDTType;
|
||||||
|
import com.noorq.casser.mapping.ColumnType;
|
||||||
|
import com.noorq.casser.mapping.IdentityName;
|
||||||
|
import com.noorq.casser.support.CasserMappingException;
|
||||||
|
|
||||||
|
public final class UDTKeyDTValueMapDataType extends AbstractDataType {
|
||||||
|
|
||||||
|
private final IdentityName keyType;
|
||||||
|
private final DataType valueType;
|
||||||
|
|
||||||
|
public UDTKeyDTValueMapDataType(ColumnType columnType, IdentityName keyType, DataType valueType) {
|
||||||
|
super(columnType);
|
||||||
|
this.keyType = keyType;
|
||||||
|
this.valueType = valueType;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void addColumn(Create create, IdentityName columnName) {
|
||||||
|
ensureSimpleColumn(columnName);
|
||||||
|
|
||||||
|
UDTType keyUdtType = SchemaBuilder.frozen(keyType.toCql());
|
||||||
|
create.addUDTMapColumn(columnName.toCql(), keyUdtType, valueType);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void addColumn(CreateType create, IdentityName columnName) {
|
||||||
|
ensureSimpleColumn(columnName);
|
||||||
|
|
||||||
|
UDTType keyUdtType = SchemaBuilder.frozen(keyType.toCql());
|
||||||
|
create.addUDTMapColumn(columnName.toCql(), keyUdtType, valueType);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public SchemaStatement alterColumn(Alter alter, IdentityName columnName,
|
||||||
|
ColumnMetadata columnMetadata) {
|
||||||
|
throw new CasserMappingException("alter of UDTMap column is not possible now for " + columnName);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,64 @@
|
||||||
|
/*
|
||||||
|
* Copyright (C) 2015 Noorq, Inc.
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
package com.noorq.casser.mapping.type;
|
||||||
|
|
||||||
|
import com.datastax.driver.core.ColumnMetadata;
|
||||||
|
import com.datastax.driver.core.schemabuilder.Alter;
|
||||||
|
import com.datastax.driver.core.schemabuilder.Create;
|
||||||
|
import com.datastax.driver.core.schemabuilder.CreateType;
|
||||||
|
import com.datastax.driver.core.schemabuilder.SchemaBuilder;
|
||||||
|
import com.datastax.driver.core.schemabuilder.SchemaStatement;
|
||||||
|
import com.datastax.driver.core.schemabuilder.UDTType;
|
||||||
|
import com.noorq.casser.mapping.ColumnType;
|
||||||
|
import com.noorq.casser.mapping.IdentityName;
|
||||||
|
import com.noorq.casser.support.CasserMappingException;
|
||||||
|
|
||||||
|
public final class UDTKeyUTDValueMapDataType extends AbstractDataType {
|
||||||
|
|
||||||
|
private final IdentityName keyType;
|
||||||
|
private final IdentityName valueType;
|
||||||
|
|
||||||
|
public UDTKeyUTDValueMapDataType(ColumnType columnType, IdentityName keyType, IdentityName valueType) {
|
||||||
|
super(columnType);
|
||||||
|
this.keyType = keyType;
|
||||||
|
this.valueType = valueType;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void addColumn(Create create, IdentityName columnName) {
|
||||||
|
ensureSimpleColumn(columnName);
|
||||||
|
|
||||||
|
UDTType keyUdtType = SchemaBuilder.frozen(keyType.toCql());
|
||||||
|
UDTType valueUdtType = SchemaBuilder.frozen(valueType.toCql());
|
||||||
|
create.addUDTMapColumn(columnName.toCql(), keyUdtType, valueUdtType);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void addColumn(CreateType create, IdentityName columnName) {
|
||||||
|
ensureSimpleColumn(columnName);
|
||||||
|
|
||||||
|
UDTType keyUdtType = SchemaBuilder.frozen(keyType.toCql());
|
||||||
|
UDTType valueUdtType = SchemaBuilder.frozen(valueType.toCql());
|
||||||
|
create.addUDTMapColumn(columnName.toCql(), keyUdtType, valueUdtType);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public SchemaStatement alterColumn(Alter alter, IdentityName columnName,
|
||||||
|
ColumnMetadata columnMetadata) {
|
||||||
|
throw new CasserMappingException("alter of UDTMap column is not possible now for " + columnName);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,60 @@
|
||||||
|
/*
|
||||||
|
* Copyright (C) 2015 Noorq, Inc.
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
package com.noorq.casser.mapping.type;
|
||||||
|
|
||||||
|
import com.datastax.driver.core.ColumnMetadata;
|
||||||
|
import com.datastax.driver.core.schemabuilder.Alter;
|
||||||
|
import com.datastax.driver.core.schemabuilder.Create;
|
||||||
|
import com.datastax.driver.core.schemabuilder.CreateType;
|
||||||
|
import com.datastax.driver.core.schemabuilder.SchemaBuilder;
|
||||||
|
import com.datastax.driver.core.schemabuilder.SchemaStatement;
|
||||||
|
import com.datastax.driver.core.schemabuilder.UDTType;
|
||||||
|
import com.noorq.casser.mapping.ColumnType;
|
||||||
|
import com.noorq.casser.mapping.IdentityName;
|
||||||
|
import com.noorq.casser.support.CasserMappingException;
|
||||||
|
|
||||||
|
public final class UDTListDataType extends AbstractDataType {
|
||||||
|
|
||||||
|
private final IdentityName udtName;
|
||||||
|
|
||||||
|
public UDTListDataType(ColumnType columnType, IdentityName udtName) {
|
||||||
|
super(columnType);
|
||||||
|
this.udtName = udtName;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void addColumn(Create create, IdentityName columnName) {
|
||||||
|
ensureSimpleColumn(columnName);
|
||||||
|
|
||||||
|
UDTType udtType = SchemaBuilder.frozen(udtName.toCql());
|
||||||
|
create.addUDTListColumn(columnName.toCql(), udtType);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void addColumn(CreateType create, IdentityName columnName) {
|
||||||
|
ensureSimpleColumn(columnName);
|
||||||
|
|
||||||
|
UDTType udtType = SchemaBuilder.frozen(udtName.toCql());
|
||||||
|
create.addUDTListColumn(columnName.toCql(), udtType);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public SchemaStatement alterColumn(Alter alter, IdentityName columnName,
|
||||||
|
ColumnMetadata columnMetadata) {
|
||||||
|
throw new CasserMappingException("alter of UDTList column is not possible now for " + columnName);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,60 @@
|
||||||
|
/*
|
||||||
|
* Copyright (C) 2015 Noorq, Inc.
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
package com.noorq.casser.mapping.type;
|
||||||
|
|
||||||
|
import com.datastax.driver.core.ColumnMetadata;
|
||||||
|
import com.datastax.driver.core.schemabuilder.Alter;
|
||||||
|
import com.datastax.driver.core.schemabuilder.Create;
|
||||||
|
import com.datastax.driver.core.schemabuilder.CreateType;
|
||||||
|
import com.datastax.driver.core.schemabuilder.SchemaBuilder;
|
||||||
|
import com.datastax.driver.core.schemabuilder.SchemaStatement;
|
||||||
|
import com.datastax.driver.core.schemabuilder.UDTType;
|
||||||
|
import com.noorq.casser.mapping.ColumnType;
|
||||||
|
import com.noorq.casser.mapping.IdentityName;
|
||||||
|
import com.noorq.casser.support.CasserMappingException;
|
||||||
|
|
||||||
|
public final class UDTSetDataType extends AbstractDataType {
|
||||||
|
|
||||||
|
private final IdentityName udtName;
|
||||||
|
|
||||||
|
public UDTSetDataType(ColumnType columnType, IdentityName udtName) {
|
||||||
|
super(columnType);
|
||||||
|
this.udtName = udtName;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void addColumn(Create create, IdentityName columnName) {
|
||||||
|
ensureSimpleColumn(columnName);
|
||||||
|
|
||||||
|
UDTType udtType = SchemaBuilder.frozen(udtName.toCql());
|
||||||
|
create.addUDTSetColumn(columnName.toCql(), udtType);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void addColumn(CreateType create, IdentityName columnName) {
|
||||||
|
ensureSimpleColumn(columnName);
|
||||||
|
|
||||||
|
UDTType udtType = SchemaBuilder.frozen(udtName.toCql());
|
||||||
|
create.addUDTSetColumn(columnName.toCql(), udtType);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public SchemaStatement alterColumn(Alter alter, IdentityName columnName,
|
||||||
|
ColumnMetadata columnMetadata) {
|
||||||
|
throw new CasserMappingException("alter of UDTSet column is not possible now for " + columnName);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -49,6 +49,10 @@ public abstract class AbstractEmbeddedCassandraTest {
|
||||||
return keyspace;
|
return keyspace;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static void setKeep(boolean enable) {
|
||||||
|
keep = enable;
|
||||||
|
}
|
||||||
|
|
||||||
@BeforeClass
|
@BeforeClass
|
||||||
public static void before() throws Exception {
|
public static void before() throws Exception {
|
||||||
EmbeddedCassandraServerHelper.startEmbeddedCassandra(BuildProperties.getCassandraConfig());
|
EmbeddedCassandraServerHelper.startEmbeddedCassandra(BuildProperties.getCassandraConfig());
|
||||||
|
|
|
@ -1,3 +1,18 @@
|
||||||
|
/*
|
||||||
|
* Copyright (C) 2015 Noorq, Inc.
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
package com.noorq.casser.test.integration.core.collection;
|
package com.noorq.casser.test.integration.core.collection;
|
||||||
|
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
|
|
|
@ -1,3 +1,18 @@
|
||||||
|
/*
|
||||||
|
* Copyright (C) 2015 Noorq, Inc.
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
package com.noorq.casser.test.integration.core.collection;
|
package com.noorq.casser.test.integration.core.collection;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
|
@ -0,0 +1,27 @@
|
||||||
|
/*
|
||||||
|
* Copyright (C) 2015 Noorq, Inc.
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
package com.noorq.casser.test.integration.core.udtcollection;
|
||||||
|
|
||||||
|
import com.noorq.casser.mapping.UserDefinedType;
|
||||||
|
|
||||||
|
@UserDefinedType
|
||||||
|
public interface Author {
|
||||||
|
|
||||||
|
String name();
|
||||||
|
|
||||||
|
String city();
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,31 @@
|
||||||
|
/*
|
||||||
|
* Copyright (C) 2015 Noorq, Inc.
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
package com.noorq.casser.test.integration.core.udtcollection;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import com.noorq.casser.mapping.PartitionKey;
|
||||||
|
import com.noorq.casser.mapping.Table;
|
||||||
|
|
||||||
|
@Table
|
||||||
|
public interface Book {
|
||||||
|
|
||||||
|
@PartitionKey
|
||||||
|
int id();
|
||||||
|
|
||||||
|
List<Author> authors();
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,75 @@
|
||||||
|
/*
|
||||||
|
* Copyright (C) 2015 Noorq, Inc.
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
package com.noorq.casser.test.integration.core.udtcollection;
|
||||||
|
|
||||||
|
import org.junit.BeforeClass;
|
||||||
|
import org.junit.Test;
|
||||||
|
|
||||||
|
import com.datastax.driver.core.DataType;
|
||||||
|
import com.datastax.driver.core.Session;
|
||||||
|
import com.datastax.driver.core.schemabuilder.Create;
|
||||||
|
import com.datastax.driver.core.schemabuilder.CreateType;
|
||||||
|
import com.datastax.driver.core.schemabuilder.SchemaBuilder;
|
||||||
|
import com.noorq.casser.core.Casser;
|
||||||
|
import com.noorq.casser.core.CasserSession;
|
||||||
|
import com.noorq.casser.test.integration.build.AbstractEmbeddedCassandraTest;
|
||||||
|
|
||||||
|
public class UDTCollectionTest extends AbstractEmbeddedCassandraTest {
|
||||||
|
|
||||||
|
//static Book book = Casser.dsl(Book.class);
|
||||||
|
|
||||||
|
static CasserSession csession;
|
||||||
|
|
||||||
|
@BeforeClass
|
||||||
|
public static void beforeTest() {
|
||||||
|
//csession = Casser.init(getSession()).showCql().add(book).autoCreateDrop().get();
|
||||||
|
|
||||||
|
/*
|
||||||
|
Session session = getSession();
|
||||||
|
|
||||||
|
|
||||||
|
CreateType ct = SchemaBuilder.createType("address");
|
||||||
|
ct.addColumn("street", DataType.text());
|
||||||
|
ct.addColumn("city", DataType.text());
|
||||||
|
ct.addColumn("zip_code", DataType.cint());
|
||||||
|
ct.addColumn("phones", DataType.set(DataType.text()));
|
||||||
|
String cql = ct.build();
|
||||||
|
|
||||||
|
System.out.println(cql);
|
||||||
|
|
||||||
|
session.execute(cql);
|
||||||
|
|
||||||
|
Create create = SchemaBuilder.createTable("users");
|
||||||
|
|
||||||
|
create.addPartitionKey("id", DataType.uuid());
|
||||||
|
create.addUDTMapColumn("addresses", DataType.text(), SchemaBuilder.frozen("address"));
|
||||||
|
|
||||||
|
cql = create.buildInternal();
|
||||||
|
|
||||||
|
System.out.println(cql);
|
||||||
|
*/
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void test() {
|
||||||
|
|
||||||
|
//System.out.println(book);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
Loading…
Reference in a new issue