activerecord-jdbc-alt-adapter 50.3.0-java

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (198) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +35 -0
  3. data/.travis.yml +100 -0
  4. data/.yardopts +4 -0
  5. data/CONTRIBUTING.md +50 -0
  6. data/Gemfile +92 -0
  7. data/History.md +1191 -0
  8. data/LICENSE.txt +26 -0
  9. data/README.md +240 -0
  10. data/RUNNING_TESTS.md +127 -0
  11. data/Rakefile +336 -0
  12. data/Rakefile.jdbc +20 -0
  13. data/activerecord-jdbc-adapter.gemspec +55 -0
  14. data/activerecord-jdbc-alt-adapter.gemspec +56 -0
  15. data/lib/active_record/connection_adapters/as400_adapter.rb +2 -0
  16. data/lib/active_record/connection_adapters/db2_adapter.rb +1 -0
  17. data/lib/active_record/connection_adapters/derby_adapter.rb +1 -0
  18. data/lib/active_record/connection_adapters/firebird_adapter.rb +1 -0
  19. data/lib/active_record/connection_adapters/h2_adapter.rb +1 -0
  20. data/lib/active_record/connection_adapters/hsqldb_adapter.rb +1 -0
  21. data/lib/active_record/connection_adapters/informix_adapter.rb +1 -0
  22. data/lib/active_record/connection_adapters/jdbc_adapter.rb +1 -0
  23. data/lib/active_record/connection_adapters/jndi_adapter.rb +1 -0
  24. data/lib/active_record/connection_adapters/mariadb_adapter.rb +1 -0
  25. data/lib/active_record/connection_adapters/mssql_adapter.rb +1 -0
  26. data/lib/active_record/connection_adapters/mysql2_adapter.rb +1 -0
  27. data/lib/active_record/connection_adapters/mysql_adapter.rb +1 -0
  28. data/lib/active_record/connection_adapters/postgresql_adapter.rb +1 -0
  29. data/lib/active_record/connection_adapters/sqlite3_adapter.rb +1 -0
  30. data/lib/active_record/connection_adapters/sqlserver_adapter.rb +1 -0
  31. data/lib/activerecord-jdbc-adapter.rb +1 -0
  32. data/lib/arel/visitors/compat.rb +60 -0
  33. data/lib/arel/visitors/db2.rb +137 -0
  34. data/lib/arel/visitors/derby.rb +112 -0
  35. data/lib/arel/visitors/firebird.rb +79 -0
  36. data/lib/arel/visitors/h2.rb +25 -0
  37. data/lib/arel/visitors/hsqldb.rb +32 -0
  38. data/lib/arel/visitors/postgresql_jdbc.rb +6 -0
  39. data/lib/arel/visitors/sql_server.rb +225 -0
  40. data/lib/arel/visitors/sql_server/ng42.rb +294 -0
  41. data/lib/arel/visitors/sqlserver.rb +214 -0
  42. data/lib/arjdbc.rb +19 -0
  43. data/lib/arjdbc/abstract/connection_management.rb +35 -0
  44. data/lib/arjdbc/abstract/core.rb +74 -0
  45. data/lib/arjdbc/abstract/database_statements.rb +64 -0
  46. data/lib/arjdbc/abstract/statement_cache.rb +58 -0
  47. data/lib/arjdbc/abstract/transaction_support.rb +86 -0
  48. data/lib/arjdbc/db2.rb +4 -0
  49. data/lib/arjdbc/db2/adapter.rb +789 -0
  50. data/lib/arjdbc/db2/as400.rb +130 -0
  51. data/lib/arjdbc/db2/column.rb +167 -0
  52. data/lib/arjdbc/db2/connection_methods.rb +44 -0
  53. data/lib/arjdbc/derby.rb +3 -0
  54. data/lib/arjdbc/derby/active_record_patch.rb +13 -0
  55. data/lib/arjdbc/derby/adapter.rb +540 -0
  56. data/lib/arjdbc/derby/connection_methods.rb +20 -0
  57. data/lib/arjdbc/derby/schema_creation.rb +15 -0
  58. data/lib/arjdbc/discover.rb +104 -0
  59. data/lib/arjdbc/firebird.rb +4 -0
  60. data/lib/arjdbc/firebird/adapter.rb +434 -0
  61. data/lib/arjdbc/firebird/connection_methods.rb +23 -0
  62. data/lib/arjdbc/h2.rb +3 -0
  63. data/lib/arjdbc/h2/adapter.rb +303 -0
  64. data/lib/arjdbc/h2/connection_methods.rb +27 -0
  65. data/lib/arjdbc/hsqldb.rb +3 -0
  66. data/lib/arjdbc/hsqldb/adapter.rb +297 -0
  67. data/lib/arjdbc/hsqldb/connection_methods.rb +28 -0
  68. data/lib/arjdbc/hsqldb/explain_support.rb +35 -0
  69. data/lib/arjdbc/hsqldb/schema_creation.rb +11 -0
  70. data/lib/arjdbc/informix.rb +5 -0
  71. data/lib/arjdbc/informix/adapter.rb +162 -0
  72. data/lib/arjdbc/informix/connection_methods.rb +9 -0
  73. data/lib/arjdbc/jdbc.rb +59 -0
  74. data/lib/arjdbc/jdbc/adapter.rb +475 -0
  75. data/lib/arjdbc/jdbc/adapter_require.rb +46 -0
  76. data/lib/arjdbc/jdbc/base_ext.rb +15 -0
  77. data/lib/arjdbc/jdbc/callbacks.rb +53 -0
  78. data/lib/arjdbc/jdbc/column.rb +97 -0
  79. data/lib/arjdbc/jdbc/connection.rb +14 -0
  80. data/lib/arjdbc/jdbc/connection_methods.rb +37 -0
  81. data/lib/arjdbc/jdbc/error.rb +65 -0
  82. data/lib/arjdbc/jdbc/extension.rb +59 -0
  83. data/lib/arjdbc/jdbc/java.rb +13 -0
  84. data/lib/arjdbc/jdbc/railtie.rb +2 -0
  85. data/lib/arjdbc/jdbc/rake_tasks.rb +3 -0
  86. data/lib/arjdbc/jdbc/serialized_attributes_helper.rb +3 -0
  87. data/lib/arjdbc/jdbc/type_cast.rb +166 -0
  88. data/lib/arjdbc/jdbc/type_converter.rb +142 -0
  89. data/lib/arjdbc/mssql.rb +7 -0
  90. data/lib/arjdbc/mssql/adapter.rb +384 -0
  91. data/lib/arjdbc/mssql/column.rb +29 -0
  92. data/lib/arjdbc/mssql/connection_methods.rb +79 -0
  93. data/lib/arjdbc/mssql/database_statements.rb +134 -0
  94. data/lib/arjdbc/mssql/errors.rb +6 -0
  95. data/lib/arjdbc/mssql/explain_support.rb +129 -0
  96. data/lib/arjdbc/mssql/extensions.rb +36 -0
  97. data/lib/arjdbc/mssql/limit_helpers.rb +231 -0
  98. data/lib/arjdbc/mssql/lock_methods.rb +77 -0
  99. data/lib/arjdbc/mssql/old_adapter.rb +804 -0
  100. data/lib/arjdbc/mssql/old_column.rb +200 -0
  101. data/lib/arjdbc/mssql/quoting.rb +101 -0
  102. data/lib/arjdbc/mssql/schema_creation.rb +31 -0
  103. data/lib/arjdbc/mssql/schema_definitions.rb +74 -0
  104. data/lib/arjdbc/mssql/schema_statements.rb +329 -0
  105. data/lib/arjdbc/mssql/transaction.rb +69 -0
  106. data/lib/arjdbc/mssql/types.rb +52 -0
  107. data/lib/arjdbc/mssql/types/binary_types.rb +33 -0
  108. data/lib/arjdbc/mssql/types/date_and_time_types.rb +134 -0
  109. data/lib/arjdbc/mssql/types/deprecated_types.rb +40 -0
  110. data/lib/arjdbc/mssql/types/numeric_types.rb +71 -0
  111. data/lib/arjdbc/mssql/types/string_types.rb +56 -0
  112. data/lib/arjdbc/mssql/utils.rb +66 -0
  113. data/lib/arjdbc/mysql.rb +3 -0
  114. data/lib/arjdbc/mysql/adapter.rb +140 -0
  115. data/lib/arjdbc/mysql/connection_methods.rb +166 -0
  116. data/lib/arjdbc/oracle/adapter.rb +863 -0
  117. data/lib/arjdbc/postgresql.rb +3 -0
  118. data/lib/arjdbc/postgresql/adapter.rb +687 -0
  119. data/lib/arjdbc/postgresql/base/array_decoder.rb +26 -0
  120. data/lib/arjdbc/postgresql/base/array_encoder.rb +25 -0
  121. data/lib/arjdbc/postgresql/base/array_parser.rb +95 -0
  122. data/lib/arjdbc/postgresql/base/pgconn.rb +11 -0
  123. data/lib/arjdbc/postgresql/column.rb +51 -0
  124. data/lib/arjdbc/postgresql/connection_methods.rb +67 -0
  125. data/lib/arjdbc/postgresql/name.rb +24 -0
  126. data/lib/arjdbc/postgresql/oid_types.rb +266 -0
  127. data/lib/arjdbc/railtie.rb +11 -0
  128. data/lib/arjdbc/sqlite3.rb +3 -0
  129. data/lib/arjdbc/sqlite3/adapter.rb +678 -0
  130. data/lib/arjdbc/sqlite3/connection_methods.rb +59 -0
  131. data/lib/arjdbc/sybase.rb +2 -0
  132. data/lib/arjdbc/sybase/adapter.rb +47 -0
  133. data/lib/arjdbc/tasks.rb +13 -0
  134. data/lib/arjdbc/tasks/database_tasks.rb +31 -0
  135. data/lib/arjdbc/tasks/databases.rake +48 -0
  136. data/lib/arjdbc/tasks/db2_database_tasks.rb +104 -0
  137. data/lib/arjdbc/tasks/derby_database_tasks.rb +95 -0
  138. data/lib/arjdbc/tasks/h2_database_tasks.rb +31 -0
  139. data/lib/arjdbc/tasks/hsqldb_database_tasks.rb +70 -0
  140. data/lib/arjdbc/tasks/jdbc_database_tasks.rb +169 -0
  141. data/lib/arjdbc/tasks/mssql_database_tasks.rb +46 -0
  142. data/lib/arjdbc/util/quoted_cache.rb +60 -0
  143. data/lib/arjdbc/util/serialized_attributes.rb +98 -0
  144. data/lib/arjdbc/util/table_copier.rb +110 -0
  145. data/lib/arjdbc/version.rb +3 -0
  146. data/lib/generators/jdbc/USAGE +9 -0
  147. data/lib/generators/jdbc/jdbc_generator.rb +17 -0
  148. data/lib/jdbc_adapter.rb +2 -0
  149. data/lib/jdbc_adapter/rake_tasks.rb +4 -0
  150. data/lib/jdbc_adapter/version.rb +4 -0
  151. data/pom.xml +114 -0
  152. data/rails_generators/jdbc_generator.rb +15 -0
  153. data/rails_generators/templates/config/initializers/jdbc.rb +10 -0
  154. data/rails_generators/templates/lib/tasks/jdbc.rake +11 -0
  155. data/rakelib/01-tomcat.rake +51 -0
  156. data/rakelib/02-test.rake +132 -0
  157. data/rakelib/bundler_ext.rb +11 -0
  158. data/rakelib/db.rake +75 -0
  159. data/rakelib/rails.rake +223 -0
  160. data/src/java/arjdbc/ArJdbcModule.java +276 -0
  161. data/src/java/arjdbc/db2/DB2Module.java +76 -0
  162. data/src/java/arjdbc/db2/DB2RubyJdbcConnection.java +126 -0
  163. data/src/java/arjdbc/derby/DerbyModule.java +178 -0
  164. data/src/java/arjdbc/derby/DerbyRubyJdbcConnection.java +152 -0
  165. data/src/java/arjdbc/firebird/FirebirdRubyJdbcConnection.java +174 -0
  166. data/src/java/arjdbc/h2/H2Module.java +50 -0
  167. data/src/java/arjdbc/h2/H2RubyJdbcConnection.java +85 -0
  168. data/src/java/arjdbc/hsqldb/HSQLDBModule.java +73 -0
  169. data/src/java/arjdbc/informix/InformixRubyJdbcConnection.java +75 -0
  170. data/src/java/arjdbc/jdbc/AdapterJavaService.java +43 -0
  171. data/src/java/arjdbc/jdbc/Callable.java +44 -0
  172. data/src/java/arjdbc/jdbc/ConnectionFactory.java +45 -0
  173. data/src/java/arjdbc/jdbc/DataSourceConnectionFactory.java +156 -0
  174. data/src/java/arjdbc/jdbc/DriverConnectionFactory.java +63 -0
  175. data/src/java/arjdbc/jdbc/DriverWrapper.java +119 -0
  176. data/src/java/arjdbc/jdbc/JdbcResult.java +130 -0
  177. data/src/java/arjdbc/jdbc/RubyConnectionFactory.java +61 -0
  178. data/src/java/arjdbc/jdbc/RubyJdbcConnection.java +3979 -0
  179. data/src/java/arjdbc/mssql/MSSQLModule.java +90 -0
  180. data/src/java/arjdbc/mssql/MSSQLRubyJdbcConnection.java +508 -0
  181. data/src/java/arjdbc/mysql/MySQLModule.java +152 -0
  182. data/src/java/arjdbc/mysql/MySQLRubyJdbcConnection.java +294 -0
  183. data/src/java/arjdbc/oracle/OracleModule.java +80 -0
  184. data/src/java/arjdbc/oracle/OracleRubyJdbcConnection.java +455 -0
  185. data/src/java/arjdbc/postgresql/ByteaUtils.java +157 -0
  186. data/src/java/arjdbc/postgresql/PgDateTimeUtils.java +52 -0
  187. data/src/java/arjdbc/postgresql/PostgreSQLModule.java +77 -0
  188. data/src/java/arjdbc/postgresql/PostgreSQLResult.java +192 -0
  189. data/src/java/arjdbc/postgresql/PostgreSQLRubyJdbcConnection.java +948 -0
  190. data/src/java/arjdbc/sqlite3/SQLite3Module.java +73 -0
  191. data/src/java/arjdbc/sqlite3/SQLite3RubyJdbcConnection.java +525 -0
  192. data/src/java/arjdbc/util/CallResultSet.java +826 -0
  193. data/src/java/arjdbc/util/DateTimeUtils.java +699 -0
  194. data/src/java/arjdbc/util/ObjectSupport.java +65 -0
  195. data/src/java/arjdbc/util/QuotingUtils.java +137 -0
  196. data/src/java/arjdbc/util/StringCache.java +63 -0
  197. data/src/java/arjdbc/util/StringHelper.java +145 -0
  198. metadata +269 -0
