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.
@@ -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