volt-sql 0.0.1 → 0.0.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/app/sql/lib/field_updater.rb +9 -0
- data/app/sql/lib/migration.rb +1 -1
- data/app/sql/lib/migration_runner.rb +35 -0
- data/app/sql/lib/reconcile.rb +3 -0
- data/app/sql/lib/sql_adaptor_server.rb +24 -3
- data/app/sql/lib/table_reconcile.rb +1 -1
- data/lib/volt/sql/version.rb +1 -1
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 5b04ceed71a848a60ef9725efe1347ee8f9c51de
|
4
|
+
data.tar.gz: fca4338445f775418f3734f4b8e147a4e665f0a5
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: fe9bca98cc32a62cdac847ed4ad9d3e6927230e3bf859e4eff8c31b6686202788a6097646d8b0ec5123a9502fb363dbd7bc71ccf3f0aefe316a6058291510039
|
7
|
+
data.tar.gz: 5993391dfc9ea07dbdd04d1f0754b0797e81d1649d3ae18044ca65fce6ab6d80e8740ad773ff6527addc7b9de21ef38790cb13f81852177ea71edeb43cdb9fcf
|
@@ -32,6 +32,15 @@ module Volt
|
|
32
32
|
up_code = []
|
33
33
|
down_code = []
|
34
34
|
|
35
|
+
# First remove the default values
|
36
|
+
db_default = db_opts.delete(:default)
|
37
|
+
sequel_default = sequel_opts.delete(:default)
|
38
|
+
|
39
|
+
if db_default != sequel_default
|
40
|
+
up_code << "set_column_default #{table_name.inspect}, #{column_name.inspect}, #{sequel_default.inspect}"
|
41
|
+
down_code << "set_column_default #{table_name.inspect}, #{column_name.inspect}, #{db_default.inspect}"
|
42
|
+
end
|
43
|
+
|
35
44
|
if db_opts != sequel_opts
|
36
45
|
# Fetch allow_null, keeping in mind it defaults to true
|
37
46
|
db_null = db_opts.fetch(:allow_null, true)
|
data/app/sql/lib/migration.rb
CHANGED
@@ -0,0 +1,35 @@
|
|
1
|
+
# We can't use Volt::Model until after the reconcile step has happened, so
|
2
|
+
# these methods work directly with the database.
|
3
|
+
|
4
|
+
module Volt
|
5
|
+
class MigrationRunner
|
6
|
+
def raw_db
|
7
|
+
@raw_db ||= Volt.current_app.database.raw_db
|
8
|
+
end
|
9
|
+
|
10
|
+
def ensure_migration_versions_table
|
11
|
+
if !raw_db.tables || !raw_db.tables.include?(:migration_versions)
|
12
|
+
raw_db.create_table(:migration_versions) do
|
13
|
+
primary_key :id
|
14
|
+
Fixnum :version, unique: true
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
def add_version(version)
|
20
|
+
raw_db[:migration_versions].insert(version: version)
|
21
|
+
end
|
22
|
+
|
23
|
+
def has_version?(version)
|
24
|
+
raw_db.from(:migration_versions).where(version: version).count > 0
|
25
|
+
end
|
26
|
+
|
27
|
+
def remove_version(version)
|
28
|
+
raw_db.from(:migration_versions).where(version: version).delete
|
29
|
+
end
|
30
|
+
|
31
|
+
def all_versions
|
32
|
+
raw_db.from(:migration_versions).all.map {|v| v[:version] }
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
data/app/sql/lib/reconcile.rb
CHANGED
@@ -22,6 +22,9 @@ module Volt
|
|
22
22
|
# reconcile takes the database from its current state to the state defined
|
23
23
|
# in the model classes with the field helper
|
24
24
|
def reconcile!
|
25
|
+
# Make sure the migrations are up to date first.
|
26
|
+
Volt::MigrationRunner.new(@db).run
|
27
|
+
|
25
28
|
Volt::RootModels.model_classes.each do |model_class|
|
26
29
|
TableReconcile.new(@adaptor, @db, model_class).run
|
27
30
|
end
|
@@ -5,6 +5,7 @@ require 'fileutils'
|
|
5
5
|
require 'thread'
|
6
6
|
require 'sql/lib/migration'
|
7
7
|
require 'sql/lib/migration_generator'
|
8
|
+
require 'sql/lib/migration_runner'
|
8
9
|
require 'sql/lib/reconcile'
|
9
10
|
require 'sql/lib/sql_logger'
|
10
11
|
require 'sql/lib/helper'
|
@@ -16,7 +17,7 @@ module Volt
|
|
16
17
|
class SqlAdaptorServer < BaseAdaptorServer
|
17
18
|
include Volt::Sql::SqlLogger
|
18
19
|
|
19
|
-
attr_reader :
|
20
|
+
attr_reader :sql_db, :adaptor_name
|
20
21
|
|
21
22
|
# :reconcile_complete is set to true after the initial load and reconcile.
|
22
23
|
# Any models created after this point will attempt to be auto-reconciled.
|
@@ -127,6 +128,11 @@ module Volt
|
|
127
128
|
@db
|
128
129
|
end
|
129
130
|
|
131
|
+
# Raw access to the sequel connection without auto-migrating.
|
132
|
+
def raw_db
|
133
|
+
@db
|
134
|
+
end
|
135
|
+
|
130
136
|
# @param - a string URI, or a Hash of options
|
131
137
|
# @param - the adaptor name
|
132
138
|
def connect_uri_or_options
|
@@ -249,7 +255,7 @@ module Volt
|
|
249
255
|
end
|
250
256
|
|
251
257
|
def query(collection, query)
|
252
|
-
allowed_methods = %w(where where_with_block offset limit count)
|
258
|
+
allowed_methods = %w(where where_with_block offset order limit count)
|
253
259
|
|
254
260
|
result = db.from(collection.to_sym)
|
255
261
|
|
@@ -279,6 +285,21 @@ module Volt
|
|
279
285
|
result = result.where(*args) do |ident|
|
280
286
|
Sql::WhereCall.new(ident).call(block_ast)
|
281
287
|
end
|
288
|
+
elsif method_name == :order
|
289
|
+
op = args[0]
|
290
|
+
unless op.is_a?(Hash)
|
291
|
+
raise ".order(..) should be passed a hash of field: :desc or field: :asc"
|
292
|
+
end
|
293
|
+
|
294
|
+
ops = op.map do |field, asc_desc|
|
295
|
+
if asc_desc == :asc
|
296
|
+
field
|
297
|
+
else
|
298
|
+
Sequel.desc(field)
|
299
|
+
end
|
300
|
+
end
|
301
|
+
|
302
|
+
result = result.order(*ops)
|
282
303
|
else
|
283
304
|
args = self.class.move_to_db_types(args)
|
284
305
|
result = result.send(method_name, *args)
|
@@ -313,7 +334,7 @@ module Volt
|
|
313
334
|
RootModels.clear_temporary
|
314
335
|
|
315
336
|
# Drop all tables
|
316
|
-
|
337
|
+
raw_db.drop_table(*db.tables)
|
317
338
|
|
318
339
|
RootModels.model_classes.each do |model_klass|
|
319
340
|
model_klass.reconciled = false
|
@@ -85,7 +85,7 @@ module Volt
|
|
85
85
|
if (orphan_fields.size == 1 && new_fields.size == 1)
|
86
86
|
from_name = orphan_fields[0]
|
87
87
|
to_name = new_fields[0]
|
88
|
-
auto_migrate_field_rename(table_name, from_name, to_name)
|
88
|
+
@field_updater.auto_migrate_field_rename(table_name, from_name, to_name)
|
89
89
|
|
90
90
|
# Move in start fields
|
91
91
|
db_fields[to_name] = db_fields.delete(from_name)
|
data/lib/volt/sql/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: volt-sql
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ryan Stout
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-11-
|
11
|
+
date: 2015-11-05 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: sequel
|
@@ -72,6 +72,7 @@ files:
|
|
72
72
|
- app/sql/lib/index_updater.rb
|
73
73
|
- app/sql/lib/migration.rb
|
74
74
|
- app/sql/lib/migration_generator.rb
|
75
|
+
- app/sql/lib/migration_runner.rb
|
75
76
|
- app/sql/lib/reconcile.rb
|
76
77
|
- app/sql/lib/sql_adaptor_client.rb
|
77
78
|
- app/sql/lib/sql_adaptor_server.rb
|