Skip to content

Commit 496a609

Browse files
committed
ストアドプロシージャなどのSQLのログ出力処理の呼び出し
1 parent f3d8314 commit 496a609

File tree

5 files changed

+84
-5
lines changed

5 files changed

+84
-5
lines changed

sqlmapper-parent/sqlmapper-core/src/main/java/com/github/mygreen/sqlmapper/core/StoredName.java

+12
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,15 @@
11
package com.github.mygreen.sqlmapper.core;
22

3+
import com.github.mygreen.sqlmapper.core.util.NameUtils;
4+
35
import lombok.Getter;
46
import lombok.RequiredArgsConstructor;
57

68
/**
79
* ストアドプロシージャ/ストアドファンクションの名称を指定するためのクラス。
810
* <p>スキーマ/カタログを指定する際に利用します。
911
*
12+
* @version 0.4
1013
* @since 0.3
1114
* @author T.TSUCHIE
1215
*
@@ -52,4 +55,13 @@ public StoredName withCatalog(String catalog) {
5255
return this;
5356
}
5457

58+
/**
59+
* スキーマ名/カタログ名を考慮したフルネームを取得します。
60+
* @since 0.4
61+
* @return フルネームを取得します。
62+
*/
63+
public String toFullName() {
64+
return NameUtils.tableFullName(name, catalog, schema);
65+
}
66+
5567
}

sqlmapper-parent/sqlmapper-core/src/main/java/com/github/mygreen/sqlmapper/core/query/SqlLogger.java

+50-1
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
import org.springframework.util.CollectionUtils;
1818

1919
import com.github.mygreen.sqlmapper.core.config.ShowSqlProperties;
20+
import com.github.mygreen.sqlmapper.core.util.QueryUtils;
2021

