andygrove opened a new issue, #6622:
URL: https://github.com/apache/datafusion-comet/issues/6622

   Part of #6615.
   
   ## What / Why
   
   This issue moves cast coverage for boolean, integral, floating-point and 
decimal **sources** from `CometNativeCastSuite` to Comet SQL tests under 
`sql-tests/expressions/cast/`. It also covers the decimal cast tests in 
`CometExpressionSuite`. String sources and temporal/complex sources have their 
own issues. Static analysis on `main` at 3bc2faa934 found the following:
   
   | Suite | Covered | Convert | Blocked | Split | Keep | Total |
   |---|---|---|---|---|---|---|
   | `CometNativeCastSuite` | 1 | 111 | 0 | 0 | 3 | 115 |
   | `CometExpressionSuite` | 0 | 1 | 1 | 0 | 1 | 3 |
   | **Total** | **1** | **112** | **1** | **0** | **4** | **118** |
   
   Almost nothing is covered yet. Most pairs have no fixture at all. The 
fixtures that do exist (`cast.sql`, `cast_decimal_to_primitive.sql`, 
`cast_double_to_string.sql`) run only non-ANSI `cast`, with no `try_cast` and 
with fewer values than the Scala tests.
   
   ## Do these first
   
   1. **Replace the coverage meta-test.** "all valid cast combinations covered" 
(L132) fails with `Missing test: cast X to Y` as soon as any per-pair Scala 
test is deleted. It is also what guarantees today that every pair 
`Cast.canCast` allows has a test, and that a pair's ignore status matches 
`CometCast.isSupported`. Before deleting per-pair tests, replace it with an 
equivalent check over the fixtures. Options include a naming convention 
(`cast_from_<type>.sql` must cast to every supported target) or a small 
manifest. Keeping that guarantee is part of not losing coverage. This blocks 
deletions in all three cast issues.
   2. **About 20 tests have never compared values.** The ANSI boundary-value 
tests (L554-L762) and float/double to timestamp (L673, L809) use 
`useDataFrameDiff = true`. That routes through 
`assertDataFrameEqualsWithExceptions`, which builds `dfSpark` under 
`COMET_ENABLED=false` but runs `exceptAll(...).count()` outside that block. So 
both sides are planned with Comet, and the check compares Comet with Comet. 
Fixtures with plain `query` fix this. Delete the helper when its last caller is 
gone; `CometNativeCastSuite` is the only user.
   
   ## How the Scala helpers map onto fixtures
   
   `castTest(input, toType)` writes the input to Parquet, reads it back with 
`coalesce(1)`, and runs four variants:
   
   1. non-ANSI `cast`, with `checkSparkAnswerAndOperator`;
   2. non-ANSI `try_cast`;
   3. ANSI `cast`, with `checkSparkAnswerMaybeThrows`. Either outcome is 
accepted. If both engines fail, the first failing row's message is compared: 
whole-message equality on 3.x, and on 4.x a check that Spark's message starts 
with Comet's first 40 characters;
   4. ANSI `try_cast`, which repeats variant 2 because `try_cast` is 
`EvalMode.TRY` regardless of ANSI. A fixture needs `try_cast` only once.
   
   For each pair, use a non-ANSI file `X.sql` with `cast` and `try_cast` 
(`ORDER BY id`), plus an ANSI companion `X_ansi.sql`. Pairs that never raise 
can share one file with `-- ConfigMatrix: spark.sql.ansi.enabled=false,true`. 
In the ANSI file:
   
   - **Keep a sentinel per type pair.** Add a plain `query` over the valid 
rows. It stands in for `expectAnsiFailure`'s native-plan assertion, because 
CometCast's support decision depends only on types, eval mode and time zone, 
never on values. It also checks something castTest never did: successful ANSI 
conversions in a batch that also holds a failing row.
   - **One failing value per query**, filtered with `WHERE id = n`. castTest 
only ever checked the first failing row. Separate queries are also needed for 
determinism, because `INSERT ... VALUES` writes one file per row.
   - **Use a value-specific `expect_error` substring.** Spark renders values as 
SQL literals: `128S`, `128L`, `128Y`, `128.12BD`, bare `3.4028235E38` for 
FLOAT, and `1.7976931348623157E308D` for DOUBLE. About 40 characters starting 
at the error class reproduces the 4.x check. The 3.x whole-message equality 
cannot be expressed, but nothing depends on it.
   - **Pin each ANSI outcome by running Spark.** castTest accepted either 
