akitaonrails-activerecord-sqlserver-adapter 1.1.0 → 1.1.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,9 @@
1
+ #
2
+ # $Id: version.rb,v 1.1 2006/01/04 02:03:22 francis Exp $
3
+ #
4
+
5
+ module DBI
6
+
7
+ VERSION = "0.0.23"
8
+
9
+ end
@@ -0,0 +1 @@
1
+ require "rails_fcgi/fixes"
@@ -0,0 +1,35 @@
1
+ module ActiveRecord
2
+ module ConnectionAdapters
3
+ class ColumnWithIdentity
4
+ def cast_to_time(value)
5
+ return value if value.is_a?(Time) or value.is_a?(DateTime)
6
+ time_array = ParseDate.parsedate(value)
7
+ time_array[0] ||= 2000
8
+ time_array[1] ||= 1
9
+ time_array[2] ||= 1
10
+ Time.send(Base.default_timezone, *time_array) rescue DateTime.new(*time_array[0..5]) rescue nil
11
+ end
12
+ def cast_to_datetime(value)
13
+ if value.is_a?(Time) or value.is_a?(DateTime)
14
+ if value.year != 0 and value.month != 0 and value.day != 0
15
+ return value
16
+ else
17
+ return Time.mktime(2000, 1, 1, value.hour, value.min, value.sec) rescue nil
18
+ end
19
+ end
20
+ return cast_to_time(value) if value.is_a?(Date) or value.is_a?(String) rescue nil
21
+ value
22
+ end
23
+ end
24
+ end
25
+ end
26
+
27
+ module ActionController
28
+ class Base
29
+ def render_text(text = nil, status = nil)
30
+ @performed_render = true
31
+ @response.headers['status'] = (status || DEFAULT_RENDER_STATUS_CODE).to_s
32
+ @response.body = text
33
+ end
34
+ end
35
+ end
@@ -0,0 +1,43 @@
1
+ # The filename begins with "aaaa" to ensure this is the first test.
2
+ require 'cases/helper'
3
+
4
+ class AAAACreateTablesTestSqlserver < ActiveRecord::TestCase
5
+ self.use_transactional_fixtures = false
6
+
7
+ def setup
8
+ @ar_path = "../../../rails/activerecord/test/schema"
9
+ @base_path = "#{File.dirname(__FILE__)}/fixtures/db_definitions"
10
+ end
11
+
12
+ def test_sqlserver_load_test_schema
13
+ execute_sql_file("#{@base_path}/sqlserver.drop.sql", ActiveRecord::Base.connection)
14
+ execute_sql_file("#{@base_path}/sqlserver.sql", ActiveRecord::Base.connection)
15
+ execute_sql_file("#{@base_path}/sqlserver2.drop.sql", Course.connection)
16
+ execute_sql_file("#{@base_path}/sqlserver2.sql", Course.connection)
17
+ assert true
18
+ end
19
+
20
+ def __test_activerecord_load_test_schema
21
+ eval(File.read("#{@ar_path}/schema.rb"))
22
+ connection = ActiveRecord::Base.connection
23
+ begin
24
+ ActiveRecord::Base.connection = Course.connection
25
+ eval(File.read("#{@ar_path}/schema2.rb"))
26
+ ensure
27
+ ActiveRecord::Base.connection = connection
28
+ end
29
+ assert true
30
+ end
31
+
32
+ private
33
+
34
+ def execute_sql_file(path, connection)
35
+ File.read(path).split(';').each_with_index do |sql, i|
36
+ begin
37
+ connection.execute("\n\n-- statement ##{i}\n#{sql}\n") unless sql.blank?
38
+ rescue ActiveRecord::StatementInvalid
39
+ #$stderr.puts "warning: #{$!}"
40
+ end
41
+ end
42
+ end
43
+ end
@@ -0,0 +1,29 @@
1
+ require 'cases/helper'
2
+ require 'models/topic'
3
+ require 'models/reply'
4
+
5
+ class AffectedRowsTestSqlserver < ActiveRecord::TestCase
6
+ self.use_transactional_fixtures = false
7
+ fixtures :topics
8
+
9
+ def setup
10
+ @first, @second = Topic.find(1, 2).sort_by { |t| t.id }
11
+ end
12
+
13
+ def test_affected_rows
14
+ assert Topic.connection.instance_variable_get("@connection")["AutoCommit"]
15
+
16
+ topic_data = { 1 => { "content" => "1 updated" }, 2 => { "content" => "2 updated" } }
17
+ updated = Topic.update(topic_data.keys, topic_data.values)
18
+
19
+ assert_equal 2, updated.size
20
+ assert_equal "1 updated", Topic.find(1).content
21
+ assert_equal "2 updated", Topic.find(2).content
22
+
23
+ assert_equal 2, Topic.delete_all
24
+ end
25
+
26
+ def test_update_sql_statement_invalid
27
+ assert_raise(ActiveRecord::StatementInvalid) { Topic.connection.update_sql("UPDATE XXX") }
28
+ end
29
+ 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,25 @@
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 => 'localhost',
12
+ :username => 'rails',
13
+ :dsn => 'activerecord_unittest'
14
+ },
15
+ 'arunit2' => {
16
+ :adapter => 'sqlserver',
17
+ :mode => 'ODBC',
18
+ :host => 'localhost',
19
+ :username => 'rails',
20
+ :dsn => 'activerecord_unittest2'
21
+ }
22
+ }
23
+
24
+ ActiveRecord::Base.establish_connection 'arunit'
25
+ Course.establish_connection 'arunit2'
@@ -0,0 +1,35 @@
1
+ DROP TABLE accounts;
2
+ DROP TABLE funny_jokes;
3
+ DROP TABLE companies;
4
+ DROP TABLE topics;
5
+ DROP TABLE developers;
6
+ DROP TABLE projects;
7
+ DROP TABLE developers_projects;
8
+ DROP TABLE customers;
9
+ DROP TABLE orders;
10
+ DROP TABLE movies;
11
+ DROP TABLE subscribers;
12
+ DROP TABLE booleantests;
13
+ DROP TABLE defaults;
14
+ DROP TABLE auto_id_tests;
15
+ DROP TABLE entrants;
16
+ DROP TABLE colnametests;
17
+ DROP TABLE mixins;
18
+ DROP TABLE people;
19
+ DROP TABLE readers;
20
+ DROP TABLE binaries;
21
+ DROP TABLE computers;
22
+ DROP TABLE posts;
23
+ DROP TABLE comments;
24
+ DROP TABLE authors;
25
+ DROP TABLE tasks;
26
+ DROP TABLE categories;
27
+ DROP TABLE categories_posts;
28
+ DROP TABLE fk_test_has_fk;
29
+ DROP TABLE fk_test_has_pk;
30
+ DROP TABLE keyboards;
31
+ DROP TABLE legacy_things;
32
+ DROP TABLE numeric_data;
33
+ DROP TABLE [order];
34
+ DROP TABLE mixed_case_monkeys;
35
+ DROP TABLE minimalistics;
@@ -0,0 +1,247 @@
1
+ CREATE TABLE accounts (
2
+ id int NOT NULL IDENTITY(1, 1) PRIMARY KEY,
3
+ firm_id int default NULL,
4
+ credit_limit int default NULL
5
+ );
6
+
7
+ CREATE TABLE funny_jokes (
8
+ id int NOT NULL IDENTITY(1, 1) PRIMARY KEY,
9
+ name varchar(50) default NULL
10
+ );
11
+
12
+ CREATE TABLE companies (
13
+ id int NOT NULL IDENTITY(1, 1) PRIMARY KEY,
14
+ type varchar(50) default NULL,
15
+ ruby_type varchar(50) default NULL,
16
+ firm_id int default NULL,
17
+ name varchar(50) default NULL,
18
+ client_of int default NULL,
19
+ rating int default 1
20
+ );
21
+
22
+ CREATE TABLE topics (
23
+ id int NOT NULL IDENTITY(1, 1) PRIMARY KEY,
24
+ title varchar(255) default NULL,
25
+ author_name varchar(255) default NULL,
26
+ author_email_address varchar(255) default NULL,
27
+ written_on datetime default NULL,
28
+ bonus_time datetime default NULL,
29
+ last_read datetime default NULL,
30
+ content varchar(255) default NULL,
31
+ approved bit default 1,
32
+ replies_count int default 0,
33
+ parent_id int default NULL,
34
+ type varchar(50) default NULL
35
+ );
36
+
37
+ CREATE TABLE developers (
38
+ id int NOT NULL IDENTITY(1, 1) PRIMARY KEY,
39
+ name varchar(100) default NULL,
40
+ salary int default 70000,
41
+ created_at datetime default NULL,
42
+ updated_at datetime default NULL
43
+ );
44
+
45
+ CREATE TABLE projects (
46
+ id int NOT NULL IDENTITY(1, 1) PRIMARY KEY,
47
+ name varchar(100) default NULL,
48
+ type varchar(255) default NULL
49
+ );
50
+
51
+ CREATE TABLE developers_projects (
52
+ developer_id int NOT NULL,
53
+ project_id int NOT NULL,
54
+ joined_on datetime default NULL,
55
+ access_level int default 1
56
+ );
57
+
58
+ CREATE TABLE orders (
59
+ id int NOT NULL IDENTITY(1, 1) PRIMARY KEY,
60
+ name varchar(100) default NULL,
61
+ billing_customer_id int default NULL,
62
+ shipping_customer_id int default NULL
63
+ );
64
+
65
+
66
+ CREATE TABLE customers (
67
+ id int NOT NULL IDENTITY(1, 1) PRIMARY KEY,
68
+ name varchar(100) default NULL,
69
+ balance int default 0,
70
+ address_street varchar(100) default NULL,
71
+ address_city varchar(100) default NULL,
72
+ address_country varchar(100) default NULL,
73
+ gps_location varchar(100) default NULL
74
+ );
75
+
76
+ CREATE TABLE movies (
77
+ movieid int NOT NULL IDENTITY(1, 1) PRIMARY KEY,
78
+ name varchar(100) default NULL
79
+ );
80
+
81
+ CREATE TABLE subscribers (
82
+ nick varchar(100) NOT NULL PRIMARY KEY,
83
+ name varchar(100) default NULL
84
+ );
85
+
86
+ CREATE TABLE booleantests (
87
+ id int NOT NULL IDENTITY(1, 1) PRIMARY KEY,
88
+ value bit default NULL
89
+ );
90
+
91
+ CREATE TABLE defaults (
92
+ id int NOT NULL IDENTITY(1, 1) PRIMARY KEY,
93
+ -- these brought from the PostgreSQL defaults_test.rb but
94
+ -- tests only exist for integers and decimals, currently
95
+ -- modified_date date default CURRENT_DATE,
96
+ -- modified_date_function date default now(),
97
+ -- fixed_date date default '2004-01-01',
98
+ -- modified_time timestamp default CURRENT_TIMESTAMP,
99
+ -- modified_time_function timestamp default now(),
100
+ -- fixed_time timestamp default '2004-01-01 00:00:00.000000-00',
101
+ -- char1 char(1) default 'Y',
102
+ -- char2 character varying(50) default 'a varchar field',
103
+ -- char3 text default 'a text field',
104
+ positive_integer integer default 1,
105
+ negative_integer integer default -1,
106
+ decimal_number decimal(3,2) default 2.78
107
+ );
108
+
109
+ CREATE TABLE auto_id_tests (
110
+ auto_id int NOT NULL IDENTITY(1, 1) PRIMARY KEY,
111
+ value int default NULL
112
+ );
113
+
114
+ CREATE TABLE entrants (
115
+ id int NOT NULL PRIMARY KEY,
116
+ name varchar(255) NOT NULL,
117
+ course_id int NOT NULL
118
+ );
119
+
120
+ CREATE TABLE colnametests (
121
+ id int NOT NULL IDENTITY(1, 1) PRIMARY KEY,
122
+ [references] int NOT NULL
123
+ );
124
+
125
+ CREATE TABLE mixins (
126
+ id int NOT NULL IDENTITY(1, 1) PRIMARY KEY,
127
+ parent_id int default NULL,
128
+ pos int default NULL,
129
+ created_at datetime default NULL,
130
+ updated_at datetime default NULL,
131
+ lft int default NULL,
132
+ rgt int default NULL,
133
+ root_id int default NULL,
134
+ type varchar(40) default NULL
135
+ );
136
+
137
+ CREATE TABLE people (
138
+ id int NOT NULL IDENTITY(1, 1),
139
+ first_name varchar(40) NULL,
140
+ lock_version int default 0,
141
+ PRIMARY KEY (id)
142
+ );
143
+
144
+ CREATE TABLE readers (
145
+ id int NOT NULL IDENTITY(1, 1),
146
+ post_id int NOT NULL,
147
+ person_id int NOT NULL,
148
+ primary key (id)
149
+ );
150
+
151
+ CREATE TABLE binaries (
152
+ id int NOT NULL IDENTITY(1, 1) PRIMARY KEY,
153
+ data image NULL
154
+ );
155
+
156
+ CREATE TABLE computers (
157
+ id int NOT NULL IDENTITY(1, 1) PRIMARY KEY,
158
+ developer int NOT NULL,
159
+ extendedWarranty int NOT NULL
160
+ );
161
+
162
+ CREATE TABLE posts (
163
+ id int NOT NULL IDENTITY(1, 1) PRIMARY KEY,
164
+ author_id int default NULL,
165
+ title varchar(255) default NULL,
166
+ type varchar(255) default NULL,
167
+ body varchar(4096) default NULL
168
+ );
169
+
170
+ CREATE TABLE comments (
171
+ id int NOT NULL IDENTITY(1, 1) PRIMARY KEY,
172
+ post_id int default NULL,
173
+ type varchar(255) default NULL,
174
+ body varchar(4096) default NULL
175
+ );
176
+
177
+ CREATE TABLE authors (
178
+ id int NOT NULL IDENTITY(1, 1) PRIMARY KEY,
179
+ name varchar(255) default NULL
180
+ );
181
+
182
+ CREATE TABLE tasks (
183
+ id int NOT NULL IDENTITY(1, 1) PRIMARY KEY,
184
+ starting datetime default NULL,
185
+ ending datetime default NULL
186
+ );
187
+
188
+ CREATE TABLE categories (
189
+ id int NOT NULL IDENTITY(1, 1) PRIMARY KEY,
190
+ name varchar(255),
191
+ type varchar(255) default NULL
192
+ );
193
+
194
+ CREATE TABLE categories_posts (
195
+ category_id int NOT NULL,
196
+ post_id int NOT NULL
197
+ );
198
+
199
+ CREATE TABLE fk_test_has_pk (
200
+ id INTEGER NOT NULL PRIMARY KEY
201
+ );
202
+
203
+ CREATE TABLE fk_test_has_fk (
204
+ id INTEGER NOT NULL PRIMARY KEY,
205
+ fk_id INTEGER NOT NULL,
206
+
207
+ FOREIGN KEY (fk_id) REFERENCES fk_test_has_pk(id)
208
+ );
209
+
210
+ CREATE TABLE keyboards (
211
+ key_number int NOT NULL IDENTITY(1, 1) PRIMARY KEY,
212
+ name varchar(50) default NULL
213
+ );
214
+
215
+ --This table has an altered lock_version column name.
216
+ CREATE TABLE legacy_things (
217
+ id int NOT NULL IDENTITY(1, 1),
218
+ tps_report_number int default NULL,
219
+ version int default 0,
220
+ PRIMARY KEY (id)
221
+ );
222
+
223
+ CREATE TABLE numeric_data (
224
+ id int NOT NULL IDENTITY(1, 1),
225
+ bank_balance decimal(10,2),
226
+ big_bank_balance decimal(15,2),
227
+ world_population decimal(10),
228
+ my_house_population decimal(2),
229
+ decimal_number_with_default decimal(3,2) DEFAULT 2.78
230
+ );
231
+
232
+ CREATE TABLE [order] (
233
+ id int NOT NULL IDENTITY(1, 1) PRIMARY KEY,
234
+ color varchar(255),
235
+ fruit_size varchar(255),
236
+ texture varchar(255),
237
+ flavor varchar(255)
238
+ );
239
+
240
+ CREATE TABLE mixed_case_monkeys (
241
+ [monkeyID] int NOT NULL IDENTITY(1, 1),
242
+ [fleaCount] int default NULL
243
+ );
244
+
245
+ CREATE TABLE minimalistics (
246
+ id int NOT NULL IDENTITY(1, 1) PRIMARY KEY
247
+ );