2122
import lombok.Getter;
2223
import lombok.RequiredArgsConstructor;
@@ -55,7 +56,7 @@ public class SqlLogger {
5556
*/
5657
public void out(final String sql, final Object[] params) {
5758
outSql(sql);
58-
if(prop.getBindParam().isEnabled() && params != null) {
59+
if(prop.getBindParam().isEnabled() && !QueryUtils.isEmpty(params)) {
5960
outParams(Arrays.asList(params));
6061
}
6162

@@ -82,6 +83,16 @@ public void outBatch(final String sql, final List<Object[]> batchParams) {
8283

8384
}
8485

86+
/**
87+
* ストアドプロシージャ/ストアドファンクションのログを出力する。
88+
* @param callName ストアドプロシージャ/ストアドファンクションのSQL
89+
* @param callParams ストアドプロシージャ/ストアドファンクションのバインド変数
90+
*/
91+
public void outCall(final String callName, final Object[] callParams) {
92+
outCallName(callName, callParams);
93+
outCallParams(callParams);
94+
}
95+
8596
/**
8697
* SQLをログ出力する。
8798
* @param sql 出力対象のSQL
@@ -139,6 +150,44 @@ private void outBatchParams(final Collection<Object[]> batchParams) {
139150
}
140151
}
141152

153+
/**
154+
* ストアドプロシージャ/ストアドファンクションの名称をログ出力する。
155+
* @param callName 名称
156+
* @param callParams パラメータ
157+
*/
158+
private void outCallName(final String callName, final Object[] callParams) {
159+
if(!prop.isEnabled()) {
160+
return;
161+
}
162+
163+
int paramCount = (callParams == null) ? 0 : callParams.length;
164+
String args = QueryUtils.repeat("?", ", ", paramCount);
165+
invokeLog(prop.getBindParam().getLogLevel(), "sql call : {}({})", new Object[]{callName, args});
166+
}
167+
168+
/**
169+
* ストアドプロシージャ/ストアドファンクションのパラメータをログ出力する。
170+
* @param callParams パラメータ
171+
*/
172+
private void outCallParams(final Object[] callParams) {
173+
if(!prop.isEnabled() || !prop.getBindParam().isEnabled() || QueryUtils.isEmpty(callParams)) {
174+
return;
175+
}
176+
177+
int paramCount = 1;
178+
for(Object param : callParams) {
179+
String paramType = resolveBindParamType(param);
180+
String paramValue = resolveBindParamValue(param);
181+
182+
invokeLog(prop.getBindParam().getLogLevel(), "sql call binding parameter : [{}] as [{}] - [{}]",
183+
new Object[]{paramCount, paramType, paramValue });
184+
185+
paramCount++;
186+
}
187+
}
188+
189+
190+
142191
/**
143192
* ログレベルを指定してログに出力する。
144193
* @param level ログレベル。

sqlmapper-parent/sqlmapper-core/src/main/java/com/github/mygreen/sqlmapper/core/query/auto/AutoFunctionCallImpl.java

+3-1
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,6 @@ public AutoFunctionCallImpl<T> queryTimeout(int seconds) {
7474

7575
@Override
7676
public T execute() {
77-
7877
final SimpleJdbcCall jdbcCall = new SimpleJdbcCall(getJdbcTemplate())
7978
.withFunctionName(functionName.getName());
8079

@@ -88,13 +87,16 @@ public T execute() {
8887

8988

9089
if(parameter.isEmpty()) {
90+
context.getSqlLogger().outCall(functionName.toFullName(), null);
9191
return jdbcCall.executeFunction(resultClass);
9292

9393
} else {
9494
SqlParameter[] parameterTypes = createSqlParameterTypes(paramMeta);
9595
Object[] parameterValues = parameter.map(p -> createParameterValues(paramMeta, p))
9696
.orElseGet(() -> new Object[0]);
9797

98+
context.getSqlLogger().outCall(functionName.toFullName(), parameterValues);
99+
98100
if(containsResultParam(paramMeta, parameter)) {
99101
Map<String, Object> out = jdbcCall.declareParameters(parameterTypes)
100102
.execute(parameterValues);

sqlmapper-parent/sqlmapper-core/src/main/java/com/github/mygreen/sqlmapper/core/query/auto/AutoProcedureCallImpl.java

+3-2
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,6 @@ public AutoProcedureCallImpl queryTimeout(int seconds) {
7272

7373
@Override
7474
public void execute() {
75-
7675
final SimpleJdbcCall jdbcCall = new SimpleJdbcCall(getJdbcTemplate())
7776
.withProcedureName(procedureName.getName());
7877

@@ -84,15 +83,17 @@ public void execute() {
8483
jdbcCall.withSchemaName(procedureName.getSchema());
8584
}
8685

87-
8886
if(parameter.isEmpty()) {
87+
context.getSqlLogger().outCall(procedureName.toFullName(), null);
8988
jdbcCall.execute();
9089

9190
} else {
9291
SqlParameter[] parameterTypes = createSqlParameterTypes(paramMeta);
9392
Object[] parameterValues = parameter.map(p -> createParameterValues(paramMeta, p))
9493
.orElseGet(() -> new Object[0]);
9594

95+
context.getSqlLogger().outCall(procedureName.toFullName(), parameterValues);
96+
9697
Map<String, Object> out = jdbcCall.declareParameters(parameterTypes)
9798
.execute(parameterValues);
9899

sqlmapper-parent/sqlmapper-core/src/main/java/com/github/mygreen/sqlmapper/core/util/QueryUtils.java

+16-1
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
/**
1010
* クエリ組み立て時のヘルパークラス
1111
*
12-
*
12+
* @version 0.4
1313
* @author T.TSUCHIE
1414
*
1515
*/
@@ -138,4 +138,19 @@ public static String escapeLike(final String str, final char escape) {
138138
return sb.toString();
139139
}
140140

141+
/**
142+
* 配列が空かどうか判定します。
143+
*
144+
* @since 0.4
145+
* @param array 判定対象の配列
146+
* @return 配列が {@literal null} または要素数が {@literal 0}のときに {@literal true} を返します。
147+
*/
148+
public static boolean isEmpty(final Object[] array) {
149+
if(array == null || array.length == 0) {
150+
return true;
151+
}
152+
153+
return false;
154+
}
155+
141156
}

0 commit comments

Comments
 (0)