1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 package org.apache.shardingsphere.data.pipeline.core.sqlbuilder.sql;
19
20 import org.apache.shardingsphere.data.pipeline.core.sqlbuilder.dialect.DialectPipelineSQLBuilder;
21 import org.apache.shardingsphere.data.pipeline.core.sqlbuilder.segment.PipelineSQLSegmentBuilder;
22 import org.apache.shardingsphere.database.connector.core.spi.DatabaseTypedSPILoader;
23 import org.apache.shardingsphere.database.connector.core.type.DatabaseType;
24
25 import java.util.Optional;
26
27
28
29
30 public final class PipelinePrepareSQLBuilder {
31
32 private final DialectPipelineSQLBuilder dialectSQLBuilder;
33
34 private final PipelineSQLSegmentBuilder sqlSegmentBuilder;
35
36 public PipelinePrepareSQLBuilder(final DatabaseType databaseType) {
37 dialectSQLBuilder = DatabaseTypedSPILoader.getService(DialectPipelineSQLBuilder.class, databaseType);
38 sqlSegmentBuilder = new PipelineSQLSegmentBuilder(databaseType);
39 }
40
41
42
43
44
45
46
47 public Optional<String> buildCreateSchemaSQL(final String schemaName) {
48 return dialectSQLBuilder.buildCreateSchemaSQL(sqlSegmentBuilder.getEscapedIdentifier(schemaName));
49 }
50
51
52
53
54
55
56
57
58 public String buildDropSQL(final String schemaName, final String tableName) {
59 return String.format("DROP TABLE IF EXISTS %s", sqlSegmentBuilder.getQualifiedTableName(schemaName, tableName));
60 }
61
62
63
64
65
66
67
68
69 public String buildCountSQL(final String schemaName, final String tableName) {
70 return String.format("SELECT COUNT(*) FROM %s", sqlSegmentBuilder.getQualifiedTableName(schemaName, tableName));
71 }
72
73
74
75
76
77
78
79
80
81 public Optional<String> buildEstimatedCountSQL(final String catalogName, final String schemaName, final String tableName) {
82 return dialectSQLBuilder.buildEstimatedCountSQL(catalogName, sqlSegmentBuilder.getQualifiedTableName(schemaName, tableName));
83 }
84
85
86
87
88
89
90
91
92
93 public String buildUniqueKeyMinMaxValuesSQL(final String schemaName, final String tableName, final String uniqueKey) {
94 String escapedUniqueKey = sqlSegmentBuilder.getEscapedIdentifier(uniqueKey);
95 return String.format("SELECT MIN(%s), MAX(%s) FROM %s", escapedUniqueKey, escapedUniqueKey, sqlSegmentBuilder.getQualifiedTableName(schemaName, tableName));
96 }
97
98
99
100
101
102
103
104
105 public String buildCheckEmptyTableSQL(final String schemaName, final String tableName) {
106 return dialectSQLBuilder.buildCheckEmptyTableSQL(sqlSegmentBuilder.getQualifiedTableName(schemaName, tableName));
107 }
108
109
110
111
112
113
114
115
116
117
118 public String buildSplitByUniqueKeyRangedSQL(final String schemaName, final String tableName, final String uniqueKey, final boolean hasLowerBound) {
119 String escapedUniqueKey = sqlSegmentBuilder.getEscapedIdentifier(uniqueKey);
120 String subQueryClause = dialectSQLBuilder.buildSplitByUniqueKeyRangedSubqueryClause(sqlSegmentBuilder.getQualifiedTableName(schemaName, tableName), escapedUniqueKey, hasLowerBound);
121 return String.format("SELECT MAX(%s), COUNT(1), MIN(%s) FROM (%s) t", escapedUniqueKey, escapedUniqueKey, subQueryClause);
122 }
123 }