ibm_db 1.0.1 → 1.0.2

Sign up to get free protection for your applications and to get access to all the features.
data/CHANGES CHANGED
@@ -1,5 +1,11 @@
1
1
  Change Log
2
2
  ==============
3
+ 2009/03/06 (IBM_DB adapter 1.0.2, driver 1.0.1) :
4
+ - Support for specifying connection timeout in adapter
5
+ - Fixed Bug [23317] --> Fixed assumption of id as the primary key while updation/insertion of lob fields
6
+ - Fixed Bug [23389] --> Provided proper exception handling.
7
+ - Fixed the insertion of incorrect value for lob objects in case of has_and_belongs_to_many associations.
8
+
3
9
  2008/12/18 (IBM_DB adapter 1.0.1, driver 1.0.1) :
4
10
  - Support for datatype decfloat
5
11
  - Changes in installation process. Now user should set IBM_DB_INCLUDE env variable instead of IBM_DB_DIR
data/LICENSE CHANGED
@@ -1,4 +1,4 @@
1
- Copyright (c) 2006, 2007 IBM Corporation
1
+ Copyright (c) 2006, 2007, 2008, 2009 IBM Corporation
2
2
 
3
3
  Permission is hereby granted, free of charge, to any person obtaining
4
4
  a copy of this software and associated documentation files (the "Software"),
data/README CHANGED
@@ -1,5 +1,5 @@
1
1
  =====================================================================
2
- README for the IBM_DB Adapter (1.0.1) and Driver (1.0.1) (2008/12/18)
2
+ README for the IBM_DB Adapter (1.0.2) and Driver (1.0.1) (2009/03/06)
3
3
  For ActiveRecord Version >= 1.15.5 (and Rails >= 1.2.5)
4
4
  =====================================================================
5
5
 
@@ -1,7 +1,7 @@
1
1
  # +----------------------------------------------------------------------+
2
2
  # | Licensed Materials - Property of IBM |
3
3
  # | |
4
- # | (C) Copyright IBM Corporation 2006, 2007, 2008. |
4
+ # | (C) Copyright IBM Corporation 2006, 2007, 2008, 2009 |
5
5
  # +----------------------------------------------------------------------+
6
6
  # | Authors: Antonio Cangiano <cangiano@ca.ibm.com> |
7
7
  # | : Mario Ds Briggs <mario.briggs@in.ibm.com> |
@@ -20,68 +20,73 @@ module ActiveRecord
20
20
  def handle_lobs()
21
21
  if connection.kind_of?(ConnectionAdapters::IBM_DBAdapter)
22
22
  # Checks that the insert or update had at least a BLOB, CLOB or XML field
23
- if connection.sql =~ /BLOB\('(.*)'\)/i ||
24
- connection.sql =~ /@@@IBMTEXT@@@/i ||
25
- connection.sql =~ /@@@IBMXML@@@/i ||
26
- connection.sql =~ /@@@IBMBINARY@@@/i
27
- update_query = "UPDATE #{self.class.table_name} SET ("
28
- counter = 0
29
- values = []
30
- params = []
31
- # Selects only binary, text and xml columns
32
- self.class.columns.select{|col| col.type == :binary ||
33
- col.type == :text ||
34
- col.type == :xml}.each do |col|
35
- # Adds the selected columns to the query
36
- if counter == 0
37
- update_query << "#{col.name}"
38
- else
39
- update_query << ",#{col.name}"
40
- end
23
+ connection.sql.each do |clob_sql|
24
+ if clob_sql =~ /BLOB\('(.*)'\)/i ||
25
+ clob_sql =~ /@@@IBMTEXT@@@/i ||
26
+ clob_sql =~ /@@@IBMXML@@@/i ||
27
+ clob_sql =~ /@@@IBMBINARY@@@/i
28
+ update_query = "UPDATE #{self.class.table_name} SET ("
29
+ counter = 0
30
+ values = []
31
+ params = []
32
+ # Selects only binary, text and xml columns
33
+ self.class.columns.select{|col| col.type == :binary ||
34
+ col.type == :text ||
35
+ col.type == :xml}.each do |col|
36
+ # Adds the selected columns to the query
37
+ if counter == 0
38
+ update_query << "#{col.name}"
39
+ else
40
+ update_query << ",#{col.name}"
41
+ end
41
42
 
