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);
        }
        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 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;
         case ColumnType.Binary:
             symbol = "BINARY(" + coldef.Size + ")";
             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.StartsWith("'") && coldef.defaultValue.EndsWith("'")
                               ? coldef.defaultValue
                               : "'" + coldef.defaultValue + "'")
                        : ""));
 }
 public abstract string GetColumnTypeStringSymbol(ColumnTypeDef coldef);
        public override string GetColumnTypeStringSymbol(ColumnTypeDef coldef)
        {
            string symbol;
            switch (coldef.Type)
            {
                case ColumnType.Blob:
                    symbol = "BLOB";
                    break;
                case ColumnType.LongBlob:
                    symbol = "LONGBLOB";
                    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:
                    symbol = "INT(" + coldef.Size + ")" + (coldef.unsigned ? " unsigned" : "");
                    break;
                case ColumnType.TinyInt:
                    symbol = "TINYINT(" + coldef.Size + ")" + (coldef.unsigned ? " unsigned" : "");
                    break;
                case ColumnType.String:
                    symbol = "VARCHAR(" + coldef.Size + ")";
                    break;
                case ColumnType.Text:
                    symbol = "TEXT";
                    break;
                case ColumnType.MediumText:
                    symbol = "MEDIUMTEXT";
                    break;
                case ColumnType.LongText:
                    symbol = "LONGTEXT";
                    break;
                case ColumnType.UUID:
                    symbol = "CHAR(36)";
                    break;
                case ColumnType.Binary:
                    symbol = "BINARY(" + coldef.Size + ")";
                    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() + "'" : "")) +
                   ((coldef.Type == ColumnType.Integer || coldef.Type == ColumnType.TinyInt) && coldef.auto_increment
                        ? " AUTO_INCREMENT"
                        : "");
        }