ruby-oci8 1.0.6 → 1.0.7

Sign up to get free protection for your applications and to get access to all the features.
data/ChangeLog CHANGED
@@ -1,3 +1,26 @@
1
+ 2009-10-21 KUBO Takehiro <kubo@jiubao.org>
2
+ * NEWS: add changes between 1.0.6 and 1.0.7.
3
+ * VERSION: change version to 1.0.7.
4
+
5
+ 2009-10-04 KUBO Takehiro <kubo@jiubao.org>
6
+ * ext/oci8/oraconf.rb:
7
+ 1. Fix for ruby 1.8.5 with Oracle 8.x which needs some object
8
+ files to link with.
9
+ (reported by Jayson Cena)
10
+ 2. Add additional error message if under the sudo environemnt.
11
+ 3. Print not only error message but also the error backtrace when
12
+ oraconf.rb fails.
13
+
14
+ 2009-09-13 KUBO Takehiro <kubo@jiubao.org>
15
+ * ext/oci8/lob.c, ext/oci8/oci8.h, test/test_clob.rb: Change
16
+ OCI8::LOB#write to accept an object which is not a String and
17
+ doesn't respond to 'to_str' as IO#write does.
18
+ (requested by Christopher Jones)
19
+
20
+ 2009-09-12 KUBO Takehiro <kubo@jiubao.org>
21
+ * ext/oci8/oraconf.rb: Fixed to compile for AIX instant clients.
22
+ (reported by Kazuya Teramoto)
23
+
1
24
  2009-05-17 KUBO Takehiro <kubo@jiubao.org>
2
25
  * NEWS: add changes between 1.0.5 and 1.0.6.
3
26
  * VERSION: change version to 1.0.6.
data/NEWS CHANGED
@@ -1,3 +1,16 @@
1
+ 1.0.7:
2
+
3
+ * change OCI8::LOB#write to accept an object which is not a String and
4
+ doesn't respond to 'to_str' as IO#write does.
5
+ (requested by Christopher Jones)
6
+
7
+ * fix oraconf.rb for AIX instant clients.
8
+ (reported by Kazuya Teramoto)
9
+
10
+ * fix oraconf.rb for ruby 1.8.5 with Oracle 8.x which needs some object
11
+ files to link with.
12
+ (reported by Jayson Cena)
13
+
1
14
  1.0.6:
2
15
 
3
16
  * fix a problem when compiling for Oracle 8.0.
data/VERSION CHANGED
@@ -1 +1 @@
1
- 1.0.6
1
+ 1.0.7
data/ext/oci8/lob.c CHANGED
@@ -184,6 +184,10 @@ static VALUE oci8_lob_write(int argc, VALUE *argv, VALUE self)
184
184
  Get_Handle(self, h); /* 0 */
185
185
  Check_Handle(vsvc, OCISvcCtx, svch); /* 1 */
186
186
  offset = NUM2UINT(voffset); /* 2 */
187
+ if (TYPE(vbuf) != T_STRING) {
188
+ vbuf = rb_obj_as_string(vbuf);
189
+ }
190
+ RB_GC_GUARD(vbuf);
187
191
  Get_String(vbuf, buf); /* 3 */
188
192
  csid = NIL_P(vcsid) ? 0 : NUM2INT(vcsid); /* 4 */
189
193
  csfrm = NIL_P(vcsfrm) ? SQLCS_IMPLICIT : NUM2INT(vcsfrm); /* 5 */
