ibm_db 2.5.26-universal-darwin-14

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.
Files changed (49) hide show
  1. checksums.yaml +7 -0
  2. data/CHANGES +233 -0
  3. data/LICENSE +18 -0
  4. data/MANIFEST +14 -0
  5. data/ParameterizedQueries README +39 -0
  6. data/README +225 -0
  7. data/ext/Makefile.nt32 +181 -0
  8. data/ext/Makefile.nt32.191 +212 -0
  9. data/ext/extconf.rb +261 -0
  10. data/ext/ibm_db.c +11793 -0
  11. data/ext/ruby_ibm_db.h +240 -0
  12. data/ext/ruby_ibm_db_cli.c +845 -0
  13. data/ext/ruby_ibm_db_cli.h +489 -0
  14. data/init.rb +42 -0
  15. data/lib/IBM_DB.rb +19 -0
  16. data/lib/active_record/connection_adapters/ibm_db_adapter.rb +3289 -0
  17. data/lib/active_record/connection_adapters/ibm_db_pstmt.rb +1965 -0
  18. data/lib/active_record/connection_adapters/ibmdb_adapter.rb +2 -0
  19. data/lib/active_record/vendor/db2-i5-zOS.yaml +328 -0
  20. data/lib/linux/rb18x/ibm_db.bundle +0 -0
  21. data/lib/linux/rb19x/ibm_db.bundle +0 -0
  22. data/lib/linux/rb20x/ibm_db.bundle +0 -0
  23. data/lib/linux/rb21x/ibm_db.bundle +0 -0
  24. data/test/cases/adapter_test.rb +207 -0
  25. data/test/cases/associations/belongs_to_associations_test.rb +711 -0
  26. data/test/cases/associations/cascaded_eager_loading_test.rb +181 -0
  27. data/test/cases/associations/has_and_belongs_to_many_associations_test.rb +851 -0
  28. data/test/cases/associations/join_model_test.rb +743 -0
  29. data/test/cases/attribute_methods_test.rb +822 -0
  30. data/test/cases/base_test.rb +2133 -0
  31. data/test/cases/calculations_test.rb +482 -0
  32. data/test/cases/migration_test.rb +2408 -0
  33. data/test/cases/persistence_test.rb +642 -0
  34. data/test/cases/query_cache_test.rb +257 -0
  35. data/test/cases/relations_test.rb +1182 -0
  36. data/test/cases/schema_dumper_test.rb +256 -0
  37. data/test/cases/transaction_callbacks_test.rb +300 -0
  38. data/test/cases/validations/uniqueness_validation_test.rb +299 -0
  39. data/test/cases/xml_serialization_test.rb +408 -0
  40. data/test/config.yml +154 -0
  41. data/test/connections/native_ibm_db/connection.rb +44 -0
  42. data/test/ibm_db_test.rb +25 -0
  43. data/test/models/warehouse_thing.rb +5 -0
  44. data/test/schema/i5/ibm_db_specific_schema.rb +137 -0
  45. data/test/schema/ids/ibm_db_specific_schema.rb +140 -0
  46. data/test/schema/luw/ibm_db_specific_schema.rb +137 -0
  47. data/test/schema/schema.rb +751 -0
  48. data/test/schema/zOS/ibm_db_specific_schema.rb +208 -0
  49. metadata +114 -0
