|
2 | 2 |
|
3 | 3 | class StringDefault < ActiveRecord::Base; end;
|
4 | 4 | class SqlServerEdgeSchema < ActiveRecord::Base; end;
|
| 5 | +class SqlServerEdgeSchema < ActiveRecord::Base |
| 6 | + attr_accessor :new_id_setting |
| 7 | + before_create :set_new_id |
| 8 | + protected |
| 9 | + def set_new_id |
| 10 | + self[:guid_newid] ||= connection.newid_function if new_id_setting |
| 11 | + end |
| 12 | +end |
5 | 13 |
|
6 | 14 | class SpecificSchemaTestSqlserver < ActiveRecord::TestCase
|
7 | 15 |
|
@@ -91,7 +99,45 @@ class SpecificSchemaTestSqlserver < ActiveRecord::TestCase
|
91 | 99 |
|
92 | 100 | end
|
93 | 101 |
|
| 102 | + context 'with uniqueidentifier column' do |
| 103 | + |
| 104 | + setup do |
| 105 | + @newid = ActiveRecord::Base.connection.newid_function |
| 106 | + assert_guid @newid |
| 107 | + end |
| 108 | + |
| 109 | + should 'allow a simple insert and read of a column without a default function' do |
| 110 | + obj = @edge_class.create! :guid => @newid |
| 111 | + assert_equal @newid, @edge_class.find(obj.id).guid |
| 112 | + end |
| 113 | + |
| 114 | + should 'record the default function name in the column definition but still show a nil real default, will use one day for insert/update' do |
| 115 | + newid_column = @edge_class.columns_hash['guid_newid'] |
| 116 | + assert newid_column.default_function.present? |
| 117 | + assert_nil newid_column.default |
| 118 | + assert_equal 'newid()', newid_column.default_function |
| 119 | + newseqid_column = @edge_class.columns_hash['guid_newseqid'] |
| 120 | + assert newseqid_column.default_function.present? |
| 121 | + assert_nil newseqid_column.default |
| 122 | + assert_equal 'newsequentialid()', newseqid_column.default_function |
| 123 | + end |
| 124 | + |
| 125 | + should 'use model callback to set get a new guid' do |
| 126 | + obj = @edge_class.new |
| 127 | + obj.new_id_setting = true |
| 128 | + obj.save! |
| 129 | + assert_guid obj.guid_newid |
| 130 | + end |
| 131 | + |
| 132 | + end |
| 133 | + |
94 | 134 | end
|
95 | 135 |
|
96 | 136 |
|
| 137 | + protected |
| 138 | + |
| 139 | + def assert_guid(guid) |
| 140 | + assert_match %r|\w{8}-\w{4}-\w{4}-\w{4}-\w{12}|, guid |
| 141 | + end |
| 142 | + |
97 | 143 | end
|
0 commit comments