Skip to content

Commit

Permalink
Remove syntactic sugar and add to-1 relation support in model express…
Browse files Browse the repository at this point in the history
…ion (#378)

* Remove accio query syntax runtime support

* Implement model expression 1-1 relationship
  • Loading branch information
brandboat committed Oct 25, 2023
1 parent c0042d8 commit b995828
Show file tree
Hide file tree
Showing 51 changed files with 1,643 additions and 5,720 deletions.
16 changes: 16 additions & 0 deletions accio-base/src/main/java/io/accio/base/AccioMDL.java
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@

import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import io.accio.base.dto.Column;
import io.accio.base.dto.EnumDefinition;
import io.accio.base.dto.Manifest;
import io.accio.base.dto.Metric;
Expand Down Expand Up @@ -156,4 +157,19 @@ public Optional<View> getView(CatalogSchemaTableName name)
}
return Optional.empty();
}

public static Optional<Column> getRelationshipColumn(Model model, String name)
{
return getColumn(model, name)
.filter(column -> column.getRelationship().isPresent());
}

private static Optional<Column> getColumn(Model model, String name)
{
requireNonNull(model);
requireNonNull(name);
return model.getColumns().stream()
.filter(column -> column.getName().equals(name))
.findAny();
}
}
4 changes: 0 additions & 4 deletions accio-base/src/main/java/io/accio/base/dto/Column.java
Original file line number Diff line number Diff line change
Expand Up @@ -107,10 +107,6 @@ public Optional<String> getExpression()

public String getSqlExpression()
{
if (getRelationship().isPresent()) {
return String.format("'relationship<%s>' as %s", relationship, quote(name));
}

if (getExpression().isEmpty()) {
return quote(name);
}
Expand Down
10 changes: 9 additions & 1 deletion accio-base/src/main/java/io/accio/base/dto/Relationship.java
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@

import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.google.common.collect.Lists;

import java.util.Arrays;
import java.util.List;
Expand Down Expand Up @@ -53,7 +54,14 @@ public static Relationship relationship(String name, List<String> models, JoinTy

public static Relationship reverse(Relationship relationship)
{
return new Relationship(relationship.name, relationship.getModels(), JoinType.reverse(relationship.joinType), relationship.getCondition(), true, relationship.getManySideSortKeys(), relationship.getDescription());
return new Relationship(
relationship.name,
Lists.reverse(relationship.getModels()),
JoinType.reverse(relationship.joinType),
relationship.getCondition(),
true,
relationship.getManySideSortKeys(),
relationship.getDescription());
}

@JsonCreator
Expand Down
5 changes: 5 additions & 0 deletions accio-sqlrewrite/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,11 @@
<artifactId>annotations</artifactId>
</dependency>

<dependency>
<groupId>org.jgrapht</groupId>
<artifactId>jgrapht-core</artifactId>
</dependency>

<dependency>
<groupId>io.accio</groupId>
<artifactId>accio-testing</artifactId>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,16 +24,16 @@
import java.util.List;

import static io.accio.sqlrewrite.AccioSqlRewrite.ACCIO_SQL_REWRITE;
import static io.accio.sqlrewrite.EnumRewrite.ENUM_REWRITE;
import static io.accio.sqlrewrite.MetricViewSqlRewrite.METRIC_VIEW_SQL_REWRITE;
import static io.accio.sqlrewrite.SyntacticSugarRewrite.SYNTACTIC_SUGAR_REWRITE;
import static io.trino.sql.parser.ParsingOptions.DecimalLiteralTreatment.AS_DECIMAL;

public class AccioPlanner
{
public static final List<AccioRule> ALL_RULES = List.of(
METRIC_VIEW_SQL_REWRITE,
SYNTACTIC_SUGAR_REWRITE,
ACCIO_SQL_REWRITE);
ACCIO_SQL_REWRITE,
ENUM_REWRITE);
private static final SqlParser SQL_PARSER = new SqlParser();

private AccioPlanner() {}
Expand All @@ -46,12 +46,10 @@ public static String rewrite(String sql, SessionContext sessionContext, AccioMDL
public static String rewrite(String sql, SessionContext sessionContext, AccioMDL accioMDL, List<AccioRule> rules)
{
Statement statement = SQL_PARSER.createStatement(sql, new ParsingOptions(AS_DECIMAL));
Statement scopedStatement = ScopeAwareRewrite.SCOPE_AWARE_REWRITE.rewrite(statement, accioMDL, sessionContext);
Statement result = scopedStatement;
for (AccioRule rule : rules) {
// we will replace or rewrite sql node in sql rewrite, to avoid rewrite rules affect each other, format and parse sql before each rewrite
result = rule.apply(SQL_PARSER.createStatement(SqlFormatter.formatSql(result), new ParsingOptions(AS_DECIMAL)), sessionContext, accioMDL);
statement = rule.apply(SQL_PARSER.createStatement(SqlFormatter.formatSql(statement), new ParsingOptions(AS_DECIMAL)), sessionContext, accioMDL);
}
return SqlFormatter.formatSql(result);
return SqlFormatter.formatSql(statement);
}
}
Loading

0 comments on commit b995828

Please sign in to comment.