Support empty string handling for date and time datatypes #3807
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.
Overview
Add TSQL-compatible handling of empty string ('') for date and time types, defaulting to '1900-01-01' for date and time, similar to datetime, datetime2, datetimeoffset, smalldatetime.
Task: BABEL-3433
Description
In SQL Server, when an empty string ('') is cast to
date
ortime
datatype, it should be return a default value - '1900-01-01' for date and '00:00:00.0000000' for time. Currently, Babelfish raises a syntax error for these cases. This change improves TSQL compatibility by matching SQL Server's behavior for empty string handling in date and time datatypes, while maintaining existing behavior for non-empty inputs.Changes:
initializeToDefaultDate()
- Returns default date '1900-01-01'initializeToDefaultTime()
- Returns default time '00:00:00.0000000'isEmptyOrWhitespace()
- Checks if string is empty or contains only whitespacevarchar2date()
andvarchar2time()
functions for CAST operations from varchar and nvarchar typestsql_coerce_string_literal_hook
for string literalsRemaining items out of current scope:
BABEL-5923
Issues Resolved
BABEL-3433: Support for empty input string handling in date and time datatypes
Test Scenarios Covered [+
BABEL_3433.sql
]** The insertion subsequently affects the existing FORMAT date function tests with various arguments for tables date_testing, time_testing.
Boundary conditions -
Arbitrary inputs -
Negative test cases -
Minor version upgrade tests -
Major version upgrade tests -
Performance tests -
Tooling impact -
Client tests -
Check List
By submitting this pull request, I confirm that my contribution is under the terms of the Apache 2.0 and PostgreSQL licenses, 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.