Skip to content

Commit 355504f

Browse files
committed
antlr error listener added & jackson auto module discovery disabled
1 parent 6a6aa6b commit 355504f

14 files changed

Lines changed: 106 additions & 54 deletions

README.md

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ To use the package, you need to add following dependency:
3636
<dependency>
3737
<groupId>io.github.mnesimiyilmaz</groupId>
3838
<artifactId>sql4json</artifactId>
39-
<version>0.0.1</version>
39+
<version>0.0.2</version>
4040
</dependency>
4141
```
4242

@@ -186,6 +186,10 @@ SELECT name, age FROM $r WHERE id > 0
186186
>>>
187187
SELECT objectField FROM $r.data WHERE groupName = 'users'
188188
```
189+
Or
190+
```sql
191+
SELECT name, age FROM (SELECT objectField FROM $r.data WHERE groupName = 'users') WHERE id > 0
192+
```
189193

190194
## Functions
191195
### Lower & Upper

pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66

77
<groupId>io.github.mnesimiyilmaz</groupId>
88
<artifactId>sql4json</artifactId>
9-
<version>0.0.1</version>
9+
<version>0.0.2</version>
1010
<packaging>jar</packaging>
1111
<name>SQL4Json</name>
1212
<description>Filter, aggregate and select data from json using SQL like query.</description>

src/main/java/io/github/mnesimiyilmaz/sql4json/SQL4JsonListenerImpl.java

Lines changed: 18 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -5,23 +5,24 @@
55
import io.github.mnesimiyilmaz.sql4json.definitions.JsonColumnWithNonAggFunctionDefinion;
66
import io.github.mnesimiyilmaz.sql4json.definitions.OrderByColumnDefinion;
77
import io.github.mnesimiyilmaz.sql4json.definitions.SelectColumnDefinition;
8+
import io.github.mnesimiyilmaz.sql4json.generated.SQL4JsonBaseListener;
89
import io.github.mnesimiyilmaz.sql4json.generated.SQL4JsonParser;
910
import io.github.mnesimiyilmaz.sql4json.processor.SQLBuilder;
1011
import io.github.mnesimiyilmaz.sql4json.processor.SQLProcessor;
11-
import io.github.mnesimiyilmaz.sql4json.generated.SQL4JsonBaseListener;
1212
import org.antlr.v4.runtime.tree.ParseTree;
1313

14-
import java.util.*;
14+
import java.util.ArrayList;
15+
import java.util.List;
1516

1617
/**
1718
* @author mnesimiyilmaz
1819
*/
1920
class SQL4JsonListenerImpl extends SQL4JsonBaseListener {
2021

2122
private final List<SelectColumnDefinition> selectedColumns;
22-
private final JsonNode dataNode;
23-
private final SQLProcessor sqlProcessor;
24-
private String rootPath;
23+
private final JsonNode dataNode;
24+
private final SQLProcessor sqlProcessor;
25+
private String rootPath;
2526

2627
public SQL4JsonListenerImpl(JsonNode jsonNode) {
2728
this.dataNode = jsonNode;
@@ -30,59 +31,59 @@ public SQL4JsonListenerImpl(JsonNode jsonNode) {
3031
}
3132

3233
@Override
33-
public void enterRootNode(io.github.mnesimiyilmaz.sql4json.generated.SQL4JsonParser.RootNodeContext ctx) {
34+
public void enterRootNode(SQL4JsonParser.RootNodeContext ctx) {
3435
String path = ctx.getText();
35-
if(path.startsWith("$r")){
36+
if (path.startsWith("$r")) {
3637
this.rootPath = path.equalsIgnoreCase("$r") ? "" : path.substring(3);
3738
}
3839
getBuilder(ctx).setSelectedColumns(new ArrayList<>(selectedColumns));
3940
selectedColumns.clear();
4041
}
4142

4243
@Override
43-
public void enterSelectColumn(io.github.mnesimiyilmaz.sql4json.generated.SQL4JsonParser.SelectColumnContext ctx) {
44+
public void enterSelectColumn(SQL4JsonParser.SelectColumnContext ctx) {
4445
selectedColumns.add(new SelectColumnDefinition(ctx));
4546
}
4647

4748
@Override
48-
public void enterSelectedColumns(io.github.mnesimiyilmaz.sql4json.generated.SQL4JsonParser.SelectedColumnsContext ctx) {
49+
public void enterSelectedColumns(SQL4JsonParser.SelectedColumnsContext ctx) {
4950
if (ctx.ASTERISK() != null) {
5051
selectedColumns.add(SelectColumnDefinition.ofAsterisk());
5152
}
5253
}
5354

5455
@Override
55-
public void enterWhereConditions(io.github.mnesimiyilmaz.sql4json.generated.SQL4JsonParser.WhereConditionsContext ctx) {
56+
public void enterWhereConditions(SQL4JsonParser.WhereConditionsContext ctx) {
5657
getBuilder(ctx).setWhereClause(new ConditionProcessor(ctx.conditions()).process());
5758
}
5859

5960
@Override
60-
public void enterHavingConditions(io.github.mnesimiyilmaz.sql4json.generated.SQL4JsonParser.HavingConditionsContext ctx) {
61+
public void enterHavingConditions(SQL4JsonParser.HavingConditionsContext ctx) {
6162
getBuilder(ctx).setHavingClause(new ConditionProcessor(ctx.conditions()).process());
6263
}
6364

6465
@Override
65-
public void enterGroupByColumn(io.github.mnesimiyilmaz.sql4json.generated.SQL4JsonParser.GroupByColumnContext ctx) {
66+
public void enterGroupByColumn(SQL4JsonParser.GroupByColumnContext ctx) {
6667
getBuilder(ctx).addGroupByColumn(new JsonColumnWithNonAggFunctionDefinion(ctx.jsonColumnWithNonAggFunction()));
6768
}
6869

6970
@Override
70-
public void enterOrderByColumn(io.github.mnesimiyilmaz.sql4json.generated.SQL4JsonParser.OrderByColumnContext ctx) {
71+
public void enterOrderByColumn(SQL4JsonParser.OrderByColumnContext ctx) {
7172
getBuilder(ctx).addOrderByColumn(new OrderByColumnDefinion(ctx));
7273
}
7374

74-
public JsonNode getResult(){
75+
public JsonNode getResult() {
7576
return sqlProcessor.process(dataNode, rootPath);
7677
}
7778

78-
private SQLBuilder getBuilder(ParseTree tree){
79+
private SQLBuilder getBuilder(ParseTree tree) {
7980
return sqlProcessor.getBuilder(sql4JsonContextNameOf(tree));
8081
}
8182

82-
private static String sql4JsonContextNameOf(ParseTree tree){
83+
private static String sql4JsonContextNameOf(ParseTree tree) {
8384
ParseTree parent = tree.getParent();
8485

85-
while (!(parent instanceof SQL4JsonParser.Sql4jsonContext)){
86+
while (!(parent instanceof SQL4JsonParser.Sql4jsonContext)) {
8687
parent = parent.getParent();
8788
}
8889
return parent.toString();

src/main/java/io/github/mnesimiyilmaz/sql4json/SQL4JsonProcessor.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import com.fasterxml.jackson.databind.JsonNode;
44
import io.github.mnesimiyilmaz.sql4json.generated.SQL4JsonLexer;
55
import io.github.mnesimiyilmaz.sql4json.generated.SQL4JsonParser;
6+
import io.github.mnesimiyilmaz.sql4json.utils.AntlrSyntaxErrorListener;
67
import org.antlr.v4.runtime.CharStreams;
78
import org.antlr.v4.runtime.CommonTokenStream;
89
import org.antlr.v4.runtime.tree.ParseTreeWalker;
@@ -16,7 +17,7 @@ public class SQL4JsonProcessor {
1617

1718
private SQL4JsonInput sql4JsonInput;
1819
private int currentQuery;
19-
private JsonNode result;
20+
private JsonNode result;
2021

2122
public SQL4JsonProcessor(SQL4JsonInput sql4JsonInput) {
2223
this.queries = sql4JsonInput.getSql().split(">>>");
@@ -28,8 +29,11 @@ public JsonNode getResult() {
2829
if (result != null) return result;
2930

3031
do {
32+
AntlrSyntaxErrorListener errorListener = new AntlrSyntaxErrorListener();
3133
SQL4JsonLexer lexer = new SQL4JsonLexer(CharStreams.fromString(sql4JsonInput.getSql()));
34+
lexer.addErrorListener(errorListener);
3235
SQL4JsonParser parser = new SQL4JsonParser(new CommonTokenStream(lexer));
36+
parser.addErrorListener(errorListener);
3337
SQL4JsonListenerImpl listener = new SQL4JsonListenerImpl(sql4JsonInput.getRootNode());
3438
new ParseTreeWalker().walk(listener, parser.sql4json());
3539
result = listener.getResult();

src/main/java/io/github/mnesimiyilmaz/sql4json/condition/ConditionProcessor.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
package io.github.mnesimiyilmaz.sql4json.condition;
22

3-
import io.github.mnesimiyilmaz.sql4json.generated.SQL4JsonParser;
43
import io.github.mnesimiyilmaz.sql4json.definitions.JsonColumnWithNonAggFunctionDefinion;
4+
import io.github.mnesimiyilmaz.sql4json.generated.SQL4JsonParser;
55
import io.github.mnesimiyilmaz.sql4json.utils.ComparisonUtils;
66
import io.github.mnesimiyilmaz.sql4json.utils.FieldKey;
77
import io.github.mnesimiyilmaz.sql4json.utils.ValueUtils;

src/main/java/io/github/mnesimiyilmaz/sql4json/definitions/JsonColumnWithAggFunctionDefinion.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,8 @@ public class JsonColumnWithAggFunctionDefinion {
1212

1313
private final SQL4JsonParser.JsonColumnWithAggFunctionContext ctx;
1414
private final JsonColumnWithNonAggFunctionDefinion columnDefinition;
15-
private final AggregateFunction aggregateFunction;
16-
private final boolean isAsterisk;
15+
private final AggregateFunction aggregateFunction;
16+
private final boolean isAsterisk;
1717

1818
public JsonColumnWithAggFunctionDefinion(SQL4JsonParser.JsonColumnWithAggFunctionContext ctx) {
1919
this.ctx = ctx;

src/main/java/io/github/mnesimiyilmaz/sql4json/definitions/JsonColumnWithNonAggFunctionDefinion.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ public class JsonColumnWithNonAggFunctionDefinion {
1818

1919
private final SQL4JsonParser.JsonColumnWithNonAggFunctionContext columnContext;
2020
private final String columnName;
21-
private final Function<Object, Object> valueDecorator;
21+
private final Function<Object, Object> valueDecorator;
2222

2323
public JsonColumnWithNonAggFunctionDefinion(SQL4JsonParser.JsonColumnWithNonAggFunctionContext columnContext) {
2424
this.columnContext = columnContext;

src/main/java/io/github/mnesimiyilmaz/sql4json/definitions/SelectColumnDefinition.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,10 +9,10 @@
99
@Getter
1010
public class SelectColumnDefinition {
1111

12-
private final SQL4JsonParser.SelectColumnContext ctx;
13-
private final JsonColumnWithAggFunctionDefinion columnDefinition;
14-
private final String alias;
15-
private final boolean isAsterisk;
12+
private final SQL4JsonParser.SelectColumnContext ctx;
13+
private final JsonColumnWithAggFunctionDefinion columnDefinition;
14+
private final String alias;
15+
private final boolean isAsterisk;
1616

1717
private SelectColumnDefinition() {
1818
this.ctx = null;

src/main/java/io/github/mnesimiyilmaz/sql4json/processor/SQLBuilder.java

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -14,23 +14,23 @@
1414
public class SQLBuilder {
1515

1616
@Setter
17-
private List<SelectColumnDefinition> selectedColumns;
17+
private List<SelectColumnDefinition> selectedColumns;
1818
@Setter
19-
private CriteriaNode whereClause;
19+
private CriteriaNode whereClause;
2020
private List<JsonColumnWithNonAggFunctionDefinion> groupByColumns;
2121
@Setter
22-
private CriteriaNode havingClause;
23-
private List<OrderByColumnDefinion> orderByColumns;
22+
private CriteriaNode havingClause;
23+
private List<OrderByColumnDefinion> orderByColumns;
2424

25-
public void addGroupByColumn(JsonColumnWithNonAggFunctionDefinion groupByColumn){
26-
if(this.groupByColumns == null)
25+
public void addGroupByColumn(JsonColumnWithNonAggFunctionDefinion groupByColumn) {
26+
if (this.groupByColumns == null)
2727
this.groupByColumns = new ArrayList<>();
2828

2929
this.groupByColumns.add(groupByColumn);
3030
}
3131

32-
public void addOrderByColumn(OrderByColumnDefinion orderByColumn){
33-
if(this.orderByColumns == null)
32+
public void addOrderByColumn(OrderByColumnDefinion orderByColumn) {
33+
if (this.orderByColumns == null)
3434
this.orderByColumns = new ArrayList<>();
3535

3636
this.orderByColumns.add(orderByColumn);

src/main/java/io/github/mnesimiyilmaz/sql4json/processor/SQLConstruct.java

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -11,20 +11,23 @@
1111
import lombok.AccessLevel;
1212
import lombok.RequiredArgsConstructor;
1313

14-
import java.util.*;
14+
import java.util.HashMap;
15+
import java.util.List;
16+
import java.util.Map;
17+
import java.util.Optional;
1518
import java.util.function.Function;
1619
import java.util.stream.Collectors;
1720

1821
@RequiredArgsConstructor(access = AccessLevel.PRIVATE)
1922
class SQLConstruct {
20-
private List<SelectColumnDefinition> selectedColumns;
21-
private CriteriaNode whereClause;
23+
private List<SelectColumnDefinition> selectedColumns;
24+
private CriteriaNode whereClause;
2225
private List<JsonColumnWithNonAggFunctionDefinion> groupByColumns;
23-
private CriteriaNode havingClause;
24-
private List<OrderByColumnDefinion> orderByColumns;
26+
private CriteriaNode havingClause;
27+
private List<OrderByColumnDefinion> orderByColumns;
2528

26-
public static SQLConstruct newInstance(SQLBuilder builder){
27-
SQLConstruct sqlConstruct = new SQLConstruct();
29+
public static SQLConstruct newInstance(SQLBuilder builder) {
30+
SQLConstruct sqlConstruct = new SQLConstruct();
2831
sqlConstruct.selectedColumns = builder.getSelectedColumns();
2932
sqlConstruct.whereClause = builder.getWhereClause();
3033
sqlConstruct.groupByColumns = builder.getGroupByColumns();

0 commit comments

Comments
 (0)