Skip to content

Commit

Permalink
Support model on model (#379)
Browse files Browse the repository at this point in the history
* Enhance TestModelSqlRewrire

* Support model based on model
  • Loading branch information
brandboat committed Oct 27, 2023
1 parent c69ebd4 commit 75bc4b2
Show file tree
Hide file tree
Showing 3 changed files with 392 additions and 249 deletions.
28 changes: 24 additions & 4 deletions accio-base/src/main/java/io/accio/base/dto/Model.java
Original file line number Diff line number Diff line change
Expand Up @@ -20,14 +20,17 @@

import java.util.List;
import java.util.Objects;
import java.util.stream.Stream;

import static io.accio.base.Utils.checkArgument;
import static java.util.Objects.requireNonNull;

public class Model
implements PreAggregationInfo
{
private final String name;
private final String refSql;
private final String baseModel;
private final List<Column> columns;
private final String primaryKey;
private final boolean preAggregated;
Expand All @@ -41,7 +44,7 @@ public static Model model(String name, String refSql, List<Column> columns)

public static Model model(String name, String refSql, List<Column> columns, boolean preAggregated)
{
return new Model(name, refSql, columns, null, preAggregated, null, null);
return new Model(name, refSql, null, columns, null, preAggregated, null, null);
}

public static Model model(String name, String refSql, List<Column> columns, String primaryKey)
Expand All @@ -51,21 +54,30 @@ public static Model model(String name, String refSql, List<Column> columns, Stri

public static Model model(String name, String refSql, List<Column> columns, String primaryKey, String description)
{
return new Model(name, refSql, columns, primaryKey, false, null, description);
return new Model(name, refSql, null, columns, primaryKey, false, null, description);
}

public static Model onModel(String name, String baseModel, List<Column> columns, String primaryKey)
{
return new Model(name, null, baseModel, columns, primaryKey, false, null, null);
}

@JsonCreator
public Model(
@JsonProperty("name") String name,
@JsonProperty("refSql") String refSql,
@JsonProperty("baseModel") String baseModel,
@JsonProperty("columns") List<Column> columns,
@JsonProperty("primaryKey") String primaryKey,
@JsonProperty("preAggregated") boolean preAggregated,
@JsonProperty("refreshTime") Duration refreshTime,
@JsonProperty("description") String description)
{
this.name = requireNonNull(name, "name is null");
this.refSql = requireNonNull(refSql, "refSql is null");
checkArgument(Stream.of(refSql, baseModel).filter(Objects::nonNull).count() == 1,
"either none or more than one of (refSql, baseModel) are set");
this.refSql = refSql;
this.baseModel = baseModel;
this.columns = columns == null ? List.of() : columns;
this.primaryKey = primaryKey;
this.preAggregated = preAggregated;
Expand All @@ -85,6 +97,12 @@ public String getRefSql()
return refSql;
}

@JsonProperty
public String getBaseModel()
{
return baseModel;
}

@JsonProperty
public List<Column> getColumns()
{
Expand Down Expand Up @@ -130,6 +148,7 @@ public boolean equals(Object obj)
return preAggregated == that.preAggregated
&& Objects.equals(name, that.name)
&& Objects.equals(refSql, that.refSql)
&& Objects.equals(baseModel, that.baseModel)
&& Objects.equals(columns, that.columns)
&& Objects.equals(primaryKey, that.primaryKey)
&& Objects.equals(refreshTime, that.refreshTime)
Expand All @@ -139,7 +158,7 @@ public boolean equals(Object obj)
@Override
public int hashCode()
{
return Objects.hash(name, refSql, columns, primaryKey, description);
return Objects.hash(name, refSql, baseModel, columns, primaryKey, description);
}

@Override
Expand All @@ -148,6 +167,7 @@ public String toString()
return "Model{" +
"name='" + name + '\'' +
", refSql='" + refSql + '\'' +
", baseModel='" + baseModel + '\'' +
", columns=" + columns +
", primaryKey='" + primaryKey + '\'' +
", preAggregated=" + preAggregated +
Expand Down
Loading

0 comments on commit 75bc4b2

Please sign in to comment.