diff --git a/src/compiler/compiler.go b/src/compiler/compiler.go index c098251..36b682e 100644 --- a/src/compiler/compiler.go +++ b/src/compiler/compiler.go @@ -154,10 +154,16 @@ func (compiler *Compiler) Generate(query *dom.Query) string { var methods strings.Builder for i := 0; i < filtersCount; i++ { var nextFieldName = "" + var titleNextFieldName = "" if i == filtersCount-1 { nextFieldName = "Final" + titleNextFieldName = "Final" } else { nextFieldName = query.Filters[i+1].FieldName + titleNextFieldName = strings.Title(nextFieldName) + if query.Filters[i+1].Operation == dom.In { + titleNextFieldName = pluralize.Plural(titleNextFieldName) + } } var currFieldType = query.Filters[i].FieldType @@ -165,11 +171,11 @@ func (compiler *Compiler) Generate(query *dom.Query) string { var currOperationType = query.Filters[i].Operation switch currOperationType { case dom.Eq: - methods.WriteString(fmt.Sprintf(filterMethodTemplate, name, strings.Title(nextFieldName), currFieldName, currFieldType, currFieldName, + methods.WriteString(fmt.Sprintf(filterMethodTemplate, name, titleNextFieldName, currFieldName, currFieldType, currFieldName, collectionName, currFieldName, currFieldName)) case dom.In: var pluralCurrentFieldName = pluralize.Plural(currFieldName) - methods.WriteString(fmt.Sprintf(filterMethodOperatorTemplate, name, strings.Title(nextFieldName), pluralCurrentFieldName, currFieldType, + methods.WriteString(fmt.Sprintf(filterMethodOperatorTemplate, name, titleNextFieldName, pluralCurrentFieldName, currFieldType, pluralCurrentFieldName, collectionName, currFieldName, "in", pluralCurrentFieldName)) } diff --git a/src/compiler/compiler_test.go b/src/compiler/compiler_test.go index f9eedaa..62e8e39 100644 --- a/src/compiler/compiler_test.go +++ b/src/compiler/compiler_test.go @@ -83,8 +83,10 @@ func TestSanity2(t *testing.T) { Name: "Select", Collection: "io.harness.beans.DelegateTask", Filters: []dom.Filter{ - {FieldType: "String", FieldName: "uuid", Operation: dom.In}, - {FieldType: "String", FieldName: "accountId", Operation: dom.Eq}, + {FieldType: "String", FieldName: "orange", Operation: dom.In}, + {FieldType: "String", FieldName: "worm", Operation: dom.Eq}, + {FieldType: "String", FieldName: "apple", Operation: dom.In}, + {FieldType: "String", FieldName: "banana", Operation: dom.In}, }, ProjectFields: []string{"foo", "bar"}, } @@ -99,23 +101,29 @@ import com.google.common.collect.ImmutableList; import java.util.List; public class DelegateTaskSelectQuery implements PersistentQuery { - public static SelectQueryUuids create(HPersistence persistence) { + public static SelectQueryOranges create(HPersistence persistence) { return new QueryImpl(persistence.createQuery(DelegateTask.class) .project(DelegateTaskKeys.foo, true) .project(DelegateTaskKeys.bar, true)); } - public interface SelectQueryUuids { - SelectQueryAccountId uuids(Iterable uuids); + public interface SelectQueryOranges { + SelectQueryWorm oranges(Iterable oranges); } - public interface SelectQueryAccountId { - SelectQueryFinal accountId(String accountId); + public interface SelectQueryWorm { + SelectQueryApples worm(String worm); + } + public interface SelectQueryApples { + SelectQueryBananas apples(Iterable apples); + } + public interface SelectQueryBananas { + SelectQueryFinal bananas(Iterable bananas); } public interface SelectQueryFinal { Query query(); } - private static class QueryImpl implements SelectQueryUuids, SelectQueryAccountId, SelectQueryFinal { + private static class QueryImpl implements SelectQueryOranges, SelectQueryWorm, SelectQueryApples, SelectQueryBananas, SelectQueryFinal { Query query; private QueryImpl(Query query) { @@ -123,14 +131,26 @@ public class DelegateTaskSelectQuery implements PersistentQuery { } @Override - public SelectQueryAccountId uuids(Iterable uuids) { - query.field(DelegateTaskKeys.uuid).in(uuids); + public SelectQueryWorm oranges(Iterable oranges) { + query.field(DelegateTaskKeys.orange).in(oranges); return this; } @Override - public SelectQueryFinal accountId(String accountId) { - query.filter(DelegateTaskKeys.accountId, accountId); + public SelectQueryApples worm(String worm) { + query.filter(DelegateTaskKeys.worm, worm); + return this; + } + + @Override + public SelectQueryBananas apples(Iterable apples) { + query.field(DelegateTaskKeys.apple).in(apples); + return this; + } + + @Override + public SelectQueryFinal bananas(Iterable bananas) { + query.field(DelegateTaskKeys.banana).in(bananas); return this; }