Skip to content

Commit 9b32943

Browse files
committed
#73 - hacking - extracted super class.
1 parent e13fcd7 commit 9b32943

File tree

3 files changed

+87
-26
lines changed

3 files changed

+87
-26
lines changed

src/main/java/org/springframework/data/r2dbc/function/DefaultStatementFactory.java

+69-25
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717

1818
import io.r2dbc.spi.Connection;
1919
import io.r2dbc.spi.Statement;
20+
import kotlin.internal.LowPriorityInOverloadResolution;
2021
import lombok.Getter;
2122
import lombok.RequiredArgsConstructor;
2223

@@ -29,6 +30,7 @@
2930
import java.util.function.BiConsumer;
3031
import java.util.function.BiFunction;
3132
import java.util.function.Consumer;
33+
import java.util.function.Function;
3234

3335
import org.springframework.dao.InvalidDataAccessApiUsageException;
3436
import org.springframework.data.r2dbc.dialect.BindMarker;
@@ -362,6 +364,7 @@ private static Condition toCondition(BindMarkers bindMarkers, Column column, Set
362364
}
363365
}
364366

367+
365368
/**
366369
* Value object holding value and {@code NULL} bindings.
367370
*
@@ -412,13 +415,75 @@ void apply(Statement to) {
412415
}
413416
}
414417

418+
419+
static abstract class PreparedOperationSupport<T> implements PreparedOperation<T> {
420+
421+
private Function<String, String> sqlFilter = s -> s;
422+
private Function<Binding, Binding> bindingFilter = b -> b;
423+
424+
425+
abstract protected String createBaseSql();
426+
427+
protected abstract Binding getBaseBinding();
428+
429+
/*
430+
* (non-Javadoc)
431+
* @see org.springframework.data.r2dbc.function.QueryOperation#toQuery()
432+
*/
433+
@Override
434+
public String toQuery() {
435+
436+
return sqlFilter.apply(createBaseSql());
437+
}
438+
/*
439+
* (non-Javadoc)
440+
* @see org.springframework.data.r2dbc.function.PreparedOperation#bind(io.r2dbc.spi.Statement)
441+
*/
442+
protected Statement bind(Statement to) {
443+
444+
bindingFilter.apply(getBaseBinding()).apply(to);
445+
return to;
446+
}
447+
448+
449+
@Override
450+
public Statement createBoundStatement(Connection connection) {
451+
452+
// TODO add back logging
453+
// if (logger.isDebugEnabled()) {
454+
// logger.debug("Executing SQL statement [" + sql + "]");
455+
// }
456+
457+
return bind(connection.createStatement(toQuery()));
458+
}
459+
460+
@Override
461+
public void addSqlFilter(Function<String, String> filter) {
462+
463+
Assert.notNull(filter, "Filter must not be null.");
464+
465+
sqlFilter = filter;
466+
467+
}
468+
469+
@Override
470+
public void addBindingFilter(Function<Binding, Binding> filter) {
471+
472+
Assert.notNull(filter, "Filter must not be null.");
473+
474+
bindingFilter = filter;
475+
}
476+
477+
}
478+
479+
415480
/**
416481
* Default implementation of {@link PreparedOperation}.
417482
*
418483
* @param <T>
419484
*/
420485
@RequiredArgsConstructor
421-
static class DefaultPreparedOperation<T> implements PreparedOperation<T> {
486+
static class DefaultPreparedOperation<T> extends PreparedOperationSupport<T> {
422487

423488
private final T source;
424489
private final RenderContext renderContext;
@@ -433,13 +498,8 @@ public T getSource() {
433498
return this.source;
434499
}
435500

436-
/*
437-
* (non-Javadoc)
438-
* @see org.springframework.data.r2dbc.function.QueryOperation#toQuery()
439-
*/
440501
@Override
441-
public String toQuery() {
442-
502+
protected String createBaseSql() {
443503
SqlRenderer sqlRenderer = SqlRenderer.create(renderContext);
444504

445505
if (this.source instanceof Select) {
@@ -461,25 +521,9 @@ public String toQuery() {
461521
throw new IllegalStateException("Cannot render " + this.getSource());
462522
}
463523

464-
/*
465-
* (non-Javadoc)
466-
* @see org.springframework.data.r2dbc.function.PreparedOperation#bind(io.r2dbc.spi.Statement)
467-
*/
468-
protected Statement bind(Statement to) {
469-
470-
binding.apply(to);
471-
return to;
472-
}
473-
474524
@Override
475-
public Statement createBoundStatement(Connection connection) {
476-
477-
// TODO add back logging
478-
// if (logger.isDebugEnabled()) {
479-
// logger.debug("Executing SQL statement [" + sql + "]");
480-
// }
481-
482-
return bind(connection.createStatement(toQuery()));
525+
protected Binding getBaseBinding() {
526+
return binding;
483527
}
484528
}
485529
}

src/main/java/org/springframework/data/r2dbc/function/ParameterbindingPreparedOperation.java

+11
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
import io.r2dbc.spi.Statement;
2020

2121
import java.util.Map;
22+
import java.util.function.Function;
2223

2324
import org.springframework.data.r2dbc.domain.SettableValue;
2425

@@ -66,6 +67,16 @@ public Statement createBoundStatement(Connection connection) {
6667
return statement;
6768
}
6869

70+
@Override
71+
public void addSqlFilter(Function<String, String> filter) {
72+
73+
}
74+
75+
@Override
76+
public void addBindingFilter(Function<DefaultStatementFactory.Binding, DefaultStatementFactory.Binding> filter) {
77+
78+
}
79+
6980
@Override
7081
public String toQuery() {
7182
return operation.toQuery();

src/main/java/org/springframework/data/r2dbc/function/PreparedOperation.java

+7-1
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
import io.r2dbc.spi.Connection;
1919
import io.r2dbc.spi.Statement;
2020

21+
import java.util.function.Function;
2122
import java.util.function.Supplier;
2223

2324
/**
@@ -40,10 +41,15 @@ public interface PreparedOperation<T> extends QueryOperation {
4041
T getSource();
4142

4243
/**
43-
* Bind query parameters to a {@link Statement}.
44+
* create a {@link Statement} from the generated SQL after applying the SQL filter and then applying the
45+
* {@link org.springframework.data.r2dbc.function.DefaultStatementFactory.Binding} after filtering those as well.
4446
*
4547
* @param connection the {@link Connection} used for constructing a statement
4648
* @return the bound statement.
4749
*/
4850
Statement createBoundStatement(Connection connection);
51+
52+
void addSqlFilter(Function<String, String> filter);
53+
54+
void addBindingFilter(Function<DefaultStatementFactory.Binding, DefaultStatementFactory.Binding> filter);
4955
}

0 commit comments

Comments
 (0)