sequel_core 1.0 → 1.0.0.1

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/CHANGELOG CHANGED
@@ -1,3 +1,11 @@
1
+ === 1.0.0.1 (2008-01-03)
2
+
3
+ * Changed MySQL adapter to support specifying socket option.
4
+
5
+ * Added support for limiting and paginating datasets with fixed SQL, gotten with DB#fetch (thanks Ruy Diaz).
6
+
7
+ * Added new Dataset#from_self method that returns a dataset selecting from the original dataset.
8
+
1
9
  === 1.0 (2008-01-02)
2
10
 
3
11
  * Removed deprecated adapter stubs.
data/Rakefile CHANGED
@@ -9,7 +9,7 @@ include FileUtils
9
9
  # Configuration
10
10
  ##############################################################################
11
11
  NAME = "sequel_core"
12
- VERS = "1.0"
12
+ VERS = "1.0.0.1"
13
13
  CLEAN.include ["**/.*.sw?", "pkg/*", ".config", "doc/*", "coverage/*"]
14
14
  RDOC_OPTS = [
15
15
  "--quiet",
@@ -87,7 +87,7 @@ module Sequel
87
87
 
88
88
  def connect
89
89
  conn = Mysql.real_connect(@opts[:host], @opts[:user], @opts[:password],
90
- @opts[:database], @opts[:port], nil, Mysql::CLIENT_MULTI_RESULTS)
90
+ @opts[:database], @opts[:port], @opts[:socket], Mysql::CLIENT_MULTI_RESULTS)
91
91
  conn.query_with_result = false
92
92
  if encoding = @opts[:encoding] || @opts[:charset]
93
93
  conn.query("set character_set_connection = '#{encoding}'")
@@ -142,6 +142,15 @@ module Sequel
142
142
  def from(*source)
143
143
  clone_merge(:from => source)
144
144
  end
145
+
146
+ # Returns a dataset selecting from the current dataset.
147
+ #
148
+ # ds = DB[:items].order(:name)
149
+ # ds.sql #=> "SELECT * FROM items ORDER BY name"
150
+ # ds.from_self #=> "SELECT * FROM (SELECT * FROM items ORDER BY name)"
151
+ def from_self
152
+ clone_merge(:sql => nil, :from => [self])
153
+ end
145
154
 
146
155
  # Returns a copy of the dataset with the selected columns changed.
147
156
  def select(*columns)
@@ -561,25 +570,31 @@ module Sequel
561
570
  # If given a range, it will contain only those at offsets within that
562
571
  # range. If a second argument is given, it is used as an offset.
563
572
  def limit(l, o = nil)
573
+ if @opts[:sql]
574
+ return from_self.limit(l, o)
575
+ end
576
+
577
+ opts = {}
564
578
  if l.is_a? Range
565
579
  lim = (l.exclude_end? ? l.last - l.first : l.last + 1 - l.first)
566
- clone_merge(:limit => lim, :offset=>l.first)
580
+ opts = {:limit => lim, :offset=>l.first}
567
581
  elsif o
568
- clone_merge(:limit => l, :offset => o)
582
+ opts = {:limit => l, :offset => o}
569
583
  else
570
- clone_merge(:limit => l)
584
+ opts = {:limit => l}
571
585
  end
586
+ clone_merge(opts)
572
587
  end
573
588
 
574
589
  STOCK_COUNT_OPTS = {:select => ["COUNT(*)".lit], :order => nil}.freeze
575
590
 
576
591
  # Returns the number of records in the dataset.
577
592
  def count
578
- opts = @opts[:sql] ? \
579
- {:sql => "SELECT COUNT(*) FROM (#{@opts[:sql]}) AS c", :order => nil} : \
580
- STOCK_COUNT_OPTS
581
-
582
- single_value(opts).to_i
593
+ if @opts[:sql]
594
+ from_self.count
595
+ else
596
+ single_value(STOCK_COUNT_OPTS).to_i
597
+ end
583
598
  end
584
599
  end
585
600
  end
@@ -1,4 +1,4 @@
1
- require File.join(File.dirname(__FILE__), '../../lib/sequel')
1
+ require File.join(File.dirname(__FILE__), '../../lib/sequel_core')
2
2
 
3
3
  INFORMIX_DB = Sequel('informix://localhost/mydb')
4
4
  if INFORMIX_DB.table_exists?(:test)
