sequel 2.3.0 → 2.4.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (43) hide show
  1. data/CHANGELOG +16 -0
  2. data/README +4 -1
  3. data/Rakefile +17 -19
  4. data/doc/prepared_statements.rdoc +104 -0
  5. data/doc/sharding.rdoc +113 -0
  6. data/lib/sequel_core/adapters/ado.rb +24 -17
  7. data/lib/sequel_core/adapters/db2.rb +30 -33
  8. data/lib/sequel_core/adapters/dbi.rb +15 -13
  9. data/lib/sequel_core/adapters/informix.rb +13 -14
  10. data/lib/sequel_core/adapters/jdbc.rb +243 -60
  11. data/lib/sequel_core/adapters/jdbc/mysql.rb +32 -24
  12. data/lib/sequel_core/adapters/jdbc/postgresql.rb +32 -2
  13. data/lib/sequel_core/adapters/jdbc/sqlite.rb +16 -20
  14. data/lib/sequel_core/adapters/mysql.rb +164 -76
  15. data/lib/sequel_core/adapters/odbc.rb +21 -34
  16. data/lib/sequel_core/adapters/openbase.rb +10 -7
  17. data/lib/sequel_core/adapters/oracle.rb +17 -23
  18. data/lib/sequel_core/adapters/postgres.rb +246 -35
  19. data/lib/sequel_core/adapters/shared/mssql.rb +106 -0
  20. data/lib/sequel_core/adapters/shared/mysql.rb +34 -26
  21. data/lib/sequel_core/adapters/shared/postgres.rb +82 -38
  22. data/lib/sequel_core/adapters/shared/sqlite.rb +48 -16
  23. data/lib/sequel_core/adapters/sqlite.rb +141 -44
  24. data/lib/sequel_core/connection_pool.rb +85 -63
  25. data/lib/sequel_core/database.rb +46 -17
  26. data/lib/sequel_core/dataset.rb +21 -40
  27. data/lib/sequel_core/dataset/convenience.rb +3 -3
  28. data/lib/sequel_core/dataset/prepared_statements.rb +218 -0
  29. data/lib/sequel_core/exceptions.rb +0 -12
  30. data/lib/sequel_model/base.rb +1 -2
  31. data/lib/sequel_model/plugins.rb +1 -1
  32. data/spec/adapters/ado_spec.rb +32 -3
  33. data/spec/adapters/mysql_spec.rb +7 -8
  34. data/spec/integration/prepared_statement_test.rb +106 -0
  35. data/spec/sequel_core/connection_pool_spec.rb +105 -3
  36. data/spec/sequel_core/database_spec.rb +41 -3
  37. data/spec/sequel_core/dataset_spec.rb +117 -7
  38. data/spec/sequel_core/spec_helper.rb +2 -2
  39. data/spec/sequel_model/model_spec.rb +0 -6
  40. data/spec/sequel_model/spec_helper.rb +1 -1
  41. metadata +11 -6
  42. data/lib/sequel_core/adapters/adapter_skeleton.rb +0 -54
  43. data/lib/sequel_core/adapters/odbc_mssql.rb +0 -106
@@ -27,7 +27,7 @@ class MockDatabase < Sequel::Database
27
27
  @@quote_identifiers = false
28
28
  attr_reader :sqls
29
29
 
30
- def execute(sql)
30
+ def execute(sql, opts={})
31
31
  @sqls ||= []
32
32
  @sqls << sql
33
33
  end
@@ -44,7 +44,7 @@ end
44
44
  class SchemaDummyDatabase < Sequel::Database
45
45
  attr_reader :sqls
46
46
 
47
- def execute(sql)
47
+ def execute(sql, opts={})
48
48
  @sqls ||= []
49
49
  @sqls << sql
50
50
  end
@@ -519,12 +519,6 @@ describe Sequel::Model, ".[]" do
519
519
  $sqls.last.should == "SELECT * FROM items WHERE (id = 9999) LIMIT 1"
520
520
  end
521
521
 
522
- it "should raise for boolean argument (mistaken comparison)" do
523
- # This in order to prevent stuff like Model[:a == 'b']
524
- proc {@c[:a == 1]}.should raise_error(Sequel::Error)
525
- proc {@c[:a != 1]}.should raise_error(Sequel::Error)
526
- end
527
-
528
522
  it "should work correctly for custom primary key" do
529
523
  @c.set_primary_key :name
530
524
  @c['sharon'].should be_a_kind_of(@c)
