/** * Construct binary object from query result. * * @param typeName Type name. * @param fields Fields descriptors. * @param loadColIdxs Select query columns index. * @param rs ResultSet. * @return Constructed binary object. * @throws CacheLoaderException If failed to construct binary object. */ protected Object buildBinaryObject(String typeName, JdbcTypeField[] fields, Map<String, Integer> loadColIdxs, ResultSet rs) throws CacheLoaderException { try { BinaryObjectBuilder builder = ignite.binary().builder(typeName); for (JdbcTypeField field : fields) { Integer colIdx = columnIndex(loadColIdxs, field.getDatabaseFieldName()); Object colVal = transformer.getColumnValue(rs, colIdx, field.getJavaFieldType()); builder.setField(field.getJavaFieldName(), colVal, (Class<Object>)field.getJavaFieldType()); } return builder.build(); } catch (SQLException e) { throw new CacheException("Failed to read binary object: " + typeName, e); } }
try { if (fieldVal != null) { if (field.getJavaFieldType() == UUID.class) { switch (field.getDatabaseFieldType()) { case Types.BINARY: fieldVal = U.uuidToBytes((UUID)fieldVal); else if (field.getJavaFieldType().isEnum()) { if (fieldVal instanceof Enum) { Enum val = (Enum)fieldVal; fieldVal = NUMERIC_TYPES.contains(field.getDatabaseFieldType()) ? val.ordinal() : val.name(); stmt.setNull(idx, field.getDatabaseFieldType()); throw new CacheException("Failed to set statement parameter name: " + field.getDatabaseFieldName(), e);
if (field.getDatabaseFieldName() == null) throw new CacheException("Missing database name in mapping description [cache=" + U.maskName(cacheName) + ", type=" + typeName + " ]"); field.setJavaFieldType(Class.forName(typeName)); if (field.getDatabaseFieldName() == null) throw new CacheException("Missing database name in mapping description " + "[cache=" + U.maskName(cacheName) + ", type=" + typeName + " ]"); if (field.getJavaFieldName() == null) throw new CacheException("Missing field name in mapping description " + "[cache=" + U.maskName(cacheName) + ", type=" + typeName + " ]"); if (field.getJavaFieldType() == null) throw new CacheException("Missing field type in mapping description " + "[cache=" + U.maskName(cacheName) + ", type=" + typeName + " ]");
/** * Copy constructor. * * @param field Field to copy. */ public JdbcTypeField(JdbcTypeField field) { this(field.getDatabaseFieldType(), field.getDatabaseFieldName(), field.getJavaFieldType(), field.getJavaFieldName()); }
/** * Construct Java built in object from query result. * * @param typeName Type name. * @param fields Fields descriptors. * @param loadColIdxs Select query columns indexes. * @param rs ResultSet to take data from. * @return Constructed object. * @throws CacheLoaderException If failed to construct POJO. */ private Object buildBuiltinObject(String typeName, JdbcTypeField[] fields, Map<String, Integer> loadColIdxs, ResultSet rs) throws CacheLoaderException { JdbcTypeField field = fields[0]; try { Integer colIdx = columnIndex(loadColIdxs, field.getDatabaseFieldName()); return transformer.getColumnValue(rs, colIdx, field.getJavaFieldType()); } catch (SQLException e) { throw new CacheLoaderException("Failed to read object: [cls=" + typeName + ", prop=" + field + "]", e); } }
/** */ public JdbcType getJdbcType() { JdbcType type = new JdbcType(); type.setCacheName("TEST_CACHE"); type.setKeyType(Integer.class); type.setValueType(TestPojo.class); type.setDatabaseSchema("PUBLIC"); type.setDatabaseTable("TEST_CACHE"); type.setKeyFields(new JdbcTypeField(java.sql.Types.INTEGER, "VALUE2", Integer.class, "value2")); type.setValueFields( new JdbcTypeField(java.sql.Types.VARCHAR, "VALUE1", String.class, "value1"), new JdbcTypeField(java.sql.Types.DATE, "VALUE3", java.sql.Date.class, "value3") ); return type; }
String fldName = jdbcFld.getJavaFieldName(); String mthName = capitalFirst(fldName); getter = methodByName(cls, fldName); Method setter = methodByName(cls, "set" + mthName, jdbcFld.getJavaFieldType()); setter = methodByName(cls, fldName, jdbcFld.getJavaFieldType());
/** {@inheritDoc} */ @Override public String apply(JdbcTypeField col) { return col.getDatabaseFieldName(); } });
/** * @param stmt Prepare statement. * @param idx Start index for parameters. * @param em Type mapping description. * @param val Value object. * @return Next index for parameters. * @throws CacheException If failed to set statement parameters. */ protected int fillValueParameters(PreparedStatement stmt, int idx, EntryMapping em, Object val) throws CacheWriterException { for (JdbcTypeField field : em.uniqValFlds) { Object fieldVal = extractParameter( em.cacheName, em.valueType(), em.valueKind(), field.getJavaFieldName(), val ); fillParameter(stmt, idx++, field, fieldVal); } return idx; }
/** * Copy constructor. * * @param field Field to copy. */ public JdbcTypeField(JdbcTypeField field) { this(field.getDatabaseFieldType(), field.getDatabaseFieldName(), field.getJavaFieldType(), field.getJavaFieldName()); }
storeTypes[0].setKeyFields(new JdbcTypeField(Types.INTEGER, "ID", Integer.class, "id")); storeTypes[0].setKeyFields(new JdbcTypeField(Types.INTEGER, "ID", Integer.class, "id")); new JdbcTypeField(Types.INTEGER, escape ? "ID" : "Id", Integer.class, "id"), new JdbcTypeField(Types.VARCHAR, escape ? "NAME" : "Name", String.class, "name"), new JdbcTypeField(Types.VARCHAR, escape ? "CITY" : "City", String.class, "city")); storeTypes[1].setKeyFields(new JdbcTypeField(Types.INTEGER, "ID", Long.class, "id")); storeTypes[1].setKeyFields(new JdbcTypeField(Types.INTEGER, "ID", Integer.class, "id")); new JdbcTypeField(Types.INTEGER, "ID", Integer.class, "id"), new JdbcTypeField(Types.INTEGER, "ORG_ID", Integer.class, "orgId"), new JdbcTypeField(Types.DATE, "BIRTHDAY", Date.class, "birthday"), new JdbcTypeField(Types.VARCHAR, "NAME", String.class, "name"), new JdbcTypeField(Types.VARCHAR, "GENDER", Gender.class, "gender"));
/** * Construct Java built in object from query result. * * @param typeName Type name. * @param fields Fields descriptors. * @param loadColIdxs Select query columns indexes. * @param rs ResultSet to take data from. * @return Constructed object. * @throws CacheLoaderException If failed to construct POJO. */ private Object buildBuiltinObject(String typeName, JdbcTypeField[] fields, Map<String, Integer> loadColIdxs, ResultSet rs) throws CacheLoaderException { JdbcTypeField field = fields[0]; try { Integer colIdx = columnIndex(loadColIdxs, field.getDatabaseFieldName()); return transformer.getColumnValue(rs, colIdx, field.getJavaFieldType()); } catch (SQLException e) { throw new CacheLoaderException("Failed to read object: [cls=" + typeName + ", prop=" + field + "]", e); } }
String fldName = jdbcFld.getJavaFieldName(); String mthName = capitalFirst(fldName); getter = methodByName(cls, fldName); Method setter = methodByName(cls, "set" + mthName, jdbcFld.getJavaFieldType()); setter = methodByName(cls, fldName, jdbcFld.getJavaFieldType());
@Override public boolean apply(JdbcTypeField col) { return !keyCols.contains(col.getDatabaseFieldName()); } });
/** * @param stmt Prepare statement. * @param idx Start index for parameters. * @param em Entry mapping. * @param key Key object. * @return Next index for parameters. * @throws CacheException If failed to set statement parameters. */ protected int fillKeyParameters(PreparedStatement stmt, int idx, EntryMapping em, Object key) throws CacheException { for (JdbcTypeField field : em.keyColumns()) { Object fieldVal = extractParameter(em.cacheName, em.keyType(), em.keyKind(), field.getJavaFieldName(), key); fillParameter(stmt, idx++, field, fieldVal); } return idx; }
String fldJavaName = fld.getJavaFieldName(); ", prop=" + fldJavaName + "]"); String dbName = fld.getDatabaseFieldName(); Object colVal = transformer.getColumnValue(rs, colIdx, fld.getJavaFieldType());
/** * Create data transfer object for given cache type metadata. * * @param jdbcType JDBC type. */ public VisorCacheJdbcType(JdbcType jdbcType) { keyType = jdbcType.getKeyType(); valType = jdbcType.getValueType(); dbSchema = jdbcType.getDatabaseSchema(); dbTbl = jdbcType.getDatabaseTable(); JdbcTypeField[] kFields = jdbcType.getKeyFields(); if (kFields != null) { keyFields = new ArrayList<>(kFields.length); for (JdbcTypeField fld : kFields) keyFields.add(new VisorCacheJdbcTypeField( fld.getDatabaseFieldName(), fld.getDatabaseFieldType(), fld.getDatabaseFieldName(), U.compact(fld.getJavaFieldType().getName()))); } JdbcTypeField[] vFields = jdbcType.getValueFields(); if (vFields != null) { valFields = new ArrayList<>(vFields.length); for (JdbcTypeField fld : vFields) valFields.add(new VisorCacheJdbcTypeField( fld.getDatabaseFieldName(), fld.getDatabaseFieldType(), fld.getDatabaseFieldName(), U.compact(fld.getJavaFieldType().getName()))); } }
if (field.getDatabaseFieldName() == null) throw new CacheException("Missing database name in mapping description [cache=" + U.maskName(cacheName) + ", type=" + typeName + " ]"); field.setJavaFieldType(Class.forName(typeName)); if (field.getDatabaseFieldName() == null) throw new CacheException("Missing database name in mapping description " + "[cache=" + U.maskName(cacheName) + ", type=" + typeName + " ]"); if (field.getJavaFieldName() == null) throw new CacheException("Missing field name in mapping description " + "[cache=" + U.maskName(cacheName) + ", type=" + typeName + " ]"); if (field.getJavaFieldType() == null) throw new CacheException("Missing field type in mapping description " + "[cache=" + U.maskName(cacheName) + ", type=" + typeName + " ]");
storeTypes[0].setDatabaseTable("ORGANIZATION"); storeTypes[0].setKeyType("org.apache.ignite.cache.store.jdbc.model.OrganizationKey"); storeTypes[0].setKeyFields(new JdbcTypeField(Types.INTEGER, "ID", Integer.class, "id")); new JdbcTypeField(Types.INTEGER, "ID", Integer.class, "id"), new JdbcTypeField(Types.VARCHAR, "NAME", String.class, "name"), new JdbcTypeField(Types.VARCHAR, "CITY", String.class, "city")); storeTypes[1].setDatabaseTable("PERSON"); storeTypes[1].setKeyType("org.apache.ignite.cache.store.jdbc.model.PersonKey"); storeTypes[1].setKeyFields(new JdbcTypeField(Types.INTEGER, "ID", Integer.class, "id")); new JdbcTypeField(Types.INTEGER, "ID", Integer.class, "id"), new JdbcTypeField(Types.INTEGER, "ORG_ID", Integer.class, "orgId"), new JdbcTypeField(Types.VARCHAR, "NAME", String.class, "name")); storeTypes[2].setKeyType("org.apache.ignite.cache.store.jdbc.model.PersonComplexKey"); storeTypes[2].setKeyFields( new JdbcTypeField(Types.INTEGER, "ID", int.class, "id"), new JdbcTypeField(Types.INTEGER, "ORG_ID", int.class, "orgId"), new JdbcTypeField(Types.INTEGER, "CITY_ID", int.class, "cityId")); new JdbcTypeField(Types.INTEGER, "ID", Integer.class, "id"), new JdbcTypeField(Types.INTEGER, "ORG_ID", Integer.class, "orgId"), new JdbcTypeField(Types.VARCHAR, "NAME", String.class, "name"), new JdbcTypeField(Types.INTEGER, "SALARY", Integer.class, "salary")); storeTypes[3].setDatabaseTable("TIMESTAMP_ENTRIES"); storeTypes[3].setKeyType("java.sql.Timestamp");
/** {@inheritDoc} */ @Override public String apply(JdbcTypeField col) { return col.getDatabaseFieldName(); } });