morrySnow commented on code in PR #15243:
URL: https://github.com/apache/doris/pull/15243#discussion_r1056117739


##########
fe/fe-core/src/main/java/org/apache/doris/nereids/analyzer/UnboundRelation.java:
##########
@@ -44,34 +43,21 @@
  */
 public class UnboundRelation extends LogicalRelation implements Unbound {
     private final List<String> nameParts;
+    private final List<String> partNames;
 
     public UnboundRelation(RelationId id, List<String> nameParts) {
-        this(id, nameParts, Optional.empty(), Optional.empty());
+        this(id, nameParts, Optional.empty(), Optional.empty(), 
Collections.emptyList());
     }
 
-    public UnboundRelation(RelationId id, List<String> nameParts, 
Optional<GroupExpression> groupExpression,
-            Optional<LogicalProperties> logicalProperties) {
-        super(id, PlanType.LOGICAL_UNBOUND_RELATION, groupExpression, 
logicalProperties);
-        this.nameParts = nameParts;
-    }
-
-    public UnboundRelation(RelationId id, TableIdentifier identifier) {
-        this(id, identifier, Optional.empty(), Optional.empty());
+    public UnboundRelation(RelationId id, List<String> nameParts, List<String> 
partNames) {
+        this(id, nameParts, Optional.empty(), Optional.empty(), partNames);
     }
 
-    /**
-     * Constructor for UnboundRelation.
-     *
-     * @param identifier relation identifier
-     */
-    public UnboundRelation(RelationId id, TableIdentifier identifier, 
Optional<GroupExpression> groupExpression,
-            Optional<LogicalProperties> logicalProperties) {
+    public UnboundRelation(RelationId id, List<String> nameParts, 
Optional<GroupExpression> groupExpression,
+            Optional<LogicalProperties> logicalProperties, List<String> 
partNames) {
         super(id, PlanType.LOGICAL_UNBOUND_RELATION, groupExpression, 
logicalProperties);
-        this.nameParts = Lists.newArrayList();
-        if (identifier.getDatabaseName().isPresent()) {
-            nameParts.add(identifier.getDatabaseName().get());
-        }
-        nameParts.add(identifier.getTableName());
+        this.nameParts = nameParts;
+        this.partNames = partNames;

Review Comment:
   ```suggestion
           this.partNames = 
ImmutableList.copyOf(Objects.requireNotNull(partNames, "partNames should not 
null"));
   ```



##########
fe/fe-core/src/main/java/org/apache/doris/nereids/parser/LogicalPlanBuilder.java:
##########
@@ -410,7 +412,18 @@ private LogicalPlan withCheckPolicy(LogicalPlan plan) {
     @Override
     public LogicalPlan visitTableName(TableNameContext ctx) {
         List<String> tableId = 
visitMultipartIdentifier(ctx.multipartIdentifier());
-        LogicalPlan checkedRelation = withCheckPolicy(new 
UnboundRelation(RelationUtil.newRelationId(), tableId));
+        List<String> partitionNames = new ArrayList<>();
+        if (ctx.specified_partition() != null) {
+            if (ctx.specified_partition().identifier() != null) {
+                
partitionNames.add(ctx.specified_partition().identifier().getText());
+            } else {
+                partitionNames.addAll(Arrays
+                        
.stream(ctx.specified_partition().identifierList().identifierSeq().getText().split(","))
+                        .collect(Collectors.toList()));

Review Comment:
   ```suggestion
                   
partitionNames.addAll(visitIdentifierList(ctx.specified_partition().identifierList()));
   ```



##########
fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalOlapScan.java:
##########
@@ -126,6 +135,7 @@ public LogicalOlapScan(RelationId id, Table table, 
List<String> qualifier,
         this.selectedIndexId = selectedIndexId <= 0 ? 
getTable().getBaseIndexId() : selectedIndexId;
         this.indexSelected = indexSelected;
         this.preAggStatus = preAggStatus;
+        this.manuallySpecifiedPartitions = partitions;

Review Comment:
   ```suggestion
           this.manuallySpecifiedPartitions = ImmutableList.copyOf(partitions);
   ```



##########
fe/fe-core/src/main/antlr4/org/apache/doris/nereids/DorisParser.g4:
##########
@@ -210,7 +210,7 @@ identifierSeq
     ;
 
 relationPrimary
-    : multipartIdentifier tableAlias                                           
 #tableName
+    : multipartIdentifier specified_partition? tableAlias                      
 #tableName

Review Comment:
   ```suggestion
       : multipartIdentifier specifiedPartition? tableAlias                     
  #tableName
   ```



##########
fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalOlapScan.java:
##########
@@ -101,13 +103,19 @@ public LogicalOlapScan(RelationId id, OlapTable table, 
List<String> qualifier) {
         this(id, table, qualifier, Optional.empty(), Optional.empty(),
                 table.getPartitionIds(), false,
                 ImmutableList.of(), false,
-                -1, false, PreAggStatus.on());
+                -1, false, PreAggStatus.on(), Collections.emptyList());
+    }
+
+    public LogicalOlapScan(RelationId id, OlapTable table, List<String> 
qualifier, List<Long> specifiedPartitions) {
+        this(id, table, qualifier, Optional.empty(), Optional.empty(),
+                specifiedPartitions, false, ImmutableList.of(), false,
+                -1, false, PreAggStatus.on(), specifiedPartitions);
     }
 
     public LogicalOlapScan(RelationId id, Table table, List<String> qualifier) 
{
         this(id, table, qualifier, Optional.empty(), Optional.empty(),
                 ((OlapTable) table).getPartitionIds(), false, 
ImmutableList.of(), false,
-                -1, false, PreAggStatus.on());
+                -1, false, PreAggStatus.on(), Collections.emptyList());

Review Comment:
   ```suggestion
                   -1, false, PreAggStatus.on(), ImmutableList.of());
   ```



##########
fe/fe-core/src/main/java/org/apache/doris/nereids/rules/analysis/BindRelation.java:
##########
@@ -80,25 +86,39 @@ private LogicalPlan bindWithCurrentDb(CascadesContext 
cascadesContext, String ta
         String dbName = cascadesContext.getConnectContext().getDatabase();
         Table table = cascadesContext.getTable(dbName, tableName, 
cascadesContext.getConnectContext().getEnv());
         // TODO: should generate different Scan sub class according to table's 
type
+        List<Long> partIds = getPartitionIds(table, r);
         if (table.getType() == TableType.OLAP) {
-            return new LogicalOlapScan(RelationUtil.newRelationId(), 
(OlapTable) table, ImmutableList.of(dbName));
+            if (!CollectionUtils.isEmpty(partIds)) {
+                return new LogicalOlapScan(RelationUtil.newRelationId(),
+                        (OlapTable) table, ImmutableList.of(dbName), partIds);
+            } else {
+                return new LogicalOlapScan(RelationUtil.newRelationId(),
+                        (OlapTable) table, ImmutableList.of(dbName));
+            }
         } else if (table.getType() == TableType.VIEW) {
             Plan viewPlan = parseAndAnalyzeView(table.getDdlSql(), 
cascadesContext);
             return new LogicalSubQueryAlias<>(table.getName(), viewPlan);
         }
         throw new AnalysisException("Unsupported tableType:" + 
table.getType());
     }
 
-    private LogicalPlan bindWithDbNameFromNamePart(CascadesContext 
cascadesContext, List<String> nameParts) {
+    private LogicalPlan bindWithDbNameFromNamePart(CascadesContext 
cascadesContext, UnboundRelation r) {

Review Comment:
   ditto



##########
fe/fe-core/src/main/java/org/apache/doris/nereids/rules/analysis/BindRelation.java:
##########
@@ -52,19 +57,20 @@ public Rule build() {
             switch (nameParts.size()) {
                 case 1: { // table
                     // Use current database name from catalog.
-                    return bindWithCurrentDb(ctx.cascadesContext, 
nameParts.get(0));
+                    return bindWithCurrentDb(ctx.cascadesContext, ctx.root);
                 }
                 case 2: { // db.table
                     // Use database name from table name parts.
-                    return bindWithDbNameFromNamePart(ctx.cascadesContext, 
nameParts);
+                    return bindWithDbNameFromNamePart(ctx.cascadesContext, 
ctx.root);
                 }
                 default:
                     throw new IllegalStateException("Table name [" + 
ctx.root.getTableName() + "] is invalid.");
             }
         }).toRule(RuleType.BINDING_RELATION);
     }
 
-    private LogicalPlan bindWithCurrentDb(CascadesContext cascadesContext, 
String tableName) {
+    private LogicalPlan bindWithCurrentDb(CascadesContext cascadesContext, 
UnboundRelation r) {

Review Comment:
   ```suggestion
       private LogicalPlan bindWithCurrentDb(CascadesContext cascadesContext, 
UnboundRelation unboundRelation) {
   ```



-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: commits-unsubscr...@doris.apache.org

For queries about this service, please contact Infrastructure at:
us...@infra.apache.org


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscr...@doris.apache.org
For additional commands, e-mail: commits-h...@doris.apache.org

Reply via email to