public static ITable <TDatabase, TTable> Table <TDatabase, TTable>(this ITableBuilder <TDatabase> @this, Expression <Func <TDatabase, IEnumerable <TTable> > > table, string name = null, string schema = null) { var builder = new InternalTableBuilder <TDatabase, TTable>((@this as TableBuilder <TDatabase>).DatabaseBuilder) { Property = ExpressionHelpers.ParsePropertySelector(table ?? throw ModelBuilderError.ArgumentNull(nameof(table)).AsException()), Schema = schema }; builder.Name = name ?? builder.Property.Name; { var priorTable = builder.DatabaseBuilder.Tables.FirstOrDefault(t => t.Property.Name == builder.Property.Name); if (priorTable != null) { throw ModelBuilderError.TableRepeatedSelector(database: typeof(TDatabase).Name, property: builder.Property.Name, otherTable: BuilderHelper.GetTableName(priorTable.Schema, priorTable.Name)).AsException(); } } if (builder.DatabaseBuilder.Tables.Any(t => t.Schema == builder.Schema && t.Name == builder.Name)) { throw ModelBuilderError.TableRepeatedName(BuilderHelper.GetTableName(builder.Schema, builder.Name)).AsException(); } return(builder); }
static FuzzyTableModel ParseTableTable(SyntaxNodeAnalysisContext context, InvocationExpressionSyntax expression, FuzzyDatabaseModel partialDatabase) { var arguments = AH.ParseArguments(context, expression); var tableArg = arguments["table"]; var nameArg = arguments["name"]; var schemaArg = arguments["schema"]; if (AH.IsNull(context, tableArg)) { context.ReportDiagnostic(BuilderError.ArgumentNull("table").MakeDiagnostic(tableArg.Expression.GetLocation())); } var property = AH.ParseSelector(context, tableArg); var fuzzyTableModel = new FuzzyTableModel() { Property = property, Columns = new List <FuzzyColumnModel>(), Indexes = new List <FuzzyIndexModel>(), ForeignKeys = new List <FuzzyForeignKeyModel>(), Schema = AH.ParseConstantArgument(context, schemaArg, () => AH.Just(null as string)), Name = AH.ParseConstantArgument(context, nameArg, () => property.HasValue ? AH.Just(property.Value?.Name) : new Optional <string>()) }; if (fuzzyTableModel.Property.HasValue) { var priorTable = partialDatabase.Tables.FirstOrDefault(t => t.Property.HasValue && t.Property.Value.Name == fuzzyTableModel.Property.Value.Name); if (priorTable != null) { context.ReportDiagnostic(ModelBuilderError.TableRepeatedSelector(ToString(partialDatabase.Name), ToString(fuzzyTableModel.Property), ToString(priorTable)).MakeDiagnostic(tableArg.GetLocation())); } } if (fuzzyTableModel.Name.HasValue && fuzzyTableModel.Schema.HasValue) { var priorTable = partialDatabase.Tables.FirstOrDefault(t => t.Name.HasValue && t.Schema.HasValue && t.Name.Value == fuzzyTableModel.Name.Value && t.Schema.Value == fuzzyTableModel.Schema.Value); if (priorTable != null) { context.ReportDiagnostic(ModelBuilderError.TableRepeatedName(ToString(priorTable)).MakeDiagnostic(nameArg != null ? nameArg.GetLocation() : tableArg.GetLocation(), schemaArg != null ? new List <Location>() { schemaArg.GetLocation() } : null)); } } return(fuzzyTableModel); }
public async void Table__Error_On_Repeated_Table_Selector(string error, string mb) { await VerifyErrorRaised(mb, ModelBuilderError.TableRepeatedSelector("Database", "Users", "Users"), error); }