Skip to content

Commit c60b6ac

Browse files
committed
Make interleave view work even with ridiculous column names
1 parent 4279839 commit c60b6ac

File tree

5 files changed

+59
-7
lines changed

5 files changed

+59
-7
lines changed

src/core/SqlDataComparison.sql

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -474,8 +474,8 @@ BEGIN
474474
IF @interleave = 1
475475
BEGIN
476476
SELECT @sql = @sql +
477-
@TAB + ' [ours].' + uc.quoted_name + ' AS [<<< ' + uc.quoted_name + '],' + @CRLF +
478-
@TAB + ' [theirs].' + m.quoted_name + ' AS [>>> ' + m.quoted_name + '],' + @CRLF
477+
@TAB + ' [ours].' + uc.quoted_name + ' AS ' + QUOTENAME('<<< ' + internals.MidAbbrev(PARSENAME(uc.quoted_name,1), 128 - 4)) + ',' + @CRLF +
478+
@TAB + ' [theirs].' + m.quoted_name + ' AS ' + QUOTENAME('>>> ' + internals.MidAbbrev(PARSENAME(m.quoted_name,1), 128 - 4)) + ',' + @CRLF
479479
FROM @use_columns uc
480480
INNER JOIN @mapped_columns m
481481
ON uc.column_id = m.column_id

src/preInternals/MidAbbrev.sql

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
SET ANSI_NULLS ON
2+
GO
3+
SET QUOTED_IDENTIFIER ON
4+
GO
5+
/*[[LICENSE]]*/
6+
CREATE FUNCTION [internals].[MidAbbrev](
7+
@string NVARCHAR(MAX),
8+
@max_length INT
9+
)
10+
RETURNS sysname
11+
AS
12+
BEGIN
13+
DECLARE @over INT = LEN(@string) - @max_length
14+
IF @over > 0
15+
BEGIN
16+
SET @string = SUBSTRING(@string, 1, ((LEN(@string) - @over) / 2) - 1) + '...' + SUBSTRING(@string, ((LEN(@string) + @over)/2) + 3, LEN(@string))
17+
END
18+
RETURN @string
19+
END
20+
GO

tests/test-dbs/CreateCrazyTables.sql

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@ EXEC(@SQL)
6161

6262
SET @SQL =
6363
'CREATE TABLE ' + QUOTENAME(@longestname) + '.' + QUOTENAME(@longestname) + ' (' + @CRLF +
64-
' ' + QUOTENAME(@longestname) + ' INT,' + @CRLF +
64+
' ' + QUOTENAME(@longname) + ' INT,' + @CRLF +
6565
' ' + QUOTENAME(@daftname1) + ' INT,' + @CRLF +
6666
' ' + QUOTENAME(@daftname2) + ' NVARCHAR(50)' + @CRLF +
6767
')' + @CRLF

tests/testCrazyTableNames.sql renamed to tests/testCrazyTables.sql

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
USE SqlUtils
22
GO
33

4-
EXEC tSQLt.NewTestClass 'testCrazyTableNames';
4+
EXEC tSQLt.NewTestClass 'testCrazyTables';
55
GO
66

7-
CREATE PROCEDURE testCrazyTableNames.[test crazy table and column names]
7+
CREATE PROCEDURE testCrazyTables.[test crazy table and column names]
88
AS
99
BEGIN
1010
SET NOCOUNT ON;
@@ -29,10 +29,10 @@ BEGIN
2929
SET @SQL =
3030
'EXEC ImportAll ''[SqlUtilsTests_A].' + QUOTENAME(@longestname) + '.' + QUOTENAME(@longestname) + ''', ''[SqlUtilsTests_C]..' + REPLACE(QUOTENAME(@longname), '''', '''''') + '''' + @CRLF +
3131
', @join = ''' +
32-
QUOTENAME(@longestname) + ', ' + REPLACE(QUOTENAME(@daftname1), '''', '''''') +
32+
REPLACE(QUOTENAME(@longname), '''', '''''') + ', ' + REPLACE(QUOTENAME(@daftname1), '''', '''''') +
3333
'''' + @CRLF +
3434
', @map = ''' +
35-
QUOTENAME(@longestname) + ', ' + REPLACE(QUOTENAME(@daftname2), '''', '''''') +
35+
REPLACE(QUOTENAME(@longname), '''', '''''') + ', ' + REPLACE(QUOTENAME(@daftname2), '''', '''''') +
3636
'; ' +
3737
REPLACE(QUOTENAME(@daftname1), '''', '''''') + ', ' + QUOTENAME(@longestname) +
3838
'; ' +

tests/testMidAbbrev.sql

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
EXEC tSQLt.NewTestClass 'testMidAbbrev';
2+
GO
3+
4+
CREATE PROCEDURE testMidAbbrev.internalTestMidAbbrev
5+
@toAbbreviate NVARCHAR(MAX),
6+
@length INT,
7+
@expectedResult NVARCHAR(MAX)
8+
AS
9+
BEGIN
10+
SET NOCOUNT ON;
11+
12+
DECLARE @len INT = LEN(@expectedResult)
13+
EXEC tSQLt.AssertEquals @length, @len
14+
15+
DECLARE @abbreviated NVARCHAR(MAX) = internals.MidAbbrev(@toAbbreviate, @length)
16+
EXEC tSQLt.AssertEqualsString @expectedResult, @abbreviated
17+
END
18+
GO
19+
20+
CREATE PROCEDURE testMidAbbrev.[test MidAbbrev works]
21+
AS
22+
BEGIN
23+
SET NOCOUNT ON;
24+
25+
EXEC testMidAbbrev.internalTestMidAbbrev '12345678', 3, '...'
26+
EXEC testMidAbbrev.internalTestMidAbbrev '12345678', 4, '1...'
27+
EXEC testMidAbbrev.internalTestMidAbbrev '12345678', 5, '1...8'
28+
EXEC testMidAbbrev.internalTestMidAbbrev '12345678', 6, '12...8'
29+
EXEC testMidAbbrev.internalTestMidAbbrev '12345678', 7, '12...78'
30+
EXEC testMidAbbrev.internalTestMidAbbrev '12345678', 8, '12345678'
31+
END
32+
GO

0 commit comments

Comments
 (0)