blob: 3b6641a1f60a637802d2869b43aecad3cc326e45 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with this
* work for additional information regarding copyright ownership. The ASF
* licenses this file to You 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.datastax.driver.core.querybuilder;
import java.util.List;
import com.datastax.driver.core.CodecRegistry;
import com.datastax.driver.core.querybuilder.Clause.ContainsClause;
import com.datastax.driver.core.querybuilder.Clause.ContainsKeyClause;
public class Clauses {
public static boolean needAllowFiltering(Clause clause) {
return clause instanceof ContainsKeyClause || clause instanceof ContainsClause;
}
public static Clause and(Clause left, Clause right) {
return new AndClause(left, right);
}
public static Clause in(String name, List<?> values) {
return new Clause.InClause(name, values);
}
static class BinClause extends Clause {
private final Clause left;
private final String op;
private final Clause right;
public BinClause(Clause left, String op, Clause right) {
this.left = left;
this.op = op;
this.right = right;
}
@Override
String name() {
return null;
}
@Override
Object firstValue() {
return null;
}
@Override
boolean containsBindMarker() {
return Utils.containsBindMarker(this.left) || Utils.containsBindMarker(this.right);
}
@Override
void appendTo(StringBuilder sb, List<Object> variables,
CodecRegistry codecRegistry) {
// NOTE: '(? AND ?)' is not supported by Cassandra:
// SyntaxError: line xx missing ')' at 'AND'
// sb.append("(");
this.left.appendTo(sb, variables, codecRegistry);
sb.append(" ");
sb.append(this.op);
sb.append(" ");
this.right.appendTo(sb, variables, codecRegistry);
// sb.append(")");
}
}
static class AndClause extends BinClause {
public AndClause(Clause left, Clause right) {
super(left, "AND", right);
}
}
}