/// <summary> /// Parses out the elements of a procedure parameter data type. /// </summary> private string ParseDataType(MySqlSchemaRow row, MySqlTokenizer tokenizer) { StringBuilder dtd = new StringBuilder( StringUtility.ToUpperInvariant(tokenizer.NextToken())); row["DATA_TYPE"] = dtd.ToString(); string type = row["DATA_TYPE"].ToString(); string token = tokenizer.NextToken(); if (token == "(") { token = tokenizer.ReadParenthesis(); dtd.AppendFormat(CultureInfo.InvariantCulture, "{0}", token); if (type != "ENUM" && type != "SET") ParseDataTypeSize(row, token); token = tokenizer.NextToken(); } else dtd.Append(GetDataTypeDefaults(type, row)); while (token != ")" && token != "," && String.Compare(token, "begin", StringComparison.OrdinalIgnoreCase) != 0 && String.Compare(token, "return", StringComparison.OrdinalIgnoreCase) != 0) { if (String.Compare(token, "CHARACTER", StringComparison.OrdinalIgnoreCase) == 0 || String.Compare(token, "BINARY", StringComparison.OrdinalIgnoreCase) == 0) { } // we don't need to do anything with this else if (String.Compare(token, "SET", StringComparison.OrdinalIgnoreCase) == 0 || String.Compare(token, "CHARSET", StringComparison.OrdinalIgnoreCase) == 0) row["CHARACTER_SET_NAME"] = tokenizer.NextToken(); else if (String.Compare(token, "ASCII", StringComparison.OrdinalIgnoreCase) == 0) row["CHARACTER_SET_NAME"] = "latin1"; else if (String.Compare(token, "UNICODE", StringComparison.OrdinalIgnoreCase) == 0) row["CHARACTER_SET_NAME"] = "ucs2"; else if (String.Compare(token, "COLLATE", StringComparison.OrdinalIgnoreCase) == 0) row["COLLATION_NAME"] = tokenizer.NextToken(); else dtd.AppendFormat(CultureInfo.InvariantCulture, " {0}", token); token = tokenizer.NextToken(); } if (dtd.Length > 0) row["DTD_IDENTIFIER"] = dtd.ToString(); // now default the collation if one wasn't given if ( string.IsNullOrEmpty( ( string )row["COLLATION_NAME"] ) && !string.IsNullOrEmpty( ( string )row["CHARACTER_SET_NAME"] )) row["COLLATION_NAME"] = CharSetMap.GetDefaultCollation( row["CHARACTER_SET_NAME"].ToString(), connection); // now set the octet length if (row["CHARACTER_MAXIMUM_LENGTH"] != null) { if (row["CHARACTER_SET_NAME"] == null) row["CHARACTER_SET_NAME"] = ""; row["CHARACTER_OCTET_LENGTH"] = CharSetMap.GetMaxLength(( string )row["CHARACTER_SET_NAME"], connection) * (int)row["CHARACTER_MAXIMUM_LENGTH"]; } return token; }
/// <summary> /// Parses out the elements of a procedure parameter data type. /// </summary> private string ParseDataType(DataRow row, MySqlTokenizer tokenizer) { StringBuilder dtd = new StringBuilder( tokenizer.NextToken().ToUpper(CultureInfo.InvariantCulture)); row["DATA_TYPE"] = dtd.ToString(); string type = row["DATA_TYPE"].ToString(); string token = tokenizer.NextToken(); if (token == "(") { token = tokenizer.ReadParenthesis(); dtd.AppendFormat(CultureInfo.InvariantCulture, "{0}", token); if (type != "ENUM" && type != "SET") { ParseDataTypeSize(row, token); } token = tokenizer.NextToken(); } else { dtd.Append(GetDataTypeDefaults(type, row)); } while (token != ")" && token != "," && String.Compare(token, "begin", true) != 0 && String.Compare(token, "return", true) != 0) { if (String.Compare(token, "CHARACTER", true) == 0 || String.Compare(token, "BINARY", true) == 0) { } // we don't need to do anything with this else if (String.Compare(token, "SET", true) == 0 || String.Compare(token, "CHARSET", true) == 0) { row["CHARACTER_SET_NAME"] = tokenizer.NextToken(); } else if (String.Compare(token, "ASCII", true) == 0) { row["CHARACTER_SET_NAME"] = "latin1"; } else if (String.Compare(token, "UNICODE", true) == 0) { row["CHARACTER_SET_NAME"] = "ucs2"; } else if (String.Compare(token, "COLLATE", true) == 0) { row["COLLATION_NAME"] = tokenizer.NextToken(); } else { dtd.AppendFormat(CultureInfo.InvariantCulture, " {0}", token); } token = tokenizer.NextToken(); } if (dtd.Length > 0) { row["DTD_IDENTIFIER"] = dtd.ToString(); } // now default the collation if one wasn't given if (row["COLLATION_NAME"].ToString().Length == 0 && row["CHARACTER_SET_NAME"].ToString().Length > 0) { row["COLLATION_NAME"] = CharSetMap.GetDefaultCollation( row["CHARACTER_SET_NAME"].ToString(), connection); } // now set the octet length if (row["CHARACTER_MAXIMUM_LENGTH"] != DBNull.Value) { row["CHARACTER_OCTET_LENGTH"] = CharSetMap.GetMaxLength(row["CHARACTER_SET_NAME"].ToString(), connection) * (int)row["CHARACTER_MAXIMUM_LENGTH"]; } return(token); }
private string ParseDataType(MySqlSchemaRow row, MySqlTokenizer tokenizer) { StringBuilder stringBuilder = new StringBuilder(StringUtility.ToUpperInvariant(tokenizer.NextToken())); row["DATA_TYPE"] = stringBuilder.ToString(); string text = row["DATA_TYPE"].ToString(); string text2 = tokenizer.NextToken(); if (text2 == "(") { text2 = tokenizer.ReadParenthesis(); stringBuilder.AppendFormat(CultureInfo.InvariantCulture, "{0}", new object[] { text2 }); if (text != "ENUM" && text != "SET") { ISSchemaProvider.ParseDataTypeSize(row, text2); } text2 = tokenizer.NextToken(); } else { stringBuilder.Append(ISSchemaProvider.GetDataTypeDefaults(text, row)); } while (text2 != ")" && text2 != "," && string.Compare(text2, "begin", StringComparison.OrdinalIgnoreCase) != 0 && string.Compare(text2, "return", StringComparison.OrdinalIgnoreCase) != 0) { if (string.Compare(text2, "CHARACTER", StringComparison.OrdinalIgnoreCase) != 0 && string.Compare(text2, "BINARY", StringComparison.OrdinalIgnoreCase) != 0) { if (string.Compare(text2, "SET", StringComparison.OrdinalIgnoreCase) == 0 || string.Compare(text2, "CHARSET", StringComparison.OrdinalIgnoreCase) == 0) { row["CHARACTER_SET_NAME"] = tokenizer.NextToken(); } else if (string.Compare(text2, "ASCII", StringComparison.OrdinalIgnoreCase) == 0) { row["CHARACTER_SET_NAME"] = "latin1"; } else if (string.Compare(text2, "UNICODE", StringComparison.OrdinalIgnoreCase) == 0) { row["CHARACTER_SET_NAME"] = "ucs2"; } else if (string.Compare(text2, "COLLATE", StringComparison.OrdinalIgnoreCase) == 0) { row["COLLATION_NAME"] = tokenizer.NextToken(); } else { stringBuilder.AppendFormat(CultureInfo.InvariantCulture, " {0}", new object[] { text2 }); } } text2 = tokenizer.NextToken(); } if (stringBuilder.Length > 0) { row["DTD_IDENTIFIER"] = stringBuilder.ToString(); } if (string.IsNullOrEmpty((string)row["COLLATION_NAME"]) && !string.IsNullOrEmpty((string)row["CHARACTER_SET_NAME"])) { row["COLLATION_NAME"] = CharSetMap.GetDefaultCollation(row["CHARACTER_SET_NAME"].ToString(), this.connection); } if (row["CHARACTER_MAXIMUM_LENGTH"] != null) { if (row["CHARACTER_SET_NAME"] == null) { row["CHARACTER_SET_NAME"] = ""; } row["CHARACTER_OCTET_LENGTH"] = CharSetMap.GetMaxLength((string)row["CHARACTER_SET_NAME"], this.connection) * (int)row["CHARACTER_MAXIMUM_LENGTH"]; } return(text2); }