示例#1
0
        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);
        }
示例#2
0
        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);
        }
示例#3
0
 public async void Table__Error_On_Repeated_Table_Name(string error, string additionalLocation, string name, string mb)
 {
     await VerifyErrorRaised(mb, ModelBuilderError.TableRepeatedName(name), error, additionalLocation);
 }