42
- # Add a '?' for the parameter or a NULL if the value is nil or empty
43
- # (except for a CLOB field where '' can be a value)
44
- if self[col.name].nil? ||
45
- self[col.name] == {} ||
46
- (self[col.name] == '' && col.type != :text)
47
- params << 'NULL'
43
+ # Add a '?' for the parameter or a NULL if the value is nil or empty
44
+ # (except for a CLOB field where '' can be a value)
45
+ if self[col.name].nil? ||
46
+ self[col.name] == {} ||
47
+ (self[col.name] == '' && col.type != :text)
48
+ params << 'NULL'
49
+ else
50
+ values << self[col.name]
51
+ params << '?'
52
+ end
53
+ counter += 1
54
+ end
55
+ # no subsequent update is required if no relevant columns are found
56
+ next if counter == 0
57
+
58
+ update_query << ") = "
59
+ # IBM_DB accepts 'SET (column) = NULL' but not (NULL),
60
+ # therefore the sql needs to be changed for a single NULL field.
61
+ if params.size==1 && params[0] == 'NULL'
62
+ update_query << "NULL"
48
63
  else
49
- values << self[col.name]
50
- params << '?'
64
+ update_query << "(" + params.join(',') + ")"
51
65
  end
52
- counter += 1
53
- end
54
- # no subsequent update is required if no relevant columns are found
55
- return if counter == 0
56
-
57
- update_query << ") = "
58
- # IBM_DB accepts 'SET (column) = NULL' but not (NULL),
59
- # therefore the sql needs to be changed for a single NULL field.
60
- if params.size==1 && params[0] == 'NULL'
61
- update_query << "NULL"
62
- else
63
- update_query << "(" + params.join(',') + ")"
64
- end
65
- update_query << " WHERE #{self.class.primary_key} = #{id}"
66
+
67
+ update_query << " WHERE #{self.class.primary_key} = '#{self[self.class.primary_key.downcase]}'"
68
+
69
+ unless stmt = IBM_DB.prepare(connection.connection, update_query)
70
+ error_msg = IBM_DB.conn_errormsg
71
+ error_msg = IBM_DB.stmt_errormsg if error_msg.empty?
72
+ if error_msg && !error_msg.empty?
73
+ raise "Statement prepare for updating LOB/XML column failed : #{error_msg}"
74
+ else
75
+ raise StandardError.new('An unexpected error occurred during update of LOB/XML column')
76
+ end
77
+ end
78
+ connection.log_query(update_query,'update of LOB/XML field(s)in handle_lobs')
66
79
 
67
- unless stmt = IBM_DB.prepare(connection.connection, update_query)
68
- error_msg = IBM_DB.conn_errormsg ? IBM_DB.conn_errormsg : IBM_DB.stmt_errormsg
69
- if error_msg && !error_msg.empty?
70
- raise "Failed to rename table due to error: #{error_msg}"
80
+ # rollback any failed LOB/XML field updates (and remove associated marker)
81
+ unless IBM_DB.execute(stmt, values)
82
+ connection.execute("ROLLBACK")
83
+ raise "Failed to insert/update LOB/XML field(s) due to: #{IBM_DB.stmt_errormsg(stmt)}"
71
84
  else
72
- raise StandardError('Unexpected error during update')
85
+ IBM_DB.free_result stmt
73
86
  end
74
- end
75
- connection.log_query(update_query,'update of LOB/XML field(s)in handle_lobs')
76
-
77
- # rollback any failed LOB/XML field updates (and remove associated marker)
78
- unless IBM_DB.execute(stmt, values)
79
- connection.execute("ROLLBACK")
80
- raise "Failed to insert/update LOB/XML field(s) due to: #{IBM_DB.stmt_errormsg(stmt)}"
81
- else
82
- IBM_DB.free_result stmt
83
- end
84
- end # if connection.sql
87
+ end # if clob_sql
88
+ end #connection.sql.each
89
+ connection.sql = []
85
90
  end # if connection.kind_of?
86
91
  end # handle_lobs
87
92
  private :handle_lobs
@@ -112,8 +117,7 @@ module ActiveRecord
112
117
  # Retrieves database user credentials from the +config+ hash
113
118
  # or raises ArgumentError in case of failure.
114
119
  if !config.has_key?(:username) || !config.has_key?(:password)
