Skip to content

Commit 24eb1b0

Browse files
committed
Working on fixing ApplyConstraint, wrote tests and such. Build still broken for sure.
1 parent a81bb38 commit 24eb1b0

File tree

5 files changed

+163
-33
lines changed

5 files changed

+163
-33
lines changed

Source/ApplyConstraint_Methods.sql

Lines changed: 15 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,8 @@ CREATE PROCEDURE tSQLt.Private_ApplyCheckConstraint
7070
AS
7171
BEGIN
7272
DECLARE @Cmd NVARCHAR(MAX);
73+
DECLARE @NewNameOfOriginalConstraint NVARCHAR(MAX);
74+
DECLARE @QuotedFullConstraintName NVARCHAR(MAX);
7375
SELECT @Cmd = 'CONSTRAINT ' + QUOTENAME(name) + ' CHECK' + definition
7476
FROM sys.check_constraints
7577
WHERE object_id = @ConstraintObjectId;
@@ -78,13 +80,16 @@ BEGIN
7880

7981
SELECT @QuotedTableName = QuotedTableName FROM tSQLt.Private_GetQuotedTableNameForConstraint(@ConstraintObjectId);
8082

81-
EXEC tSQLt.Private_RenameObjectToUniqueNameUsingObjectId @ConstraintObjectId;
82-
SELECT @Cmd = 'ALTER TABLE ' + @QuotedTableName + ' ADD ' + @Cmd
83+
SELECT @Cmd = 'ALTER TABLE ' + @QuotedTableName + ' ADD ' + @Cmd,
84+
@QuotedFullConstraintName = QUOTENAME(SCHEMA_NAME(schema_id))+'.'+QUOTENAME(name)
8385
FROM sys.objects
8486
WHERE object_id = @ConstraintObjectId;
8587

88+
EXEC tSQLt.Private_RenameObjectToUniqueNameUsingObjectId @ConstraintObjectId, @NewName = @NewNameOfOriginalConstraint OUT;
89+
8690
EXEC (@Cmd);
8791

92+
EXEC tSQLt.Private_MarktSQLtTempObject @ObjectName = @QuotedFullConstraintName, @ObjectType = 'CONSTRAINT', @NewNameOfOriginalObject = @NewNameOfOriginalConstraint;
8893
END;
8994
GO
9095

@@ -116,6 +121,7 @@ BEGIN
116121

117122
EXEC tSQLt.Private_RenameObjectToUniqueName @SchemaName, @ConstraintName;
118123
EXEC (@FinalCmd);
124+
119125
END;
120126
GO
121127

@@ -124,25 +130,28 @@ CREATE PROCEDURE tSQLt.Private_ApplyUniqueConstraint
124130
AS
125131
BEGIN
126132
DECLARE @SchemaName NVARCHAR(MAX);
127-
DECLARE @OrgTableName NVARCHAR(MAX);
128133
DECLARE @TableName NVARCHAR(MAX);
129134
DECLARE @ConstraintName NVARCHAR(MAX);
130135
DECLARE @CreateConstraintCmd NVARCHAR(MAX);
131136
DECLARE @AlterColumnsCmd NVARCHAR(MAX);
137+
DECLARE @NewNameOfOriginalConstraint NVARCHAR(MAX);
138+
DECLARE @QuotedFullConstraintName NVARCHAR(MAX);
132139

133140
SELECT @SchemaName = SchemaName,
134-
@OrgTableName = OrgTableName,
135141
@TableName = TableName,
136-
@ConstraintName = OBJECT_NAME(@ConstraintObjectId)
142+
@ConstraintName = OBJECT_NAME(@ConstraintObjectId),
143+
@QuotedFullConstraintName = QUOTENAME(SchemaName)+'.'+QUOTENAME(OBJECT_NAME(@ConstraintObjectId))
137144
FROM tSQLt.Private_GetQuotedTableNameForConstraint(@ConstraintObjectId);
138145

139146
SELECT @AlterColumnsCmd = NotNullColumnCmd,
140147
@CreateConstraintCmd = CreateConstraintCmd
141148
FROM tSQLt.Private_GetUniqueConstraintDefinition(@ConstraintObjectId, QUOTENAME(@SchemaName) + '.' + QUOTENAME(@TableName));
142149