outcome; a fixture has to state it. Use paired 
`MaxSparkVersion`/`MinSparkVersion` files where it differs by version.
   
   **Cast columns, not literals.** `CometCast.convert` evaluates a cast whose 
child is a `Literal` on the JVM at planning time, even with ConstantFolding 
excluded. Every fixture must therefore cast a column read from Parquet. A 
nested `cast(cast(lit AS T1) AS T2)` also works.
   
   The Scala `DataGenerator` (seed 42) injects:
   
   - integral types: Min and Max;
   - float: Max, MinPositive, Min, NaN, ±Infinity, ±1.0, -32768.0, 32767.0, 0.0 
(no -0.0);
   - double: Max, MinPositive, Min, NaN, ±Infinity, 0.0;
   - plus random values.
   
   Curate those edge values. Random breadth can be kept deterministically: the 
INSERT of a fixture runs in Spark and its result isn't compared, so for example 
`INSERT INTO t SELECT id, CAST(hash(id) AS TINYINT) FROM range(0, 10000, 1, 1)` 
is fine.
   
   ## Work
   
   Line numbers refer to `CometNativeCastSuite` unless marked.
   
   - `cast_from_boolean.sql` + `_ansi.sql` (L177-L236)
     - Values: true, false, NULL.
     - Boolean to timestamp (L236) is non-ANSI only.
     - Today only `cast.sql:40` covers boolean to int/string, non-ANSI.
   - `cast_from_byte.sql` + `_ansi.sql` (L243-L299)
     - Values: -128, -127, -1, 0, 1, 2, 64, 100, 126, 127, NULL.
     - The binary target (L299) is legacy-only.
   - `cast_from_short.sql` + `_ansi.sql` (L322-L379)
     - Values: -32768, -32767, -1000, -129, -128, -1, 0, 1, 127, 128, 255, 256, 
1000, 32766, 32767, NULL.
     - Short to tinyint (L329) needs a sentinel plus 
`expect_error(CAST_OVERFLOW)` for each of 128, -129, 32767 and -32768.
   - `cast_from_int.sql` + `_ansi.sql` (L402-L450)
     - Values: Int Min/Max, ±100000000, ±100000001, ±99999999, -32769, -32768, 
32767, 32768, -129, -128, 127, 128, 16777217 (float rounding), 123456789, NULL.
     - The decimal(10,2) overflows (L428, L432) raise 
`NUMERIC_VALUE_OUT_OF_RANGE`. Match on that prefix, because Spark 4 adds 
`.WITH_SUGGESTION`.
   - `cast_from_long.sql` + `_ansi.sql` (L465-L500): Long Min/Max, Int Min/Max 
±1, 9007199254740993 (2^53+1), and the narrowing boundaries.
   - `cast_from_float.sql` + `_ansi.sql` (L520-L536, L627, L631, L650)
     - The DataGenerator float values above.
     - Rounding ties for decimal(10,2), (8,6) and (4,2): 0.5153125, 0.5203125, 
±1.005, ±99.995 and 0.999995. In ANSI mode, decimal(4,2) overflows for ±99.995.
     - Check Spark's ANSI behavior for NaN and Infinity to decimal.
   - `cast_from_double.sql` + `_ansi.sql` (L684-L700, L778, L782, L786): same 
layout as float. Check Spark's ANSI outcome for `Double.MaxValue` to float.
   - `cast_floating_to_integral_ansi.sql` (L554, L569, L596, L612, L704, L719, 
L745, L762)
     - These are the ANSI boundary tests from #5673. Use exact boundary values 
such as 2147483520.0f, nextDown(2^63), 2^63, and 1.5E7 to smallint and tinyint.
     - Unlike the Scala tests, this fixture actually compares the values (see 
"Do these first").
     - L569 and L719 leave out `try_cast` of 2^63, citing a TODO: the native 
TRY path returns NULL where Spark saturates to `Long.MaxValue`. There is no 
tracking issue. File one so the fixture can carry `query ignore(<link>)`.
   - `cast_integral_to_timestamp.sql` (L309, L389, L455)
     - Use the 19-zone `representativeTimezones` list as a session time-zone 
ConfigMatrix, crossed with ANSI false/true.
     - The 19 zones: UTC, America/New_York, America/Chicago, America/Denver, 
America/Los_Angeles, America/Sao_Paulo, Europe/London, Europe/Paris, 
Europe/Berlin, Africa/Cairo, Africa/Johannesburg, Asia/Dubai, Asia/Tokyo, 
Asia/Shanghai, Asia/Kolkata, Asia/Kathmandu, Australia/Sydney, 
Pacific/Auckland, Pacific/Chatham.
   - `cast_long_to_timestamp.sql` (L505)
     - `SELECT a, cast(cast(a AS timestamp) AS bigint)` over the 19 zones, with 
