Changeset: 787a4fdba56e for monetdb-java
URL: http://dev.monetdb.org/hg/monetdb-java?cmd=changeset;node=787a4fdba56e
Added Files:
        src/main/java/nl/cwi/monetdb/embedded/EmbeddedQueryResult.java
        src/main/java/nl/cwi/monetdb/embedded/MonetDBEmbeddedConnection.java
        src/main/java/nl/cwi/monetdb/embedded/MonetDBEmbeddedDatabase.java
        src/main/java/nl/cwi/monetdb/embedded/MonetDBEmbeddedInstance.java
        src/main/java/nl/cwi/monetdb/embedded/column/BigintColumn.java
        src/main/java/nl/cwi/monetdb/embedded/column/BlobColumn.java
        src/main/java/nl/cwi/monetdb/embedded/column/BooleanColumn.java
        src/main/java/nl/cwi/monetdb/embedded/column/CharColumn.java
        src/main/java/nl/cwi/monetdb/embedded/column/ClobColumn.java
        src/main/java/nl/cwi/monetdb/embedded/column/Column.java
        src/main/java/nl/cwi/monetdb/embedded/column/DateColumn.java
        src/main/java/nl/cwi/monetdb/embedded/column/DecimalColumn.java
        src/main/java/nl/cwi/monetdb/embedded/column/DoubleColumn.java
        src/main/java/nl/cwi/monetdb/embedded/column/GeometryColumn.java
        src/main/java/nl/cwi/monetdb/embedded/column/HugeintColumn.java
        src/main/java/nl/cwi/monetdb/embedded/column/InetColumn.java
        src/main/java/nl/cwi/monetdb/embedded/column/IntColumn.java
        src/main/java/nl/cwi/monetdb/embedded/column/JSONColumn.java
        src/main/java/nl/cwi/monetdb/embedded/column/MonthIntervalColumn.java
        src/main/java/nl/cwi/monetdb/embedded/column/RealColumn.java
        src/main/java/nl/cwi/monetdb/embedded/column/SecondIntervalColumn.java
        src/main/java/nl/cwi/monetdb/embedded/column/SmallintColumn.java
        src/main/java/nl/cwi/monetdb/embedded/column/TimeColumn.java
        src/main/java/nl/cwi/monetdb/embedded/column/TimestampColumn.java
        src/main/java/nl/cwi/monetdb/embedded/column/TinyintColumn.java
        src/main/java/nl/cwi/monetdb/embedded/column/URLColumn.java
        src/main/java/nl/cwi/monetdb/embedded/column/UUIDColumn.java
        src/main/java/nl/cwi/monetdb/embedded/column/VarcharColumn.java
        src/main/java/nl/cwi/monetdb/embedded/types/MonetDBEmbeddedBlob.java
Removed Files:
        src/main/java/nl/cwi/monetdb/mcl/embedded/MonetDBEmbeddedConnection.java
        src/main/java/nl/cwi/monetdb/mcl/embedded/MonetDBEmbeddedInstance.java
        
src/main/java/nl/cwi/monetdb/mcl/embedded/result/EmbeddedQueryResult.java
        
src/main/java/nl/cwi/monetdb/mcl/embedded/result/column/BigintColumn.java
        src/main/java/nl/cwi/monetdb/mcl/embedded/result/column/BlobColumn.java
        
src/main/java/nl/cwi/monetdb/mcl/embedded/result/column/BooleanColumn.java
        src/main/java/nl/cwi/monetdb/mcl/embedded/result/column/CharColumn.java
        src/main/java/nl/cwi/monetdb/mcl/embedded/result/column/ClobColumn.java
        src/main/java/nl/cwi/monetdb/mcl/embedded/result/column/Column.java
        src/main/java/nl/cwi/monetdb/mcl/embedded/result/column/DateColumn.java
        
src/main/java/nl/cwi/monetdb/mcl/embedded/result/column/DecimalColumn.java
        
