コード例 #1
0
ファイル: SqlServerCruder.cs プロジェクト: taucode/taucode.db
        protected override IParameterInfo ColumnToParameterInfo(
            string columnName,
            DbTypeMold columnType,
            IReadOnlyDictionary <string, string> parameterNameMappings)
        {
            var result = base.ColumnToParameterInfo(columnName, columnType, parameterNameMappings);

            if (result == null)
            {
                DbType dbType;
                int?   size          = null;
                int?   precision     = null;
                int?   scale         = null;
                var    parameterName = parameterNameMappings[columnName];

                var typeName = columnType.Name.ToLowerInvariant();

                switch (typeName)
                {
                case "money":
                    dbType    = DbType.Currency;
                    precision = MoneyTypePrecision;
                    scale     = MoneyTypeScale;
                    break;

                default:
                    return(null);
                }

                result = new ParameterInfoImpl(parameterName, dbType, size, precision, scale);
            }

            return(result);
        }
コード例 #2
0
ファイル: SQLiteConverter.cs プロジェクト: taucode/taucode.db
        public DbTypeMold ConvertType(DbTypeMold originType, string originProviderName)
        {
            if (originType == null)
            {
                throw new ArgumentNullException(nameof(originType));
            }

            if (originProviderName == null)
            {
                throw new ArgumentNullException(nameof(originProviderName));
            }

            DbTypeMold convertedType;

            switch (originProviderName)
            {
            case DbProviderNames.SqlServer:
                convertedType = this.ConvertTypeFromSqlServer(originType);
                break;

            default:
                throw new NotSupportedException($"Conversion from '{originProviderName}' is not supported.");
            }

            if (convertedType == null)
            {
                throw new DbException($"Failed to convert type '{originType.Name}'.");
            }

            return(convertedType);
        }
コード例 #3
0
ファイル: DialectBase.cs プロジェクト: taucode/taucode.db
        public virtual DbTypeMold ResolveType(string typeName, int?size, int?precision, int?scale)
        {
            if (typeName == null)
            {
                throw new ArgumentNullException(nameof(typeName));
            }

            var dbTypeMold = new DbTypeMold();

            var nameCategory = this.GetTypeNameCategory(typeName);

            dbTypeMold.Name = typeName;

            switch (nameCategory)
            {
            case DbTypeNameCategory.SingleWord:
                // no action
                break;

            case DbTypeNameCategory.Sized:
                dbTypeMold.Size = size;
                break;

            case DbTypeNameCategory.PreciseNumber:
                dbTypeMold.Precision = precision;
                dbTypeMold.Scale     = scale;
                break;

            default:
                throw new ArgumentException($"Could not resolve type '{typeName}'", nameof(typeName));
            }

            return(dbTypeMold);
        }
コード例 #4
0
        protected virtual void WriteTypeDefinitionScriptFragment(StringBuilder sb, DbTypeMold type)
        {
            var decoratedTypeName = this.Dialect.DecorateIdentifier(
                DbIdentifierType.Type, type.Name,
                this.CurrentOpeningIdentifierDelimiter);

            sb.Append(decoratedTypeName);

            if (type.Size.HasValue)
            {
                if (type.Precision.HasValue || type.Scale.HasValue)
                {
                    throw new DbException("If type has Size, it must not have Precision and Scale.");
                }

                string sizeString;

                if (type.Size.Value < 0)
                {
                    sizeString = this.TransformNegativeTypeSize(type.Size.Value);
                }
                else
                {
                    sizeString = type.Size.Value.ToString();
                }

                sb.Append($"({sizeString})");
            }
            else if (type.Precision.HasValue)
            {
                if (type.Size.HasValue)
                {
                    throw new DbException("If type has Precision, it must not have Size.");
                }

                sb.Append($"({type.Precision.Value}");

                if (type.Scale.HasValue)
                {
                    sb.Append($", {type.Scale.Value}");
                }

                sb.Append(")");
            }
        }
コード例 #5
0
ファイル: SQLiteCruder.cs プロジェクト: taucode/taucode.db
        protected override IParameterInfo ColumnToParameterInfo(
            string columnName,
            DbTypeMold columnType,
            IReadOnlyDictionary<string, string> parameterNameMappings)
        {
            DbType dbType;
            int? size = null;
            int? precision = null;
            int? scale = null;
            var parameterName = parameterNameMappings[columnName];

            var typeName = columnType.Name.ToLowerInvariant();

            switch (typeName)
            {
                case "uniqueidentifier":
                    dbType = DbType.AnsiStringFixedLength;
                    size = GuidRepresentationLength;
                    break;

                case "text":
                    dbType = DbType.String;
                    size = -1;
                    break;

                case "integer":
                    dbType = DbType.Int64;
                    break;

                case "blob":
                    dbType = DbType.Binary;
                    size = -1;
                    break;

                default:
                    return base.ColumnToParameterInfo(columnName, columnType, parameterNameMappings);
            }

            IParameterInfo parameterInfo = new ParameterInfoImpl(parameterName, dbType, size, precision, scale);
            return parameterInfo;
        }
コード例 #6
0
ファイル: SQLiteConverter.cs プロジェクト: taucode/taucode.db
        protected virtual DbTypeMold ConvertTypeFromSqlServer(DbTypeMold originType)
        {
            string typeName;
            var    originTypeName = originType.Name.ToLowerInvariant();

            switch (originTypeName)
            {
            case "uniqueidentifier":
                typeName = "UNIQUEIDENTIFIER";
                break;

            case "char":
            case "nchar":
            case "varchar":
            case "nvarchar":
            case "text":
            case "ntext":
                typeName = "TEXT";
                break;

            case "bit":
            case "int":
            case "integer":
            case "tinyint":
            case "smallint":
            case "bigint":
                typeName = "INTEGER";
                break;

            case "binary":
            case "varbinary":
            case "image":
                typeName = "BLOB";
                break;

            case "double":
            case "float":
            case "real":
                typeName = "REAL";
                break;

            case "money":
            case "decimal":
            case "numeric":
                typeName = "NUMERIC";
                break;

            case "datetime":
            case "date":
                typeName = "DATETIME";
                break;

            default:
                return(null);
            }

            var result = new DbTypeMold
            {
                Name = typeName,
            };

            return(result);
        }