sequel-vertica 0.1.0 → 0.2.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.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 224357ab7df2bccbf853e1a34c7bc5f6b1c89ebb
4
+ data.tar.gz: 2480bc67b31e77b8291d2fa3198f8c0bbe1bc074
5
+ SHA512:
6
+ metadata.gz: 2e5f8fd7028e06c8d0e7e5d78eb60a237f490adff29fea5dff4c42e718f614e50a666c83d02c8bb049130c60b62a16784e12cbfbc694427663e1bea0b5d742ab
7
+ data.tar.gz: 672e91d04cd326dfa20f961f268a675381565a44a6cc44ea6b260c83983924143fe3b7b37ec3207f47c277809a3e5618e9118b77c9e17913d616aaf35482bcc0
data/.rspec ADDED
@@ -0,0 +1 @@
1
+ --color --format doc
data/.travis.yml ADDED
@@ -0,0 +1,19 @@
1
+ language: ruby
2
+ rvm:
3
+ - 1.9.3
4
+ - 2.0.0
5
+ - 2.1.1
6
+
7
+ before_install:
8
+ - sudo wget -nv https://s3.amazonaws.com/circle-support-bucket/vertica_7.0.1-0_amd64.deb
9
+ - sudo dpkg -i vertica_7.0.1-0_amd64.deb
10
+ - sudo /opt/vertica/sbin/install_vertica --failure-threshold HALT --accept-eula --dba-user-password dbadmin --license CE -s localhost
11
+ - sudo -u dbadmin /opt/vertica/bin/adminTools -t create_db --database ci -s localhost -p dbadmin
12
+ # - sudo -u dbadmin openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /home/dbadmin/ci/v_ci_node0001_catalog/server.key -out /home/dbadmin/ci/v_ci_node0001_catalog/server.crt -batch
13
+ # - sudo -u dbadmin chmod 600 /home/dbadmin/ci/v_ci_node0001_catalog/server.key /home/dbadmin/ci/v_ci_node0001_catalog/server.crt
14
+ # - sudo -u dbadmin /opt/vertica/bin/adminTools -t stop_db --database ci -p dbadmin
15
+ # - sudo -u dbadmin sh -c 'echo "EnableSSL = 1" > /home/dbadmin/ci/v_ci_node0001_catalog/vertica.conf'
16
+ # - sudo -u dbadmin /opt/vertica/bin/adminTools -t start_db --database ci -p dbadmin
17
+
18
+ before_script:
19
+ - cp ./spec/spec_config.example.rb ./spec/spec_config.rb
@@ -1,9 +1,9 @@
1
- ## Sequel-vertica
1
+ # Sequel-vertica [![Build Status](https://travis-ci.org/camilo/sequel-vertica.svg?branch=travis)](https://travis-ci.org/camilo/sequel-vertica)
2
2
 
3
3
  A third party adapter to use Vertica through sequel, most of the actual work is
4
4
  done by sequel and the vertica gem.
5
5
 
6
- # Usage
6
+ ## Usage
7
7
 
8
8
  The usage is straight forward as any other Sequel adapter, just make sure to
9
9
  require sequel and the sequel-vertica gem.
@@ -1,5 +1,5 @@
1
1
  module Sequel
2
2
  module Vertica
3
- VERSION = "0.1.0"
3
+ VERSION = "0.2.0"
4
4
  end
5
5
  end
@@ -1,6 +1,7 @@
1
1
  require 'vertica'
2
2
 
3
3
  module Sequel
4
+ extension :core_extensions
4
5
  module Vertica
5
6
 
6
7
  class CreateTableGenerator < Sequel::Schema::CreateTableGenerator
@@ -18,7 +19,7 @@ module Sequel
18
19
 
19
20
  class Database < Sequel::Database
20
21
 
21
- ::Vertica::Connection.send(:alias_method,:execute, :query)
22
+ ::Vertica::Connection.send(:alias_method, :execute, :query)
22
23
 
23
24
  PK_NAME = 'C_PRIMARY'
24
25
  AUTO_INCREMENT = 'AUTO_INCREMENT'
@@ -33,7 +34,8 @@ module Sequel
33
34
  :port => opts[:port],
34
35
  :schema => opts[:schema],
35
36
  :database => opts[:database],
36
- :ssl => opts[:ssl] )
37
+ :ssl => opts[:ssl]
38
+ )
37
39
  end
38
40
 
39
41
  def execute(sql, opts = {}, &block)
@@ -86,27 +88,31 @@ module Sequel
86
88
  Vertica::CreateTableGenerator
87
89
  end
88
90
 