src/main/java/nl/cwi/monetdb/mcl/embedded/result/column/DoubleColumn.java
        
src/main/java/nl/cwi/monetdb/mcl/embedded/result/column/GeometryColumn.java
        
src/main/java/nl/cwi/monetdb/mcl/embedded/result/column/HugeintColumn.java
        src/main/java/nl/cwi/monetdb/mcl/embedded/result/column/InetColumn.java
        src/main/java/nl/cwi/monetdb/mcl/embedded/result/column/IntColumn.java
        src/main/java/nl/cwi/monetdb/mcl/embedded/result/column/JSONColumn.java
        
src/main/java/nl/cwi/monetdb/mcl/embedded/result/column/MonthIntervalColumn.java
        src/main/java/nl/cwi/monetdb/mcl/embedded/result/column/RealColumn.java
        
src/main/java/nl/cwi/monetdb/mcl/embedded/result/column/SecondIntervalColumn.java
        
src/main/java/nl/cwi/monetdb/mcl/embedded/result/column/SmallintColumn.java
        src/main/java/nl/cwi/monetdb/mcl/embedded/result/column/TimeColumn.java
        
src/main/java/nl/cwi/monetdb/mcl/embedded/result/column/TimestampColumn.java
        
src/main/java/nl/cwi/monetdb/mcl/embedded/result/column/TinyintColumn.java
        src/main/java/nl/cwi/monetdb/mcl/embedded/result/column/URLColumn.java
        src/main/java/nl/cwi/monetdb/mcl/embedded/result/column/UUIDColumn.java
        
src/main/java/nl/cwi/monetdb/mcl/embedded/result/column/VarcharColumn.java
Branch: embedded
Log Message:

More cleaning


diffs (truncated from 792 to 300 lines):

diff --git 
a/src/main/java/nl/cwi/monetdb/mcl/embedded/result/EmbeddedQueryResult.java 
b/src/main/java/nl/cwi/monetdb/embedded/EmbeddedQueryResult.java
rename from 
src/main/java/nl/cwi/monetdb/mcl/embedded/result/EmbeddedQueryResult.java
rename to src/main/java/nl/cwi/monetdb/embedded/EmbeddedQueryResult.java
--- a/src/main/java/nl/cwi/monetdb/mcl/embedded/result/EmbeddedQueryResult.java
+++ b/src/main/java/nl/cwi/monetdb/embedded/EmbeddedQueryResult.java
@@ -6,13 +6,13 @@
  * Copyright 2008-2015 MonetDB B.V.
  */
 
-package nl.cwi.monetdb.mcl.embedded.result;
+package nl.cwi.monetdb.embedded;
 
 import java.io.Closeable;
 import java.sql.SQLException;
 import java.util.Iterator;
 
-import nl.cwi.monetdb.mcl.embedded.result.column.Column;
+import nl.cwi.monetdb.embedded.column.Column;
 
 /**
  * Embedded MonetDB query result.
diff --git 
a/src/main/java/nl/cwi/monetdb/mcl/embedded/MonetDBEmbeddedConnection.java 
b/src/main/java/nl/cwi/monetdb/embedded/MonetDBEmbeddedConnection.java
rename from 
src/main/java/nl/cwi/monetdb/mcl/embedded/MonetDBEmbeddedConnection.java
rename to src/main/java/nl/cwi/monetdb/embedded/MonetDBEmbeddedConnection.java
--- a/src/main/java/nl/cwi/monetdb/mcl/embedded/MonetDBEmbeddedConnection.java
+++ b/src/main/java/nl/cwi/monetdb/embedded/MonetDBEmbeddedConnection.java
@@ -6,13 +6,13 @@
  * Copyright 2008-2015 MonetDB B.V.
  */
 
-package nl.cwi.monetdb.mcl.embedded;
+package nl.cwi.monetdb.embedded;
+
+import nl.cwi.monetdb.embedded.column.Column;
 
 import java.io.*;
 import java.sql.SQLException;
 
