Skip to content

Commit 02f0a06

Browse files
committed
Removed a TODO on the FakeTable ssp
1 parent 661fffc commit 02f0a06

6 files changed

Lines changed: 50 additions & 7 deletions

Source/tSQLt.FakeTable.ssp.sql

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,8 @@ BEGIN
1414
DECLARE @OrigObjectNewName NVARCHAR(4000);
1515
DECLARE @OrigObjectFullName NVARCHAR(MAX) = NULL;
1616
DECLARE @TargetObjectFullName NVARCHAR(MAX) = NULL;
17+
DECLARE @OriginalObjectObjectId INT;
18+
DECLARE @TargetObjectObjectId INT;
1719

1820
IF(@TableName NOT IN (PARSENAME(@TableName,1),QUOTENAME(PARSENAME(@TableName,1)))
1921
AND @SchemaName IS NOT NULL)
@@ -31,23 +33,26 @@ BEGIN
3133

3234
EXEC tSQLt.Private_RenameObjectToUniqueName @OrigObjectCleanQuotedSchemaName, @OrigObjectCleanQuotedName, @OrigObjectNewName OUTPUT;
3335

36+
SET @OriginalObjectObjectId = OBJECT_ID(@OrigObjectCleanQuotedSchemaName + '.' + QUOTENAME(@OrigObjectNewName));
37+
3438
SELECT @TargetObjectFullName = S.base_object_name
3539
FROM sys.synonyms AS S
36-
WHERE S.object_id = OBJECT_ID(@OrigObjectCleanQuotedSchemaName + '.' + @OrigObjectNewName);
40+
WHERE S.object_id = @OriginalObjectObjectId;
3741

3842
IF(@TargetObjectFullName IS NOT NULL)
3943
BEGIN
4044
IF(COALESCE(OBJECT_ID(@TargetObjectFullName,'U'),OBJECT_ID(@TargetObjectFullName,'V')) IS NULL)
4145
BEGIN
4246
RAISERROR('Cannot fake synonym %s as it is pointing to %s, which is not a table or view!',16,10,@OrigObjectFullName,@TargetObjectFullName);
4347
END;
48+
SET @TargetObjectObjectId = OBJECT_ID(@TargetObjectFullName);
4449
END;
4550
ELSE
4651
BEGIN
47-
SET @TargetObjectFullName = @OrigObjectCleanQuotedSchemaName + '.' + QUOTENAME(@OrigObjectNewName); --TODO:Test for QUOTENAME
52+
SET @TargetObjectObjectId = @OriginalObjectObjectId;
4853
END;
4954

50-
EXEC tSQLt.Private_CreateFakeOfTable @OrigObjectCleanQuotedSchemaName, @OrigObjectCleanQuotedName, @TargetObjectFullName, @Identity, @ComputedColumns, @Defaults;
55+
EXEC tSQLt.Private_CreateFakeOfTable @OrigObjectCleanQuotedSchemaName, @OrigObjectCleanQuotedName, @TargetObjectObjectId, @Identity, @ComputedColumns, @Defaults;
5156

5257
EXEC tSQLt.Private_MarktSQLtTempObject @OrigObjectFullName, N'TABLE', @OrigObjectNewName;
5358
END

Source/tSQLt.Private_CreateFakeOfTable.ssp.sql

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,15 +4,15 @@ GO
44
CREATE PROCEDURE tSQLt.Private_CreateFakeOfTable
55
@SchemaName NVARCHAR(MAX),
66
@TableName NVARCHAR(MAX),
7-
@OrigTableFullName NVARCHAR(MAX),
7+
@OrigTableObjectId INT,
88
@Identity BIT,
99
@ComputedColumns BIT,
1010
@Defaults BIT
1111
AS
1212
BEGIN
1313
DECLARE @cmd NVARCHAR(MAX) =
1414
(SELECT CreateTableStatement
15-
FROM tSQLt.Private_CreateFakeTableStatement(OBJECT_ID(@OrigTableFullName), @SchemaName+'.'+@TableName,@Identity,@ComputedColumns,@Defaults,0));
15+
FROM tSQLt.Private_CreateFakeTableStatement(@OrigTableObjectId, @SchemaName+'.'+@TableName,@Identity,@ComputedColumns,@Defaults,0));
1616
EXEC (@cmd);
1717
END;
1818
---Build-

