aq1018-sqlserver-2000-2008-adpater 0.0.2
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.
- data/CHANGELOG +55 -0
- data/MIT-LICENSE +20 -0
- data/README +0 -0
- data/RUNNING_UNIT_TESTS +60 -0
- data/Rakefile +44 -0
- data/lib/active_record/connection_adapters/sqlserver_adapter.rb +984 -0
- data/lib/core_ext/active_record.rb +93 -0
- data/lib/core_ext/dbi.rb +87 -0
- data/test/cases/aaaa_create_tables_test_sqlserver.rb +19 -0
- data/test/cases/adapter_test_sqlserver.rb +560 -0
- data/test/cases/basics_test_sqlserver.rb +21 -0
- data/test/cases/calculations_test_sqlserver.rb +20 -0
- data/test/cases/column_test_sqlserver.rb +246 -0
- data/test/cases/connection_test_sqlserver.rb +103 -0
- data/test/cases/eager_association_test_sqlserver.rb +22 -0
- data/test/cases/inheritance_test_sqlserver.rb +28 -0
- data/test/cases/migration_test_sqlserver.rb +57 -0
- data/test/cases/offset_and_limit_test_sqlserver.rb +89 -0
- data/test/cases/pessimistic_locking_test_sqlserver.rb +100 -0
- data/test/cases/query_cache_test_sqlserver.rb +24 -0
- data/test/cases/schema_dumper_test_sqlserver.rb +61 -0
- data/test/cases/specific_schema_test_sqlserver.rb +25 -0
- data/test/cases/sqlserver_helper.rb +100 -0
- data/test/cases/table_name_test_sqlserver.rb +22 -0
- data/test/cases/unicode_test_sqlserver.rb +44 -0
- data/test/connections/native_sqlserver/connection.rb +23 -0
- data/test/connections/native_sqlserver_odbc/connection.rb +27 -0
- data/test/migrations/transaction_table/1_table_will_never_be_created.rb +11 -0
- data/test/schema/sqlserver_specific_schema.rb +77 -0
- metadata +85 -0
@@ -0,0 +1,22 @@
|
|
1
|
+
require 'cases/sqlserver_helper'
|
2
|
+
require 'models/order'
|
3
|
+
|
4
|
+
class TableNameTestSqlserver < ActiveRecord::TestCase
|
5
|
+
|
6
|
+
self.use_transactional_fixtures = false
|
7
|
+
|
8
|
+
def setup
|
9
|
+
Order.table_name = '[orders]'
|
10
|
+
Order.reset_column_information
|
11
|
+
end
|
12
|
+
|
13
|
+
should 'load columns with escaped table name for model' do
|
14
|
+
assert_equal 4, Order.columns.length
|
15
|
+
end
|
16
|
+
|
17
|
+
should 'not re-escape table name if it is escaped already for SQL queries' do
|
18
|
+
assert_sql(/SELECT \* FROM \[orders\]/) { Order.all }
|
19
|
+
end
|
20
|
+
|
21
|
+
|
22
|
+
end
|
@@ -0,0 +1,44 @@
|
|
1
|
+
require 'cases/sqlserver_helper'
|
2
|
+
|
3
|
+
class UnicodeTestSqlserver < ActiveRecord::TestCase
|
4
|
+
|
5
|
+
|
6
|
+
context 'Testing basic saves and unicode limits' do
|
7
|
+
|
8
|
+
should 'save and reload simple nchar string' do
|
9
|
+
assert nchar_data = SqlServerUnicode.create!(:nchar => 'A')
|
10
|
+
assert_equal 'A', SqlServerUnicode.find(nchar_data.id).nchar
|
11
|
+
end
|
12
|
+
|
13
|
+
should 'save and reload simple nvarchar(max) string' do
|
14
|
+
test_string = 'Ken Collins'
|
15
|
+
assert nvarcharmax_data = SqlServerUnicode.create!(:nvarchar_max => test_string)
|
16
|
+
assert_equal test_string, SqlServerUnicode.find(nvarcharmax_data.id).nvarchar_max
|
17
|
+
end if sqlserver_2005?
|
18
|
+
|
19
|
+
should 'enforce default nchar_10 limit of 10' do
|
20
|
+
assert_raise(ActiveRecord::StatementInvalid) { SqlServerUnicode.create!(:nchar => '01234567891') }
|
21
|
+
end
|
22
|
+
|
23
|
+
should 'enforce default nvarchar_100 limit of 100' do
|
24
|
+
assert_raise(ActiveRecord::StatementInvalid) { SqlServerUnicode.create!(:nvarchar_100 => '0123456789'*10+'1') }
|
25
|
+
end
|
26
|
+
|
27
|
+
end
|
28
|
+
|
29
|
+
context 'Testing unicode data' do
|
30
|
+
|
31
|
+
setup do
|
32
|
+
@unicode_data = "一二34五六"
|
33
|
+
end
|
34
|
+
|
35
|
+
should 'insert into nvarchar field' do
|
36
|
+
assert data = SqlServerUnicode.create!(:nvarchar => @unicode_data)
|
37
|
+
assert_equal @unicode_data, data.reload.nvarchar
|
38
|
+
end
|
39
|
+
|
40
|
+
end
|
41
|
+
|
42
|
+
|
43
|
+
|
44
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
print "Using native SQLServer\n"
|
2
|
+
require_dependency 'models/course'
|
3
|
+
require 'logger'
|
4
|
+
|
5
|
+
ActiveRecord::Base.logger = Logger.new("debug.log")
|
6
|
+
|
7
|
+
ActiveRecord::Base.configurations = {
|
8
|
+
'arunit' => {
|
9
|
+
:adapter => 'sqlserver',
|
10
|
+
:host => 'localhost',
|
11
|
+
:username => 'rails',
|
12
|
+
:database => 'activerecord_unittest'
|
13
|
+
},
|
14
|
+
'arunit2' => {
|
15
|
+
:adapter => 'sqlserver',
|
16
|
+
:host => 'localhost',
|
17
|
+
:username => 'rails',
|
18
|
+
:database => 'activerecord_unittest2'
|
19
|
+
}
|
20
|
+
}
|
21
|
+
|
22
|
+
ActiveRecord::Base.establish_connection 'arunit'
|
23
|
+
Course.establish_connection 'arunit2'
|
@@ -0,0 +1,27 @@
|
|
1
|
+
print "Using native SQLServer via ODBC\n"
|
2
|
+
require_dependency 'models/course'
|
3
|
+
require 'logger'
|
4
|
+
|
5
|
+
ActiveRecord::Base.logger = Logger.new("debug.log")
|
6
|
+
|
7
|
+
ActiveRecord::Base.configurations = {
|
8
|
+
'arunit' => {
|
9
|
+
:adapter => 'sqlserver',
|
10
|
+
:mode => 'ODBC',
|
11
|
+
:host => 'MSSQL',
|
12
|
+
:username => 'rails',
|
13
|
+
:password => 'rails',
|
14
|
+
:dsn => 'activerecord_unittest'
|
15
|
+
},
|
16
|
+
'arunit2' => {
|
17
|
+
:adapter => 'sqlserver',
|
18
|
+
:mode => 'ODBC',
|
19
|
+
:host => 'MSSQL',
|
20
|
+
:username => 'rails',
|
21
|
+
:password => 'rails',
|
22
|
+
:dsn => 'activerecord_unittest2'
|
23
|
+
}
|
24
|
+
}
|
25
|
+
|
26
|
+
ActiveRecord::Base.establish_connection 'arunit'
|
27
|
+
Course.establish_connection 'arunit2'
|
@@ -0,0 +1,77 @@
|
|
1
|
+
ActiveRecord::Schema.define do
|
2
|
+
|
3
|
+
create_table :table_with_real_columns, :force => true do |t|
|
4
|
+
t.column :real_number, :real
|
5
|
+
# t.column :varchar_max, :varchar_max if ActiveRecord::Base.connection.sqlserver_2005?
|
6
|
+
end
|
7
|
+
|
8
|
+
create_table :defaults, :force => true do |t|
|
9
|
+
t.column :positive_integer, :integer, :default => 1
|
10
|
+
t.column :negative_integer, :integer, :default => -1
|
11
|
+
t.column :decimal_number, :decimal, :precision => 3, :scale => 2, :default => 2.78
|
12
|
+
end
|
13
|
+
|
14
|
+
create_table :string_defaults, :force => true do |t|
|
15
|
+
t.column :string_with_null_default, :string, :default => nil
|
16
|
+
t.column :string_with_pretend_null_one, :string, :default => 'null'
|
17
|
+
t.column :string_with_pretend_null_two, :string, :default => '(null)'
|
18
|
+
t.column :string_with_pretend_null_three, :string, :default => 'NULL'
|
19
|
+
t.column :string_with_pretend_null_four, :string, :default => '(NULL)'
|
20
|
+
end
|
21
|
+
|
22
|
+
create_table :sql_server_chronics, :force => true do |t|
|
23
|
+
t.column :date, :date
|
24
|
+
t.column :time, :time
|
25
|
+
t.column :datetime, :datetime
|
26
|
+
t.column :timestamp, :timestamp
|
27
|
+
end
|
28
|
+
|
29
|
+
create_table(:fk_test_has_fks, :force => true) { |t| t.column(:fk_id, :integer, :null => false) }
|
30
|
+
create_table(:fk_test_has_pks, :force => true) { }
|
31
|
+
execute <<-ADDFKSQL
|
32
|
+
ALTER TABLE fk_test_has_fks
|
33
|
+
ADD CONSTRAINT FK__fk_test_has_fk_fk_id
|
34
|
+
FOREIGN KEY (#{quote_column_name('fk_id')})
|
35
|
+
REFERENCES #{quote_table_name('fk_test_has_pks')} (#{quote_column_name('id')})
|
36
|
+
ADDFKSQL
|
37
|
+
|
38
|
+
create_table :sql_server_unicodes, :force => true do |t|
|
39
|
+
t.column :nchar, :nchar
|
40
|
+
t.column :nvarchar, :nvarchar
|
41
|
+
t.column :ntext, :ntext
|
42
|
+
t.column :ntext_10, :ntext, :limit => 10
|
43
|
+
t.column :nchar_10, :nchar, :limit => 10
|
44
|
+
t.column :nvarchar_100, :nvarchar, :limit => 100
|
45
|
+
if ActiveRecord::Base.connection.sqlserver_2005?
|
46
|
+
t.column :nvarchar_max, :nvarchar_max
|
47
|
+
t.column :nvarchar_max_10, :nvarchar_max, :limit => 10
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
create_table :sql_server_strings, :force => true do |t|
|
52
|
+
t.column :char, :char
|
53
|
+
t.column :char_10, :char, :limit => 10
|
54
|
+
if ActiveRecord::Base.connection.sqlserver_2005?
|
55
|
+
t.column :varchar_max, :varchar_max
|
56
|
+
t.column :varchar_max_10, :varchar_max, :limit => 10
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
create_table :sql_server_binary_types, :force => true do |t|
|
61
|
+
# TODO: Add some different native binary types and test.
|
62
|
+
end
|
63
|
+
|
64
|
+
execute "IF EXISTS (SELECT TABLE_NAME FROM INFORMATION_SCHEMA.VIEWS WHERE TABLE_NAME = 'customers_view') DROP VIEW customers_view"
|
65
|
+
execute <<-CUSTOMERSVIEW
|
66
|
+
CREATE VIEW customers_view AS
|
67
|
+
SELECT id, name, balance
|
68
|
+
FROM customers
|
69
|
+
CUSTOMERSVIEW
|
70
|
+
execute "IF EXISTS (SELECT TABLE_NAME FROM INFORMATION_SCHEMA.VIEWS WHERE TABLE_NAME = 'string_defaults_view') DROP VIEW string_defaults_view"
|
71
|
+
execute <<-STRINGDEFAULTSVIEW
|
72
|
+
CREATE VIEW string_defaults_view AS
|
73
|
+
SELECT id, string_with_pretend_null_one as pretend_null
|
74
|
+
FROM string_defaults
|
75
|
+
STRINGDEFAULTSVIEW
|
76
|
+
|
77
|
+
end
|
metadata
ADDED
@@ -0,0 +1,85 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: aq1018-sqlserver-2000-2008-adpater
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.2
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Ken Collins
|
8
|
+
- Murray Steele
|
9
|
+
- Shawn Balestracci
|
10
|
+
- Joe Rafaniello
|
11
|
+
- Tom Ward
|
12
|
+
- Aaron
|
13
|
+
autorequire:
|
14
|
+
bindir: bin
|
15
|
+
cert_chain: []
|
16
|
+
|
17
|
+
date: 2009-02-28 00:00:00 -08:00
|
18
|
+
default_executable:
|
19
|
+
dependencies: []
|
20
|
+
|
21
|
+
description: SQL Server 2000 & 2005 & 2008 Adapter For Rails.
|
22
|
+
email: ken@metaskills.net
|
23
|
+
executables: []
|
24
|
+
|
25
|
+
extensions: []
|
26
|
+
|
27
|
+
extra_rdoc_files: []
|
28
|
+
|
29
|
+
files:
|
30
|
+
- CHANGELOG
|
31
|
+
- MIT-LICENSE
|
32
|
+
- Rakefile
|
33
|
+
- README
|
34
|
+
- RUNNING_UNIT_TESTS
|
35
|
+
- lib/active_record/connection_adapters/sqlserver_adapter.rb
|
36
|
+
- lib/core_ext/active_record.rb
|
37
|
+
- lib/core_ext/dbi.rb
|
38
|
+
has_rdoc: true
|
39
|
+
homepage: http://github.com/aq1018/2000-2008-adapter/
|
40
|
+
post_install_message:
|
41
|
+
rdoc_options: []
|
42
|
+
|
43
|
+
require_paths:
|
44
|
+
- lib
|
45
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
46
|
+
requirements:
|
47
|
+
- - ">="
|
48
|
+
- !ruby/object:Gem::Version
|
49
|
+
version: "0"
|
50
|
+
version:
|
51
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
52
|
+
requirements:
|
53
|
+
- - ">="
|
54
|
+
- !ruby/object:Gem::Version
|
55
|
+
version: "0"
|
56
|
+
version:
|
57
|
+
requirements: []
|
58
|
+
|
59
|
+
rubyforge_project:
|
60
|
+
rubygems_version: 1.2.0
|
61
|
+
signing_key:
|
62
|
+
specification_version: 2
|
63
|
+
summary: SQL Server 2000 & 2005 & 2008 Adapter For Rails.
|
64
|
+
test_files:
|
65
|
+
- test/cases/aaaa_create_tables_test_sqlserver.rb
|
66
|
+
- test/cases/adapter_test_sqlserver.rb
|
67
|
+
- test/cases/basics_test_sqlserver.rb
|
68
|
+
- test/cases/calculations_test_sqlserver.rb
|
69
|
+
- test/cases/column_test_sqlserver.rb
|
70
|
+
- test/cases/connection_test_sqlserver.rb
|
71
|
+
- test/cases/eager_association_test_sqlserver.rb
|
72
|
+
- test/cases/inheritance_test_sqlserver.rb
|
73
|
+
- test/cases/migration_test_sqlserver.rb
|
74
|
+
- test/cases/offset_and_limit_test_sqlserver.rb
|
75
|
+
- test/cases/pessimistic_locking_test_sqlserver.rb
|
76
|
+
- test/cases/query_cache_test_sqlserver.rb
|
77
|
+
- test/cases/schema_dumper_test_sqlserver.rb
|
78
|
+
- test/cases/specific_schema_test_sqlserver.rb
|
79
|
+
- test/cases/sqlserver_helper.rb
|
80
|
+
- test/cases/table_name_test_sqlserver.rb
|
81
|
+
- test/cases/unicode_test_sqlserver.rb
|
82
|
+
- test/connections/native_sqlserver/connection.rb
|
83
|
+
- test/connections/native_sqlserver_odbc/connection.rb
|
84
|
+
- test/migrations/transaction_table/1_table_will_never_be_created.rb
|
85
|
+
- test/schema/sqlserver_specific_schema.rb
|