Better handling of joins (flip the join-on if needed)

This commit is contained in:
2023-03-06 09:40:45 -06:00
parent 68686c0e17
commit 47d2291d96

View File

@ -212,7 +212,7 @@ public abstract class AbstractRDBMSAction implements QActionInterface
// find the join in the instance, to set the 'on' clause // // find the join in the instance, to set the 'on' clause //
//////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////
List<String> joinClauseList = new ArrayList<>(); List<String> joinClauseList = new ArrayList<>();
String baseTableName = joinsContext.resolveTableNameOrAliasToTableName(queryJoin.getBaseTableOrAlias()); String baseTableName = Objects.requireNonNullElse(joinsContext.resolveTableNameOrAliasToTableName(queryJoin.getBaseTableOrAlias()), tableName);
QJoinMetaData joinMetaData = Objects.requireNonNullElseGet(queryJoin.getJoinMetaData(), () -> QJoinMetaData joinMetaData = Objects.requireNonNullElseGet(queryJoin.getJoinMetaData(), () ->
{ {
QJoinMetaData found = findJoinMetaData(instance, joinsContext, baseTableName, queryJoin.getJoinTable()); QJoinMetaData found = findJoinMetaData(instance, joinsContext, baseTableName, queryJoin.getJoinTable());
@ -239,6 +239,13 @@ public abstract class AbstractRDBMSAction implements QActionInterface
} }
String joinTableOrAlias = queryJoin.getJoinTableOrItsAlias(); String joinTableOrAlias = queryJoin.getJoinTableOrItsAlias();
if(!joinMetaData.getLeftTable().equals(baseTableName))
{
joinOn = joinOn.flip();
QTableMetaData tmpTable = leftTable;
leftTable = rightTable;
rightTable = tmpTable;
}
joinClauseList.add(escapeIdentifier(baseTableOrAlias) joinClauseList.add(escapeIdentifier(baseTableOrAlias)
+ "." + escapeIdentifier(getColumnName(leftTable.getField(joinOn.getLeftField()))) + "." + escapeIdentifier(getColumnName(leftTable.getField(joinOn.getLeftField())))