/* * Copyright 2016 requery.io * * 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 io.requery.sql; import io.requery.query.Expression; import io.requery.query.NamedExpression; import io.requery.util.Objects; import java.util.ArrayList; /** * Represents the set of bound parameters for a SQL prepared statement. * * @author Nikhil Purushe */ public class BoundParameters { private final ArrayList<Expression<?>> expressions; private final ArrayList<Object> values; public BoundParameters() { expressions = new ArrayList<>(); values = new ArrayList<>(); } public BoundParameters(Object... parameters) { this(); int index = 0; for (Object parameter : parameters) { Class type = parameter == null ? Object.class : parameter.getClass(); Expression expression = NamedExpression.of(String.valueOf(index++), type); add(expression, parameter); } } public <V> void add(Expression<V> expression, V value) { expressions.add(expression); values.add(value); } Expression<?> expressionAt(int index) { return expressions.get(index); } Object valueAt(int index) { return values.get(index); } public int count() { return expressions.size(); } public boolean isEmpty() { return count() == 0; } public void addAll(BoundParameters parameters) { expressions.addAll(parameters.expressions); values.addAll(parameters.values); } public void clear() { expressions.clear(); values.clear(); } @Override public boolean equals(Object obj) { if (obj instanceof BoundParameters) { BoundParameters parameters = (BoundParameters) obj; return Objects.equals(values, parameters.values); } return false; } @Override public int hashCode() { return Objects.hash(values); } @Override public String toString() { StringBuilder sb = new StringBuilder("["); for (int i = 0; i < values.size(); i++) { Object value = valueAt(i); if (i > 0) { sb.append(", "); } sb.append(String.valueOf(value)); } sb.append("]"); return sb.toString(); } }