values around the ±9223372036854-second saturation point.
     - Non-ANSI only.
   - `cast_floating_to_timestamp.sql` + `_ansi.sql` (L673, L809)
     - 19 zones.
     - For extreme values, use `unix_micros(cast(a AS timestamp))` or a cast 
back to bigint, to avoid overflow in `collect()`.
   - `cast_float_to_string.sql` (new, L654) and `cast_double_to_string.sql` 
(existing, L790)
     - Add Max/Min, MinPositive, ±1.0, the Int bounds, and 17-digit [0,1) 
values. These exercise shortest-form and scientific notation.
     - Add `try_cast` and an ANSI run.
   - `cast_decimal_to_primitive.sql` (existing) + 
`cast_decimal_to_primitive_ansi.sql` (new)
     - Covers 22 tests (L820-L953) and `CometExpressionSuite` L1837.
     - Add the tinyint and smallint targets, `try_cast`, and an ANSI run.
     - Add the Scala (10,2) and (38,18) boundary values, -96833550.07 and 
-99999999999999999999.07, 1E-18 and 1.5, the #5670 large-unscaled set, the 
decimal(38,10) table (L2649-L2664), and the (1,0), (5,2), (18,17), (19,0), 
(38,37) and all-NULL (1,1) columns from L1837.
   - `cast_decimal_to_string.sql` + `_ansi.sql` (L941, L945): LEGACY renders 
`0E-11` and `1E-9` in scientific notation, while TRY and ANSI use plain 
notation, so all three modes differ.
   - `cast_decimal_to_timestamp.sql` (L1017, L1021). L1021's name says (38,10), 
but its data is (38,18).
   - `cast_decimal_to_decimal.sql` + `_ansi.sql` (L2035, L2047, L2065, L2079)
     - L2035: decimal(10,4) to (6,2); 12345.6789 overflows.
     - L2065 is a parser test (`PARSE_SYNTAX_ERROR`) and never reaches Comet. 
Keep it as one `expect_error` or drop it.
   
   **Blocked**
   
   - **#6617: `CometExpressionSuite` L593.** `CAST(a / b AS DECIMAL(3, 2))` 
under ANSI, where the point is which expression's query context is attached.
   
   ## Stays in Scala
   
   - **Negative-scale decimals** (L957, L2052). SQL cannot declare 
`DECIMAL(p,-s)` and Parquet cannot store it.
   - **`CometExpressionSuite` L3941.** It needs a Java UDF returning 
`DecimalType(0,0)`.
   - **L132** stays until its replacement lands (see "Do these first").
   
   ## Notes on the Scala tests
   
   - **L438 never runs.** In "cast IntegerType to DecimalType check arbitrary 
scale and precision", `combinations(2).map(...)` is a lazy `Iterator`, so 
`castTest` is never called. It would also throw on `DecimalType(0,10)`.
   - **Duplicates.** Every `Seq(true, false).foreach(testAnsi => 
castTest(...))` loop repeats its non-ANSI part in the second iteration.
   - **No-op config.** `allowIncompatible=true` in castTest's ANSI branch has 
no effect on results: the native kernels store `allow_incompat` but never 
branch on it.
   
   ## Done when
   
   - Every test in the table below is accounted for. Either a fixture covers it 
(the same inputs, configs and assertion strength, or stronger), the fixture 
that already covers it is cited, or it stays in Scala for the reason given 
above.
   - Each converted Scala test is deleted in the PR that adds its coverage. A 
suite left empty is deleted and removed from the suite lists in 
`.github/workflows/pr_build_linux.yml` and `pr_build_macos.yml`.
   - The new and changed fixtures pass on every Spark profile. Apply 
`run-all-spark-profiles`, because pull requests run only the default profile.
   
   <details><summary>Every Scala test in scope, with its verdict and target 
fixture</summary>
   
   | Suite | Line | Test | Verdict | Target |
   |---|---|---|---|---|
   | `CometExpressionSuite` | 593 | ANSI cast overflow reports the cast's own 
context | blocked: #6617 | cast/cast_decimal_overflow_ansi.sql (new) |
   | `CometExpressionSuite` | 1837 | cast decimals to int | convert | 
cast/cast_decimal_to_primitive.sql |
   | `CometExpressionSuite` | 3941 | regression: cast Decimal(0, 0) to Boolean 
