summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--RELEASE-NOTES.txt1
-rw-r--r--src/main/java/com/amazon/carbonado/Query.java10
-rw-r--r--src/main/java/com/amazon/carbonado/qe/EmptyQuery.java7
-rw-r--r--src/main/java/com/amazon/carbonado/qe/StandardQuery.java9
-rw-r--r--src/main/java/com/amazon/carbonado/spi/WrappedQuery.java4
5 files changed, 31 insertions, 0 deletions
diff --git a/RELEASE-NOTES.txt b/RELEASE-NOTES.txt
index 02d3591..4e6c3c3 100644
--- a/RELEASE-NOTES.txt
+++ b/RELEASE-NOTES.txt
@@ -29,6 +29,7 @@ Carbonado change history
- JDBCRepository supports char and Character property if column is char type of length 1.
- JDBCRepository allows non-null column to be @Nullable if also @Independent.
- Fixed bug in generating SQL with nullable primary key properties.
+- Added convenience method, Query.exists().
1.1 to 1.1.2
-------------------------------
diff --git a/src/main/java/com/amazon/carbonado/Query.java b/src/main/java/com/amazon/carbonado/Query.java
index e27e484..a729331 100644
--- a/src/main/java/com/amazon/carbonado/Query.java
+++ b/src/main/java/com/amazon/carbonado/Query.java
@@ -352,6 +352,16 @@ public interface Query<S extends Storable> {
long count() throws FetchException;
/**
+ * Returns true if any results are matched by this query.
+ *
+ * @return true if any matches
+ * @throws IllegalStateException if any blank parameters in this query
+ * @throws FetchException if storage layer throws an exception
+ * @since 1.2
+ */
+ boolean exists() throws FetchException;
+
+ /**
* Print the native query to standard out, which is useful for performance
* analysis. Not all repositories have a native query format. An example
* native format is SQL.
diff --git a/src/main/java/com/amazon/carbonado/qe/EmptyQuery.java b/src/main/java/com/amazon/carbonado/qe/EmptyQuery.java
index 31d9dd3..1a970e0 100644
--- a/src/main/java/com/amazon/carbonado/qe/EmptyQuery.java
+++ b/src/main/java/com/amazon/carbonado/qe/EmptyQuery.java
@@ -107,6 +107,13 @@ public final class EmptyQuery<S extends Storable> extends AbstractQuery<S> {
}
/**
+ * Always returns false.
+ */
+ public boolean exists() {
+ return false;
+ }
+
+ /**
* Always throws an IllegalStateException.
*/
public Query<S> with(int value) {
diff --git a/src/main/java/com/amazon/carbonado/qe/StandardQuery.java b/src/main/java/com/amazon/carbonado/qe/StandardQuery.java
index ec9bf4e..2d7995e 100644
--- a/src/main/java/com/amazon/carbonado/qe/StandardQuery.java
+++ b/src/main/java/com/amazon/carbonado/qe/StandardQuery.java
@@ -294,6 +294,15 @@ public abstract class StandardQuery<S extends Storable> extends AbstractQuery<S>
}
}
+ public boolean exists() throws FetchException {
+ Cursor<S> cursor = fetch();
+ try {
+ return cursor.skipNext(1) > 0;
+ } finally {
+ cursor.close();
+ }
+ }
+
public boolean printNative(Appendable app, int indentLevel) throws IOException {
try {
return executor().printNative(app, indentLevel, mValues);
diff --git a/src/main/java/com/amazon/carbonado/spi/WrappedQuery.java b/src/main/java/com/amazon/carbonado/spi/WrappedQuery.java
index ba3c013..bee05f0 100644
--- a/src/main/java/com/amazon/carbonado/spi/WrappedQuery.java
+++ b/src/main/java/com/amazon/carbonado/spi/WrappedQuery.java
@@ -167,6 +167,10 @@ public abstract class WrappedQuery<S extends Storable> implements Query<S> {
return mQuery.count();
}
+ public boolean exists() throws FetchException {
+ return mQuery.exists();
+ }
+
public boolean printNative() {
return mQuery.printNative();
}