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 + 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