Skip to content

[#12764] fix(doris): preserve defaults when adding columns - #12767

Open
jiangxt2 wants to merge 1 commit into
apache:mainfrom
jiangxt2:fix/doris-add-column-default-value
Open

[#12764] fix(doris): preserve defaults when adding columns#12767
jiangxt2 wants to merge 1 commit into
apache:mainfrom
jiangxt2:fix/doris-add-column-default-value

Conversation

@jiangxt2

@jiangxt2 jiangxt2 commented Sep 1, 2026

Copy link
Copy Markdown
Contributor

What changes were proposed in this pull request?

This pull request makes the JDBC Doris catalog include TableChange.AddColumn.getDefaultValue() when generating ALTER TABLE ... ADD COLUMN SQL. It adds an ADD-only Doris default serializer so CREATE TABLE and MODIFY COLUMN continue using their existing write-serialization paths.

The serializer preserves unset, explicit null, numeric, string, and CURRENT_TIMESTAMP semantics. For string defaults containing backslashes, it performs one Doris version lookup per ALTER request and applies the additional escape layer required by Doris 3.x while retaining the existing form on Doris 1.2.x and 4.x. The read path normalizes the escaped string forms returned by Doris JDBC metadata.

The patch also adds focused SQL-generation and converter tests plus end-to-end ADD COLUMN, metadata round-trip, and omitted-column INSERT coverage for the repository's Doris 1.2.x test image (Doris 1.2.7.1), Doris 3.0.6.2, and Doris 4.0.6.

Why are the changes needed?

The Doris catalog accepts a default value through the public AddColumn API but currently omits it from the generated column definition. A nullable column can therefore be added while silently losing its requested default, and Doris may reject a non-nullable column because the generated ADD COLUMN statement has no default.

Doris versions also parse backslashes in ALTER ADD COLUMN defaults differently. Keeping this compatibility handling in an ADD-specific write path preserves the requested default without changing CREATE TABLE or unrelated MODIFY COLUMN write serialization. This patch separately normalizes the escaped string-default forms returned by Doris JDBC metadata during loadTable().

Fix: #12764

Does this PR introduce any user-facing change?

Yes. Doris ADD COLUMN operations now preserve supported literal defaults and CURRENT_TIMESTAMP; explicit DEFAULT NULL remains distinct from an unset default at SQL generation time. For a literal default containing a backslash, the connector executes SHOW FRONTENDS once per ALTER request to select the Doris-compatible escaping; the operation fails with an explicit error if the connection user cannot run that statement. Defaults without a backslash do not trigger this version lookup. No public API or property key is added or removed.

How was this patch tested?

  • ./gradlew :catalogs:catalog-jdbc-doris:spotlessCheck
  • ./gradlew rat
  • ./gradlew :catalogs:catalog-jdbc-doris:test -PskipITs
  • ./gradlew :catalogs:catalog-jdbc-doris:test --tests 'org.apache.gravitino.catalog.doris.integration.test.CatalogDorisIT.testAddColumnPreservesDefaultValue' -PskipDockerTests=false -PdorisMultiVersionTest
  • ./gradlew :catalogs:catalog-jdbc-doris:test --tests 'org.apache.gravitino.catalog.doris.integration.test.CatalogDoris3xIT.testAddColumnPreservesDefaultValue' -PskipDockerTests=false -PdorisMultiVersionTest
  • ./gradlew :catalogs:catalog-jdbc-doris:test --tests 'org.apache.gravitino.catalog.doris.integration.test.CatalogDoris4xIT.testAddColumnPreservesDefaultValue' -PskipDockerTests=false -PdorisMultiVersionTest
  • ./gradlew :catalogs:catalog-jdbc-doris:build -x test

All listed commands passed.

Signed-off-by: jiangxt2 <jiangxt2@vip.qq.com>
@github-actions

github-actions Bot commented Sep 1, 2026

Copy link
Copy Markdown

Code Coverage Report

Overall Project 68.87% +1.05% 🟢
Files changed 85.29% 🟢

Module Coverage
aliyun 19.74% 🔴
api 51.74% -0.13% 🟢
authorization-common 85.96% 🟢
authorization-ranger 4.38% 🔴
aws 53.54% 🟢
azure 32.1% 🔴
catalog-common 19.1% 🔴
catalog-fileset 80.3% 🟢
catalog-glue 69.24% 🟢
catalog-hive 82.96% 🟢
catalog-jdbc-common 45.69% 🟢
catalog-jdbc-doris 84.68% +0.6% 🟢
catalog-jdbc-mysql 79.33% 🟢
catalog-jdbc-postgresql 83.39% 🟢
catalog-jdbc-starrocks 79.16% 🟢
catalog-kafka 76.99% 🟢
catalog-lakehouse-generic 60.55% 🟢
catalog-lakehouse-hudi 79.1% 🟢
catalog-lakehouse-iceberg 85.86% 🟢
catalog-lakehouse-paimon 84.26% 🟢
catalog-model 77.99% 🟢
cli 44.48% 🟢
client-java 77.48% +0.05% 🟢
common 55.43% -2.03% 🟢
core 83.79% +0.9% 🟢
filesystem-hadoop3 76.45% 🟢
flink 0.0% 🔴
flink-common 52.1% 🟢
flink-runtime 0.0% 🔴
gcp 32.2% 🔴
hadoop-auth 68.0% 🟢
hadoop-common 17.84% 🔴
hive-metastore-common 53.4% 🟢
iceberg-aliyun-bundle 0.0% 🔴
iceberg-common 64.75% 🟢
iceberg-rest-server 75.96% 🟢
idp-basic 85.98% 🟢
integration-test-common 0.0% 🔴
jobs 62.92% 🟢
lance-common 32.63% 🔴
lance-rest-server 65.46% 🟢
lineage 53.02% 🟢
optimizer 83.24% 🟢
optimizer-api 21.95% 🔴
server 88.15% +4.74% 🟢
server-common 80.5% 🟢
spark 28.57% 🔴
spark-common 48.92% 🟢
tencent 81.78% 🟢
trino-connector 51.26% 🟢
Files
Module File Coverage
api JobHandle.java 0.0% 🔴
catalog-jdbc-doris DorisTableOperations.java 87.22% 🟢
DorisColumnDefaultValueConverter.java 65.57% 🟢
client-java GenericJobHandle.java 100.0% 🟢
common JobDTO.java 89.47% 🟢
DTOConverters.java 28.57% 🔴
core GroupMetaBaseSQLProvider.java 100.0% 🟢
JobMetaBaseSQLProvider.java 100.0% 🟢
RoleMetaBaseSQLProvider.java 100.0% 🟢
GroupMetaPostgreSQLProvider.java 100.0% 🟢
JobMetaPostgreSQLProvider.java 100.0% 🟢
RoleMetaPostgreSQLProvider.java 100.0% 🟢
TableMetaService.java 100.0% 🟢
MetalakeMetaService.java 99.34% 🟢
SchemaMetaService.java 97.59% 🟢
JobEntity.java 97.22% 🟢
GroupMetaSQLProviderFactory.java 96.43% 🟢
UserMetaService.java 96.23% 🟢
RoleMetaSQLProviderFactory.java 96.0% 🟢
JobInfo.java 95.45% 🟢
CatalogMetaService.java 95.16% 🟢
RoleMetaService.java 94.83% 🟢
FilesetMetaService.java 93.98% 🟢
GroupMetaService.java 93.07% 🟢
POConverters.java 88.35% 🟢
JobPO.java 88.24% 🟢
JobManager.java 86.88% 🟢
ModelMetaService.java 81.82% 🟢
TopicMetaService.java 77.34% 🟢
GroupMetaMapper.java 0.0% 🔴
RoleMetaMapper.java 0.0% 🔴
server CatalogOperations.java 100.0% 🟢
FunctionOperations.java 100.0% 🟢
ModelOperations.java 100.0% 🟢
SchemaOperations.java 100.0% 🟢
TagOperations.java 100.0% 🟢
ViewOperations.java 100.0% 🟢
PolicyOperations.java 97.35% 🟢
TableOperations.java 97.18% 🟢
TopicOperations.java 97.18% 🟢
JobOperations.java 93.52% 🟢
FilesetOperations.java 85.71% 🟢
MetalakeOperations.java 79.01% 🟢

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Bug report] JDBC Doris ADD COLUMN drops default values

1 participant