activerecord-jdbcsqlanywhere-adapter 1.0.1 → 1.1.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|