/// <summary> /// Matches Character Set against differing data contexts and returns a string containing /// the collation for the target data context or string.Empty if it was not found. /// </summary> /// <param name="sourceDataContext">The source DataContext.</param> /// <param name="targetDataContext">The target Datacontext.</param> /// <param name="userTableColumn">The user-table column to pull Character Set from.</param> /// <returns> /// The target Character Set to use for the given user-table column or string.Empty if one was not found. /// </returns> public static string ConvertCharacterSet(DataContext sourceDataContext, DataContext targetDataContext, UserTableColumn userTableColumn) { // TODO: adjust to use sourceUserTableColumn.CharacterSet once added. if (string.IsNullOrEmpty(userTableColumn.Collation)) { return(string.Empty); } if (sourceDataContext.ContextType == targetDataContext.ContextType) { return(userTableColumn.Collation); } switch (sourceDataContext.ContextType) { case DataContextType.MySql: if (!MySqlCharacterSets.Contains(userTableColumn.Collation)) { return(string.Empty); } switch (targetDataContext.ContextType) { case DataContextType.SqlServer: string collation; return(!MySqlToSqlServerLookup.TryGetValue(userTableColumn.Collation, out collation) ? string.Empty : collation); default: return(string.Empty); } case DataContextType.SqlServer: if (!SqlServerCharacterSets.Contains(userTableColumn.Collation)) { return(string.Empty); } switch (targetDataContext.ContextType) { case DataContextType.MySql: string collation; return(!SqlServerToMySqlLookup.TryGetValue(userTableColumn.Collation, out collation) ? string.Empty : collation); default: return(string.Empty); } default: return(string.Empty); } }
/// <summary> /// Compares the Character Set between source and target user-table columns and even /// matches against differing data contexts. /// </summary> /// <param name="sourceDataContext">The source DataContext.</param> /// <param name="targetDataContext">The target DataContext.</param> /// <param name="sourceUserTableColumn">The source user-table column to get a character set from.</param> /// <param name="targetUserTableColumn">The target user-table column to get a character set from.</param> /// <returns> /// True - The character sets matched between differing datasources. /// False - The character sets could not be matched up. /// </returns> public static bool CompareCharacterSet(DataContext sourceDataContext, DataContext targetDataContext, UserTableColumn sourceUserTableColumn, UserTableColumn targetUserTableColumn) { // TODO: adjust to use sourceUserTableColumn.CharacterSet once added. if (string.IsNullOrEmpty(sourceUserTableColumn.Collation) && string.IsNullOrEmpty(targetUserTableColumn.Collation)) { return(true); } if (string.IsNullOrEmpty(sourceUserTableColumn.Collation)) { return(false); } if (string.IsNullOrEmpty(targetUserTableColumn.Collation)) { return(false); } if (sourceDataContext.ContextType == targetDataContext.ContextType) { if (StringComparer.OrdinalIgnoreCase.Compare( sourceUserTableColumn.Collation, targetUserTableColumn.Collation) != 0) { return(false); } } switch (sourceDataContext.ContextType) { case DataContextType.MySql: if (!MySqlCharacterSets.Contains(sourceUserTableColumn.Collation)) { return(true); } switch (targetDataContext.ContextType) { case DataContextType.SqlServer: string collation; return(!MySqlToSqlServerLookup.TryGetValue(sourceUserTableColumn.Collation, out collation) ? true : StringComparer.OrdinalIgnoreCase.Compare( collation, targetUserTableColumn.Collation) == 0); default: return(true); } case DataContextType.SqlServer: if (!SqlServerCharacterSets.Contains(sourceUserTableColumn.Collation)) { return(true); } switch (targetDataContext.ContextType) { case DataContextType.MySql: string collation; return(!SqlServerToMySqlLookup.TryGetValue(sourceUserTableColumn.Collation, out collation) ? true : StringComparer.OrdinalIgnoreCase.Compare( collation, targetUserTableColumn.Collation) == 0); default: return(true); } default: return(true); } }