via Java UDF | keep |  |
   | `CometNativeCastSuite` | 132 | all valid cast combinations covered | keep 
|  |
   | `CometNativeCastSuite` | 177 | cast BooleanType to ByteType | convert | 
cast/cast_from_boolean.sql (new); cast/cast_from_boolean_ansi.sql (new) |
   | `CometNativeCastSuite` | 181 | cast BooleanType to ShortType | convert | 
cast/cast_from_boolean.sql (new); cast/cast_from_boolean_ansi.sql (new) |
   | `CometNativeCastSuite` | 185 | cast BooleanType to IntegerType | convert | 
cast/cast_from_boolean.sql (new); cast/cast_from_boolean_ansi.sql (new) |
   | `CometNativeCastSuite` | 189 | cast BooleanType to LongType | convert | 
cast/cast_from_boolean.sql (new); cast/cast_from_boolean_ansi.sql (new) |
   | `CometNativeCastSuite` | 193 | cast BooleanType to FloatType | convert | 
cast/cast_from_boolean.sql (new); cast/cast_from_boolean_ansi.sql (new) |
   | `CometNativeCastSuite` | 197 | cast BooleanType to DoubleType | convert | 
cast/cast_from_boolean.sql (new); cast/cast_from_boolean_ansi.sql (new) |
   | `CometNativeCastSuite` | 209 | cast BooleanType to DecimalType(10,2) 
[ignored] | covered | cast/cast_boolean_to_decimal.sql; 
cast/cast_boolean_to_decimal_ansi.sql |
   | `CometNativeCastSuite` | 213 | cast BooleanType to DecimalType is not 
supported natively | convert | cast/routing_cast_disabled.sql; 
cast/routing_cast_enabled.sql |
   | `CometNativeCastSuite` | 224 | cast BooleanType to DecimalType(14,4) | 
convert | cast/cast_boolean_to_decimal.sql; 
cast/cast_boolean_to_decimal_ansi.sql |
   | `CometNativeCastSuite` | 228 | cast BooleanType to DecimalType(30,0) | 
convert | cast/cast_boolean_to_decimal.sql; 
cast/cast_boolean_to_decimal_ansi.sql |
   | `CometNativeCastSuite` | 232 | cast BooleanType to StringType | convert | 
cast/cast_from_boolean.sql (new); cast/cast_from_boolean_ansi.sql (new) |
   | `CometNativeCastSuite` | 236 | cast BooleanType to TimestampType | convert 
| cast/cast_from_boolean.sql (new) |
   | `CometNativeCastSuite` | 243 | cast ByteType to BooleanType | convert | 
cast/cast_from_byte.sql (new); cast/cast_from_byte_ansi.sql (new) |
   | `CometNativeCastSuite` | 250 | cast ByteType to ShortType | convert | 
cast/cast_from_byte.sql (new); cast/cast_from_byte_ansi.sql (new) |
   | `CometNativeCastSuite` | 257 | cast ByteType to IntegerType | convert | 
cast/cast_from_byte.sql (new); cast/cast_from_byte_ansi.sql (new) |
   | `CometNativeCastSuite` | 264 | cast ByteType to LongType | convert | 
cast/cast_from_byte.sql (new); cast/cast_from_byte_ansi.sql (new) |
   | `CometNativeCastSuite` | 271 | cast ByteType to FloatType | convert | 
cast/cast_from_byte.sql (new); cast/cast_from_byte_ansi.sql (new) |
   | `CometNativeCastSuite` | 278 | cast ByteType to DoubleType | convert | 
cast/cast_from_byte.sql (new); cast/cast_from_byte_ansi.sql (new) |
   | `CometNativeCastSuite` | 285 | cast ByteType to DecimalType(10,2) | 
convert | cast/cast_from_byte.sql (new); cast/cast_from_byte_ansi.sql (new) |
   | `CometNativeCastSuite` | 292 | cast ByteType to StringType | convert | 
cast/cast_from_byte.sql (new); cast/cast_from_byte_ansi.sql (new) |
   | `CometNativeCastSuite` | 299 | cast ByteType to BinaryType | convert | 
cast/cast_from_byte.sql (new); cast/cast_from_byte_ansi.sql (new) |
   | `CometNativeCastSuite` | 309 | cast ByteType to TimestampType | convert | 
cast/cast_integral_to_timestamp.sql (new) |
   | `CometNativeCastSuite` | 322 | cast ShortType to BooleanType | convert | 
cast/cast_from_short.sql (new); cast/cast_from_short_ansi.sql (new) |
   | `CometNativeCastSuite` | 329 | cast ShortType to ByteType | convert | 
cast/cast_from_short.sql (new); cast/cast_from_short_ansi.sql (new) |
   | `CometNativeCastSuite` | 337 | cast ShortType to IntegerType | convert | 
cast/cast_from_short.sql (new); cast/cast_from_short_ansi.sql (new) |
   | `CometNativeCastSuite` | 344 | cast ShortType to LongType | convert | 
cast/cast_from_short.sql (new); cast/cast_from_short_ansi.sql (new) |
   | `CometNativeCastSuite` | 351 | cast ShortType to FloatType | convert | 
cast/cast_from_short.sql (new); cast/cast_from_short_ansi.sql (new) |
   | `CometNativeCastSuite` | 358 | cast ShortType to DoubleType | convert | 
cast/cast_from_short.sql (new); cast/cast_from_short_ansi.sql (new) |
   | `CometNativeCastSuite` | 365 | cast ShortType to DecimalType(10,2) | 
convert | cast/cast_from_short.sql (new); cast/cast_from_short_ansi.sql (new) |
   | `CometNativeCastSuite` | 372 | cast ShortType to StringType | convert | 
cast/cast_from_short.sql (new); cast/cast_from_short_ansi.sql (new) |
   | `CometNativeCastSuite` | 379 | cast ShortType to BinaryType | convert | 
cast/cast_from_short.sql (new); cast/cast_from_short_ansi.sql (new) |
   | `CometNativeCastSuite` | 389 | cast ShortType to TimestampType | convert | 
cast/cast_integral_to_timestamp.sql (new) |
   | `CometNativeCastSuite` | 402 | cast IntegerType to BooleanType | convert | 
cast/cast_from_int.sql (new); cast/cast_from_int_ansi.sql (new) |
   | `CometNativeCastSuite` | 406 | cast IntegerType to ByteType | convert | 
cast/cast_from_int.sql (new); cast/cast_from_int_ansi.sql (new) |
   | `CometNativeCastSuite` | 411 | cast IntegerType to ShortType | convert | 
cast/cast_from_int.sql (new); cast/cast_from_int_ansi.sql (new) |
   | `CometNativeCastSuite` | 416 | cast IntegerType to LongType | convert | 
cast/cast_from_int.sql (new); cast/cast_from_int_ansi.sql (new) |
   | `CometNativeCastSuite` | 420 | cast IntegerType to FloatType | convert | 
cast/cast_from_int.sql (new); cast/cast_from_int_ansi.sql (new) |
   | `CometNativeCastSuite` | 424 | cast IntegerType to DoubleType | convert | 
cast/cast_from_int.sql (new); cast/cast_from_int_ansi.sql (new) |
   | `CometNativeCastSuite` | 428 | cast IntegerType to DecimalType(10,2) | 
convert | cast/cast_from_int.sql (new); cast/cast_from_int_ansi.sql (new) |
   | `CometNativeCastSuite` | 432 | cast IntegerType to DecimalType(10,2) 
overflow check | convert | cast/cast_from_int.sql (new); 
cast/cast_from_int_ansi.sql (new) |
   | `CometNativeCastSuite` | 438 | cast IntegerType to DecimalType check 
arbitrary scale and precision | convert | cast/cast_from_int.sql (new) |
   | `CometNativeCastSuite` | 446 | cast IntegerType to StringType | convert | 
cast/cast_from_int.sql (new); cast/cast_from_int_ansi.sql (new) |
   | `CometNativeCastSuite` | 450 | cast IntegerType to BinaryType | convert | 
cast/cast_from_int.sql (new); cast/cast_from_int_ansi.sql (new) |
   | `CometNativeCastSuite` | 455 | cast IntegerType to TimestampType | convert 
| cast/cast_integral_to_timestamp.sql (new) |
   | `CometNativeCastSuite` | 465 | cast LongType to BooleanType | convert | 
cast/cast_from_long.sql (new); cast/cast_from_long_ansi.sql (new) |
   | `CometNativeCastSuite` | 469 | cast LongType to ByteType | convert | 
cast/cast_from_long.sql (new); cast/cast_from_long_ansi.sql (new) |
   | `CometNativeCastSuite` | 474 | cast LongType to ShortType | convert | 
cast/cast_from_long.sql (new); cast/cast_from_long_ansi.sql (new) |
   | `CometNativeCastSuite` | 479 | cast LongType to IntegerType | convert | 