@@ -36,7 +36,7 @@ class MockDatabase < Sequel::Database
36
36
  @@quote_identifiers = false
37
37
  attr_reader :sqls
38
38
 
39
- def execute(sql)
39
+ def execute(sql, opts={})
40
40
  @sqls ||= []
41
41
  @sqls << sql
42
42
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sequel
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.3.0
4
+ version: 2.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jeremy Evans
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2008-07-25 00:00:00 -07:00
12
+ date: 2008-08-06 00:00:00 -07:00
13
13
  default_executable:
14
14
  dependencies: []
15
15
 
@@ -26,6 +26,8 @@ extra_rdoc_files:
26
26
  - doc/advanced_associations.rdoc
27
27
  - doc/cheat_sheet.rdoc
28
28
  - doc/dataset_filtering.rdoc
29
+ - doc/prepared_statements.rdoc
30
+ - doc/sharding.rdoc
29
31
  files:
30
32
  - COPYING
31
33
  - CHANGELOG
@@ -35,6 +37,8 @@ files:
35
37
  - doc/advanced_associations.rdoc
36
38
  - doc/cheat_sheet.rdoc
37
39
  - doc/dataset_filtering.rdoc
40
+ - doc/prepared_statements.rdoc
41
+ - doc/sharding.rdoc
38
42
  - spec/adapters
39
43
  - spec/adapters/informix_spec.rb
40
44
  - spec/adapters/mysql_spec.rb
@@ -81,11 +85,11 @@ files:
81
85
  - spec/integration/dataset_test.rb
82
86
  - spec/integration/schema_test.rb
83
87
  - spec/integration/type_test.rb
88
+ - spec/integration/prepared_statement_test.rb
84
89
  - lib/sequel.rb
85
90
  - lib/sequel_core.rb
86
91
  - lib/sequel_core
87
92
  - lib/sequel_core/adapters
88
- - lib/sequel_core/adapters/adapter_skeleton.rb
89
93
  - lib/sequel_core/adapters/ado.rb
90
94
  - lib/sequel_core/adapters/db2.rb
91
95
  - lib/sequel_core/adapters/dbi.rb
@@ -93,18 +97,18 @@ files:
93
97
  - lib/sequel_core/adapters/jdbc.rb
94
98
  - lib/sequel_core/adapters/mysql.rb
95
99
  - lib/sequel_core/adapters/odbc.rb
96
- - lib/sequel_core/adapters/odbc_mssql.rb
97
100
  - lib/sequel_core/adapters/openbase.rb
98
101
  - lib/sequel_core/adapters/oracle.rb
99
102
  - lib/sequel_core/adapters/postgres.rb
100
103
  - lib/sequel_core/adapters/sqlite.rb
101
104
  - lib/sequel_core/adapters/shared
105
+ - lib/sequel_core/adapters/shared/mysql.rb
106
+ - lib/sequel_core/adapters/shared/mssql.rb
102
107
  - lib/sequel_core/adapters/shared/postgres.rb
103
108
  - lib/sequel_core/adapters/shared/sqlite.rb
104
- - lib/sequel_core/adapters/shared/mysql.rb
105
109
  - lib/sequel_core/adapters/jdbc
106
- - lib/sequel_core/adapters/jdbc/postgresql.rb
107
110
  - lib/sequel_core/adapters/jdbc/mysql.rb
111
+ - lib/sequel_core/adapters/jdbc/postgresql.rb
108
112
  - lib/sequel_core/adapters/jdbc/sqlite.rb
109
113
  - lib/sequel_core/connection_pool.rb
110
114
  - lib/sequel_core/core_ext.rb
@@ -120,6 +124,7 @@ files:
120
124
  - lib/sequel_core/dataset/query.rb
121
125
  - lib/sequel_core/dataset/schema.rb
122
126
  - lib/sequel_core/dataset/sql.rb
127
+ - lib/sequel_core/dataset/prepared_statements.rb
123
128
  - lib/sequel_core/deprecated.rb
124
129
  - lib/sequel_core/exceptions.rb
125
130
  - lib/sequel_core/migration.rb
