@Override public JdbcColumnKey newKey(String name, int i) { return new JdbcColumnKey(name, i); } };
@SuppressWarnings("unchecked") @Override public <P> Getter<ResultSet, P> newGetter(Type genericType, JdbcColumnKey key, Object... properties) { if (key.getSqlType(properties) == Types.TIME_WITH_TIMEZONE) { return (Getter<ResultSet, P>) new ObjectResultSetGetter(key.getIndex()); } return null; } });
protected int compare(JdbcColumnKey k1, JdbcColumnKey k2) { int d = k1.getIndex() - k2.getIndex(); if (d != 0) return d; d = k1.getName().compareTo(k2.getName()); if (d != 0) return d; return k1.getSqlType(null) - k2.getSqlType(null); } }
public String getOrginalName() { return parent != null ? parent.getOrginalName() : getName(); } }
@Override public Object getValue(JdbcColumnKey key, ResultSet source) throws SQLException { return source.getObject(key.getIndex()); } }
@Override protected JdbcColumnKey newKey(String column, int i, FieldMapperColumnDefinition<JdbcColumnKey> columnDefinition) { JdbcColumnKey key = new JdbcColumnKey(column, i); SqlTypeColumnProperty typeColumnProperty = columnDefinition.lookFor(SqlTypeColumnProperty.class); if (typeColumnProperty == null) { ColumnDefinition<JdbcColumnKey, ?> globalDef = mapperConfig.columnDefinitions().getColumnDefinition(key); typeColumnProperty = globalDef.lookFor(SqlTypeColumnProperty.class); } if (typeColumnProperty != null) { return new JdbcColumnKey(key.getName(), key.getIndex(), typeColumnProperty.getSqlType(), key); } return key; }
return (Getter<ResultSet, P>) new ObjectResultSetGetter(key.getIndex()); if (key.getColumnClass() != null && clazz.getName().equals(key.getColumnClass())) { return (Getter<ResultSet, P>) new ObjectResultSetGetter(key.getIndex()); if (SQLData.class.isAssignableFrom(clazz) || key.getSqlType(properties) == Types.JAVA_OBJECT) { return (Getter<ResultSet, P>) new ObjectResultSetGetter(key.getIndex());
@Test public void testAlias() throws Exception { assertNotNull(new JdbcColumnKey("col", 1, Types.ARRAY).alias("h").getParent()); }
@SuppressWarnings("unchecked") @Override public <P> PreparedStatementIndexSetter<P> getIndexedSetter(JdbcColumnKey key, ContextFactoryBuilder contextFactoryBuilder, Object... properties) { if (key.getSqlType(properties) == Types.TIMESTAMP_WITH_TIMEZONE) { return (PreparedStatementIndexSetter<P>) new ObjectPreparedStatementIndexSetter(); } return null; } });
@Test public void testHashCode() throws Exception { assertEquals(new JdbcColumnKey("col", 1, Types.ARRAY).hashCode(), new JdbcColumnKey("col", 1, Types.ARRAY).hashCode()); assertNotEquals(new JdbcColumnKey("col", 1, Types.ARRAY).hashCode(), new JdbcColumnKey("col", 1, Types.VARCHAR).hashCode()); assertNotEquals(new JdbcColumnKey("col", 1, Types.ARRAY).hashCode(), new JdbcColumnKey("col", 2, Types.ARRAY).hashCode()); assertNotEquals(new JdbcColumnKey("col", 1, Types.ARRAY).hashCode(), new JdbcColumnKey("col1", 1, Types.ARRAY).hashCode()); }
@Test public void testToString() throws Exception { assertEquals("ColumnKey [columnName=col, columnIndex=1, sqlType=2003]", new JdbcColumnKey("col", 1, Types.ARRAY).toString()); } }
private <P> PlaceHolderValueGetter<T> build(JdbcColumnKey key, PropertyMapping<T, P, JdbcColumnKey> pm) { if (pm != null) { int parameterType = getParameterType(pm); ContextualGetter<T, ? extends P> getter = ContextualGetterAdapter.of(pm.getPropertyMeta().getGetter()); // need conversion ? final DefaultContextFactoryBuilder contextFactoryBuilder = new DefaultContextFactoryBuilder(); Type propertyType = pm.getPropertyMeta().getPropertyType(); Class<?> sqlType = JdbcTypeHelper.toJavaType(parameterType, propertyType); if (!TypeHelper.isAssignable(sqlType, propertyType)) { ContextualConverter<? super Object, ?> converter = ConverterService.getInstance().findConverter(propertyType, sqlType, contextFactoryBuilder); if (converter != null) { getter = new FieldMapperGetterWithConverter(converter, getter); } } return new PlaceHolderValueGetter<T>(pm.getColumnKey().getOrginalName(), parameterType, null, getter, contextFactoryBuilder.build()); } else { return new PlaceHolderValueGetter<T>(key.getOrginalName(), key.getSqlType(null), null, NullContextualGetter.<T, P>getter(), EmptyContextFactory.INSTANCE); } }
private static List<String> getPrimaryKeys(Connection connection, ResultSetMetaData resultSetMetaData, ColumnDefinitionProvider<JdbcColumnKey> columnDefinitionProvider) throws SQLException { List<String> primaryKeys = new ArrayList<String>(); for(int i = 1; i <= resultSetMetaData.getColumnCount(); i++) { JdbcColumnKey key = JdbcColumnKey.of(resultSetMetaData, i); if (columnDefinitionProvider.getColumnDefinition(key).has(KeyProperty.class)) { primaryKeys.add(key.getName()); } } if (!primaryKeys.isEmpty()) { return primaryKeys; } String catalogName = resultSetMetaData.getCatalogName(1); String schemaName = resultSetMetaData.getSchemaName(1); String tableName = resultSetMetaData.getTableName(1); try { ResultSet set = connection.getMetaData().getPrimaryKeys(catalogName, schemaName, tableName); try { while (set.next()) { primaryKeys.add(set.getString("COLUMN_NAME")); } } finally { set.close(); } } catch (SQLSyntaxErrorException e) { // ignore likely mysql view issues } return primaryKeys; }
public SqlParameterSourceBuilder<T> add(JdbcColumnKey key, FieldMapperColumnDefinition<JdbcColumnKey> columnDefinition) { final FieldMapperColumnDefinition<JdbcColumnKey> composedDefinition = columnDefinition.compose(mapperConfig.columnDefinitions().getColumnDefinition(key)); final JdbcColumnKey mappedColumnKey = composedDefinition.rename(key); PropertyMapping<T, Object, JdbcColumnKey> propertyMapping; if (composedDefinition.has(ConstantValueProperty.class)) { ConstantValueProperty staticValueProperty = composedDefinition.lookFor(ConstantValueProperty.class); PropertyMeta<T, Object> meta = new ObjectPropertyMeta<T, Object>(key.getName(), builder.getClassMeta().getType(), reflectionService, staticValueProperty.getType(), ScoredGetter.of(new ConstantGetter<T, Object>(staticValueProperty.getValue()), 1), null, null); propertyMapping = builder.addProperty(key, columnDefinition, meta); } else { propertyMapping = builder.addProperty(mappedColumnKey, composedDefinition); } parameters.add(build(key, propertyMapping)); return this; }
@SuppressWarnings("unchecked") @Override public <P> Getter<ResultSet, P> newGetter(Type genericType, JdbcColumnKey key, Object... properties) { return (Getter<ResultSet, P>) new TimestampResultSetGetter(key.getIndex()); } });
@Override protected JdbcColumnKey newKey(String column, int i, FieldMapperColumnDefinition<JdbcColumnKey> columnDefinition) { JdbcColumnKey key = new JdbcColumnKey(column, i); SqlTypeColumnProperty typeColumnProperty = columnDefinition.lookFor(SqlTypeColumnProperty.class); if (typeColumnProperty == null) { ColumnDefinition<JdbcColumnKey, ?> globalDef = mapperConfig.columnDefinitions().getColumnDefinition(key); typeColumnProperty = globalDef.lookFor(SqlTypeColumnProperty.class); } if (typeColumnProperty != null) { return new JdbcColumnKey(key.getName(), key.getIndex(), typeColumnProperty.getSqlType(), key); } return key; }
return (Getter<ResultSet, P>) new ObjectResultSetGetter(key.getIndex()); if (key.getColumnClass() != null && clazz.getName().equals(key.getColumnClass())) { return (Getter<ResultSet, P>) new ObjectResultSetGetter(key.getIndex()); if (SQLData.class.isAssignableFrom(clazz) || key.getSqlType(properties) == Types.JAVA_OBJECT) { return (Getter<ResultSet, P>) new ObjectResultSetGetter(key.getIndex());
@SuppressWarnings("unchecked") @Override public <P> PreparedStatementIndexSetter<P> getIndexedSetter(JdbcColumnKey key, ContextFactoryBuilder contextFactoryBuilder, Object... properties) { if (key.getSqlType(properties) == Types.TIMESTAMP_WITH_TIMEZONE) { return (PreparedStatementIndexSetter<P>) new ObjectPreparedStatementIndexSetter(); } return null; } });
public String getOrginalName() { return parent != null ? parent.getOrginalName() : getName(); } }
private static List<String> getPrimaryKeys(Connection connection, ResultSetMetaData resultSetMetaData, ColumnDefinitionProvider<JdbcColumnKey> columnDefinitionProvider) throws SQLException { List<String> primaryKeys = new ArrayList<String>(); for(int i = 1; i <= resultSetMetaData.getColumnCount(); i++) { JdbcColumnKey key = JdbcColumnKey.of(resultSetMetaData, i); if (columnDefinitionProvider.getColumnDefinition(key).has(KeyProperty.class)) { primaryKeys.add(key.getName()); } } if (!primaryKeys.isEmpty()) { return primaryKeys; } String catalogName = resultSetMetaData.getCatalogName(1); String schemaName = resultSetMetaData.getSchemaName(1); String tableName = resultSetMetaData.getTableName(1); try { ResultSet set = connection.getMetaData().getPrimaryKeys(catalogName, schemaName, tableName); try { while (set.next()) { primaryKeys.add(set.getString("COLUMN_NAME")); } } finally { set.close(); } } catch (SQLSyntaxErrorException e) { // ignore likely mysql view issues } return primaryKeys; }