File tree Expand file tree Collapse file tree 2 files changed +28
-2
lines changed
lib/schema_plus_pg_indexes/middleware/postgresql Expand file tree Collapse file tree 2 files changed +28
-2
lines changed Original file line number Diff line number Diff line change @@ -12,11 +12,24 @@ def before(env)
1212 env . options [ proper ] = env . options . delete ( deprecated )
1313 end
1414 end
15+
16+ case env . caller . class . name
17+ when /TableDefinition/
18+ # When index creation is in table definition, create a dummy value for column_names,
19+ # since index definitions are indexed by column names
20+ env . column_names = dummy_column_names ( env ) if env . column_names . blank?
21+ else
22+ # For actual index creation, strip out the dummy column name
23+ # value
24+ env . column_names = [ ] if env . column_names == dummy_column_names ( env )
25+ end
1526 end
16- end
1727
28+ def dummy_column_names ( env )
29+ [ "--expression--" , env . options [ :expression ] ]
30+ end
31+ end
1832 end
1933 end
2034 end
2135end
22-
Original file line number Diff line number Diff line change @@ -22,6 +22,19 @@ class User < ::ActiveRecord::Base ; end
2222 expect ( User . indexes . first . name ) . to eq ( "no_column" )
2323 end
2424
25+ it "defines two indexes with expression only" do
26+ define_schema do
27+ create_table :users do |t |
28+ t . string :one
29+ t . string :two
30+ t . index :expression => "upper(one)" , name : "index_one"
31+ t . index :expression => "upper(two)" , name : "index_two"
32+ end
33+ end
34+ expect ( User . indexes . map ( &:name ) ) . to eq ( [ "index_one" , "index_two" ] )
35+ expect ( User . indexes . map ( &:expression ) ) . to eq ( [ "upper((one)::text)" , "upper((two)::text)" ] )
36+ end
37+
2538 it "defines index with expression as column option" do
2639 define_schema do
2740 create_table :users do |t |
You can’t perform that action at this time.
0 commit comments