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

xuanwo pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/iceberg-rust.git


The following commit(s) were added to refs/heads/main by this push:
     new ba66665  fix: correct partition-id to field-id in 
UnboundPartitionField (#576)
ba66665 is described below

commit ba66665cbb325f82bbf82fa8640f39964dabcba6
Author: FANNG <[email protected]>
AuthorDate: Sat Aug 24 12:35:36 2024 +0800

    fix: correct partition-id to field-id in UnboundPartitionField (#576)
    
    * correct partition-id to field id in PartitionSpec
    
    * correct partition-id to field id in PartitionSpec
    
    * correct partition-id to field id in PartitionSpec
    
    * xx
---
 .../src/expr/visitors/expression_evaluator.rs      |  2 +-
 .../expr/visitors/inclusive_metrics_evaluator.rs   |  2 +-
 .../src/expr/visitors/inclusive_projection.rs      |  6 +-
 crates/iceberg/src/spec/partition.rs               | 78 ++++++++++------------
 crates/iceberg/src/spec/table_metadata.rs          |  6 +-
 5 files changed, 45 insertions(+), 49 deletions(-)

diff --git a/crates/iceberg/src/expr/visitors/expression_evaluator.rs 
b/crates/iceberg/src/expr/visitors/expression_evaluator.rs
index d8a47ec..8f3c297 100644
--- a/crates/iceberg/src/expr/visitors/expression_evaluator.rs
+++ b/crates/iceberg/src/expr/visitors/expression_evaluator.rs
@@ -280,7 +280,7 @@ mod tests {
             .add_unbound_fields(vec![UnboundPartitionField::builder()
                 .source_id(1)
                 .name("a".to_string())
-                .partition_id(1)
+                .field_id(1)
                 .transform(Transform::Identity)
                 .build()])
             .unwrap()
diff --git a/crates/iceberg/src/expr/visitors/inclusive_metrics_evaluator.rs 
b/crates/iceberg/src/expr/visitors/inclusive_metrics_evaluator.rs
index e8e7337..a2ee472 100644
--- a/crates/iceberg/src/expr/visitors/inclusive_metrics_evaluator.rs
+++ b/crates/iceberg/src/expr/visitors/inclusive_metrics_evaluator.rs
@@ -1661,7 +1661,7 @@ mod test {
             .add_unbound_fields(vec![UnboundPartitionField::builder()
                 .source_id(1)
                 .name("a".to_string())
-                .partition_id(1)
+                .field_id(1)
                 .transform(Transform::Identity)
                 .build()])
             .unwrap()
diff --git a/crates/iceberg/src/expr/visitors/inclusive_projection.rs 
b/crates/iceberg/src/expr/visitors/inclusive_projection.rs
index 716f086..2087207 100644
--- a/crates/iceberg/src/expr/visitors/inclusive_projection.rs
+++ b/crates/iceberg/src/expr/visitors/inclusive_projection.rs
@@ -302,7 +302,7 @@ mod tests {
                 UnboundPartitionField::builder()
                     .source_id(1)
                     .name("a".to_string())
-                    .partition_id(1)
+                    .field_id(1)
                     .transform(Transform::Identity)
                     .build(),
             )
@@ -386,7 +386,7 @@ mod tests {
                 UnboundPartitionField::builder()
                     .source_id(3)
                     .name("name_truncate".to_string())
-                    .partition_id(3)
+                    .field_id(3)
                     .transform(Transform::Truncate(4))
                     .build(),
             )
@@ -426,7 +426,7 @@ mod tests {
                 UnboundPartitionField::builder()
                     .source_id(1)
                     .name("a_bucket[7]".to_string())
-                    .partition_id(1)
+                    .field_id(1)
                     .transform(Transform::Bucket(7))
                     .build(),
             )
diff --git a/crates/iceberg/src/spec/partition.rs 
b/crates/iceberg/src/spec/partition.rs
index 055b48e..91aaf49 100644
--- a/crates/iceberg/src/spec/partition.rs
+++ b/crates/iceberg/src/spec/partition.rs
@@ -134,7 +134,7 @@ pub struct UnboundPartitionField {
     /// A partition field id that is used to identify a partition field and is 
unique within a partition spec.
     /// In v2 table metadata, it is unique across all partition specs.
     #[builder(default, setter(strip_option))]
-    pub partition_id: Option<i32>,
+    pub field_id: Option<i32>,
     /// A partition name.
     pub name: String,
     /// A transform that is applied to the source column to produce a 
partition value.
@@ -177,7 +177,7 @@ impl From<PartitionField> for UnboundPartitionField {
     fn from(field: PartitionField) -> Self {
         UnboundPartitionField {
             source_id: field.source_id,
-            partition_id: Some(field.field_id),
+            field_id: Some(field.field_id),
             name: field.name,
             transform: field.transform,
         }
@@ -224,7 +224,7 @@ impl UnboundPartitionSpecBuilder {
     ) -> Result<Self> {
         let field = UnboundPartitionField {
             source_id,
-            partition_id: None,
+            field_id: None,
             name: target_name.to_string(),
             transform: transformation,
         };
@@ -246,8 +246,8 @@ impl UnboundPartitionSpecBuilder {
     fn add_partition_field_internal(mut self, field: UnboundPartitionField) -> 
Result<Self> {
         self.check_name_set_and_unique(&field.name)?;
         self.check_for_redundant_partitions(field.source_id, 
&field.transform)?;
-        if let Some(partition_id) = field.partition_id {
-            self.check_partition_id_unique(partition_id)?;
+        if let Some(partition_field_id) = field.field_id {
+            self.check_partition_id_unique(partition_field_id)?;
         }
         self.fields.push(field);
         Ok(self)
@@ -331,7 +331,7 @@ impl<'a> PartitionSpecBuilder<'a> {
             .id;
         let field = UnboundPartitionField {
             source_id,
-            partition_id: None,
+            field_id: None,
             name: target_name.into(),
             transform,
         };
@@ -341,15 +341,15 @@ impl<'a> PartitionSpecBuilder<'a> {
 
     /// Add a new partition field to the partition spec.
     ///
-    /// If `partition_id` is set, it is used as the field id.
+    /// If partition field id is set, it is used as the field id.
     /// Otherwise, a new `field_id` is assigned.
     pub fn add_unbound_field(mut self, field: UnboundPartitionField) -> 
Result<Self> {
         self.check_name_set_and_unique(&field.name)?;
         self.check_for_redundant_partitions(field.source_id, 
&field.transform)?;
         Self::check_name_does_not_collide_with_schema(&field, self.schema)?;
         Self::check_transform_compatibility(&field, self.schema)?;
-        if let Some(partition_id) = field.partition_id {
-            self.check_partition_id_unique(partition_id)?;
+        if let Some(partition_field_id) = field.field_id {
+            self.check_partition_id_unique(partition_field_id)?;
         }
 
         // Non-fallible from here
@@ -387,7 +387,7 @@ impl<'a> PartitionSpecBuilder<'a> {
         // we skip it.
         let assigned_ids = fields
             .iter()
-            .filter_map(|f| f.partition_id)
+            .filter_map(|f| f.field_id)
             .collect::<std::collections::HashSet<_>>();
 
         fn _check_add_1(prev: i32) -> Result<i32> {
@@ -401,9 +401,9 @@ impl<'a> PartitionSpecBuilder<'a> {
 
         let mut bound_fields = Vec::with_capacity(fields.len());
         for field in fields.into_iter() {
-            let partition_id = if let Some(partition_id) = field.partition_id {
-                last_assigned_field_id = std::cmp::max(last_assigned_field_id, 
partition_id);
-                partition_id
+            let partition_field_id = if let Some(partition_field_id) = 
field.field_id {
+                last_assigned_field_id = std::cmp::max(last_assigned_field_id, 
partition_field_id);
+                partition_field_id
             } else {
                 last_assigned_field_id = _check_add_1(last_assigned_field_id)?;
                 while assigned_ids.contains(&last_assigned_field_id) {
@@ -414,7 +414,7 @@ impl<'a> PartitionSpecBuilder<'a> {
 
             bound_fields.push(PartitionField {
                 source_id: field.source_id,
-                field_id: partition_id,
+                field_id: partition_field_id,
                 name: field.name,
                 transform: field.transform,
             })
@@ -544,11 +544,7 @@ trait CorePartitionSpecValidator {
 
     /// Check field / partition_id unique within the partition spec if set
     fn check_partition_id_unique(&self, field_id: i32) -> Result<()> {
-        if self
-            .fields()
-            .iter()
-            .any(|f| f.partition_id == Some(field_id))
-        {
+        if self.fields().iter().any(|f| f.field_id == Some(field_id)) {
             return Err(Error::new(
                 ErrorKind::DataInvalid,
                 format!(
@@ -698,17 +694,17 @@ mod tests {
                "spec-id": 1,
                "fields": [ {
                        "source-id": 4,
-                       "partition-id": 1000,
+                       "field-id": 1000,
                        "name": "ts_day",
                        "transform": "day"
                        }, {
                        "source-id": 1,
-                       "partition-id": 1001,
+                       "field-id": 1001,
                        "name": "id_bucket",
                        "transform": "bucket[16]"
                        }, {
                        "source-id": 2,
-                       "partition-id": 1002,
+                       "field-id": 1002,
                        "name": "id_truncate",
                        "transform": "truncate[4]"
                        } ]
@@ -719,17 +715,17 @@ mod tests {
         assert_eq!(Some(1), partition_spec.spec_id);
 
         assert_eq!(4, partition_spec.fields[0].source_id);
-        assert_eq!(Some(1000), partition_spec.fields[0].partition_id);
+        assert_eq!(Some(1000), partition_spec.fields[0].field_id);
         assert_eq!("ts_day", partition_spec.fields[0].name);
         assert_eq!(Transform::Day, partition_spec.fields[0].transform);
 
         assert_eq!(1, partition_spec.fields[1].source_id);
-        assert_eq!(Some(1001), partition_spec.fields[1].partition_id);
+        assert_eq!(Some(1001), partition_spec.fields[1].field_id);
         assert_eq!("id_bucket", partition_spec.fields[1].name);
         assert_eq!(Transform::Bucket(16), partition_spec.fields[1].transform);
 
         assert_eq!(2, partition_spec.fields[2].source_id);
-        assert_eq!(Some(1002), partition_spec.fields[2].partition_id);
+        assert_eq!(Some(1002), partition_spec.fields[2].field_id);
         assert_eq!("id_truncate", partition_spec.fields[2].name);
         assert_eq!(Transform::Truncate(4), partition_spec.fields[2].transform);
 
@@ -746,7 +742,7 @@ mod tests {
         assert_eq!(None, partition_spec.spec_id);
 
         assert_eq!(4, partition_spec.fields[0].source_id);
-        assert_eq!(None, partition_spec.fields[0].partition_id);
+        assert_eq!(None, partition_spec.fields[0].field_id);
         assert_eq!("ts_day", partition_spec.fields[0].name);
         assert_eq!(Transform::Day, partition_spec.fields[0].transform);
     }
@@ -963,14 +959,14 @@ mod tests {
         PartitionSpec::builder(&schema)
             .add_unbound_field(UnboundPartitionField {
                 source_id: 1,
-                partition_id: Some(1000),
+                field_id: Some(1000),
                 name: "id".to_string(),
                 transform: Transform::Identity,
             })
             .unwrap()
             .add_unbound_field(UnboundPartitionField {
                 source_id: 2,
-                partition_id: Some(1000),
+                field_id: Some(1000),
                 name: "id_bucket".to_string(),
                 transform: Transform::Bucket(16),
             })
@@ -1004,14 +1000,14 @@ mod tests {
                 source_id: 1,
                 name: "id".to_string(),
                 transform: Transform::Identity,
-                partition_id: Some(1012),
+                field_id: Some(1012),
             })
             .unwrap()
             .add_unbound_field(UnboundPartitionField {
                 source_id: 2,
                 name: "name_void".to_string(),
                 transform: Transform::Void,
-                partition_id: None,
+                field_id: None,
             })
             .unwrap()
             // Should keep its ID even if its lower
@@ -1019,7 +1015,7 @@ mod tests {
                 source_id: 3,
                 name: "year".to_string(),
                 transform: Transform::Year,
-                partition_id: Some(1),
+                field_id: Some(1),
             })
             .unwrap()
             .build()
@@ -1090,7 +1086,7 @@ mod tests {
             .with_spec_id(1)
             .add_unbound_field(UnboundPartitionField {
                 source_id: 1,
-                partition_id: None,
+                field_id: None,
                 name: "id".to_string(),
                 transform: Transform::Bucket(16),
             })
@@ -1123,7 +1119,7 @@ mod tests {
             .with_spec_id(1)
             .add_unbound_field(UnboundPartitionField {
                 source_id: 1,
-                partition_id: None,
+                field_id: None,
                 name: "id".to_string(),
                 transform: Transform::Identity,
             })
@@ -1136,7 +1132,7 @@ mod tests {
             .with_spec_id(1)
             .add_unbound_field(UnboundPartitionField {
                 source_id: 2,
-                partition_id: None,
+                field_id: None,
                 name: "id".to_string(),
                 transform: Transform::Identity,
             })
@@ -1171,13 +1167,13 @@ mod tests {
             .add_unbound_fields(vec![
                 UnboundPartitionField {
                     source_id: 1,
-                    partition_id: None,
+                    field_id: None,
                     name: "id_bucket".to_string(),
                     transform: Transform::Bucket(16),
                 },
                 UnboundPartitionField {
                     source_id: 2,
-                    partition_id: None,
+                    field_id: None,
                     name: "name".to_string(),
                     transform: Transform::Identity,
                 },
@@ -1192,13 +1188,13 @@ mod tests {
             .add_unbound_fields(vec![
                 UnboundPartitionField {
                     source_id: 1,
-                    partition_id: None,
+                    field_id: None,
                     name: "id_bucket".to_string(),
                     transform: Transform::Bucket(16),
                 },
                 UnboundPartitionField {
                     source_id: 4,
-                    partition_id: None,
+                    field_id: None,
                     name: "name".to_string(),
                     transform: Transform::Identity,
                 },
@@ -1237,7 +1233,7 @@ mod tests {
             .with_spec_id(1)
             .add_unbound_field(UnboundPartitionField {
                 source_id: 1,
-                partition_id: None,
+                field_id: None,
                 name: "id_year".to_string(),
                 transform: Transform::Year,
             })
@@ -1250,7 +1246,7 @@ mod tests {
             .with_spec_id(1)
             .add_partition_fields(vec![UnboundPartitionField {
                 source_id: 1,
-                partition_id: None,
+                field_id: None,
                 name: "id_bucket[16]".to_string(),
                 transform: Transform::Bucket(16),
             }])
@@ -1261,7 +1257,7 @@ mod tests {
             spec_id: Some(1),
             fields: vec![UnboundPartitionField {
                 source_id: 1,
-                partition_id: None,
+                field_id: None,
                 name: "id_bucket[16]".to_string(),
                 transform: Transform::Bucket(16),
             }]
diff --git a/crates/iceberg/src/spec/table_metadata.rs 
b/crates/iceberg/src/spec/table_metadata.rs
index 83b6017..dacd5bc 100644
--- a/crates/iceberg/src/spec/table_metadata.rs
+++ b/crates/iceberg/src/spec/table_metadata.rs
@@ -1293,7 +1293,7 @@ mod tests {
                 name: "x".to_string(),
                 transform: Transform::Identity,
                 source_id: 1,
-                partition_id: Some(1000),
+                field_id: Some(1000),
             })
             .unwrap()
             .build()
@@ -1416,7 +1416,7 @@ mod tests {
                 name: "x".to_string(),
                 transform: Transform::Identity,
                 source_id: 1,
-                partition_id: Some(1000),
+                field_id: Some(1000),
             })
             .unwrap()
             .build()
@@ -1496,7 +1496,7 @@ mod tests {
                 name: "x".to_string(),
                 transform: Transform::Identity,
                 source_id: 1,
-                partition_id: Some(1000),
+                field_id: Some(1000),
             })
             .unwrap()
             .build()

Reply via email to