ibm_db 0.9.5 → 0.10.0
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/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
|