You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@gora.apache.org by dj...@apache.org on 2018/10/08 09:02:41 UTC

[06/11] gora git commit: Implement schema handling methods

Implement schema handling methods

The basic schema creation/deletion methods are implemented for the
Ignite backend.  In addition, all the SQL generation code was moved to
a separate class.

Project: http://git-wip-us.apache.org/repos/asf/gora/repo
Commit: http://git-wip-us.apache.org/repos/asf/gora/commit/b1e2ae4c
Tree: http://git-wip-us.apache.org/repos/asf/gora/tree/b1e2ae4c
Diff: http://git-wip-us.apache.org/repos/asf/gora/diff/b1e2ae4c

Branch: refs/heads/master
Commit: b1e2ae4c902691bbce02a90b76c4bee1c6e58455
Parents: 7545170
Author: Carlos M <ca...@gmail.com>
Authored: Tue Jun 26 23:18:19 2018 -0500
Committer: Carlos M <ca...@gmail.com>
Committed: Tue Jun 26 23:18:19 2018 -0500

----------------------------------------------------------------------
 .../apache/gora/ignite/store/IgniteStore.java   | 37 +++++++++--
 .../gora/ignite/utils/IgniteSQLBuilder.java     | 69 ++++++++++++++++++++
 gora-ignite/src/test/resources/gora.properties  |  4 +-
 3 files changed, 101 insertions(+), 9 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/gora/blob/b1e2ae4c/gora-ignite/src/main/java/org/apache/gora/ignite/store/IgniteStore.java
----------------------------------------------------------------------
diff --git a/gora-ignite/src/main/java/org/apache/gora/ignite/store/IgniteStore.java b/gora-ignite/src/main/java/org/apache/gora/ignite/store/IgniteStore.java
index d52d10e..ebc2943 100644
--- a/gora-ignite/src/main/java/org/apache/gora/ignite/store/IgniteStore.java
+++ b/gora-ignite/src/main/java/org/apache/gora/ignite/store/IgniteStore.java
@@ -22,11 +22,9 @@ import java.sql.DriverManager;
 import java.sql.ResultSet;
 import java.sql.SQLException;
 import java.sql.Statement;
-import java.text.MessageFormat;
 import java.util.List;
-import java.util.Locale;
 import java.util.Properties;
-import java.util.logging.Level;
+import org.apache.gora.ignite.utils.IgniteSQLBuilder;
 import org.apache.gora.persistency.impl.PersistentBase;
 import org.apache.gora.query.PartitionQuery;
 import org.apache.gora.query.Query;
