swift 0.4.2 → 0.4.3
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/README.rdoc +8 -8
- data/VERSION +1 -1
- data/ext/extconf.rb +1 -1
- data/ext/swift.cc +19 -12
- data/swift.gemspec +3 -1
- data/test/helper.rb +1 -0
- data/test/test_pool.rb +34 -0
- metadata +4 -2
data/README.rdoc
CHANGED
@@ -23,13 +23,6 @@ dbic++ can be found here http://github.com/deepfryed/dbicpp
|
|
23
23
|
* EventMachine asynchronous interface.
|
24
24
|
* Migrations.
|
25
25
|
|
26
|
-
== Performance
|
27
|
-
|
28
|
-
Swift prefers performance when it doesn't compromise the Ruby-ish interface. It's unfair to compare Swift to DataMapper
|
29
|
-
and ActiveRecord which suffer under the weight of support for many more databases and legacy/alternative Ruby
|
30
|
-
implementations. That said obviously if Swift were slower it would be redundant so benchmark code does exist in
|
31
|
-
http://github.com/shanna/swift/tree/master/benchmarks
|
32
|
-
|
33
26
|
== Synopsis
|
34
27
|
|
35
28
|
=== DB
|
@@ -193,7 +186,14 @@ You are not just limited to files - you can stream data from anywhere into MySQL
|
|
193
186
|
PostgreSQL directly without creating temporary files.
|
194
187
|
|
195
188
|
|
196
|
-
==
|
189
|
+
== Performance
|
190
|
+
|
191
|
+
Swift prefers performance when it doesn't compromise the Ruby-ish interface. It's unfair to compare Swift to DataMapper
|
192
|
+
and ActiveRecord which suffer under the weight of support for many more databases and legacy/alternative Ruby
|
193
|
+
implementations. That said obviously if Swift were slower it would be redundant so benchmark code does exist in
|
194
|
+
http://github.com/shanna/swift/tree/master/benchmarks
|
195
|
+
|
196
|
+
=== Benchmarks
|
197
197
|
|
198
198
|
The following bechmarks were run on a machine with 4G ram, 5200rpm sata drive,
|
199
199
|
Intel Core2Duo P8700 2.53GHz and stock PostgreSQL 8.4.1.
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.4.
|
1
|
+
0.4.3
|
data/ext/extconf.rb
CHANGED
data/ext/swift.cc
CHANGED
@@ -27,7 +27,7 @@ static VALUE fRead;
|
|
27
27
|
static VALUE fWrite;
|
28
28
|
|
29
29
|
size_t tzoffset;
|
30
|
-
char
|
30
|
+
char errstr[8192];
|
31
31
|
|
32
32
|
#define CSTRING(v) RSTRING_PTR(TYPE(v) == T_STRING ? v : rb_funcall(v, fStringify, 0))
|
33
33
|
#define OBJ2STRING(v) (TYPE(v) == T_STRING ? v : rb_funcall(v, fStringify, 0))
|
@@ -420,8 +420,8 @@ VALUE rb_field_typecast(VALUE adapter, int type, const char *data, ulong len) {
|
|
420
420
|
time_t epoch, offset;
|
421
421
|
struct tm tm;
|
422
422
|
|
423
|
-
char
|
424
|
-
int
|
423
|
+
char tzsign = ' ';
|
424
|
+
int tzhour = 0, tzmin = 0;
|
425
425
|
double usec = 0;
|
426
426
|
|
427
427
|
switch(type) {
|
@@ -436,18 +436,25 @@ VALUE rb_field_typecast(VALUE adapter, int type, const char *data, ulong len) {
|
|
436
436
|
case DBI_TYPE_TEXT:
|
437
437
|
return rb_enc_str_new(data, len, rb_utf8_encoding());
|
438
438
|
case DBI_TYPE_TIME:
|
439
|
-
|
440
|
-
|
441
|
-
|
442
|
-
|
439
|
+
/* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
440
|
+
NOTE Flexibility sacrificed for performance.
|
441
|
+
Timestamp parser is very unforgiving and only parses
|
442
|
+
YYYY-MM-DD HH:MM:SS.ms[+-]HH:MM
|
443
|
+
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
|
444
|
+
memset(&tm, 0, sizeof(struct tm));
|
445
|
+
if (strchr(data, '.')) {
|
446
|
+
sscanf(data, "%04d-%02d-%02d %02d:%02d:%02d%lf%c%02d:%02d",
|
447
|
+
&tm.tm_year, &tm.tm_mon, &tm.tm_mday, &tm.tm_hour, &tm.tm_min, &tm.tm_sec,
|
448
|
+
&usec, &tzsign, &tzhour, &tzmin);
|
443
449
|
}
|
444
450
|
else {
|
445
|
-
sscanf(data, "%
|
446
|
-
|
451
|
+
sscanf(data, "%04d-%02d-%02d %02d:%02d:%02d%c%02d:%02d",
|
452
|
+
&tm.tm_year, &tm.tm_mon, &tm.tm_mday, &tm.tm_hour, &tm.tm_min, &tm.tm_sec,
|
453
|
+
&tzsign, &tzhour, &tzmin);
|
447
454
|
}
|
448
|
-
|
449
|
-
|
450
|
-
if (
|
455
|
+
tm.tm_year -= 1900;
|
456
|
+
tm.tm_mon -= 1;
|
457
|
+
if (tm.tm_mday > 0) {
|
451
458
|
offset = tzoffset;
|
452
459
|
epoch = mktime(&tm);
|
453
460
|
if (tzsign == '+' || tzsign == '-') {
|
data/swift.gemspec
CHANGED
@@ -5,7 +5,7 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{swift}
|
8
|
-
s.version = "0.4.
|
8
|
+
s.version = "0.4.3"
|
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"]
|
@@ -40,6 +40,7 @@ Gem::Specification.new do |s|
|
|
40
40
|
"test/test_encoding.rb",
|
41
41
|
"test/test_identity_map.rb",
|
42
42
|
"test/test_io.rb",
|
43
|
+
"test/test_pool.rb",
|
43
44
|
"test/test_timestamps.rb"
|
44
45
|
]
|
45
46
|
s.homepage = %q{http://github.com/shanna/swift}
|
@@ -54,6 +55,7 @@ Gem::Specification.new do |s|
|
|
54
55
|
"test/test_timestamps.rb",
|
55
56
|
"test/helper.rb",
|
56
57
|
"test/test_identity_map.rb",
|
58
|
+
"test/test_pool.rb",
|
57
59
|
"examples/async.rb",
|
58
60
|
"examples/scheme.rb",
|
59
61
|
"examples/db.rb"
|
data/test/helper.rb
CHANGED
data/test/test_pool.rb
ADDED
@@ -0,0 +1,34 @@
|
|
1
|
+
require_relative 'helper'
|
2
|
+
|
3
|
+
describe 'Adapter' do
|
4
|
+
supported_by Swift::DB::Postgres, Swift::DB::Mysql do
|
5
|
+
describe 'Asynchronous connection pool' do
|
6
|
+
before do
|
7
|
+
Swift.db do |db|
|
8
|
+
type = db.is_a?(Swift::DB::Postgres) ? 'bytea' : 'blob'
|
9
|
+
db.execute %q{drop table if exists users}
|
10
|
+
db.execute %Q{create table users(id serial, name text)}
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
it 'creates connection pool' do
|
15
|
+
driver = Swift.db.kind_of?(Swift::DB::Mysql) ? 'mysql' : 'postgresql'
|
16
|
+
assert Swift::Pool.new 5, db: 'swift_test', driver: driver
|
17
|
+
end
|
18
|
+
|
19
|
+
describe 'Running queries' do
|
20
|
+
it 'should select data' do
|
21
|
+
rows = []
|
22
|
+
assert Swift.db.write('users', %w{name}, StringIO.new("user1\nuser2\nuser3\n"))
|
23
|
+
Swift.pool 5 do |pool|
|
24
|
+
pool.execute('select * from users') do |rs|
|
25
|
+
rows += rs.to_a
|
26
|
+
pool.execute('select * from users') {|rs| rows += rs.to_a }
|
27
|
+
end
|
28
|
+
end
|
29
|
+
assert_equal 6, rows.length
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
metadata
CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
|
|
5
5
|
segments:
|
6
6
|
- 0
|
7
7
|
- 4
|
8
|
-
-
|
9
|
-
version: 0.4.
|
8
|
+
- 3
|
9
|
+
version: 0.4.3
|
10
10
|
platform: ruby
|
11
11
|
authors:
|
12
12
|
- Shane Hanna
|
@@ -66,6 +66,7 @@ files:
|
|
66
66
|
- test/test_encoding.rb
|
67
67
|
- test/test_identity_map.rb
|
68
68
|
- test/test_io.rb
|
69
|
+
- test/test_pool.rb
|
69
70
|
- test/test_timestamps.rb
|
70
71
|
has_rdoc: true
|
71
72
|
homepage: http://github.com/shanna/swift
|
@@ -104,6 +105,7 @@ test_files:
|
|
104
105
|
- test/test_timestamps.rb
|
105
106
|
- test/helper.rb
|
106
107
|
- test/test_identity_map.rb
|
108
|
+
- test/test_pool.rb
|
107
109
|
- examples/async.rb
|
108
110
|
- examples/scheme.rb
|
109
111
|
- examples/db.rb
|