activerecord-jdbcsqlanywhere-adapter 1.0.1 → 1.1.0
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/activerecord-jdbcsqlanywhere-adapter.gemspec +1 -1
- data/lib/activerecord-jdbcsqlanywhere-adapter.rb +1 -1
- data/lib/arel/visitors/sqlanywhere.rb +38 -0
- data/lib/arjdbc/sqlanywhere/adapter.rb +8 -2
- data/lib/arjdbc/sqlanywhere/adapter_java.jar +0 -0
- data/test/sqlanywhere_limit_offset_test.rb +1 -0
- data/test/sqlanywhere_simple_test.rb +1 -0
- metadata +7 -4
@@ -12,7 +12,7 @@ Gem::Specification.new do |s|
|
|
12
12
|
|
13
13
|
s.required_rubygems_version = ">= 1.3.6"
|
14
14
|
|
15
|
-
s.add_dependency('activerecord-jdbc-adapter', "~> 1.
|
15
|
+
s.add_dependency('activerecord-jdbc-adapter', "~> 1.2.0")
|
16
16
|
s.add_development_dependency "bundler", ">= 1.0.0"
|
17
17
|
|
18
18
|
s.files = `git ls-files`.split("\n") << 'lib/arjdbc/sqlanywhere/adapter_java.jar'
|
@@ -0,0 +1,38 @@
|
|
1
|
+
module Arel
|
2
|
+
module Visitors
|
3
|
+
class SybaseSQLAnywhere < Arel::Visitors::ToSql
|
4
|
+
|
5
|
+
private
|
6
|
+
def visit_Arel_Nodes_SelectStatement o
|
7
|
+
[
|
8
|
+
(visit(o.with) if o.with),
|
9
|
+
o.cores.map { |x| visit_Arel_Nodes_SelectCore x, o.limit, o.offset }.join,
|
10
|
+
("ORDER BY #{o.orders.map { |x| visit x }.join(', ')}" unless o.orders.empty?),
|
11
|
+
(visit(o.lock) if o.lock),
|
12
|
+
].compact.join ' '
|
13
|
+
end
|
14
|
+
|
15
|
+
def visit_Arel_Nodes_SelectCore o, limit=nil, offset=nil
|
16
|
+
[
|
17
|
+
"SELECT",
|
18
|
+
(visit(o.set_quantifier) if o.set_quantifier),
|
19
|
+
(visit(o.top) if o.top),
|
20
|
+
(visit(limit) if limit),
|
21
|
+
(visit(offset) if offset),
|
22
|
+
("#{o.projections.map { |x| visit x }.join ', '}" unless o.projections.empty?),
|
23
|
+
("FROM #{visit(o.source)}" if o.source && !o.source.empty?),
|
24
|
+
("WHERE #{o.wheres.map { |x| visit x }.join ' AND ' }" unless o.wheres.empty?),
|
25
|
+
("GROUP BY #{o.groups.map { |x| visit x }.join ', ' }" unless o.groups.empty?),
|
26
|
+
(visit(o.having) if o.having),
|
27
|
+
].compact.join ' '
|
28
|
+
end
|
29
|
+
|
30
|
+
def visit_Arel_Nodes_Offset o
|
31
|
+
"START AT #{visit(o.expr).to_i+1}"
|
32
|
+
end
|
33
|
+
def visit_Arel_Nodes_Limit o
|
34
|
+
"TOP #{visit o.expr}"
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
@@ -7,6 +7,11 @@ module ::ArJdbc
|
|
7
7
|
def self.column_selector
|
8
8
|
[/sqlanywhere/i, lambda {|cfg,col| col.extend(::ArJdbc::SybaseSQLAnywhere::Column)}]
|
9
9
|
end
|
10
|
+
|
11
|
+
def self.arel2_visitors(config)
|
12
|
+
require 'arel/visitors/sqlanywhere'
|
13
|
+
{}.tap {|v| %w(sqlanywhere jdbcsqlanywhere).each {|x| v[x] = ::Arel::Visitors::SybaseSQLAnywhere } }
|
14
|
+
end
|
10
15
|
|
11
16
|
module Column
|
12
17
|
def init_column(name, default, *args)
|
@@ -15,6 +20,7 @@ module ::ArJdbc
|
|
15
20
|
|
16
21
|
# Post process default value from JDBC into a Rails-friendly format (columns{-internal})
|
17
22
|
def default_value(value)
|
23
|
+
return nil if value =~ /^autoincrement$/i
|
18
24
|
# jdbc returns column default strings with actual single quotes around the value.
|
19
25
|
return $1 if value =~ /^'(.*)'$/
|
20
26
|
|
@@ -99,8 +105,8 @@ module ::ArJdbc
|
|
99
105
|
end
|
100
106
|
|
101
107
|
def add_limit_offset!(sql, options)
|
102
|
-
if options[:limit] and options[:offset] and options[:offset] > 0
|
103
|
-
sql.sub!(/^\s*SELECT(\s+DISTINCT)?/i, "SELECT\\1 TOP #{options[:limit]} START AT #{options[:offset]+1}")
|
108
|
+
if options[:limit] and options[:offset] and options[:offset].to_i > 0
|
109
|
+
sql.sub!(/^\s*SELECT(\s+DISTINCT)?/i, "SELECT\\1 TOP #{options[:limit]} START AT #{options[:offset].to_i+1}")
|
104
110
|
elsif sql !~ /^\s*SELECT (@@|COUNT\()/i
|
105
111
|
sql.sub!(/^\s*SELECT(\s+DISTINCT)?/i) do
|
106
112
|
"SELECT#{$1} TOP #{options[:limit]}"
|
Binary file
|
metadata
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
name: activerecord-jdbcsqlanywhere-adapter
|
3
3
|
version: !ruby/object:Gem::Version
|
4
4
|
prerelease:
|
5
|
-
version: 1.0
|
5
|
+
version: 1.1.0
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
8
8
|
- Brian Olsen
|
@@ -10,7 +10,8 @@ autorequire:
|
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
12
|
|
13
|
-
date: 2011-10-
|
13
|
+
date: 2011-10-18 00:00:00 +02:00
|
14
|
+
default_executable:
|
14
15
|
dependencies:
|
15
16
|
- !ruby/object:Gem::Dependency
|
16
17
|
name: activerecord-jdbc-adapter
|
@@ -20,7 +21,7 @@ dependencies:
|
|
20
21
|
requirements:
|
21
22
|
- - ~>
|
22
23
|
- !ruby/object:Gem::Version
|
23
|
-
version: 1.
|
24
|
+
version: 1.2.0
|
24
25
|
type: :runtime
|
25
26
|
version_requirements: *id001
|
26
27
|
- !ruby/object:Gem::Dependency
|
@@ -51,6 +52,7 @@ files:
|
|
51
52
|
- activerecord-jdbcsqlanywhere-adapter.gemspec
|
52
53
|
- lib/active_record/connection_adapters/sqlanywhere_adapter.rb
|
53
54
|
- lib/activerecord-jdbcsqlanywhere-adapter.rb
|
55
|
+
- lib/arel/visitors/sqlanywhere.rb
|
54
56
|
- lib/arjdbc/discover.rb
|
55
57
|
- lib/arjdbc/sqlanywhere.rb
|
56
58
|
- lib/arjdbc/sqlanywhere/adapter.rb
|
@@ -63,6 +65,7 @@ files:
|
|
63
65
|
- test/sqlanywhere_limit_offset_test.rb
|
64
66
|
- test/sqlanywhere_simple_test.rb
|
65
67
|
- lib/arjdbc/sqlanywhere/adapter_java.jar
|
68
|
+
has_rdoc: true
|
66
69
|
homepage: http://github.com/griff/activerecord-jdbcsqlanywhere-adapter
|
67
70
|
licenses: []
|
68
71
|
|
@@ -86,7 +89,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
86
89
|
requirements: []
|
87
90
|
|
88
91
|
rubyforge_project:
|
89
|
-
rubygems_version: 1.
|
92
|
+
rubygems_version: 1.5.1
|
90
93
|
signing_key:
|
91
94
|
specification_version: 3
|
92
95
|
summary: Sybase SQLAnywhere JDBC adapter for JRuby on Rails
|