Android Open Source - DKO Filtering Query






From Project

Back to project page DKO.

License

The source code is released under:

GNU Lesser General Public License

If you think the Android project DKO listed in this page is inappropriate, such as containing malicious code/tools or violating the copyright, please email info at java2s dot com, thanks.

Java Source Code

package org.kered.dko;
//from ww w.ja  v a 2 s  . c o  m
import java.sql.Connection;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
import java.util.List;
import java.util.Map;

import javax.sql.DataSource;

import org.kered.dko.Constants.DB_TYPE;
import org.kered.dko.Constants.DIRECTION;
import org.kered.dko.Field.FK;

class FilteringQuery<T extends Table> extends AbstractQuery<T> implements MatryoshkaQuery<T> {

  private Query<T> q;
  private Condition condition = null;
  private long top = -1;

  FilteringQuery(final FilteringQuery<T> src) {
    super(src.getType());
    this.q = src.q;
    this.condition = src.condition;
    this.top = src.top;
  }

  FilteringQuery(final Query<T> q, final Condition... conditions) {
    super(q);
    this.q = q;
    if (conditions==null || conditions.length==0) return;
    condition = conditions[0];
    if (conditions.length>1) {
      Condition[] c2 = new Condition[conditions.length-1];
      System.arraycopy(conditions, 1, c2, 0, conditions.length-1);
      condition = condition.and(c2);
    }
  }

  @Override
  public Query<T> where(final Condition... conditions) {
    FilteringQuery<T> ret = new FilteringQuery<T>(this);
    if (condition==null) {
      condition = conditions[0];
      if (conditions.length>1) {
        Condition[] c2 = new Condition[conditions.length-1];
        System.arraycopy(conditions, 1, c2, 0, conditions.length-1);
        condition = condition.and(c2);
      }
    } else {
      this.condition = this.condition.and(conditions);
    }
    return ret;
  }

  @Override
  public Query<T> limit(long n) {
    FilteringQuery<T> ret = new FilteringQuery<T>(this);
    ret.q = ret.q.limit(-1);
    ret.top = n;
    return ret;
  }

  @Override
  public Query<T> distinct() {
    FilteringQuery<T> ret = new FilteringQuery<T>(this);
    ret.q = ret.q.distinct();
    return ret;
  }

  @Override
  public Query<T> avg() {
    FilteringQuery<T> ret = new FilteringQuery<T>(this);
    ret.q = ret.q.avg();
    return ret;
  }

  @Override
  public Query<T> max() {
    FilteringQuery<T> ret = new FilteringQuery<T>(this);
    ret.q = ret.q.max();
    return ret;
  }

  @Override
  public Query<T> min() {
    FilteringQuery<T> ret = new FilteringQuery<T>(this);
    ret.q = ret.q.min();
    return ret;
  }

  @Override
  public Query<T> with(FK... fields) {
    FilteringQuery<T> ret = new FilteringQuery<T>(this);
    ret.q = ret.q.with(fields);
    return ret;
  }

  @Override
  public Query<T> deferFields(Field<?>... fields) {
    FilteringQuery<T> ret = new FilteringQuery<T>(this);
    ret.q = ret.q.deferFields(fields);
    return ret;
  }

  @Override
  public Query<T> deferFields(Collection<Field<?>> fields) {
    FilteringQuery<T> ret = new FilteringQuery<T>(this);
    ret.q = ret.q.deferFields(fields);
    return ret;
  }

  @Override
  public Query<T> onlyFields(Collection<Field<?>> fields) {
    FilteringQuery<T> ret = new FilteringQuery<T>(this);
    ret.q = ret.q.onlyFields(fields);
    return ret;
  }

  @Override
  public Query<T> onlyFields(Field<?>... fields) {
    FilteringQuery<T> ret = new FilteringQuery<T>(this);
    ret.q = ret.q.onlyFields(fields);
    return ret;
  }

  @Override
  public Query<T> set(Field<?> key, Object value) {
    throw new IllegalStateException("this is a read-only query");
  }

  @Override
  public Query<T> set(Map<Field<?>, Object> values) {
    throw new IllegalStateException("this is a read-only query");
  }

  @Override
  public Query<T> use(DataSource ds) {
    FilteringQuery<T> ret = new FilteringQuery<T>(this);
    ret.q = ret.q.use(ds);
    return ret;
  }

  @Override
  public Query<T> use(Connection conn) {
    FilteringQuery<T> ret = new FilteringQuery<T>(this);
    ret.q = ret.q.use(conn);
    return ret;
  }

  @Override
  public Query<T> use(DB_TYPE type) {
    FilteringQuery<T> ret = new FilteringQuery<T>(this);
    ret.q = ret.q.use(type);
    return ret;
  }

  @Override
  public Query<T> in(Collection<T> set) {
    // TODO Auto-generated method stub
    return null;
  }

  @Override
  public DataSource getDataSource() {
    return q.getDataSource();
  }

  @Override
  public List<Field<?>> getSelectFields() {
    return q.getSelectFields();
  }

