Search in sources :

Example 1 with SqlResultHandler

use of org.dbflute.hook.SqlResultHandler in project lastaflute by lastaflute.

the class SimpleAsyncManager method doInheritCallbackContext.

protected CallbackContext doInheritCallbackContext(ConcurrentAsyncCall call) {
    // null allowed
    final CallbackContext src = CallbackContext.getCallbackContextOnThread();
    if (src == null) {
        return null;
    }
    final CallbackContext dest = newCallbackContext();
    final ConcurrentAsyncOption option = call.option();
    final ConcurrentAsyncOption defaultOption = defaultConcurrentAsyncOption;
    if (isInherit(option.getBehaviorCommandHookType(), defaultOption.getBehaviorCommandHookType())) {
        final BehaviorCommandHook hook = src.getBehaviorCommandHook();
        if (hook != null) {
            dest.setBehaviorCommandHook(hook);
        }
    }
    if (isInherit(option.getSqlFireHookType(), defaultOption.getSqlFireHookType())) {
        final SqlFireHook hook = src.getSqlFireHook();
        if (hook != null) {
            dest.setSqlFireHook(hook);
        }
    } else {
        // as default
        dest.setSqlFireHook(createDefaultSqlFireHook(call));
    }
    if (isInherit(option.getSqlLogHandlerType(), defaultOption.getSqlLogHandlerType())) {
        final SqlLogHandler handler = src.getSqlLogHandler();
        if (handler != null) {
            dest.setSqlLogHandler(handler);
        }
    }
    if (isInherit(option.getSqlResultHandlerType(), defaultOption.getSqlResultHandlerType())) {
        final SqlResultHandler handler = src.getSqlResultHandler();
        if (handler != null) {
            dest.setSqlResultHandler(handler);
        }
    } else {
        dest.setSqlResultHandler(createDefaultSqlResultHandler(call));
    }
    if (isInherit(option.getSqlStringFilterType(), defaultOption.getSqlStringFilterType())) {
        final SqlStringFilter filter = src.getSqlStringFilter();
        if (filter != null) {
            dest.setSqlStringFilter(filter);
        }
    } else {
        // as default
        dest.setSqlStringFilter(createDefaultSqlStringFilter(call));
    }
    return dest;
}
Also used : SqlLogHandler(org.dbflute.hook.SqlLogHandler) SqlResultHandler(org.dbflute.hook.SqlResultHandler) RomanticTraceableSqlResultHandler(org.lastaflute.db.dbflute.callbackcontext.traceablesql.RomanticTraceableSqlResultHandler) RomanticTraceableSqlStringFilter(org.lastaflute.db.dbflute.callbackcontext.traceablesql.RomanticTraceableSqlStringFilter) SqlStringFilter(org.dbflute.hook.SqlStringFilter) BehaviorCommandHook(org.dbflute.bhv.core.BehaviorCommandHook) CallbackContext(org.dbflute.hook.CallbackContext) RomanticTraceableSqlFireHook(org.lastaflute.db.dbflute.callbackcontext.traceablesql.RomanticTraceableSqlFireHook) SqlFireHook(org.dbflute.hook.SqlFireHook)

Example 2 with SqlResultHandler

use of org.dbflute.hook.SqlResultHandler in project dbflute-core by dbflute.

the class BehaviorCommandInvoker method dispatchInvoking.

/**
 * @param <RESULT> The type of result.
 * @param behaviorCommand The command of behavior. (NotNull)
 * @return The result object. (NullAllowed)
 */
