Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@
<java.version>11</java.version>
<rest-assured.version>4.3.1</rest-assured.version>
<groovy.version>3.0.2</groovy.version>
<revision>0.8.2</revision>
<revision>0.8.3</revision>
<sha1/>
<changelist/>
</properties>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,9 +24,13 @@ public String getType() {
return getService().getModelClass().getSimpleName();
}

@GetMapping()
protected ExtendedRequest<T> newExtendedRequest() {
return new ExtendedRequest<>(extendedParameters, r2dbcDialect, getService().getModelClass());
}

@GetMapping
public Flux<T> findAll(ServerHttpResponse response, ServerHttpRequest request) {
ExtendedRequest<T> extendedRequest = new ExtendedRequest<>(extendedParameters, r2dbcDialect, getService().getModelClass());
ExtendedRequest<T> extendedRequest = newExtendedRequest();
try {
extendedRequest.parseParameter(request.getQueryParams());
} catch (GetException getException) {
Expand Down
43 changes: 7 additions & 36 deletions src/main/java/org/dcsa/core/extendedrequest/TableAndJoins.java
Original file line number Diff line number Diff line change
Expand Up @@ -20,10 +20,12 @@ public class TableAndJoins {
private final Table primaryTable;
private final Set<String> knownAliases = new HashSet<>();
private final LinkedHashMap<String, JoinDescriptor> joins = new LinkedHashMap<>();
private final String primaryTableAlias;

public TableAndJoins(Table primaryTable) {
this.primaryTable = primaryTable;
knownAliases.add(ReflectUtility.getAliasId(primaryTable));
primaryTableAlias = ReflectUtility.getAliasId(primaryTable);
knownAliases.add(primaryTableAlias);
}

public void addJoinDescriptor(JoinDescriptor joinDescriptor) {
Expand All @@ -41,41 +43,6 @@ public JoinDescriptor getJoinDescriptor(String aliasId) {
return joins.get(aliasId);
}

private static void applyJoinToStringBuilder(StringBuilder sb, JoinDescriptor descriptor) {
Column lhs = descriptor.getLHSColumn();
Column rhs = descriptor.getRHSColumn();
Table table = descriptor.getRHSTable();
String joinLine = table.toString() + " ON " + lhs.toString() + "=" + rhs.toString();
switch (descriptor.getJoinType()) {
case JOIN:
sb.append(" JOIN ");
break;
case LEFT_OUTER_JOIN:
sb.append(" LEFT JOIN ");
break;
case RIGHT_OUTER_JOIN:
throw new UnsupportedOperationException("Rewrite to use LEFT JOIN instead");
default:
throw new UnsupportedOperationException("Unsupported join type: " + descriptor.getJoinType());
}
sb.append(joinLine);
}

protected void generateFromAndJoins(StringBuilder sb, Set<String> selectedJoinAliases) {
int selectedJoins = 0;
sb.append(" FROM ");
sb.append(primaryTable.toString());
for (JoinDescriptor joinDescriptor : joins.values()) {
if (selectedJoinAliases.contains(joinDescriptor.getJoinAliasId())) {
applyJoinToStringBuilder(sb, joinDescriptor);
selectedJoins++;
}
}
if (selectedJoinAliases.size() != selectedJoins) {
throw new IllegalArgumentException("selectedJoinAliases contained an unknown alias");
}
}

public boolean hasJoins() {
return !joins.isEmpty();
}
Expand All @@ -92,6 +59,10 @@ public SelectBuilder.SelectFromAndJoinCondition applyJoins(SelectBuilder.SelectF
selectedJoins++;
}
}
// "Forgive" if the primary table is included as well.
if (selectedJoinAliases.contains(primaryTableAlias)) {
selectedJoins++;
}
if (selectedJoinAliases.size() != selectedJoins) {
throw new IllegalArgumentException("selectedJoinAliases contained an unknown alias");
}
Expand Down
12 changes: 12 additions & 0 deletions src/main/java/org/dcsa/core/repository/InsertAddonRepository.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
package org.dcsa.core.repository;

import reactor.core.publisher.Mono;

public interface InsertAddonRepository<T> {

/**
* Unsafe create that enables you to insert an entity with a predefined
* ID.
*/
Mono<T> insert(T t);
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
package org.dcsa.core.repository;

import org.springframework.data.r2dbc.core.R2dbcEntityOperations;
import reactor.core.publisher.Mono;

public class InsertAddonRepositoryImpl<T> implements InsertAddonRepository<T> {

private final R2dbcEntityOperations entityOperations;

public InsertAddonRepositoryImpl(R2dbcEntityOperations entityOperations) {
this.entityOperations = entityOperations;
}

@Override
public Mono<T> insert(T t) {
return entityOperations.insert(t);
}
}