  @Override
  public Iterator<T> iterator() {
    return new Iterator<T>() {

      final Iterator<T> i = q.iterator();
      T next = null;
      int count = 0;

      @Override
      public boolean hasNext() {
        if (next!=null) return true;
        if (top > -1 && count >= top) return false;
        while (i.hasNext()) {
          T candidate = i.next();
          if (condition.matches(candidate)) {
            next = candidate;
            return true;
          }
        }
        return false;
      }

      @Override
      public T next() {
        T ret = next;
        next = null;
        ++count;
        return ret;
      }

      @Override
      public void remove() {
        i.remove();
      }
    };
  }

  @Override
  public Collection<Query<? extends Table>> getUnderlying() {
    Collection<Query<? extends Table>> ret = new ArrayList();
    ret.add(q);
    return ret;
  }

  @Override
  public Query<T> orderBy(Expression.OrderBy<?>... obes) {
    FilteringQuery<T> ret = new FilteringQuery<T>(this);
    ret.q = ret.q.orderBy(obes);
    return ret;
  }

}




Java Source Code List

.HelloWorld.java
org.kered.contactlensfinder.DB.java
org.kered.contactlensfinder.MainActivity.java
org.kered.contactlensfinder.ViewManufacturersActivity.java
org.kered.contactlensfinder.ViewProductsActivity.java
org.kered.contactlensfinder.ViewPropertiesActivity.java
org.kered.dko.AbstractQuery.java
org.kered.dko.Bulk.java
org.kered.dko.CSV.java
org.kered.dko.ClosableIterator.java
org.kered.dko.Condition.java
org.kered.dko.Constants.java
org.kered.dko.Context.java
org.kered.dko.DBQuery.java
org.kered.dko.DBRowIterator.java
org.kered.dko.Diff.java
org.kered.dko.DualIterator.java
org.kered.dko.Expression.java
org.kered.dko.Field.java
org.kered.dko.FilteringQuery.java
org.kered.dko.Function.java
org.kered.dko.InMemoryQuery.java
org.kered.dko.Join.java
org.kered.dko.LazyCacheIterable.java
org.kered.dko.LocalJoin.java
org.kered.dko.M.java
org.kered.dko.Main.java
org.kered.dko.MatryoshkaQuery.java
org.kered.dko.PeekableClosableIterator.java
org.kered.dko.PeekableIterator.java
org.kered.dko.QueryAddField.java
org.kered.dko.QueryFactory.java
org.kered.dko.QuerySnapshot.java
org.kered.dko.Query.java
org.kered.dko.SQLFunction.java
org.kered.dko.SelectAsMapIterable.java
org.kered.dko.SelectFromOAI.java
org.kered.dko.SelectSingleColumn.java
org.kered.dko.SoftJoinUtil.java
org.kered.dko.SoftJoin.java
org.kered.dko.SqlContext.java
org.kered.dko.Statistics.java
org.kered.dko.SubQueryField.java
org.kered.dko.TableInfo.java
org.kered.dko.TableWrapper.java
org.kered.dko.Table.java
org.kered.dko.TemporaryTableFactory.java
org.kered.dko.TmpTableBuilder.java
org.kered.dko.Tuple.java
org.kered.dko.UsageMonitor.java
org.kered.dko.UsageStats.java
org.kered.dko.Util.java
org.kered.dko.ant.ClassGenerator.java
org.kered.dko.ant.CodeGeneratorBase.java
org.kered.dko.ant.CodeGenerator.java
org.kered.dko.ant.DataSourceGenerator.java
org.kered.dko.ant.GsonGenerator.java
org.kered.dko.ant.JoinGenerator.java
org.kered.dko.ant.Main.java
org.kered.dko.ant.SchemaExtractorBase.java
org.kered.dko.ant.SchemaExtractor.java
org.kered.dko.ant.Util.java
org.kered.dko.datasource.CheapConnectionPoolingDataSource.java
org.kered.dko.datasource.ConnectionCountingDataSource.java
org.kered.dko.datasource.JDBCDriverDataSource.java
org.kered.dko.datasource.MatryoshkaDataSource.java
org.kered.dko.datasource.MirroredDataSource.java
org.kered.dko.datasource.ReflectedDataSource.java
org.kered.dko.datasource.SingleConnectionDataSource.java
org.kered.dko.datasource.SingleThreadedDataSource.java
org.kered.dko.datasource.UnClosableConnection.java
org.kered.dko.datasource.Util.java
org.kered.dko.json.CDL.java
org.kered.dko.json.CookieList.java
org.kered.dko.json.Cookie.java
org.kered.dko.json.HTTPTokener.java
org.kered.dko.json.HTTP.java
org.kered.dko.json.JSONArray.java
org.kered.dko.json.JSONException.java
org.kered.dko.json.JSONML.java
org.kered.dko.json.JSONObject.java
org.kered.dko.json.JSONString.java
org.kered.dko.json.JSONStringer.java
org.kered.dko.json.JSONTokener.java
org.kered.dko.json.JSONWriter.java
org.kered.dko.json.Pickle.java
org.kered.dko.json.XMLTokener.java
org.kered.dko.json.XML.java
org.kered.dko.junk.DerbyLoadTestSchema.java
org.kered.dko.junk.OracleCreateTestUser.java
org.kered.dko.junk.OracleLoadTestSchema.java
org.kered.dko.persistence.Util.java
org.kered.dko.util.DumpDatabase.java
sakila.Example0.java
sakila.Example1.java
sakila.Example2.java
sakila.Util.java