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

jianglongtao 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 7b9cf1bf1b7 Add test for broadcast rule (#26391)
7b9cf1bf1b7 is described below

commit 7b9cf1bf1b73fe7e590e7adb0d7ee144435c6597
Author: jiangML <1060319...@qq.com>
AuthorDate: Sat Jun 17 14:44:56 2023 +0800

    Add test for broadcast rule (#26391)
    
    * add test for broadcast
    
    * add count broadcast rule parse test
    
    * add license
---
 .../api/config/BroadcastRuleConfiguration.java     |  7 +-
 .../YamlBroadcastRuleConfigurationSwapper.java     |  8 +-
 .../route/BroadcastRouteEngineFactoryTest.java     | 71 +++++++++++++++++
 ...roadcastDatabaseBroadcastRoutingEngineTest.java | 51 ++++++++++++
 ...roadcastInstanceBroadcastRoutingEngineTest.java | 52 ++++++++++++
 .../BroadcastTableBroadcastRoutingEngineTest.java  | 75 ++++++++++++++++++
 .../ignore/BroadcastIgnoreRoutingEngineTest.java}  | 27 +++----
 .../unicast/BroadcastUnicastRoutingEngineTest.java | 92 ++++++++++++++++++++++
 .../rule/builder/BroadcastRuleBuilderTest.java     | 42 ++++++++++
 .../yaml/BroadcastRuleConfigurationYamlIT.java     | 42 ++++++++++
 .../YamlBroadcastRuleConfigurationSwapperTest.java | 49 ++++++++++++
 .../src/test/resources/yaml/broadcast-rule.yaml    | 21 +++++
 .../CreateBroadcastTableRuleStatementUpdater.java  |  4 +-
 ...eateBroadcastTableRuleStatementUpdaterTest.java |  3 +-
 ...DropBroadcastTableRuleStatementUpdaterTest.java |  5 +-
 .../cases/parser/jaxb/RootSQLParserTestCases.java  |  3 +
 .../CountBroadcastRuleStatementTestCase.java       | 18 +----
 .../it/parser/src/main/resources/case/rql/show.xml |  4 +
 .../src/main/resources/sql/supported/rql/show.xml  |  1 +
 19 files changed, 534 insertions(+), 41 deletions(-)

diff --git 
a/features/broadcast/api/src/main/java/org/apache/shardingsphere/broadcast/api/config/BroadcastRuleConfiguration.java
 
b/features/broadcast/api/src/main/java/org/apache/shardingsphere/broadcast/api/config/BroadcastRuleConfiguration.java
index 2003dfc6c13..da7f43f4fdc 100644
--- 
a/features/broadcast/api/src/main/java/org/apache/shardingsphere/broadcast/api/config/BroadcastRuleConfiguration.java
+++ 
b/features/broadcast/api/src/main/java/org/apache/shardingsphere/broadcast/api/config/BroadcastRuleConfiguration.java
@@ -18,19 +18,18 @@
 package org.apache.shardingsphere.broadcast.api.config;
 
 import lombok.Getter;
-import lombok.Setter;
+import lombok.RequiredArgsConstructor;
 import 
org.apache.shardingsphere.infra.config.rule.function.DistributedRuleConfiguration;
 import 
org.apache.shardingsphere.infra.config.rule.scope.DatabaseRuleConfiguration;
 
 import java.util.Collection;
-import java.util.LinkedList;
 
 /**
  * Broadcast rule configuration.
  */
+@RequiredArgsConstructor
 @Getter
-@Setter
 public final class BroadcastRuleConfiguration implements 
DatabaseRuleConfiguration, DistributedRuleConfiguration {
     
-    private Collection<String> tables = new LinkedList<>();
+    private final Collection<String> tables;
 }
diff --git 
a/features/broadcast/core/src/main/java/org/apache/shardingsphere/broadcast/yaml/swapper/YamlBroadcastRuleConfigurationSwapper.java
 
b/features/broadcast/core/src/main/java/org/apache/shardingsphere/broadcast/yaml/swapper/YamlBroadcastRuleConfigurationSwapper.java
index 85a8dbdb186..c0993be8fab 100644
--- 
a/features/broadcast/core/src/main/java/org/apache/shardingsphere/broadcast/yaml/swapper/YamlBroadcastRuleConfigurationSwapper.java
+++ 
b/features/broadcast/core/src/main/java/org/apache/shardingsphere/broadcast/yaml/swapper/YamlBroadcastRuleConfigurationSwapper.java
@@ -22,6 +22,9 @@ import 
org.apache.shardingsphere.broadcast.constant.BroadcastOrder;
 import 
org.apache.shardingsphere.broadcast.yaml.config.YamlBroadcastRuleConfiguration;
 import 
org.apache.shardingsphere.infra.yaml.config.swapper.rule.YamlRuleConfigurationSwapper;
 
+import java.util.Collection;
+import java.util.LinkedList;
+
 /**
  * YAML broadcast rule configuration swapper.
  */
@@ -36,9 +39,8 @@ public final class YamlBroadcastRuleConfigurationSwapper 
implements YamlRuleConf
     
     @Override
     public BroadcastRuleConfiguration swapToObject(final 
YamlBroadcastRuleConfiguration yamlConfig) {
-        BroadcastRuleConfiguration result = new BroadcastRuleConfiguration();
-        yamlConfig.getTables().forEach(each -> result.getTables().add(each));
-        return result;
+        Collection<String> tables = new LinkedList<>(yamlConfig.getTables());
+        return new BroadcastRuleConfiguration(tables);
     }
     
     @Override
diff --git 
a/features/broadcast/core/src/test/java/org/apache/shardingsphere/broadcast/route/BroadcastRouteEngineFactoryTest.java
 
b/features/broadcast/core/src/test/java/org/apache/shardingsphere/broadcast/route/BroadcastRouteEngineFactoryTest.java
new file mode 100644
index 00000000000..3424dcb49be
--- /dev/null
+++ 
b/features/broadcast/core/src/test/java/org/apache/shardingsphere/broadcast/route/BroadcastRouteEngineFactoryTest.java
@@ -0,0 +1,71 @@
+/*
+ * 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.broadcast.route;
+
+import 
org.apache.shardingsphere.broadcast.route.engine.BroadcastRouteEngineFactory;
+import 
org.apache.shardingsphere.broadcast.route.engine.type.BroadcastRouteEngine;
+import 
org.apache.shardingsphere.broadcast.route.engine.type.broadcast.BroadcastDatabaseBroadcastRoutingEngine;
+import org.apache.shardingsphere.broadcast.rule.BroadcastRule;
+import org.apache.shardingsphere.infra.binder.statement.SQLStatementContext;
+import org.apache.shardingsphere.infra.config.props.ConfigurationProperties;
+import 
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
+import 
org.apache.shardingsphere.infra.metadata.database.rule.ShardingSphereRuleMetaData;
+import org.apache.shardingsphere.infra.session.connection.ConnectionContext;
+import org.apache.shardingsphere.infra.session.query.QueryContext;
+import 
org.apache.shardingsphere.sql.parser.sql.common.statement.tcl.TCLStatement;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+
+import static org.hamcrest.CoreMatchers.instanceOf;
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
+
+class BroadcastRouteEngineFactoryTest {
+    
+    private BroadcastRule broadcastRule;
+    
+    private ShardingSphereDatabase database;
+    
+    private QueryContext queryContext;
+    
+    private ConfigurationProperties props;
+    
+    private ConnectionContext connectionContext;
+    
+    private ShardingSphereRuleMetaData globalRuleMetaData;
+    
+    @BeforeEach
+    void setUp() {
+        broadcastRule = mock(BroadcastRule.class);
+        database = mock(ShardingSphereDatabase.class);
+        queryContext = mock(QueryContext.class);
+        props = mock(ConfigurationProperties.class);
+        connectionContext = mock(ConnectionContext.class);
+        globalRuleMetaData = mock(ShardingSphereRuleMetaData.class);
+    }
+    
+    @Test
+    void assertNewInstanceWithTCLStatement() {
+        SQLStatementContext sqlStatementContext = 
mock(SQLStatementContext.class);
+        
when(sqlStatementContext.getSqlStatement()).thenReturn(mock(TCLStatement.class));
+        
when(queryContext.getSqlStatementContext()).thenReturn(sqlStatementContext);
+        BroadcastRouteEngine engine = 
BroadcastRouteEngineFactory.newInstance(broadcastRule, database, queryContext, 
props, connectionContext, globalRuleMetaData);
+        assertThat(engine, 
instanceOf(BroadcastDatabaseBroadcastRoutingEngine.class));
+    }
+}
diff --git 
a/features/broadcast/core/src/test/java/org/apache/shardingsphere/broadcast/route/engine/type/broadcast/BroadcastDatabaseBroadcastRoutingEngineTest.java
 
b/features/broadcast/core/src/test/java/org/apache/shardingsphere/broadcast/route/engine/type/broadcast/BroadcastDatabaseBroadcastRoutingEngineTest.java
new file mode 100644
index 00000000000..e5203efb2bf
--- /dev/null
+++ 
b/features/broadcast/core/src/test/java/org/apache/shardingsphere/broadcast/route/engine/type/broadcast/BroadcastDatabaseBroadcastRoutingEngineTest.java
@@ -0,0 +1,51 @@
+/*
+ * 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.broadcast.route.engine.type.broadcast;
+
+import org.apache.shardingsphere.broadcast.rule.BroadcastRule;
+import org.apache.shardingsphere.infra.route.context.RouteContext;
+import org.apache.shardingsphere.infra.route.context.RouteUnit;
+import org.junit.jupiter.api.Test;
+
+import java.util.Arrays;
+import java.util.Iterator;
+
+import static org.hamcrest.CoreMatchers.is;
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
+
+class BroadcastDatabaseBroadcastRoutingEngineTest {
+    
+    @Test
+    void assertRoute() {
+        BroadcastRule broadcastRule = mock(BroadcastRule.class);
+        
when(broadcastRule.getAvailableDataSourceNames()).thenReturn(Arrays.asList("ds_0",
 "ds_1"));
+        BroadcastDatabaseBroadcastRoutingEngine engine = new 
BroadcastDatabaseBroadcastRoutingEngine();
+        RouteContext routeContext = engine.route(new RouteContext(), 
broadcastRule);
+        assertThat(routeContext.getRouteUnits().size(), is(2));
+        Iterator<RouteUnit> iterator = routeContext.getRouteUnits().iterator();
+        assertDataSourceRouteMapper(iterator.next(), "ds_0");
+        assertDataSourceRouteMapper(iterator.next(), "ds_1");
+    }
+    
+    private void assertDataSourceRouteMapper(final RouteUnit routeUnit, final 
String expected) {
+        assertThat(routeUnit.getDataSourceMapper().getLogicName(), 
is(expected));
+        assertThat(routeUnit.getDataSourceMapper().getActualName(), 
is(expected));
+    }
+}
diff --git 
a/features/broadcast/core/src/test/java/org/apache/shardingsphere/broadcast/route/engine/type/broadcast/BroadcastInstanceBroadcastRoutingEngineTest.java
 
b/features/broadcast/core/src/test/java/org/apache/shardingsphere/broadcast/route/engine/type/broadcast/BroadcastInstanceBroadcastRoutingEngineTest.java
new file mode 100644
index 00000000000..2c956d85e3a
--- /dev/null
+++ 
b/features/broadcast/core/src/test/java/org/apache/shardingsphere/broadcast/route/engine/type/broadcast/BroadcastInstanceBroadcastRoutingEngineTest.java
@@ -0,0 +1,52 @@
+/*
+ * 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.broadcast.route.engine.type.broadcast;
+
+import org.apache.shardingsphere.broadcast.rule.BroadcastRule;
+import 
org.apache.shardingsphere.infra.metadata.database.resource.ShardingSphereResourceMetaData;
+import org.apache.shardingsphere.infra.route.context.RouteContext;
+import org.apache.shardingsphere.infra.route.context.RouteUnit;
+import org.junit.jupiter.api.Test;
+
+import java.util.Arrays;
+import java.util.Collections;
+
+import static org.hamcrest.CoreMatchers.is;
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
+
+class BroadcastInstanceBroadcastRoutingEngineTest {
+    
+    @Test
+    void assertRoute() {
+        ShardingSphereResourceMetaData resourceMetaData = 
mock(ShardingSphereResourceMetaData.class);
+        
when(resourceMetaData.getAllInstanceDataSourceNames()).thenReturn(Collections.singleton("ds_0"));
+        BroadcastInstanceBroadcastRoutingEngine engine = new 
BroadcastInstanceBroadcastRoutingEngine(resourceMetaData);
+        BroadcastRule broadcastRule = mock(BroadcastRule.class);
+        
when(broadcastRule.getAvailableDataSourceNames()).thenReturn(Arrays.asList("ds_0",
 "ds_1"));
+        RouteContext routeContext = engine.route(new RouteContext(), 
broadcastRule);
+        assertThat(routeContext.getRouteUnits().size(), is(1));
+        
assertDataSourceRouteMapper(routeContext.getRouteUnits().iterator().next(), 
"ds_0");
+    }
+    
+    private void assertDataSourceRouteMapper(final RouteUnit routeUnit, final 
String expected) {
+        assertThat(routeUnit.getDataSourceMapper().getLogicName(), 
is(expected));
+        assertThat(routeUnit.getDataSourceMapper().getActualName(), 
is(expected));
+    }
+}
diff --git 
a/features/broadcast/core/src/test/java/org/apache/shardingsphere/broadcast/route/engine/type/broadcast/BroadcastTableBroadcastRoutingEngineTest.java
 
b/features/broadcast/core/src/test/java/org/apache/shardingsphere/broadcast/route/engine/type/broadcast/BroadcastTableBroadcastRoutingEngineTest.java
new file mode 100644
index 00000000000..1e1de22d899
--- /dev/null
+++ 
b/features/broadcast/core/src/test/java/org/apache/shardingsphere/broadcast/route/engine/type/broadcast/BroadcastTableBroadcastRoutingEngineTest.java
@@ -0,0 +1,75 @@
+/*
+ * 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.broadcast.route.engine.type.broadcast;
+
+import org.apache.shardingsphere.broadcast.rule.BroadcastRule;
+import org.apache.shardingsphere.infra.route.context.RouteContext;
+import org.apache.shardingsphere.infra.route.context.RouteMapper;
+import org.apache.shardingsphere.infra.route.context.RouteUnit;
+import org.junit.jupiter.api.Test;
+
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Iterator;
+
+import static org.hamcrest.CoreMatchers.is;
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
+
+class BroadcastTableBroadcastRoutingEngineTest {
+    
+    @Test
+    void assertRouteWithBroadcastRuleTable() {
+        Collection<String> broadcastRuleTableNames = 
Collections.singleton("t_address");
+        BroadcastTableBroadcastRoutingEngine engine = new 
BroadcastTableBroadcastRoutingEngine(broadcastRuleTableNames);
+        BroadcastRule broadcastRule = mock(BroadcastRule.class);
+        
when(broadcastRule.getAvailableDataSourceNames()).thenReturn(Arrays.asList("ds_0",
 "ds_1"));
+        
when(broadcastRule.getBroadcastRuleTableNames(any())).thenReturn(Collections.singleton("t_address"));
+        RouteContext routeContext = engine.route(new RouteContext(), 
broadcastRule);
+        assertThat(routeContext.getRouteUnits().size(), is(2));
+        Iterator<RouteUnit> iterator = routeContext.getRouteUnits().iterator();
+        assertRouteMapper(iterator.next(), "ds_0", "t_address");
+        assertRouteMapper(iterator.next(), "ds_1", "t_address");
+    }
+    
+    @Test
+    void assertRouteWithoutBroadcastRuleTable() {
+        Collection<String> broadcastRuleTableNames = 
Collections.singleton("t_address");
+        BroadcastTableBroadcastRoutingEngine engine = new 
BroadcastTableBroadcastRoutingEngine(broadcastRuleTableNames);
+        BroadcastRule broadcastRule = mock(BroadcastRule.class);
+        
when(broadcastRule.getAvailableDataSourceNames()).thenReturn(Arrays.asList("ds_0",
 "ds_1"));
+        
when(broadcastRule.getBroadcastRuleTableNames(any())).thenReturn(Collections.emptyList());
+        RouteContext routeContext = engine.route(new RouteContext(), 
broadcastRule);
+        assertThat(routeContext.getRouteUnits().size(), is(2));
+        Iterator<RouteUnit> iterator = routeContext.getRouteUnits().iterator();
+        assertRouteMapper(iterator.next(), "ds_0", "");
+        assertRouteMapper(iterator.next(), "ds_1", "");
+    }
+    
+    private void assertRouteMapper(final RouteUnit routeUnit, final String 
expectedDataSourceName, final String expectedTableName) {
+        assertThat(routeUnit.getDataSourceMapper().getLogicName(), 
is(expectedDataSourceName));
+        assertThat(routeUnit.getDataSourceMapper().getActualName(), 
is(expectedDataSourceName));
+        assertThat(routeUnit.getTableMappers().size(), is(1));
+        RouteMapper tableRouteMapper = 
routeUnit.getTableMappers().iterator().next();
+        assertThat(tableRouteMapper.getLogicName(), is(expectedTableName));
+        assertThat(tableRouteMapper.getActualName(), is(expectedTableName));
+    }
+}
diff --git 
a/features/broadcast/api/src/main/java/org/apache/shardingsphere/broadcast/api/config/BroadcastRuleConfiguration.java
 
b/features/broadcast/core/src/test/java/org/apache/shardingsphere/broadcast/route/engine/type/ignore/BroadcastIgnoreRoutingEngineTest.java
similarity index 55%
copy from 
features/broadcast/api/src/main/java/org/apache/shardingsphere/broadcast/api/config/BroadcastRuleConfiguration.java
copy to 
features/broadcast/core/src/test/java/org/apache/shardingsphere/broadcast/route/engine/type/ignore/BroadcastIgnoreRoutingEngineTest.java
index 2003dfc6c13..3c899198c02 100644
--- 
a/features/broadcast/api/src/main/java/org/apache/shardingsphere/broadcast/api/config/BroadcastRuleConfiguration.java
+++ 
b/features/broadcast/core/src/test/java/org/apache/shardingsphere/broadcast/route/engine/type/ignore/BroadcastIgnoreRoutingEngineTest.java
@@ -15,22 +15,21 @@
  * limitations under the License.
  */
 
-package org.apache.shardingsphere.broadcast.api.config;
+package org.apache.shardingsphere.broadcast.route.engine.type.ignore;
 
-import lombok.Getter;
-import lombok.Setter;
-import 
org.apache.shardingsphere.infra.config.rule.function.DistributedRuleConfiguration;
-import 
org.apache.shardingsphere.infra.config.rule.scope.DatabaseRuleConfiguration;
+import org.apache.shardingsphere.broadcast.rule.BroadcastRule;
+import org.apache.shardingsphere.infra.route.context.RouteContext;
+import org.junit.jupiter.api.Test;
 
-import java.util.Collection;
-import java.util.LinkedList;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+import static org.mockito.Mockito.mock;
 
-/**
- * Broadcast rule configuration.
- */
-@Getter
-@Setter
-public final class BroadcastRuleConfiguration implements 
DatabaseRuleConfiguration, DistributedRuleConfiguration {
+class BroadcastIgnoreRoutingEngineTest {
     
-    private Collection<String> tables = new LinkedList<>();
+    @Test
+    void assertRoute() {
+        BroadcastIgnoreRoutingEngine engine = new 
BroadcastIgnoreRoutingEngine();
+        RouteContext routeContext = engine.route(new RouteContext(), 
mock(BroadcastRule.class));
+        assertTrue(routeContext.getRouteUnits().isEmpty());
+    }
 }
diff --git 
a/features/broadcast/core/src/test/java/org/apache/shardingsphere/broadcast/route/engine/type/unicast/BroadcastUnicastRoutingEngineTest.java
 
b/features/broadcast/core/src/test/java/org/apache/shardingsphere/broadcast/route/engine/type/unicast/BroadcastUnicastRoutingEngineTest.java
new file mode 100644
index 00000000000..d956c82d4f7
--- /dev/null
+++ 
b/features/broadcast/core/src/test/java/org/apache/shardingsphere/broadcast/route/engine/type/unicast/BroadcastUnicastRoutingEngineTest.java
@@ -0,0 +1,92 @@
+/*
+ * 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.broadcast.route.engine.type.unicast;
+
+import org.apache.shardingsphere.broadcast.rule.BroadcastRule;
+import org.apache.shardingsphere.infra.binder.statement.SQLStatementContext;
+import 
org.apache.shardingsphere.infra.binder.statement.ddl.CreateViewStatementContext;
+import org.apache.shardingsphere.infra.route.context.RouteContext;
+import org.apache.shardingsphere.infra.route.context.RouteMapper;
+import org.apache.shardingsphere.infra.session.connection.ConnectionContext;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Collections;
+
+import static org.hamcrest.CoreMatchers.is;
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
+
+class BroadcastUnicastRoutingEngineTest {
+    
+    private BroadcastRule broadcastRule;
+    
+    @BeforeEach
+    void setUp() {
+        broadcastRule = mock(BroadcastRule.class);
+        
when(broadcastRule.getAvailableDataSourceNames()).thenReturn(Arrays.asList("ds_0",
 "ds_1"));
+    }
+    
+    @Test
+    void assertRoute() {
+        SQLStatementContext sqlStatementContext = 
mock(SQLStatementContext.class);
+        Collection<String> logicTables = Collections.singleton("t_address");
+        ConnectionContext connectionContext = mock(ConnectionContext.class);
+        BroadcastUnicastRoutingEngine engine = new 
BroadcastUnicastRoutingEngine(sqlStatementContext, logicTables, 
connectionContext);
+        RouteContext routeContext = engine.route(new RouteContext(), 
broadcastRule);
+        assertThat(routeContext.getRouteUnits().size(), is(1));
+        assertTableRouteMapper(routeContext);
+    }
+    
+    @Test
+    void assertRouteWithCreateViewStatementContext() {
+        CreateViewStatementContext sqlStatementContext = 
mock(CreateViewStatementContext.class);
+        Collection<String> logicTables = Collections.singleton("t_address");
+        ConnectionContext connectionContext = mock(ConnectionContext.class);
+        BroadcastUnicastRoutingEngine engine = new 
BroadcastUnicastRoutingEngine(sqlStatementContext, logicTables, 
connectionContext);
+        RouteContext routeContext = engine.route(new RouteContext(), 
broadcastRule);
+        assertThat(routeContext.getRouteUnits().size(), is(1));
+        RouteMapper dataSourceRouteMapper = 
routeContext.getRouteUnits().iterator().next().getDataSourceMapper();
+        assertThat(dataSourceRouteMapper.getLogicName(), is("ds_0"));
+        assertTableRouteMapper(routeContext);
+    }
+    
+    @Test
+    void assertRouteWithCursorStatement() {
+        CreateViewStatementContext sqlStatementContext = 
mock(CreateViewStatementContext.class);
+        Collection<String> logicTables = Collections.singleton("t_address");
+        ConnectionContext connectionContext = mock(ConnectionContext.class);
+        BroadcastUnicastRoutingEngine engine = new 
BroadcastUnicastRoutingEngine(sqlStatementContext, logicTables, 
connectionContext);
+        RouteContext routeContext = engine.route(new RouteContext(), 
broadcastRule);
+        assertThat(routeContext.getRouteUnits().size(), is(1));
+        RouteMapper dataSourceRouteMapper = 
routeContext.getRouteUnits().iterator().next().getDataSourceMapper();
+        assertThat(dataSourceRouteMapper.getLogicName(), is("ds_0"));
+        assertTableRouteMapper(routeContext);
+    }
+    
+    private void assertTableRouteMapper(final RouteContext routeContext) {
+        Collection<RouteMapper> tableRouteMappers = 
routeContext.getRouteUnits().iterator().next().getTableMappers();
+        assertThat(tableRouteMappers.size(), is(1));
+        RouteMapper tableRouteMapper = tableRouteMappers.iterator().next();
+        assertThat(tableRouteMapper.getLogicName(), is("t_address"));
+        assertThat(tableRouteMapper.getActualName(), is("t_address"));
+    }
+}
diff --git 
a/features/broadcast/core/src/test/java/org/apache/shardingsphere/broadcast/rule/builder/BroadcastRuleBuilderTest.java
 
b/features/broadcast/core/src/test/java/org/apache/shardingsphere/broadcast/rule/builder/BroadcastRuleBuilderTest.java
new file mode 100644
index 00000000000..d649c2f2f1d
--- /dev/null
+++ 
b/features/broadcast/core/src/test/java/org/apache/shardingsphere/broadcast/rule/builder/BroadcastRuleBuilderTest.java
@@ -0,0 +1,42 @@
+/*
+ * 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.broadcast.rule.builder;
+
+import 
org.apache.shardingsphere.broadcast.api.config.BroadcastRuleConfiguration;
+import org.apache.shardingsphere.broadcast.rule.BroadcastRule;
+import org.apache.shardingsphere.infra.instance.InstanceContext;
+import 
org.apache.shardingsphere.infra.rule.builder.database.DatabaseRuleBuilder;
+import org.apache.shardingsphere.infra.util.spi.type.ordered.OrderedSPILoader;
+import org.junit.jupiter.api.Test;
+
+import java.util.Collections;
+
+import static org.hamcrest.CoreMatchers.instanceOf;
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.mockito.Mockito.mock;
+
+class BroadcastRuleBuilderTest {
+    
+    @SuppressWarnings({"rawtypes", "unchecked"})
+    @Test
+    void assertBuild() {
+        BroadcastRuleConfiguration ruleConfig = 
mock(BroadcastRuleConfiguration.class);
+        DatabaseRuleBuilder builder = 
OrderedSPILoader.getServices(DatabaseRuleBuilder.class, 
Collections.singleton(ruleConfig)).get(ruleConfig);
+        assertThat(builder.build(ruleConfig, "", Collections.emptyMap(), 
Collections.emptyList(), mock(InstanceContext.class)), 
instanceOf(BroadcastRule.class));
+    }
+}
diff --git 
a/features/broadcast/core/src/test/java/org/apache/shardingsphere/broadcast/yaml/BroadcastRuleConfigurationYamlIT.java
 
b/features/broadcast/core/src/test/java/org/apache/shardingsphere/broadcast/yaml/BroadcastRuleConfigurationYamlIT.java
new file mode 100644
index 00000000000..7ddead9146d
--- /dev/null
+++ 
b/features/broadcast/core/src/test/java/org/apache/shardingsphere/broadcast/yaml/BroadcastRuleConfigurationYamlIT.java
@@ -0,0 +1,42 @@
+/*
+ * 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.broadcast.yaml;
+
+import 
org.apache.shardingsphere.broadcast.yaml.config.YamlBroadcastRuleConfiguration;
+import org.apache.shardingsphere.infra.yaml.config.pojo.YamlRootConfiguration;
+import org.apache.shardingsphere.test.it.yaml.YamlRuleConfigurationIT;
+
+import static org.hamcrest.CoreMatchers.is;
+import static org.hamcrest.MatcherAssert.assertThat;
+
+class BroadcastRuleConfigurationYamlIT extends YamlRuleConfigurationIT {
+    
+    BroadcastRuleConfigurationYamlIT() {
+        super("yaml/broadcast-rule.yaml");
+    }
+    
+    @Override
+    protected void assertYamlRootConfiguration(final YamlRootConfiguration 
actual) {
+        assertBroadcastRule((YamlBroadcastRuleConfiguration) 
actual.getRules().iterator().next());
+    }
+    
+    private void assertBroadcastRule(final YamlBroadcastRuleConfiguration 
actual) {
+        assertThat(actual.getTables().size(), is(1));
+        assertThat(actual.getTables().iterator().next(), is("t_address"));
+    }
+}
diff --git 
a/features/broadcast/core/src/test/java/org/apache/shardingsphere/broadcast/yaml/swapper/YamlBroadcastRuleConfigurationSwapperTest.java
 
b/features/broadcast/core/src/test/java/org/apache/shardingsphere/broadcast/yaml/swapper/YamlBroadcastRuleConfigurationSwapperTest.java
new file mode 100644
index 00000000000..eaf0a1ac517
--- /dev/null
+++ 
b/features/broadcast/core/src/test/java/org/apache/shardingsphere/broadcast/yaml/swapper/YamlBroadcastRuleConfigurationSwapperTest.java
@@ -0,0 +1,49 @@
+/*
+ * 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.broadcast.yaml.swapper;
+
+import 
org.apache.shardingsphere.broadcast.api.config.BroadcastRuleConfiguration;
+import 
org.apache.shardingsphere.broadcast.yaml.config.YamlBroadcastRuleConfiguration;
+import org.junit.jupiter.api.Test;
+
+import java.util.Collections;
+
+import static org.hamcrest.CoreMatchers.is;
+import static org.hamcrest.MatcherAssert.assertThat;
+
+class YamlBroadcastRuleConfigurationSwapperTest {
+    
+    @Test
+    void assertSwapToYamlConfiguration() {
+        BroadcastRuleConfiguration ruleConfig = new 
BroadcastRuleConfiguration(Collections.singleton("t_address"));
+        YamlBroadcastRuleConfigurationSwapper swapper = new 
YamlBroadcastRuleConfigurationSwapper();
+        YamlBroadcastRuleConfiguration yamlRuleConfig = 
swapper.swapToYamlConfiguration(ruleConfig);
+        assertThat(yamlRuleConfig.getTables().size(), is(1));
+        assertThat(yamlRuleConfig.getTables().iterator().next(), 
is("t_address"));
+    }
+    
+    @Test
+    void assertSwapToObject() {
+        YamlBroadcastRuleConfiguration yamlRuleConfig = new 
YamlBroadcastRuleConfiguration();
+        yamlRuleConfig.getTables().add("t_address");
+        YamlBroadcastRuleConfigurationSwapper swapper = new 
YamlBroadcastRuleConfigurationSwapper();
+        BroadcastRuleConfiguration ruleConfig = 
swapper.swapToObject(yamlRuleConfig);
+        assertThat(ruleConfig.getTables().size(), is(1));
+        assertThat(ruleConfig.getTables().iterator().next(), is("t_address"));
+    }
+}
diff --git 
a/features/broadcast/core/src/test/resources/yaml/broadcast-rule.yaml 
b/features/broadcast/core/src/test/resources/yaml/broadcast-rule.yaml
new file mode 100644
index 00000000000..d1694135d4f
--- /dev/null
+++ b/features/broadcast/core/src/test/resources/yaml/broadcast-rule.yaml
@@ -0,0 +1,21 @@
+#
+# 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.
+#
+
+rules:
+  - !BROADCAST
+    tables:
+      - t_address
diff --git 
a/features/broadcast/distsql/handler/src/main/java/org/apache/shardingsphere/broadcast/distsql/handler/update/CreateBroadcastTableRuleStatementUpdater.java
 
b/features/broadcast/distsql/handler/src/main/java/org/apache/shardingsphere/broadcast/distsql/handler/update/CreateBroadcastTableRuleStatementUpdater.java
index de530f232e6..da60a42effb 100644
--- 
a/features/broadcast/distsql/handler/src/main/java/org/apache/shardingsphere/broadcast/distsql/handler/update/CreateBroadcastTableRuleStatementUpdater.java
+++ 
b/features/broadcast/distsql/handler/src/main/java/org/apache/shardingsphere/broadcast/distsql/handler/update/CreateBroadcastTableRuleStatementUpdater.java
@@ -41,14 +41,12 @@ public final class CreateBroadcastTableRuleStatementUpdater 
implements RuleDefin
     
     @Override
     public BroadcastRuleConfiguration buildToBeCreatedRuleConfiguration(final 
BroadcastRuleConfiguration currentRuleConfig, final 
CreateBroadcastTableRuleStatement sqlStatement) {
-        BroadcastRuleConfiguration result = new BroadcastRuleConfiguration();
         Collection<String> tables = sqlStatement.getTables();
         if (sqlStatement.isIfNotExists()) {
             Collection<String> duplicatedRuleNames = 
getDuplicatedRuleNames(sqlStatement, currentRuleConfig);
             tables.removeIf(duplicatedRuleNames::contains);
         }
-        result.setTables(tables);
-        return result;
+        return new BroadcastRuleConfiguration(tables);
     }
     
     @Override
diff --git 
a/features/broadcast/distsql/handler/src/test/java/org/apache/shardingsphere/broadcast/distsql/handler/update/CreateBroadcastTableRuleStatementUpdaterTest.java
 
b/features/broadcast/distsql/handler/src/test/java/org/apache/shardingsphere/broadcast/distsql/handler/update/CreateBroadcastTableRuleStatementUpdaterTest.java
index 7b0b18e9cde..fd4c4ad9b6a 100644
--- 
a/features/broadcast/distsql/handler/src/test/java/org/apache/shardingsphere/broadcast/distsql/handler/update/CreateBroadcastTableRuleStatementUpdaterTest.java
+++ 
b/features/broadcast/distsql/handler/src/test/java/org/apache/shardingsphere/broadcast/distsql/handler/update/CreateBroadcastTableRuleStatementUpdaterTest.java
@@ -26,6 +26,7 @@ import org.mockito.Answers;
 import org.mockito.Mock;
 
 import java.util.Collections;
+import java.util.LinkedList;
 
 import static org.hamcrest.CoreMatchers.is;
 import static org.hamcrest.MatcherAssert.assertThat;
@@ -50,7 +51,7 @@ class CreateBroadcastTableRuleStatementUpdaterTest {
     
     @Test
     void assertBuildToBeCreatedRuleConfiguration() {
-        BroadcastRuleConfiguration currentConfig = new 
BroadcastRuleConfiguration();
+        BroadcastRuleConfiguration currentConfig = new 
BroadcastRuleConfiguration(new LinkedList<>());
         CreateBroadcastTableRuleStatement statement = new 
CreateBroadcastTableRuleStatement(false, Collections.singleton("t_address"));
         updater.checkSQLStatement(database, statement, currentConfig);
         BroadcastRuleConfiguration toBeCreatedRuleConfig = 
updater.buildToBeCreatedRuleConfiguration(currentConfig, statement);
diff --git 
a/features/broadcast/distsql/handler/src/test/java/org/apache/shardingsphere/broadcast/distsql/handler/update/DropBroadcastTableRuleStatementUpdaterTest.java
 
b/features/broadcast/distsql/handler/src/test/java/org/apache/shardingsphere/broadcast/distsql/handler/update/DropBroadcastTableRuleStatementUpdaterTest.java
index b6954c03826..fc228d289e1 100644
--- 
a/features/broadcast/distsql/handler/src/test/java/org/apache/shardingsphere/broadcast/distsql/handler/update/DropBroadcastTableRuleStatementUpdaterTest.java
+++ 
b/features/broadcast/distsql/handler/src/test/java/org/apache/shardingsphere/broadcast/distsql/handler/update/DropBroadcastTableRuleStatementUpdaterTest.java
@@ -25,6 +25,7 @@ import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
 
 import java.util.Collections;
+import java.util.LinkedList;
 
 import static org.junit.jupiter.api.Assertions.assertThrows;
 import static org.junit.jupiter.api.Assertions.assertTrue;
@@ -53,12 +54,12 @@ class DropBroadcastTableRuleStatementUpdaterTest {
     @Test
     void assertCheckSQLStatementWithoutToBeDroppedRule() {
         DropBroadcastTableRuleStatement statement = new 
DropBroadcastTableRuleStatement(false, Collections.singleton("t_address"));
-        assertThrows(MissingRequiredRuleException.class, () -> 
updater.checkSQLStatement(database, statement, new 
BroadcastRuleConfiguration()));
+        assertThrows(MissingRequiredRuleException.class, () -> 
updater.checkSQLStatement(database, statement, new 
BroadcastRuleConfiguration(Collections.emptyList())));
     }
     
     @Test
     void assertUpdateCurrentRuleConfiguration() {
-        BroadcastRuleConfiguration configuration = new 
BroadcastRuleConfiguration();
+        BroadcastRuleConfiguration configuration = new 
BroadcastRuleConfiguration(new LinkedList<>());
         configuration.getTables().add("t_address");
         DropBroadcastTableRuleStatement statement = new 
DropBroadcastTableRuleStatement(false, Collections.singleton("t_address"));
         assertTrue(updater.updateCurrentRuleConfiguration(statement, 
configuration));
diff --git 
a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/cases/parser/jaxb/RootSQLParserTestCases.java
 
b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/cases/parser/jaxb/RootSQLParserTestCases.java
index ccb43599023..b8516a56e0a 100644
--- 
a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/cases/parser/jaxb/RootSQLParserTestCases.java
+++ 
b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/cases/parser/jaxb/RootSQLParserTestCases.java
@@ -1585,6 +1585,9 @@ public final class RootSQLParserTestCases {
     @XmlElement(name = "count-mask-rule")
     private final List<CountMaskRuleStatementTestCase> 
countMaskRuleStatementTestCases = new LinkedList<>();
     
+    @XmlElement(name = "count-broadcast-rule")
+    private final List<CountMaskRuleStatementTestCase> 
countBroadcastRuleStatementTestCases = new LinkedList<>();
+    
     @XmlElement(name = "create-collation")
     private final List<CreateCollationStatementTestCase> 
createCollationStatementTestCases = new LinkedList<>();
     
diff --git 
a/features/broadcast/api/src/main/java/org/apache/shardingsphere/broadcast/api/config/BroadcastRuleConfiguration.java
 
b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/cases/parser/jaxb/statement/rql/rule/broadcast/CountBroadcastRuleStatementTestCase.java
similarity index 59%
copy from 
features/broadcast/api/src/main/java/org/apache/shardingsphere/broadcast/api/config/BroadcastRuleConfiguration.java
copy to 
test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/cases/parser/jaxb/statement/rql/rule/broadcast/CountBroadcastRuleStatementTestCase.java
index 2003dfc6c13..a15040c34d8 100644
--- 
a/features/broadcast/api/src/main/java/org/apache/shardingsphere/broadcast/api/config/BroadcastRuleConfiguration.java
+++ 
b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/cases/parser/jaxb/statement/rql/rule/broadcast/CountBroadcastRuleStatementTestCase.java
@@ -15,22 +15,12 @@
  * limitations under the License.
  */
 
-package org.apache.shardingsphere.broadcast.api.config;
+package 
org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.statement.rql.rule.broadcast;
 
-import lombok.Getter;
-import lombok.Setter;
-import 
org.apache.shardingsphere.infra.config.rule.function.DistributedRuleConfiguration;
-import 
org.apache.shardingsphere.infra.config.rule.scope.DatabaseRuleConfiguration;
-
-import java.util.Collection;
-import java.util.LinkedList;
+import 
org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.statement.DatabaseContainedTestCase;
 
 /**
- * Broadcast rule configuration.
+ * Count broadcast rule statement test case.
  */
-@Getter
-@Setter
-public final class BroadcastRuleConfiguration implements 
DatabaseRuleConfiguration, DistributedRuleConfiguration {
-    
-    private Collection<String> tables = new LinkedList<>();
+public class CountBroadcastRuleStatementTestCase extends 
DatabaseContainedTestCase {
 }
diff --git a/test/it/parser/src/main/resources/case/rql/show.xml 
b/test/it/parser/src/main/resources/case/rql/show.xml
index abafa0a5d4b..983f47e3f4c 100644
--- a/test/it/parser/src/main/resources/case/rql/show.xml
+++ b/test/it/parser/src/main/resources/case/rql/show.xml
@@ -157,6 +157,10 @@
     <count-mask-rule sql-case-id="count-mask-rule">
         <database name="db1" start-index="21" stop-index="23" />
     </count-mask-rule>
+
+    <count-broadcast-rule sql-case-id="count-broadcast-rule">
+        <database name="db1" start-index="26" stop-index="28" />
+    </count-broadcast-rule>
     
     <show-storage-units sql-case-id="show-storage-units" />
     
diff --git a/test/it/parser/src/main/resources/sql/supported/rql/show.xml 
b/test/it/parser/src/main/resources/sql/supported/rql/show.xml
index 1109317fdfc..18e1c0a1545 100644
--- a/test/it/parser/src/main/resources/sql/supported/rql/show.xml
+++ b/test/it/parser/src/main/resources/sql/supported/rql/show.xml
@@ -52,6 +52,7 @@
     <sql-case id="count-encrypt-rule" value="COUNT ENCRYPT RULE FROM db1" 
db-types="ShardingSphere" />
     <sql-case id="count-shadow-rule" value="COUNT SHADOW RULE FROM db1" 
db-types="ShardingSphere" />
     <sql-case id="count-mask-rule" value="COUNT MASK RULE FROM db1" 
db-types="ShardingSphere" />
+    <sql-case id="count-broadcast-rule" value="COUNT BROADCAST RULE FROM db1" 
db-types="ShardingSphere" />
     <sql-case id="show-storage-units" value="SHOW STORAGE UNITS" 
db-types="ShardingSphere" />
     <sql-case id="show-storage-units-from" value="SHOW STORAGE UNITS FROM 
sharding_db" db-types="ShardingSphere" />
     <sql-case id="show-storage-units-where-usage-count" value="SHOW STORAGE 
UNITS FROM sharding_db WHERE USAGE_COUNT = 0" db-types="ShardingSphere" />


Reply via email to