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.
@@ -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.1.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'
@@ -1,5 +1,5 @@
1
1
  module ArJdbc
2
2
  module SybaseSQLAnywhere
3
- VERSION = "1.0.1"
3
+ VERSION = "1.1.0"
4
4
  end
5
5
  end
@@ -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]}"
@@ -1,3 +1,4 @@
1
+ require 'rubygems'
1
2
  require 'jdbc_common'
2
3
  require 'db/sqlanywhere'
3
4
 
@@ -1,3 +1,4 @@
1
+ require 'rubygems'
1
2
  require 'jdbc_common'
2
3
  require 'db/sqlanywhere'
3
4
 
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.1
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-17 00:00:00 Z
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.1.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.8.10
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