sqlstmt 0.1.6 → 0.1.7

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.
@@ -3,36 +3,13 @@ require 'sqlstmt/query'
3
3
  module SqlStmt
4
4
 
5
5
  class FromQuery < Query
6
- force_deep_copy :joins
7
-
8
6
  def initialize
9
7
  super
10
- @joins = []
11
8
  @group_by = nil
12
9
  @order_by = nil
13
10
  @limit = nil
14
11
  end
15
12
 
16
- def join(table, expr)
17
- @joins.push("JOIN #{table} ON #{expr}")
18
- self
19
- end
20
-
21
- def join_using(table, *fields)
22
- @joins.push("JOIN #{table} USING (#{fields.join(',')})")
23
- self
24
- end
25
-
26
- def left_join(table, expr)
27
- @joins.push("LEFT JOIN #{table} ON #{expr}")
28
- self
29
- end
30
-
31
- def left_join_using(table, *fields)
32
- @joins.push("LEFT JOIN #{table} USING (#{fields.join(',')})")
33
- self
34
- end
35
-
36
13
  def group_by(clause)
37
14
  @group_by = clause
38
15
  self
@@ -60,7 +37,7 @@ private
60
37
  end
61
38
 
62
39
  def build_from_clause
63
- join_clause = if @joins.empty? then '' else " #{@joins.join(' ')}" end
40
+ join_clause = build_join_clause
64
41
  group_clause = simple_clause('GROUP BY', @group_by)
65
42
  order_clause = simple_clause('ORDER BY', @order_by)
66
43
  limit_clause = simple_clause('LIMIT', @limit)
data/lib/sqlstmt/query.rb CHANGED
@@ -4,12 +4,13 @@ require 'sqlstmt/error'
4
4
  module SqlStmt
5
5
 
6
6
  class Query
7
- force_deep_copy :fields, :tables, :wheres
8
- attr_reader :fields, :tables, :wheres
7
+ force_deep_copy :fields, :tables, :joins, :wheres
8
+ attr_reader :fields, :tables, :joins, :wheres
9
9
 
10
10
  def initialize
11
11
  @fields = []
12
12
  @tables = []
13
+ @joins = []
13
14
  @wheres = []
14
15
  @use_wheres = true
15
16
  end
@@ -19,6 +20,26 @@ class Query
19
20
  self
20
21
  end
21
22
 
23
+ def join(table, expr)
24
+ @joins.push("JOIN #{table} ON #{expr}")
25
+ self
26
+ end
27
+
28
+ def join_using(table, *fields)
29
+ @joins.push("JOIN #{table} USING (#{fields.join(',')})")
30
+ self
31
+ end
32
+
33
+ def left_join(table, expr)
34
+ @joins.push("LEFT JOIN #{table} ON #{expr}")
35
+ self
36
+ end
37
+
38
+ def left_join_using(table, *fields)
39
+ @joins.push("LEFT JOIN #{table} USING (#{fields.join(',')})")
40
+ self
41
+ end
42
+
22
43
  def where(*sql)
23
44
  @wheres.concat(sql)
24
45
  self
@@ -44,6 +65,14 @@ private
44
65
  @tables.join(',')
45
66
  end
46
67
 
68
+ def build_join_clause
69
+ if @joins.empty?
70
+ ''
71
+ else
72
+ " #{@joins.join(' ')}"
73
+ end
74
+ end
75
+
47
76
  def build_where_clause
48
77
  if @wheres.empty? then '' else " WHERE #{@wheres.join(' AND ')}" end
49
78
  end
@@ -28,7 +28,7 @@ private
28
28
  end
29
29
 
30
30
  def build_stmt
31
- "UPDATE #{build_table_list} SET #{build_set_clause}#{build_where_clause}"
31
+ "UPDATE #{build_table_list}#{build_join_clause} SET #{build_set_clause}#{build_where_clause}"
32
32
  end
33
33
  end
34
34
 
data/test/update.dt.rb CHANGED
@@ -13,6 +13,13 @@ class TestUpdate < DohTest::TestGroup
13
13
  assert_equal('UPDATE target SET blah = blee WHERE target_id = 1', Update.new.table('target').field('blah', 'blee').where('target_id = 1').to_s)
14
14
  end
15
15
 
16
+ def test_join
17
+ builder = SqlStmt::Update.new.table('main m').join('other o', 'm.main_id = o.main_id')
18
+ builder.field('blah', 3)
19
+ builder.no_where
20
+ assert_equal('UPDATE main m JOIN other o ON m.main_id = o.main_id SET blah = 3', builder.to_s)
21
+ end
22
+
16
23
  def test_dup
17
24
  shared_builder = SqlStmt::Update.new.table('target')
18
25
  first_builder = shared_builder
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sqlstmt
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.6
4
+ version: 0.1.7
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -10,7 +10,7 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2013-04-08 00:00:00.000000000 Z
13
+ date: 2013-04-19 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: dohutil