sequel-vertica 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
data/.gitignore ADDED
@@ -0,0 +1,19 @@
1
+ *.gem
2
+ *.rbc
3
+ .bundle
4
+ .config
5
+ .yardoc
6
+ Gemfile.lock
7
+ InstalledFiles
8
+ _yardoc
9
+ coverage
10
+ doc/
11
+ lib/bundler/man
12
+ pkg
13
+ rdoc
14
+ spec/reports
15
+ test/tmp
16
+ test/version_tmp
17
+ tmp
18
+ spec/spec_config.rb
19
+ .rbenv-version
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'http://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in sequel-vertica.gemspec
4
+ gemspec
data/Rakefile ADDED
@@ -0,0 +1,13 @@
1
+ #!/usr/bin/env rake
2
+ require "bundler/gem_tasks"
3
+
4
+ require 'rspec/core/rake_task'
5
+
6
+ desc 'Default: run specs.'
7
+ task :default => :spec
8
+
9
+ desc "Run specs"
10
+ RSpec::Core::RakeTask.new #do |t|
11
+ #t.pattern = "./spec/**/*_spec.rb" # don't need this, it's default.
12
+ # Put spec opts in a file named .rspec in root
13
+ #end
data/Readme.md ADDED
@@ -0,0 +1,16 @@
1
+ ## Sequel-vertica
2
+
3
+ A third party adapter to use Vertica through sequel, most of the actual work is
4
+ done by sequel and the vertica gem.
5
+
6
+ # Usage
7
+
8
+ The usage is straight forward as any other Sequel adapter, just make sure to
9
+ require sequel and the sequel-vertica gem.
10
+
11
+ ```ruby
12
+ require 'sequel'
13
+ require 'sequel-vertica'
14
+
15
+ $DB = Sequel.connect('vertica://user:pw@host/database_name')
16
+ ```
@@ -0,0 +1,4 @@
1
+ require 'sequel-vertica/version'
2
+ require './lib/sequel/adapters/vertica'
3
+
4
+ Sequel::Database::ADAPTERS << 'vertica'
@@ -0,0 +1,5 @@
1
+ module Sequel
2
+ module Vertica
3
+ VERSION = "0.0.1"
4
+ end
5
+ end
@@ -0,0 +1,110 @@
1
+ require 'vertica'
2
+
3
+ module Sequel
4
+ module Vertica
5
+ class Database < Sequel::Database
6
+ ::Vertica::Connection.send(:alias_method,:execute, :query)
7
+ PK_NAME = 'C_PRIMARY'
8
+ set_adapter_scheme :vertica
9
+
10
+ def connect(server)
11
+ opts = server_opts(server)
12
+ ::Vertica::Connection.new(
13
+ :host => opts[:host],
14
+ :user => opts[:user],
15
+ :password => opts[:password],
16
+ :port => opts[:port],
17
+ :schema => opts[:schema],
18
+ :database => opts[:database],
19
+ :ssl => opts[:ssl] )
20
+ end
21
+
22
+ def execute(sql, opts = {}, &block)
23
+ synchronize(opts[:server]) do |conn|
24
+ res = conn.query(sql)
25
+ res.each(&block)
26
+ end
27
+ end
28
+
29
+ def execute_insert(sql, opts = {}, &block)
30
+ result = execute(sql, opts, &block)
31
+ result.first[:OUTPUT]
32
+ end
33
+
34
+ alias_method :execute_dui, :execute
35
+
36
+ def supports_create_table_if_not_exists?
37
+ true
38
+ end
39
+
40
+ def supports_drop_table_if_exists?
41
+ true
42
+ end
43
+
44
+ def supports_transaction_isolation_levels?
45
+ true
46
+ end
47
+
48
+ def identifier_input_method_default
49
+ nil
50
+ end
51
+
52
+ def identifier_output_method_default
53
+ nil
54
+ end
55
+
56
+ def locks
57
+ dataset.from(:v_monitor__locks)
58
+ end
59
+
60
+ def tables(options = {} )
61
+ schema = options[:schema]
62
+ filter = {}
63
+ filter[:table_schema] = schema.to_s if schema
64
+
65
+ ds = dataset.select(:table_name).from(:v_catalog__tables).
66
+ filter(filter)
67
+
68
+ ds.to_a.map{ |h| h[:table_name].to_sym }
69
+ end
70
+
71
+ def schema_parse_table(table_name, options = {})
72
+ schema = options[:schema]
73
+
74
+ selector = [:column_name, :constraint_name, :is_nullable.as(:allow_null),
75
+ (:column_default).as(:default), (:data_type).as(:db_type)]
76
+ filter = { :table_name => table_name }
77
+ filter [:table_schema] = schema.to_s if schema
78
+
79
+ dataset = metadata_dataset.select(*selector).filter(filter).
80
+ from(:v_catalog__columns).left_outer_join(:v_catalog__table_constraints, :table_id => :table_id)
81
+
82
+ dataset.map do |row|
83
+ row[:default] = nil if blank_object?(row[:default])
84
+ row[:type] = schema_column_type(row[:db_type])
85
+ row[:primary_key] = row.delete(:constraint_name) == PK_NAME
86
+ [row.delete(:column_name).to_sym, row]
87
+ end
88
+ end
89
+
90
+ end
91
+
92
+ class Dataset < Sequel::Dataset
93
+ Database::DatasetClass = self
94
+ EXPLAIN = 'EXPLAIN '
95
+ EXPLAIN_LOCAL = 'EXPLAIN LOCAL '
96
+ QUERY_PLAN = 'QUERY PLAN'
97
+
98
+ def fetch_rows(sql)
99
+ execute(sql) do |row|
100
+ @columns ||= row.keys
101
+ yield row
102
+ end
103
+ end
104
+
105
+ def explain(opts={})
106
+ execute((opts[:local] ? EXPLAIN_LOCAL : EXPLAIN) + select_sql).map{ |k, v| k == QUERY_PLAN }.join("\$")
107
+ end
108
+ end
109
+ end
110
+ end
@@ -0,0 +1,21 @@
1
+ # -*- encoding: utf-8 -*-
2
+ require File.expand_path('../lib/sequel-vertica/version', __FILE__)
3
+
4
+ Gem::Specification.new do |gem|
5
+ gem.authors = ["Camilo Lopez"]
6
+ gem.email = ["camilo@camilolopez.com"]
7
+ gem.description = %q{Sequel adapter for the Vertica database}
8
+ gem.summary = %q{Sequel adapter for the Vertica database largely based on the PostgreSQL adapter}
9
+ gem.homepage = ""
10
+
11
+ gem.add_development_dependency "rspec"
12
+ gem.add_runtime_dependency "sequel"
13
+ gem.add_runtime_dependency "vertica"
14
+
15
+ gem.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
16
+ gem.files = `git ls-files`.split("\n")
17
+ gem.test_files = `git ls-files -- {spec}/*`.split("\n")
18
+ gem.name = "sequel-vertica"
19
+ gem.require_paths = ["lib"]
20
+ gem.version = Sequel::Vertica::VERSION
21
+ end
@@ -0,0 +1,54 @@
1
+ require 'rubygems'
2
+ require 'logger'
3
+ unless Object.const_defined?('Sequel')
4
+ $:.unshift(File.join(File.dirname(File.expand_path(__FILE__)), "../../lib/"))
5
+ require 'sequel'
6
+ end
7
+ begin
8
+ require File.join(File.dirname(File.dirname(File.expand_path(__FILE__))), 'spec_config.rb')
9
+ rescue LoadError
10
+ end
11
+
12
+ if ENV['SEQUEL_COLUMNS_INTROSPECTION']
13
+ Sequel.extension :columns_introspection
14
+ Sequel::Dataset.introspect_all_columns
15
+ end
16
+
17
+ Sequel::Model.cache_anonymous_models = false
18
+
19
+ class Sequel::Database
20
+ def log_duration(duration, message)
21
+ log_info(message)
22
+ end
23
+ end
24
+
25
+ (defined?(RSpec) ? RSpec::Core::ExampleGroup : Spec::Example::ExampleGroup).class_eval do
26
+ def log
27
+ begin
28
+ INTEGRATION_DB.loggers << Logger.new(STDOUT)
29
+ yield
30
+ ensure
31
+ INTEGRATION_DB.loggers.pop
32
+ end
33
+ end
34
+
35
+ def self.cspecify(message, *checked, &block)
36
+ return specify(message, &block) if ENV['SEQUEL_NO_PENDING']
37
+ pending = false
38
+ checked.each do |c|
39
+ case c
40
+ when INTEGRATION_DB.adapter_scheme
41
+ pending = c
42
+ when Proc
43
+ pending = c if c.first.call(INTEGRATION_DB)
44
+ when Array
45
+ pending = c if c.first == INTEGRATION_DB.adapter_scheme && c.last == INTEGRATION_DB.call(INTEGRATION_DB)
46
+ end
47
+ end
48
+ if pending
49
+ specify(message){pending("Not yet working on #{Array(pending).join(', ')}", &block)}
50
+ else
51
+ specify(message, &block)
52
+ end
53
+ end
54
+ end
@@ -0,0 +1,284 @@
1
+ require File.join(File.dirname(File.expand_path(__FILE__)), 'spec_helper.rb')
2
+
3
+ unless defined?(VERTICA_DB)
4
+ VERTICA_URL = 'vertica://vertica:vertica@localhost:5432/reality_spec' unless defined? VERTICA_URL
5
+ VERTICA_DB = Sequel.connect(ENV['SEQUEL_VERTICA_SPEC_DB']||VERTICA_URL)
6
+ end
7
+ INTEGRATION_DB = VERTICA_DB unless defined?(INTEGRATION_DB)
8
+
9
+ def VERTICA_DB.sqls
10
+ (@sqls ||= [])
11
+ end
12
+
13
+
14
+ VERTICA_DB.create_table! :test do
15
+ varchar :name
16
+ integer :value
17
+ end
18
+ VERTICA_DB.create_table! :test2 do
19
+ varchar :name
20
+ integer :value
21
+ end
22
+ VERTICA_DB.create_table! :test3 do
23
+ integer :value
24
+ timestamp :time
25
+ end
26
+ VERTICA_DB.create_table! :test4 do
27
+ varchar :name, :size => 20
28
+ bytea :value
29
+ end
30
+
31
+ describe "A Vertica database" do
32
+
33
+ before do
34
+ @db = VERTICA_DB
35
+ end
36
+
37
+ specify "should correctly parse the schema" do
38
+ @db.schema(:test3, :reload=>true).should == [
39
+ [:value, {:type=>:integer, :allow_null=>true, :default=>nil, :ruby_default=>nil, :db_type=>"int", :primary_key=>false}],
40
+ [:time, {:type=>:datetime, :allow_null=>true, :default=>nil, :ruby_default=>nil, :db_type=>"timestamp", :primary_key=>false}]
41
+ ]
42
+ @db.schema(:test4, :reload=>true).should == [
43
+ [:name, {:type=>:string, :allow_null=>true, :default=>nil, :ruby_default=>nil, :db_type=>"varchar(20)", :primary_key=>false}],
44
+ [:value, {:type=>:blob, :allow_null=>true, :default=>nil, :ruby_default=>nil, :db_type=>"varbinary(80)", :primary_key=>false}]
45
+ ]
46
+ end
47
+
48
+ end
49
+
50
+ describe "A vertica dataset" do
51
+ before do
52
+ @d = VERTICA_DB[:test]
53
+ @d.delete if @d.count > 0 # Vertica will throw an error if the table has just been created and does not have a super projection yet.
54
+ end
55
+
56
+ specify "should quote columns and tables using double quotes if quoting identifiers" do
57
+ @d.select(:name).sql.should == \
58
+ 'SELECT "name" FROM "test"'
59
+
60
+ @d.select('COUNT(*)'.lit).sql.should == \
61
+ 'SELECT COUNT(*) FROM "test"'
62
+
63
+ @d.select(:max.sql_function(:value)).sql.should == \
64
+ 'SELECT max("value") FROM "test"'
65
+
66
+ @d.select(:NOW.sql_function).sql.should == \
67
+ 'SELECT NOW() FROM "test"'
68
+
69
+ @d.select(:max.sql_function(:items__value)).sql.should == \
70
+ 'SELECT max("items"."value") FROM "test"'
71
+
72
+ @d.order(:name.desc).sql.should == \
73
+ 'SELECT * FROM "test" ORDER BY "name" DESC'
74
+
75
+ @d.select('test.name AS item_name'.lit).sql.should == \
76
+ 'SELECT test.name AS item_name FROM "test"'
77
+
78
+ @d.select('"name"'.lit).sql.should == \
79
+ 'SELECT "name" FROM "test"'
80
+
81
+ @d.select('max(test."name") AS "max_name"'.lit).sql.should == \
82
+ 'SELECT max(test."name") AS "max_name" FROM "test"'
83
+
84
+ @d.insert_sql(:x => :y).should =~ \
85
+ /\AINSERT INTO "test" \("x"\) VALUES \("y"\)( RETURNING NULL)?\z/
86
+
87
+ end
88
+
89
+ specify "should quote fields correctly when reversing the order if quoting identifiers" do
90
+ @d.reverse_order(:name).sql.should == \
91
+ 'SELECT * FROM "test" ORDER BY "name" DESC'
92
+
93
+ @d.reverse_order(:name.desc).sql.should == \
94
+ 'SELECT * FROM "test" ORDER BY "name" ASC'
95
+
96
+ @d.reverse_order(:name, :test.desc).sql.should == \
97
+ 'SELECT * FROM "test" ORDER BY "name" DESC, "test" ASC'
98
+
99
+ @d.reverse_order(:name.desc, :test).sql.should == \
100
+ 'SELECT * FROM "test" ORDER BY "name" ASC, "test" DESC'
101
+ end
102
+
103
+ specify "should support regexps" do
104
+ @d << {:name => 'abc', :value => 1}
105
+ @d << {:name => 'bcd', :value => 2}
106
+
107
+ @d.filter(:name => /bc/).count.should == 2
108
+ @d.filter(:name => /^bc/).count.should == 1
109
+ end
110
+
111
+ end
112
+
113
+
114
+ describe "A Vertica dataset with a timestamp field" do
115
+ before do
116
+ @db = VERTICA_DB
117
+ @d = @db[:test3]
118
+ @d.delete if @d.count > 0 # Vertica will throw an error if the table has just been created and does not have a super projection yet.
119
+ end
120
+ after do
121
+ @db.convert_infinite_timestamps = false if @db.adapter_scheme == :postgres
122
+ end
123
+
124
+ cspecify "should store milliseconds in time fields for Time objects", :do, :swift do
125
+ t = Time.now
126
+ @d << {:value=>1, :time=>t}
127
+ t2 = @d[:value =>1][:time]
128
+ @d.literal(t2).should == @d.literal(t)
129
+ t2.strftime('%Y-%m-%d %H:%M:%S').should == t.strftime('%Y-%m-%d %H:%M:%S')
130
+ (t2.is_a?(Time) ? t2.usec : t2.strftime('%N').to_i/1000).should == t.usec
131
+ end
132
+
133
+ cspecify "should store milliseconds in time fields for DateTime objects", :do, :swift do
134
+ t = DateTime.now
135
+ @d << {:value=>1, :time=>t}
136
+ t2 = @d[:value =>1][:time]
137
+ @d.literal(t2).should == @d.literal(t)
138
+ t2.strftime('%Y-%m-%d %H:%M:%S').should == t.strftime('%Y-%m-%d %H:%M:%S')
139
+ (t2.is_a?(Time) ? t2.usec : t2.strftime('%N').to_i/1000).should == t.strftime('%N').to_i/1000
140
+ end
141
+
142
+ describe "Verticas's EXPLAIN and EXPLAIN LOCAL" do
143
+ specify "should not raise errors" do
144
+ @d = VERTICA_DB[:test3]
145
+ proc{@d.explain}.should_not raise_error
146
+ proc{@d.explain(:local => true)}.should_not raise_error
147
+ end
148
+ end
149
+
150
+ end
151
+
152
+
153
+ describe "A Vertica database" do
154
+ before do
155
+ @db = VERTICA_DB
156
+ end
157
+
158
+ specify "should support column operations" do
159
+ @db.create_table!(:test2){varchar :name; integer :value}
160
+ @db[:test2] << {}
161
+ @db[:test2].columns.should == [:name, :value]
162
+
163
+ @db.add_column :test2, :xyz, :varchar, :default => '000'
164
+ @db[:test2].columns.should == [:name, :value, :xyz]
165
+ @db[:test2] << {:name => 'mmm', :value => 111}
166
+ @db[:test2].first[:xyz].should == '000'
167
+
168
+ @db[:test2].columns.should == [:name, :value, :xyz]
169
+ proc{ @db.drop_column :test2, :xyz }.should raise_error(Vertica::Error::QueryError,
170
+ /ALTER TABLE DROP COLUMN not supported/)
171
+
172
+ @db[:test2].columns.should ==[:name, :value, :xyz]
173
+
174
+ @db[:test2].delete
175
+ @db.add_column :test2, :xyz2, :varchar, :default => '000'
176
+ @db[:test2] << {:name => 'mmm', :value => 111, :xyz2 => 'qqqq'}
177
+
178
+ @db[:test2].columns.should == [:name, :value, :xyz, :xyz2]
179
+ @db.rename_column :test2, :xyz, :zyx
180
+ @db[:test2].columns.should == [:name, :value, :zyx, :xyz2]
181
+ @db[:test2].first[:xyz2].should == 'qqqq'
182
+
183
+ @db.add_column :test2, :xyz, :float
184
+ @db[:test2].delete
185
+ @db[:test2] << {:name => 'mmm', :value => 111, :xyz => 56.78}
186
+
187
+ proc{ @db.set_column_type :test2, :xyz, :integer }.should raise_error(Vertica::Error::QueryError,
188
+ /ALTER TABLE ALTER COLUMN not supported/)
189
+ end
190
+
191
+ specify "#locks should be a dataset returning database locks " do
192
+ @db.locks.should be_a_kind_of(Sequel::Dataset)
193
+ @db.locks.all.should be_a_kind_of(Array)
194
+ end
195
+ end
196
+
197
+ describe "Vertica::Dataset#insert" do
198
+ before do
199
+ @db = VERTICA_DB
200
+ @db.create_table!(:test5){ :xid; Integer :value}
201
+ @db.sqls.clear
202
+ @ds = @db[:test5]
203
+ end
204
+
205
+ after do
206
+ @db.drop_table?(:test5)
207
+ end
208
+
209
+ specify "should work with static SQL" do
210
+ @ds.with_sql('INSERT INTO test5 (value) VALUES (10)').insert.should == 1
211
+ @db['INSERT INTO test5 (value) VALUES (20)'].insert.should == 1
212
+ @ds.all.should == [{:value=>10}, {:value=>20}]
213
+ end
214
+
215
+ specify "should insert correctly if using a column array and a value array" do
216
+ @ds.insert([:value], [10]).should == 1
217
+ @ds.all.should == [{:value=>10}]
218
+ end
219
+ end
220
+
221
+ describe "Vertica::Database schema qualified tables" do
222
+ before do
223
+ VERTICA_DB << "CREATE SCHEMA schema_test"
224
+ VERTICA_DB.instance_variable_set(:@primary_keys, {})
225
+ VERTICA_DB.instance_variable_set(:@primary_key_sequences, {})
226
+ end
227
+
228
+ after do
229
+ VERTICA_DB << "DROP SCHEMA schema_test CASCADE"
230
+ VERTICA_DB.default_schema = nil
231
+ end
232
+
233
+ specify "should be able to create, drop, select and insert into tables in a given schema" do
234
+ VERTICA_DB.create_table(:schema_test__table_in_schema_test){integer :i}
235
+ VERTICA_DB[:schema_test__table_in_schema_test].first.should == nil
236
+ VERTICA_DB[:schema_test__table_in_schema_test].insert(:i=>1).should == 1
237
+ VERTICA_DB[:schema_test__table_in_schema_test].first.should == {:i=>1}
238
+ VERTICA_DB.from('schema_test.table_in_schema_test'.lit).first.should == {:i=>1}
239
+ VERTICA_DB.drop_table(:schema_test__table_in_schema_test)
240
+ VERTICA_DB.create_table(:table_in_schema_test.qualify(:schema_test)){integer :i}
241
+ VERTICA_DB[:schema_test__table_in_schema_test].first.should == nil
242
+ VERTICA_DB.from('schema_test.table_in_schema_test'.lit).first.should == nil
243
+ VERTICA_DB.drop_table(:table_in_schema_test.qualify(:schema_test))
244
+ end
245
+
246
+ specify "#tables should not include tables in a default non-public schema" do
247
+ VERTICA_DB.create_table(:schema_test__table_in_schema_test){integer :i}
248
+ VERTICA_DB.tables.should include(:table_in_schema_test)
249
+ VERTICA_DB.tables.should_not include(:tables)
250
+ VERTICA_DB.tables.should_not include(:columns)
251
+ VERTICA_DB.tables.should_not include(:locks)
252
+ VERTICA_DB.tables.should_not include(:domain_udt_usage)
253
+ end
254
+
255
+ specify "#tables should return tables in the schema provided by the :schema argument" do
256
+ VERTICA_DB.create_table(:schema_test__table_in_schema_test){integer :i}
257
+ VERTICA_DB.tables(:schema=>:schema_test).should == [:table_in_schema_test]
258
+ end
259
+
260
+ specify "#schema should not include columns from tables in a default non-public schema" do
261
+ VERTICA_DB.create_table(:schema_test__domains){integer :i}
262
+ sch = VERTICA_DB.schema(:domains)
263
+ cs = sch.map{|x| x.first}
264
+ cs.should include(:i)
265
+ cs.should_not include(:data_type)
266
+ end
267
+
268
+ specify "#schema should only include columns from the table in the given :schema argument" do
269
+ VERTICA_DB.create_table!(:domains){integer :d}
270
+ VERTICA_DB.create_table(:schema_test__domains){integer :i}
271
+ sch = VERTICA_DB.schema(:domains, :schema=>:schema_test)
272
+ cs = sch.map{|x| x.first}
273
+ cs.should include(:i)
274
+ cs.should_not include(:d)
275
+ VERTICA_DB.drop_table(:domains)
276
+ end
277
+
278
+
279
+ specify "#table_exists? should see if the table is in a given schema" do
280
+ VERTICA_DB.create_table(:schema_test__schema_test){integer :i}
281
+ VERTICA_DB.table_exists?(:schema_test__schema_test).should == true
282
+ end
283
+
284
+ end
@@ -0,0 +1 @@
1
+ VERTICA_URL = 'vertica://dbadmin:@192.168.56.101:5433/warehouse'
File without changes
metadata ADDED
@@ -0,0 +1,90 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: sequel-vertica
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Camilo Lopez
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2012-05-06 00:00:00.000000000Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: rspec
16
+ requirement: &70287178230020 !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
21
+ version: '0'
22
+ type: :development
23
+ prerelease: false
24
+ version_requirements: *70287178230020
25
+ - !ruby/object:Gem::Dependency
26
+ name: sequel
27
+ requirement: &70287178229280 !ruby/object:Gem::Requirement
28
+ none: false
29
+ requirements:
30
+ - - ! '>='
31
+ - !ruby/object:Gem::Version
32
+ version: '0'
33
+ type: :runtime
34
+ prerelease: false
35
+ version_requirements: *70287178229280
36
+ - !ruby/object:Gem::Dependency
37
+ name: vertica
38
+ requirement: &70287178228620 !ruby/object:Gem::Requirement
39
+ none: false
40
+ requirements:
41
+ - - ! '>='
42
+ - !ruby/object:Gem::Version
43
+ version: '0'
44
+ type: :runtime
45
+ prerelease: false
46
+ version_requirements: *70287178228620
47
+ description: Sequel adapter for the Vertica database
48
+ email:
49
+ - camilo@camilolopez.com
50
+ executables: []
51
+ extensions: []
52
+ extra_rdoc_files: []
53
+ files:
54
+ - .gitignore
55
+ - Gemfile
56
+ - Rakefile
57
+ - Readme.md
58
+ - lib/sequel-vertica.rb
59
+ - lib/sequel-vertica/version.rb
60
+ - lib/sequel/adapters/vertica.rb
61
+ - sequel-vertica.gemspec
62
+ - spec/adapters/spec_helper.rb
63
+ - spec/adapters/vertica_spec.rb
64
+ - spec/spec_config.example.rb
65
+ - spec/spec_helper.rb
66
+ homepage: ''
67
+ licenses: []
68
+ post_install_message:
69
+ rdoc_options: []
70
+ require_paths:
71
+ - lib
72
+ required_ruby_version: !ruby/object:Gem::Requirement
73
+ none: false
74
+ requirements:
75
+ - - ! '>='
76
+ - !ruby/object:Gem::Version
77
+ version: '0'
78
+ required_rubygems_version: !ruby/object:Gem::Requirement
79
+ none: false
80
+ requirements:
81
+ - - ! '>='
82
+ - !ruby/object:Gem::Version
83
+ version: '0'
84
+ requirements: []
85
+ rubyforge_project:
86
+ rubygems_version: 1.8.10
87
+ signing_key:
88
+ specification_version: 3
89
+ summary: Sequel adapter for the Vertica database largely based on the PostgreSQL adapter
90
+ test_files: []