SEPURI-SAI-KRISHNA opened a new issue, #12620:
URL: https://github.com/apache/seatunnel/issues/12620
Follow-up requested by @DanielLeens on #12617, to be implemented only after
#12495 and #12618 land so the guard is evaluated against the post-fix baseline.
## Baseline, enumerated on `dev` `af80a6704`
All 228 `src/main` java files in `seatunnel-transforms-v2` were scanned.
There are **24** bare `toUpperCase()` / `toLowerCase()` call sites:
| area | file | sites | covered by |
| --- | --- | --- | --- |
| sql | SQLTransform:84 | 1 | #12495 |
| sql | zeta/ZetaSQLFunction:459,687,707 | 3 | #12495 |
| sql | zeta/ZetaSQLType:323,570 | 2 | #12495 |
| sql | zeta/functions/DateTimeFunction:70,185,264,384 | 4 | #12495 |
| sql | zeta/functions/CastFunction:93 | 1 | #12495 |
| sql | zeta/functions/SystemFunction:275 | 1 | #12495 |
| sql | zeta/functions/VectorFunction:270 | 1 | #12495 |
| calcite | udf/BuiltinFunctions:54, udf/VectorReduceFunction:60 | 2 |
#12618 |
| nlpmodel | embedding/multimodal/ModalityType:60,78,102 | 3 | #12618 |
| nlpmodel | embedding/multimodal/PayloadFormat:40 | 1 | #12618 |
| nlpmodel | embedding/remote/doubao/DoubaoModel:388 | 1 | #12618 |
| nlpmodel | llm/remote/AbstractModel:123 | 1 | #12618 |
| nlpmodel | ModelInvocationCacheKey:144 | 1 | #12618 |
| validator | DataValidatorTransformConfig:168,336 | 2 | #12618 |
13 + 11 = 24, so the two open PRs together take this module to zero. That is
the baseline a guard would protect.
## One correction to the scope discussion
On #12617 both `FieldRenameTransform:167/170` and
`TableRenameTransform:153/155` were described as bare case conversion to be
excluded as user-data casing. On current `dev` they are **already locale
independent**:
- `FieldRenameTransform:186,189` -> `toUpperCase(Locale.ROOT)` /
`toLowerCase(Locale.ROOT)`
- `TableRenameTransform:173,175` -> same
They were changed by #11994 ("Make rename transform case conversion locale
independent"), merged 2026-09-10. The cited line numbers match a revision older
than that commit.
This matters for the contract: the "preserve intentional user-data casing"
category currently has **no members** in this module, and #11994 is a precedent
that chose `Locale.ROOT` even for user-requested rename output. So the question
to settle is whether we still want that carve-out at all, or whether the rule
is simply "always a fixed locale" with #11994 as the stated precedent.
## To settle before proposing any mechanism
1. Is the rule "always `Locale.ROOT`", or "fixed locale for internal tokens,
caller locale for user-visible data"? If the latter, we need a concrete
surviving example, since the two candidates are already converted.
2. How is a deliberate exception recorded so a guard can accept it: an
annotation, a suppression file, or a comment convention?
3. Does the contract cover only `String` case conversion, or also
`String.format`, `Collator`, `SimpleDateFormat` and `Calendar.getInstance`,
which have the same default-locale dependence?
Per @DanielLeens, this issue deliberately does **not** propose a Checkstyle
or forbidden-apis dependency or a regex CI gate. Mechanism should be chosen
after the scope above is agreed.
--
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]