diff --git a/couchbase-sdk/.gitignore b/couchbase-sdk/.gitignore new file mode 100644 index 0000000000..f6867e01bd --- /dev/null +++ b/couchbase-sdk/.gitignore @@ -0,0 +1,6 @@ +# Created by .ignore support plugin (hsz.mobi) + +# IntelliJ project files +.idea +*.iml +/target/ diff --git a/couchbase-sdk/pom.xml b/couchbase-sdk/pom.xml index fd9e1b08f6..a864b611dc 100644 --- a/couchbase-sdk/pom.xml +++ b/couchbase-sdk/pom.xml @@ -23,6 +23,18 @@ ${couchbase.client.version} + + com.fasterxml.jackson.core + jackson-databind + ${jackson-version} + + + io.vavr + vavr + ${vavr-version} + + + org.springframework @@ -67,9 +79,11 @@ 1.8 UTF-8 - 2.4.0 + 2.4.7 4.3.5.RELEASE 3.5 + 0.9.0 + 2.9.1 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 new file mode 100644 index 0000000000..e297c34d7a --- /dev/null +++ b/couchbase-sdk/src/main/java/com/baeldung/couchbase/n1ql/CodeSnippets.java @@ -0,0 +1,235 @@ +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) { + + N1qlQueryResult result1 = bucket.query( + N1qlQuery.simple("SELECT name FROM `travel-sample` WHERE type = 'airport' LIMIT 100")); + + 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) { + ObjectMapper objectMapper = new ObjectMapper(); + return result.allRows().stream() + .map(row -> Try.of(() -> objectMapper.readTree(row.value().toString())).getOrNull()) + .collect(Collectors.toList()); + } + +}