do_oracle 0.10.7 → 0.10.8

Sign up to get free protection for your applications and to get access to all the features.
data/ChangeLog.markdown CHANGED
@@ -1,3 +1,7 @@
1
+ ## 0.10.8 2012-02-10
2
+
3
+ * Ruby 1.9.3 compatibility
4
+
1
5
  ## 0.10.7 2011-10-13
2
6
 
3
7
  No changes
@@ -34,7 +34,6 @@
34
34
 
35
35
  // To store rb_intern values
36
36
  static ID ID_NEW;
37
- static ID ID_NEW_DATE;
38
37
  static ID ID_LOGGER;
39
38
  static ID ID_DEBUG;
40
39
  static ID ID_LEVEL;
@@ -144,75 +143,19 @@ static char * get_uri_option(VALUE query_hash, char * key) {
144
143
  return value;
145
144
  }
146
145
 
147
- /* ====== Time/Date Parsing Helper Functions ====== */
148
- static void reduce( do_int64 *numerator, do_int64 *denominator ) {
149
- do_int64 a, b, c;
150
- a = *numerator;
151
- b = *denominator;
152
- while ( a != 0 ) {
153
- c = a; a = b % a; b = c;
154
- }
155
- *numerator = *numerator / b;
156
- *denominator = *denominator / b;
157
- }
158
-
159
- // Generate the date integer which Date.civil_to_jd returns
160
- static int jd_from_date(int year, int month, int day) {
161
- int a, b;
162
- if ( month <= 2 ) {
163
- year -= 1;
164
- month += 12;
165
- }
166
- a = year / 100;
167
- b = 2 - a + (a / 4);
168
- return floor(365.25 * (year + 4716)) + floor(30.6001 * (month + 1)) + day + b - 1524;
169
- }
170
-
171
- // Creates a Rational for use as a Timezone offset to be passed to DateTime.new!
172
- static VALUE seconds_to_offset(do_int64 num) {
173
- do_int64 den = 86400;
174
- reduce(&num, &den);
175
- return rb_funcall(rb_mKernel, ID_RATIONAL, 2, rb_ll2inum(num), rb_ll2inum(den));
176
- }
177
-
178
- static VALUE timezone_to_offset(int hour_offset, int minute_offset) {
179
- do_int64 seconds = 0;
180
-
181
- seconds += hour_offset * 3600;
182
- seconds += minute_offset * 60;
183
-
184
- return seconds_to_offset(seconds);
185
- }
186
-
187
146
  // Implementation using C functions
188
147
 