@@ -105,20 +103,45 @@ public class IgniteStore<K, T extends PersistentBase> extends DataStoreBase<K, T
 
   @Override
   public void createSchema() throws GoraException {
-    throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
+    if (connection == null) {
+      throw new GoraException(
+          "Impossible to create the schema as no connection has been initiated.");
+    }
+    if (schemaExists()) {
+      return;
+    }
+    try (Statement stmt = connection.createStatement()) {
+      String createTableSQL = IgniteSQLBuilder.createTable(igniteMapping);
+      stmt.executeUpdate(createTableSQL);
+      LOG.info("Table {} has been created for Ignite instance.",
+          igniteMapping.getTableName());
+    } catch (SQLException ex) {
+      throw new GoraException(ex);
+    }
   }
 
   @Override
   public void deleteSchema() throws GoraException {
-    throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
+    if (connection == null) {
+      throw new GoraException(
+          "Impossible to delete the schema as no connection has been initiated.");
+    }
+    try (Statement stmt = connection.createStatement()) {
+      String dropTableSQL = IgniteSQLBuilder.dropTable(igniteMapping.getTableName());
+      stmt.executeUpdate(dropTableSQL);
+      LOG.info("Table {} has been dropped from Ignite instance.",
+          igniteMapping.getTableName());
+    } catch (SQLException ex) {
+      throw new GoraException(ex);
+    }
   }
 
   @Override
   public boolean schemaExists() throws GoraException {
     boolean exists = false;
     try (Statement stmt = connection.createStatement()) {
-      MessageFormat messageFormat = new MessageFormat("select * from {0} limit 0", Locale.getDefault());
-      ResultSet executeQuery = stmt.executeQuery(messageFormat.format(igniteMapping.getTableName()));
+      String tableExistsSQL = IgniteSQLBuilder.tableExists(igniteMapping.getTableName());
+      ResultSet executeQuery = stmt.executeQuery(tableExistsSQL);
       executeQuery.close();
       exists = true;
     } catch (SQLException ex) {

http://git-wip-us.apache.org/repos/asf/gora/blob/b1e2ae4c/gora-ignite/src/main/java/org/apache/gora/ignite/utils/IgniteSQLBuilder.java
----------------------------------------------------------------------
diff --git a/gora-ignite/src/main/java/org/apache/gora/ignite/utils/IgniteSQLBuilder.java b/gora-ignite/src/main/java/org/apache/gora/ignite/utils/IgniteSQLBuilder.java
new file mode 100644
index 0000000..0480fd4
--- /dev/null
+++ b/gora-ignite/src/main/java/org/apache/gora/ignite/utils/IgniteSQLBuilder.java
@@ -0,0 +1,69 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.gora.ignite.utils;
+
+import avro.shaded.com.google.common.collect.Lists;
+import java.text.MessageFormat;
+import java.util.ArrayList;
+import java.util.Locale;
+import java.util.Map;
+import org.apache.gora.ignite.store.Column;
+import org.apache.gora.ignite.store.IgniteMapping;
+
+/**
+ *
+ * SQL Builder utility for Ignite.
+ */
+public class IgniteSQLBuilder {
+
+  private static String format(String pattern, Object... args) {
+    MessageFormat messageFormat = new MessageFormat(pattern, Locale.getDefault());
+    return messageFormat.format(args);
+  }
+
+  public static String tableExists(String tableName) {
+    return format("SELECT * FROM {0} LIMIT 0", tableName);
+  }
+
+  public static String createTable(IgniteMapping mapping) {
+    StringBuilder sqlBuilder = new StringBuilder();
+    sqlBuilder.append("CREATE TABLE ");
+    sqlBuilder.append(mapping.getTableName());
+    sqlBuilder.append("(");
+    ArrayList<Map.Entry<String, Column>> fieldsList = Lists.newArrayList(mapping.getFields().entrySet());
+    for (Map.Entry<String, Column> aField : fieldsList) {
+      Column aColumn = aField.getValue();
+      String name = aColumn.getName();
+      Column.FieldType dataType = aColumn.getDataType();
+      sqlBuilder.append(name).append(" ").append(dataType.toString()).append(",");
+    }
+    sqlBuilder.append("PRIMARY KEY ");
+    sqlBuilder.append("(");
+    for (int i = 0; i < mapping.getPrimaryKey().size(); i++) {
+      sqlBuilder.append(mapping.getPrimaryKey().get(i));
+      sqlBuilder.append(i == mapping.getPrimaryKey().size() - 1 ? "" : ",");
+    }
+    sqlBuilder.append(")");
+    sqlBuilder.append(");");
+    return sqlBuilder.toString();
+  }
+  
+  public static String dropTable(String tableName) {
+    return format("DROP TABLE IF EXISTS {0} ;", tableName);
+  }
+
+}

http://git-wip-us.apache.org/repos/asf/gora/blob/b1e2ae4c/gora-ignite/src/test/resources/gora.properties
----------------------------------------------------------------------
diff --git a/gora-ignite/src/test/resources/gora.properties b/gora-ignite/src/test/resources/gora.properties
index e45aab7..e0d1901 100644
--- a/gora-ignite/src/test/resources/gora.properties
+++ b/gora-ignite/src/test/resources/gora.properties
@@ -17,6 +17,6 @@ gora.datastore.default=org.apache.gora.ignite.store.IgniteStore
 gora.datastore.ignite.schema=PUBLIC
 gora.datastore.ignite.host=localhost
 gora.datastore.ignite.port=10800
-gora.datastore.ignite.user=
-gora.datastore.ignite.password=
+#gora.datastore.ignite.user=
+#gora.datastore.ignite.password=
 gora.datastore.ignite.additionalConfigurations=
\ No newline at end of file