This is an automated email from the ASF dual-hosted git repository.
panjuan 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 34f0e43 Fix NPE when the key generator is empty (#14080)
34f0e43 is described below
commit 34f0e43aef086c1f1e8d2d1ec84e1013b4511d23
Author: lanchengx <[email protected]>
AuthorDate: Tue Dec 14 19:51:40 2021 +0800
Fix NPE when the key generator is empty (#14080)
---
.../distsql/parser/core/ShardingDistSQLStatementVisitor.java | 2 +-
.../parameterized/asserts/segment/distsql/TableRuleAssert.java | 7 ++++---
.../src/main/resources/case/rdl/create.xml | 5 +++++
.../src/main/resources/sql/supported/rdl/create.xml | 2 +-
4 files changed, 11 insertions(+), 5 deletions(-)
diff --git
a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-distsql/shardingsphere-sharding-distsql-parser/src/main/java/org/apache/shardingsphere/sharding/distsql/parser/core/ShardingDistSQLStatementVisitor.java
b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-distsql/shardingsphere-sharding-distsql-parser/src/main/java/org/apache/shardingsphere/sharding/distsql/parser/core/ShardingDistSQLStatementVisitor.java
index 3bbeaaf..4c7c7dd 100644
---
a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-distsql/shardingsphere-sharding-distsql-parser/src/main/java/org/apache/shardingsphere/sharding/distsql/parser/core/ShardingDistSQLStatementVisitor.java
+++
b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-distsql/shardingsphere-sharding-distsql-parser/src/main/java/org/apache/shardingsphere/sharding/distsql/parser/core/ShardingDistSQLStatementVisitor.java
@@ -259,7 +259,7 @@ public final class ShardingDistSQLStatementVisitor extends
ShardingDistSQLStatem
Collection<String> dataNodes = getDataNodes(ctx.dataNodes());
ShardingStrategySegment tableStrategy = (ShardingStrategySegment)
visit(ctx.tableStrategy().shardingStrategy());
ShardingStrategySegment databaseStrategy = (ShardingStrategySegment)
visit(ctx.databaseStrategy().shardingStrategy());
- KeyGenerateSegment keyGenerateSegment = (KeyGenerateSegment)
visit(ctx.keyGenerateStrategy());
+ KeyGenerateSegment keyGenerateSegment = null !=
ctx.keyGenerateStrategy() ? (KeyGenerateSegment)
visit(ctx.keyGenerateStrategy()) : null;
return new TableRuleSegment(tableName, dataNodes, databaseStrategy,
tableStrategy, keyGenerateSegment);
}
diff --git
a/shardingsphere-test/shardingsphere-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/asserts/segment/distsql/TableRuleAssert.java
b/shardingsphere-test/shardingsphere-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/asserts/segment/distsql/TableRuleAssert.java
index 2131a4a..aca829e 100644
---
a/shardingsphere-test/shardingsphere-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/asserts/segment/distsql/TableRuleAssert.java
+++
b/shardingsphere-test/shardingsphere-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/asserts/segment/distsql/TableRuleAssert.java
@@ -50,9 +50,6 @@ public final class TableRuleAssert {
actual.getLogicTable(), is(expected.getName()));
assertThat(assertContext.getText(String.format("`%s`'s table rule
segment assertion error: ", actual.getClass().getSimpleName())),
actual.getDataSourceNodes(),
is(expected.getDataSources()));
- assertNotNull(assertContext.getText("key generate should exist."),
actual.getKeyGenerateSegment());
- assertThat(assertContext.getText(String.format("`%s`'s table rule
segment assertion error: ", actual.getClass().getSimpleName())),
- actual.getKeyGenerateSegment().getKeyGenerateColumn(),
is(expected.getKeyGenerateStrategyColumn()));
assertThat(assertContext.getText(String.format("`%s`'s table rule
segment assertion error: ", actual.getClass().getSimpleName())),
actual.getTableStrategySegment().getShardingColumn(),
is(expected.getTableStrategy().getShardingColumn()));
assertThat(assertContext.getText(String.format("`%s`'s table rule
segment assertion error: ", actual.getClass().getSimpleName())),
@@ -65,6 +62,10 @@ public final class TableRuleAssert {
actual.getDatabaseStrategySegment().getType(),
is(expected.getDataStrategy().getType()));
assertThat(assertContext.getText(String.format("`%s`'s table rule
segment assertion error: ", actual.getClass().getSimpleName())),
actual.getDatabaseStrategySegment().getShardingAlgorithmName(),
is(expected.getDataStrategy().getShardingAlgorithmName()));
+ if (null != actual.getKeyGenerateSegment()) {
+ assertThat(assertContext.getText(String.format("`%s`'s table
rule segment assertion error: ", actual.getClass().getSimpleName())),
+ actual.getKeyGenerateSegment().getKeyGenerateColumn(),
is(expected.getKeyGenerateStrategyColumn()));
+ }
}
}
}
diff --git
a/shardingsphere-test/shardingsphere-parser-test/src/main/resources/case/rdl/create.xml
b/shardingsphere-test/shardingsphere-parser-test/src/main/resources/case/rdl/create.xml
index cbbd42b..c28cc2f 100644
---
a/shardingsphere-test/shardingsphere-parser-test/src/main/resources/case/rdl/create.xml
+++
b/shardingsphere-test/shardingsphere-parser-test/src/main/resources/case/rdl/create.xml
@@ -128,6 +128,11 @@
</properties>
</key-generate-strategy>
</rule>
+ <rule name="t_order_item" key-generate-strategy-column="another_id">
+ <data-source>ms_group_${0..1}</data-source>
+ <table-strategy type="standard" sharding-column="user_id"
sharding-algorithm-name="table_inline"></table-strategy>
+ <database-strategy type="standard" sharding-column="order_id"
sharding-algorithm-name="database_inline"></database-strategy>
+ </rule>
</create-sharding-table-rule>
<create-sharding-binding-table-rule
sql-case-id="create-sharding-binding-table-rule">
diff --git
a/shardingsphere-test/shardingsphere-parser-test/src/main/resources/sql/supported/rdl/create.xml
b/shardingsphere-test/shardingsphere-parser-test/src/main/resources/sql/supported/rdl/create.xml
index c722f26..002b9db 100644
---
a/shardingsphere-test/shardingsphere-parser-test/src/main/resources/sql/supported/rdl/create.xml
+++
b/shardingsphere-test/shardingsphere-parser-test/src/main/resources/sql/supported/rdl/create.xml
@@ -40,7 +40,7 @@
<distsql-case id="create-default-shadow-algorithm" value="CREATE DEFAULT
SHADOW ALGORITHM NAME = simple_hint_algorithm ;" />
<distsql-case id="create-sharding-algorithm" value="CREATE SHARDING
ALGORITHM algorithm_name(TYPE(NAME=hash_mod,PROPERTIES('algorithm-expression' =
't_order_${order_id % 2}')))" />
<distsql-case id="create-default-sharding-strategy" value="CREATE DEFAULT
SHARDING TABLE STRATEGY(TYPE=standard, SHARDING_COLUMN=order_id,
SHARDING_ALGORITHM=algorithms_name)" />
- <distsql-case id="create-sharding-table-rule" value="CREATE SHARDING TABLE
RULE t_order (DATANODES('ms_group_${0..1}'),DATABASE_STRATEGY( TYPE =
`standard`,sharding_column = order_id,sharding_algorithm =
database_inline),TABLE_STRATEGY(TYPE = `standard`,sharding_column =
user_id,sharding_algorithm =
table_inline),GENERATED_KEY(COLUMN=another_id,TYPE(NAME=snowflake,PROPERTIES('worker-id'=123))))"
/>"
+ <distsql-case id="create-sharding-table-rule" value="CREATE SHARDING TABLE
RULE t_order (DATANODES('ms_group_${0..1}'),DATABASE_STRATEGY( TYPE =
`standard`,sharding_column = order_id,sharding_algorithm =
database_inline),TABLE_STRATEGY(TYPE = `standard`,sharding_column =
user_id,sharding_algorithm =
table_inline),GENERATED_KEY(COLUMN=another_id,TYPE(NAME=snowflake,PROPERTIES('worker-id'=123)))),t_order_item
(DATANODES('ms_group_${0..1}'),DATABASE_STRATEGY( TYPE = `standard`,sharding_
[...]
<distsql-case id="create-shadow-algorithm" value="CREATE SHADOW ALGORITHM
(simple_note_algorithm, TYPE(NAME=HINT, PROPERTIES('shadow'='true',
'foo'='bar')))" />
<distsql-case id="create-default-single-table" value="CREATE DEFAULT
SINGLE TABLE RULE RESOURCE = ds_0" />