ibm_db 0.9.5 → 0.10.0
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGES +5 -0
- data/README +63 -97
- data/ext/ibm_db.c +20 -4
- data/ext/ruby_ibm_db.h +10 -0
- data/lib/active_record/connection_adapters/ibm_db_adapter.rb +2 -4
- data/test/{adapter_test.rb → cases/adapter_test.rb} +39 -14
- data/test/cases/associations/cascaded_eager_loading_test.rb +113 -0
- data/test/{associations → cases/associations}/eager_test.rb +231 -65
- data/test/cases/associations/has_and_belongs_to_many_associations_test.rb +686 -0
- data/test/cases/associations/join_model_test.rb +797 -0
- data/test/{base_test.rb → cases/base_test.rb} +605 -385
- data/test/cases/calculations_test.rb +275 -0
- data/test/cases/finder_test.rb +885 -0
- data/test/cases/fixtures_test.rb +630 -0
- data/test/{migration_test.rb → cases/migration_test.rb} +530 -146
- data/test/cases/query_cache_test.rb +127 -0
- data/test/cases/validations_test.rb +1509 -0
- data/test/connections/native_ibm_db/connection.rb +1 -1
- data/test/models/warehouse_thing.rb +5 -0
- data/test/schema/i5/ibm_db_specific_schema.rb +133 -0
- data/test/schema/ids/ibm_db_specific_schema.rb +136 -0
- data/test/schema/luw/ibm_db_specific_schema.rb +133 -0
- data/test/schema/schema.rb +432 -0
- data/test/schema/zOS/ibm_db_specific_schema.rb +204 -0
- metadata +29 -33
- data/test/associations_test.rb +0 -2151
- data/test/fixtures/db_definitions/i5/ibm_db.drop.sql +0 -33
- data/test/fixtures/db_definitions/i5/ibm_db.sql +0 -236
- data/test/fixtures/db_definitions/i5/ibm_db2.drop.sql +0 -2
- data/test/fixtures/db_definitions/i5/ibm_db2.sql +0 -5
- data/test/fixtures/db_definitions/ids/ibm_db.drop.sql +0 -33
- data/test/fixtures/db_definitions/ids/ibm_db.sql +0 -237
- data/test/fixtures/db_definitions/ids/ibm_db2.drop.sql +0 -2
- data/test/fixtures/db_definitions/ids/ibm_db2.sql +0 -5
- data/test/fixtures/db_definitions/luw/ibm_db.drop.sql +0 -33
- data/test/fixtures/db_definitions/luw/ibm_db.sql +0 -236
- data/test/fixtures/db_definitions/luw/ibm_db2.drop.sql +0 -2
- data/test/fixtures/db_definitions/luw/ibm_db2.sql +0 -5
- data/test/fixtures/db_definitions/schema.rb +0 -361
- data/test/fixtures/db_definitions/zOS/ibm_db.drop.sql +0 -33
- data/test/fixtures/db_definitions/zOS/ibm_db.sql +0 -288
- data/test/fixtures/db_definitions/zOS/ibm_db2.drop.sql +0 -2
- data/test/fixtures/db_definitions/zOS/ibm_db2.sql +0 -7
- data/test/locking_test.rb +0 -282
data/CHANGES
CHANGED
@@ -1,5 +1,10 @@
|
|
1
1
|
Change Log
|
2
2
|
==============
|
3
|
+
2008/09/01 (IBM_DB adapter 0.10.0, driver 0.10.0):
|
4
|
+
- Added Trusted Context support in Driver
|
5
|
+
- Made changes for the correct Mapping of Informix DataTypes to Ruby DataTypes
|
6
|
+
- ActiveRecord-2.1.0 test suite changes appropriate for DB2/IDS is been updated
|
7
|
+
|
3
8
|
2008/06/24 (IBM_DB adapter 0.9.5, driver 0.9.5):
|
4
9
|
- Fixed Bug [#19222] --> Fixed fixture insertion of LOB columns for DB2
|
5
10
|
- Fixed Bug [#19970] --> Fixed Table schema dumper also dump views
|
data/README
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
=====================================================================
|
2
|
-
README for the IBM_DB Adapter 0.
|
2
|
+
README for the IBM_DB Adapter (0.10.0) and Driver (0.10.0) (2008/09/01)
|
3
3
|
For ActiveRecord Version >= 1.15.5 (and Rails >= 1.2.5)
|
4
4
|
=====================================================================
|
5
5
|
|
@@ -14,7 +14,7 @@ Supported Operating Systems
|
|
14
14
|
|
15
15
|
Supported Databases
|
16
16
|
====================
|
17
|
-
- IBM DB2 Universal Database on Linux/Unix/Windows versions 8 and
|
17
|
+
- IBM DB2 Universal Database on Linux/Unix/Windows versions 8 Fixpak15 or 9 Fixpak2 and above
|
18
18
|
- Remote connections to IBM DB2 Universal Database on i5/OS versions V5R3 and V5R4.
|
19
19
|
Please ensure PTF SI27358 (includes SI27250) is installed in i5/OS version 5R3 and
|
20
20
|
and PTF SI27256 is installed while using i5/OS version 5R4.
|
@@ -23,19 +23,15 @@ Supported Databases
|
|
23
23
|
Please ensure that the IBM DataServer Viper 2 client is installed.
|
24
24
|
|
25
25
|
|
26
|
-
|
27
|
-
A. Installing as a Ruby gem in the Ruby runtime
|
28
|
-
B. Installing as a Rails plugin in a specific Rails application runtime
|
29
|
-
Note: The IBM_DB driver can also be built separately (from source) and used in direct API calls.
|
30
|
-
|
31
|
-
A. Installing the IBM_DB adapter and driver as a Ruby gem
|
26
|
+
Installing the IBM_DB adapter and driver as a Ruby gem
|
32
27
|
=======================================================
|
33
|
-
The IBM_DB gem is an ActiveRecord adapter
|
34
|
-
in the list of RAILS_CONNECTION_ADAPTERS (active_record.rb) before it can be utilized in
|
35
|
-
the Rails framework. Once registered, the IBM_DB adapter and its dependencies (ibm_db Ruby
|
36
|
-
driver and the IBM Driver for ODBC and CLI) are loaded. This enables any application in the
|
28
|
+
The IBM_DB gem is an ActiveRecord adapter. Installing the IBM_DB adapter and driver as a gem enables any application in the
|
37
29
|
Ruby environment, including Rails, to interact with IBM data servers.
|
38
30
|
|
31
|
+
Note : - 1) If using activerecord version below 2.0 then it requires that the ibm_db adapter be registered with the list of connection adapters by manually adding ibm_db at line 77 (approx) in the file activerecord.rb (GEM_HOME\activerecord-<version>\lib\).
|
32
|
+
|
33
|
+
2) The IBM_DB driver can also be built separately (from source) and used in direct API calls.
|
34
|
+
|
39
35
|
1. Windows platforms:
|
40
36
|
=====================
|
41
37
|
INSTALL (as Ruby gem)
|
@@ -47,31 +43,26 @@ Ruby environment, including Rails, to interact with IBM data servers.
|
|
47
43
|
D:\>gem install ibm_db
|
48
44
|
Bulk updating gem source index for: http://gems.rubyforge.org
|
49
45
|
Select which gem to install for your platform (i386-mswin32)
|
50
|
-
1. ibm_db 0.
|
51
|
-
2. ibm_db 0.
|
52
|
-
3. ibm_db 0.
|
53
|
-
4. ibm_db 0.
|
46
|
+
1. ibm_db 0.9.5 (mswin32)
|
47
|
+
2. ibm_db 0.9.5 (ruby)
|
48
|
+
3. ibm_db 0.9.4 (mswin32)
|
49
|
+
4. ibm_db 0.9.4 (ruby)
|
54
50
|
|
55
51
|
Running gem install ibm_db you are presented with two choices for each release
|
56
|
-
(mswin32 or ruby).
|
57
|
-
binary file
|
52
|
+
(mswin32 or ruby)choose mswin32. This will install the IBM_DB gem containing
|
53
|
+
the pre-built binary file of the driver which is a C-extension of Ruby.
|
58
54
|
|
59
55
|
TEST (simple gem install verification)
|
60
|
-
Note:
|
61
|
-
add ibm_db into
|
62
|
-
D:\NewApp
|
56
|
+
Note: The manual step after install if using activerecord version below 2.0:
|
57
|
+
add ibm_db into GEM_HOME\1.8\gems\activerecord-1.15.3\lib\active_record.rb (Line 77)
|
58
|
+
D:\rails NewApp
|
59
|
+
D:\cd NewApp
|
63
60
|
D:\NewApp>irb
|
64
61
|
irb(main):001:0> gem 'ibm_db'
|
65
62
|
irb(main):002:0> require 'mswin32/ibm_db' // notice the [mswin32] in the library path
|
66
63
|
irb(main):003:0> IBM_DB::connect 'sample', 'db2admin', 'secret'
|
67
64
|
D:\NewApp>ruby script\console
|
68
65
|
|
69
|
-
BUILD (optionally) ibm_db gem from sources (ibm_db-x.x.x.tar.gz):
|
70
|
-
1. Download source from Rubyforge
|
71
|
-
http://rubyforge.org/frs/?group_id=2361
|
72
|
-
2. Build gem from specification (IBM_DB.gemspec)
|
73
|
-
D:\IBM_DB_Adapter\ibm_db>gem build IBM_DB.gemspec
|
74
|
-
|
75
66
|
|
76
67
|
2. Linux and Unix platforms:
|
77
68
|
============================
|
@@ -88,13 +79,13 @@ Ruby environment, including Rails, to interact with IBM data servers.
|
|
88
79
|
$ export IBM_DB_LIB=/opt/ibm/db2/V9.1/lib32
|
89
80
|
$ gem install ibm_db
|
90
81
|
Select which gem to install for your platform (i686-linux)
|
91
|
-
1. ibm_db 0.
|
92
|
-
2. ibm_db 0.
|
93
|
-
3. ibm_db 0.
|
94
|
-
4. ibm_db 0.
|
82
|
+
1. ibm_db 0.9.5 (mswin32)
|
83
|
+
2. ibm_db 0.9.5 (ruby)
|
84
|
+
3. ibm_db 0.9.4 (ruby)
|
85
|
+
4. ibm_db 0.9.4 (mswin32)
|
95
86
|
...
|
96
87
|
Running gem install ibm_db you are presented with two choices for each release
|
97
|
-
(mswin32 or ruby)
|
88
|
+
(mswin32 or ruby) choose ruby. This will build the native extension (ibm_db driver) and installs the ibm_db gem.
|
98
89
|
...
|
99
90
|
> 2
|
100
91
|
Building native extensions. This could take a while...
|
@@ -103,14 +94,13 @@ Ruby environment, including Rails, to interact with IBM data servers.
|
|
103
94
|
Installing RDoc documentation for ibm_db-0.6.5...
|
104
95
|
|
105
96
|
TEST (simple gem install verification)
|
106
|
-
Note:
|
107
|
-
add ibm_db into
|
108
|
-
$ ls -al vendor/plugins/
|
97
|
+
Note: The manual step after install if using activerecord version below 2.0 is:
|
98
|
+
add ibm_db into GEM_HOME\1.8\gems\activerecord-1.15.3\lib\active_record.rb (Line 77)
|
109
99
|
$ irb
|
110
100
|
irb(main):001:0> gem 'ibm_db'
|
111
101
|
irb(main):002:0> require 'ibm_db' // notice the library path (different on win32, use require 'mswin32/ibm_db')
|
112
102
|
irb(main):003:0> IBM_DB::connect 'sample', 'db2admin', 'secret'
|
113
|
-
$
|
103
|
+
$
|
114
104
|
|
115
105
|
BUILD (optionally) ibm_db gem from sources (ibm_db-x.x.x.tar.gz):
|
116
106
|
1. Download source from Rubyforge
|
@@ -120,66 +110,11 @@ Ruby environment, including Rails, to interact with IBM data servers.
|
|
120
110
|
$ gem build IBM_DB.gemspec
|
121
111
|
|
122
112
|
|
123
|
-
B. Installing the IBM_DB adapter and driver as a Rails plugin
|
124
|
-
=============================================================
|
125
|
-
IBM_DB adapter and driver install as plugin provides support for IBM data servers
|
126
|
-
within the scope of a specific and individual Rails application. Rails plugins do
|
127
|
-
not offer the version management specific to Ruby gems, but does provide an
|
128
|
-
initialization mechanism which allows the IBM_DB plugin to self-insert into the
|
129
|
-
ActiveRecord's list of supported adapters: RAILS_CONNECTION_ADAPTERS. Therefore,
|
130
|
-
after installing IBM_DB as plugin in your Rails application, no manual step is required
|
131
|
-
for the Rails framework to load it.
|
132
|
-
|
133
|
-
1. Windows platforms
|
134
|
-
=====================
|
135
|
-
Register Repository and Query:
|
136
|
-
|
137
|
-
A. Download and install Subversion (SVN) client from:
|
138
|
-
http://subversion.tigris.org/servlets/ProjectDocumentList?folderID=91
|
139
|
-
Register rubyibm project as plugin source
|
140
|
-
D:\NewApp>ruby script\plugin source svn://rubyforge.org/var/svn/rubyibm/trunk/IBM_DB_Adapter/
|
141
|
-
|
142
|
-
B. Accessing RubyForge repository through HTTP (no SVN client required) is NOT YET ENABLED
|
143
|
-
D:\NewApp>ruby script\plugin source http://rubyibm.rubyforge.org/IBM_DB_Adapter/
|
144
|
-
|
145
|
-
LIST plugin
|
146
|
-
D:\NewApp>ruby script\plugin list
|
147
|
-
|
148
|
-
INSTALL (as Rails plugin)
|
149
|
-
D:\NewApp>ruby script\plugin install ibm_db
|
150
|
-
|
151
|
-
TEST (simple plugin install verification)
|
152
|
-
Note: Make sure there's no ibm_db in gems\1.8\gems\activerecord-1.15.3\lib\active_record.rb (Line 77)
|
153
|
-
D:\NewApp>ruby script\console
|
154
|
-
|
155
|
-
2. Linux and Unix platforms
|
156
|
-
===========================
|
157
|
-
Register Repository and Query:
|
158
|
-
|
159
|
-
A. Ensure Subversion (SVN) client is installed or download from:
|
160
|
-
http://subversion.tigris.org/project_packages.html
|
161
|
-
Register rubyibm project as plugin source
|
162
|
-
$ ./script/plugin source svn://rubyforge.org/var/svn/rubyibm/trunk/IBM_DB_Adapter/
|
163
|
-
|
164
|
-
B. Accessing RubyForge repository through HTTP (no SVN client required) is NOT YET ENABLED
|
165
|
-
$ ./script/plugin source http://rubyibm.rubyforge.org/IBM_DB_Adapter/
|
166
|
-
|
167
|
-
LIST plugin
|
168
|
-
$ ./script/plugin list
|
169
|
-
|
170
|
-
INSTALL (as Rails plugin)
|
171
|
-
$ ./script/plugin install ibm_db
|
172
|
-
|
173
|
-
TEST (simple plugin install verification)
|
174
|
-
Note: Make sure there's no ibm_db in /gems/activerecord-1.15.3/lib/active_record.rb (Line 77)
|
175
|
-
$ ./script/console
|
176
|
-
|
177
|
-
|
178
113
|
Instructions for building and installing the IBM_DB driver from source
|
179
114
|
=======================================================================
|
180
|
-
Building the driver manually as described below is not required if
|
181
|
-
|
182
|
-
on Linux and UNIX platforms by the IBM_DB gem
|
115
|
+
Building the driver manually as described below is not required if the install
|
116
|
+
process above has been pursued. This manual procedure is in fact automated
|
117
|
+
on Linux and UNIX platforms by the IBM_DB gem install, but is presented
|
183
118
|
here only for reference, and also involves running the unit tests.
|
184
119
|
|
185
120
|
Prerequisites:
|
@@ -235,7 +170,7 @@ Limitations and known problems
|
|
235
170
|
==============================
|
236
171
|
- ActiveRecord rename_column method is not supported for DB2 LUW, zOS and i5
|
237
172
|
- ActiveRecord remove_column method is not supported for DB2 zOS
|
238
|
-
- The following tests from the ActiveRecord 1.15.3 test suite are expected to fail
|
173
|
+
- The following tests from the ActiveRecord 1.15.3 test suite with ibm_db gem < 0.9.5 are expected to fail
|
239
174
|
- test_limited_eager_with_multiple_order_columns
|
240
175
|
- test_limited_eager_with_order
|
241
176
|
- test_assign_ids_ignoring_blanks
|
@@ -267,7 +202,7 @@ Limitations and known problems
|
|
267
202
|
To enable this parameter, you need to restart your DB2 instance.
|
268
203
|
- If you see connectivity issues with Informix Dynamic Server, please ensure that the server is configured to accept DRDA connections.
|
269
204
|
Please refer to http://publib.boulder.ibm.com/infocenter/idshelp/v111/index.jsp?topic=/com.ibm.admin.doc/admin154.htm for more information.
|
270
|
-
- The following tests from the ActiveRecord 1.15.3 test suite are expected to fail on Informix Dynamic Server
|
205
|
+
- The following tests from the ActiveRecord 1.15.3 test suite with ibm_db gem < 0.9.5 are expected to fail on Informix Dynamic Server
|
271
206
|
- test_quote
|
272
207
|
- test_to_xml
|
273
208
|
- test_should_calculate_grouped_by_function
|
@@ -292,7 +227,38 @@ Limitations and known problems
|
|
292
227
|
The patch is required because, ActiveRecord 2.1.0 generates a non-standard SQL identifier,while preloading has_and_belongs_to_many associations,
|
293
228
|
which standard compliant databases like DB2 do not support. The bug report, against ActiveRecord, can be found in the link below
|
294
229
|
http://rails.lighthouseapp.com/projects/8994/tickets/394-patch-fixed-non-standard-sql-generated-by-preloading-has_and_belongs_to_many-associations
|
295
|
-
- ActiveRecord-2.1.0 test suite changes appropriate for DB2/IDS will be updated in the next release of the gem.
|
230
|
+
- ActiveRecord-2.1.0 test suite changes appropriate for DB2/IDS will be updated in the next release of the gem.(Updated in release 0.10.0)
|
231
|
+
- The following tests from the ActiveRecord 2.1.0 test suite with ibm_db gem 0.10.0 are expected to fail on DB2 LUW
|
232
|
+
- test_read_attributes_before_type_cast_on_datetime
|
233
|
+
- test_to_xml
|
234
|
+
- test_native_types
|
235
|
+
- test_counting
|
236
|
+
- test_counting_with_column_name_and_hash
|
237
|
+
- test_counting_with_empty_hash_conditions
|
238
|
+
- test_counting_with_single_conditions
|
239
|
+
- test_counting_with_single_hash
|
240
|
+
Note :- 1) The test cases from HasManyAssociations (4-8) above are found failing only when run as part of
|
241
|
+
the complete suite. However they pass when run standalone.
|
242
|
+
2) Also there are two test cases (test_validate_uniqueness_with_non_standard_table_names, test_update_all_with_non_standard_table_name)which run against table with non-standard name. Given that DB2/IDS is standard compliant these test cases are expected to fail.
|
243
|
+
To have these test cases passing rename the fixtures file warehouse-things to warehouse_things.
|
244
|
+
- The following tests from the ActiveRecord 2.1.0 test suite with ibm_db gem 0.10.0 are expected to fail on Informix Dynamic Server
|
245
|
+
- test_attributes_on_dummy_time
|
246
|
+
- test_quote
|
247
|
+
- test_read_attributes_before_type_cast_on_datetime
|
248
|
+
- test_save_for_record_with_only_primary_key
|
249
|
+
- test_save_for_record_with_only_primary_key_that_is_provided
|
250
|
+
- test_to_xml
|
251
|
+
- test_utc_as_time_zone
|
252
|
+
- test_should_calculate_grouped_by_function
|
253
|
+
- test_should_calculate_grouped_by_function_with_table_alias
|
254
|
+
- test_include_query
|
255
|
+
- test_binary_in_fixtures
|
256
|
+
- test_inserts_with_pre_and_suffix
|
257
|
+
- test_create
|
258
|
+
- test_add_column_with_precision_and_scale
|
259
|
+
- test_add_table_with_decimals
|
260
|
+
- test_native_types
|
261
|
+
- test_schema_dump_includes_decimal_options
|
296
262
|
|
297
263
|
To Do
|
298
264
|
====
|
data/ext/ibm_db.c
CHANGED
@@ -10,7 +10,7 @@
|
|
10
10
|
+----------------------------------------------------------------------+
|
11
11
|
*/
|
12
12
|
|
13
|
-
#define MODULE_RELEASE "0.
|
13
|
+
#define MODULE_RELEASE "0.10.0"
|
14
14
|
|
15
15
|
#ifdef HAVE_CONFIG_H
|
16
16
|
#include "config.h"
|
@@ -559,6 +559,14 @@ void ruby_init_ibm_db()
|
|
559
559
|
rb_define_const(mDB, "SQL_AUTOCOMMIT_ON", INT2NUM(SQL_AUTOCOMMIT_ON));
|
560
560
|
/* Specifies whether to use auto-commit or manual commit mode */
|
561
561
|
rb_define_const(mDB, "SQL_ATTR_AUTOCOMMIT", INT2NUM(SQL_ATTR_AUTOCOMMIT));
|
562
|
+
/* Specifies whether to enable trusted context mode */
|
563
|
+
rb_define_const(mDB, "SQL_TRUE", INT2NUM(SQL_TRUE));
|
564
|
+
/* Specifies whether to enable trusted context mode */
|
565
|
+
rb_define_const(mDB, "SQL_ATTR_USE_TRUSTED_CONTEXT", INT2NUM(SQL_ATTR_USE_TRUSTED_CONTEXT));
|
566
|
+
/* Specifies whether to siwtch trusted user */
|
567
|
+
rb_define_const(mDB, "SQL_ATTR_TRUSTED_CONTEXT_USERID", INT2NUM(SQL_ATTR_TRUSTED_CONTEXT_USERID));
|
568
|
+
/* Specifies when trusted user is specified */
|
569
|
+
rb_define_const(mDB, "SQL_ATTR_TRUSTED_CONTEXT_PASSWORD", INT2NUM(SQL_ATTR_TRUSTED_CONTEXT_PASSWORD));
|
562
570
|
/* String used to identify the client user ID sent to the host database */
|
563
571
|
rb_define_const(mDB, "SQL_ATTR_INFO_USERID", INT2NUM(SQL_ATTR_INFO_USERID));
|
564
572
|
/* String used to identify the client workstation name sent to the host database */
|
@@ -815,6 +823,7 @@ static int _ruby_ibm_db_parse_options ( VALUE options, int type, void *handle )
|
|
815
823
|
VALUE keys;
|
816
824
|
VALUE key; /* Holds the Option Index Key */
|
817
825
|
VALUE data;
|
826
|
+
VALUE tc_pass = Qnil;
|
818
827
|
|
819
828
|
if ( !NIL_P(options) ) {
|
820
829
|
keys = rb_funcall(options, id_keys, 0);
|
@@ -824,9 +833,16 @@ static int _ruby_ibm_db_parse_options ( VALUE options, int type, void *handle )
|
|
824
833
|
key = rb_ary_entry(keys,i);
|
825
834
|
data = rb_hash_aref(options,key);
|
826
835
|
|
827
|
-
|
828
|
-
|
829
|
-
|
836
|
+
if (NUM2LONG(key) == SQL_ATTR_TRUSTED_CONTEXT_PASSWORD) {
|
837
|
+
tc_pass = data;
|
838
|
+
} else {
|
839
|
+
/* Assign options to handle. */
|
840
|
+
/* Sets the options in the handle with CLI/ODBC calls */
|
841
|
+
_ruby_ibm_db_assign_options( handle, type, NUM2LONG(key), data );
|
842
|
+
}
|
843
|
+
}
|
844
|
+
if ( !NIL_P(tc_pass) ) {
|
845
|
+
_ruby_ibm_db_assign_options( handle, type, SQL_ATTR_TRUSTED_CONTEXT_PASSWORD, tc_pass );
|
830
846
|
}
|
831
847
|
}
|
832
848
|
|
data/ext/ruby_ibm_db.h
CHANGED
@@ -21,6 +21,16 @@
|
|
21
21
|
#define SQL_XML -370
|
22
22
|
#endif
|
23
23
|
|
24
|
+
/* SQL_ATTR_USE_TRUSTED_CONTEXT,
|
25
|
+
* SQL_ATTR_TRUSTED_CONTEXT_USERID and
|
26
|
+
* SQL_ATTR_TRUSTED_CONTEXT_PASSWORD
|
27
|
+
* not defined prior to DB2 v9 */
|
28
|
+
#ifndef SQL_ATTR_USE_TRUSTED_CONTEXT
|
29
|
+
#define SQL_ATTR_USE_TRUSTED_CONTEXT 2561
|
30
|
+
#define SQL_ATTR_TRUSTED_CONTEXT_USERID 2562
|
31
|
+
#define SQL_ATTR_TRUSTED_CONTEXT_PASSWORD 2563
|
32
|
+
#endif
|
33
|
+
|
24
34
|
#ifndef SQL_ATTR_REPLACE_QUOTED_LITERALS
|
25
35
|
#define SQL_ATTR_REPLACE_QUOTED_LITERALS 2586
|
26
36
|
#endif
|
@@ -196,13 +196,13 @@ requires credentials: username and password"
|
|
196
196
|
:binary
|
197
197
|
when /smallint/i
|
198
198
|
:boolean
|
199
|
-
when /int/i
|
199
|
+
when /int|serial/i
|
200
200
|
:integer
|
201
201
|
when /float|double|real/i
|
202
202
|
:float
|
203
203
|
when /decimal|numeric/i
|
204
204
|
:decimal
|
205
|
-
when /timestamp/i
|
205
|
+
when /timestamp|datetime/i
|
206
206
|
:timestamp
|
207
207
|
when /time/i
|
208
208
|
:time
|
@@ -218,8 +218,6 @@ requires credentials: username and password"
|
|
218
218
|
:string
|
219
219
|
when /boolean/i
|
220
220
|
:boolean
|
221
|
-
when /serial/i
|
222
|
-
:serial
|
223
221
|
when /rowid/i # rowid is a supported datatype on z/OS and i/5
|
224
222
|
:rowid
|
225
223
|
end
|
@@ -1,6 +1,6 @@
|
|
1
|
-
require
|
1
|
+
require "cases/helper"
|
2
2
|
|
3
|
-
class
|
3
|
+
class AdapterTest < ActiveRecord::TestCase
|
4
4
|
def setup
|
5
5
|
@connection = ActiveRecord::Base.connection
|
6
6
|
end
|
@@ -34,7 +34,7 @@ class IBMDBAdapterTest < Test::Unit::TestCase
|
|
34
34
|
end
|
35
35
|
|
36
36
|
if @connection.respond_to?(:application)
|
37
|
-
|
37
|
+
ActiveRecord::Base.connection.application = 'new_app'
|
38
38
|
assert_equal 'new_app', ActiveRecord::Base.connection.application
|
39
39
|
else
|
40
40
|
warn "#{@connection.class} does not support client connection attribute SQL_ATTR_INFO_APPLNAME"
|
@@ -50,15 +50,16 @@ class IBMDBAdapterTest < Test::Unit::TestCase
|
|
50
50
|
end
|
51
51
|
|
52
52
|
def test_tables
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
53
|
+
tables = @connection.tables
|
54
|
+
assert tables.include?("accounts")
|
55
|
+
assert tables.include?("authors")
|
56
|
+
assert tables.include?("tasks")
|
57
|
+
assert tables.include?("topics")
|
58
|
+
end
|
59
|
+
|
60
|
+
def test_table_exists?
|
61
|
+
assert @connection.table_exists?("accounts")
|
62
|
+
assert !@connection.table_exists?("nonexistingtable")
|
62
63
|
end
|
63
64
|
|
64
65
|
def test_indexes
|
@@ -120,14 +121,15 @@ class IBMDBAdapterTest < Test::Unit::TestCase
|
|
120
121
|
assert_equal 'dbo_posts', @connection.table_alias_for('dbo.posts')
|
121
122
|
|
122
123
|
class << @connection
|
124
|
+
remove_method :table_alias_length
|
123
125
|
alias_method :table_alias_length, :old_table_alias_length
|
124
126
|
end
|
125
127
|
end
|
126
128
|
|
127
129
|
# test resetting sequences in odd tables in postgreSQL
|
128
130
|
if ActiveRecord::Base.connection.respond_to?(:reset_pk_sequence!)
|
129
|
-
require '
|
130
|
-
require '
|
131
|
+
require 'models/movie'
|
132
|
+
require 'models/subscriber'
|
131
133
|
|
132
134
|
def test_reset_empty_table_with_custom_pk
|
133
135
|
Movie.delete_all
|
@@ -146,4 +148,27 @@ class IBMDBAdapterTest < Test::Unit::TestCase
|
|
146
148
|
end
|
147
149
|
end
|
148
150
|
|
151
|
+
unless current_adapter?(:IBM_DBAdapter)
|
152
|
+
def test_add_limit_offset_should_sanitize_sql_injection_for_limit_without_comas
|
153
|
+
sql_inject = "1 select * from schema"
|
154
|
+
assert_equal " LIMIT 1", @connection.add_limit_offset!("", :limit=>sql_inject)
|
155
|
+
if current_adapter?(:MysqlAdapter)
|
156
|
+
assert_equal " LIMIT 7, 1", @connection.add_limit_offset!("", :limit=>sql_inject, :offset=>7)
|
157
|
+
else
|
158
|
+
assert_equal " LIMIT 1 OFFSET 7", @connection.add_limit_offset!("", :limit=>sql_inject, :offset=>7)
|
159
|
+
end
|
160
|
+
end
|
161
|
+
|
162
|
+
def test_add_limit_offset_should_sanitize_sql_injection_for_limit_with_comas
|
163
|
+
sql_inject = "1, 7 procedure help()"
|
164
|
+
if current_adapter?(:MysqlAdapter)
|
165
|
+
assert_equal " LIMIT 1,7", @connection.add_limit_offset!("", :limit=>sql_inject)
|
166
|
+
assert_equal " LIMIT 7, 1", @connection.add_limit_offset!("", :limit=>sql_inject, :offset=>7)
|
167
|
+
else
|
168
|
+
assert_equal " LIMIT 1,7", @connection.add_limit_offset!("", :limit=>sql_inject)
|
169
|
+
assert_equal " LIMIT 1,7 OFFSET 7", @connection.add_limit_offset!("", :limit=>sql_inject, :offset=>7)
|
170
|
+
end
|
171
|
+
end
|
172
|
+
end
|
173
|
+
|
149
174
|
end
|
@@ -0,0 +1,113 @@
|
|
1
|
+
require "cases/helper"
|
2
|
+
require 'models/post'
|
3
|
+
require 'models/comment'
|
4
|
+
require 'models/author'
|
5
|
+
require 'models/category'
|
6
|
+
require 'models/categorization'
|
7
|
+
require 'models/company'
|
8
|
+
require 'models/topic'
|
9
|
+
require 'models/reply'
|
10
|
+
|
11
|
+
class CascadedEagerLoadingTest < ActiveRecord::TestCase
|
12
|
+
fixtures :authors, :mixins, :companies, :posts, :topics
|
13
|
+
|
14
|
+
def test_eager_association_loading_with_cascaded_two_levels
|
15
|
+
authors = Author.find(:all, :include=>{:posts=>:comments}, :order=>"authors.id")
|
16
|
+
assert_equal 2, authors.size
|
17
|
+
assert_equal 5, authors[0].posts.size
|
18
|
+
assert_equal 1, authors[1].posts.size
|
19
|
+
assert_equal 9, authors[0].posts.collect{|post| post.comments.size }.inject(0){|sum,i| sum+i}
|
20
|
+
end
|
21
|
+
|
22
|
+
def test_eager_association_loading_with_cascaded_two_levels_and_one_level
|
23
|
+
authors = Author.find(:all, :include=>[{:posts=>:comments}, :categorizations], :order=>"authors.id")
|
24
|
+
assert_equal 2, authors.size
|
25
|
+
assert_equal 5, authors[0].posts.size
|
26
|
+
assert_equal 1, authors[1].posts.size
|
27
|
+
assert_equal 9, authors[0].posts.collect{|post| post.comments.size }.inject(0){|sum,i| sum+i}
|
28
|
+
assert_equal 1, authors[0].categorizations.size
|
29
|
+
assert_equal 2, authors[1].categorizations.size
|
30
|
+
end
|
31
|
+
|
32
|
+
def test_eager_association_loading_with_cascaded_two_levels_with_two_has_many_associations
|
33
|
+
authors = Author.find(:all, :include=>{:posts=>[:comments, :categorizations]}, :order=>"authors.id")
|
34
|
+
assert_equal 2, authors.size
|
35
|
+
assert_equal 5, authors[0].posts.size
|
36
|
+
assert_equal 1, authors[1].posts.size
|
37
|
+
assert_equal 9, authors[0].posts.collect{|post| post.comments.size }.inject(0){|sum,i| sum+i}
|
38
|
+
end
|
39
|
+
|
40
|
+
def test_eager_association_loading_with_cascaded_two_levels_and_self_table_reference
|
41
|
+
authors = Author.find(:all, :include=>{:posts=>[:comments, :author]}, :order=>"authors.id")
|
42
|
+
assert_equal 2, authors.size
|
43
|
+
assert_equal 5, authors[0].posts.size
|
44
|
+
assert_equal authors(:david).name, authors[0].name
|
45
|
+
assert_equal [authors(:david).name], authors[0].posts.collect{|post| post.author.name}.uniq
|
46
|
+
end
|
47
|
+
|
48
|
+
def test_eager_association_loading_with_cascaded_two_levels_with_condition
|
49
|
+
authors = Author.find(:all, :include=>{:posts=>:comments}, :conditions=>"authors.id=1", :order=>"authors.id")
|
50
|
+
assert_equal 1, authors.size
|
51
|
+
assert_equal 5, authors[0].posts.size
|
52
|
+
end
|
53
|
+
|
54
|
+
def test_eager_association_loading_with_cascaded_three_levels_by_ping_pong
|
55
|
+
firms = Firm.find(:all, :include=>{:account=>{:firm=>:account}}, :order=>"companies.id")
|
56
|
+
assert_equal 2, firms.size
|
57
|
+
assert_equal firms.first.account, firms.first.account.firm.account
|
58
|
+
assert_equal companies(:first_firm).account, assert_no_queries { firms.first.account.firm.account }
|
59
|
+
assert_equal companies(:first_firm).account.firm.account, assert_no_queries { firms.first.account.firm.account }
|
60
|
+
end
|
61
|
+
|
62
|
+
def test_eager_association_loading_with_has_many_sti
|
63
|
+
topics = Topic.find(:all, :include => :replies, :order => 'topics.id')
|
64
|
+
first, second, = topics(:first).replies.size, topics(:second).replies.size
|
65
|
+
assert_no_queries do
|
66
|
+
assert_equal first, topics[0].replies.size
|
67
|
+
assert_equal second, topics[1].replies.size
|
68
|
+
end
|
69
|
+
end
|
70
|
+
|
71
|
+
def test_eager_association_loading_with_belongs_to_sti
|
72
|
+
replies = Reply.find(:all, :include => :topic, :order => 'topics.id')
|
73
|
+
assert replies.include?(topics(:second))
|
74
|
+
assert !replies.include?(topics(:first))
|
75
|
+
assert_equal topics(:first), assert_no_queries { replies.first.topic }
|
76
|
+
end
|
77
|
+
|
78
|
+
unless current_adapter?(:IBM_DBAdapter)
|
79
|
+
def test_eager_association_loading_with_multiple_stis_and_order
|
80
|
+
author = Author.find(:first, :include => { :posts => [ :special_comments , :very_special_comment ] }, :order => 'authors.name, comments.body, very_special_comments_posts.body', :conditions => 'posts.id = 4')
|
81
|
+
assert_equal authors(:david), author
|
82
|
+
assert_no_queries do
|
83
|
+
author.posts.first.special_comments
|
84
|
+
author.posts.first.very_special_comment
|
85
|
+
end
|
86
|
+
end
|
87
|
+
end
|
88
|
+
|
89
|
+
def test_eager_association_loading_of_stis_with_multiple_references
|
90
|
+
authors = Author.find(:all, :include => { :posts => { :special_comments => { :post => [ :special_comments, :very_special_comment ] } } }, :order => 'comments.body, very_special_comments_posts.body', :conditions => 'posts.id = 4')
|
91
|
+
assert_equal [authors(:david)], authors
|
92
|
+
assert_no_queries do
|
93
|
+
authors.first.posts.first.special_comments.first.post.special_comments
|
94
|
+
authors.first.posts.first.special_comments.first.post.very_special_comment
|
95
|
+
end
|
96
|
+
end
|
97
|
+
end
|
98
|
+
|
99
|
+
require 'models/vertex'
|
100
|
+
require 'models/edge'
|
101
|
+
class CascadedEagerLoadingTest < ActiveRecord::TestCase
|
102
|
+
fixtures :edges, :vertices
|
103
|
+
|
104
|
+
def test_eager_association_loading_with_recursive_cascading_four_levels_has_many_through
|
105
|
+
source = Vertex.find(:first, :include=>{:sinks=>{:sinks=>{:sinks=>:sinks}}}, :order => 'vertices.id')
|
106
|
+
assert_equal vertices(:vertex_4), assert_no_queries { source.sinks.first.sinks.first.sinks.first }
|
107
|
+
end
|
108
|
+
|
109
|
+
def test_eager_association_loading_with_recursive_cascading_four_levels_has_and_belongs_to_many
|
110
|
+
sink = Vertex.find(:first, :include=>{:sources=>{:sources=>{:sources=>:sources}}}, :order => 'vertices.id DESC')
|
111
|
+
assert_equal vertices(:vertex_1), assert_no_queries { sink.sources.first.sources.first.sources.first.sources.first }
|
112
|
+
end
|
113
|
+
end
|