ibm_db 2.5.18 → 2.5.25
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 +4 -0
- data/README +1 -1
- data/ext/extconf.rb +19 -2
- data/ext/ibm_db.c +112 -43
- data/lib/active_record/connection_adapters/ibm_db_adapter.rb +262 -19
- metadata +59 -43
- checksums.yaml +0 -7
data/CHANGES
CHANGED
@@ -1,5 +1,9 @@
|
|
1
1
|
Change Log
|
2
2
|
==============
|
3
|
+
2015/03/24 (IBM_DB adapter 2.5.25, driver 2.5.25)
|
4
|
+
- Support for Rails 4.2.x
|
5
|
+
- Support for Ruby 2.2.x
|
6
|
+
|
3
7
|
2014/08/03 (IBM_DB adapter 2.5.18, driver 2.5.14) :
|
4
8
|
- Support for Rails 4.1.x
|
5
9
|
- Enhanced installation to pull IBM Data Server Driver automatically if not present
|
data/README
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
=====================================================================
|
2
|
-
README for the IBM_DB Adapter (2.5.
|
2
|
+
README for the IBM_DB Adapter (2.5.25) and Driver (2.5.25) (2015/03/24)
|
3
3
|
For ActiveRecord Version >= 1.15.5 (and Rails >= 1.2.5)
|
4
4
|
=====================================================================
|
5
5
|
|
data/ext/extconf.rb
CHANGED
@@ -5,6 +5,7 @@ require 'rubygems/package'
|
|
5
5
|
require 'zlib'
|
6
6
|
require 'fileutils'
|
7
7
|
|
8
|
+
|
8
9
|
# +----------------------------------------------------------------------+
|
9
10
|
# | Licensed Materials - Property of IBM |
|
10
11
|
# | |
|
@@ -227,16 +228,32 @@ step 3: - Retry gem install
|
|
227
228
|
EOL
|
228
229
|
end
|
229
230
|
|
231
|
+
if(RUBY_VERSION =~ /2./)
|
232
|
+
require 'rbconfig'
|
233
|
+
end
|
234
|
+
|
230
235
|
alias :libpathflag0 :libpathflag
|
231
236
|
def libpathflag(libpath)
|
232
|
-
|
233
|
-
|
237
|
+
if(RUBY_VERSION =~ /2./)
|
238
|
+
ldflags = case RbConfig::CONFIG["arch"]
|
239
|
+
when /solaris2/
|
240
|
+
libpath[0..-2].map {|path| " -R#{path}"}.join
|
241
|
+
when /linux/
|
242
|
+
libpath[0..-2].map {|path| " -R#{path} "}.join
|
243
|
+
else
|
244
|
+
""
|
245
|
+
end
|
246
|
+
else
|
247
|
+
ldflags = case Config::CONFIG["arch"]
|
248
|
+
when /solaris2/
|
234
249
|
libpath[0..-2].map {|path| " -R#{path}"}.join
|
235
250
|
when /linux/
|
236
251
|
libpath[0..-2].map {|path| " -R#{path} "}.join
|
237
252
|
else
|
238
253
|
""
|
239
254
|
end
|
255
|
+
end
|
256
|
+
|
240
257
|
#libpathflag0 + " '-Wl,-R$$ORIGIN/clidriver/lib #{ldflags}' "
|
241
258
|
libpathflag0 + " '-Wl,-R$$ORIGIN/clidriver/lib' "
|
242
259
|
end
|
data/ext/ibm_db.c
CHANGED
@@ -2,17 +2,17 @@
|
|
2
2
|
+----------------------------------------------------------------------+
|
3
3
|
| Licensed Materials - Property of IBM |
|
4
4
|
| |
|
5
|
-
| (C) Copyright IBM Corporation 2006
|
5
|
+
| (C) Copyright IBM Corporation 2006 - 2015 |
|
6
6
|
+----------------------------------------------------------------------+
|
7
7
|
| Authors: Sushant Koduru, Lynh Nguyen, Kanchana Padmanabhan, |
|
8
8
|
| Dan Scott, Helmut Tessarek, Sam Ruby, Kellen Bombardier, |
|
9
9
|
| Tony Cairns, Manas Dadarkar, Swetha Patel, Salvador Ledezma |
|
10
10
|
| Mario Ds Briggs, Praveen Devarao, Ambrish Bhargava, |
|
11
|
-
| Tarun Pasrija
|
11
|
+
| Tarun Pasrija, Arvind Gupta |
|
12
12
|
+----------------------------------------------------------------------+
|
13
13
|
*/
|
14
14
|
|
15
|
-
#define MODULE_RELEASE "2.5.
|
15
|
+
#define MODULE_RELEASE "2.5.25"
|
16
16
|
|
17
17
|
#ifdef HAVE_CONFIG_H
|
18
18
|
#include "config.h"
|
@@ -28,6 +28,12 @@
|
|
28
28
|
#include "ruby_ibm_db.h"
|
29
29
|
#include <ctype.h>
|
30
30
|
|
31
|
+
#ifdef RUBY_THREAD_H
|
32
|
+
#include <ruby/thread.h>
|
33
|
+
#endif
|
34
|
+
|
35
|
+
#include <ruby/version.h>
|
36
|
+
|
31
37
|
/* True global resources - no need for thread safety here */
|
32
38
|
static VALUE le_conn_struct, le_stmt_struct, le_pconn_struct, le_row_struct;
|
33
39
|
static VALUE le_client_info, le_server_info;
|
@@ -105,6 +111,9 @@ static VALUE id_id2name;
|
|
105
111
|
#define RUBY_FALIAS(alias, function) \
|
106
112
|
rb_define_singleton_method(mDB, #alias, ibm_db_##function, -1);
|
107
113
|
|
114
|
+
|
115
|
+
|
116
|
+
|
108
117
|
#ifdef UNICODE_SUPPORT_VERSION
|
109
118
|
const int _check_i = 1;
|
110
119
|
#define arch_is_bigendian() ( (*(char*)&_check_i) == 0 ) /* returns 0 if the machine is of little endian architecture, 1 if the machine is of bigendian architecture*/
|
@@ -672,6 +681,25 @@ static void _ruby_ibm_db_mark_stmt_struct(stmt_handle *handle)
|
|
672
681
|
{
|
673
682
|
}
|
674
683
|
|
684
|
+
|
685
|
+
//VALUE ibm_Ruby_Thread_Call(void *(*func)(void *), void *data1, rb_unblock_function_t *ubf, void *data2)
|
686
|
+
VALUE ibm_Ruby_Thread_Call(rb_blocking_function_t *func, void *data1, rb_unblock_function_t *ubf, void *data2)
|
687
|
+
{
|
688
|
+
#ifdef RUBY_API_VERSION_MAJOR
|
689
|
+
if( RUBY_API_VERSION_MAJOR >=2 && RUBY_API_VERSION_MINOR >=2)
|
690
|
+
{
|
691
|
+
rb_thread_call_without_gvl(func, data1, ubf, data2);
|
692
|
+
}
|
693
|
+
else
|
694
|
+
{
|
695
|
+
return rb_thread_blocking_region(func, data1, ubf, data2);
|
696
|
+
}
|
697
|
+
#else
|
698
|
+
return rb_thread_blocking_region(func, data1, ubf, data2);
|
699
|
+
#endif
|
700
|
+
}
|
701
|
+
|
702
|
+
|
675
703
|
/* */
|
676
704
|
|
677
705
|
/* static _ruby_ibm_db_free_stmt_handle_and_resources */
|
@@ -988,7 +1016,8 @@ static void _ruby_ibm_db_check_sql_errors( void *conn_or_stmt, int resourceType,
|
|
988
1016
|
if( release_gil == 1 ){
|
989
1017
|
|
990
1018
|
#ifdef UNICODE_SUPPORT_VERSION
|
991
|
-
return_code =
|
1019
|
+
//return_code = rb_thread_call_without_gvl ( (void *)_ruby_ibm_db_SQLGetDiagRec_helper, get_DiagRec_args,
|
1020
|
+
return_code = ibm_Ruby_Thread_Call ( (void *)_ruby_ibm_db_SQLGetDiagRec_helper, get_DiagRec_args,
|
992
1021
|
(void *)_ruby_ibm_db_Connection_level_UBF, NULL);
|
993
1022
|
#else
|
994
1023
|
return_code = _ruby_ibm_db_SQLGetDiagRec_helper( get_DiagRec_args );
|
@@ -2501,7 +2530,8 @@ static VALUE _ruby_ibm_db_connect_helper( int argc, VALUE *argv, int isPersisten
|
|
2501
2530
|
|
2502
2531
|
/* Call the function where the actual logic is being run*/
|
2503
2532
|
#ifdef UNICODE_SUPPORT_VERSION
|
2504
|
-
return_value =
|
2533
|
+
//return_value = rb_thread_call_without_gvl ( (void *)_ruby_ibm_db_connect_helper2, helper_args,
|
2534
|
+
return_value = ibm_Ruby_Thread_Call ( (void *)_ruby_ibm_db_connect_helper2, helper_args,
|
2505
2535
|
(void *)_ruby_ibm_db_Connection_level_UBF, NULL);
|
2506
2536
|
#else
|
2507
2537
|
return_value = _ruby_ibm_db_connect_helper2( helper_args );
|
@@ -2919,7 +2949,8 @@ VALUE ruby_ibm_db_createDb_helper(VALUE connection, VALUE dbName, VALUE codeSet,
|
|
2919
2949
|
_ruby_ibm_db_clear_conn_err_cache();
|
2920
2950
|
|
2921
2951
|
#ifdef UNICODE_SUPPORT_VERSION
|
2922
|
-
rc =
|
2952
|
+
//rc = rb_thread_call_without_gvl ( (void *)_ruby_ibm_db_SQLCreateDB_helper, create_db_args,
|
2953
|
+
rc = ibm_Ruby_Thread_Call ( (void *)_ruby_ibm_db_SQLCreateDB_helper, create_db_args,
|
2923
2954
|
(void *)_ruby_ibm_db_Connection_level_UBF, NULL );
|
2924
2955
|
#else
|
2925
2956
|
rc = _ruby_ibm_db_SQLCreateDB_helper( create_db_args );
|
@@ -3048,7 +3079,8 @@ VALUE ruby_ibm_db_dropDb_helper(VALUE connection, VALUE dbName) {
|
|
3048
3079
|
_ruby_ibm_db_clear_conn_err_cache();
|
3049
3080
|
|
3050
3081
|
#ifdef UNICODE_SUPPORT_VERSION
|
3051
|
-
rc =
|
3082
|
+
//rc = rb_thread_call_without_gvl ( (void *)_ruby_ibm_db_SQLDropDB_helper, drop_db_args,
|
3083
|
+
rc = ibm_Ruby_Thread_Call ( (void *)_ruby_ibm_db_SQLDropDB_helper, drop_db_args,
|
3052
3084
|
(void *)_ruby_ibm_db_Connection_level_UBF, NULL );
|
3053
3085
|
#else
|
3054
3086
|
rc = _ruby_ibm_db_SQLDropDB_helper( drop_db_args );
|
@@ -3410,7 +3442,8 @@ VALUE ibm_db_bind_param_helper(int argc, char * varname, long varname_len ,long
|
|
3410
3442
|
param_type = SQL_PARAM_INPUT;
|
3411
3443
|
|
3412
3444
|
#ifdef UNICODE_SUPPORT_VERSION
|
3413
|
-
rc =
|
3445
|
+
//rc = rb_thread_call_without_gvl ( (void *)_ruby_ibm_db_SQLDescribeParam_helper, data,
|
3446
|
+
rc = ibm_Ruby_Thread_Call ( (void *)_ruby_ibm_db_SQLDescribeParam_helper, data,
|
3414
3447
|
(void *)_ruby_ibm_db_Statement_level_UBF, stmt_res);
|
3415
3448
|
#else
|
3416
3449
|
rc = _ruby_ibm_db_SQLDescribeParam_helper( data );
|
@@ -3430,7 +3463,8 @@ VALUE ibm_db_bind_param_helper(int argc, char * varname, long varname_len ,long
|
|
3430
3463
|
case 4:
|
3431
3464
|
|
3432
3465
|
#ifdef UNICODE_SUPPORT_VERSION
|
3433
|
-
rc =
|
3466
|
+
//rc = rb_thread_call_without_gvl ( (void *)_ruby_ibm_db_SQLDescribeParam_helper, data,
|
3467
|
+
rc = ibm_Ruby_Thread_Call ( (void *)_ruby_ibm_db_SQLDescribeParam_helper, data,
|
3434
3468
|
(void *)_ruby_ibm_db_Statement_level_UBF, stmt_res);
|
3435
3469
|
#else
|
3436
3470
|
rc = _ruby_ibm_db_SQLDescribeParam_helper( data );
|
@@ -3450,7 +3484,8 @@ VALUE ibm_db_bind_param_helper(int argc, char * varname, long varname_len ,long
|
|
3450
3484
|
case 5:
|
3451
3485
|
|
3452
3486
|
#ifdef UNICODE_SUPPORT_VERSION
|
3453
|
-
rc =
|
3487
|
+
//rc = rb_thread_call_without_gvl ( (void *)_ruby_ibm_db_SQLDescribeParam_helper, data,
|
3488
|
+
rc = ibm_Ruby_Thread_Call ( (void *)_ruby_ibm_db_SQLDescribeParam_helper, data,
|
3454
3489
|
(void *)_ruby_ibm_db_Statement_level_UBF, stmt_res );
|
3455
3490
|
#else
|
3456
3491
|
rc = _ruby_ibm_db_SQLDescribeParam_helper( data );
|
@@ -3471,7 +3506,8 @@ VALUE ibm_db_bind_param_helper(int argc, char * varname, long varname_len ,long
|
|
3471
3506
|
case 6:
|
3472
3507
|
|
3473
3508
|
#ifdef UNICODE_SUPPORT_VERSION
|
3474
|
-
rc =
|
3509
|
+
//rc = rb_thread_call_without_gvl ( (void *)_ruby_ibm_db_SQLDescribeParam_helper, data,
|
3510
|
+
rc = ibm_Ruby_Thread_Call ( (void *)_ruby_ibm_db_SQLDescribeParam_helper, data,
|
3475
3511
|
(void *)_ruby_ibm_db_Statement_level_UBF, stmt_res );
|
3476
3512
|
#else
|
3477
3513
|
rc = _ruby_ibm_db_SQLDescribeParam_helper( data );
|
@@ -3703,7 +3739,8 @@ VALUE ibm_db_close(int argc, VALUE *argv, VALUE self)
|
|
3703
3739
|
end_X_args->completionType = SQL_ROLLBACK; /*Remeber you are rolling back the transaction*/
|
3704
3740
|
|
3705
3741
|
#ifdef UNICODE_SUPPORT_VERSION
|
3706
|
-
rc =
|
3742
|
+
//rc = rb_thread_call_without_gvl ( (void *)_ruby_ibm_db_SQLEndTran, end_X_args,
|
3743
|
+
rc = ibm_Ruby_Thread_Call ( (void *)_ruby_ibm_db_SQLEndTran, end_X_args,
|
3707
3744
|
(void *)_ruby_ibm_db_Connection_level_UBF, NULL);
|
3708
3745
|
#else
|
3709
3746
|
rc = _ruby_ibm_db_SQLEndTran( end_X_args );
|
@@ -3721,7 +3758,8 @@ VALUE ibm_db_close(int argc, VALUE *argv, VALUE self)
|
|
3721
3758
|
}
|
3722
3759
|
|
3723
3760
|
#ifdef UNICODE_SUPPORT_VERSION
|
3724
|
-
rc =
|
3761
|
+
//rc = rb_thread_call_without_gvl ( (void *)_ruby_ibm_db_SQLDisconnect_helper, &(conn_res->hdbc),
|
3762
|
+
rc = ibm_Ruby_Thread_Call ( (void *)_ruby_ibm_db_SQLDisconnect_helper, &(conn_res->hdbc),
|
3725
3763
|
(void *)_ruby_ibm_db_Connection_level_UBF, NULL);
|
3726
3764
|
#else
|
3727
3765
|
rc = _ruby_ibm_db_SQLDisconnect_helper( &(conn_res->hdbc) );
|
@@ -3898,7 +3936,8 @@ VALUE ibm_db_column_privileges(int argc, VALUE *argv, VALUE self)
|
|
3898
3936
|
col_privileges_args->stmt_res = stmt_res;
|
3899
3937
|
|
3900
3938
|
#ifdef UNICODE_SUPPORT_VERSION
|
3901
|
-
rc =
|
3939
|
+
//rc = rb_thread_call_without_gvl ( (void *)_ruby_ibm_db_SQLColumnPrivileges_helper, col_privileges_args,
|
3940
|
+
rc = ibm_Ruby_Thread_Call ( (void *)_ruby_ibm_db_SQLColumnPrivileges_helper, col_privileges_args,
|
3902
3941
|
(void *)_ruby_ibm_db_Statement_level_UBF, stmt_res );
|
3903
3942
|
#else
|
3904
3943
|
rc = _ruby_ibm_db_SQLColumnPrivileges_helper( col_privileges_args );
|
@@ -4078,7 +4117,8 @@ VALUE ibm_db_columns(int argc, VALUE *argv, VALUE self)
|
|
4078
4117
|
col_metadata_args->stmt_res = stmt_res;
|
4079
4118
|
|
4080
4119
|
#ifdef UNICODE_SUPPORT_VERSION
|
4081
|
-
rc =
|
4120
|
+
//rc = rb_thread_call_without_gvl ( (void *)_ruby_ibm_db_SQLColumns_helper, col_metadata_args,
|
4121
|
+
rc = ibm_Ruby_Thread_Call ( (void *)_ruby_ibm_db_SQLColumns_helper, col_metadata_args,
|
4082
4122
|
(void *)_ruby_ibm_db_Statement_level_UBF, stmt_res );
|
4083
4123
|
#else
|
4084
4124
|
rc = _ruby_ibm_db_SQLColumns_helper( col_metadata_args );
|
@@ -4244,7 +4284,8 @@ VALUE ibm_db_foreign_keys(int argc, VALUE *argv, VALUE self)
|
|
4244
4284
|
col_metadata_args->stmt_res = stmt_res;
|
4245
4285
|
|
4246
4286
|
#ifdef UNICODE_SUPPORT_VERSION
|
4247
|
-
rc =
|
4287
|
+
//rc = rb_thread_call_without_gvl ( (void *)_ruby_ibm_db_SQLForeignKeys_helper, col_metadata_args,
|
4288
|
+
rc = ibm_Ruby_Thread_Call ( (void *)_ruby_ibm_db_SQLForeignKeys_helper, col_metadata_args,
|
4248
4289
|
(void *)_ruby_ibm_db_Statement_level_UBF, stmt_res );
|
4249
4290
|
#else
|
4250
4291
|
rc = _ruby_ibm_db_SQLForeignKeys_helper( col_metadata_args );
|
@@ -4400,7 +4441,8 @@ VALUE ibm_db_primary_keys(int argc, VALUE *argv, VALUE self)
|
|
4400
4441
|
col_metadata_args->stmt_res = stmt_res;
|
4401
4442
|
|
4402
4443
|
#ifdef UNICODE_SUPPORT_VERSION
|
4403
|
-
rc =
|
4444
|
+
//rc = rb_thread_call_without_gvl ( (void *)_ruby_ibm_db_SQLPrimaryKeys_helper, col_metadata_args,
|
4445
|
+
rc = ibm_Ruby_Thread_Call ( (void *)_ruby_ibm_db_SQLPrimaryKeys_helper, col_metadata_args,
|
4404
4446
|
(void *)_ruby_ibm_db_Statement_level_UBF, stmt_res );
|
4405
4447
|
#else
|
4406
4448
|
rc = _ruby_ibm_db_SQLPrimaryKeys_helper( col_metadata_args );
|
@@ -4591,7 +4633,8 @@ VALUE ibm_db_procedure_columns(int argc, VALUE *argv, VALUE self)
|
|
4591
4633
|
col_metadata_args->stmt_res = stmt_res;
|
4592
4634
|
|
4593
4635
|
#ifdef UNICODE_SUPPORT_VERSION
|
4594
|
-
rc =
|
4636
|
+
//rc = rb_thread_call_without_gvl ( (void *)_ruby_ibm_db_SQLProcedureColumns_helper, col_metadata_args,
|
4637
|
+
rc = ibm_Ruby_Thread_Call ( (void *)_ruby_ibm_db_SQLProcedureColumns_helper, col_metadata_args,
|
4595
4638
|
(void *)_ruby_ibm_db_Statement_level_UBF, stmt_res);
|
4596
4639
|
#else
|
4597
4640
|
rc = _ruby_ibm_db_SQLProcedureColumns_helper( col_metadata_args );
|
@@ -4748,7 +4791,8 @@ VALUE ibm_db_procedures(int argc, VALUE *argv, VALUE self)
|
|
4748
4791
|
proc_metadata_args->stmt_res = stmt_res;
|
4749
4792
|
|
4750
4793
|
#ifdef UNICODE_SUPPORT_VERSION
|
4751
|
-
rc =
|
4794
|
+
//rc = rb_thread_call_without_gvl ( (void *)_ruby_ibm_db_SQLProcedures_helper, proc_metadata_args,
|
4795
|
+
rc = ibm_Ruby_Thread_Call ( (void *)_ruby_ibm_db_SQLProcedures_helper, proc_metadata_args,
|
4752
4796
|
(void *)_ruby_ibm_db_Statement_level_UBF, stmt_res);
|
4753
4797
|
#else
|
4754
4798
|
rc = _ruby_ibm_db_SQLProcedures_helper( proc_metadata_args );
|
@@ -4925,7 +4969,8 @@ VALUE ibm_db_special_columns(int argc, VALUE *argv, VALUE self)
|
|
4925
4969
|
col_metadata_args->stmt_res = stmt_res;
|
4926
4970
|
|
4927
4971
|
#ifdef UNICODE_SUPPORT_VERSION
|
4928
|
-
rc =
|
4972
|
+
//rc = rb_thread_call_without_gvl ( (void *)_ruby_ibm_db_SQLSpecialColumns_helper, col_metadata_args,
|
4973
|
+
rc = ibm_Ruby_Thread_Call ( (void *)_ruby_ibm_db_SQLSpecialColumns_helper, col_metadata_args,
|
4929
4974
|
(void *)_ruby_ibm_db_Statement_level_UBF, stmt_res);
|
4930
4975
|
#else
|
4931
4976
|
rc = _ruby_ibm_db_SQLSpecialColumns_helper( col_metadata_args );
|
@@ -5120,7 +5165,8 @@ VALUE ibm_db_statistics(int argc, VALUE *argv, VALUE self)
|
|
5120
5165
|
col_metadata_args->stmt_res = stmt_res;
|
5121
5166
|
|
5122
5167
|
#ifdef UNICODE_SUPPORT_VERSION
|
5123
|
-
rc =
|
5168
|
+
//rc = rb_thread_call_without_gvl ( (void *)_ruby_ibm_db_SQLStatistics_helper, col_metadata_args,
|
5169
|
+
rc = ibm_Ruby_Thread_Call ( (void *)_ruby_ibm_db_SQLStatistics_helper, col_metadata_args,
|
5124
5170
|
(void *)_ruby_ibm_db_Statement_level_UBF, stmt_res );
|
5125
5171
|
#else
|
5126
5172
|
rc = _ruby_ibm_db_SQLStatistics_helper( col_metadata_args );
|
@@ -5279,7 +5325,8 @@ VALUE ibm_db_table_privileges(int argc, VALUE *argv, VALUE self)
|
|
5279
5325
|
table_privileges_args->stmt_res = stmt_res;
|
5280
5326
|
|
5281
5327
|
#ifdef UNICODE_SUPPORT_VERSION
|
5282
|
-
rc =
|
5328
|
+
//rc = rb_thread_call_without_gvl ( (void *)_ruby_ibm_db_SQLTablePrivileges_helper, table_privileges_args,
|
5329
|
+
rc = ibm_Ruby_Thread_Call ( (void *)_ruby_ibm_db_SQLTablePrivileges_helper, table_privileges_args,
|
5283
5330
|
(void *)_ruby_ibm_db_Statement_level_UBF, stmt_res );
|
5284
5331
|
#else
|
5285
5332
|
rc = _ruby_ibm_db_SQLTablePrivileges_helper( table_privileges_args );
|
@@ -5453,7 +5500,8 @@ VALUE ibm_db_tables(int argc, VALUE *argv, VALUE self)
|
|
5453
5500
|
table_metadata_args->stmt_res = stmt_res;
|
5454
5501
|
|
5455
5502
|
#ifdef UNICODE_SUPPORT_VERSION
|
5456
|
-
rc =
|
5503
|
+
//rc = rb_thread_call_without_gvl ( (void *)_ruby_ibm_db_SQLTables_helper, table_metadata_args,
|
5504
|
+
rc = ibm_Ruby_Thread_Call ( (void *)_ruby_ibm_db_SQLTables_helper, table_metadata_args,
|
5457
5505
|
(void *)_ruby_ibm_db_Statement_level_UBF, stmt_res );
|
5458
5506
|
#else
|
5459
5507
|
rc = _ruby_ibm_db_SQLTables_helper( table_metadata_args );
|
@@ -5535,7 +5583,8 @@ VALUE ibm_db_commit(int argc, VALUE *argv, VALUE self)
|
|
5535
5583
|
end_X_args->completionType = SQL_COMMIT; /*Remeber you are Commiting the transaction*/
|
5536
5584
|
|
5537
5585
|
#ifdef UNICODE_SUPPORT_VERSION
|
5538
|
-
rc =
|
5586
|
+
//rc = rb_thread_call_without_gvl ( (void *)_ruby_ibm_db_SQLEndTran, end_X_args,
|
5587
|
+
rc = ibm_Ruby_Thread_Call ( (void *)_ruby_ibm_db_SQLEndTran, end_X_args,
|
5539
5588
|
(void *)_ruby_ibm_db_Connection_level_UBF, NULL);
|
5540
5589
|
#else
|
5541
5590
|
rc = _ruby_ibm_db_SQLEndTran( end_X_args );
|
@@ -5615,7 +5664,8 @@ static int _ruby_ibm_db_do_prepare(conn_handle *conn_res, VALUE stmt, stmt_handl
|
|
5615
5664
|
|
5616
5665
|
/* Prepare the stmt. The cursor type requested has already been set in _ruby_ibm_db_assign_options */
|
5617
5666
|
#ifdef UNICODE_SUPPORT_VERSION
|
5618
|
-
rc =
|
5667
|
+
//rc = rb_thread_call_without_gvl ( (void *)_ruby_ibm_db_SQLPrepare_helper, prepare_args,
|
5668
|
+
rc = ibm_Ruby_Thread_Call ( (void *)_ruby_ibm_db_SQLPrepare_helper, prepare_args,
|
5619
5669
|
(void *)_ruby_ibm_db_Statement_level_UBF, stmt_res );
|
5620
5670
|
#else
|
5621
5671
|
rc = _ruby_ibm_db_SQLPrepare_helper( prepare_args );
|
@@ -5753,7 +5803,8 @@ VALUE ibm_db_exec(int argc, VALUE *argv, VALUE self)
|
|
5753
5803
|
exec_direct_args->stmt_res = stmt_res;
|
5754
5804
|
|
5755
5805
|
#ifdef UNICODE_SUPPORT_VERSION
|
5756
|
-
rc =
|
5806
|
+
//rc = rb_thread_call_without_gvl ( (void *)_ruby_ibm_db_SQLExecDirect_helper, exec_direct_args,
|
5807
|
+
rc = ibm_Ruby_Thread_Call ( (void *)_ruby_ibm_db_SQLExecDirect_helper, exec_direct_args,
|
5757
5808
|
(void *)_ruby_ibm_db_Statement_level_UBF, stmt_res );
|
5758
5809
|
#else
|
5759
5810
|
rc = _ruby_ibm_db_SQLExecDirect_helper( exec_direct_args );
|
@@ -5828,7 +5879,8 @@ VALUE ibm_db_free_result(int argc, VALUE *argv, VALUE self)
|
|
5828
5879
|
freeStmt_args->option = SQL_CLOSE;
|
5829
5880
|
|
5830
5881
|
#ifdef UNICODE_SUPPORT_VERSION
|
5831
|
-
rc =
|
5882
|
+
//rc = rb_thread_call_without_gvl ( (void *)_ruby_ibm_db_SQLFreeStmt_helper, freeStmt_args,
|
5883
|
+
rc = ibm_Ruby_Thread_Call ( (void *)_ruby_ibm_db_SQLFreeStmt_helper, freeStmt_args,
|
5832
5884
|
(void *)_ruby_ibm_db_Statement_level_UBF, stmt_res );
|
5833
5885
|
#else
|
5834
5886
|
rc = _ruby_ibm_db_SQLFreeStmt_helper( freeStmt_args );
|
@@ -6933,7 +6985,8 @@ VALUE ibm_db_execute(int argc, VALUE *argv, VALUE self)
|
|
6933
6985
|
bind_array->error = &error;
|
6934
6986
|
|
6935
6987
|
#ifdef UNICODE_SUPPORT_VERSION
|
6936
|
-
ret_value =
|
6988
|
+
//ret_value = rb_thread_call_without_gvl ( (void *)_ruby_ibm_db_execute_helper, bind_array,
|
6989
|
+
ret_value = ibm_Ruby_Thread_Call ( (void *)_ruby_ibm_db_execute_helper, bind_array,
|
6937
6990
|
(void *)_ruby_ibm_db_Statement_level_UBF, stmt_res );
|
6938
6991
|
#else
|
6939
6992
|
ret_value = _ruby_ibm_db_execute_helper( bind_array );
|
@@ -7718,7 +7771,8 @@ VALUE ibm_db_next_result(int argc, VALUE *argv, VALUE self)
|
|
7718
7771
|
nextresultparams->new_hstmt = &new_hstmt;
|
7719
7772
|
|
7720
7773
|
#ifdef UNICODE_SUPPORT_VERSION
|
7721
|
-
rc =
|
7774
|
+
//rc = rb_thread_call_without_gvl ( (void *)_ruby_ibm_db_SQLNextResult_helper, nextresultparams,
|
7775
|
+
rc = ibm_Ruby_Thread_Call ( (void *)_ruby_ibm_db_SQLNextResult_helper, nextresultparams,
|
7722
7776
|
(void *)_ruby_ibm_db_Statement_level_UBF, stmt_res );
|
7723
7777
|
#else
|
7724
7778
|
rc = _ruby_ibm_db_SQLNextResult_helper( nextresultparams );
|
@@ -7817,7 +7871,8 @@ VALUE ibm_db_num_fields(int argc, VALUE *argv, VALUE self)
|
|
7817
7871
|
result_cols_args->count = 0;
|
7818
7872
|
|
7819
7873
|
#ifdef UNICODE_SUPPORT_VERSION
|
7820
|
-
rc =
|
7874
|
+
//rc = rb_thread_call_without_gvl ( (void *)_ruby_ibm_db_SQLNumResultCols_helper, result_cols_args,
|
7875
|
+
rc = ibm_Ruby_Thread_Call ( (void *)_ruby_ibm_db_SQLNumResultCols_helper, result_cols_args,
|
7821
7876
|
(void *)_ruby_ibm_db_Statement_level_UBF, stmt_res );
|
7822
7877
|
#else
|
7823
7878
|
rc = _ruby_ibm_db_SQLNumResultCols_helper( result_cols_args );
|
@@ -7910,7 +7965,8 @@ VALUE ibm_db_num_rows(int argc, VALUE *argv, VALUE self)
|
|
7910
7965
|
row_count_args->count = 0;
|
7911
7966
|
|
7912
7967
|
#ifdef UNICODE_SUPPORT_VERSION
|
7913
|
-
rc =
|
7968
|
+
//rc = rb_thread_call_without_gvl ( (void *)_ruby_ibm_db_SQLRowCount_helper, row_count_args,
|
7969
|
+
rc = ibm_Ruby_Thread_Call ( (void *)_ruby_ibm_db_SQLRowCount_helper, row_count_args,
|
7914
7970
|
(void *)_ruby_ibm_db_Statement_level_UBF, stmt_res );
|
7915
7971
|
#else
|
7916
7972
|
rc = _ruby_ibm_db_SQLRowCount_helper( row_count_args );
|
@@ -7966,7 +8022,8 @@ static int _ruby_ibm_db_get_column_by_name(stmt_handle *stmt_res, VALUE column,
|
|
7966
8022
|
if ( release_gil == 1 ) {
|
7967
8023
|
|
7968
8024
|
#ifdef UNICODE_SUPPORT_VERSION
|
7969
|
-
rc =
|
8025
|
+
//rc = rb_thread_call_without_gvl ( (void *)_ruby_ibm_db_get_result_set_info, stmt_res,
|
8026
|
+
rc = ibm_Ruby_Thread_Call ( (void *)_ruby_ibm_db_get_result_set_info, stmt_res,
|
7970
8027
|
(void *)_ruby_ibm_db_Statement_level_UBF, stmt_res );
|
7971
8028
|
#else
|
7972
8029
|
rc = _ruby_ibm_db_get_result_set_info( stmt_res );
|
@@ -8129,7 +8186,8 @@ VALUE ibm_db_field_display_size(int argc, VALUE *argv, VALUE self)
|
|
8129
8186
|
colattr_args->FieldIdentifier = SQL_DESC_DISPLAY_SIZE;
|
8130
8187
|
|
8131
8188
|
#ifdef UNICODE_SUPPORT_VERSION
|
8132
|
-
rc =
|
8189
|
+
//rc = rb_thread_call_without_gvl ( (void *)_ruby_ibm_db_SQLColAttributes_helper, colattr_args,
|
8190
|
+
rc = ibm_Ruby_Thread_Call ( (void *)_ruby_ibm_db_SQLColAttributes_helper, colattr_args,
|
8133
8191
|
(void *)_ruby_ibm_db_Statement_level_UBF, stmt_res );
|
8134
8192
|
#else
|
8135
8193
|
rc = _ruby_ibm_db_SQLColAttributes_helper( colattr_args );
|
@@ -8449,7 +8507,8 @@ VALUE ibm_db_field_width(int argc, VALUE *argv, VALUE self)
|
|
8449
8507
|
colattr_args->FieldIdentifier = SQL_DESC_LENGTH;
|
8450
8508
|
|
8451
8509
|
#ifdef UNICODE_SUPPORT_VERSION
|
8452
|
-
rc =
|
8510
|
+
//rc = rb_thread_call_without_gvl ( (void *)_ruby_ibm_db_SQLColAttributes_helper, colattr_args,
|
8511
|
+
rc = ibm_Ruby_Thread_Call ( (void *)_ruby_ibm_db_SQLColAttributes_helper, colattr_args,
|
8453
8512
|
(void *)_ruby_ibm_db_Statement_level_UBF, stmt_res );
|
8454
8513
|
#else
|
8455
8514
|
rc = _ruby_ibm_db_SQLColAttributes_helper( colattr_args );
|
@@ -8555,7 +8614,8 @@ VALUE ibm_db_rollback(int argc, VALUE *argv, VALUE self)
|
|
8555
8614
|
end_X_args->completionType = SQL_ROLLBACK; /*Remeber you are Rollingback the transaction*/
|
8556
8615
|
|
8557
8616
|
#ifdef UNICODE_SUPPORT_VERSION
|
8558
|
-
rc =
|
8617
|
+
//rc = rb_thread_call_without_gvl ( (void *)_ruby_ibm_db_SQLEndTran, end_X_args,
|
8618
|
+
rc = ibm_Ruby_Thread_Call ( (void *)_ruby_ibm_db_SQLEndTran, end_X_args,
|
8559
8619
|
(void *)_ruby_ibm_db_Connection_level_UBF, NULL);
|
8560
8620
|
#else
|
8561
8621
|
rc = _ruby_ibm_db_SQLEndTran( end_X_args );
|
@@ -9144,7 +9204,8 @@ VALUE ibm_db_result(int argc, VALUE *argv, VALUE self)
|
|
9144
9204
|
Data_Get_Struct(stmt, stmt_handle, result_args->stmt_res);
|
9145
9205
|
|
9146
9206
|
#ifdef UNICODE_SUPPORT_VERSION
|
9147
|
-
ret_val =
|
9207
|
+
//ret_val = rb_thread_call_without_gvl ( (void *)_ruby_ibm_db_result_helper, result_args,
|
9208
|
+
ret_val = ibm_Ruby_Thread_Call ( (void *)_ruby_ibm_db_result_helper, result_args,
|
9148
9209
|
(void *)_ruby_ibm_db_Statement_level_UBF, result_args->stmt_res );
|
9149
9210
|
#else
|
9150
9211
|
ret_val = _ruby_ibm_db_result_helper( result_args );
|
@@ -9947,7 +10008,8 @@ VALUE ibm_db_fetch_row(int argc, VALUE *argv, VALUE self)
|
|
9947
10008
|
helper_args->error = &error;
|
9948
10009
|
|
9949
10010
|
#ifdef UNICODE_SUPPORT_VERSION
|
9950
|
-
ret_val =
|
10011
|
+
//ret_val = rb_thread_call_without_gvl ( (void *)_ruby_ibm_db_fetch_row_helper, helper_args,
|
10012
|
+
ret_val = ibm_Ruby_Thread_Call ( (void *)_ruby_ibm_db_fetch_row_helper, helper_args,
|
9951
10013
|
(void *)_ruby_ibm_db_Statement_level_UBF, stmt_res );
|
9952
10014
|
#else
|
9953
10015
|
ret_val = _ruby_ibm_db_fetch_row_helper( helper_args );
|
@@ -10115,7 +10177,8 @@ VALUE ibm_db_fetch_assoc(int argc, VALUE *argv, VALUE self) {
|
|
10115
10177
|
helper_args->funcType = FETCH_ASSOC;
|
10116
10178
|
|
10117
10179
|
#ifdef UNICODE_SUPPORT_VERSION
|
10118
|
-
ret_val =
|
10180
|
+
//ret_val = rb_thread_call_without_gvl ( (void *)_ruby_ibm_db_bind_fetch_helper, helper_args,
|
10181
|
+
ret_val = ibm_Ruby_Thread_Call ( (void *)_ruby_ibm_db_bind_fetch_helper, helper_args,
|
10119
10182
|
(void *)_ruby_ibm_db_Statement_level_UBF, stmt_res );
|
10120
10183
|
#else
|
10121
10184
|
ret_val = _ruby_ibm_db_bind_fetch_helper( helper_args );
|
@@ -10202,7 +10265,8 @@ VALUE ibm_db_fetch_object(int argc, VALUE *argv, VALUE self)
|
|
10202
10265
|
helper_args->funcType = FETCH_ASSOC;
|
10203
10266
|
|
10204
10267
|
#ifdef UNICODE_SUPPORT_VERSION
|
10205
|
-
row_res->hash =
|
10268
|
+
//row_res->hash = rb_thread_call_without_gvl ( (void *)_ruby_ibm_db_bind_fetch_helper, helper_args,
|
10269
|
+
row_res->hash = ibm_Ruby_Thread_Call ( (void *)_ruby_ibm_db_bind_fetch_helper, helper_args,
|
10206
10270
|
(void *)_ruby_ibm_db_Statement_level_UBF, stmt_res );
|
10207
10271
|
#else
|
10208
10272
|
row_res->hash = _ruby_ibm_db_bind_fetch_helper( helper_args );
|
@@ -10284,7 +10348,8 @@ VALUE ibm_db_fetch_array(int argc, VALUE *argv, VALUE self)
|
|
10284
10348
|
helper_args->funcType = FETCH_INDEX;
|
10285
10349
|
|
10286
10350
|
#ifdef UNICODE_SUPPORT_VERSION
|
10287
|
-
ret_val =
|
10351
|
+
//ret_val = rb_thread_call_without_gvl ( (void *)_ruby_ibm_db_bind_fetch_helper, helper_args,
|
10352
|
+
ret_val = ibm_Ruby_Thread_Call ( (void *)_ruby_ibm_db_bind_fetch_helper, helper_args,
|
10288
10353
|
(void *)_ruby_ibm_db_Statement_level_UBF, stmt_res );
|
10289
10354
|
#else
|
10290
10355
|
ret_val = _ruby_ibm_db_bind_fetch_helper( helper_args );
|
@@ -10360,7 +10425,8 @@ VALUE ibm_db_fetch_both(int argc, VALUE *argv, VALUE self)
|
|
10360
10425
|
helper_args->funcType = FETCH_BOTH;
|
10361
10426
|
|
10362
10427
|
#ifdef UNICODE_SUPPORT_VERSION
|
10363
|
-
ret_val =
|
10428
|
+
//ret_val = rb_thread_call_without_gvl ( (void *)_ruby_ibm_db_bind_fetch_helper, helper_args,
|
10429
|
+
ret_val = ibm_Ruby_Thread_Call ( (void *)_ruby_ibm_db_bind_fetch_helper, helper_args,
|
10364
10430
|
(void *)_ruby_ibm_db_Statement_level_UBF, stmt_res );
|
10365
10431
|
#else
|
10366
10432
|
ret_val = _ruby_ibm_db_bind_fetch_helper( helper_args );
|
@@ -11111,7 +11177,8 @@ VALUE ibm_db_server_info(int argc, VALUE *argv, VALUE self)
|
|
11111
11177
|
getInfo_args->buff_length = 0;
|
11112
11178
|
|
11113
11179
|
#ifdef UNICODE_SUPPORT_VERSION
|
11114
|
-
return_value =
|
11180
|
+
//return_value = rb_thread_call_without_gvl ( (void *)ibm_db_server_info_helper, getInfo_args,
|
11181
|
+
return_value = ibm_Ruby_Thread_Call ( (void *)ibm_db_server_info_helper, getInfo_args,
|
11115
11182
|
(void *)_ruby_ibm_db_Connection_level_UBF, NULL);
|
11116
11183
|
#else
|
11117
11184
|
return_value = ibm_db_server_info_helper( getInfo_args );
|
@@ -11398,7 +11465,8 @@ VALUE ibm_db_client_info(int argc, VALUE *argv, VALUE self)
|
|
11398
11465
|
getInfo_args->buff_length = 0;
|
11399
11466
|
|
11400
11467
|
#ifdef UNICODE_SUPPORT_VERSION
|
11401
|
-
return_value =
|
11468
|
+
//return_value = rb_thread_call_without_gvl ( (void *)ibm_db_client_info_helper, getInfo_args,
|
11469
|
+
return_value = ibm_Ruby_Thread_Call ( (void *)ibm_db_client_info_helper, getInfo_args,
|
11402
11470
|
(void *)_ruby_ibm_db_Connection_level_UBF, NULL);
|
11403
11471
|
#else
|
11404
11472
|
return_value = ibm_db_client_info_helper( getInfo_args );
|
@@ -11706,6 +11774,7 @@ VALUE ibm_db_get_last_serial_value(int argc, VALUE *argv, VALUE self)
|
|
11706
11774
|
rb_warn("Supplied statement handle is invalid");
|
11707
11775
|
return Qfalse;
|
11708
11776
|
}
|
11777
|
+
|
11709
11778
|
}
|
11710
11779
|
|
11711
11780
|
|
@@ -1,11 +1,12 @@
|
|
1
1
|
# +----------------------------------------------------------------------+
|
2
2
|
# | Licensed Materials - Property of IBM |
|
3
3
|
# | |
|
4
|
-
# | (C) Copyright IBM Corporation 2006
|
4
|
+
# | (C) Copyright IBM Corporation 2006- 2015 |
|
5
5
|
# +----------------------------------------------------------------------+
|
6
6
|
# | Authors: Antonio Cangiano <cangiano@ca.ibm.com> |
|
7
7
|
# | : Mario Ds Briggs <mario.briggs@in.ibm.com> |
|
8
8
|
# | : Praveen Devarao <praveendrl@in.ibm.com> |
|
9
|
+
# | : Arvind Gupta <arvindgu@in.ibm.com> |
|
9
10
|
# +----------------------------------------------------------------------+
|
10
11
|
|
11
12
|
require 'active_record/connection_adapters/abstract_adapter'
|
@@ -725,17 +726,24 @@ module ActiveRecord
|
|
725
726
|
def self.visitor_for(pool)
|
726
727
|
Arel::Visitors::IBM_DB.new(pool)
|
727
728
|
end
|
728
|
-
|
729
|
-
|
730
|
-
|
731
|
-
|
732
|
-
|
733
|
-
|
734
|
-
else
|
735
|
-
arel
|
736
|
-
end
|
729
|
+
|
730
|
+
#Check Arel version
|
731
|
+
begin
|
732
|
+
@arelVersion = Arel::VERSION.to_i
|
733
|
+
rescue
|
734
|
+
@arelVersion = 0
|
737
735
|
end
|
738
|
-
|
736
|
+
if(@arelVersion < 6)
|
737
|
+
def to_sql(arel, binds = [])
|
738
|
+
if arel.respond_to?(:ast)
|
739
|
+
visitor.accept(arel.ast) do
|
740
|
+
quote(*binds.shift.reverse)
|
741
|
+
end
|
742
|
+
else
|
743
|
+
arel
|
744
|
+
end
|
745
|
+
end
|
746
|
+
end
|
739
747
|
# This adapter supports migrations.
|
740
748
|
# Current limitations:
|
741
749
|
# +rename_column+ is not currently supported by the IBM data servers
|
@@ -1118,7 +1126,11 @@ module ActiveRecord
|
|
1118
1126
|
end
|
1119
1127
|
|
1120
1128
|
def insert(arel, name = nil, pk = nil, id_value = nil, sequence_name = nil, binds = [] )
|
1121
|
-
|
1129
|
+
if(@arelVersion < 6 )
|
1130
|
+
sql, binds = [to_sql(arel),binds]
|
1131
|
+
else
|
1132
|
+
sql, binds = sql_for_insert(to_sql(arel, binds), pk, id_value, sequence_name, binds) #[to_sql(arel),binds]
|
1133
|
+
end
|
1122
1134
|
|
1123
1135
|
#unless IBM_DBAdapter.respond_to?(:exec_insert)
|
1124
1136
|
if binds.nil? || binds.empty?
|
@@ -1278,7 +1290,11 @@ module ActiveRecord
|
|
1278
1290
|
alias_method :prepared_delete, :prepared_update
|
1279
1291
|
|
1280
1292
|
def update(arel, name = nil, binds = [])
|
1281
|
-
|
1293
|
+
if(@arelVersion < 6 )
|
1294
|
+
sql = to_sql(arel)
|
1295
|
+
else
|
1296
|
+
sql = to_sql(arel,binds)
|
1297
|
+
end
|
1282
1298
|
|
1283
1299
|
# Make sure the WHERE clause handles NULL's correctly
|
1284
1300
|
sqlarray = sql.split(/\s*WHERE\s*/)
|
@@ -1335,6 +1351,13 @@ module ActiveRecord
|
|
1335
1351
|
IBM_DB.autocommit @connection, IBM_DB::SQL_AUTOCOMMIT_ON
|
1336
1352
|
end
|
1337
1353
|
|
1354
|
+
def get_limit_offset_clauses(limit,offset)
|
1355
|
+
if limit && limit == 0
|
1356
|
+
clauses = @servertype.get_limit_offset_clauses(limit,0)
|
1357
|
+
else
|
1358
|
+
clauses = @servertype.get_limit_offset_clauses(limit, offset)
|
1359
|
+
end
|
1360
|
+
end
|
1338
1361
|
|
1339
1362
|
# Modifies a sql statement in order to implement a LIMIT and an OFFSET.
|
1340
1363
|
# A LIMIT defines the number of rows that should be fetched, while
|
@@ -1459,7 +1482,7 @@ module ActiveRecord
|
|
1459
1482
|
end
|
1460
1483
|
elsif column && column.type.to_sym == :text
|
1461
1484
|
unless caller[0] =~ /add_column_options/i
|
1462
|
-
"'
|
1485
|
+
"'<ibm>@@@IBMTEXT@@@</ibm>'"
|
1463
1486
|
else
|
1464
1487
|
@servertype.set_text_default(quote_string(value))
|
1465
1488
|
end
|
@@ -1879,7 +1902,8 @@ module ActiveRecord
|
|
1879
1902
|
if !(column_name =~ /db2_generated_rowid_for_lobs/i)
|
1880
1903
|
# Pushes into the array the *IBM_DBColumn* object, created by passing to the initializer
|
1881
1904
|
# +column_name+, +default_value+, +column_type+ and +column_nullable+.
|
1882
|
-
|
1905
|
+
cast_type = lookup_cast_type(column_type)
|
1906
|
+
columns << IBM_DBColumn.new(column_name, column_default_value, cast_type, column_type, column_nullable)
|
1883
1907
|
end
|
1884
1908
|
end
|
1885
1909
|
rescue StandardError => fetch_error # Handle driver fetch errors
|
@@ -2009,6 +2033,47 @@ module ActiveRecord
|
|
2009
2033
|
def remove_index(table_name, options = {})
|
2010
2034
|
execute("DROP INDEX #{index_name(table_name, options)}")
|
2011
2035
|
end
|
2036
|
+
|
2037
|
+
protected
|
2038
|
+
def initialize_type_map(m) # :nodoc:
|
2039
|
+
register_class_with_limit m, %r(boolean)i, Type::Boolean
|
2040
|
+
register_class_with_limit m, %r(char)i, Type::String
|
2041
|
+
register_class_with_limit m, %r(binary)i, Type::Binary
|
2042
|
+
register_class_with_limit m, %r(text)i, Type::Text
|
2043
|
+
register_class_with_limit m, %r(date)i, Type::Date
|
2044
|
+
register_class_with_limit m, %r(time)i, Type::Time
|
2045
|
+
register_class_with_limit m, %r(datetime)i, Type::DateTime
|
2046
|
+
register_class_with_limit m, %r(float)i, Type::Float
|
2047
|
+
register_class_with_limit m, %r(int)i, Type::Integer
|
2048
|
+
|
2049
|
+
m.alias_type %r(blob)i, 'binary'
|
2050
|
+
m.alias_type %r(clob)i, 'text'
|
2051
|
+
m.alias_type %r(timestamp)i, 'datetime'
|
2052
|
+
m.alias_type %r(numeric)i, 'decimal'
|
2053
|
+
m.alias_type %r(number)i, 'decimal'
|
2054
|
+
m.alias_type %r(double)i, 'float'
|
2055
|
+
|
2056
|
+
m.register_type(%r(decimal)i) do |sql_type|
|
2057
|
+
scale = extract_scale(sql_type)
|
2058
|
+
precision = extract_precision(sql_type)
|
2059
|
+
|
2060
|
+
if scale == 0
|
2061
|
+
# FIXME: Remove this class as well
|
2062
|
+
Type::DecimalWithoutScale.new(precision: precision)
|
2063
|
+
else
|
2064
|
+
Type::Decimal.new(precision: precision, scale: scale)
|
2065
|
+
end
|
2066
|
+
end
|
2067
|
+
|
2068
|
+
m.alias_type %r(xml)i, 'text'
|
2069
|
+
m.alias_type %r(for bit data)i, 'binary'
|
2070
|
+
m.alias_type %r(smallint)i, 'boolean'
|
2071
|
+
m.alias_type %r(serial)i, 'int'
|
2072
|
+
m.alias_type %r(decfloat)i, 'decimal'
|
2073
|
+
m.alias_type %r(real)i, 'decimal'
|
2074
|
+
m.alias_type %r(graphic)i, 'binary'
|
2075
|
+
m.alias_type %r(rowid)i, 'int'
|
2076
|
+
end
|
2012
2077
|
end # class IBM_DBAdapter
|
2013
2078
|
|
2014
2079
|
# This class contains common code across DB's (DB2 LUW, zOS, i5 and IDS)
|
@@ -2145,6 +2210,9 @@ To remove the column, the table must be dropped and recreated without the #{colu
|
|
2145
2210
|
def query_offset_limit(sql, offset, limit)
|
2146
2211
|
end
|
2147
2212
|
|
2213
|
+
def get_limit_offset_clauses(limit, offset)
|
2214
|
+
end
|
2215
|
+
|
2148
2216
|
def query_offset_limit!(sql, offset, limit, options)
|
2149
2217
|
end
|
2150
2218
|
|
@@ -2507,6 +2575,30 @@ SET WITH DEFAULT #{@adapter.quote(default)}"
|
|
2507
2575
|
end
|
2508
2576
|
end
|
2509
2577
|
=end
|
2578
|
+
def get_limit_offset_clauses(limit, offset)
|
2579
|
+
retHash = {"endSegment"=> "", "startSegment" => ""}
|
2580
|
+
if(offset.nil? && limit.nil?)
|
2581
|
+
return retHash
|
2582
|
+
end
|
2583
|
+
|
2584
|
+
if (offset.nil?)
|
2585
|
+
retHash["endSegment"] = " FETCH FIRST #{limit} ROWS ONLY"
|
2586
|
+
return retHash
|
2587
|
+
end
|
2588
|
+
|
2589
|
+
if(limit.nil?)
|
2590
|
+
retHash["startSegment"] = "SELECT O.* FROM (SELECT I.*, ROW_NUMBER() OVER () sys_row_num FROM ( SELECT "
|
2591
|
+
retHash["endSegment"] = " ) AS I) AS O WHERE sys_row_num > #{offset}"
|
2592
|
+
return retHash
|
2593
|
+
end
|
2594
|
+
|
2595
|
+
# Defines what will be the last record
|
2596
|
+
last_record = offset.to_i + limit.to_i
|
2597
|
+
retHash["startSegment"] = "SELECT O.* FROM (SELECT I.*, ROW_NUMBER() OVER () sys_row_num FROM ( SELECT "
|
2598
|
+
retHash["endSegment"] = " ) AS I) AS O WHERE sys_row_num BETWEEN #{offset+1} AND #{last_record}"
|
2599
|
+
return retHash
|
2600
|
+
end
|
2601
|
+
|
2510
2602
|
def query_offset_limit(sql, offset, limit)
|
2511
2603
|
if(offset.nil? && limit.nil?)
|
2512
2604
|
return sql
|
@@ -2727,6 +2819,14 @@ SET WITH DEFAULT #{@adapter.quote(default)}"
|
|
2727
2819
|
class IBM_DB2_ZOS_8 < IBM_DB2_ZOS
|
2728
2820
|
include HostedDataServer
|
2729
2821
|
|
2822
|
+
def get_limit_offset_clauses(limit, offset)
|
2823
|
+
retHash = {"startSegment" => "", "endSegment" => ""}
|
2824
|
+
if (!limit.nil?)
|
2825
|
+
retHash["endSegment"] = " FETCH FIRST #{limit} ROWS ONLY"
|
2826
|
+
end
|
2827
|
+
return retHash
|
2828
|
+
end
|
2829
|
+
|
2730
2830
|
def query_offset_limit(sql, offset, limit)
|
2731
2831
|
if (!limit.nil?)
|
2732
2832
|
sql << " FETCH FIRST #{limit} ROWS ONLY"
|
@@ -2889,6 +2989,22 @@ SET WITH DEFAULT #{@adapter.quote(default)}"
|
|
2889
2989
|
return "double precision"
|
2890
2990
|
end
|
2891
2991
|
|
2992
|
+
def get_limit_offset_clauses(limit, offset)
|
2993
|
+
retHash = {"startSegment" => "", "endSegment" => ""}
|
2994
|
+
if limit != 0
|
2995
|
+
if !offset.nil?
|
2996
|
+
# Modifying the SQL to utilize the skip and limit amounts
|
2997
|
+
retHash["startSegment"] = " SELECT SKIP #{offset} LIMIT #{limit} "
|
2998
|
+
else
|
2999
|
+
# Modifying the SQL to retrieve only the first #{limit} rows
|
3000
|
+
retHash["startSegment"] = " SELECT FIRST #{limit} "
|
3001
|
+
end
|
3002
|
+
else
|
3003
|
+
retHash["startSegment"] = " SELECT * FROM (SELECT "
|
3004
|
+
retHash["endSegment"] = " ) WHERE 0 = 1 "
|
3005
|
+
end
|
3006
|
+
end
|
3007
|
+
|
2892
3008
|
# Handling offset/limit as per Informix requirements
|
2893
3009
|
def query_offset_limit(sql, offset, limit)
|
2894
3010
|
if limit != 0
|
@@ -2968,11 +3084,39 @@ SET WITH DEFAULT #{@adapter.quote(default)}"
|
|
2968
3084
|
end # module ActiveRecord
|
2969
3085
|
|
2970
3086
|
module Arel
|
3087
|
+
#Check Arel version
|
3088
|
+
begin
|
3089
|
+
arelVersion = Arel::VERSION.to_i
|
3090
|
+
rescue
|
3091
|
+
arelVersion = 0
|
3092
|
+
end
|
3093
|
+
if(arelVersion >= 6)
|
3094
|
+
module Collectors
|
3095
|
+
class Bind
|
3096
|
+
def changeFirstSegment(segment)
|
3097
|
+
@parts[0] = segment
|
3098
|
+
end
|
3099
|
+
|
3100
|
+
def changeEndSegment(segment)
|
3101
|
+
len = @parts.length
|
3102
|
+
@parts[len] = segment
|
3103
|
+
end
|
3104
|
+
end
|
3105
|
+
end
|
3106
|
+
end
|
3107
|
+
|
2971
3108
|
module Visitors
|
2972
3109
|
class Visitor #opening and closing the class to ensure backward compatibility
|
2973
3110
|
end
|
2974
|
-
|
2975
|
-
|
3111
|
+
|
3112
|
+
#Check Arel version
|
3113
|
+
begin
|
3114
|
+
arelVersion = Arel::VERSION.to_i
|
3115
|
+
rescue
|
3116
|
+
arelVersion = 0
|
3117
|
+
end
|
3118
|
+
if(arelVersion >= 6)
|
3119
|
+
class ToSql < Arel::Visitors::Reduce #opening and closing the class to ensure backward compatibility
|
2976
3120
|
# In case when using Rails-2.3.x there is no arel used due to which the constructor has to be defined explicitly
|
2977
3121
|
# to ensure the same code works on any version of Rails
|
2978
3122
|
|
@@ -2985,6 +3129,7 @@ module Arel
|
|
2985
3129
|
|
2986
3130
|
if(@arelVersion >= 3)
|
2987
3131
|
def initialize connection
|
3132
|
+
super()
|
2988
3133
|
@connection = connection
|
2989
3134
|
@schema_cache = connection.schema_cache if(connection.respond_to?(:schema_cache))
|
2990
3135
|
@quoted_tables = {}
|
@@ -2993,18 +3138,52 @@ module Arel
|
|
2993
3138
|
end
|
2994
3139
|
end
|
2995
3140
|
end
|
3141
|
+
else
|
3142
|
+
class ToSql < Arel::Visitors::Visitor #opening and closing the class to ensure backward compatibility
|
3143
|
+
# In case when using Rails-2.3.x there is no arel used due to which the constructor has to be defined explicitly
|
3144
|
+
# to ensure the same code works on any version of Rails
|
3145
|
+
|
3146
|
+
#Check Arel version
|
3147
|
+
begin
|
3148
|
+
@arelVersion = Arel::VERSION.to_i
|
3149
|
+
rescue
|
3150
|
+
@arelVersion = 0
|
3151
|
+
end
|
3152
|
+
if(@arelVersion >= 3)
|
3153
|
+
def initialize connection
|
3154
|
+
super()
|
3155
|
+
@connection = connection
|
3156
|
+
@schema_cache = connection.schema_cache if(connection.respond_to?(:schema_cache))
|
3157
|
+
@quoted_tables = {}
|
3158
|
+
@quoted_columns = {}
|
3159
|
+
@last_column = nil
|
3160
|
+
end
|
3161
|
+
|
3162
|
+
end
|
3163
|
+
end
|
3164
|
+
|
3165
|
+
end
|
3166
|
+
|
2996
3167
|
|
2997
3168
|
class IBM_DB < Arel::Visitors::ToSql
|
2998
3169
|
private
|
2999
3170
|
|
3000
|
-
|
3171
|
+
|
3172
|
+
#Check Arel version
|
3173
|
+
begin
|
3174
|
+
@arelVersion = Arel::VERSION.to_i
|
3175
|
+
rescue
|
3176
|
+
@arelVersion = 0
|
3177
|
+
end
|
3178
|
+
if(@arelVersion < 6)
|
3179
|
+
|
3180
|
+
def visit_Arel_Nodes_Limit o, a=nil
|
3001
3181
|
visit o.expr
|
3002
3182
|
end
|
3003
3183
|
|
3004
3184
|
def visit_Arel_Nodes_Offset o, a=nil
|
3005
3185
|
visit o.expr
|
3006
3186
|
end
|
3007
|
-
|
3008
3187
|
def visit_Arel_Nodes_SelectStatement o, a=nil
|
3009
3188
|
#Interim fix for backward compatibility [Arel 4.0.0 and below]
|
3010
3189
|
if self.method(:visit_Arel_Nodes_SelectCore).arity == 1
|
@@ -3036,7 +3215,71 @@ module Arel
|
|
3036
3215
|
sql << " #{(visit(o.lock) if o.lock)}"
|
3037
3216
|
return sql
|
3038
3217
|
end
|
3218
|
+
else
|
3219
|
+
def visit_Arel_Nodes_Limit o,collector
|
3220
|
+
visit o.expr, collector
|
3221
|
+
end
|
3039
3222
|
|
3223
|
+
def visit_Arel_Nodes_Offset o,collector
|
3224
|
+
visit o.expr,collector
|
3225
|
+
end
|
3226
|
+
|
3227
|
+
def visit_Arel_Nodes_SelectStatement o, collector
|
3228
|
+
|
3229
|
+
if o.with
|
3230
|
+
collector = visit o.with, collector
|
3231
|
+
collector << SPACE
|
3232
|
+
end
|
3233
|
+
|
3234
|
+
collector = o.cores.inject(collector) { |c,x|
|
3235
|
+
visit_Arel_Nodes_SelectCore(x, c)
|
3236
|
+
}
|
3237
|
+
|
3238
|
+
unless o.orders.empty?
|
3239
|
+
collector << SPACE
|
3240
|
+
collector << ORDER_BY
|
3241
|
+
len = o.orders.length - 1
|
3242
|
+
o.orders.each_with_index { |x, i|
|
3243
|
+
collector = visit(x, collector)
|
3244
|
+
collector << COMMA unless len == i
|
3245
|
+
}
|
3246
|
+
end
|
3247
|
+
|
3248
|
+
if o.limit
|
3249
|
+
limcoll = Arel::Collectors::SQLString.new
|
3250
|
+
visit(o.limit,limcoll)
|
3251
|
+
limit = limcoll.value.to_i
|
3252
|
+
else
|
3253
|
+
limit = nil
|
3254
|
+
end
|
3255
|
+
|
3256
|
+
if o.offset
|
3257
|
+
offcoll = Arel::Collectors::SQLString.new
|
3258
|
+
visit(o.offset,offcoll)
|
3259
|
+
offset = offcoll.value.to_i
|
3260
|
+
else
|
3261
|
+
offset = nil
|
3262
|
+
end
|
3263
|
+
|
3264
|
+
limOffClause = @connection.get_limit_offset_clauses(limit,offset)
|
3265
|
+
|
3266
|
+
if( !limOffClause["startSegment"].empty? )
|
3267
|
+
collector.changeFirstSegment(limOffClause["startSegment"])
|
3268
|
+
end
|
3269
|
+
|
3270
|
+
if( !limOffClause["endSegment"].empty? )
|
3271
|
+
collector.changeEndSegment(limOffClause["endSegment"])
|
3272
|
+
end
|
3273
|
+
|
3274
|
+
#Initialize a new Collector and set its value to the sql string built so far with any limit and ofset modifications
|
3275
|
+
#collector.reset(sql)
|
3276
|
+
|
3277
|
+
collector = maybe_visit o.lock, collector
|
3278
|
+
|
3279
|
+
return collector
|
3280
|
+
end
|
3281
|
+
end
|
3282
|
+
|
3040
3283
|
end
|
3041
3284
|
end
|
3042
3285
|
end
|
metadata
CHANGED
@@ -1,27 +1,30 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ibm_db
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.5.
|
4
|
+
version: 2.5.25
|
5
|
+
prerelease:
|
5
6
|
platform: ruby
|
6
7
|
authors:
|
7
8
|
- IBM
|
8
9
|
autorequire:
|
9
10
|
bindir: bin
|
10
11
|
cert_chain: []
|
11
|
-
date:
|
12
|
+
date: 2015-03-26 00:00:00.000000000 Z
|
12
13
|
dependencies:
|
13
14
|
- !ruby/object:Gem::Dependency
|
14
15
|
name: activerecord
|
15
16
|
requirement: !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
16
18
|
requirements:
|
17
|
-
- -
|
19
|
+
- - ! '>='
|
18
20
|
- !ruby/object:Gem::Version
|
19
21
|
version: 1.15.1
|
20
22
|
type: :runtime
|
21
23
|
prerelease: false
|
22
24
|
version_requirements: !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
23
26
|
requirements:
|
24
|
-
- -
|
27
|
+
- - ! '>='
|
25
28
|
- !ruby/object:Gem::Version
|
26
29
|
version: 1.15.1
|
27
30
|
description:
|
@@ -34,78 +37,91 @@ extra_rdoc_files:
|
|
34
37
|
- README
|
35
38
|
- MANIFEST
|
36
39
|
files:
|
37
|
-
- CHANGES
|
38
|
-
- LICENSE
|
39
|
-
- MANIFEST
|
40
|
-
- ParameterizedQueries README
|
41
40
|
- README
|
42
|
-
-
|
43
|
-
- ext/Makefile.nt32.191
|
44
|
-
- ext/extconf.rb
|
45
|
-
- ext/ibm_db.c
|
46
|
-
- ext/ruby_ibm_db.h
|
47
|
-
- ext/ruby_ibm_db_cli.c
|
48
|
-
- ext/ruby_ibm_db_cli.h
|
49
|
-
- init.rb
|
50
|
-
- lib/IBM_DB.rb
|
41
|
+
- lib/active_record/connection_adapters/ibmdb_adapter.rb
|
51
42
|
- lib/active_record/connection_adapters/ibm_db_adapter.rb
|
52
43
|
- lib/active_record/connection_adapters/ibm_db_pstmt.rb
|
53
|
-
- lib/active_record/connection_adapters/ibmdb_adapter.rb
|
54
44
|
- lib/active_record/vendor/db2-i5-zOS.yaml
|
55
|
-
-
|
56
|
-
- test/
|
57
|
-
- test/
|
58
|
-
- test/cases/associations/has_and_belongs_to_many_associations_test.rb
|
59
|
-
- test/cases/associations/join_model_test.rb
|
45
|
+
- lib/IBM_DB.rb
|
46
|
+
- test/connections/native_ibm_db/connection.rb
|
47
|
+
- test/models/warehouse_thing.rb
|
60
48
|
- test/cases/attribute_methods_test.rb
|
61
|
-
- test/cases/base_test.rb
|
62
|
-
- test/cases/calculations_test.rb
|
63
|
-
- test/cases/migration_test.rb
|
64
|
-
- test/cases/persistence_test.rb
|
65
|
-
- test/cases/query_cache_test.rb
|
66
49
|
- test/cases/relations_test.rb
|
67
50
|
- test/cases/schema_dumper_test.rb
|
68
51
|
- test/cases/transaction_callbacks_test.rb
|
69
|
-
- test/cases/validations/uniqueness_validation_test.rb
|
70
52
|
- test/cases/xml_serialization_test.rb
|
53
|
+
- test/cases/validations/uniqueness_validation_test.rb
|
54
|
+
- test/cases/persistence_test.rb
|
55
|
+
- test/cases/calculations_test.rb
|
56
|
+
- test/cases/query_cache_test.rb
|
57
|
+
- test/cases/migration_test.rb
|
58
|
+
- test/cases/base_test.rb
|
59
|
+
- test/cases/associations/belongs_to_associations_test.rb
|
60
|
+
- test/cases/associations/has_and_belongs_to_many_associations_test.rb
|
61
|
+
- test/cases/associations/cascaded_eager_loading_test.rb
|
62
|
+
- test/cases/associations/join_model_test.rb
|
63
|
+
- test/cases/adapter_test.rb
|
71
64
|
- test/config.yml
|
72
|
-
- test/
|
73
|
-
- test/ibm_db_test.rb
|
74
|
-
- test/models/warehouse_thing.rb
|
75
|
-
- test/schema/i5/ibm_db_specific_schema.rb
|
65
|
+
- test/schema/zOS/ibm_db_specific_schema.rb
|
76
66
|
- test/schema/ids/ibm_db_specific_schema.rb
|
77
|
-
- test/schema/
|
67
|
+
- test/schema/i5/ibm_db_specific_schema.rb
|
78
68
|
- test/schema/schema.rb
|
79
|
-
- test/schema/
|
69
|
+
- test/schema/luw/ibm_db_specific_schema.rb
|
70
|
+
- test/ibm_db_test.rb
|
71
|
+
- ParameterizedQueries README
|
72
|
+
- ext/ruby_ibm_db.h
|
73
|
+
- ext/Makefile.nt32
|
74
|
+
- ext/ruby_ibm_db_cli.c
|
75
|
+
- ext/ruby_ibm_db_cli.h
|
76
|
+
- ext/extconf.rb
|
77
|
+
- ext/ibm_db.c
|
78
|
+
- ext/Makefile.nt32.191
|
79
|
+
- LICENSE
|
80
|
+
- init.rb
|
81
|
+
- CHANGES
|
82
|
+
- MANIFEST
|
80
83
|
homepage: https://github.com/ibmdb/ruby-ibmdb
|
81
84
|
licenses: []
|
82
|
-
|
83
|
-
post_install_message: |2+
|
85
|
+
post_install_message: ! '
|
84
86
|
|
85
87
|
*****************************************************************************
|
86
|
-
|
88
|
+
|
89
|
+
Successfully installed ibm_db, the Ruby gem for IBM DB2/Informix. The Ruby gem
|
90
|
+
is licensed under the MIT License. The package also includes IBM ODBC and CLI
|
91
|
+
Driver from IBM, which could have been automatically downloaded as the Ruby gem
|
92
|
+
is installed on your system/device. The license agreement to the IBM driver is
|
93
|
+
available in the folder "$GEM_HOME/ibm_db-*/lib/clidriver/license". Check for additional
|
94
|
+
dependencies, which may come with their own license agreement(s). Your use of the
|
95
|
+
components of the package and dependencies constitutes your acceptance of their
|
96
|
+
respective license agreements. If you do not accept the terms of any license agreement(s),
|
97
|
+
then delete the relevant component(s) from your system/device.
|
98
|
+
|
87
99
|
*****************************************************************************
|
88
100
|
|
101
|
+
|
102
|
+
'
|
89
103
|
rdoc_options: []
|
90
104
|
require_paths:
|
91
105
|
- lib
|
92
106
|
required_ruby_version: !ruby/object:Gem::Requirement
|
107
|
+
none: false
|
93
108
|
requirements:
|
94
|
-
- -
|
109
|
+
- - ! '>='
|
95
110
|
- !ruby/object:Gem::Version
|
96
111
|
version: 1.8.6
|
97
112
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
113
|
+
none: false
|
98
114
|
requirements:
|
99
|
-
- -
|
115
|
+
- - ! '>='
|
100
116
|
- !ruby/object:Gem::Version
|
101
117
|
version: '0'
|
102
118
|
requirements:
|
103
119
|
- ActiveRecord, at least 1.15.1
|
104
120
|
rubyforge_project: rubyibm
|
105
|
-
rubygems_version:
|
121
|
+
rubygems_version: 1.8.23.2
|
106
122
|
signing_key:
|
107
|
-
specification_version:
|
108
|
-
summary: 'Rails Driver and Adapter for IBM Data Servers: {DB2 on Linux/Unix/Windows,
|
123
|
+
specification_version: 3
|
124
|
+
summary: ! 'Rails Driver and Adapter for IBM Data Servers: {DB2 on Linux/Unix/Windows,
|
109
125
|
DB2 on zOS, DB2 on i5/OS, Informix (IDS)}'
|
110
126
|
test_files:
|
111
127
|
- test/ibm_db_test.rb
|
checksums.yaml
DELETED
@@ -1,7 +0,0 @@
|
|
1
|
-
---
|
2
|
-
SHA1:
|
3
|
-
metadata.gz: 91ff663db933ec69c03095b1a0a50347055fe634
|
4
|
-
data.tar.gz: 22d1654982d6f4467ac8e9b107868d4533b5a825
|
5
|
-
SHA512:
|
6
|
-
metadata.gz: 8c97c793aef0305f16c530dd61055589382108468b3df1582dcca3e790197b52fa7810509cd086a3a6962bf9f2d7259af6038096293a2177c7b3d643af459aec
|
7
|
-
data.tar.gz: da889c3f8cb89b64fea6f5de482e69ad108003e282d70282daece50100928b34571a64ae37b872d1cd70378e2339be7b95ca75977648967ebf9ae3a50b613d70
|