添加Greenplum插件

This commit is contained in:
Donaghy
2024-07-18 15:12:19 +08:00
parent b83c16ca90
commit 49cfbaf58b
107 changed files with 350 additions and 115 deletions

View File

@@ -0,0 +1,36 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>dbswitch-product</artifactId>
<groupId>com.gitee.dbswitch</groupId>
<version>1.9.8</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>dbswitch-product-greenplum</artifactId>
<dependencies>
<dependency>
<groupId>com.gitee.dbswitch</groupId>
<artifactId>dbswitch-common</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>com.gitee.dbswitch</groupId>
<artifactId>dbswitch-core</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>com.gitee.dbswitch</groupId>
<artifactId>dbswitch-product-postgresql</artifactId>
<version>${project.version}</version>
</dependency>
</dependencies>
</project>

View File

@@ -0,0 +1,21 @@
// Copyright tang. All rights reserved.
// https://gitee.com/inrgihc/dbswitch
//
// Use of this source code is governed by a BSD-style license
//
// Author: tang (inrgihc@126.com)
// Date : 2020/1/2
// Location: beijing , china
/////////////////////////////////////////////////////////////
package com.gitee.dbswitch.product.greenplum;
import com.gitee.dbswitch.product.postgresql.PostgresTableCopyWriteProvider;
import com.gitee.dbswitch.provider.ProductFactoryProvider;
public class GreenPlumTableCopyWriteProvider extends PostgresTableCopyWriteProvider {
public GreenPlumTableCopyWriteProvider(ProductFactoryProvider factoryProvider) {
super(factoryProvider);
}
}

View File

@@ -0,0 +1,56 @@
// Copyright tang. All rights reserved.
// https://gitee.com/inrgihc/dbswitch
//
// Use of this source code is governed by a BSD-style license
//
// Author: tang (inrgihc@126.com)
// Date : 2020/1/2
// Location: beijing , china
/////////////////////////////////////////////////////////////
package com.gitee.dbswitch.product.greenplum;
import com.gitee.dbswitch.annotation.Product;
import com.gitee.dbswitch.common.type.ProductTypeEnum;
import com.gitee.dbswitch.features.ProductFeatures;
import com.gitee.dbswitch.provider.AbstractFactoryProvider;
import com.gitee.dbswitch.provider.manage.TableManageProvider;
import com.gitee.dbswitch.provider.meta.MetadataProvider;
import com.gitee.dbswitch.provider.sync.AutoCastTableDataSynchronizeProvider;
import com.gitee.dbswitch.provider.sync.TableDataSynchronizeProvider;
import com.gitee.dbswitch.provider.write.AutoCastTableDataWriteProvider;
import com.gitee.dbswitch.provider.write.TableDataWriteProvider;
import javax.sql.DataSource;
@Product(ProductTypeEnum.GREENPLUM)
public class GreenplumFactoryProvider extends AbstractFactoryProvider {
public GreenplumFactoryProvider(DataSource dataSource) {
super(dataSource);
}
public ProductFeatures getProductFeatures() {
return new GreenplumFeatures();
}
@Override
public MetadataProvider createMetadataQueryProvider() {
return new GreenplumMetadataQueryProvider(this);
}
@Override
public TableManageProvider createTableManageProvider() {
return new GreenplumTableManageProvider(this);
}
@Override
public TableDataWriteProvider createTableDataWriteProvider(boolean useInsert) {
return useInsert
? new AutoCastTableDataWriteProvider(this)
: new GreenPlumTableCopyWriteProvider(this);
}
@Override
public TableDataSynchronizeProvider createTableDataSynchronizeProvider() {
return new AutoCastTableDataSynchronizeProvider(this);
}
}

View File

@@ -0,0 +1,16 @@
// Copyright tang. All rights reserved.
// https://gitee.com/inrgihc/dbswitch
//
// Use of this source code is governed by a BSD-style license
//
// Author: tang (inrgihc@126.com)
// Date : 2020/1/2
// Location: beijing , china
/////////////////////////////////////////////////////////////
package com.gitee.dbswitch.product.greenplum;
import com.gitee.dbswitch.features.ProductFeatures;
public class GreenplumFeatures implements ProductFeatures {
}

View File

@@ -0,0 +1,42 @@
// Copyright tang. All rights reserved.
// https://gitee.com/inrgihc/dbswitch
//
// Use of this source code is governed by a BSD-style license
//
// Author: tang (inrgihc@126.com)
// Date : 2020/1/2
// Location: beijing , china
/////////////////////////////////////////////////////////////
package com.gitee.dbswitch.product.greenplum;
import com.gitee.dbswitch.product.postgresql.PostgresMetadataQueryProvider;
import com.gitee.dbswitch.provider.ProductFactoryProvider;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import lombok.extern.slf4j.Slf4j;
@Slf4j
public class GreenplumMetadataQueryProvider extends PostgresMetadataQueryProvider {
public GreenplumMetadataQueryProvider(ProductFactoryProvider factoryProvider) {
super(factoryProvider);
}
@Override
public void postAppendCreateTableSql(StringBuilder builder, String tblComment, List<String> primaryKeys,
Map<String, String> tblProperties) {
// 有主键就优先使用主键作为分布键。
if (Objects.nonNull(primaryKeys) && !primaryKeys.isEmpty()) {
getPkOrDkAsString(builder, primaryKeys);
log.info("using primary key as distributed key");
}
}
private void getPkOrDkAsString(StringBuilder builder, List<String> primaryKeys) {
String pk = getPrimaryKeyAsString(primaryKeys);
builder.append("\n DISTRIBUTED BY (").append(pk).append(")");
}
}

View File

@@ -0,0 +1,24 @@
// Copyright tang. All rights reserved.
// https://gitee.com/inrgihc/dbswitch
//
// Use of this source code is governed by a BSD-style license
//
// Author: tang (inrgihc@126.com)
// Date : 2020/1/2
// Location: beijing , china
/////////////////////////////////////////////////////////////
package com.gitee.dbswitch.product.greenplum;
import com.gitee.dbswitch.product.postgresql.PostgresTableManageProvider;
import com.gitee.dbswitch.provider.ProductFactoryProvider;
import com.gitee.dbswitch.provider.manage.DefaultTableManageProvider;
import lombok.extern.slf4j.Slf4j;
@Slf4j
public class GreenplumTableManageProvider extends PostgresTableManageProvider {
public GreenplumTableManageProvider(ProductFactoryProvider factoryProvider) {
super(factoryProvider);
}
}

View File

@@ -0,0 +1 @@
com.gitee.dbswitch.product.greenplum.GreenplumFactoryProvider