public SourceGraphSqlModel(SyncModel model, IShellContext context, DataSyncSqlModel dataSync) { _model = model; if (!model.Sources.Any()) { throw new IncorrectRdsDefinitionException("LGM-00000 There are no available sources entities. Try to add source."); } foreach (var item in model.Sources) { var src = new SourceEntitySqlModel(item, dataSync); Entities.Add(src); src.SqlAlias = item.Alias ?? "src_" + Entities.Count; src.InitializeQuerySource(item.DataSource, context, context.Replace(item.SourceTableVariable), context.Replace(item.SourceQueryVariable)); src.MaterializeIfNeeded(); foreach (var colItem in item.Columns) { string alias = colItem.AliasOrName; if (!Columns.ContainsKey(alias)) { Columns[alias] = new SourceColumnSqlModel { Alias = alias, }; } Columns[alias].DbshColumns.Add(colItem); Columns[alias].Entities.Add(src); src.Columns.Add(Columns[alias]); if (!String.IsNullOrEmpty(colItem.Filter)) { Columns[alias].Filters.Add(colItem.Filter); if (colItem.FilterType != Driver.Common.FilterParser.FilterParser.ExpressionType.None) { Columns[alias].FilterType = colItem.FilterType; } } } } }
public DataSyncSqlModel(SyncModel model, IShellContext context, bool allowExternalSources, string providerString) { _model = model; _allowExternalSources = allowExternalSources; foreach(var param in model.Parameters) { Parameters.Add(new ParameterModel { DataType = context.Replace(param.DataType), DefaultValue = context.Replace(param.DefaultValue), Name = context.Replace(param.Name), }); } ProviderString = providerString; TargetStructure = context.GetDatabaseStructure(providerString); if (_model.IsFlatSync) { foreach (var src in _model.Sources) { var entity = new SourceEntitySqlModel(src, this); entity.LoadFlatColumns(); FlatSources.Add(entity); entity.SqlAlias = src.Alias ?? "src_" + FlatSources.Count; entity.InitializeQuerySource(src.DataSource, context, src.SourceTableVariable, src.SourceQueryVariable); entity.MaterializeIfNeeded(); } } else { SourceGraphModel = new SourceGraphSqlModel(model, context, this); foreach(var col in SourceGraphModel.Columns.Values) { col.CompileFilter(); } } foreach (var entity in model.Targets) { Entities.Add(new TargetEntitySqlModel(this, entity, context)); } foreach (var fk in model.TargetReferences) { var sourceReplaced = context.Replace(fk.Source); var sourceEntity = FindTarget(sourceReplaced); string targetReplaced = context.Replace(fk.Target); var targetEntity = FindTarget(targetReplaced); if (sourceEntity == null) throw new Exception($"DBSH-00000 Source entity {sourceReplaced} not found"); if (targetEntity == null) throw new Exception($"DBSH-00219 Target entity {targetReplaced} not found"); sourceEntity.AddReference(fk, targetEntity); } PartialSortEntitiesByRefs(); foreach (var entity in Entities) { entity.CreateJoinModel(); } foreach (var entity in Entities) { entity.TestCorrectness(); } }