public override string ValueToSql(object value)
        {
            if (value == null)
            {
                return(base.ValueToSql(value));
            }

            string name  = Enum.GetName(Nullable.GetUnderlyingType(Type) ?? Type, value);
            int    index = EnumValueNames.IndexOf(name);

            return($"'{EnumSqlNames[index]}'");
        }
        public EnumTypeMapping(Type type) : base(type)
        {
            type = Nullable.GetUnderlyingType(type) ?? type;
            if (!type.IsEnum)
            {
                throw new ArgumentException("Not an enum", nameof(type));
            }

            EnumValueNames = Enum.GetNames(type)
                             .Select(name => name.Trim())
                             .OrderBy(name => name)
                             .ToList();

            EnumSqlNames = EnumValueNames
                           .Select(name => SqlUtils.PascalCaseToSnakeCase(name))
                           .Select(name =>
            {
                string[] nameParts = name.Split("_");
                if (nameParts.Length <= 1)
                {
                    return(nameParts[0].Substring(0, 4));
                }
                else if (nameParts.Length == 2)
                {
                    return($"{nameParts[0].Substring(0, 2)}{nameParts[1].Substring(0, 2)}");
                }
                else if (nameParts.Length == 3)
                {
                    return($"{nameParts[0].Substring(0, 2)}{nameParts[1].Substring(0, 1)}{nameParts[2].Substring(0, 1)}");
                }
                else
                {
                    return($"{nameParts[0][0]}{nameParts[1][0]}{nameParts[2][0]}{nameParts[3][0]}");
                }
            })
                           .ToList();

            for (int i = 0; i < EnumSqlNames.Count; i++)
            {
                int nameLength = EnumSqlNames[i].Length;
                int counter    = 0;
                while (EnumSqlNames.Take(i).Contains(EnumSqlNames[i]))
                {
                    string counterText = counter + "";
                    EnumSqlNames[i] = EnumSqlNames[i].Substring(0, nameLength - counterText.Length) + counterText;
                    counter++;
                }
            }

            SqlType.Comment += EnumSqlNames
                               .Select((sqlName, index) => $"{sqlName}: {EnumValueNames[index]}")
                               .ToDelimitedString("\n");
        }