-
Notifications
You must be signed in to change notification settings - Fork 43
Expand file tree
/
Copy pathQueryConsistency.java
More file actions
85 lines (69 loc) · 3.41 KB
/
Copy pathQueryConsistency.java
File metadata and controls
85 lines (69 loc) · 3.41 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
package com.couchbase.devguide;
import static com.couchbase.client.java.query.Select.select;
import static com.couchbase.client.java.query.dsl.Expression.x;
import java.util.Random;
import com.couchbase.client.java.document.JsonDocument;
import com.couchbase.client.java.document.JsonLongDocument;
import com.couchbase.client.java.document.json.JsonArray;
import com.couchbase.client.java.document.json.JsonObject;
import com.couchbase.client.java.error.DocumentDoesNotExistException;
import com.couchbase.client.java.query.N1qlParams;
import com.couchbase.client.java.query.N1qlQuery;
import com.couchbase.client.java.query.N1qlQueryResult;
import com.couchbase.client.java.query.N1qlQueryRow;
import com.couchbase.client.java.query.Statement;
import com.couchbase.client.java.query.consistency.ScanConsistency;
import com.couchbase.client.java.query.dsl.functions.MetaFunctions;
/**
* Example of N1QL Query Consistency in Java for the Couchbase Developer Guide.
*/
public class QueryConsistency extends ConnectionBase {
@Override
protected void doWork() {
String key = "javaDevguideExampleQueryConsistency";
LOGGER.info("Please ensure there is a primary index on the default bucket!");
Random random = new Random();
int randomNumber = random.nextInt(10000000);
//prepare the random user
JsonObject user = JsonObject.create()
.put("name", JsonArray.from("Brass", "Doorknob"))
.put("email", "brass.doorknob@juno.com")
.put("random", randomNumber);
//upsert it with the corresponding random key
JsonDocument doc = JsonDocument.create(key, user); //the same document will be updated with a random internal value
bucket.upsert(doc);
//immediately query N1QL (note we imported relevant static methods)
//prepare the statement
Statement statement = select("name", "email", "random", "META(default).id")
.from("default")
.where(x("$1").in("name"));
//configure the query
N1qlParams params = N1qlParams.build()
//If this line is removed, the latest 'random' field might not be present
.consistency(ScanConsistency.REQUEST_PLUS);
N1qlQuery query = N1qlQuery.parameterized(statement, JsonArray.from("Brass"), params);
LOGGER.info("Expecting random: " + randomNumber);
N1qlQueryResult result = bucket.query(query);
if (!result.finalSuccess() || result.allRows().isEmpty()) {
LOGGER.warn("No result/errors: " + result.errors().toString());
}
for (N1qlQueryRow queryRow : result) {
JsonObject row = queryRow.value();
int rowRandom = row.getInt("random");
String rowId = row.getString("id");
LOGGER.info("Doc Id: " + rowId + ", Name: " + row.getArray("name") + ", Email: " + row.getString("email")
+ ", Random: " + rowRandom);
if (rowRandom == randomNumber) {
LOGGER.info("!!! Found our newly inserted document !!!");
} else {
LOGGER.warn("Found a different random value : " + rowRandom);
}
if (System.getProperty("REMOVE_DOORKNOBS") != null || System.getenv("REMOVE_DOORKNOBS") != null) {
bucket.remove(rowId);
}
}
}
public static void main(String[] args) {
new QueryConsistency().execute();
}
}