143-
EXEC tSQLt.Private_RenameObjectToUniqueName @SchemaName, @ConstraintName;
150+
EXEC tSQLt.Private_RenameObjectToUniqueName @SchemaName, @ConstraintName, @NewName = @NewNameOfOriginalConstraint OUTPUT;
144151
EXEC (@AlterColumnsCmd);
145152
EXEC (@CreateConstraintCmd);
153+
154+
EXEC tSQLt.Private_MarktSQLtTempObject @ObjectName = @QuotedFullConstraintName, @ObjectType = 'CONSTRAINT', @NewNameOfOriginalObject = @NewNameOfOriginalConstraint;
146155
END;
147156
GO
148157

Source/tSQLt.Private_MarktSQLtTempObject.ssp.sql

Lines changed: 37 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -4,34 +4,49 @@ GO
44
CREATE PROCEDURE tSQLt.Private_MarktSQLtTempObject
55
@ObjectName NVARCHAR(MAX),
66
@ObjectType NVARCHAR(MAX),
7-
--@ParentObjectName NVARCHAR(MAX) = NULL,
8-
--@ParentObjectType NVARCHAR(MAX) = NULL,
97
@NewNameOfOriginalObject NVARCHAR(4000)
108
AS
119
BEGIN
12-
DECLARE @UnquotedSchemaName NVARCHAR(MAX);
13-
DECLARE @UnquotedObjectName NVARCHAR(MAX);
14-
SELECT
15-
@UnquotedSchemaName = SCHEMA_NAME(O.schema_id),
16-
@UnquotedObjectName = O.name
17-
FROM sys.objects O
18-
WHERE O.object_id = OBJECT_ID(@ObjectName);
10+
DECLARE @UnquotedSchemaName NVARCHAR(MAX);
11+
DECLARE @UnquotedObjectName NVARCHAR(MAX);
12+
DECLARE @UnquotedParentName NVARCHAR(MAX);
13+
SELECT
14+
@UnquotedSchemaName = SCHEMA_NAME(O.schema_id),
15+
@UnquotedObjectName = O.name,
16+
@UnquotedParentName = OBJECT_NAME(O.parent_object_id)
17+
FROM sys.objects O
18+
WHERE O.object_id = OBJECT_ID(@ObjectName);
1919

20-
--SELECT
21-
--@UnquotedSchemaName,
22-
--@UnquotedObjectName;
20+
IF(@UnquotedParentName IS NULL)
21+
BEGIN
22+
EXEC sys.sp_addextendedproperty
23+
@name = N'tSQLt.IsTempObject',
24+
@value = 1,
25+
@level0type = N'SCHEMA', @level0name = @UnquotedSchemaName,
26+
@level1type = @ObjectType, @level1name = @UnquotedObjectName;
2327

24-
EXEC sys.sp_addextendedproperty
25-
@name = N'tSQLt.IsTempObject',
26-
@value = 1,
27-
@level0type = N'SCHEMA', @level0name = @UnquotedSchemaName,
28-
@level1type = @ObjectType, @level1name = @UnquotedObjectName;
28+
EXEC sys.sp_addextendedproperty
29+
@name = N'tSQLt.Private_TestDouble_OrgObjectName',
30+
@value = @NewNameOfOriginalObject,
31+
@level0type = N'SCHEMA', @level0name = @UnquotedSchemaName,
32+
@level1type = @ObjectType, @level1name = @UnquotedObjectName;
33+
END;
34+
ELSE
35+
BEGIN
36+
EXEC sys.sp_addextendedproperty
37+
@name = N'tSQLt.IsTempObject',
38+
@value = 1,
39+
@level0type = N'SCHEMA', @level0name = @UnquotedSchemaName,
40+
@level1type = N'TABLE', @level1name = @UnquotedParentName,
41+
@level2type = @ObjectType, @level2name = @UnquotedObjectName;
2942

30-
EXEC sys.sp_addextendedproperty
31-
@name = N'tSQLt.Private_TestDouble_OrgObjectName',
32-
@value = @NewNameOfOriginalObject,
33-
@level0type = N'SCHEMA', @level0name = @UnquotedSchemaName,
34-
@level1type = @ObjectType, @level1name = @UnquotedObjectName;
43+
EXEC sys.sp_addextendedproperty
44+
@name = N'tSQLt.Private_TestDouble_OrgObjectName',
45+
@value = @NewNameOfOriginalObject,
46+
@level0type = N'SCHEMA', @level0name = @UnquotedSchemaName,
47+
@level1type = N'TABLE', @level1name = @UnquotedParentName,
48+
@level2type = @ObjectType, @level2name = @UnquotedObjectName;
49+
END;
3550
END;
3651
---Build-
3752
GO

