@@ -12,16 +12,29 @@ class VirtualColumn < ActiveRecord::Base
1212
1313 def setup
1414 @connection = ActiveRecord ::Base . lease_connection
15- @connection . create_table :virtual_columns , force : true do |t |
16- t . string :name
17- t . virtual :upper_name , type : :string , as : "UPPER(name)" , stored : true
18- t . virtual :name_length , type : :integer , as : "LENGTH(name)" , stored : true
19- t . virtual :name_octet_length , type : :integer , as : "OCTET_LENGTH(name)" , stored : true
20- t . integer :column1
21- t . virtual :column2 , type : :integer , as : "column1 + 1" , stored : true
22- t . virtual :column3 , type : :integer , as : "column1 + 2" , stored : false # only if PostgreSQL >= 18.0
23- t . virtual :column4 , type : :integer , as : "column1 + 3" # only if PostgreSQL >= 18.0
15+ if @connection . database_version >= 18_000
16+ @connection . create_table :virtual_columns , force : true do |t |
17+ t . string :name
18+ t . virtual :upper_name , type : :string , as : "UPPER(name)" , stored : true
19+ t . virtual :name_length , type : :integer , as : "LENGTH(name)" , stored : true
20+ t . virtual :name_octet_length , type : :integer , as : "OCTET_LENGTH(name)" , stored : true
21+ t . integer :column1
22+ t . virtual :column2 , type : :integer , as : "column1 + 1" , stored : true
23+ t . virtual :column3 , type : :integer , as : "column1 + 2" , stored : false # only if PostgreSQL >= 18.0
24+ t . virtual :column4 , type : :integer , as : "column1 + 3" # only if PostgreSQL >= 18.0
25+ t . virtual :invalid_definition , type : :string , as : "LOWER(name)" , stored : true # only if PostgreSQL >= 18.0
26+ end
27+ else
28+ @connection . create_table :virtual_columns , force : true do |t |
29+ t . string :name
30+ t . virtual :upper_name , type : :string , as : "UPPER(name)" , stored : true
31+ t . virtual :name_length , type : :integer , as : "LENGTH(name)" , stored : true
32+ t . virtual :name_octet_length , type : :integer , as : "OCTET_LENGTH(name)" , stored : true
33+ t . integer :column1
34+ t . virtual :column2 , type : :integer , as : "column1 + 1" , stored : true
35+ end
2436 end
37+
2538 VirtualColumn . create ( name : "Rails" )
2639 end
2740
@@ -108,8 +121,10 @@ def test_schema_dumping
108121 assert_match ( /t\. virtual\s +"name_length",\s +type: :integer,\s +as: "length\( \( name\) ::text\) ", stored: true$/i , output )
109122 assert_match ( /t\. virtual\s +"name_octet_length",\s +type: :integer,\s +as: "octet_length\( \( name\) ::text\) ", stored: true$/i , output )
110123 assert_match ( /t\. virtual\s +"column2",\s +type: :integer,\s +as: "\( column1 \+ 1\) ", stored: true$/i , output )
111- assert_match ( /t\. virtual\s +"column3",\s +type: :integer,\s +as: "\( column1 \+ 2\) ", stored: false$/i , output )
112- assert_match ( /t\. virtual\s +"column4",\s +type: :integer,\s +as: "\( column1 \+ 3\) ", stored: false$/i , output )
124+ if ActiveRecord ::Base . lease_connection . database_version >= 18_000
125+ assert_match ( /t\. virtual\s +"column3",\s +type: :integer,\s +as: "\( column1 \+ 2\) ", stored: false$/i , output )
126+ assert_match ( /t\. virtual\s +"column4",\s +type: :integer,\s +as: "\( column1 \+ 3\) ", stored: false$/i , output )
127+ end
113128 end
114129
115130 def test_build_fixture_sql
0 commit comments