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";