protected <RESULT> RESULT dispatchInvoking(BehaviorCommand<RESULT> behaviorCommand) {
    final boolean logEnabled = isLogEnabled();
    // - - - - - - - - - - - - -
    if (behaviorCommand.isInitializeOnly()) {
        initializeSqlExecution(behaviorCommand);
        // The end! (Initialize Only)
        return null;
    }
    behaviorCommand.beforeGettingSqlExecution();
    SqlExecution execution = findSqlExecution(behaviorCommand);
    // - - - - - - - - - - -
    // Execute SQL Execution
    // - - - - - - - - - - -
    final SqlResultHandler sqlResultHander = getSqlResultHander();
    final boolean hasSqlResultHandler = sqlResultHander != null;
    final long before = deriveCommandBeforeAfterTimeIfNeeds(logEnabled, hasSqlResultHandler);
    Long after = null;
    Object ret = null;
    RuntimeException cause = null;
    try {
        final Object[] args = behaviorCommand.getSqlExecutionArgument();
        ret = executeSql(execution, args);
        final Class<?> retType = behaviorCommand.getCommandReturnType();
        assertRetType(retType, ret);
        after = deriveCommandBeforeAfterTimeIfNeeds(logEnabled, hasSqlResultHandler);
        if (logEnabled) {
            logResult(behaviorCommand, retType, ret, before, after);
        }
        ret = convertReturnValueIfNeeds(ret, retType);
    } catch (RuntimeException e) {
        try {
            // always throw
            handleExecutionException(e);
        } catch (RuntimeException handled) {
            cause = handled;
            throw handled;
        }
    } finally {
        behaviorCommand.afterExecuting();
        // - - - - - - - - - - - -
        if (hasSqlResultHandler) {
            callbackSqlResultHanler(behaviorCommand, sqlResultHander, ret, before, after, cause);
        }
    }
    // - - - - - - - - -
    // Cast and Return!
    // - - - - - - - - -
    @SuppressWarnings("unchecked") final RESULT result = (RESULT) ret;
    return result;
}
Also used : SqlResultHandler(org.dbflute.hook.SqlResultHandler)

Example 3 with SqlResultHandler

use of org.dbflute.hook.SqlResultHandler in project dbflute-core by dbflute.

the class TnAbstractBasicSqlHandlerTest method test_logSql_whitebox_sqlResultHandlerOnly.

public void test_logSql_whitebox_sqlResultHandlerOnly() {
    // ## Arrange ##
    final List<String> markList = new ArrayList<String>();
    TnAbstractBasicSqlHandler handler = new TnAbstractBasicSqlHandler(null, null, "select ...") {

        @Override
        protected String buildDisplaySql(String sql, Object[] args) {
            markList.add("buildDisplaySql");
            return "select ...";
        }

        @Override
        protected void logDisplaySql(String displaySql) {
            throw new IllegalStateException("log should not be called!");
        }

        @Override
        protected void log(String msg) {
            throw new IllegalStateException("log should not be called!");
        }

        @Override
        protected void saveResultSqlLogInfo(SqlLogInfo sqlLogInfo) {
            markList.add("saveResultSqlLogInfo");
            super.saveResultSqlLogInfo(sqlLogInfo);
        }

        @Override
        protected boolean isLogEnabled() {
            return false;
        }

        @Override
        protected void assertObjectNotNull(String variableName, Object value) {
        // for no check of constructor
        }
    };
    // ## Act ##
    try {
        CallbackContext callbackContext = new CallbackContext();
        callbackContext.setSqlResultHandler(new SqlResultHandler() {

            public void handle(SqlResultInfo sqlResultInfo) {
                throw new IllegalStateException("handle should not be called!");
            }
        });
        CallbackContext.setCallbackContextOnThread(callbackContext);
        handler.logSql(null, null);
        assertEquals("select ...", InternalMapContext.getResultSqlLogInfo().getDisplaySql());
    } finally {
        CallbackContext.clearCallbackContextOnThread();
        InternalMapContext.clearInternalMapContextOnThread();
    }
    // ## Assert ##
    assertEquals(2, markList.size());
    assertEquals("saveResultSqlLogInfo", markList.get(0));
    assertEquals("buildDisplaySql", markList.get(1));
}
Also used : SqlLogInfo(org.dbflute.hook.SqlLogInfo) SqlResultHandler(org.dbflute.hook.SqlResultHandler) ArrayList(java.util.ArrayList) CallbackContext(org.dbflute.hook.CallbackContext) SqlResultInfo(org.dbflute.hook.SqlResultInfo)