115
- raise ArgumentError, "Missing argument(s): Database configuration #{config} \
116
- requires credentials: username and password"
120
+ raise ArgumentError, "Missing argument(s): Username/Password for #{config[:database]} is not specified"
117
121
  else
118
122
  username = config[:username].to_s
119
123
  password = config[:password].to_s
@@ -149,7 +153,7 @@ requires credentials: username and password"
149
153
  host = config[:host]
150
154
  # A net address connection requires a port. If no port has been specified, 50000 is used by default
151
155
  port = config[:port] || 50000
152
- # Connects to the database using the database, host, port, authentication type, username and password specified
156
+ # Connects to the database specified using the hostname, port, authentication type, username and password info
153
157
  # Starting with DB2 9.1FP5 secure connections using SSL are supported.
154
158
  # On the client side using CLI this is supported from CLI version V95FP2 and onwards.
155
159
  # This feature is set by specifying SECURITY=SSL in the connection string.
@@ -163,6 +167,8 @@ requires credentials: username and password"
163
167
  PWD=#{password};"
164
168
  conn_string << "SECURITY=#{config[:security]};" if config.has_key?(:security)
165
169
  conn_string << "AUTHENTICATION=#{config[:authentication]};" if config.has_key?(:authentication)
170
+ conn_string << "CONNECTTIMEOUT=#{config[:timeout]};" if config.has_key?(:timeout)
171
+
166
172
  connection = IBM_DB.connect conn_string, '', '', conn_options
167
173
  else
168
174
  # No host implies a local catalog-based connection: +database+ represents catalog alias
@@ -176,7 +182,7 @@ requires credentials: username and password"
176
182
  ConnectionAdapters::IBM_DBAdapter.new(connection, logger, config, conn_options)
177
183
  else
178
184
  # If the connection failed, it raises a Runtime error
179
- raise "Failed to connect to the [#{database}] due to: #{IBM_DB.conn_errormsg}"
185
+ raise "Failed to connect to [#{database}] due to: #{IBM_DB.conn_errormsg}"
180
186
  end
181
187
  end # method self.ibm_db_connection
182
188
  end # class Base
@@ -387,6 +393,8 @@ requires credentials: username and password"
387
393
  # // - Available only from CLI version V95fp2 and above
388
394
  # authentication: 'SERVER' // AUTHENTICATION type which the client uses -
389
395
  # // - to connect to the database server. By default value is SERVER
396
+ # timeout: 10 // Specifies the time in seconds (0 - 32767) to wait for a reply from server -
397
+ # //- when trying to establish a connection before generating a timeout
390
398
  #
391
399
  # When schema is not specified, the username value is used instead.
392
400
  #
@@ -414,12 +422,15 @@ requires credentials: username and password"
414
422
  @schema = config[:schema]
415
423
  @security = config[:security] || nil
416
424
  @authentication = config[:authentication] || nil
425
+ @timeout = config[:timeout] || 0 # default timeout value is 0
417
426
 
418
427
  # Caching database connection options (auditing and billing support)
419
428
  @app_user = conn_options[:app_user] if conn_options.has_key?(:app_user)
420
429
  @account = conn_options[:account] if conn_options.has_key?(:account)
421
430
  @application = conn_options[:application] if conn_options.has_key?(:application)
422
431
  @workstation = conn_options[:workstation] if conn_options.has_key?(:workstation)
432
+
433
+ @sql = []
423
434
 
424
435
  # Calls the parent class +ConnectionAdapters+' initializer
425
436
  # which sets @connection, @logger, @runtime and @last_verification
@@ -544,6 +555,7 @@ requires credentials: username and password"
544
555
  PWD=#{@password};"
545
556
  @conn_string << "SECURITY=#{@security};" if @security
546
557
  @conn_string << "AUTHENTICATION=#{@authentication};" if @authentication
558
+ @conn_string << "CONNECTTIMEOUT=#{@timeout};"
547
559
  # Connects and assigns the resulting IBM_DB.Connection to the +@connection+ instance variable
548
560
  @connection = IBM_DB.connect(@conn_string, '', '', @conn_options)
549
561
  else
@@ -688,11 +700,12 @@ requires credentials: username and password"
688
700
 
689
701
  insert_query << " VALUES ("+ params.join(',') + ")"
690
702
  unless stmt = IBM_DB.prepare(@connection, insert_query)
