sqldsl 1.0.0 → 1.1.0
Sign up to get free protection for your applications and to get access to all the features.
- data/README +3 -0
- data/lib/distinct_select.rb +7 -0
- data/lib/hash.rb +16 -0
- data/lib/numeric.rb +1 -0
- data/lib/select.rb +26 -2
- data/lib/sqldsl.rb +3 -0
- data/lib/string.rb +1 -0
- data/lib/symbol.rb +1 -1
- data/lib/where_builder.rb +9 -2
- data/lib/where_value.rb +8 -0
- data/rakefile.rb +1 -1
- data/test/hash_test.rb +9 -0
- data/test/numeric_test.rb +12 -0
- data/test/select_test.rb +17 -0
- data/test/string_test.rb +5 -0
- data/test/symbol_test.rb +5 -0
- data/test/where_builder_test.rb +17 -0
- data/test/where_value_test.rb +22 -0
- metadata +10 -3
data/README
CHANGED
data/lib/hash.rb
ADDED
@@ -0,0 +1,16 @@
|
|
1
|
+
class Hash
|
2
|
+
|
3
|
+
# call-seq: hash.to_sql -> a_string
|
4
|
+
#
|
5
|
+
# Returns a string with single quotes escaped.
|
6
|
+
#
|
7
|
+
# {:column1 => :foo, :column2 => :bar}.to_sql #=> "column1 as foo, column2 as bar"
|
8
|
+
def to_sql
|
9
|
+
result = []
|
10
|
+
each_pair do |key, value|
|
11
|
+
result << "#{key} as #{value}".to_sym
|
12
|
+
end
|
13
|
+
result.sort{ |x,y| x.to_s <=> y.to_s }.to_sql
|
14
|
+
end
|
15
|
+
|
16
|
+
end
|
data/lib/numeric.rb
CHANGED
data/lib/select.rb
CHANGED
@@ -6,8 +6,22 @@ class Select < SqlStatement
|
|
6
6
|
#
|
7
7
|
# Select[1, :column1, 'book'].to_sql #=> "select 1, column1, 'book'"
|
8
8
|
def [](*columns)
|
9
|
-
self.new("select #{columns
|
9
|
+
self.new("select #{create_columns_list(columns)}")
|
10
10
|
end
|
11
|
+
|
12
|
+
def create_columns_list(columns) #:nodoc:
|
13
|
+
columns.collect{ |column| column.to_sql }.join(', ')
|
14
|
+
end
|
15
|
+
|
16
|
+
# call-seq: Select.distinct -> a_select
|
17
|
+
#
|
18
|
+
# Returns a Select class that appends 'distinct' to the select clause
|
19
|
+
#
|
20
|
+
# Select.distinct[1, :column1, 'book'].to_sql #=> "select distinct 1, column1, 'book'"
|
21
|
+
def distinct
|
22
|
+
DistinctSelect
|
23
|
+
end
|
24
|
+
|
11
25
|
end
|
12
26
|
|
13
27
|
# call-seq: select.from -> a_select
|
@@ -26,7 +40,17 @@ class Select < SqlStatement
|
|
26
40
|
#
|
27
41
|
# Select[1, :column1, 'book'].from[:table1, :table2].to_sql #=> "select 1, column1, 'book' from table1, table2"
|
28
42
|
def [](*table_names)
|
29
|
-
@to_sql += table_names.collect{ |table| table.to_s }.sort.join(', ')
|
43
|
+
@to_sql += table_names.sort{ |x,y| x.to_s <=> y.to_s }.collect{ |table| table.to_s }.sort.join(', ')
|
44
|
+
self
|
45
|
+
end
|
46
|
+
|
47
|
+
# call-seq: select.order_by -> a_select
|
48
|
+
#
|
49
|
+
# Returns a Select instance with the order arguments, joined by ', ' appended to the SQL statement.
|
50
|
+
#
|
51
|
+
# Select[1].from[:table1].order_by(:column1, :column2).to_sql #=> "select 1 from table1 order by column1, column2"
|
52
|
+
def order_by(*column)
|
53
|
+
@to_sql << " order by #{column.to_sql}"
|
30
54
|
self
|
31
55
|
end
|
32
56
|
|
data/lib/sqldsl.rb
CHANGED
@@ -1,12 +1,15 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/where_value.rb'
|
1
2
|
require File.dirname(__FILE__) + '/object.rb'
|
2
3
|
require File.dirname(__FILE__) + '/symbol.rb'
|
3
4
|
require File.dirname(__FILE__) + '/array.rb'
|
4
5
|
require File.dirname(__FILE__) + '/string.rb'
|
6
|
+
require File.dirname(__FILE__) + '/hash.rb'
|
5
7
|
require File.dirname(__FILE__) + '/numeric.rb'
|
6
8
|
require File.dirname(__FILE__) + '/time.rb'
|
7
9
|
require File.dirname(__FILE__) + '/sql_statement.rb'
|
8
10
|
require File.dirname(__FILE__) + '/where_builder.rb'
|
9
11
|
require File.dirname(__FILE__) + '/select.rb'
|
12
|
+
require File.dirname(__FILE__) + '/distinct_select.rb'
|
10
13
|
require File.dirname(__FILE__) + '/insert.rb'
|
11
14
|
require File.dirname(__FILE__) + '/update.rb'
|
12
15
|
require File.dirname(__FILE__) + '/delete.rb'
|
data/lib/string.rb
CHANGED
data/lib/symbol.rb
CHANGED
data/lib/where_builder.rb
CHANGED
@@ -18,6 +18,15 @@ class WhereBuilder
|
|
18
18
|
def equal(lval, rval)
|
19
19
|
sql_parts << rval.to_sql_equal(lval)
|
20
20
|
end
|
21
|
+
|
22
|
+
# call-seq: where.not_null(arg1)
|
23
|
+
#
|
24
|
+
# Appends a not null condition to the where SQL clause.
|
25
|
+
#
|
26
|
+
# WhereBuilder.new { not_null :column1 }.to_sql #=> " where column1 is not null"
|
27
|
+
def not_null(column)
|
28
|
+
sql_parts << "#{column} is not null"
|
29
|
+
end
|
21
30
|
|
22
31
|
# call-seq: where.exists(clause)
|
23
32
|
#
|
@@ -49,8 +58,6 @@ class WhereBuilder
|
|
49
58
|
" where #{sql_parts.join(' and ')}"
|
50
59
|
end
|
51
60
|
|
52
|
-
protected
|
53
|
-
|
54
61
|
def sql_parts #:nodoc:
|
55
62
|
@sql_parts ||= []
|
56
63
|
end
|
data/lib/where_value.rb
ADDED
data/rakefile.rb
CHANGED
@@ -27,7 +27,7 @@ Gem::manage_gems
|
|
27
27
|
specification = Gem::Specification.new do |s|
|
28
28
|
s.name = "sqldsl"
|
29
29
|
s.summary = "A DSL for creating SQL Statements"
|
30
|
-
s.version = "1.
|
30
|
+
s.version = "1.1.0"
|
31
31
|
s.author = 'Jay Fields'
|
32
32
|
s.description = "A DSL for creating SQL Statements"
|
33
33
|
s.email = 'sqldsl-developer@rubyforge.org'
|
data/test/hash_test.rb
ADDED
@@ -0,0 +1,12 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/test_helper'
|
2
|
+
|
3
|
+
class NumbericTest < Test::Unit::TestCase
|
4
|
+
def test_to_sql_gives_self
|
5
|
+
assert_equal 123, 123.to_sql
|
6
|
+
end
|
7
|
+
|
8
|
+
def test_is_a_where_value_duck
|
9
|
+
assert_equal true, 123.respond_to?(:is_not_in)
|
10
|
+
end
|
11
|
+
|
12
|
+
end
|
data/test/select_test.rb
CHANGED
@@ -26,4 +26,21 @@ class SelectTest < Test::Unit::TestCase
|
|
26
26
|
assert_equal 'select column from bar, foo',
|
27
27
|
Select[:column].from[:foo, :bar].to_sql
|
28
28
|
end
|
29
|
+
|
30
|
+
def test_order_by
|
31
|
+
assert_equal 'select foo order by bar', Select[:foo].order_by(:bar).to_sql
|
32
|
+
end
|
33
|
+
|
34
|
+
def test_order_by_with_multiple_arguments
|
35
|
+
assert_equal 'select foo order by bar, baz', Select[:foo].order_by(:bar, :baz).to_sql
|
36
|
+
end
|
37
|
+
|
38
|
+
def test_distinct_select
|
39
|
+
assert_equal 'select distinct foo', Select.distinct[:foo].to_sql
|
40
|
+
end
|
41
|
+
|
42
|
+
def test_column_aliasing
|
43
|
+
assert_equal 'select column1 as foo, column2 as bar', Select[:column1 => :foo, :column2 => :bar].to_sql
|
44
|
+
end
|
45
|
+
|
29
46
|
end
|
data/test/string_test.rb
CHANGED
data/test/symbol_test.rb
CHANGED
data/test/where_builder_test.rb
CHANGED
@@ -47,4 +47,21 @@ class WhereBuilderTest < Test::Unit::TestCase
|
|
47
47
|
end
|
48
48
|
assert_equal ' where not exists (select foo)', statement.to_sql
|
49
49
|
end
|
50
|
+
|
51
|
+
def test_is_not_null_where_criteria
|
52
|
+
statement = WhereBuilder.new do
|
53
|
+
not_null :something
|
54
|
+
end
|
55
|
+
assert_equal ' where something is not null', statement.to_sql
|
56
|
+
end
|
57
|
+
|
58
|
+
def test_is_not_in_where_criteria
|
59
|
+
statement = WhereBuilder.new do
|
60
|
+
:column1.is_not_in do
|
61
|
+
Select[:shipment_option_id]
|
62
|
+
end
|
63
|
+
end
|
64
|
+
assert_equal ' where column1 not in (select shipment_option_id)', statement.to_sql
|
65
|
+
end
|
66
|
+
|
50
67
|
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/test_helper'
|
2
|
+
|
3
|
+
class WhereValueTest < Test::Unit::TestCase
|
4
|
+
|
5
|
+
def test_not_in_sql_statement_with_value
|
6
|
+
klass = Class.new() do
|
7
|
+
include WhereValue
|
8
|
+
|
9
|
+
def to_sql
|
10
|
+
"klass"
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
statement = Select[:foo].where do
|
15
|
+
klass.new.is_not_in do
|
16
|
+
"anything"
|
17
|
+
end
|
18
|
+
end
|
19
|
+
assert_equal "select foo where klass not in ('anything')", statement.to_sql
|
20
|
+
end
|
21
|
+
|
22
|
+
end
|
metadata
CHANGED
@@ -1,10 +1,10 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
|
-
rubygems_version: 0.
|
2
|
+
rubygems_version: 0.9.0
|
3
3
|
specification_version: 1
|
4
4
|
name: sqldsl
|
5
5
|
version: !ruby/object:Gem::Version
|
6
|
-
version: 1.
|
7
|
-
date:
|
6
|
+
version: 1.1.0
|
7
|
+
date: 2007-03-01 00:00:00 -05:00
|
8
8
|
summary: A DSL for creating SQL Statements
|
9
9
|
require_paths:
|
10
10
|
- lib
|
@@ -25,11 +25,14 @@ required_ruby_version: !ruby/object:Gem::Version::Requirement
|
|
25
25
|
platform: ruby
|
26
26
|
signing_key:
|
27
27
|
cert_chain:
|
28
|
+
post_install_message:
|
28
29
|
authors:
|
29
30
|
- Jay Fields
|
30
31
|
files:
|
31
32
|
- lib/array.rb
|
32
33
|
- lib/delete.rb
|
34
|
+
- lib/distinct_select.rb
|
35
|
+
- lib/hash.rb
|
33
36
|
- lib/insert.rb
|
34
37
|
- lib/numeric.rb
|
35
38
|
- lib/object.rb
|
@@ -41,12 +44,15 @@ files:
|
|
41
44
|
- lib/time.rb
|
42
45
|
- lib/update.rb
|
43
46
|
- lib/where_builder.rb
|
47
|
+
- lib/where_value.rb
|
44
48
|
- test/all_tests.rb
|
45
49
|
- test/array_test.rb
|
46
50
|
- test/delete_acceptance_test.rb
|
47
51
|
- test/delete_test.rb
|
52
|
+
- test/hash_test.rb
|
48
53
|
- test/insert_acceptance_test.rb
|
49
54
|
- test/insert_test.rb
|
55
|
+
- test/numeric_test.rb
|
50
56
|
- test/object_test.rb
|
51
57
|
- test/select_acceptance_test.rb
|
52
58
|
- test/select_test.rb
|
@@ -57,6 +63,7 @@ files:
|
|
57
63
|
- test/update_acceptance_test.rb
|
58
64
|
- test/update_test.rb
|
59
65
|
- test/where_builder_test.rb
|
66
|
+
- test/where_value_test.rb
|
60
67
|
- rakefile.rb
|
61
68
|
- README
|
62
69
|
test_files:
|