This is an automated email from the ASF dual-hosted git repository.

dschneider pushed a commit to branch feature/GEODE-6291
in repository https://gitbox.apache.org/repos/asf/geode.git


The following commit(s) were added to refs/heads/feature/GEODE-6291 by this 
push:
     new d5522f5  added ColumnMetaData which now keeps track of if a column is 
nullable
d5522f5 is described below

commit d5522f5d7939cb27fe0ea5f6375b521252c53053
Author: Darrel Schneider <[email protected]>
AuthorDate: Thu Jan 17 16:54:39 2019 -0800

    added ColumnMetaData which now keeps track of if a column is nullable
---
 .../TableMetaDataManagerIntegrationTest.java       | 20 +++++++++++
 .../connectors/jdbc/internal/TableMetaData.java    | 42 ++++++++++++++++++----
 .../jdbc/internal/TableMetaDataManager.java        | 11 +++---
 .../jdbc/internal/TableMetaDataView.java           |  2 ++
 .../jdbc/internal/TableMetaDataTest.java           | 30 ++++++++++++----
 5 files changed, 87 insertions(+), 18 deletions(-)

diff --git 
a/geode-connectors/src/acceptanceTest/java/org/apache/geode/connectors/jdbc/internal/TableMetaDataManagerIntegrationTest.java
 
b/geode-connectors/src/acceptanceTest/java/org/apache/geode/connectors/jdbc/internal/TableMetaDataManagerIntegrationTest.java
index 1ea0fdb..ef57205 100644
--- 
a/geode-connectors/src/acceptanceTest/java/org/apache/geode/connectors/jdbc/internal/TableMetaDataManagerIntegrationTest.java
+++ 
b/geode-connectors/src/acceptanceTest/java/org/apache/geode/connectors/jdbc/internal/TableMetaDataManagerIntegrationTest.java
@@ -196,6 +196,26 @@ public abstract class TableMetaDataManagerIntegrationTest {
   }
 
   @Test
