### What problem does this PR solve?
Issue Number: N/A
Related PR: N/A
Problem Summary:
JNI `NewStringUTF` and `GetStringUTFChars` use modified UTF-8, while
native scanner/writer parameters and paths use standard UTF-8. Passing a
SQL predicate containing an emoji to `NewStringUTF` can corrupt or
truncate it before the JDBC driver receives it. Returned maps also
encode supplementary characters differently and cannot preserve a
standard UTF-8 round trip.
- Add validated standard UTF-8 ↔ UTF-16 conversion helpers and use them
for both directions of parameter/statistics maps. Preserve supplementary
characters and embedded NULs; reject malformed UTF-8 and unpaired UTF-16
surrogates with an input offset.
- Migrate Paimon writer text, column/directory arrays, spill-path
callbacks, and exception messages to these helpers. Reuse one array
builder and preserve native spill-path matching and accounting.
- Use standard UTF-8 for dynamic UDF cache signatures and plugin status
JSON as well.
- Use native temporary conversion buffers that do not require a Doris
`ThreadContext`, and return native allocation failures as `Status`.
Regressions exercise JNI-attached threads without a Doris context,
including spill callbacks and accounting.
- Fix the existing `String<Global>::new_string` template instantiation
and keep the legacy modified UTF-8 APIs' encoding contract.
### Release note
Fix Unicode corruption in JNI parameters, returned maps, and Paimon
metadata and spill paths. Invalid text encodings now fail explicitly.
### Check List (For Author)
- Test
- [ ] Regression test
- [x] Unit Test
- [ ] Manual test (add detailed scripts or steps below)
- [ ] No need to test or manual test. Explain why:
- [ ] This is a refactor/code format and no logic has been changed.
- [ ] Previous test can cover this change.
- [ ] No code files have been changed.
- [ ] Other reason
Validation: Focused ASAN_UT build and execution via `./run-be-ut.sh
--run
--filter='JniUtf8DeathTest.*:JniUtf8Test.*:JniPaimonUtf8DeathTest.*:JniPaimonUtf8Test.*:JniPaimonWriteBackendTest.*:PaimonWriteBackendFactoryTest.*:PaimonWriteBackendTest.*:PaimonTableSinkOperatorTest.*:PaimonTableWriterTest.*'
-j 6`: **23 passed, 0 failed, 0 skipped**. This includes 13 real-JVM
subprocess tests, 3 JNI allocation-failure tests, and 7 existing Paimon
backend tests. The local test source list was temporarily narrowed;
production libraries and ASAN configuration were retained, and the CMake
selection was restored afterward. Full BE/regression suites, complete
Paimon writes, and the customer-specific JDBC environment were not run.
Style/static checks: clang-format 16, build hygiene, and clang-tidy
checks passed.
- Behavior changed:
- [ ] No.
- [x] Yes. JNI text boundaries preserve standard UTF-8; malformed input
is rejected instead of being silently corrupted. Existing modified UTF-8
APIs retain their contract.
- Does this need documentation?
- [x] No.
- [ ] Yes.
### Check List (For Reviewer who merge this PR)
- [ ] Confirm the release note
- [ ] Confirm test cases
- [ ] Confirm document
- [ ] Add branch pick label
🌍 Read this in other language
English • العربية • বাংলা • Deutsch • Español • فارسی • Français • हिन्दी • Bahasa Indonesia • Italiano • 日本語 • 한국어 • Polski • Português • Română • Русский • Slovenščina • ไทย • Türkçe • Українська • Tiếng Việt • 简体中文 • 繁體中文
Apache Doris is an open-source, real-time analytics and search database built on MPP architecture. It provides fast SQL analytics, lakehouse query acceleration, and hybrid search across structured, text, and vector data.
Explore the official website for the latest product overview, use cases, ecosystem updates, blogs, and user stories. For version updates, see all release notes.
📈 Use Cases
| Use Case | What it provides |
|---|---|
| Customer-Facing Analytics | Ship sub-second interactive analytics to external users. |
| Data Warehousing | Build one real-time warehouse across business domains. |
| Observability | Analyze high-throughput logs, events, and metrics with SQL. |
| Doris for AI | Use vector, text, JSON, and structured search in one SQL engine. |
🚀 Core Capabilities
Apache Doris is built around three core capabilities. The website is the source of truth for detailed product descriptions and examples.
| Capability | What it provides |
|---|---|
| Real-Time Analytics | Streaming ingestion, incremental transformation, and sub-second queries under high concurrency. |
| Lakehouse Analytics | Fast SQL analytics over open table formats such as Iceberg, Delta Lake, and Hudi. |
| Hybrid Search | SQL-native analytics across JSON, full-text, and vector data for AI and search workloads. |
🔌 Ecosystem
Doris sits at the center of the modern data stack. It connects upstream databases, streaming systems, and lakehouse storage with downstream BI, AI, analytics, and observability tools.
For the latest ecosystem coverage, visit the official website and the connection and integration documentation.
👣 Get Started
🧱 Architecture
Apache Doris supports both compute-storage coupled and compute-storage decoupled deployments. In decoupled mode, stateless compute groups run over shared object storage, so you can scale compute on demand and isolate workloads.
Learn more in the deployment guide and deployment mode guide.
📣 Project Updates
| Resource | What it provides |
|---|---|
| Community Report | Weekly updates on community activity, merged PRs, contributors, and feature progress. |
| Roadmap 2026 | The 2026 planning discussion for AI and hybrid search, query engine, storage, and data lake work. |
🧩 Components
Doris provides connectors and tools for common data engineering workflows.
- Doris Flink Connector
- Doris Spark Connector
- Doris Kafka Connector
- Doris Stream Loader
- Doris Kubernetes Operator
👨👩👧👦 Users
Apache Doris is used in production by thousands of companies worldwide across internet services, finance, retail, logistics, manufacturing, energy, telecommunications, AI, and other industries.
🙌 Contributors
Apache Doris graduated from the Apache Incubator and became an Apache Top-Level Project in June 2022. Thanks to all community contributors who help build Doris.
🌈 Community and Support
💬 Contact Us
🧰 Links
- Apache Doris official website: doris.apache.org
- X: @doris_apache
- Medium: @ApacheDoris
📜 License
Note
Some licenses of the third-party dependencies are not compatible with Apache 2.0 License. So you need to disable some Doris features to comply with Apache 2.0 License. For details, refer to the
thirdparty/LICENSE.txt

