prick 0.35.0 → 0.36.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/exe/prick +15 -2
- data/lib/prick/share/init/schema/prick/tables.sql +9 -0
- data/lib/prick/subcommand/prick-drop.rb +29 -0
- data/lib/prick/subcommand/prick-run.rb +1 -1
- data/lib/prick/subcommand/prick-snapshot.rb +29 -0
- data/lib/prick/subcommand/subcommand.rb +1 -1
- data/lib/prick/version.rb +1 -1
- data/lib/prick.rb +1 -0
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 49ed6762f3557cc979f89bb1aaee3d5aa1d8d11a5ba9c7880a8b692d917dc733
|
4
|
+
data.tar.gz: 16436521e2f9a51ed6c2076ba2a54f968735868a711d170253691a69a4b34fb4
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: eedba5e0757b8f19c94d4bf898ea156b93090cd2466e333860d7a4da9ce91d75fbc4acab596bbc06b0a8f260909c9770715299c55040c017d45b7f679d5528f0
|
7
|
+
data.tar.gz: 7d98f2a0a8e6ed8230bc44b3d16d1c46f4baa85956bdbcd893325e2d062d8a6d46c4277cf85af8c5e833fb20bbf8324a75d8788d05418cd87185976c6c16a76a
|
data/exe/prick
CHANGED
@@ -150,6 +150,12 @@ SPEC = %(
|
|
150
150
|
different data sets
|
151
151
|
|
152
152
|
# TODO: A --clean option that resets data
|
153
|
+
#
|
154
|
+
|
155
|
+
snapshot!
|
156
|
+
Records maximum ID for all tables and stores them in prick.snapshot. It is
|
157
|
+
used by 'drop data' to reset data to the point in time of the snapshot.
|
158
|
+
Only one snapshot can be created at a time
|
153
159
|
|
154
160
|
version!
|
155
161
|
Print project version
|
@@ -296,7 +302,6 @@ begin
|
|
296
302
|
database = state.database
|
297
303
|
username = state.username
|
298
304
|
environment = state.environment
|
299
|
-
|
300
305
|
# Process subcommands
|
301
306
|
case opts.subcommand
|
302
307
|
when :version!
|
@@ -379,12 +384,18 @@ begin
|
|
379
384
|
step: cmd.step?, timer: cmd.time?, dump: dump, schema: cmd.schema)
|
380
385
|
|
381
386
|
when :bash!
|
387
|
+
args.expect(0)
|
382
388
|
Prick::SubCommand.bash(main: cmd.main?)
|
383
389
|
|
384
390
|
when :fox!
|
385
391
|
require_db
|
386
392
|
Prick::SubCommand.fox(database, username, args)
|
387
393
|
|
394
|
+
when :snapshot!
|
395
|
+
require_db
|
396
|
+
args.expect(0)
|
397
|
+
Prick::SubCommand.snapshot(database, username)
|
398
|
+
|
388
399
|
when :drop!
|
389
400
|
case cmd.subcommand
|
390
401
|
when :users!
|
@@ -400,7 +411,9 @@ begin
|
|
400
411
|
database = args.expect(0..1) || database
|
401
412
|
Prick::SubCommand.drop_database(database)
|
402
413
|
when :data!
|
403
|
-
|
414
|
+
args.expect(0)
|
415
|
+
require_db
|
416
|
+
Prick::SubCommand.drop_data(database)
|
404
417
|
when :schema!
|
405
418
|
require_db
|
406
419
|
schemas = args.to_a
|
@@ -35,3 +35,12 @@ create table builds (
|
|
35
35
|
make_duration float -- Duration of enclosing make script
|
36
36
|
);
|
37
37
|
|
38
|
+
create table snapshots (
|
39
|
+
id integer generated by default as identity primary key,
|
40
|
+
schema_name varchar not null,
|
41
|
+
table_name varchar not null,
|
42
|
+
max_id integer, -- may be null
|
43
|
+
|
44
|
+
unique(schema_name, table_name)
|
45
|
+
);
|
46
|
+
|
@@ -41,6 +41,35 @@ module Prick::SubCommand
|
|
41
41
|
State.connection { |conn| conn.rdbms.drop database }
|
42
42
|
end
|
43
43
|
|
44
|
+
# Drop data not in snapshot
|
45
|
+
def self.drop_data(database, schemas = nil)
|
46
|
+
conn = Prick.state.conn
|
47
|
+
conn.session.triggers(false) {
|
48
|
+
if schemas.nil?
|
49
|
+
builder = Prick::Build::Builder.new(conn, Prick.state.schema_dir)
|
50
|
+
pool = builder.pool
|
51
|
+
schemas = pool.refresh_schemas
|
52
|
+
end
|
53
|
+
schema_list = conn.quote_literal_list(schemas)
|
54
|
+
schema_expr = schemas ? "true = true" : "schema_name in #{schema_list}"
|
55
|
+
tables = conn.tuples %(
|
56
|
+
select schema_name, table_name, max_id
|
57
|
+
from prick.snapshots
|
58
|
+
where #{schema_expr}
|
59
|
+
)
|
60
|
+
tables.each { |schema, table, max_id|
|
61
|
+
uid = "#{schema}.#{table}"
|
62
|
+
if max_id
|
63
|
+
conn.exec "delete from #{uid} where id > #{max_id}"
|
64
|
+
conn.schema.set_serial(schema, table, max_id) if conn.schema.sequence(schema, table)
|
65
|
+
else
|
66
|
+
conn.exec "delete from #{uid}"
|
67
|
+
conn.schema.set_serial(schema, table, nil) if conn.schema.sequence(schema, table)
|
68
|
+
end
|
69
|
+
}
|
70
|
+
}
|
71
|
+
end
|
72
|
+
|
44
73
|
# Empty the database
|
45
74
|
def self.drop_schema(database, schemas = [])
|
46
75
|
constrain database, String
|
@@ -0,0 +1,29 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require_relative '../builder/builder.rb'
|
4
|
+
|
5
|
+
module Prick::SubCommand
|
6
|
+
def self.snapshot(
|
7
|
+
database, username,
|
8
|
+
builddir: Prick.state.schema_dir)
|
9
|
+
|
10
|
+
conn = Prick.state.connection
|
11
|
+
builder = Prick::Build::Builder.new(conn, builddir)
|
12
|
+
pool = builder.pool
|
13
|
+
schemas = pool.refresh_schemas
|
14
|
+
|
15
|
+
# Clear snapshots table
|
16
|
+
conn.exec "delete from prick.snapshots"
|
17
|
+
|
18
|
+
# Fill it again
|
19
|
+
records = []
|
20
|
+
for schema in schemas
|
21
|
+
conn.schema.list_tables(schema).each { |table|
|
22
|
+
max_id = conn.value "select max(id) from #{schema}.#{table}"
|
23
|
+
records << { schema_name: schema, table_name: table, max_id: max_id}
|
24
|
+
}
|
25
|
+
end
|
26
|
+
conn.insert("prick", "snapshots", records)
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
data/lib/prick/version.rb
CHANGED
data/lib/prick.rb
CHANGED
@@ -53,6 +53,7 @@ require_relative 'prick/subcommand/prick-release.rb'
|
|
53
53
|
require_relative 'prick/subcommand/prick-run.rb'
|
54
54
|
require_relative 'prick/subcommand/prick-set.rb'
|
55
55
|
require_relative 'prick/subcommand/prick-setup.rb'
|
56
|
+
require_relative 'prick/subcommand/prick-snapshot.rb'
|
56
57
|
require_relative 'prick/subcommand/prick-teardown.rb'
|
57
58
|
|
58
59
|
module Prick
|
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.36.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-
|
11
|
+
date: 2024-05-06 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: semantic
|
@@ -233,6 +233,7 @@ files:
|
|
233
233
|
- lib/prick/subcommand/prick-run.rb
|
234
234
|
- lib/prick/subcommand/prick-set.rb
|
235
235
|
- lib/prick/subcommand/prick-setup.rb
|
236
|
+
- lib/prick/subcommand/prick-snapshot.rb
|
236
237
|
- lib/prick/subcommand/prick-teardown.rb
|
237
238
|
- lib/prick/subcommand/subcommand.rb
|
238
239
|
- lib/prick/version.rb
|