Changeset: ba176cc66155 for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=ba176cc66155
Added Files:
        
java/embedded/src/main/java/org/monetdb/embedded/result/column/BooleanColumn.java
        
java/embedded/src/main/java/org/monetdb/embedded/result/column/ByteColumn.java
Modified Files:
        java/embedded/org_monetdb_embedded_MonetDBEmbedded.c
        java/embedded/org_monetdb_embedded_result_EmbeddedQueryResult.c
        java/embedded/src/test/java/org/monetdb/embedded/test/EmbeddedTest.java
Branch: embedded-java
Log Message:

Add initial support for byte and boolean types as well


diffs (truncated from 363 to 300 lines):

diff --git a/java/embedded/org_monetdb_embedded_MonetDBEmbedded.c 
b/java/embedded/org_monetdb_embedded_MonetDBEmbedded.c
--- a/java/embedded/org_monetdb_embedded_MonetDBEmbedded.c
+++ b/java/embedded/org_monetdb_embedded_MonetDBEmbedded.c
@@ -102,6 +102,12 @@ JNIEXPORT jobject JNICALL Java_org_monet
                        char *type;
 
                        switch (ATOMstorage(getColumnType(b->T->type))) {
+                       case TYPE_bit:
+                               type = "boolean";
+                               break;
+                       case TYPE_bte:
+                               type = "byte";
+                               break;
                        case TYPE_sht:
                                type = "short";
                                break;
diff --git a/java/embedded/org_monetdb_embedded_result_EmbeddedQueryResult.c 
b/java/embedded/org_monetdb_embedded_result_EmbeddedQueryResult.c
--- a/java/embedded/org_monetdb_embedded_result_EmbeddedQueryResult.c
+++ b/java/embedded/org_monetdb_embedded_result_EmbeddedQueryResult.c
@@ -13,6 +13,92 @@
 #include "res_table.h"
 #include "mal_type.h"
 
+static jobject getBooleanColumn(JNIEnv *env, BAT *b) {
+       int size = BATcount(b);
+       // The values and nulls arrays
+       jbooleanArray values = (*env)->NewBooleanArray(env, size);
+       jbooleanArray nulls = (*env)->NewBooleanArray(env, size);
+
+       jobject column;
+       jclass columnClass = (*env)->FindClass(env, 
"org/monetdb/embedded/result/column/BooleanColumn");
+       // from Java BooleanColumn(boolean[] values, int columnSize, boolean[] 
nullIndex)
+       jmethodID columnConstructor = (*env)->GetMethodID(env, columnClass, 
"<init>", "([ZI[Z)V");
+
+       int i = 0;
+       jboolean val_tmp[size];
+       jboolean nul_tmp[size];
+       if (b->T->nonil && !b->T->nil) {
+               for (i = 0; i < size; i++) {
+                       val_tmp[i] = (jboolean) ((jboolean*) Tloc(b, 
BUNfirst(b)))[i];
+                       nul_tmp[i] = false;
+               }
+       }
+       else {
+               for (i = 0; i < size; i++) {
+                       int v = ((jboolean*) Tloc(b, BUNfirst(b)))[i];
+                       if (v == bit_nil) {
+                               val_tmp[i] = 0;
+                               nul_tmp[i] = true;
+                       } else {
+                               val_tmp[i] = (jboolean)v;
+                               nul_tmp[i] = false;
+                       }
+               }
+       }
+       // Move from the tmp C arrays to a Java arrays
+       (*env)->SetBooleanArrayRegion(env, values, 0, size, val_tmp);
+       (*env)->SetBooleanArrayRegion(env, nulls, 0, size, nul_tmp);
+
+       // Create the column object
+       // from Java BooleanColumn(boolean[] values, int columnSize, boolean[] 
nullIndex)
+       column = (*env)->NewObject(env, columnClass, columnConstructor, values, 
size, nulls);
+
+       return column;
+}
+
+static jobject getByteColumn(JNIEnv *env, BAT *b) {
+       int size = BATcount(b);
+       // The values and nulls arrays
+       jbyteArray values = (*env)->NewByteArray(env, size);
+       jbooleanArray nulls = (*env)->NewBooleanArray(env, size);
+
+       jobject column;
+       jclass columnClass = (*env)->FindClass(env, 
"org/monetdb/embedded/result/column/ByteColumn");
+       // from Java ByteColumn(byte[] values, int columnSize, boolean[] 
nullIndex)
+       jmethodID columnConstructor = (*env)->GetMethodID(env, columnClass, 
"<init>", "([BI[Z)V");
+
+       int i = 0;
+       bte val_tmp[size];
+       jboolean nul_tmp[size];
+       if (b->T->nonil && !b->T->nil) {
+               for (i = 0; i < size; i++) {
+                       val_tmp[i] = (bte) ((bte*) Tloc(b, BUNfirst(b)))[i];
+                       nul_tmp[i] = false;
+               }
+       }
+       else {
+               for (i = 0; i < size; i++) {
+                       int v = ((bte*) Tloc(b, BUNfirst(b)))[i];
+                       if (v == bte_nil) {
+                               val_tmp[i] = 0;
+                               nul_tmp[i] = true;
+                       } else {
+                               val_tmp[i] = (bte)v;
+                               nul_tmp[i] = false;
+                       }
+               }
+       }
+       // Move from the tmp C arrays to a Java arrays
+       (*env)->SetByteArrayRegion(env, values, 0, size, val_tmp);
+       (*env)->SetBooleanArrayRegion(env, nulls, 0, size, nul_tmp);
+
+       // Create the column object
+       // from Java ByteColumn(byte[] values, int columnSize, boolean[] 
nullIndex)
+       column = (*env)->NewObject(env, columnClass, columnConstructor, values, 
size, nulls);
+
+       return column;
+}
+
 static jobject getShortColumn(JNIEnv *env, BAT *b) {
        int size = BATcount(b);
        // The values and nulls arrays
@@ -166,7 +252,7 @@ static jobject getFloatColumn(JNIEnv *en
                for (i = 0; i < size; i++) {
                        int v = ((float*) Tloc(b, BUNfirst(b)))[i];
                        if (v == flt_nil) {
-                               val_tmp[i] = 0;
+                               val_tmp[i] = 0.0;
                                nul_tmp[i] = true;
                        } else {
                                val_tmp[i] = (float)v;
@@ -209,7 +295,7 @@ static jobject getDoubleColumn(JNIEnv *e
                for (i = 0; i < size; i++) {
                        int v = ((double*) Tloc(b, BUNfirst(b)))[i];
                        if (v == dbl_nil) {
-                               val_tmp[i] = 0;
+                               val_tmp[i] = 0.0;
                                nul_tmp[i] = true;
                        } else {
                                val_tmp[i] = (double)v;
@@ -278,6 +364,12 @@ JNIEXPORT jobject JNICALL Java_org_monet
        BAT* b = BATdescriptor(col.b);
 
        switch (ATOMstorage(getColumnType(b->T->type))) {
+       case TYPE_bit:
+               return getBooleanColumn(env, b);
+               break;
+       case TYPE_bte:
+               return getByteColumn(env, b);
+               break;
        case TYPE_sht:
                return getShortColumn(env, b);
                break;
@@ -288,9 +380,11 @@ JNIEXPORT jobject JNICALL Java_org_monet
                return getLongColumn(env, b);
                break;
        case TYPE_flt:
+               printf("float1\n");
                return getFloatColumn(env, b);
                break;
        case TYPE_dbl:
+               printf("double1\n");
                return getDoubleColumn(env, b);
                break;
        case TYPE_str:
diff --git 
a/java/embedded/src/main/java/org/monetdb/embedded/result/column/BooleanColumn.java
 
b/java/embedded/src/main/java/org/monetdb/embedded/result/column/BooleanColumn.java
new file mode 100644
--- /dev/null
+++ 
b/java/embedded/src/main/java/org/monetdb/embedded/result/column/BooleanColumn.java
@@ -0,0 +1,30 @@
+/*
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0.  If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * Copyright 2008-2015 MonetDB B.V.
+ */
+
+package org.monetdb.embedded.result.column;
+
+/** 
+ * An {@code Boolean} column.
+ *
+ */
+public class BooleanColumn extends Column<Boolean> {
+       private boolean[] values;
+
+       public BooleanColumn(boolean[] values, int columnSize, boolean[] 
nullIndex) {
+               super(columnSize, nullIndex);
+               this.values = values;
+       }
+
+       @Override
+       public Boolean getVaule(int index) {
+               if (isNullValue(index) || index < 0 || index >= columnSize()) {
+                       return null;
+               }
+               return Boolean.valueOf(values[index]);
+       }
+}
diff --git 
a/java/embedded/src/main/java/org/monetdb/embedded/result/column/ByteColumn.java
 
b/java/embedded/src/main/java/org/monetdb/embedded/result/column/ByteColumn.java
new file mode 100644
--- /dev/null
+++ 
b/java/embedded/src/main/java/org/monetdb/embedded/result/column/ByteColumn.java
@@ -0,0 +1,30 @@
+/*
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0.  If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * Copyright 2008-2015 MonetDB B.V.
+ */
+
+package org.monetdb.embedded.result.column;
+
+/** 
+ * An {@code Boolean} column.
+ *
+ */
+public class ByteColumn extends Column<Byte> {
+       private byte[] values;
+
+       public ByteColumn(byte[] values, int columnSize, boolean[] nullIndex) {
+               super(columnSize, nullIndex);
+               this.values = values;
+       }
+
+       @Override
+       public Byte getVaule(int index) {
+               if (isNullValue(index) || index < 0 || index >= columnSize()) {
+                       return null;
+               }
+               return Byte.valueOf(values[index]);
+       }
+}
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
@@ -25,15 +25,24 @@ import org.monetdb.embedded.result.Embed
 public class EmbeddedTest {
        static File datbaseDirectory;
        static MonetDBEmbedded db;
-       static Object[] typeValues = new Object[]{
-                       Short.valueOf((short)12),
-                       Integer.valueOf(23),
-                       Long.valueOf(34l),
-                       Float.valueOf(4.5f),
-                       Double.valueOf(5.6),
+       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 {
                final Path directoryPath = 
Files.createTempDirectory("monetdbtest");
@@ -45,10 +54,19 @@ public class EmbeddedTest {
                db.query("CREATE TABLE world (id integer, val integer);");
                db.query("INSERT INTO world VALUES (1, 10), (2, 20), (3, 30), 
(4, null);");
 
-               db.query("CREATE TABLE typestest (fshort smallint, fint 
integer,  flong bigint, ffloat float, fdouble double, fstring string);");
-               db.query("INSERT INTO typestest VALUES (" + typeValues[0] + ", 
" + typeValues[1] + ", " + typeValues[2] + ", " 
-                               + typeValues[3] + ", " + typeValues[4] + ", " + 
"'" + typeValues[5] + "'" + ");");
-               db.query("INSERT INTO typestest VALUES (null, null, null, null, 
null, null);");
+               db.query("CREATE TABLE numeric_types_test (fbyte tinyint, 
fshort smallint, fint integer, flong bigint, ffloat float, 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
@@ -64,7 +82,7 @@ public class EmbeddedTest {
        }
 
        @Test
-       public void IntegerWithNullTest() throws IOException, SQLException {
+       public void integerWithNullTest() throws IOException, SQLException {
                try (EmbeddedQueryResult result = db.query("SELECT * FROM 
world;")) {
                        assertEquals(4, result.getColumn(1).columnSize());
                        assertEquals(Integer.valueOf(20), 
result.getColumn(1).getVaule(1));
@@ -73,32 +91,55 @@ public class EmbeddedTest {
        }
 
        @Test
-       public void TypesWithNullTest() throws IOException, SQLException {
-               try (EmbeddedQueryResult result = db.query("SELECT * FROM 
typestest;")) {
+       public void numericTypesWithNullTest() throws IOException, SQLException 
{
+               try (EmbeddedQueryResult result = db.query("SELECT * FROM 
numeric_types_test;")) {
_______________________________________________
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to