diff --git a/couchbase-sdk/pom.xml b/couchbase-sdk/pom.xml
index a864b611dc..d78ceb8933 100644
--- a/couchbase-sdk/pom.xml
+++ b/couchbase-sdk/pom.xml
@@ -24,9 +24,9 @@
- com.fasterxml.jackson.core
- jackson-databind
- ${jackson-version}
+ com.fasterxml.jackson.core
+ jackson-databind
+ ${jackson-version}
io.vavr
@@ -79,7 +79,7 @@
1.8
UTF-8
- 2.4.7
+ 2.5.0
4.3.5.RELEASE
3.5
0.9.0
diff --git a/couchbase-sdk/src/main/java/com/baeldung/couchbase/n1ql/BucketFactory.java b/couchbase-sdk/src/main/java/com/baeldung/couchbase/n1ql/BucketFactory.java
new file mode 100644
index 0000000000..98fbe17e60
--- /dev/null
+++ b/couchbase-sdk/src/main/java/com/baeldung/couchbase/n1ql/BucketFactory.java
@@ -0,0 +1,26 @@
+package com.baeldung.couchbase.n1ql;
+
+import com.couchbase.client.java.Bucket;
+import com.couchbase.client.java.Cluster;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+@Service
+public class BucketFactory {
+
+ @Autowired
+ private Cluster cluster;
+
+ private Bucket travelSampleBucket;
+ private Bucket testBucket;
+
+ public Bucket getTravelSampleBucket() {
+ return (travelSampleBucket != null) ?
+ travelSampleBucket : cluster.openBucket("travel-sample");
+ }
+
+ public Bucket getTestBucket() {
+ return (testBucket != null) ?
+ testBucket : cluster.openBucket("test");
+ }
+}
diff --git a/couchbase-sdk/src/main/java/com/baeldung/couchbase/n1ql/CodeSnippets.java b/couchbase-sdk/src/main/java/com/baeldung/couchbase/n1ql/CodeSnippets.java
index 19342e16ed..999dcd897f 100644
--- a/couchbase-sdk/src/main/java/com/baeldung/couchbase/n1ql/CodeSnippets.java
+++ b/couchbase-sdk/src/main/java/com/baeldung/couchbase/n1ql/CodeSnippets.java
@@ -1,239 +1,16 @@
package com.baeldung.couchbase.n1ql;
-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.JsonArray;
-import com.couchbase.client.java.document.json.JsonObject;
-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.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import io.vavr.control.Try;
-import rx.Observable;
-import java.util.ArrayList;
import java.util.List;
-import java.util.UUID;
-import java.util.concurrent.TimeUnit;
import java.util.stream.Collectors;
-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 CodeSnippets {
- public static void main(String[] args) {
-
- Cluster cluster = CouchbaseCluster.create("127.0.0.1");
- Bucket bucket = cluster.openBucket("test", 1, TimeUnit.MINUTES);
- Bucket bucket1 = cluster.openBucket("travel-sample", 2, TimeUnit.MINUTES);
-
- bucket.bucketManager().createN1qlPrimaryIndex(true, false);
- bucket1.bucketManager().createN1qlPrimaryIndex(true, false);
-
- insertDocument(bucket1);
- basicSelect(bucket1);
- selectStatement1(bucket1);
- selectStatement2(bucket1);
- selectStatement3DSL(bucket1);
- selectStatement4(bucket1);
- selectStatement4DSL(bucket1);
- insertStatement1(bucket1);
- insertStatement2(bucket1);
- insertStatement3Bulk(bucket1);
- updateStatement1(bucket1);
- updateStatement2Upsert(bucket1);
- updateStatement3(bucket1);
- deleteStatement1(bucket1);
- deleteStatement2(bucket1);
-
- bucket.close();
- bucket1.close();
- cluster.disconnect();
- System.exit(0);
-
- }
-
- private static void insertDocument(Bucket bucket) {
-
- JsonObject personObj = JsonObject.create()
- .put("name", "John")
- .put("email", "john@doe.com")
- .put("interests", JsonArray.from("Java", "Nigerian Jollof"));
-
- String id = UUID.randomUUID().toString();
- JsonDocument doc = JsonDocument.create(id, personObj);
- bucket.insert(doc);
-
- System.out.println(bucket.get(id));
- }
-
- private static void basicSelect(Bucket bucket) {
-
- N1qlQueryResult result
- = bucket.query(N1qlQuery.simple("SELECT * FROM test"));
-
- result.forEach(System.out::println);
-
- System.out.println("result count: " + result.info().resultCount());
- System.out.println("error count: " + result.info().errorCount());
- }
-
- private static void selectStatement1(Bucket bucket) {
-
- String query = "SELECT name FROM `travel-sample` " +
- "WHERE type = 'airport' LIMIT 100";
- N1qlQueryResult result1 = bucket.query(N1qlQuery.simple(query));
-
- System.out.println("Result Count " + result1.info().resultCount());
-
- N1qlQueryRow row = result1.allRows().get(0);
- JsonObject rowJson = row.value();
- System.out.println("Name in First Row " + rowJson.get("name"));
-
- }
-
- private static void selectStatement2(Bucket bucket) {
-
- JsonObject pVal = JsonObject.create().put("type", "airport");
- String query = "SELECT * FROM `travel-sample` " +
- "WHERE type = $type LIMIT 100";
- N1qlQueryResult r2 = bucket.query(N1qlQuery.parameterized(query, pVal));
-
- System.out.println(r2.allRows());
-
- List list = extractJsonResult(r2);
- System.out.println(
- list.get(0).get("travel-sample").get("airportname").asText());
- }
-
- private static void selectStatement3DSL(Bucket bucket) {
-
- Statement statement = select("*")
- .from(i("travel-sample"))
- .where(x("type").eq(s("airport")))
- .limit(100);
- N1qlQueryResult r3 = bucket.query(N1qlQuery.simple(statement));
-
- List list2 = extractJsonResult(r3);
- System.out.println("First Airport Name: " + list2.get(0).get("travel-sample").get("airportname").asText());
-
- }
-
- private static void selectStatement4(Bucket bucket) {
-
- String query2 = "SELECT t.city, " +
- "t.airportname || \" (\" || t.faa || \")\" AS portname_faa " +
- "FROM `travel-sample` t " +
- "WHERE t.type=\"airport\"" +
- "AND t.country LIKE '%States'" +
- "AND t.geo.lat >= 70 " +
- "LIMIT 2";
- N1qlQueryResult r4 = bucket.query(N1qlQuery.simple(query2));
- List list3 = extractJsonResult(r4);
- System.out.println("First Doc : " + list3.get(0));
- }
-
- private static void selectStatement4DSL(Bucket bucket) {
-
- Statement st2 = select(
- x("t.city, t.airportname")
- .concat(s(" (")).concat(x("t.faa")).concat(s(")")).as("portname_faa"))
- .from(i("travel-sample").as("t"))
- .where( x("t.type").eq(s("airport"))
- .and(x("t.country").like(s("%States")))
- .and(x("t.geo.lat").gte(70)))
- .limit(2);
- N1qlQueryResult r5 = bucket.query(N1qlQuery.simple(st2));
- List list5 = extractJsonResult(r5);
- System.out.println("First Doc : " + list5.get(0));
- System.out.println("Query from Statement2: " + st2.toString());
-
- }
-
- private static void insertStatement1(Bucket bucket) {
-
- String query = "INSERT INTO `travel-sample` (KEY, VALUE) " +
- " VALUES(" +
- "\"cust1293\", " +
- "{\"id\":\"1293\",\"name\":\"Sample Airline\", \"type\":\"airline\"})" +
- " RETURNING META().id as docid, *";
- N1qlQueryResult r1 = bucket.query(N1qlQuery.simple(query));
- r1.forEach(System.out::println);
- }
-
- private static void insertStatement2(Bucket bucket) {
-
- JsonObject ob = JsonObject.create()
- .put("id", "1293")
- .put("name", "Sample Airline")
- .put("type", "airline");
- bucket.insert(JsonDocument.create("cust1295", ob));
- }
-
- private static void insertStatement3Bulk(Bucket bucket) {
-
- int docsToCreate = 10;
- List documents = new ArrayList<>();
- for (int i = 5; i < docsToCreate; i++) {
- JsonObject content = JsonObject.create()
- .put("id", i)
- .put("type", "airline")
- .put("name", "Sample Airline " + i);
- documents.add(JsonDocument.create("cust_" + i, content));
- }
-
- List r5 = Observable
- .from(documents)
- .flatMap(doc -> bucket.async().insert(doc))
- .toList()
- .last()
- .toBlocking()
- .single();
-
- r5.forEach(System.out::println);
- }
-
- private static void updateStatement1(Bucket bucket) {
-
- String query2 = "UPDATE `travel-sample` USE KEYS \"cust_1\" " +
- "SET name=\"Sample Airline Updated\" RETURNING name";
- N1qlQueryResult result = bucket.query(N1qlQuery.simple(query2));
- result.forEach(System.out::println);
- }
-
- private static void updateStatement2Upsert(Bucket bucket) {
-
- JsonObject o2 = JsonObject.create()
- .put("name", "Sample Airline Updated");
- bucket.upsert(JsonDocument.create("cust_1", o2));
- }
-
- private static void updateStatement3(Bucket bucket) {
-
- String query3 = "UPDATE `travel-sample` USE KEYS \"cust_2\" " +
- "UNSET name RETURNING *";
- N1qlQueryResult result1 = bucket.query(N1qlQuery.simple(query3));
- result1.forEach(System.out::println);
- }
-
- private static void deleteStatement1(Bucket bucket) {
- String query4 = "DELETE FROM `travel-sample` USE KEYS \"cust_50\"";
- N1qlQueryResult result4 = bucket.query(N1qlQuery.simple(query4));
- }
-
- private static void deleteStatement2(Bucket bucket) {
- String query5 = "DELETE FROM `travel-sample` WHERE id = 0 RETURNING *";
- N1qlQueryResult result5 = bucket.query(N1qlQuery.simple(query5));
- }
-
- private static List extractJsonResult(N1qlQueryResult result) {
+ public static List extractJsonResult(N1qlQueryResult result) {
ObjectMapper objectMapper = new ObjectMapper();
return result.allRows().stream()
.map(row -> Try.of(() -> objectMapper.readTree(row.value().toString()))
diff --git a/couchbase-sdk/src/test/java/com/baeldung/couchbase/n1ql/IntegrationTestConfig.java b/couchbase-sdk/src/test/java/com/baeldung/couchbase/n1ql/IntegrationTestConfig.java
new file mode 100644
index 0000000000..ef7e31b224
--- /dev/null
+++ b/couchbase-sdk/src/test/java/com/baeldung/couchbase/n1ql/IntegrationTestConfig.java
@@ -0,0 +1,26 @@
+package com.baeldung.couchbase.n1ql;
+
+import com.couchbase.client.java.Cluster;
+import com.couchbase.client.java.CouchbaseCluster;
+import com.couchbase.client.java.env.CouchbaseEnvironment;
+import com.couchbase.client.java.env.DefaultCouchbaseEnvironment;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.ComponentScan;
+import org.springframework.context.annotation.Configuration;
+
+import java.util.concurrent.TimeUnit;
+
+@Configuration
+@ComponentScan(basePackages = { "com.baeldung.couchbase.n1ql" })
+public class IntegrationTestConfig {
+
+ @Bean
+ public Cluster cluster() {
+ CouchbaseEnvironment env = DefaultCouchbaseEnvironment.builder()
+ .connectTimeout(60000)
+ .build();
+ return CouchbaseCluster.create(env, "127.0.0.1");
+ }
+
+
+}
diff --git a/couchbase-sdk/src/test/java/com/baeldung/couchbase/n1ql/N1QLIntegrationTest.java b/couchbase-sdk/src/test/java/com/baeldung/couchbase/n1ql/N1QLIntegrationTest.java
new file mode 100644
index 0000000000..d05b107098
--- /dev/null
+++ b/couchbase-sdk/src/test/java/com/baeldung/couchbase/n1ql/N1QLIntegrationTest.java
@@ -0,0 +1,255 @@
+package com.baeldung.couchbase.n1ql;
+
+import com.baeldung.couchbase.n1ql.IntegrationTestConfig;
+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.JsonArray;
+import com.couchbase.client.java.document.json.JsonObject;
+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.fasterxml.jackson.databind.JsonNode;
+import org.junit.AfterClass;
+import org.junit.BeforeClass;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.ComponentScan;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.test.context.ContextConfiguration;
+import org.springframework.test.context.TestExecutionListeners;
+import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
+import org.springframework.test.context.support.DependencyInjectionTestExecutionListener;
+import rx.Observable;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.UUID;
+
+import static com.baeldung.couchbase.n1ql.CodeSnippets.extractJsonResult;
+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;
+import static org.junit.Assert.*;
+
+@RunWith(SpringJUnit4ClassRunner.class)
+@ContextConfiguration(classes = { IntegrationTestConfig.class })
+public class N1QLIntegrationTest {
+
+
+ @Autowired
+ private Cluster cluster;
+
+ @Autowired
+ private BucketFactory bucketFactory;
+
+ @Test
+ public void givenAutowiredCluster_whenNotNull_thenNotNull() {
+ assertNotNull(cluster);
+ }
+
+ @Test
+ public void givenBucketFactory_whenGetTestBucket_thenNotNull() {
+ assertNotNull(bucketFactory.getTestBucket());
+ }
+
+ @Test
+ public void givenBucketFactory_whenGetTravelSampleBucket_thenNotNull() {
+ assertNotNull(bucketFactory.getTravelSampleBucket());
+ }
+
+ @Test
+ public void givenDocument_whenInsert_thenResult() {
+ Bucket bucket = bucketFactory.getTestBucket();
+ JsonObject personObj = JsonObject.create()
+ .put("name", "John")
+ .put("email", "john@doe.com")
+ .put("interests", JsonArray.from("Java", "Nigerian Jollof"));
+
+ String id = UUID.randomUUID().toString();
+ JsonDocument doc = JsonDocument.create(id, personObj);
+ bucket.insert(doc);
+ assertNotNull(bucket.get(id));
+ }
+
+ @Test
+ public void whenBasicSelectQuery_thenGetQueryResult() {
+ Bucket bucket = bucketFactory.getTravelSampleBucket();
+ N1qlQueryResult result
+ = bucket.query(N1qlQuery.simple("SELECT * FROM test"));
+
+ result.forEach(System.out::println);
+
+ System.out.println("result count: " + result.info().resultCount());
+ System.out.println("error count: " + result.info().errorCount());
+ }
+
+ @Test
+ public void givenSelectStatement_whenQuery_thenResult() {
+ Bucket bucket = bucketFactory.getTravelSampleBucket();
+ String query = "SELECT name FROM `travel-sample` " +
+ "WHERE type = 'airport' LIMIT 100";
+ N1qlQueryResult result1 = bucket.query(N1qlQuery.simple(query));
+
+ System.out.println("Result Count " + result1.info().resultCount());
+
+ N1qlQueryRow row = result1.allRows().get(0);
+ JsonObject rowJson = row.value();
+ System.out.println("Name in First Row " + rowJson.get("name"));
+
+ }
+
+ @Test
+ public void givenSelectStatement2_whenQuery_thenResult() {
+ Bucket bucket = bucketFactory.getTravelSampleBucket();
+ JsonObject pVal = JsonObject.create().put("type", "airport");
+ String query = "SELECT * FROM `travel-sample` " +
+ "WHERE type = $type LIMIT 100";
+ N1qlQueryResult r2 = bucket.query(N1qlQuery.parameterized(query, pVal));
+
+ System.out.println(r2.allRows());
+
+ List list = extractJsonResult(r2);
+ System.out.println(
+ list.get(0).get("travel-sample").get("airportname").asText());
+ }
+
+ @Test
+ public void givenSelectDSL_whenQuery_thenResult() {
+ Bucket bucket = bucketFactory.getTravelSampleBucket();
+ Statement statement = select("*")
+ .from(i("travel-sample"))
+ .where(x("type").eq(s("airport")))
+ .limit(100);
+ N1qlQueryResult r3 = bucket.query(N1qlQuery.simple(statement));
+
+ List list2 = extractJsonResult(r3);
+ System.out.println("First Airport Name: " + list2.get(0).get("travel-sample").get("airportname").asText());
+
+ }
+
+ @Test
+ public void givenSelectStatementWithOperators_whenQuery_thenResult() {
+ Bucket bucket = bucketFactory.getTravelSampleBucket();
+ String query2 = "SELECT t.city, " +
+ "t.airportname || \" (\" || t.faa || \")\" AS portname_faa " +
+ "FROM `travel-sample` t " +
+ "WHERE t.type=\"airport\"" +
+ "AND t.country LIKE '%States'" +
+ "AND t.geo.lat >= 70 " +
+ "LIMIT 2";
+ N1qlQueryResult r4 = bucket.query(N1qlQuery.simple(query2));
+ List list3 = extractJsonResult(r4);
+ System.out.println("First Doc : " + list3.get(0));
+ }
+
+ @Test
+ public void givenSelectStatementWithDSL2_whenQuery_thenResult() {
+ Bucket bucket = bucketFactory.getTravelSampleBucket();
+ Statement st2 = select(
+ x("t.city, t.airportname")
+ .concat(s(" (")).concat(x("t.faa")).concat(s(")")).as("portname_faa"))
+ .from(i("travel-sample").as("t"))
+ .where( x("t.type").eq(s("airport"))
+ .and(x("t.country").like(s("%States")))
+ .and(x("t.geo.lat").gte(70)))
+ .limit(2);
+ N1qlQueryResult r5 = bucket.query(N1qlQuery.simple(st2));
+ List list5 = extractJsonResult(r5);
+ System.out.println("First Doc : " + list5.get(0));
+ System.out.println("Query from Statement2: " + st2.toString());
+ }
+
+ @Test
+ public void givenInsertStatement_whenQuery_thenUpdate() {
+ Bucket bucket = bucketFactory.getTravelSampleBucket();
+ String query = "INSERT INTO `travel-sample` (KEY, VALUE) " +
+ " VALUES(" +
+ "\"cust1293\", " +
+ "{\"id\":\"1293\",\"name\":\"Sample Airline\", \"type\":\"airline\"})" +
+ " RETURNING META().id as docid, *";
+ N1qlQueryResult r1 = bucket.query(N1qlQuery.simple(query));
+ r1.forEach(System.out::println);
+ }
+
+ @Test
+ public void givenDocument_whenInsert_thenResults() {
+ Bucket bucket = bucketFactory.getTravelSampleBucket();
+ JsonObject ob = JsonObject.create()
+ .put("id", "1293")
+ .put("name", "Sample Airline")
+ .put("type", "airline");
+ bucket.insert(JsonDocument.create("cust1295", ob));
+ }
+
+ @Test
+ public void givenDocuments_whenBatchInsert_thenResult() {
+ Bucket bucket = bucketFactory.getTravelSampleBucket();
+ int docsToCreate = 10;
+ List documents = new ArrayList<>();
+ for (int i = 5; i < docsToCreate; i++) {
+ JsonObject content = JsonObject.create()
+ .put("id", i)
+ .put("type", "airline")
+ .put("name", "Sample Airline " + i);
+ documents.add(JsonDocument.create("cust_" + i, content));
+ }
+
+ List r5 = Observable
+ .from(documents)
+ .flatMap(doc -> bucket.async().insert(doc))
+ .toList()
+ .last()
+ .toBlocking()
+ .single();
+
+ r5.forEach(System.out::println);
+ }
+
+ @Test
+ public void givenUpdateStatement_whenQuery_thenUpdate() {
+ Bucket bucket = bucketFactory.getTravelSampleBucket();
+ String query2 = "UPDATE `travel-sample` USE KEYS \"cust_1\" " +
+ "SET name=\"Sample Airline Updated\" RETURNING name";
+ N1qlQueryResult result = bucket.query(N1qlQuery.simple(query2));
+ result.forEach(System.out::println);
+ }
+
+ @Test
+ public void givenDocument_whenUpsert_thenUpdate() {
+ Bucket bucket = bucketFactory.getTravelSampleBucket();
+ JsonObject o2 = JsonObject.create()
+ .put("name", "Sample Airline Updated");
+ bucket.upsert(JsonDocument.create("cust_1", o2));
+ }
+
+ @Test
+ public void givenUnestUpdateStatement_whenQuery_thenResult() {
+ Bucket bucket = bucketFactory.getTravelSampleBucket();
+ String query3 = "UPDATE `travel-sample` USE KEYS \"cust_2\" " +
+ "UNSET name RETURNING *";
+ N1qlQueryResult result1 = bucket.query(N1qlQuery.simple(query3));
+ result1.forEach(System.out::println);
+ }
+
+ @Test
+ public void givenDeleteStatement_whenQuery_thenDelete() {
+ Bucket bucket = bucketFactory.getTravelSampleBucket();
+ String query4 = "DELETE FROM `travel-sample` USE KEYS \"cust_50\"";
+ N1qlQueryResult result4 = bucket.query(N1qlQuery.simple(query4));
+ }
+
+ @Test
+ public void givenDeleteStatement2_whenQuery_thenDelete() {
+ Bucket bucket = bucketFactory.getTravelSampleBucket();
+ String query5 = "DELETE FROM `travel-sample` WHERE id = 0 RETURNING *";
+ N1qlQueryResult result5 = bucket.query(N1qlQuery.simple(query5));
+ }
+
+
+}