rom-sql 3.6.4 → 4.0.0.alpha1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.md +11 -48
- data/LICENSE +1 -1
- data/README.md +1 -1
- data/lib/rom/plugins/relation/sql/auto_restrictions.rb +11 -10
- data/lib/rom/plugins/relation/sql/default_views.rb +75 -0
- data/lib/rom/plugins/relation/sql/instrumentation.rb +8 -13
- data/lib/rom/plugins/relation/sql/postgres/explain.rb +4 -4
- data/lib/rom/plugins/relation/sql/postgres/full_text_search.rb +18 -16
- data/lib/rom/plugins/relation/sql/postgres/streaming.rb +12 -9
- data/lib/rom/sql/associations/many_to_many.rb +7 -7
- data/lib/rom/sql/associations/many_to_one.rb +3 -3
- data/lib/rom/sql/associations/one_to_many.rb +3 -3
- data/lib/rom/sql/associations/one_to_one.rb +1 -1
- data/lib/rom/sql/associations/one_to_one_through.rb +1 -1
- data/lib/rom/sql/associations/self_ref.rb +1 -1
- data/lib/rom/sql/associations.rb +5 -5
- data/lib/rom/sql/attribute.rb +9 -9
- data/lib/rom/sql/attribute_aliasing.rb +2 -3
- data/lib/rom/sql/commands/create.rb +5 -4
- data/lib/rom/sql/commands/delete.rb +2 -2
- data/lib/rom/sql/commands/update.rb +5 -4
- data/lib/rom/sql/commands.rb +4 -4
- data/lib/rom/sql/dsl.rb +3 -3
- data/lib/rom/sql/errors.rb +3 -3
- data/lib/rom/sql/extensions/active_support_notifications.rb +4 -4
- data/lib/rom/sql/extensions/mysql/type_builder.rb +5 -5
- data/lib/rom/sql/extensions/mysql.rb +1 -1
- data/lib/rom/sql/extensions/postgres/commands.rb +13 -31
- data/lib/rom/sql/extensions/postgres/type_builder.rb +28 -31
- data/lib/rom/sql/extensions/postgres/type_serializer.rb +24 -25
- data/lib/rom/sql/extensions/postgres/types/array.rb +4 -4
- data/lib/rom/sql/extensions/postgres/types/array_types.rb +1 -1
- data/lib/rom/sql/extensions/postgres/types/geometric.rb +27 -27
- data/lib/rom/sql/extensions/postgres/types/json.rb +9 -9
- data/lib/rom/sql/extensions/postgres/types/ltree.rb +61 -34
- data/lib/rom/sql/extensions/postgres/types/network.rb +4 -17
- data/lib/rom/sql/extensions/postgres/types/range.rb +25 -25
- data/lib/rom/sql/extensions/postgres/types.rb +14 -14
- data/lib/rom/sql/extensions/postgres.rb +6 -6
- data/lib/rom/sql/extensions/rails_log_subscriber.rb +6 -21
- data/lib/rom/sql/extensions/sqlite/types.rb +1 -1
- data/lib/rom/sql/extensions/sqlite.rb +2 -2
- data/lib/rom/sql/extensions.rb +6 -6
- data/lib/rom/sql/foreign_key.rb +3 -1
- data/lib/rom/sql/function.rb +18 -22
- data/lib/rom/sql/gateway.rb +44 -17
- data/lib/rom/sql/group_dsl.rb +1 -1
- data/lib/rom/sql/index.rb +2 -0
- data/lib/rom/sql/join_dsl.rb +1 -1
- data/lib/rom/sql/mapper_compiler.rb +2 -2
- data/lib/rom/sql/migration/migrator.rb +11 -11
- data/lib/rom/sql/migration/runner.rb +3 -3
- data/lib/rom/sql/migration/schema_diff.rb +7 -8
- data/lib/rom/sql/migration/writer.rb +12 -12
- data/lib/rom/sql/migration.rb +4 -8
- data/lib/rom/sql/order_dsl.rb +1 -1
- data/lib/rom/sql/plugin/associates.rb +49 -11
- data/lib/rom/sql/plugin/pagination.rb +5 -3
- data/lib/rom/sql/plugin/schema_indexes.rb +35 -0
- data/lib/rom/sql/plugins.rb +9 -6
- data/lib/rom/sql/projection_dsl.rb +4 -4
- data/lib/rom/sql/rake_task.rb +2 -2
- data/lib/rom/sql/relation/reading.rb +34 -27
- data/lib/rom/sql/relation/writing.rb +11 -10
- data/lib/rom/sql/relation.rb +57 -89
- data/lib/rom/sql/restriction_dsl.rb +2 -2
- data/lib/rom/sql/schema/attributes_inferrer.rb +3 -3
- data/lib/rom/sql/schema/dsl.rb +4 -2
- data/lib/rom/sql/schema/index_dsl.rb +3 -5
- data/lib/rom/sql/schema/inferrer.rb +25 -23
- data/lib/rom/sql/schema/type_builder.rb +2 -2
- data/lib/rom/sql/schema.rb +9 -21
- data/lib/rom/sql/spec/support.rb +5 -5
- data/lib/rom/sql/tasks/migration_tasks.rake +13 -21
- data/lib/rom/sql/transaction.rb +4 -2
- data/lib/rom/sql/type_extensions.rb +3 -1
- data/lib/rom/sql/type_serializer.rb +10 -10
- data/lib/rom/sql/types.rb +4 -4
- data/lib/rom/sql/version.rb +1 -1
- data/lib/rom/sql/wrap.rb +1 -1
- data/lib/rom/sql.rb +13 -12
- data/lib/rom/types/values.rb +2 -2
- data/lib/rom-sql.rb +1 -1
- metadata +13 -17
data/lib/rom/sql/schema.rb
CHANGED
@@ -1,15 +1,14 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require
|
3
|
+
require "rom/schema"
|
4
4
|
|
5
|
-
require
|
6
|
-
require
|
7
|
-
require
|
8
|
-
require
|
9
|
-
require
|
10
|
-
require
|
11
|
-
require
|
12
|
-
require 'rom/sql/schema/inferrer'
|
5
|
+
require "rom/sql/order_dsl"
|
6
|
+
require "rom/sql/group_dsl"
|
7
|
+
require "rom/sql/projection_dsl"
|
8
|
+
require "rom/sql/restriction_dsl"
|
9
|
+
require "rom/sql/index"
|
10
|
+
require "rom/sql/foreign_key"
|
11
|
+
require "rom/sql/schema/inferrer"
|
13
12
|
|
14
13
|
module ROM
|
15
14
|
module SQL
|
@@ -141,7 +140,7 @@ module ROM
|
|
141
140
|
#
|
142
141
|
# @api public
|
143
142
|
def call(relation)
|
144
|
-
relation.new(relation.dataset.select(*
|
143
|
+
relation.new(relation.dataset.select(*qualified_projection), schema: self)
|
145
144
|
end
|
146
145
|
|
147
146
|
# Return an empty schema
|
@@ -162,17 +161,6 @@ module ROM
|
|
162
161
|
end
|
163
162
|
end
|
164
163
|
|
165
|
-
# Finalize associations
|
166
|
-
#
|
167
|
-
# @api private
|
168
|
-
def finalize_associations!(relations:)
|
169
|
-
super do
|
170
|
-
associations.map do |definition|
|
171
|
-
SQL::Associations.const_get(definition.type).new(definition, relations)
|
172
|
-
end
|
173
|
-
end
|
174
|
-
end
|
175
|
-
|
176
164
|
memoize :qualified, :canonical, :joined, :project_pk
|
177
165
|
end
|
178
166
|
end
|
data/lib/rom/sql/spec/support.rb
CHANGED
@@ -7,18 +7,18 @@ else
|
|
7
7
|
end
|
8
8
|
|
9
9
|
if USING_JRUBY
|
10
|
-
SEQUEL_TEST_DB_URI =
|
10
|
+
SEQUEL_TEST_DB_URI = "jdbc:sqlite::memory:"
|
11
11
|
else
|
12
|
-
SEQUEL_TEST_DB_URI =
|
12
|
+
SEQUEL_TEST_DB_URI = "sqlite::memory"
|
13
13
|
end
|
14
14
|
|
15
15
|
DB = Sequel.connect(SEQUEL_TEST_DB_URI)
|
16
16
|
|
17
17
|
def seed(db = DB)
|
18
|
-
db.run(
|
18
|
+
db.run("CREATE TABLE users (id INTEGER PRIMARY KEY, name STRING)")
|
19
19
|
|
20
|
-
db[:users].insert(id: 1, name:
|
21
|
-
db[:users].insert(id: 2, name:
|
20
|
+
db[:users].insert(id: 1, name: "Jane")
|
21
|
+
db[:users].insert(id: 2, name: "Joe")
|
22
22
|
end
|
23
23
|
|
24
24
|
def deseed(db = DB)
|
@@ -1,7 +1,7 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require
|
4
|
-
require
|
3
|
+
require "pathname"
|
4
|
+
require "fileutils"
|
5
5
|
|
6
6
|
module ROM
|
7
7
|
module SQL
|
@@ -10,7 +10,7 @@ module ROM
|
|
10
10
|
|
11
11
|
class << self
|
12
12
|
def run_migrations(options = {})
|
13
|
-
gateway.run_migrations(
|
13
|
+
gateway.run_migrations(options)
|
14
14
|
end
|
15
15
|
|
16
16
|
def create_migration(*args)
|
@@ -24,13 +24,6 @@ module ROM
|
|
24
24
|
# @api public
|
25
25
|
attr_accessor :env
|
26
26
|
|
27
|
-
|
28
|
-
# Migration options, which are passed to `ROM::SQL::RakeSupport.run_migrations`. You can
|
29
|
-
# set them in the `db:setup` task with `ROM::SQL::RakeSupport.migration_options = { ... }`
|
30
|
-
#
|
31
|
-
# @api public
|
32
|
-
attr_accessor :migration_options
|
33
|
-
|
34
27
|
private
|
35
28
|
|
36
29
|
def gateway
|
@@ -38,7 +31,7 @@ module ROM
|
|
38
31
|
Gateway.instance ||
|
39
32
|
raise(
|
40
33
|
MissingEnv,
|
41
|
-
|
34
|
+
"Set up a configuration with ROM::SQL::RakeSupport.env= in the db:setup task"
|
42
35
|
)
|
43
36
|
else
|
44
37
|
env.gateways[:default]
|
@@ -47,44 +40,43 @@ module ROM
|
|
47
40
|
end
|
48
41
|
|
49
42
|
@env = nil
|
50
|
-
@migration_options = {}
|
51
43
|
end
|
52
44
|
end
|
53
45
|
end
|
54
46
|
|
55
47
|
namespace :db do
|
56
48
|
task :rom_configuration do
|
57
|
-
Rake::Task[
|
49
|
+
Rake::Task["db:setup"].invoke
|
58
50
|
end
|
59
51
|
|
60
|
-
desc
|
52
|
+
desc "Perform migration reset (full erase and migration up)"
|
61
53
|
task reset: :rom_configuration do
|
62
54
|
ROM::SQL::RakeSupport.run_migrations(target: 0)
|
63
55
|
ROM::SQL::RakeSupport.run_migrations
|
64
|
-
puts
|
56
|
+
puts "<= db:reset executed"
|
65
57
|
end
|
66
58
|
|
67
|
-
desc
|
59
|
+
desc "Migrate the database (options [version_number])]"
|
68
60
|
task :migrate, [:version] => :rom_configuration do |_, args|
|
69
61
|
version = args[:version]
|
70
62
|
|
71
63
|
if version.nil?
|
72
64
|
ROM::SQL::RakeSupport.run_migrations
|
73
|
-
puts
|
65
|
+
puts "<= db:migrate executed"
|
74
66
|
else
|
75
67
|
ROM::SQL::RakeSupport.run_migrations(target: version.to_i)
|
76
68
|
puts "<= db:migrate version=[#{version}] executed"
|
77
69
|
end
|
78
70
|
end
|
79
71
|
|
80
|
-
desc
|
72
|
+
desc "Perform migration down (removes all tables)"
|
81
73
|
task clean: :rom_configuration do
|
82
74
|
ROM::SQL::RakeSupport.run_migrations(target: 0)
|
83
|
-
puts
|
75
|
+
puts "<= db:clean executed"
|
84
76
|
end
|
85
77
|
|
86
|
-
desc
|
87
|
-
task :create_migration, [
|
78
|
+
desc "Create a migration (parameters: NAME, VERSION)"
|
79
|
+
task :create_migration, %i[name version] => :rom_configuration do |_, args|
|
88
80
|
name, version = args.values_at(:name, :version)
|
89
81
|
|
90
82
|
if name.nil?
|
data/lib/rom/sql/transaction.rb
CHANGED
@@ -1,5 +1,7 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
+
require "rom/transaction"
|
4
|
+
|
3
5
|
module ROM
|
4
6
|
module SQL
|
5
7
|
# @api private
|
@@ -11,8 +13,8 @@ module ROM
|
|
11
13
|
@connection = connection
|
12
14
|
end
|
13
15
|
|
14
|
-
def run(
|
15
|
-
connection.transaction(
|
16
|
+
def run(**options)
|
17
|
+
connection.transaction(options) { yield(self) }
|
16
18
|
rescue ::ROM::Transaction::Rollback
|
17
19
|
# noop
|
18
20
|
end
|
@@ -36,7 +36,9 @@ module ROM
|
|
36
36
|
|
37
37
|
mod = Module.new(&block)
|
38
38
|
ctx = Object.new.extend(mod)
|
39
|
-
functions = mod.public_instance_methods.each_with_object({}) { |m, ms|
|
39
|
+
functions = mod.public_instance_methods.each_with_object({}) { |m, ms|
|
40
|
+
ms[m] = ctx.method(m)
|
41
|
+
}
|
40
42
|
extensions[db_type] = (extensions[db_type] || {}).merge(functions)
|
41
43
|
end
|
42
44
|
end
|
@@ -1,6 +1,6 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require
|
3
|
+
require "dry/core/class_attributes"
|
4
4
|
|
5
5
|
module ROM
|
6
6
|
module SQL
|
@@ -23,24 +23,24 @@ module ROM
|
|
23
23
|
defines :mapping
|
24
24
|
|
25
25
|
mapping(
|
26
|
-
Types::Integer =>
|
27
|
-
Types::String =>
|
28
|
-
Types::Time =>
|
29
|
-
Types::Date =>
|
30
|
-
Types::Bool =>
|
31
|
-
Types::Decimal =>
|
32
|
-
Types::Float =>
|
26
|
+
Types::Integer => "integer",
|
27
|
+
Types::String => "varchar",
|
28
|
+
Types::Time => "timestamp",
|
29
|
+
Types::Date => "date",
|
30
|
+
Types::Bool => "boolean",
|
31
|
+
Types::Decimal => "numeric",
|
32
|
+
Types::Float => "float"
|
33
33
|
)
|
34
34
|
|
35
35
|
def call(type)
|
36
36
|
return type.meta[:db_type] if type.meta[:db_type]
|
37
37
|
|
38
|
-
meta = type.meta[:read] ? {
|
38
|
+
meta = type.meta[:read] ? {read: type.meta[:read]} : EMPTY_HASH
|
39
39
|
|
40
40
|
self.class.mapping.fetch(type.with(meta: meta)) {
|
41
41
|
if block_given?
|
42
42
|
yield(type)
|
43
|
-
end or raise "Cannot serialize #{
|
43
|
+
end or raise "Cannot serialize #{type}"
|
44
44
|
}
|
45
45
|
end
|
46
46
|
end
|
data/lib/rom/sql/types.rb
CHANGED
@@ -1,10 +1,10 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require
|
4
|
-
require
|
3
|
+
require "sequel/core"
|
4
|
+
require "sequel/sql"
|
5
5
|
|
6
|
-
require
|
7
|
-
require
|
6
|
+
require "rom/types"
|
7
|
+
require "rom/sql/type_dsl"
|
8
8
|
|
9
9
|
module ROM
|
10
10
|
module SQL
|
data/lib/rom/sql/version.rb
CHANGED
data/lib/rom/sql/wrap.rb
CHANGED
data/lib/rom/sql.rb
CHANGED
@@ -1,22 +1,23 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require
|
3
|
+
require "rom/core"
|
4
4
|
|
5
|
-
require
|
6
|
-
require
|
5
|
+
require "rom/sql/version"
|
6
|
+
require "rom/sql/errors"
|
7
7
|
|
8
|
-
require
|
9
|
-
|
10
|
-
require
|
11
|
-
require
|
12
|
-
require
|
13
|
-
require
|
14
|
-
require
|
15
|
-
require 'rom/sql/migration'
|
16
|
-
require 'rom/sql/extensions'
|
8
|
+
require "rom/sql/plugins"
|
9
|
+
require "rom/sql/relation"
|
10
|
+
require "rom/sql/mapper_compiler"
|
11
|
+
require "rom/sql/associations"
|
12
|
+
require "rom/sql/gateway"
|
13
|
+
require "rom/sql/migration"
|
14
|
+
require "rom/sql/extensions"
|
17
15
|
|
18
16
|
if defined?(Rails)
|
19
17
|
ROM::SQL.load_extensions(:active_support_notifications, :rails_log_subscriber)
|
20
18
|
end
|
21
19
|
|
22
20
|
ROM.register_adapter(:sql, ROM::SQL)
|
21
|
+
|
22
|
+
# Enable :default_view for all SQL relations
|
23
|
+
ROM::SQL::Gateway.plugin(relations: :default_views)
|
data/lib/rom/types/values.rb
CHANGED
@@ -1,12 +1,12 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require
|
3
|
+
require "rom/sql/types"
|
4
4
|
|
5
5
|
module ROM
|
6
6
|
module Types
|
7
7
|
module Values
|
8
8
|
class TreePath < ::Struct.new(:value, :separator)
|
9
|
-
DEFAULT_SEPARATOR =
|
9
|
+
DEFAULT_SEPARATOR = "."
|
10
10
|
|
11
11
|
# @api public
|
12
12
|
def self.new(value, separator = DEFAULT_SEPARATOR)
|
data/lib/rom-sql.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rom-sql
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 4.0.0.alpha1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Piotr Solnica
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2022-04-15 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: sequel
|
@@ -30,48 +30,42 @@ dependencies:
|
|
30
30
|
requirements:
|
31
31
|
- - "~>"
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version: '1.
|
33
|
+
version: '1.5'
|
34
34
|
type: :runtime
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
38
|
- - "~>"
|
39
39
|
- !ruby/object:Gem::Version
|
40
|
-
version: '1.
|
40
|
+
version: '1.5'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: dry-core
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
45
|
- - "~>"
|
46
46
|
- !ruby/object:Gem::Version
|
47
|
-
version: '
|
47
|
+
version: '0.7'
|
48
48
|
type: :runtime
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
52
|
- - "~>"
|
53
53
|
- !ruby/object:Gem::Version
|
54
|
-
version: '
|
54
|
+
version: '0.7'
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
56
|
name: rom
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
58
58
|
requirements:
|
59
59
|
- - "~>"
|
60
60
|
- !ruby/object:Gem::Version
|
61
|
-
version:
|
62
|
-
- - ">="
|
63
|
-
- !ruby/object:Gem::Version
|
64
|
-
version: 5.2.1
|
61
|
+
version: 6.0.0.alpha
|
65
62
|
type: :runtime
|
66
63
|
prerelease: false
|
67
64
|
version_requirements: !ruby/object:Gem::Requirement
|
68
65
|
requirements:
|
69
66
|
- - "~>"
|
70
67
|
- !ruby/object:Gem::Version
|
71
|
-
version:
|
72
|
-
- - ">="
|
73
|
-
- !ruby/object:Gem::Version
|
74
|
-
version: 5.2.1
|
68
|
+
version: 6.0.0.alpha
|
75
69
|
- !ruby/object:Gem::Dependency
|
76
70
|
name: bundler
|
77
71
|
requirement: !ruby/object:Gem::Requirement
|
@@ -126,6 +120,7 @@ files:
|
|
126
120
|
- README.md
|
127
121
|
- lib/rom-sql.rb
|
128
122
|
- lib/rom/plugins/relation/sql/auto_restrictions.rb
|
123
|
+
- lib/rom/plugins/relation/sql/default_views.rb
|
129
124
|
- lib/rom/plugins/relation/sql/instrumentation.rb
|
130
125
|
- lib/rom/plugins/relation/sql/postgres/explain.rb
|
131
126
|
- lib/rom/plugins/relation/sql/postgres/full_text_search.rb
|
@@ -189,6 +184,7 @@ files:
|
|
189
184
|
- lib/rom/sql/plugin/associates.rb
|
190
185
|
- lib/rom/sql/plugin/nullify.rb
|
191
186
|
- lib/rom/sql/plugin/pagination.rb
|
187
|
+
- lib/rom/sql/plugin/schema_indexes.rb
|
192
188
|
- lib/rom/sql/plugins.rb
|
193
189
|
- lib/rom/sql/projection_dsl.rb
|
194
190
|
- lib/rom/sql/rake_task.rb
|
@@ -231,11 +227,11 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
231
227
|
version: 2.7.0
|
232
228
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
233
229
|
requirements:
|
234
|
-
- - "
|
230
|
+
- - ">"
|
235
231
|
- !ruby/object:Gem::Version
|
236
|
-
version:
|
232
|
+
version: 1.3.1
|
237
233
|
requirements: []
|
238
|
-
rubygems_version: 3.
|
234
|
+
rubygems_version: 3.3.7
|
239
235
|
signing_key:
|
240
236
|
specification_version: 4
|
241
237
|
summary: SQL databases support for ROM
|