/* This file is part of the db4o object database http://www.db4o.com
Copyright (C) 2004 - 2011 Versant Corporation http://www.versant.com
db4o is free software; you can redistribute it and/or modify it under
the terms of version 3 of the GNU General Public License as published
by the Free Software Foundation.
db4o is distributed in the hope that it will be useful, but WITHOUT ANY
WARRANTY; without even the implied warranty of MERCHANTABILITY or
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
for more details.
You should have received a copy of the GNU General Public License along
with this program. If not, see http://www.gnu.org/licenses/. */
package com.db4o.internal.query.processor;
import com.db4o.internal.*;
import com.db4o.query.*;
/**
*
* Array of constraints for queries.
*
* Necessary to be returned to Query#constraints()
*
* @exclude
*/
public class QConstraints extends QCon implements Constraints {
private Constraint[] i_constraints;
QConstraints(Transaction a_trans, Constraint[] constraints) {
super(a_trans);
i_constraints = constraints;
}
Constraint join(Constraint a_with, boolean a_and) {
synchronized(streamLock()){
if (!(a_with instanceof QCon)) {
return null;
}
// resolving multiple constraints happens in QCon for
// a_with, so we simply turn things around
return ((QCon) a_with).join1(this, a_and);
}
}
public Constraint[] toArray() {
synchronized(streamLock()){
return i_constraints;
}
}
public Constraint contains() {
synchronized(streamLock()){
for (int i = 0; i < i_constraints.length; i++) {
i_constraints[i].contains();
}
return this;
}
}
public Constraint equal() {
synchronized(streamLock()){
for (int i = 0; i < i_constraints.length; i++) {
i_constraints[i].equal();
}
return this;
}
}
public Constraint greater() {
synchronized(streamLock()){
for (int i = 0; i < i_constraints.length; i++) {
i_constraints[i].greater();
}
return this;
}
}
public Constraint identity() {
synchronized(streamLock()){
for (int i = 0; i < i_constraints.length; i++) {
i_constraints[i].identity();
}
return this;
}
}
public Constraint not() {
synchronized(streamLock()){
for (int i = 0; i < i_constraints.length; i++) {
i_constraints[i].not();
}
return this;
}
}
public Constraint like() {
synchronized(streamLock()){
for (int i = 0; i < i_constraints.length; i++) {
i_constraints[i].like();
}
return this;
}
}
public Constraint startsWith(boolean caseSensitive) {
synchronized(streamLock()){
for (int i = 0; i < i_constraints.length; i++) {
i_constraints[i].startsWith(caseSensitive);
}
return this;
}
}
public Constraint endsWith(boolean caseSensitive) {
synchronized(streamLock()){
for (int i = 0; i < i_constraints.length; i++) {
i_constraints[i].endsWith(caseSensitive);
}
return this;
}
}
public Constraint smaller() {
synchronized(streamLock()){
for (int i = 0; i < i_constraints.length; i++) {
i_constraints[i].smaller();
}
return this;
}
}
public Object getObject() {
synchronized(streamLock()){
Object[] objects = new Object[i_constraints.length];
for (int i = 0; i < i_constraints.length; i++) {
objects[i] = i_constraints[i].getObject();
}
return objects;
}
}
@Override
protected boolean canResolveByFieldIndex() {
return false;
}
}