You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@shardingsphere.apache.org by tu...@apache.org on 2023/03/13 07:15:17 UTC

[shardingsphere] branch master updated: Optimize ShardingStatisticsTableCollector for database openGauss (#23691)

This is an automated email from the ASF dual-hosted git repository.

tuichenchuxin pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/shardingsphere.git


The following commit(s) were added to refs/heads/master by this push:
     new ae920d9be5e Optimize ShardingStatisticsTableCollector for database openGauss (#23691)
ae920d9be5e is described below

commit ae920d9be5efdd322e731f0f10dcd1b3d434be92
Author: lushaorong <ww...@163.com>
AuthorDate: Mon Mar 13 15:15:08 2023 +0800

    Optimize ShardingStatisticsTableCollector for database openGauss (#23691)
    
    * Optimize ShardingStatisticsTableCollector for database openGauss
    
    Signed-off-by: lushaorong <ww...@163.com>
    
    * Optimize ShardingStatisticsTableCollector for database openGauss
    
    Signed-off-by: lushaorong <ww...@163.com>
    
    ---------
    
    Signed-off-by: lushaorong <ww...@163.com>
---
 .../data/ShardingStatisticsTableCollector.java     | 25 +++++++++++++++++++++-
 1 file changed, 24 insertions(+), 1 deletion(-)

diff --git a/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/metadata/data/ShardingStatisticsTableCollector.java b/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/metadata/data/ShardingStatisticsTableCollector.java
index ad92b36087a..eb9dcfea990 100644
--- a/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/metadata/data/ShardingStatisticsTableCollector.java
+++ b/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/metadata/data/ShardingStatisticsTableCollector.java
@@ -54,6 +54,8 @@ public final class ShardingStatisticsTableCollector implements ShardingSphereDat
     
     private static final String POSTGRESQL_TABLE_DATA_LENGTH = "SELECT PG_RELATION_SIZE(RELID) as DATA_LENGTH  FROM PG_STAT_ALL_TABLES T WHERE SCHEMANAME='%s' AND RELNAME = '%s'";
     
+    private static final String OPENGAUSS_TABLE_ROWS_AND_DATA_LENGTH = "SELECT  RELTUPLES AS TABLE_ROWS, PG_TABLE_SIZE('%s') AS DATA_LENGTH FROM PG_CLASS WHERE RELNAME = '%s'";
+    
     @Override
     public Optional<ShardingSphereTableData> collect(final String databaseName, final ShardingSphereTable table,
                                                      final Map<String, ShardingSphereDatabase> shardingSphereDatabases) throws SQLException {
@@ -101,7 +103,8 @@ public final class ShardingStatisticsTableCollector implements ShardingSphereDat
         } else if (databaseType instanceof PostgreSQLDatabaseType) {
             addForPostgreSQL(dataSources, dataNode, row);
         } else if (databaseType instanceof OpenGaussDatabaseType) {
-            // TODO get OpenGauss rows and data length
+            addForOpenGauss(dataSources, dataNode, row);
+        } else {
             row.add(BigDecimal.ZERO);
             row.add(BigDecimal.ZERO);
         }
@@ -147,6 +150,26 @@ public final class ShardingStatisticsTableCollector implements ShardingSphereDat
         row.add(dataLength);
     }
     
+    private void addForOpenGauss(final Map<String, DataSource> dataSources, final DataNode dataNode, final List<Object> row) throws SQLException {
+        DataSource dataSource = dataSources.get(dataNode.getDataSourceName());
+        BigDecimal tableRows = BigDecimal.ZERO;
+        BigDecimal dataLength = BigDecimal.ZERO;
+        try (
+                Connection connection = dataSource.getConnection();
+                Statement statement = connection.createStatement()) {
+            try (
+                    ResultSet resultSet = statement
+                            .executeQuery(String.format(OPENGAUSS_TABLE_ROWS_AND_DATA_LENGTH, dataNode.getTableName(), dataNode.getTableName()))) {
+                if (resultSet.next()) {
+                    tableRows = resultSet.getBigDecimal("TABLE_ROWS");
+                    dataLength = resultSet.getBigDecimal("DATA_LENGTH");
+                }
+            }
+        }
+        row.add(tableRows);
+        row.add(dataLength);
+    }
+    
     @Override
     public String getType() {
         return SHARDING_TABLE_STATISTICS;