+  public void validateIsColumnNullableForName() throws SQLException {
+    createTable();
+    TableMetaDataView metaData = manager.getTableMetaDataView(connection, 
regionMapping);
+
+    boolean nullable = metaData.isColumnNullable("name");
+
+    assertThat(nullable).isTrue();
+  }
+
+  @Test
+  public void validateIsColumnNullableForId() throws SQLException {
+    createTable();
+    TableMetaDataView metaData = manager.getTableMetaDataView(connection, 
regionMapping);
+
+    boolean nullable = metaData.isColumnNullable("id");
+
+    assertThat(nullable).isFalse();
+  }
+
+  @Test
   public void validateColumnDataTypeForId() throws SQLException {
     createTable();
     TableMetaDataView metaData = manager.getTableMetaDataView(connection, 
regionMapping);
diff --git 
a/geode-connectors/src/main/java/org/apache/geode/connectors/jdbc/internal/TableMetaData.java
 
b/geode-connectors/src/main/java/org/apache/geode/connectors/jdbc/internal/TableMetaData.java
index 71df7e1..f2a6b3c 100644
--- 
a/geode-connectors/src/main/java/org/apache/geode/connectors/jdbc/internal/TableMetaData.java
+++ 
b/geode-connectors/src/main/java/org/apache/geode/connectors/jdbc/internal/TableMetaData.java
@@ -24,17 +24,18 @@ public class TableMetaData implements TableMetaDataView {
 
   private final String quotedTablePath;
   private final List<String> keyColumnNames;
-  private final Map<String, Integer> columnNameToTypeMap;
+  private final Map<String, ColumnMetaData> columnMetaDataMap;
   private final String identifierQuoteString;
 
   public TableMetaData(String catalogName, String schemaName, String tableName,
-      List<String> keyColumnNames, String quoteString, Map<String, Integer> 
dataTypes) {
+      List<String> keyColumnNames, String quoteString,
+      Map<String, ColumnMetaData> columnMetaDataMap) {
     if (quoteString == null) {
       quoteString = "";
     }
     this.quotedTablePath = createQuotedTablePath(catalogName, schemaName, 
tableName, quoteString);
     this.keyColumnNames = keyColumnNames;
-    this.columnNameToTypeMap = dataTypes;
+    this.columnMetaDataMap = columnMetaDataMap;
     this.identifierQuoteString = quoteString;
   }
 
@@ -65,20 +66,47 @@ public class TableMetaData implements TableMetaDataView {
 
   @Override
   public int getColumnDataType(String columnName) {
-    Integer dataType = this.columnNameToTypeMap.get(columnName);
-    if (dataType == null) {
+    ColumnMetaData columnMetaData = this.columnMetaDataMap.get(columnName);
+    if (columnMetaData == null) {
       return 0;
     }
-    return dataType;
+    return columnMetaData.getType();
+  }
+
+  @Override
+  public boolean isColumnNullable(String columnName) {
+    ColumnMetaData columnMetaData = this.columnMetaDataMap.get(columnName);
+    if (columnMetaData == null) {
+      return true;
+    }
+    return columnMetaData.isNullable();
   }
 
   @Override
   public Set<String> getColumnNames() {
-    return columnNameToTypeMap.keySet();
+    return columnMetaDataMap.keySet();
   }
 
   @Override
   public String getIdentifierQuoteString() {
     return this.identifierQuoteString;
   }
+
+  public static class ColumnMetaData {
+    private final int type;
+    private final boolean nullable;
+
+    public ColumnMetaData(int type, boolean nullable) {
+      this.type = type;
+      this.nullable = nullable;
+    }
+
+    public int getType() {
+      return this.type;
+    }
+
+    public boolean isNullable() {
+      return this.nullable;
+    }
+  }
 }
diff --git 
a/geode-connectors/src/main/java/org/apache/geode/connectors/jdbc/internal/TableMetaDataManager.java
 
b/geode-connectors/src/main/java/org/apache/geode/connectors/jdbc/internal/TableMetaDataManager.java
index 5b3ccf9..dc229ad 100644
--- 
a/geode-connectors/src/main/java/org/apache/geode/connectors/jdbc/internal/TableMetaDataManager.java
+++ 
b/geode-connectors/src/main/java/org/apache/geode/connectors/jdbc/internal/TableMetaDataManager.java
@@ -27,6 +27,7 @@ import java.util.concurrent.ConcurrentHashMap;
 import java.util.concurrent.ConcurrentMap;
 
 import org.apache.geode.connectors.jdbc.JdbcConnectorException;
+import org.apache.geode.connectors.jdbc.internal.TableMetaData.ColumnMetaData;
 import org.apache.geode.connectors.jdbc.internal.configuration.RegionMapping;
 
 /**
@@ -71,7 +72,7 @@ public class TableMetaDataManager {
       List<String> keys = getPrimaryKeyColumnNamesFromMetaData(metaData, 
realCatalogName,
           realSchemaName, realTableName, regionMapping.getIds());
       String quoteString = metaData.getIdentifierQuoteString();
-      Map<String, Integer> dataTypes =
+      Map<String, ColumnMetaData> dataTypes =
           getDataTypesFromMetaData(metaData, realCatalogName, realSchemaName, 
realTableName);
       return new TableMetaData(realCatalogName, realSchemaName, realTableName, 
keys, quoteString,
           dataTypes);
@@ -174,16 +175,18 @@ public class TableMetaDataManager {
     return keys;
   }
 
-  private Map<String, Integer> getDataTypesFromMetaData(DatabaseMetaData 
metaData,
+  private Map<String, ColumnMetaData> 
getDataTypesFromMetaData(DatabaseMetaData metaData,
       String catalogFilter,
       String schemaFilter, String tableName) throws SQLException {
-    Map<String, Integer> result = new HashMap<>();
+    Map<String, ColumnMetaData> result = new HashMap<>();
     try (ResultSet columnData =
         metaData.getColumns(catalogFilter, schemaFilter, tableName, "%")) {
       while (columnData.next()) {
         String columnName = columnData.getString("COLUMN_NAME");
         int dataType = columnData.getInt("DATA_TYPE");
-        result.put(columnName, dataType);
+        int nullableCode = columnData.getInt("NULLABLE");
+        boolean nullable = nullableCode != DatabaseMetaData.columnNoNulls;
+        result.put(columnName, new ColumnMetaData(dataType, nullable));
       }
     }
     return result;
diff --git 
a/geode-connectors/src/main/java/org/apache/geode/connectors/jdbc/internal/TableMetaDataView.java
 
b/geode-connectors/src/main/java/org/apache/geode/connectors/jdbc/internal/TableMetaDataView.java
index e897dea..a6d94b5 100644
--- 
a/geode-connectors/src/main/java/org/apache/geode/connectors/jdbc/internal/TableMetaDataView.java
+++ 
b/geode-connectors/src/main/java/org/apache/geode/connectors/jdbc/internal/TableMetaDataView.java
@@ -32,6 +32,8 @@ public interface TableMetaDataView {
 
   int getColumnDataType(String columnName);
 
+  boolean isColumnNullable(String columnName);
+
   Set<String> getColumnNames();
 
   String getIdentifierQuoteString();
diff --git 
a/geode-connectors/src/test/java/org/apache/geode/connectors/jdbc/internal/TableMetaDataTest.java
 
b/geode-connectors/src/test/java/org/apache/geode/connectors/jdbc/internal/TableMetaDataTest.java
index 8028b11..46e029f 100644
--- 
a/geode-connectors/src/test/java/org/apache/geode/connectors/jdbc/internal/TableMetaDataTest.java
+++ 
b/geode-connectors/src/test/java/org/apache/geode/connectors/jdbc/internal/TableMetaDataTest.java
@@ -23,13 +23,15 @@ import java.util.Map;
 
 import org.junit.Test;
 
+import org.apache.geode.connectors.jdbc.internal.TableMetaData.ColumnMetaData;
+
 public class TableMetaDataTest {
   private String catalogName;
   private String schemaName;
   private String tableName;
   private List<String> keyColumnNames;
   private String quoteString;
-  private Map<String, Integer> dataTypes;
+  private Map<String, ColumnMetaData> dataTypes;
 
   private TableMetaData tableMetaData;
 
@@ -58,9 +60,9 @@ public class TableMetaDataTest {
 
   @Test
   public void verifyColumnNames() {
-    Map<String, Integer> map = new HashMap<>();
-    map.put("k1", 1);
-    map.put("k2", 2);
+    Map<String, ColumnMetaData> map = new HashMap<>();
+    map.put("k1", new ColumnMetaData(1, false));
+    map.put("k2", new ColumnMetaData(2, false));
     dataTypes = map;
 
     createTableMetaData();
@@ -70,9 +72,9 @@ public class TableMetaDataTest {
 
   @Test
   public void verifyColumnDataType() {
-    Map<String, Integer> map = new HashMap<>();
-    map.put("k1", 1);
-    map.put("k2", 2);
+    Map<String, ColumnMetaData> map = new HashMap<>();
+    map.put("k1", new ColumnMetaData(1, false));
+    map.put("k2", new ColumnMetaData(2, false));
     dataTypes = map;
 
     createTableMetaData();
@@ -83,6 +85,20 @@ public class TableMetaDataTest {
   }
 
   @Test
+  public void verifyIsColumnNullable() {
+    Map<String, ColumnMetaData> map = new HashMap<>();
+    map.put("k1", new ColumnMetaData(1, false));
+    map.put("k2", new ColumnMetaData(2, true));
+    dataTypes = map;
+
+    createTableMetaData();
+
+    assertThat(tableMetaData.isColumnNullable("k1")).isFalse();
+    assertThat(tableMetaData.isColumnNullable("k2")).isTrue();
+    assertThat(tableMetaData.isColumnNullable("k3")).isTrue();
+  }
+
+  @Test
   public void verifyTableWithQuoteAndNoCatalogOrSchema() {
     quoteString = "+";
     tableName = "myTable";

Reply via email to