Browse Source

EDM Designer: Reading User Defined Data Types, Domain Model, SQL Server Implementation (just reading metadata)

git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/trunk@4899 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61
shortcuts
Philipp Maihart 16 years ago
parent
commit
37ffd28b97
  1. 32
      src/AddIns/DisplayBindings/Data/ICSharpCode.Data.Core/DatabaseObjects/Database.cs
  2. 57
      src/AddIns/DisplayBindings/Data/ICSharpCode.Data.Core/DatabaseObjects/UserDefinedDataType.cs
  3. 2
      src/AddIns/DisplayBindings/Data/ICSharpCode.Data.Core/ICSharpCode.Data.Core.csproj
  4. 2
      src/AddIns/DisplayBindings/Data/ICSharpCode.Data.Core/Interfaces/IDatabase.cs
  5. 18
      src/AddIns/DisplayBindings/Data/ICSharpCode.Data.Core/Interfaces/IUserDefinedDataType.cs
  6. 2
      src/AddIns/DisplayBindings/Data/ICSharpCode.Data.EDMDesigner.Core.UI/DisplayBinding/EDMDesignerViewContent.cs
  7. 37
      src/AddIns/DisplayBindings/Data/ICSharpCode.Data.SQLServer/SQLServerDatabaseDriver.cs

32
src/AddIns/DisplayBindings/Data/ICSharpCode.Data.Core/DatabaseObjects/Database.cs

