public MergeDescriptor.Merge Build(TableDescriptor table, string scriptFile, DataTable data = null) { var merge = new MergeDescriptor.Merge(); merge.Name = table.Name.ToIdentifier(); if (data == null) { merge.Data = BuildDataTableDefinition(table); } else { merge.Data = data; } merge.ScriptDescriptor = new InScriptDescriptor(0, 0, scriptFile); merge.Statement = new MergeStatement(); merge.Table = table; merge.Data.AcceptChanges(); merge.Option = new MergeOptions(true, true, true, merge.Table.Columns.Any(p => p.IsKey)); return(merge); }
public MergeDescriptor.Merge Build(TableDescriptor table, string scriptFile, DataTable data = null) { var merge = new MergeDescriptor.Merge(); merge.Name = table.Name.ToIdentifier(); if(data == null) merge.Data = BuildDataTableDefinition( table); else { merge.Data = data; } merge.ScriptDescriptor = new InScriptDescriptor(0,0, scriptFile); merge.Statement = new MergeStatement(); merge.Table = table; merge.Data.AcceptChanges(); merge.Option = new MergeOptions(true, true, true, merge.Table.Columns.Any(p=>p.IsKey)); return merge; }
public void Populate() { Merges = new List <MergeDescriptor.Merge>(); var statementParser = new MergeStatementParser(); var parser = new ScriptParser(statementParser, _path); parser.Parse(); foreach (var mergeStatement in statementParser.Merges) { if (!(mergeStatement.MergeSpecification.Target is NamedTableReference)) { Log.WriteInfo("Error Parsing Merge Statement, Target is not a NamedTableReference"); continue; } var name = (mergeStatement.MergeSpecification.Target as NamedTableReference).SchemaObject; var table = _tables.Get().FirstOrDefault(p => p.Name.EqualsName(name)); if (table == null) { Log.WriteInfo( "Error Parsing Merge Statement, Could not find table name ({0}) in the TableRepository", name.BaseIdentifier.Value); continue; } if (!(mergeStatement.MergeSpecification.TableReference is InlineDerivedTable)) { Log.WriteInfo("Error Parsing Merge Statement, Could not find InlineDerivedTable"); continue; } var merge = new MergeDescriptor.Merge(); merge.CustommMerger = mergeStatement; merge.Name = name.ToIdentifier(); merge.Data = GetDataFromMerge(mergeStatement, table); if (null == merge.Data) { continue; //can't do anything with this } merge.Data.AcceptChanges(); merge.ScriptDescriptor = new InScriptDescriptor(mergeStatement.StartOffset, mergeStatement.FragmentLength, _path); merge.Statement = mergeStatement; merge.Table = table; bool hasSearchKeys = false; var searchCondition = mergeStatement.MergeSpecification.SearchCondition as BooleanComparisonExpression; if (null != searchCondition) { var col = searchCondition.FirstExpression as ColumnReferenceExpression; if (col != null) { var searchColName = col.MultiPartIdentifier.Identifiers.Last(); if (searchColName.Value == "???") { hasSearchKeys = false; } else { hasSearchKeys = true; } } } merge.Option = new MergeOptions( mergeStatement.MergeSpecification.ActionClauses.Any(p => p.Condition == MergeCondition.Matched), mergeStatement.MergeSpecification.ActionClauses.Any( p => p.Condition == MergeCondition.NotMatchedByTarget), mergeStatement.MergeSpecification.ActionClauses.Any( p => p.Condition == MergeCondition.NotMatchedBySource) , hasSearchKeys ); Merges.Add(merge); } }
public void Populate() { Merges = new List<MergeDescriptor.Merge>(); var statementParser = new MergeStatementParser(); var parser = new ScriptParser(statementParser, _path); parser.Parse(); foreach (var mergeStatement in statementParser.Merges) { if (!(mergeStatement.MergeSpecification.Target is NamedTableReference)) { Log.WriteInfo("Error Parsing Merge Statement, Target is not a NamedTableReference"); continue; } var name = (mergeStatement.MergeSpecification.Target as NamedTableReference).SchemaObject; var table = _tables.Get().FirstOrDefault(p => p.Name.EqualsName(name)); if (table == null) { Log.WriteInfo( "Error Parsing Merge Statement, Could not find table name ({0}) in the TableRepository", name.BaseIdentifier.Value); continue; } if (!(mergeStatement.MergeSpecification.TableReference is InlineDerivedTable)) { Log.WriteInfo("Error Parsing Merge Statement, Could not find InlineDerivedTable"); continue; } var merge = new MergeDescriptor.Merge(); merge.CustommMerger = mergeStatement; merge.Name = name.ToIdentifier(); merge.Data = GetDataFromMerge(mergeStatement, table); if (null == merge.Data) { continue; //can't do anything with this } merge.Data.AcceptChanges(); merge.ScriptDescriptor = new InScriptDescriptor(mergeStatement.StartOffset, mergeStatement.FragmentLength, _path); merge.Statement = mergeStatement; merge.Table = table; bool hasSearchKeys = false; var searchCondition = mergeStatement.MergeSpecification.SearchCondition as BooleanComparisonExpression; if (null != searchCondition) { var col = searchCondition.FirstExpression as ColumnReferenceExpression; if (col != null) { var searchColName = col.MultiPartIdentifier.Identifiers.Last(); if (searchColName.Value == "???") { hasSearchKeys = false; } else { hasSearchKeys = true; } } } merge.Option = new MergeOptions( mergeStatement.MergeSpecification.ActionClauses.Any(p => p.Condition == MergeCondition.Matched), mergeStatement.MergeSpecification.ActionClauses.Any( p => p.Condition == MergeCondition.NotMatchedByTarget), mergeStatement.MergeSpecification.ActionClauses.Any( p => p.Condition == MergeCondition.NotMatchedBySource) ,hasSearchKeys ); Merges.Add(merge); } }