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.infra.database.core.type.DatabaseType;
23 import org.apache.shardingsphere.infra.database.core.spi.DatabaseTypedSPILoader;
24
25 import java.util.Collection;
26 import java.util.Optional;
27 import java.util.stream.Collectors;
28
29
30
31
32 public final class PipelineDataConsistencyCalculateSQLBuilder {
33
34 private final DialectPipelineSQLBuilder dialectSQLBuilder;
35
36 private final PipelineSQLSegmentBuilder sqlSegmentBuilder;
37
38 public PipelineDataConsistencyCalculateSQLBuilder(final DatabaseType databaseType) {
39 dialectSQLBuilder = DatabaseTypedSPILoader.getService(DialectPipelineSQLBuilder.class, databaseType);
40 sqlSegmentBuilder = new PipelineSQLSegmentBuilder(databaseType);
41 }
42
43
44
45
46
47
48
49
50
51
52
53 public String buildQueryAllOrderingSQL(final String schemaName, final String tableName, final Collection<String> columnNames, final String uniqueKey, final boolean firstQuery) {
54 String qualifiedTableName = sqlSegmentBuilder.getQualifiedTableName(schemaName, tableName);
55 String escapedUniqueKey = sqlSegmentBuilder.getEscapedIdentifier(uniqueKey);
56 String queryColumns = columnNames.stream().map(sqlSegmentBuilder::getEscapedIdentifier).collect(Collectors.joining(","));
57 return firstQuery
58 ? String.format("SELECT %s FROM %s ORDER BY %s ASC", queryColumns, qualifiedTableName, escapedUniqueKey)
59 : String.format("SELECT %s FROM %s WHERE %s>? ORDER BY %s ASC", queryColumns, qualifiedTableName, escapedUniqueKey, escapedUniqueKey);
60 }
61
62
63
64
65
66
67
68
69
70 public Optional<String> buildCRC32SQL(final String schemaName, final String tableName, final String columnName) {
71 return dialectSQLBuilder.buildCRC32SQL(sqlSegmentBuilder.getQualifiedTableName(schemaName, tableName), sqlSegmentBuilder.getEscapedIdentifier(columnName));
72 }
73 }