@@ -1,54 +0,0 @@
1
- module Sequel
2
- module Adapter
3
- class Database < Sequel::Database
4
- set_adapter_scheme :adapter
5
-
6
- def connect
7
- AdapterDB.new(@opts[:database], @opts[:user], @opts[:password])
8
- end
9
-
10
- def disconnect
11
- @pool.disconnect {|c| c.disconnect}
12
- end
13
-
14
- def dataset(opts = nil)
15
- Adapter::Dataset.new(self, opts)
16
- end
17
-
18
- def execute(sql)
19
- log_info(sql)
20
- @pool.hold {|conn| conn.exec(sql)}
21
- end
22
- end
23
-
24
- class Dataset < Sequel::Dataset
25
- def literal(v)
26
- case v
27
- when Time
28
- literal(v.iso8601)
29
- when Date, DateTime
30
- literal(v.to_s)
31
- else
32
- super
33
- end
34
- end
35
-
36
- def fetch_rows(sql, &block)
37
- @db.synchronize do
38
- cursor = @db.execute sql
39
- begin
40
- @columns = cursor.get_col_names.map {|c| c.to_sym}
41
- while r = cursor.fetch
42
- row = {}
43
- r.each_with_index {|v, i| row[@columns[i]] = v}
44
- yield row
45
- end
46
- ensure
47
- cursor.close
48
- end
49
- end
50
- self
51
- end
52
- end
53
- end
54
- end
@@ -1,106 +0,0 @@
1
- if !Sequel.const_defined?('ODBC')
2
- require File.join(File.dirname(__FILE__), 'odbc')
3
- end
4
-
5
- module Sequel
6
- module ODBC
7
- module MSSQL
8
- class Database < ODBC::Database
9
- set_adapter_scheme :odbc_mssql
10
-
11
- def dataset(opts = nil)
12
- MSSQL::Dataset.new(self, opts)
13
- end
14
- end
15
-
16
- class Dataset < ODBC::Dataset
17
- # Allows you to do .nolock on a query
18
- def nolock
19
- clone(:with => "(NOLOCK)")
20
- end
21
-
22
- # Formats a SELECT statement using the given options and the dataset
23
- # options.
24
- def select_sql(opts = nil)
25
- opts = opts ? @opts.merge(opts) : @opts
26
-
27
- if sql = opts[:sql]
28
- return sql
29
- end
30
-
31
- # ADD TOP to SELECT string for LIMITS
32
- if limit = opts[:limit]
33
- top = "TOP #{limit} "
34
- raise Error, "Offset not supported" if opts[:offset]
35
- end
36
-
37
- columns = opts[:select]
38
- select_columns = columns ? column_list(columns) : WILDCARD
39
-
40
- if distinct = opts[:distinct]
41
- distinct_clause = distinct.empty? ? "DISTINCT" : "DISTINCT ON (#{expression_list(distinct)})"
42
- sql = "SELECT #{top}#{distinct_clause} #{select_columns}"
43
- else
44
- sql = "SELECT #{top}#{select_columns}"
45
- end
46
-
47
- if opts[:from]
48
- sql << " FROM #{source_list(opts[:from])}"
49
- end
50
-
51
- # ADD WITH to SELECT string for NOLOCK
52
- if with = opts[:with]
53
- sql << " WITH #{with}"
54
- end
55
-
56
- if join = opts[:join]
57
- join.each{|j| sql << literal(j)}
58
- end
59
-
60
- if where = opts[:where]
61
- sql << " WHERE #{literal(where)}"
62
- end
63
-
64
- if group = opts[:group]
65
- sql << " GROUP BY #{expression_list(group)}"
66
- end
67
-
68
- if order = opts[:order]
69
- sql << " ORDER BY #{expression_list(order)}"
70
- end
71
-
72
- if having = opts[:having]
73
- sql << " HAVING #{literal(having)}"
74
- end
75
-
76
- if union = opts[:union]
77
- sql << (opts[:union_all] ? \
78
- " UNION ALL #{union.sql}" : " UNION #{union.sql}")
79
- elsif intersect = opts[:intersect]
80
- sql << (opts[:intersect_all] ? \
81
- " INTERSECT ALL #{intersect.sql}" : " INTERSECT #{intersect.sql}")
82
- elsif except = opts[:except]
83
- sql << (opts[:except_all] ? \
84
- " EXCEPT ALL #{except.sql}" : " EXCEPT #{except.sql}")
85
- end
86
-
87
- sql
88
- end
89
- alias_method :sql, :select_sql
90
-
91
- def full_text_search(cols, terms, opts = {})
92
- filter("CONTAINS (#{literal(cols)}, #{literal(terms)})")
93
- end
94
-
95
- def complex_expression_sql(op, args)
96
- case op
97
- when :'||'
98
- super(:+, args)
99
- else
100
- super(op, args)
101
- end
102
- end
103
- end
104
- end
105
- end
106
- end