data/ext/oci8/oci8.h CHANGED
@@ -52,6 +52,10 @@ extern "C" {
52
52
  #define RARRAY_LEN(obj) RARRAY(obj)->len
53
53
  #endif
54
54
 
55
+ #ifndef RB_GC_GUARD
56
+ #define RB_GC_GUARD(v) (*(volatile VALUE *)&(v))
57
+ #endif
58
+
55
59
  #ifndef HAVE_TYPE_ORATEXT
56
60
  typedef unsigned char oratext;
57
61
  #endif
data/ext/oci8/oraconf.rb CHANGED
@@ -353,8 +353,10 @@ EOS
353
353
  end
354
354
  print <<EOS
355
355
  ---------------------------------------------------
356
- error messages:
357
- #{$!.to_s}
356
+ Error Message:
357
+ #{$!.to_s.gsub(/\n/, "\n ")}
358
+ Backtrace:
359
+ #{$!.backtrace.join("\n ")}
358
360
  ---------------------------------------------------
359
361
  See:
360
362
  * http://ruby-oci8.rubyforge.org/#{lang}/HowToInstall.html
@@ -383,15 +385,16 @@ EOS
383
385
  # get library load path names
384
386
  oci_basename = 'libclntsh'
385
387
  oci_glob_postfix = '.[0-9]*'
386
- ocidata_basename = ['libociei', 'libociicus']
388
+ nls_data_basename = ['libociei', 'libociicus']
387
389
  @@ld_envs = %w[LD_LIBRARY_PATH]
388
390
  so_ext = 'so'
391
+ nls_data_ext = nil
389
392
  check_proc = nil
390
393
  case RUBY_PLATFORM
391
394
  when /mswin32|cygwin|mingw32|bccwin32/
392
395
  oci_basename = 'oci'
393
396
  oci_glob_postfix = ''
394
- ocidata_basename = ['oraociei11', 'oraociicus11', 'oraociei10', 'oraociicus10']
397
+ nls_data_basename = ['oraociei11', 'oraociicus11', 'oraociei10', 'oraociicus10']
395
398
  @@ld_envs = %w[PATH]
396
399
  so_ext = 'dll'
397
400
  when /i.86-linux/
@@ -434,6 +437,7 @@ EOS
434
437
  oci_glob_postfix = ''
435
438
  @@ld_envs = %w[LIBPATH]
436
439
  so_ext = 'a'
440
+ nls_data_ext = 'so'
437
441
  when /hppa.*-hpux/
438
442
  if [0].pack('l!').length == 4
439
443
  @@ld_envs = %w[SHLIB_PATH]
@@ -529,8 +533,9 @@ EOS
529
533
  end
530
534
 
531
535
  if ld_path
532
- ocidata_basename.each do |basename|
533
- if File.exist?(File.join(ld_path, "#{basename}.#{so_ext}"))
536
+ nls_data_ext ||= so_ext # nls_data_ext is same with so_ext by default.
537
+ nls_data_basename.each do |basename|
538
+ if File.exist?(File.join(ld_path, "#{basename}.#{nls_data_ext}"))
534
539
  puts " #{file} looks like an instant client."
535
540
  return ld_path
536
541
  end
@@ -613,6 +618,7 @@ You need /usr/include/sys/types.h to compile ruby-oci8.
613
618
  EOS
614
619
  end
615
620
  puts "ok"
621
+ $stdout.flush
616
622
  end # check_ruby_header
617
623
 
618
624
  def try_link_oci
@@ -860,10 +866,33 @@ EOS
860
866
  def get_home
861
867
  oracle_home = ENV['ORACLE_HOME']
862
868
  if oracle_home.nil?
863
- raise <<EOS
869
+ msg = <<EOS
864
870
  Set the environment variable ORACLE_HOME if Oracle Full Client.
865
871
  Append the path of Oracle client libraries to #{OraConf.ld_envs[0]} if Oracle Instant Client.
866
872
  EOS
873
+
874
+ # check sudo environment
875
+ sudo_command = ENV['SUDO_COMMAND']
876
+ if /\w*make\b/ =~ sudo_command
877
+ msg += <<EOS
878
+
879
+ The 'sudo' command unset some environment variables for security reasons.
880
+ Use it only when running 'make install' as follows
881
+ make
882
+ sudo make install
883
+ EOS
884
+ end
885
+ if /\w+\/gem\b/ =~ sudo_command
886
+ msg += <<EOS
887
+
888
+ The 'sudo' command unset some environment variables for security reasons.
889
+ Pass required varialbes as follows
890
+ sudo env #{OraConf.ld_envs[0]}=$#{OraConf.ld_envs[0]} #{sudo_command}
891
+ or
892
+ sudo env ORACLE_HOME=$ORACLE_HOME #{sudo_command}
893
+ EOS
894
+ end
895
+ raise msg
867
896
  end
868
897
  oracle_home
869
898
  end
@@ -953,10 +982,10 @@ EOS
953
982
 
954
983
  # monkey patching!
955
984
  Object.module_eval do
956
- alias :orig_link_command :link_command
957
- def link_command(ldflags, opt="", libpath=$DEFLIBPATH|$LIBPATH)
958
- opt = "" if opt == $libs
959
- orig_link_command(ldflags, opt, libpath)
985
+ alias :link_command_pre_oci8 :link_command
986
+ def link_command(*args)
987
+ args[1] = "" if args[1] == $libs
988
+ link_command_pre_oci8(*args)
960
989
  end
961
990
  end
962
991
 
data/ruby-oci8.spec CHANGED
@@ -3,7 +3,7 @@
3
3
 
4
4
  Summary: ruby interface for Oracle using OCI8 API
5
5
  Name: ruby-oci8
6
- Version: 1.0.6
6
+ Version: 1.0.7
7
7
  Release: 1%{?dist}
8
8
  Group: Development/Libraries
9
9
  License: Ruby License
data/test/test_clob.rb CHANGED
@@ -64,6 +64,27 @@ class TestCLob < RUNIT::TestCase
64
64
  lob.free()
65
65
  end
66
66
 
67
+ def test_insert_symbol
68
+ filename = 'test_symbol'
69
+ value = :foo_bar
70
+ @stmt.prepare("DELETE FROM test_clob WHERE filename = :1")
71
+ @stmt.bindByPos(1, String, filename.size).set(filename)
72
+ @stmt.execute(@svc)
73
+
74
+ @stmt.prepare("INSERT INTO test_clob(filename, content) VALUES (:1, EMPTY_CLOB())")
75
+ @stmt.bindByPos(1, String, filename.size).set(filename)
76
+ @stmt.execute(@svc)
77
+
78
+ lob = @env.alloc(OCILobLocator)
79
+ @stmt.prepare("SELECT content FROM test_clob WHERE filename = :1 FOR UPDATE")
80
+ @stmt.bindByPos(1, String, filename.size).set(filename)
81
+ @stmt.defineByPos(1, OCI_TYPECODE_CLOB, lob)
82
+ @stmt.execute(@svc, 1)
83
+ lob.write(@svc, 1, value)
84
+ assert_equal(value.to_s, lob.read(@svc, 1, 30))
85
+ lob.free()
86
+ end
87
+
67
88
  def test_read
68
89
  filename = File.basename($lobfile)
69
90
  test_insert() # first insert data.
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ruby-oci8
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.6
4
+ version: 1.0.7
5
5
  platform: ruby
6
6
  authors:
7
7
  - KUBO Takehiro
@@ -9,7 +9,7 @@ autorequire: oci8
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2009-05-17 00:00:00 +09:00
12
+ date: 2009-10-21 00:00:00 +09:00
13
13
  default_executable:
14
14
  dependencies: []
15
15
 
@@ -118,7 +118,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
118
118
  requirements: []
119
119
 
120
120
  rubyforge_project: ruby-oci8
121
- rubygems_version: 1.3.1
121
+ rubygems_version: 1.2.0
122
122
  signing_key:
123
123
  specification_version: 2
124
124
  summary: Ruby interface for Oracle using OCI8 API