From 7284c7462c591bd872241cfc5f4a0543398b5bf7 Mon Sep 17 00:00:00 2001
From: parthiv39731 <70740707+parthiv39731@users.noreply.github.com>
Date: Mon, 27 Nov 2023 10:19:12 +0530
Subject: [PATCH 1/8] BAEL-7259
---
persistence-modules/java-harperdb/pom.xml | 61 +++
.../src/main/resources/data-model.puml | 41 ++
.../baledung/harperdb/HarperDBApiService.java | 74 ++++
.../baledung/harperdb/HarperDBContainer.java | 42 +++
.../baledung/harperdb/HarperDBLiveTest.java | 336 +++++++++++++++++
.../harperdb/HarperDBLiveTestOld.java | 356 ++++++++++++++++++
6 files changed, 910 insertions(+)
create mode 100644 persistence-modules/java-harperdb/pom.xml
create mode 100644 persistence-modules/java-harperdb/src/main/resources/data-model.puml
create mode 100644 persistence-modules/java-harperdb/src/test/java/com/baledung/harperdb/HarperDBApiService.java
create mode 100644 persistence-modules/java-harperdb/src/test/java/com/baledung/harperdb/HarperDBContainer.java
create mode 100644 persistence-modules/java-harperdb/src/test/java/com/baledung/harperdb/HarperDBLiveTest.java
create mode 100644 persistence-modules/java-harperdb/src/test/java/com/baledung/harperdb/HarperDBLiveTestOld.java
diff --git a/persistence-modules/java-harperdb/pom.xml b/persistence-modules/java-harperdb/pom.xml
new file mode 100644
index 0000000000..896a58f858
--- /dev/null
+++ b/persistence-modules/java-harperdb/pom.xml
@@ -0,0 +1,61 @@
+
+
+ 4.0.0
+
+ com.baeldung
+ java-harperdb
+ 1.0-SNAPSHOT
+
+
+
+ org.apache.maven.plugins
+ maven-compiler-plugin
+
+
+ 9
+
+
+
+
+
+
+ com.baeldung
+ persistence-modules
+ 1.0.0-SNAPSHOT
+
+
+
+ com.baeldung
+ java-harperdb
+ 4.2
+ system
+ ${project.basedir}/lib/cdata.jdbc.harperdb.jar
+
+
+ org.testcontainers
+ testcontainers
+ test
+
+
+
+
+
+
+ org.testcontainers
+ testcontainers-bom
+ 1.19.3
+ pom
+ import
+
+
+
+
+
+ 19
+ 19
+ UTF-8
+
+
+
\ No newline at end of file
diff --git a/persistence-modules/java-harperdb/src/main/resources/data-model.puml b/persistence-modules/java-harperdb/src/main/resources/data-model.puml
new file mode 100644
index 0000000000..8e3681c749
--- /dev/null
+++ b/persistence-modules/java-harperdb/src/main/resources/data-model.puml
@@ -0,0 +1,41 @@
+@startuml
+'https://gist.github.com/QuantumGhost/0955a45383a0b6c0bc24f9654b3cb561
+' uncomment the line below if you're using computer with a retina display
+' skinparam dpi 300
+!theme sketchy-outline
+!define Table(name,desc) class name as "desc" << (T, #63b175) >>
+' we use bold for primary key
+' green color for unique
+' and underscore for not_null
+!define primary_key(x) x
+!define unique(x) x
+!define not_null(x) x
+' other tags available:
+'
+' , where color is a color name or html color code
+' (#FFAACC)
+' see: http://plantuml.com/classes.html#More
+hide methods
+hide stereotypes
+
+' entities
+
+
+Table(Teacher, "Teacher") {
+ primary_key(Id) Number
+ Name Varchar
+ joining_date Date
+}
+Table(Subject, "Subject") {
+ primary_key(Id) Number
+ Name Varchar
+}
+Table(Teacher_Details, "Teacher_Details") {
+ primary_key(Id) Number
+ teacher_id Number
+ subject_id Number
+}
+
+Teacher_Details "*" -left-> "1" Subject: " "
+Teacher "1" -left-> "*" Teacher_Details: " "
+@enduml
\ No newline at end of file
diff --git a/persistence-modules/java-harperdb/src/test/java/com/baledung/harperdb/HarperDBApiService.java b/persistence-modules/java-harperdb/src/test/java/com/baledung/harperdb/HarperDBApiService.java
new file mode 100644
index 0000000000..1eedd8648f
--- /dev/null
+++ b/persistence-modules/java-harperdb/src/test/java/com/baledung/harperdb/HarperDBApiService.java
@@ -0,0 +1,74 @@
+package com.baledung.harperdb;
+
+import com.github.dockerjava.zerodep.shaded.org.apache.hc.client5.http.classic.methods.HttpPost;
+import com.github.dockerjava.zerodep.shaded.org.apache.hc.client5.http.impl.classic.CloseableHttpClient;
+import com.github.dockerjava.zerodep.shaded.org.apache.hc.client5.http.impl.classic.CloseableHttpResponse;
+import com.github.dockerjava.zerodep.shaded.org.apache.hc.client5.http.impl.classic.HttpClientBuilder;
+import com.github.dockerjava.zerodep.shaded.org.apache.hc.core5.http.ClassicHttpRequest;
+import com.github.dockerjava.zerodep.shaded.org.apache.hc.core5.http.HttpEntity;
+import com.github.dockerjava.zerodep.shaded.org.apache.hc.core5.http.io.entity.StringEntity;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.io.IOException;
+import java.util.Base64;
+
+public class HarperDBApiService {
+ private String url;
+ private String base64auth;
+
+ public HarperDBApiService(String url, String user, String password) {
+ this.url = url;
+ this.base64auth = Base64.getEncoder()
+ .encodeToString(new StringBuilder().append(user).append(":").append(password).toString().getBytes());
+ }
+
+ private static final Logger LOGGER = LoggerFactory.getLogger(HarperDBApiService.class);
+
+ public void createSchema(String schema) throws IOException {
+ String requestBody = "{\"operation\":\"create_schema\", \"" + "schema\":\"" + schema + "\"" + "}";
+ executeHttpPostRequest(requestBody);
+ }
+
+ public void createTable(String schema, String table, String ... attributes) throws IOException {
+ String createTableReq = "{\"operation\":\"create_table\","
+ + "\"schema\":\"" + schema
+ + "\",\"table\":\"" + table
+ + "\",\"hash_attribute\":\"id\""
+ + "}";
+ executeHttpPostRequest(createTableReq);
+ LOGGER.info("created table:" + table);
+ for (String attribute : attributes) {
+ String createAttrReq = "{\"operation\":\"create_attribute\",\"schema\":\""
+ + schema + "\",\"table\":\""
+ + table + "\",\"attribute\":\""
+ + attribute + "\""
+ + "}";
+ executeHttpPostRequest(createAttrReq);
+ LOGGER.info("created attribute:" + attribute + " in table:" + table);
+ }
+ }
+
+ public void insertRecords(String schema, String table, String records) throws IOException {
+ String requestBody = "{\"table\":" + "\"" + table + "\","
+ + "\"schema\":" + "\"" + schema + "\"" + ","
+ + "\"operation\":" + "\"" + "insert" + "\"" + ","
+ + "\"records\":" + records
+ + "}";
+ executeHttpPostRequest(requestBody);
+ }
+
+ private void executeHttpPostRequest(String httpRequest) throws IOException {
+ LOGGER.info("Post request body:" + httpRequest);
+
+ try (CloseableHttpClient closeableHttpClient = HttpClientBuilder.create().build()) {
+ HttpPost request = new HttpPost(this.url);
+ request.addHeader("Authorization", "Basic " + this.base64auth);
+ request.addHeader("Content-Type", "application/json");
+ request.setEntity((HttpEntity) new StringEntity(httpRequest));
+ CloseableHttpResponse response = closeableHttpClient.execute((ClassicHttpRequest) request);
+ LOGGER.info("REST API response:" + response.toString());
+ assert(200 == response.getCode());
+ }
+ }
+}
diff --git a/persistence-modules/java-harperdb/src/test/java/com/baledung/harperdb/HarperDBContainer.java b/persistence-modules/java-harperdb/src/test/java/com/baledung/harperdb/HarperDBContainer.java
new file mode 100644
index 0000000000..79656b1b73
--- /dev/null
+++ b/persistence-modules/java-harperdb/src/test/java/com/baledung/harperdb/HarperDBContainer.java
@@ -0,0 +1,42 @@
+package com.baledung.harperdb;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.testcontainers.containers.GenericContainer;
+
+import java.util.Map;
+
+public class HarperDBContainer {
+ private final static Logger LOGGER = LoggerFactory.getLogger(HarperDBContainer.class);
+
+
+
+ private static final Map DEFAULT_ENV_MAP = Map.of(
+ "HDB_ADMIN_USERNAME", "admin",
+ "HDB_ADMIN_PASSWORD", "password",
+ "OPERATIONSAPI_NETWORK_PORT", "9925",
+ "ROOTPATH", "/home/harperdb/hdb",
+ "LOGGING_STDSTREAMS", "true"
+ );
+
+ private static final Integer[] DEFAULT_EXPOSED_PORTS = {9925, 9926};
+
+ private static final String HARPER_DOCKER_IMAGE = "harperdb/harperdb:latest";
+
+ public void stop() {
+ harperDBContainer.stop();
+ }
+ GenericContainer harperDBContainer;
+ public GenericContainer installHarperDB() {
+ harperDBContainer = new GenericContainer(HARPER_DOCKER_IMAGE)
+ .withEnv(DEFAULT_ENV_MAP)
+ .withExposedPorts(DEFAULT_EXPOSED_PORTS);
+ return harperDBContainer;
+ }
+
+ public GenericContainer installHarperDB(String dockerImgage, final Map envMap, final Integer ... exposedPorts) {
+ return new GenericContainer(dockerImgage)
+ .withEnv(envMap)
+ .withExposedPorts(exposedPorts);
+ }
+}
diff --git a/persistence-modules/java-harperdb/src/test/java/com/baledung/harperdb/HarperDBLiveTest.java b/persistence-modules/java-harperdb/src/test/java/com/baledung/harperdb/HarperDBLiveTest.java
new file mode 100644
index 0000000000..767d9d971b
--- /dev/null
+++ b/persistence-modules/java-harperdb/src/test/java/com/baledung/harperdb/HarperDBLiveTest.java
@@ -0,0 +1,336 @@
+package com.baledung.harperdb;
+
+import cdata.jdbc.harperdb.HarperDBConnectionPoolDataSource;
+import org.junit.jupiter.api.AfterAll;
+import org.junit.jupiter.api.BeforeAll;
+import org.junit.jupiter.api.Test;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.testcontainers.containers.GenericContainer;
+
+import java.io.IOException;
+import java.net.URISyntaxException;
+import java.sql.*;
+import java.util.Properties;
+
+import static org.junit.jupiter.api.Assertions.*;
+
+public class HarperDBLiveTest {
+ private static final Logger logger = LoggerFactory.getLogger(HarperDBLiveTest.class);
+
+ private static String host;
+
+ private static Integer port;
+
+ private static HarperDBContainer harperDBContainer;
+ private static HarperDBApiService harperDbApiService;
+
+ @BeforeAll
+ static void setupHarperDB() throws IOException, InterruptedException, URISyntaxException {
+ installHarperDB();
+ initHarperDBApiService();
+ setupDB();
+ }
+
+ private static void installHarperDB() {
+ harperDBContainer = new HarperDBContainer();
+
+ GenericContainer genericContainer = harperDBContainer.installHarperDB();
+
+ host = genericContainer.getHost();
+ genericContainer.start();
+
+ port = genericContainer.getFirstMappedPort();
+ }
+
+ private static void initHarperDBApiService() {
+ String url = "http://localhost:" + port + "/";
+ harperDbApiService = new HarperDBApiService(url, "admin", "password");
+ }
+
+ private static void setupDB() throws URISyntaxException, IOException {
+ harperDbApiService.createSchema("Demo");
+
+ harperDbApiService.createTable("Demo", "Subject", "name");
+ harperDbApiService.createTable("Demo", "Teacher", "name", "joining_date", "subject_id");
+ harperDbApiService.createTable("Demo", "Teacher_Details", "teacher_id", "subject_id");
+
+ insertSubjectRecords();
+ insertTeacherRecords();
+ insertTeacherDetailsRecords();
+ }
+
+ private static void insertSubjectRecords() throws IOException {
+ String records = "["
+ + "{\"id\":1, \"name\":\"English\"},"
+ + "{\"id\":2, \"name\":\"Maths\"},"
+ + "{\"id\":3, \"name\":\"Science\"}"
+ + "]";
+
+ harperDbApiService.insertRecords("Demo", "Subject", records);
+ }
+
+ private static void insertTeacherRecords() throws IOException {
+ String records = "[" +
+ "{\"id\":1, \"name\":\"Parthiv Pradhan\", \"joining_date\":\"04-05-2000\"},"
+ + "{\"id\":2, \"name\":\"David Martinez\", \"joining_date\":\"20-10-2005\"},"
+ + "{\"id\":3, \"name\":\"Liam Williams\", \"joining_date\":\"04-06-1997\"},"
+ + "{\"id\":4, \"name\":\"Robin Williams\", \"joining_date\":\"01-01-2020\"},"
+ + "{\"id\":5, \"name\":\"Eric Martin\", \"joining_date\":\"04-05-2022\"},"
+ + "{\"id\":6, \"name\":\"Sajjan Nagendra\", \"joining_date\":\"02-02-1999\"}"
+ + "]";
+ harperDbApiService.insertRecords("Demo", "Teacher", records);
+ }
+
+ private static void insertTeacherDetailsRecords() throws IOException {
+ String records = "["
+ + "{\"id\":1, \"teacher_id\":1, \"subject_id\":1},"
+ + "{\"id\":2, \"teacher_id\":1, \"subject_id\":2},"
+ + "{\"id\":3, \"teacher_id\":2, \"subject_id\":3 },"
+ + "{\"id\":4, \"teacher_id\":3, \"subject_id\":1},"
+ + "{\"id\":5, \"teacher_id\":3, \"subject_id\":3},"
+ + "{\"id\":6, \"teacher_id\":4, \"subject_id\":2},"
+ + "{\"id\":7, \"teacher_id\":5, \"subject_id\":3},"
+ + "{\"id\":8, \"teacher_id\":6, \"subject_id\":1},"
+ + "{\"id\":9, \"teacher_id\":6, \"subject_id\":2},"
+ + "{\"id\":15, \"teacher_id\":6, \"subject_id\":3}"
+ + "]";
+
+ harperDbApiService.insertRecords("Demo", "Teacher_Details", records);
+ }
+
+ @AfterAll
+ static void stopHarperDB() {
+ harperDBContainer.stop();
+ }
+
+ @Test
+ void whenConnectionInfoInURL_thenConnectSuccess() throws SQLException {
+ assertDoesNotThrow(() -> {
+ final String JDBC_URL = "jdbc:harperdb:Server=127.0.0.1:" + port + ";User=admin;Password=password;";
+
+ try (Connection connection = DriverManager.getConnection(JDBC_URL)) {
+ connection.createStatement().executeQuery("select 1");
+ logger.info("Connection Successful");
+ }
+ });
+ }
+
+ @Test
+ void whenConnectionInfoInProperties_thenConnectSuccess() throws SQLException {
+ assertDoesNotThrow(() -> {
+ Properties prop = new Properties();
+ prop.setProperty("Server", "127.0.0.1:" + port);
+ prop.setProperty("User", "admin");
+ prop.setProperty("Password", "password");
+
+ try (Connection connection = DriverManager.getConnection("jdbc:harperdb:", prop)) {
+ connection.createStatement().executeQuery("select 1");
+ logger.info("Connection Successful");
+ }
+ });
+ }
+
+ @Test
+ void whenConnectionPooling_thenConnectSuccess() throws SQLException {
+ assertDoesNotThrow(() -> {
+ HarperDBConnectionPoolDataSource harperdbPoolDataSource = new HarperDBConnectionPoolDataSource();
+ final String JDBC_URL = "jdbc:harperdb:UseConnectionPooling=true;PoolMaxSize=2;Server=127.0.0.1:" + port
+ + ";User=admin;Password=password;";
+ harperdbPoolDataSource.setURL(JDBC_URL);
+
+ try(Connection connection = harperdbPoolDataSource.getPooledConnection().getConnection()) {
+ connection.createStatement().executeQuery("select 1");
+ logger.info("Connection Pool Successful");
+ }
+ });
+ }
+
+ private static Connection getConnection() throws SQLException {
+ String URL = "jdbc:harperdb:Server=127.0.0.1:" + port + ";User=admin;Password=password;";
+ return DriverManager.getConnection(URL);
+ }
+
+ @Test
+ void givenStatement_whenFetchRecord_thenSuccess() throws SQLException {
+ final String SQL_QUERY = "select id, name, grade from Demo.student";
+
+ try(Connection connection = getConnection()) {
+ Statement statement = connection.createStatement();
+ ResultSet resultSet = statement.executeQuery(SQL_QUERY);
+ while (resultSet.next()) {
+ int id = resultSet.getInt("id");
+ String name = resultSet.getString("name");
+ int grade = resultSet.getInt("grade");
+ assertNotNull(Integer.valueOf(id));
+ logger.info("Student id:" + id + " Student Name:" + name + " grade:" + grade);
+ }
+ }
+ }
+
+ @Test
+ void givenStatement_whenInsertRecord_thenSuccess() throws SQLException {
+ final String INSERT_SQL = "insert into Demo.student(id, name, grade) values (10, 'Barak', 3)";
+
+ try(Connection connection = getConnection()) {
+ Statement statement = connection.createStatement();
+ assertDoesNotThrow(() -> statement.execute(INSERT_SQL));
+ }
+ }
+
+ @Test
+ void givenStatement_whenInsertRecordInTableWithoutAttributes_thenSuccess() throws SQLException {
+ final String INSERT_SQL = "insert into Demo.teacher(id, name, joining_date) "
+ + "values (7, 'David Sirocco', '04-05-2004'), (8, 'Ali Azmat', '04-10-2000')";
+ final String QUERY_SQL = "select name, joining_date from Demo.teacher where name = ?";
+
+ try(Connection connection = getConnection()) {
+ Statement statement = connection.createStatement();
+ assertDoesNotThrow(() -> statement.execute(INSERT_SQL));
+ PreparedStatement preparedStatement = connection.prepareStatement(QUERY_SQL);
+ preparedStatement.setString(1, "David Sirocco");
+ ResultSet resultSet = preparedStatement.executeQuery();
+ while (resultSet.next()) {
+ String teacherName = resultSet.getString("name");
+ String joinDate = resultSet.getString("joining_date");
+ assertEquals("David Sirocco", teacherName);
+ assertEquals("04-05-2004", joinDate);
+ logger.info("name:" + teacherName + " joining date:" + joinDate);
+ }
+ }
+ }
+
+ @Test
+ void givenStatement_whenUpdateRecord_thenSuccess() throws SQLException {
+ final String UPDATE_SQL = "update Demo.student set grade = 4 where id = 5";
+
+ try(Connection connection = getConnection()) {
+ Statement statement = connection.createStatement();
+ assertDoesNotThrow(() -> statement.execute(UPDATE_SQL));
+ assertEquals(1, statement.getUpdateCount());
+ }
+ }
+
+ @Test
+ void givenStatement_whenDeleteRecord_thenSuccess() throws SQLException {
+ final String DELETE_SQL = "delete from Demo.student where id = 3";
+
+ try(Connection connection = getConnection()) {
+ Statement statement = connection.createStatement();
+ assertDoesNotThrow(() -> statement.execute(DELETE_SQL));
+ assertEquals(1, statement.getUpdateCount());
+ }
+ }
+
+ @Test
+ void givenPreparedStatement_whenFetchRecord_thenSuccess() throws SQLException {
+ final String SQL_QUERY = "select id, name, grade from Demo.student where name = ? and grade = ?";
+
+ try(Connection connection = getConnection()) {
+ PreparedStatement preparedStatement = connection.prepareStatement(SQL_QUERY);
+ preparedStatement.setString(1, "Robin");
+ preparedStatement.setInt(2, 4);
+ ResultSet resultSet = preparedStatement.executeQuery();
+ while (resultSet.next()) {
+ int id = resultSet.getInt("id");
+ String name = resultSet.getString("name");
+ int grade = resultSet.getInt("grade");
+ assertNotNull(Integer.valueOf(id));
+ assertEquals("Robin", name);
+ logger.info("Student id:" + id + " Student Name:" + name + " grade:" + grade);
+ }
+ }
+ }
+
+ @Test
+ void givenPreparedStatement_whenDeleteRecord_thenSuccess() throws SQLException {
+ final String DELETE_SQL = "delete from Demo.student where name = ?";
+
+ try(Connection connection = getConnection()) {
+ PreparedStatement preparedStatement = connection.prepareStatement(DELETE_SQL);
+ preparedStatement.setString(1, "James");
+ assertDoesNotThrow(() -> preparedStatement.execute());
+ assertEquals(1, preparedStatement.getUpdateCount());
+ }
+ }
+
+ @Test
+ void givenPreparedStatement_whenUpdateRecord_thenSuccess() throws SQLException {
+ final String UPDATE_SQL = "update Demo.student set grade = ? where id = ? and name = ?";
+
+ try(Connection connection = getConnection()) {
+ PreparedStatement preparedStatement = connection.prepareStatement(UPDATE_SQL);
+ preparedStatement.setInt(1, 5);
+ preparedStatement.setInt(2, 1);
+ preparedStatement.setString(3, "John");
+ assertDoesNotThrow(() -> preparedStatement.execute());
+ assertEquals(1, preparedStatement.getUpdateCount());
+ }
+ }
+
+ //@Test
+ void whenAddtoBatch_thenExecuteBatchIsSuccess() throws SQLException {
+ final String INSERT_SQL = "insert into Demo.teacher(id, name, joining_date, subject_id)"
+ + "values(?, ?, ?, ?)";
+
+ try(Connection connection = getConnection()) {
+ PreparedStatement preparedStatement = connection.prepareStatement(INSERT_SQL);
+ preparedStatement.setInt(1, 9);
+ preparedStatement.setString(2, "Bret Lee");
+ preparedStatement.setString(3, "07-08-2002");
+ preparedStatement.setString(4, "[1, 3]");
+ preparedStatement.addBatch();
+
+ preparedStatement.setInt(1, 10);
+ preparedStatement.setString(2, "Sarah Glimmer");
+ preparedStatement.setString(3, "07-08-1997");
+ preparedStatement.setString(4, "[1, 2]");
+
+ preparedStatement.addBatch();
+
+ assertDoesNotThrow(() -> preparedStatement.executeBatch());
+ }
+ }
+
+
+ @Test
+ void whenExecuteJoinQuery_thenResultSuccess() throws SQLException {
+ final String JOIN_QUERY = "SELECT t.name as teacher_name, s.name as subject_name " +
+ "from Demo.teacher AS t INNER JOIN Demo.subject AS s ON t.subject_id = s.id";
+
+ try(Connection connection = getConnection()) {
+ Statement statement = connection.createStatement();
+
+
+ ResultSet resultSet = statement.executeQuery(JOIN_QUERY);
+ while (resultSet.next()) {
+ logger.info("Teacher Name:" + resultSet.getString("teacher_name") + " Subject Name:"
+ + resultSet.getString("subject_name"));
+ }
+
+
+ }
+
+ }
+
+ @Test
+ void whenExecuteStoredToCreateTable_thenSuccess() throws SQLException {
+ final String CREATE_TABLE_SQL = "CreateTable";
+ try(Connection connection = getConnection()) {
+ CallableStatement callableStatement = connection.prepareCall(CREATE_TABLE_SQL);
+
+ callableStatement.setString("SchemaName", "prod"); //schema gets created too
+ callableStatement.setString("TableName", "subject");
+ callableStatement.setString("PrimaryKey", "id");
+ Boolean result = callableStatement.execute();
+
+ ResultSet resultSet = callableStatement.getResultSet();
+
+ while(resultSet.next()) {
+ String tableCreated = resultSet.getString("Success");
+ assertEquals("true", tableCreated);
+ logger.info("result of the callable execute:" + tableCreated);
+ }
+ }
+ }
+}
diff --git a/persistence-modules/java-harperdb/src/test/java/com/baledung/harperdb/HarperDBLiveTestOld.java b/persistence-modules/java-harperdb/src/test/java/com/baledung/harperdb/HarperDBLiveTestOld.java
new file mode 100644
index 0000000000..8becea76a5
--- /dev/null
+++ b/persistence-modules/java-harperdb/src/test/java/com/baledung/harperdb/HarperDBLiveTestOld.java
@@ -0,0 +1,356 @@
+package com.baledung.harperdb;
+
+import cdata.jdbc.harperdb.HarperDBConnectionPoolDataSource;
+import com.github.dockerjava.zerodep.shaded.org.apache.hc.client5.http.classic.methods.HttpPost;
+import com.github.dockerjava.zerodep.shaded.org.apache.hc.client5.http.impl.classic.CloseableHttpClient;
+import com.github.dockerjava.zerodep.shaded.org.apache.hc.client5.http.impl.classic.CloseableHttpResponse;
+import com.github.dockerjava.zerodep.shaded.org.apache.hc.client5.http.impl.classic.HttpClientBuilder;
+import com.github.dockerjava.zerodep.shaded.org.apache.hc.core5.http.ClassicHttpRequest;
+import com.github.dockerjava.zerodep.shaded.org.apache.hc.core5.http.HttpEntity;
+import com.github.dockerjava.zerodep.shaded.org.apache.hc.core5.http.io.entity.StringEntity;
+import org.junit.jupiter.api.AfterAll;
+import org.junit.jupiter.api.BeforeAll;
+import org.junit.jupiter.api.Test;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.testcontainers.containers.GenericContainer;
+
+import java.io.IOException;
+import java.net.URISyntaxException;
+import java.sql.*;
+import java.util.Map;
+import java.util.Properties;
+
+import static org.junit.jupiter.api.Assertions.*;
+
+public class HarperDBLiveTestOld {
+ private static final Logger logger = LoggerFactory.getLogger(HarperDBLiveTestOld.class);
+
+ private static String host;
+
+ private static Integer port;
+
+ private static GenericContainer harperDBContainer;
+
+ @BeforeAll
+ static void setupHarperDB() throws IOException, InterruptedException, URISyntaxException {
+ installHarperDB();
+ setupDB();
+ }
+
+ private static void installHarperDB() {
+ Map envMap = Map.of(
+ "HDB_ADMIN_USERNAME", "admin",
+ "HDB_ADMIN_PASSWORD", "password",
+ "OPERATIONSAPI_NETWORK_PORT", "9925",
+ "ROOTPATH", "/home/harperdb/hdb",
+ "LOGGING_STDSTREAMS", "true"
+ );
+
+ harperDBContainer = new GenericContainer("harperdb/harperdb:latest")
+ .withEnv(envMap)
+ .withExposedPorts(9925, 9926);
+ host = harperDBContainer.getHost();
+ harperDBContainer.start();
+ port = harperDBContainer.getFirstMappedPort();
+ logger.info("DB Host:" + host + "\n DB Port:" + port);
+ }
+
+ private static void setupDB() throws URISyntaxException, IOException {
+ setupSchema("demo");
+ createTable("demo", "student", "name", "grade", "subject_id");
+ createTable("demo", "teacher", "name", "joining_date", "subject_id");
+ insertRecords();
+ }
+
+ private static void setupSchema(String schema) throws URISyntaxException, IOException {
+ String requestBody = "{\"operation\":\"create_schema\", \"" + "schema\":\"" + schema + "\"" + "}";
+ executeHttpPostRequest(requestBody);
+ }
+
+ private static void executeHttpPostRequest(String httpRequest) throws IOException {
+ logger.info("Post request body:" + httpRequest);
+
+ try (CloseableHttpClient closeableHttpClient = HttpClientBuilder.create().build()) {
+ HttpPost request = new HttpPost("http://localhost:" + port + "/");
+ request.addHeader("Authorization", "Basic YWRtaW46cGFzc3dvcmQ=");
+ request.addHeader("Content-Type", "application/json");
+ request.setEntity((HttpEntity) new StringEntity(httpRequest));
+ CloseableHttpResponse response = closeableHttpClient.execute((ClassicHttpRequest) request);
+ logger.info("REST API response:" + response.toString());
+ assertEquals(200, response.getCode());
+ }
+ }
+
+ private void insertStudentRecords() {
+
+ }
+
+ private void insertSubjectRecords() {
+
+ }
+
+ private void insertTeacherRecords() {
+
+ }
+
+ private static void createTable(String schemaName, String tableName, String... attributes) throws IOException {
+ String createTableReq = "{\"operation\":\"create_table\",\"schema\":\""
+ + schemaName + "\",\"table\":\""
+ + tableName + "\",\"hash_attribute\":\"id\""
+ + "}";
+ executeHttpPostRequest(createTableReq);
+ logger.info("created table:" + tableName);
+ for (String attribute : attributes) {
+ String createAttrReq = "{\"operation\":\"create_attribute\",\"schema\":\""
+ + schemaName + "\",\"table\":\""
+ + tableName + "\",\"attribute\":\""
+ + attribute + "\""
+ + "}";
+ executeHttpPostRequest(createAttrReq);
+ logger.info("created attribute:" + attribute + " in table:" + tableName);
+ }
+ }
+
+ private static void insertRecords() throws IOException {
+
+ String table = "student";
+ String schema = "demo";
+ String operation = "insert";
+ String records = "[" +
+ "{\"id\":1, \"name\":\"John\", \"grade\":4},"
+ + "{\"id\":2, \"name\":\"James\", \"grade\":1},"
+ + "{\"id\":3, \"name\":\"Williams\", \"grade\":1},"
+ + "{\"id\":4, \"name\":\"Robin\", \"grade\":4},"
+ + "{\"id\":5, \"name\":\"Torry\", \"grade\":3},"
+ + "{\"id\":6, \"name\":\"Nancy\", \"grade\":5},"
+ + "{\"id\":7, \"name\":\"Mary\", \"grade\":5},"
+ + "{\"id\":8, \"name\":\"Jenny\", \"grade\":6},"
+ + "{\"id\":9, \"name\":\"Katy\", \"grade\":6},"
+ + "{\"id\":15, \"name\":\"Michael\", \"grade\":6}"
+ + "]";
+ String requestBody = "{\"table\":" + "\"" + table + "\","
+ + "\"schema\":" + "\"" + schema + "\"" + ","
+ + "\"operation\":" + "\"" + operation + "\"" + ","
+ + "\"records\":" + records
+ + "}";
+ String sql = "{"
+ + "\"operation\":\"sql\", "
+ + "\"sql\":\"insert into demo.student(id, name, grade) values"
+ + "(1, 'John', 4), (2, 'James', 1), (3, 'Williams', 1), (4, 'Robin', 4), (5, 'Torry', 3),"
+ + " (6, 'Nancy', 5), (7, 'Mary', 5), (8, 'Jenny', 6), (9, 'Katy', 6)\""
+ + "}";
+ executeHttpPostRequest(requestBody);
+ }
+
+ @AfterAll
+ static void stopHarperDB() {
+ harperDBContainer.stop();
+ }
+
+ @Test
+ void whenConnectionInfoInURL_thenConnectSuccess() throws SQLException {
+ assertDoesNotThrow(() -> {
+ String URL = "jdbc:harperdb:Server=127.0.0.1:" + port + ";User=admin;Password=password;";
+
+ try (Connection connection = DriverManager.getConnection(URL)) {
+ connection.createStatement().executeQuery("select 1");
+ logger.info("Connection Successful");
+ }
+ });
+ }
+
+ @Test
+ void whenConnectionInfoInProperties_thenConnectSuccess() throws SQLException {
+ assertDoesNotThrow(() -> {
+ Properties prop = new Properties();
+ prop.setProperty("Server", "127.0.0.1:" + port);
+ prop.setProperty("User", "admin");
+ prop.setProperty("Password", "password");
+
+ try (Connection connection = DriverManager.getConnection("jdbc:harperdb:", prop)) {
+ connection.createStatement().executeQuery("select 1");
+ logger.info("Connection Successful");
+ }
+ });
+ }
+
+ @Test
+ void whenConnectionPooling_thenConnectSuccess() throws SQLException {
+ assertDoesNotThrow(() -> {
+ HarperDBConnectionPoolDataSource harperdbPoolDataSource = new HarperDBConnectionPoolDataSource();
+ String URL = "jdbc:harperdb:UseConnectionPooling=true;PoolMaxSize=2;Server=127.0.0.1:" + port
+ + ";User=admin;Password=1234;";
+ harperdbPoolDataSource.setURL(URL);
+
+ try(Connection connection = harperdbPoolDataSource.getPooledConnection().getConnection()) {
+ connection.createStatement().executeQuery("select 1");
+ logger.info("Connection Successful");
+ }
+ });
+ }
+
+ private static Connection getConnection() throws SQLException {
+ String URL = "jdbc:harperdb:Server=127.0.0.1:" + port + ";User=admin;Password=password;";
+ return DriverManager.getConnection(URL);
+ }
+
+ @Test
+ void givenStatement_whenFetchRecord_thenSuccess() throws SQLException {
+ final String SQL_QUERY = "select id, name, grade from demo.student";
+
+ try(Connection connection = getConnection()) {
+ Statement statement = connection.createStatement();
+ ResultSet resultSet = statement.executeQuery(SQL_QUERY);
+ while (resultSet.next()) {
+ int id = resultSet.getInt("id");
+ String name = resultSet.getString("name");
+ int grade = resultSet.getInt("grade");
+ assertNotNull(Integer.valueOf(id));
+ logger.info("Student id:" + id + " Student Name:" + name + " grade:" + grade);
+ }
+ }
+ }
+
+ @Test
+ void givenStatement_whenInsertRecord_thenSuccess() throws SQLException {
+ final String INSERT_SQL = "insert into demo.student(id, name, grade) values (10, 'Barak', 3)";
+
+ try(Connection connection = getConnection()) {
+ Statement statement = connection.createStatement();
+ assertDoesNotThrow(() -> statement.execute(INSERT_SQL));
+ }
+ }
+
+ @Test
+ void givenStatement_whenInsertRecordInTableWithoutAttributes_thenSuccess() throws SQLException {
+ final String INSERT_SQL = "insert into demo.teacher(id, name, joining_date) "
+ + "values (1, 'David Martinez', '04-05-2004'), (2, 'Eric Martin', '04-10-2000')";
+ final String QUERY_SQL = "select name, joining_date from demo.teacher where name = ?";
+
+ try(Connection connection = getConnection()) {
+ Statement statement = connection.createStatement();
+ assertDoesNotThrow(() -> statement.execute(INSERT_SQL));
+ PreparedStatement preparedStatement = connection.prepareStatement(QUERY_SQL);
+ preparedStatement.setString(1, "Eric Martin");
+ ResultSet resultSet = preparedStatement.executeQuery();
+ while (resultSet.next()) {
+ String teacherName = resultSet.getString("name");
+ String joinDate = resultSet.getString("joining_date");
+ assertEquals("Eric Martin", teacherName);
+ assertEquals("04-10-2000", joinDate);
+ logger.info("name:" + teacherName + " joining date:" + joinDate);
+ }
+ }
+ }
+
+ @Test
+ void givenStatement_whenUpdateRecord_thenSuccess() throws SQLException {
+ final String UPDATE_SQL = "update demo.student set grade = 4 where id = 5";
+
+ try(Connection connection = getConnection()) {
+ Statement statement = connection.createStatement();
+ assertDoesNotThrow(() -> statement.execute(UPDATE_SQL));
+ assertEquals(1, statement.getUpdateCount());
+ }
+ }
+
+ @Test
+ void givenStatement_whenDeleteRecord_thenSuccess() throws SQLException {
+ final String DELETE_SQL = "delete from demo.student where id = 3";
+
+ try(Connection connection = getConnection()) {
+ Statement statement = connection.createStatement();
+ assertDoesNotThrow(() -> statement.execute(DELETE_SQL));
+ assertEquals(1, statement.getUpdateCount());
+ }
+ }
+
+ @Test
+ void givenPreparedStatement_whenFetchRecord_thenSuccess() throws SQLException {
+ final String SQL_QUERY = "select id, name, grade from demo.student where name = ? and grade = ?";
+
+ try(Connection connection = getConnection()) {
+ PreparedStatement preparedStatement = connection.prepareStatement(SQL_QUERY);
+ preparedStatement.setString(1, "Robin");
+ preparedStatement.setInt(2, 4);
+ ResultSet resultSet = preparedStatement.executeQuery();
+ while (resultSet.next()) {
+ int id = resultSet.getInt("id");
+ String name = resultSet.getString("name");
+ int grade = resultSet.getInt("grade");
+ assertNotNull(Integer.valueOf(id));
+ assertEquals("Robin", name);
+ logger.info("Student id:" + id + " Student Name:" + name + " grade:" + grade);
+ }
+ }
+ }
+
+ @Test
+ void givenPreparedStatement_whenDeleteRecord_thenSuccess() throws SQLException {
+ final String DELETE_SQL = "delete from demo.student where name = ?";
+
+ try(Connection connection = getConnection()) {
+ PreparedStatement preparedStatement = connection.prepareStatement(DELETE_SQL);
+ preparedStatement.setString(1, "James");
+ assertDoesNotThrow(() -> preparedStatement.execute());
+ assertEquals(1, preparedStatement.getUpdateCount());
+ }
+ }
+
+ @Test
+ void givenPreparedStatement_whenUpdateRecord_thenSuccess() throws SQLException {
+ final String UPDATE_SQL = "update demo.student set grade = ? where id = ? and name = ?";
+
+ try(Connection connection = getConnection()) {
+ PreparedStatement preparedStatement = connection.prepareStatement(UPDATE_SQL);
+ preparedStatement.setInt(1, 5);
+ preparedStatement.setInt(2, 1);
+ preparedStatement.setString(3, "John");
+ assertDoesNotThrow(() -> preparedStatement.execute());
+ assertEquals(1, preparedStatement.getUpdateCount());
+ }
+ }
+
+ @Test
+ void whenAddtoBatch_thenExecuteBatchIsSuccess() throws SQLException {
+ final String INSERT_SQL = "insert into demo.teacher(id, name, joining_date)"
+ + "values(?, ?, ?)";
+
+ try(Connection connection = getConnection()) {
+ PreparedStatement preparedStatement = connection.prepareStatement(INSERT_SQL);
+ preparedStatement.setInt(1, 1);
+ preparedStatement.setString(2, "Bret Lee");
+ preparedStatement.setString(3, "07-08-2002");
+ preparedStatement.addBatch();
+
+ preparedStatement.setInt(1, 2);
+ preparedStatement.setString(2, "Sarah Glimmer");
+ preparedStatement.setString(3, "07-08-1997");
+ preparedStatement.addBatch();
+
+ assertDoesNotThrow(() -> preparedStatement.executeBatch());
+ }
+ }
+
+ @Test
+ void whenExecuteStoredToCreateTable_thenSuccess() throws SQLException {
+ final String CREATE_TABLE_SQL = "CreateTable";
+ try(Connection connection = getConnection()) {
+ CallableStatement callableStatement = connection.prepareCall(CREATE_TABLE_SQL);
+
+ callableStatement.setString("SchemaName", "prod"); //schema gets created too
+ callableStatement.setString("TableName", "subject");
+ callableStatement.setString("PrimaryKey", "id");
+ Boolean result = callableStatement.execute();
+
+ ResultSet resultSet = callableStatement.getResultSet();
+
+ while(resultSet.next()) {
+ String tableCreated = resultSet.getString("Success");
+ assertEquals("true", tableCreated);
+ logger.info("result of the callable execute:" + tableCreated);
+ }
+ }
+ }
+}
From 1a63be903582dd95c93499039a363f91c678d281 Mon Sep 17 00:00:00 2001
From: parthiv39731 <70740707+parthiv39731@users.noreply.github.com>
Date: Mon, 27 Nov 2023 10:27:27 +0530
Subject: [PATCH 2/8] BAEL-7259
---
.../baledung/harperdb/HarperDBApiService.java | 38 +++---
.../baledung/harperdb/HarperDBContainer.java | 32 ++---
.../baledung/harperdb/HarperDBLiveTest.java | 123 ++++++++----------
3 files changed, 89 insertions(+), 104 deletions(-)
diff --git a/persistence-modules/java-harperdb/src/test/java/com/baledung/harperdb/HarperDBApiService.java b/persistence-modules/java-harperdb/src/test/java/com/baledung/harperdb/HarperDBApiService.java
index 1eedd8648f..15178f9769 100644
--- a/persistence-modules/java-harperdb/src/test/java/com/baledung/harperdb/HarperDBApiService.java
+++ b/persistence-modules/java-harperdb/src/test/java/com/baledung/harperdb/HarperDBApiService.java
@@ -14,17 +14,20 @@ import java.io.IOException;
import java.util.Base64;
public class HarperDBApiService {
+ private static final Logger LOGGER = LoggerFactory.getLogger(HarperDBApiService.class);
private String url;
private String base64auth;
public HarperDBApiService(String url, String user, String password) {
this.url = url;
this.base64auth = Base64.getEncoder()
- .encodeToString(new StringBuilder().append(user).append(":").append(password).toString().getBytes());
+ .encodeToString(new StringBuilder().append(user)
+ .append(":")
+ .append(password)
+ .toString()
+ .getBytes());
}
- private static final Logger LOGGER = LoggerFactory.getLogger(HarperDBApiService.class);
-
public void createSchema(String schema) throws IOException {
String requestBody = "{\"operation\":\"create_schema\", \"" + "schema\":\"" + schema + "\"" + "}";
executeHttpPostRequest(requestBody);
@@ -32,18 +35,18 @@ public class HarperDBApiService {
public void createTable(String schema, String table, String ... attributes) throws IOException {
String createTableReq = "{\"operation\":\"create_table\","
- + "\"schema\":\"" + schema
- + "\",\"table\":\"" + table
- + "\",\"hash_attribute\":\"id\""
- + "}";
+ + "\"schema\":\"" + schema
+ + "\",\"table\":\"" + table
+ + "\",\"hash_attribute\":\"id\""
+ + "}";
executeHttpPostRequest(createTableReq);
LOGGER.info("created table:" + table);
for (String attribute : attributes) {
String createAttrReq = "{\"operation\":\"create_attribute\",\"schema\":\""
- + schema + "\",\"table\":\""
- + table + "\",\"attribute\":\""
- + attribute + "\""
- + "}";
+ + schema + "\",\"table\":\""
+ + table + "\",\"attribute\":\""
+ + attribute + "\""
+ + "}";
executeHttpPostRequest(createAttrReq);
LOGGER.info("created attribute:" + attribute + " in table:" + table);
}
@@ -51,24 +54,25 @@ public class HarperDBApiService {
public void insertRecords(String schema, String table, String records) throws IOException {
String requestBody = "{\"table\":" + "\"" + table + "\","
- + "\"schema\":" + "\"" + schema + "\"" + ","
- + "\"operation\":" + "\"" + "insert" + "\"" + ","
- + "\"records\":" + records
- + "}";
+ + "\"schema\":" + "\"" + schema + "\"" + ","
+ + "\"operation\":" + "\"" + "insert" + "\"" + ","
+ + "\"records\":" + records
+ + "}";
executeHttpPostRequest(requestBody);
}
private void executeHttpPostRequest(String httpRequest) throws IOException {
LOGGER.info("Post request body:" + httpRequest);
- try (CloseableHttpClient closeableHttpClient = HttpClientBuilder.create().build()) {
+ try (CloseableHttpClient closeableHttpClient = HttpClientBuilder.create()
+ .build()) {
HttpPost request = new HttpPost(this.url);
request.addHeader("Authorization", "Basic " + this.base64auth);
request.addHeader("Content-Type", "application/json");
request.setEntity((HttpEntity) new StringEntity(httpRequest));
CloseableHttpResponse response = closeableHttpClient.execute((ClassicHttpRequest) request);
LOGGER.info("REST API response:" + response.toString());
- assert(200 == response.getCode());
+ assert (200 == response.getCode());
}
}
}
diff --git a/persistence-modules/java-harperdb/src/test/java/com/baledung/harperdb/HarperDBContainer.java b/persistence-modules/java-harperdb/src/test/java/com/baledung/harperdb/HarperDBContainer.java
index 79656b1b73..5ce6e069ce 100644
--- a/persistence-modules/java-harperdb/src/test/java/com/baledung/harperdb/HarperDBContainer.java
+++ b/persistence-modules/java-harperdb/src/test/java/com/baledung/harperdb/HarperDBContainer.java
@@ -1,42 +1,36 @@
package com.baledung.harperdb;
+import java.util.Map;
+
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.testcontainers.containers.GenericContainer;
-import java.util.Map;
-
public class HarperDBContainer {
+
private final static Logger LOGGER = LoggerFactory.getLogger(HarperDBContainer.class);
+ private static final Map DEFAULT_ENV_MAP = Map.of("HDB_ADMIN_USERNAME", "admin", "HDB_ADMIN_PASSWORD", "password",
+ "OPERATIONSAPI_NETWORK_PORT", "9925", "ROOTPATH", "/home/harperdb/hdb", "LOGGING_STDSTREAMS", "true");
-
- private static final Map DEFAULT_ENV_MAP = Map.of(
- "HDB_ADMIN_USERNAME", "admin",
- "HDB_ADMIN_PASSWORD", "password",
- "OPERATIONSAPI_NETWORK_PORT", "9925",
- "ROOTPATH", "/home/harperdb/hdb",
- "LOGGING_STDSTREAMS", "true"
- );
-
- private static final Integer[] DEFAULT_EXPOSED_PORTS = {9925, 9926};
+ private static final Integer[] DEFAULT_EXPOSED_PORTS = { 9925, 9926 };
private static final String HARPER_DOCKER_IMAGE = "harperdb/harperdb:latest";
public void stop() {
harperDBContainer.stop();
}
+
GenericContainer harperDBContainer;
+
public GenericContainer installHarperDB() {
- harperDBContainer = new GenericContainer(HARPER_DOCKER_IMAGE)
- .withEnv(DEFAULT_ENV_MAP)
- .withExposedPorts(DEFAULT_EXPOSED_PORTS);
+ harperDBContainer = new GenericContainer(HARPER_DOCKER_IMAGE).withEnv(DEFAULT_ENV_MAP)
+ .withExposedPorts(DEFAULT_EXPOSED_PORTS);
return harperDBContainer;
}
- public GenericContainer installHarperDB(String dockerImgage, final Map envMap, final Integer ... exposedPorts) {
- return new GenericContainer(dockerImgage)
- .withEnv(envMap)
- .withExposedPorts(exposedPorts);
+ public GenericContainer installHarperDB(String dockerImgage, final Map envMap, final Integer... exposedPorts) {
+ return new GenericContainer(dockerImgage).withEnv(envMap)
+ .withExposedPorts(exposedPorts);
}
}
diff --git a/persistence-modules/java-harperdb/src/test/java/com/baledung/harperdb/HarperDBLiveTest.java b/persistence-modules/java-harperdb/src/test/java/com/baledung/harperdb/HarperDBLiveTest.java
index 767d9d971b..42ef04dadf 100644
--- a/persistence-modules/java-harperdb/src/test/java/com/baledung/harperdb/HarperDBLiveTest.java
+++ b/persistence-modules/java-harperdb/src/test/java/com/baledung/harperdb/HarperDBLiveTest.java
@@ -1,6 +1,7 @@
package com.baledung.harperdb;
import cdata.jdbc.harperdb.HarperDBConnectionPoolDataSource;
+
import org.junit.jupiter.api.AfterAll;
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.Test;
@@ -16,6 +17,7 @@ import java.util.Properties;
import static org.junit.jupiter.api.Assertions.*;
public class HarperDBLiveTest {
+
private static final Logger logger = LoggerFactory.getLogger(HarperDBLiveTest.class);
private static String host;
@@ -61,40 +63,27 @@ public class HarperDBLiveTest {
}
private static void insertSubjectRecords() throws IOException {
- String records = "["
- + "{\"id\":1, \"name\":\"English\"},"
- + "{\"id\":2, \"name\":\"Maths\"},"
- + "{\"id\":3, \"name\":\"Science\"}"
- + "]";
+ String records = "[" + "{\"id\":1, \"name\":\"English\"}," + "{\"id\":2, \"name\":\"Maths\"}," + "{\"id\":3, \"name\":\"Science\"}" + "]";
harperDbApiService.insertRecords("Demo", "Subject", records);
}
- private static void insertTeacherRecords() throws IOException {
- String records = "[" +
- "{\"id\":1, \"name\":\"Parthiv Pradhan\", \"joining_date\":\"04-05-2000\"},"
- + "{\"id\":2, \"name\":\"David Martinez\", \"joining_date\":\"20-10-2005\"},"
- + "{\"id\":3, \"name\":\"Liam Williams\", \"joining_date\":\"04-06-1997\"},"
- + "{\"id\":4, \"name\":\"Robin Williams\", \"joining_date\":\"01-01-2020\"},"
- + "{\"id\":5, \"name\":\"Eric Martin\", \"joining_date\":\"04-05-2022\"},"
- + "{\"id\":6, \"name\":\"Sajjan Nagendra\", \"joining_date\":\"02-02-1999\"}"
- + "]";
+ private static void insertTeacherRecords() throws IOException {
+ String records = "[" + "{\"id\":1, \"name\":\"Parthiv Pradhan\", \"joining_date\":\"04-05-2000\"}," +
+ "{\"id\":2, \"name\":\"David Martinez\", \"joining_date\":\"20-10-2005\"}," +
+ "{\"id\":3, \"name\":\"Liam Williams\", \"joining_date\":\"04-06-1997\"}," +
+ "{\"id\":4, \"name\":\"Robin Williams\", \"joining_date\":\"01-01-2020\"}," +
+ "{\"id\":5, \"name\":\"Eric Martin\", \"joining_date\":\"04-05-2022\"}," +
+ "{\"id\":6, \"name\":\"Sajjan Nagendra\", \"joining_date\":\"02-02-1999\"}" + "]";
harperDbApiService.insertRecords("Demo", "Teacher", records);
}
private static void insertTeacherDetailsRecords() throws IOException {
- String records = "["
- + "{\"id\":1, \"teacher_id\":1, \"subject_id\":1},"
- + "{\"id\":2, \"teacher_id\":1, \"subject_id\":2},"
- + "{\"id\":3, \"teacher_id\":2, \"subject_id\":3 },"
- + "{\"id\":4, \"teacher_id\":3, \"subject_id\":1},"
- + "{\"id\":5, \"teacher_id\":3, \"subject_id\":3},"
- + "{\"id\":6, \"teacher_id\":4, \"subject_id\":2},"
- + "{\"id\":7, \"teacher_id\":5, \"subject_id\":3},"
- + "{\"id\":8, \"teacher_id\":6, \"subject_id\":1},"
- + "{\"id\":9, \"teacher_id\":6, \"subject_id\":2},"
- + "{\"id\":15, \"teacher_id\":6, \"subject_id\":3}"
- + "]";
+ String records = "[" + "{\"id\":1, \"teacher_id\":1, \"subject_id\":1}," + "{\"id\":2, \"teacher_id\":1, \"subject_id\":2}," +
+ "{\"id\":3, \"teacher_id\":2, \"subject_id\":3 }," + "{\"id\":4, \"teacher_id\":3, \"subject_id\":1}," +
+ "{\"id\":5, \"teacher_id\":3, \"subject_id\":3}," + "{\"id\":6, \"teacher_id\":4, \"subject_id\":2}," +
+ "{\"id\":7, \"teacher_id\":5, \"subject_id\":3}," + "{\"id\":8, \"teacher_id\":6, \"subject_id\":1}," +
+ "{\"id\":9, \"teacher_id\":6, \"subject_id\":2}," + "{\"id\":15, \"teacher_id\":6, \"subject_id\":3}" + "]";
harperDbApiService.insertRecords("Demo", "Teacher_Details", records);
}
@@ -110,7 +99,8 @@ public class HarperDBLiveTest {
final String JDBC_URL = "jdbc:harperdb:Server=127.0.0.1:" + port + ";User=admin;Password=password;";
try (Connection connection = DriverManager.getConnection(JDBC_URL)) {
- connection.createStatement().executeQuery("select 1");
+ connection.createStatement()
+ .executeQuery("select 1");
logger.info("Connection Successful");
}
});
@@ -125,7 +115,8 @@ public class HarperDBLiveTest {
prop.setProperty("Password", "password");
try (Connection connection = DriverManager.getConnection("jdbc:harperdb:", prop)) {
- connection.createStatement().executeQuery("select 1");
+ connection.createStatement()
+ .executeQuery("select 1");
logger.info("Connection Successful");
}
});
@@ -135,12 +126,13 @@ public class HarperDBLiveTest {
void whenConnectionPooling_thenConnectSuccess() throws SQLException {
assertDoesNotThrow(() -> {
HarperDBConnectionPoolDataSource harperdbPoolDataSource = new HarperDBConnectionPoolDataSource();
- final String JDBC_URL = "jdbc:harperdb:UseConnectionPooling=true;PoolMaxSize=2;Server=127.0.0.1:" + port
- + ";User=admin;Password=password;";
+ final String JDBC_URL = "jdbc:harperdb:UseConnectionPooling=true;PoolMaxSize=2;Server=127.0.0.1:" + port + ";User=admin;Password=password;";
harperdbPoolDataSource.setURL(JDBC_URL);
- try(Connection connection = harperdbPoolDataSource.getPooledConnection().getConnection()) {
- connection.createStatement().executeQuery("select 1");
+ try (Connection connection = harperdbPoolDataSource.getPooledConnection()
+ .getConnection()) {
+ connection.createStatement()
+ .executeQuery("select 1");
logger.info("Connection Pool Successful");
}
});
@@ -155,7 +147,7 @@ public class HarperDBLiveTest {
void givenStatement_whenFetchRecord_thenSuccess() throws SQLException {
final String SQL_QUERY = "select id, name, grade from Demo.student";
- try(Connection connection = getConnection()) {
+ try (Connection connection = getConnection()) {
Statement statement = connection.createStatement();
ResultSet resultSet = statement.executeQuery(SQL_QUERY);
while (resultSet.next()) {
@@ -172,7 +164,7 @@ public class HarperDBLiveTest {
void givenStatement_whenInsertRecord_thenSuccess() throws SQLException {
final String INSERT_SQL = "insert into Demo.student(id, name, grade) values (10, 'Barak', 3)";
- try(Connection connection = getConnection()) {
+ try (Connection connection = getConnection()) {
Statement statement = connection.createStatement();
assertDoesNotThrow(() -> statement.execute(INSERT_SQL));
}
@@ -180,11 +172,11 @@ public class HarperDBLiveTest {
@Test
void givenStatement_whenInsertRecordInTableWithoutAttributes_thenSuccess() throws SQLException {
- final String INSERT_SQL = "insert into Demo.teacher(id, name, joining_date) "
- + "values (7, 'David Sirocco', '04-05-2004'), (8, 'Ali Azmat', '04-10-2000')";
+ final String INSERT_SQL =
+ "insert into Demo.teacher(id, name, joining_date) " + "values (7, 'David Sirocco', '04-05-2004'), (8, 'Ali Azmat', '04-10-2000')";
final String QUERY_SQL = "select name, joining_date from Demo.teacher where name = ?";
- try(Connection connection = getConnection()) {
+ try (Connection connection = getConnection()) {
Statement statement = connection.createStatement();
assertDoesNotThrow(() -> statement.execute(INSERT_SQL));
PreparedStatement preparedStatement = connection.prepareStatement(QUERY_SQL);
@@ -204,7 +196,7 @@ public class HarperDBLiveTest {
void givenStatement_whenUpdateRecord_thenSuccess() throws SQLException {
final String UPDATE_SQL = "update Demo.student set grade = 4 where id = 5";
- try(Connection connection = getConnection()) {
+ try (Connection connection = getConnection()) {
Statement statement = connection.createStatement();
assertDoesNotThrow(() -> statement.execute(UPDATE_SQL));
assertEquals(1, statement.getUpdateCount());
@@ -215,7 +207,7 @@ public class HarperDBLiveTest {
void givenStatement_whenDeleteRecord_thenSuccess() throws SQLException {
final String DELETE_SQL = "delete from Demo.student where id = 3";
- try(Connection connection = getConnection()) {
+ try (Connection connection = getConnection()) {
Statement statement = connection.createStatement();
assertDoesNotThrow(() -> statement.execute(DELETE_SQL));
assertEquals(1, statement.getUpdateCount());
@@ -226,27 +218,27 @@ public class HarperDBLiveTest {
void givenPreparedStatement_whenFetchRecord_thenSuccess() throws SQLException {
final String SQL_QUERY = "select id, name, grade from Demo.student where name = ? and grade = ?";
- try(Connection connection = getConnection()) {
- PreparedStatement preparedStatement = connection.prepareStatement(SQL_QUERY);
- preparedStatement.setString(1, "Robin");
- preparedStatement.setInt(2, 4);
- ResultSet resultSet = preparedStatement.executeQuery();
- while (resultSet.next()) {
- int id = resultSet.getInt("id");
- String name = resultSet.getString("name");
- int grade = resultSet.getInt("grade");
- assertNotNull(Integer.valueOf(id));
- assertEquals("Robin", name);
- logger.info("Student id:" + id + " Student Name:" + name + " grade:" + grade);
- }
- }
+ try (Connection connection = getConnection()) {
+ PreparedStatement preparedStatement = connection.prepareStatement(SQL_QUERY);
+ preparedStatement.setString(1, "Robin");
+ preparedStatement.setInt(2, 4);
+ ResultSet resultSet = preparedStatement.executeQuery();
+ while (resultSet.next()) {
+ int id = resultSet.getInt("id");
+ String name = resultSet.getString("name");
+ int grade = resultSet.getInt("grade");
+ assertNotNull(Integer.valueOf(id));
+ assertEquals("Robin", name);
+ logger.info("Student id:" + id + " Student Name:" + name + " grade:" + grade);
+ }
+ }
}
@Test
void givenPreparedStatement_whenDeleteRecord_thenSuccess() throws SQLException {
final String DELETE_SQL = "delete from Demo.student where name = ?";
- try(Connection connection = getConnection()) {
+ try (Connection connection = getConnection()) {
PreparedStatement preparedStatement = connection.prepareStatement(DELETE_SQL);
preparedStatement.setString(1, "James");
assertDoesNotThrow(() -> preparedStatement.execute());
@@ -258,7 +250,7 @@ public class HarperDBLiveTest {
void givenPreparedStatement_whenUpdateRecord_thenSuccess() throws SQLException {
final String UPDATE_SQL = "update Demo.student set grade = ? where id = ? and name = ?";
- try(Connection connection = getConnection()) {
+ try (Connection connection = getConnection()) {
PreparedStatement preparedStatement = connection.prepareStatement(UPDATE_SQL);
preparedStatement.setInt(1, 5);
preparedStatement.setInt(2, 1);
@@ -270,10 +262,9 @@ public class HarperDBLiveTest {
//@Test
void whenAddtoBatch_thenExecuteBatchIsSuccess() throws SQLException {
- final String INSERT_SQL = "insert into Demo.teacher(id, name, joining_date, subject_id)"
- + "values(?, ?, ?, ?)";
+ final String INSERT_SQL = "insert into Demo.teacher(id, name, joining_date, subject_id)" + "values(?, ?, ?, ?)";
- try(Connection connection = getConnection()) {
+ try (Connection connection = getConnection()) {
PreparedStatement preparedStatement = connection.prepareStatement(INSERT_SQL);
preparedStatement.setInt(1, 9);
preparedStatement.setString(2, "Bret Lee");
@@ -292,23 +283,19 @@ public class HarperDBLiveTest {
}
}
-
@Test
void whenExecuteJoinQuery_thenResultSuccess() throws SQLException {
- final String JOIN_QUERY = "SELECT t.name as teacher_name, s.name as subject_name " +
- "from Demo.teacher AS t INNER JOIN Demo.subject AS s ON t.subject_id = s.id";
+ final String JOIN_QUERY =
+ "SELECT t.name as teacher_name, s.name as subject_name " + "from Demo.teacher AS t INNER JOIN Demo.subject AS s ON t.subject_id = s.id";
- try(Connection connection = getConnection()) {
+ try (Connection connection = getConnection()) {
Statement statement = connection.createStatement();
-
ResultSet resultSet = statement.executeQuery(JOIN_QUERY);
while (resultSet.next()) {
- logger.info("Teacher Name:" + resultSet.getString("teacher_name") + " Subject Name:"
- + resultSet.getString("subject_name"));
+ logger.info("Teacher Name:" + resultSet.getString("teacher_name") + " Subject Name:" + resultSet.getString("subject_name"));
}
-
}
}
@@ -316,7 +303,7 @@ public class HarperDBLiveTest {
@Test
void whenExecuteStoredToCreateTable_thenSuccess() throws SQLException {
final String CREATE_TABLE_SQL = "CreateTable";
- try(Connection connection = getConnection()) {
+ try (Connection connection = getConnection()) {
CallableStatement callableStatement = connection.prepareCall(CREATE_TABLE_SQL);
callableStatement.setString("SchemaName", "prod"); //schema gets created too
@@ -326,7 +313,7 @@ public class HarperDBLiveTest {
ResultSet resultSet = callableStatement.getResultSet();
- while(resultSet.next()) {
+ while (resultSet.next()) {
String tableCreated = resultSet.getString("Success");
assertEquals("true", tableCreated);
logger.info("result of the callable execute:" + tableCreated);
From 43fd0973ddeec97155f6c787336d05e05d0f8144 Mon Sep 17 00:00:00 2001
From: parthiv39731 <70740707+parthiv39731@users.noreply.github.com>
Date: Mon, 27 Nov 2023 23:15:13 +0530
Subject: [PATCH 3/8] BAEL-7259
---
.../baledung/harperdb/HarperDBLiveTest.java | 349 +++++++++---------
1 file changed, 177 insertions(+), 172 deletions(-)
diff --git a/persistence-modules/java-harperdb/src/test/java/com/baledung/harperdb/HarperDBLiveTest.java b/persistence-modules/java-harperdb/src/test/java/com/baledung/harperdb/HarperDBLiveTest.java
index 42ef04dadf..1cd377dc6d 100644
--- a/persistence-modules/java-harperdb/src/test/java/com/baledung/harperdb/HarperDBLiveTest.java
+++ b/persistence-modules/java-harperdb/src/test/java/com/baledung/harperdb/HarperDBLiveTest.java
@@ -12,6 +12,7 @@ import org.testcontainers.containers.GenericContainer;
import java.io.IOException;
import java.net.URISyntaxException;
import java.sql.*;
+import java.util.Arrays;
import java.util.Properties;
import static org.junit.jupiter.api.Assertions.*;
@@ -63,18 +64,22 @@ public class HarperDBLiveTest {
}
private static void insertSubjectRecords() throws IOException {
- String records = "[" + "{\"id\":1, \"name\":\"English\"}," + "{\"id\":2, \"name\":\"Maths\"}," + "{\"id\":3, \"name\":\"Science\"}" + "]";
+ String records = "["
+ + "{\"id\":1, \"name\":\"English\"},"
+ + "{\"id\":2, \"name\":\"Maths\"},"
+ + "{\"id\":3, \"name\":\"Science\"}"
+ + "]";
harperDbApiService.insertRecords("Demo", "Subject", records);
}
private static void insertTeacherRecords() throws IOException {
- String records = "[" + "{\"id\":1, \"name\":\"Parthiv Pradhan\", \"joining_date\":\"04-05-2000\"}," +
- "{\"id\":2, \"name\":\"David Martinez\", \"joining_date\":\"20-10-2005\"}," +
- "{\"id\":3, \"name\":\"Liam Williams\", \"joining_date\":\"04-06-1997\"}," +
+ String records = "[" + "{\"id\":1, \"name\":\"James Cameron\", \"joining_date\":\"04-05-2000\"}," +
+ "{\"id\":2, \"name\":\"Joe Biden\", \"joining_date\":\"20-10-2005\"}," +
+ "{\"id\":3, \"name\":\"Jessie Williams\", \"joining_date\":\"04-06-1997\"}," +
"{\"id\":4, \"name\":\"Robin Williams\", \"joining_date\":\"01-01-2020\"}," +
- "{\"id\":5, \"name\":\"Eric Martin\", \"joining_date\":\"04-05-2022\"}," +
- "{\"id\":6, \"name\":\"Sajjan Nagendra\", \"joining_date\":\"02-02-1999\"}" + "]";
+ "{\"id\":5, \"name\":\"Eric Johnson\", \"joining_date\":\"04-05-2022\"}," +
+ "{\"id\":6, \"name\":\"Raghu Yadav\", \"joining_date\":\"02-02-1999\"}" + "]";
harperDbApiService.insertRecords("Demo", "Teacher", records);
}
@@ -138,175 +143,13 @@ public class HarperDBLiveTest {
});
}
- private static Connection getConnection() throws SQLException {
- String URL = "jdbc:harperdb:Server=127.0.0.1:" + port + ";User=admin;Password=password;";
- return DriverManager.getConnection(URL);
- }
-
- @Test
- void givenStatement_whenFetchRecord_thenSuccess() throws SQLException {
- final String SQL_QUERY = "select id, name, grade from Demo.student";
-
- try (Connection connection = getConnection()) {
- Statement statement = connection.createStatement();
- ResultSet resultSet = statement.executeQuery(SQL_QUERY);
- while (resultSet.next()) {
- int id = resultSet.getInt("id");
- String name = resultSet.getString("name");
- int grade = resultSet.getInt("grade");
- assertNotNull(Integer.valueOf(id));
- logger.info("Student id:" + id + " Student Name:" + name + " grade:" + grade);
- }
- }
- }
-
- @Test
- void givenStatement_whenInsertRecord_thenSuccess() throws SQLException {
- final String INSERT_SQL = "insert into Demo.student(id, name, grade) values (10, 'Barak', 3)";
-
- try (Connection connection = getConnection()) {
- Statement statement = connection.createStatement();
- assertDoesNotThrow(() -> statement.execute(INSERT_SQL));
- }
- }
-
- @Test
- void givenStatement_whenInsertRecordInTableWithoutAttributes_thenSuccess() throws SQLException {
- final String INSERT_SQL =
- "insert into Demo.teacher(id, name, joining_date) " + "values (7, 'David Sirocco', '04-05-2004'), (8, 'Ali Azmat', '04-10-2000')";
- final String QUERY_SQL = "select name, joining_date from Demo.teacher where name = ?";
-
- try (Connection connection = getConnection()) {
- Statement statement = connection.createStatement();
- assertDoesNotThrow(() -> statement.execute(INSERT_SQL));
- PreparedStatement preparedStatement = connection.prepareStatement(QUERY_SQL);
- preparedStatement.setString(1, "David Sirocco");
- ResultSet resultSet = preparedStatement.executeQuery();
- while (resultSet.next()) {
- String teacherName = resultSet.getString("name");
- String joinDate = resultSet.getString("joining_date");
- assertEquals("David Sirocco", teacherName);
- assertEquals("04-05-2004", joinDate);
- logger.info("name:" + teacherName + " joining date:" + joinDate);
- }
- }
- }
-
- @Test
- void givenStatement_whenUpdateRecord_thenSuccess() throws SQLException {
- final String UPDATE_SQL = "update Demo.student set grade = 4 where id = 5";
-
- try (Connection connection = getConnection()) {
- Statement statement = connection.createStatement();
- assertDoesNotThrow(() -> statement.execute(UPDATE_SQL));
- assertEquals(1, statement.getUpdateCount());
- }
- }
-
- @Test
- void givenStatement_whenDeleteRecord_thenSuccess() throws SQLException {
- final String DELETE_SQL = "delete from Demo.student where id = 3";
-
- try (Connection connection = getConnection()) {
- Statement statement = connection.createStatement();
- assertDoesNotThrow(() -> statement.execute(DELETE_SQL));
- assertEquals(1, statement.getUpdateCount());
- }
- }
-
- @Test
- void givenPreparedStatement_whenFetchRecord_thenSuccess() throws SQLException {
- final String SQL_QUERY = "select id, name, grade from Demo.student where name = ? and grade = ?";
-
- try (Connection connection = getConnection()) {
- PreparedStatement preparedStatement = connection.prepareStatement(SQL_QUERY);
- preparedStatement.setString(1, "Robin");
- preparedStatement.setInt(2, 4);
- ResultSet resultSet = preparedStatement.executeQuery();
- while (resultSet.next()) {
- int id = resultSet.getInt("id");
- String name = resultSet.getString("name");
- int grade = resultSet.getInt("grade");
- assertNotNull(Integer.valueOf(id));
- assertEquals("Robin", name);
- logger.info("Student id:" + id + " Student Name:" + name + " grade:" + grade);
- }
- }
- }
-
- @Test
- void givenPreparedStatement_whenDeleteRecord_thenSuccess() throws SQLException {
- final String DELETE_SQL = "delete from Demo.student where name = ?";
-
- try (Connection connection = getConnection()) {
- PreparedStatement preparedStatement = connection.prepareStatement(DELETE_SQL);
- preparedStatement.setString(1, "James");
- assertDoesNotThrow(() -> preparedStatement.execute());
- assertEquals(1, preparedStatement.getUpdateCount());
- }
- }
-
- @Test
- void givenPreparedStatement_whenUpdateRecord_thenSuccess() throws SQLException {
- final String UPDATE_SQL = "update Demo.student set grade = ? where id = ? and name = ?";
-
- try (Connection connection = getConnection()) {
- PreparedStatement preparedStatement = connection.prepareStatement(UPDATE_SQL);
- preparedStatement.setInt(1, 5);
- preparedStatement.setInt(2, 1);
- preparedStatement.setString(3, "John");
- assertDoesNotThrow(() -> preparedStatement.execute());
- assertEquals(1, preparedStatement.getUpdateCount());
- }
- }
-
- //@Test
- void whenAddtoBatch_thenExecuteBatchIsSuccess() throws SQLException {
- final String INSERT_SQL = "insert into Demo.teacher(id, name, joining_date, subject_id)" + "values(?, ?, ?, ?)";
-
- try (Connection connection = getConnection()) {
- PreparedStatement preparedStatement = connection.prepareStatement(INSERT_SQL);
- preparedStatement.setInt(1, 9);
- preparedStatement.setString(2, "Bret Lee");
- preparedStatement.setString(3, "07-08-2002");
- preparedStatement.setString(4, "[1, 3]");
- preparedStatement.addBatch();
-
- preparedStatement.setInt(1, 10);
- preparedStatement.setString(2, "Sarah Glimmer");
- preparedStatement.setString(3, "07-08-1997");
- preparedStatement.setString(4, "[1, 2]");
-
- preparedStatement.addBatch();
-
- assertDoesNotThrow(() -> preparedStatement.executeBatch());
- }
- }
-
- @Test
- void whenExecuteJoinQuery_thenResultSuccess() throws SQLException {
- final String JOIN_QUERY =
- "SELECT t.name as teacher_name, s.name as subject_name " + "from Demo.teacher AS t INNER JOIN Demo.subject AS s ON t.subject_id = s.id";
-
- try (Connection connection = getConnection()) {
- Statement statement = connection.createStatement();
-
- ResultSet resultSet = statement.executeQuery(JOIN_QUERY);
- while (resultSet.next()) {
- logger.info("Teacher Name:" + resultSet.getString("teacher_name") + " Subject Name:" + resultSet.getString("subject_name"));
- }
-
- }
-
- }
-
@Test
void whenExecuteStoredToCreateTable_thenSuccess() throws SQLException {
- final String CREATE_TABLE_SQL = "CreateTable";
+ final String CREATE_TABLE_PROC = "CreateTable";
try (Connection connection = getConnection()) {
- CallableStatement callableStatement = connection.prepareCall(CREATE_TABLE_SQL);
+ CallableStatement callableStatement = connection.prepareCall(CREATE_TABLE_PROC);
- callableStatement.setString("SchemaName", "prod"); //schema gets created too
+ callableStatement.setString("SchemaName", "prod");
callableStatement.setString("TableName", "subject");
callableStatement.setString("PrimaryKey", "id");
Boolean result = callableStatement.execute();
@@ -316,8 +159,170 @@ public class HarperDBLiveTest {
while (resultSet.next()) {
String tableCreated = resultSet.getString("Success");
assertEquals("true", tableCreated);
- logger.info("result of the callable execute:" + tableCreated);
+ logger.info("Table Created Successfully");
}
}
}
+
+ @Test
+ void givenStatement_whenInsertRecord_thenSuccess() throws SQLException {
+ final String INSERT_SQL = "insert into Demo.Subject(id, name) values "
+ + "(4, 'Social Studies'),"
+ + "(5, 'Geography')";
+
+ try (Connection connection = getConnection()) {
+ Statement statement = connection.createStatement();
+ assertDoesNotThrow(() -> statement.execute(INSERT_SQL));
+ assertEquals(2, statement.getUpdateCount());
+ }
+ }
+ @Test
+ void givenPrepareStatement_whenAddToBatch_thenSuccess() throws SQLException {
+ final String INSERT_SQL = "insert into Demo.Teacher(id, name, joining_date) values"
+ + "(?, ?, ?)";
+
+ try (Connection connection = getConnection()) {
+ PreparedStatement preparedStatement = connection.prepareStatement(INSERT_SQL);
+ preparedStatement.setInt(1, 7);
+ preparedStatement.setString(2, "Bret Lee");
+ preparedStatement.setString(3, "07-08-2002");
+ preparedStatement.addBatch();
+
+ preparedStatement.setInt(1, 8);
+ preparedStatement.setString(2, "Sarah Glimmer");
+ preparedStatement.setString(3, "07-08-1997");
+ preparedStatement.addBatch();
+
+ int[] recordsInserted = preparedStatement.executeBatch();
+
+ assertEquals(2, Arrays.stream(recordsInserted).sum());
+ }
+ }
+
+
+ private static Connection getConnection() throws SQLException {
+ String URL = "jdbc:harperdb:Server=127.0.0.1:" + port + ";User=admin;Password=password;";
+ return DriverManager.getConnection(URL);
+ }
+
+ @Test
+ void givenStatement_whenFetchRecord_thenSuccess() throws SQLException {
+ final String SQL_QUERY = "select id, name from Demo.Subject where name = 'Maths'";
+
+ try (Connection connection = getConnection()) {
+ Statement statement = connection.createStatement();
+ ResultSet resultSet = statement.executeQuery(SQL_QUERY);
+ while (resultSet.next()) {
+ int id = resultSet.getInt("id");
+ String name = resultSet.getString("name");
+ assertNotNull(Integer.valueOf(id));
+ assertEquals("Maths", name);
+ logger.info("Subject id:" + id + " Subject Name:" + name);
+ }
+ }
+ }
+
+ @Test
+ void givenPreparedStatement_whenExecuteJoinQuery_thenSuccess() throws SQLException {
+ final String JOIN_QUERY = "SELECT t.name as teacher_name, t.joining_date as joining_date, s.name as subject_name "
+ + "from Demo.Teacher_Details AS td "
+ + "INNER JOIN Demo.Teacher AS t ON t.id = td.teacher_id "
+ + "INNER JOIN Demo.Subject AS s on s.id = td.subject_id "
+ + "where t.name = ?";
+
+ try (Connection connection = getConnection()) {
+ PreparedStatement preparedStatement = connection.prepareStatement(JOIN_QUERY);
+ preparedStatement.setString(1, "Eric Johnson");
+
+ ResultSet resultSet = preparedStatement.executeQuery();
+ while (resultSet.next()) {
+ String teacherName = resultSet.getString("teacher_name");
+ String subjectName = resultSet.getString("subject_name");
+ String joiningDate = resultSet.getString("joining_date");
+ assertEquals("Eric Johnson", teacherName);
+ assertEquals("Maths", subjectName);
+ logger.info("Teacher Name:" + teacherName + " Subject Name:" + subjectName + " Joining Date:" + joiningDate);
+ }
+ }
+ }
+ @Test
+ void givenPreparedStatement_whenFetchRecord_thenSuccess() throws SQLException {
+ final String SQL_QUERY = "select id, name from Demo.Subject where name = ?";
+
+ try (Connection connection = getConnection()) {
+ PreparedStatement preparedStatement = connection.prepareStatement(SQL_QUERY);
+ preparedStatement.setString(1, "Maths");
+
+ ResultSet resultSet = preparedStatement.executeQuery();
+ while (resultSet.next()) {
+ int id = resultSet.getInt("id");
+ String name = resultSet.getString("name");
+ assertNotNull(Integer.valueOf(id));
+ assertEquals("Maths", name);
+ logger.info("Subject id:" + id + " Subject Name:" + name);
+ }
+ }
+ }
+
+
+ @Test
+ void givenStatement_whenUpdateRecord_thenSuccess() throws SQLException {
+ final String UPDATE_SQL = "update Demo.Teacher_Details set subject_id = 2 "
+ + "where teacher_id in (2, 5)";
+ final String UPDATE_SQL_WITH_SUB_QUERY = "update Demo.Teacher_Details "
+ + "set subject_id = (select id from Demo.Subject where name = 'Maths') "
+ + "where teacher_id in (select id from Demo.Teacher where name in ('Joe Biden', 'Eric Johnson'))";
+
+ try (Connection connection = getConnection()) {
+ Statement statement = connection.createStatement();
+ assertDoesNotThrow(() -> statement.execute(UPDATE_SQL));
+ assertEquals(2, statement.getUpdateCount());
+ }
+
+ try (Connection connection = getConnection()) {
+ assertThrows(SQLException.class, () -> connection.createStatement().execute(UPDATE_SQL_WITH_SUB_QUERY));
+ }
+ }
+
+ @Test
+ void givenPreparedStatement_whenUpdateRecord_thenSuccess() throws SQLException {
+ final String UPDATE_SQL = "update Demo.Teacher_Details set subject_id = ? "
+ + "where teacher_id in (?, ?)";
+
+ try (Connection connection = getConnection()) {
+ PreparedStatement preparedStatement = connection.prepareStatement(UPDATE_SQL);
+ preparedStatement.setInt(1, 1);
+ //following is not supported by the HarperDB driver
+ //Integer[] teacherIds = {4, 5};
+ //Array teacherIdArray = connection.createArrayOf(Integer.class.getTypeName(), teacherIds);
+ preparedStatement.setInt(2, 4);
+ preparedStatement.setInt(3, 5);
+ assertDoesNotThrow(() -> preparedStatement.execute());
+ assertEquals(2, preparedStatement.getUpdateCount());
+ }
+ }
+
+ @Test
+ void givenStatement_whenDeleteRecord_thenSuccess() throws SQLException {
+ final String DELETE_SQL = "delete from Demo.Teacher_Details where teacher_id = 6 and subject_id = 3";
+
+ try (Connection connection = getConnection()) {
+ Statement statement = connection.createStatement();
+ assertDoesNotThrow(() -> statement.execute(DELETE_SQL));
+ assertEquals(1, statement.getUpdateCount());
+ }
+ }
+
+ @Test
+ void givenPreparedStatement_whenDeleteRecord_thenSuccess() throws SQLException {
+ final String DELETE_SQL = "delete from Demo.Teacher_Details where teacher_id = ? and subject_id = ?";
+
+ try (Connection connection = getConnection()) {
+ PreparedStatement preparedStatement = connection.prepareStatement(DELETE_SQL);
+ preparedStatement.setInt(1, 6);
+ preparedStatement.setInt(2, 2);
+ assertDoesNotThrow(() -> preparedStatement.execute());
+ assertEquals(1, preparedStatement.getUpdateCount());
+ }
+ }
}
From eac9c4d5e90218a5b5e9f9b53384bc7afc4176b7 Mon Sep 17 00:00:00 2001
From: parthiv39731 <70740707+parthiv39731@users.noreply.github.com>
Date: Wed, 29 Nov 2023 19:45:34 +0530
Subject: [PATCH 4/8] BAEL-7259
---
persistence-modules/java-harperdb/pom.xml | 11 +-
.../baledung/harperdb/HarperDBLiveTest.java | 109 +++++++++++++-----
.../src/test/resources/UserDefinedViews.json | 5 +
.../java-harperdb/src/test/resources/test.db | 0
4 files changed, 90 insertions(+), 35 deletions(-)
create mode 100644 persistence-modules/java-harperdb/src/test/resources/UserDefinedViews.json
create mode 100644 persistence-modules/java-harperdb/src/test/resources/test.db
diff --git a/persistence-modules/java-harperdb/pom.xml b/persistence-modules/java-harperdb/pom.xml
index 896a58f858..56b63948c9 100644
--- a/persistence-modules/java-harperdb/pom.xml
+++ b/persistence-modules/java-harperdb/pom.xml
@@ -38,6 +38,11 @@
testcontainers
test
+
+ org.apache.derby
+ derby
+ 10.13.1.1
+
@@ -52,10 +57,4 @@
-
- 19
- 19
- UTF-8
-
-
\ No newline at end of file
diff --git a/persistence-modules/java-harperdb/src/test/java/com/baledung/harperdb/HarperDBLiveTest.java b/persistence-modules/java-harperdb/src/test/java/com/baledung/harperdb/HarperDBLiveTest.java
index 1cd377dc6d..5908a57560 100644
--- a/persistence-modules/java-harperdb/src/test/java/com/baledung/harperdb/HarperDBLiveTest.java
+++ b/persistence-modules/java-harperdb/src/test/java/com/baledung/harperdb/HarperDBLiveTest.java
@@ -11,8 +11,10 @@ import org.testcontainers.containers.GenericContainer;
import java.io.IOException;
import java.net.URISyntaxException;
+import java.net.URL;
import java.sql.*;
import java.util.Arrays;
+import java.util.Map;
import java.util.Properties;
import static org.junit.jupiter.api.Assertions.*;
@@ -21,11 +23,10 @@ public class HarperDBLiveTest {
private static final Logger logger = LoggerFactory.getLogger(HarperDBLiveTest.class);
- private static String host;
-
private static Integer port;
private static HarperDBContainer harperDBContainer;
+
private static HarperDBApiService harperDbApiService;
@BeforeAll
@@ -40,7 +41,6 @@ public class HarperDBLiveTest {
GenericContainer genericContainer = harperDBContainer.installHarperDB();
- host = genericContainer.getHost();
genericContainer.start();
port = genericContainer.getFirstMappedPort();
@@ -51,7 +51,7 @@ public class HarperDBLiveTest {
harperDbApiService = new HarperDBApiService(url, "admin", "password");
}
- private static void setupDB() throws URISyntaxException, IOException {
+ private static void setupDB() throws IOException {
harperDbApiService.createSchema("Demo");
harperDbApiService.createTable("Demo", "Subject", "name");
@@ -99,7 +99,7 @@ public class HarperDBLiveTest {
}
@Test
- void whenConnectionInfoInURL_thenConnectSuccess() throws SQLException {
+ void whenConnectionInfoInURL_thenConnectSuccess() {
assertDoesNotThrow(() -> {
final String JDBC_URL = "jdbc:harperdb:Server=127.0.0.1:" + port + ";User=admin;Password=password;";
@@ -112,7 +112,7 @@ public class HarperDBLiveTest {
}
@Test
- void whenConnectionInfoInProperties_thenConnectSuccess() throws SQLException {
+ void whenConnectionInfoInProperties_thenConnectSuccess() {
assertDoesNotThrow(() -> {
Properties prop = new Properties();
prop.setProperty("Server", "127.0.0.1:" + port);
@@ -128,7 +128,7 @@ public class HarperDBLiveTest {
}
@Test
- void whenConnectionPooling_thenConnectSuccess() throws SQLException {
+ void whenConnectionPooling_thenConnectSuccess() {
assertDoesNotThrow(() -> {
HarperDBConnectionPoolDataSource harperdbPoolDataSource = new HarperDBConnectionPoolDataSource();
final String JDBC_URL = "jdbc:harperdb:UseConnectionPooling=true;PoolMaxSize=2;Server=127.0.0.1:" + port + ";User=admin;Password=password;";
@@ -176,6 +176,7 @@ public class HarperDBLiveTest {
assertEquals(2, statement.getUpdateCount());
}
}
+
@Test
void givenPrepareStatement_whenAddToBatch_thenSuccess() throws SQLException {
final String INSERT_SQL = "insert into Demo.Teacher(id, name, joining_date) values"
@@ -199,12 +200,23 @@ public class HarperDBLiveTest {
}
}
-
private static Connection getConnection() throws SQLException {
String URL = "jdbc:harperdb:Server=127.0.0.1:" + port + ";User=admin;Password=password;";
return DriverManager.getConnection(URL);
}
+ private static Connection getConnection(Map properties) throws SQLException {
+ Properties prop = new Properties();
+ prop.setProperty("Server", "127.0.0.1:" + port);
+ prop.setProperty("User", "admin");
+ prop.setProperty("Password", "password");
+ for (Map.Entry entry : properties.entrySet()) {
+ prop.setProperty(entry.getKey(), entry.getValue());
+ }
+
+ return DriverManager.getConnection("jdbc:harperdb:", prop);
+ }
+
@Test
void givenStatement_whenFetchRecord_thenSuccess() throws SQLException {
final String SQL_QUERY = "select id, name from Demo.Subject where name = 'Maths'";
@@ -213,9 +225,9 @@ public class HarperDBLiveTest {
Statement statement = connection.createStatement();
ResultSet resultSet = statement.executeQuery(SQL_QUERY);
while (resultSet.next()) {
- int id = resultSet.getInt("id");
+ Integer id = resultSet.getInt("id");
String name = resultSet.getString("name");
- assertNotNull(Integer.valueOf(id));
+ assertNotNull(id);
assertEquals("Maths", name);
logger.info("Subject id:" + id + " Subject Name:" + name);
}
@@ -245,25 +257,6 @@ public class HarperDBLiveTest {
}
}
}
- @Test
- void givenPreparedStatement_whenFetchRecord_thenSuccess() throws SQLException {
- final String SQL_QUERY = "select id, name from Demo.Subject where name = ?";
-
- try (Connection connection = getConnection()) {
- PreparedStatement preparedStatement = connection.prepareStatement(SQL_QUERY);
- preparedStatement.setString(1, "Maths");
-
- ResultSet resultSet = preparedStatement.executeQuery();
- while (resultSet.next()) {
- int id = resultSet.getInt("id");
- String name = resultSet.getString("name");
- assertNotNull(Integer.valueOf(id));
- assertEquals("Maths", name);
- logger.info("Subject id:" + id + " Subject Name:" + name);
- }
- }
- }
-
@Test
void givenStatement_whenUpdateRecord_thenSuccess() throws SQLException {
@@ -325,4 +318,62 @@ public class HarperDBLiveTest {
assertEquals(1, preparedStatement.getUpdateCount());
}
}
+
+ @Test
+ void givenTempTable_whenInsertIntoSelectTempTable_thenSuccess() throws SQLException {
+ try (Connection connection = getConnection()) {
+ Statement statement = connection.createStatement();
+ assertDoesNotThrow(() -> {
+ statement.execute("insert into Teacher#TEMP(id, name, joining_date) "
+ + "values('12', 'David Flinch', '04-04-2014')");
+ statement.execute("insert into Teacher#TEMP(id, name, joining_date) "
+ + "values('13', 'Stephen Hawkins', '04-07-2017')");
+ statement.execute("insert into Teacher#TEMP(id, name, joining_date) "
+ + "values('14', 'Albert Einstein', '12-08-2020')");
+ statement.execute("insert into Teacher#TEMP(id, name, joining_date) "
+ + "values('15', 'Leo Tolstoy', '20-08-2022')");
+ });
+ assertDoesNotThrow(() -> statement.execute("insert into Demo.Teacher(id, name, joining_date) "
+ + "select id, name, joining_date from Teacher#TEMP"));
+ ResultSet resultSet = statement.executeQuery("select count(id) as rows from Demo.Teacher where id in"
+ + " (12, 13, 14, 15)");
+ resultSet.next();
+ int totalRows = resultSet.getInt("rows");
+ logger.info("total number of rows fetched:" + totalRows);
+ assertEquals(4, totalRows);
+ }
+ }
+
+ @Test
+ void givenUserDefinedView_whenQueryView_thenSuccess() throws SQLException {
+ URL url = ClassLoader.getSystemClassLoader().getResource("UserDefinedViews.json");
+
+ String folderPath = url.getPath().substring(0, url.getPath().lastIndexOf('/'));
+
+ try(Connection connection = getConnection(Map.of("Location", folderPath))) {
+ PreparedStatement preparedStatement = connection.prepareStatement("select teacher_name,subject_name"
+ + " from UserViews.View_Teacher_Details where subject_name = ?");
+ preparedStatement.setString(1, "Science");
+ ResultSet resultSet = preparedStatement.executeQuery();
+ while(resultSet.next()) {
+ assertEquals("Science", resultSet.getString("subject_name"));
+ logger.info("Science Teacher Name:" + resultSet.getString("teacher_name"));
+ }
+ }
+ }
+
+ @Test
+ void givenAutoCache_whenQuery_thenSuccess() throws SQLException {
+ URL url = ClassLoader.getSystemClassLoader().getResource("test.db");
+ String folderPath = url.getPath().substring(0, url.getPath().lastIndexOf('/'));
+ logger.info("Cache Location:" + folderPath);
+ try(Connection connection = getConnection(Map.of("AutoCache", "true", "CacheLocation", folderPath))) {
+ PreparedStatement preparedStatement = connection.prepareStatement("select id, name from Demo.Subject");
+
+ ResultSet resultSet = preparedStatement.executeQuery();
+ while(resultSet.next()) {
+ logger.info("Subject Name:" + resultSet.getString("name"));
+ }
+ }
+ }
}
diff --git a/persistence-modules/java-harperdb/src/test/resources/UserDefinedViews.json b/persistence-modules/java-harperdb/src/test/resources/UserDefinedViews.json
new file mode 100644
index 0000000000..fba67def3c
--- /dev/null
+++ b/persistence-modules/java-harperdb/src/test/resources/UserDefinedViews.json
@@ -0,0 +1,5 @@
+{
+ "View_Teacher_Details": {
+ "query": "SELECT t.name as teacher_name, t.joining_date as joining_date, s.name as subject_name from Demo.Teacher_Details AS td INNER JOIN Demo.Teacher AS t ON t.id = td.teacher_id INNER JOIN Demo.Subject AS s on s.id = td.subject_id"
+ }
+}
\ No newline at end of file
diff --git a/persistence-modules/java-harperdb/src/test/resources/test.db b/persistence-modules/java-harperdb/src/test/resources/test.db
new file mode 100644
index 0000000000..e69de29bb2
From 952f1d2cd2f11c88dc9b24584c08acf36805ec44 Mon Sep 17 00:00:00 2001
From: parthiv39731 <70740707+parthiv39731@users.noreply.github.com>
Date: Wed, 29 Nov 2023 19:56:38 +0530
Subject: [PATCH 5/8] Deleted unused file
---
.../harperdb/HarperDBLiveTestOld.java | 356 ------------------
1 file changed, 356 deletions(-)
delete mode 100644 persistence-modules/java-harperdb/src/test/java/com/baledung/harperdb/HarperDBLiveTestOld.java
diff --git a/persistence-modules/java-harperdb/src/test/java/com/baledung/harperdb/HarperDBLiveTestOld.java b/persistence-modules/java-harperdb/src/test/java/com/baledung/harperdb/HarperDBLiveTestOld.java
deleted file mode 100644
index 8becea76a5..0000000000
--- a/persistence-modules/java-harperdb/src/test/java/com/baledung/harperdb/HarperDBLiveTestOld.java
+++ /dev/null
@@ -1,356 +0,0 @@
-package com.baledung.harperdb;
-
-import cdata.jdbc.harperdb.HarperDBConnectionPoolDataSource;
-import com.github.dockerjava.zerodep.shaded.org.apache.hc.client5.http.classic.methods.HttpPost;
-import com.github.dockerjava.zerodep.shaded.org.apache.hc.client5.http.impl.classic.CloseableHttpClient;
-import com.github.dockerjava.zerodep.shaded.org.apache.hc.client5.http.impl.classic.CloseableHttpResponse;
-import com.github.dockerjava.zerodep.shaded.org.apache.hc.client5.http.impl.classic.HttpClientBuilder;
-import com.github.dockerjava.zerodep.shaded.org.apache.hc.core5.http.ClassicHttpRequest;
-import com.github.dockerjava.zerodep.shaded.org.apache.hc.core5.http.HttpEntity;
-import com.github.dockerjava.zerodep.shaded.org.apache.hc.core5.http.io.entity.StringEntity;
-import org.junit.jupiter.api.AfterAll;
-import org.junit.jupiter.api.BeforeAll;
-import org.junit.jupiter.api.Test;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.testcontainers.containers.GenericContainer;
-
-import java.io.IOException;
-import java.net.URISyntaxException;
-import java.sql.*;
-import java.util.Map;
-import java.util.Properties;
-
-import static org.junit.jupiter.api.Assertions.*;
-
-public class HarperDBLiveTestOld {
- private static final Logger logger = LoggerFactory.getLogger(HarperDBLiveTestOld.class);
-
- private static String host;
-
- private static Integer port;
-
- private static GenericContainer harperDBContainer;
-
- @BeforeAll
- static void setupHarperDB() throws IOException, InterruptedException, URISyntaxException {
- installHarperDB();
- setupDB();
- }
-
- private static void installHarperDB() {
- Map envMap = Map.of(
- "HDB_ADMIN_USERNAME", "admin",
- "HDB_ADMIN_PASSWORD", "password",
- "OPERATIONSAPI_NETWORK_PORT", "9925",
- "ROOTPATH", "/home/harperdb/hdb",
- "LOGGING_STDSTREAMS", "true"
- );
-
- harperDBContainer = new GenericContainer("harperdb/harperdb:latest")
- .withEnv(envMap)
- .withExposedPorts(9925, 9926);
- host = harperDBContainer.getHost();
- harperDBContainer.start();
- port = harperDBContainer.getFirstMappedPort();
- logger.info("DB Host:" + host + "\n DB Port:" + port);
- }
-
- private static void setupDB() throws URISyntaxException, IOException {
- setupSchema("demo");
- createTable("demo", "student", "name", "grade", "subject_id");
- createTable("demo", "teacher", "name", "joining_date", "subject_id");
- insertRecords();
- }
-
- private static void setupSchema(String schema) throws URISyntaxException, IOException {
- String requestBody = "{\"operation\":\"create_schema\", \"" + "schema\":\"" + schema + "\"" + "}";
- executeHttpPostRequest(requestBody);
- }
-
- private static void executeHttpPostRequest(String httpRequest) throws IOException {
- logger.info("Post request body:" + httpRequest);
-
- try (CloseableHttpClient closeableHttpClient = HttpClientBuilder.create().build()) {
- HttpPost request = new HttpPost("http://localhost:" + port + "/");
- request.addHeader("Authorization", "Basic YWRtaW46cGFzc3dvcmQ=");
- request.addHeader("Content-Type", "application/json");
- request.setEntity((HttpEntity) new StringEntity(httpRequest));
- CloseableHttpResponse response = closeableHttpClient.execute((ClassicHttpRequest) request);
- logger.info("REST API response:" + response.toString());
- assertEquals(200, response.getCode());
- }
- }
-
- private void insertStudentRecords() {
-
- }
-
- private void insertSubjectRecords() {
-
- }
-
- private void insertTeacherRecords() {
-
- }
-
- private static void createTable(String schemaName, String tableName, String... attributes) throws IOException {
- String createTableReq = "{\"operation\":\"create_table\",\"schema\":\""
- + schemaName + "\",\"table\":\""
- + tableName + "\",\"hash_attribute\":\"id\""
- + "}";
- executeHttpPostRequest(createTableReq);
- logger.info("created table:" + tableName);
- for (String attribute : attributes) {
- String createAttrReq = "{\"operation\":\"create_attribute\",\"schema\":\""
- + schemaName + "\",\"table\":\""
- + tableName + "\",\"attribute\":\""
- + attribute + "\""
- + "}";
- executeHttpPostRequest(createAttrReq);
- logger.info("created attribute:" + attribute + " in table:" + tableName);
- }
- }
-
- private static void insertRecords() throws IOException {
-
- String table = "student";
- String schema = "demo";
- String operation = "insert";
- String records = "[" +
- "{\"id\":1, \"name\":\"John\", \"grade\":4},"
- + "{\"id\":2, \"name\":\"James\", \"grade\":1},"
- + "{\"id\":3, \"name\":\"Williams\", \"grade\":1},"
- + "{\"id\":4, \"name\":\"Robin\", \"grade\":4},"
- + "{\"id\":5, \"name\":\"Torry\", \"grade\":3},"
- + "{\"id\":6, \"name\":\"Nancy\", \"grade\":5},"
- + "{\"id\":7, \"name\":\"Mary\", \"grade\":5},"
- + "{\"id\":8, \"name\":\"Jenny\", \"grade\":6},"
- + "{\"id\":9, \"name\":\"Katy\", \"grade\":6},"
- + "{\"id\":15, \"name\":\"Michael\", \"grade\":6}"
- + "]";
- String requestBody = "{\"table\":" + "\"" + table + "\","
- + "\"schema\":" + "\"" + schema + "\"" + ","
- + "\"operation\":" + "\"" + operation + "\"" + ","
- + "\"records\":" + records
- + "}";
- String sql = "{"
- + "\"operation\":\"sql\", "
- + "\"sql\":\"insert into demo.student(id, name, grade) values"
- + "(1, 'John', 4), (2, 'James', 1), (3, 'Williams', 1), (4, 'Robin', 4), (5, 'Torry', 3),"
- + " (6, 'Nancy', 5), (7, 'Mary', 5), (8, 'Jenny', 6), (9, 'Katy', 6)\""
- + "}";
- executeHttpPostRequest(requestBody);
- }
-
- @AfterAll
- static void stopHarperDB() {
- harperDBContainer.stop();
- }
-
- @Test
- void whenConnectionInfoInURL_thenConnectSuccess() throws SQLException {
- assertDoesNotThrow(() -> {
- String URL = "jdbc:harperdb:Server=127.0.0.1:" + port + ";User=admin;Password=password;";
-
- try (Connection connection = DriverManager.getConnection(URL)) {
- connection.createStatement().executeQuery("select 1");
- logger.info("Connection Successful");
- }
- });
- }
-
- @Test
- void whenConnectionInfoInProperties_thenConnectSuccess() throws SQLException {
- assertDoesNotThrow(() -> {
- Properties prop = new Properties();
- prop.setProperty("Server", "127.0.0.1:" + port);
- prop.setProperty("User", "admin");
- prop.setProperty("Password", "password");
-
- try (Connection connection = DriverManager.getConnection("jdbc:harperdb:", prop)) {
- connection.createStatement().executeQuery("select 1");
- logger.info("Connection Successful");
- }
- });
- }
-
- @Test
- void whenConnectionPooling_thenConnectSuccess() throws SQLException {
- assertDoesNotThrow(() -> {
- HarperDBConnectionPoolDataSource harperdbPoolDataSource = new HarperDBConnectionPoolDataSource();
- String URL = "jdbc:harperdb:UseConnectionPooling=true;PoolMaxSize=2;Server=127.0.0.1:" + port
- + ";User=admin;Password=1234;";
- harperdbPoolDataSource.setURL(URL);
-
- try(Connection connection = harperdbPoolDataSource.getPooledConnection().getConnection()) {
- connection.createStatement().executeQuery("select 1");
- logger.info("Connection Successful");
- }
- });
- }
-
- private static Connection getConnection() throws SQLException {
- String URL = "jdbc:harperdb:Server=127.0.0.1:" + port + ";User=admin;Password=password;";
- return DriverManager.getConnection(URL);
- }
-
- @Test
- void givenStatement_whenFetchRecord_thenSuccess() throws SQLException {
- final String SQL_QUERY = "select id, name, grade from demo.student";
-
- try(Connection connection = getConnection()) {
- Statement statement = connection.createStatement();
- ResultSet resultSet = statement.executeQuery(SQL_QUERY);
- while (resultSet.next()) {
- int id = resultSet.getInt("id");
- String name = resultSet.getString("name");
- int grade = resultSet.getInt("grade");
- assertNotNull(Integer.valueOf(id));
- logger.info("Student id:" + id + " Student Name:" + name + " grade:" + grade);
- }
- }
- }
-
- @Test
- void givenStatement_whenInsertRecord_thenSuccess() throws SQLException {
- final String INSERT_SQL = "insert into demo.student(id, name, grade) values (10, 'Barak', 3)";
-
- try(Connection connection = getConnection()) {
- Statement statement = connection.createStatement();
- assertDoesNotThrow(() -> statement.execute(INSERT_SQL));
- }
- }
-
- @Test
- void givenStatement_whenInsertRecordInTableWithoutAttributes_thenSuccess() throws SQLException {
- final String INSERT_SQL = "insert into demo.teacher(id, name, joining_date) "
- + "values (1, 'David Martinez', '04-05-2004'), (2, 'Eric Martin', '04-10-2000')";
- final String QUERY_SQL = "select name, joining_date from demo.teacher where name = ?";
-
- try(Connection connection = getConnection()) {
- Statement statement = connection.createStatement();
- assertDoesNotThrow(() -> statement.execute(INSERT_SQL));
- PreparedStatement preparedStatement = connection.prepareStatement(QUERY_SQL);
- preparedStatement.setString(1, "Eric Martin");
- ResultSet resultSet = preparedStatement.executeQuery();
- while (resultSet.next()) {
- String teacherName = resultSet.getString("name");
- String joinDate = resultSet.getString("joining_date");
- assertEquals("Eric Martin", teacherName);
- assertEquals("04-10-2000", joinDate);
- logger.info("name:" + teacherName + " joining date:" + joinDate);
- }
- }
- }
-
- @Test
- void givenStatement_whenUpdateRecord_thenSuccess() throws SQLException {
- final String UPDATE_SQL = "update demo.student set grade = 4 where id = 5";
-
- try(Connection connection = getConnection()) {
- Statement statement = connection.createStatement();
- assertDoesNotThrow(() -> statement.execute(UPDATE_SQL));
- assertEquals(1, statement.getUpdateCount());
- }
- }
-
- @Test
- void givenStatement_whenDeleteRecord_thenSuccess() throws SQLException {
- final String DELETE_SQL = "delete from demo.student where id = 3";
-
- try(Connection connection = getConnection()) {
- Statement statement = connection.createStatement();
- assertDoesNotThrow(() -> statement.execute(DELETE_SQL));
- assertEquals(1, statement.getUpdateCount());
- }
- }
-
- @Test
- void givenPreparedStatement_whenFetchRecord_thenSuccess() throws SQLException {
- final String SQL_QUERY = "select id, name, grade from demo.student where name = ? and grade = ?";
-
- try(Connection connection = getConnection()) {
- PreparedStatement preparedStatement = connection.prepareStatement(SQL_QUERY);
- preparedStatement.setString(1, "Robin");
- preparedStatement.setInt(2, 4);
- ResultSet resultSet = preparedStatement.executeQuery();
- while (resultSet.next()) {
- int id = resultSet.getInt("id");
- String name = resultSet.getString("name");
- int grade = resultSet.getInt("grade");
- assertNotNull(Integer.valueOf(id));
- assertEquals("Robin", name);
- logger.info("Student id:" + id + " Student Name:" + name + " grade:" + grade);
- }
- }
- }
-
- @Test
- void givenPreparedStatement_whenDeleteRecord_thenSuccess() throws SQLException {
- final String DELETE_SQL = "delete from demo.student where name = ?";
-
- try(Connection connection = getConnection()) {
- PreparedStatement preparedStatement = connection.prepareStatement(DELETE_SQL);
- preparedStatement.setString(1, "James");
- assertDoesNotThrow(() -> preparedStatement.execute());
- assertEquals(1, preparedStatement.getUpdateCount());
- }
- }
-
- @Test
- void givenPreparedStatement_whenUpdateRecord_thenSuccess() throws SQLException {
- final String UPDATE_SQL = "update demo.student set grade = ? where id = ? and name = ?";
-
- try(Connection connection = getConnection()) {
- PreparedStatement preparedStatement = connection.prepareStatement(UPDATE_SQL);
- preparedStatement.setInt(1, 5);
- preparedStatement.setInt(2, 1);
- preparedStatement.setString(3, "John");
- assertDoesNotThrow(() -> preparedStatement.execute());
- assertEquals(1, preparedStatement.getUpdateCount());
- }
- }
-
- @Test
- void whenAddtoBatch_thenExecuteBatchIsSuccess() throws SQLException {
- final String INSERT_SQL = "insert into demo.teacher(id, name, joining_date)"
- + "values(?, ?, ?)";
-
- try(Connection connection = getConnection()) {
- PreparedStatement preparedStatement = connection.prepareStatement(INSERT_SQL);
- preparedStatement.setInt(1, 1);
- preparedStatement.setString(2, "Bret Lee");
- preparedStatement.setString(3, "07-08-2002");
- preparedStatement.addBatch();
-
- preparedStatement.setInt(1, 2);
- preparedStatement.setString(2, "Sarah Glimmer");
- preparedStatement.setString(3, "07-08-1997");
- preparedStatement.addBatch();
-
- assertDoesNotThrow(() -> preparedStatement.executeBatch());
- }
- }
-
- @Test
- void whenExecuteStoredToCreateTable_thenSuccess() throws SQLException {
- final String CREATE_TABLE_SQL = "CreateTable";
- try(Connection connection = getConnection()) {
- CallableStatement callableStatement = connection.prepareCall(CREATE_TABLE_SQL);
-
- callableStatement.setString("SchemaName", "prod"); //schema gets created too
- callableStatement.setString("TableName", "subject");
- callableStatement.setString("PrimaryKey", "id");
- Boolean result = callableStatement.execute();
-
- ResultSet resultSet = callableStatement.getResultSet();
-
- while(resultSet.next()) {
- String tableCreated = resultSet.getString("Success");
- assertEquals("true", tableCreated);
- logger.info("result of the callable execute:" + tableCreated);
- }
- }
- }
-}
From c2b0f73f33cf69030747c5f693bb149ea6f98870 Mon Sep 17 00:00:00 2001
From: parthiv39731 <70740707+parthiv39731@users.noreply.github.com>
Date: Wed, 29 Nov 2023 20:01:31 +0530
Subject: [PATCH 6/8] included persistence-modules/java-harperdb
---
pom.xml | 1 +
1 file changed, 1 insertion(+)
diff --git a/pom.xml b/pom.xml
index 7099dd8cbc..219fc19071 100644
--- a/pom.xml
+++ b/pom.xml
@@ -819,6 +819,7 @@
performance-tests
persistence-modules
persistence-modules/spring-data-neo4j
+ persistence-modules/java-harperdb
protobuffer
quarkus-modules
reactive-systems
From 57eaebe8d5e116cfc52c9b0c3b5b343db0eef202 Mon Sep 17 00:00:00 2001
From: parthiv39731 <70740707+parthiv39731@users.noreply.github.com>
Date: Thu, 30 Nov 2023 19:40:11 +0530
Subject: [PATCH 7/8] BAEL-7259: renamed package
---
.../com/{baledung => baeldung}/harperdb/HarperDBApiService.java | 2 +-
.../com/{baledung => baeldung}/harperdb/HarperDBContainer.java | 2 +-
.../com/{baledung => baeldung}/harperdb/HarperDBLiveTest.java | 2 +-
3 files changed, 3 insertions(+), 3 deletions(-)
rename persistence-modules/java-harperdb/src/test/java/com/{baledung => baeldung}/harperdb/HarperDBApiService.java (99%)
rename persistence-modules/java-harperdb/src/test/java/com/{baledung => baeldung}/harperdb/HarperDBContainer.java (97%)
rename persistence-modules/java-harperdb/src/test/java/com/{baledung => baeldung}/harperdb/HarperDBLiveTest.java (99%)
diff --git a/persistence-modules/java-harperdb/src/test/java/com/baledung/harperdb/HarperDBApiService.java b/persistence-modules/java-harperdb/src/test/java/com/baeldung/harperdb/HarperDBApiService.java
similarity index 99%
rename from persistence-modules/java-harperdb/src/test/java/com/baledung/harperdb/HarperDBApiService.java
rename to persistence-modules/java-harperdb/src/test/java/com/baeldung/harperdb/HarperDBApiService.java
index 15178f9769..361e17bd83 100644
--- a/persistence-modules/java-harperdb/src/test/java/com/baledung/harperdb/HarperDBApiService.java
+++ b/persistence-modules/java-harperdb/src/test/java/com/baeldung/harperdb/HarperDBApiService.java
@@ -1,4 +1,4 @@
-package com.baledung.harperdb;
+package com.baeldung.harperdb;
import com.github.dockerjava.zerodep.shaded.org.apache.hc.client5.http.classic.methods.HttpPost;
import com.github.dockerjava.zerodep.shaded.org.apache.hc.client5.http.impl.classic.CloseableHttpClient;
diff --git a/persistence-modules/java-harperdb/src/test/java/com/baledung/harperdb/HarperDBContainer.java b/persistence-modules/java-harperdb/src/test/java/com/baeldung/harperdb/HarperDBContainer.java
similarity index 97%
rename from persistence-modules/java-harperdb/src/test/java/com/baledung/harperdb/HarperDBContainer.java
rename to persistence-modules/java-harperdb/src/test/java/com/baeldung/harperdb/HarperDBContainer.java
index 5ce6e069ce..12ef87fa99 100644
--- a/persistence-modules/java-harperdb/src/test/java/com/baledung/harperdb/HarperDBContainer.java
+++ b/persistence-modules/java-harperdb/src/test/java/com/baeldung/harperdb/HarperDBContainer.java
@@ -1,4 +1,4 @@
-package com.baledung.harperdb;
+package com.baeldung.harperdb;
import java.util.Map;
diff --git a/persistence-modules/java-harperdb/src/test/java/com/baledung/harperdb/HarperDBLiveTest.java b/persistence-modules/java-harperdb/src/test/java/com/baeldung/harperdb/HarperDBLiveTest.java
similarity index 99%
rename from persistence-modules/java-harperdb/src/test/java/com/baledung/harperdb/HarperDBLiveTest.java
rename to persistence-modules/java-harperdb/src/test/java/com/baeldung/harperdb/HarperDBLiveTest.java
index 5908a57560..34d2f8d29b 100644
--- a/persistence-modules/java-harperdb/src/test/java/com/baledung/harperdb/HarperDBLiveTest.java
+++ b/persistence-modules/java-harperdb/src/test/java/com/baeldung/harperdb/HarperDBLiveTest.java
@@ -1,4 +1,4 @@
-package com.baledung.harperdb;
+package com.baeldung.harperdb;
import cdata.jdbc.harperdb.HarperDBConnectionPoolDataSource;
From 0c7025b080732eedc94716cdfaceef634862b556 Mon Sep 17 00:00:00 2001
From: parthiv39731 <70740707+parthiv39731@users.noreply.github.com>
Date: Sat, 2 Dec 2023 10:25:25 +0530
Subject: [PATCH 8/8] BAEL-7259: review comments implemented
---
persistence-modules/java-harperdb/pom.xml | 6 +++++-
pom.xml | 2 +-
2 files changed, 6 insertions(+), 2 deletions(-)
diff --git a/persistence-modules/java-harperdb/pom.xml b/persistence-modules/java-harperdb/pom.xml
index 56b63948c9..318f4b7460 100644
--- a/persistence-modules/java-harperdb/pom.xml
+++ b/persistence-modules/java-harperdb/pom.xml
@@ -29,7 +29,7 @@
com.baeldung
java-harperdb
- 4.2
+ ${haperdb-driver.version}
system
${project.basedir}/lib/cdata.jdbc.harperdb.jar
@@ -57,4 +57,8 @@
+
+ 4.2
+
+
\ No newline at end of file
diff --git a/pom.xml b/pom.xml
index 219fc19071..27fe5947dd 100644
--- a/pom.xml
+++ b/pom.xml
@@ -818,8 +818,8 @@
pdf
performance-tests
persistence-modules
+ persistence-modules/java-harperdb
persistence-modules/spring-data-neo4j
- persistence-modules/java-harperdb
protobuffer
quarkus-modules
reactive-systems