-
Notifications
You must be signed in to change notification settings - Fork 4
/
Copy pathScriptExtensions.cs
110 lines (95 loc) · 2.87 KB
/
ScriptExtensions.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
// Copyright 2013 Mercent Corporation
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.SqlServer.Management.Smo;
namespace Mercent.SqlServer.Management
{
internal static class ScriptExtensions
{
public static bool HasAnyVariantColumns(this Table table)
{
if(table == null)
throw new ArgumentNullException("table");
return table.Columns
.Cast<Column>()
.Any(c => c.DataType.SqlDataType == SqlDataType.Variant);
}
/// <summary>
/// Returns true if the table has a column of a unicode data type (nchar, ntext, nvarchar).
/// </summary>
public static bool HasAnyUnicodeColumns(this Table table)
{
if(table == null)
throw new ArgumentNullException("table");
return table.Columns
.Cast<Column>()
.Any(c => IsUnicode(c.DataType.SqlDataType));
}
public static bool HasAnyXmlColumns(this Table table)
{
if(table == null)
throw new ArgumentNullException("table");
return table.Columns
.Cast<Column>()
.Any(c => c.DataType.SqlDataType == SqlDataType.Xml);
}
public static bool HasUniqueIndex(this Table table)
{
if(table == null)
throw new ArgumentNullException("table");
return table.Indexes
.Cast<Index>()
.Any(i => i.IsUnique);
}
public static bool IsSysDiagramsWithData(this Table table)
{
if(table == null)
throw new ArgumentNullException("table");
return table.Schema == "dbo"
&& table.Name == "sysdiagrams"
&& table.RowCount > 0;
}
public static string QualifiedName(this Table table)
{
if(table == null)
throw new ArgumentNullException("table");
return ScriptUtility.MakeSqlBracket(table.Schema) + '.' + ScriptUtility.MakeSqlBracket(table.Name);
}
public static TableIdentifier TableIdentifier(this Table table)
{
if(table == null)
throw new ArgumentNullException("table");
return new TableIdentifier(table.Schema, table.Name);
}
/// <summary>
/// Returns true if the data type is one of the following unicode types: NChar, NText, NVarChar or NVarCharMax.
/// </summary>
static bool IsUnicode(SqlDataType dataType)
{
switch(dataType)
{
case SqlDataType.NChar:
case SqlDataType.NText:
case SqlDataType.NVarChar:
case SqlDataType.NVarCharMax:
return true;
default:
return false;
}
}
}
}