Changeset: 321a9e37d96b for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=321a9e37d96b
Added Files:
        
java/embedded/src/test/java/org/monetdb/embedded/test/EmbeddedJDBCTest.java
Modified Files:
        java/embedded/pom.xml
        java/embedded/src/main/java/nl/cwi/monetdb/jdbc/MonetDBResultSet.java
        
java/embedded/src/main/java/org/monetdb/embedded/result/EmbeddedQueryResult.java
        java/embedded/src/test/java/org/monetdb/embedded/test/EmbeddedTest.java
        java/pom.xml
        java/src/main/java/nl/cwi/monetdb/jdbc/MonetResultSet.java
Branch: embedded-java
Log Message:

Initial JDBC result set override

Added a unit test as well. Ignore the separte unit test class for now - it will 
later together with shutdown support.


diffs (truncated from 307 to 300 lines):

diff --git a/java/embedded/pom.xml b/java/embedded/pom.xml
--- a/java/embedded/pom.xml
+++ b/java/embedded/pom.xml
@@ -38,7 +38,7 @@ MonetDB is an analytical database design
                <dependency>
                        <groupId>monetdb</groupId>
                        <artifactId>monetdb-jdbc</artifactId>
-                       <version>2.18</version>
+                       <version>2.19</version>
                </dependency>
                <dependency>
                        <groupId>junit</groupId>
diff --git 
a/java/embedded/src/main/java/nl/cwi/monetdb/jdbc/MonetDBResultSet.java 
b/java/embedded/src/main/java/nl/cwi/monetdb/jdbc/MonetDBResultSet.java
--- a/java/embedded/src/main/java/nl/cwi/monetdb/jdbc/MonetDBResultSet.java
+++ b/java/embedded/src/main/java/nl/cwi/monetdb/jdbc/MonetDBResultSet.java
@@ -8,12 +8,38 @@
 
 package nl.cwi.monetdb.jdbc;
 
+import java.io.IOException;
+import java.sql.SQLException;
+
+import org.monetdb.embedded.result.EmbeddedQueryResult;
+
 /**
- * This class serves only to expose the {@link 
nl.cwi.monetdb.jdbc.MonetResultSet} constructor
- * outside the {@code nl.cwi.monetdb.jdbc}.
+ * This class overrides {@link nl.cwi.monetdb.jdbc.MonetResultSet} to allow 
for handling embedded query results.
+ * It needs to be in the {@code nl.cwi.monetdb.jdbc} module to access the 
constructor.
  */
 public class MonetDBResultSet extends MonetResultSet {
-       public MonetDBResultSet(String[] columnNames, String[] columnTypes, int 
numberOfRows) {
-               super(columnNames, columnTypes, numberOfRows);
+       private final EmbeddedQueryResult resultSet;
+
+       public MonetDBResultSet(EmbeddedQueryResult resultSet) {
+               super(resultSet.getColumnNames(), resultSet.getColumnTypes(), 
resultSet.getNumberOfColumns());
+               this.resultSet = resultSet;
+       }
+
+       @Override
+       public String getString(int columnIndex) throws SQLException {
+               String ret = 
resultSet.getColumn(columnIndex).getValue(curRow).toString();
+//             String ret = tlp.values[columnIndex - 1];
+               lastColumnRead = columnIndex - 1;
+               return ret;
+       }
+
+       @Override
+       public void close() {
+               try {
+                       resultSet.close();
+               } catch (IOException e) {
+                       // can't throw an exception now
+               }
+               super.close();
        }
 }
diff --git 
a/java/embedded/src/main/java/org/monetdb/embedded/result/EmbeddedQueryResult.java
 
b/java/embedded/src/main/java/org/monetdb/embedded/result/EmbeddedQueryResult.java
--- 
a/java/embedded/src/main/java/org/monetdb/embedded/result/EmbeddedQueryResult.java
+++ 
b/java/embedded/src/main/java/org/monetdb/embedded/result/EmbeddedQueryResult.java
@@ -101,6 +101,24 @@ public class EmbeddedQueryResult impleme
        }
 
        /**
+        * Get the column names as a string array.
+        * 
+        * @return The column names array
+        */
+       public String[] getColumnNames() {
+               return columnNames;
+       }
+
+       /**
+        * Get the column types as a string array.
+        * 
+        * @return The column types array
+        */
+       public String[] getColumnTypes() {
+               return columnTypes;
+       }
+
+       /**
         * A native C function that returns a {@code Column} object.
         * 
         * @param resultPointerWrapper Pointer to the C-level result structure
@@ -109,8 +127,13 @@ public class EmbeddedQueryResult impleme
         */
        private native Column<?> getColumnWrapper(long resultPointerWrapper, 
int index);
 