Source/tSQLt.Private_RenameObject.ssp.sql

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ BEGIN
1010
DECLARE @RenameCmd NVARCHAR(MAX);
1111
SET @RenameCmd = 'EXEC sp_rename ''' +
1212
REPLACE(@SchemaName + '.' + @ObjectName, '''', '''''') + ''', ''' +
13-
@NewName + ''',''OBJECT'';';
13+
REPLACE(@NewName, '''', '''''') + ''',''OBJECT'';';
1414

1515
EXEC tSQLt.SuppressOutput @RenameCmd;
1616
END;

Tests/FakeTableTests.class.sql

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -377,7 +377,7 @@ BEGIN
377377
END;
378378
GO
379379

380-
CREATE PROC FakeTableTests.[test FakeTable works with ugly column and table names]
380+
CREATE PROC FakeTableTests.[test FakeTable works with special characters in column and table names]
381381
AS
382382
BEGIN
383383
IF OBJECT_ID('dbo.[tst!@#$%^&*()_+ 1]') IS NOT NULL DROP TABLE dbo.[tst!@#$%^&*()_+ 1];
@@ -1032,3 +1032,14 @@ BEGIN
10321032

10331033
END;
10341034
GO
1035+
CREATE PROC FakeTableTests.[test FakeTable works if new name of original table requires quoting]
1036+
AS
1037+
BEGIN
1038+
CREATE TABLE FakeTableTests.TempTable1(i INT NULL);
1039+
EXEC tSQLt.SpyProcedure @ProcedureName = 'tSQLt.Private_RenameObjectToUniqueName', @CommandToExecute = 'SET @NewName = ''A Name.Needs''''Quoting'';',@CallOriginal = 1;
1040+
1041+
EXEC tSQLt.FakeTable @TableName = 'FakeTableTests.TempTable1';
1042+
1043+
EXEC tSQLt.AssertEqualsTableSchema @Expected = 'FakeTableTests.[A Name.Needs''Quoting]', @Actual = 'FakeTableTests.TempTable1';
1044+
END;
1045+
GO

Tests/_ExploratoryTests.class.sql

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -333,6 +333,23 @@ BEGIN
333333
BEGIN TRY DEALLOCATE ACursor; END TRY BEGIN CATCH END CATCH;
334334
EXEC tSQLt.AssertEqualsTable '#Expected','#Actual';
335335

336+
END;
337+
GO
338+
/*-----------------------------------------------------------------------------------------------*/
339+
GO
340+
CREATE PROCEDURE [_ExploratoryTests].[test sp_addextendedproperty can handle odd values]
341+
AS
342+
BEGIN
343+
CREATE TABLE [_ExploratoryTests].ATable(I INT);
344+
345+
EXEC sys.sp_addextendedproperty
346+
@name = N'ATestProperty',
347+
@value = 'a string.with''special chars',
348+
@level0type = N'SCHEMA', @level0name = '_ExploratoryTests',
349+
@level1type = 'TABLE', @level1name = 'ATable';
350+
351+
SELECT * FROM sys.extended_properties AS EP WHERE EP.major_id = OBJECT_ID('[_ExploratoryTests].ATable');
352+
336353
END;
337354
GO
338355
/*-----------------------------------------------------------------------------------------------*/

Tests/tSQLtclr_test.class.sql

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -184,4 +184,14 @@ BEGIN
184184
END;
185185
END;
186186
GO
187+
188+
CREATE PROC tSQLtclr_test.[test name returned by tSQLt.Private::CreateUniqueObjectName() should not require quoting]
189+
AS
190+
BEGIN
191+
DECLARE @NewName NVARCHAR(MAX) = tSQLt.Private::CreateUniqueObjectName();
192+
193+
EXEC tSQLt.ExpectNoException;
194+
EXEC('CREATE TABLE tSQLtclr_test.'+@NewName+'(I INT);');
195+
END;
196+
GO
187197
--ROLLBACK

0 commit comments

Comments
 (0)