Skip to content

Commit 831ab05

Browse files
committed
Working on including #16 because the original patch did not work (maybe it was updated by hand). Adding required tests (both for this PR and because some were missing): One is currently breaking on purpose. Please fix it. There is at least one more test required to ensure unique constraints.
1 parent 87fcd7c commit 831ab05

File tree

4 files changed

+88
-3
lines changed

4 files changed

+88
-3
lines changed

Source/tSQLt.Private_GetFullTypeName.sfn.sql

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,8 @@ FROM(
1717
THEN '(' + CAST(@Length AS NVARCHAR) + ')'
1818
WHEN T.name IN ('decimal', 'numeric')
1919
THEN '(' + CAST(@Precision AS NVARCHAR) + ',' + CAST(@Scale AS NVARCHAR) + ')'
20+
WHEN T.name IN ('datetime2', 'datetimeoffset', 'time')
21+
THEN '(' + CAST(@Scale AS NVARCHAR) + ')'
2022
ELSE ''
2123
END Suffix,
2224
CASE WHEN @CollationName IS NULL OR T.is_user_defined = 1 THEN ''

Tests/FakeTableTests.class.sql

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -385,6 +385,29 @@ BEGIN
385385
EXEC tSQLt.AssertEqualsTable '#Expected','#Actual';
386386
END;
387387
GO
388+
389+
CREATE PROC FakeTableTests.[test FakeTable handles column length, precision, and scale]
390+
AS
391+
BEGIN
392+
IF OBJECT_ID('dbo.tst1') IS NOT NULL DROP TABLE dbo.tst1;
393+
394+
CREATE TABLE dbo.tst1(Length1 VARCHAR(42), Length2 VARCHAR(MAX), Precision_Scale NUMERIC(21,3));
395+
396+
SELECT top(1) column_id,name,max_length, precision, scale
397+
INTO #Expected
398+
FROM sys.columns
399+
WHERE object_id = OBJECT_ID('dbo.tst1')
400+
401+
EXEC tSQLt.FakeTable 'dbo.tst1';
402+
403+
SELECT column_id,name,max_length, precision, scale
404+
INTO #Actual
405+
FROM sys.columns
406+
WHERE object_id = OBJECT_ID('dbo.tst1')
407+
408+
EXEC tSQLt.AssertEqualsTable '#Expected','#Actual';
409+
END;
410+
GO
388411

389412
CREATE PROC FakeTableTests.[test FakeTable works with ugly column and table names]
390413
AS

Tests/Private_GetFullTypeNameTests.class.sql

Lines changed: 39 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -90,6 +90,42 @@ BEGIN
9090
END
9191
GO
9292

93+
CREATE PROC Private_GetFullTypeNameTests.[test Private_GetFullTypeName should properly return DATETIME2 parameters]
94+
AS
95+
BEGIN
96+
DECLARE @Result VARCHAR(MAX);
97+
98+
SELECT @Result = TypeName
99+
FROM tSQLt.Private_GetFullTypeName(TYPE_ID('datetime2'), NULL, NULL, 3, NULL);
100+
101+
EXEC tSQLt.AssertEqualsString '[sys].[datetime2](3)', @Result;
102+
END
103+
GO
104+
105+
CREATE PROC Private_GetFullTypeNameTests.[test Private_GetFullTypeName should properly return TIME parameters]
106+
AS
107+
BEGIN
108+
DECLARE @Result VARCHAR(MAX);
109+
110+
SELECT @Result = TypeName
111+
FROM tSQLt.Private_GetFullTypeName(TYPE_ID('time'), NULL, NULL, 4, NULL);
112+
113+
EXEC tSQLt.AssertEqualsString '[sys].[time](4)', @Result;
114+
END
115+
GO
116+
117+
CREATE PROC Private_GetFullTypeNameTests.[test Private_GetFullTypeName should properly return DATETIMEOFFSET parameters]
118+
AS
119+
BEGIN
120+
DECLARE @Result VARCHAR(MAX);
121+
122+
SELECT @Result = TypeName
123+
FROM tSQLt.Private_GetFullTypeName(TYPE_ID('datetimeoffset'), NULL, NULL, 6, NULL);
124+
125+
EXEC tSQLt.AssertEqualsString '[sys].[datetimeoffset](6)', @Result;
126+
END
127+
GO
128+
93129
CREATE PROC Private_GetFullTypeNameTests.[test Private_GetFullTypeName should properly return typeName when all parameters are valued]
94130
AS
95131
BEGIN
@@ -251,12 +287,12 @@ BEGIN
251287
);
252288