cast/cast_from_long.sql (new); cast/cast_from_long_ansi.sql (new) |
   | `CometNativeCastSuite` | 484 | cast LongType to FloatType | convert | 
cast/cast_from_long.sql (new); cast/cast_from_long_ansi.sql (new) |
   | `CometNativeCastSuite` | 488 | cast LongType to DoubleType | convert | 
cast/cast_from_long.sql (new); cast/cast_from_long_ansi.sql (new) |
   | `CometNativeCastSuite` | 492 | cast LongType to DecimalType(10,2) | 
convert | cast/cast_from_long.sql (new); cast/cast_from_long_ansi.sql (new) |
   | `CometNativeCastSuite` | 496 | cast LongType to StringType | convert | 
cast/cast_from_long.sql (new); cast/cast_from_long_ansi.sql (new) |
   | `CometNativeCastSuite` | 500 | cast LongType to BinaryType | convert | 
cast/cast_from_long.sql (new); cast/cast_from_long_ansi.sql (new) |
   | `CometNativeCastSuite` | 505 | cast LongType to TimestampType | convert | 
cast/cast_long_to_timestamp.sql (new) |
   | `CometNativeCastSuite` | 520 | cast FloatType to BooleanType | convert | 
cast/cast_from_float.sql (new); cast/cast_from_float_ansi.sql (new) |
   | `CometNativeCastSuite` | 524 | cast FloatType to ByteType | convert | 
cast/cast_from_float.sql (new); cast/cast_from_float_ansi.sql (new) |
   | `CometNativeCastSuite` | 528 | cast FloatType to ShortType | convert | 
cast/cast_from_float.sql (new); cast/cast_from_float_ansi.sql (new) |
   | `CometNativeCastSuite` | 532 | cast FloatType to IntegerType | convert | 
cast/cast_from_float.sql (new); cast/cast_from_float_ansi.sql (new) |
   | `CometNativeCastSuite` | 536 | cast FloatType to LongType | convert | 
cast/cast_from_float.sql (new); cast/cast_from_float_ansi.sql (new) |
   | `CometNativeCastSuite` | 554 | cast FloatType to IntegerType - ANSI 
boundary values | convert | cast/cast_floating_to_integral_ansi.sql (new); 
cast/cast_from_float.sql (new) |
   | `CometNativeCastSuite` | 569 | cast FloatType to LongType - ANSI boundary 
values | convert | cast/cast_floating_to_integral_ansi.sql (new); 
cast/cast_from_float.sql (new) |
   | `CometNativeCastSuite` | 596 | cast FloatType to ShortType - ANSI boundary 
values | convert | cast/cast_floating_to_integral_ansi.sql (new); 
cast/cast_from_float.sql (new) |
   | `CometNativeCastSuite` | 612 | cast FloatType to ByteType - ANSI boundary 
values | convert | cast/cast_floating_to_integral_ansi.sql (new); 
cast/cast_from_float.sql (new) |
   | `CometNativeCastSuite` | 627 | cast FloatType to DoubleType | convert | 
cast/cast_from_float.sql (new); cast/cast_from_float_ansi.sql (new) |
   | `CometNativeCastSuite` | 631 | cast FloatType to DecimalType(10,2) | 
convert | cast/cast_from_float.sql (new); cast/cast_from_float_ansi.sql (new) |
   | `CometNativeCastSuite` | 650 | cast FloatType to DecimalType - rounding 
edge cases | convert | cast/cast_from_float.sql (new); 
cast/cast_from_float_ansi.sql (new) |
   | `CometNativeCastSuite` | 654 | cast FloatType to StringType | convert | 
cast/cast_float_to_string.sql (new) |
   | `CometNativeCastSuite` | 673 | cast FloatType to TimestampType | convert | 
cast/cast_floating_to_timestamp.sql (new); 
cast/cast_floating_to_timestamp_ansi.sql (new) |
   | `CometNativeCastSuite` | 684 | cast DoubleType to BooleanType | convert | 
cast/cast_from_double.sql (new); cast/cast_from_double_ansi.sql (new) |
   | `CometNativeCastSuite` | 688 | cast DoubleType to ByteType | convert | 
cast/cast_from_double.sql (new); cast/cast_from_double_ansi.sql (new) |
   | `CometNativeCastSuite` | 692 | cast DoubleType to ShortType | convert | 
cast/cast_from_double.sql (new); cast/cast_from_double_ansi.sql (new) |
   | `CometNativeCastSuite` | 696 | cast DoubleType to IntegerType | convert | 
