prick 0.20.11 → 0.20.14
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/TODO +11 -0
- data/exe/prick +7 -2
- data/lib/builder/batch.rb +3 -1
- data/lib/builder/builder.rb +6 -2
- data/lib/builder/node.rb +7 -0
- data/lib/builder/node_pool.rb +25 -0
- data/lib/builder/parser.rb +4 -1
- data/lib/prick/version.rb +1 -1
- data/lib/subcommand/prick-build.rb +28 -3
- data/prick.gemspec +1 -1
- metadata +7 -7
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 863269702a01df7b25038a6eae9e0b2f636e20311276919cdecf6f201540d14b
|
|
4
|
+
data.tar.gz: bdf5d57641b5e250d667ff924eacd02e0a1972ea40e756346642229c815ed8b0
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: c1228157e01f3d08383e6addddeabe9f7c9bf66cba682af39428ac961b7260d27fcd457ab0787bb4eaef4c6c2a8eb17bf15ee436d9b83f2737776ce9c8318d61
|
|
7
|
+
data.tar.gz: 109dc23dd6c225f0d0006afc7bf89d3ec49eb52e62003f4ab969979665d525fcd78e96ac2d9f1120175f1dc61d7102278a1db3c5ae867f6463ab42f8e90f012a
|
data/TODO
CHANGED
|
@@ -1,3 +1,14 @@
|
|
|
1
|
+
o Fix that enum references are not created:
|
|
2
|
+
|
|
3
|
+
system_roles
|
|
4
|
+
- &app_registry_anon_system_role
|
|
5
|
+
system: APP_REGISTRY # <---------------------------- Creates a dangling reference
|
|
6
|
+
rolename: app_registry_anon_role
|
|
7
|
+
ordinal: 1
|
|
8
|
+
permissions:
|
|
9
|
+
- *app_registry_anon_permission
|
|
10
|
+
|
|
11
|
+
|
|
1
12
|
|
|
2
13
|
o Store fox.state, reflections, and reflections in the database so third-party
|
|
3
14
|
programs can use them when testing
|
data/exe/prick
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
#!/usr/bin/env ruby
|
|
2
2
|
|
|
3
3
|
#$LOAD_PATH.unshift "/home/clr/prj/shellopts/lib"
|
|
4
|
+
#$LOAD_PATH.unshift "/home/clr/prj/pg_graph/lib"
|
|
4
5
|
|
|
5
6
|
require 'bootsnap'
|
|
6
7
|
begin
|
|
@@ -73,10 +74,13 @@ SPEC = %(
|
|
|
73
74
|
Kind can be 'users', 'data', 'schema', 'database' (the default), or 'all'. It is
|
|
74
75
|
not an error if the object doesn't exist. TODO Only 'users' is currently defined
|
|
75
76
|
|
|
76
|
-
build! -t,time --dump=KIND? -- [SCHEMA]
|
|
77
|
+
build! -f,force -t,time --dump=KIND? -- [SCHEMA]
|
|
77
78
|
Build the project. If SCHEMA is defined, later schemas are excluded.
|
|
78
79
|
KIND can be 'nodes', 'allnodes' or 'batches' (the default)
|
|
79
80
|
|
|
81
|
+
Usually, schemas marked with 'no refresh' is not built, use --force to
|
|
82
|
+
rebuild all schemas
|
|
83
|
+
|
|
80
84
|
make! -t,time --dump=KIND? -- [SCHEMA]
|
|
81
85
|
@ Only rebuild changed files
|
|
82
86
|
|
|
@@ -179,7 +183,8 @@ begin
|
|
|
179
183
|
|
|
180
184
|
when :build!
|
|
181
185
|
dump = cmd.dump? ? cmd.dump("batches").to_sym : nil
|
|
182
|
-
Prick::SubCommand.build(
|
|
186
|
+
Prick::SubCommand.build(
|
|
187
|
+
database, username, args.expect(0..1), force: cmd.force?, timer: cmd.time?, dump: dump)
|
|
183
188
|
|
|
184
189
|
when :make!
|
|
185
190
|
dump = cmd.dump? ? cmd.dump("batches").to_sym : nil
|
data/lib/builder/batch.rb
CHANGED
|
@@ -102,11 +102,12 @@ module Prick
|
|
|
102
102
|
files = nodes.map(&:path)
|
|
103
103
|
|
|
104
104
|
# Load meta object
|
|
105
|
-
meta = PgMeta.new(conn)
|
|
105
|
+
meta = PgMeta.new(conn, exclude_schemas: builder.pg_graph_ignore_schemas)
|
|
106
106
|
|
|
107
107
|
# Create type object
|
|
108
108
|
type = PgGraph::Type.new(meta, builder.reflections_file)
|
|
109
109
|
|
|
110
|
+
# Timer
|
|
110
111
|
t_type.stop
|
|
111
112
|
t_fox = Timer.new " Parse files"
|
|
112
113
|
|
|
@@ -126,6 +127,7 @@ module Prick
|
|
|
126
127
|
# Dump state file
|
|
127
128
|
fox.write_state(FOX_STATE_PATH)
|
|
128
129
|
|
|
130
|
+
# Timer
|
|
129
131
|
t_fox.stop
|
|
130
132
|
t_exe = Timer.new " Execute SQL"
|
|
131
133
|
|
data/lib/builder/builder.rb
CHANGED
|
@@ -31,9 +31,12 @@ module Prick
|
|
|
31
31
|
# Pool of nodes. Initialized by #load_pool
|
|
32
32
|
attr_reader :pool
|
|
33
33
|
|
|
34
|
-
forward_to :pool, :
|
|
34
|
+
forward_to :pool, :schemas,
|
|
35
|
+
:nodes, :decl_nodes, :init_nodes, :term_nodes,
|
|
35
36
|
:seed_nodes, :fox_seed_nodes, :sql_seed_nodes,
|
|
36
|
-
:
|
|
37
|
+
:builder_nodes,
|
|
38
|
+
:pg_graph_ignore_schemas,
|
|
39
|
+
:refresh_schemas, :keep_schemas
|
|
37
40
|
|
|
38
41
|
def batches() @batches ||= group end
|
|
39
42
|
|
|
@@ -90,6 +93,7 @@ module Prick
|
|
|
90
93
|
def execute(conn, create_schemas: schemas)
|
|
91
94
|
group if batches.nil?
|
|
92
95
|
conn.exec create_schemas.grep_v("public").map { |schema| "create schema #{schema}" }
|
|
96
|
+
conn.schema.create("public", authorization: "postgres")
|
|
93
97
|
for batch in batches
|
|
94
98
|
batch.execute
|
|
95
99
|
end
|
data/lib/builder/node.rb
CHANGED
|
@@ -142,6 +142,7 @@ module Prick
|
|
|
142
142
|
end
|
|
143
143
|
end
|
|
144
144
|
|
|
145
|
+
# A build.yml file node
|
|
145
146
|
class BuildNode < Node
|
|
146
147
|
def nodes() @nodes ||= init_nodes + decl_nodes + seed_nodes + term_nodes end
|
|
147
148
|
|
|
@@ -150,12 +151,17 @@ module Prick
|
|
|
150
151
|
attr_reader :term_nodes
|
|
151
152
|
attr_reader :seed_nodes
|
|
152
153
|
|
|
154
|
+
attr_accessor :pg_graph_ignore_schema
|
|
155
|
+
attr_accessor :refresh_schema
|
|
156
|
+
|
|
153
157
|
def initialize(parent, path)
|
|
154
158
|
super(parent, nil, :yml, path)
|
|
155
159
|
@decl_nodes = []
|
|
156
160
|
@init_nodes = []
|
|
157
161
|
@term_nodes = []
|
|
158
162
|
@seed_nodes = []
|
|
163
|
+
@pg_graph_ignore_schema = false
|
|
164
|
+
@refresh_schema = true
|
|
159
165
|
end
|
|
160
166
|
|
|
161
167
|
def inspect() to_s end
|
|
@@ -164,6 +170,7 @@ module Prick
|
|
|
164
170
|
puts "BuildNode #{path}"
|
|
165
171
|
indent {
|
|
166
172
|
puts "schema: #{schema}" if schema
|
|
173
|
+
puts "pg_graph_ignore_schema: #{pg_graph_ignore_schema}"
|
|
167
174
|
decl_nodes.each(&:dump)
|
|
168
175
|
for kind in [:init, :term, :seed]
|
|
169
176
|
kind_nodes = self.send("#{kind}_nodes".to_sym)
|
data/lib/builder/node_pool.rb
CHANGED
|
@@ -7,6 +7,9 @@ module Prick
|
|
|
7
7
|
|
|
8
8
|
attr_reader :nodes
|
|
9
9
|
|
|
10
|
+
# All nodes including nodes deleted later on
|
|
11
|
+
attr_reader :all_nodes
|
|
12
|
+
|
|
10
13
|
attr_reader :init_nodes
|
|
11
14
|
attr_reader :decl_nodes
|
|
12
15
|
attr_reader :seed_nodes
|
|
@@ -18,6 +21,26 @@ module Prick
|
|
|
18
21
|
def fox_seed_nodes() seed_nodes.select { |node| node.kind == :fox } end
|
|
19
22
|
def sql_seed_nodes() seed_nodes.select { |node| node.kind == :sql } end
|
|
20
23
|
|
|
24
|
+
# List of BuildNode nodes
|
|
25
|
+
def build_nodes() nodes.select { |node| node.is_a?(BuildNode) } end
|
|
26
|
+
|
|
27
|
+
# List of schemas to ignore when building PgGraph objects. This is used
|
|
28
|
+
# to exclude foreign schemes that doesn't follow the PgGraph naming
|
|
29
|
+
# conventions
|
|
30
|
+
def pg_graph_ignore_schemas()
|
|
31
|
+
all_nodes.select { |node|
|
|
32
|
+
node.is_a?(BuildNode) && node.pg_graph_ignore_schema
|
|
33
|
+
}.map(&:schema).uniq
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
def refresh_schemas()
|
|
37
|
+
build_nodes.select(&:refresh_schema).map(&:schema).uniq
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
def keep_schemas()
|
|
41
|
+
build_nodes.reject(&:refresh_schema).map(&:schema).uniq
|
|
42
|
+
end
|
|
43
|
+
|
|
21
44
|
def initialize()
|
|
22
45
|
self.clear
|
|
23
46
|
end
|
|
@@ -25,6 +48,7 @@ module Prick
|
|
|
25
48
|
def add(*nodes)
|
|
26
49
|
nodes = Array(nodes).flatten
|
|
27
50
|
@nodes.concat(nodes)
|
|
51
|
+
@all_nodes.concat(nodes)
|
|
28
52
|
nodes.each { |node|
|
|
29
53
|
@schemas[node.schema] += 1
|
|
30
54
|
@kind_nodes[node.phase]&.append(node)
|
|
@@ -65,6 +89,7 @@ module Prick
|
|
|
65
89
|
else
|
|
66
90
|
@schemas = Hash.new(0) # map from schema name to number of nodes
|
|
67
91
|
@nodes = []
|
|
92
|
+
@all_nodes = []
|
|
68
93
|
@init_nodes = []
|
|
69
94
|
@decl_nodes = []
|
|
70
95
|
@seed_nodes = []
|
data/lib/builder/parser.rb
CHANGED
|
@@ -50,7 +50,10 @@ module Prick
|
|
|
50
50
|
entry.each { |key, value|
|
|
51
51
|
if key == "schema"
|
|
52
52
|
unit.schema = value
|
|
53
|
-
|
|
53
|
+
elsif key == "standard"
|
|
54
|
+
unit.pg_graph_ignore_schema = !value
|
|
55
|
+
elsif key == "refresh"
|
|
56
|
+
unit.refresh_schema = value
|
|
54
57
|
else
|
|
55
58
|
case key
|
|
56
59
|
when "init"; unit.init_nodes
|
data/lib/prick/version.rb
CHANGED
|
@@ -3,24 +3,49 @@
|
|
|
3
3
|
require 'builder/builder.rb'
|
|
4
4
|
|
|
5
5
|
module Prick::SubCommand
|
|
6
|
-
def self.build(database, username, schema, builddir: "schema", timer: nil, dump: nil)
|
|
6
|
+
def self.build(database, username, schema, builddir: "schema", force: false, timer: nil, dump: nil)
|
|
7
7
|
Timer.on! if timer
|
|
8
8
|
time "Prick::Command#build" do
|
|
9
9
|
begin
|
|
10
10
|
super_conn = PgConn.new
|
|
11
|
+
|
|
11
12
|
conn = nil
|
|
12
13
|
builder = nil
|
|
13
|
-
|
|
14
14
|
time "Load build object" do
|
|
15
15
|
if super_conn.rdbms.exist? database
|
|
16
16
|
conn = PgConn.new(database, username)
|
|
17
|
-
|
|
17
|
+
exist = true
|
|
18
18
|
else
|
|
19
19
|
super_conn.rdbms.create database, owner: username
|
|
20
20
|
conn = PgConn.new(database, username)
|
|
21
|
+
exit = false
|
|
21
22
|
end
|
|
22
23
|
|
|
23
24
|
builder = Prick::Build::Builder.new(conn, builddir)
|
|
25
|
+
|
|
26
|
+
if exist
|
|
27
|
+
if force
|
|
28
|
+
builder.schemas.each { |schema| conn.schema.drop schema, cascade: true }
|
|
29
|
+
|
|
30
|
+
else
|
|
31
|
+
# Explicit schema is always rebuilt
|
|
32
|
+
refresh = [builder.refresh_schemas, schema].compact.flatten.uniq
|
|
33
|
+
keep = builder.keep_schemas.reject { |s| s == schema }
|
|
34
|
+
|
|
35
|
+
# Rebuild non-existing keep-schemas
|
|
36
|
+
keep.reject! { |schema|
|
|
37
|
+
refresh << schema if !conn.schema.exist?(schema)
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
# Eliminate keep schemas from build pool
|
|
41
|
+
builder.pool.delete_schema(keep)
|
|
42
|
+
|
|
43
|
+
# Drop refresh schemes
|
|
44
|
+
refresh.each { |schema| conn.schema.drop(schema, cascade: true) }
|
|
45
|
+
end
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
# Delete schemas after target scheme if present
|
|
24
49
|
builder.pool.delete_schema(builder.pool.after_schema(schema)) if schema
|
|
25
50
|
end
|
|
26
51
|
|
data/prick.gemspec
CHANGED
|
@@ -36,7 +36,7 @@ Gem::Specification.new do |spec|
|
|
|
36
36
|
spec.add_dependency "bootsnap"
|
|
37
37
|
spec.add_dependency "fixture_fox", "~> 0.1.3"
|
|
38
38
|
spec.add_dependency "postspec"
|
|
39
|
-
spec.add_dependency "pg_graph"
|
|
39
|
+
spec.add_dependency "pg_graph", "~> 0.1.8"
|
|
40
40
|
spec.add_dependency "shellopts", "~> 2.0.23"
|
|
41
41
|
|
|
42
42
|
spec.add_development_dependency "ruby-prof"
|
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: prick
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.20.
|
|
4
|
+
version: 0.20.14
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Claus Rasmussen
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: exe
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2022-05-
|
|
11
|
+
date: 2022-05-19 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: semantic
|
|
@@ -112,16 +112,16 @@ dependencies:
|
|
|
112
112
|
name: pg_graph
|
|
113
113
|
requirement: !ruby/object:Gem::Requirement
|
|
114
114
|
requirements:
|
|
115
|
-
- - "
|
|
115
|
+
- - "~>"
|
|
116
116
|
- !ruby/object:Gem::Version
|
|
117
|
-
version:
|
|
117
|
+
version: 0.1.8
|
|
118
118
|
type: :runtime
|
|
119
119
|
prerelease: false
|
|
120
120
|
version_requirements: !ruby/object:Gem::Requirement
|
|
121
121
|
requirements:
|
|
122
|
-
- - "
|
|
122
|
+
- - "~>"
|
|
123
123
|
- !ruby/object:Gem::Version
|
|
124
|
-
version:
|
|
124
|
+
version: 0.1.8
|
|
125
125
|
- !ruby/object:Gem::Dependency
|
|
126
126
|
name: shellopts
|
|
127
127
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -230,7 +230,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
230
230
|
- !ruby/object:Gem::Version
|
|
231
231
|
version: '0'
|
|
232
232
|
requirements: []
|
|
233
|
-
rubygems_version: 3.
|
|
233
|
+
rubygems_version: 3.1.4
|
|
234
234
|
signing_key:
|
|
235
235
|
specification_version: 4
|
|
236
236
|
summary: A release control and management system for postgresql
|