Skip to content

Commit

Permalink
Initial commit for Babelfish v4.6 (#3454)
Browse files Browse the repository at this point in the history
This commit contains the following changes:
- Add version info and upgrade test for 14.16, 14.17, 15.11, 15.12 and 16.7.
- Add upgrade schedule files for 14.17, 15.12 and 16.7.
- Bump babelfish_version from 4.5.0 to 4.6.0
- Update T-SQL extension version to 4.6.0 and add following upgrade scripts:
  - babelfishpg_tsql--4.5.0--4.6.0.sql.
  - babelfishpg_tsql--2.13.0--3.0.0.sql (Duplicate of babelfishpg_tsql--2.12.0--3.0.0.sql).
  - babelfishpg_tsql--3.10.0--4.0.0.sql (Duplicate of babelfishpg_tsql--3.9.0--4.0.0.sql).
- Update common extension version to 4.6.0 and add following upgrade scripts:
  - babelfishpg_common_helper--4.5.0--4.6.0.sql.
  - spatial_types--4.5.0--4.6.0.sql.
  - babelfishpg_common--3.9.0--4.0.0.sql (Duplicate of babelfishpg_common--3.8.0--4.0.0.sql).

Signed-off-by: manisha-deshpande <[email protected]>
Co-authored-by: Rishabh Tanwar <[email protected]>
  • Loading branch information
manisha-deshpande and ritanwar authored Feb 7, 2025
1 parent e2ac7f8 commit f4b8498
Show file tree
Hide file tree
Showing 16 changed files with 2,358 additions and 7 deletions.
16 changes: 14 additions & 2 deletions .github/configuration/upgrade-test-configuration.yml
Original file line number Diff line number Diff line change
Expand Up @@ -110,6 +110,18 @@ upgrade-version: [{
}
],
},
{
upgrade-path: [
{
version: '14.17',
upgrade-type: null
},
{
version: target.latest,
upgrade-type: major
}
],
},
{
upgrade-path: [
{
Expand All @@ -125,7 +137,7 @@ upgrade-version: [{
{
upgrade-path: [
{
version: '15.10',
version: '15.12',
upgrade-type: null
},
{
Expand Down Expand Up @@ -161,7 +173,7 @@ upgrade-version: [{
{
upgrade-path: [
{
version: 16.6,
version: 16.7,
upgrade-type: null
},
{
Expand Down
9 changes: 9 additions & 0 deletions .github/template/version-branch-template.yml
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,9 @@
engine_branch: BABEL_2_11_STABLE__PG_14_15
extension_branch: BABEL_2_11_STABLE
'14.16':
engine_branch: BABEL_2_12_STABLE__PG_14_16
extension_branch: BABEL_2_12_STABLE
'14.17':
engine_branch: BABEL_2_X_DEV__PG_14_X
extension_branch: BABEL_2_X_DEV
'15.2':
Expand Down Expand Up @@ -77,6 +80,9 @@
engine_branch: BABEL_3_8_STABLE__PG_15_10
extension_branch: BABEL_3_8_STABLE
'15.11':
engine_branch: BABEL_3_9_STABLE__PG_15_11
extension_branch: BABEL_3_9_STABLE
'15.12':
engine_branch: BABEL_3_X_DEV__PG_15_X
extension_branch: BABEL_3_X_DEV
'16.1':
Expand All @@ -94,6 +100,9 @@
'16.6':
engine_branch: BABEL_4_4_STABLE__PG_16_6
extension_branch: BABEL_4_4_STABLE
'16.7':
engine_branch: BABEL_4_5_STABLE__PG_16_7
extension_branch: BABEL_4_5_STABLE
'source.latest':
engine_branch: latest
extension_branch: latest
Expand Down
9 changes: 8 additions & 1 deletion contrib/babelfishpg_common/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -62,7 +62,8 @@ GENERATED_UPGRADES = \
sql/$(EXTENSION)--4.1.0--4.2.0.sql \
sql/$(EXTENSION)--4.2.0--4.3.0.sql \
sql/$(EXTENSION)--4.3.0--4.4.0.sql \
sql/$(EXTENSION)--4.4.0--4.5.0.sql
sql/$(EXTENSION)--4.4.0--4.5.0.sql \
sql/$(EXTENSION)--4.5.0--4.6.0.sql

ifdef PREV_EXTVERSION
DATA = sql/$(EXTENSION)--$(PREV_EXTVERSION).sql
Expand Down Expand Up @@ -130,6 +131,9 @@ ifeq (,$(filter $(FLAG_TO_CHECK),$(PG_CPPFLAGS)))

sql/$(EXTENSION)--4.4.0--4.5.0.sql: sql/upgrades/babelfishpg_upgrades.in
cpp -D PREV_VERSION=4.4.0 -D CUR_VERSION=4.5.0 $< | sed 's/^# /-- /g' > $@

sql/$(EXTENSION)--4.5.0--4.6.0.sql: sql/upgrades/babelfishpg_upgrades.in
cpp -D PREV_VERSION=4.5.0 -D CUR_VERSION=4.6.0 $< | sed 's/^# /-- /g' > $@
else
# The flag is present build the .in file including the spatial type files
sql/$(EXTENSION)--$(EXTVERSION).sql: sql/$(EXTENSION).in
Expand Down Expand Up @@ -159,6 +163,9 @@ else
sql/$(EXTENSION)--4.4.0--4.5.0.sql: sql/upgrades/babelfishpg_upgrades.in
cpp -D ENABLE_SPATIAL_TYPES=1 -D PREV_VERSION=4.4.0 -D CUR_VERSION=4.5.0 $< | sed 's/^# /-- /g' > $@

sql/$(EXTENSION)--4.5.0--4.6.0.sql: sql/upgrades/babelfishpg_upgrades.in
cpp -D ENABLE_SPATIAL_TYPES=1 -D PREV_VERSION=4.5.0 -D CUR_VERSION=4.6.0 $< | sed 's/^# /-- /g' > $@

endif

sql/babelfishpg_common--%.sql: sql/upgrades/babelfishpg_common--%.sql
Expand Down
2 changes: 1 addition & 1 deletion contrib/babelfishpg_common/Version.config
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
BBFPGCMN_MAJOR_VERSION=4
BBFPGCMN_MINOR_VERSION=5
BBFPGCMN_MINOR_VERSION=6
BBFPGCMN_MICRO_VERSION=0

Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
------------------------------------------------------------------------------
---- Include changes related to other datatypes except spatial types here ----
------------------------------------------------------------------------------

-- complain if script is sourced in psql, rather than via ALTER EXTENSION
\echo Use "ALTER EXTENSION ""babelfishpg_common"" UPDATE TO "4.6.0"" to load this file. \quit
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
-- complain if script is sourced in psql, rather than via ALTER EXTENSION
\echo Use "ALTER EXTENSION ""babelfishpg_common"" UPDATE TO '4.0.0'" to load this file. \quit
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
-------------------------------------------------------
---- Include changes related to spatial types here ----
-------------------------------------------------------
2 changes: 1 addition & 1 deletion contrib/babelfishpg_tsql/Version.config
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,6 @@
# places during the build process

PGTSQL_MAJOR_VERSION=4
PGTSQL_MINOR_VERSION=5
PGTSQL_MINOR_VERSION=6
PGTSQL_MICRO_VERSION=0

Original file line number Diff line number Diff line change
@@ -0,0 +1,103 @@
-- complain if script is sourced in psql, rather than via ALTER EXTENSION
\echo Use "ALTER EXTENSION ""babelfishpg_tsql"" UPDATE TO '3.0.0'" to load this file. \quit

-- add 'sys' to search path for the convenience
SELECT set_config('search_path', 'sys, '||current_setting('search_path'), false);

-- please add your SQL here

CREATE OR REPLACE FUNCTION sys.babelfish_update_server_collation_name() RETURNS VOID
LANGUAGE C
AS 'babelfishpg_common', 'babelfish_update_server_collation_name';

SELECT sys.babelfish_update_server_collation_name();

DROP FUNCTION sys.babelfish_update_server_collation_name();

-- reset babelfishpg_tsql.restored_server_collation_name GUC
do
language plpgsql
$$
declare
query text;
begin
query := pg_catalog.format('alter database %s reset babelfishpg_tsql.restored_server_collation_name', CURRENT_DATABASE());
execute query;
end;
$$;

CREATE OR REPLACE FUNCTION sys.datepart_internal(IN datepart PG_CATALOG.TEXT, IN arg anyelement,IN df_tz INTEGER DEFAULT 0) RETURNS INTEGER AS $$
DECLARE
result INTEGER;
first_day DATE;
first_week_end INTEGER;
day INTEGER;
BEGIN
CASE datepart
WHEN 'dow' THEN
result = (date_part(datepart, arg)::INTEGER - current_setting('babelfishpg_tsql.datefirst')::INTEGER + 7) % 7 + 1;
WHEN 'tsql_week' THEN
first_day = make_date(date_part('year', arg)::INTEGER, 1, 1);
first_week_end = 8 - sys.datepart_internal('dow', first_day)::INTEGER;
day = date_part('doy', arg)::INTEGER;
IF day <= first_week_end THEN
result = 1;
ELSE
result = 2 + (day - first_week_end - 1) / 7;
END IF;
WHEN 'second' THEN
result = TRUNC(date_part(datepart, arg))::INTEGER;
WHEN 'millisecond' THEN
result = right(date_part(datepart, arg)::TEXT, 3)::INTEGER;
WHEN 'microsecond' THEN
result = right(date_part(datepart, arg)::TEXT, 6)::INTEGER;
WHEN 'nanosecond' THEN
-- Best we can do - Postgres does not support nanosecond precision
result = right(date_part('microsecond', arg)::TEXT, 6)::INTEGER * 1000;
WHEN 'tzoffset' THEN
-- timezone for datetimeoffset
result = df_tz;
ELSE
result = date_part(datepart, arg)::INTEGER;
END CASE;
RETURN result;
EXCEPTION WHEN invalid_parameter_value or feature_not_supported THEN
-- date_part() throws an exception when trying to get day/month/year etc. from
-- TIME, so we just need to catch the exception in this case
-- date_part() returns 0 when trying to get hour/minute/second etc. from
-- DATE, which is the desirable behavior for datepart() as well.
-- If the date argument data type does not have the specified datepart,
-- date_part() will return the default value for that datepart.
CASE datepart
-- Case for datepart is year, yy and yyyy, all mappings are defined in gram.y.
WHEN 'year' THEN RETURN 1900;
-- Case for datepart is quater, qq and q
WHEN 'quarter' THEN RETURN 1;
-- Case for datepart is month, mm and m
WHEN 'month' THEN RETURN 1;
-- Case for datepart is day, dd and d
WHEN 'day' THEN RETURN 1;
-- Case for datepart is dayofyear, dy
WHEN 'doy' THEN RETURN 1;
-- Case for datepart is y(also refers to dayofyear)
WHEN 'y' THEN RETURN 1;
-- Case for datepart is week, wk and ww
WHEN 'tsql_week' THEN RETURN 1;
-- Case for datepart is iso_week, isowk and isoww
WHEN 'week' THEN RETURN 1;
-- Case for datepart is tzoffset and tz
WHEN 'tzoffset' THEN RETURN 0;
-- Case for datepart is weekday and dw, return dow according to datefirst
WHEN 'dow' THEN
RETURN (1 - current_setting('babelfishpg_tsql.datefirst')::INTEGER + 7) % 7 + 1 ;
ELSE
RAISE EXCEPTION '''%'' is not a recognized datepart option', datepart;
RETURN -1;
END CASE;
END;
$$
STRICT
LANGUAGE plpgsql IMMUTABLE;

-- Reset search_path to not affect any subsequent scripts
SELECT set_config('search_path', trim(leading 'sys, ' from current_setting('search_path')), false);
Loading

0 comments on commit f4b8498

Please sign in to comment.