sequel_core 1.3 → 1.4.0
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGELOG +26 -0
- data/README +5 -4
- data/Rakefile +4 -12
- data/lib/sequel_core/adapters/mysql.rb +75 -3
- data/lib/sequel_core/adapters/postgres.rb +27 -6
- data/lib/sequel_core/dataset/callback.rb +19 -0
- data/lib/sequel_core/dataset/sql.rb +22 -10
- data/lib/sequel_core/dataset.rb +3 -0
- data/lib/sequel_core/exceptions.rb +3 -0
- data/lib/sequel_core/schema/{schema_generator.rb → generator.rb} +0 -0
- data/lib/sequel_core/schema/{schema_sql.rb → sql.rb} +0 -0
- data/lib/sequel_core/schema.rb +2 -2
- data/spec/adapters/informix_spec.rb +3 -2
- data/spec/adapters/mysql_spec.rb +65 -6
- data/spec/adapters/oracle_spec.rb +3 -3
- data/spec/adapters/postgres_spec.rb +21 -21
- data/spec/adapters/sqlite_spec.rb +3 -2
- data/spec/dataset_spec.rb +32 -4
- data/spec/spec_config.rb.example +7 -6
- metadata +103 -109
data/CHANGELOG
CHANGED
@@ -1,3 +1,29 @@
|
|
1
|
+
=== 1.4.0 (2008-04-08)
|
2
|
+
|
3
|
+
* Merge 3 mysql patches from the bugtracker (mvyver) (#200, #201, #202).
|
4
|
+
|
5
|
+
* Merge 2 postgresql patches from the bugtracker (a...@mellowtone.co.jp) (#211, 212).
|
6
|
+
|
7
|
+
* Allow overriding of default posgres spec database via ENV['SEQUEL_PG_SPEC_DB'] (jeremyevans).
|
8
|
+
|
9
|
+
* Allow using the Sequel::Model as the first argument in a dataset join selection (jeremyevans) (#170).
|
10
|
+
|
11
|
+
* Add simple callback mechanism to make model eager loading implementation easier (jeremyevans).
|
12
|
+
|
13
|
+
* Added Sequel::Error::InvalidOperation class for invalid operations (#198).
|
14
|
+
|
15
|
+
* Implemented MySQL::Database#server_version (#199).
|
16
|
+
|
17
|
+
* Added spec configuration for MySQL socket file.
|
18
|
+
|
19
|
+
* Fixed transform with array tuples in postgres adapter.
|
20
|
+
|
21
|
+
* Changed spec configuration to Database objects instead of URIs in order to support custom options for spec databases.
|
22
|
+
|
23
|
+
* Renamed schema files.
|
24
|
+
|
25
|
+
* Fixed Dataset#from to work correctly with SQL functions (#193).
|
26
|
+
|
1
27
|
=== 1.3 (2008-03-08)
|
2
28
|
|
3
29
|
* Added configuration file for running specs (#186).
|
data/README
CHANGED
@@ -7,18 +7,19 @@ Sequel makes it easy to deal with multiple records without having to break your
|
|
7
7
|
== Resources
|
8
8
|
|
9
9
|
* {Project page}[http://code.google.com/p/ruby-sequel/]
|
10
|
-
* {Source code}[http://
|
10
|
+
* {Source code}[http://github.com/jeremyevans/sequel]
|
11
11
|
* {Bug tracking}[http://code.google.com/p/ruby-sequel/issues/list]
|
12
12
|
* {Google group}[http://groups.google.com/group/sequel-talk]
|
13
13
|
* {RubyForge page}[http://rubyforge.org/projects/sequel/]
|
14
|
+
* {API RDoc}[http://sequel.rubyforge.org]
|
14
15
|
|
15
16
|
To check out the source code:
|
16
17
|
|
17
|
-
|
18
|
+
git clone git://github.com/jeremyevans/sequel.git
|
18
19
|
|
19
20
|
=== Contact
|
20
21
|
|
21
|
-
If you have any comments or suggestions please
|
22
|
+
If you have any comments or suggestions please post to the Google group.
|
22
23
|
|
23
24
|
== Installation
|
24
25
|
|
@@ -208,7 +209,7 @@ Or calculate a sum:
|
|
208
209
|
|
209
210
|
You can also specify descending order
|
210
211
|
|
211
|
-
posts.order(:stamp.
|
212
|
+
posts.order(:stamp.desc)
|
212
213
|
|
213
214
|
=== Deleting Records
|
214
215
|
|
data/Rakefile
CHANGED
@@ -9,7 +9,7 @@ include FileUtils
|
|
9
9
|
# Configuration
|
10
10
|
##############################################################################
|
11
11
|
NAME = "sequel_core"
|
12
|
-
VERS = "1.
|
12
|
+
VERS = "1.4.0"
|
13
13
|
CLEAN.include ["**/.*.sw?", "pkg/*", ".config", "doc/*", "coverage/*"]
|
14
14
|
RDOC_OPTS = [
|
15
15
|
"--quiet",
|
@@ -49,10 +49,10 @@ spec = Gem::Specification.new do |s|
|
|
49
49
|
s.extra_rdoc_files = ["README", "CHANGELOG", "COPYING"]
|
50
50
|
s.rdoc_options += RDOC_OPTS +
|
51
51
|
["--exclude", "^(examples|extras)\/", "--exclude", "lib/sequel_core.rb"]
|
52
|
-
s.summary = "The Database Toolkit for Ruby"
|
52
|
+
s.summary = "The Database Toolkit for Ruby: Core Library and Adapters"
|
53
53
|
s.description = s.summary
|
54
|
-
s.author = "
|
55
|
-
s.email = "
|
54
|
+
s.author = "Aman Gupta"
|
55
|
+
s.email = "themastermind1@gmail.com"
|
56
56
|
s.homepage = "http://sequel.rubyforge.org"
|
57
57
|
s.executables = ["sequel"]
|
58
58
|
s.required_ruby_version = ">= 1.8.4"
|
@@ -99,14 +99,6 @@ task :uninstall => [:clean] do
|
|
99
99
|
sh %{sudo gem uninstall #{NAME}}
|
100
100
|
end
|
101
101
|
|
102
|
-
task :tag do
|
103
|
-
cwd = FileUtils.pwd
|
104
|
-
sh %{rm -rf doc/*}
|
105
|
-
sh %{rm -rf pkg/*}
|
106
|
-
sh %{rm -rf coverage/*}
|
107
|
-
sh %{cd ../.. && svn copy #{cwd} tags/#{NAME}-#{VERS} && svn commit -m "#{NAME}-#{VERS} tag." tags}
|
108
|
-
end
|
109
|
-
|
110
102
|
##############################################################################
|
111
103
|
# gem and rdoc release
|
112
104
|
##############################################################################
|
@@ -75,6 +75,17 @@ module Sequel
|
|
75
75
|
class Database < Sequel::Database
|
76
76
|
set_adapter_scheme :mysql
|
77
77
|
|
78
|
+
def server_version
|
79
|
+
@server_version ||= pool.hold do |conn|
|
80
|
+
if conn.respond_to?(:server_version)
|
81
|
+
pool.hold {|c| c.server_version}
|
82
|
+
else
|
83
|
+
get(:version[]) =~ /(\d+)\.(\d+)\.(\d+)/
|
84
|
+
($1.to_i * 10000) + ($2.to_i * 100) + $3.to_i
|
85
|
+
end
|
86
|
+
end
|
87
|
+
end
|
88
|
+
|
78
89
|
def serial_primary_key_options
|
79
90
|
{:primary_key => true, :type => :integer, :auto_increment => true}
|
80
91
|
end
|
@@ -213,8 +224,7 @@ module Sequel
|
|
213
224
|
# Changes the database in use by issuing a USE statement.
|
214
225
|
def use(db_name)
|
215
226
|
disconnect
|
216
|
-
@opts[:database] = db_name
|
217
|
-
self << "USE #{db_name}"
|
227
|
+
@opts[:database] = db_name if self << "USE #{db_name}"
|
218
228
|
self
|
219
229
|
end
|
220
230
|
end
|
@@ -225,6 +235,28 @@ module Sequel
|
|
225
235
|
TRUE = '1'
|
226
236
|
FALSE = '0'
|
227
237
|
|
238
|
+
# Join processing changed after MySQL v5.0.12. NATURAL
|
239
|
+
# joins are SQL:2003 consistent.
|
240
|
+
JOIN_TYPES = { :cross => 'INNER JOIN'.freeze,
|
241
|
+
:straight => 'STRAIGHT_JOIN'.freeze,
|
242
|
+
:natural_left => 'NATURAL LEFT JOIN'.freeze,
|
243
|
+
:natural_right => 'NATURAL RIGHT JOIN'.freeze,
|
244
|
+
:natural_left_outer => 'NATURAL LEFT OUTER JOIN'.freeze,
|
245
|
+
:natural_right_outer => 'NATURAL RIGHT OUTER JOIN'.freeze,
|
246
|
+
:left => 'LEFT JOIN'.freeze,
|
247
|
+
:right => 'RIGHT JOIN'.freeze,
|
248
|
+
:left_outer => 'LEFT OUTER JOIN'.freeze,
|
249
|
+
:right_outer => 'RIGHT OUTER JOIN'.freeze,
|
250
|
+
:natural_inner => 'NATURAL LEFT JOIN'.freeze,
|
251
|
+
# :full_outer => 'FULL OUTER JOIN'.freeze,
|
252
|
+
#
|
253
|
+
# A full outer join, nor a workaround implementation of
|
254
|
+
# :full_outer, is not yet possible in Sequel. See issue
|
255
|
+
# #195 which probably depends on issue #113 being
|
256
|
+
# resolved.
|
257
|
+
:inner => 'INNER JOIN'.freeze
|
258
|
+
}
|
259
|
+
|
228
260
|
def literal(v)
|
229
261
|
case v
|
230
262
|
when LiteralString
|
@@ -240,6 +272,46 @@ module Sequel
|
|
240
272
|
end
|
241
273
|
end
|
242
274
|
|
275
|
+
# Returns a join clause based on the specified join type
|
276
|
+
# and condition. MySQL's NATURAL join is 'semantically
|
277
|
+
# equivalent to a JOIN with a USING clause that names all
|
278
|
+
# columns that exist in both tables. The constraint
|
279
|
+
# expression may be nil, so join expression can accept two
|
280
|
+
# arguments.
|
281
|
+
#
|
282
|
+
# === Note
|
283
|
+
# Full outer joins (:full_outer) are not implemented in
|
284
|
+
# MySQL (as of v6.0), nor is there currently a work around
|
285
|
+
# implementation in Sequel. Straight joins with 'ON
|
286
|
+
# <condition>' are not yet implemented.
|
287
|
+
#
|
288
|
+
# === Example
|
289
|
+
# @ds = MYSQL_DB[:nodes]
|
290
|
+
# @ds.join_expr(:natural_left_outer, :nodes)
|
291
|
+
# # 'NATURAL LEFT OUTER JOIN nodes'
|
292
|
+
#
|
293
|
+
def join_expr(type, table, expr = nil)
|
294
|
+
join_type = JOIN_TYPES[type || :inner]
|
295
|
+
unless join_type
|
296
|
+
raise Error::InvalidJoinType, "Invalid join type: #{type}"
|
297
|
+
end
|
298
|
+
@opts[:server_version] = @db.server_version unless @opts[:server_version]
|
299
|
+
type = :inner if type == :cross && !expr.nil?
|
300
|
+
if type.to_s =~ /natural|cross|straight/ && @opts[:server_version] >= 50014
|
301
|
+
tbl_factor = table.to_s
|
302
|
+
if table.is_a?(Dataset)
|
303
|
+
tbl_factor = table.sql << " AS t1"
|
304
|
+
end
|
305
|
+
if table.is_a?(Array)
|
306
|
+
tbl_factor = "( #{literal(table)} )"
|
307
|
+
end
|
308
|
+
join_string = "#{join_type} " << tbl_factor
|
309
|
+
return join_string
|
310
|
+
end
|
311
|
+
|
312
|
+
super
|
313
|
+
end
|
314
|
+
|
243
315
|
def match_expr(l, r)
|
244
316
|
case r
|
245
317
|
when Regexp
|
@@ -452,4 +524,4 @@ module Sequel
|
|
452
524
|
end
|
453
525
|
end
|
454
526
|
end
|
455
|
-
end
|
527
|
+
end
|
@@ -2,8 +2,8 @@ require 'postgres'
|
|
2
2
|
|
3
3
|
class PGconn
|
4
4
|
# the pure-ruby postgres adapter does not have a quote method.
|
5
|
-
TRUE = '
|
6
|
-
FALSE = '
|
5
|
+
TRUE = 'true'.freeze
|
6
|
+
FALSE = 'false'.freeze
|
7
7
|
NULL = 'NULL'.freeze
|
8
8
|
|
9
9
|
unless methods.include?('quote')
|
@@ -47,6 +47,10 @@ class PGconn
|
|
47
47
|
alias_method :async_exec, :exec
|
48
48
|
end
|
49
49
|
|
50
|
+
unless instance_methods.include?('async_query')
|
51
|
+
alias_method :async_query, :query
|
52
|
+
end
|
53
|
+
|
50
54
|
def execute(sql, &block)
|
51
55
|
q = nil
|
52
56
|
begin
|
@@ -80,7 +84,7 @@ class PGconn
|
|
80
84
|
end
|
81
85
|
if seq = @table_sequences[table]
|
82
86
|
r = async_query(SELECT_CURRVAL % seq)
|
83
|
-
return r[0][0].to_i unless r.nil? || r.empty?
|
87
|
+
return r[0][0].to_i unless r.nil? || (r.respond_to?(:empty?) && r.empty?)
|
84
88
|
end
|
85
89
|
nil # primary key sequence not found
|
86
90
|
end
|
@@ -126,17 +130,17 @@ class PGconn
|
|
126
130
|
|
127
131
|
def pkey_and_sequence(table)
|
128
132
|
r = async_query(SELECT_PK_AND_SERIAL_SEQUENCE % table)
|
129
|
-
return [r[0].first, r[0].last] unless r.nil?
|
133
|
+
return [r[0].first, r[0].last] unless r.nil? || (r.respond_to?(:empty?) && r.empty?)
|
130
134
|
|
131
135
|
r = async_query(SELECT_PK_AND_CUSTOM_SEQUENCE % table)
|
132
|
-
return [r[0].first, r[0].last] unless r.nil?
|
136
|
+
return [r[0].first, r[0].last] unless r.nil? || (r.respond_to?(:empty?) && r.empty?)
|
133
137
|
rescue
|
134
138
|
nil
|
135
139
|
end
|
136
140
|
|
137
141
|
def primary_key(table)
|
138
142
|
r = async_query(SELECT_PK % table)
|
139
|
-
pkey = r[0].first unless r.nil?
|
143
|
+
pkey = r[0].first unless r.nil? || (r.respond_to?(:empty?) && r.empty?)
|
140
144
|
return pkey.to_sym if pkey
|
141
145
|
rescue
|
142
146
|
nil
|
@@ -535,6 +539,23 @@ module Sequel
|
|
535
539
|
end
|
536
540
|
eval("lambda {|r| r.keys = columns; #{tr.join(';')}; r}")
|
537
541
|
end
|
542
|
+
|
543
|
+
def array_tuples_transform_load(r)
|
544
|
+
a = []; a.keys = []
|
545
|
+
r.each_pair do |k, v|
|
546
|
+
a[k] = (tt = @transform[k]) ? tt[0][v] : v
|
547
|
+
end
|
548
|
+
a
|
549
|
+
end
|
550
|
+
|
551
|
+
# Applies the value transform for data saved to the database.
|
552
|
+
def array_tuples_transform_save(r)
|
553
|
+
a = []; a.keys = []
|
554
|
+
r.each_pair do |k, v|
|
555
|
+
a[k] = (tt = @transform[k]) ? tt[1][v] : v
|
556
|
+
end
|
557
|
+
a
|
558
|
+
end
|
538
559
|
end
|
539
560
|
end
|
540
561
|
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
module Sequel
|
2
|
+
class Dataset
|
3
|
+
module Callback
|
4
|
+
# Add a symbol with the name of a method to the list of callbacks for name.
|
5
|
+
def add_callback(name, sym)
|
6
|
+
cbs = (@opts[:callbacks] ||= {})
|
7
|
+
cb = (cbs[name] ||= [])
|
8
|
+
cb.push(sym)
|
9
|
+
end
|
10
|
+
|
11
|
+
# Run all callbacks for name with the given args
|
12
|
+
def run_callback(name, *args)
|
13
|
+
return unless cbs = @opts[:callbacks]
|
14
|
+
return unless cb = cbs[name]
|
15
|
+
cb.each{|sym| send(sym, *args)}
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -42,23 +42,33 @@ module Sequel
|
|
42
42
|
m.join(COMMA_SEPARATOR)
|
43
43
|
end
|
44
44
|
end
|
45
|
-
|
45
|
+
|
46
|
+
def table_ref(t)
|
47
|
+
case t
|
48
|
+
when Dataset
|
49
|
+
t.to_table_reference
|
50
|
+
when Hash
|
51
|
+
t.map {|k, v| "#{table_ref(k)} #{table_ref(v)}"}.join(COMMA_SEPARATOR)
|
52
|
+
when Symbol, String
|
53
|
+
t
|
54
|
+
else
|
55
|
+
literal(t)
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
46
59
|
# Converts an array of sources names into into a comma separated list.
|
47
60
|
def source_list(source)
|
48
61
|
if source.nil? || source.empty?
|
49
62
|
raise Error, 'No source specified for query'
|
50
63
|
end
|
51
64
|
auto_alias_count = 0
|
52
|
-
m = source.map do |
|
53
|
-
case
|
65
|
+
m = source.map do |s|
|
66
|
+
case s
|
54
67
|
when Dataset
|
55
68
|
auto_alias_count += 1
|
56
|
-
|
57
|
-
when Hash
|
58
|
-
i.map {|k, v| "#{k.is_a?(Dataset) ? k.to_table_reference : k} #{v}"}.
|
59
|
-
join(COMMA_SEPARATOR)
|
69
|
+
s.to_table_reference(auto_alias_count)
|
60
70
|
else
|
61
|
-
|
71
|
+
table_ref(s)
|
62
72
|
end
|
63
73
|
end
|
64
74
|
m.join(COMMA_SEPARATOR)
|
@@ -356,7 +366,7 @@ module Sequel
|
|
356
366
|
# if the dataset has not been grouped. See also #filter
|
357
367
|
def having(*cond, &block)
|
358
368
|
unless @opts[:group]
|
359
|
-
raise Error, "Can only specify a HAVING clause on a grouped dataset"
|
369
|
+
raise Error::InvalidOperation, "Can only specify a HAVING clause on a grouped dataset"
|
360
370
|
else
|
361
371
|
@opts[:having] = {}
|
362
372
|
filter(*cond, &block)
|
@@ -402,6 +412,8 @@ module Sequel
|
|
402
412
|
unless join_type
|
403
413
|
raise Error::InvalidJoinType, "Invalid join type: #{type}"
|
404
414
|
end
|
415
|
+
|
416
|
+
table = table.table_name if table.respond_to?(:table_name)
|
405
417
|
|
406
418
|
join_conditions = {}
|
407
419
|
expr.each do |k, v|
|
@@ -687,4 +699,4 @@ module Sequel
|
|
687
699
|
end
|
688
700
|
end
|
689
701
|
end
|
690
|
-
end
|
702
|
+
end
|
data/lib/sequel_core/dataset.rb
CHANGED
@@ -6,6 +6,7 @@ require 'base64'
|
|
6
6
|
require File.join(File.dirname(__FILE__), 'dataset/sql')
|
7
7
|
require File.join(File.dirname(__FILE__), 'dataset/sequelizer')
|
8
8
|
require File.join(File.dirname(__FILE__), 'dataset/convenience')
|
9
|
+
require File.join(File.dirname(__FILE__), 'dataset/callback')
|
9
10
|
|
10
11
|
module Sequel
|
11
12
|
# A Dataset represents a view of a the data in a database, constrained by
|
@@ -69,6 +70,7 @@ module Sequel
|
|
69
70
|
include Sequelizer
|
70
71
|
include SQL
|
71
72
|
include Convenience
|
73
|
+
include Callback
|
72
74
|
|
73
75
|
attr_accessor :db
|
74
76
|
attr_accessor :opts
|
@@ -80,6 +82,7 @@ module Sequel
|
|
80
82
|
def all(opts = nil, &block)
|
81
83
|
a = []
|
82
84
|
each(opts) {|r| a << r}
|
85
|
+
run_callback(:post_load, a)
|
83
86
|
a.each(&block) if block
|
84
87
|
a
|
85
88
|
end
|
File without changes
|
File without changes
|
data/lib/sequel_core/schema.rb
CHANGED
@@ -3,6 +3,6 @@ module Sequel
|
|
3
3
|
end
|
4
4
|
end
|
5
5
|
|
6
|
-
require File.join(File.dirname(__FILE__), 'schema/
|
7
|
-
require File.join(File.dirname(__FILE__), 'schema/
|
6
|
+
require File.join(File.dirname(__FILE__), 'schema/sql')
|
7
|
+
require File.join(File.dirname(__FILE__), 'schema/generator')
|
8
8
|
|
@@ -1,9 +1,10 @@
|
|
1
1
|
require File.join(File.dirname(__FILE__), '../../lib/sequel_core')
|
2
2
|
require File.join(File.dirname(__FILE__), '../spec_helper.rb')
|
3
3
|
|
4
|
-
unless defined?(
|
4
|
+
unless defined?(INFORMIX_DB)
|
5
|
+
INFORMIX_DB = Sequel('informix://localhost/mydb')
|
6
|
+
end
|
5
7
|
|
6
|
-
INFORMIX_DB = Sequel(INFORMIX_URL)
|
7
8
|
if INFORMIX_DB.table_exists?(:test)
|
8
9
|
INFORMIX_DB.drop_table :test
|
9
10
|
end
|
data/spec/adapters/mysql_spec.rb
CHANGED
@@ -2,9 +2,17 @@ require File.join(File.dirname(__FILE__), '../../lib/sequel_core')
|
|
2
2
|
require File.join(File.dirname(__FILE__), '../spec_helper.rb')
|
3
3
|
require 'logger'
|
4
4
|
|
5
|
-
unless defined?(
|
5
|
+
unless defined?(MYSQL_DB)
|
6
|
+
MYSQL_URL = 'mysql://root@localhost/sandbox' unless defined? MYSQL_URL
|
7
|
+
MYSQL_DB = Sequel(MYSQL_URL)
|
8
|
+
end
|
9
|
+
unless defined?(MYSQL_SOCKET_FILE)
|
10
|
+
MYSQL_SOCKET_FILE = '/tmp/mysql.sock'
|
11
|
+
end
|
12
|
+
|
13
|
+
MYSQL_URI = URI.parse(MYSQL_DB.uri)
|
14
|
+
MYSQL_DB_NAME = MYSQL_URI.path =~ /\/(.*)/ && $1
|
6
15
|
|
7
|
-
MYSQL_DB = Sequel(MYSQL_URL)
|
8
16
|
MYSQL_DB.drop_table(:items) if MYSQL_DB.table_exists?(:items)
|
9
17
|
MYSQL_DB.drop_table(:test2) if MYSQL_DB.table_exists?(:test2)
|
10
18
|
MYSQL_DB.create_table :items do
|
@@ -28,6 +36,10 @@ context "A MySQL database" do
|
|
28
36
|
@db.pool.size.should == 0
|
29
37
|
end
|
30
38
|
|
39
|
+
specify "should provide the server version" do
|
40
|
+
@db.server_version.should >= 40000
|
41
|
+
end
|
42
|
+
|
31
43
|
specify "should support sequential primary keys" do
|
32
44
|
@db.create_table!(:with_pk) {primary_key :id; text :name}
|
33
45
|
@db[:with_pk] << {:name => 'abc'}
|
@@ -267,6 +279,53 @@ end
|
|
267
279
|
# end
|
268
280
|
# end
|
269
281
|
#
|
282
|
+
context "MySQL join expressions" do
|
283
|
+
setup do
|
284
|
+
@ds = MYSQL_DB[:nodes]
|
285
|
+
@ds.db.meta_def(:server_version) {50014}
|
286
|
+
end
|
287
|
+
|
288
|
+
specify "should raise error for :full_outer join requests." do
|
289
|
+
lambda{@ds.join_expr(:full_outer, :nodes)}.should raise_error(Sequel::Error::InvalidJoinType)
|
290
|
+
end
|
291
|
+
specify "should support natural left joins" do
|
292
|
+
@ds.join_expr(:natural_left, :nodes).should == \
|
293
|
+
'NATURAL LEFT JOIN nodes'
|
294
|
+
end
|
295
|
+
specify "should support natural right joins" do
|
296
|
+
@ds.join_expr(:natural_right, :nodes).should == \
|
297
|
+
'NATURAL RIGHT JOIN nodes'
|
298
|
+
end
|
299
|
+
specify "should support natural left outer joins" do
|
300
|
+
@ds.join_expr(:natural_left_outer, :nodes).should == \
|
301
|
+
'NATURAL LEFT OUTER JOIN nodes'
|
302
|
+
end
|
303
|
+
specify "should support natural right outer joins" do
|
304
|
+
@ds.join_expr(:natural_right_outer, :nodes).should == \
|
305
|
+
'NATURAL RIGHT OUTER JOIN nodes'
|
306
|
+
end
|
307
|
+
specify "should support natural inner joins" do
|
308
|
+
@ds.join_expr(:natural_inner, :nodes).should == \
|
309
|
+
'NATURAL LEFT JOIN nodes'
|
310
|
+
end
|
311
|
+
specify "should support cross joins (equivalent to inner join in MySQL, not in std SQL)" do
|
312
|
+
@ds.join_expr(:cross, :nodes).should == \
|
313
|
+
'INNER JOIN nodes'
|
314
|
+
end
|
315
|
+
specify "should support straight joins (force left table to be read before right)" do
|
316
|
+
@ds.join_expr(:straight, :nodes).should == \
|
317
|
+
'STRAIGHT_JOIN nodes'
|
318
|
+
end
|
319
|
+
specify "should support natural joins on multiple tables." do
|
320
|
+
@ds.join_expr(:natural_left_outer, [:nodes, :branches]).should == \
|
321
|
+
'NATURAL LEFT OUTER JOIN ( `nodes`, `branches` )'
|
322
|
+
end
|
323
|
+
specify "should support straight joins on multiple tables." do
|
324
|
+
@ds.join_expr(:straight, [:nodes,:branches]).should == \
|
325
|
+
'STRAIGHT_JOIN ( `nodes`, `branches` )'
|
326
|
+
end
|
327
|
+
end
|
328
|
+
|
270
329
|
context "Joined MySQL dataset" do
|
271
330
|
setup do
|
272
331
|
@ds = MYSQL_DB[:nodes].join(:attributes, :node_id => :id)
|
@@ -391,17 +450,17 @@ end
|
|
391
450
|
|
392
451
|
context "A MySQL database" do
|
393
452
|
specify "should accept a socket option" do
|
394
|
-
db = Sequel.mysql(
|
453
|
+
db = Sequel.mysql(MYSQL_DB_NAME, :host => 'localhost', :user => 'root', :socket => MYSQL_SOCKET_FILE)
|
395
454
|
proc {db.test_connection}.should_not raise_error
|
396
455
|
end
|
397
456
|
|
398
457
|
specify "should accept a socket option without host option" do
|
399
|
-
db = Sequel.mysql(
|
458
|
+
db = Sequel.mysql(MYSQL_DB_NAME, :user => 'root', :socket => MYSQL_SOCKET_FILE)
|
400
459
|
proc {db.test_connection}.should_not raise_error
|
401
460
|
end
|
402
461
|
|
403
462
|
specify "should fail to connect with invalid socket" do
|
404
|
-
db = Sequel.mysql(
|
463
|
+
db = Sequel.mysql(MYSQL_DB_NAME, :host => 'localhost', :user => 'root', :socket => 'blah')
|
405
464
|
proc {db.test_connection}.should raise_error
|
406
465
|
end
|
407
466
|
end
|
@@ -590,4 +649,4 @@ context "MySQL::Dataset#replace" do
|
|
590
649
|
@d.replace(:id => 111, :value => 333)
|
591
650
|
@d.all.should == [{:id => 111, :value => 333}]
|
592
651
|
end
|
593
|
-
end
|
652
|
+
end
|
@@ -1,9 +1,9 @@
|
|
1
1
|
require File.join(File.dirname(__FILE__), '../../lib/sequel_core')
|
2
2
|
require File.join(File.dirname(__FILE__), '../spec_helper.rb')
|
3
3
|
|
4
|
-
unless defined?(
|
5
|
-
|
6
|
-
|
4
|
+
unless defined?(ORACLE_DB)
|
5
|
+
ORACLE_DB = Sequel('oracle://hr:hr@localhost/XE')
|
6
|
+
end
|
7
7
|
|
8
8
|
if ORACLE_DB.table_exists?(:items)
|
9
9
|
ORACLE_DB.drop_table :items
|
@@ -1,25 +1,25 @@
|
|
1
1
|
require File.join(File.dirname(__FILE__), '../../lib/sequel_core')
|
2
2
|
require File.join(File.dirname(__FILE__), '../spec_helper.rb')
|
3
3
|
|
4
|
-
unless defined?(
|
5
|
-
|
4
|
+
unless defined?(POSTGRES_DB)
|
5
|
+
POSTGRES_DB = Sequel(ENV['SEQUEL_PG_SPEC_DB']||'postgres://postgres:postgres@localhost:5432/reality_spec')
|
6
|
+
end
|
6
7
|
|
7
|
-
|
8
|
-
|
9
|
-
PGSQL_DB.drop_table(:test2) if PGSQL_DB.table_exists?(:test2)
|
8
|
+
POSTGRES_DB.drop_table(:test) if POSTGRES_DB.table_exists?(:test)
|
9
|
+
POSTGRES_DB.drop_table(:test2) if POSTGRES_DB.table_exists?(:test2)
|
10
10
|
|
11
|
-
|
11
|
+
POSTGRES_DB.create_table :test do
|
12
12
|
text :name
|
13
13
|
integer :value, :index => true
|
14
14
|
end
|
15
|
-
|
15
|
+
POSTGRES_DB.create_table :test2 do
|
16
16
|
text :name
|
17
17
|
integer :value
|
18
18
|
end
|
19
19
|
|
20
20
|
context "A PostgreSQL database" do
|
21
21
|
setup do
|
22
|
-
@db =
|
22
|
+
@db = POSTGRES_DB
|
23
23
|
end
|
24
24
|
|
25
25
|
specify "should provide disconnect functionality" do
|
@@ -36,7 +36,7 @@ end
|
|
36
36
|
|
37
37
|
context "A PostgreSQL dataset" do
|
38
38
|
setup do
|
39
|
-
@d =
|
39
|
+
@d = POSTGRES_DB[:test]
|
40
40
|
@d.delete # remove all records
|
41
41
|
end
|
42
42
|
|
@@ -147,7 +147,7 @@ context "A PostgreSQL dataset" do
|
|
147
147
|
end
|
148
148
|
|
149
149
|
specify "should support transactions" do
|
150
|
-
|
150
|
+
POSTGRES_DB.transaction do
|
151
151
|
@d << {:name => 'abc', :value => 1}
|
152
152
|
end
|
153
153
|
|
@@ -169,7 +169,7 @@ end
|
|
169
169
|
|
170
170
|
context "A PostgreSQL dataset in array tuples mode" do
|
171
171
|
setup do
|
172
|
-
@d =
|
172
|
+
@d = POSTGRES_DB[:test]
|
173
173
|
@d.delete # remove all records
|
174
174
|
Sequel.use_array_tuples
|
175
175
|
end
|
@@ -215,7 +215,7 @@ end
|
|
215
215
|
|
216
216
|
context "A PostgreSQL database" do
|
217
217
|
setup do
|
218
|
-
@db =
|
218
|
+
@db = POSTGRES_DB
|
219
219
|
end
|
220
220
|
|
221
221
|
specify "should support add_column operations" do
|
@@ -259,44 +259,44 @@ context "A PostgreSQL database" do
|
|
259
259
|
end
|
260
260
|
|
261
261
|
specify "should support fulltext indexes" do
|
262
|
-
g = Sequel::Schema::Generator.new(
|
262
|
+
g = Sequel::Schema::Generator.new(POSTGRES_DB) do
|
263
263
|
text :title
|
264
264
|
text :body
|
265
265
|
full_text_index [:title, :body]
|
266
266
|
end
|
267
|
-
|
267
|
+
POSTGRES_DB.create_table_sql_list(:posts, *g.create_info).should == [
|
268
268
|
"CREATE TABLE posts (\"title\" text, \"body\" text)",
|
269
269
|
"CREATE INDEX posts_title_body_index ON posts USING gin(to_tsvector(\"title\" || \"body\"))"
|
270
270
|
]
|
271
271
|
end
|
272
272
|
|
273
273
|
specify "should support fulltext indexes with a specific language" do
|
274
|
-
g = Sequel::Schema::Generator.new(
|
274
|
+
g = Sequel::Schema::Generator.new(POSTGRES_DB) do
|
275
275
|
text :title
|
276
276
|
text :body
|
277
277
|
full_text_index [:title, :body], :language => 'french'
|
278
278
|
end
|
279
|
-
|
279
|
+
POSTGRES_DB.create_table_sql_list(:posts, *g.create_info).should == [
|
280
280
|
"CREATE TABLE posts (\"title\" text, \"body\" text)",
|
281
281
|
"CREATE INDEX posts_title_body_index ON posts USING gin(to_tsvector('french', \"title\" || \"body\"))"
|
282
282
|
]
|
283
283
|
end
|
284
284
|
|
285
285
|
specify "should support full_text_search" do
|
286
|
-
|
286
|
+
POSTGRES_DB[:posts].full_text_search(:title, 'ruby').sql.should ==
|
287
287
|
"SELECT * FROM posts WHERE (to_tsvector(\"title\") @@ to_tsquery('ruby'))"
|
288
288
|
|
289
|
-
|
289
|
+
POSTGRES_DB[:posts].full_text_search([:title, :body], ['ruby', 'sequel']).sql.should ==
|
290
290
|
"SELECT * FROM posts WHERE (to_tsvector(\"title\" || \"body\") @@ to_tsquery('ruby | sequel'))"
|
291
291
|
|
292
|
-
|
292
|
+
POSTGRES_DB[:posts].full_text_search(:title, 'ruby', :language => 'french').sql.should ==
|
293
293
|
"SELECT * FROM posts WHERE (to_tsvector('french', \"title\") @@ to_tsquery('french', 'ruby'))"
|
294
294
|
end
|
295
295
|
end
|
296
296
|
|
297
297
|
context "Postgres::Dataset#multi_insert_sql / #import" do
|
298
298
|
setup do
|
299
|
-
@ds =
|
299
|
+
@ds = POSTGRES_DB[:test]
|
300
300
|
end
|
301
301
|
|
302
302
|
specify "should return separate insert statements if server_version < 80200" do
|
@@ -321,4 +321,4 @@ context "Postgres::Dataset#multi_insert_sql / #import" do
|
|
321
321
|
'INSERT INTO test ("x", "y") VALUES (1, 2), (3, 4)'
|
322
322
|
]
|
323
323
|
end
|
324
|
-
end
|
324
|
+
end
|
@@ -1,9 +1,10 @@
|
|
1
1
|
require File.join(File.dirname(__FILE__), '../../lib/sequel_core')
|
2
2
|
require File.join(File.dirname(__FILE__), '../spec_helper.rb')
|
3
3
|
|
4
|
-
unless defined?(
|
4
|
+
unless defined?(SQLITE_DB)
|
5
|
+
SQLITE_DB = Sequel('sqlite:/')
|
6
|
+
end
|
5
7
|
|
6
|
-
SQLITE_DB = Sequel(SQLITE_URL)
|
7
8
|
SQLITE_DB.create_table :items do
|
8
9
|
integer :id, :primary_key => true, :auto_increment => true
|
9
10
|
text :name
|
data/spec/dataset_spec.rb
CHANGED
@@ -199,11 +199,11 @@ context "A dataset with multiple tables in its FROM clause" do
|
|
199
199
|
end
|
200
200
|
|
201
201
|
specify "should raise on #update_sql" do
|
202
|
-
proc {@dataset.update_sql(:a=>1)}.should raise_error
|
202
|
+
proc {@dataset.update_sql(:a=>1)}.should raise_error(Sequel::Error::InvalidOperation)
|
203
203
|
end
|
204
204
|
|
205
205
|
specify "should raise on #delete_sql" do
|
206
|
-
proc {@dataset.delete_sql}.should raise_error
|
206
|
+
proc {@dataset.delete_sql}.should raise_error(Sequel::Error::InvalidOperation)
|
207
207
|
end
|
208
208
|
|
209
209
|
specify "should generate a select query FROM all specified tables" do
|
@@ -508,7 +508,7 @@ context "Dataset#having" do
|
|
508
508
|
end
|
509
509
|
|
510
510
|
specify "should raise if the dataset is not grouped" do
|
511
|
-
proc {@dataset.having('avg(gdp) > 10')}.should raise_error
|
511
|
+
proc {@dataset.having('avg(gdp) > 10')}.should raise_error(Sequel::Error::InvalidOperation)
|
512
512
|
end
|
513
513
|
|
514
514
|
specify "should affect select statements" do
|
@@ -665,6 +665,12 @@ context "Dataset#from" do
|
|
665
665
|
@dataset.from(:a => :b).sql.should ==
|
666
666
|
"SELECT * FROM a b"
|
667
667
|
|
668
|
+
@dataset.from(:a => 'b').sql.should ==
|
669
|
+
"SELECT * FROM a b"
|
670
|
+
|
671
|
+
@dataset.from(:a => :c[:d]).sql.should ==
|
672
|
+
"SELECT * FROM a c(d)"
|
673
|
+
|
668
674
|
@dataset.from(@dataset.from(:a).group(:b) => :c).sql.should ==
|
669
675
|
"SELECT * FROM (SELECT * FROM a GROUP BY b) c"
|
670
676
|
end
|
@@ -677,6 +683,20 @@ context "Dataset#from" do
|
|
677
683
|
specify "should raise if no source is given" do
|
678
684
|
proc {@dataset.from(@dataset.from).select_sql}.should raise_error(Sequel::Error)
|
679
685
|
end
|
686
|
+
|
687
|
+
specify "should accept sql functions" do
|
688
|
+
@dataset.from(:abc[:def]).select_sql.should ==
|
689
|
+
"SELECT * FROM abc(def)"
|
690
|
+
|
691
|
+
@dataset.from(:a|:i).select_sql.should ==
|
692
|
+
"SELECT * FROM a[i]"
|
693
|
+
|
694
|
+
@dataset.from(:generate_series[1, 2].as(:a[:i])).select_sql.should ==
|
695
|
+
"SELECT * FROM generate_series(1, 2) AS a(i)"
|
696
|
+
|
697
|
+
@dataset.from(:generate_series[1, 2] => :a[:i]).select_sql.should ==
|
698
|
+
"SELECT * FROM generate_series(1, 2) a(i)"
|
699
|
+
end
|
680
700
|
end
|
681
701
|
|
682
702
|
context "Dataset#select" do
|
@@ -1229,6 +1249,14 @@ context "Dataset#join_table" do
|
|
1229
1249
|
@d.join_table(:left_outer, ds, :item_id => :id).sql.should ==
|
1230
1250
|
'SELECT * FROM items LEFT OUTER JOIN (SELECT * FROM categories WHERE (active = \'t\')) t1 ON (t1.item_id = items.id)'
|
1231
1251
|
end
|
1252
|
+
|
1253
|
+
specify "should support joining objects that respond to :table_name" do
|
1254
|
+
ds = Object.new
|
1255
|
+
def ds.table_name; :categories end
|
1256
|
+
|
1257
|
+
@d.join(ds, :item_id => :id).sql.should ==
|
1258
|
+
'SELECT * FROM items INNER JOIN categories ON (categories.item_id = items.id)'
|
1259
|
+
end
|
1232
1260
|
end
|
1233
1261
|
|
1234
1262
|
context "Dataset#[]=" do
|
@@ -2943,4 +2971,4 @@ context "Dataset#grep" do
|
|
2943
2971
|
@ds.grep(:title, [/^ruby/, 'ruby']).sql.should ==
|
2944
2972
|
"SELECT * FROM posts WHERE ((title =~ '^ruby') OR (title LIKE 'ruby'))"
|
2945
2973
|
end
|
2946
|
-
end
|
2974
|
+
end
|
data/spec/spec_config.rb.example
CHANGED
@@ -1,6 +1,7 @@
|
|
1
|
-
#
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
1
|
+
# database objects for running adapter specs
|
2
|
+
# INFORMIX_DB = Sequel('informix://localhost/mydb')
|
3
|
+
# MYSQL_DB = Sequel('mysql://root@localhost/sandbox')
|
4
|
+
# MYSQL_SOCKET_FILE = '/tmp/mysql.sock'
|
5
|
+
# ORACLE_DB = Sequel('oracle://hr:hr@localhost/XE')
|
6
|
+
# POSTGRES_DB = Sequel('postgres://postgres:postgres@localhost:5432/reality_spec')
|
7
|
+
# SQLITE_DB = Sequel('sqlite:/')
|
metadata
CHANGED
@@ -1,83 +1,39 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
|
+
rubygems_version: 0.9.4
|
3
|
+
specification_version: 1
|
2
4
|
name: sequel_core
|
3
5
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
5
|
-
|
6
|
-
|
7
|
-
|
6
|
+
version: 1.4.0
|
7
|
+
date: 2008-04-08 00:00:00 -07:00
|
8
|
+
summary: "The Database Toolkit for Ruby: Core Library and Adapters"
|
9
|
+
require_paths:
|
10
|
+
- lib
|
11
|
+
email: themastermind1@gmail.com
|
12
|
+
homepage: http://sequel.rubyforge.org
|
13
|
+
rubyforge_project: sequel
|
14
|
+
description: "The Database Toolkit for Ruby: Core Library and Adapters"
|
8
15
|
autorequire:
|
9
|
-
bindir: bin
|
10
|
-
cert_chain: []
|
11
|
-
|
12
|
-
date: 2008-03-08 00:00:00 +02:00
|
13
16
|
default_executable:
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
requirements:
|
29
|
-
- - ">="
|
30
|
-
- !ruby/object:Gem::Version
|
31
|
-
version: "0.1"
|
32
|
-
version:
|
33
|
-
- !ruby/object:Gem::Dependency
|
34
|
-
name: RubyInline
|
35
|
-
version_requirement:
|
36
|
-
version_requirements: !ruby/object:Gem::Requirement
|
37
|
-
requirements:
|
38
|
-
- - ">="
|
39
|
-
- !ruby/object:Gem::Version
|
40
|
-
version: 3.6.6
|
41
|
-
version:
|
42
|
-
- !ruby/object:Gem::Dependency
|
43
|
-
name: ParseTree
|
44
|
-
version_requirement:
|
45
|
-
version_requirements: !ruby/object:Gem::Requirement
|
46
|
-
requirements:
|
47
|
-
- - ">="
|
48
|
-
- !ruby/object:Gem::Version
|
49
|
-
version: 2.1.1
|
50
|
-
version:
|
51
|
-
- !ruby/object:Gem::Dependency
|
52
|
-
name: ruby2ruby
|
53
|
-
version_requirement:
|
54
|
-
version_requirements: !ruby/object:Gem::Requirement
|
55
|
-
requirements:
|
56
|
-
- - ">="
|
57
|
-
- !ruby/object:Gem::Version
|
58
|
-
version: "0"
|
59
|
-
version:
|
60
|
-
description: The Database Toolkit for Ruby
|
61
|
-
email: ciconia@gmail.com
|
62
|
-
executables:
|
63
|
-
- sequel
|
64
|
-
extensions: []
|
65
|
-
|
66
|
-
extra_rdoc_files:
|
67
|
-
- README
|
68
|
-
- CHANGELOG
|
69
|
-
- COPYING
|
17
|
+
bindir: bin
|
18
|
+
has_rdoc: true
|
19
|
+
required_ruby_version: !ruby/object:Gem::Version::Requirement
|
20
|
+
requirements:
|
21
|
+
- - ">="
|
22
|
+
- !ruby/object:Gem::Version
|
23
|
+
version: 1.8.4
|
24
|
+
version:
|
25
|
+
platform: ruby
|
26
|
+
signing_key:
|
27
|
+
cert_chain:
|
28
|
+
post_install_message:
|
29
|
+
authors:
|
30
|
+
- Aman Gupta
|
70
31
|
files:
|
71
32
|
- COPYING
|
72
33
|
- README
|
73
34
|
- Rakefile
|
74
35
|
- bin/sequel
|
75
36
|
- spec/adapters
|
76
|
-
- spec/adapters/informix_spec.rb
|
77
|
-
- spec/adapters/mysql_spec.rb
|
78
|
-
- spec/adapters/oracle_spec.rb
|
79
|
-
- spec/adapters/postgres_spec.rb
|
80
|
-
- spec/adapters/sqlite_spec.rb
|
81
37
|
- spec/array_keys_spec.rb
|
82
38
|
- spec/core_ext_spec.rb
|
83
39
|
- spec/core_sql_spec.rb
|
@@ -93,8 +49,27 @@ files:
|
|
93
49
|
- spec/spec_config.rb.example
|
94
50
|
- spec/spec_helper.rb
|
95
51
|
- spec/worker_spec.rb
|
52
|
+
- spec/adapters/informix_spec.rb
|
53
|
+
- spec/adapters/mysql_spec.rb
|
54
|
+
- spec/adapters/oracle_spec.rb
|
55
|
+
- spec/adapters/postgres_spec.rb
|
56
|
+
- spec/adapters/sqlite_spec.rb
|
57
|
+
- lib/sequel_core.rb
|
96
58
|
- lib/sequel_core
|
97
59
|
- lib/sequel_core/adapters
|
60
|
+
- lib/sequel_core/array_keys.rb
|
61
|
+
- lib/sequel_core/core_ext.rb
|
62
|
+
- lib/sequel_core/core_sql.rb
|
63
|
+
- lib/sequel_core/database.rb
|
64
|
+
- lib/sequel_core/dataset.rb
|
65
|
+
- lib/sequel_core/dataset
|
66
|
+
- lib/sequel_core/exceptions.rb
|
67
|
+
- lib/sequel_core/migration.rb
|
68
|
+
- lib/sequel_core/model.rb
|
69
|
+
- lib/sequel_core/pretty_table.rb
|
70
|
+
- lib/sequel_core/schema.rb
|
71
|
+
- lib/sequel_core/schema
|
72
|
+
- lib/sequel_core/worker.rb
|
98
73
|
- lib/sequel_core/adapters/adapter_skeleton.rb
|
99
74
|
- lib/sequel_core/adapters/ado.rb
|
100
75
|
- lib/sequel_core/adapters/db2.rb
|
@@ -108,29 +83,15 @@ files:
|
|
108
83
|
- lib/sequel_core/adapters/oracle.rb
|
109
84
|
- lib/sequel_core/adapters/postgres.rb
|
110
85
|
- lib/sequel_core/adapters/sqlite.rb
|
111
|
-
- lib/sequel_core/
|
112
|
-
- lib/sequel_core/core_ext.rb
|
113
|
-
- lib/sequel_core/core_sql.rb
|
114
|
-
- lib/sequel_core/database.rb
|
115
|
-
- lib/sequel_core/dataset
|
86
|
+
- lib/sequel_core/dataset/callback.rb
|
116
87
|
- lib/sequel_core/dataset/convenience.rb
|
117
88
|
- lib/sequel_core/dataset/sequelizer.rb
|
118
89
|
- lib/sequel_core/dataset/sql.rb
|
119
|
-
- lib/sequel_core/
|
120
|
-
- lib/sequel_core/
|
121
|
-
- lib/sequel_core/migration.rb
|
122
|
-
- lib/sequel_core/model.rb
|
123
|
-
- lib/sequel_core/pretty_table.rb
|
124
|
-
- lib/sequel_core/schema
|
125
|
-
- lib/sequel_core/schema/schema_generator.rb
|
126
|
-
- lib/sequel_core/schema/schema_sql.rb
|
127
|
-
- lib/sequel_core/schema.rb
|
128
|
-
- lib/sequel_core/worker.rb
|
129
|
-
- lib/sequel_core.rb
|
90
|
+
- lib/sequel_core/schema/generator.rb
|
91
|
+
- lib/sequel_core/schema/sql.rb
|
130
92
|
- CHANGELOG
|
131
|
-
|
132
|
-
|
133
|
-
post_install_message:
|
93
|
+
test_files: []
|
94
|
+
|
134
95
|
rdoc_options:
|
135
96
|
- --quiet
|
136
97
|
- --title
|
@@ -145,26 +106,59 @@ rdoc_options:
|
|
145
106
|
- ^(examples|extras)/
|
146
107
|
- --exclude
|
147
108
|
- lib/sequel_core.rb
|
148
|
-
|
149
|
-
-
|
150
|
-
|
151
|
-
|
152
|
-
|
153
|
-
|
154
|
-
|
155
|
-
version:
|
156
|
-
required_rubygems_version: !ruby/object:Gem::Requirement
|
157
|
-
requirements:
|
158
|
-
- - ">="
|
159
|
-
- !ruby/object:Gem::Version
|
160
|
-
version: "0"
|
161
|
-
version:
|
162
|
-
requirements: []
|
109
|
+
extra_rdoc_files:
|
110
|
+
- README
|
111
|
+
- CHANGELOG
|
112
|
+
- COPYING
|
113
|
+
executables:
|
114
|
+
- sequel
|
115
|
+
extensions: []
|
163
116
|
|
164
|
-
|
165
|
-
rubygems_version: 1.0.1
|
166
|
-
signing_key:
|
167
|
-
specification_version: 2
|
168
|
-
summary: The Database Toolkit for Ruby
|
169
|
-
test_files: []
|
117
|
+
requirements: []
|
170
118
|
|
119
|
+
dependencies:
|
120
|
+
- !ruby/object:Gem::Dependency
|
121
|
+
name: metaid
|
122
|
+
version_requirement:
|
123
|
+
version_requirements: !ruby/object:Gem::Version::Requirement
|
124
|
+
requirements:
|
125
|
+
- - ">"
|
126
|
+
- !ruby/object:Gem::Version
|
127
|
+
version: 0.0.0
|
128
|
+
version:
|
129
|
+
- !ruby/object:Gem::Dependency
|
130
|
+
name: assistance
|
131
|
+
version_requirement:
|
132
|
+
version_requirements: !ruby/object:Gem::Version::Requirement
|
133
|
+
requirements:
|
134
|
+
- - ">="
|
135
|
+
- !ruby/object:Gem::Version
|
136
|
+
version: "0.1"
|
137
|
+
version:
|
138
|
+
- !ruby/object:Gem::Dependency
|
139
|
+
name: RubyInline
|
140
|
+
version_requirement:
|
141
|
+
version_requirements: !ruby/object:Gem::Version::Requirement
|
142
|
+
requirements:
|
143
|
+
- - ">="
|
144
|
+
- !ruby/object:Gem::Version
|
145
|
+
version: 3.6.6
|
146
|
+
version:
|
147
|
+
- !ruby/object:Gem::Dependency
|
148
|
+
name: ParseTree
|
149
|
+
version_requirement:
|
150
|
+
version_requirements: !ruby/object:Gem::Version::Requirement
|
151
|
+
requirements:
|
152
|
+
- - ">="
|
153
|
+
- !ruby/object:Gem::Version
|
154
|
+
version: 2.1.1
|
155
|
+
version:
|
156
|
+
- !ruby/object:Gem::Dependency
|
157
|
+
name: ruby2ruby
|
158
|
+
version_requirement:
|
159
|
+
version_requirements: !ruby/object:Gem::Version::Requirement
|
160
|
+
requirements:
|
161
|
+
- - ">"
|
162
|
+
- !ruby/object:Gem::Version
|
163
|
+
version: 0.0.0
|
164
|
+
version:
|