253289
INSERT INTO dbo.Parms(ColumnName, ColumnType) VALUES ('[sys.date]', '[sys].[date]');
254-
INSERT INTO dbo.Parms(ColumnName, ColumnType) VALUES ('[sys.datetime2]', '[sys].[datetime2]');
255-
INSERT INTO dbo.Parms(ColumnName, ColumnType) VALUES ('[sys.datetimeoffset]', '[sys].[datetimeoffset]');
290+
INSERT INTO dbo.Parms(ColumnName, ColumnType) VALUES ('[sys.datetime2]', '[sys].[datetime2](7)');
291+
INSERT INTO dbo.Parms(ColumnName, ColumnType) VALUES ('[sys.datetimeoffset]', '[sys].[datetimeoffset](7)');
256292
INSERT INTO dbo.Parms(ColumnName, ColumnType) VALUES ('[sys.geography]', '[sys].[geography]');
257293
INSERT INTO dbo.Parms(ColumnName, ColumnType) VALUES ('[sys.geometry]', '[sys].[geometry]');
258294
INSERT INTO dbo.Parms(ColumnName, ColumnType) VALUES ('[sys.hierarchyid]', '[sys].[hierarchyid]');
259-
INSERT INTO dbo.Parms(ColumnName, ColumnType) VALUES ('[sys.time]', '[sys].[time]');
295+
INSERT INTO dbo.Parms(ColumnName, ColumnType) VALUES ('[sys.time]', '[sys].[time](7)');
260296

261297
DECLARE @Cmd NVARCHAR(MAX);
262298
SET @Cmd = STUFF((

Tests/SpyProcedureTests.class.sql

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -545,6 +545,30 @@ BEGIN
545545
EXEC tSQLt.AssertEqualsTable '#Expected','#Actual';
546546
END;
547547
GO
548+
CREATE PROC SpyProcedureTests.[test SpyProcedure handles length, precision, and scale correctly]
549+
AS
550+
BEGIN
551+
EXEC('CREATE PROC dbo.InnerProcedure(
552+
@LENGTH1 VARCHAR(42) ,
553+
@LENGTH2 VARCHAR(MAX) ,
554+
@PRECISION_SCALE NUMERIC(21, 13)
555+
)
556+
AS BEGIN RETURN 0; END');
557+
SELECT name, parameter_id, system_type_id, user_type_id, max_length, precision, scale
558+
INTO #Expected
559+
FROM sys.parameters
560+
WHERE object_id = OBJECT_ID('dbo.InnerProcedure');
561+
562+
EXEC tSQLt.SpyProcedure 'dbo.InnerProcedure'
563+
564+
SELECT name, parameter_id, system_type_id, user_type_id, max_length, precision, scale
565+
INTO #Actual
566+
FROM sys.parameters
567+
WHERE object_id = OBJECT_ID('dbo.InnerProcedure');
568+
569+
EXEC tSQLt.AssertEqualsTable '#Expected','#Actual';
570+
END;
571+
GO
548572
CREATE PROC SpyProcedureTests.[test SpyProcedure fails with error if spyee has more than 1020 parameters]
549573
AS
550574
BEGIN

0 commit comments

Comments
 (0)