activerecord-sqlserver-adapter 4.1.8 → 4.2.0.pre
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 +4 -4
- data/.gitignore +15 -0
- data/CHANGELOG.md +60 -0
- data/Gemfile +45 -0
- data/Guardfile +29 -0
- data/MIT-LICENSE +5 -5
- data/README.md +193 -0
- data/RUNNING_UNIT_TESTS.md +95 -0
- data/Rakefile +48 -0
- data/activerecord-sqlserver-adapter.gemspec +28 -0
- data/lib/active_record/connection_adapters/sqlserver/core_ext/active_record.rb +5 -15
- data/lib/active_record/connection_adapters/sqlserver/core_ext/attribute_methods.rb +25 -0
- data/lib/active_record/connection_adapters/sqlserver/core_ext/explain.rb +6 -4
- data/lib/active_record/connection_adapters/sqlserver/core_ext/odbc.rb +9 -3
- data/lib/active_record/connection_adapters/sqlserver/database_limits.rb +3 -1
- data/lib/active_record/connection_adapters/sqlserver/database_statements.rb +130 -151
- data/lib/active_record/connection_adapters/sqlserver/errors.rb +0 -25
- data/lib/active_record/connection_adapters/sqlserver/quoting.rb +39 -78
- data/lib/active_record/connection_adapters/sqlserver/schema_cache.rb +71 -47
- data/lib/active_record/connection_adapters/sqlserver/schema_creation.rb +14 -30
- data/lib/active_record/connection_adapters/sqlserver/schema_statements.rb +112 -108
- data/lib/active_record/connection_adapters/sqlserver/showplan.rb +4 -2
- data/lib/active_record/connection_adapters/sqlserver/showplan/printer_table.rb +1 -1
- data/lib/active_record/connection_adapters/sqlserver/showplan/printer_xml.rb +1 -1
- data/lib/active_record/connection_adapters/sqlserver/table_definition.rb +52 -7
- data/lib/active_record/connection_adapters/sqlserver/transaction.rb +52 -0
- data/lib/active_record/connection_adapters/sqlserver/type.rb +46 -0
- data/lib/active_record/connection_adapters/sqlserver/type/big_integer.rb +15 -0
- data/lib/active_record/connection_adapters/sqlserver/type/binary.rb +15 -0
- data/lib/active_record/connection_adapters/sqlserver/type/boolean.rb +13 -0
- data/lib/active_record/connection_adapters/sqlserver/type/castable.rb +15 -0
- data/lib/active_record/connection_adapters/sqlserver/type/char.rb +15 -0
- data/lib/active_record/connection_adapters/sqlserver/type/core_ext/value.rb +39 -0
- data/lib/active_record/connection_adapters/sqlserver/type/date.rb +14 -0
- data/lib/active_record/connection_adapters/sqlserver/type/datetime.rb +37 -0
- data/lib/active_record/connection_adapters/sqlserver/type/decimal.rb +13 -0
- data/lib/active_record/connection_adapters/sqlserver/type/float.rb +17 -0
- data/lib/active_record/connection_adapters/sqlserver/type/integer.rb +13 -0
- data/lib/active_record/connection_adapters/sqlserver/type/money.rb +21 -0
- data/lib/active_record/connection_adapters/sqlserver/type/quoter.rb +32 -0
- data/lib/active_record/connection_adapters/sqlserver/type/real.rb +17 -0
- data/lib/active_record/connection_adapters/sqlserver/type/small_integer.rb +13 -0
- data/lib/active_record/connection_adapters/sqlserver/type/small_money.rb +21 -0
- data/lib/active_record/connection_adapters/sqlserver/type/smalldatetime.rb +24 -0
- data/lib/active_record/connection_adapters/sqlserver/type/string.rb +12 -0
- data/lib/active_record/connection_adapters/sqlserver/type/text.rb +15 -0
- data/lib/active_record/connection_adapters/sqlserver/type/time.rb +59 -0
- data/lib/active_record/connection_adapters/sqlserver/type/timestamp.rb +15 -0
- data/lib/active_record/connection_adapters/sqlserver/type/tiny_integer.rb +22 -0
- data/lib/active_record/connection_adapters/sqlserver/type/unicode_char.rb +15 -0
- data/lib/active_record/connection_adapters/sqlserver/type/unicode_string.rb +12 -0
- data/lib/active_record/connection_adapters/sqlserver/type/unicode_text.rb +15 -0
- data/lib/active_record/connection_adapters/sqlserver/type/unicode_varchar.rb +20 -0
- data/lib/active_record/connection_adapters/sqlserver/type/unicode_varchar_max.rb +20 -0
- data/lib/active_record/connection_adapters/sqlserver/type/uuid.rb +23 -0
- data/lib/active_record/connection_adapters/sqlserver/type/varbinary.rb +20 -0
- data/lib/active_record/connection_adapters/sqlserver/type/varbinary_max.rb +20 -0
- data/lib/active_record/connection_adapters/sqlserver/type/varchar.rb +20 -0
- data/lib/active_record/connection_adapters/sqlserver/type/varchar_max.rb +20 -0
- data/lib/active_record/connection_adapters/sqlserver/utils.rb +118 -12
- data/lib/active_record/connection_adapters/sqlserver/version.rb +11 -0
- data/lib/active_record/connection_adapters/sqlserver_adapter.rb +133 -198
- data/lib/active_record/connection_adapters/sqlserver_column.rb +15 -86
- data/lib/active_record/sqlserver_base.rb +2 -0
- data/lib/arel/visitors/sqlserver.rb +120 -393
- data/lib/{arel/arel_sqlserver.rb → arel_sqlserver.rb} +1 -3
- data/test/cases/adapter_test_sqlserver.rb +420 -0
- data/test/cases/coerced_tests.rb +642 -0
- data/test/cases/column_test_sqlserver.rb +703 -0
- data/test/cases/connection_test_sqlserver.rb +216 -0
- data/test/cases/database_statements_test_sqlserver.rb +57 -0
- data/test/cases/execute_procedure_test_sqlserver.rb +38 -0
- data/test/cases/helper_sqlserver.rb +36 -0
- data/test/cases/migration_test_sqlserver.rb +66 -0
- data/test/cases/order_test_sqlserver.rb +147 -0
- data/test/cases/pessimistic_locking_test_sqlserver.rb +90 -0
- data/test/cases/schema_dumper_test_sqlserver.rb +175 -0
- data/test/cases/schema_test_sqlserver.rb +54 -0
- data/test/cases/scratchpad_test_sqlserver.rb +9 -0
- data/test/cases/showplan_test_sqlserver.rb +65 -0
- data/test/cases/specific_schema_test_sqlserver.rb +118 -0
- data/test/cases/transaction_test_sqlserver.rb +61 -0
- data/test/cases/utils_test_sqlserver.rb +91 -0
- data/test/cases/uuid_test_sqlserver.rb +41 -0
- data/test/config.yml +35 -0
- data/test/fixtures/1px.gif +0 -0
- data/test/migrations/transaction_table/1_table_will_never_be_created.rb +11 -0
- data/test/models/sqlserver/customers_view.rb +3 -0
- data/test/models/sqlserver/datatype.rb +3 -0
- data/test/models/sqlserver/datatype_migration.rb +3 -0
- data/test/models/sqlserver/dollar_table_name.rb +3 -0
- data/test/models/sqlserver/edge_schema.rb +13 -0
- data/test/models/sqlserver/fk_has_fk.rb +3 -0
- data/test/models/sqlserver/fk_has_pk.rb +3 -0
- data/test/models/sqlserver/natural_pk_data.rb +4 -0
- data/test/models/sqlserver/natural_pk_int_data.rb +3 -0
- data/test/models/sqlserver/no_pk_data.rb +3 -0
- data/test/models/sqlserver/quoted_table.rb +7 -0
- data/test/models/sqlserver/quoted_view_1.rb +3 -0
- data/test/models/sqlserver/quoted_view_2.rb +3 -0
- data/test/models/sqlserver/string_default.rb +3 -0
- data/test/models/sqlserver/string_defaults_big_view.rb +3 -0
- data/test/models/sqlserver/string_defaults_view.rb +3 -0
- data/test/models/sqlserver/tinyint_pk.rb +3 -0
- data/test/models/sqlserver/upper.rb +3 -0
- data/test/models/sqlserver/uppered.rb +3 -0
- data/test/models/sqlserver/uuid.rb +3 -0
- data/test/schema/datatypes/2012.sql +64 -0
- data/test/schema/sqlserver_specific_schema.rb +181 -0
- data/test/support/coerceable_test_sqlserver.rb +45 -0
- data/test/support/load_schema_sqlserver.rb +29 -0
- data/test/support/minitest_sqlserver.rb +1 -0
- data/test/support/paths_sqlserver.rb +48 -0
- data/test/support/rake_helpers.rb +41 -0
- data/test/support/sql_counter_sqlserver.rb +32 -0
- metadata +271 -21
- data/CHANGELOG +0 -39
- data/VERSION +0 -1
- data/lib/active_record/connection_adapters/sqlserver/core_ext/relation.rb +0 -17
- data/lib/active_record/sqlserver_test_case.rb +0 -17
- data/lib/arel/nodes_sqlserver.rb +0 -14
- data/lib/arel/select_manager_sqlserver.rb +0 -62
data/CHANGELOG
DELETED
|
@@ -1,39 +0,0 @@
|
|
|
1
|
-
## v4.1.8
|
|
2
|
-
|
|
3
|
-
* Allow 2017 in supported versions.
|
|
4
|
-
|
|
5
|
-
## v4.1.7
|
|
6
|
-
|
|
7
|
-
* Fix `user_options`.
|
|
8
|
-
|
|
9
|
-
## v4.1.6
|
|
10
|
-
|
|
11
|
-
* Fix parens around `enable_default_unicode_types`. Fixes #562
|
|
12
|
-
|
|
13
|
-
## v4.1.5
|
|
14
|
-
|
|
15
|
-
* Added vNext to supported list.
|
|
16
|
-
|
|
17
|
-
## v4.1.4
|
|
18
|
-
|
|
19
|
-
* Added 2016 to supported list.
|
|
20
|
-
|
|
21
|
-
## v4.1.3
|
|
22
|
-
|
|
23
|
-
#### Fixed
|
|
24
|
-
|
|
25
|
-
* Partial indexes using `:where` in schema dumper. Fixes #153
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
## v4.1.2
|
|
29
|
-
|
|
30
|
-
#### Fixed
|
|
31
|
-
|
|
32
|
-
* Bundling and test running. Noted current failures.
|
|
33
|
-
* Fix `remove_column` arity. Fixes #359
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
## v4.1.1
|
|
37
|
-
|
|
38
|
-
* No information :/
|
|
39
|
-
|
data/VERSION
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
4.1.8
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
module ActiveRecord
|
|
2
|
-
module ConnectionAdapters
|
|
3
|
-
module Sqlserver
|
|
4
|
-
module CoreExt
|
|
5
|
-
module Relation
|
|
6
|
-
private
|
|
7
|
-
|
|
8
|
-
def tables_in_string(string)
|
|
9
|
-
super - ['__rnt']
|
|
10
|
-
end
|
|
11
|
-
end
|
|
12
|
-
end
|
|
13
|
-
end
|
|
14
|
-
end
|
|
15
|
-
end
|
|
16
|
-
|
|
17
|
-
ActiveRecord::Relation.send :include, ActiveRecord::ConnectionAdapters::Sqlserver::CoreExt::Relation
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
require 'active_record/test_case.rb'
|
|
2
|
-
|
|
3
|
-
# TODO: I'm struggling to figure out how to unsubscribe from only one 'sql.active_record'
|
|
4
|
-
# This is a temporary hack until we can just get the sqlserver_ignored regex in rails
|
|
5
|
-
ActiveSupport::Notifications.notifier.listeners_for('sql.active_record').each do |listener|
|
|
6
|
-
if listener.inspect =~ /ActiveRecord::SQLCounter/
|
|
7
|
-
ActiveSupport::Notifications.unsubscribe(listener)
|
|
8
|
-
end
|
|
9
|
-
end
|
|
10
|
-
|
|
11
|
-
module ActiveRecord
|
|
12
|
-
class SQLCounter
|
|
13
|
-
sqlserver_ignored = [/SELECT SCOPE_IDENTITY/, /INFORMATION_SCHEMA\.(TABLES|VIEWS|COLUMNS)/, /SELECT @@version/, /SELECT @@TRANCOUNT/, /(BEGIN|COMMIT|ROLLBACK|SAVE) TRANSACTION/]
|
|
14
|
-
ignored_sql.concat sqlserver_ignored
|
|
15
|
-
end
|
|
16
|
-
ActiveSupport::Notifications.subscribe('sql.active_record', SQLCounter.new)
|
|
17
|
-
end
|
data/lib/arel/nodes_sqlserver.rb
DELETED
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
module Arel
|
|
2
|
-
module Nodes
|
|
3
|
-
# Extending the Ordering class to be comparison friendly which allows us to call #uniq on a
|
|
4
|
-
# collection of them. See SelectManager#order for more details.
|
|
5
|
-
class Ordering < Arel::Nodes::Unary
|
|
6
|
-
def eql?(other)
|
|
7
|
-
# Arel::Nodes::Ascending or Arel::Nodes::Desecnding
|
|
8
|
-
other.is_a?(Arel::Nodes::Ordering) &&
|
|
9
|
-
expr == other.expr
|
|
10
|
-
end
|
|
11
|
-
alias_method :==, :eql?
|
|
12
|
-
end
|
|
13
|
-
end
|
|
14
|
-
end
|
|
@@ -1,62 +0,0 @@
|
|
|
1
|
-
module Arel
|
|
2
|
-
class SelectManager < Arel::TreeManager
|
|
3
|
-
AR_CA_SQLSA_NAME = 'ActiveRecord::ConnectionAdapters::SQLServerAdapter'.freeze
|
|
4
|
-
|
|
5
|
-
# Getting real Ordering objects is very important for us. We need to be able to call #uniq on
|
|
6
|
-
# a colleciton of them reliably as well as using their true object attributes to mutate them
|
|
7
|
-
# to grouping objects for the inner sql during a select statment with an offset/rownumber. So this
|
|
8
|
-
# is here till ActiveRecord & ARel does this for us instead of using SqlLiteral objects.
|
|
9
|
-
alias_method :order_without_sqlserver, :order
|
|
10
|
-
def order(*expr)
|
|
11
|
-
return order_without_sqlserver(*expr) unless engine_activerecord_sqlserver_adapter?
|
|
12
|
-
@ast.orders.concat(expr.map do |x|
|
|
13
|
-
case x
|
|
14
|
-
when Arel::Attributes::Attribute
|
|
15
|
-
table = Arel::Table.new(x.relation.table_alias || x.relation.name)
|
|
16
|
-
e = table[x.name]
|
|
17
|
-
Arel::Nodes::Ascending.new e
|
|
18
|
-
when Arel::Nodes::Ordering
|
|
19
|
-
x
|
|
20
|
-
when String
|
|
21
|
-
x.split(',').map do |s|
|
|
22
|
-
s = x if x.strip =~ /\A\b\w+\b\(.*,.*\)(\s+(ASC|DESC))?\Z/i # Allow functions with comma(s) to pass thru.
|
|
23
|
-
s.strip!
|
|
24
|
-
d = s =~ /(ASC|DESC)\Z/i ? Regexp.last_match[1].upcase : nil
|
|
25
|
-
e = d.nil? ? s : s.mb_chars[0...-d.length].strip
|
|
26
|
-
e = Arel.sql(e)
|
|
27
|
-
d && d == 'DESC' ? Arel::Nodes::Descending.new(e) : Arel::Nodes::Ascending.new(e)
|
|
28
|
-
end
|
|
29
|
-
else
|
|
30
|
-
e = Arel.sql(x.to_s)
|
|
31
|
-
Arel::Nodes::Ascending.new e
|
|
32
|
-
end
|
|
33
|
-
end.flatten)
|
|
34
|
-
self
|
|
35
|
-
end
|
|
36
|
-
|
|
37
|
-
# A friendly over ride that allows us to put a special lock object that can have a default or pass
|
|
38
|
-
# custom string hints down. See the visit_Arel_Nodes_LockWithSQLServer delegation method.
|
|
39
|
-
alias_method :lock_without_sqlserver, :lock
|
|
40
|
-
def lock(locking = true)
|
|
41
|
-
if engine_activerecord_sqlserver_adapter?
|
|
42
|
-
case locking
|
|
43
|
-
when true
|
|
44
|
-
locking = Arel.sql('WITH(HOLDLOCK, ROWLOCK)')
|
|
45
|
-
when Arel::Nodes::SqlLiteral
|
|
46
|
-
when String
|
|
47
|
-
locking = Arel.sql locking
|
|
48
|
-
end
|
|
49
|
-
@ast.lock = Arel::Nodes::Lock.new(locking)
|
|
50
|
-
self
|
|
51
|
-
else
|
|
52
|
-
lock_without_sqlserver(locking)
|
|
53
|
-
end
|
|
54
|
-
end
|
|
55
|
-
|
|
56
|
-
private
|
|
57
|
-
|
|
58
|
-
def engine_activerecord_sqlserver_adapter?
|
|
59
|
-
@engine.connection && @engine.connection.class.name == AR_CA_SQLSA_NAME
|
|
60
|
-
end
|
|
61
|
-
end
|
|
62
|
-
end
|