+       /**
+        * Get the results set as a JDBC ({@link 
nl.cwi.monetdb.jdbc.MonetDBResultSet}) results set.
+        * 
+        * @return The result set
+        */
        public MonetResultSet getJDBCResultSet() {
-               return new MonetDBResultSet(columnNames, columnTypes, 
numberOfRows);
+               return new MonetDBResultSet(this);
        }
 
        @Override
diff --git 
a/java/embedded/src/test/java/org/monetdb/embedded/test/EmbeddedJDBCTest.java 
b/java/embedded/src/test/java/org/monetdb/embedded/test/EmbeddedJDBCTest.java
new file mode 100644
--- /dev/null
+++ 
b/java/embedded/src/test/java/org/monetdb/embedded/test/EmbeddedJDBCTest.java
@@ -0,0 +1,86 @@
+package org.monetdb.embedded.test;
+
+import static org.junit.Assert.assertEquals;
+
+import java.io.File;
+import java.io.IOException;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.sql.SQLException;
+
+import org.junit.AfterClass;
+import org.junit.BeforeClass;
+import org.junit.Test;
+import org.monetdb.embedded.MonetDBEmbedded;
+import org.monetdb.embedded.result.EmbeddedQueryResult;
+
+public class EmbeddedJDBCTest {
+       static File datbaseDirectory;
+       static MonetDBEmbedded db;
+
+       static Integer[][] testValues = {{Integer.valueOf(0), 
Integer.valueOf(1), Integer.valueOf(2), Integer.valueOf(3)}, 
+                       {Integer.valueOf(10), Integer.valueOf(20), 
Integer.valueOf(30), null}};
+
+       static Object[] numbericTypeTestValues = new Object[]{
+                       Byte.valueOf((byte)12),
+                       Short.valueOf((short)23),
+                       Integer.valueOf(34),
+                       Long.valueOf(45l),
+                       Float.valueOf(5.6f),
+                       Double.valueOf(6.7)
+       };
+
+       static Object[] charTypeTestValues = new Object[]{
+                       "a string"
+       };
+
+       static Object[] booleanTypeTestValues = new Object[]{
+                       Boolean.valueOf(true),
+                       Boolean.valueOf(false)
+       };
+
+//     @BeforeClass
+//     public static void createTestDB() throws IOException, SQLException, 
InterruptedException {
+//             final Path directoryPath = 
Files.createTempDirectory("monetdbtest");
+//             datbaseDirectory = directoryPath.toFile();
+//
+//             db = new MonetDBEmbedded(datbaseDirectory);
+//             //          TimeUnit.SECONDS.sleep(15);
+//             db.start();
+//
+//             db.query("CREATE TABLE test (id integer, val integer);");
+//             db.query("INSERT INTO test VALUES (" + testValues[0][0] + ", " 
+ testValues[1][0] + "), (" + testValues[0][1] + ", " + testValues[1][1] + 
+//                             "), (" + testValues[0][2] + ", " + 
testValues[1][2] + "), (" + testValues[0][3] + ", " + testValues[1][3] + ");");
+//
+//             db.query("CREATE TABLE numeric_types_test (fbyte tinyint, 
fshort smallint, fint integer, flong bigint, freal real, fdouble double);");
+//             db.query("INSERT INTO numeric_types_test VALUES (" + 
numbericTypeTestValues[0] + ", " + numbericTypeTestValues[1] + ", " + 
numbericTypeTestValues[2] + ", " 
+//                             + numbericTypeTestValues[3] + ", " + 
numbericTypeTestValues[4] + ", " + numbericTypeTestValues[5] + ");");
+//             db.query("INSERT INTO numeric_types_test VALUES (null, null, 
null, null, null, null);");
+//
+//             db.query("CREATE TABLE char_types_test (fstring string, 
fvarchar varchar(10));");
+//             db.query("INSERT INTO char_types_test VALUES ('" + 
charTypeTestValues[0] + "', '" + charTypeTestValues[0] + "');");
+//             db.query("INSERT INTO char_types_test VALUES (null, null);");
+//
+//             db.query("CREATE TABLE boolean_types_test (fboolean boolean);");
+//             db.query("INSERT INTO boolean_types_test VALUES (" + 
booleanTypeTestValues[0] + ");");
+//             db.query("INSERT INTO boolean_types_test VALUES (" + 
booleanTypeTestValues[1] + ");");
+//             db.query("INSERT INTO boolean_types_test VALUES (null);");
+//     }
+//
+//     @Test
+//     public void simpleTest() throws IOException, SQLException {
+//             try (EmbeddedQueryResult result = db.query("SELECT * FROM 
test;")) {
+//                     assertEquals(4, result.getColumn(1).columnSize());
+//                     assertEquals(Integer.valueOf(10), 
result.getColumn(1).getValue(0));
+//                     assertEquals(10, result.getJDBCResultSet().getInt(1));
+//             }
+//     }
+//
+//     @AfterClass
+//     public static void cleanup() throws SQLException {
+//             db.query("DROP TABLE test");
+//             db.query("DROP TABLE numeric_types_test");
+//             db.query("DROP TABLE char_types_test");
+//             db.query("DROP TABLE boolean_types_test");
+//     }
+}
diff --git 
a/java/embedded/src/test/java/org/monetdb/embedded/test/EmbeddedTest.java 
b/java/embedded/src/test/java/org/monetdb/embedded/test/EmbeddedTest.java
--- a/java/embedded/src/test/java/org/monetdb/embedded/test/EmbeddedTest.java
+++ b/java/embedded/src/test/java/org/monetdb/embedded/test/EmbeddedTest.java
@@ -16,10 +16,9 @@ import java.nio.file.Files;
 import java.nio.file.Path;
 import java.sql.SQLException;
 import java.util.Iterator;