Source/tSQLt.UndoTestDoubles.ssp.sql

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -73,11 +73,7 @@ BEGIN
7373
(
7474
SELECT
7575
ISNULL(CASE
76-
WHEN L.ParentId IS NULL THEN
77-
CASE WHEN L.IsTempObject = 1
78-
THEN DC.cmd+';'
79-
ELSE 'RAISERROR(''SHOULD NOT GET HERE.'',16,10);'
80-
END
76+
WHEN L.ParentId IS NULL THEN DC.cmd+';'
8177
ELSE NULL
8278
END,'')+
8379
'EXEC tSQLt.Private_RenameObject '''+L.SchemaName+''','''+L.CurrentName+''','''+L.OriginalName+''';'

Tests/ApplyConstraintTests.class.sql

Lines changed: 100 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1050,4 +1050,104 @@ BEGIN
10501050

10511051
END;
10521052
GO
1053+
CREATE PROC ApplyConstraintTests.[test ApplyConstraint calls tSQLt.Private_MarktSQLtTempObject on new check constraints]
1054+
AS
1055+
BEGIN
1056+
CREATE TABLE ApplyConstraintTests.aSimpleTable ( Id INT CONSTRAINT aSimpleTableConstraint CHECK(Id > 0));
1057+
DECLARE @OriginalObjectId INT = OBJECT_ID('ApplyConstraintTests.aSimpleTableConstraint');
1058+
1059+
EXEC tSQLt.FakeTable @TableName = 'ApplyConstraintTests.aSimpleTable';
1060+
1061+
EXEC tSQLt.SpyProcedure @ProcedureName = 'tSQLt.Private_MarktSQLtTempObject';
1062+
TRUNCATE TABLE tSQLt.Private_MarktSQLtTempObject_SpyProcedureLog;--Quirkiness of testing the framework that you use to run the test
1063+
1064+
EXEC tSQLt.ApplyConstraint @TableName = 'ApplyConstraintTests.aSimpleTable', @ConstraintName = 'aSimpleTableConstraint';
1065+
1066+
SELECT ObjectName, ObjectType, NewNameOfOriginalObject
1067+
INTO #Actual
1068+
FROM tSQLt.Private_MarktSQLtTempObject_SpyProcedureLog;
1069+
1070+
SELECT TOP(0) A.* INTO #Expected FROM #Actual A RIGHT JOIN #Actual X ON 1=0;
1071+
INSERT INTO #Expected
1072+
VALUES('[ApplyConstraintTests].[aSimpleTableConstraint]', N'CONSTRAINT', OBJECT_NAME(@OriginalObjectId));
1073+
1074+
EXEC tSQLt.AssertEqualsTable '#Expected','#Actual';
1075+
1076+
END;
1077+
GO
1078+
CREATE PROC ApplyConstraintTests.[test ApplyConstraint calls tSQLt.Private_MarktSQLtTempObject on new primary key]
1079+
AS
1080+
BEGIN
1081+
CREATE TABLE ApplyConstraintTests.aSimpleTable ( Id INT CONSTRAINT aSimpleTableConstraint PRIMARY KEY );
1082+
DECLARE @OriginalObjectId INT = OBJECT_ID('ApplyConstraintTests.aSimpleTableConstraint');
1083+
1084+
EXEC tSQLt.FakeTable @TableName = 'ApplyConstraintTests.aSimpleTable';
1085+
1086+
EXEC tSQLt.SpyProcedure @ProcedureName = 'tSQLt.Private_MarktSQLtTempObject';
1087+
TRUNCATE TABLE tSQLt.Private_MarktSQLtTempObject_SpyProcedureLog;--Quirkiness of testing the framework that you use to run the test
1088+
1089+
EXEC tSQLt.ApplyConstraint @TableName = 'ApplyConstraintTests.aSimpleTable', @ConstraintName = 'aSimpleTableConstraint';
10531090

1091+
SELECT ObjectName, ObjectType, NewNameOfOriginalObject
1092+
INTO #Actual
1093+
FROM tSQLt.Private_MarktSQLtTempObject_SpyProcedureLog;
1094+
1095+
SELECT TOP(0) A.* INTO #Expected FROM #Actual A RIGHT JOIN #Actual X ON 1=0;
1096+
INSERT INTO #Expected
1097+
VALUES('[ApplyConstraintTests].[aSimpleTableConstraint]', N'CONSTRAINT', OBJECT_NAME(@OriginalObjectId));
1098+
1099+
EXEC tSQLt.AssertEqualsTable '#Expected','#Actual';
1100+
1101+
END;
1102+
GO
1103+
CREATE PROC ApplyConstraintTests.[test ApplyConstraint calls tSQLt.Private_MarktSQLtTempObject on new unique key]
1104+
AS
1105+
BEGIN
1106+
CREATE TABLE ApplyConstraintTests.aSimpleTable ( Id INT CONSTRAINT aSimpleTableConstraint UNIQUE );
1107+
DECLARE @OriginalObjectId INT = OBJECT_ID('ApplyConstraintTests.aSimpleTableConstraint');
1108+
1109+
EXEC tSQLt.FakeTable @TableName = 'ApplyConstraintTests.aSimpleTable';
1110+
1111+
EXEC tSQLt.SpyProcedure @ProcedureName = 'tSQLt.Private_MarktSQLtTempObject';
1112+
TRUNCATE TABLE tSQLt.Private_MarktSQLtTempObject_SpyProcedureLog;--Quirkiness of testing the framework that you use to run the test
1113+
1114+
EXEC tSQLt.ApplyConstraint @TableName = 'ApplyConstraintTests.aSimpleTable', @ConstraintName = 'aSimpleTableConstraint';
1115+
1116+
SELECT ObjectName, ObjectType, NewNameOfOriginalObject
1117+
INTO #Actual
1118+
FROM tSQLt.Private_MarktSQLtTempObject_SpyProcedureLog;
1119+
1120+
SELECT TOP(0) A.* INTO #Expected FROM #Actual A RIGHT JOIN #Actual X ON 1=0;
1121+
INSERT INTO #Expected
1122+
VALUES('[ApplyConstraintTests].[aSimpleTableConstraint]', N'CONSTRAINT', OBJECT_NAME(@OriginalObjectId));
1123+
1124+
EXEC tSQLt.AssertEqualsTable '#Expected','#Actual';
1125+
1126+
END;
1127+
GO
1128+
CREATE PROC ApplyConstraintTests.[test ApplyConstraint calls tSQLt.Private_MarktSQLtTempObject on new foreign key]
1129+
AS
1130+
BEGIN
1131+
CREATE TABLE ApplyConstraintTests.aForeignTable ( Id INT PRIMARY KEY );
1132+
CREATE TABLE ApplyConstraintTests.aSimpleTable ( Id INT, fId INT CONSTRAINT aSimpleTableConstraint FOREIGN KEY REFERENCES ApplyConstraintTests.aForeignTable (Id) );
1133+
DECLARE @OriginalObjectId INT = OBJECT_ID('ApplyConstraintTests.aSimpleTableConstraint');
1134+
1135+
EXEC tSQLt.FakeTable @TableName = 'ApplyConstraintTests.aSimpleTable';
1136+
1137+
EXEC tSQLt.SpyProcedure @ProcedureName = 'tSQLt.Private_MarktSQLtTempObject';
1138+
TRUNCATE TABLE tSQLt.Private_MarktSQLtTempObject_SpyProcedureLog;--Quirkiness of testing the framework that you use to run the test
1139+
1140+
EXEC tSQLt.ApplyConstraint @TableName = 'ApplyConstraintTests.aSimpleTable', @ConstraintName = 'aSimpleTableConstraint';
1141+
1142+
SELECT ObjectName, ObjectType, NewNameOfOriginalObject
1143+
INTO #Actual
1144+
FROM tSQLt.Private_MarktSQLtTempObject_SpyProcedureLog;
1145+
1146+
SELECT TOP(0) A.* INTO #Expected FROM #Actual A RIGHT JOIN #Actual X ON 1=0;
1147+
INSERT INTO #Expected
1148+
VALUES('[ApplyConstraintTests].[aSimpleTableConstraint]', N'CONSTRAINT', OBJECT_NAME(@OriginalObjectId));
1149+
1150+
EXEC tSQLt.AssertEqualsTable '#Expected','#Actual';
1151+
1152+
END;
1153+
GO

Tests/Private_MarktSQLtTempObjectTests.class.sql

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -70,3 +70,13 @@ BEGIN
7070
@ObjectType = N'FUNCTION';
7171
END;
7272
GO
73+
CREATE PROCEDURE Private_MarktSQLtTempObjectTests.[test can mark a constraint]
74+
AS
75+
BEGIN
76+
CREATE TABLE Private_MarktSQLtTempObjectTests.TempTable1(i INT CONSTRAINT aSimpleTableConstraint CHECK(i > 0));
77+
78+
EXEC Private_MarktSQLtTempObjectTests.[assert creates two extended properties on object]
79+
@ObjectName = 'Private_MarktSQLtTempObjectTests.aSimpleTableConstraint',
80+
@ObjectType = N'CONSTRAINT';
81+
END;
82+
GO

0 commit comments

Comments
 (0)