activerecord-nuodb-adapter 1.0.0.rc.1

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.
@@ -0,0 +1,29 @@
1
+ #
2
+ # Copyright (c) 2012, NuoDB, Inc.
3
+ # All rights reserved.
4
+ #
5
+ # Redistribution and use in source and binary forms, with or without
6
+ # modification, are permitted provided that the following conditions are met:
7
+ #
8
+ # * Redistributions of source code must retain the above copyright
9
+ # notice, this list of conditions and the following disclaimer.
10
+ # * Redistributions in binary form must reproduce the above copyright
11
+ # notice, this list of conditions and the following disclaimer in the
12
+ # documentation and/or other materials provided with the distribution.
13
+ # * Neither the name of NuoDB, Inc. nor the names of its contributors may
14
+ # be used to endorse or promote products derived from this software
15
+ # without specific prior written permission.
16
+ #
17
+ # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
18
+ # ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
19
+ # WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
20
+ # DISCLAIMED. IN NO EVENT SHALL NUODB, INC. BE LIABLE FOR ANY DIRECT, INDIRECT,
21
+ # INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
22
+ # LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
23
+ # OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
24
+ # LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
25
+ # OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
26
+ # ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27
+ #
28
+
29
+ require 'active_record/connection_adapters/nuodb_adapter'
@@ -0,0 +1,55 @@
1
+ #
2
+ # Copyright (c) 2012, NuoDB, Inc.
3
+ # All rights reserved.
4
+ #
5
+ # Redistribution and use in source and binary forms, with or without
6
+ # modification, are permitted provided that the following conditions are met:
7
+ #
8
+ # * Redistributions of source code must retain the above copyright
9
+ # notice, this list of conditions and the following disclaimer.
10
+ # * Redistributions in binary form must reproduce the above copyright
11
+ # notice, this list of conditions and the following disclaimer in the
12
+ # documentation and/or other materials provided with the distribution.
13
+ # * Neither the name of NuoDB, Inc. nor the names of its contributors may
14
+ # be used to endorse or promote products derived from this software
15
+ # without specific prior written permission.
16
+ #
17
+ # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
18
+ # ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
19
+ # WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
20
+ # DISCLAIMED. IN NO EVENT SHALL NUODB, INC. BE LIABLE FOR ANY DIRECT, INDIRECT,
21
+ # INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
22
+ # LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
23
+ # OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
24
+ # LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
25
+ # OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
26
+ # ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27
+ #
28
+
29
+ module Arel
30
+
31
+ module Visitors
32
+
33
+ class NuoDB < Arel::Visitors::ToSql
34
+
35
+ private
36
+
37
+ def visit_Arel_Nodes_SelectStatement o
38
+ [
39
+ (visit(o.with) if o.with),
40
+ o.cores.map { |x| visit_Arel_Nodes_SelectCore x }.join,
41
+ ("ORDER BY #{o.orders.map { |x| visit x }.join(', ')}" unless o.orders.empty?),
42
+ (visit(o.offset) if o.offset),
43
+ (visit(o.limit) if o.limit),
44
+ (visit(o.lock) if o.lock),
45
+ ].compact.join ' '
46
+ end
47
+
48
+ def visit_Arel_Nodes_Limit(o)
49
+ "FETCH FIRST #{visit o.expr} ROWS ONLY"
50
+ end
51
+ end
52
+
53
+ end
54
+
55
+ end
@@ -0,0 +1,181 @@
1
+ #
2
+ # Copyright (c) 2012, NuoDB, Inc.
3
+ # All rights reserved.
4
+ #
5
+ # Redistribution and use in source and binary forms, with or without
6
+ # modification, are permitted provided that the following conditions are met:
7
+ #
8
+ # * Redistributions of source code must retain the above copyright
9
+ # notice, this list of conditions and the following disclaimer.
10
+ # * Redistributions in binary form must reproduce the above copyright
11
+ # notice, this list of conditions and the following disclaimer in the
12
+ # documentation and/or other materials provided with the distribution.
13
+ # * Neither the name of NuoDB, Inc. nor the names of its contributors may
14
+ # be used to endorse or promote products derived from this software
15
+ # without specific prior written permission.
16
+ #
17
+ # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
18
+ # ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
19
+ # WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
20
+ # DISCLAIMED. IN NO EVENT SHALL NUODB, INC. BE LIABLE FOR ANY DIRECT, INDIRECT,
21
+ # INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
22
+ # LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
23
+ # OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
24
+ # LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
25
+ # OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
26
+ # ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27
+ #
28
+
29
+ $:.unshift File.expand_path(File.join(File.dirname(__FILE__), '../lib'))
30
+
31
+ require "test/unit"
32
+ require 'rubygems'
33
+ require 'active_record'
34
+
35
+ class User < ActiveRecord::Base
36
+ has_one :addr, :class_name => 'Addr'
37
+
38
+ def to_s
39
+ return "User(#{@id}), Username: #{@user_name}, Name: #{@first_name} #{@last_name}, #{@admin ? "admin" : "member"}\n" +
40
+ " Address: #{@addr}\n"
41
+ end
42
+ end
43
+
44
+ class Addr < ActiveRecord::Base
45
+ belongs_to :User
46
+
47
+ def to_s
48
+ return "Addr(#{@id}:#{@user_id}) Street: #{@street} City: #{@city} Zip: #{@zip}"
49
+ end
50
+ end
51
+
52
+ class NuoSimpleTest < Test::Unit::TestCase
53
+
54
+ def setup()
55
+
56
+ ActiveRecord::Base.establish_connection(
57
+ :adapter => 'nuodb',
58
+ :database => 'test',
59
+ :schema => 'test',
60
+ :username => 'cloud',
61
+ :password => 'user'
62
+ )
63
+
64
+ ActiveRecord::Schema.drop_table(User.table_name) rescue nil
65
+
66
+ ActiveRecord::Schema.drop_table(Addr.table_name) rescue nil
67
+
68
+ ActiveRecord::Schema.define do
69
+ create_table User.table_name do |t|
70
+ t.string :first_name, :limit => 20
71
+ t.string :last_name, :limit => 20
72
+ t.string :email, :limit => 20
73
+ t.string :user_name, :limit => 20
74
+ t.boolean :admin
75
+ end
76
+ create_table Addr.table_name do |t|
77
+ t.integer :user_id
78
+ t.string :street, :limit => 20
79
+ t.string :city, :limit => 20
80
+ t.string :zip, :limit => 6
81
+ end
82
+ end
83
+
84
+ end
85
+
86
+
87
+ def test_create_user_records
88
+
89
+ fred = User.create do |u|
90
+ u.first_name = "Fred"
91
+ u.last_name = "Flintstone"
92
+ u.email = "fredf@example.com"
93
+ u.user_name = "fred"
94
+ u.admin = true
95
+ end
96
+
97
+ assert_not_nil fred
98
+ assert_not_nil fred.id
99
+
100
+ fred.create_addr do |a|
101
+ a.street = "301 Cobblestone Way"
102
+ a.city = "Bedrock"
103
+ a.zip = "00001"
104
+ end
105
+
106
+ assert_not_nil fred.addr
107
+
108
+ barney = User.create do |u|
109
+ u.first_name = "Barney"
110
+ u.last_name = "Rubble"
111
+ u.email = "barney@example.com"
112
+ u.user_name = "barney"
113
+ u.admin = false
114
+ end
115
+
116
+ assert_not_nil barney
117
+ assert_not_nil barney.id
118
+
119
+ barney.create_addr do |a|
120
+ a.street = "303 Cobblestone Way"
121
+ a.city = "Bedrock"
122
+ a.zip = "00001"
123
+ end
124
+
125
+ assert_not_nil barney.addr
126
+
127
+ assert_equal 2, User.count
128
+
129
+ assert_equal 2, Addr.count
130
+
131
+ mask = 0
132
+ User.find do |entry|
133
+ case entry.id
134
+ when fred.id
135
+ assert_equal 'Fred', entry.first_name
136
+ assert_equal 'Flintstone', entry.last_name
137
+ assert_equal '301 Cobblestone Way', entry.addr.street
138
+ mask += 1
139
+ nil
140
+ when barney.id
141
+ assert_equal 'Barney', entry.first_name
142
+ assert_equal 'Rubble', entry.last_name
143
+ assert_equal '303 Cobblestone Way', entry.addr.street
144
+ mask += 10
145
+ nil
146
+ else
147
+ raise "unknown entry.id: #{entry.id}"
148
+ end
149
+ end
150
+
151
+ assert_equal 11, mask
152
+
153
+ User.all.each do |entry|
154
+ entry.first_name = entry.first_name.upcase
155
+ entry.last_name = entry.last_name.upcase
156
+ # TODO entry.admin = !entry.admin
157
+ entry.addr.street = entry.addr.street.upcase
158
+ entry.addr.save
159
+ entry.save
160
+ end
161
+
162
+ assert_equal 2, User.count
163
+
164
+ User.find do |entry|
165
+ case entry.id
166
+ when fred.id
167
+ assert_equal 'FRED', entry.first_name
168
+ assert_equal '301 COBBLESTONE WAY', entry.addr.street
169
+ nil
170
+ when barney.id
171
+ assert_equal 'BARNEY', entry.first_name
172
+ assert_equal '303 COBBLESTONE WAY', entry.addr.street
173
+ nil
174
+ else
175
+ raise 'unknown entry.id'
176
+ end
177
+ end
178
+
179
+ end
180
+
181
+ end
metadata ADDED
@@ -0,0 +1,130 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: activerecord-nuodb-adapter
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.0.rc.1
5
+ prerelease: 6
6
+ platform: ruby
7
+ authors:
8
+ - Robert Buck
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2012-11-13 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: activerecord
16
+ requirement: !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ~>
20
+ - !ruby/object:Gem::Version
21
+ version: 3.2.8
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ~>
28
+ - !ruby/object:Gem::Version
29
+ version: 3.2.8
30
+ - !ruby/object:Gem::Dependency
31
+ name: rake
32
+ requirement: !ruby/object:Gem::Requirement
33
+ none: false
34
+ requirements:
35
+ - - ~>
36
+ - !ruby/object:Gem::Version
37
+ version: '0.9'
38
+ type: :development
39
+ prerelease: false
40
+ version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ~>
44
+ - !ruby/object:Gem::Version
45
+ version: '0.9'
46
+ - !ruby/object:Gem::Dependency
47
+ name: rdoc
48
+ requirement: !ruby/object:Gem::Requirement
49
+ none: false
50
+ requirements:
51
+ - - ~>
52
+ - !ruby/object:Gem::Version
53
+ version: '3.10'
54
+ type: :development
55
+ prerelease: false
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ none: false
58
+ requirements:
59
+ - - ~>
60
+ - !ruby/object:Gem::Version
61
+ version: '3.10'
62
+ - !ruby/object:Gem::Dependency
63
+ name: nuodb
64
+ requirement: !ruby/object:Gem::Requirement
65
+ none: false
66
+ requirements:
67
+ - - ~>
68
+ - !ruby/object:Gem::Version
69
+ version: 1.0.0.rc.1
70
+ type: :runtime
71
+ prerelease: false
72
+ version_requirements: !ruby/object:Gem::Requirement
73
+ none: false
74
+ requirements:
75
+ - - ~>
76
+ - !ruby/object:Gem::Version
77
+ version: 1.0.0.rc.1
78
+ description: An adapter for ActiveRecord and AREL to support the NuoDB distributed
79
+ database backend.
80
+ email:
81
+ - support@nuodb.com
82
+ executables: []
83
+ extensions: []
84
+ extra_rdoc_files:
85
+ - README.rdoc
86
+ files:
87
+ - .buildpath
88
+ - .gitignore
89
+ - AUTHORS
90
+ - COPYING
91
+ - Gemfile
92
+ - History.txt
93
+ - LICENSE
94
+ - Manifest.txt
95
+ - README.rdoc
96
+ - Rakefile
97
+ - activerecord-nuodb-adapter.gemspec
98
+ - lib/active_record/connection_adapters/nuodb/version.rb
99
+ - lib/active_record/connection_adapters/nuodb_adapter.rb
100
+ - lib/activerecord-nuodb-adapter.rb
101
+ - lib/arel/visitors/nuodb.rb
102
+ - test/test_simple.rb
103
+ homepage: http://nuodb.github.com/ruby-activerecord-nuodb-adapter/
104
+ licenses:
105
+ - BSD
106
+ post_install_message:
107
+ rdoc_options:
108
+ - --charset=UTF-8
109
+ require_paths:
110
+ - lib
111
+ required_ruby_version: !ruby/object:Gem::Requirement
112
+ none: false
113
+ requirements:
114
+ - - ! '>='
115
+ - !ruby/object:Gem::Version
116
+ version: '0'
117
+ required_rubygems_version: !ruby/object:Gem::Requirement
118
+ none: false
119
+ requirements:
120
+ - - ! '>'
121
+ - !ruby/object:Gem::Version
122
+ version: 1.3.1
123
+ requirements: []
124
+ rubyforge_project:
125
+ rubygems_version: 1.8.24
126
+ signing_key:
127
+ specification_version: 3
128
+ summary: ActiveRecord adapter with AREL support for NuoDB.
129
+ test_files:
130
+ - test/test_simple.rb