Skip to content

Commit 86e4bb6

Browse files
author
anju15bharti
committed
new fix
1 parent 22e8be2 commit 86e4bb6

7 files changed

Lines changed: 538 additions & 82 deletions

File tree

contrib/babelfishpg_tsql/sql/upgrades/babelfishpg_tsql--6.1.0--6.2.0.sql

Lines changed: 478 additions & 62 deletions
Large diffs are not rendered by default.

contrib/babelfishpg_tsql/src/catalog.c

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -720,6 +720,13 @@ dbid_get_original_db_name(int16 dbid)
720720
if (!HeapTupleIsValid(tuple))
721721
return NULL;
722722

723+
/* Guard against old tuples that don't have orig_name yet (after pg_upgrade) */
724+
if (HeapTupleHeaderGetNatts(tuple->t_data) < Anum_sysdatabases_orig_name)
725+
{
726+
ReleaseSysCache(tuple);
727+
return NULL;
728+
}
729+
723730
datum = SysCacheGetAttr(SYSDATABASEOID, tuple, Anum_sysdatabases_orig_name, &isNull);
724731
if (isNull)
725732
{

contrib/babelfishpg_tsql/src/pl_handler.c

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8726,18 +8726,35 @@ void pltsql_bbfSelectIntoUtility(ParseState *pstate, PlannedStmt *pstmt, const c
87268726
*/
87278727
Query *query = castNode(Query, ((CreateTableAsStmt *)parsetree)->query);
87288728
ListCell *tlc;
8729+
List *saved_resnames = NIL;
87298730

87308731
foreach(tlc, query->targetList)
87318732
{
87328733
TargetEntry *tle = (TargetEntry *) lfirst(tlc);
8734+
saved_resnames = lappend(saved_resnames, tle->resname);
87338735
if (tle->resname && strlen(tle->resname) >= NAMEDATALEN)
87348736
{
87358737
tle->resname = pstrdup(tle->resname);
87368738
truncate_identifier(tle->resname, strlen(tle->resname), false);
87378739
}
87388740
}
87398741

8740-
*address = ExecCreateTableAs(pstate, (CreateTableAsStmt *)parsetree, params, queryEnv, qc);
8742+
PG_TRY();
8743+
{
8744+
*address = ExecCreateTableAs(pstate, (CreateTableAsStmt *)parsetree, params, queryEnv, qc);
8745+
}
8746+
PG_FINALLY();
8747+
{
8748+
/* Restore original resnames to prevent UTF8 corruption in TDS response */
8749+
ListCell *slc = list_head(saved_resnames);
8750+
foreach(tlc, query->targetList)
8751+
{
8752+
TargetEntry *tle = (TargetEntry *) lfirst(tlc);
8753+
tle->resname = (char *) lfirst(slc);
8754+
slc = lnext(saved_resnames, slc);
8755+
}
8756+
}
8757+
PG_END_TRY();
87418758
}
87428759
else
87438760
{

test/JDBC/expected/alter_authorization_change_db_owner-vu-verify.out

Lines changed: 16 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -190,7 +190,7 @@ select name, suser_sname(sid) from sysdatabases where name = 'change_owner_db'
190190
go
191191
~~START~~
192192
nvarchar#!#nvarchar
193-
change_owner_db#!#new_OWNER_login
193+
CHANGE_OWNER_DB#!#new_OWNER_login
194194
~~END~~
195195

196196

@@ -221,7 +221,7 @@ select suser_name(), db_name()
221221
go
222222
~~START~~
223223
nvarchar#!#nvarchar
224-
dba_login#!#change_owner_db
224+
dba_login#!#CHANGE_OWNER_DB
225225
~~END~~
226226

227227
-- when new owner is already a DB user, granting ownership is not allowed
@@ -514,7 +514,7 @@ select user_name(), db_name()
514514
go
515515
~~START~~
516516
nvarchar#!#nvarchar
517-
dbo#!#db63long_012345678901234567890123456789012345678901234567890123
517+
dbo#!#DB63long_012345678901234567890123456789012345678901234567890123
518518
~~END~~
519519

520520
use master
@@ -533,7 +533,7 @@ select name, suser_sname(sid) from sysdatabases where upper(name) like 'DB64LONG
533533
go
534534
~~START~~
535535
nvarchar#!#nvarchar
536-
db64long_012345678901234567890109e0da63a1cdb0673c21e39afa6178e9#!#LOGIN64long_3456789012345678901234567890123456789012345678901234
536+
DB64long_0123456789012345678901234567890123456789012345678901234#!#LOGIN64long_3456789012345678901234567890123456789012345678901234
537537
~~END~~
538538

539539
alter authorization on database::[DB64long_0123456789012345678901234567890123456789012345678901234] to dba_login
@@ -542,7 +542,7 @@ select name, suser_sname(sid) from sysdatabases where upper(name) like 'DB64LONG
542542
go
543543
~~START~~
544544
nvarchar#!#nvarchar
545-
db64long_012345678901234567890109e0da63a1cdb0673c21e39afa6178e9#!#dba_login
545+
DB64long_0123456789012345678901234567890123456789012345678901234#!#dba_login
546546
~~END~~
547547

548548
alter authorization on database::[DB64long_0123456789012345678901234567890123456789012345678901234] to [LOGIN64long_3456789012345678901234567890123456789012345678901234]
@@ -551,7 +551,7 @@ select name, suser_sname(sid) from sysdatabases where upper(name) like 'DB64LONG
551551
go
552552
~~START~~
553553
nvarchar#!#nvarchar
554-
db64long_012345678901234567890109e0da63a1cdb0673c21e39afa6178e9#!#LOGIN64long_3456789012345678901234567890123456789012345678901234
554+
DB64long_0123456789012345678901234567890123456789012345678901234#!#LOGIN64long_3456789012345678901234567890123456789012345678901234
555555
~~END~~
556556

557557
set quoted_identifier on
@@ -562,7 +562,7 @@ select name, suser_sname(sid) from sysdatabases where upper(name) like 'DB64LONG
562562
go
563563
~~START~~
564564
nvarchar#!#nvarchar
565-
db64long_012345678901234567890109e0da63a1cdb0673c21e39afa6178e9#!#dba_login
565+
DB64long_0123456789012345678901234567890123456789012345678901234#!#dba_login
566566
~~END~~
567567

568568
alter authorization on DATABASE::"DB64long_0123456789012345678901234567890123456789012345678901234" to "LOGIN64long_3456789012345678901234567890123456789012345678901234"
@@ -571,7 +571,7 @@ select name, suser_sname(sid) from sysdatabases where upper(name) like 'DB64LONG
571571
go
572572
~~START~~
573573
nvarchar#!#nvarchar
574-
db64long_012345678901234567890109e0da63a1cdb0673c21e39afa6178e9#!#LOGIN64long_3456789012345678901234567890123456789012345678901234
574+
DB64long_0123456789012345678901234567890123456789012345678901234#!#LOGIN64long_3456789012345678901234567890123456789012345678901234
575575
~~END~~
576576

577577
set quoted_identifier off
@@ -783,7 +783,7 @@ select name, suser_sname(sid) from sysdatabases where name = 'change_owner_db'
783783
go
784784
~~START~~
785785
nvarchar#!#nvarchar
786-
change_owner_db#!#new_OWNER_login
786+
CHANGE_OWNER_DB#!#new_OWNER_login
787787
~~END~~
788788

789789

@@ -814,7 +814,7 @@ select suser_name(), db_name()
814814
go
815815
~~START~~
816816
nvarchar#!#nvarchar
817-
dba_login#!#change_owner_db
817+
dba_login#!#CHANGE_OWNER_DB
818818
~~END~~
819819

820820
-- when new owner is already a DB user, granting ownership is not allowed
@@ -1105,7 +1105,7 @@ select user_name(), db_name()
11051105
go
11061106
~~START~~
11071107
nvarchar#!#nvarchar
1108-
dbo#!#db63long_012345678901234567890123456789012345678901234567890123
1108+
dbo#!#DB63long_012345678901234567890123456789012345678901234567890123
11091109
~~END~~
11101110

11111111
use master
@@ -1124,7 +1124,7 @@ select name, suser_sname(sid) from sysdatabases where upper(name) like 'DB64LONG
11241124
go
11251125
~~START~~
11261126
nvarchar#!#nvarchar
1127-
db64long_012345678901234567890109e0da63a1cdb0673c21e39afa6178e9#!#LOGIN64long_3456789012345678901234567890123456789012345678901234
1127+
DB64long_0123456789012345678901234567890123456789012345678901234#!#LOGIN64long_3456789012345678901234567890123456789012345678901234
11281128
~~END~~
11291129

11301130
alter authorization on database::[DB64long_0123456789012345678901234567890123456789012345678901234] to dba_login
@@ -1133,7 +1133,7 @@ select name, suser_sname(sid) from sysdatabases where upper(name) like 'DB64LONG
11331133
go
11341134
~~START~~
11351135
nvarchar#!#nvarchar
1136-
db64long_012345678901234567890109e0da63a1cdb0673c21e39afa6178e9#!#dba_login
1136+
DB64long_0123456789012345678901234567890123456789012345678901234#!#dba_login
11371137
~~END~~
11381138

11391139
alter authorization on database::[DB64long_0123456789012345678901234567890123456789012345678901234] to [LOGIN64long_3456789012345678901234567890123456789012345678901234]
@@ -1142,7 +1142,7 @@ select name, suser_sname(sid) from sysdatabases where upper(name) like 'DB64LONG
11421142
go
11431143
~~START~~
11441144
nvarchar#!#nvarchar
1145-
db64long_012345678901234567890109e0da63a1cdb0673c21e39afa6178e9#!#LOGIN64long_3456789012345678901234567890123456789012345678901234
1145+
DB64long_0123456789012345678901234567890123456789012345678901234#!#LOGIN64long_3456789012345678901234567890123456789012345678901234
11461146
~~END~~
11471147

11481148
set quoted_identifier on
@@ -1153,7 +1153,7 @@ select name, suser_sname(sid) from sysdatabases where upper(name) like 'DB64LONG
11531153
go
11541154
~~START~~
11551155
nvarchar#!#nvarchar
1156-
db64long_012345678901234567890109e0da63a1cdb0673c21e39afa6178e9#!#dba_login
1156+
DB64long_0123456789012345678901234567890123456789012345678901234#!#dba_login
11571157
~~END~~
11581158

11591159
alter authorization on DATABASE::"DB64long_0123456789012345678901234567890123456789012345678901234" to "LOGIN64long_3456789012345678901234567890123456789012345678901234"
@@ -1162,7 +1162,7 @@ select name, suser_sname(sid) from sysdatabases where upper(name) like 'DB64LONG
11621162
go
11631163
~~START~~
11641164
nvarchar#!#nvarchar
1165-
db64long_012345678901234567890109e0da63a1cdb0673c21e39afa6178e9#!#LOGIN64long_3456789012345678901234567890123456789012345678901234
1165+
DB64long_0123456789012345678901234567890123456789012345678901234#!#LOGIN64long_3456789012345678901234567890123456789012345678901234
11661166
~~END~~
11671167

11681168
set quoted_identifier off

test/JDBC/expected/long-identifiers-vu-verify.out

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -284,14 +284,19 @@ Very_Long_View_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters_VU
284284

285285

286286
-- sys.database_role_members
287-
SELECT COUNT(*) FROM sys.database_role_members;
287+
ALTER ROLE db_datareader ADD MEMBER Very_Long_Role_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters_VU;
288+
GO
289+
SELECT COUNT(*) FROM sys.database_role_members m JOIN sys.database_principals p ON m.member_principal_id = p.principal_id WHERE p.name LIKE 'Very_Long_Role%VU';
288290
GO
289291
~~START~~
290292
int
291293
1
292294
~~END~~
293295

294296

297+
ALTER ROLE db_datareader DROP MEMBER Very_Long_Role_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters_VU;
298+
GO
299+
295300
-- sp_tables
296301
EXEC sp_tables @table_name = 'Very_Long_Table_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters_VU';
297302
GO

test/JDBC/expected/non_default_server_collation/chinese_prc_ci_as/long-identifiers-vu-verify.out

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -108,6 +108,7 @@ varchar
108108
Very_Long_Trigger_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters_VU
109109
~~END~~
110110

111+
111112
-- Trigger rename preserves orig_name
112113
EXEC sp_rename 'Very_Long_Trigger_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters_VU', 'Very_Long_Trigger_Renamed_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters_VU', 'OBJECT';
113114
GO
@@ -283,14 +284,19 @@ Very_Long_View_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters_VU
283284

284285

285286
-- sys.database_role_members
286-
SELECT COUNT(*) FROM sys.database_role_members;
287+
ALTER ROLE db_datareader ADD MEMBER Very_Long_Role_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters_VU;
288+
GO
289+
SELECT COUNT(*) FROM sys.database_role_members m JOIN sys.database_principals p ON m.member_principal_id = p.principal_id WHERE p.name LIKE 'Very_Long_Role%VU';
287290
GO
288291
~~START~~
289292
int
290293
1
291294
~~END~~
292295

293296

297+
ALTER ROLE db_datareader DROP MEMBER Very_Long_Role_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters_VU;
298+
GO
299+
294300
-- sp_tables
295301
EXEC sp_tables @table_name = 'Very_Long_Table_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters_VU';
296302
GO

test/JDBC/input/long-identifiers-vu-verify.mix

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -134,7 +134,12 @@ SELECT name FROM sys.all_views WHERE name LIKE 'Very_Long_View%VU';
134134
GO
135135

136136
-- sys.database_role_members
137-
SELECT COUNT(*) FROM sys.database_role_members;
137+
ALTER ROLE db_datareader ADD MEMBER Very_Long_Role_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters_VU;
138+
GO
139+
SELECT COUNT(*) FROM sys.database_role_members m JOIN sys.database_principals p ON m.member_principal_id = p.principal_id WHERE p.name LIKE 'Very_Long_Role%VU';
140+
GO
141+
142+
ALTER ROLE db_datareader DROP MEMBER Very_Long_Role_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters_VU;
138143
GO
139144

140145
-- sp_tables

0 commit comments

Comments
 (0)