Skip to content
Snippets Groups Projects
Commit e5f8c299 authored by Julien Lopez's avatar Julien Lopez
Browse files

Fix design problems

parent 573885a6
No related branches found
No related tags found
No related merge requests found
......@@ -18,10 +18,10 @@ public final class QIRDBNode<DBRepr> extends QIRNode {
// The query in the representation for the database
private final DBRepr translation;
public QIRDBNode(final SourceSection source, final DBDriver<DBRepr> driver, final DBRepr translation) {
public QIRDBNode(final SourceSection source, final DBDriver<DBRepr> driver, final QIRNode toTranslate) {
super(source);
this.driver = driver;
this.translation = translation;
this.translation = driver.translate(toTranslate);
}
public final DBDriver<DBRepr> getDriver() {
......
......@@ -13,19 +13,19 @@ import qir.ast.value.*;
* visitor and the accept functions in the QIR nodes is T.
*/
public interface IQIRVisitor<T> {
public abstract <DBRepr> T visit(final QIRProject qirProject);
public abstract T visit(final QIRProject qirProject);
public abstract <DBRepr> T visit(final QIRScan qirScan);
public abstract T visit(final QIRScan qirScan);
public abstract <DBRepr> T visit(final QIRFilter qirFilter);
public abstract T visit(final QIRFilter qirFilter);
public abstract <DBRepr> T visit(final QIRGroup qirGroup);
public abstract T visit(final QIRGroup qirGroup);
public abstract <DBRepr> T visit(final QIROrder qirOrder);
public abstract T visit(final QIROrder qirOrder);
public abstract <DBRepr> T visit(final QIRJoin qirJoin);
public abstract T visit(final QIRJoin qirJoin);
public abstract <DBRepr> T visit(final QIRLimit qirLimit);
public abstract T visit(final QIRLimit qirLimit);
public default T visit(final QIROperator qirOperator) {
throw new UnsupportedOperationException("Error: unsupported operator " + qirOperator.getClass().getSimpleName() + ".");
......
......@@ -7,7 +7,6 @@ import qir.ast.expression.logic.*;
import qir.ast.expression.relational.*;
import qir.ast.operator.*;
import qir.ast.value.*;
import qir.driver.DBDriver;
import qir.util.QIRException;
/**
......@@ -15,97 +14,82 @@ import qir.util.QIRException;
*/
public final class QIRCompileVisitor implements IQIRVisitor<QIRNode> {
@Override
public final <DBRepr> QIRNode visit(final QIRProject qirProject) {
public final QIRNode visit(final QIRProject qirProject) {
final QIRNode child = qirProject.getChild().accept(this);
if (child instanceof QIRDBNode)
try {
@SuppressWarnings("unchecked")
final DBDriver<DBRepr> driver = ((QIRDBNode<DBRepr>) child).getDriver();
return new QIRDBNode<>(qirProject.getSourceSection(), driver, driver.translate(new QIRProject(qirProject.getSourceSection(), qirProject.getFormatter(), child)));
return new QIRDBNode<>(child.getSourceSection(), ((QIRDBNode<?>) child).getDriver(), new QIRProject(qirProject.getSourceSection(), qirProject.getFormatter(), child));
} catch (QIRException e) {
}
return new QIRProject(qirProject.getSourceSection(), qirProject.getFormatter().accept(this), child);
}
@Override
public final <DBRepr> QIRNode visit(final QIRScan qirScan) {
public final QIRNode visit(final QIRScan qirScan) {
final QIRNode table = qirScan.getTable().accept(this);
if (table instanceof QIRTable) {
@SuppressWarnings("unchecked")
final DBDriver<DBRepr> driver = ((QIRTable<DBRepr>) table).getDriver();
return new QIRDBNode<>(qirScan.getSourceSection(), driver, driver.translate(qirScan));
}
if (table instanceof QIRTable)
return new QIRDBNode<>(table.getSourceSection(), ((QIRTable<?>) table).getDriver(), qirScan);
return new QIRScan(qirScan.getSourceSection(), table);
}
@Override
public final <DBRepr> QIRNode visit(final QIRFilter qirFilter) {
public final QIRNode visit(final QIRFilter qirFilter) {
final QIRNode child = qirFilter.getChild().accept(this);
if (child instanceof QIRDBNode)
try {
@SuppressWarnings("unchecked")
final DBDriver<DBRepr> driver = ((QIRDBNode<DBRepr>) child).getDriver();
return new QIRDBNode<>(qirFilter.getSourceSection(), driver, driver.translate(new QIRFilter(qirFilter.getSourceSection(), qirFilter.getFilter(), child)));
return new QIRDBNode<>(child.getSourceSection(), ((QIRDBNode<?>) child).getDriver(), new QIRFilter(qirFilter.getSourceSection(), qirFilter.getFilter(), child));
} catch (QIRException e) {
}
return new QIRFilter(qirFilter.getSourceSection(), qirFilter.getFilter().accept(this), child);
}
@Override
public final <DBRepr> QIRNode visit(final QIRGroup qirGroup) {
public final QIRNode visit(final QIRGroup qirGroup) {
final QIRNode child = qirGroup.getChild().accept(this);
if (child instanceof QIRDBNode)
try {
@SuppressWarnings("unchecked")
final DBDriver<DBRepr> driver = ((QIRDBNode<DBRepr>) child).getDriver();
return new QIRDBNode<>(qirGroup.getSourceSection(), driver, driver.translate(new QIRGroup(qirGroup.getSourceSection(), qirGroup.getEq(), qirGroup.getGroup(), child)));
return new QIRDBNode<>(child.getSourceSection(), ((QIRDBNode<?>) child).getDriver(), new QIRGroup(qirGroup.getSourceSection(), qirGroup.getEq(), qirGroup.getGroup(), child));
} catch (QIRException e) {
}
return new QIRGroup(qirGroup.getSourceSection(), qirGroup.getEq().accept(this), qirGroup.getGroup().accept(this), child);
}
@Override
public final <DBRepr> QIRNode visit(final QIROrder qirOrder) {
public final QIRNode visit(final QIROrder qirOrder) {
final QIRNode child = qirOrder.getChild().accept(this);
if (child instanceof QIRDBNode)
try {
@SuppressWarnings("unchecked")
final DBDriver<DBRepr> driver = ((QIRDBNode<DBRepr>) child).getDriver();
return new QIRDBNode<>(qirOrder.getSourceSection(), driver, driver.translate(new QIROrder(qirOrder.getSourceSection(), qirOrder.getOrder(), child)));
return new QIRDBNode<>(child.getSourceSection(), ((QIRDBNode<?>) child).getDriver(), new QIROrder(qirOrder.getSourceSection(), qirOrder.getOrder(), child));
} catch (QIRException e) {
}
return new QIROrder(qirOrder.getSourceSection(), qirOrder.getOrder().accept(this), child);
}
@Override
public final <DBRepr> QIRNode visit(final QIRJoin qirJoin) {
public final QIRNode visit(final QIRJoin qirJoin) {
final QIRNode left = qirJoin.getLeft().accept(this);
final QIRNode right = qirJoin.getRight().accept(this);
if (left instanceof QIRDBNode && right instanceof QIRDBNode && ((QIRDBNode<?>) left).getDriver().equals(((QIRDBNode<?>) right).getDriver()))
try {
@SuppressWarnings("unchecked")
final DBDriver<DBRepr> driver = ((QIRDBNode<DBRepr>) left).getDriver();
return new QIRDBNode<>(qirJoin.getSourceSection(), driver, driver.translate(new QIRJoin(qirJoin.getSourceSection(), qirJoin.getFilter(), left, right)));
return new QIRDBNode<>(left.getSourceSection(), ((QIRDBNode<?>) left).getDriver(), new QIRJoin(qirJoin.getSourceSection(), qirJoin.getFilter(), left, right));
} catch (QIRException e) {
}
return new QIRJoin(qirJoin.getSourceSection(), qirJoin.getFilter().accept(this), left, right);
}
@Override
public final <DBRepr> QIRNode visit(final QIRLimit qirLimit) {
public final QIRNode visit(final QIRLimit qirLimit) {
final QIRNode child = qirLimit.getChild().accept(this);
if (child instanceof QIRDBNode)
try {
@SuppressWarnings("unchecked")
final DBDriver<DBRepr> driver = ((QIRDBNode<DBRepr>) child).getDriver();
return new QIRDBNode<>(qirLimit.getSourceSection(), driver, driver.translate(new QIRLimit(qirLimit.getSourceSection(), qirLimit.getLimit(), child)));
return new QIRDBNode<>(child.getSourceSection(), ((QIRDBNode<?>) child).getDriver(), new QIRLimit(qirLimit.getSourceSection(), qirLimit.getLimit(), child));
} catch (QIRException e) {
}
return new QIRLimit(qirLimit.getSourceSection(), qirLimit.getLimit().accept(this), child);
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment