IGNITE-843: Fixed POJO store null value and made dialects serializable.
Project: http://git-wip-us.apache.org/repos/asf/incubator-ignite/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-ignite/commit/939afff9 Tree: http://git-wip-us.apache.org/repos/asf/incubator-ignite/tree/939afff9 Diff: http://git-wip-us.apache.org/repos/asf/incubator-ignite/diff/939afff9 Branch: refs/heads/master Commit: 939afff97f007d53f1fdee11e974beca4b75bf2f Parents: c04fcea Author: Alexey Kuznetsov <akuznet...@apache.org> Authored: Thu Aug 20 16:53:18 2015 +0700 Committer: Alexey Kuznetsov <akuznet...@apache.org> Committed: Thu Aug 20 16:53:18 2015 +0700 ---------------------------------------------------------------------- .../store/jdbc/CacheAbstractJdbcStore.java | 45 ++++----- .../cache/store/jdbc/CacheJdbcPojoStore.java | 20 +++- .../store/jdbc/dialect/BasicJdbcDialect.java | 3 + .../cache/store/jdbc/dialect/DB2Dialect.java | 3 + .../cache/store/jdbc/dialect/H2Dialect.java | 3 + .../cache/store/jdbc/dialect/JdbcDialect.java | 3 +- .../cache/store/jdbc/dialect/MySQLDialect.java | 3 + .../cache/store/jdbc/dialect/OracleDialect.java | 3 + .../store/jdbc/dialect/SQLServerDialect.java | 3 + .../config/store/jdbc/ignite-type-metadata.xml | 8 ++ .../store/jdbc/CacheJdbcPojoStoreTest.java | 11 +- ...eJdbcStoreAbstractMultithreadedSelfTest.java | 16 +-- .../ignite/cache/store/jdbc/model/Person.java | 26 ++++- .../ignite/schema/model/PojoDescriptor.java | 6 +- .../parser/dialect/OracleMetadataDialect.java | 101 ++++++++++--------- .../ignite/schema/ui/SchemaImportApp.java | 36 +++++-- .../jdbc/CacheJdbcPojoStoreFactorySelfTest.java | 17 ++-- 17 files changed, 198 insertions(+), 109 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/939afff9/modules/core/src/main/java/org/apache/ignite/cache/store/jdbc/CacheAbstractJdbcStore.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/cache/store/jdbc/CacheAbstractJdbcStore.java b/modules/core/src/main/java/org/apache/ignite/cache/store/jdbc/CacheAbstractJdbcStore.java index b1e223b..b2be8c7 100644 --- a/modules/core/src/main/java/org/apache/ignite/cache/store/jdbc/CacheAbstractJdbcStore.java +++ b/modules/core/src/main/java/org/apache/ignite/cache/store/jdbc/CacheAbstractJdbcStore.java @@ -355,6 +355,11 @@ public abstract class CacheAbstractJdbcStore<K, V> implements CacheStore<K, V>, * @throws SQLException If a database access error occurs or this method is called. */ protected Object getColumnValue(ResultSet rs, int colIdx, Class<?> type) throws SQLException { + Object val = rs.getObject(colIdx); + + if (val == null) + return null; + if (type == int.class) return rs.getInt(colIdx); @@ -364,7 +369,7 @@ public abstract class CacheAbstractJdbcStore<K, V> implements CacheStore<K, V>, if (type == double.class) return rs.getDouble(colIdx); - if (type == boolean.class) + if (type == boolean.class || type == Boolean.class) return rs.getBoolean(colIdx); if (type == byte.class) @@ -378,31 +383,23 @@ public abstract class CacheAbstractJdbcStore<K, V> implements CacheStore<K, V>, if (type == Integer.class || type == Long.class || type == Double.class || type == Byte.class || type == Short.class || type == Float.class) { - Object val = rs.getObject(colIdx); - - if (val != null) { - Number num = (Number)val; - - if (type == Integer.class) - return num.intValue(); - else if (type == Long.class) - return num.longValue(); - else if (type == Double.class) - return num.doubleValue(); - else if (type == Byte.class) - return num.byteValue(); - else if (type == Short.class) - return num.shortValue(); - else if (type == Float.class) - return num.floatValue(); - } - else - return EMPTY_COLUMN_VALUE; + Number num = (Number)val; + + if (type == Integer.class) + return num.intValue(); + else if (type == Long.class) + return num.longValue(); + else if (type == Double.class) + return num.doubleValue(); + else if (type == Byte.class) + return num.byteValue(); + else if (type == Short.class) + return num.shortValue(); + else if (type == Float.class) + return num.floatValue(); } - Object val = rs.getObject(colIdx); - - if (type == UUID.class && val != null) { + if (type == UUID.class) { if (val instanceof UUID) return val; http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/939afff9/modules/core/src/main/java/org/apache/ignite/cache/store/jdbc/CacheJdbcPojoStore.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/cache/store/jdbc/CacheJdbcPojoStore.java b/modules/core/src/main/java/org/apache/ignite/cache/store/jdbc/CacheJdbcPojoStore.java index 7b78bda..428485f 100644 --- a/modules/core/src/main/java/org/apache/ignite/cache/store/jdbc/CacheJdbcPojoStore.java +++ b/modules/core/src/main/java/org/apache/ignite/cache/store/jdbc/CacheJdbcPojoStore.java @@ -167,15 +167,25 @@ public class CacheJdbcPojoStore<K, V> extends CacheAbstractJdbcStore<K, V> { Object obj = mc.ctor.newInstance(); for (CacheTypeFieldMetadata field : fields) { - Method setter = mc.setters.get(field.getJavaName()); + String fldJavaName = field.getJavaName(); + + Method setter = mc.setters.get(fldJavaName); if (setter == null) - throw new CacheLoaderException("Failed to find setter in POJO class [class name=" + typeName + - ", property=" + field.getJavaName() + "]"); + throw new IllegalStateException("Failed to find setter in POJO class [class name=" + typeName + + ", property=" + fldJavaName + "]"); + + String fldDbName = field.getDatabaseName(); - Integer colIdx = loadColIdxs.get(field.getDatabaseName()); + Integer colIdx = loadColIdxs.get(fldDbName); - setter.invoke(obj, getColumnValue(rs, colIdx, field.getJavaType())); + try { + setter.invoke(obj, getColumnValue(rs, colIdx, field.getJavaType())); + } + catch (Exception e) { + throw new IllegalStateException("Failed to set property in POJO class [class name=" + typeName + + ", property=" + fldJavaName + ", column=" + colIdx + ", db name=" + fldDbName + "]", e); + } } return (R)obj; http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/939afff9/modules/core/src/main/java/org/apache/ignite/cache/store/jdbc/dialect/BasicJdbcDialect.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/cache/store/jdbc/dialect/BasicJdbcDialect.java b/modules/core/src/main/java/org/apache/ignite/cache/store/jdbc/dialect/BasicJdbcDialect.java index d0dd6f4..b43c7d5 100644 --- a/modules/core/src/main/java/org/apache/ignite/cache/store/jdbc/dialect/BasicJdbcDialect.java +++ b/modules/core/src/main/java/org/apache/ignite/cache/store/jdbc/dialect/BasicJdbcDialect.java @@ -26,6 +26,9 @@ import java.util.*; * Basic implementation of dialect based on JDBC specification. */ public class BasicJdbcDialect implements JdbcDialect { + /** */ + private static final long serialVersionUID = 0L; + /** Default max query parameters count. */ protected static final int DFLT_MAX_PARAMS_CNT = 2000; http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/939afff9/modules/core/src/main/java/org/apache/ignite/cache/store/jdbc/dialect/DB2Dialect.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/cache/store/jdbc/dialect/DB2Dialect.java b/modules/core/src/main/java/org/apache/ignite/cache/store/jdbc/dialect/DB2Dialect.java index fe1d876..2a08557 100644 --- a/modules/core/src/main/java/org/apache/ignite/cache/store/jdbc/dialect/DB2Dialect.java +++ b/modules/core/src/main/java/org/apache/ignite/cache/store/jdbc/dialect/DB2Dialect.java @@ -25,6 +25,9 @@ import java.util.*; * A dialect compatible with the IBM DB2 database. */ public class DB2Dialect extends BasicJdbcDialect { + /** */ + private static final long serialVersionUID = 0L; + /** {@inheritDoc} */ @Override public boolean hasMerge() { return true; http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/939afff9/modules/core/src/main/java/org/apache/ignite/cache/store/jdbc/dialect/H2Dialect.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/cache/store/jdbc/dialect/H2Dialect.java b/modules/core/src/main/java/org/apache/ignite/cache/store/jdbc/dialect/H2Dialect.java index a97e144..8091e1a 100644 --- a/modules/core/src/main/java/org/apache/ignite/cache/store/jdbc/dialect/H2Dialect.java +++ b/modules/core/src/main/java/org/apache/ignite/cache/store/jdbc/dialect/H2Dialect.java @@ -25,6 +25,9 @@ import java.util.*; * A dialect compatible with the H2 database. */ public class H2Dialect extends BasicJdbcDialect { + /** */ + private static final long serialVersionUID = 0L; + /** {@inheritDoc} */ @Override public boolean hasMerge() { return true; http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/939afff9/modules/core/src/main/java/org/apache/ignite/cache/store/jdbc/dialect/JdbcDialect.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/cache/store/jdbc/dialect/JdbcDialect.java b/modules/core/src/main/java/org/apache/ignite/cache/store/jdbc/dialect/JdbcDialect.java index be1cc67..32adcc4 100644 --- a/modules/core/src/main/java/org/apache/ignite/cache/store/jdbc/dialect/JdbcDialect.java +++ b/modules/core/src/main/java/org/apache/ignite/cache/store/jdbc/dialect/JdbcDialect.java @@ -17,12 +17,13 @@ package org.apache.ignite.cache.store.jdbc.dialect; +import java.io.*; import java.util.*; /** * Represents a dialect of SQL implemented by a particular RDBMS. */ -public interface JdbcDialect { +public interface JdbcDialect extends Serializable { /** * Construct select count query. * http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/939afff9/modules/core/src/main/java/org/apache/ignite/cache/store/jdbc/dialect/MySQLDialect.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/cache/store/jdbc/dialect/MySQLDialect.java b/modules/core/src/main/java/org/apache/ignite/cache/store/jdbc/dialect/MySQLDialect.java index df16841..def2fe7 100644 --- a/modules/core/src/main/java/org/apache/ignite/cache/store/jdbc/dialect/MySQLDialect.java +++ b/modules/core/src/main/java/org/apache/ignite/cache/store/jdbc/dialect/MySQLDialect.java @@ -25,6 +25,9 @@ import java.util.*; * A dialect compatible with the MySQL database. */ public class MySQLDialect extends BasicJdbcDialect { + /** */ + private static final long serialVersionUID = 0L; + /** {@inheritDoc} */ @Override public boolean hasMerge() { return true; http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/939afff9/modules/core/src/main/java/org/apache/ignite/cache/store/jdbc/dialect/OracleDialect.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/cache/store/jdbc/dialect/OracleDialect.java b/modules/core/src/main/java/org/apache/ignite/cache/store/jdbc/dialect/OracleDialect.java index 351f10a..e155fb4 100644 --- a/modules/core/src/main/java/org/apache/ignite/cache/store/jdbc/dialect/OracleDialect.java +++ b/modules/core/src/main/java/org/apache/ignite/cache/store/jdbc/dialect/OracleDialect.java @@ -25,6 +25,9 @@ import java.util.*; * A dialect compatible with the Oracle database. */ public class OracleDialect extends BasicJdbcDialect { + /** */ + private static final long serialVersionUID = 0L; + /** {@inheritDoc} */ @Override public boolean hasMerge() { return true; http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/939afff9/modules/core/src/main/java/org/apache/ignite/cache/store/jdbc/dialect/SQLServerDialect.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/cache/store/jdbc/dialect/SQLServerDialect.java b/modules/core/src/main/java/org/apache/ignite/cache/store/jdbc/dialect/SQLServerDialect.java index e781e98..7fdda6b 100644 --- a/modules/core/src/main/java/org/apache/ignite/cache/store/jdbc/dialect/SQLServerDialect.java +++ b/modules/core/src/main/java/org/apache/ignite/cache/store/jdbc/dialect/SQLServerDialect.java @@ -25,6 +25,9 @@ import java.util.*; * A dialect compatible with the Microsoft SQL Server database. */ public class SQLServerDialect extends BasicJdbcDialect { + /** */ + private static final long serialVersionUID = 0L; + /** {@inheritDoc} */ @Override public boolean hasMerge() { return true; http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/939afff9/modules/core/src/test/config/store/jdbc/ignite-type-metadata.xml ---------------------------------------------------------------------- diff --git a/modules/core/src/test/config/store/jdbc/ignite-type-metadata.xml b/modules/core/src/test/config/store/jdbc/ignite-type-metadata.xml index 91d77cd..3e3d6e0 100644 --- a/modules/core/src/test/config/store/jdbc/ignite-type-metadata.xml +++ b/modules/core/src/test/config/store/jdbc/ignite-type-metadata.xml @@ -180,6 +180,14 @@ <property name="javaName" value="name"/> <property name="javaType" value="java.lang.String"/> </bean> + <bean class="org.apache.ignite.cache.CacheTypeFieldMetadata"> + <property name="databaseName" value="salary"/> + <property name="databaseType"> + <util:constant static-field="java.sql.Types.INTEGER"/> + </property> + <property name="javaName" value="salary"/> + <property name="javaType" value="java.lang.Integer"/> + </bean> </list> </property> </bean> http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/939afff9/modules/core/src/test/java/org/apache/ignite/cache/store/jdbc/CacheJdbcPojoStoreTest.java ---------------------------------------------------------------------- diff --git a/modules/core/src/test/java/org/apache/ignite/cache/store/jdbc/CacheJdbcPojoStoreTest.java b/modules/core/src/test/java/org/apache/ignite/cache/store/jdbc/CacheJdbcPojoStoreTest.java index 182d3bc..b1efb0d 100644 --- a/modules/core/src/test/java/org/apache/ignite/cache/store/jdbc/CacheJdbcPojoStoreTest.java +++ b/modules/core/src/test/java/org/apache/ignite/cache/store/jdbc/CacheJdbcPojoStoreTest.java @@ -188,7 +188,7 @@ public class CacheJdbcPojoStoreTest extends GridAbstractCacheStoreSelfTest<Cache stmt.executeUpdate("CREATE TABLE IF NOT EXISTS Timestamp_Entries (key timestamp not null, val integer, PRIMARY KEY(key))"); stmt.executeUpdate("CREATE TABLE IF NOT EXISTS Organization (id integer not null, name varchar(50), city varchar(50), PRIMARY KEY(id))"); stmt.executeUpdate("CREATE TABLE IF NOT EXISTS Person (id integer not null, org_id integer, name varchar(50), PRIMARY KEY(id))"); - stmt.executeUpdate("CREATE TABLE IF NOT EXISTS Person_Complex (id integer not null, org_id integer not null, city_id integer not null, name varchar(50), PRIMARY KEY(id))"); + stmt.executeUpdate("CREATE TABLE IF NOT EXISTS Person_Complex (id integer not null, org_id integer not null, city_id integer not null, name varchar(50), salary integer, PRIMARY KEY(id))"); conn.commit(); @@ -238,7 +238,7 @@ public class CacheJdbcPojoStoreTest extends GridAbstractCacheStoreSelfTest<Cache U.closeQuiet(prnStmt); - PreparedStatement prnComplexStmt = conn.prepareStatement("INSERT INTO Person_Complex(id, org_id, city_id, name) VALUES (?, ?, ?, ?)"); + PreparedStatement prnComplexStmt = conn.prepareStatement("INSERT INTO Person_Complex(id, org_id, city_id, name, salary) VALUES (?, ?, ?, ?, ?)"); for (int i = 0; i < PERSON_CNT; i++) { prnComplexStmt.setInt(1, i); @@ -246,6 +246,11 @@ public class CacheJdbcPojoStoreTest extends GridAbstractCacheStoreSelfTest<Cache prnComplexStmt.setInt(3, i % 100); prnComplexStmt.setString(4, "name" + i); + if (i > 0) + prnComplexStmt.setInt(5, 1000 + i * 500); + else // Add person with null salary + prnComplexStmt.setNull(5, java.sql.Types.INTEGER); + prnComplexStmt.addBatch(); } @@ -274,7 +279,7 @@ public class CacheJdbcPojoStoreTest extends GridAbstractCacheStoreSelfTest<Cache assert key.getId() == val.getId(); assert key.getOrgId() == val.getOrgId(); - assert ("name" + key.getId()).equals(val.getName()); + assertEquals("name" + key.getId(), val.getName()); prnComplexKeys.add((PersonComplexKey)k); } http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/939afff9/modules/core/src/test/java/org/apache/ignite/cache/store/jdbc/CacheJdbcStoreAbstractMultithreadedSelfTest.java ---------------------------------------------------------------------- diff --git a/modules/core/src/test/java/org/apache/ignite/cache/store/jdbc/CacheJdbcStoreAbstractMultithreadedSelfTest.java b/modules/core/src/test/java/org/apache/ignite/cache/store/jdbc/CacheJdbcStoreAbstractMultithreadedSelfTest.java index eac7669..9483545 100644 --- a/modules/core/src/test/java/org/apache/ignite/cache/store/jdbc/CacheJdbcStoreAbstractMultithreadedSelfTest.java +++ b/modules/core/src/test/java/org/apache/ignite/cache/store/jdbc/CacheJdbcStoreAbstractMultithreadedSelfTest.java @@ -190,7 +190,7 @@ public abstract class CacheJdbcStoreAbstractMultithreadedSelfTest<T extends Cach if (rnd.nextBoolean()) cache.put(new OrganizationKey(id), new Organization(id, "Name" + id, "City" + id)); else - cache.put(new PersonKey(id), new Person(id, rnd.nextInt(), "Name" + id)); + cache.put(new PersonKey(id), new Person(id, rnd.nextInt(), "Name" + id, 1)); } return null; @@ -209,7 +209,7 @@ public abstract class CacheJdbcStoreAbstractMultithreadedSelfTest<T extends Cach if (rnd.nextBoolean()) cache.putIfAbsent(new OrganizationKey(id), new Organization(id, "Name" + id, "City" + id)); else - cache.putIfAbsent(new PersonKey(id), new Person(id, rnd.nextInt(), "Name" + id)); + cache.putIfAbsent(new PersonKey(id), new Person(id, rnd.nextInt(), "Name" + id, i)); } return null; @@ -248,7 +248,7 @@ public abstract class CacheJdbcStoreAbstractMultithreadedSelfTest<T extends Cach if (rnd.nextBoolean()) map.put(new OrganizationKey(id), new Organization(id, "Name" + id, "City" + id)); else - map.put(new PersonKey(id), new Person(id, rnd.nextInt(), "Name" + id)); + map.put(new PersonKey(id), new Person(id, rnd.nextInt(), "Name" + id, 1)); } IgniteCache<Object, Object> cache = jcache(); @@ -273,17 +273,17 @@ public abstract class CacheJdbcStoreAbstractMultithreadedSelfTest<T extends Cach IgniteCache<PersonKey, Person> cache = jcache(); try (Transaction tx = grid().transactions().txStart()) { - cache.put(new PersonKey(1), new Person(1, rnd.nextInt(), "Name" + 1)); - cache.put(new PersonKey(2), new Person(2, rnd.nextInt(), "Name" + 2)); - cache.put(new PersonKey(3), new Person(3, rnd.nextInt(), "Name" + 3)); + cache.put(new PersonKey(1), new Person(1, rnd.nextInt(), "Name" + 1, 1)); + cache.put(new PersonKey(2), new Person(2, rnd.nextInt(), "Name" + 2, 2)); + cache.put(new PersonKey(3), new Person(3, rnd.nextInt(), "Name" + 3, 3)); cache.get(new PersonKey(1)); cache.get(new PersonKey(4)); Map<PersonKey, Person> map = U.newHashMap(2); - map.put(new PersonKey(5), new Person(5, rnd.nextInt(), "Name" + 5)); - map.put(new PersonKey(6), new Person(6, rnd.nextInt(), "Name" + 6)); + map.put(new PersonKey(5), new Person(5, rnd.nextInt(), "Name" + 5, 5)); + map.put(new PersonKey(6), new Person(6, rnd.nextInt(), "Name" + 6, 6)); cache.putAll(map); http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/939afff9/modules/core/src/test/java/org/apache/ignite/cache/store/jdbc/model/Person.java ---------------------------------------------------------------------- diff --git a/modules/core/src/test/java/org/apache/ignite/cache/store/jdbc/model/Person.java b/modules/core/src/test/java/org/apache/ignite/cache/store/jdbc/model/Person.java index 1c4b9a7..95c83b9 100644 --- a/modules/core/src/test/java/org/apache/ignite/cache/store/jdbc/model/Person.java +++ b/modules/core/src/test/java/org/apache/ignite/cache/store/jdbc/model/Person.java @@ -37,6 +37,9 @@ public class Person implements Serializable { /** Value for name. */ private String name; + /** Value for salary. */ + private Integer salary; + /** * Empty constructor. */ @@ -50,11 +53,13 @@ public class Person implements Serializable { public Person( Integer id, Integer orgId, - String name + String name, + Integer salary ) { this.id = id; this.orgId = orgId; this.name = name; + this.salary = salary; } /** @@ -111,6 +116,25 @@ public class Person implements Serializable { this.name = name; } + + /** + * Gets salary. + * + * @return Value for salary. + */ + public Integer getSalary() { + return salary; + } + + /** + * Sets salary. + * + * @param salary New value for salary. + */ + public void setSalary(Integer salary) { + this.salary = salary; + } + /** {@inheritDoc} */ @Override public boolean equals(Object o) { if (this == o) http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/939afff9/modules/schema-import/src/main/java/org/apache/ignite/schema/model/PojoDescriptor.java ---------------------------------------------------------------------- diff --git a/modules/schema-import/src/main/java/org/apache/ignite/schema/model/PojoDescriptor.java b/modules/schema-import/src/main/java/org/apache/ignite/schema/model/PojoDescriptor.java index 5e1da06..5a4a1fa 100644 --- a/modules/schema-import/src/main/java/org/apache/ignite/schema/model/PojoDescriptor.java +++ b/modules/schema-import/src/main/java/org/apache/ignite/schema/model/PojoDescriptor.java @@ -504,7 +504,11 @@ public class PojoDescriptor { case TIMESTAMP: return java.sql.Timestamp.class; - // BINARY, VARBINARY, LONGVARBINARY, ARRAY, BLOB, CLOB, NCLOB, NULL, DATALINK + case CLOB: + case NCLOB: + return String.class; + + // BINARY, VARBINARY, LONGVARBINARY, ARRAY, BLOB, NULL, DATALINK // OTHER, JAVA_OBJECT, DISTINCT, STRUCT, REF, ROWID, SQLXML default: return Object.class; http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/939afff9/modules/schema-import/src/main/java/org/apache/ignite/schema/parser/dialect/OracleMetadataDialect.java ---------------------------------------------------------------------- diff --git a/modules/schema-import/src/main/java/org/apache/ignite/schema/parser/dialect/OracleMetadataDialect.java b/modules/schema-import/src/main/java/org/apache/ignite/schema/parser/dialect/OracleMetadataDialect.java index 860ff68..30dda5d 100644 --- a/modules/schema-import/src/main/java/org/apache/ignite/schema/parser/dialect/OracleMetadataDialect.java +++ b/modules/schema-import/src/main/java/org/apache/ignite/schema/parser/dialect/OracleMetadataDialect.java @@ -87,73 +87,76 @@ public class OracleMetadataDialect extends DatabaseMetadataDialect { * @throws SQLException If failed to decode type. */ private int decodeType(ResultSet rs) throws SQLException { - switch (rs.getString(DATA_TYPE_IDX)) { - case "CHAR": - case "NCHAR": - return CHAR; + String type = rs.getString(DATA_TYPE_IDX); - case "VARCHAR2": - case "NVARCHAR2": - return VARCHAR; + if (type.startsWith("TIMESTAMP")) + return TIMESTAMP; + else { + switch (type) { + case "CHAR": + case "NCHAR": + return CHAR; - case "LONG": - return LONGVARCHAR; + case "VARCHAR2": + case "NVARCHAR2": + return VARCHAR; - case "LONG RAW": - return LONGVARBINARY; + case "LONG": + return LONGVARCHAR; - case "FLOAT": - return FLOAT; + case "LONG RAW": + return LONGVARBINARY; - case "NUMBER": - int precision = rs.getInt(DATA_PRECISION_IDX); - int scale = rs.getInt(DATA_SCALE_IDX); + case "FLOAT": + return FLOAT; - if (scale > 0) { - if (scale < 4 && precision < 19) - return FLOAT; + case "NUMBER": + int precision = rs.getInt(DATA_PRECISION_IDX); + int scale = rs.getInt(DATA_SCALE_IDX); - if (scale > 4 || precision > 19) - return DOUBLE; + if (scale > 0) { + if (scale < 4 && precision < 19) + return FLOAT; - return NUMERIC; - } - else { - if (precision < 1) - return INTEGER; + if (scale > 4 || precision > 19) + return DOUBLE; - if (precision < 2) - return BOOLEAN; + return NUMERIC; + } + else { + if (precision < 1) + return INTEGER; - if (precision < 4) - return TINYINT; + if (precision < 2) + return BOOLEAN; - if (precision < 6) - return SMALLINT; + if (precision < 4) + return TINYINT; - if (precision < 11) - return INTEGER; + if (precision < 6) + return SMALLINT; - if (precision < 20) - return BIGINT; + if (precision < 11) + return INTEGER; - return NUMERIC; - } + if (precision < 20) + return BIGINT; - case "DATE": - return DATE; + return NUMERIC; + } - case "TIMESTAMP": - return TIMESTAMP; + case "DATE": + return DATE; - case "BFILE": - case "BLOB": - return BLOB; + case "BFILE": + case "BLOB": + return BLOB; - case "CLOB": - case "NCLOB": - case "XMLTYPE": - return CLOB; + case "CLOB": + case "NCLOB": + case "XMLTYPE": + return CLOB; + } } return OTHER; http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/939afff9/modules/schema-import/src/main/java/org/apache/ignite/schema/ui/SchemaImportApp.java ---------------------------------------------------------------------- diff --git a/modules/schema-import/src/main/java/org/apache/ignite/schema/ui/SchemaImportApp.java b/modules/schema-import/src/main/java/org/apache/ignite/schema/ui/SchemaImportApp.java index 00d1bc8..7b9c220 100644 --- a/modules/schema-import/src/main/java/org/apache/ignite/schema/ui/SchemaImportApp.java +++ b/modules/schema-import/src/main/java/org/apache/ignite/schema/ui/SchemaImportApp.java @@ -109,7 +109,7 @@ public class SchemaImportApp extends Application { "jdbc:mysql://[host]:[port]/[database]", "root"), new Preset("mssql", "Microsoft SQL Server", "sqljdbc41.jar", "com.microsoft.sqlserver.jdbc.SQLServerDriver", "jdbc:sqlserver://[host]:[port][;databaseName=database]", "sa"), - new Preset("posgresql", "PostgreSQL", "postgresql-9.3.jdbc4.jar", "org.postgresql.Driver", + new Preset("postgresql", "PostgreSQL", "postgresql-9.3.jdbc4.jar", "org.postgresql.Driver", "jdbc:postgresql://[host]:[port]/[database]", "sa"), new Preset("custom", "Custom server...", "custom-jdbc.jar", "org.custom.Driver", "jdbc:custom", "sa") }; @@ -444,6 +444,11 @@ public class SchemaImportApp extends Application { final boolean singleXml = xmlSingleFileCh.isSelected(); Runnable task = new Task<Void>() { + /** + * @param pojo POJO descriptor to check. + * @param selected Selected flag. + * @param msg Message to show in case of check failed. + */ private void checkEmpty(final PojoDescriptor pojo, boolean selected, String msg) { if (!selected) { Platform.runLater(new Runnable() { @@ -694,6 +699,8 @@ public class SchemaImportApp extends Application { /** * Create connection pane with controls. + * + * @return Pane with connection controls. */ private Pane createConnectionPane() { connPnl = paneEx(10, 10, 0, 10); @@ -1110,10 +1117,10 @@ public class SchemaImportApp extends Application { if (curPojo != null) { TableView.TableViewSelectionModel<PojoDescriptor> selMdl = pojosTbl.getSelectionModel(); - List<Integer> idxs = new ArrayList<>(selMdl.getSelectedIndices()); + List<Integer> selIndices = new ArrayList<>(selMdl.getSelectedIndices()); - if (idxs.size() > 1) { - for (Integer idx : idxs) { + if (selIndices.size() > 1) { + for (Integer idx : selIndices) { if (pojos.get(idx) != curPojo) selMdl.clearSelection(idx); } @@ -1242,6 +1249,7 @@ public class SchemaImportApp extends Application { * * @param key Property key. * @param dflt Default value. + * @return Property value as string. */ private String getStringProp(String key, String dflt) { String val = prefs.getProperty(key); @@ -1267,6 +1275,7 @@ public class SchemaImportApp extends Application { * * @param key Property key. * @param dflt Default value. + * @return Property value as int. */ private int getIntProp(String key, int dflt) { String val = prefs.getProperty(key); @@ -1297,6 +1306,7 @@ public class SchemaImportApp extends Application { * * @param key Property key. * @param dflt Default value. + * @return Property value as boolean. */ private boolean getBoolProp(String key, boolean dflt) { String val = prefs.getProperty(key); @@ -1563,7 +1573,11 @@ public class SchemaImportApp extends Application { /** Combo box. */ private final ComboBox<String> comboBox; - /** Creates a ComboBox cell factory for use in TableColumn controls. */ + /** + * Creates a ComboBox cell factory for use in TableColumn controls. + * + * @return Cell factory for cell with java types combobox. + */ public static Callback<TableColumn<PojoField, String>, TableCell<PojoField, String>> cellFactory() { return new Callback<TableColumn<PojoField, String>, TableCell<PojoField, String>>() { @Override public TableCell<PojoField, String> call(TableColumn<PojoField, String> col) { @@ -1637,7 +1651,11 @@ public class SchemaImportApp extends Application { * Special table cell to select schema or table. */ private static class PojoDescriptorCell extends TableCell<PojoDescriptor, Boolean> { - /** Creates a ComboBox cell factory for use in TableColumn controls. */ + /** + * Creates a ComboBox cell factory for use in TableColumn controls. + * + * @return Cell factory for schema / table selection. + */ public static Callback<TableColumn<PojoDescriptor, Boolean>, TableCell<PojoDescriptor, Boolean>> cellFactory() { return new Callback<TableColumn<PojoDescriptor, Boolean>, TableCell<PojoDescriptor, Boolean>>() { @Override public TableCell<PojoDescriptor, Boolean> call(TableColumn<PojoDescriptor, Boolean> col) { @@ -1694,7 +1712,11 @@ public class SchemaImportApp extends Application { * Special table cell to select "used" fields for code generation. */ private static class PojoFieldUseCell extends TableCell<PojoField, Boolean> { - /** Creates a ComboBox cell factory for use in TableColumn controls. */ + /** + * Creates a ComboBox cell factory for use in TableColumn controls. + * + * @return Cell factory for used fields selection. + */ public static Callback<TableColumn<PojoField, Boolean>, TableCell<PojoField, Boolean>> cellFactory() { return new Callback<TableColumn<PojoField, Boolean>, TableCell<PojoField, Boolean>>() { @Override public TableCell<PojoField, Boolean> call(TableColumn<PojoField, Boolean> col) { http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/939afff9/modules/spring/src/test/java/org/apache/ignite/cache/store/jdbc/CacheJdbcPojoStoreFactorySelfTest.java ---------------------------------------------------------------------- diff --git a/modules/spring/src/test/java/org/apache/ignite/cache/store/jdbc/CacheJdbcPojoStoreFactorySelfTest.java b/modules/spring/src/test/java/org/apache/ignite/cache/store/jdbc/CacheJdbcPojoStoreFactorySelfTest.java index c456339..faaf28f 100644 --- a/modules/spring/src/test/java/org/apache/ignite/cache/store/jdbc/CacheJdbcPojoStoreFactorySelfTest.java +++ b/modules/spring/src/test/java/org/apache/ignite/cache/store/jdbc/CacheJdbcPojoStoreFactorySelfTest.java @@ -57,17 +57,14 @@ public class CacheJdbcPojoStoreFactorySelfTest extends GridCommonAbstractTest { * @throws Exception If failed. */ public void testSerializable() throws Exception { - GridTestUtils.assertThrows(log, new Callable<Object>() { - @Override public Object call() throws Exception { - try (Ignite ignite = Ignition.start("modules/spring/src/test/config/node.xml")) { - try (IgniteCache<Integer, String> cache = ignite.getOrCreateCache(cacheConfigurationH2Dialect())) { - checkStore(cache, JdbcDataSource.class); - } - } - - return null; + try (Ignite ignite = Ignition.start("modules/spring/src/test/config/node.xml")) { + try (IgniteCache<Integer, String> cache = ignite.getOrCreateCache(cacheConfigurationH2Dialect())) { + checkStore(cache, JdbcDataSource.class); } - }, CacheException.class, "Failed to validate cache configuration. Cache store factory is not serializable."); + } + catch (Exception e) { + fail("Failed to validate cache configuration. Cache store factory is not serializable."); + } } /**