1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 package org.apache.shardingsphere.sharding.route.engine.condition.engine;
19
20 import lombok.RequiredArgsConstructor;
21 import org.apache.shardingsphere.infra.binder.context.statement.SQLStatementContext;
22 import org.apache.shardingsphere.infra.binder.context.statement.dml.InsertStatementContext;
23 import org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
24 import org.apache.shardingsphere.infra.metadata.database.rule.RuleMetaData;
25 import org.apache.shardingsphere.sharding.route.engine.condition.ShardingCondition;
26 import org.apache.shardingsphere.sharding.rule.ShardingRule;
27 import org.apache.shardingsphere.timeservice.core.rule.TimestampServiceRule;
28
29 import java.util.List;
30
31
32
33
34 @RequiredArgsConstructor
35 public final class ShardingConditionEngine {
36
37 private final RuleMetaData globalRuleMetaData;
38
39 private final ShardingSphereDatabase database;
40
41 private final ShardingRule shardingRule;
42
43
44
45
46
47
48
49
50 public List<ShardingCondition> createShardingConditions(final SQLStatementContext sqlStatementContext, final List<Object> params) {
51 TimestampServiceRule timestampServiceRule = globalRuleMetaData.getSingleRule(TimestampServiceRule.class);
52 return sqlStatementContext instanceof InsertStatementContext
53 ? new InsertClauseShardingConditionEngine(database, shardingRule, timestampServiceRule).createShardingConditions((InsertStatementContext) sqlStatementContext, params)
54 : new WhereClauseShardingConditionEngine(database, shardingRule, timestampServiceRule).createShardingConditions(sqlStatementContext, params);
55 }
56 }