691
- error_msg = IBM_DB.conn_errormsg ? IBM_DB.conn_errormsg : IBM_DB.stmt_errormsg
703
+ error_msg = IBM_DB.conn_errormsg
704
+ error_msg = IBM_DB.stmt_errormsg if error_msg.empty?
692
705
  if error_msg && !error_msg.empty?
693
706
  raise "Failed to prepare statement due to : #{error_msg}"
694
707
  else
695
- raise StandardError('Unexpected error during insert')
708
+ raise StandardError.new('An unexpected error occurred during insert')
696
709
  end
697
710
  end
698
711
 
@@ -712,7 +725,7 @@ requires credentials: username and password"
712
725
  def insert(sql, name = nil, pk = nil, id_value = nil, sequence_name = nil)
713
726
  if stmt = execute(sql, name)
714
727
  begin
715
- @sql = sql
728
+ @sql << sql
716
729
  return id_value || @servertype.last_generated_id(stmt)
717
730
  # Ensures to free the resources associated with the statement
718
731
  ensure
@@ -743,7 +756,7 @@ requires credentials: username and password"
743
756
  # Logs and execute the given sql query.
744
757
  if stmt = execute(sql, name)
745
758
  begin
746
- @sql = sql
759
+ @sql << sql
747
760
  # Retrieves the number of affected rows
748
761
  IBM_DB.num_rows(stmt)
749
762
  # Ensures to free the resources associated with the statement
@@ -985,11 +998,12 @@ requires credentials: username and password"
985
998
  IBM_DB.free_result(stmt) # Free resources associated with the statement
986
999
  end
987
1000
  else # Handle driver execution errors
988
- error_msg = IBM_DB.conn_errormsg ? IBM_DB.conn_errormsg : IBM_DB.stmt_errormsg
1001
+ error_msg = IBM_DB.conn_errormsg
1002
+ error_msg = IBM_DB.stmt_errormsg if error_msg.empty?
989
1003
  if error_msg && !error_msg.empty?
990
1004
  raise "Failed to retrieve tables metadata due to error: #{error_msg}"
991
1005
  else
992
- raise StandardError('Unexpected error during table metadata retrieval')
1006
+ raise StandardError.new('An unexpected error occurred during retrieval of table metadata')
993
1007
  end
994
1008
  end
995
1009
  # Returns the tables array
@@ -1032,11 +1046,12 @@ requires credentials: username and password"
1032
1046
  IBM_DB.free_result(stmt) if stmt
1033
1047
  end
1034
1048
  else # Handle driver execution errors
1035
- error_msg = IBM_DB.conn_errormsg ? IBM_DB.conn_errormsg : IBM_DB.stmt_errormsg
1049
+ error_msg = IBM_DB.conn_errormsg
1050
+ error_msg = IBM_DB.stmt_errormsg if error_msg.empty?
1036
1051
  if error_msg && !error_msg.empty?
1037
1052
  raise "Failed to retrieve primary key metadata due to error: #{error_msg}"
1038
1053
  else
1039
- raise StandardError('Unexpected error during primary key retrieval')
1054
+ raise StandardError.new('An unexpected error occurred during primary key retrieval')
1040
1055
  end
1041
1056
  end
1042
1057
 
@@ -1077,12 +1092,13 @@ requires credentials: username and password"
1077
1092
  IBM_DB.free_result(stmt) if stmt
1078
1093
  end
1079
1094
  else # Handle driver execution errors
1080
- error_msg = IBM_DB.conn_errormsg ? IBM_DB.conn_errormsg : IBM_DB.stmt_errormsg
1081
- if error_msg && !error_msg.empty?
1082
- raise "Failed to retrieve index metadata due to error: #{error_msg}"
1083
- else
1084
- raise StandardError('Unexpected error during index retrieval')
1085
- end
1095
+ error_msg = IBM_DB.conn_errormsg
1096
+ error_msg = IBM_DB.stmt_errormsg if error_msg.empty?
1097
+ if error_msg && !error_msg.empty?
1098
+ raise "Failed to retrieve index metadata due to error: #{error_msg}"
1099
+ else
1100
+ raise StandardError.new('An unexpected error occurred during index retrieval')
1101
+ end
1086
1102
  end
1087
1103
 
1088
1104
  # remove the primary key index entry.... should not be dumped by the dumper
