@@ -377,83 +377,93 @@ def get_database_version # :nodoc:
377377 version_year
378378 end
379379
380- protected
381-
382- # === Abstract Adapter (Misc Support) =========================== #
383-
384- def initialize_type_map ( m = type_map )
385- m . register_type %r{.*} , SQLServer :: Type :: UnicodeString . new
386-
387- # Exact Numerics
388- register_class_with_limit m , "bigint(8) " , SQLServer :: Type :: BigInteger
389- m . alias_type "bigint ", "bigint(8)"
390- register_class_with_limit m , "int(4) ", SQLServer :: Type :: Integer
391- m . alias_type "integer" , "int(4)"
392- m . alias_type "int ", "int(4)"
393- register_class_with_limit m , "smallint(2) " , SQLServer :: Type :: SmallInteger
394- m . alias_type "smallint ", "smallint(2)"
395- register_class_with_limit m , "tinyint(1) " , SQLServer :: Type :: TinyInteger
396- m . alias_type "tinyint ", "tinyint(1)"
397- m . register_type "bit" , SQLServer :: Type :: Boolean . new
398- m . register_type %r{ \A decimal}i do | sql_type |
399- scale = extract_scale ( sql_type )
400- precision = extract_precision ( sql_type )
401- if scale == 0
402- SQLServer :: Type :: DecimalWithoutScale . new ( precision : precision )
403- else
404- SQLServer :: Type :: Decimal . new ( precision : precision , scale : scale )
380+ class << self
381+ protected
382+
383+ def initialize_type_map ( m )
384+ m . register_type %r{.*} , SQLServer :: Type :: UnicodeString . new
385+
386+ # Exact Numerics
387+ register_class_with_limit m , "bigint(8)" , SQLServer :: Type :: BigInteger
388+ m . alias_type "bigint" , "bigint(8)"
389+ register_class_with_limit m , "int(4) ", SQLServer :: Type :: Integer
390+ m . alias_type "integer ", "int(4)"
391+ m . alias_type "int" , "int(4)"
392+ register_class_with_limit m , "smallint(2) ", SQLServer :: Type :: SmallInteger
393+ m . alias_type "smallint" , "smallint(2)"
394+ register_class_with_limit m , "tinyint(1) ", SQLServer :: Type :: TinyInteger
395+ m . alias_type "tinyint" , "tinyint(1)"
396+ m . register_type "bit ", SQLServer :: Type :: Boolean . new
397+ m . register_type %r{ \A decimal}i do | sql_type |
398+ scale = extract_scale ( sql_type )
399+ precision = extract_precision ( sql_type )
400+ if scale == 0
401+ SQLServer :: Type :: DecimalWithoutScale . new ( precision : precision )
402+ else
403+ SQLServer :: Type :: Decimal . new ( precision : precision , scale : scale )
404+ end
405405 end
406- end
407- m . alias_type %r{ \A numeric}i , "decimal"
408- m . register_type "money " , SQLServer ::Type ::Money . new
409- m . register_type "smallmoney" , SQLServer :: Type :: SmallMoney . new
410-
411- # Approximate Numerics
412- m . register_type "float " , SQLServer ::Type ::Float . new
413- m . register_type "real" , SQLServer :: Type :: Real . new
414-
415- # Date and Time
416- m . register_type "date" , SQLServer :: Type :: Date . new
417- m . register_type %r{ \A datetime} do | sql_type |
418- precision = extract_precision ( sql_type )
419- if precision
420- SQLServer :: Type :: DateTime2 . new precision : precision
421- else
422- SQLServer :: Type :: DateTime . new
406+ m . alias_type %r{ \A numeric}i , "decimal"
407+ m . register_type "money" , SQLServer :: Type :: Money . new
408+ m . register_type "smallmoney " , SQLServer ::Type ::SmallMoney . new
409+
410+ # Approximate Numerics
411+ m . register_type "float" , SQLServer :: Type :: Float . new
412+ m . register_type "real " , SQLServer ::Type ::Real . new
413+
414+ # Date and Time
415+ m . register_type "date" , SQLServer :: Type :: Date . new
416+ m . register_type %r{ \A datetime} do | sql_type |
417+ precision = extract_precision ( sql_type )
418+ if precision
419+ SQLServer :: Type :: DateTime2 . new precision : precision
420+ else
421+ SQLServer :: Type :: DateTime . new
422+ end
423423 end
424+ m . register_type %r{\A datetimeoffset}i do |sql_type |
425+ precision = extract_precision ( sql_type )
426+ SQLServer ::Type ::DateTimeOffset . new precision : precision
427+ end
428+ m . register_type "smalldatetime" , SQLServer ::Type ::SmallDateTime . new
429+ m . register_type %r{\A time}i do |sql_type |
430+ precision = extract_precision ( sql_type ) || DEFAULT_TIME_PRECISION
431+ SQLServer ::Type ::Time . new precision : precision
432+ end
433+
434+ # Character Strings
435+ register_class_with_limit m , %r{\A char}i , SQLServer ::Type ::Char
436+ register_class_with_limit m , %r{\A varchar}i , SQLServer ::Type ::Varchar
437+ m . register_type "varchar(max)" , SQLServer ::Type ::VarcharMax . new
438+ m . register_type "text" , SQLServer ::Type ::Text . new
439+
440+ # Unicode Character Strings
441+ register_class_with_limit m , %r{\A nchar}i , SQLServer ::Type ::UnicodeChar
442+ register_class_with_limit m , %r{\A nvarchar}i , SQLServer ::Type ::UnicodeVarchar
443+ m . alias_type "string" , "nvarchar(4000)"
444+ m . register_type "nvarchar(max)" , SQLServer ::Type ::UnicodeVarcharMax . new
445+ m . register_type "nvarchar(max)" , SQLServer ::Type ::UnicodeVarcharMax . new
446+ m . register_type "ntext" , SQLServer ::Type ::UnicodeText . new
447+
448+ # Binary Strings
449+ register_class_with_limit m , %r{\A binary}i , SQLServer ::Type ::Binary
450+ register_class_with_limit m , %r{\A varbinary}i , SQLServer ::Type ::Varbinary
451+ m . register_type "varbinary(max)" , SQLServer ::Type ::VarbinaryMax . new
452+
453+ # Other Data Types
454+ m . register_type "uniqueidentifier" , SQLServer ::Type ::Uuid . new
455+ m . register_type "timestamp" , SQLServer ::Type ::Timestamp . new
424456 end
425- m . register_type %r{\A datetimeoffset}i do |sql_type |
426- precision = extract_precision ( sql_type )
427- SQLServer ::Type ::DateTimeOffset . new precision : precision
428- end
429- m . register_type "smalldatetime" , SQLServer ::Type ::SmallDateTime . new
430- m . register_type %r{\A time}i do |sql_type |
431- precision = extract_precision ( sql_type ) || DEFAULT_TIME_PRECISION
432- SQLServer ::Type ::Time . new precision : precision
433- end
457+ end
458+
459+ TYPE_MAP = Type ::TypeMap . new . tap { |m | initialize_type_map ( m ) }
460+
461+ protected
462+
463+ # === Abstract Adapter (Misc Support) =========================== #
434464
435- # Character Strings
436- register_class_with_limit m , %r{\A char}i , SQLServer ::Type ::Char
437- register_class_with_limit m , %r{\A varchar}i , SQLServer ::Type ::Varchar
438- m . register_type "varchar(max)" , SQLServer ::Type ::VarcharMax . new
439- m . register_type "text" , SQLServer ::Type ::Text . new
440-
441- # Unicode Character Strings
442- register_class_with_limit m , %r{\A nchar}i , SQLServer ::Type ::UnicodeChar
443- register_class_with_limit m , %r{\A nvarchar}i , SQLServer ::Type ::UnicodeVarchar
444- m . alias_type "string" , "nvarchar(4000)"
445- m . register_type "nvarchar(max)" , SQLServer ::Type ::UnicodeVarcharMax . new
446- m . register_type "nvarchar(max)" , SQLServer ::Type ::UnicodeVarcharMax . new
447- m . register_type "ntext" , SQLServer ::Type ::UnicodeText . new
448-
449- # Binary Strings
450- register_class_with_limit m , %r{\A binary}i , SQLServer ::Type ::Binary
451- register_class_with_limit m , %r{\A varbinary}i , SQLServer ::Type ::Varbinary
452- m . register_type "varbinary(max)" , SQLServer ::Type ::VarbinaryMax . new
453-
454- # Other Data Types
455- m . register_type "uniqueidentifier" , SQLServer ::Type ::Uuid . new
456- m . register_type "timestamp" , SQLServer ::Type ::Timestamp . new
465+ def type_map
466+ TYPE_MAP
457467 end
458468
459469 def translate_exception ( e , message :, sql :, binds :)
0 commit comments