branch-4.0: [fix](timestamptz) Report TIMESTAMPTZ as string to MySQL clients #63292#63805
Closed
zclllyybb wants to merge 3 commits into
Closed
branch-4.0: [fix](timestamptz) Report TIMESTAMPTZ as string to MySQL clients #63292#63805zclllyybb wants to merge 3 commits into
zclllyybb wants to merge 3 commits into
Conversation
TIMESTAMPTZ result rows are serialized as timezone-aware strings in the MySQL binary protocol. FE metadata used to advertise them as MYSQL_TYPE_DATETIME, so Connector/J decoded the length-encoded string bytes as a MySQL datetime binary payload and failed with Invalid length (32) for type TIMESTAMP when ResultSet.getString read a server-prepared result. Change PrimitiveType.toMysqlType() to return MYSQL_TYPE_STRING for TIMESTAMPTZ, adjust the field packet length and decimals to string semantics, and make the FE local binary result path write TIMESTAMPTZ through the string fallback instead of the datetime binary layout. BE serialization already uses push_timestamptz -> push_string, so no BE payload change is needed. Add a field-packet unit test and a regression suite that forces ServerPreparedStatement and compares direct ResultSet.getString(ts) with CAST(ts AS STRING). Verification: - ./run-fe-ut.sh --run org.apache.doris.mysql.MysqlSerializerVarbinaryTest - ./run-regression-test.sh --run -d datatype_p0/timestamptz -s test_timestamptz_jdbc_binary_protocol (cherry picked from commit ecac996)
The TIMESTAMPTZ MySQL metadata fix now reports TIMESTAMPTZ columns as string fields to JDBC clients. That makes direct TIMESTAMPTZ query results use Doris' timezone-aware textual representation instead of the MySQL driver's previous ISO-style timestamp formatting. Refresh the affected regression baselines for datatype TIMESTAMPTZ casts, date-function document cases, and the Paimon TIMESTAMPTZ external table case. The Paimon direct scanner outputs are aligned with the TeamCity external-regression real result and the corresponding cast output format. Verification: ./run-regression-test.sh --conf /tmp/doris-regression-conf-9737.groovy --run -d datatype_p0/timestamptz -s test_timestamptz_cast; ./run-regression-test.sh --conf /tmp/doris-regression-conf-9737.groovy --run -d datatype_p0/timestamptz -s test_cast_timestamptz; ./run-regression-test.sh --conf /tmp/doris-regression-conf-9737.groovy --run -d doc/sql-manual/sql-functions -s doc_date_functions_test. All passed. (cherry picked from commit 0a39514)
Contributor
|
Thank you for your contribution to Apache Doris. Please clearly describe your PR:
|
Contributor
Author
|
run buildall |
Contributor
Author
|
run buildall |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
pick #63292