Example 4 with SqlResultHandler

use of org.dbflute.hook.SqlResultHandler in project dbflute-core by dbflute.

the class BehaviorCommandInvokerTest method test_callbackSqlResultHanler_basic.

public void test_callbackSqlResultHanler_basic() {
    // ## Arrange ##
    BehaviorCommandInvoker invoker = new BehaviorCommandInvoker();
    final long before = 123;
    final long after = 456;
    final Object ret = new Object();
    MockBehaviorCommand mockCmd = new MockBehaviorCommand() {

        @Override
        public String getTableDbName() {
            return "FOO";
        }

        @Override
        public String getCommandName() {
            return "BAR";
        }
    };
    final HashSet<String> markSet = new HashSet<String>();
    try {
        SqlLogInfo sqlLogInfo = new SqlLogInfo(mockCmd, "select ...", new Object[] {}, new Class<?>[] {}, new SqlLogDisplaySqlBuilder() {

            public String build(String executedSql, Object[] bindArgs, Class<?>[] bindArgTypes) {
                return "select ...";
            }
        });
        InternalMapContext.setResultSqlLogInfo(sqlLogInfo);
        // ## Act & Assert ##
        invoker.callbackSqlResultHanler(mockCmd, new SqlResultHandler() {

            public void handle(SqlResultInfo info) {
                long actualBefore = info.getExecutionTimeInfo().getCommandBeforeTimeMillis();
                long actualAfter = info.getExecutionTimeInfo().getCommandAfterTimeMillis();
                assertEquals(ret, info.getResult());
                assertEquals("FOO", info.getMeta().getTableDbName());
                assertEquals("BAR", info.getMeta().getCommandName());
                String displaySql = info.getSqlLogInfo().getDisplaySql();
                assertEquals("select ...", displaySql);
                assertEquals(before, actualBefore);
                assertEquals(after, actualAfter);
                assertNull(info.getCause());
                markSet.add("handle()");
                log(info.getResult() + ":" + displaySql + ":" + actualBefore + ":" + actualAfter);
            }
        }, ret, before, after, null);
        assertTrue(markSet.size() == 1);
        assertTrue(markSet.contains("handle()"));
    } finally {
        InternalMapContext.clearInternalMapContextOnThread();
    }
}
Also used : SqlResultHandler(org.dbflute.hook.SqlResultHandler) SqlLogDisplaySqlBuilder(org.dbflute.hook.SqlLogInfo.SqlLogDisplaySqlBuilder) SqlResultInfo(org.dbflute.hook.SqlResultInfo) MockBehaviorCommand(org.dbflute.mock.MockBehaviorCommand) SqlLogInfo(org.dbflute.hook.SqlLogInfo) HashSet(java.util.HashSet)

Example 5 with SqlResultHandler

use of org.dbflute.hook.SqlResultHandler in project dbflute-core by dbflute.

the class TnAbstractBasicSqlHandlerTest method test_logSql_whitebox_bigThree.

