lszskye opened a new pull request, #100:
URL: https://github.com/apache/paimon-cpp/pull/100

   ## Introduce Type Casting Executors for Schema Evolution
   
   ### Summary
   
   Add a set of `CastExecutor` implementations under `src/paimon/core/casting/` 
to support type casting between boolean, numeric, decimal, and string types. 
These executors are essential for schema evolution scenarios where column types 
change across table versions, enabling predicate pushdown and data reading to 
work correctly across different schemas.
   
   Each executor supports two casting modes:
   - **Literal casting**: Converts a single `Literal` value to the target type 
(used during predicate rewriting).
   - **Array casting**: Converts an entire Arrow `Array` to the target type 
(used during batch data reading).
   
   ### New Classes
   
   **`BooleanToDecimalCastExecutor`** — Casts boolean values to decimal types. 
Converts `true` to `Decimal128(1)` and `false` to `Decimal128(0)` with the 
specified target precision and scale.
   
   **`BooleanToNumericCastExecutor`** — Casts boolean values to numeric 
primitive types (int8, int16, int32, int64, float, double). Uses a dispatch map 
to route casting logic per target `FieldType`, mapping `true` to `1` and 
`false` to `0`.
   
   **`BooleanToStringCastExecutor`** — Casts boolean values to string type. 
Converts `true` to `"true"` and `false` to `"false"`.
   
   **`DecimalToDecimalCastExecutor`** — Casts decimal values between different 
precision/scale decimal types. Handles rescaling by adjusting the underlying 
`Decimal128` representation to match the target precision and scale, with 
overflow detection.
   
   **`DecimalToNumericPrimitiveCastExecutor`** — Casts decimal values to 
numeric primitive types. Truncates the decimal value to the target integer or 
floating-point type by dividing out the scale factor.
   
   **`NumericPrimitiveToDecimalCastExecutor`** — Casts numeric primitive values 
(int8 through double) to decimal types. Employs templated dispatch to handle 
each source type, scaling the input value to the target decimal precision and 
scale.
   
   **`NumericToBooleanCastExecutor`** — Casts numeric values to boolean type. 
Uses a dispatch map per source `FieldType`, converting zero values to `false` 
and non-zero values to `true`.
   
   **`NumericToStringCastExecutor`** — Casts numeric values to string type. 
Uses a dispatch map per source `FieldType`, converting each numeric value to 
its string representation.
   
   **`StringToBooleanCastExecutor`** — Casts string values to boolean type. 
Recognizes `"true"`/`"TRUE"` as `true` and `"false"`/`"FALSE"` as `false`, 
returning an error for unrecognized string values.
   
   **`StringToDecimalCastExecutor`** — Casts string values to decimal types. 
Parses the string into an `arrow::Decimal128` value with the specified target 
precision and scale, with support for null propagation when parsing fails.
   
   **`StringToNumericPrimitiveCastExecutor`** — Casts string values to numeric 
primitive types (int8 through double). Uses a templated dispatch map per target 
`FieldType`, parsing the string representation into the corresponding numeric 
value.


-- 
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: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]

Reply via email to