Skip to content

Commit 71b81a1

Browse files
committed
#73 - hacking - fixed an error.
1 parent 7b57ff8 commit 71b81a1

File tree

5 files changed

+67
-41
lines changed

5 files changed

+67
-41
lines changed

src/main/java/org/springframework/data/r2dbc/dialect/IndexedBindMarker.java

+8-2
Original file line numberDiff line numberDiff line change
@@ -20,11 +20,11 @@
2020
/**
2121
* A single indexed bind marker.
2222
*/
23-
class IndexedBindMarker implements BindMarker {
23+
public class IndexedBindMarker implements BindMarker {
2424

2525
private final String placeholder;
2626

27-
private int index;
27+
private final int index;
2828

2929
IndexedBindMarker(String placeholder, int index) {
3030
this.placeholder = placeholder;
@@ -57,4 +57,10 @@ public void bind(Statement statement, Object value) {
5757
public void bindNull(Statement statement, Class<?> valueType) {
5858
statement.bindNull(this.index, valueType);
5959
}
60+
61+
62+
public int getIndex() {
63+
return index;
64+
}
65+
6066
}

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

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

1818
import io.r2dbc.spi.Statement;
1919
import lombok.RequiredArgsConstructor;
20-
import lombok.Value;
2120

2221
import java.util.List;
2322

@@ -34,6 +33,10 @@ public Bindings(List<SingleBinding> bindings) {
3433
this.bindings = bindings;
3534
}
3635

36+
public void apply(Statement statement) {
37+
bindings.forEach(sb -> sb.bindTo(statement));
38+
}
39+
3740
@RequiredArgsConstructor
3841
public static abstract class SingleBinding<T> {
3942

@@ -82,9 +85,9 @@ public void bindTo(Statement statement) {
8285

8386
if (value.isEmpty()) {
8487
statement.bindNull((int) identifier, value.getType());
88+
} else {
89+
statement.bind((int) identifier, value);
8590
}
86-
87-
statement.bind((int) identifier, value);
8891
}
8992

9093
@Override

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

+51-34
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@
1717

1818
import io.r2dbc.spi.Connection;
1919
import io.r2dbc.spi.Statement;
20-
import kotlin.internal.LowPriorityInOverloadResolution;
2120
import lombok.Getter;
2221
import lombok.RequiredArgsConstructor;
2322

@@ -32,26 +31,14 @@
3231
import java.util.function.Consumer;
3332
import java.util.function.Function;
3433

34+
import org.jetbrains.annotations.NotNull;
3535
import org.springframework.dao.InvalidDataAccessApiUsageException;
3636
import org.springframework.data.r2dbc.dialect.BindMarker;
3737
import org.springframework.data.r2dbc.dialect.BindMarkers;
3838
import org.springframework.data.r2dbc.dialect.Dialect;
39+
import org.springframework.data.r2dbc.dialect.IndexedBindMarker;
3940
import org.springframework.data.r2dbc.domain.SettableValue;
40-
import org.springframework.data.relational.core.sql.AssignValue;
41-
import org.springframework.data.relational.core.sql.Assignment;
42-
import org.springframework.data.relational.core.sql.Column;
43-
import org.springframework.data.relational.core.sql.Condition;
44-
import org.springframework.data.relational.core.sql.Delete;
45-
import org.springframework.data.relational.core.sql.DeleteBuilder;
46-
import org.springframework.data.relational.core.sql.Expression;
47-
import org.springframework.data.relational.core.sql.Insert;
48-
import org.springframework.data.relational.core.sql.SQL;
49-
import org.springframework.data.relational.core.sql.Select;
50-
import org.springframework.data.relational.core.sql.SelectBuilder;
51-
import org.springframework.data.relational.core.sql.StatementBuilder;
52-
import org.springframework.data.relational.core.sql.Table;
53-
import org.springframework.data.relational.core.sql.Update;
54-
import org.springframework.data.relational.core.sql.UpdateBuilder;
41+
import org.springframework.data.relational.core.sql.*;
5542
import org.springframework.data.relational.core.sql.render.RenderContext;
5643
import org.springframework.data.relational.core.sql.render.SqlRenderer;
5744
import org.springframework.lang.Nullable;
@@ -104,10 +91,44 @@ public void bind(String identifier, SettableValue settable) {
10491
select = selectBuilder.build();
10592
}
10693

107-
return new DefaultPreparedOperation<>(select, renderContext, binding);
94+
return new DefaultPreparedOperation<>( //
95+
select, //
96+
renderContext, //
97+
createBindings(binding) //
98+
);
10899
});
109100
}
110101

102+
@NotNull
103+
private static Bindings createBindings(Binding binding) {
104+
105+
List<Bindings.SingleBinding> singleBindings = new ArrayList<>();
106+
107+
binding.getNulls().forEach( //
108+
(bindMarker, settableValue) -> {
109+
110+
if (bindMarker instanceof IndexedBindMarker) {
111+
singleBindings //
112+
.add(new Bindings.IndexedSingleBinding( //
113+
((IndexedBindMarker) bindMarker).getIndex(), //
114+
settableValue) //
115+
);
116+
}
117+
});
118+
119+
binding.getValues().forEach( //
120+
(bindMarker, value) -> {
121+
singleBindings //
122+
.add(new Bindings.NamedSingleBinding<>( //
123+
bindMarker.getPlaceholder(), //
124+
value instanceof SettableValue ? (SettableValue) value
125+
: SettableValue.from(value)) //
126+
);
127+
});
128+
129+
return new Bindings(singleBindings);
130+
}
131+
111132
/*
112133
* (non-Javadoc)
113134
* @see org.springframework.data.r2dbc.function.StatementFactory#insert(java.lang.String, java.util.Collection, java.util.function.Consumer)
@@ -152,7 +173,7 @@ public void filterBy(String identifier, SettableValue settable) {
152173
Insert insert = StatementBuilder.insert().into(table).columns(table.columns(binderBuilder.bindings.keySet()))
153174
.values(expressions).build();
154175

155-
return new DefaultPreparedOperation<Insert>(insert, renderContext, binding) {
176+
return new DefaultPreparedOperation<Insert>(insert, renderContext, createBindings(binding)) {
156177
@Override
157178
public Statement bind(Statement to) {
158179
return super.bind(to).returnGeneratedValues(generatedKeysNames.toArray(new String[0]));
@@ -206,7 +227,7 @@ public PreparedOperation<Update> update(String tableName, Consumer<StatementBind
206227
update = updateBuilder.build();
207228
}
208229

209-
return new DefaultPreparedOperation<>(update, renderContext, binding);
230+
return new DefaultPreparedOperation<>(update, renderContext, createBindings(binding));
210231
});
211232
}
212233

@@ -244,7 +265,7 @@ public void bind(String identifier, SettableValue settable) {
244265
delete = deleteBuilder.build();
245266
}
246267

247-
return new DefaultPreparedOperation<>(delete, renderContext, binding);
268+
return new DefaultPreparedOperation<>(delete, renderContext, createBindings(binding));
248269
});
249270
}
250271

@@ -364,7 +385,6 @@ private static Condition toCondition(BindMarkers bindMarkers, Column column, Set
364385
}
365386
}
366387

367-
368388
/**
369389
* Value object holding value and {@code NULL} bindings.
370390
*
@@ -415,16 +435,14 @@ void apply(Statement to) {
415435
}
416436
}
417437

418-
419438
static abstract class PreparedOperationSupport<T> implements PreparedOperation<T> {
420439

421440
private Function<String, String> sqlFilter = s -> s;
422-
private Function<Binding, Binding> bindingFilter = b -> b;
423-
441+
private Function<Bindings, Bindings> bindingFilter = b -> b;
424442

425443
abstract protected String createBaseSql();
426444

427-
protected abstract Binding getBaseBinding();
445+
protected abstract Bindings getBaseBinding();
428446

429447
/*
430448
* (non-Javadoc)
@@ -435,6 +453,7 @@ public String toQuery() {
435453

436454
return sqlFilter.apply(createBaseSql());
437455
}
456+
438457
/*
439458
* (non-Javadoc)
440459
* @see org.springframework.data.r2dbc.function.PreparedOperation#bind(io.r2dbc.spi.Statement)
@@ -445,14 +464,13 @@ protected Statement bind(Statement to) {
445464
return to;
446465
}
447466

448-
449467
@Override
450468
public Statement createBoundStatement(Connection connection) {
451469

452470
// TODO add back logging
453-
// if (logger.isDebugEnabled()) {
454-
// logger.debug("Executing SQL statement [" + sql + "]");
455-
// }
471+
// if (logger.isDebugEnabled()) {
472+
// logger.debug("Executing SQL statement [" + sql + "]");
473+
// }
456474

457475
return bind(connection.createStatement(toQuery()));
458476
}
@@ -467,7 +485,7 @@ public void addSqlFilter(Function<String, String> filter) {
467485
}
468486

469487
@Override
470-
public void addBindingFilter(Function<Binding, Binding> filter) {
488+
public void addBindingFilter(Function<Bindings, Bindings> filter) {
471489

472490
Assert.notNull(filter, "Filter must not be null.");
473491

@@ -476,7 +494,6 @@ public void addBindingFilter(Function<Binding, Binding> filter) {
476494

477495
}
478496

479-
480497
/**
481498
* Default implementation of {@link PreparedOperation}.
482499
*
@@ -487,7 +504,7 @@ static class DefaultPreparedOperation<T> extends PreparedOperationSupport<T> {
487504

488505
private final T source;
489506
private final RenderContext renderContext;
490-
private final Binding binding;
507+
private final Bindings bindings;
491508

492509
/*
493510
* (non-Javadoc)
@@ -522,8 +539,8 @@ protected String createBaseSql() {
522539
}
523540

524541
@Override
525-
protected Binding getBaseBinding() {
526-
return binding;
542+
protected Bindings getBaseBinding() {
543+
return bindings;
527544
}
528545
}
529546
}

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

+1-1
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,7 @@ public void addSqlFilter(Function<String, String> filter) {
7373
}
7474

7575
@Override
76-
public void addBindingFilter(Function<DefaultStatementFactory.Binding, DefaultStatementFactory.Binding> filter) {
76+
public void addBindingFilter(Function<Bindings, Bindings> filter) {
7777

7878
}
7979

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

+1-1
Original file line numberDiff line numberDiff line change
@@ -51,5 +51,5 @@ public interface PreparedOperation<T> extends QueryOperation {
5151

5252
void addSqlFilter(Function<String, String> filter);
5353

54-
void addBindingFilter(Function<DefaultStatementFactory.Binding, DefaultStatementFactory.Binding> filter);
54+
void addBindingFilter(Function<Bindings, Bindings> filter);
5555
}

0 commit comments

Comments
 (0)