@@ -0,0 +1,69 @@
1
+ require 'active_record/connection_adapters/abstract/transaction'
2
+
3
+ # MSSQL doe not restore the initial transaction isolation when the transaction
4
+ # isolation ends as opposed to PostgreSQL, This extension is to fix that.
5
+ module ActiveRecord
6
+ module ConnectionAdapters
7
+ module MSSQL
8
+ module TransactionExt
9
+ private
10
+
11
+ # This is required when the app has two database connections to
12
+ # different database vendors, e.g. one MSSQL and the other PostgreSQL
13
+ # so we don't mess up postgres transactions
14
+ def mssql?
15
+ connection.respond_to?(:mssql?) && connection.mssql?
16
+ end
17
+
18
+ def current_transaction_isolation
19
+ return unless mssql?
20
+
21
+ connection.transaction_isolation
22
+ end
23
+ end
24
+
25
+ module RealTransactionExt
26
+ attr_reader :initial_transaction_isolation
27
+
28
+ def initialize(connection, options, run_commit_callbacks: false)
29
+ @connection = connection
30
+
31
+ if options[:isolation]
32
+ @initial_transaction_isolation = current_transaction_isolation
33
+ end
34
+
35
+ super
36
+ end
37
+
38
+ def commit
39
+ super
40
+ restore_initial_isolation_level
41
+ end
42
+
43
+ def rollback
44
+ super
45
+ restore_initial_isolation_level
46
+ end
47
+
48
+ private
49
+
50
+ def restore_initial_isolation_level
51
+ return unless mssql?
52
+
53
+ return unless initial_transaction_isolation
54
+
55
+ connection.transaction_isolation = initial_transaction_isolation
56
+ end
57
+ end
58
+ end
59
+
60
+ class Transaction
61
+ include MSSQL::TransactionExt
62
+ end
63
+
64
+ class RealTransaction
65
+ include MSSQL::RealTransactionExt
66
+ end
67
+
68
+ end
69
+ end
@@ -0,0 +1,52 @@
1
+ require 'arjdbc/mssql/types/numeric_types'
2
+ require 'arjdbc/mssql/types/string_types'
3
+ require 'arjdbc/mssql/types/binary_types'
4
+ require 'arjdbc/mssql/types/date_and_time_types'
5
+ require 'arjdbc/mssql/types/deprecated_types'
6
+
7
+ # MSSQL type definitions
8
+ module ActiveRecord
9
+ module ConnectionAdapters
10
+ module MSSQL
11
+ module Type
12
+
13
+ class Boolean < ActiveRecord::Type::Boolean
14
+ end
15
+
16
+ class UUID < ActiveRecord::Type::String
17
+ ACCEPTABLE_UUID = %r{\A\{?([a-fA-F0-9]{4}-?){8}\}?\z}x
18
+
19
+ def type
20
+ :uuid
21
+ end
22
+
23
+ def type_cast(value)
24
+ value.to_s[ACCEPTABLE_UUID, 0]
25
+ end
26
+ end
27
+
28
+ class XML < ActiveRecord::Type::String
29
+ def type
30
+ :xml
31
+ end
32
+
33
+ def type_cast_for_database(value)
34
+ return unless value
35
+ Data.new(super)
36
+ end
37
+
38
+ class Data
39
+ def initialize(value)
40
+ @value = value
41
+ end
42
+
43
+ def to_s
44
+ @value
45
+ end
46
+ end
47
+ end
48
+
49
+ end
50
+ end
51
+ end
52
+ end
@@ -0,0 +1,33 @@
1
+ # MSSQL binary types definitions
2
+ module ActiveRecord
3
+ module ConnectionAdapters
4
+ module MSSQL
5
+ module Type
6
+
7
+ class BinaryBasic < ActiveRecord::Type::Binary
8
+ def type
9
+ :binary_basic
10
+ end
11
+ end
12
+
13
+ class Varbinary < ActiveRecord::Type::Binary
14
+ def type
15
+ :varbinary
16
+ end
17
+ end
18
+
19
+ # This is the Rails binary type
20
+ class VarbinaryMax < ActiveRecord::Type::Binary
21
+ def type
22
+ :binary
23
+ end
24
+
25
+ def limit
26
+ @limit ||= 2_147_483_647
27
+ end
28
+ end
29
+
30
+ end
31
+ end
32
+ end
33
+ end
@@ -0,0 +1,134 @@
1
+ # MSSQL date and time types definitions
2
+ module ActiveRecord
3
+ module ConnectionAdapters
4
+ module MSSQL
5
+ module Type
6
+ class Date < ActiveRecord::Type::Date
7
+ end
8
+
9
+ class DateTime2 < ActiveRecord::Type::DateTime
10
+ def type_cast_for_schema(value)
11
+ return "'#{value}'" if value.acts_like?(:string)
12
+
13
+ if value.usec > 0
14
+ "'#{value.to_s(:db)}.#{value.usec.to_s.remove(/0+$/)}'"
15
+ else
16
+ "'#{value.to_s(:db)}'"
17
+ end
18
+ end
19
+
20
+ # Overrides method in a super class (located in active model)
21
+ def apply_seconds_precision(value)
22
+ return value unless ar_precision && value.respond_to?(:usec)
23
+
24
+ number_of_insignificant_digits = 6 - ar_precision
25
+ round_power = 10**number_of_insignificant_digits
26
+ value.change(usec: value.usec / round_power * round_power)
27
+ end
28
+
29
+ private
30
+
31
+ def cast_value(value)
32
+ value = super(value)
33
+ apply_seconds_precision(value)
34
+ end
35
+
36
+ # Even though the mssql time precision is 7 we will ignore the
37
+ # nano seconds precision, this adapter work with microseconds only.
38
+ def ar_precision
39
+ precision || 6
40
+ end
41
+ end
42
+
43
+ # NOTE: The key here is to get usec in a format like ABC000 to get
44
+ # minimal rounding issues. MSSQL has its own rounding strategy
45
+ # (Rounded to increments of .000, .003, or .007 seconds)
46
+ class DateTime < ActiveRecord::Type::DateTime
47
+ def type
48
+ :datetime_basic
49
+ end
50
+
51
+ def type_cast_for_schema(value)
52
+ return "'#{value}'" if value.acts_like?(:string)
53
+
54
+ if value.usec > 0
55
+ "'#{value.to_s(:db)}.#{value.usec.to_s.remove(/0+$/)}'"
56
+ else
57
+ "'#{value.to_s(:db)}'"
58
+ end
59
+ end
60
+
61
+ private
62
+
63
+ def cast_value(value)
64
+ value = value.respond_to?(:usec) ? value : super
65
+ return unless value
66
+
67
+ value.change usec: cast_usec(value)
68
+ end
69
+
70
+ def cast_usec(value)
71
+ return 0 unless value.respond_to?(:usec)
72
+
73
+ return 0 if value.usec.zero?
74
+
75
+ seconds = value.usec.to_f / 1_000_000.0
76
+ second_precision = 0.00333
77
+ ss_seconds = ((seconds * (1 / second_precision)).round / (1 / second_precision)).round(3)
78
+ (ss_seconds * 1_000_000).to_i
79
+ end
80
+ end
81
+
82
+ class SmallDateTime < DateTime
83
+
84
+ # To be mapped properly in schema.rb it needs to be smalldatetime.
85
+ def type
86
+ :smalldatetime
87
+ end
88
+
89
+ private
90
+
91
+ def cast_usec(_value)
92
+ 0
93
+ end
94
+ end
95
+
96
+ class Time < ActiveRecord::Type::Time
97
+ def type_cast_for_schema(value)
98
+ return "'#{value}'" if value.acts_like?(:string)
99
+
100
+ if value.usec > 0
101
+ "'#{value.to_s(:db)}.#{value.usec.to_s.remove(/0+$/)}'"
102
+ else
103
+ "'#{value.to_s(:db)}'"
104
+ end
105
+ end
106
+
107
+ # Overrides method in a super class (located in active model)
108
+ def apply_seconds_precision(value)
109
+ return value unless ar_precision && value.respond_to?(:usec)
110
+
111
+ number_of_insignificant_digits = 6 - ar_precision
112
+ round_power = 10**number_of_insignificant_digits
113
+ value.change(usec: value.usec / round_power * round_power)
114
+ end
115
+
116
+ private
117
+
118
+ def cast_value(value)
119
+ value = super(value)
120
+ apply_seconds_precision(value)
121
+ end
122
+
123
+ # Even though the mssql time precision is 7 we will ignore the
124
+ # nano seconds precision, this adapter work with microseconds only.
125
+ def ar_precision
126
+ precision || 6
127
+ end
128
+ end
129
+
130
+ end
131
+ end
132
+ end
133
+ end
134
+
@@ -0,0 +1,40 @@
1
+ # MSSQL deprecated type definitions
2
+ module ActiveRecord
3
+ module ConnectionAdapters
4
+ module MSSQL
5
+ module Type
6
+
7
+ class Text < ActiveRecord::Type::String
8
+ def type
9
+ :text_basic
10
+ end
11
+
12
+ def limit
13
+ @limit ||= 2_147_483_647
14
+ end
15
+ end
16
+
17
+ class Ntext < ActiveRecord::Type::String
18
+ def type
19
+ :ntext
20
+ end
21
+
22
+ def limit
23
+ @limit ||= 2_147_483_647
24
+ end
25
+ end
26
+
27
+ class Image < ActiveRecord::Type::Binary
28
+ def type
29
+ :image
30
+ end
31
+
32
+ def limit
33
+ @limit ||= 2_147_483_647
34
+ end
35
+ end
36
+
37
+ end
38
+ end
39
+ end
40
+ end
@@ -0,0 +1,71 @@
1
+ # MSSQL numeric types definitions
2
+ module ActiveRecord
3
+ module ConnectionAdapters
4
+ module MSSQL
5
+ module Type
6
+
7
+ # Exact numerics
8
+ class Integer < ActiveRecord::Type::Integer
9
+ end
10
+
11
+ class TinyInteger < ActiveRecord::Type::Integer
12
+ def max_value
13
+ 256
14
+ end
15
+
16
+ def min_value
17
+ 0
18
+ end
19
+ end
20
+
21
+ class SmallInteger < ActiveRecord::Type::Integer
22
+ end
23
+
24
+ class BigInteger < ActiveRecord::Type::Integer
25
+ end
26
+
27
+ class Decimal < ActiveRecord::Type::Decimal
28
+ end
29
+
30
+ # This type is used when scale is 0 and the default value in
31
+ # SQL Server when it is not provided
32
+ class DecimalWithoutScale < ActiveRecord::Type::DecimalWithoutScale
33
+ end
34
+
35
+ class Money < Decimal
36
+ def initialize(options = {})
37
+ super
38
+ @precision = 19
39
+ @scale = 4
40
+ end
41
+ def type
42
+ :money
43
+ end
44
+ end
45
+
46
+ class SmallMoney < Decimal
47
+ def initialize(options = {})
48
+ super
49
+ @precision = 10
50
+ @scale = 4
51
+ end
52
+
53
+ def type
54
+ :smallmoney
55
+ end
56
+ end
57
+
58
+ # Approximate numerics
59
+ class Float < ActiveRecord::Type::Float
60
+ end
61
+
62
+ class Real < ActiveRecord::Type::Float
63
+ def type
64
+ :real
65
+ end
66
+ end
67
+
68
+ end
69
+ end
70
+ end
71
+ end
@@ -0,0 +1,56 @@
1
+ # MSSQL string types definitions
2
+ module ActiveRecord
3
+ module ConnectionAdapters
4
+ module MSSQL
5
+ module Type
6
+
7
+ class Char < ActiveRecord::Type::String
8
+ def type
9
+ :char
10
+ end
11
+ end
12
+
13
+ class Varchar < ActiveRecord::Type::String
14
+ def type
15
+ :varchar
16
+ end
17
+ end
18
+
19
+ class VarcharMax < ActiveRecord::Type::String
20
+ def type
21
+ :varchar_max
22
+ end
23
+
24
+ def limit
25
+ @limit ||= 2_147_483_647
26
+ end
27
+ end
28
+
29
+ class Nchar < ActiveRecord::Type::String
30
+ def type
31
+ :nchar
32
+ end
33
+ end
34
+
35
+ # This is Rails logical string type
36
+ class Nvarchar < ActiveRecord::Type::String
37
+ def type
38
+ :string
39
+ end
40
+ end
41
+
42
+ # This is Rails logical text type
43
+ class NvarcharMax < ActiveRecord::Type::String
44
+ def type
45
+ :text
46
+ end
47
+
48
+ def limit
49
+ @limit ||= 2_147_483_647
50
+ end
51
+ end
52
+
53
+ end
54
+ end
55
+ end
56
+ end