You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@shardingsphere.apache.org by lu...@apache.org on 2022/02/23 07:03:22 UTC

[shardingsphere] branch master updated: Complete test cases for QueryHeaderBuilder (#15556)

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

lujingshang 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 966fe8a  Complete test cases for QueryHeaderBuilder (#15556)
966fe8a is described below

commit 966fe8a793f1ae6ab97e2ac70aa8d6ef4c6e7a3e
Author: 吴伟杰 <wu...@apache.org>
AuthorDate: Wed Feb 23 15:02:30 2022 +0800

    Complete test cases for QueryHeaderBuilder (#15556)
    
    * Add QueryHeaderBuilderFactoryTest
    
    * Add PostgreSQLQueryHeaderBuilderTest
    
    * Add OpenGaussQueryHeaderBuilderTest
    
    * Complete MySQLQueryHeaderBuilderTest
---
 .../query/QueryHeaderBuilderFactoryTest.java       | 41 ++++++++++++
 .../query/impl/MySQLQueryHeaderBuilderTest.java    | 76 ++++++++++++++--------
 .../impl/OpenGaussQueryHeaderBuilderTest.java      | 54 +++++++++++++++
 .../impl/PostgreSQLQueryHeaderBuilderTest.java     | 53 +++++++++++++++
 4 files changed, 196 insertions(+), 28 deletions(-)

diff --git a/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/response/header/query/QueryHeaderBuilderFactoryTest.java b/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/response/header/query/QueryHeaderBuilderFactoryTest.java
new file mode 100644
index 0000000..67f7961
--- /dev/null
+++ b/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/response/header/query/QueryHeaderBuilderFactoryTest.java
@@ -0,0 +1,41 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.shardingsphere.proxy.backend.response.header.query;
+
+import org.apache.shardingsphere.infra.database.type.dialect.OracleDatabaseType;
+import org.apache.shardingsphere.infra.database.type.dialect.PostgreSQLDatabaseType;
+import org.apache.shardingsphere.proxy.backend.response.header.query.impl.MySQLQueryHeaderBuilder;
+import org.apache.shardingsphere.proxy.backend.response.header.query.impl.PostgreSQLQueryHeaderBuilder;
+import org.junit.Test;
+
+import static org.junit.Assert.assertTrue;
+
+public final class QueryHeaderBuilderFactoryTest {
+    
+    @Test
+    public void assertImplementedDatabaseType() {
+        QueryHeaderBuilder actual = QueryHeaderBuilderFactory.getQueryHeaderBuilder(new PostgreSQLDatabaseType());
+        assertTrue(actual instanceof PostgreSQLQueryHeaderBuilder);
+    }
+    
+    @Test
+    public void assertUnsupportedDatabaseType() {
+        QueryHeaderBuilder actual = QueryHeaderBuilderFactory.getQueryHeaderBuilder(new OracleDatabaseType());
+        assertTrue(actual instanceof MySQLQueryHeaderBuilder);
+    }
+}
diff --git a/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/response/header/query/impl/MySQLQueryHeaderBuilderTest.java b/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/response/header/query/impl/MySQLQueryHeaderBuilderTest.java
index dd9b537..a3c050c 100644
--- a/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/response/header/query/impl/MySQLQueryHeaderBuilderTest.java
+++ b/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/response/header/query/impl/MySQLQueryHeaderBuilderTest.java
@@ -22,6 +22,7 @@ import org.apache.shardingsphere.infra.binder.segment.select.projection.Projecti
 import org.apache.shardingsphere.infra.binder.segment.select.projection.impl.ColumnProjection;
 import org.apache.shardingsphere.infra.binder.segment.select.projection.impl.ExpressionProjection;
 import org.apache.shardingsphere.infra.database.metadata.DataSourceMetaData;
+import org.apache.shardingsphere.infra.database.type.dialect.MySQLDatabaseType;
 import org.apache.shardingsphere.infra.executor.sql.execute.result.query.QueryResultMetaData;
 import org.apache.shardingsphere.infra.metadata.ShardingSphereMetaData;
 import org.apache.shardingsphere.infra.metadata.resource.DataSourcesMetaData;
@@ -53,101 +54,120 @@ public final class MySQLQueryHeaderBuilderTest {
     private final QueryHeaderBuilder queryHeaderBuilder = new MySQLQueryHeaderBuilder();
     
     @Test
+    public void assertGetDatabaseType() {
+        assertThat(queryHeaderBuilder.getDatabaseType(), is(new MySQLDatabaseType().getName()));
+    }
+    
+    @Test
     public void assertQueryHeaderSchema() throws SQLException {
         ShardingSphereMetaData metaData = createMetaData();
-        QueryHeader header = queryHeaderBuilder.build(createQueryResultMetaData(), metaData, 1, getDataNodeContainedRule(metaData));
-        assertThat(header.getSchema(), is("sharding_schema"));
+        QueryHeader actual = queryHeaderBuilder.build(createQueryResultMetaData(), metaData, 1, getDataNodeContainedRule(metaData));
+        assertThat(actual.getSchema(), is("sharding_schema"));
     }
     
     @Test
     public void assertQueryHeaderTable() throws SQLException {
         ShardingSphereMetaData metaData = createMetaData();
-        QueryHeader header = queryHeaderBuilder.build(createQueryResultMetaData(), metaData, 1, getDataNodeContainedRule(metaData));
-        assertThat(header.getTable(), is("t_logic_order"));
+        QueryHeader actual = queryHeaderBuilder.build(createQueryResultMetaData(), metaData, 1, getDataNodeContainedRule(metaData));
+        assertThat(actual.getTable(), is("t_logic_order"));
     }
     
     @Test
     public void assertQueryHeaderColumnLabel() throws SQLException {
         ShardingSphereMetaData metaData = createMetaData();
-        QueryHeader header = queryHeaderBuilder.build(createQueryResultMetaData(), metaData, 1, getDataNodeContainedRule(metaData));
-        assertThat(header.getColumnLabel(), is("order_id"));
+        QueryHeader actual = queryHeaderBuilder.build(createQueryResultMetaData(), metaData, 1, getDataNodeContainedRule(metaData));
+        assertThat(actual.getColumnLabel(), is("order_id"));
     }
     
     @Test
     public void assertQueryHeaderColumnNameWithoutProjectionsContext() throws SQLException {
         ShardingSphereMetaData metaData = createMetaData();
-        QueryHeader header = queryHeaderBuilder.build(createQueryResultMetaData(), metaData, 1, getDataNodeContainedRule(metaData));
-        assertThat(header.getColumnName(), is("order_id"));
+        QueryHeader actual = queryHeaderBuilder.build(createQueryResultMetaData(), metaData, 1, getDataNodeContainedRule(metaData));
+        assertThat(actual.getColumnName(), is("order_id"));
     }
     
     @Test
     public void assertQueryHeaderColumnNameFromProjectionsContext() throws SQLException {
         ShardingSphereMetaData metaData = createMetaData();
-        QueryHeader header = queryHeaderBuilder.build(createProjectionsContext(), createQueryResultMetaData(), metaData, 1, getDataNodeContainedRule(metaData));
-        assertThat(header.getColumnName(), is("order_id"));
+        QueryHeader actual = queryHeaderBuilder.build(createProjectionsContext(), createQueryResultMetaData(), metaData, 1, getDataNodeContainedRule(metaData));
+        assertThat(actual.getColumnName(), is("order_id"));
     }
     
     @Test
     public void assertQueryHeaderColumnNameFromMetaData() throws SQLException {
         ShardingSphereMetaData metaData = createMetaData();
-        QueryHeader header = queryHeaderBuilder.build(createProjectionsContext(), createQueryResultMetaData(), metaData, 2, getDataNodeContainedRule(metaData));
-        assertThat(header.getColumnName(), is("expr"));
+        QueryHeader actual = queryHeaderBuilder.build(createProjectionsContext(), createQueryResultMetaData(), metaData, 2, getDataNodeContainedRule(metaData));
+        assertThat(actual.getColumnName(), is("expr"));
     }
     
     @Test
     public void assertQueryHeaderColumnLength() throws SQLException {
         ShardingSphereMetaData metaData = createMetaData();
-        QueryHeader header = queryHeaderBuilder.build(createQueryResultMetaData(), metaData, 1, getDataNodeContainedRule(metaData));
-        assertThat(header.getColumnLength(), is(1));
+        QueryHeader actual = queryHeaderBuilder.build(createQueryResultMetaData(), metaData, 1, getDataNodeContainedRule(metaData));
+        assertThat(actual.getColumnLength(), is(1));
     }
     
     @Test
     public void assertQueryHeaderColumnType() throws SQLException {
         ShardingSphereMetaData metaData = createMetaData();
-        QueryHeader header = queryHeaderBuilder.build(createQueryResultMetaData(), metaData, 1, getDataNodeContainedRule(metaData));
-        assertThat(header.getColumnType(), is(Types.INTEGER));
+        QueryHeader actual = queryHeaderBuilder.build(createQueryResultMetaData(), metaData, 1, getDataNodeContainedRule(metaData));
+        assertThat(actual.getColumnType(), is(Types.INTEGER));
     }
     
     @Test
     public void assertQueryHeaderDecimals() throws SQLException {
         ShardingSphereMetaData metaData = createMetaData();
-        QueryHeader header = queryHeaderBuilder.build(createQueryResultMetaData(), metaData, 1, getDataNodeContainedRule(metaData));
-        assertThat(header.getDecimals(), is(1));
+        QueryHeader actual = queryHeaderBuilder.build(createQueryResultMetaData(), metaData, 1, getDataNodeContainedRule(metaData));
+        assertThat(actual.getDecimals(), is(1));
     }
     
     @Test
     public void assertQueryHeaderSigned() throws SQLException {
         ShardingSphereMetaData metaData = createMetaData();
-        QueryHeader header = queryHeaderBuilder.build(createQueryResultMetaData(), metaData, 1, getDataNodeContainedRule(metaData));
-        assertTrue(header.isSigned());
+        QueryHeader actual = queryHeaderBuilder.build(createQueryResultMetaData(), metaData, 1, getDataNodeContainedRule(metaData));
+        assertTrue(actual.isSigned());
     }
     
     @Test
     public void assertQueryHeaderPrimaryKey() throws SQLException {
         ShardingSphereMetaData metaData = createMetaData();
-        QueryHeader header = queryHeaderBuilder.build(createQueryResultMetaData(), metaData, 1, getDataNodeContainedRule(metaData));
-        assertTrue(header.isPrimaryKey());
+        QueryHeader actual = queryHeaderBuilder.build(createQueryResultMetaData(), metaData, 1, getDataNodeContainedRule(metaData));
+        assertTrue(actual.isPrimaryKey());
     }
     
     @Test
     public void assertQueryHeaderPrimaryKeyWithoutColumn() throws SQLException {
         ShardingSphereMetaData metaData = createMetaData();
-        QueryHeader header = queryHeaderBuilder.build(createQueryResultMetaData(), metaData, 2, getDataNodeContainedRule(metaData));
-        assertFalse(header.isPrimaryKey());
+        QueryHeader actual = queryHeaderBuilder.build(createQueryResultMetaData(), metaData, 2, getDataNodeContainedRule(metaData));
+        assertFalse(actual.isPrimaryKey());
     }
     
     @Test
     public void assertQueryHeaderNotNull() throws SQLException {
         ShardingSphereMetaData metaData = createMetaData();
-        QueryHeader header = queryHeaderBuilder.build(createQueryResultMetaData(), metaData, 1, getDataNodeContainedRule(metaData));
-        assertTrue(header.isNotNull());
+        QueryHeader actual = queryHeaderBuilder.build(createQueryResultMetaData(), metaData, 1, getDataNodeContainedRule(metaData));
+        assertTrue(actual.isNotNull());
     }
     
     @Test
     public void assertQueryHeaderAutoIncrement() throws SQLException {
         ShardingSphereMetaData metaData = createMetaData();
-        QueryHeader header = queryHeaderBuilder.build(createQueryResultMetaData(), metaData, 1, getDataNodeContainedRule(metaData));
-        assertTrue(header.isAutoIncrement());
+        QueryHeader actual = queryHeaderBuilder.build(createQueryResultMetaData(), metaData, 1, getDataNodeContainedRule(metaData));
+        assertTrue(actual.isAutoIncrement());
+    }
+    
+    @Test
+    public void assertDataNodeContainedRuleIsNotPresent() throws SQLException {
+        ShardingSphereMetaData metaData = createMetaData();
+        QueryHeader actual = queryHeaderBuilder.build(createQueryResultMetaData(), metaData, 1, new LazyInitializer<DataNodeContainedRule>() {
+            
+            @Override
+            protected DataNodeContainedRule initialize() {
+                return null;
+            }
+        });
+        assertFalse(actual.isPrimaryKey());
+        assertThat(actual.getTable(), is("t_order"));
     }
     
     private ShardingSphereMetaData createMetaData() {
diff --git a/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/response/header/query/impl/OpenGaussQueryHeaderBuilderTest.java b/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/response/header/query/impl/OpenGaussQueryHeaderBuilderTest.java
new file mode 100644
index 0000000..681268b
--- /dev/null
+++ b/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/response/header/query/impl/OpenGaussQueryHeaderBuilderTest.java
@@ -0,0 +1,54 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.shardingsphere.proxy.backend.response.header.query.impl;
+
+import org.apache.shardingsphere.infra.database.type.dialect.OpenGaussDatabaseType;
+import org.apache.shardingsphere.infra.executor.sql.execute.result.query.QueryResultMetaData;
+import org.junit.Test;
+
+import java.sql.SQLException;
+import java.sql.Types;
+
+import static org.hamcrest.CoreMatchers.is;
+import static org.junit.Assert.assertThat;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
+
+public final class OpenGaussQueryHeaderBuilderTest {
+    
+    @Test
+    public void assertDatabaseType() {
+        assertThat(new OpenGaussQueryHeaderBuilder().getDatabaseType(), is(new OpenGaussDatabaseType().getName()));
+    }
+    
+    @Test
+    public void assertBuildOpenGaussQueryHeader() throws SQLException {
+        final int columnIndex = 1;
+        QueryResultMetaData queryResultMetaData = mock(QueryResultMetaData.class);
+        when(queryResultMetaData.getColumnLabel(columnIndex)).thenReturn("label");
+        when(queryResultMetaData.getColumnType(columnIndex)).thenReturn(Types.INTEGER);
+        when(queryResultMetaData.getColumnTypeName(columnIndex)).thenReturn("int");
+        when(queryResultMetaData.getColumnLength(columnIndex)).thenReturn(11);
+        QueryHeader expected = new PostgreSQLQueryHeaderBuilder().doBuild(queryResultMetaData, null, null, columnIndex, null);
+        QueryHeader actual = new OpenGaussQueryHeaderBuilder().doBuild(queryResultMetaData, null, null, columnIndex, null);
+        assertThat(actual.getColumnLabel(), is(expected.getColumnLabel()));
+        assertThat(actual.getColumnType(), is(expected.getColumnType()));
+        assertThat(actual.getColumnTypeName(), is(expected.getColumnTypeName()));
+        assertThat(actual.getColumnLength(), is(expected.getColumnLength()));
+    }
+}
diff --git a/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/response/header/query/impl/PostgreSQLQueryHeaderBuilderTest.java b/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/response/header/query/impl/PostgreSQLQueryHeaderBuilderTest.java
new file mode 100644
index 0000000..b9a18b5
--- /dev/null
+++ b/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/response/header/query/impl/PostgreSQLQueryHeaderBuilderTest.java
@@ -0,0 +1,53 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.shardingsphere.proxy.backend.response.header.query.impl;
+
+import org.apache.shardingsphere.infra.database.type.dialect.PostgreSQLDatabaseType;
+import org.apache.shardingsphere.infra.executor.sql.execute.result.query.QueryResultMetaData;
+import org.junit.Test;
+
+import java.sql.SQLException;
+import java.sql.Types;
+
+import static org.hamcrest.CoreMatchers.is;
+import static org.junit.Assert.assertThat;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
+
+public final class PostgreSQLQueryHeaderBuilderTest {
+    
+    @Test
+    public void assertBuildPostgreSQLQueryHeader() throws SQLException {
+        final int columnIndex = 1;
+        QueryResultMetaData queryResultMetaData = mock(QueryResultMetaData.class);
+        when(queryResultMetaData.getColumnLabel(columnIndex)).thenReturn("label");
+        when(queryResultMetaData.getColumnType(columnIndex)).thenReturn(Types.INTEGER);
+        when(queryResultMetaData.getColumnTypeName(columnIndex)).thenReturn("int");
+        when(queryResultMetaData.getColumnLength(columnIndex)).thenReturn(11);
+        QueryHeader actual = new PostgreSQLQueryHeaderBuilder().doBuild(queryResultMetaData, null, null, columnIndex, null);
+        assertThat(actual.getColumnLabel(), is("label"));
+        assertThat(actual.getColumnType(), is(Types.INTEGER));
+        assertThat(actual.getColumnTypeName(), is("int"));
+        assertThat(actual.getColumnLength(), is(11));
+    }
+    
+    @Test
+    public void assertDatabaseType() {
+        assertThat(new PostgreSQLQueryHeaderBuilder().getDatabaseType(), is(new PostgreSQLDatabaseType().getName()));
+    }
+}