@@ -1153,21 +1169,23 @@ requires credentials: username and password"
1153
1169
  end
1154
1170
  end
1155
1171
  rescue StandardError # Handle driver fetch errors
1156
- error_msg = IBM_DB.conn_errormsg ? IBM_DB.conn_errormsg : IBM_DB.stmt_errormsg
1172
+ error_msg = IBM_DB.conn_errormsg
1173
+ error_msg = IBM_DB.stmt_errormsg if error_msg.empty?
1157
1174
  if error_msg && !error_msg.empty?
1158
1175
  raise "Failed to retrieve column metadata during fetch: #{error_msg}"
1159
1176
  else
1160
- raise
1177
+ raise "An unexpected error occurred during retrieval of metadata"
1161
1178
  end
1162
1179
  ensure # Free resources associated with the statement
1163
1180
  IBM_DB.free_result(stmt)
1164
1181
  end
1165
1182
  else # Handle driver execution errors
1166
- error_msg = IBM_DB.conn_errormsg ? IBM_DB.conn_errormsg : IBM_DB.stmt_errormsg
1183
+ error_msg = IBM_DB.conn_errormsg
1184
+ error_msg = IBM_DB.stmt_errormsg if error_msg.empty?
1167
1185
  if error_msg && !error_msg.empty?
1168
1186
  raise "Failed to retrieve column metadata due to error: #{error_msg}"
1169
1187
  else
1170
- raise StandardError('Unexpected error during columns metadata retrieval')
1188
+ raise StandardError.new('An unexpected error occurred during retrieval of columns metadata')
1171
1189
  end
1172
1190
  end
1173
1191
  # Returns the columns array
@@ -1303,7 +1321,7 @@ requires credentials: username and password"
1303
1321
  "A column that is part of a table containing an XML column cannot be dropped. \
1304
1322
  To remove the column, the table must be dropped and recreated without the #{column_name} column: #{exec_err}"
1305
1323
  else
1306
- raise
1324
+ raise "#{exec_err}"
1307
1325
  end
1308
1326
  end
1309
1327
  end
@@ -1336,10 +1354,10 @@ To remove the column, the table must be dropped and recreated without the #{colu
1336
1354
  raise StatementInvalid, IBM_DB.stmt_errormsg
1337
1355
  end
1338
1356
  rescue StandardError
1339
- error_msg = IBM_DB.conn_errormsg ? IBM_DB.conn_errormsg : IBM_DB.stmt_errormsg
1357
+ error_msg = IBM_DB.conn_errormsg
1340
1358
  if error_msg && !error_msg.empty?
1341
- raise "Failed to execute statement due to error: #{error_msg}"
1342
- else
1359
+ raise "Failed to execute statement due to communication error: #{error_msg}"
1360
+ else
1343
1361
  raise
1344
1362
  end
1345
1363
  end
@@ -1405,11 +1423,12 @@ To remove the column, the table must be dropped and recreated without the #{colu
1405
1423
  IBM_DB.free_result stmt
1406
1424
  end
1407
1425
  else
1408
- error_msg = IBM_DB.conn_errormsg ? IBM_DB.conn_errormsg : IBM_DB.stmt_errormsg
1426
+ error_msg = IBM_DB.conn_errormsg
1427
+ error_msg = IBM_DB.stmt_errormsg if error_msg.empty?
1409
1428
  if error_msg && !error_msg.empty?
1410
1429
  raise "Failed to retrieve last generated id due to error: #{error_msg}"
1411
1430
  else
1412
- raise StandardError('Unexpected error during last generated id retrieval')
1431
+ raise StandardError.new('An unexpected error occurred during retrieval of last generated id')
1413
1432
  end
1414
1433
  end
1415
1434
  end
