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]