cast/cast_from_double.sql (new); cast/cast_from_double_ansi.sql (new) |
   | `CometNativeCastSuite` | 700 | cast DoubleType to LongType | convert | 
cast/cast_from_double.sql (new); cast/cast_from_double_ansi.sql (new) |
   | `CometNativeCastSuite` | 704 | cast DoubleType to IntegerType - ANSI 
boundary values | convert | cast/cast_floating_to_integral_ansi.sql (new); 
cast/cast_from_double.sql (new) |
   | `CometNativeCastSuite` | 719 | cast DoubleType to LongType - ANSI boundary 
values | convert | cast/cast_floating_to_integral_ansi.sql (new); 
cast/cast_from_double.sql (new) |
   | `CometNativeCastSuite` | 745 | cast DoubleType to ShortType - ANSI 
boundary values | convert | cast/cast_floating_to_integral_ansi.sql (new); 
cast/cast_from_double.sql (new) |
   | `CometNativeCastSuite` | 762 | cast DoubleType to ByteType - ANSI boundary 
values | convert | cast/cast_floating_to_integral_ansi.sql (new); 
cast/cast_from_double.sql (new) |
   | `CometNativeCastSuite` | 778 | cast DoubleType to FloatType | convert | 
cast/cast_from_double.sql (new); cast/cast_from_double_ansi.sql (new) |
   | `CometNativeCastSuite` | 782 | cast DoubleType to DecimalType(10,2) | 
convert | cast/cast_from_double.sql (new); cast/cast_from_double_ansi.sql (new) 
|
   | `CometNativeCastSuite` | 786 | cast DoubleType to DecimalType - rounding 
edge cases | convert | cast/cast_from_double.sql (new); 
cast/cast_from_double_ansi.sql (new) |
   | `CometNativeCastSuite` | 790 | cast DoubleType to StringType | convert | 
cast/cast_double_to_string.sql |
   | `CometNativeCastSuite` | 809 | cast DoubleType to TimestampType | convert 
| cast/cast_floating_to_timestamp.sql (new); 
cast/cast_floating_to_timestamp_ansi.sql (new) |
   | `CometNativeCastSuite` | 820 | cast DecimalType(10,2) to BooleanType | 
convert | cast/cast_decimal_to_primitive.sql; 
cast/cast_decimal_to_primitive_ansi.sql (new) |
   | `CometNativeCastSuite` | 824 | cast DecimalType(10,2) to ByteType | 
convert | cast/cast_decimal_to_primitive.sql; 
cast/cast_decimal_to_primitive_ansi.sql (new) |
   | `CometNativeCastSuite` | 828 | cast DecimalType(10,2) to ShortType | 
convert | cast/cast_decimal_to_primitive.sql; 
cast/cast_decimal_to_primitive_ansi.sql (new) |
   | `CometNativeCastSuite` | 835 | cast DecimalType(10,2) to IntegerType | 
convert | cast/cast_decimal_to_primitive.sql; 
cast/cast_decimal_to_primitive_ansi.sql (new) |
   | `CometNativeCastSuite` | 839 | cast DecimalType(10,2) to LongType | 
convert | cast/cast_decimal_to_primitive.sql; 
cast/cast_decimal_to_primitive_ansi.sql (new) |
   | `CometNativeCastSuite` | 843 | cast DecimalType(10,2) to FloatType | 
convert | cast/cast_decimal_to_primitive.sql; 
cast/cast_decimal_to_primitive_ansi.sql (new) |
   | `CometNativeCastSuite` | 847 | cast DecimalType(10,2) to DoubleType | 
convert | cast/cast_decimal_to_primitive.sql; 
cast/cast_decimal_to_primitive_ansi.sql (new) |
   | `CometNativeCastSuite` | 853 | cast DecimalType(15,5) to IntegerType | 
convert | cast/cast_decimal_to_primitive.sql; 
cast/cast_decimal_to_primitive_ansi.sql (new) |
   | `CometNativeCastSuite` | 857 | cast DecimalType(15,5) to LongType | 
convert | cast/cast_decimal_to_primitive.sql; 
cast/cast_decimal_to_primitive_ansi.sql (new) |
   | `CometNativeCastSuite` | 861 | cast DecimalType(15,5) to BooleanType | 
convert | cast/cast_decimal_to_primitive.sql; 
cast/cast_decimal_to_primitive_ansi.sql (new) |
   | `CometNativeCastSuite` | 867 | cast DecimalType(20,0) to IntegerType | 
