sequel_core 1.0
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGELOG +1003 -0
- data/COPYING +18 -0
- data/README +81 -0
- data/Rakefile +176 -0
- data/bin/sequel +41 -0
- data/lib/sequel_core.rb +59 -0
- data/lib/sequel_core/adapters/adapter_skeleton.rb +68 -0
- data/lib/sequel_core/adapters/ado.rb +100 -0
- data/lib/sequel_core/adapters/db2.rb +158 -0
- data/lib/sequel_core/adapters/dbi.rb +126 -0
- data/lib/sequel_core/adapters/informix.rb +87 -0
- data/lib/sequel_core/adapters/jdbc.rb +108 -0
- data/lib/sequel_core/adapters/mysql.rb +269 -0
- data/lib/sequel_core/adapters/odbc.rb +145 -0
- data/lib/sequel_core/adapters/odbc_mssql.rb +93 -0
- data/lib/sequel_core/adapters/openbase.rb +90 -0
- data/lib/sequel_core/adapters/oracle.rb +99 -0
- data/lib/sequel_core/adapters/postgres.rb +519 -0
- data/lib/sequel_core/adapters/sqlite.rb +192 -0
- data/lib/sequel_core/array_keys.rb +296 -0
- data/lib/sequel_core/connection_pool.rb +152 -0
- data/lib/sequel_core/core_ext.rb +59 -0
- data/lib/sequel_core/core_sql.rb +191 -0
- data/lib/sequel_core/database.rb +433 -0
- data/lib/sequel_core/dataset.rb +409 -0
- data/lib/sequel_core/dataset/convenience.rb +321 -0
- data/lib/sequel_core/dataset/sequelizer.rb +354 -0
- data/lib/sequel_core/dataset/sql.rb +586 -0
- data/lib/sequel_core/exceptions.rb +45 -0
- data/lib/sequel_core/migration.rb +191 -0
- data/lib/sequel_core/model.rb +8 -0
- data/lib/sequel_core/pretty_table.rb +73 -0
- data/lib/sequel_core/schema.rb +8 -0
- data/lib/sequel_core/schema/schema_generator.rb +131 -0
- data/lib/sequel_core/schema/schema_sql.rb +131 -0
- data/lib/sequel_core/worker.rb +58 -0
- data/spec/adapters/informix_spec.rb +139 -0
- data/spec/adapters/mysql_spec.rb +330 -0
- data/spec/adapters/oracle_spec.rb +130 -0
- data/spec/adapters/postgres_spec.rb +189 -0
- data/spec/adapters/sqlite_spec.rb +345 -0
- data/spec/array_keys_spec.rb +679 -0
- data/spec/connection_pool_spec.rb +356 -0
- data/spec/core_ext_spec.rb +67 -0
- data/spec/core_sql_spec.rb +301 -0
- data/spec/database_spec.rb +812 -0
- data/spec/dataset_spec.rb +2381 -0
- data/spec/migration_spec.rb +261 -0
- data/spec/pretty_table_spec.rb +66 -0
- data/spec/rcov.opts +4 -0
- data/spec/schema_generator_spec.rb +86 -0
- data/spec/schema_spec.rb +230 -0
- data/spec/sequelizer_spec.rb +448 -0
- data/spec/spec.opts +5 -0
- data/spec/spec_helper.rb +44 -0
- data/spec/worker_spec.rb +96 -0
- metadata +162 -0
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1,44 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require File.join(File.dirname(__FILE__), "../lib/sequel_core")
|
3
|
+
|
4
|
+
class MockDataset < Sequel::Dataset
|
5
|
+
def insert(*args)
|
6
|
+
@db.execute insert_sql(*args)
|
7
|
+
end
|
8
|
+
|
9
|
+
def update(*args)
|
10
|
+
@db.execute update_sql(*args)
|
11
|
+
end
|
12
|
+
|
13
|
+
def fetch_rows(sql)
|
14
|
+
@db.execute(sql)
|
15
|
+
yield({:id => 1, :x => 1})
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
class MockDatabase < Sequel::Database
|
20
|
+
attr_reader :sqls
|
21
|
+
|
22
|
+
def execute(sql)
|
23
|
+
@sqls ||= []
|
24
|
+
@sqls << sql
|
25
|
+
end
|
26
|
+
|
27
|
+
def reset
|
28
|
+
@sqls = []
|
29
|
+
end
|
30
|
+
|
31
|
+
def transaction; yield; end
|
32
|
+
|
33
|
+
def dataset; MockDataset.new(self); end
|
34
|
+
end
|
35
|
+
|
36
|
+
class SchemaDummyDatabase < Sequel::Database
|
37
|
+
attr_reader :sqls
|
38
|
+
|
39
|
+
def execute(sql)
|
40
|
+
@sqls ||= []
|
41
|
+
@sqls << sql
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
data/spec/worker_spec.rb
ADDED
@@ -0,0 +1,96 @@
|
|
1
|
+
require File.join(File.dirname(__FILE__), 'spec_helper')
|
2
|
+
|
3
|
+
context "A worker" do
|
4
|
+
setup do
|
5
|
+
@w = Sequel::Worker.new
|
6
|
+
end
|
7
|
+
|
8
|
+
teardown do
|
9
|
+
sleep 0.1
|
10
|
+
@w.join if @w
|
11
|
+
end
|
12
|
+
|
13
|
+
specify "should be a thread" do
|
14
|
+
@w.should be_a_kind_of(Thread)
|
15
|
+
end
|
16
|
+
|
17
|
+
specify "should be alive until it is joined" do
|
18
|
+
@w.should be_alive
|
19
|
+
end
|
20
|
+
|
21
|
+
specify "should be busy if any jobs are pending" do
|
22
|
+
@w.should_not be_busy
|
23
|
+
@w.add {sleep 0.5}
|
24
|
+
@w.should be_busy
|
25
|
+
end
|
26
|
+
|
27
|
+
specify "should accept jobs and perform them in the correct order" do
|
28
|
+
values = []
|
29
|
+
@w.add {values << 1}
|
30
|
+
@w.async {values << 2}
|
31
|
+
@w << proc {values << 3}
|
32
|
+
|
33
|
+
@w.join
|
34
|
+
values.should == [1, 2, 3]
|
35
|
+
end
|
36
|
+
|
37
|
+
specify "should isolate errors and hold them in #errors" do
|
38
|
+
values = []
|
39
|
+
@w.add {values << 1}
|
40
|
+
@w.async {values << 2}
|
41
|
+
@w.async {raise "bad bad bad"}
|
42
|
+
@w << proc {values << 3}
|
43
|
+
|
44
|
+
@w.join
|
45
|
+
values.should == [1, 2, 3]
|
46
|
+
@w.errors.size.should == 1
|
47
|
+
@w.errors.first.message.should == 'bad bad bad'
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
context "A worker with a given db" do
|
52
|
+
setup do
|
53
|
+
@db = MockDatabase.new
|
54
|
+
@m = Module.new do
|
55
|
+
def transaction
|
56
|
+
execute('BEGIN')
|
57
|
+
yield
|
58
|
+
execute('COMMIT')
|
59
|
+
rescue
|
60
|
+
execute('ROLLBACK')
|
61
|
+
end
|
62
|
+
end
|
63
|
+
@db.extend(@m)
|
64
|
+
@w = Sequel::Worker.new(@db)
|
65
|
+
end
|
66
|
+
|
67
|
+
teardown do
|
68
|
+
@w.join if @w
|
69
|
+
end
|
70
|
+
|
71
|
+
specify "should wrap everything in a transaction" do
|
72
|
+
@w.async {@db[:items] << {:x => 1}}
|
73
|
+
@w.join
|
74
|
+
@w = nil
|
75
|
+
@db.sqls.should == [
|
76
|
+
'BEGIN',
|
77
|
+
'INSERT INTO items (x) VALUES (1)',
|
78
|
+
'COMMIT'
|
79
|
+
]
|
80
|
+
end
|
81
|
+
|
82
|
+
specify "should rollback the transaction if any error is raised" do
|
83
|
+
@w.async {@db[:items] << {:x => 1}}
|
84
|
+
@w.async {sleep 0.2; raise "that's bad"}
|
85
|
+
@w.async {@db[:items] << {:x => 2}}
|
86
|
+
@w.join
|
87
|
+
@db.sqls.should == [
|
88
|
+
'BEGIN',
|
89
|
+
'INSERT INTO items (x) VALUES (1)',
|
90
|
+
'INSERT INTO items (x) VALUES (2)',
|
91
|
+
'ROLLBACK'
|
92
|
+
]
|
93
|
+
@w.errors.size.should == 1
|
94
|
+
@w.errors.first.message.should == "that's bad"
|
95
|
+
end
|
96
|
+
end
|
metadata
ADDED
@@ -0,0 +1,162 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: sequel_core
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: "1.0"
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Sharon Rosner
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
|
12
|
+
date: 2008-01-02 00:00:00 +02:00
|
13
|
+
default_executable:
|
14
|
+
dependencies:
|
15
|
+
- !ruby/object:Gem::Dependency
|
16
|
+
name: metaid
|
17
|
+
version_requirement:
|
18
|
+
version_requirements: !ruby/object:Gem::Requirement
|
19
|
+
requirements:
|
20
|
+
- - ">="
|
21
|
+
- !ruby/object:Gem::Version
|
22
|
+
version: "0"
|
23
|
+
version:
|
24
|
+
- !ruby/object:Gem::Dependency
|
25
|
+
name: RubyInline
|
26
|
+
version_requirement:
|
27
|
+
version_requirements: !ruby/object:Gem::Requirement
|
28
|
+
requirements:
|
29
|
+
- - ">="
|
30
|
+
- !ruby/object:Gem::Version
|
31
|
+
version: 3.6.6
|
32
|
+
version:
|
33
|
+
- !ruby/object:Gem::Dependency
|
34
|
+
name: ParseTree
|
35
|
+
version_requirement:
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ">="
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: 2.1.1
|
41
|
+
version:
|
42
|
+
- !ruby/object:Gem::Dependency
|
43
|
+
name: ruby2ruby
|
44
|
+
version_requirement:
|
45
|
+
version_requirements: !ruby/object:Gem::Requirement
|
46
|
+
requirements:
|
47
|
+
- - ">="
|
48
|
+
- !ruby/object:Gem::Version
|
49
|
+
version: "0"
|
50
|
+
version:
|
51
|
+
description: Database access for Ruby
|
52
|
+
email: ciconia@gmail.com
|
53
|
+
executables:
|
54
|
+
- sequel
|
55
|
+
extensions: []
|
56
|
+
|
57
|
+
extra_rdoc_files:
|
58
|
+
- README
|
59
|
+
- CHANGELOG
|
60
|
+
- COPYING
|
61
|
+
files:
|
62
|
+
- COPYING
|
63
|
+
- README
|
64
|
+
- Rakefile
|
65
|
+
- bin/sequel
|
66
|
+
- spec/adapters
|
67
|
+
- spec/adapters/informix_spec.rb
|
68
|
+
- spec/adapters/mysql_spec.rb
|
69
|
+
- spec/adapters/oracle_spec.rb
|
70
|
+
- spec/adapters/postgres_spec.rb
|
71
|
+
- spec/adapters/sqlite_spec.rb
|
72
|
+
- spec/array_keys_spec.rb
|
73
|
+
- spec/connection_pool_spec.rb
|
74
|
+
- spec/core_ext_spec.rb
|
75
|
+
- spec/core_sql_spec.rb
|
76
|
+
- spec/database_spec.rb
|
77
|
+
- spec/dataset_spec.rb
|
78
|
+
- spec/migration_spec.rb
|
79
|
+
- spec/pretty_table_spec.rb
|
80
|
+
- spec/rcov.opts
|
81
|
+
- spec/schema_generator_spec.rb
|
82
|
+
- spec/schema_spec.rb
|
83
|
+
- spec/sequelizer_spec.rb
|
84
|
+
- spec/spec.opts
|
85
|
+
- spec/spec_helper.rb
|
86
|
+
- spec/worker_spec.rb
|
87
|
+
- lib/sequel_core
|
88
|
+
- lib/sequel_core/adapters
|
89
|
+
- lib/sequel_core/adapters/adapter_skeleton.rb
|
90
|
+
- lib/sequel_core/adapters/ado.rb
|
91
|
+
- lib/sequel_core/adapters/db2.rb
|
92
|
+
- lib/sequel_core/adapters/dbi.rb
|
93
|
+
- lib/sequel_core/adapters/informix.rb
|
94
|
+
- lib/sequel_core/adapters/jdbc.rb
|
95
|
+
- lib/sequel_core/adapters/mysql.rb
|
96
|
+
- lib/sequel_core/adapters/odbc.rb
|
97
|
+
- lib/sequel_core/adapters/odbc_mssql.rb
|
98
|
+
- lib/sequel_core/adapters/openbase.rb
|
99
|
+
- lib/sequel_core/adapters/oracle.rb
|
100
|
+
- lib/sequel_core/adapters/postgres.rb
|
101
|
+
- lib/sequel_core/adapters/sqlite.rb
|
102
|
+
- lib/sequel_core/array_keys.rb
|
103
|
+
- lib/sequel_core/connection_pool.rb
|
104
|
+
- lib/sequel_core/core_ext.rb
|
105
|
+
- lib/sequel_core/core_sql.rb
|
106
|
+
- lib/sequel_core/database.rb
|
107
|
+
- lib/sequel_core/dataset
|
108
|
+
- lib/sequel_core/dataset/convenience.rb
|
109
|
+
- lib/sequel_core/dataset/sequelizer.rb
|
110
|
+
- lib/sequel_core/dataset/sql.rb
|
111
|
+
- lib/sequel_core/dataset.rb
|
112
|
+
- lib/sequel_core/exceptions.rb
|
113
|
+
- lib/sequel_core/migration.rb
|
114
|
+
- lib/sequel_core/model.rb
|
115
|
+
- lib/sequel_core/pretty_table.rb
|
116
|
+
- lib/sequel_core/schema
|
117
|
+
- lib/sequel_core/schema/schema_generator.rb
|
118
|
+
- lib/sequel_core/schema/schema_sql.rb
|
119
|
+
- lib/sequel_core/schema.rb
|
120
|
+
- lib/sequel_core/worker.rb
|
121
|
+
- lib/sequel_core.rb
|
122
|
+
- CHANGELOG
|
123
|
+
has_rdoc: true
|
124
|
+
homepage: http://sequel.rubyforge.org
|
125
|
+
post_install_message:
|
126
|
+
rdoc_options:
|
127
|
+
- --quiet
|
128
|
+
- --title
|
129
|
+
- "Sequel: Database access for Ruby"
|
130
|
+
- --opname
|
131
|
+
- index.html
|
132
|
+
- --line-numbers
|
133
|
+
- --main
|
134
|
+
- README
|
135
|
+
- --inline-source
|
136
|
+
- --exclude
|
137
|
+
- ^(examples|extras)/
|
138
|
+
- --exclude
|
139
|
+
- lib/sequel_core.rb
|
140
|
+
require_paths:
|
141
|
+
- lib
|
142
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
143
|
+
requirements:
|
144
|
+
- - ">="
|
145
|
+
- !ruby/object:Gem::Version
|
146
|
+
version: 1.8.4
|
147
|
+
version:
|
148
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
149
|
+
requirements:
|
150
|
+
- - ">="
|
151
|
+
- !ruby/object:Gem::Version
|
152
|
+
version: "0"
|
153
|
+
version:
|
154
|
+
requirements: []
|
155
|
+
|
156
|
+
rubyforge_project: sequel
|
157
|
+
rubygems_version: 1.0.1
|
158
|
+
signing_key:
|
159
|
+
specification_version: 2
|
160
|
+
summary: Database access for Ruby
|
161
|
+
test_files: []
|
162
|
+
|