コード例 #1
0
        public override string ConvertTypeToSQLType(Type type, bool preferUnicode = true, string maxLen = "4000")
        {
            string retval = null;

            TypeSwitch.ForType(type,
                               TypeSwitch.Case <char>(() => retval     = preferUnicode ? "CHAR(1) CHARACTER SET ISO8859_1" : "CHAR(1) CHARACTER SET ASCII"),
                               TypeSwitch.Case <string>(() => retval   = (preferUnicode ? "VARCHAR({0}) CHARACTER SET ISO8859_1" : "VARCHAR({0}) CHARACTER SET ASCII").FormatWith(maxLen)),
                               TypeSwitch.Case <byte>(() => retval     = "SMALLINT"),
                               TypeSwitch.Case <bool>(() => retval     = "CHAR(1)"),
                               TypeSwitch.Case <Guid>(() => retval     = "CHAR(16) CHARACTER SET OCTETS"),
                               TypeSwitch.Case <short>(() => retval    = "SMALLINT"),
                               TypeSwitch.Case <int>(() => retval      = "INTEGER"),
                               TypeSwitch.Case <long>(() => retval     = "BIGINT"),
                               TypeSwitch.Case <decimal>(() => retval  = "DECIMAL(18,4)"),
                               TypeSwitch.Case <float>(() => retval    = "FLOAT"),
                               TypeSwitch.Case <double>(() => retval   = "DOUBLE"),
                               TypeSwitch.Case <DateTime>(() => retval = "TIMESTAMP"),
                               TypeSwitch.Case <Byte[]>(() => retval   = "BLOB")
                               );


            if (retval == null)
            {
                throw new SoftwareException("Unable to convert type '{0}' to sql type.", type);
            }

            return(retval);
        }
コード例 #2
0
        public override string ConvertTypeToSQLType(Type type, bool preferUnicode = true, string maxLen = "MAX")
        {
            string retval = null;

            TypeSwitch.ForType(type,
                               TypeSwitch.Case <char>(() => retval           = preferUnicode ? "NCHAR" : "CHAR"),
                               TypeSwitch.Case <string>(() => retval         = (preferUnicode ? "NVARCHAR({0})" : "VARCHAR({0})").FormatWith(maxLen)),
                               TypeSwitch.Case <byte>(() => retval           = "TINYINT"),
                               TypeSwitch.Case <bool>(() => retval           = "BIT"),
                               TypeSwitch.Case <Guid>(() => retval           = "UNIQUEIDENTIFIER"),
                               TypeSwitch.Case <short>(() => retval          = "SMALLINT"),
                               TypeSwitch.Case <int>(() => retval            = "INT"),
                               TypeSwitch.Case <long>(() => retval           = "BIGINT"),
                               TypeSwitch.Case <decimal>(() => retval        = "MONEY"),
                               TypeSwitch.Case <float>(() => retval          = "REAL"),
                               TypeSwitch.Case <double>(() => retval         = "FLOAT"),
                               TypeSwitch.Case <DateTime>(() => retval       = "DATETIME"),
                               TypeSwitch.Case <DateTimeOffset>(() => retval = "DATETIMEOFFSET"),
                               TypeSwitch.Case <Byte[]>(() => retval         = "VARBINARY(" + (maxLen ?? "MAX") + ")")
                               );


            if (retval == null)
            {
                throw new SoftwareException("Unable to convert type '{0}' to sql type.", type);
            }

            return(retval);
        }
コード例 #3
0
        public virtual string ConvertTypeToSQLType(Type type, bool preferUnicode = true, string maxLen = "4000")
        {
            string retval = null;

            TypeSwitch.ForType(type,
                               TypeSwitch.Case <Char>(() => retval     = preferUnicode ? "NCHAR" : "CHAR"),
                               TypeSwitch.Case <String>(() => retval   = preferUnicode ? "NVARCHAR(MAX)" : "VARCHAR(MAX)"),
                               TypeSwitch.Case <Byte>(() => retval     = "TINYINT"),
                               TypeSwitch.Case <Boolean>(() => retval  = "BIT"),
                               TypeSwitch.Case <Guid>(() => retval     = "UNIQUEIDENTIFIER"),
                               TypeSwitch.Case <Int16>(() => retval    = "SMALLINT"),
                               TypeSwitch.Case <Int32>(() => retval    = "INT"),
                               TypeSwitch.Case <Int64>(() => retval    = "BIGINT"),
                               TypeSwitch.Case <Decimal>(() => retval  = "MONEY"),
                               TypeSwitch.Case <Single>(() => retval   = "REAL"),
                               TypeSwitch.Case <Double>(() => retval   = "FLOAT"),
                               TypeSwitch.Case <DateTime>(() => retval = "DATETIME")
                               );


            if (retval == null)
            {
                throw new SoftwareException("Unable to convert type '{0}' to sql type.", type);
            }

            return(retval);
        }
コード例 #4
0
        protected virtual VariableStorageClass TypeToStorageClass(Type type)
        {
            var storageClass = VariableStorageClass.Integer;

            if (type.IsIntegerNumeric())
            {
                storageClass = VariableStorageClass.Integer;
            }
            else
            {
                TypeSwitch.ForType(
                    type,
                    TypeSwitch.Case <Guid>(() => storageClass     = VariableStorageClass.Uuid),
                    TypeSwitch.Case <string>(() => storageClass   = VariableStorageClass.Text),
                    TypeSwitch.Case <DateTime>(() => storageClass = VariableStorageClass.DateTime),
                    TypeSwitch.Case <byte[]>(() => storageClass   = VariableStorageClass.Blob),
                    TypeSwitch.Default(() => { throw new SoftwareException("Unable to map type to variable storage class '{0}'", type.Name); })
                    );
            }
            return(storageClass);
        }