sqlstmt 0.1.6 → 0.1.7

Sign up to get free protection for your applications and to get access to all the features.
@@ -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