convert | cast/cast_decimal_to_primitive.sql; 
cast/cast_decimal_to_primitive_ansi.sql (new) |
   | `CometNativeCastSuite` | 871 | cast DecimalType(20,0) to LongType | 
convert | cast/cast_decimal_to_primitive.sql; 
cast/cast_decimal_to_primitive_ansi.sql (new) |
   | `CometNativeCastSuite` | 875 | cast DecimalType(20,0) to BooleanType | 
convert | cast/cast_decimal_to_primitive.sql; 
cast/cast_decimal_to_primitive_ansi.sql (new) |
   | `CometNativeCastSuite` | 879 | cast DecimalType(38,18) to ByteType | 
convert | cast/cast_decimal_to_primitive.sql; 
cast/cast_decimal_to_primitive_ansi.sql (new) |
   | `CometNativeCastSuite` | 883 | cast DecimalType(38,18) to ShortType | 
convert | cast/cast_decimal_to_primitive.sql; 
cast/cast_decimal_to_primitive_ansi.sql (new) |
   | `CometNativeCastSuite` | 890 | cast DecimalType(38,18) to IntegerType | 
convert | cast/cast_decimal_to_primitive.sql; 
cast/cast_decimal_to_primitive_ansi.sql (new) |
   | `CometNativeCastSuite` | 897 | cast DecimalType(38,18) to LongType | 
convert | cast/cast_decimal_to_primitive.sql; 
cast/cast_decimal_to_primitive_ansi.sql (new) |
   | `CometNativeCastSuite` | 904 | cast DecimalType(38,18) to FloatType | 
convert | cast/cast_decimal_to_primitive.sql; 
cast/cast_decimal_to_primitive_ansi.sql (new) |
   | `CometNativeCastSuite` | 918 | cast DecimalType(38,18) to DoubleType | 
convert | cast/cast_decimal_to_primitive.sql; 
cast/cast_decimal_to_primitive_ansi.sql (new) |
   | `CometNativeCastSuite` | 932 | cast DecimalType(38,18) to BooleanType | 
convert | cast/cast_decimal_to_primitive.sql; 
cast/cast_decimal_to_primitive_ansi.sql (new) |
   | `CometNativeCastSuite` | 941 | cast DecimalType(10,2) to StringType | 
convert | cast/cast_decimal_to_string.sql (new); 
cast/cast_decimal_to_string_ansi.sql (new) |
   | `CometNativeCastSuite` | 945 | cast DecimalType(38,18) to StringType | 
convert | cast/cast_decimal_to_string.sql (new); 
cast/cast_decimal_to_string_ansi.sql (new) |
   | `CometNativeCastSuite` | 949 | cast DecimalType(38,10) to FloatType | 
convert | cast/cast_decimal_to_primitive.sql; 
cast/cast_decimal_to_primitive_ansi.sql (new) |
   | `CometNativeCastSuite` | 953 | cast DecimalType(38,10) to DoubleType | 
convert | cast/cast_decimal_to_primitive.sql; 
cast/cast_decimal_to_primitive_ansi.sql (new) |
   | `CometNativeCastSuite` | 957 | cast DecimalType with negative scale to 
StringType | keep |  |
   | `CometNativeCastSuite` | 1017 | cast DecimalType(10,2) to TimestampType | 
convert | cast/cast_decimal_to_timestamp.sql (new) |
   | `CometNativeCastSuite` | 1021 | cast DecimalType(38,10) to TimestampType | 
convert | cast/cast_decimal_to_timestamp.sql (new) |
   | `CometNativeCastSuite` | 2035 | cast between decimals with different 
precision and scale | convert | cast/cast_decimal_to_decimal.sql (new); 
cast/cast_decimal_to_decimal_ansi.sql (new) |
   | `CometNativeCastSuite` | 2047 | cast between decimals with higher 
precision than source | convert | cast/cast_decimal_to_decimal.sql (new); 
cast/cast_decimal_to_decimal_ansi.sql (new) |
   | `CometNativeCastSuite` | 2052 | cast StringType to DecimalType with 
negative scale (allowNegativeScaleOfDecimal) | keep |  |
   | `CometNativeCastSuite` | 2065 | cast between decimals with negative 
precision | convert | cast/cast_decimal_to_decimal.sql (new) |
   | `CometNativeCastSuite` | 2079 | cast between decimals with zero precision 
| convert | cast/cast_decimal_to_decimal.sql (new); 
cast/cast_decimal_to_decimal_ansi.sql (new) |
   
   </details>
   


-- 
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]


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to