public ColumnTypeDef ConvertTypeToColumnType(string typeString) { string tStr = typeString.ToLower(); ColumnTypeDef typeDef = new ColumnTypeDef(); switch (tStr) { case "blob": typeDef.Type = ColumnType.Blob; break; case "longblob": typeDef.Type = ColumnType.LongBlob; break; case "date": typeDef.Type = ColumnType.Date; break; case "datetime": typeDef.Type = ColumnType.DateTime; break; case "double": typeDef.Type = ColumnType.Double; break; case "float": typeDef.Type = ColumnType.Float; break; case "text": typeDef.Type = ColumnType.Text; break; case "mediumtext": typeDef.Type = ColumnType.MediumText; break; case "longtext": typeDef.Type = ColumnType.LongText; break; case "uuid": typeDef.Type = ColumnType.UUID; break; case "integer": typeDef.Type = ColumnType.Integer; typeDef.Size = 11; break; default: string regexInt = "^int\\((\\d+)\\)( unsigned)?$"; string regexTinyint = "^tinyint\\((\\d+)\\)( unsigned)?$"; string regexChar = "^char\\((\\d+)\\)$"; string regexString = "^varchar\\((\\d+)\\)$"; Dictionary<string, ColumnType> regexChecks = new Dictionary<string, ColumnType>(4); regexChecks[regexInt] = ColumnType.Integer; regexChecks[regexTinyint] = ColumnType.TinyInt; regexChecks[regexChar] = ColumnType.Char; regexChecks[regexString] = ColumnType.String; Match type = Regex.Match("foo", "^bar$"); foreach (KeyValuePair<string, ColumnType> regexCheck in regexChecks) { type = Regex.Match(tStr, regexCheck.Key); if (type.Success) { typeDef.Type = regexCheck.Value; break; } } if (type.Success) { typeDef.Size = uint.Parse(type.Groups[1].Value); typeDef.unsigned = (typeDef.Type == ColumnType.Integer || typeDef.Type == ColumnType.TinyInt) ? (type.Groups.Count == 3 && type.Groups[2].Value == " unsigned") : false; break; } else { throw new Exception("You've discovered some type that's not reconized by Aurora, please place the correct conversion in ConvertTypeToColumnType. Type: " + tStr); } } return typeDef; }
public abstract string GetColumnTypeStringSymbol(ColumnTypeDef coldef);
public override string GetColumnTypeStringSymbol(ColumnTypeDef coldef) { string symbol; switch (coldef.Type) { case ColumnType.Blob: case ColumnType.LongBlob: symbol = "BLOB"; break; case ColumnType.Boolean: symbol = "TINYINT(1)"; break; case ColumnType.Char: symbol = "CHAR(" + coldef.Size + ")"; break; case ColumnType.Date: symbol = "DATE"; break; case ColumnType.DateTime: symbol = "DATETIME"; break; case ColumnType.Double: symbol = "DOUBLE"; break; case ColumnType.Float: symbol = "FLOAT"; break; case ColumnType.Integer: if (!coldef.auto_increment) { symbol = "INT(" + coldef.Size + ")"; } else { symbol = "INTEGER PRIMARY KEY AUTOINCREMENT"; } break; case ColumnType.TinyInt: symbol = "TINYINT(" + coldef.Size + ")"; break; case ColumnType.String: symbol = "VARCHAR(" + coldef.Size + ")"; break; case ColumnType.Text: case ColumnType.MediumText: case ColumnType.LongText: symbol = "TEXT"; break; case ColumnType.UUID: symbol = "CHAR(36)"; break; default: throw new DataManagerException("Unknown column type."); } return symbol + (coldef.isNull ? " NULL" : " NOT NULL") + ((coldef.isNull && coldef.defaultValue == null) ? " DEFAULT NULL" : (coldef.defaultValue != null ? " DEFAULT '" + coldef.defaultValue.MySqlEscape() + "'" : "")); }
public override bool Equals(object obj) { ColumnTypeDef foo = obj as ColumnTypeDef; return(foo != null && foo.Type.ToString() == Type.ToString() && foo.Size == Size && foo.defaultValue == defaultValue && foo.isNull == isNull && foo.unsigned == unsigned && foo.auto_increment == auto_increment); }
protected ColumnDefinition ColDef(string name, ColumnTypes columnType) { ColumnTypeDef type = new ColumnTypeDef(); switch (columnType) { case ColumnTypes.Blob: type.Type = ColumnType.Blob; break; case ColumnTypes.Char32: type.Type = ColumnType.Char; type.Size = 32; break; case ColumnTypes.Char36: type.Type = ColumnType.Char; type.Size = 36; break; case ColumnTypes.Char5: type.Type = ColumnType.Char; type.Size = 5; break; case ColumnTypes.Date: type.Type = ColumnType.Date; break; case ColumnTypes.DateTime: type.Type = ColumnType.DateTime; break; case ColumnTypes.Double: type.Type = ColumnType.Double; break; case ColumnTypes.Float: type.Type = ColumnType.Float; break; case ColumnTypes.Integer11: type.Type = ColumnType.Integer; type.Size = 11; break; case ColumnTypes.Integer30: type.Type = ColumnType.Integer; type.Size = 30; break; case ColumnTypes.LongBlob: type.Type = ColumnType.LongBlob; break; case ColumnTypes.LongText: type.Type = ColumnType.LongText; break; case ColumnTypes.MediumText: type.Type = ColumnType.MediumText; break; case ColumnTypes.String: type.Type = ColumnType.Text; break; case ColumnTypes.String1: type.Type = ColumnType.String; type.Size = 1; break; case ColumnTypes.String10: type.Type = ColumnType.String; type.Size = 10; break; case ColumnTypes.String100: type.Type = ColumnType.String; type.Size = 100; break; case ColumnTypes.String1024: type.Type = ColumnType.String; type.Size = 1024; break; case ColumnTypes.String128: type.Type = ColumnType.String; type.Size = 128; break; case ColumnTypes.String16: type.Type = ColumnType.String; type.Size = 16; break; case ColumnTypes.String2: type.Type = ColumnType.String; type.Size = 2; break; case ColumnTypes.String255: type.Type = ColumnType.String; type.Size = 255; break; case ColumnTypes.String30: type.Type = ColumnType.String; type.Size = 30; break; case ColumnTypes.String32: type.Type = ColumnType.String; type.Size = 32; break; case ColumnTypes.String36: type.Type = ColumnType.String; type.Size = 36; break; case ColumnTypes.String45: type.Type = ColumnType.String; type.Size = 45; break; case ColumnTypes.String50: type.Type = ColumnType.String; type.Size = 50; break; case ColumnTypes.String512: type.Type = ColumnType.String; type.Size = 512; break; case ColumnTypes.String64: type.Type = ColumnType.String; type.Size = 64; break; case ColumnTypes.String8196: type.Type = ColumnType.String; type.Size = 8196; break; case ColumnTypes.Text: type.Type = ColumnType.Text; break; case ColumnTypes.TinyInt1: type.Type = ColumnType.TinyInt; type.Size = 1; break; case ColumnTypes.TinyInt4: type.Type = ColumnType.TinyInt; type.Size = 4; break; default: type.Type = ColumnType.Unknown; break; } return new ColumnDefinition {Name = name, Type = type}; }