@Override public String getKeyColumn() { String column = getColumn(KEY_COLUMN_TUPLE_INDEX); if (column == null) { // fallback to global map key config return this.registry.get(MapEntryMappers.class).getKeyColumn(); } return column; }
@Override public String getValueColumn() { String column = getColumn(VALUE_COLUMN_TUPLE_INDEX); if (column == null) { // fallback to global map value config return this.registry.get(MapEntryMappers.class).getValueColumn(); } return column; }
/** * Convenience method for {@code getConfig(MapEntryMappers.class).setKeyColumn(keyColumn)} * * @param keyColumn the key column name * @return this */ default This setMapKeyColumn(String keyColumn) { return configure(MapEntryMappers.class, c -> c.setKeyColumn(keyColumn)); }
@Test public void testSingleInstanceAssignmentWithSelectedKeyValueShouldSucceed() { Handle handle = dbRule.getSharedHandle().configure(MapEntryMappers.class, c -> c.setKeyColumn("key_c").setValueColumn("val_c")); Optional<Tuple2<String, String>> valueMap = handle.createQuery("select val_c, key_c from keyval") .mapTo(new GenericType<Tuple2<String, String>>() {}) .findFirst(); assertThat(valueMap).isNotEmpty(); assertThat(valueMap.get()).isEqualTo(Tuple.of(KEY_PREFIX + 0, VAL_PREFIX + 1)); }
/** * Convenience method for {@code getConfig(MapEntryMappers.class).setValueColumn(valueColumn)} * * @param valueColumn the value column name * @return this */ default This setMapValueColumn(String valueColumn) { return configure(MapEntryMappers.class, c -> c.setValueColumn(valueColumn)); }
@Override public MapEntryMappers createCopy() { return new MapEntryMappers(this); } }
@Override public void configureForMethod(ConfigRegistry registry, Annotation annotation, Class<?> sqlObjectType, Method method) { ValueColumn valueColumn = (ValueColumn) annotation; String name = valueColumn.value(); registry.get(MapEntryMappers.class).setValueColumn(name.isEmpty() ? null : name); } }
@Override public MapEntryMappers createCopy() { return new MapEntryMappers(this); } }
private static RowMapper<?> getKeyMapper(Type keyType, ConfigRegistry config) { String column = config.get(MapEntryMappers.class).getKeyColumn(); if (column == null) { return config.get(RowMappers.class) .findFor(keyType) .orElseThrow(() -> new NoSuchMapperException("No row mapper registered for map key " + keyType)); } else { return config.get(ColumnMappers.class) .findFor(keyType) .map(mapper -> new SingleColumnMapper<>(mapper, column)) .orElseThrow(() -> new NoSuchMapperException("No column mapper registered for map key " + keyType + " in column " + column)); } }
private static RowMapper<?> getValueMapper(Type valueType, ConfigRegistry config) { String column = config.get(MapEntryMappers.class).getValueColumn(); if (column == null) { return config.get(RowMappers.class) .findFor(valueType) .orElseThrow(() -> new NoSuchMapperException("No row mapper registered for map value " + valueType)); } else { return config.get(ColumnMappers.class) .findFor(valueType) .map(mapper -> new SingleColumnMapper<>(mapper, column)) .orElseThrow(() -> new NoSuchMapperException("No column mapper registered for map value " + valueType + " in column " + column)); } }
@Override public void configureForMethod(ConfigRegistry registry, Annotation annotation, Class<?> sqlObjectType, Method method) { KeyColumn keyColumn = (KeyColumn) annotation; String name = keyColumn.value(); registry.get(MapEntryMappers.class).setKeyColumn(name.isEmpty() ? null : name); } }
private static RowMapper<?> getKeyMapper(Type keyType, ConfigRegistry config) { String column = config.get(MapEntryMappers.class).getKeyColumn(); if (column == null) { return config.get(RowMappers.class) .findFor(keyType) .orElseThrow(() -> new NoSuchMapperException("No row mapper registered for map key " + keyType)); } else { return config.get(ColumnMappers.class) .findFor(keyType) .map(mapper -> new SingleColumnMapper<>(mapper, column)) .orElseThrow(() -> new NoSuchMapperException("No column mapper registered for map key " + keyType + " in column " + column)); } }
private static RowMapper<?> getValueMapper(Type valueType, ConfigRegistry config) { String column = config.get(MapEntryMappers.class).getValueColumn(); if (column == null) { return config.get(RowMappers.class) .findFor(valueType) .orElseThrow(() -> new NoSuchMapperException("No row mapper registered for map value " + valueType)); } else { return config.get(ColumnMappers.class) .findFor(valueType) .map(mapper -> new SingleColumnMapper<>(mapper, column)) .orElseThrow(() -> new NoSuchMapperException("No column mapper registered for map value " + valueType + " in column " + column)); } }