swift 0.4.1 → 0.4.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (5) hide show
  1. data/VERSION +1 -1
  2. data/ext/swift.cc +6 -3
  3. data/swift.gemspec +1 -1
  4. data/test/test_io.rb +8 -4
  5. metadata +2 -2
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.4.1
1
+ 0.4.2
@@ -13,6 +13,7 @@ static VALUE cResultSet;
13
13
  static VALUE cPool;
14
14
  static VALUE cRequest;
15
15
  static VALUE cBigDecimal;
16
+ static VALUE cStringIO;
16
17
 
17
18
  static VALUE eRuntimeError;
18
19
  static VALUE eArgumentError;
@@ -118,7 +119,7 @@ void static inline rb_extract_bind_params(int argc, VALUE* argv, std::vector<dbi
118
119
  VALUE arg = argv[i];
119
120
  if (arg == Qnil)
120
121
  bind.push_back(dbi::PARAM(dbi::null()));
121
- else if (rb_obj_is_kind_of(arg, rb_cIO) == Qtrue) {
122
+ else if (rb_obj_is_kind_of(arg, rb_cIO) == Qtrue || rb_obj_is_kind_of(arg, cStringIO) == Qtrue) {
122
123
  arg = rb_funcall(arg, fRead, 0);
123
124
  bind.push_back(dbi::PARAM_BINARY((unsigned char*)RSTRING_PTR(arg), RSTRING_LEN(arg)));
124
125
  }
@@ -429,7 +430,7 @@ VALUE rb_field_typecast(VALUE adapter, int type, const char *data, ulong len) {
429
430
  case DBI_TYPE_INT:
430
431
  return rb_cstr2inum(data, 10);
431
432
  case DBI_TYPE_BLOB:
432
- return rb_str_new(data, len);
433
+ return rb_funcall(cStringIO, fNew, 1, rb_str_new(data, len));
433
434
  // forcing UTF8 convention here - do we really care about people using non utf8
434
435
  // client encodings and databases ?
435
436
  case DBI_TYPE_TEXT:
@@ -644,7 +645,7 @@ VALUE rb_cpool_execute(int argc, VALUE *argv, VALUE self) {
644
645
  VALUE arg = rb_ary_entry(args, n);
645
646
  if (arg == Qnil)
646
647
  bind.push_back(dbi::PARAM(dbi::null()));
647
- else if (rb_obj_is_kind_of(arg, rb_cIO) == Qtrue) {
648
+ else if (rb_obj_is_kind_of(arg, rb_cIO) == Qtrue || rb_obj_is_kind_of(arg, cStringIO) == Qtrue) {
648
649
  arg = rb_funcall(arg, fRead, 0);
649
650
  bind.push_back(dbi::PARAM_BINARY((unsigned char*)RSTRING_PTR(arg), RSTRING_LEN(arg)));
650
651
  }
@@ -686,6 +687,7 @@ VALUE rb_request_process(VALUE self) {
686
687
  extern "C" {
687
688
  void Init_swift(void) {
688
689
  rb_require("bigdecimal");
690
+ rb_require("stringio");
689
691
 
690
692
  fNew = rb_intern("new");
691
693
  fStringify = rb_intern("to_s");
@@ -697,6 +699,7 @@ extern "C" {
697
699
  eArgumentError = CONST_GET(rb_mKernel, "ArgumentError");
698
700
  eStandardError = CONST_GET(rb_mKernel, "StandardError");
699
701
  cBigDecimal = CONST_GET(rb_mKernel, "BigDecimal");
702
+ cStringIO = CONST_GET(rb_mKernel, "StringIO");
700
703
  eConnectionError = rb_define_class("ConnectionError", eRuntimeError);
701
704
 
702
705
  mSwift = rb_define_module("Swift");
@@ -5,7 +5,7 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{swift}
8
- s.version = "0.4.1"
8
+ s.version = "0.4.2"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Shane Hanna", "Bharanee 'Barney' Rathna"]
@@ -14,12 +14,16 @@ describe 'Adapter' do
14
14
  it 'stores and retrieves an image' do
15
15
  Swift.db do |db|
16
16
  io = File.open(File.dirname(__FILE__) + '/house-explode.jpg')
17
- db.prepare("insert into users (name, image) values(?, ?)").execute('test', io)
18
- value = db.prepare("select image from users limit 1").execute.first[:image]
17
+ db.prepare('insert into users (name, image) values(?, ?)').execute('test', io)
18
+
19
+ blob = db.prepare('select image from users limit 1').execute.first[:image]
19
20
 
20
21
  io.rewind
21
- assert_equal Encoding::ASCII_8BIT, value.encoding
22
- assert_equal io.read.force_encoding("ASCII-8BIT"), value
22
+ assert_kind_of StringIO, blob
23
+
24
+ data = blob.read
25
+ assert_equal Encoding::ASCII_8BIT, data.encoding
26
+ assert_equal io.read.force_encoding('ASCII-8BIT'), data
23
27
  end
24
28
  end
25
29
  end
metadata CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
5
5
  segments:
6
6
  - 0
7
7
  - 4
8
- - 1
9
- version: 0.4.1
8
+ - 2
9
+ version: 0.4.2
10
10
  platform: ruby
11
11
  authors:
12
12
  - Shane Hanna