nz.co.gregs.dbvolution.internal.query.QueryState Maven / Gradle / Ivy
/*
* Copyright 2017 greg.
*
* This work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License.
* To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/4.0/
* or send a letter to Creative Commons, PO Box 1866, Mountain View, CA 94042, USA.
*
* You are free to:
* Share - copy and redistribute the material in any medium or format
* Adapt - remix, transform, and build upon the material
*
* The licensor cannot revoke these freedoms as long as you follow the license terms.
* Under the following terms:
*
* Attribution -
* You must give appropriate credit, provide a link to the license, and indicate if changes were made.
* You may do so in any reasonable manner, but not in any way that suggests the licensor endorses you or your use.
* NonCommercial -
* You may not use the material for commercial purposes.
* ShareAlike -
* If you remix, transform, or build upon the material,
* you must distribute your contributions under the same license as the original.
* No additional restrictions -
* You may not apply legal terms or technological measures that legally restrict others from doing anything the
* license permits.
*
* Check the Creative Commons website for any details, legalese, and updates.
*/
package nz.co.gregs.dbvolution.internal.query;
import java.util.ArrayList;
import java.util.List;
import nz.co.gregs.dbvolution.expressions.BooleanExpression;
/**
* Helper class to store the progress of turning the DBQuery into an actual
* piece of SQL.
*
*/
public class QueryState {
// private QueryGraph graph;
final List remainingExpressions;
private final List consumedExpressions = new ArrayList<>();
private final List requiredConditions = new ArrayList<>();
private final List optionalConditions = new ArrayList<>();
private boolean queryIsFullOuterJoin = true;
private boolean queryIsLeftOuterJoin = true;
// private final boolean queryIsNativeQuery = true;
boolean mayRequireOnClause = false;
private boolean hasBeenOrdered = false;
public QueryState(QueryDetails details) {
this.remainingExpressions = new ArrayList<>(details.getConditions());
}
public Iterable getRemainingExpressions() {
return new ArrayList<>(remainingExpressions);
}
public void consumeExpression(BooleanExpression expr) {
remainingExpressions.remove(expr);
consumedExpressions.add(expr);
}
// private void setGraph(QueryGraph queryGraph) {
// this.graph = queryGraph;
// }
/**
* Adds a condition that pertains to a required table.
*
* @param conditionClause conditionClause
*/
public void addRequiredCondition(String conditionClause) {
requiredConditions.add(conditionClause);
}
public void addRequiredConditions(List conditionClauses) {
requiredConditions.addAll(conditionClauses);
}
/**
* Returns all the current conditions that pertain to required tables.
*
* Support DBvolution at
* Patreon
*
* @return a list of SQL snippets representing required conditions.
*/
public List getRequiredConditions() {
return requiredConditions;
}
/**
* Add conditions that pertain to optional tables.
*
* @param conditionClauses conditionClauses
*/
public void addOptionalConditions(List conditionClauses) {
optionalConditions.addAll(conditionClauses);
}
/**
* Returns all the current conditions that pertain to options tables.
*
* Support DBvolution at
* Patreon
*
* @return a list of SQL snippets representing conditions on optional
* tables.
*/
public List getOptionalConditions() {
return optionalConditions;
}
public void addedFullOuterJoinToQuery() {
queryIsFullOuterJoin = queryIsFullOuterJoin && true;
queryIsLeftOuterJoin = false;
}
public void addedLeftOuterJoinToQuery() {
queryIsLeftOuterJoin = queryIsLeftOuterJoin && true;
queryIsFullOuterJoin = false;
}
public void addedInnerJoinToQuery() {
queryIsLeftOuterJoin = false;
queryIsFullOuterJoin = false;
}
public boolean isFullOuterJoin() {
return queryIsFullOuterJoin;
}
public void addAllToRemainingExpressions(List relationshipsAsBooleanExpressions) {
remainingExpressions.addAll(relationshipsAsBooleanExpressions);
}
public synchronized boolean hasBeenOrdered() {
return hasBeenOrdered;
}
public synchronized void setHasBeenOrdered(boolean b) {
hasBeenOrdered = b;
}
}