-import java.util.concurrent.TimeUnit;
 
+import org.junit.AfterClass;
 import org.junit.BeforeClass;
-import org.junit.Ignore;
 import org.junit.Test;
 import org.monetdb.embedded.MonetDBEmbedded;
 import org.monetdb.embedded.result.EmbeddedQueryResult;
@@ -56,7 +55,7 @@ public class EmbeddedTest {
                datbaseDirectory = directoryPath.toFile();
 
                db = new MonetDBEmbedded(datbaseDirectory);
-//         TimeUnit.SECONDS.sleep(15);
+               //          TimeUnit.SECONDS.sleep(15);
                db.start();
 
                db.query("CREATE TABLE test (id integer, val integer);");
@@ -191,7 +190,7 @@ public class EmbeddedTest {
                assertEquals(testValues[1][2], 
result1.getColumn(1).getValue(0));
                assertEquals(testValues[1][3], 
result1.getColumn(1).getValue(1));
        }
-       
+
        @Test
        public void twoQueriesWithManualCleanupTest() throws SQLException, 
IOException {
                EmbeddedQueryResult result1 = db.query("SELECT * FROM test 
WHERE id > 1;");
@@ -205,7 +204,7 @@ public class EmbeddedTest {
                assertEquals(2, result1.getColumn(1).columnSize());
                assertEquals(testValues[1][2], 
result1.getColumn(1).getValue(0));
                assertEquals(testValues[1][3], 
result1.getColumn(1).getValue(1));
-               
+
                result1.close();
                result2.close();
        }
@@ -220,7 +219,7 @@ public class EmbeddedTest {
 
                result.close();
        }
-       
+
        @Test
        public void dobuleManualCleanupTest() throws IOException, SQLException {
                @SuppressWarnings("resource")
@@ -232,7 +231,7 @@ public class EmbeddedTest {
                result.close();
                result.close();
        }
-       
+
        @Test
        public void resultAccessAfterClose() throws IOException, SQLException {
                @SuppressWarnings("resource")
@@ -242,7 +241,7 @@ public class EmbeddedTest {
                assertEquals(null, result.getColumn(1).getValue(3));
 
                result.close();
-               
+
                // The result of any column get should be null
                assertEquals(null, result.getColumn(1));
        }
@@ -273,4 +272,21 @@ public class EmbeddedTest {
                MonetDBEmbedded newDB = new MonetDBEmbedded(newDirectory);
                newDB.start();
        }
+       
+       @Test
+       public void simpleJDBCTest() throws IOException, SQLException {
+               try (EmbeddedQueryResult result = db.query("SELECT * FROM 
test;")) {
+                       assertEquals(4, result.getColumn(1).columnSize());
+                       assertEquals(Integer.valueOf(10), 
result.getColumn(1).getValue(0));
+                       assertEquals(10, result.getJDBCResultSet().getInt(1));
+               }
+       }
+
+       @AfterClass
+       public static void cleanup() throws SQLException {
+               db.query("DROP TABLE test");
+               db.query("DROP TABLE numeric_types_test");
+               db.query("DROP TABLE char_types_test");
+               db.query("DROP TABLE boolean_types_test");
+       }
 }
diff --git a/java/pom.xml b/java/pom.xml
--- a/java/pom.xml
+++ b/java/pom.xml
@@ -6,7 +6,7 @@
 
        <groupId>monetdb</groupId>
        <artifactId>monetdb-jdbc</artifactId>
-       <version>2.18</version>
+       <version>2.19</version>
        <name>${project.groupId}:${project.artifactId}</name>
        <description>MonetDB JDBC driver</description>
        <url>https://www.monetdb.org</url>
diff --git a/java/src/main/java/nl/cwi/monetdb/jdbc/MonetResultSet.java 
b/java/src/main/java/nl/cwi/monetdb/jdbc/MonetResultSet.java
--- a/java/src/main/java/nl/cwi/monetdb/jdbc/MonetResultSet.java
+++ b/java/src/main/java/nl/cwi/monetdb/jdbc/MonetResultSet.java
@@ -70,7 +70,7 @@ import nl.cwi.monetdb.mcl.parser.TupleLi
  */
_______________________________________________
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to