@@ -0,0 +1,2 @@
1
+ #rb file to support alising of adapter name as ibmdb [without underscore] that will require ibm_db_adapter.rb
2
+ require 'active_record/connection_adapters/ibm_db_adapter'
@@ -0,0 +1,328 @@
1
+ add : ADD
2
+ after : AFTER
3
+ alias : ALIAS
4
+ all : ALL
5
+ allocate : ALLOCATE
6
+ allow : ALLOW
7
+ alter : ALTER
8
+ and : AND
9
+ any : ANY
10
+ as : AS
11
+ asensitive : ASENSITIVE
12
+ associate : ASSOCIATE
13
+ asutime : ASUTIME
14
+ audit : AUDIT
15
+ authorization : AUTHORIZATION
16
+ aux : AUX
17
+ auxiliary : AUXILIARY
18
+ before : BEFORE
19
+ begin : BEGIN
20
+ between : BETWEEN
21
+ binary : BINARY
22
+ bufferpool : BUFFERPOOL
23
+ by : BY
24
+ cache : CACHE
25
+ call : CALL
26
+ called : CALLED
27
+ cardinality : CARDINALITY
28
+ capture : CAPTURE
29
+ cascaded : CASCADED
30
+ case : CASE
31
+ cast : CAST
32
+ ccsid : CCSID
33
+ char : CHAR
34
+ character : CHARACTER
35
+ check : CHECK
36
+ close : CLOSE
37
+ cluster : CLUSTER
38
+ collection : COLLECTION
39
+ collid : COLLID
40
+ column : COLUMN
41
+ comment : COMMENT
42
+ commit : COMMIT
43
+ concat : CONCAT
44
+ condition : CONDITION
45
+ connect : CONNECT
46
+ connection : CONNECTION
47
+ constraint : CONSTRAINT
48
+ contains : CONTAINS
49
+ continue : CONTINUE
50
+ count : COUNT
51
+ count_big : COUNT_BIG
52
+ create : CREATE
53
+ cross : CROSS
54
+ current : CURRENT
55
+ current_date : CURRENT_DATE
56
+ current_lc_ctype : CURRENT_LC_CTYPE
57
+ current_path : CURRENT_PATH
58
+ current_time : CURRENT_TIME
59
+ current_timestamp : CURRENT_TIMESTAMP
60
+ current_timezone : CURRENT_TIMEZONE
61
+ current_user : CURRENT_USER
62
+ cursor : CURSOR
63
+ cycle : CYCLE
64
+ data : DATA
65
+ database : DATABASE
66
+ day : DAY
67
+ days : DAYS
68
+ dbinfo : DBINFO
69
+ db2genrl : DB2GENRL
70
+ db2sql : DB2SQL
71
+ declare : DECLARE
72
+ default : DEFAULT
73
+ defaults : DEFAULTS
74
+ definition : DEFINITION
75
+ delete : DELETE
76
+ descriptor : DESCRIPTOR
77
+ deterministic : DETERMINISTIC
78
+ disallow : DISALLOW
79
+ disconnect : DISCONNECT
80
+ distinct : DISTINCT
81
+ do : DO
82
+ double : DOUBLE
83
+ drop : DROP
84
+ dssize : DSSIZE
85
+ dynamic : DYNAMIC
86
+ each : EACH
87
+ editproc : EDITPROC
88
+ else : ELSE
89
+ elseif : ELSEIF
90
+ encoding : ENCODING
91
+ encryption : ENCRYPTION
92
+ end : END
93
+ ending : ENDING
94
+ end-exec : END-EXEC
95
+ erase : ERASE
96
+ escape : ESCAPE
97
+ except : EXCEPT
98
+ excluding : EXCLUDING
99
+ exception : EXCEPTION
100
+ execute : EXECUTE
101
+ exists : EXISTS
102
+ exit : EXIT
103
+ explain : EXPLAIN
104
+ external : EXTERNAL
105
+ fenced : FENCED
106
+ fetch : FETCH
107
+ fieldproc : FIELDPROC
108
+ file : FILE
109
+ final : FINAL
110
+ for : FOR
111
+ foreign : FOREIGN
112
+ free : FREE
113
+ from : FROM
114
+ full : FULL
115
+ function : FUNCTION
116
+ general : GENERAL
117
+ generated : GENERATED
118
+ get : GET
119
+ global : GLOBAL
120
+ go : GO
121
+ goto : GOTO
122
+ grant : GRANT
123
+ graphic : GRAPHIC
124
+ group : GROUP
125
+ handler : HANDLER
126
+ having : HAVING
127
+ hold : HOLD
128
+ hour : HOUR
129
+ hours : HOURS
130
+ identity : IDENTITY
131
+ if : IF
132
+ immediate : IMMEDIATE
133
+ in : IN
134
+ including : INCLUDING
135
+ inclusive : INCLUSIVE
136
+ increment : INCREMENT
137
+ index : INDEX
138
+ indicator : INDICATOR
139
+ inherit : INHERIT
140
+ inner : INNER
141
+ inout : INOUT
142
+ insensitive : INSENSITIVE
143
+ insert : INSERT
144
+ integrity : INTEGRITY
145
+ into : INTO
146
+ is : IS
147
+ isobid : ISOBID
148
+ isolation : ISOLATION
149
+ iterate : ITERATE
150
+ jar : JAR
151
+ java : JAVA
152
+ join : JOIN
153
+ key : KEY
154
+ label : LABEL
155
+ language : LANGUAGE
156
+ lc_ctype : LC_CTYPE
157
+ leave : LEAVE
158
+ left : LEFT
159
+ like : LIKE
160
+ linktype : LINKTYPE
161
+ local : LOCAL
162
+ locale : LOCALE
163
+ locator : LOCATOR
164
+ locators : LOCATORS
165
+ lock : LOCK
166
+ lockmax : LOCKMAX
167
+ locksize : LOCKSIZE
168
+ long : LONG
169
+ loop : LOOP
170
+ maintained : MAINTAINED
171
+ materialized : MATERIALIZED
172
+ maxvalue : MAXVALUE
173
+ microsecond : MICROSECOND
174
+ microseconds : MICROSECONDS
175
+ minute : MINUTE
176
+ minutes : MINUTES
177
+ minvalue : MINVALUE
178
+ mode : MODE
179
+ modifies : MODIFIES
180
+ month : MONTH
181
+ months : MONTHS
182
+ new : NEW
183
+ new_table : NEW_TABLE
184
+ nextval : NEXTVAL
185
+ no : NO
186
+ nocache : NOCACHE
187
+ nocycle : NOCYCLE
188
+ nodename : NODENAME
189
+ nodenumber : NODENUMBER
190
+ nomaxvalue : NOMAXVALUE
191
+ nominvalue : NOMINVALUE
192
+ none : NONE
193
+ noorder : NOORDER
194
+ not : NOT
195
+ null : NULL
196
+ nulls : NULLS
197
+ numparts : NUMPARTS
198
+ obid : OBID
199
+ of : OF
200
+ old : OLD
201
+ old_table : OLD_TABLE
202
+ on : ON
203
+ open : OPEN
204
+ optimization : OPTIMIZATION
205
+ optimize : OPTIMIZE
206
+ option : OPTION
207
+ or : OR
208
+ order : ORDER
209
+ out : OUT
210
+ outer : OUTER
211
+ overriding : OVERRIDING
212
+ package : PACKAGE
213
+ parameter : PARAMETER
214
+ part : PART
215
+ padded : PADDED
216
+ partition : PARTITION
217
+ partitioned : PARTITIONED
218
+ partitioning : PARTITIONING
219
+ path : PATH
220
+ piecesize : PIECESIZE
221
+ plan : PLAN
222
+ position : POSITION
223
+ precision : PRECISION
224
+ prepare : PREPARE
225
+ prevval : PREVVAL
226
+ primary : PRIMARY
227
+ priqty : PRIQTY
228
+ privileges : PRIVILEGES
229
+ procedure : PROCEDURE
230
+ program : PROGRAM
231
+ psid : PSID
232
+ query : QUERY
233
+ queryno : QUERYNO
234
+ read : READ
235
+ reads : READS
236
+ recovery : RECOVERY
237
+ references : REFERENCES
238
+ referencing : REFERENCING
239
+ refresh : REFRESH
240
+ resignal : RESIGNAL
241
+ release : RELEASE
242
+ rename : RENAME
243
+ repeat : REPEAT
244
+ reset : RESET
245
+ resignal : RESIGNAL
246
+ restart : RESTART
247
+ restrict : RESTRICT
248
+ result : RESULT
249
+ result_set_locator : RESULT_SET_LOCATOR
250
+ return : RETURN
251
+ returns : RETURNS
252
+ revoke : REVOKE
253
+ right : RIGHT
254
+ rollback : ROLLBACK
255
+ routine : ROUTINE
256
+ row : ROW
257
+ rows : ROWS
258
+ rowset : ROWSET
259
+ rrn : RRN
260
+ run : RUN
261
+ savepoint : SAVEPOINT
262
+ schema : SCHEMA
263
+ scratchpad : SCRATCHPAD
264
+ second : SECOND
265
+ seconds : SECONDS
266
+ secqty : SECQTY
267
+ security : SECURITY
268
+ sequence : SEQUENCE
269
+ select : SELECT
270
+ sensitive : SENSITIVE
271
+ set : SET
272
+ signal : SIGNAL
273
+ simple : SIMPLE
274
+ some : SOME
275
+ source : SOURCE
276
+ specific : SPECIFIC
277
+ sql : SQL
278
+ sqlid : SQLID
279
+ standard : STANDARD
280
+ start : START
281
+ static : STATIC
282
+ stay : STAY
283
+ stogroup : STOGROUP
284
+ stores : STORES
285
+ style : STYLE
286
+ substring : SUBSTRING
287
+ summary : SUMMARY
288
+ synonym : SYNONYM
289
+ sysfun : SYSFUN
290
+ sysibm : SYSIBM
291
+ sysproc : SYSPROC
292
+ system : SYSTEM
293
+ table : TABLE
294
+ tablespace : TABLESPACE
295
+ then : THEN
296
+ to : TO
297
+ transaction : TRANSACTION
298
+ trigger : TRIGGER
299
+ trim : TRIM
300
+ type : TYPE
301
+ undo : UNDO
302
+ union : UNION
303
+ unique : UNIQUE
304
+ until : UNTIL
305
+ update : UPDATE
306
+ user : USER
307
+ usage : USAGE
308
+ user : USER
309
+ using : USING
310
+ validproc : VALIDPROC
311
+ value : VALUE
312
+ values : VALUES
313
+ variable : VARIABLE
314
+ variant : VARIANT
315
+ vcat : VCAT
316
+ view : VIEW
317
+ volatile : VOLATILE
318
+ volumes : VOLUMES
319
+ when : WHEN
320
+ whenever : WHENEVER
321
+ where : WHERE
322
+ while : WHILE
323
+ with : WITH
324
+ wlm : WLM
325
+ write : WRITE
326
+ xmlelement : XMLELEMENT
327
+ year : YEAR
328
+ years : YEARS
Binary file
Binary file
Binary file
Binary file
@@ -0,0 +1,207 @@
1
+ require "cases/helper"
2
+
3
+ module ActiveRecord
4
+ class AdapterTest < ActiveRecord::TestCase
5
+ def setup
6
+ @connection = ActiveRecord::Base.connection
7
+ end
8
+
9
+ if current_adapter?(:IBM_DBAdapter)
10
+ def test_a_connection_attributes
11
+ if @connection.servertype.class.name.include?('::IBM_IDS')
12
+ return
13
+ end
14
+ if @connection.respond_to?(:schema)
15
+ previous_schema = ActiveRecord::Base.connection.schema
16
+ ActiveRecord::Base.connection.schema = 'SYSCAT'
17
+ assert_equal 'SYSCAT', ActiveRecord::Base.connection.schema
18
+ ActiveRecord::Base.connection.schema = previous_schema
19
+ else
20
+ warn "#{@connection.class} does not support client connection attribute schema_name"
21
+ end
22
+
23
+ if @connection.respond_to?(:app_user)
24
+ ActiveRecord::Base.connection.app_user = 'new_user'
25
+ assert_equal 'new_user', ActiveRecord::Base.connection.app_user
26
+ else
27
+ warn "#{@connection.class} does not support client connection attribute SQL_ATTR_INFO_USER"
28
+ end
29
+
30
+ if @connection.respond_to?(:account)
31
+ ActiveRecord::Base.connection.account = 'new_acct'
32
+ assert_equal 'new_acct', ActiveRecord::Base.connection.account
33
+ else
34
+ warn "#{@connection.class} does not support client connection attribute SQL_ATTR_INFO_ACCTSTR"
35
+ end
36
+
37
+ if @connection.respond_to?(:application)
38
+ ActiveRecord::Base.connection.application = 'new_app'
39
+ assert_equal 'new_app', ActiveRecord::Base.connection.application
40
+ else
41
+ warn "#{@connection.class} does not support client connection attribute SQL_ATTR_INFO_APPLNAME"
42
+ end
43
+
44
+ if @connection.respond_to?(:workstation)
45
+ ActiveRecord::Base.connection.workstation = 'new_wrkst'
46
+ assert_equal 'new_wrkst', ActiveRecord::Base.connection.workstation
47
+ else
48
+ warn "#{@connection.class} does not support client connection attribute SQL_ATTR_INFO_WRKSTNNAME"
49
+ end
50
+ end
51
+ end
52
+
53
+ def test_tables
54
+ tables = @connection.tables
55
+ assert tables.include?("accounts")
56
+ assert tables.include?("authors")
57
+ assert tables.include?("tasks")
58
+ assert tables.include?("topics")
59
+ end
60
+
61
+ def test_table_exists?
62
+ assert @connection.table_exists?("accounts")
63
+ assert !@connection.table_exists?("nonexistingtable")
64
+ assert !@connection.table_exists?(nil)
65
+ end
66
+
67
+ def test_indexes
68
+ idx_name = "accounts_idx"
69
+
70
+ if @connection.respond_to?(:indexes)
71
+ indexes = @connection.indexes("accounts")
72
+ assert indexes.empty?
73
+
74
+ @connection.add_index :accounts, :firm_id, :name => idx_name
75
+ indexes = @connection.indexes("accounts")
76
+ assert_equal "accounts", indexes.first.table
77
+ # OpenBase does not have the concept of a named index
78
+ # Indexes are merely properties of columns.
79
+ assert_equal idx_name, indexes.first.name unless current_adapter?(:OpenBaseAdapter)
80
+ assert !indexes.first.unique
81
+ assert_equal ["firm_id"], indexes.first.columns
82
+ else
83
+ warn "#{@connection.class} does not respond to #indexes"
84
+ end
85
+
86
+ ensure
87
+ @connection.remove_index(:accounts, :name => idx_name) rescue nil
88
+ end
89
+
90
+ def test_current_database
91
+ if @connection.respond_to?(:current_database)
92
+ assert_equal ARTest.connection_config['arunit']['database'], @connection.current_database
93
+ end
94
+ end
95
+
96
+ if current_adapter?(:MysqlAdapter)
97
+ def test_charset
98
+ assert_not_nil @connection.charset
99
+ assert_not_equal 'character_set_database', @connection.charset
100
+ assert_equal @connection.show_variable('character_set_database'), @connection.charset
101
+ end
102
+
103
+ def test_collation
104
+ assert_not_nil @connection.collation
105
+ assert_not_equal 'collation_database', @connection.collation
106
+ assert_equal @connection.show_variable('collation_database'), @connection.collation
107
+ end
108
+
109
+ def test_show_nonexistent_variable_returns_nil
110
+ assert_nil @connection.show_variable('foo_bar_baz')
111
+ end
112
+
113
+ def test_not_specifying_database_name_for_cross_database_selects
114
+ begin
115
+ assert_nothing_raised do
116
+ ActiveRecord::Base.establish_connection(ActiveRecord::Base.configurations['arunit'].except(:database))
117
+
118
+ config = ARTest.connection_config
119
+ ActiveRecord::Base.connection.execute(
120
+ "SELECT #{config['arunit']['database']}.pirates.*, #{config['arunit2']['database']}.courses.* " \
121
+ "FROM #{config['arunit']['database']}.pirates, #{config['arunit2']['database']}.courses"
122
+ )
123
+ end
124
+ ensure
125
+ ActiveRecord::Base.establish_connection 'arunit'
126
+ end
127
+ end
128
+ end
129
+
130
+ def test_table_alias
131
+ def @connection.test_table_alias_length() 10; end
132
+ class << @connection
133
+ alias_method :old_table_alias_length, :table_alias_length
134
+ alias_method :table_alias_length, :test_table_alias_length
135
+ end
136
+
137
+ assert_equal 'posts', @connection.table_alias_for('posts')
138
+ assert_equal 'posts_comm', @connection.table_alias_for('posts_comments')
139
+ assert_equal 'dbo_posts', @connection.table_alias_for('dbo.posts')
140
+
141
+ class << @connection
142
+ remove_method :table_alias_length
143
+ alias_method :table_alias_length, :old_table_alias_length
144
+ end
145
+ end
146
+
147
+ # test resetting sequences in odd tables in postgreSQL
148
+ if ActiveRecord::Base.connection.respond_to?(:reset_pk_sequence!)
149
+ require 'models/movie'
150
+ require 'models/subscriber'
151
+
152
+ def test_reset_empty_table_with_custom_pk
153
+ Movie.delete_all
154
+ Movie.connection.reset_pk_sequence! 'movies'
155
+ assert_equal 1, Movie.create(:name => 'fight club').id
156
+ end
157
+
158
+ if ActiveRecord::Base.connection.adapter_name != "FrontBase"
159
+ def test_reset_table_with_non_integer_pk
160
+ Subscriber.delete_all
161
+ Subscriber.connection.reset_pk_sequence! 'subscribers'
162
+ sub = Subscriber.new(:name => 'robert drake')
163
+ sub.id = 'bob drake'
164
+ assert_nothing_raised { sub.save! }
165
+ end
166
+ end
167
+ end
168
+
169
+ def test_uniqueness_violations_are_translated_to_specific_exception
170
+ @connection.execute "INSERT INTO subscribers(nick) VALUES('me')"
171
+ assert_raises(ActiveRecord::RecordNotUnique) do
172
+ @connection.execute "INSERT INTO subscribers(nick) VALUES('me')"
173
+ end
174
+ end
175
+
176
+ def test_foreign_key_violations_are_translated_to_specific_exception
177
+ unless @connection.adapter_name == 'SQLite'
178
+ assert_raises(ActiveRecord::InvalidForeignKey) do
179
+ # Oracle adapter uses prefetched primary key values from sequence and passes them to connection adapter insert method
180
+ if @connection.prefetch_primary_key?
181
+ id_value = @connection.next_sequence_value(@connection.default_sequence_name("fk_test_has_fk", "id"))
182
+ @connection.execute "INSERT INTO fk_test_has_fk (id, fk_id) VALUES (#{id_value},0)"
183
+ else
184
+ @connection.execute "INSERT INTO fk_test_has_fk (fk_id) VALUES (0)"
185
+ end
186
+ end
187
+ end
188
+ end
189
+
190
+ def test_disable_referential_integrity
191
+ assert_nothing_raised do
192
+ @connection.disable_referential_integrity do
193
+ # Oracle adapter uses prefetched primary key values from sequence and passes them to connection adapter insert method
194
+ if @connection.prefetch_primary_key?
195
+ id_value = @connection.next_sequence_value(@connection.default_sequence_name("fk_test_has_fk", "id"))
196
+ @connection.execute "INSERT INTO fk_test_has_fk (id, fk_id) VALUES (#{id_value},0)"
197
+ else
198
+ @connection.execute "INSERT INTO fk_test_has_fk (fk_id) VALUES (0)"
199
+ end
200
+ # should deleted created record as otherwise disable_referential_integrity will try to enable contraints after executed block
201
+ # and will fail (at least on Oracle)
202
+ @connection.execute "DELETE FROM fk_test_has_fk"
203
+ end
204
+ end
205
+ end
206
+ end
207
+ end