private void CheckCircleReferences(Table table, TableMappingDefinition mappingDefinition) { if (_tablesToUpdateCircleReferences.ContainsKey(table.Name)) { _tablesToUpdateCircleReferences[table.Name].ForEach(r => { TableMappingDefinition temp = _tableMappingDefinitions.Single(d => d.DestinationTable.Name.Equals(r.OriginTableName)); FieldMappingDefinition fieldMappingDefinition = temp.FieldMappingDefinitions.SingleOrDefault(f => f.DestinationField.Name.Equals(r.OriginFieldName)); if (fieldMappingDefinition != null) { SourceTable sourceTable = temp.SourceTable; Field sourceField = fieldMappingDefinition.SourceField; DestinationTable destinationTable = temp.DestinationTable; Field destinationField = fieldMappingDefinition.DestinationField; FieldMappingInfo info = new FieldMappingInfo { DestinationField = destinationField, DestinationTable = destinationTable, SourceField = sourceField, SourceTable = sourceTable }; mappingDefinition.CircleReferences.Add(info); } }); } }
public string GenerateFormatFile(BcpDirection direction) { List <FieldMappingDefinition> fieldMappingDefs = _definition.FieldMappingDefinitions; string fields = ""; int count = 0; for (int i = 0; i < fieldMappingDefs.Count; i++) { FieldMappingDefinition definition = fieldMappingDefs[i]; if (definition.Type != FieldMappingType.Simple) { continue; } // have a problem with (max) datatype in bcp so we handle it seperately if ((definition.DestinationField.IsMaxDataType) && _definition.HandleMaxTextSeperately) { continue; } string bcpFormat; if (_mode == BcpMode.Native) { bcpFormat = BcpTemplates.BCP_NATIVE_FORMAT_ROW; } else { bcpFormat = i < fieldMappingDefs.Count - 1 ? BcpTemplates.BCP_CHARACTER_FORMAT_ROW : BcpTemplates.BCP_CHARACTER_FORMAT_LAST_ROW; } string dataType = definition.DestinationField.SqlDataType; int prefixLength = definition.DestinationField.PrefixLength; int length = definition.DestinationField.Length; int serverColumnOrder = definition.DestinationField.Order; string serverColumnName = definition.DestinationField.Name; string collation = definition.DestinationField.Collation; fields += bcpFormat.Inject(new { Index = ++count, DataType = dataType, PrefixLength = prefixLength, Length = length, ServerColumnOrder = direction == BcpDirection.Export ? count : serverColumnOrder, ServerColumnName = serverColumnName, Collation = string.IsNullOrEmpty(collation) ? @"""""" : collation }) + Environment.NewLine; } string formatFile = BcpTemplates.BCP_FORMAT_FILE.Inject(new { FieldCount = count, Fields = fields }); return(formatFile); }
private void Generate(FieldMappingDefinition definition, List <string> targetInsertExpressions, List <string> sourceInsertExpressions, List <string> sourceSelectExpressions) { Field sourceField = definition.SourceField; Field destinationField = definition.DestinationField; // SourceSelectFields, SourceInsertFields, SourceConditions if (destinationField.Type.HasFlag(FieldType.ForeignKey)) { sourceSelectExpressions.Add(SqlScriptTemplates.FK_SELECT.Inject(new { FKTable = sourceField.Reference.ReferenceTableName, SourceFKName = sourceField.Name })); string newFieldName = string.Format(SqlScriptTemplates.NEW_FIELD, sourceField.Name); sourceInsertExpressions.Add(newFieldName); } else if (definition.Type == FieldMappingType.BlobToBlobPointer) { sourceSelectExpressions.Add(SqlScriptTemplates.BLOB_SELECT.Inject(new { SourceBlobFieldName = sourceField.Name, SourcePKName = GetSourcePrimaryKey().Name })); sourceInsertExpressions.Add(string.Format(SqlScriptTemplates.NEW_FIELD, sourceField.Name)); } else { string sourceInsertExpression; if (!string.IsNullOrEmpty(definition.ForceValue)) { sourceInsertExpression = string.Format("'{0}'", definition.ForceValue); } else if (sourceField.Name.Contains("created_who")) { sourceInsertExpression = SqlScriptTemplates.FIELD_NULL_DEFAULT_VALUE.Inject(new { FieldName = sourceField.Name, Value = "'Database Migration Tool'" }); } else if (sourceField.Name.Contains("created_when")) { sourceInsertExpression = SqlScriptTemplates.FIELD_NULL_DEFAULT_VALUE.Inject(new { FieldName = sourceField.Name, Value = "GETDATE()" }); } else { sourceInsertExpression = string.Format(SqlScriptTemplates.FIELD, sourceField.Name); } sourceInsertExpressions.Add(sourceInsertExpression); } // TargetInsertFields targetInsertExpressions.Add(string.Format(SqlScriptTemplates.FIELD, destinationField.Name)); }