Skip to content

Instantly share code, notes, and snippets.

@simonbasle
Forked from daschl/ReadYourWriteExample.java
Last active December 16, 2015 06:49
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save simonbasle/103581608159c05ae4f0 to your computer and use it in GitHub Desktop.
Save simonbasle/103581608159c05ae4f0 to your computer and use it in GitHub Desktop.
import com.couchbase.client.java.Bucket;
import com.couchbase.client.java.Cluster;
import com.couchbase.client.java.CouchbaseCluster;
import com.couchbase.client.java.document.JsonDocument;
import com.couchbase.client.java.document.json.JsonObject;
import com.couchbase.client.java.query.Query;
import com.couchbase.client.java.query.QueryParams;
import com.couchbase.client.java.query.QueryResult;
import com.couchbase.client.java.query.consistency.ScanConsistency;
import static com.couchbase.client.java.query.Select.select;
import static com.couchbase.client.java.query.dsl.Expression.i;
import static com.couchbase.client.java.query.dsl.Expression.s;
import static com.couchbase.client.java.query.dsl.Expression.x;
public class ReadYourWriteExample {
public static void main(String[] args) {
// Connect to the Cluster
Cluster cluster = CouchbaseCluster.create();
// Open the travel-sample bucket
Bucket bucket = cluster.openBucket("travel-sample");
// Create a new airline (document)
bucket.upsert(JsonDocument.create("airline_000", JsonObject.create()
.put("id", "000")
.put("type", "airline")
.put("name", "Couchbase Airways")
.put("iata", "CBX")
.put("icao", "CBX")
.put("callsign", "COUCH-BASE")
.put("country", "United States")
));
//Ensure that the bucket has a primary index
ensureIndex(bucket);
// Perform the Query
QueryResult result = bucket.query(
Query.simple(select("*").from(i(bucket.name())).where(x("iata").eq(s("CBX"))),
QueryParams.build().consistency(ScanConsistency.REQUEST_PLUS))
);
// Prints
// [{"country":"United States","iata":"CBX",...,"icao":"CBX","id":"000","type":"airline"}]
System.out.println(result.allRows());
}
public static void ensureIndex(Bucket bucket) {
System.out.println("Checking index on bucket " + bucket.name());
//Check for the index
Query checkIndex = Query.simple(
select("*")
.from("system:indexes")
.where(x("keyspace_id").eq(s("travel-sample"))
.and(x("name").eq(s("#primary")))
));
QueryResult queryResult = bucket.query(checkIndex);
boolean hasIndex = queryResult.finalSuccess() && queryResult.allRows().size() == 1;
if (hasIndex) {
System.out.println("found.");
return;
}
System.out.println("not found");
System.out.println("Creating index on " + bucket.name());
//create a primary index on the bucket
Query ensureIndex = Query.simple("CREATE PRIMARY INDEX ON `travel-sample`");
queryResult = bucket.query(ensureIndex);
//report success or dump errors
System.out.println(queryResult.finalSuccess() ? "created." : "not created.");
if (queryResult.finalSuccess()) {
System.out.println("Index found");
} else {
for (JsonObject error : queryResult.errors()) {
System.err.println(error);
}
}
}
}
@calsaviour
Copy link

Hi Simon,

is the ensureIndex(bucket) on line 35,36 necessary for ScanConsistency.REQUEST_PLUS to work?

regards
Calvin

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment