schema_plus_pg_indexes 0.1.1 → 0.1.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: ab9e97841907e541e956b5913588e9da67ac61a3
4
- data.tar.gz: 24f847eed723f93c188de98e38bdf32380a1b681
3
+ metadata.gz: b2b5b828916853a511caa4f8b19f8a7e79fe8442
4
+ data.tar.gz: 5ff7110ccc48476917619787863700670b89c0f7
5
5
  SHA512:
6
- metadata.gz: 7b37d277f416c7bbbcafe1228cf0e96d8d7cc11f10d3e880076c587eef9a2d0d9e159091ed7d69f372bea5cc752d86e01796ea7019eabbc67c16ea27413c0f42
7
- data.tar.gz: c162ca9beb5865f541193730ba48d1bb28566c8a874cbc45fe851b60ee4521d6e3f7c1488e9f7b0a6898669b8fc1fa88cb8ad04d223d4fd46ed13d97a77a5448
6
+ metadata.gz: bbab6a29c45ba788aaf81951efa439b3e9ce2f4de676db318393a1edf08fdeea3e3d3d0098cbe986e912ef6381f20e5850829235e3d097abc52522e7a1abbdd8
7
+ data.tar.gz: 9ab3c857047c7e6627e3d0888aef4c9b6060f63810e72c2994d05673eb659d52deeb243a98535e9f3861a8780af5a4663dd299b5f7fd53c3fe300299a5eab065
data/.travis.yml CHANGED
@@ -8,7 +8,7 @@ rvm:
8
8
  - 1.9.3
9
9
  - 2.1.5
10
10
  gemfile:
11
- - gemfiles/rails-4.2/Gemfile.postgresql
11
+ - gemfiles/activerecord-4.2/Gemfile.postgresql
12
12
  env: POSTGRESQL_DB_USER=postgres
13
13
  addons:
14
14
  postgresql: '9.3'
data/Gemfile CHANGED
@@ -1,3 +1,5 @@
1
1
  source "http://rubygems.org"
2
2
 
3
3
  gemspec
4
+
5
+ File.exist?(gemfile_local = File.expand_path('../Gemfile.local', __FILE__)) and eval File.read(gemfile_local), binding, gemfile_local
data/README.md CHANGED
@@ -33,11 +33,25 @@ schema_plus_pg_indexes is tested on
33
33
 
34
34
  <!-- SCHEMA_DEV: MATRIX - begin -->
35
35
  <!-- These lines are auto-generated by schema_dev based on schema_dev.yml -->
36
- * ruby **1.9.3** with rails **4.2**, using **postgresql**
37
- * ruby **2.1.5** with rails **4.2**, using **postgresql**
36
+ * ruby **1.9.3** with activerecord **4.2**, using **postgresql**
37
+ * ruby **2.1.5** with activerecord **4.2**, using **postgresql**
38
38
 
39
39
  <!-- SCHEMA_DEV: MATRIX - end -->
40
40
 
41
+ ## Deprecations
42
+
43
+ SchemaPlus 1.8.x provided some options and accessors that are now available
44
+ in rails 4.2, in slightly different form. SchemaPlusPgIndexes supports the
45
+ SchemaPlus 1.8.x form but issues deprecation warnings in favor of the rails
46
+ form:
47
+
48
+ * Index definition deprecates these options:
49
+ * `:conditions` => `:where`
50
+ * `:kind` => `:using`
51
+
52
+ * `IndexDefinition` deprecates accessors:
53
+ * `#conditions` in favor of `#where`
54
+ * `#kind` in favor of `#using.to_s`
41
55
 
42
56
  ## History
43
57
 
@@ -1,3 +1,3 @@
1
1
  eval File.read File.expand_path('../../Gemfile.base', __FILE__)
2
2
 
3
- gem "rails", "~> 4.2.0"
3
+ gem "activerecord", "~> 4.2.0"
@@ -3,15 +3,10 @@ module SchemaPlusPgIndexes
3
3
  module Postgresql
4
4
  module Dumper
5
5
 
6
- def self.insert
7
- SchemaMonkey::Middleware::Dumper::Indexes.append DumpExtensions
8
- SchemaMonkey::Middleware::Dumper::Table.append InlineIndexes
9
- end
10
-
11
- class DumpExtensions < SchemaMonkey::Middleware::Base
12
- def call(env)
13
- continue env
6
+ module Indexes
14
7
 
8
+ # Dump index extensions
9
+ def after(env)
15
10
  index_defs = Dumper.get_index_defiinitions(env, env.table)
16
11
 
17
12
  env.table.indexes.each do |index_dump|
@@ -32,10 +27,10 @@ module SchemaPlusPgIndexes
32
27
  end
33
28
  end
34
29
 
35
- class InlineIndexes < SchemaMonkey::Middleware::Base
36
- def call(env)
37
- continue env
30
+ module Table
38
31
 
32
+ # Move index definitions inline
33
+ def after(env)
39
34
  index_defs = Dumper.get_index_defiinitions(env, env.table)
40
35
 
41
36
  env.table.indexes.select(&its.columns.blank?).each do |index|
@@ -7,19 +7,20 @@ module SchemaPlusPgIndexes
7
7
  SchemaMonkey::Middleware::Migration::IndexComponentsSql.append DefineExtensions
8
8
  end
9
9
 
10
- class DeprecateArgs < SchemaMonkey::Middleware::Base
11
- def call(env)
10
+ module Index
11
+ # Deprecate args
12
+ def before(env)
12
13
  {:conditions => :where, :kind => :using}.each do |deprecated, proper|
13
14
  if env.options[deprecated]
14
15
  ActiveSupport::Deprecation.warn "ActiveRecord index option #{deprecated.inspect} is deprecated, use #{proper.inspect} instead"
15
16
  env.options[proper] = env.options.delete(deprecated)
16
17
  end
17
18
  end
18
- continue env
19
19
  end
20
20
  end
21
21
 
22
- class DefineExtensions < SchemaMonkey::Middleware::Base
22
+ module IndexComponentsSql
23
+
23
24
  # SchemaPlusPgIndexes provides the following extra options for PostgreSQL
24
25
  # indexes:
25
26
  # * +:expression+ - SQL expression to index. column_name can be nil or ommitted, in which case :name must be provided
@@ -33,7 +34,7 @@ module SchemaPlusPgIndexes
33
34
  # using <tt>:expression</tt>, this raises an ArgumentError if both
34
35
  # are specified simultaneously.
35
36
  #
36
- def call(env)
37
+ def around(env)
37
38
  options = env.options
38
39
  column_names = env.column_names
39
40
  table_name = env.table_name
@@ -61,7 +62,7 @@ module SchemaPlusPgIndexes
61
62
  end
62
63
  end
63
64
 
64
- continue env
65
+ yield env
65
66
 
66
67
  if operator_classes and not operator_classes.is_a? Hash
67
68
  operator_classes = Hash[column_names.map {|name| [name, operator_classes]}]
@@ -2,11 +2,7 @@ module SchemaPlusPgIndexes
2
2
  module Middleware
3
3
  module Postgresql
4
4
  module Query
5
- def self.insert
6
- SchemaMonkey::Middleware::Query::Indexes.append LookupExtensions
7
- end
8
-
9
- class LookupExtensions < SchemaMonkey::Middleware::Base
5
+ module Indexes
10
6
 
11
7
  def get_opclass_names(env, opclasses)
12
8
  @opclass_names ||= {}
@@ -21,7 +17,7 @@ module SchemaPlusPgIndexes
21
17
  end
22
18
  end
23
19
 
24
- def call(env)
20
+ def implement(env)
25
21
  # Ideally we'd let AR do its stuff and then add the extras.
26
22
  #
27
23
  # But one of the extras is expressions. AR completely strips out
@@ -38,24 +34,21 @@ module SchemaPlusPgIndexes
38
34
  # query we have the opportunity to handle tables of the form
39
35
  # 'namespace.tablename'
40
36
  #
41
- # So, we use our code and DO NOT DO:
42
- #
43
- # continue env
44
- #
45
- result = env.connection.query(<<-SQL, 'SCHEMA')
37
+ # So, this replacs the AR implementation
46
38
 
47
- SELECT distinct i.relname, d.indisunique, d.indkey, pg_get_indexdef(d.indexrelid), t.oid,
48
- m.amname, pg_get_expr(d.indpred, t.oid) as conditions, pg_get_expr(d.indexprs, t.oid) as expression,
49
- d.indclass
50
- FROM pg_class t
51
- INNER JOIN pg_index d ON t.oid = d.indrelid
52
- INNER JOIN pg_class i ON d.indexrelid = i.oid
53
- INNER JOIN pg_am m ON i.relam = m.oid
54
- WHERE i.relkind = 'i'
55
- AND d.indisprimary = 'f'
56
- AND t.relname = '#{table_name_without_namespace(env.table_name)}'
57
- AND i.relnamespace IN (SELECT oid FROM pg_namespace WHERE nspname = #{namespace_sql(env.table_name)} )
58
- ORDER BY i.relname
39
+ result = env.connection.query(<<-SQL, 'SCHEMA')
40
+ SELECT distinct i.relname, d.indisunique, d.indkey, pg_get_indexdef(d.indexrelid), t.oid,
41
+ m.amname, pg_get_expr(d.indpred, t.oid) as conditions, pg_get_expr(d.indexprs, t.oid) as expression,
42
+ d.indclass
43
+ FROM pg_class t
44
+ INNER JOIN pg_index d ON t.oid = d.indrelid
45
+ INNER JOIN pg_class i ON d.indexrelid = i.oid
46
+ INNER JOIN pg_am m ON i.relam = m.oid
47
+ WHERE i.relkind = 'i'
48
+ AND d.indisprimary = 'f'
49
+ AND t.relname = '#{table_name_without_namespace(env.table_name)}'
50
+ AND i.relnamespace IN (SELECT oid FROM pg_namespace WHERE nspname = #{namespace_sql(env.table_name)} )
51
+ ORDER BY i.relname
59
52
  SQL
60
53
 
61
54
  env.index_definitions += result.map do |(index_name, unique, indkey, inddef, oid, using, conditions, expression, indclass)|
@@ -63,10 +56,10 @@ module SchemaPlusPgIndexes
63
56
  opclasses = indclass.split(" ")
64
57
 
65
58
  rows = env.connection.query(<<-SQL, 'SCHEMA')
66
- SELECT CAST(a.attnum as VARCHAR), a.attname, t.typname
67
- FROM pg_attribute a
68
- INNER JOIN pg_type t ON a.atttypid = t.oid
69
- WHERE a.attrelid = #{oid}
59
+ SELECT CAST(a.attnum as VARCHAR), a.attname, t.typname
60
+ FROM pg_attribute a
61
+ INNER JOIN pg_type t ON a.atttypid = t.oid
62
+ WHERE a.attrelid = #{oid}
70
63
  SQL
71
64
  columns = {}
72
65
  types = {}
@@ -1,3 +1,3 @@
1
1
  module SchemaPlusPgIndexes
2
- VERSION = "0.1.1"
2
+ VERSION = "0.1.2"
3
3
  end
data/schema_dev.yml CHANGED
@@ -1,7 +1,7 @@
1
1
  ruby:
2
2
  - 1.9.3
3
3
  - 2.1.5
4
- rails:
4
+ activerecord:
5
5
  - 4.2
6
6
  db:
7
7
  - postgresql
@@ -18,13 +18,13 @@ Gem::Specification.new do |spec|
18
18
  spec.require_paths = ["lib"]
19
19
 
20
20
  spec.add_dependency "activerecord", "~> 4.2"
21
- spec.add_dependency "schema_monkey", "~> 0.3"
21
+ spec.add_dependency "schema_monkey", "~> 1.0", ">= 1.0.1"
22
22
  spec.add_dependency "schema_plus_indexes", "~> 0.1"
23
23
 
24
24
  spec.add_development_dependency "bundler", "~> 1.7"
25
25
  spec.add_development_dependency "rake", "~> 10.0"
26
26
  spec.add_development_dependency "rspec", "~> 3.0.0"
27
- spec.add_development_dependency "schema_dev", "~> 2.0", ">= 2.0.3"
27
+ spec.add_development_dependency "schema_dev", "~> 3.0"
28
28
  spec.add_development_dependency "simplecov"
29
29
  spec.add_development_dependency "simplecov-gem-profile"
30
30
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: schema_plus_pg_indexes
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.1.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - ronen barzel
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-01-26 00:00:00.000000000 Z
11
+ date: 2015-02-03 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activerecord
@@ -30,14 +30,20 @@ dependencies:
30
30
  requirements:
31
31
  - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: '0.3'
33
+ version: '1.0'
34
+ - - ">="
35
+ - !ruby/object:Gem::Version
36
+ version: 1.0.1
34
37
  type: :runtime
35
38
  prerelease: false
36
39
  version_requirements: !ruby/object:Gem::Requirement
37
40
  requirements:
38
41
  - - "~>"
39
42
  - !ruby/object:Gem::Version
40
- version: '0.3'
43
+ version: '1.0'
44
+ - - ">="
45
+ - !ruby/object:Gem::Version
46
+ version: 1.0.1
41
47
  - !ruby/object:Gem::Dependency
42
48
  name: schema_plus_indexes
43
49
  requirement: !ruby/object:Gem::Requirement
@@ -100,20 +106,14 @@ dependencies:
100
106
  requirements:
101
107
  - - "~>"
102
108
  - !ruby/object:Gem::Version
103
- version: '2.0'
104
- - - ">="
105
- - !ruby/object:Gem::Version
106
- version: 2.0.3
109
+ version: '3.0'
107
110
  type: :development
108
111
  prerelease: false
109
112
  version_requirements: !ruby/object:Gem::Requirement
110
113
  requirements:
111
114
  - - "~>"
112
115
  - !ruby/object:Gem::Version
113
- version: '2.0'
114
- - - ">="
115
- - !ruby/object:Gem::Version
116
- version: 2.0.3
116
+ version: '3.0'
117
117
  - !ruby/object:Gem::Dependency
118
118
  name: simplecov
119
119
  requirement: !ruby/object:Gem::Requirement
@@ -156,8 +156,8 @@ files:
156
156
  - README.md
157
157
  - Rakefile
158
158
  - gemfiles/Gemfile.base
159
- - gemfiles/rails-4.2/Gemfile.base
160
- - gemfiles/rails-4.2/Gemfile.postgresql
159
+ - gemfiles/activerecord-4.2/Gemfile.base
160
+ - gemfiles/activerecord-4.2/Gemfile.postgresql
161
161
  - lib/schema_plus_pg_indexes.rb
162
162
  - lib/schema_plus_pg_indexes/active_record/connection_adapters/index_definition.rb
163
163
  - lib/schema_plus_pg_indexes/middleware/postgresql/dumper.rb