From 2876c6d2e785da57dfa0c4c2a4717c6abf6bbe8e Mon Sep 17 00:00:00 2001 From: wea_ondara Date: Mon, 15 Aug 2022 19:36:01 +0200 Subject: [PATCH] wip --- src/main/java/jef/DbSet.java | 5 +++ src/main/java/jef/Queryable.java | 22 +++++++------ src/main/java/jef/QueryableProxy.java | 5 +++ src/main/java/jef/operations/CountOp.java | 36 ++++++++++++++++++++++ src/main/java/jef/operations/FilterOp.java | 8 +++-- src/main/java/jef/operations/LimitOp.java | 5 +++ 6 files changed, 69 insertions(+), 12 deletions(-) create mode 100644 src/main/java/jef/operations/CountOp.java diff --git a/src/main/java/jef/DbSet.java b/src/main/java/jef/DbSet.java index d19797d..76a7d00 100644 --- a/src/main/java/jef/DbSet.java +++ b/src/main/java/jef/DbSet.java @@ -31,6 +31,11 @@ public class DbSet implements Queryable { return new SelectExpression(List.of(DatabaseSelectAllExpression.INSTANCE), new TableExpression(table), ""); } + @Override + public DBSet clone() { + return this; + } + @Override public String toString() { return "SELECT * FROM `" + table + "`"; diff --git a/src/main/java/jef/Queryable.java b/src/main/java/jef/Queryable.java index 658f04a..4de36a7 100644 --- a/src/main/java/jef/Queryable.java +++ b/src/main/java/jef/Queryable.java @@ -20,6 +20,8 @@ public interface Queryable { Expression getExpression(); + Queryable clone(); + String toString(); //stream functions @@ -165,27 +167,27 @@ public interface Queryable { // } // // default long count() { -// return 0; +// return new CountOp<>(this).execute(); // } // -// default boolean anyMatch(SerializablePredicate SerializablePredicate) { -// return false; +// default boolean anyMatch(SerializablePredicate predicate) { +// return filter(predicate).count() > 0; // } // -// default boolean allMatch(SerializablePredicate SerializablePredicate) { -// return false; +// default boolean allMatch(SerializablePredicate predicate) { +// return filter(predicate).count() == clone().count(); // } // -// default boolean noneMatch(SerializablePredicate SerializablePredicate) { -// return false; +// default boolean noneMatch(SerializablePredicate predicate) { +// return filter(predicate).count() == 0; // } -// + // default Optional findFirst() { -// return Optional.empty(); +// return limit(); // } // // default Optional findAny() { -// return Optional.empty(); +// return findFirst(); // } // } diff --git a/src/main/java/jef/QueryableProxy.java b/src/main/java/jef/QueryableProxy.java index 0331529..2894576 100644 --- a/src/main/java/jef/QueryableProxy.java +++ b/src/main/java/jef/QueryableProxy.java @@ -24,6 +24,11 @@ public class QueryableProxy implements Queryable { return delegate.getExpression(); } + @Override + public Queryable clone() { + return new QueryableProxy<>(delegate.clone()); + } + @Override public Iterator iterator() { return delegate.iterator(); diff --git a/src/main/java/jef/operations/CountOp.java b/src/main/java/jef/operations/CountOp.java new file mode 100644 index 0000000..c4b45ad --- /dev/null +++ b/src/main/java/jef/operations/CountOp.java @@ -0,0 +1,36 @@ +package jef.operations; + +import jef.Queryable; +import jef.expressions.Expression; +import jef.expressions.SelectExpression; +import jef.expressions.selectable.DatabaseFunctionExpression; + +import java.io.Serializable; +import java.util.List; + +public class CountOp implements Operation { + private final Queryable queryable; + + public CountOp(Queryable queryable) { + this.queryable = queryable; + } + + @Override + public String getTableAlias() { + return String.valueOf((char) (queryable.getTableAlias().charAt(0) + (char) 1)); + } + + @Override + public Expression getExpression() { + return new SelectExpression(List.of(new DatabaseFunctionExpression("count(*)")), queryable.getExpression(), getTableAlias()); + } + +// @Override +// public CountOp clone() { +// return new CountOp<>(queryable.clone()); +// } + + public long execute() { + return 0;//TODO implement when sql execution part is ready + } +} diff --git a/src/main/java/jef/operations/FilterOp.java b/src/main/java/jef/operations/FilterOp.java index e7c61ab..37c2b02 100644 --- a/src/main/java/jef/operations/FilterOp.java +++ b/src/main/java/jef/operations/FilterOp.java @@ -16,12 +16,11 @@ import jef.serializable.SerializablePredicate; import java.io.Serializable; import java.util.List; -import java.util.function.Predicate; public class FilterOp implements Queryable, Operation { private final Queryable queryable; - private final Predicate predicate; + private final SerializablePredicate predicate; private final Expression predicateExpr; // private final Expression finalExpr; @@ -55,6 +54,11 @@ public class FilterOp implements Queryable, Operation return new WhereExpression(new SelectExpression(List.of(DatabaseSelectAllExpression.INSTANCE), queryable.getExpression(), getTableAlias()), predicateExpr); } + @Override + public FilterOp clone() { + return new FilterOp<>(queryable, predicate); + } + @Override public String toString() { return getExpression().toString(); diff --git a/src/main/java/jef/operations/LimitOp.java b/src/main/java/jef/operations/LimitOp.java index ac9565e..c3666ce 100644 --- a/src/main/java/jef/operations/LimitOp.java +++ b/src/main/java/jef/operations/LimitOp.java @@ -30,6 +30,11 @@ public class LimitOp implements Queryable { return new LimitExpression(new SelectExpression(List.of(DatabaseSelectAllExpression.INSTANCE), queryable.getExpression(), getTableAlias()), start, count); } + @Override + public LimitOp clone() { + return new LimitOp<>(queryable.clone(), start, count); + } + @Override public String toString() { return getExpression().toString();