prick 0.42.1 → 0.43.0
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/lib/prick/builder/batch.rb +19 -5
- data/lib/prick/builder/builder.rb +11 -1
- data/lib/prick/builder/node.rb +7 -1
- data/lib/prick/builder/parser.rb +14 -1
- data/lib/prick/ext/expand_variables.rb +9 -2
- data/lib/prick/subcommand/prick-list.rb +2 -2
- data/lib/prick/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 776071ac8d6762ee4a9d60f40c308a13be0fc51451ad52844e5821b3ec72d330
|
4
|
+
data.tar.gz: c2d0d5637d8948853574edb40a932ec632f4dd6c53ce19b8fd18c64b6e639ab0
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: cbfb74c1775869db3ec1b2d24a8d69565d9b785220c9ec9c4051bb6f63de23709c71df4c4109d5de889352e66710fedcb1ca2ba667dfdd79f31f66396de35188
|
7
|
+
data.tar.gz: 6a9e7b64410e37e7449e5c09ef41cdac244d3050418ea04b2ca6aa5316d716d415caba1be6a4ab280875eb345eddd99f9e7e4f527a7ebfc1673b439cf457a3a5
|
data/lib/prick/builder/batch.rb
CHANGED
@@ -50,9 +50,7 @@ module Prick
|
|
50
50
|
end
|
51
51
|
|
52
52
|
begin
|
53
|
-
|
54
|
-
conn.execute node.source, silent: true
|
55
|
-
end
|
53
|
+
execute_nodes
|
56
54
|
rescue PG::Error => ex
|
57
55
|
error, line, char = conn.err
|
58
56
|
file = nil
|
@@ -81,13 +79,29 @@ module Prick
|
|
81
79
|
elsif node
|
82
80
|
message = "#{error} from #{node.path}"
|
83
81
|
else
|
84
|
-
|
85
|
-
message = conn.errmsg + " in SQL batch"
|
82
|
+
message = "Error in #{nodes.first.path}: #{conn.errmsg}"
|
86
83
|
end
|
87
84
|
raise PostgresError.new(message, file, line, char)
|
88
85
|
end
|
89
86
|
}
|
90
87
|
end
|
88
|
+
|
89
|
+
protected
|
90
|
+
def execute_nodes
|
91
|
+
for node in nodes # This is marginally faster than concatenating all nodes
|
92
|
+
conn.execute node.source, silent: true
|
93
|
+
end
|
94
|
+
end
|
95
|
+
end
|
96
|
+
|
97
|
+
class PSqlBatch < SqlBatch
|
98
|
+
protected
|
99
|
+
def execute_nodes
|
100
|
+
opts = ["-U #{Prick.state.username}"] + nodes.map { |n| "-f #{n.path}" }
|
101
|
+
args = [Prick.state.database]
|
102
|
+
|
103
|
+
Command.command(Prick.state.bash_environment, "psql", argv: opts + args)
|
104
|
+
end
|
91
105
|
end
|
92
106
|
|
93
107
|
class ModuleBatch < BuildBatch
|
@@ -87,6 +87,7 @@ module Prick
|
|
87
87
|
kind = nil
|
88
88
|
batch = nil
|
89
89
|
|
90
|
+
# TODO: Refactor
|
90
91
|
for node in [init_nodes, decl_nodes, fox_seed_nodes, sql_seed_nodes, term_nodes.reverse].flatten
|
91
92
|
# Create new batch if required. Order of when-clauses is important
|
92
93
|
case node.kind
|
@@ -98,16 +99,23 @@ module Prick
|
|
98
99
|
when :exe # Exe sources always create a new batch
|
99
100
|
@batches << batch if batch
|
100
101
|
batch = SqlBatch.new(self)
|
101
|
-
when batch&.kind # Same kind as current batch
|
102
|
+
when batch&.kind # Same kind as current batch. After this when-clause
|
103
|
+
# we know that the node kind has changed
|
102
104
|
if node.kind == :sql && step
|
103
105
|
@batches << batch if batch
|
104
106
|
batch = SqlBatch.new(self)
|
107
|
+
elsif node.kind == :psql && step
|
108
|
+
@batches << batch if batch
|
109
|
+
batch = SqlBatch.new(self)
|
105
110
|
end
|
106
111
|
when :sql || node.kind == :inline
|
107
112
|
if batch&.kind != :exe || step
|
108
113
|
@batches << batch if batch
|
109
114
|
batch = SqlBatch.new(self)
|
110
115
|
end
|
116
|
+
when :psql
|
117
|
+
@batches << batch if batch
|
118
|
+
batch = PSqlBatch.new(self)
|
111
119
|
when :inline
|
112
120
|
@batches << batch if batch
|
113
121
|
batch = SqlBatch.new(self)
|
@@ -123,6 +131,8 @@ module Prick
|
|
123
131
|
# Add node to current batch
|
124
132
|
batch.nodes << node
|
125
133
|
end
|
134
|
+
|
135
|
+
# Add last batch
|
126
136
|
@batches << batch if batch
|
127
137
|
|
128
138
|
@batches
|
data/lib/prick/builder/node.rb
CHANGED
@@ -33,7 +33,7 @@ module Prick
|
|
33
33
|
def initialize(parent, phase, kind, path, args = nil)
|
34
34
|
constrain parent, BuildNode, NilClass
|
35
35
|
constrain phase, :init, :decl, :seed, :term, nil
|
36
|
-
constrain kind, :sql, :exe, :fox, :yml, :inline, :module
|
36
|
+
constrain kind, :sql, :psql, :exe, :fox, :yml, :inline, :module
|
37
37
|
constrain path, String, NilClass
|
38
38
|
@parent, @phase, @kind, @path = parent, phase, kind, path
|
39
39
|
@args = args&.empty? ? nil : args
|
@@ -67,6 +67,12 @@ module Prick
|
|
67
67
|
end
|
68
68
|
end
|
69
69
|
|
70
|
+
class PSqlNode < Node
|
71
|
+
def initialize(parent, phase, path)
|
72
|
+
super(parent, phase, :psql, path)
|
73
|
+
end
|
74
|
+
end
|
75
|
+
|
70
76
|
class FoxNode < Node
|
71
77
|
def initialize(parent, phase, path)
|
72
78
|
super(parent, phase, :fox, path)
|
data/lib/prick/builder/parser.rb
CHANGED
@@ -115,6 +115,16 @@ module Prick
|
|
115
115
|
[path, Array(args).flatten]
|
116
116
|
end
|
117
117
|
|
118
|
+
def parse_psql_file_entry(unit, dir, entry)
|
119
|
+
if entry =~ /^[a-zA-Z0-9_.-]+$/
|
120
|
+
path = File.join(dir, entry)
|
121
|
+
File.exist?(path) or raise Error, "Can't find file #{path} in #{dir}/ from #{unit}"
|
122
|
+
path
|
123
|
+
else
|
124
|
+
raise Error, "Not a file name: '#{entry}'"
|
125
|
+
end
|
126
|
+
end
|
127
|
+
|
118
128
|
def parse_entry(unit, phase, dir, entry)
|
119
129
|
# puts "#parse_entry(#{unit.inspect}, #{phase.inspect}, #{dir.inspect}, #{entry.inspect})"
|
120
130
|
if entry.is_a?(Hash)
|
@@ -145,6 +155,9 @@ module Prick
|
|
145
155
|
else
|
146
156
|
raise Error, "Illegal key: #{key}"
|
147
157
|
end
|
158
|
+
elsif entry =~ /\.psql$/
|
159
|
+
path = parse_psql_file_entry(unit, dir, entry)
|
160
|
+
PSqlNode.new(unit, phase, path)
|
148
161
|
else
|
149
162
|
(path, args = parse_file_entry(unit, dir, entry)) or return nil
|
150
163
|
if File.directory? path
|
@@ -187,7 +200,7 @@ module Prick
|
|
187
200
|
|
188
201
|
# Expand environment variables in the given file name
|
189
202
|
#
|
190
|
-
# #
|
203
|
+
# #expand_filename substitute '$<variable>' expressions in the filename
|
191
204
|
# with the corresponding value in the current environment. If the file
|
192
205
|
# was not found, inherited environments are processed hierarchly with the
|
193
206
|
# special environment variable ENVIRONMENT set to each PRICK_ENVIRONMENT
|
@@ -14,7 +14,7 @@
|
|
14
14
|
def expand_variables(str, variables) # ChatGPT
|
15
15
|
# Replace escaped bashslashes and dollar signs
|
16
16
|
str = str.gsub('\\\\', "\x00").gsub('\\$', "\x01")
|
17
|
-
|
17
|
+
|
18
18
|
# Expand variables
|
19
19
|
str.gsub!(/\$(\w+)\b|\$\{(\w+)\}/) do |match| # Strange that '\b' is necessary
|
20
20
|
key = $1 || $2
|
@@ -30,7 +30,7 @@ end
|
|
30
30
|
def expand_variables?(str, variables)
|
31
31
|
# Replace escaped bashslashes and dollar signs
|
32
32
|
str = str.gsub('\\\\', "\x00").gsub('\\$', "\x01")
|
33
|
-
|
33
|
+
|
34
34
|
# Look for expansion
|
35
35
|
str.gsub!(/\$(\w+)\b|\$\{(\w+)\}/) do |match| # Strange that '\b' is necessary
|
36
36
|
return true if variables.include?($1 || $2)
|
@@ -38,3 +38,10 @@ def expand_variables?(str, variables)
|
|
38
38
|
|
39
39
|
return false
|
40
40
|
end
|
41
|
+
|
42
|
+
# Return true if the string contains a variable
|
43
|
+
def has_variables?(str)
|
44
|
+
# Replace escaped bashslashes and dollar signs
|
45
|
+
str = str.gsub('\\\\', "\x00").gsub('\\$', "\x01")
|
46
|
+
!(str =~ /\$[a-zA-Z{]/).nil?
|
47
|
+
end
|
@@ -43,7 +43,7 @@ module Prick::SubCommand
|
|
43
43
|
puts Prick.databases
|
44
44
|
else
|
45
45
|
# Timestamp of newest file under git control
|
46
|
-
newest_file = Command.command("ls -tr #{Git.list.join(" ")} | tail -1").last
|
46
|
+
newest_file = Command.command("ls -tr #{Git.list.join(" ")} | tail -1", stderr: false, fail: false).last
|
47
47
|
fs_time = File.mtime(newest_file)
|
48
48
|
|
49
49
|
git_branch = Git.branch.current
|
@@ -59,7 +59,7 @@ module Prick::SubCommand
|
|
59
59
|
from prick.versions
|
60
60
|
))
|
61
61
|
|
62
|
-
# Detect
|
62
|
+
# Detect if this is the current database
|
63
63
|
if Prick.state.database == database
|
64
64
|
is_current_database = true
|
65
65
|
current_database_row = rows.size
|
data/lib/prick/version.rb
CHANGED
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.
|
4
|
+
version: 0.43.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Claus Rasmussen
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2024-10-
|
11
|
+
date: 2024-10-30 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: semantic
|