@ -22,6 +22,8 @@ namespace ICSharpCode.Data.Core.DatabaseObjects @@ -22,6 +22,8 @@ namespace ICSharpCode.Data.Core.DatabaseObjects
private DatabaseObjectBase<ITable> _tables = null;
private DatabaseObjectBase<IView> _views = null;
private DatabaseObjectBase<IProcedure> _procedures = null;
private DatabaseObjectBase<IConstraint> _constraints = null;
private DatabaseObjectBase<IUserDefinedDataType> _userDefinedDataTypes = null;
#endregion
@ -70,6 +72,28 @@ namespace ICSharpCode.Data.Core.DatabaseObjects @@ -70,6 +72,28 @@ namespace ICSharpCode.Data.Core.DatabaseObjects
}
}
public DatabaseObjectsCollection<IConstraint> Constraints
{
get
{
if (_constraints != null)
return _constraints.Items;
else
return null;
}
}
public DatabaseObjectsCollection<IUserDefinedDataType> UserDefinedDataTypes
{
get
{
if (_userDefinedDataTypes != null)
return _userDefinedDataTypes.Items;
else
return null;
}
}
#endregion
#region Constructor
@ -87,11 +111,19 @@ namespace ICSharpCode.Data.Core.DatabaseObjects @@ -87,11 +111,19 @@ namespace ICSharpCode.Data.Core.DatabaseObjects
{
try
{
_constraints = new DatabaseObjectBase<IConstraint>();
_constraints.Name = "Constraints";
_userDefinedDataTypes = new DatabaseObjectBase<IUserDefinedDataType>();
_userDefinedDataTypes.Name = "UserDefinedDataTypes";
_tables = new DatabaseObjectBase<ITable>();
_tables.Name = "Tables";
_tables.Items = Datasource.DatabaseDriver.LoadTables(this);
Items.Add(_tables);
OnPropertyChanged("Tables");
OnPropertyChanged("Constraints");
OnPropertyChanged("UserDefinedDataTypes");
_views = new DatabaseObjectBase<IView>();
_views.Name = "Views";

57
src/AddIns/DisplayBindings/Data/ICSharpCode.Data.Core/DatabaseObjects/UserDefinedDataType.cs

@ -0,0 +1,57 @@ @@ -0,0 +1,57 @@
#region Usings
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using ICSharpCode.Data.Core.Interfaces;
#endregion
namespace ICSharpCode.Data.Core.DatabaseObjects
{
public class UserDefinedDataType : DatabaseObjectBase, IUserDefinedDataType
{
#region Fields
private string _systemType = string.Empty;
private int _length = 0;
private bool _isNullable = false;
#endregion
#region Properties
public string SystemType
{
get { return _systemType; }
set
{
_systemType = value;
OnPropertyChanged("SystemType");
}
}
public int Length
{
get { return _length; }
set
{
_length = value;
OnPropertyChanged("Length");
}
}
public bool IsNullable
{
get { return _isNullable; }
set
{
_isNullable = value;
OnPropertyChanged("IsNullable");
}
}
#endregion
}
}

2
src/AddIns/DisplayBindings/Data/ICSharpCode.Data.Core/ICSharpCode.Data.Core.csproj

@ -83,6 +83,7 @@ @@ -83,6 +83,7 @@
<Compile Include="Common\Enumerable.cs" />
<Compile Include="Common\Helper.cs" />
<Compile Include="DatabaseObjects\TableType.cs" />
<Compile Include="DatabaseObjects\UserDefinedDataType.cs" />
<Compile Include="DatabaseObjects\View.cs" />
<Compile Include="Enums\Cardinality.cs" />
<Compile Include="Enums\ParameterMode.cs" />
@ -97,6 +98,7 @@ @@ -97,6 +98,7 @@
<Compile Include="Interfaces\IProcedure.cs" />
<Compile Include="Interfaces\IProcedureParameter.cs" />
<Compile Include="Interfaces\ITable.cs" />
<Compile Include="Interfaces\IUserDefinedDataType.cs" />
<Compile Include="Interfaces\IView.cs" />
<Compile Include="Common\Objects.cs" />
<Compile Include="Properties\AssemblyInfo.cs">

2
src/AddIns/DisplayBindings/Data/ICSharpCode.Data.Core/Interfaces/IDatabase.cs

@ -18,6 +18,8 @@ namespace ICSharpCode.Data.Core.Interfaces @@ -18,6 +18,8 @@ namespace ICSharpCode.Data.Core.Interfaces
DatabaseObjectsCollection<ITable> Tables { get; }
DatabaseObjectsCollection<IView> Views { get; }
DatabaseObjectsCollection<IProcedure> Procedures { get; }
DatabaseObjectsCollection<IConstraint> Constraints { get; }
DatabaseObjectsCollection<IUserDefinedDataType> UserDefinedDataTypes { get; }
bool LoadDatabase();
}

18
src/AddIns/DisplayBindings/Data/ICSharpCode.Data.Core/Interfaces/IUserDefinedDataType.cs

@ -0,0 +1,18 @@ @@ -0,0 +1,18 @@
#region Usings
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
#endregion
namespace ICSharpCode.Data.Core.Interfaces
{
public interface IUserDefinedDataType : IDatabaseObjectBase
{
string SystemType { get; set; }
int Length { get; set; }
bool IsNullable { get; set; }
}
}

2
src/AddIns/DisplayBindings/Data/ICSharpCode.Data.EDMDesigner.Core.UI/DisplayBinding/EDMDesignerViewContent.cs

@ -112,7 +112,7 @@ namespace ICSharpCode.Data.EDMDesigner.Core.UI.DisplayBinding @@ -112,7 +112,7 @@ namespace ICSharpCode.Data.EDMDesigner.Core.UI.DisplayBinding
// Load or generate DesignerView and EntityTypeDesigners
EntityTypeDesigner.Init = true;
if (edmxElement.Element("DesignerViews") == null)
if (edmxElement == null || edmxElement.Element("DesignerViews") == null)
edmxElement = new XElement("Designer", DesignerIO.GenerateNewDesignerViewsFromCSDLView(_edmView.CSDL));
if (edmxElement != null && edmxElement.Element("DesignerViews") != null)

37
src/AddIns/DisplayBindings/Data/ICSharpCode.Data.SQLServer/SQLServerDatabaseDriver.cs

@ -107,6 +107,7 @@ namespace ICSharpCode.Data.Core.DatabaseDrivers.SQLServer @@ -107,6 +107,7 @@ namespace ICSharpCode.Data.Core.DatabaseDrivers.SQLServer
ORDER BY
1,2,3,4";
private const string _getUserDefinedDataTypes = @"SELECT t1.*, t2.Name AS SystemType FROM sys.Types t1, sys.types t2 WHERE t1.is_user_defined = 1 AND t2.system_type_id = t1.system_type_id AND t2.user_type_id = t1.system_type_id";
private const string _getViews = @"SELECT TABLE_SCHEMA, TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE='VIEW' AND TABLE_NAME<>'dtproperties' ORDER BY TABLE_SCHEMA, TABLE_NAME";
private const string _getProcedures = "SELECT ROUTINE_NAME, ROUTINE_SCHEMA, ROUTINE_BODY, DATA_TYPE, CHARACTER_MAXIMUM_LENGTH FROM INFORMATION_SCHEMA.ROUTINES WHERE ROUTINE_TYPE = 'PROCEDURE'";
private const string _getProcedureParameters = @"SELECT PARAMETER_NAME, DATA_TYPE, CHARACTER_MAXIMUM_LENGTH, PARAMETER_MODE, IS_RESULT FROM information_schema.PARAMETERS WHERE SPECIFIC_NAME = '{0}' AND SPECIFIC_SCHEMA = '{1}' AND SPECIFIC_CATALOG = '{2}'";
@ -259,17 +260,11 @@ namespace ICSharpCode.Data.Core.DatabaseDrivers.SQLServer @@ -259,17 +260,11 @@ namespace ICSharpCode.Data.Core.DatabaseDrivers.SQLServer
SqlConnection sqlConnection = new SqlConnection(database.ConnectionString);
using (SqlDataAdapter da = new SqlDataAdapter(_getTables, sqlConnection))
using (SqlDataAdapter da = new SqlDataAdapter(_getConstraintsScript, sqlConnection))
{
DataTable dtTables = new DataTable("Tables");
da.Fill(dtTables);
da.SelectCommand = new SqlCommand(_getConstraintsScript, sqlConnection);
DataTable dtConstraints = new DataTable("Constraints");
da.Fill(dtConstraints);
ObservableCollection<IConstraint> constraints = new ObservableCollection<IConstraint>();
for (int i = 0; i < dtConstraints.Rows.Count; i++)
{
IConstraint constraint = new ICSharpCode.Data.Core.DatabaseObjects.Constraint();
@ -279,8 +274,32 @@ namespace ICSharpCode.Data.Core.DatabaseDrivers.SQLServer @@ -279,8 +274,32 @@ namespace ICSharpCode.Data.Core.DatabaseDrivers.SQLServer
constraint.PKTableName = (string)dtConstraints.Rows[i]["PKTable"];
constraint.PKColumnName = (string)dtConstraints.Rows[i]["PKColumn"];
constraints.Add(constraint);
database.Constraints.Add(constraint);
}
}
using (SqlDataAdapter da = new SqlDataAdapter(_getUserDefinedDataTypes, sqlConnection))
{
DataTable dtUserDefinedDataTypes = new DataTable("UserDefinedDataTypes");
da.Fill(dtUserDefinedDataTypes);
for (int i = 0; i < dtUserDefinedDataTypes.Rows.Count; i++)
{
IUserDefinedDataType userDefinedDataType = new UserDefinedDataType();
userDefinedDataType.Name = (string)dtUserDefinedDataTypes.Rows[i]["Name"];
userDefinedDataType.SystemType = (string)dtUserDefinedDataTypes.Rows[i]["SystemType"];
userDefinedDataType.Length = Convert.ToInt32(dtUserDefinedDataTypes.Rows[i]["Max_Length"]);
userDefinedDataType.IsNullable = (bool)dtUserDefinedDataTypes.Rows[i]["Is_Nullable"];
database.UserDefinedDataTypes.Add(userDefinedDataType);
}
}
using (SqlDataAdapter da = new SqlDataAdapter(_getTables, sqlConnection))
{
DataTable dtTables = new DataTable("Tables");
da.Fill(dtTables);
for (int i = 0; i < dtTables.Rows.Count; i++)
{
@ -290,7 +309,7 @@ namespace ICSharpCode.Data.Core.DatabaseDrivers.SQLServer @@ -290,7 +309,7 @@ namespace ICSharpCode.Data.Core.DatabaseDrivers.SQLServer
Table table = new Table() { SchemaName = schemaName, TableName = tableName };
LoadColumns(sqlConnection, table, TableType.Table);
table.Constraints = constraints.Where(constraint => constraint.FKTableName == tableName).ToDatabaseObjectsCollection(table);
table.Constraints = database.Constraints.Where(constraint => constraint.FKTableName == tableName).ToDatabaseObjectsCollection(table);
tables.Add(table);
}
}

Loading…
Cancel
Save