View Javadoc
1   /*
2    * Licensed to the Apache Software Foundation (ASF) under one or more
3    * contributor license agreements.  See the NOTICE file distributed with
4    * this work for additional information regarding copyright ownership.
5    * The ASF licenses this file to You under the Apache License, Version 2.0
6    * (the "License"); you may not use this file except in compliance with
7    * the License.  You may obtain a copy of the License at
8    *
9    *     http://www.apache.org/licenses/LICENSE-2.0
10   *
11   * Unless required by applicable law or agreed to in writing, software
12   * distributed under the License is distributed on an "AS IS" BASIS,
13   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14   * See the License for the specific language governing permissions and
15   * limitations under the License.
16   */
17  
18  package org.apache.shardingsphere.data.pipeline.core.metadata.generator;
19  
20  import lombok.AccessLevel;
21  import lombok.NoArgsConstructor;
22  import lombok.extern.slf4j.Slf4j;
23  import org.apache.shardingsphere.data.pipeline.core.sqlbuilder.dialect.DialectPipelineSQLBuilder;
24  import org.apache.shardingsphere.infra.database.core.spi.DatabaseTypedSPILoader;
25  import org.apache.shardingsphere.infra.database.core.type.DatabaseType;
26  
27  import javax.sql.DataSource;
28  import java.sql.SQLException;
29  import java.util.ArrayList;
30  import java.util.List;
31  
32  /**
33   * Pipeline DDL generator.
34   */
35  @NoArgsConstructor(access = AccessLevel.PRIVATE)
36  @Slf4j
37  public final class PipelineDDLGenerator {
38      
39      /**
40       * Generate logic DDL.
41       *
42       * @param databaseType database type
43       * @param sourceDataSource source data source
44       * @param schemaName schema name
45       * @param sourceTableName source table name
46       * @param targetTableName target table name
47       * @return DDL SQL
48       * @throws SQLException SQL exception 
49       */
50      public static List<String> generateLogicDDL(final DatabaseType databaseType, final DataSource sourceDataSource,
51                                                  final String schemaName, final String sourceTableName, final String targetTableName) throws SQLException {
52          long startTimeMillis = System.currentTimeMillis();
53          List<String> result = new ArrayList<>(DatabaseTypedSPILoader.getService(DialectPipelineSQLBuilder.class, databaseType)
54                  .buildCreateTableSQLs(sourceDataSource, schemaName, sourceTableName));
55          log.info("generateLogicDDL, databaseType={}, schemaName={}, sourceTableName={}, targetTableName={}, cost {} ms",
56                  databaseType.getType(), schemaName, sourceTableName, targetTableName, System.currentTimeMillis() - startTimeMillis);
57          return result;
58      }
59  }