fb 0.6.3 → 0.6.5
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 +16 -3
- data/test/DataTypesTestCases.rb +23 -10
- metadata +6 -4
data/fb.c
CHANGED
@@ -1453,6 +1453,7 @@ static void fb_cursor_set_inputparams(struct FbCursor *fb_cursor, int argc, VALU
|
|
1453
1453
|
short dtp;
|
1454
1454
|
VALUE obj;
|
1455
1455
|
long lvalue;
|
1456
|
+
ISC_INT64 llvalue;
|
1456
1457
|
long alignment;
|
1457
1458
|
double ratio;
|
1458
1459
|
double dvalue;
|
@@ -1590,8 +1591,20 @@ static void fb_cursor_set_inputparams(struct FbCursor *fb_cursor, int argc, VALU
|
|
1590
1591
|
case SQL_INT64 :
|
1591
1592
|
offset = FB_ALIGN(offset, alignment);
|
1592
1593
|
var->sqldata = (char *)(fb_cursor->i_buffer + offset);
|
1593
|
-
|
1594
|
-
|
1594
|
+
|
1595
|
+
if (var->sqlscale < 0) {
|
1596
|
+
ratio = 1;
|
1597
|
+
for (scnt = 0; scnt > var->sqlscale; scnt--)
|
1598
|
+
ratio *= 10;
|
1599
|
+
obj = double_from_obj(obj);
|
1600
|
+
dvalue = NUM2DBL(obj) * ratio;
|
1601
|
+
llvalue = (ISC_INT64)(dvalue + 0.5);
|
1602
|
+
} else {
|
1603
|
+
obj = ll_from_obj(obj);
|
1604
|
+
llvalue = NUM2LL(obj);
|
1605
|
+
}
|
1606
|
+
|
1607
|
+
*(ISC_INT64 *)var->sqldata = llvalue;
|
1595
1608
|
offset += alignment;
|
1596
1609
|
break;
|
1597
1610
|
#endif
|
@@ -2887,7 +2900,7 @@ static VALUE hash_from_connection_string(VALUE cs)
|
|
2887
2900
|
|
2888
2901
|
static void check_page_size(int page_size)
|
2889
2902
|
{
|
2890
|
-
if (page_size != 1024 && page_size != 2048 && page_size != 4096 && page_size != 8192) {
|
2903
|
+
if (page_size != 1024 && page_size != 2048 && page_size != 4096 && page_size != 8192 && page_size != 16384) {
|
2891
2904
|
rb_raise(rb_eFbError, "Invalid page size: %d", page_size);
|
2892
2905
|
}
|
2893
2906
|
}
|
data/test/DataTypesTestCases.rb
CHANGED
@@ -113,19 +113,20 @@ class DataTypesTestCases < Test::Unit::TestCase
|
|
113
113
|
TM TIME,
|
114
114
|
TS TIMESTAMP,
|
115
115
|
N92 NUMERIC(9,2),
|
116
|
-
D92 DECIMAL(9,2)
|
116
|
+
D92 DECIMAL(9,2),
|
117
|
+
N154 NUMERIC(15,4));
|
117
118
|
END
|
118
119
|
sql_insert = <<-END
|
119
120
|
insert into test
|
120
|
-
(I, SI, BI, F, D, C, C10, VC, VC10, VC10000, DT, TM, TS, N92, D92)
|
121
|
+
(I, SI, BI, F, D, C, C10, VC, VC10, VC10000, DT, TM, TS, N92, D92, N154)
|
121
122
|
values
|
122
|
-
(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?);
|
123
|
+
(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?);
|
123
124
|
END
|
124
125
|
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"
|
126
|
+
sql_sum = "select sum(I), sum(SI), sum(BI), sum(F), sum(D), sum(N92), sum(D92), sum(N154) from TEST"
|
127
|
+
sql_avg = "select avg(I), avg(SI), avg(BI), avg(F), avg(D), avg(N92), avg(D92), avg(N154) from TEST"
|
128
|
+
sql_max = "select max(I), max(SI), max(BI), max(F), max(D), max(N92), max(D92), max(N154) from TEST"
|
129
|
+
sql_min = "select min(I), min(SI), min(BI), min(F), min(D), min(N92), min(D92), min(N154) from TEST"
|
129
130
|
Database.create(@parms) do |connection|
|
130
131
|
connection.execute(sql_schema);
|
131
132
|
connection.transaction do
|
@@ -136,7 +137,7 @@ class DataTypesTestCases < Test::Unit::TestCase
|
|
136
137
|
gen_f(i), gen_d(i),
|
137
138
|
gen_c(i), gen_c10(i), gen_vc(i), gen_vc10(i), gen_vc10000(i),
|
138
139
|
gen_dt(i), gen_tm(i), gen_ts(i),
|
139
|
-
gen_n92(i), gen_d92(i))
|
140
|
+
gen_n92(i), gen_d92(i), gen_n92(i))
|
140
141
|
end
|
141
142
|
end
|
142
143
|
connection.execute(sql_select) do |cursor|
|
@@ -157,6 +158,7 @@ class DataTypesTestCases < Test::Unit::TestCase
|
|
157
158
|
assert_equal gen_ts(i), row["TS"], "TIMESTAMP"
|
158
159
|
assert_equal gen_n92(i), row["N92"], "NUMERIC"
|
159
160
|
assert_equal gen_d92(i), row["D92"], "DECIMAL"
|
161
|
+
assert_equal gen_n92(i), row["N154"], "NUMERIC"
|
160
162
|
i += 1
|
161
163
|
end
|
162
164
|
end
|
@@ -169,6 +171,7 @@ class DataTypesTestCases < Test::Unit::TestCase
|
|
169
171
|
assert_equal sum_d(0...10), sums[4], "DOUBLE PRECISION"
|
170
172
|
assert_equal sum_n92(0...10), sums[5], "NUMERIC" # 4500.00
|
171
173
|
assert_equal sum_d92(0...10), sums[6], "DECIMAL" # 4500.00
|
174
|
+
assert_equal sum_n92(0...10), sums[7], "NUMERIC" # 4500.00
|
172
175
|
|
173
176
|
avgs = connection.query(sql_avg).first
|
174
177
|
assert_equal sum_i(0...10) / 10, avgs[0], "INTEGER"
|
@@ -178,6 +181,7 @@ class DataTypesTestCases < Test::Unit::TestCase
|
|
178
181
|
assert_equal sum_d(0...10) / 10, avgs[4], "DOUBLE PRECISION"
|
179
182
|
assert_equal sum_n92(0...10) / 10, avgs[5], "NUMERIC" # 450.00
|
180
183
|
assert_equal sum_d92(0...10) / 10, avgs[6], "DECIMAL" # 450.00
|
184
|
+
assert_equal sum_n92(0...10) / 10, avgs[7], "NUMERIC" # 450.00
|
181
185
|
|
182
186
|
maxs = connection.query(sql_max).first
|
183
187
|
assert_equal gen_i(9), maxs[0], "INTEGER"
|
@@ -187,6 +191,7 @@ class DataTypesTestCases < Test::Unit::TestCase
|
|
187
191
|
assert_equal gen_d(9), maxs[4], "DOUBLE PRECISION"
|
188
192
|
assert_equal gen_n92(9), maxs[5], "NUMERIC"
|
189
193
|
assert_equal gen_d92(9), maxs[6], "DECIMAL"
|
194
|
+
assert_equal gen_n92(9), maxs[7], "NUMERIC"
|
190
195
|
|
191
196
|
mins = connection.query(sql_min).first
|
192
197
|
assert_equal gen_i(0), mins[0], "INTEGER"
|
@@ -196,6 +201,7 @@ class DataTypesTestCases < Test::Unit::TestCase
|
|
196
201
|
assert_equal gen_d(0), mins[4], "DOUBLE PRECISION"
|
197
202
|
assert_equal gen_n92(0), mins[5], "NUMERIC"
|
198
203
|
assert_equal gen_d92(0), mins[6], "DECIMAL"
|
204
|
+
assert_equal gen_n92(0), mins[7], "NUMERIC"
|
199
205
|
connection.drop
|
200
206
|
end
|
201
207
|
end
|
@@ -380,8 +386,8 @@ class DataTypesTestCases < Test::Unit::TestCase
|
|
380
386
|
end
|
381
387
|
|
382
388
|
def test_insert_correct_types
|
383
|
-
cols = %w{ I SI BI F D C C10 VC VC10 VC10000 DT TM TS N92 D92 }
|
384
|
-
types = %w{ INTEGER SMALLINT BIGINT FLOAT DOUBLE\ PRECISION CHAR CHAR(10) VARCHAR(1) VARCHAR(10) VARCHAR(10000) DATE TIME TIMESTAMP NUMERIC(9,2) DECIMAL(9,2) }
|
389
|
+
cols = %w{ I SI BI F D C C10 VC VC10 VC10000 DT TM TS N92 D92 N154 }
|
390
|
+
types = %w{ INTEGER SMALLINT BIGINT FLOAT DOUBLE\ PRECISION CHAR CHAR(10) VARCHAR(1) VARCHAR(10) VARCHAR(10000) DATE TIME TIMESTAMP NUMERIC(9,2) DECIMAL(9,2) NUMERIC(15,4) }
|
385
391
|
sql_schema = "";
|
386
392
|
assert_equal cols.size, types.size
|
387
393
|
cols.size.times do |i|
|
@@ -488,6 +494,13 @@ class DataTypesTestCases < Test::Unit::TestCase
|
|
488
494
|
# puts vals.inspect
|
489
495
|
assert_equal 12345.12, vals[0][0], "DECIMAL (decimal)"
|
490
496
|
assert_equal 12345.12, vals[1][0], "DECIMAL (string)"
|
497
|
+
elsif cols[i] == 'N154'
|
498
|
+
connection.execute(sql_insert, 12345.12)
|
499
|
+
connection.execute(sql_insert, "12345.12")
|
500
|
+
vals = connection.query(sql_select)
|
501
|
+
# puts vals.inspect
|
502
|
+
assert_equal 12345.12, vals[0][0], "NUMERIC (decimal)"
|
503
|
+
assert_equal 12345.12, vals[1][0], "NUMERIC (string)"
|
491
504
|
end
|
492
505
|
end
|
493
506
|
connection.drop
|
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.6.
|
4
|
+
version: 0.6.5
|
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-09-
|
12
|
+
date: 2009-09-26 00:00:00 -07:00
|
13
13
|
default_executable:
|
14
14
|
dependencies: []
|
15
15
|
|
@@ -35,6 +35,8 @@ files:
|
|
35
35
|
- test/TransactionTestCases.rb
|
36
36
|
has_rdoc: true
|
37
37
|
homepage: http://github.com/rowland/fb
|
38
|
+
licenses: []
|
39
|
+
|
38
40
|
post_install_message:
|
39
41
|
rdoc_options:
|
40
42
|
- --title
|
@@ -60,9 +62,9 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
60
62
|
requirements:
|
61
63
|
- Firebird client library fbclient.dll, libfbclient.so or Firebird.framework.
|
62
64
|
rubyforge_project: fblib
|
63
|
-
rubygems_version: 1.3.
|
65
|
+
rubygems_version: 1.3.5
|
64
66
|
signing_key:
|
65
|
-
specification_version:
|
67
|
+
specification_version: 3
|
66
68
|
summary: Firebird and Interbase driver
|
67
69
|
test_files:
|
68
70
|
- test/FbTestSuite.rb
|