public DatabasePresenter(IDatabaseView view, IRelationRepository repository) { _view = view; view.Presenter = this; _repository = repository; _repository.TableName = "customer"; }
/// <summary> /// Analyses a database view. Reports messages when a view, or its related schema have reserved keyword names. /// </summary> /// <param name="view">A database view.</param> /// <returns>A set of linting messages used for reporting. An empty set indicates no issues discovered.</returns> /// <exception cref="ArgumentNullException"><paramref name="view"/> is <c>null</c>.</exception> protected IEnumerable <IRuleMessage> AnalyseView(IDatabaseView view) { if (view == null) { throw new ArgumentNullException(nameof(view)); } var result = new List <IRuleMessage>(); var viewNameIsKeyword = Dialect.IsReservedKeyword(view.Name.LocalName); if (viewNameIsKeyword) { var message = BuildViewMessage(view.Name); result.Add(message); } var keywordColumnNames = view.Columns .Select(c => c.Name.LocalName) .Where(Dialect.IsReservedKeyword); foreach (var kwColumnName in keywordColumnNames) { var message = BuildViewColumnMessage(view.Name, kwColumnName); result.Add(message); } return(result); }
public View Map(IDatabaseView view, ReferencedObjectTargets referencedObjectTargets) { if (view == null) { throw new ArgumentNullException(nameof(view)); } if (referencedObjectTargets == null) { throw new ArgumentNullException(nameof(referencedObjectTargets)); } const string rootPath = "../"; var links = referencedObjectTargets.GetReferencedObjectLinks(rootPath, view.Name, view.Definition); var viewColumns = view.Columns.ToList(); var columns = viewColumns.Select((vc, i) => new View.Column( vc.Name?.LocalName ?? string.Empty, i + 1, vc.IsNullable, vc.Type.Definition, vc.DefaultValue )).ToList(); return(new View( view.Name, rootPath, view.Definition, columns, links )); }
/// <summary> /// Analyses a database view. Reports messages when a view has whitespace in its name or related schema. /// </summary> /// <param name="view">A set of database views.</param> /// <returns>A set of linting messages used for reporting. An empty set indicates no issues discovered.</returns> /// <exception cref="ArgumentNullException"><paramref name="view"/> is <c>null</c>.</exception> protected IEnumerable <IRuleMessage> AnalyseView(IDatabaseView view) { if (view == null) { throw new ArgumentNullException(nameof(view)); } var result = new List <IRuleMessage>(); var viewNameHasWs = HasWhiteSpace(view.Name.LocalName); if (viewNameHasWs) { var message = BuildViewMessage(view.Name); result.Add(message); } var whiteSpaceColumnNames = view.Columns .Select(c => c.Name.LocalName) .Where(HasWhiteSpace); foreach (var wsColumnName in whiteSpaceColumnNames) { var message = BuildViewColumnMessage(view.Name, wsColumnName); result.Add(message); } return(result); }
/// <summary> /// Analyses a database view. Reports messages when the view definitions is invalid. /// </summary> /// <param name="view">A database view.</param> /// <param name="cancellationToken">A cancellation token used to interrupt analysis.</param> /// <returns>A set of linting messages used for reporting. An empty set indicates no issues discovered.</returns> /// <exception cref="ArgumentNullException"><paramref name="view"/> is <c>null</c>.</exception> protected Task <IEnumerable <IRuleMessage> > AnalyseViewAsync(IDatabaseView view, CancellationToken cancellationToken) { if (view == null) { throw new ArgumentNullException(nameof(view)); } return(AnalyseViewAsyncCore(view, cancellationToken)); }
public Main.View Map(IDatabaseView view) { if (view == null) { throw new ArgumentNullException(nameof(view)); } var columnCount = view.Columns.UCount(); return(new Main.View(view.Name, columnCount, view.IsMaterialized)); }
public MainWindow(IDatabaseView databaseView, IUpdaterView updaterView, ISettingsView settingsView, AppSettings options) { InitializeComponent(); this.databaseView = databaseView; DatabaseViewControl.Content = databaseView; this.updaterView = updaterView; UpdaterViewControl.Content = updaterView; this.settingsView = settingsView; SettingsViewControl.Content = settingsView; this.settings = options; }
private static IEnumerable <AttributeListSyntax> BuildClassAttributes(IDatabaseView view, string className) { if (view == null) { throw new ArgumentNullException(nameof(view)); } if (className.IsNullOrWhiteSpace()) { throw new ArgumentNullException(nameof(className)); } var attributes = new List <AttributeListSyntax>(); var schemaName = view.Name.Schema; if (!schemaName.IsNullOrWhiteSpace()) { var schemaAttribute = AttributeList( SingletonSeparatedList( Attribute( SyntaxUtilities.AttributeName(nameof(SchemaAttribute)), AttributeArgumentList( SingletonSeparatedList( AttributeArgument( LiteralExpression( SyntaxKind.StringLiteralExpression, Literal(schemaName)))))))); attributes.Add(schemaAttribute); } if (className != view.Name.LocalName) { var aliasAttribute = AttributeList( SingletonSeparatedList( Attribute( SyntaxUtilities.AttributeName(nameof(AliasAttribute)), AttributeArgumentList( SingletonSeparatedList( AttributeArgument( LiteralExpression( SyntaxKind.StringLiteralExpression, Literal(view.Name.LocalName)))))))); attributes.Add(aliasAttribute); } return(attributes); }
private ClassDeclarationSyntax BuildClass(IDatabaseView view, Option <IDatabaseViewComments> comment) { if (view == null) { throw new ArgumentNullException(nameof(view)); } var className = NameTranslator.ViewToClassName(view.Name); var properties = view.Columns .Select(vc => BuildColumn(vc, comment, className)) .ToList(); return(ClassDeclaration(className) .AddModifiers(Token(SyntaxKind.PublicKeyword)) .WithLeadingTrivia(BuildViewComment(view.Name, comment)) .WithMembers(List <MemberDeclarationSyntax>(properties))); }
private async Task <IEnumerable <IRuleMessage> > AnalyseViewAsyncCore(IDatabaseView view, CancellationToken cancellationToken) { try { var simpleViewName = Identifier.CreateQualifiedIdentifier(view.Name.Schema, view.Name.LocalName); var quotedViewName = Connection.Dialect.QuoteName(simpleViewName); var query = "select 1 as dummy from " + quotedViewName; await Connection.DbConnection.ExecuteScalarAsync <long>(query, cancellationToken).ConfigureAwait(false); return(Array.Empty <IRuleMessage>()); } catch { var message = BuildMessage(view.Name); return(new[] { message }); } }
/// <summary> /// Generates source code that enables interoperability with a given database view for Entity Framework Core. /// </summary> /// <param name="view">A database view.</param> /// <param name="comment">Comment information for the given view.</param> /// <returns>A string containing source code to interact with the view.</returns> /// <exception cref="ArgumentNullException"><paramref name="view"/> is <c>null</c>.</exception> public override string Generate(IDatabaseView view, Option <IDatabaseViewComments> comment) { if (view == null) { throw new ArgumentNullException(nameof(view)); } var schemaNamespace = NameTranslator.SchemaToNamespace(view.Name); var viewNamespace = !schemaNamespace.IsNullOrWhiteSpace() ? Namespace + "." + schemaNamespace : Namespace; var namespaces = new[] { "System.ComponentModel.DataAnnotations", "System.ComponentModel.DataAnnotations.Schema" } .Union( view.Columns .Select(c => c.Type.ClrType.Namespace) .Where(ns => ns != viewNamespace) ) .Distinct() .OrderNamespaces() .ToList(); var usingStatements = namespaces .Select(ns => ParseName(ns)) .Select(UsingDirective) .ToList(); var namespaceDeclaration = NamespaceDeclaration(ParseName(viewNamespace)); var classDeclaration = BuildClass(view, comment); var document = CompilationUnit() .WithUsings(List(usingStatements)) .WithMembers( SingletonList <MemberDeclarationSyntax>( namespaceDeclaration .WithMembers( SingletonList <MemberDeclarationSyntax>(classDeclaration)))); using var workspace = new AdhocWorkspace(); return(Formatter.Format(document, workspace).ToFullString()); }
public IEnumerable <Columns.ViewColumn> Map(IDatabaseView view) { if (view == null) { throw new ArgumentNullException(nameof(view)); } var columns = view.Columns.ToList(); return(columns.Select((c, i) => new Columns.ViewColumn( view.Name, i + 1, c.Name.LocalName, c.Type.Definition, c.IsNullable ) ).ToList()); }
private PropertyDeclarationSyntax BuildViewDbSet(IDatabaseView view) { if (view == null) { throw new ArgumentNullException(nameof(view)); } var schemaNamespace = NameTranslator.SchemaToNamespace(view.Name); var className = NameTranslator.ViewToClassName(view.Name); var qualifiedClassName = !schemaNamespace.IsNullOrWhiteSpace() ? schemaNamespace + "." + className : className; var setName = className.Pluralize(); var qualifiedViewName = !view.Name.Schema.IsNullOrWhiteSpace() ? view.Name.Schema + "." + view.Name.LocalName : view.Name.LocalName; return(BuildDbSetProperty(qualifiedClassName, setName, qualifiedViewName, "view")); }
private InvocationExpressionSyntax BuildViewConfiguration(IDatabaseView view) { if (view == null) { throw new ArgumentNullException(nameof(view)); } var qualifiedClassName = GetQualifiedClassName(view.Name); var entity = GetEntityBuilder(qualifiedClassName); var hasNoKey = InvocationExpression( MemberAccessExpression( SyntaxKind.SimpleMemberAccessExpression, entity, IdentifierName(nameof(EntityTypeBuilder.HasNoKey)))); var toViewArgs = new List <ArgumentSyntax> { Argument( LiteralExpression( SyntaxKind.StringLiteralExpression, Literal(view.Name.LocalName))) }; if (!view.Name.Schema.IsNullOrWhiteSpace()) { var schemaArg = Argument( LiteralExpression( SyntaxKind.StringLiteralExpression, Literal(view.Name.Schema))); toViewArgs.Add(schemaArg); } return(InvocationExpression( MemberAccessExpression( SyntaxKind.SimpleMemberAccessExpression, hasNoKey, IdentifierName(nameof(RelationalEntityTypeBuilderExtensions.ToView)))) .WithArgumentList( ArgumentList( SeparatedList(toViewArgs)))); }
/// <summary> /// Gets a database column lookup. /// </summary> /// <param name="view">A database view.</param> /// <param name="identifierResolver">An identifier resolver.</param> /// <returns>A lookup keyed by column names, whose values are the associated columns.</returns> /// <exception cref="ArgumentNullException"><paramref name="view"/> or <paramref name="identifierResolver"/> is <c>null</c>.</exception> public static IReadOnlyDictionary <Identifier, IDatabaseColumn> GetColumnLookup(this IDatabaseView view, IIdentifierResolutionStrategy identifierResolver) { if (view == null) { throw new ArgumentNullException(nameof(view)); } if (identifierResolver == null) { throw new ArgumentNullException(nameof(identifierResolver)); } var lookup = GetColumnLookup(view); return(new IdentifierResolvingDictionary <IDatabaseColumn>(lookup, identifierResolver)); }
/// <summary> /// Gets a database column lookup. /// </summary> /// <param name="view">A database view.</param> /// <returns>A lookup keyed by column names, whose values are the associated columns.</returns> /// <exception cref="ArgumentNullException"><paramref name="view"/> is <c>null</c>.</exception> public static IReadOnlyDictionary <Identifier, IDatabaseColumn> GetColumnLookup(this IDatabaseView view) { if (view == null) { throw new ArgumentNullException(nameof(view)); } var columns = view.Columns; var result = new Dictionary <Identifier, IDatabaseColumn>(columns.Count); foreach (var column in columns) { if (column.Name != null) { result[column.Name.LocalName] = column; } } return(result); }
public RoomPresenter(IDatabaseView view, IRelationRepository repository) : base(view, repository) { _view.RoomPresenter = this; _repository.DataGridView = _view.RoomViewSection; }
public DatabasePresenter(IDatabaseView view, IRelationRepository repository) { _view = view; _repository = repository; }
public override string Generate(IDatabaseView view, Option <IDatabaseViewComments> comment) => string.Empty;
/// <summary> /// Generates source code that enables interoperability with a given database view. /// </summary> /// <param name="view">A database view.</param> /// <param name="comment">Comment information for the given view.</param> /// <returns>A string containing source code to interact with the view.</returns> public abstract string Generate(IDatabaseView view, Option <IDatabaseViewComments> comment);