Skip to content

Commit d9c0b0c

Browse files
committed
Add: JoinedTable NavigateForeignKeyTable(string foreignKeyBaseTable) ...
1 parent ddeeed6 commit d9c0b0c

File tree

11 files changed

+430
-17
lines changed

11 files changed

+430
-17
lines changed

T4SQLTemplateLibrary/DataAccess/DbParameterBuilder.cs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,11 @@ public partial class DbParameterBuilder
88
{
99
private readonly DbCommand _DbCommand;
1010

11+
public DbParameterCollection Parameters
12+
{
13+
get { return _DbCommand.Parameters; }
14+
}
15+
1116
public DbParameterBuilder(DbCommand dbCommand)
1217
{
1318
_DbCommand = dbCommand;

T4SQLTemplateLibrary/Databases/SqlServer/Schema Objects/Schemas/T4SQL/Programmability/Stored Procedures/T4SQL.ENGINE_GET_FOREIGN_KEY.sql

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,9 @@
11
CREATE PROCEDURE T4SQL.ENGINE_GET_FOREIGN_KEY
22
(
3-
@inTable_Name NVARCHAR(64),
4-
@outTable_Name NVARCHAR(128) OUTPUT
3+
@inTable_Name NVARCHAR(64),
4+
@outTable_Schema NVARCHAR(64) OUTPUT,
5+
@outTable_Name NVARCHAR(64) OUTPUT,
6+
@outQualified_Name NVARCHAR(128) OUTPUT
57
)
68
AS
79
SET NOCOUNT ON;
@@ -10,7 +12,9 @@ AS
1012
SET @tTable_Id = OBJECT_ID(@inTable_Name);
1113

1214
SELECT
13-
@outTable_Name = QUOTENAME(S.name) + N'.' + QUOTENAME(T.name)
15+
@outTable_Schema = S.name,
16+
@outTable_Name = T.name,
17+
@outTable_Name = QUOTENAME(S.name) + N'.' + QUOTENAME(T.name)
1418
FROM
1519
sys.schemas S,
1620
sys.objects T

T4SQLTemplateLibrary/SqlBuilder/DbPackage.cs

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -132,12 +132,16 @@ internal static IEnumerable<DbmsColumn> ListTableColumns(this DbAccess dbAccess,
132132
private static void LoadForeignKeys(this DbAccess dbAccess, DbmsRelationTree foreignKeyBaseTable)
133133
{
134134
const string sp = "GET_FOREIGN_KEY";
135+
DbParameter outTable_Schema = null;
135136
DbParameter outTable_Name = null;
137+
DbParameter outQualified_Name = null;
136138

137139
dbAccess.ExecuteReader(GetProcedure(sp), parameters =>
138140
{
139141
parameters.Add("inTable_Name", foreignKeyBaseTable.TableName);
140-
outTable_Name = parameters.AddOutput("outTable_Name", 128);
142+
outTable_Schema = parameters.AddOutput("outTable_Schema", 64);
143+
outTable_Name = parameters.AddOutput("outTable_Name", 64);
144+
outQualified_Name = parameters.AddOutput("outQualified_Name", 128);
141145
}, reader =>
142146
{
143147
foreignKeyBaseTable.AddForeignKeyColumn(
@@ -149,7 +153,10 @@ private static void LoadForeignKeys(this DbAccess dbAccess, DbmsRelationTree for
149153
reader.Field<bool>("REFERENCED_NULLABLE"));
150154
});
151155

156+
foreignKeyBaseTable.Schema = outTable_Schema.Parameter<string>();
152157
foreignKeyBaseTable.TableName = outTable_Name.Parameter<string>();
158+
foreignKeyBaseTable.QualifiedName = outQualified_Name.Parameter<string>();
159+
153160
foreignKeyBaseTable.Columns = ListTableColumns(dbAccess, foreignKeyBaseTable.TableName).ToArray();
154161

155162
foreach (DbmsForeignKey fk in foreignKeyBaseTable.ForeignKeys)

T4SQLTemplateLibrary/T4SQL.Base/DbmsEnvironment.cs

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,8 @@ public class DbmsEnvironment
2020
public Version ProductVersion { get { return _ProductVersion; } }
2121
public string ServerName { get { return _ServerName; } }
2222

23-
// internal Func<string, IEnumerable<DbmsColumn>> FuncListTableColumns { get { return _fListTableColumns; } }
24-
// internal Func<string, DbmsRelationTree> FuncLoadForeignKeys { get { return _fLoadForeignKeys; } }
23+
// internal Func<string, IEnumerable<DbmsColumn>> FuncListTableColumns { get { return _fListTableColumns; } }
24+
// internal Func<string, DbmsRelationTree> FuncLoadForeignKeys { get { return _fLoadForeignKeys; } }
2525

2626
public DbmsEnvironment(Func<string, IEnumerable<DbmsColumn>> fListTableColumns,
2727
Func<string, DbmsRelationTree> fLoadForeignKeys,
@@ -43,6 +43,12 @@ public IEnumerable<string> ListTableColumns(string tableName, string specificCol
4343
else
4444
return specificColumns.SplitColumns();
4545
}
46+
47+
public JoinedTable NavigateForeignKeyTable(string foreignKeyBaseTable)
48+
{
49+
DbmsRelationTree baseTable = _fLoadForeignKeys(foreignKeyBaseTable);
50+
return new JoinedTable(baseTable);
51+
}
4652
}
4753
}
4854

T4SQLTemplateLibrary/T4SQL.Base/MetaData/DbmsForeignKey.cs

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -98,6 +98,18 @@ public bool DetectLoopback(string constraintName) // Call before the constraint
9898

9999
return false;
100100
}
101+
102+
public bool IsNullable
103+
{
104+
get
105+
{
106+
foreach (DbmsColumn fkCol in _ForeignKeyColumns)
107+
if (fkCol.IsNullable)
108+
return true;
109+
110+
return false;
111+
}
112+
}
101113
}
102114
}
103115

T4SQLTemplateLibrary/T4SQL.Base/MetaData/DbmsRelationTree.cs

Lines changed: 22 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -6,22 +6,36 @@ namespace T4SQL.MetaData
66
{
77
public class DbmsRelationTree
88
{
9-
private string _nodeTableName;
9+
private string _Schema;
10+
private string _NodeTableName;
11+
private string _QualifiedName;
1012
private DbmsForeignKey _ParentForeignKey;
1113
private List<DbmsForeignKey> _ForeignKeys;
1214
private DbmsColumn[] _Columns;
1315

1416
public DbmsRelationTree(string tableName, DbmsForeignKey parentForeignKey = null)
1517
{
16-
_nodeTableName = tableName;
18+
_NodeTableName = _QualifiedName = tableName;
1719
_ParentForeignKey = parentForeignKey;
1820
_ForeignKeys = new List<DbmsForeignKey>();
1921
}
2022

23+
public string Schema
24+
{
25+
get { return _Schema; }
26+
set { _Schema = value; }
27+
}
28+
2129
public string TableName
2230
{
23-
get { return _nodeTableName; }
24-
set { _nodeTableName = value; }
31+
get { return _NodeTableName; }
32+
set { _NodeTableName = value; }
33+
}
34+
35+
public string QualifiedName
36+
{
37+
get { return _QualifiedName; }
38+
set { _QualifiedName = value; }
2539
}
2640

2741
public DbmsForeignKey ParentForeignKey
@@ -58,13 +72,12 @@ public void AddForeignKeyColumn(string constraintName, string foreignKeyColumn,
5872
fk.AddForeignKeyColumn(new DbmsColumn(foreignKeyColumn, foreignKeyNullable), new DbmsColumn(referencedColumn, referencedNullable));
5973
}
6074

61-
private string _Alias;
62-
internal string Alias
75+
private TableLink _LinkProperty;
76+
internal TableLink LinkProperty
6377
{
64-
get { return _Alias; }
65-
set { _Alias = value; }
78+
get { return _LinkProperty; }
79+
set { _LinkProperty = value; }
6680
}
67-
6881
}
6982
}
7083

0 commit comments

Comments
 (0)