ardm-migrations 1.2.1 → 1.3.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +8 -0
- data/examples/Rakefile +1 -1
- data/lib/dm-migrations/adapters/dm-do-adapter.rb +7 -2
- data/lib/dm-migrations/adapters/dm-sqlserver-adapter.rb +2 -2
- data/lib/dm-migrations/adapters/dm-yaml-adapter.rb +2 -3
- data/lib/dm-migrations/auto_migration.rb +2 -3
- data/lib/dm-migrations/migration.rb +20 -0
- data/lib/dm-migrations/sql/mysql.rb +21 -0
- data/lib/dm-migrations/sql/postgres.rb +4 -0
- data/lib/dm-migrations/sql/sqlite.rb +5 -1
- data/lib/dm-migrations/sql/table_modifier.rb +1 -1
- data/lib/dm-migrations/version.rb +1 -1
- data/spec/integration/migration_spec.rb +4 -0
- data/spec/integration/sql_spec.rb +42 -5
- data/spec/unit/migration_spec.rb +16 -0
- data/tasks/db.rake +11 -0
- metadata +2 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 97d660536f5688e8e542243fff240640fc79e7da
|
4
|
+
data.tar.gz: 97555cdcf0f6bbd6c47564d89f3dc38ab033ac83
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f234a045be1464d4c866687526dcf1cf92d543d6e4eda98d45d4819699325c36a76d7eda56e1d250f9afc98c4baff267db186edd6c7f04a9ff32159e232aac7b
|
7
|
+
data.tar.gz: eda55ad74db16e83868f0305fe4651db9ca70db62fc45c731c624ac5da3c51943e9957b7ce395362c92055f17bb6de53aa8d83662872ed62261398fe29b8b2c4
|
data/README.md
CHANGED
@@ -1,3 +1,11 @@
|
|
1
|
+
[![Gem Version](https://badge.fury.io/rb/ardm-migrations.png)][gem]
|
2
|
+
[![Build Status](https://travis-ci.org/ar-dm/ardm-migrations.png?branch=master)][travis]
|
3
|
+
[![Dependency Status](https://gemnasium.com/ar-dm/ardm-migrations.png?travis)][gemnasium]
|
4
|
+
|
5
|
+
[gem]: https://rubygems.org/gems/ardm-migrations
|
6
|
+
[travis]: https://travis-ci.org/ar-dm/ardm-migrations
|
7
|
+
[gemnasium]: https://gemnasium.com/ar-dm/ardm-migrations
|
8
|
+
|
1
9
|
# ardm-migrations
|
2
10
|
|
3
11
|
A fork of [`dm-migrations`](https://github.com/datamapper/dm-migrations).
|
data/examples/Rakefile
CHANGED
@@ -202,7 +202,7 @@ module DataMapper
|
|
202
202
|
|
203
203
|
schema_primitive = schema[:primitive]
|
204
204
|
|
205
|
-
if primitive == String && schema_primitive != 'TEXT' && schema_primitive != 'CLOB' && schema_primitive != 'NVARCHAR'
|
205
|
+
if primitive == String && schema_primitive != 'TEXT' && schema_primitive != 'CLOB' && schema_primitive != 'NVARCHAR' && schema_primitive != 'BYTEA'
|
206
206
|
schema[:length] = property.length
|
207
207
|
elsif primitive == BigDecimal || primitive == Float
|
208
208
|
schema[:precision] = property.precision
|
@@ -238,8 +238,13 @@ module DataMapper
|
|
238
238
|
statement << "(#{connection.quote_value(length)})"
|
239
239
|
end
|
240
240
|
|
241
|
-
|
241
|
+
default = schema[:default]
|
242
|
+
if default
|
243
|
+
statement << " DEFAULT #{connection.quote_value(default)}"
|
244
|
+
end
|
245
|
+
|
242
246
|
statement << ' NOT NULL' unless schema[:allow_nil]
|
247
|
+
|
243
248
|
statement
|
244
249
|
end
|
245
250
|
|
@@ -22,8 +22,8 @@ module DataMapper
|
|
22
22
|
|
23
23
|
# @api semipublic
|
24
24
|
def field_exists?(storage_name, field_name)
|
25
|
-
result = select("SELECT c.name FROM sysobjects as o JOIN syscolumns AS c ON o.id = c.id WHERE o.name =
|
26
|
-
result ? result.
|
25
|
+
result = select("SELECT c.name FROM sysobjects as o JOIN syscolumns AS c ON o.id = c.id WHERE o.name = ? AND c.name LIKE ?", storage_name, field_name).first
|
26
|
+
result ? result.to_s == field_name.to_s : false
|
27
27
|
end
|
28
28
|
|
29
29
|
module SQL #:nodoc:
|
@@ -7,9 +7,8 @@ module DataMapper
|
|
7
7
|
|
8
8
|
def self.included(base)
|
9
9
|
DataMapper.extend(Migrations::SingletonMethods)
|
10
|
-
|
11
|
-
|
12
|
-
end
|
10
|
+
DataMapper::Repository.send(:include, Migrations::Repository)
|
11
|
+
DataMapper::Model.send(:include, Migrations::Model)
|
13
12
|
end
|
14
13
|
|
15
14
|
# @api semipublic
|
@@ -184,9 +184,8 @@ module DataMapper
|
|
184
184
|
|
185
185
|
def self.include_migration_api
|
186
186
|
DataMapper.extend(SingletonMethods)
|
187
|
-
|
188
|
-
|
189
|
-
end
|
187
|
+
DataMapper::Repository.send(:include, Repository)
|
188
|
+
DataMapper::Model.send(:include, Model)
|
190
189
|
DataMapper::Model.append_extensions(Model)
|
191
190
|
Adapters::AbstractAdapter.descendants.each do |adapter_class|
|
192
191
|
Adapters.include_migration_api(DataMapper::Inflector.demodulize(adapter_class.name))
|
@@ -138,6 +138,26 @@ module DataMapper
|
|
138
138
|
end
|
139
139
|
end
|
140
140
|
|
141
|
+
#
|
142
|
+
# Execute raw SQL and return a result set.
|
143
|
+
#
|
144
|
+
# @param [String] sql
|
145
|
+
# The raw SQL statement.
|
146
|
+
#
|
147
|
+
# @param [Array] bind_values
|
148
|
+
# Additional values to bind to the statement.
|
149
|
+
#
|
150
|
+
# @return [Array<Struct>]
|
151
|
+
# The result set.
|
152
|
+
#
|
153
|
+
# @since 1.3.0
|
154
|
+
#
|
155
|
+
def select(sql, *bind_values)
|
156
|
+
say_with_time(sql) do
|
157
|
+
adapter.select(sql, *bind_values)
|
158
|
+
end
|
159
|
+
end
|
160
|
+
|
141
161
|
def create_table(table_name, opts = {}, &block)
|
142
162
|
execute TableCreator.new(adapter, table_name, opts, &block).to_sql
|
143
163
|
end
|
@@ -41,6 +41,27 @@ module SQL
|
|
41
41
|
"ALTER TABLE #{quote_name(name)} MODIFY COLUMN #{column.to_sql}"
|
42
42
|
end
|
43
43
|
|
44
|
+
def rename_column_type_statement(table_name, old_col, new_col)
|
45
|
+
table = quote_name(table_name)
|
46
|
+
column_info = select("SHOW COLUMNS FROM #{table} LIKE ?", old_col).first
|
47
|
+
|
48
|
+
column_options = {
|
49
|
+
:name => column_info.field,
|
50
|
+
:primitive => column_info.type,
|
51
|
+
:serial => column_info.extra == 'auto_increment',
|
52
|
+
:allow_nil => column_info.null == 'YES',
|
53
|
+
:default => column_info.default,
|
54
|
+
}
|
55
|
+
|
56
|
+
column = with_connection do |connection|
|
57
|
+
property_schema_statement(connection, column_options)
|
58
|
+
end
|
59
|
+
|
60
|
+
column_definition = column.split(' ', 2).last
|
61
|
+
|
62
|
+
"ALTER TABLE #{table} CHANGE #{quote_name(old_col)} #{quote_name(new_col)} #{column_definition}"
|
63
|
+
end
|
64
|
+
|
44
65
|
class Table
|
45
66
|
def initialize(adapter, table_name)
|
46
67
|
@columns = []
|
@@ -40,6 +40,10 @@ module SQL
|
|
40
40
|
"ALTER TABLE #{quote_name(name)} ALTER COLUMN #{column.to_sql}"
|
41
41
|
end
|
42
42
|
|
43
|
+
def rename_column_type_statement(table_name, old_col, new_col)
|
44
|
+
"ALTER TABLE #{quote_name(table_name)} RENAME COLUMN #{quote_name(old_col)} TO #{quote_name(new_col)}"
|
45
|
+
end
|
46
|
+
|
43
47
|
class Table < SQL::Table
|
44
48
|
def initialize(adapter, table_name)
|
45
49
|
@adapter, @name = adapter, table_name
|
@@ -34,7 +34,7 @@ module SQL
|
|
34
34
|
|
35
35
|
def rename_column(name, new_name, opts = {})
|
36
36
|
# raise NotImplemented for SQLite3
|
37
|
-
@statements <<
|
37
|
+
@statements << @adapter.rename_column_type_statement(table_name, name, new_name)
|
38
38
|
end
|
39
39
|
|
40
40
|
def change_column(name, type, opts = {})
|
@@ -123,6 +123,10 @@ describe "A Migration" do
|
|
123
123
|
@migration.should respond_to(:execute)
|
124
124
|
end
|
125
125
|
|
126
|
+
it "should make available an #select method" do
|
127
|
+
@migration.should respond_to(:select)
|
128
|
+
end
|
129
|
+
|
126
130
|
it "should run the sql passed into the #execute method"
|
127
131
|
# TODO: Find out how to stub the DataMapper::database.execute method
|
128
132
|
end
|
@@ -131,23 +131,60 @@ describe "SQL generation" do
|
|
131
131
|
describe DataMapper::Migration, "#modify_table helper" do
|
132
132
|
before do
|
133
133
|
@migration = DataMapper::Migration.new(1, :create_people_table, :verbose => false) { }
|
134
|
-
|
135
134
|
end
|
136
135
|
|
137
136
|
it "should have a #modify_table helper" do
|
138
137
|
@migration.should respond_to(:modify_table)
|
139
138
|
end
|
140
139
|
|
141
|
-
|
142
|
-
when :postgres
|
140
|
+
describe '#change_column' do
|
143
141
|
before do
|
144
142
|
@modifier = DataMapper::Migration::TableModifier.new(@adapter, :people) do
|
145
143
|
change_column :name, 'VARCHAR(200)'
|
146
144
|
end
|
147
145
|
end
|
148
146
|
|
149
|
-
|
150
|
-
|
147
|
+
case DataMapper::Spec.adapter_name.to_sym
|
148
|
+
when :mysql
|
149
|
+
it 'alters the column' do
|
150
|
+
@modifier.to_sql.should == %q{ALTER TABLE `people` MODIFY COLUMN `name` VARCHAR(200)}
|
151
|
+
end
|
152
|
+
when :postgres
|
153
|
+
it 'alters the column' do
|
154
|
+
@modifier.to_sql.should == %q{ALTER TABLE "people" ALTER COLUMN "name" VARCHAR(200)}
|
155
|
+
end
|
156
|
+
end
|
157
|
+
end
|
158
|
+
|
159
|
+
describe "#rename_column" do
|
160
|
+
case DataMapper::Spec.adapter_name.to_sym
|
161
|
+
when :postgres
|
162
|
+
before do
|
163
|
+
@modifier = DataMapper::Migration::TableModifier.new(@adapter, :people) do
|
164
|
+
rename_column :name, :first_name
|
165
|
+
end
|
166
|
+
end
|
167
|
+
|
168
|
+
it "should rename the column" do
|
169
|
+
@modifier.to_sql.should == %q{ALTER TABLE "people" RENAME COLUMN "name" TO "first_name"}
|
170
|
+
end
|
171
|
+
when :mysql
|
172
|
+
before do
|
173
|
+
# create the table so the existing column schema can be instrospected
|
174
|
+
@adapter.execute("CREATE TABLE `people` (name VARCHAR(50) DEFAULT 'John' NOT NULL)")
|
175
|
+
|
176
|
+
@modifier = DataMapper::Migration::TableModifier.new(@adapter, :people) do
|
177
|
+
rename_column :name, :first_name
|
178
|
+
end
|
179
|
+
end
|
180
|
+
|
181
|
+
after do
|
182
|
+
@adapter.execute('DROP TABLE `people`')
|
183
|
+
end
|
184
|
+
|
185
|
+
it "should change the column" do
|
186
|
+
@modifier.to_sql.should == %q{ALTER TABLE `people` CHANGE `name` `first_name` varchar(50) DEFAULT 'John' NOT NULL}
|
187
|
+
end
|
151
188
|
end
|
152
189
|
end
|
153
190
|
end
|
data/spec/unit/migration_spec.rb
CHANGED
@@ -190,6 +190,22 @@ describe 'Migration' do
|
|
190
190
|
end
|
191
191
|
end
|
192
192
|
|
193
|
+
describe '#execute' do
|
194
|
+
before do
|
195
|
+
@adapter.stub!(:select)
|
196
|
+
end
|
197
|
+
|
198
|
+
it 'should send the SQL it its executing to the adapter execute method' do
|
199
|
+
@adapter.should_receive(:select).with('SELECT SOME SQL')
|
200
|
+
@m.select('SELECT SOME SQL')
|
201
|
+
end
|
202
|
+
|
203
|
+
it 'should output the SQL it is executing' do
|
204
|
+
@m.should_receive(:write).with(/SELECT SOME SQL/)
|
205
|
+
@m.select('SELECT SOME SQL')
|
206
|
+
end
|
207
|
+
end
|
208
|
+
|
193
209
|
describe 'helpers' do
|
194
210
|
before do
|
195
211
|
@m.stub!(:execute) # don't actually run anything
|
data/tasks/db.rake
ADDED
@@ -0,0 +1,11 @@
|
|
1
|
+
namespace :db do
|
2
|
+
task :create do
|
3
|
+
sh 'mysql -uroot -e "CREATE DATABASE IF NOT EXISTS datamapper_default_tests;"'
|
4
|
+
sh 'mysql -uroot -e "CREATE DATABASE IF NOT EXISTS datamapper_alternate_tests;"'
|
5
|
+
end
|
6
|
+
|
7
|
+
task :drop do
|
8
|
+
sh 'mysql -uroot -e "DROP DATABASE IF EXISTS datamapper_default_tests;"'
|
9
|
+
sh 'mysql -uroot -e "DROP DATABASE IF EXISTS datamapper_alternate_tests;"'
|
10
|
+
end
|
11
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ardm-migrations
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Martin Emde
|
@@ -119,6 +119,7 @@ files:
|
|
119
119
|
- spec/unit/sql/table_modifier_spec.rb
|
120
120
|
- spec/unit/sql/table_spec.rb
|
121
121
|
- spec/unit/sql_spec.rb
|
122
|
+
- tasks/db.rake
|
122
123
|
- tasks/spec.rake
|
123
124
|
- tasks/yard.rake
|
124
125
|
- tasks/yardstick.rake
|