package cassandra.cql.query; import cassandra.cql.Consistency; import cassandra.cql.PagingState; import cassandra.cql.RoutingKey; import cassandra.retry.RetryPolicy; import cassandra.routing.RoutingPolicy; import java.math.BigDecimal; import java.math.BigInteger; import java.net.InetAddress; import java.nio.ByteBuffer; import java.util.*; public abstract class Query<T extends Query<T>> { public static Truncate truncate(String table) { return new Truncate(null, table); } public static Truncate truncate(String keyspace, String table) { return new Truncate(keyspace, table); } public static Select.Selection select() { return new Select.Selection.Builder(); } public static Select.Builder select(String... columns) { if (columns == null) { throw new NullPointerException("columns"); } Select.Selection.Builder builder = new Select.Selection.Builder(); for (String column : columns) { builder.column(column); } return builder; } public static Insert insert(String table) { return new Insert(null, table); } public static Insert insert(String keyspace, String table) { return new Insert(keyspace, table); } public static Update update(String table) { return new Update(null, table); } public static Update update(String keyspace, String table) { return new Update(keyspace, table); } public static Delete.Selection delete() { return new Delete.Selection(); } public static Delete.Builder delete(String... columns) { if (columns == null) { throw new NullPointerException("columns"); } Delete.Selection builder = new Delete.Selection(); for (String column : columns) { builder.column(column); } return builder; } public static Batch batch() { return new Batch(); } public static Batch unloggedBatch() { return new Batch().unlogged(); } public static Clause.Equal eq(String name, Object value) { return new Clause.Equal(name, value); } public static Clause.LessThan lt(String name, Object value) { return new Clause.LessThan(name, value); } public static Clause.LessThanEquals lte(String name, Object value) { return new Clause.LessThanEquals(name, value); } public static Clause.GreaterThan gt(String name, Object value) { return new Clause.GreaterThan(name, value); } public static Clause.GreaterThanEquals gte(String name, Object value) { return new Clause.GreaterThanEquals(name, value); } public static Clause.In in(String name, Object... values) { return new Clause.In(name, values); } public static Assignment.Increment inc(String name) { return new Assignment.Increment(name, 1L); } public static Assignment.Increment inc(String name, long value) { return new Assignment.Increment(name, value); } public static Assignment.Decrement dec(String name) { return new Assignment.Decrement(name, 1L); } public static Assignment.Decrement dec(String name, long value) { return new Assignment.Decrement(name, value); } public static Assignment.Set set(String name, Object value) { return new Assignment.Set(name, value); } public static Assignment.ListSet set(String name, int index, Object value) { return new Assignment.ListSet(name, index, value); } public static Assignment.CollectionAdd addFirst(String name, Object value) { if (value instanceof List) { return addFirst(name, (List<?>)value); } else { return addFirst(name, Collections.singletonList(value)); } } public static Assignment.CollectionAdd addFirst(String name, List<?> value) { return new Assignment.CollectionAdd(name, value, true); } public static Assignment.CollectionAdd addLast(String name, Object value) { if (value instanceof List) { return addLast(name, (List<?>)value); } else { return addLast(name, Collections.singletonList(value)); } } public static Assignment.CollectionAdd addLast(String name, List<?> value) { return new Assignment.CollectionAdd(name, value, false); } public static Assignment.CollectionRemove removeListElement(String name, Object value) { if (value instanceof List) { return removeAll(name, (List<?>)value); } else { return removeAll(name, Collections.singletonList(value)); } } public static Assignment.CollectionRemove removeAll(String name, List<?> value) { return new Assignment.CollectionRemove(name, value); } public static Assignment.CollectionAdd add(String name, Object value) { if (value instanceof Set) { return add(name, (Set<?>)value); } else { return add(name, Collections.singleton(value)); } } public static Assignment.CollectionAdd add(String name, Set<?> value) { return new Assignment.CollectionAdd(name, value, false); } public static Assignment.CollectionRemove removeSetElement(String name, Object value) { if (value instanceof Set) { return removeAll(name, (Set<?>)value); } else { return removeAll(name, Collections.singleton(value)); } } public static Assignment.CollectionRemove removeAll(String name, Set<?> value) { return new Assignment.CollectionRemove(name, value); } public static Assignment.MapPut put(String name, Object key, Object value) { return new Assignment.MapPut(name, key, value); } public static Assignment.MapPutAll putAll(String name, Map<?, ?> value) { return new Assignment.MapPutAll(name, value); } public static Clause.Using ttl(int value) { return using("TTL", value); } public static Clause.Using timestamp(long value) { return using("TIMESTAMP", value); } public static Clause.Using using(String name, Object value) { return new Clause.Using(name, value); } public static Function token(Object value) { return func("token", value); } public static Function now() { return func("now"); } public static Function minTimeuuid(String value) { return func("minTimeuuid", value); } public static Function maxTimeuuid(String value) { return func("maxTimeuuid", value); } public static Function dateOf(UUID value) { return func("dateOf", value); } public static Function unixTimestampOf(UUID value) { return func("unixTimestampOf", value); } public static Function blobAsAscii(ByteBuffer value) { return func("blobAsAscii", value); } public static Function blobAsBigint(ByteBuffer value) { return func("blobAsBigint", value); } public static Function blobAsBoolean(ByteBuffer value) { return func("blobAsBoolean", value); } public static Function blobAsCounter(ByteBuffer value) { return func("blobAsCounter", value); } public static Function blobAsDecimal(ByteBuffer value) { return func("blobAsDecimal", value); } public static Function blobAsDouble(ByteBuffer value) { return func("blobAsDouble", value); } public static Function blobAsFloat(ByteBuffer value) { return func("blobAsFloat", value); } public static Function blobAsInet(ByteBuffer value) { return func("blobAsInet", value); } public static Function blobAsInt(ByteBuffer value) { return func("blobAsInt", value); } public static Function blobAsText(ByteBuffer value) { return func("blobAsText", value); } public static Function blobAsTimestamp(ByteBuffer value) { return func("blobAsTimestamp", value); } public static Function blobAsUuid(ByteBuffer value) { return func("blobAsUuid", value); } public static Function blobAsVarchar(ByteBuffer value) { return func("blobAsVarchar", value); } public static Function blobAsVarint(ByteBuffer value) { return func("blobAsVarint", value); } public static Function blobAsTimeUuid(ByteBuffer value) { return func("blobAsTimeUuid", value); } public static Function asciiAsBlob(String value) { return func("asciiAsBlob", value); } public static Function bigintAsBlob(long value) { return func("bigintAsBlob", value); } public static Function booleanAsBlob(boolean value) { return func("booleanAsBlob", value); } public static Function counterAsBlob(long value) { return func("counterAsBlob", value); } public static Function decimalAsBlob(BigDecimal value) { return func("decimalAsBlob", value); } public static Function doubleAsBlob(double value) { return func("doubleAsBlob", value); } public static Function floatAsBlob(float value) { return func("floatAsBlob", value); } public static Function inetAsBlob(InetAddress value) { return func("inetAsBlob", value); } public static Function intAsBlob(int value) { return func("intAsBlob", value); } public static Function textAsBlob(String value) { return func("textAsBlob", value); } public static Function timestampAsBlob(Date value) { return func("timestampAsBlob", value); } public static Function uuidAsBlob(UUID value) { return func("uuidAsBlob", value); } public static Function varcharAsBlob(String value) { return func("varcharAsBlob", value); } public static Function varintAsBlob(BigInteger value) { return func("varintAsBlob", value); } public static Function timeUuidAsBlob(UUID value) { return func("timeUuidAsBlob", value); } public static Function func(String name, Object... parameters) { return new Function(name, parameters); } public static Order asc(String name) { return new Order.Ascending(name); } public static Order desc(String name) { return new Order.Descending(name); } protected String keyspace, table; protected int pageSizeLimit; protected PagingState pagingState; protected RoutingKey routingKey; protected RoutingPolicy routingPolicy; protected RetryPolicy retryPolicy; protected Consistency consistency, serialConsistency; protected boolean prepared = true; protected boolean tracing; public boolean hasKeyspace() { return keyspace != null && !keyspace.isEmpty(); } public String keyspace() { return keyspace; } public boolean hasTable() { return table != null && !table.isEmpty(); } public String table() { return table; } public int pageSizeLimit() { return pageSizeLimit; } @SuppressWarnings("unchecked") public T pageSizeLimit(int pageSizeLimit) { if (pageSizeLimit <= 0) { throw new IllegalArgumentException(String.format("pageSizeLimit: %d (expected: > 0)", pageSizeLimit)); } this.pageSizeLimit = pageSizeLimit; return (T)this; } public boolean hasPagingState() { return pagingState != null; } public PagingState pagingState() { return pagingState; } public RoutingKey routingKey() { return routingKey; } @SuppressWarnings("unchecked") public T routingKey(RoutingKey routingKey) { this.routingKey = routingKey; return (T)this; } public RoutingPolicy routingPolicy() { return routingPolicy; } @SuppressWarnings("unchecked") public T routingPolicy(RoutingPolicy routingPolicy) { this.routingPolicy = routingPolicy; return (T)this; } public RetryPolicy retryPolicy() { return retryPolicy; } @SuppressWarnings("unchecked") public T retryPolicy(RetryPolicy retryPolicy) { this.retryPolicy = retryPolicy; return (T)this; } public Consistency consistency() { return consistency; } @SuppressWarnings("unchecked") public T consistency(Consistency consistency) { this.consistency = consistency; return (T)this; } public Consistency serialConsistency() { return serialConsistency; } @SuppressWarnings("unchecked") public T serialConsistency(Consistency serialConsistency) { this.serialConsistency = serialConsistency; return (T)this; } public boolean isPrepared() { return prepared; } @SuppressWarnings("unchecked") public T unprepared() { prepared = false; return (T)this; } public boolean isTracing() { return tracing; } @SuppressWarnings("unchecked") public T tracing() { tracing = true; return (T)this; } public abstract void accept(QueryVisitor visitor); }