@@ -1424,7 +1443,7 @@ To remove the column, the table must be dropped and recreated without the #{colu
1424
1443
  "Please consult documentation for compatible data types while changing column datatype. \
1425
1444
  The column datatype change to [#{data_type}] is not supported by this data server: #{exec_err}"
1426
1445
  else
1427
- raise
1446
+ raise "#{exec_err}"
1428
1447
  end
1429
1448
  end
1430
1449
  reorg_table(table_name)
@@ -1613,9 +1632,9 @@ SET WITH DEFAULT #{@adapter.quote(default)}"
1613
1632
  raise StatementInvalid, IBM_DB.stmt_errormsg
1614
1633
  end
1615
1634
  rescue StandardError
1616
- error_msg = IBM_DB.conn_errormsg ? IBM_DB.conn_errormsg : IBM_DB.stmt_errormsg
1635
+ error_msg = IBM_DB.conn_errormsg
1617
1636
  if error_msg && !error_msg.empty?
1618
- raise "Failed to execute statement due to error: #{error_msg}"
1637
+ raise "Failed to execute statement due to communication error: #{error_msg}"
1619
1638
  else
1620
1639
  raise
1621
1640
  end
@@ -1628,9 +1647,9 @@ SET WITH DEFAULT #{@adapter.quote(default)}"
1628
1647
  raise StatementInvalid, IBM_DB.stmt_errormsg
1629
1648
  end
1630
1649
  rescue StandardError
1631
- error_msg = IBM_DB.conn_errormsg ? IBM_DB.conn_errormsg : IBM_DB.stmt_errormsg
1650
+ error_msg = IBM_DB.conn_errormsg
1632
1651
  if error_msg && !error_msg.empty?
1633
- raise "Failed to execute statement due to error: #{error_msg}"
1652
+ raise "Failed to execute statement due to communication error: #{error_msg}"
1634
1653
  else
1635
1654
  raise
1636
1655
  end
@@ -78,6 +78,21 @@ class DeveloperWithCounterSQL < ActiveRecord::Base
78
78
  :counter_sql => 'SELECT COUNT(*) AS count_all FROM projects INNER JOIN developers_projects ON projects.id = developers_projects.project_id WHERE developers_projects.developer_id =#{id}'
79
79
  end
80
80
 
81
+ if current_adapter?(:IBM_DBAdapter)
82
+ class Novel < ActiveRecord::Base
83
+ has_and_belongs_to_many :writers
84
+ end
85
+
86
+ class Writer < ActiveRecord::Base
87
+ has_and_belongs_to_many :novels
88
+ end
89
+
90
+ class NovelsWriter < ActiveRecord::Base
91
+ belongs_to :writers
92
+ belongs_to :novels
93
+ end
94
+ end
95
+
81
96
  class HasAndBelongsToManyAssociationsTest < ActiveRecord::TestCase
82
97
  fixtures :accounts, :companies, :categories, :posts, :categories_posts, :developers, :projects, :developers_projects,
83
98
  :parrots, :pirates, :treasures, :price_estimates, :tags, :taggings
@@ -269,6 +284,39 @@ class HasAndBelongsToManyAssociationsTest < ActiveRecord::TestCase
269
284
  assert_equal Developer.find(1).projects.sort_by(&:id).last, proj # prove join table is updated
270
285
  end
271
286
 
287
+ if current_adapter?(:IBM_DBAdapter)
288
+ def test_lob_handling
289
+ assert_nothing_raised do
290
+ Novel.connection.create_table 'novels' do |t|
291
+ t.text :story
292
+ t.string :title
293
+ end
294
+ Writer.connection.create_table 'writers' do |t|
295
+ t.string :name
296
+ end
297
+ NovelsWriter.connection.create_table 'novels_writers' do |t|
298
+ t.belongs_to :novels
299
+ t.belongs_to :writers
300
+ end
301
+ end
302
+
303
+ w = Writer.new :name => 'Praveen'
304
+ w.save!
305
+
306
+ novel_story = "This is a short and sweet story"
307
+
308
+ novel = Novel.new :story => novel_story,:title => "Cool isn't it"
309
+ novel.writers << w
310
+ novel.save!
311
+
312
+ assert_equal novel_story,Novel.find(novel.id).story
313
+ ensure
314
+ Novel.connection.drop_table 'novels' rescue nil
315
+ Writer.connection.drop_table 'writers' rescue nil
316
+ NovelsWriter.connection.drop_table 'novels_writers' rescue nil
317
+ end
318
+ end
319
+
272
320
  def test_create_by_new_record
273
321
  devel = Developer.new(:name => "Marcel", :salary => 75000)
274
322
  proj1 = devel.projects.build(:name => "Make bed")
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ibm_db
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.1
4
+ version: 1.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - IBM
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2008-12-18 00:00:00 +05:30
12
+ date: 2009-03-06 00:00:00 +05:30
13
13
  default_executable:
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency