1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 package org.apache.shardingsphere.infra.parser.sql;
19
20 import com.github.benmanes.caffeine.cache.LoadingCache;
21 import lombok.Getter;
22 import org.apache.shardingsphere.infra.database.core.type.DatabaseType;
23 import org.apache.shardingsphere.infra.parser.cache.SQLStatementCacheBuilder;
24 import org.apache.shardingsphere.sql.parser.api.CacheOption;
25 import org.apache.shardingsphere.sql.parser.sql.common.statement.SQLStatement;
26
27
28
29
30 public final class SQLStatementParserEngine {
31
32 private final SQLStatementParserExecutor sqlStatementParserExecutor;
33
34 private final LoadingCache<String, SQLStatement> sqlStatementCache;
35
36 @Getter
37 private final CacheOption sqlStatementCacheOption;
38
39 @Getter
40 private final CacheOption parseTreeCacheOption;
41
42 public SQLStatementParserEngine(final DatabaseType databaseType, final CacheOption sqlStatementCacheOption, final CacheOption parseTreeCacheOption) {
43 sqlStatementParserExecutor = new SQLStatementParserExecutor(databaseType, parseTreeCacheOption);
44 sqlStatementCache = SQLStatementCacheBuilder.build(databaseType, sqlStatementCacheOption, parseTreeCacheOption);
45 this.sqlStatementCacheOption = sqlStatementCacheOption;
46 this.parseTreeCacheOption = parseTreeCacheOption;
47 }
48
49
50
51
52
53
54
55
56 public SQLStatement parse(final String sql, final boolean useCache) {
57 return useCache ? sqlStatementCache.get(sql) : sqlStatementParserExecutor.parse(sql);
58 }
59 }