89
- def tables(options = {} )
91
+ def tables(options = {})
90
92
  schema = options[:schema]
91
93
  filter = {}
92
94
  filter[:table_schema] = schema.to_s if schema
93
95
 
94
- ds = dataset.select(:table_name).from(:v_catalog__tables).
95
- filter(filter)
96
-
97
- ds.to_a.map{ |h| h[:table_name].to_sym }
96
+ dataset.select(:table_name).
97
+ from(:v_catalog__tables).
98
+ filter(filter).
99
+ to_a.
100
+ map { |h| h[:table_name].to_sym }
98
101
  end
99
102
 
100
103
  def schema_parse_table(table_name, options = {})
101
104
  schema = options[:schema]
102
105
 
103
- selector = [:column_name, :constraint_name, :is_nullable.as(:allow_null),
106
+ selector = [:column_name, :constraint_name, :is_nullable.as(:allow_null),
104
107
  (:column_default).as(:default), (:data_type).as(:db_type)]
105
- filter = { :table_name => table_name }
106
- filter[:table_schema] = schema.to_s if schema
108
+ filter = { :columns__table_name => table_name }
109
+ filter[:columns__table_schema] = schema.to_s if schema
107
110
 
108
- dataset = metadata_dataset.select(*selector).filter(filter).
109
- from(:v_catalog__columns).left_outer_join(:v_catalog__table_constraints, :table_id => :table_id)
111
+ dataset = metadata_dataset.
112
+ select(*selector).
113
+ filter(filter).
114
+ from(:v_catalog__columns).
115
+ left_outer_join(:v_catalog__table_constraints, :table_id => :table_id)
110
116
 
111
117
  dataset.map do |row|
112
118
  row[:default] = nil if blank_object?(row[:default])
@@ -115,32 +121,30 @@ module Sequel
115
121
  [row.delete(:column_name).to_sym, row]
116
122
  end
117
123
  end
118
-
119
124
  end
120
125
 
121
126
  class Dataset < Sequel::Dataset
122
127
  Database::DatasetClass = self
123
128
  EXPLAIN = 'EXPLAIN '
124
129
  EXPLAIN_LOCAL = 'EXPLAIN LOCAL '
125
- QUERY_PLAN = 'QUERY PLAN'
130
+ QUERY_PLAN = 'QUERY PLAN'
126
131
 
127
132
  def columns
128
133
  return @columns if @columns
129
- ds = unfiltered.unordered.clone(:distinct => nil, :limit => 0, :offset=>nil)
134
+ ds = unfiltered.unordered.clone(:distinct => nil, :limit => 0, :offset => nil)
130
135
  res = @db.execute(ds.select_sql)
131
136
  @columns = res.columns.map { |c| c.name }
132
137
  @columns
133
138
  end
134
139
 
135
-
136
140
  def fetch_rows(sql)
137
- execute(sql) do |row|
138
- yield row
141
+ execute(sql) do |row|
142
+ yield row
139
143
  end
140
144
  end
141
145
 
142
146
  def explain(opts={})
143
- execute((opts[:local] ? EXPLAIN_LOCAL : EXPLAIN) + select_sql).map{ |k, v| k == QUERY_PLAN }.join("\$")
147
+ execute((opts[:local] ? EXPLAIN_LOCAL : EXPLAIN) + select_sql).map { |k, v| k == QUERY_PLAN }.join("\$")
144
148
  end
145
149
 
146
150
  def supports_regexp?
@@ -2,22 +2,28 @@
2
2
  require File.expand_path('../lib/sequel-vertica/version', __FILE__)
3
3
 
4
4
  Gem::Specification.new do |gem|
5
+ gem.name = "sequel-vertica"
6
+ gem.version = Sequel::Vertica::VERSION
7
+
5
8
  gem.authors = ["Camilo Lopez"]
6
9
  gem.email = ["camilo@camilolopez.com"]
7
10
  gem.description = %q{Sequel adapter for the Vertica database}
8
11
  gem.summary = %q{Sequel adapter for the Vertica database largely based on the PostgreSQL adapter}
9
12
  gem.homepage = "https://github.com/camilo/sequel-vertica"
13
+ gem.license = "MIT"
10
14
 
11
15
  gem.requirements = "Vertica version 6.0 or higher"
16
+ gem.required_ruby_version = '>= 1.9.3'
12
17
 
13
- gem.add_development_dependency "rspec"
14
- gem.add_runtime_dependency "sequel", "~> 3.42.0"
15
- gem.add_runtime_dependency "vertica", "~> 0.10.0"
18
+ gem.add_runtime_dependency "sequel", "~> 4.9.0"
19
+ gem.add_runtime_dependency "vertica", "~> 0.11.0"
20
+
21
+ gem.add_development_dependency "rake", ">= 10"
22
+ gem.add_development_dependency "rspec" , "~> 2.14"
16
23
 
17
24
  gem.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
18
25
  gem.files = `git ls-files`.split("\n")
19
26
  gem.test_files = `git ls-files -- {spec}/*`.split("\n")
20
- gem.name = "sequel-vertica"
27
+
21
28
  gem.require_paths = ["lib"]
22
- gem.version = Sequel::Vertica::VERSION
23
29
  end
@@ -1,4 +1,4 @@
1
- require File.join(File.dirname(File.expand_path(__FILE__)), 'spec_helper.rb')
1
+ require 'spec_helper'
2
2
 
3
3
  unless defined?(VERTICA_DB)
4
4
  VERTICA_URL = 'vertica://vertica:vertica@localhost:5432/reality_spec' unless defined? VERTICA_URL
@@ -28,7 +28,7 @@ VERTICA_DB.create_table! :test4 do
28
28
  bytea :value
29
29
  end
30
30
 
31
- describe "A Vertica database" do
31
+ describe "A Vertica database" do
32
32
 
33
33
  before do
34
34
  @db = VERTICA_DB
@@ -67,7 +67,7 @@ describe "A vertica dataset" do
67
67
  @d.select(:name).sql.should == \
68
68
  'SELECT "name" FROM "test"'
69
69
 
70
- @d.select('COUNT(*)'.lit).sql.should == \
70
+ @d.select(Sequel.lit('COUNT(*)')).sql.should == \
71
71
  'SELECT COUNT(*) FROM "test"'
72
72
 
73
73
  @d.select(:max.sql_function(:value)).sql.should == \
@@ -82,13 +82,13 @@ describe "A vertica dataset" do
82
82
  @d.order(:name.desc).sql.should == \
83
83
  'SELECT * FROM "test" ORDER BY "name" DESC'
84
84
 
85
- @d.select('test.name AS item_name'.lit).sql.should == \
85
+ @d.select(Sequel.lit('test.name AS item_name')).sql.should == \
86
86
  'SELECT test.name AS item_name FROM "test"'
87
87
 
88
- @d.select('"name"'.lit).sql.should == \
88
+ @d.select(Sequel.lit('"name"')).sql.should == \
89
89
  'SELECT "name" FROM "test"'
90
90
 
91
- @d.select('max(test."name") AS "max_name"'.lit).sql.should == \
91
+ @d.select(Sequel.lit('max(test."name") AS "max_name"')).sql.should == \
92
92
  'SELECT max(test."name") AS "max_name" FROM "test"'
93
93
 
94
94
  @d.insert_sql(:x => :y).should =~ \
@@ -239,7 +239,6 @@ describe "Vertica::Database schema qualified tables" do
239
239
 
240
240
  after do
241
241
  VERTICA_DB << "DROP SCHEMA schema_test CASCADE"
242
- VERTICA_DB.default_schema = nil
243
242
  end
244
243
 
245
244
  specify "should be able to create, drop, select and insert into tables in a given schema" do
@@ -247,11 +246,11 @@ describe "Vertica::Database schema qualified tables" do
247
246
  VERTICA_DB[:schema_test__table_in_schema_test].first.should == nil
248
247
  VERTICA_DB[:schema_test__table_in_schema_test].insert(:i=>1).should == 1
249
248
  VERTICA_DB[:schema_test__table_in_schema_test].first.should == {:i=>1}
250
- VERTICA_DB.from('schema_test.table_in_schema_test'.lit).first.should == {:i=>1}
249
+ VERTICA_DB.from(Sequel.lit('schema_test.table_in_schema_test')).first.should == {:i=>1}
251
250
  VERTICA_DB.drop_table(:schema_test__table_in_schema_test)
252
251
  VERTICA_DB.create_table(:table_in_schema_test.qualify(:schema_test)){integer :i}
253
252
  VERTICA_DB[:schema_test__table_in_schema_test].first.should == nil
254
- VERTICA_DB.from('schema_test.table_in_schema_test'.lit).first.should == nil
253
+ VERTICA_DB.from(Sequel.lit('schema_test.table_in_schema_test')).first.should == nil
255
254
  VERTICA_DB.drop_table(:table_in_schema_test.qualify(:schema_test))
256
255
  end
257
256
 
@@ -1 +1 @@
1
- VERTICA_URL = 'vertica://dbadmin:@127.0.0.1:5433/warehouse'
1
+ VERTICA_URL = 'vertica://dbadmin:dbadmin@127.0.0.1:5433/ci'
data/spec/spec_helper.rb CHANGED
@@ -0,0 +1,55 @@
1
+ require 'rubygems'
2
+ require 'logger'
3
+ require 'sequel'
4
+
5
+ begin
6
+ require 'spec_config'
7
+ rescue LoadError
8
+ $stderr.puts "Please create a file spec/spec_config.rb with a database connection string."
9
+ raise
10
+ end
11
+
12
+ if ENV['SEQUEL_COLUMNS_INTROSPECTION']
13
+ Sequel.extension :columns_introspection
14
+ Sequel::Dataset.introspect_all_columns
15
+ end
16
+
17
+
18
+ Sequel.cache_anonymous_models = false
19
+
20
+ class Sequel::Database
21
+ def log_duration(duration, message)
22
+ log_info(message)
23
+ end
24
+ end
25
+
26
+ (defined?(RSpec) ? RSpec::Core::ExampleGroup : Spec::Example::ExampleGroup).class_eval do
27
+ def log
28
+ begin
29
+ INTEGRATION_DB.loggers << Logger.new(STDOUT)
30
+ yield
31
+ ensure
32
+ INTEGRATION_DB.loggers.pop
33
+ end
34
+ end
35
+
36
+ def self.cspecify(message, *checked, &block)
37
+ return specify(message, &block) if ENV['SEQUEL_NO_PENDING']
38
+ pending = false
39
+ checked.each do |c|
40
+ case c
41
+ when INTEGRATION_DB.adapter_scheme
42
+ pending = c
43
+ when Proc
44
+ pending = c if c.first.call(INTEGRATION_DB)
45
+ when Array
46
+ pending = c if c.first == INTEGRATION_DB.adapter_scheme && c.last == INTEGRATION_DB.call(INTEGRATION_DB)
47
+ end
48
+ end
49
+ if pending
50
+ specify(message){pending("Not yet working on #{Array(pending).join(', ')}", &block)}
51
+ else
52
+ specify(message, &block)
53
+ end
54
+ end
55
+ end
metadata CHANGED
@@ -1,64 +1,71 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sequel-vertica
3
3
  version: !ruby/object:Gem::Version
4
- prerelease:
5
- version: 0.1.0
4
+ version: 0.2.0
6
5
  platform: ruby
7
6
  authors:
8
7
  - Camilo Lopez
9
8
  autorequire:
10
9
  bindir: bin
11
10
  cert_chain: []
12
- date: 2013-04-11 00:00:00.000000000 Z
11
+ date: 2014-04-14 00:00:00.000000000 Z
13
12
  dependencies:
14
13
  - !ruby/object:Gem::Dependency
14
+ name: sequel
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ~>
18
+ - !ruby/object:Gem::Version
19
+ version: 4.9.0
20
+ type: :runtime
15
21
  prerelease: false
16
- name: rspec
17
- type: :development
18
22
  version_requirements: !ruby/object:Gem::Requirement
19
23
  requirements:
20
- - - ! '>='
24
+ - - ~>
21
25
  - !ruby/object:Gem::Version
22
- version: '0'
23
- none: false
26
+ version: 4.9.0
27
+ - !ruby/object:Gem::Dependency
28
+ name: vertica
24
29
  requirement: !ruby/object:Gem::Requirement
25
30
  requirements:
26
- - - ! '>='
31
+ - - ~>
27
32
  - !ruby/object:Gem::Version
28
- version: '0'
29
- none: false
30
- - !ruby/object:Gem::Dependency
31
- prerelease: false
32
- name: sequel
33
+ version: 0.11.0
33
34
  type: :runtime
35
+ prerelease: false
34
36
  version_requirements: !ruby/object:Gem::Requirement
35
37
  requirements:
36
38
  - - ~>
37
39
  - !ruby/object:Gem::Version
38
- version: 3.42.0
39
- none: false
40
+ version: 0.11.0
41
+ - !ruby/object:Gem::Dependency
42
+ name: rake
40
43
  requirement: !ruby/object:Gem::Requirement
41
44
  requirements:
42
- - - ~>
45
+ - - '>='
43
46
  - !ruby/object:Gem::Version
44
- version: 3.42.0
45
- none: false
46
- - !ruby/object:Gem::Dependency
47
+ version: '10'
48
+ type: :development
47
49
  prerelease: false
48
- name: vertica
49
- type: :runtime
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
- - - ~>
52
+ - - '>='
53
53
  - !ruby/object:Gem::Version
54
- version: 0.10.0
55
- none: false
54
+ version: '10'
55
+ - !ruby/object:Gem::Dependency
56
+ name: rspec
56
57
  requirement: !ruby/object:Gem::Requirement
57
58
  requirements:
58
59
  - - ~>
59
60
  - !ruby/object:Gem::Version
60
- version: 0.10.0
61
- none: false
61
+ version: '2.14'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ~>
67
+ - !ruby/object:Gem::Version
68
+ version: '2.14'
62
69
  description: Sequel adapter for the Vertica database
63
70
  email:
64
71
  - camilo@camilolopez.com
@@ -67,47 +74,43 @@ extensions: []
67
74
  extra_rdoc_files: []
68
75
  files:
69
76
  - .gitignore
77
+ - .rspec
78
+ - .travis.yml
70
79
  - CHANGELOG
71
80
  - Gemfile
81
+ - README.md
72
82
  - Rakefile
73
- - Readme.md
74
83
  - lib/sequel-vertica.rb
75
84
  - lib/sequel-vertica/version.rb
76
85
  - lib/sequel/adapters/vertica.rb
77
86
  - sequel-vertica.gemspec
78
- - spec/adapters/spec_helper.rb
79
87
  - spec/adapters/vertica_spec.rb
80
88
  - spec/spec_config.example.rb
81
89
  - spec/spec_helper.rb
82
90
  homepage: https://github.com/camilo/sequel-vertica
83
- licenses: []
91
+ licenses:
92
+ - MIT
93
+ metadata: {}
84
94
  post_install_message:
85
95
  rdoc_options: []
86
96
  require_paths:
87
97
  - lib
88
98
  required_ruby_version: !ruby/object:Gem::Requirement
89
99
  requirements:
90
- - - ! '>='
100
+ - - '>='
91
101
  - !ruby/object:Gem::Version
92
- segments:
93
- - 0
94
- hash: 2330074690303578723
95
- version: '0'
96
- none: false
102
+ version: 1.9.3
97
103
  required_rubygems_version: !ruby/object:Gem::Requirement
98
104
  requirements:
99
- - - ! '>='
105
+ - - '>='
100
106
  - !ruby/object:Gem::Version
101
- segments:
102
- - 0
103
- hash: 2330074690303578723
104
107
  version: '0'
105
- none: false
106
108
  requirements:
107
109
  - Vertica version 6.0 or higher
108
110
  rubyforge_project:
109
- rubygems_version: 1.8.23
111
+ rubygems_version: 2.0.14
110
112
  signing_key:
111
- specification_version: 3
113
+ specification_version: 4
112
114
  summary: Sequel adapter for the Vertica database largely based on the PostgreSQL adapter
113
115
  test_files: []
116
+ has_rdoc:
@@ -1,57 +0,0 @@
1
- require 'rubygems'
2
- require 'logger'
3
-
4
- unless Object.const_defined?('Sequel') && Sequel.const_defined?('Model')
5
- $:.unshift(File.join(File.dirname(File.expand_path(__FILE__)), "../../lib/"))
6
- require 'sequel'
7
- end
8
-
9
- begin
10
- require File.join(File.dirname(File.dirname(File.expand_path(__FILE__))), 'spec_config.rb')
11
- rescue LoadError
12
- end
13
-
14
- if ENV['SEQUEL_COLUMNS_INTROSPECTION']
15
- Sequel.extension :columns_introspection
16
- Sequel::Dataset.introspect_all_columns
17
- end
18
-
19
-
20
- Sequel::Model.cache_anonymous_models = false
21
-
22
- class Sequel::Database
23
- def log_duration(duration, message)
24
- log_info(message)
25
- end
26
- end
27
-
28
- (defined?(RSpec) ? RSpec::Core::ExampleGroup : Spec::Example::ExampleGroup).class_eval do
29
- def log
30
- begin
31
- INTEGRATION_DB.loggers << Logger.new(STDOUT)
32
- yield
33
- ensure
34
- INTEGRATION_DB.loggers.pop
35
- end
36
- end
37
-
38
- def self.cspecify(message, *checked, &block)
39
- return specify(message, &block) if ENV['SEQUEL_NO_PENDING']
40
- pending = false
41
- checked.each do |c|
42
- case c
43
- when INTEGRATION_DB.adapter_scheme
44
- pending = c
45
- when Proc
46
- pending = c if c.first.call(INTEGRATION_DB)
47
- when Array
48
- pending = c if c.first == INTEGRATION_DB.adapter_scheme && c.last == INTEGRATION_DB.call(INTEGRATION_DB)
49
- end
50
- end
51
- if pending
52
- specify(message){pending("Not yet working on #{Array(pending).join(', ')}", &block)}
53
- else
54
- specify(message, &block)
55
- end
56
- end
57
- end