@Override public void logBeforeExecution(StatementContext context) { rawSql.add(context.getRawSql()); }
@Override public void logAfterExecution(StatementContext context) { rawSql.add(context.getRawSql()); timings.add(context.getElapsedTime(ChronoUnit.NANOS)); }
@Override public void logException(StatementContext context, SQLException ex) { rawSql.add(context.getRawSql()); exceptions.add(ex); timings.add(context.getElapsedTime(ChronoUnit.NANOS)); }
@Override public synchronized void collect(final long elapsedTime, final StatementContext ctx) { rawStatements.add(ctx.getRawSql()); renderedStatements.add(ctx.getRenderedSql()); parsedStatements.add(ctx.getParsedSql()); }
@Override public String getMessage() { String base = super.getMessage(); StatementContext ctx = getStatementContext(); if (ctx == null) { return base; } else { return String.format("%s [statement:\"%s\", rewritten:\"%s\", parsed:\"%s\", arguments:%s]", base, ctx.getRawSql(), ctx.getRenderedSql(), ctx.getParsedSql(), ctx.getBinding()); } } }
String getStatementName(StatementContext statementContext) { ExtensionMethod extensionMethod = statementContext.getExtensionMethod(); if (extensionMethod != null) { Class<?> type = extensionMethod.getType(); Method method = extensionMethod.getMethod(); String group = type.getPackage().getName(); String name = type.getSimpleName(); return group + "." + name + "." + method.getName(); } else { return "sql.raw." + statementContext.getRawSql(); } } }
@Test public void testFoo() { assertThatExceptionOfType(StatementException.class) .isThrownBy(() -> dbRule.openHandle().execute("WOOF", 7, "Tom")) .satisfies(e -> assertThat(e.getStatementContext().getRawSql()).isEqualTo("WOOF")); } }
@Test public void testScriptAsSetOfSeparateStatements() { assertThatExceptionOfType(StatementException.class) .isThrownBy(() -> { Handle h = dbRule.openHandle(); Script script = h.createScript(getResourceOnClasspath("script/malformed-sql-script.sql")); script.executeAsSeparateStatements(); }) .satisfies(e -> assertThat(e.getStatementContext().getRawSql().trim()) .isEqualTo("insert into something(id, name) values (2, eric)")); } }
@Override public String getMessage() { String base = super.getMessage(); StatementContext ctx = getStatementContext(); if (ctx == null) { return base; } else { return String.format("%s [statement:\"%s\", rewritten:\"%s\", parsed:\"%s\", arguments:%s]", base, ctx.getRawSql(), ctx.getRenderedSql(), ctx.getParsedSql(), ctx.getBinding()); } } }
String getStatementName(StatementContext statementContext) { ExtensionMethod extensionMethod = statementContext.getExtensionMethod(); if (extensionMethod != null) { Class<?> type = extensionMethod.getType(); Method method = extensionMethod.getMethod(); String group = type.getPackage().getName(); String name = type.getSimpleName(); return group + "." + name + "." + method.getName(); } else { return "sql.raw." + statementContext.getRawSql(); } } }