@@ -1,4 +1,4 @@
1
- require File.join(File.dirname(__FILE__), '../../lib/sequel')
1
+ require File.join(File.dirname(__FILE__), '../../lib/sequel_core')
2
2
  require 'logger'
3
3
 
4
4
  MYSQL_DB = Sequel('mysql://root@localhost/sandbox')
@@ -328,3 +328,15 @@ context "A MySQL database" do
328
328
  ]
329
329
  end
330
330
  end
331
+
332
+ context "A MySQL database" do
333
+ specify "should accept a socket option" do
334
+ db = Sequel.mysql('sandbox', :host => 'localhost', :user => 'root', :socket => '/tmp/mysql.sock')
335
+ proc {db.test_connection}.should_not raise_error
336
+ end
337
+
338
+ specify "should fail to connect with invalid socket" do
339
+ db = Sequel.mysql('sandbox', :host => 'localhost', :user => 'root', :socket => 'blah')
340
+ proc {db.test_connection}.should raise_error
341
+ end
342
+ end
@@ -1,4 +1,4 @@
1
- require File.join(File.dirname(__FILE__), '../../lib/sequel')
1
+ require File.join(File.dirname(__FILE__), '../../lib/sequel_core')
2
2
 
3
3
  ORACLE_DB = Sequel('oracle://hr:hr@loalhost/XE')
4
4
  if ORACLE_DB.table_exists?(:test)
@@ -1,4 +1,4 @@
1
- require File.join(File.dirname(__FILE__), '../../lib/sequel')
1
+ require File.join(File.dirname(__FILE__), '../../lib/sequel_core')
2
2
 
3
3
  PGSQL_DB = Sequel('postgres://postgres:postgres@localhost:5432/reality_spec')
4
4
  PGSQL_DB.drop_table(:test) if PGSQL_DB.table_exists?(:test)
@@ -1,4 +1,4 @@
1
- require File.join(File.dirname(__FILE__), '../../lib/sequel')
1
+ require File.join(File.dirname(__FILE__), '../../lib/sequel_core')
2
2
 
3
3
  SQLITE_DB = Sequel('sqlite:/')
4
4
  SQLITE_DB.create_table :items do
data/spec/dataset_spec.rb CHANGED
@@ -789,6 +789,12 @@ context "Dataset#limit" do
789
789
  @dataset.limit(6, 10).sql.should ==
790
790
  'SELECT * FROM test LIMIT 6 OFFSET 10'
791
791
  end
792
+
793
+ specify "should work with fixed sql datasets" do
794
+ @dataset.opts[:sql] = 'select * from cccc'
795
+ @dataset.limit(6, 10).sql.should ==
796
+ 'SELECT * FROM (select * from cccc) t1 LIMIT 6 OFFSET 10'
797
+ end
792
798
  end
793
799
 
794
800
  context "Dataset#naked" do
@@ -916,7 +922,7 @@ context "Dataset#count" do
916
922
  specify "should count properly for datasets with fixed sql" do
917
923
  @dataset.opts[:sql] = "select abc from xyz"
918
924
  @dataset.count.should == 1
919
- @c.sql.should == "SELECT COUNT(*) FROM (select abc from xyz) AS c"
925
+ @c.sql.should == "SELECT COUNT(*) FROM (select abc from xyz) t1"
920
926
  end
921
927
  end
922
928
 
@@ -1806,6 +1812,12 @@ context "A paginated dataset" do
1806
1812
  @d.paginate(4, 50).current_page_record_count.should == 3
1807
1813
  @d.paginate(5, 50).current_page_record_count.should == 0
1808
1814
  end
1815
+
1816
+ specify "should work with fixed sql" do
1817
+ ds = @d.clone_merge(:sql => 'select * from blah')
1818
+ ds.meta_def(:count) {150}
1819
+ ds.paginate(2, 50).sql.should == 'SELECT * FROM (select * from blah) t1 LIMIT 50 OFFSET 50'
1820
+ end
1809
1821
  end
1810
1822
 
1811
1823
  context "Dataset#columns" do
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sequel_core
3
3
  version: !ruby/object:Gem::Version
4
- version: "1.0"
4
+ version: 1.0.0.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Sharon Rosner
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2008-01-02 00:00:00 +02:00
12
+ date: 2008-01-04 00:00:00 +02:00
13
13
  default_executable:
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency