-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathSqlParserTest.java
92 lines (80 loc) · 3.26 KB
/
SqlParserTest.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
package com.chsql.parser;
import com.chsql.parser.common.ColumnExtra;
import com.chsql.parser.common.SqlContext;
import com.chsql.parser.common.TableExtra;
import com.chsql.parser.enums.JoinType;
import com.chsql.parser.model.SqlSelect;
import com.chsql.parser.util.JsonUtil;
import org.junit.Before;
import org.junit.Test;
import java.io.File;
import java.util.Comparator;
import java.util.Map;
import java.util.TreeMap;
/** sql parser test. */
public class SqlParserTest {
private ClassLoader classLoader;
private SqlContext context;
@Before
public void before() {
classLoader = Thread.currentThread().getContextClassLoader();
context =
new SqlContext.Builder()
.addTable(
new TableExtra(
1L,
"t_user_all",
"ods",
"Distributed('cluster_10shards_2replicas', 'ods', 't_user_local', javaHash(id))",
"id",
JoinType.CO_LOCATE))
.addTable(
new TableExtra(
2L,
"t_order_all",
"ods",
"Distributed('cluster_10shards_2replicas', 'ods', 't_order_local', javaHash(id))",
"user_id",
JoinType.CO_LOCATE))
.addColumn(new ColumnExtra("id", 1L, "Int64"))
.addColumn(new ColumnExtra("type", 1L, "String"))
.addColumn(new ColumnExtra("region", 1L, "String"))
.addColumn(new ColumnExtra("favor", 1L, "Array(String)"))
.addColumn(new ColumnExtra("props", 1L, "Map(String, UInt64)"))
.addColumn(new ColumnExtra("create_at", 1L, "DateTime64(3)"))
.addColumn(new ColumnExtra("id", 2L, "Int64"))
.addColumn(new ColumnExtra("user_id", 2L, "Int64"))
.addColumn(new ColumnExtra("goods", 2L, "Map(String, UInt32)"))
.build();
}
@Test
public void testGroupBy() {
parseToSQL("group_by_limit.json");
}
@Test
public void testWhere() {
parseToSQL("group_by_where_limit.json");
}
@Test
public void testTopNAndOther() {
parseToSQL("topn_and_other.json");
}
@Test
public void testTableJoin() {
parseToSQL("table_join.json");
}
@Test
public void testTreeMap() {
Map<String, String> treeMap = new TreeMap<>(Comparator.naturalOrder());
treeMap.put("1", "a");
treeMap.put("3", "c");
treeMap.put("2", "b");
treeMap.values().forEach(System.out::println);
}
private void parseToSQL(String jsonFile) {
File file = new File(classLoader.getResource(jsonFile).getFile());
SqlSelect select = JsonUtil.toBean(file, SqlSelect.class);
String sql = new SqlParser(context).parseQuery(select);
System.out.println(sql);
}
}