fb 0.5.9 → 0.5.10

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/fb.c CHANGED
@@ -1924,8 +1924,7 @@ static VALUE fb_cursor_fetch(struct FbCursor *fb_cursor)
1924
1924
  case SQL_SHORT:
1925
1925
  if (var->sqlscale < 0) {
1926
1926
  ratio = 1;
1927
- for (scnt = 0; scnt > var->sqlscale; scnt--)
1928
- ratio *= 10;
1927
+ for (scnt = 0; scnt > var->sqlscale; scnt--) ratio *= 10;
1929
1928
  dval = (double)*(short*)var->sqldata/ratio;
1930
1929
  val = rb_float_new(dval);
1931
1930
  } else {
@@ -1936,8 +1935,7 @@ static VALUE fb_cursor_fetch(struct FbCursor *fb_cursor)
1936
1935
  case SQL_LONG:
1937
1936
  if (var->sqlscale < 0) {
1938
1937
  ratio = 1;
1939
- for (scnt = 0; scnt > var->sqlscale; scnt--)
1940
- ratio *= 10;
1938
+ for (scnt = 0; scnt > var->sqlscale; scnt--) ratio *= 10;
1941
1939
  dval = (double)*(long*)var->sqldata/ratio;
1942
1940
  val = rb_float_new(dval);
1943
1941
  } else {
@@ -1954,7 +1952,14 @@ static VALUE fb_cursor_fetch(struct FbCursor *fb_cursor)
1954
1952
  break;
1955
1953
  #if HAVE_LONG_LONG
1956
1954
  case SQL_INT64:
1957
- val = LL2NUM(*(LONG_LONG*)var->sqldata);
1955
+ if (var->sqlscale < 0) {
1956
+ ratio = 1;
1957
+ for (scnt = 0; scnt > var->sqlscale; scnt--) ratio *= 10;
1958
+ dval = (double)*(long*)var->sqldata/ratio;
1959
+ val = rb_float_new(dval);
1960
+ } else {
1961
+ val = LL2NUM(*(LONG_LONG*)var->sqldata);
1962
+ }
1958
1963
  break;
1959
1964
  #endif
1960
1965
  case SQL_TIMESTAMP:
@@ -68,6 +68,34 @@ class DataTypesTestCases < Test::Unit::TestCase
68
68
  i * 100
69
69
  end
70
70
 
71
+ def sum_i(range)
72
+ range.inject(0) { |m, i| m + gen_i(i) }
73
+ end
74
+
75
+ def sum_si(range)
76
+ range.inject(0) { |m, i| m + gen_si(i) }
77
+ end
78
+
79
+ def sum_bi(range)
80
+ range.inject(0) { |m, i| m + gen_bi(i) }
81
+ end
82
+
83
+ def sum_f(range)
84
+ range.inject(0) { |m, i| m + gen_f(i) }
85
+ end
86
+
87
+ def sum_d(range)
88
+ range.inject(0) { |m, i| m + gen_d(i) }
89
+ end
90
+
91
+ def sum_n92(range)
92
+ range.inject(0) { |m, i| m + gen_n92(i) }
93
+ end
94
+
95
+ def sum_d92(range)
96
+ range.inject(0) { |m, i| m + gen_d92(i) }
97
+ end
98
+
71
99
  def test_insert_basic_types
72
100
  sql_schema = <<-END
73
101
  create table TEST (
@@ -94,6 +122,10 @@ class DataTypesTestCases < Test::Unit::TestCase
94
122
  (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?);
95
123
  END
96
124
  sql_select = "select * from TEST order by I"
125
+ sql_sum = "select sum(I), sum(SI), sum(BI), sum(F), sum(D), sum(N92), sum(D92) from TEST"
126
+ sql_avg = "select avg(I), avg(SI), avg(BI), avg(F), avg(D), avg(N92), avg(D92) from TEST"
127
+ sql_max = "select max(I), max(SI), max(BI), max(F), max(D), max(N92), max(D92) from TEST"
128
+ sql_min = "select min(I), min(SI), min(BI), min(F), min(D), min(N92), min(D92) from TEST"
97
129
  Database.create(@parms) do |connection|
98
130
  connection.execute(sql_schema);
99
131
  connection.transaction do
@@ -128,6 +160,42 @@ class DataTypesTestCases < Test::Unit::TestCase
128
160
  i += 1
129
161
  end
130
162
  end
163
+
164
+ sums = connection.query(sql_sum).first
165
+ assert_equal sum_i(0...10), sums[0], "INTEGER"
166
+ assert_equal sum_si(0...10), sums[1], "SMALLINT"
167
+ assert_equal sum_bi(0...10), sums[2], "BIGINT"
168
+ assert_equal sum_f(0...10), sums[3], "FLOAT"
169
+ assert_equal sum_d(0...10), sums[4], "DOUBLE PRECISION"
170
+ assert_equal sum_n92(0...10), sums[5], "NUMERIC" # 4500.00
171
+ assert_equal sum_d92(0...10), sums[6], "DECIMAL" # 4500.00
172
+
173
+ avgs = connection.query(sql_avg).first
174
+ assert_equal sum_i(0...10) / 10, avgs[0], "INTEGER"
175
+ assert_equal sum_si(0...10) / 10, avgs[1], "SMALLINT"
176
+ assert_equal sum_bi(0...10) / 10, avgs[2], "BIGINT"
177
+ assert_equal sum_f(0...10) / 10, avgs[3], "FLOAT"
178
+ assert_equal sum_d(0...10) / 10, avgs[4], "DOUBLE PRECISION"
179
+ assert_equal sum_n92(0...10) / 10, avgs[5], "NUMERIC" # 450.00
180
+ assert_equal sum_d92(0...10) / 10, avgs[6], "DECIMAL" # 450.00
181
+
182
+ maxs = connection.query(sql_max).first
183
+ assert_equal gen_i(9), maxs[0], "INTEGER"
184
+ assert_equal gen_si(9), maxs[1], "SMALLINT"
185
+ assert_equal gen_bi(9), maxs[2], "BIGINT"
186
+ assert_equal gen_f(9), maxs[3], "FLOAT"
187
+ assert_equal gen_d(9), maxs[4], "DOUBLE PRECISION"
188
+ assert_equal gen_n92(9), maxs[5], "NUMERIC"
189
+ assert_equal gen_d92(9), maxs[6], "DECIMAL"
190
+
191
+ mins = connection.query(sql_min).first
192
+ assert_equal gen_i(0), mins[0], "INTEGER"
193
+ assert_equal gen_si(0), mins[1], "SMALLINT"
194
+ assert_equal gen_bi(0), mins[2], "BIGINT"
195
+ assert_equal gen_f(0), mins[3], "FLOAT"
196
+ assert_equal gen_d(0), mins[4], "DOUBLE PRECISION"
197
+ assert_equal gen_n92(0), mins[5], "NUMERIC"
198
+ assert_equal gen_d92(0), mins[6], "DECIMAL"
131
199
  connection.drop
132
200
  end
133
201
  end
@@ -8,7 +8,7 @@ module FbTestCases
8
8
  def setup
9
9
  @db_file = case RUBY_PLATFORM
10
10
  when /win32/ then 'c:/var/fbdata/drivertest.fdb'
11
- when /darwin/ then '/var/fbdata/drivertest.fdb'
11
+ when /darwin/ then File.join(File.expand_path(File.dirname(__FILE__)), 'drivertest.fdb')
12
12
  else '/var/fbdata/drivertest.fdb'
13
13
  end
14
14
  @db_host = 'localhost'
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fb
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.9
4
+ version: 0.5.10
5
5
  platform: ruby
6
6
  authors:
7
7
  - Brent Rowland
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2009-02-19 00:00:00 -07:00
12
+ date: 2009-05-26 00:00:00 -07:00
13
13
  default_executable:
14
14
  dependencies: []
15
15
 
@@ -34,6 +34,8 @@ files:
34
34
  - test/TransactionTestCases.rb
35
35
  has_rdoc: true
36
36
  homepage: http://www.rowlandresearch.com/ruby/
37
+ licenses: []
38
+
37
39
  post_install_message:
38
40
  rdoc_options:
39
41
  - --title
@@ -59,9 +61,9 @@ required_rubygems_version: !ruby/object:Gem::Requirement
59
61
  requirements:
60
62
  - Firebird client library fbclient.dll
61
63
  rubyforge_project: fblib
62
- rubygems_version: 1.3.1
64
+ rubygems_version: 1.3.3
63
65
  signing_key:
64
- specification_version: 2
66
+ specification_version: 3
65
67
  summary: Firebird and Interbase driver
66
68
  test_files:
67
69
  - test/FbTestSuite.rb