RowMapper<?> mapperForType(Type type) { return getConfig(Mappers.class).findFor(type) .orElseThrow(() -> new UnsupportedOperationException("No mapper registered for " + type)); }
private static ParameterCustomizerFactory getDefaultParameterCustomizerFactory(SqlStatement<?> stmt) { return stmt.getConfig(SqlObjects.class).getDefaultParameterCustomizerFactory(); }
private Argument toArgument(QualifiedType<?> type, Object value) { return getConfig(Arguments.class).findFor(type, value) .orElseThrow(() -> factoryNotFound(type, value)); }
@Override public SqlStatementCustomizer createForType(Annotation annotation, Class<?> sqlObjectType) { return s -> s.getConfig(SqlStatements.class).setUnusedBindingAllowed(((AllowUnusedBindings) annotation).value()); } }
private Argument toArgument(Type type, Object value) { Argument arg = getConfig(Arguments.class).findFor(type, value) .orElseThrow(() -> factoryNotFound(type, value)); try { boolean toStringIsImplementedInArgument = arg.getClass().getMethod("toString").getDeclaringClass() != Object.class; if (toStringIsImplementedInArgument) { return arg; } else { return new Argument() { @Override public void apply(int position, PreparedStatement statement, StatementContext ctx) throws SQLException { arg.apply(position, statement, ctx); } @Override public String toString() { return Objects.toString(value); } }; } } catch (NoSuchMethodException e) { throw new Error("toString method does not exist, Object hierarchy is corrupt", e); } }
@Override public SqlStatementCustomizer createForMethod(Annotation annotation, Class<?> sqlObjectType, Method method) { final String parameterName = ((Timestamped) annotation).value(); return stmt -> { ZoneId zone = stmt.getConfig(TimestampedConfig.class).getTimezone(); stmt.bind(parameterName, OffsetDateTime.now(timeSource.apply(zone))); }; }
names.append(','); String paramName = getConfig().get(SqlStatements.class).getSqlParser().nameParameter(name, getContext()); names.append(paramName);
@Override public Object invoke(Object target, Object[] args, HandleSupplier hs) throws Exception { final Handle h = hs.getHandle(); final String locatedSql = locateSql(h); final StatementType stmt = createStatement(h, locatedSql); final SqlObjectStatementConfiguration cfg = stmt.getConfig(SqlObjectStatementConfiguration.class); cfg.setArgs(args); configureReturner(stmt, cfg); applyCustomizers(stmt, args); return cfg.getReturner().get(); }
@Override public SqlStatementCustomizer createForType(Annotation annotation, Class<?> sqlObjectType) { return stmt -> stmt.bind("now", OffsetDateTime.now(stmt.getConfig(Config.class).clock)); } }
@Override public SqlStatementParameterCustomizer createForParameter(Annotation annotation, Class<?> sqlObjectType, Method method, Parameter param, int index, Type type) { return (stmt, arg) -> { final QualifiedType<?> mapTo; if (arg instanceof QualifiedType) { mapTo = (QualifiedType<?>) arg; } else if (arg instanceof GenericType) { mapTo = QualifiedType.of(((GenericType<?>) arg).getType()); } else if (arg instanceof Type) { mapTo = QualifiedType.of((Type) arg); } else { throw new UnsupportedOperationException("@MapTo must take a GenericType, QualifiedType, or Type, but got a " + arg.getClass().getName()); } ResultReturner returner = ResultReturner.forMethod(sqlObjectType, method); stmt.getConfig(SqlObjectStatementConfiguration.class).setReturner( () -> returner.mappedResult(((ResultBearing) stmt).mapTo(mapTo), stmt.getContext())); }; } }
String renderedSql = getConfig(SqlStatements.class) .getTemplateEngine() .render(sql, ctx); ctx.setRenderedSql(renderedSql); ParsedSql parsedSql = getConfig(SqlStatements.class) .getSqlParser() .parse(renderedSql, ctx); getConfig(SqlStatements.class).customize(stmt); } catch (SQLException e) { throw new UnableToCreateStatementException(e, ctx); SqlLoggerUtil.wrap(stmt::execute, ctx, getConfig(SqlStatements.class).getSqlLogger()); } catch (SQLException e) { try {
private Argument toArgument(Type type, Object value) { return getConfig(Arguments.class).findFor(type, value) .orElseThrow(() -> new UnsupportedOperationException("No argument factory registered for '" + value + "' of type " + type)); }
RowMapper<?> rowMapperForType(Type type) { return getConfig(RowMappers.class).findFor(type) .orElseThrow(() -> new UnsupportedOperationException("No mapper registered for " + type)); } }
@Override public SqlStatementCustomizer createForType(Annotation annotation, Class<?> sqlObjectType) { return stmt -> stmt.bind("now", OffsetDateTime.now(stmt.getConfig(Config.class).clock)); } }
PreparedStatement internalExecute() String renderedSql = getConfig(SqlStatements.class) .getTemplateEngine() .render(sql, getContext()); getContext().setRenderedSql(renderedSql); ParsedSql parsedSql = getConfig(SqlStatements.class) .getSqlParser() .parse(renderedSql, getContext()); final long elapsedTime = System.nanoTime() - start; LOG.trace("Execute SQL \"{}\" in {}ms", sql, elapsedTime / 1000000L); getConfig(SqlStatements.class) .getTimingCollector() .collect(elapsedTime, getContext());