Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Retain result type after UNION as base type in T-SQL (#487) #503

Conversation

hopebo
Copy link
Contributor

@hopebo hopebo commented Dec 17, 2024

Description

When a base type such as money is UNIONed with another integer type, the result type will be fixeddecimal instead of money, which is inconsistent with SQL Server's behaviour. And could also cause some characters not displaying well.

Analysis

The root cause of the issue is Postgres will consider the base type of domain type as the result type. In Babelfish, money is implemented as a domain type of fixeddecimal. Actually, money is a base type in T-SQL, thus Babelfish should retain money type after UNION.

Fix

After a final type has determined by the optimizer, check if it's a base type in T-SQL. If it is, try to use the domain type as result type if the domain type has higher precision than other types.

Task: BABEL-5242

Cherry-picked from https://github.com/amazon-aurora/postgresql_modified_for_babelfish/pull/new/babel_5242_dev15

  • Commits are signed per the DCO using --signoff

By submitting this pull request, I confirm that my contribution is under the terms of the PostgreSQL license, and grant any person obtaining a copy of the contribution permission to relicense all or a portion of my contribution to the PostgreSQL License solely to contribute all or a portion of my contribution to the PostgreSQL open source project.

For more information on following Developer Certificate of Origin and signing off your commits, please check here.

…ostgresql#487)

Description
-----------
When a base type such as `money` is UNIONed with another integer type,
the result type will be `fixeddecimal` instead of `money`, which is
inconsistent with SQL Server's behaviour. And could also cause some
characters not displaying well.

Analysis
--------
The root cause of the issue is Postgres will consider the base type of
domain type as the result type. In Babelfish, `money` is implemented
as a domain type of `fixeddecimal`. Actually, `money` is a base type
in T-SQL, thus Babelfish should retain `money` type after UNION.

Fix
---
After a final type has determined by the optimizer, check if it's a
base type in T-SQL. If it is, try to use the domain type as result
type if the domain type has higher precision than other types.

Task: BABEL-5242
Signed-off-by: Bo Li <[email protected]>
@shardgupta shardgupta merged commit bdb8416 into babelfish-for-postgresql:BABEL_3_X_DEV__PG_15_X Dec 19, 2024
2 checks passed
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.

2 participants