-import nl.cwi.monetdb.mcl.embedded.result.EmbeddedQueryResult;
-
 /**
  * A single connection to a MonetDB database instance
  * Communication between Java and native C is done via JNI.
@@ -38,7 +38,7 @@ public class MonetDBEmbeddedConnection {
         * @return The query result object, {@code null} if the database is not 
running
         * @throws SQLException
         */
-       public EmbeddedQueryResult createQuery(String query) throws 
SQLException, IOException {
+       public EmbeddedQueryResult createQuery(String query) throws 
SQLException {
                String queryString = query;
                if (!queryString.endsWith(";")) {
                        queryString += ";";
@@ -46,6 +46,96 @@ public class MonetDBEmbeddedConnection {
                return queryWrapper(queryString, true, this.connectionPointer);
        }
 
+    /**
+     * Begins a transaction in nl.cwi.monetdb.embedded database.
+     *
+     * @throws SQLException
+     */
+       public void startTransaction() throws SQLException {
+               this.createQuery("START TRANSACTION;").close();
+       }
+
+    /**
+     * Commits a transaction in nl.cwi.monetdb.embedded database.
+     *
+     * @throws SQLException
+     */
+       public void commit() throws SQLException {
+               this.createQuery("COMMIT;").close();
+       }
+
+    /**
+     * Rollbacks a transaction in nl.cwi.monetdb.embedded database.
+     *
+     * @throws SQLException
+     */
+       public void rollback() throws SQLException {
+               this.createQuery("ROLLBACK;").close();
+       }
+
+    /**
+     * Performs a Lists the the existing tables with schemas on the system
+     *
+     * @param listSystemTables List system's tables as well (default true)
+     * @return The query result object, {@code null} if the database is not 
running
+     * @throws SQLException
+     */
+    public EmbeddedQueryResult listTables(boolean listSystemTables) throws 
SQLException {
+        String query = "select schemas.name as sn, tables.name as tn from 
sys.tables join sys.schemas on tables.schema_id=schemas.id";
+        if (!listSystemTables) {
+            query += " where tables.system=false order by sn, tn";
+        }
+        return this.createQuery(query + ";");
+    }
+
+    /**
+     * Performs a SELECT * FROM a table  in nl.cwi.monetdb.embedded database.
+     *
+     * @param tableName The name of the table
+     * @return The query result object, {@code null} if the database is not 
running
+     * @throws SQLException
+     */
+       public EmbeddedQueryResult readTable(String tableName) throws 
SQLException {
+        return this.createQuery("SELECT * FROM " + tableName + ";");
+    }
+
+    /**
+     * Check if a table exists  in nl.cwi.monetdb.embedded database.
+     *
+     * @param tableName The name of the table
+     * @return If a the table exists or not
+     * @throws SQLException
+     */
+    public boolean checkTableExists(String tableName) throws SQLException {
+        EmbeddedQueryResult eqr = this.listTables(true);
+        Column<String> tablenames = (Column<String>) eqr.getColumn(0);
+        boolean res = false;
+        for (String str: tablenames.getAllValues()) {
+            if(str.equals(tableName)) {
+                res = true;
+            }
+        }
+        eqr.close();
+        return res;
+    }
+
+    /**
+     * Lists the table fields and types in nl.cwi.monetdb.embedded database.
+     *
+     * @param tableName The name of the table
+     * @return
+     * @throws SQLException
+     */
+    public String[] listFields(String tableName) throws SQLException {
+        if(!this.checkTableExists(tableName)) {
+            throw  new SQLException("The table " + tableName + " doesn't 
exist!!");
+        }
+        EmbeddedQueryResult eqr = this.createQuery("select columns.name as 
name from sys.columns join sys.tables on columns.table_id=tables.id where 
tables.name='" + tableName + "';");
+        String[] res = (String[]) eqr.getColumn(0).getAllValues();
+        eqr.close();
+        return res;
+    }
+
        /**
         * Execute an SQL query in an nl.cwi.monetdb.embedded database.
         * 
@@ -53,6 +143,6 @@ public class MonetDBEmbeddedConnection {
         * @return The query result object, {@code null} if the database is not 
running
         * @throws SQLException
         */
-       private native EmbeddedQueryResult queryWrapper(String query, boolean 
execute, long connectionPointer) throws SQLException, IOException;
+       private native EmbeddedQueryResult queryWrapper(String query, boolean 
execute, long connectionPointer) throws SQLException;
 
 }
diff --git 
a/src/main/java/nl/cwi/monetdb/mcl/embedded/MonetDBEmbeddedInstance.java 
b/src/main/java/nl/cwi/monetdb/embedded/MonetDBEmbeddedDatabase.java
rename from 
src/main/java/nl/cwi/monetdb/mcl/embedded/MonetDBEmbeddedInstance.java
rename to src/main/java/nl/cwi/monetdb/embedded/MonetDBEmbeddedDatabase.java
--- a/src/main/java/nl/cwi/monetdb/mcl/embedded/MonetDBEmbeddedInstance.java
+++ b/src/main/java/nl/cwi/monetdb/embedded/MonetDBEmbeddedDatabase.java
@@ -6,7 +6,7 @@
  * Copyright 2008-2015 MonetDB B.V.
  */
 
-package nl.cwi.monetdb.mcl.embedded;
+package nl.cwi.monetdb.embedded;
 
 import java.io.*;
 import java.nio.file.Files;
@@ -22,54 +22,17 @@ import java.util.concurrent.locks.Reentr
  * <br/>
  * <strong>Note</strong>: You can have only one nl.cwi.monetdb.embedded 
MonetDB database running per JVM process.
  */
-public class MonetDBEmbeddedInstance {
+public class MonetDBEmbeddedDatabase {
 
-    private final static String NATIVE_LIB_PATH_IN_JAR = "src" + 
File.separatorChar + "main" +
-            File.separatorChar + "resources";
-    private final static String NATIVE_LIB_NAME = "libmonetdb5.so";
-
-    /**
-     * The native nl.cwi.monetdb.embedded MonetDB library.
-     */
-    static {
-        try {
-            // Try load the nl.cwi.monetdb.embedded library
-            System.loadLibrary("monetdb5");
-        } catch (UnsatisfiedLinkError e) {
-            // Still no, then get the resources.lib bundled in the jar
-            loadLibFromJar(NATIVE_LIB_NAME);
+    public static MonetDBEmbeddedDatabase StartDatabase(String dbDirectory, 
boolean silentFlag, boolean sequentialFlag) throws SQLException {
+        if(MonetDBEmbeddedInstance.IsEmbeddedInstanceInitialized() == false) {
+            throw new SQLException("The embedded instance has not been loaded 
yet!");
+        } else {
+            return StartDatabaseInternal(dbDirectory, silentFlag, 
sequentialFlag);
         }
     }
 
-    private static void loadLibFromJar(String fileName) {
-        String pathToLib = NATIVE_LIB_PATH_IN_JAR + File.separatorChar + 
fileName;
-        try {
-            InputStream in = 
MonetDBEmbeddedInstance.class.getResourceAsStream(File.separatorChar + 
pathToLib);
-            if (in == null) {
-                // OK, the input stream is null, hence no .jar
-                // This was probably a test and/or in an IDE
-                // Just read the files from the src/main/resources dir
-                in = new FileInputStream(new File(pathToLib));
-            }
-            // Set a temp location to extract (and load from later)
-            final Path tempLibsDir = 
Files.createTempDirectory("nl.cwi.monetdb.embedded");
-            File fileOut = new File(tempLibsDir.toString() + 
File.separatorChar + fileName);
-            try (OutputStream out = new FileOutputStream(fileOut)) {
-                byte[] buffer = new byte[in.available()];
-                while (in.read(buffer) != -1) {
-                    out.write(buffer);
-                }
-                out.flush();
-                in.close();
-                // Load the resources.lib from the extracted file
-                System.load(fileOut.toString());
-            }
-        } catch (IOException e) {
-            throw new UnsatisfiedLinkError("Unable to extract native library 
from JAR:" + e.getMessage());
-        }
-    }
-
-    public static native MonetDBEmbeddedInstance StartDatabase(String 
dbDirectory, boolean silentFlag, boolean sequentialFlag) throws SQLException;
+    private static native MonetDBEmbeddedDatabase StartDatabaseInternal(String 
dbDirectory, boolean silentFlag, boolean sequentialFlag) throws SQLException;
 
     private final File databaseDirectory;
 
@@ -83,7 +46,7 @@ public class MonetDBEmbeddedInstance {
 
     private final ReentrantReadWriteLock lock = new ReentrantReadWriteLock();
 
-    public MonetDBEmbeddedInstance(String dbDirectory, boolean silentFlag, 
boolean sequentialFlag, boolean isRunning) {
+    public MonetDBEmbeddedDatabase(String dbDirectory, boolean silentFlag, 
boolean sequentialFlag, boolean isRunning) {
         this.databaseDirectory = new File(dbDirectory);
         this.silentFlag = silentFlag;
         this.sequentialFlag = sequentialFlag;
diff --git a/src/main/java/nl/cwi/monetdb/embedded/MonetDBEmbeddedInstance.java 
b/src/main/java/nl/cwi/monetdb/embedded/MonetDBEmbeddedInstance.java
new file mode 100644
--- /dev/null
+++ b/src/main/java/nl/cwi/monetdb/embedded/MonetDBEmbeddedInstance.java
@@ -0,0 +1,37 @@
+package nl.cwi.monetdb.embedded;
+
+/**
+ * Created by ferreira on 10/27/16.
+ */
+public class MonetDBEmbeddedInstance {
+
+    private static boolean isEmbeddedInstanceInitialized = false;
+
+    private static final String NATIVE_LIB_NAME = "monetdb5";
+
+    public static boolean TryLoadEmbeddedInstanceFromName(String libraryName) {
+        if(isEmbeddedInstanceInitialized == false) {
+            if(libraryName == null) {
+                libraryName = NATIVE_LIB_NAME;
+            }
+            System.loadLibrary(libraryName);
+            isEmbeddedInstanceInitialized = true;
+        }
+        return true;
+    }
+
+    public static boolean TryLoadEmbeddedInstanceFromPath(String libraryPath) {
+        if(isEmbeddedInstanceInitialized == false) {
+            if(libraryPath == null) {
+                return false;
+            }
+            System.load(libraryPath);
+            isEmbeddedInstanceInitialized = true;
+        }
+        return true;
+    }
+
+    public static boolean IsEmbeddedInstanceInitialized() {
+        return isEmbeddedInstanceInitialized;
+    }
+}
diff --git 
a/src/main/java/nl/cwi/monetdb/mcl/embedded/result/column/BigintColumn.java 
b/src/main/java/nl/cwi/monetdb/embedded/column/BigintColumn.java
rename from 
src/main/java/nl/cwi/monetdb/mcl/embedded/result/column/BigintColumn.java
rename to src/main/java/nl/cwi/monetdb/embedded/column/BigintColumn.java
--- a/src/main/java/nl/cwi/monetdb/mcl/embedded/result/column/BigintColumn.java
+++ b/src/main/java/nl/cwi/monetdb/embedded/column/BigintColumn.java
@@ -6,9 +6,9 @@
  * Copyright 2008-2015 MonetDB B.V.
  */
 
-package nl.cwi.monetdb.mcl.embedded.result.column;
+package nl.cwi.monetdb.embedded.column;
 
-import nl.cwi.monetdb.mcl.embedded.result.EmbeddedQueryResult;
+import nl.cwi.monetdb.embedded.EmbeddedQueryResult;
 
 /**
_______________________________________________
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to