189
148
  static VALUE parse_date(VALUE r_value) {
190
- VALUE time_array;
191
149
  int year, month, day;
192
- int jd, ajd;
193
- VALUE rational;
194
-
195
- if (rb_obj_class(r_value) == rb_cTime) {
196
- time_array = rb_funcall(r_value, ID_TO_A, 0);
197
- year = NUM2INT(rb_ary_entry(time_array, 5));
198
- month = NUM2INT(rb_ary_entry(time_array, 4));
199
- day = NUM2INT(rb_ary_entry(time_array, 3));
200
-
201
- jd = jd_from_date(year, month, day);
202
150
 
203
- // Math from Date.jd_to_ajd
204
- ajd = jd * 2 - 1;
205
- rational = rb_funcall(rb_mKernel, ID_RATIONAL, 2, INT2NUM(ajd), INT2NUM(2));
206
-
207
- return rb_funcall(rb_cDate, ID_NEW_DATE, 3, rational, INT2NUM(0), INT2NUM(2299161));
208
-
209
- } else if (rb_obj_class(r_value) == rb_cDate) {
151
+ if (rb_obj_class(r_value) == rb_cDate) {
210
152
  return r_value;
211
-
212
- } else if (rb_obj_class(r_value) == rb_cDateTime) {
213
- rational = rb_iv_get(r_value, "@ajd");
214
- return rb_funcall(rb_cDate, ID_NEW_DATE, 3, rational, INT2NUM(0), INT2NUM(2299161));
215
-
153
+ } else if (rb_obj_class(r_value) == rb_cTime ||
154
+ rb_obj_class(r_value) == rb_cDateTime) {
155
+ year = NUM2INT(rb_funcall(r_value, rb_intern("year"), 0));
156
+ month = NUM2INT(rb_funcall(r_value, rb_intern("month"), 0));
157
+ day = NUM2INT(rb_funcall(r_value, rb_intern("day"), 0));
158
+ return rb_funcall(rb_cDate, ID_NEW, 3, INT2NUM(year), INT2NUM(month), INT2NUM(day));
216
159
  } else {
217
160
  // Something went terribly wrong
218
161
  rb_raise(eDataError, "Couldn't parse date from class %s object", rb_obj_classname(r_value));
@@ -222,16 +165,10 @@ static VALUE parse_date(VALUE r_value) {
222
165
  // Implementation using C functions
223
166
 
224
167
  static VALUE parse_date_time(VALUE r_value) {
225
- VALUE ajd, offset;
226
-
227
168
  VALUE time_array;
228
- int year, month, day, hour, min, sec, hour_offset, minute_offset;
169
+ int year, month, day, hour, min, sec;
229
170
  // int usec;
230
- int jd;
231
- do_int64 num, den;
232
-
233
171
  long int gmt_offset;
234
- int is_dst;
235
172
 
236
173
  // time_t rawtime;
237
174
  // struct tm * timeinfo;
@@ -249,43 +186,10 @@ static VALUE parse_date_time(VALUE r_value) {
249
186
  min = NUM2INT(rb_ary_entry(time_array, 1));
250
187
  sec = NUM2INT(rb_ary_entry(time_array, 0));
251
188
 
252
- is_dst = rb_ary_entry(time_array, 8) == Qtrue ? 3600 : 0;
253
189
  gmt_offset = NUM2INT(rb_funcall(r_value, ID_UTC_OFFSET, 0 ));
254
190
 
255
- if ( is_dst > 0 )
256
- gmt_offset -= is_dst;
257
-
258
- hour_offset = -(gmt_offset / 3600);
259
- minute_offset = -(gmt_offset % 3600 / 60);
260
-
261
- jd = jd_from_date(year, month, day);
262
-
263
- // Generate ajd with fractional days for the time
264
- // Extracted from Date#jd_to_ajd, Date#day_fraction_to_time, and Rational#+ and #-
265
- num = (hour * 1440) + (min * 24);
266
-
267
- // Modify the numerator so when we apply the timezone everything works out
268
- num -= (hour_offset * 1440) + (minute_offset * 24);
269
-
270
- den = (24 * 1440);
271
- reduce(&num, &den);
272
-
273
- num = (num * 86400) + (sec * den);
274
- den = den * 86400;
275
- reduce(&num, &den);
276
-
277
- num = (jd * den) + num;
278
-
279
- num = num * 2;
280
- num = num - den;
281
- den = den * 2;
282
-
283
- reduce(&num, &den);
284
-
285
- ajd = rb_funcall(rb_mKernel, ID_RATIONAL, 2, rb_ull2inum(num), rb_ull2inum(den));
286
- offset = timezone_to_offset(hour_offset, minute_offset);
287
-
288
- return rb_funcall(rb_cDateTime, ID_NEW_DATE, 3, ajd, offset, INT2NUM(2299161));
191
+ return rb_funcall(rb_cDateTime, ID_NEW, 7, INT2NUM(year), INT2NUM(month), INT2NUM(day),
192
+ INT2NUM(hour), INT2NUM(min), INT2NUM(sec), gmt_offset);
289
193
  } else {
290
194
  // Something went terribly wrong
291
195
  rb_raise(eDataError, "Couldn't parse datetime from class %s object", rb_obj_classname(r_value));
@@ -794,11 +698,6 @@ void Init_do_oracle() {
794
698
  rb_funcall(rb_mKernel, rb_intern("require"), 1, rb_str_new2("data_objects"));
795
699
 
796
700
  ID_NEW = rb_intern("new");
797
- #ifdef RUBY_LESS_THAN_186
798
- ID_NEW_DATE = rb_intern("new0");
799
- #else
800
- ID_NEW_DATE = rb_intern("new!");
801
- #endif
802
701
  ID_LOGGER = rb_intern("logger");
803
702
  ID_DEBUG = rb_intern("debug");
804
703
  ID_LEVEL = rb_intern("level");
@@ -1,5 +1,5 @@
1
1
  module DataObjects
2
2
  module Oracle
3
- VERSION = '0.10.7'
3
+ VERSION = '0.10.8'
4
4
  end
5
5
  end
data/tasks/compile.rake CHANGED
@@ -32,7 +32,7 @@ begin
32
32
  # Gem::Specification API.
33
33
  gem.dependencies.delete_if { |d| d.name == 'ruby-oci8'}
34
34
 
35
- gem.add_dependency "do_jdbc", '0.10.7'
35
+ gem.add_dependency "do_jdbc", '0.10.8'
36
36
  end
37
37
  end
38
38
  rescue LoadError
data/tasks/spec.rake CHANGED
@@ -2,7 +2,6 @@ require 'rspec/core/rake_task'
2
2
 
3
3
  RSpec::Core::RakeTask.new(:spec => [:clean, :compile]) do |spec|
4
4
  spec.pattern = './spec/**/*_spec.rb'
5
- spec.skip_bundler = true
6
5
  end
7
6
 
8
7
  RSpec::Core::RakeTask.new(:rcov => [:clean, :compile]) do |rcov|
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: do_oracle
3
3
  version: !ruby/object:Gem::Version
4
- hash: 57
4
+ hash: 39
5
5
  prerelease:
6
6
  segments:
7
7
  - 0
8
8
  - 10
9
- - 7
10
- version: 0.10.7
9
+ - 8
10
+ version: 0.10.8
11
11
  platform: ruby
12
12
  authors:
13
13
  - Raimonds Simanovskis
@@ -25,12 +25,12 @@ dependencies:
25
25
  requirements:
26
26
  - - "="
27
27
  - !ruby/object:Gem::Version
28
- hash: 57
28
+ hash: 39
29
29
  segments:
30
30
  - 0
31
31
  - 10
32
- - 7
33
- version: 0.10.7
32
+ - 8
33
+ version: 0.10.8
34
34
  type: :runtime
35
35
  version_requirements: *id001
36
36
  - !ruby/object:Gem::Dependency
@@ -138,7 +138,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
138
138
  requirements: []
139
139
 
140
140
  rubyforge_project: dorb
141
- rubygems_version: 1.8.6
141
+ rubygems_version: 1.8.14
142
142
  signing_key:
143
143
  specification_version: 3
144
144
  summary: DataObjects Oracle Driver