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.
- checksums.yaml +7 -0
- data/.gitignore +35 -0
- data/.travis.yml +100 -0
- data/.yardopts +4 -0
- data/CONTRIBUTING.md +50 -0
- data/Gemfile +92 -0
- data/History.md +1191 -0
- data/LICENSE.txt +26 -0
- data/README.md +240 -0
- data/RUNNING_TESTS.md +127 -0
- data/Rakefile +336 -0
- data/Rakefile.jdbc +20 -0
- data/activerecord-jdbc-adapter.gemspec +55 -0
- data/activerecord-jdbc-alt-adapter.gemspec +56 -0
- data/lib/active_record/connection_adapters/as400_adapter.rb +2 -0
- data/lib/active_record/connection_adapters/db2_adapter.rb +1 -0
- data/lib/active_record/connection_adapters/derby_adapter.rb +1 -0
- data/lib/active_record/connection_adapters/firebird_adapter.rb +1 -0
- data/lib/active_record/connection_adapters/h2_adapter.rb +1 -0
- data/lib/active_record/connection_adapters/hsqldb_adapter.rb +1 -0
- data/lib/active_record/connection_adapters/informix_adapter.rb +1 -0
- data/lib/active_record/connection_adapters/jdbc_adapter.rb +1 -0
- data/lib/active_record/connection_adapters/jndi_adapter.rb +1 -0
- data/lib/active_record/connection_adapters/mariadb_adapter.rb +1 -0
- data/lib/active_record/connection_adapters/mssql_adapter.rb +1 -0
- data/lib/active_record/connection_adapters/mysql2_adapter.rb +1 -0
- data/lib/active_record/connection_adapters/mysql_adapter.rb +1 -0
- data/lib/active_record/connection_adapters/postgresql_adapter.rb +1 -0
- data/lib/active_record/connection_adapters/sqlite3_adapter.rb +1 -0
- data/lib/active_record/connection_adapters/sqlserver_adapter.rb +1 -0
- data/lib/activerecord-jdbc-adapter.rb +1 -0
- data/lib/arel/visitors/compat.rb +60 -0
- data/lib/arel/visitors/db2.rb +137 -0
- data/lib/arel/visitors/derby.rb +112 -0
- data/lib/arel/visitors/firebird.rb +79 -0
- data/lib/arel/visitors/h2.rb +25 -0
- data/lib/arel/visitors/hsqldb.rb +32 -0
- data/lib/arel/visitors/postgresql_jdbc.rb +6 -0
- data/lib/arel/visitors/sql_server.rb +225 -0
- data/lib/arel/visitors/sql_server/ng42.rb +294 -0
- data/lib/arel/visitors/sqlserver.rb +214 -0
- data/lib/arjdbc.rb +19 -0
- data/lib/arjdbc/abstract/connection_management.rb +35 -0
- data/lib/arjdbc/abstract/core.rb +74 -0
- data/lib/arjdbc/abstract/database_statements.rb +64 -0
- data/lib/arjdbc/abstract/statement_cache.rb +58 -0
- data/lib/arjdbc/abstract/transaction_support.rb +86 -0
- data/lib/arjdbc/db2.rb +4 -0
- data/lib/arjdbc/db2/adapter.rb +789 -0
- data/lib/arjdbc/db2/as400.rb +130 -0
- data/lib/arjdbc/db2/column.rb +167 -0
- data/lib/arjdbc/db2/connection_methods.rb +44 -0
- data/lib/arjdbc/derby.rb +3 -0
- data/lib/arjdbc/derby/active_record_patch.rb +13 -0
- data/lib/arjdbc/derby/adapter.rb +540 -0
- data/lib/arjdbc/derby/connection_methods.rb +20 -0
- data/lib/arjdbc/derby/schema_creation.rb +15 -0
- data/lib/arjdbc/discover.rb +104 -0
- data/lib/arjdbc/firebird.rb +4 -0
- data/lib/arjdbc/firebird/adapter.rb +434 -0
- data/lib/arjdbc/firebird/connection_methods.rb +23 -0
- data/lib/arjdbc/h2.rb +3 -0
- data/lib/arjdbc/h2/adapter.rb +303 -0
- data/lib/arjdbc/h2/connection_methods.rb +27 -0
- data/lib/arjdbc/hsqldb.rb +3 -0
- data/lib/arjdbc/hsqldb/adapter.rb +297 -0
- data/lib/arjdbc/hsqldb/connection_methods.rb +28 -0
- data/lib/arjdbc/hsqldb/explain_support.rb +35 -0
- data/lib/arjdbc/hsqldb/schema_creation.rb +11 -0
- data/lib/arjdbc/informix.rb +5 -0
- data/lib/arjdbc/informix/adapter.rb +162 -0
- data/lib/arjdbc/informix/connection_methods.rb +9 -0
- data/lib/arjdbc/jdbc.rb +59 -0
- data/lib/arjdbc/jdbc/adapter.rb +475 -0
- data/lib/arjdbc/jdbc/adapter_require.rb +46 -0
- data/lib/arjdbc/jdbc/base_ext.rb +15 -0
- data/lib/arjdbc/jdbc/callbacks.rb +53 -0
- data/lib/arjdbc/jdbc/column.rb +97 -0
- data/lib/arjdbc/jdbc/connection.rb +14 -0
- data/lib/arjdbc/jdbc/connection_methods.rb +37 -0
- data/lib/arjdbc/jdbc/error.rb +65 -0
- data/lib/arjdbc/jdbc/extension.rb +59 -0
- data/lib/arjdbc/jdbc/java.rb +13 -0
- data/lib/arjdbc/jdbc/railtie.rb +2 -0
- data/lib/arjdbc/jdbc/rake_tasks.rb +3 -0
- data/lib/arjdbc/jdbc/serialized_attributes_helper.rb +3 -0
- data/lib/arjdbc/jdbc/type_cast.rb +166 -0
- data/lib/arjdbc/jdbc/type_converter.rb +142 -0
- data/lib/arjdbc/mssql.rb +7 -0
- data/lib/arjdbc/mssql/adapter.rb +384 -0
- data/lib/arjdbc/mssql/column.rb +29 -0
- data/lib/arjdbc/mssql/connection_methods.rb +79 -0
- data/lib/arjdbc/mssql/database_statements.rb +134 -0
- data/lib/arjdbc/mssql/errors.rb +6 -0
- data/lib/arjdbc/mssql/explain_support.rb +129 -0
- data/lib/arjdbc/mssql/extensions.rb +36 -0
- data/lib/arjdbc/mssql/limit_helpers.rb +231 -0
- data/lib/arjdbc/mssql/lock_methods.rb +77 -0
- data/lib/arjdbc/mssql/old_adapter.rb +804 -0
- data/lib/arjdbc/mssql/old_column.rb +200 -0
- data/lib/arjdbc/mssql/quoting.rb +101 -0
- data/lib/arjdbc/mssql/schema_creation.rb +31 -0
- data/lib/arjdbc/mssql/schema_definitions.rb +74 -0
- data/lib/arjdbc/mssql/schema_statements.rb +329 -0
- data/lib/arjdbc/mssql/transaction.rb +69 -0
- data/lib/arjdbc/mssql/types.rb +52 -0
- data/lib/arjdbc/mssql/types/binary_types.rb +33 -0
- data/lib/arjdbc/mssql/types/date_and_time_types.rb +134 -0
- data/lib/arjdbc/mssql/types/deprecated_types.rb +40 -0
- data/lib/arjdbc/mssql/types/numeric_types.rb +71 -0
- data/lib/arjdbc/mssql/types/string_types.rb +56 -0
- data/lib/arjdbc/mssql/utils.rb +66 -0
- data/lib/arjdbc/mysql.rb +3 -0
- data/lib/arjdbc/mysql/adapter.rb +140 -0
- data/lib/arjdbc/mysql/connection_methods.rb +166 -0
- data/lib/arjdbc/oracle/adapter.rb +863 -0
- data/lib/arjdbc/postgresql.rb +3 -0
- data/lib/arjdbc/postgresql/adapter.rb +687 -0
- data/lib/arjdbc/postgresql/base/array_decoder.rb +26 -0
- data/lib/arjdbc/postgresql/base/array_encoder.rb +25 -0
- data/lib/arjdbc/postgresql/base/array_parser.rb +95 -0
- data/lib/arjdbc/postgresql/base/pgconn.rb +11 -0
- data/lib/arjdbc/postgresql/column.rb +51 -0
- data/lib/arjdbc/postgresql/connection_methods.rb +67 -0
- data/lib/arjdbc/postgresql/name.rb +24 -0
- data/lib/arjdbc/postgresql/oid_types.rb +266 -0
- data/lib/arjdbc/railtie.rb +11 -0
- data/lib/arjdbc/sqlite3.rb +3 -0
- data/lib/arjdbc/sqlite3/adapter.rb +678 -0
- data/lib/arjdbc/sqlite3/connection_methods.rb +59 -0
- data/lib/arjdbc/sybase.rb +2 -0
- data/lib/arjdbc/sybase/adapter.rb +47 -0
- data/lib/arjdbc/tasks.rb +13 -0
- data/lib/arjdbc/tasks/database_tasks.rb +31 -0
- data/lib/arjdbc/tasks/databases.rake +48 -0
- data/lib/arjdbc/tasks/db2_database_tasks.rb +104 -0
- data/lib/arjdbc/tasks/derby_database_tasks.rb +95 -0
- data/lib/arjdbc/tasks/h2_database_tasks.rb +31 -0
- data/lib/arjdbc/tasks/hsqldb_database_tasks.rb +70 -0
- data/lib/arjdbc/tasks/jdbc_database_tasks.rb +169 -0
- data/lib/arjdbc/tasks/mssql_database_tasks.rb +46 -0
- data/lib/arjdbc/util/quoted_cache.rb +60 -0
- data/lib/arjdbc/util/serialized_attributes.rb +98 -0
- data/lib/arjdbc/util/table_copier.rb +110 -0
- data/lib/arjdbc/version.rb +3 -0
- data/lib/generators/jdbc/USAGE +9 -0
- data/lib/generators/jdbc/jdbc_generator.rb +17 -0
- data/lib/jdbc_adapter.rb +2 -0
- data/lib/jdbc_adapter/rake_tasks.rb +4 -0
- data/lib/jdbc_adapter/version.rb +4 -0
- data/pom.xml +114 -0
- data/rails_generators/jdbc_generator.rb +15 -0
- data/rails_generators/templates/config/initializers/jdbc.rb +10 -0
- data/rails_generators/templates/lib/tasks/jdbc.rake +11 -0
- data/rakelib/01-tomcat.rake +51 -0
- data/rakelib/02-test.rake +132 -0
- data/rakelib/bundler_ext.rb +11 -0
- data/rakelib/db.rake +75 -0
- data/rakelib/rails.rake +223 -0
- data/src/java/arjdbc/ArJdbcModule.java +276 -0
- data/src/java/arjdbc/db2/DB2Module.java +76 -0
- data/src/java/arjdbc/db2/DB2RubyJdbcConnection.java +126 -0
- data/src/java/arjdbc/derby/DerbyModule.java +178 -0
- data/src/java/arjdbc/derby/DerbyRubyJdbcConnection.java +152 -0
- data/src/java/arjdbc/firebird/FirebirdRubyJdbcConnection.java +174 -0
- data/src/java/arjdbc/h2/H2Module.java +50 -0
- data/src/java/arjdbc/h2/H2RubyJdbcConnection.java +85 -0
- data/src/java/arjdbc/hsqldb/HSQLDBModule.java +73 -0
- data/src/java/arjdbc/informix/InformixRubyJdbcConnection.java +75 -0
- data/src/java/arjdbc/jdbc/AdapterJavaService.java +43 -0
- data/src/java/arjdbc/jdbc/Callable.java +44 -0
- data/src/java/arjdbc/jdbc/ConnectionFactory.java +45 -0
- data/src/java/arjdbc/jdbc/DataSourceConnectionFactory.java +156 -0
- data/src/java/arjdbc/jdbc/DriverConnectionFactory.java +63 -0
- data/src/java/arjdbc/jdbc/DriverWrapper.java +119 -0
- data/src/java/arjdbc/jdbc/JdbcResult.java +130 -0
- data/src/java/arjdbc/jdbc/RubyConnectionFactory.java +61 -0
- data/src/java/arjdbc/jdbc/RubyJdbcConnection.java +3979 -0
- data/src/java/arjdbc/mssql/MSSQLModule.java +90 -0
- data/src/java/arjdbc/mssql/MSSQLRubyJdbcConnection.java +508 -0
- data/src/java/arjdbc/mysql/MySQLModule.java +152 -0
- data/src/java/arjdbc/mysql/MySQLRubyJdbcConnection.java +294 -0
- data/src/java/arjdbc/oracle/OracleModule.java +80 -0
- data/src/java/arjdbc/oracle/OracleRubyJdbcConnection.java +455 -0
- data/src/java/arjdbc/postgresql/ByteaUtils.java +157 -0
- data/src/java/arjdbc/postgresql/PgDateTimeUtils.java +52 -0
- data/src/java/arjdbc/postgresql/PostgreSQLModule.java +77 -0
- data/src/java/arjdbc/postgresql/PostgreSQLResult.java +192 -0
- data/src/java/arjdbc/postgresql/PostgreSQLRubyJdbcConnection.java +948 -0
- data/src/java/arjdbc/sqlite3/SQLite3Module.java +73 -0
- data/src/java/arjdbc/sqlite3/SQLite3RubyJdbcConnection.java +525 -0
- data/src/java/arjdbc/util/CallResultSet.java +826 -0
- data/src/java/arjdbc/util/DateTimeUtils.java +699 -0
- data/src/java/arjdbc/util/ObjectSupport.java +65 -0
- data/src/java/arjdbc/util/QuotingUtils.java +137 -0
- data/src/java/arjdbc/util/StringCache.java +63 -0
- data/src/java/arjdbc/util/StringHelper.java +145 -0
- 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
|