activerecord_vertica_adapter 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
data/.document ADDED
@@ -0,0 +1,5 @@
1
+ lib/**/*.rb
2
+ bin/*
3
+ -
4
+ features/**/*.feature
5
+ LICENSE.txt
data/.rvmrc ADDED
@@ -0,0 +1 @@
1
+ rvm 1.9.2@activerecord_vertica_adapter
data/Gemfile ADDED
@@ -0,0 +1,10 @@
1
+ source "http://rubygems.org"
2
+ gem 'activerecord', '3.0.5'
3
+ gem 'vertica', '0.8.1'
4
+
5
+ group :development do
6
+ gem "yard", "~> 0.6.0"
7
+ gem "bundler", "~> 1.0.0"
8
+ gem "jeweler", "~> 1.6.4"
9
+ gem "rcov", ">= 0"
10
+ end
data/Gemfile.lock ADDED
@@ -0,0 +1,37 @@
1
+ GEM
2
+ remote: http://rubygems.org/
3
+ specs:
4
+ activemodel (3.0.5)
5
+ activesupport (= 3.0.5)
6
+ builder (~> 2.1.2)
7
+ i18n (~> 0.4)
8
+ activerecord (3.0.5)
9
+ activemodel (= 3.0.5)
10
+ activesupport (= 3.0.5)
11
+ arel (~> 2.0.2)
12
+ tzinfo (~> 0.3.23)
13
+ activesupport (3.0.5)
14
+ arel (2.0.10)
15
+ builder (2.1.2)
16
+ git (1.2.5)
17
+ i18n (0.6.0)
18
+ jeweler (1.6.4)
19
+ bundler (~> 1.0)
20
+ git (>= 1.2.5)
21
+ rake
22
+ rake (0.9.2)
23
+ rcov (0.9.10)
24
+ tzinfo (0.3.29)
25
+ vertica (0.8.1)
26
+ yard (0.6.8)
27
+
28
+ PLATFORMS
29
+ ruby
30
+
31
+ DEPENDENCIES
32
+ activerecord (= 3.0.5)
33
+ bundler (~> 1.0.0)
34
+ jeweler (~> 1.6.4)
35
+ rcov
36
+ vertica (= 0.8.1)
37
+ yard (~> 0.6.0)
data/LICENSE.txt ADDED
@@ -0,0 +1,20 @@
1
+ Copyright (c) 2011 Jerome Riga
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ "Software"), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.rdoc ADDED
@@ -0,0 +1,28 @@
1
+ = activerecord_vertica_adapter
2
+
3
+ This adapter at the moment can only query a vertica database.
4
+
5
+ DEPENDENCIES
6
+ gem vertica 'https://github.com/sprsquish/vertica'
7
+
8
+
9
+ TODO:
10
+ - support ddl
11
+ - transactions
12
+
13
+
14
+ == Contributing to activerecord_vertica_adapter
15
+
16
+ * Check out the latest master to make sure the feature hasn't been implemented or the bug hasn't been fixed yet
17
+ * Check out the issue tracker to make sure someone already hasn't requested it and/or contributed it
18
+ * Fork the project
19
+ * Start a feature/bugfix branch
20
+ * Commit and push until you are happy with your contribution
21
+ * Make sure to add tests for it. This is important so I don't break it in a future version unintentionally.
22
+ * Please try not to mess with the Rakefile, version, or history. If you want to have your own version, or is otherwise necessary, that is fine, but please isolate to its own commit so I can cherry-pick around it.
23
+
24
+ == Copyright
25
+
26
+ Copyright (c) 2011 Jerome Riga. See LICENSE.txt for
27
+ further details.
28
+
data/Rakefile ADDED
@@ -0,0 +1,46 @@
1
+ # encoding: utf-8
2
+
3
+ require 'rubygems'
4
+ require 'bundler'
5
+ begin
6
+ Bundler.setup(:default, :development)
7
+ rescue Bundler::BundlerError => e
8
+ $stderr.puts e.message
9
+ $stderr.puts "Run `bundle install` to install missing gems"
10
+ exit e.status_code
11
+ end
12
+ require 'rake'
13
+
14
+ require 'jeweler'
15
+ Jeweler::Tasks.new do |gem|
16
+ # gem is a Gem::Specification... see http://docs.rubygems.org/read/chapter/20 for more options
17
+ gem.name = "activerecord_vertica_adapter"
18
+ gem.homepage = "http://github.com/jriga/activerecord_vertica_adapter"
19
+ gem.license = "MIT"
20
+ gem.summary = %Q{ActiveRecord adapter for Vertica database}
21
+ gem.description = %Q{ActiveRecord adapter for Vertica databaes}
22
+ gem.email = "jriga@zemis.co.uk"
23
+ gem.authors = ["Jerome Riga"]
24
+ # dependencies defined in Gemfile
25
+ end
26
+ Jeweler::RubygemsDotOrgTasks.new
27
+
28
+ require 'rake/testtask'
29
+ Rake::TestTask.new(:test) do |test|
30
+ test.libs << 'lib' << 'test'
31
+ test.pattern = 'test/**/test_*.rb'
32
+ test.verbose = true
33
+ end
34
+
35
+ require 'rcov/rcovtask'
36
+ Rcov::RcovTask.new do |test|
37
+ test.libs << 'test'
38
+ test.pattern = 'test/**/test_*.rb'
39
+ test.verbose = true
40
+ test.rcov_opts << '--exclude "gems/*"'
41
+ end
42
+
43
+ task :default => :test
44
+
45
+ require 'yard'
46
+ YARD::Rake::YardocTask.new
data/VERSION ADDED
@@ -0,0 +1 @@
1
+ 0.1.0
@@ -0,0 +1,66 @@
1
+ # Generated by jeweler
2
+ # DO NOT EDIT THIS FILE DIRECTLY
3
+ # Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
4
+ # -*- encoding: utf-8 -*-
5
+
6
+ Gem::Specification.new do |s|
7
+ s.name = %q{activerecord_vertica_adapter}
8
+ s.version = "0.1.0"
9
+
10
+ s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
+ s.authors = [%q{Jerome Riga}]
12
+ s.date = %q{2011-09-12}
13
+ s.description = %q{ActiveRecord adapter for Vertica databaes}
14
+ s.email = %q{jriga@zemis.co.uk}
15
+ s.extra_rdoc_files = [
16
+ "LICENSE.txt",
17
+ "README.rdoc"
18
+ ]
19
+ s.files = [
20
+ ".document",
21
+ ".rvmrc",
22
+ "Gemfile",
23
+ "Gemfile.lock",
24
+ "LICENSE.txt",
25
+ "README.rdoc",
26
+ "Rakefile",
27
+ "VERSION",
28
+ "activerecord_vertica_adapter.gemspec",
29
+ "lib/active_record/connection_adapters/vertica_adapter.rb",
30
+ "test/helper.rb",
31
+ "test/test_activerecord_vertica_adapter.rb"
32
+ ]
33
+ s.homepage = %q{http://github.com/jriga/activerecord_vertica_adapter}
34
+ s.licenses = [%q{MIT}]
35
+ s.require_paths = [%q{lib}]
36
+ s.rubygems_version = %q{1.8.6}
37
+ s.summary = %q{ActiveRecord adapter for Vertica database}
38
+
39
+ if s.respond_to? :specification_version then
40
+ s.specification_version = 3
41
+
42
+ if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
43
+ s.add_runtime_dependency(%q<activerecord>, ["= 3.0.5"])
44
+ s.add_runtime_dependency(%q<vertica>, ["= 0.8.1"])
45
+ s.add_development_dependency(%q<yard>, ["~> 0.6.0"])
46
+ s.add_development_dependency(%q<bundler>, ["~> 1.0.0"])
47
+ s.add_development_dependency(%q<jeweler>, ["~> 1.6.4"])
48
+ s.add_development_dependency(%q<rcov>, [">= 0"])
49
+ else
50
+ s.add_dependency(%q<activerecord>, ["= 3.0.5"])
51
+ s.add_dependency(%q<vertica>, ["= 0.8.1"])
52
+ s.add_dependency(%q<yard>, ["~> 0.6.0"])
53
+ s.add_dependency(%q<bundler>, ["~> 1.0.0"])
54
+ s.add_dependency(%q<jeweler>, ["~> 1.6.4"])
55
+ s.add_dependency(%q<rcov>, [">= 0"])
56
+ end
57
+ else
58
+ s.add_dependency(%q<activerecord>, ["= 3.0.5"])
59
+ s.add_dependency(%q<vertica>, ["= 0.8.1"])
60
+ s.add_dependency(%q<yard>, ["~> 0.6.0"])
61
+ s.add_dependency(%q<bundler>, ["~> 1.0.0"])
62
+ s.add_dependency(%q<jeweler>, ["~> 1.6.4"])
63
+ s.add_dependency(%q<rcov>, [">= 0"])
64
+ end
65
+ end
66
+
@@ -0,0 +1,131 @@
1
+ require 'active_record/connection_adapters/abstract_adapter'
2
+ require 'active_support/core_ext/kernel/requires'
3
+
4
+ module ActiveRecord
5
+ class Base
6
+ # Establishes a connection to the database that's used by all Active Record objects
7
+ def self.vertica_connection(config) # :nodoc:
8
+ unless defined? Vertica
9
+ begin
10
+ require 'vertica'
11
+ rescue LoadError
12
+ raise "!!! Missing the vertica gem. Add it to your Gemfile: gem 'vertica'"
13
+ end
14
+ end
15
+
16
+ config = config.symbolize_keys
17
+ host = config[:host]
18
+ port = config[:port] || 5433
19
+ username = config[:username].to_s if config[:username]
20
+ password = config[:password].to_s if config[:password]
21
+
22
+ if config.has_key?(:database)
23
+ database = config[:database]
24
+ else
25
+ raise ArgumentError, "No database specified. Missing argument: database."
26
+ end
27
+ if config.has_key?(:schema)
28
+ schema = config[:schema]
29
+ else
30
+ raise ArgumentError, "No database specified. Missing argument: schema."
31
+ end
32
+ conn = Vertica.connect({ :user => username, :password => password, :host => host, :port => port, :database => database , :schema => schema})
33
+ ConnectionAdapters::Vertica.new(conn)
34
+ end
35
+
36
+ class << self
37
+ private
38
+ def instantiate(record)
39
+ model = find_sti_class(record[inheritance_column]).new(record)
40
+ model
41
+ end
42
+ end
43
+ end
44
+
45
+ module ConnectionAdapters
46
+ class VerticaColumn < Column
47
+
48
+ end
49
+
50
+ class Vertica < AbstractAdapter
51
+ ADAPTER_NAME = 'Vertica'.freeze
52
+
53
+ def adapter_name #:nodoc:
54
+ ADAPTER_NAME
55
+ end
56
+
57
+ def active?
58
+ @connection.opened?
59
+ end
60
+
61
+ # Disconnects from the database if already connected, and establishes a
62
+ # new connection with the database.
63
+ def reconnect!
64
+ @connection.reset
65
+ end
66
+
67
+ # Close the connection.
68
+ def disconnect!
69
+ @connection.close rescue nil
70
+ end
71
+
72
+ # return raw object
73
+ def execute(sql, name=nil)
74
+ log(sql,name) do
75
+ if block_given?
76
+ @connection = ::Vertica.connect(@connection.options)
77
+ @connection.query(sql) {|row| yield row }
78
+ @connection.close
79
+ else
80
+ @connection = ::Vertica.connect(@connection.options)
81
+ results = @connection.query(sql)
82
+ @connection.close
83
+ results
84
+ end
85
+ end
86
+ end
87
+
88
+ def schema_name
89
+ @schema ||= @connection.options[:schema]
90
+ end
91
+
92
+ def tables(name = nil) #:nodoc:
93
+ sql = "SELECT * FROM tables WHERE table_schema = #{quote_column_name(schema_name)}"
94
+
95
+ tables = []
96
+ execute(sql, name) { |field| tables << field[:table_name] }
97
+ tables
98
+ end
99
+
100
+ def columns(table_name, name = nil)#:nodoc:
101
+ sql = "SELECT * FROM columns WHERE table_name = #{quote_column_name(table_name)}"
102
+
103
+ columns = []
104
+ execute(sql, name){ |field| columns << VerticaColumn.new(field[:column_name],field[:column_default],field[:data_type],field[:is_nullable])}
105
+ columns
106
+ end
107
+
108
+ def select(sql, name = nil)
109
+ rows = []
110
+ @connection = ::Vertica.connect(@connection.options)
111
+ @connection.query(sql) {|row| rows << row }
112
+ @connection.close
113
+ rows
114
+ end
115
+
116
+ ## QUOTING
117
+ def quote_column_name(name) #:nodoc:
118
+ "'#{name}'"
119
+ end
120
+
121
+ def quote_table_name(name) #:nodoc:
122
+ if schema_name.blank?
123
+ name
124
+ else
125
+ "#{schema_name}.#{name}"
126
+ end
127
+ end
128
+
129
+ end
130
+ end
131
+ end
data/test/helper.rb ADDED
@@ -0,0 +1,19 @@
1
+ require 'rubygems'
2
+ require 'bundler'
3
+ begin
4
+ Bundler.setup(:default, :development)
5
+ rescue Bundler::BundlerError => e
6
+ $stderr.puts e.message
7
+ $stderr.puts "Run `bundle install` to install missing gems"
8
+ exit e.status_code
9
+ end
10
+ require 'test/unit'
11
+
12
+ $LOAD_PATH.unshift(File.dirname(__FILE__))
13
+ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
14
+ require 'active_record'
15
+ require 'active_record/connection_adapters/vertica_adapter'
16
+ require 'vertica'
17
+
18
+ class Test::Unit::TestCase
19
+ end
@@ -0,0 +1,52 @@
1
+ require 'helper'
2
+
3
+ class TestVerticaAdapter < Test::Unit::TestCase
4
+ def setup
5
+ config = {
6
+ :host => '91.216.137.103',
7
+ :port => 5433,
8
+ :reconnect => true,
9
+ :database => 'buzzDW',
10
+ :schema => 'voting_system',
11
+ :user => 'vertica-admin'
12
+ }
13
+
14
+ @conn = Vertica.connect(config)
15
+ @adapter = ::ActiveRecord::ConnectionAdapters::Vertica.new(@conn)
16
+ end
17
+
18
+ def teardown
19
+ @conn.close
20
+ end
21
+
22
+ def test_quoting_name
23
+ assert_equal "'test'", @adapter.quote_column_name('test')
24
+ assert_equal "voting_system.test", @adapter.quote_table_name('test')
25
+ end
26
+
27
+ def test_schema_name
28
+ assert_equal "voting_system", @adapter.schema_name
29
+ end
30
+
31
+ def test_column_name_of_user_detais_table
32
+ columns = @adapter.columns('user_details')
33
+ assert_equal ::ActiveRecord::ConnectionAdapters::VerticaColumn, columns.first.class
34
+ end
35
+
36
+ def test_tables
37
+ tables = ["purchase_log",
38
+ "parsed_file_names",
39
+ "transaction_log",
40
+ "temp_load_user_log",
41
+ "outdated_user_details",
42
+ "user_details",
43
+ "user_login_details",
44
+ "user_failed_registration_details",
45
+ "votes_log",
46
+ "temp_load_purchase_log",
47
+ "temp_load_transaction_log",
48
+ "temp_load_votes_log",
49
+ "test"]
50
+ assert_equal tables, @adapter.tables
51
+ end
52
+ end
metadata ADDED
@@ -0,0 +1,128 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: activerecord_vertica_adapter
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Jerome Riga
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2011-09-12 00:00:00.000000000Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: activerecord
16
+ requirement: &2161014840 !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - =
20
+ - !ruby/object:Gem::Version
21
+ version: 3.0.5
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: *2161014840
25
+ - !ruby/object:Gem::Dependency
26
+ name: vertica
27
+ requirement: &2161014080 !ruby/object:Gem::Requirement
28
+ none: false
29
+ requirements:
30
+ - - =
31
+ - !ruby/object:Gem::Version
32
+ version: 0.8.1
33
+ type: :runtime
34
+ prerelease: false
35
+ version_requirements: *2161014080
36
+ - !ruby/object:Gem::Dependency
37
+ name: yard
38
+ requirement: &2161013440 !ruby/object:Gem::Requirement
39
+ none: false
40
+ requirements:
41
+ - - ~>
42
+ - !ruby/object:Gem::Version
43
+ version: 0.6.0
44
+ type: :development
45
+ prerelease: false
46
+ version_requirements: *2161013440
47
+ - !ruby/object:Gem::Dependency
48
+ name: bundler
49
+ requirement: &2161012620 !ruby/object:Gem::Requirement
50
+ none: false
51
+ requirements:
52
+ - - ~>
53
+ - !ruby/object:Gem::Version
54
+ version: 1.0.0
55
+ type: :development
56
+ prerelease: false
57
+ version_requirements: *2161012620
58
+ - !ruby/object:Gem::Dependency
59
+ name: jeweler
60
+ requirement: &2161011780 !ruby/object:Gem::Requirement
61
+ none: false
62
+ requirements:
63
+ - - ~>
64
+ - !ruby/object:Gem::Version
65
+ version: 1.6.4
66
+ type: :development
67
+ prerelease: false
68
+ version_requirements: *2161011780
69
+ - !ruby/object:Gem::Dependency
70
+ name: rcov
71
+ requirement: &2161009880 !ruby/object:Gem::Requirement
72
+ none: false
73
+ requirements:
74
+ - - ! '>='
75
+ - !ruby/object:Gem::Version
76
+ version: '0'
77
+ type: :development
78
+ prerelease: false
79
+ version_requirements: *2161009880
80
+ description: ActiveRecord adapter for Vertica databaes
81
+ email: jriga@zemis.co.uk
82
+ executables: []
83
+ extensions: []
84
+ extra_rdoc_files:
85
+ - LICENSE.txt
86
+ - README.rdoc
87
+ files:
88
+ - .document
89
+ - .rvmrc
90
+ - Gemfile
91
+ - Gemfile.lock
92
+ - LICENSE.txt
93
+ - README.rdoc
94
+ - Rakefile
95
+ - VERSION
96
+ - activerecord_vertica_adapter.gemspec
97
+ - lib/active_record/connection_adapters/vertica_adapter.rb
98
+ - test/helper.rb
99
+ - test/test_activerecord_vertica_adapter.rb
100
+ homepage: http://github.com/jriga/activerecord_vertica_adapter
101
+ licenses:
102
+ - MIT
103
+ post_install_message:
104
+ rdoc_options: []
105
+ require_paths:
106
+ - lib
107
+ required_ruby_version: !ruby/object:Gem::Requirement
108
+ none: false
109
+ requirements:
110
+ - - ! '>='
111
+ - !ruby/object:Gem::Version
112
+ version: '0'
113
+ segments:
114
+ - 0
115
+ hash: -802375705264148305
116
+ required_rubygems_version: !ruby/object:Gem::Requirement
117
+ none: false
118
+ requirements:
119
+ - - ! '>='
120
+ - !ruby/object:Gem::Version
121
+ version: '0'
122
+ requirements: []
123
+ rubyforge_project:
124
+ rubygems_version: 1.8.6
125
+ signing_key:
126
+ specification_version: 3
127
+ summary: ActiveRecord adapter for Vertica database
128
+ test_files: []