diff --git a/docker-compose/mariadb/api-interaction.sh b/docker-compose/mariadb/api-interaction.sh
new file mode 100644
index 00000000..2bda2268
--- /dev/null
+++ b/docker-compose/mariadb/api-interaction.sh
@@ -0,0 +1,17 @@
+#!/bin/bash
+
+# Wait for services to be fully up
+sleep 15
+
+# Base URL for DB2Rest API
+BASE_URL="http://localhost/emp/employee"
+
+# Insert an employee
+echo "Inserting employee..."
+curl -X POST $BASE_URL \
+ -H "Content-Type: application/json" \
+ -d '{"name":"Jane Smith"}'
+
+# Query all employees
+echo -e "\nQuerying all employees..."
+curl -X GET $BASE_URL
diff --git a/docker-compose/mariadb/docker-compose.yml b/docker-compose/mariadb/docker-compose.yml
new file mode 100644
index 00000000..dcd9711a
--- /dev/null
+++ b/docker-compose/mariadb/docker-compose.yml
@@ -0,0 +1,40 @@
+version: "3.8"
+services:
+ db2rest-service:
+ image: kdhrubo/db2rest:latest
+ ports:
+ - 80:8080
+ environment:
+ DB_URL: "jdbc:mariadb://employee-mariadb:3306/empdb"
+ DB_USER: "db2rest"
+ DB_PASSWORD: "db2rest"
+ INCLUDED_SCHEMAS: public,emp
+ depends_on:
+ - employee-mariadb
+ healthcheck:
+ test: ["CMD", "curl", "-f", "http://localhost:8080/actuator/health"]
+ interval: 30s
+ timeout: 10s
+ retries: 3
+
+ employee-mariadb:
+ image: "mariadb:10.6"
+ container_name: "employee-mariadb"
+ ports:
+ - 3306:3306
+ environment:
+ - MYSQL_USER=db2rest
+ - MYSQL_PASSWORD=db2rest
+ - MYSQL_DATABASE=empdb
+ - MYSQL_ROOT_PASSWORD=root
+ volumes:
+ - mariadb-data:/var/lib/mysql
+ - ./init:/docker-entrypoint-initdb.d
+ healthcheck:
+ test: ["CMD", "mysqladmin", "ping", "-h", "localhost"]
+ interval: 20s
+ timeout: 10s
+ retries: 5
+
+volumes:
+ mariadb-data:
diff --git a/docker-compose/mariadb/init/01-init.sql b/docker-compose/mariadb/init/01-init.sql
new file mode 100644
index 00000000..7817934d
--- /dev/null
+++ b/docker-compose/mariadb/init/01-init.sql
@@ -0,0 +1,11 @@
+-- Create employee table
+CREATE TABLE employee (
+ id INT AUTO_INCREMENT PRIMARY KEY,
+ name VARCHAR(100) NOT NULL
+);
+
+-- Insert sample employee
+INSERT INTO employee (name) VALUES ('John Doe');
+
+-- Query to verify data
+SELECT * FROM employee;
diff --git a/docker-compose/mariadb/run.sh b/docker-compose/mariadb/run.sh
new file mode 100644
index 00000000..98d77b5e
--- /dev/null
+++ b/docker-compose/mariadb/run.sh
@@ -0,0 +1,11 @@
+#!/bin/bash
+
+# Start services
+docker-compose up -d
+
+# Run API interaction script
+chmod +x api-interaction.sh
+./api-interaction.sh
+
+# Optional: Keep services running
+docker-compose logs -f
diff --git a/docker-compose/mysql/api-interaction.sh b/docker-compose/mysql/api-interaction.sh
new file mode 100644
index 00000000..2bda2268
--- /dev/null
+++ b/docker-compose/mysql/api-interaction.sh
@@ -0,0 +1,17 @@
+#!/bin/bash
+
+# Wait for services to be fully up
+sleep 15
+
+# Base URL for DB2Rest API
+BASE_URL="http://localhost/emp/employee"
+
+# Insert an employee
+echo "Inserting employee..."
+curl -X POST $BASE_URL \
+ -H "Content-Type: application/json" \
+ -d '{"name":"Jane Smith"}'
+
+# Query all employees
+echo -e "\nQuerying all employees..."
+curl -X GET $BASE_URL
diff --git a/docker-compose/mysql/docker-compose.yml b/docker-compose/mysql/docker-compose.yml
new file mode 100644
index 00000000..cc08cc16
--- /dev/null
+++ b/docker-compose/mysql/docker-compose.yml
@@ -0,0 +1,40 @@
+version: "3.8"
+services:
+ db2rest-service:
+ image: kdhrubo/db2rest:latest
+ ports:
+ - 80:8080
+ environment:
+ DB_URL: "jdbc:mysql://employee-mysql:3306/empdb"
+ DB_USER: "db2rest"
+ DB_PASSWORD: "db2rest"
+ INCLUDED_SCHEMAS: public,emp
+ depends_on:
+ - employee-mysql
+ healthcheck:
+ test: ["CMD", "curl", "-f", "http://localhost:8080/actuator/health"]
+ interval: 30s
+ timeout: 10s
+ retries: 3
+
+ employee-mysql:
+ image: "mysql:8.0"
+ container_name: "employee-mysql"
+ ports:
+ - 3306:3306
+ environment:
+ - MYSQL_USER=db2rest
+ - MYSQL_PASSWORD=db2rest
+ - MYSQL_DATABASE=empdb
+ - MYSQL_ROOT_PASSWORD=root
+ volumes:
+ - mysql-data:/var/lib/mysql
+ - ./init:/docker-entrypoint-initdb.d
+ healthcheck:
+ test: ["CMD", "mysqladmin", "ping", "-h", "localhost"]
+ interval: 20s
+ timeout: 10s
+ retries: 5
+
+volumes:
+ mysql-data:
diff --git a/docker-compose/mysql/init/01-init.sql b/docker-compose/mysql/init/01-init.sql
new file mode 100644
index 00000000..7817934d
--- /dev/null
+++ b/docker-compose/mysql/init/01-init.sql
@@ -0,0 +1,11 @@
+-- Create employee table
+CREATE TABLE employee (
+ id INT AUTO_INCREMENT PRIMARY KEY,
+ name VARCHAR(100) NOT NULL
+);
+
+-- Insert sample employee
+INSERT INTO employee (name) VALUES ('John Doe');
+
+-- Query to verify data
+SELECT * FROM employee;
diff --git a/docker-compose/mysql/run.sh b/docker-compose/mysql/run.sh
new file mode 100644
index 00000000..98d77b5e
--- /dev/null
+++ b/docker-compose/mysql/run.sh
@@ -0,0 +1,11 @@
+#!/bin/bash
+
+# Start services
+docker-compose up -d
+
+# Run API interaction script
+chmod +x api-interaction.sh
+./api-interaction.sh
+
+# Optional: Keep services running
+docker-compose logs -f
diff --git a/docker-compose/oracle/api-interaction.sh b/docker-compose/oracle/api-interaction.sh
new file mode 100644
index 00000000..2bda2268
--- /dev/null
+++ b/docker-compose/oracle/api-interaction.sh
@@ -0,0 +1,17 @@
+#!/bin/bash
+
+# Wait for services to be fully up
+sleep 15
+
+# Base URL for DB2Rest API
+BASE_URL="http://localhost/emp/employee"
+
+# Insert an employee
+echo "Inserting employee..."
+curl -X POST $BASE_URL \
+ -H "Content-Type: application/json" \
+ -d '{"name":"Jane Smith"}'
+
+# Query all employees
+echo -e "\nQuerying all employees..."
+curl -X GET $BASE_URL
diff --git a/docker-compose/oracle/docker-compose.yml b/docker-compose/oracle/docker-compose.yml
new file mode 100644
index 00000000..085cb12c
--- /dev/null
+++ b/docker-compose/oracle/docker-compose.yml
@@ -0,0 +1,39 @@
+version: "3.8"
+services:
+ db2rest-service:
+ image: kdhrubo/db2rest:latest
+ ports:
+ - 80:8080
+ environment:
+ DB_URL: "jdbc:oracle:thin:@employee-oracle:1521/XE"
+ DB_USER: "system"
+ DB_PASSWORD: "oracle"
+ INCLUDED_SCHEMAS: system
+ depends_on:
+ - employee-oracle
+ healthcheck:
+ test: ["CMD", "curl", "-f", "http://localhost:8080/actuator/health"]
+ interval: 30s
+ timeout: 10s
+ retries: 3
+
+ employee-oracle:
+ image: "gvenzl/oracle-xe:latest"
+ container_name: "employee-oracle"
+ ports:
+ - 1521:1521
+ environment:
+ - ORACLE_PASSWORD=oracle
+ - APP_USER=system
+ - APP_USER_PASSWORD=oracle
+ volumes:
+ - oracle-data:/opt/oracle/oradata
+ - ./init:/container-entrypoint-initdb.d
+ healthcheck:
+ test: ["CMD", "/bin/bash", "-c", "echo 'SELECT 1 FROM DUAL;' | sqlplus -s system/oracle@localhost/XE"]
+ interval: 20s
+ timeout: 10s
+ retries: 5
+
+volumes:
+ oracle-data:
diff --git a/docker-compose/oracle/init/01-init.sql b/docker-compose/oracle/init/01-init.sql
new file mode 100644
index 00000000..a56453d8
--- /dev/null
+++ b/docker-compose/oracle/init/01-init.sql
@@ -0,0 +1,11 @@
+-- Create employee table
+CREATE TABLE employee (
+ id NUMBER GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
+ name VARCHAR2(100) NOT NULL
+);
+
+-- Insert sample employee
+INSERT INTO employee (name) VALUES ('John Doe');
+
+-- Query to verify data
+SELECT * FROM employee;
diff --git a/docker-compose/oracle/run.sh b/docker-compose/oracle/run.sh
new file mode 100644
index 00000000..98d77b5e
--- /dev/null
+++ b/docker-compose/oracle/run.sh
@@ -0,0 +1,11 @@
+#!/bin/bash
+
+# Start services
+docker-compose up -d
+
+# Run API interaction script
+chmod +x api-interaction.sh
+./api-interaction.sh
+
+# Optional: Keep services running
+docker-compose logs -f
diff --git a/docker-compose/postgresql/api-interaction.sh b/docker-compose/postgresql/api-interaction.sh
new file mode 100644
index 00000000..2bda2268
--- /dev/null
+++ b/docker-compose/postgresql/api-interaction.sh
@@ -0,0 +1,17 @@
+#!/bin/bash
+
+# Wait for services to be fully up
+sleep 15
+
+# Base URL for DB2Rest API
+BASE_URL="http://localhost/emp/employee"
+
+# Insert an employee
+echo "Inserting employee..."
+curl -X POST $BASE_URL \
+ -H "Content-Type: application/json" \
+ -d '{"name":"Jane Smith"}'
+
+# Query all employees
+echo -e "\nQuerying all employees..."
+curl -X GET $BASE_URL
diff --git a/docker-compose/postgresql/docker-compose.yml b/docker-compose/postgresql/docker-compose.yml
index 5cc4a278..2a68b587 100644
--- a/docker-compose/postgresql/docker-compose.yml
+++ b/docker-compose/postgresql/docker-compose.yml
@@ -9,6 +9,13 @@ services:
DB_USER: "db2rest"
DB_PASSWORD: "db2rest"
INCLUDED_SCHEMAS: public,emp
+ depends_on:
+ - employee-postgres
+ healthcheck:
+ test: ["CMD", "curl", "-f", "http://localhost:8080/actuator/health"]
+ interval: 30s
+ timeout: 10s
+ retries: 3
employee-postgres:
image: "postgres:14.4"
@@ -19,3 +26,14 @@ services:
- POSTGRES_USER=db2rest
- POSTGRES_PASSWORD=db2rest
- POSTGRES_DB=empdb
+ volumes:
+ - postgres-data:/var/lib/postgresql/data
+ - ./init:/docker-entrypoint-initdb.d
+ healthcheck:
+ test: ["CMD-SHELL", "pg_isready -U db2rest"]
+ interval: 20s
+ timeout: 10s
+ retries: 5
+
+volumes:
+ postgres-data:
diff --git a/docker-compose/postgresql/init/01-init.sql b/docker-compose/postgresql/init/01-init.sql
new file mode 100644
index 00000000..4db26a43
--- /dev/null
+++ b/docker-compose/postgresql/init/01-init.sql
@@ -0,0 +1,11 @@
+-- Create employee table
+CREATE TABLE employee (
+ id SERIAL PRIMARY KEY,
+ name VARCHAR(100) NOT NULL
+);
+
+-- Insert sample employee
+INSERT INTO employee (name) VALUES ('John Doe');
+
+-- Query to verify data
+SELECT * FROM employee;
diff --git a/docker-compose/postgresql/run.sh b/docker-compose/postgresql/run.sh
new file mode 100644
index 00000000..98d77b5e
--- /dev/null
+++ b/docker-compose/postgresql/run.sh
@@ -0,0 +1,11 @@
+#!/bin/bash
+
+# Start services
+docker-compose up -d
+
+# Run API interaction script
+chmod +x api-interaction.sh
+./api-interaction.sh
+
+# Optional: Keep services running
+docker-compose logs -f
diff --git a/docker-compose/sqlserver/api-interaction.sh b/docker-compose/sqlserver/api-interaction.sh
new file mode 100644
index 00000000..2bda2268
--- /dev/null
+++ b/docker-compose/sqlserver/api-interaction.sh
@@ -0,0 +1,17 @@
+#!/bin/bash
+
+# Wait for services to be fully up
+sleep 15
+
+# Base URL for DB2Rest API
+BASE_URL="http://localhost/emp/employee"
+
+# Insert an employee
+echo "Inserting employee..."
+curl -X POST $BASE_URL \
+ -H "Content-Type: application/json" \
+ -d '{"name":"Jane Smith"}'
+
+# Query all employees
+echo -e "\nQuerying all employees..."
+curl -X GET $BASE_URL
diff --git a/docker-compose/sqlserver/docker-compose.yml b/docker-compose/sqlserver/docker-compose.yml
new file mode 100644
index 00000000..4925a96f
--- /dev/null
+++ b/docker-compose/sqlserver/docker-compose.yml
@@ -0,0 +1,38 @@
+version: "3.8"
+services:
+ db2rest-service:
+ image: kdhrubo/db2rest:latest
+ ports:
+ - 80:8080
+ environment:
+ DB_URL: "jdbc:sqlserver://employee-sqlserver:1433;databaseName=empdb"
+ DB_USER: "sa"
+ DB_PASSWORD: "Strong@Password123"
+ INCLUDED_SCHEMAS: dbo
+ depends_on:
+ - employee-sqlserver
+ healthcheck:
+ test: ["CMD", "curl", "-f", "http://localhost:8080/actuator/health"]
+ interval: 30s
+ timeout: 10s
+ retries: 3
+
+ employee-sqlserver:
+ image: "mcr.microsoft.com/mssql/server:2019-latest"
+ container_name: "employee-sqlserver"
+ ports:
+ - 1433:1433
+ environment:
+ - SA_PASSWORD=Strong@Password123
+ - ACCEPT_EULA=Y
+ volumes:
+ - sqlserver-data:/var/opt/mssql
+ - ./init:/docker-entrypoint-initdb.d
+ healthcheck:
+ test: ["CMD-SHELL", "/opt/mssql-tools/bin/sqlcmd -S localhost -U sa -P Strong@Password123 -Q 'SELECT 1'"]
+ interval: 20s
+ timeout: 10s
+ retries: 5
+
+volumes:
+ sqlserver-data:
diff --git a/docker-compose/sqlserver/init/01-init.sql b/docker-compose/sqlserver/init/01-init.sql
new file mode 100644
index 00000000..c8a9da34
--- /dev/null
+++ b/docker-compose/sqlserver/init/01-init.sql
@@ -0,0 +1,11 @@
+-- Create employee table
+CREATE TABLE employee (
+ id INT IDENTITY(1,1) PRIMARY KEY,
+ name NVARCHAR(100) NOT NULL
+);
+
+-- Insert sample employee
+INSERT INTO employee (name) VALUES ('John Doe');
+
+-- Query to verify data
+SELECT * FROM employee;
diff --git a/docker-compose/sqlserver/run.sh b/docker-compose/sqlserver/run.sh
new file mode 100644
index 00000000..98d77b5e
--- /dev/null
+++ b/docker-compose/sqlserver/run.sh
@@ -0,0 +1,11 @@
+#!/bin/bash
+
+# Start services
+docker-compose up -d
+
+# Run API interaction script
+chmod +x api-interaction.sh
+./api-interaction.sh
+
+# Optional: Keep services running
+docker-compose logs -f
diff --git a/pom.xml b/pom.xml
index 79695716..6b99facc 100644
--- a/pom.xml
+++ b/pom.xml
@@ -162,6 +162,27 @@
2.3.2
+
+
+ org.apache.calcite
+ calcite-core
+ 1.32.0
+
+
+
+
+ mysql
+ mysql-connector-java
+ 8.0.27
+
+
+
+
+ org.postgresql
+ postgresql
+ 42.3.1
+
+