ibm_db 0.8.0 → 0.9.0
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGES +6 -0
- data/README +1 -66
- data/ext/ibm_db.c +41 -34
- data/ext/ruby_ibm_db.h +7 -1
- metadata +3 -3
data/CHANGES
CHANGED
@@ -1,5 +1,11 @@
|
|
1
1
|
Change Log
|
2
2
|
==============
|
3
|
+
2007/09/28 (IBM_DB adapter 0.9.0, driver 0.9.0):
|
4
|
+
- Fixed ibm_db gem 0.8.5 incompatibility with DB2 CLI 9.1 FP3 and below
|
5
|
+
|
6
|
+
2007/09/13 (IBM_DB adapter 0.8.5, driver 0.8.5):
|
7
|
+
- Fixed Ruby driver crash on Windows Vista [#13357]
|
8
|
+
|
3
9
|
2007/07/05 (IBM_DB adapter 0.8.0, driver 0.7.0):
|
4
10
|
- Support for Informix Dynamic Server 11.10
|
5
11
|
- New driver method get_last_serial_value to retrieve last inserted serial
|
data/README
CHANGED
@@ -1,73 +1,8 @@
|
|
1
1
|
=====================================================================
|
2
|
-
README for the IBM_DB Adapter 0.
|
2
|
+
README for the IBM_DB Adapter 0.9.0 and Driver 0.9.0 (2007/09/28)
|
3
3
|
For ActiveRecord Version 1.15.3 (and Rails 1.2.3)
|
4
4
|
=====================================================================
|
5
5
|
|
6
|
-
Change Log
|
7
|
-
==============
|
8
|
-
2007/07/11 (IBM_DB adapter 0.8.0, driver 0.7.0):
|
9
|
-
- Support for Informix Dynamic Server 11.10 and beyond
|
10
|
-
- New driver method get_last_serial_value to retrieve last inserted serial
|
11
|
-
value for Informix Dynamic Server
|
12
|
-
|
13
|
-
2007/06/19 (IBM_DB adapter 0.7.5, driver 0.6.0):
|
14
|
-
- Driver code (ibm_db.c) remains at the same level: 0.6.0 (no changes)
|
15
|
-
- Fixed client attributes initialization on connection setup [11264]
|
16
|
-
- Fixed rake db:schema:dump native data types limits incompatible with table create
|
17
|
-
|
18
|
-
2007/06/01 (IBM_DB adapter 0.7.0, driver 0.6.0):
|
19
|
-
- Driver code (ibm_db.c) remains at the same level: 0.6.0 (no changes)
|
20
|
-
- Fixed remaining failure on {:null => true} option for XML data type [#10877]
|
21
|
-
- Fixed handling of {:id => false} option during table creation in DB2 for zOS
|
22
|
-
- Fixed handle_lobs failures in table creation for has_many/belongs_to [#10701]
|
23
|
-
- Fixe db2-i5-zOS.yaml content (removed inadvertent tab) [#11234]
|
24
|
-
|
25
|
-
2007/05/10 (IBM_DB adapter 0.6.5, driver 0.6.0):
|
26
|
-
- Driver code (ibm_db.c) remains at the same level: 0.6.0 (no changes)
|
27
|
-
- Fixed regression for reconnect after being inactive (connection recycle)
|
28
|
-
- Fixed rake db:schema:load failures on boolean data type [#10683]
|
29
|
-
- Fixed XML default option (:null => true for XML data type) [#10754]
|
30
|
-
- Fixed DB2 for zOS version 9 handling of column changes for DEFAULT NULL
|
31
|
-
|
32
|
-
2007/04/30 (0.6.0):
|
33
|
-
- Support for remote connections to DB2 Universal Database on z/OS version 9
|
34
|
-
- Support for result set pagination via ActiveRecord add_limit_offset! method
|
35
|
-
for DB2 Universal Database on z/OS and i5/OS
|
36
|
-
- Defect fixes
|
37
|
-
- Improved documentation
|
38
|
-
|
39
|
-
2007/04/20 (0.4.6):
|
40
|
-
- Fixed XML columns creation default value (NOT NULL)
|
41
|
-
- Fixed border case for IS NULL in where clauses
|
42
|
-
- Improved documentation (connection attributes)
|
43
|
-
|
44
|
-
2007/04/20 (0.4.5):
|
45
|
-
- Fixed reconnect problems: driver (IBM_DB::active) and adapter (active)
|
46
|
-
- Client connection attribute rename (app_user to replace user)
|
47
|
-
- Improved support for ROWID data type (DB2 for zOS version 8 and 9)
|
48
|
-
|
49
|
-
2007/03/21 (0.4.0):
|
50
|
-
- Support added for remote connectivity to DB2 zOS version 8
|
51
|
-
- Support added for remote connectivity to DB2 i5 v5r3 and v5r4
|
52
|
-
- Improved migration support (added change_column method)
|
53
|
-
- Support for setting and retrieving values for client attributes (user,
|
54
|
-
account, application, workstation)
|
55
|
-
|
56
|
-
2006/10/31 (0.2.0):
|
57
|
-
- Significant performance improvements
|
58
|
-
- Improved stored procedure support at driver level
|
59
|
-
- Added support for Large Object data types (LOBs) greater than 32K (BLOB, CLOB, XML) in size
|
60
|
-
- Added XML data type support for native storage of XML documents
|
61
|
-
- Significant quality improvements, through many bug fixes in the driver and adapter
|
62
|
-
- Improved migration support (added add_column and remove_column methods)
|
63
|
-
|
64
|
-
2006/06/07 (0.1.0):
|
65
|
-
|
66
|
-
- Fixed compatibility issue with other adapters
|
67
|
-
- If a schema is omitted in database.yml, the username is now used as default schema
|
68
|
-
- Introduced descriptive CLI error messages when a connection or an execute statement fails
|
69
|
-
- Introduced check against schema in method 'indexes'
|
70
|
-
|
71
6
|
Supported Operating Systems
|
72
7
|
============================
|
73
8
|
- Linux 32/64 bit
|
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.9.0"
|
14
14
|
|
15
15
|
#ifdef HAVE_CONFIG_H
|
16
16
|
#include "config.h"
|
@@ -324,9 +324,9 @@ static void _ruby_ibm_db_free_conn_struct(conn_handle *handle)
|
|
324
324
|
}
|
325
325
|
if ( handle != NULL ) {
|
326
326
|
if ( handle->flag_pconnect ) {
|
327
|
-
|
327
|
+
ruby_xfree(handle);
|
328
328
|
} else {
|
329
|
-
|
329
|
+
ruby_xfree(handle);
|
330
330
|
}
|
331
331
|
}
|
332
332
|
}
|
@@ -355,7 +355,7 @@ static void _ruby_ibm_db_mark_row_struct(row_hash_struct *handle)
|
|
355
355
|
/* static void _ruby_ibm_db_free_row_struct */
|
356
356
|
static void _ruby_ibm_db_free_row_struct(row_hash_struct *handle)
|
357
357
|
{
|
358
|
-
|
358
|
+
ruby_xfree(handle);
|
359
359
|
}
|
360
360
|
/* */
|
361
361
|
|
@@ -375,11 +375,11 @@ static void _ruby_ibm_db_free_result_struct(stmt_handle* handle)
|
|
375
375
|
curr_ptr = curr_ptr->next;
|
376
376
|
|
377
377
|
if (prev_ptr->varname) {
|
378
|
-
|
378
|
+
ruby_xfree(prev_ptr->varname);
|
379
379
|
}
|
380
380
|
|
381
|
-
if (prev_ptr->svalue)
|
382
|
-
|
381
|
+
if (prev_ptr->svalue) ruby_xfree(prev_ptr->svalue);
|
382
|
+
ruby_xfree(prev_ptr);
|
383
383
|
|
384
384
|
prev_ptr = curr_ptr;
|
385
385
|
}
|
@@ -400,21 +400,21 @@ static void _ruby_ibm_db_free_result_struct(stmt_handle* handle)
|
|
400
400
|
case SQL_NUMERIC:
|
401
401
|
case SQL_XML:
|
402
402
|
if ( handle->row_data[i].data.str_val != NULL ) {
|
403
|
-
|
403
|
+
ruby_xfree(handle->row_data[i].data.str_val);
|
404
404
|
handle->row_data[i].data.str_val = NULL;
|
405
405
|
}
|
406
406
|
}
|
407
407
|
}
|
408
|
-
|
408
|
+
ruby_xfree(handle->row_data);
|
409
409
|
handle->row_data = NULL;
|
410
410
|
}
|
411
411
|
|
412
412
|
/* free column info cache */
|
413
413
|
if ( handle->column_info ) {
|
414
414
|
for (i=0; i<handle->num_columns; i++) {
|
415
|
-
|
415
|
+
ruby_xfree(handle->column_info[i].name);
|
416
416
|
}
|
417
|
-
|
417
|
+
ruby_xfree(handle->column_info);
|
418
418
|
handle->column_info = NULL;
|
419
419
|
handle->num_columns = 0;
|
420
420
|
}
|
@@ -470,7 +470,7 @@ static void _ruby_ibm_db_free_stmt_struct(stmt_handle *handle)
|
|
470
470
|
|
471
471
|
if ( handle ) {
|
472
472
|
_ruby_ibm_db_free_result_struct(handle);
|
473
|
-
|
473
|
+
ruby_xfree(handle);
|
474
474
|
}
|
475
475
|
}
|
476
476
|
/* */
|
@@ -1202,16 +1202,23 @@ static VALUE _ruby_ibm_db_connect_helper( int argc, VALUE *argv, int isPersisten
|
|
1202
1202
|
/* Set SQL_ATTR_REPLACE_QUOTED_LITERALS connection attribute to
|
1203
1203
|
* enable CLI numeric literal feature. This is equivalent to
|
1204
1204
|
* PATCH2=71 in the db2cli.ini file
|
1205
|
+
* Note, for backward compatibility with older CLI drivers having a
|
1206
|
+
* different value for SQL_ATTR_REPLACE_QUOTED_LITERALS, we call
|
1207
|
+
* SQLSetConnectAttr() with both the old and new value
|
1205
1208
|
*/
|
1206
1209
|
#ifndef PASE
|
1207
1210
|
/* Only enable this feature if we are not connected to an Informix data server */
|
1208
1211
|
if (!is_informix) {
|
1209
1212
|
rc = SQLSetConnectAttr((SQLHDBC)conn_res->hdbc, SQL_ATTR_REPLACE_QUOTED_LITERALS, (SQLPOINTER)(enable_numeric_literals), SQL_IS_INTEGER);
|
1213
|
+
if (rc != SQL_SUCCESS)
|
1214
|
+
rc = SQLSetConnectAttr((SQLHDBC)conn_res->hdbc, SQL_ATTR_REPLACE_QUOTED_LITERALS_OLDVALUE, (SQLPOINTER)(enable_numeric_literals), SQL_IS_INTEGER);
|
1210
1215
|
}
|
1211
1216
|
#else
|
1212
1217
|
/* Only enable this feature if we are not connected to an Informix data server */
|
1213
1218
|
if (!is_informix) {
|
1214
1219
|
rc = SQLSetConnectAttr((SQLHDBC)conn_res->hdbc, SQL_ATTR_REPLACE_QUOTED_LITERALS, (SQLPOINTER)(&enable_numeric_literals), SQL_IS_INTEGER);
|
1220
|
+
if (rc != SQL_SUCCESS)
|
1221
|
+
rc = SQLSetConnectAttr((SQLHDBC)conn_res->hdbc, SQL_ATTR_REPLACE_QUOTED_LITERALS_OLDVALUE, (SQLPOINTER)(&enable_numeric_literals), SQL_IS_INTEGER);
|
1215
1222
|
}
|
1216
1223
|
#endif
|
1217
1224
|
if (rc != SQL_SUCCESS) {
|
@@ -1229,7 +1236,7 @@ static VALUE _ruby_ibm_db_connect_helper( int argc, VALUE *argv, int isPersisten
|
|
1229
1236
|
conn_res);
|
1230
1237
|
rb_hash_aset(persistent_list, rb_str_new2(hKey), entry);
|
1231
1238
|
}
|
1232
|
-
|
1239
|
+
ruby_xfree(hKey);
|
1233
1240
|
}
|
1234
1241
|
|
1235
1242
|
if ( rc != SQL_SUCCESS ) {
|
@@ -1239,7 +1246,7 @@ static VALUE _ruby_ibm_db_connect_helper( int argc, VALUE *argv, int isPersisten
|
|
1239
1246
|
|
1240
1247
|
/* free memory */
|
1241
1248
|
if (conn_res != NULL) {
|
1242
|
-
|
1249
|
+
ruby_xfree(conn_res);
|
1243
1250
|
}
|
1244
1251
|
|
1245
1252
|
return Qfalse;
|
@@ -1521,7 +1528,7 @@ static void _ruby_ibm_db_add_param_cache( stmt_handle *stmt_res, int param_no, c
|
|
1521
1528
|
/* Var lengths can be variable and different in both cases. */
|
1522
1529
|
/* This shouldn't happen often anyway */
|
1523
1530
|
if ( varname != NULL) {
|
1524
|
-
|
1531
|
+
ruby_xfree(curr->varname);
|
1525
1532
|
curr->varname = estrndup(varname, varname_len);
|
1526
1533
|
}
|
1527
1534
|
}
|
@@ -2502,11 +2509,11 @@ VALUE ibm_db_special_columns(int argc, VALUE *argv, VALUE self)
|
|
2502
2509
|
* The name of the table.
|
2503
2510
|
*
|
2504
2511
|
* unique
|
2505
|
-
* An
|
2506
|
-
*
|
2507
|
-
*
|
2508
|
-
*
|
2509
|
-
*
|
2512
|
+
* An boolean value representing the type of index information to return.
|
2513
|
+
*
|
2514
|
+
* False Return only the information for unique indexes on the table.
|
2515
|
+
*
|
2516
|
+
* True Return the information for all indexes on the table.
|
2510
2517
|
*
|
2511
2518
|
* ===Return Values
|
2512
2519
|
*
|
@@ -2969,7 +2976,7 @@ VALUE ibm_db_exec(int argc, VALUE *argv, VALUE self)
|
|
2969
2976
|
rc = SQLAllocHandle(SQL_HANDLE_STMT, conn_res->hdbc, &(stmt_res->hstmt));
|
2970
2977
|
if ( rc < SQL_SUCCESS ) {
|
2971
2978
|
_ruby_ibm_db_check_sql_errors(conn_res->hdbc, SQL_HANDLE_DBC, rc, 1, NULL, -1, 1);
|
2972
|
-
|
2979
|
+
ruby_xfree(return_str);
|
2973
2980
|
return rc;
|
2974
2981
|
}
|
2975
2982
|
|
@@ -2987,11 +2994,11 @@ VALUE ibm_db_exec(int argc, VALUE *argv, VALUE self)
|
|
2987
2994
|
if ( rc < SQL_SUCCESS ) {
|
2988
2995
|
_ruby_ibm_db_check_sql_errors(stmt_res->hstmt, SQL_HANDLE_STMT, -1, 0, return_str, DB2_ERRMSG, stmt_res->errormsg_recno_tracker);
|
2989
2996
|
SQLFreeHandle( SQL_HANDLE_STMT, stmt_res->hstmt );
|
2990
|
-
|
2991
|
-
|
2997
|
+
ruby_xfree(stmt_res);
|
2998
|
+
ruby_xfree(return_str);
|
2992
2999
|
return Qfalse;
|
2993
3000
|
}
|
2994
|
-
|
3001
|
+
ruby_xfree(return_str);
|
2995
3002
|
|
2996
3003
|
return Data_Wrap_Struct(le_stmt_struct,
|
2997
3004
|
_ruby_ibm_db_mark_stmt_struct, _ruby_ibm_db_free_stmt_struct,
|
@@ -3449,7 +3456,7 @@ void var_assign(char *name, VALUE value) {
|
|
3449
3456
|
strcat(statement, "=");
|
3450
3457
|
strcat(statement, expr);
|
3451
3458
|
rb_eval_string(statement);
|
3452
|
-
|
3459
|
+
ruby_xfree(statement);
|
3453
3460
|
#endif
|
3454
3461
|
}
|
3455
3462
|
|
@@ -3630,10 +3637,10 @@ VALUE ibm_db_execute(int argc, VALUE *argv, VALUE self)
|
|
3630
3637
|
|
3631
3638
|
/* Free Values */
|
3632
3639
|
if ( prev_ptr->svalue) {
|
3633
|
-
|
3640
|
+
ruby_xfree(prev_ptr->svalue);
|
3634
3641
|
}
|
3635
3642
|
|
3636
|
-
|
3643
|
+
ruby_xfree(prev_ptr);
|
3637
3644
|
|
3638
3645
|
prev_ptr = curr_ptr;
|
3639
3646
|
}
|
@@ -4766,11 +4773,11 @@ VALUE ibm_db_result(int argc, VALUE *argv, VALUE self)
|
|
4766
4773
|
return Qfalse;
|
4767
4774
|
}
|
4768
4775
|
if (out_length == SQL_NULL_DATA) {
|
4769
|
-
|
4776
|
+
ruby_xfree(out_ptr);
|
4770
4777
|
return Qnil;
|
4771
4778
|
} else {
|
4772
4779
|
return_value = rb_str_new2((char*)out_ptr);
|
4773
|
-
|
4780
|
+
ruby_xfree(out_ptr);
|
4774
4781
|
return return_value;
|
4775
4782
|
}
|
4776
4783
|
break;
|
@@ -5017,7 +5024,7 @@ static VALUE _ruby_ibm_db_bind_fetch_helper(int argc, VALUE *argv, int op)
|
|
5017
5024
|
}
|
5018
5025
|
rc = _ruby_ibm_db_get_data(stmt_res, i+1, SQL_C_CHAR, out_ptr, tmp_length+1, &out_length);
|
5019
5026
|
if ( rc == SQL_ERROR ) {
|
5020
|
-
|
5027
|
+
ruby_xfree(out_ptr);
|
5021
5028
|
return Qfalse;
|
5022
5029
|
}
|
5023
5030
|
if (out_length == SQL_NULL_DATA) {
|
@@ -5161,7 +5168,7 @@ static VALUE _ruby_ibm_db_bind_fetch_helper(int argc, VALUE *argv, int op)
|
|
5161
5168
|
|
5162
5169
|
rc = _ruby_ibm_db_get_data2(stmt_res, i+1, lob_bind_type, (char *)out_ptr, tmp_length, &out_length);
|
5163
5170
|
if (rc == SQL_ERROR) {
|
5164
|
-
|
5171
|
+
ruby_xfree(out_ptr);
|
5165
5172
|
out_length = 0;
|
5166
5173
|
}
|
5167
5174
|
|
@@ -5207,7 +5214,7 @@ static VALUE _ruby_ibm_db_bind_fetch_helper(int argc, VALUE *argv, int op)
|
|
5207
5214
|
}
|
5208
5215
|
rc = _ruby_ibm_db_get_data(stmt_res, i+1, SQL_C_BINARY, out_ptr, tmp_length, &out_length);
|
5209
5216
|
if (rc == SQL_ERROR) {
|
5210
|
-
|
5217
|
+
ruby_xfree(out_ptr);
|
5211
5218
|
return Qfalse;
|
5212
5219
|
}
|
5213
5220
|
|
@@ -5246,7 +5253,7 @@ static VALUE _ruby_ibm_db_bind_fetch_helper(int argc, VALUE *argv, int op)
|
|
5246
5253
|
|
5247
5254
|
rc = _ruby_ibm_db_get_data2(stmt_res, i+1, SQL_C_CHAR, out_ptr, tmp_length+1, &out_length);
|
5248
5255
|
if (rc == SQL_ERROR) {
|
5249
|
-
|
5256
|
+
ruby_xfree(out_ptr);
|
5250
5257
|
tmp_length = 0;
|
5251
5258
|
} else {
|
5252
5259
|
out_ptr[tmp_length] = '\0';
|
@@ -5423,7 +5430,7 @@ VALUE ibm_db_fetch_object(int argc, VALUE *argv, VALUE self)
|
|
5423
5430
|
_ruby_ibm_db_mark_row_struct, _ruby_ibm_db_free_row_struct,
|
5424
5431
|
row_res);
|
5425
5432
|
} else {
|
5426
|
-
|
5433
|
+
ruby_xfree(row_res);
|
5427
5434
|
return Qfalse;
|
5428
5435
|
}
|
5429
5436
|
}
|
data/ext/ruby_ibm_db.h
CHANGED
@@ -22,9 +22,15 @@
|
|
22
22
|
#endif
|
23
23
|
|
24
24
|
#ifndef SQL_ATTR_REPLACE_QUOTED_LITERALS
|
25
|
-
#define SQL_ATTR_REPLACE_QUOTED_LITERALS
|
25
|
+
#define SQL_ATTR_REPLACE_QUOTED_LITERALS 2586
|
26
26
|
#endif
|
27
27
|
|
28
|
+
/* CLI v9.1 FP3 and below has a SQL_ATTR_REPLACE_QUOTED_LITERALS value of 116
|
29
|
+
* We need to support both the new and old values for compatibility with older
|
30
|
+
* versions of CLI. CLI v9.1 FP4 and beyond changed this value to 2586
|
31
|
+
*/
|
32
|
+
#define SQL_ATTR_REPLACE_QUOTED_LITERALS_OLDVALUE 116
|
33
|
+
|
28
34
|
/* If using a DB2 CLI version which doesn't support this functionality, explicitly
|
29
35
|
* define this. We will rely on DB2 CLI to throw an error when SQLGetStmtAttr is
|
30
36
|
* called.
|
metadata
CHANGED
@@ -1,10 +1,10 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
|
-
rubygems_version: 0.9.
|
2
|
+
rubygems_version: 0.9.4
|
3
3
|
specification_version: 1
|
4
4
|
name: ibm_db
|
5
5
|
version: !ruby/object:Gem::Version
|
6
|
-
version: 0.
|
7
|
-
date: 2007-
|
6
|
+
version: 0.9.0
|
7
|
+
date: 2007-10-15 00:00:00 -04:00
|
8
8
|
summary: "Rails Driver and Adapter for IBM Data Servers: {LUW, zOS, i5, IDS}"
|
9
9
|
require_paths:
|
10
10
|
- lib
|