This is an automated email from the ASF dual-hosted git repository.
zhangliang 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 fbf93a91a4c Add MySQLProjectionIdentifierExtractorTest (#37027)
fbf93a91a4c is described below
commit fbf93a91a4c47c3c6bbfd4b18e7d47f9896727ec
Author: Liang Zhang <[email protected]>
AuthorDate: Thu Nov 6 19:33:00 2025 +0800
Add MySQLProjectionIdentifierExtractorTest (#37027)
---
.../MySQLProjectionIdentifierExtractorTest.java} | 26 ++++++++++++----------
...ostgreSQLProjectionIdentifierExtractorTest.java | 6 +++++
2 files changed, 20 insertions(+), 12 deletions(-)
diff --git
a/infra/binder/dialect/postgresql/src/test/java/org/apache/shardingsphere/infra/binder/postgresql/PostgreSQLProjectionIdentifierExtractorTest.java
b/infra/binder/dialect/mysql/src/test/java/org/apache/shardingsphere/infra/binder/mysql/MySQLProjectionIdentifierExtractorTest.java
similarity index 67%
copy from
infra/binder/dialect/postgresql/src/test/java/org/apache/shardingsphere/infra/binder/postgresql/PostgreSQLProjectionIdentifierExtractorTest.java
copy to
infra/binder/dialect/mysql/src/test/java/org/apache/shardingsphere/infra/binder/mysql/MySQLProjectionIdentifierExtractorTest.java
index 1019d583047..82b4a1f414d 100644
---
a/infra/binder/dialect/postgresql/src/test/java/org/apache/shardingsphere/infra/binder/postgresql/PostgreSQLProjectionIdentifierExtractorTest.java
+++
b/infra/binder/dialect/mysql/src/test/java/org/apache/shardingsphere/infra/binder/mysql/MySQLProjectionIdentifierExtractorTest.java
@@ -15,14 +15,12 @@
* limitations under the License.
*/
-package org.apache.shardingsphere.infra.binder.postgresql;
+package org.apache.shardingsphere.infra.binder.mysql;
-import
org.apache.shardingsphere.database.connector.core.metadata.database.enums.QuoteCharacter;
import
org.apache.shardingsphere.database.connector.core.spi.DatabaseTypedSPILoader;
import org.apache.shardingsphere.database.connector.core.type.DatabaseType;
import
org.apache.shardingsphere.infra.binder.context.segment.select.projection.extractor.DialectProjectionIdentifierExtractor;
import org.apache.shardingsphere.infra.spi.type.typed.TypedSPILoader;
-import
org.apache.shardingsphere.sql.parser.statement.core.segment.dml.expr.FunctionSegment;
import
org.apache.shardingsphere.sql.parser.statement.core.segment.dml.expr.subquery.SubquerySegment;
import
org.apache.shardingsphere.sql.parser.statement.core.segment.dml.item.ExpressionProjectionSegment;
import
org.apache.shardingsphere.sql.parser.statement.core.segment.dml.item.SubqueryProjectionSegment;
@@ -33,34 +31,38 @@ import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.Matchers.is;
import static org.mockito.Mockito.mock;
-class PostgreSQLProjectionIdentifierExtractorTest {
+class MySQLProjectionIdentifierExtractorTest {
- private final DatabaseType databaseType =
TypedSPILoader.getService(DatabaseType.class, "PostgreSQL");
+ private final DatabaseType databaseType =
TypedSPILoader.getService(DatabaseType.class, "MySQL");
private final DialectProjectionIdentifierExtractor extractor =
DatabaseTypedSPILoader.getService(DialectProjectionIdentifierExtractor.class,
databaseType);
@Test
void assertGetIdentifierValue() {
- assertThat(extractor.getIdentifierValue(new IdentifierValue("Data",
QuoteCharacter.NONE)), is("data"));
+ assertThat(extractor.getIdentifierValue(new
IdentifierValue("foo_id")), is("foo_id"));
}
@Test
void assertGetColumnNameFromFunction() {
- assertThat(extractor.getColumnNameFromFunction("Function",
"FunctionExpression"), is("function"));
+ assertThat(extractor.getColumnNameFromFunction("COUNT", "COUNT(*)"),
is("COUNT(*)"));
}
@Test
void assertGetColumnNameFromExpression() {
- assertThat(extractor.getColumnNameFromExpression(new
ExpressionProjectionSegment(0, 0, "expression")), is("?column?"));
+ assertThat(extractor.getColumnNameFromExpression(new
ExpressionProjectionSegment(0, 0, "expression")), is("expression"));
}
@Test
- void assertGetColumnNameFromFunctionExpression() {
- assertThat(extractor.getColumnNameFromExpression(new
ExpressionProjectionSegment(0, 0, "SUM(ID)", new FunctionSegment(0, 0, "SUM",
"SUM(ID)"))), is("SUM"));
+ void assertGetColumnNameFromSubqueryWithoutTruncation() {
+ String text = "SELECT id FROM subquery";
+ assertThat(extractor.getColumnNameFromSubquery(new
SubqueryProjectionSegment(mock(SubquerySegment.class), text)), is(text));
}
@Test
- void assertGetColumnNameFromSubquery() {
- assertThat(extractor.getColumnNameFromSubquery(new
SubqueryProjectionSegment(mock(SubquerySegment.class), "text")), is("text"));
+ void assertGetColumnNameFromSubqueryWithTruncation() {
+ String text = "SELECT id FROM subquery WHERE column_name > 100 AND
another_column LIKE '%some_long_text_value%' AND condition_3 = true"
+ + " AND condition_4 = false AND condition_5 IS NOT NULL AND
condition_6 BETWEEN 1 AND 1000 AND condition_7 IN "
+ + "(SELECT id FROM another_table WHERE description LIKE
'%even_more_detailed_description_text%' AND status = 'active' AND created_at >
'2023-01-01')";
+ assertThat(extractor.getColumnNameFromSubquery(new
SubqueryProjectionSegment(mock(SubquerySegment.class), text)),
is(text.substring(0, 255)));
}
}
diff --git
a/infra/binder/dialect/postgresql/src/test/java/org/apache/shardingsphere/infra/binder/postgresql/PostgreSQLProjectionIdentifierExtractorTest.java
b/infra/binder/dialect/postgresql/src/test/java/org/apache/shardingsphere/infra/binder/postgresql/PostgreSQLProjectionIdentifierExtractorTest.java
index 1019d583047..d920bd9ba51 100644
---
a/infra/binder/dialect/postgresql/src/test/java/org/apache/shardingsphere/infra/binder/postgresql/PostgreSQLProjectionIdentifierExtractorTest.java
+++
b/infra/binder/dialect/postgresql/src/test/java/org/apache/shardingsphere/infra/binder/postgresql/PostgreSQLProjectionIdentifierExtractorTest.java
@@ -22,6 +22,7 @@ import
org.apache.shardingsphere.database.connector.core.spi.DatabaseTypedSPILoa
import org.apache.shardingsphere.database.connector.core.type.DatabaseType;
import
org.apache.shardingsphere.infra.binder.context.segment.select.projection.extractor.DialectProjectionIdentifierExtractor;
import org.apache.shardingsphere.infra.spi.type.typed.TypedSPILoader;
+import
org.apache.shardingsphere.sql.parser.statement.core.segment.dml.expr.ExpressionSegment;
import
org.apache.shardingsphere.sql.parser.statement.core.segment.dml.expr.FunctionSegment;
import
org.apache.shardingsphere.sql.parser.statement.core.segment.dml.expr.subquery.SubquerySegment;
import
org.apache.shardingsphere.sql.parser.statement.core.segment.dml.item.ExpressionProjectionSegment;
@@ -54,6 +55,11 @@ class PostgreSQLProjectionIdentifierExtractorTest {
assertThat(extractor.getColumnNameFromExpression(new
ExpressionProjectionSegment(0, 0, "expression")), is("?column?"));
}
+ @Test
+ void assertGetColumnNameFromExpressionWithNonExpressionProjection() {
+
assertThat(extractor.getColumnNameFromExpression(mock(ExpressionSegment.class)),
is("?column?"));
+ }
+
@Test
void assertGetColumnNameFromFunctionExpression() {
assertThat(extractor.getColumnNameFromExpression(new
ExpressionProjectionSegment(0, 0, "SUM(ID)", new FunctionSegment(0, 0, "SUM",
"SUM(ID)"))), is("SUM"));