public void test_logSql_whitebox_bigThree() {
    // ## Arrange ##
    final List<String> markList = new ArrayList<String>();
    final Object[] args = new Object[] {};
    final Class<?>[] argsTypes = new Class<?>[] {};
    TnAbstractBasicSqlHandler handler = new TnAbstractBasicSqlHandler(null, null, null) {

        @Override
        protected String buildDisplaySql(String sql, Object[] args) {
            markList.add("getDisplaySql");
            return "select ..." + ln() + "  from ...";
        }

        @Override
        protected void logDisplaySql(String displaySql) {
            markList.add("logDisplaySql");
            assertEquals("select ..." + ln() + "  from ...", displaySql);
            super.logDisplaySql(displaySql);
        }

        @Override
        protected void log(String msg) {
            markList.add("log");
            assertEquals(ln() + "select ..." + ln() + "  from ...", msg);
        }

        @Override
        protected void saveResultSqlLogInfo(SqlLogInfo sqlLogInfo) {
            markList.add("saveResultSqlLogInfo");
            super.saveResultSqlLogInfo(sqlLogInfo);
        }

        @Override
        protected boolean isLogEnabled() {
            return true;
        }

        @Override
        protected void assertObjectNotNull(String variableName, Object value) {
        // for no check of constructor
        }
    };
    // ## Act ##
    try {
        CallbackContext callbackContext = new CallbackContext();
        callbackContext.setSqlLogHandler(new SqlLogHandler() {

            public void handle(SqlLogInfo info) {
                markList.add("handle");
                assertEquals("select ..." + ln() + "  from ...", info.getDisplaySql());
                assertEquals(newArrayList(args), newArrayList(info.getBindArgs()));
                assertEquals(newArrayList(argsTypes), newArrayList(info.getBindArgTypes()));
            }
        });
        callbackContext.setSqlResultHandler(new SqlResultHandler() {

            public void handle(SqlResultInfo sqlResultInfo) {
                throw new IllegalStateException("handle should not be called!");
            }
        });
        CallbackContext.setCallbackContextOnThread(callbackContext);
        handler.logSql(args, argsTypes);
        assertEquals("select ..." + ln() + "  from ...", InternalMapContext.getResultSqlLogInfo().getDisplaySql());
    } finally {
        CallbackContext.clearCallbackContextOnThread();
        InternalMapContext.clearInternalMapContextOnThread();
    }
    // ## Assert ##
    assertEquals(5, markList.size());
    assertEquals("getDisplaySql", markList.get(0));
    assertEquals("logDisplaySql", markList.get(1));
    assertEquals("log", markList.get(2));
    assertEquals("handle", markList.get(3));
    assertEquals("saveResultSqlLogInfo", markList.get(4));
}
Also used : SqlLogHandler(org.dbflute.hook.SqlLogHandler) SqlResultHandler(org.dbflute.hook.SqlResultHandler) ArrayList(java.util.ArrayList) SqlResultInfo(org.dbflute.hook.SqlResultInfo) SqlLogInfo(org.dbflute.hook.SqlLogInfo) CallbackContext(org.dbflute.hook.CallbackContext)

Aggregations

SqlResultHandler (org.dbflute.hook.SqlResultHandler)7 SqlResultInfo (org.dbflute.hook.SqlResultInfo)5 CallbackContext (org.dbflute.hook.CallbackContext)4 SqlLogInfo (org.dbflute.hook.SqlLogInfo)4 ArrayList (java.util.ArrayList)3 MockBehaviorCommand (org.dbflute.mock.MockBehaviorCommand)3 HashSet (java.util.HashSet)2 SqlLogHandler (org.dbflute.hook.SqlLogHandler)2 SqlLogDisplaySqlBuilder (org.dbflute.hook.SqlLogInfo.SqlLogDisplaySqlBuilder)2 BehaviorCommandHook (org.dbflute.bhv.core.BehaviorCommandHook)1 SqlFireHook (org.dbflute.hook.SqlFireHook)1 SqlStringFilter (org.dbflute.hook.SqlStringFilter)1 RomanticTraceableSqlFireHook (org.lastaflute.db.dbflute.callbackcontext.traceablesql.RomanticTraceableSqlFireHook)1 RomanticTraceableSqlResultHandler (org.lastaflute.db.dbflute.callbackcontext.traceablesql.RomanticTraceableSqlResultHandler)1 RomanticTraceableSqlStringFilter (org.lastaflute.db.dbflute.callbackcontext.traceablesql.RomanticTraceableSqlStringFilter)1