-
Notifications
You must be signed in to change notification settings - Fork 0
/
describe_sequences.go
61 lines (56 loc) · 1.41 KB
/
describe_sequences.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
package pgutil
import (
"context"
)
type SequenceDescription struct {
Namespace string
Name string
Type string
StartValue int
MinimumValue int
MaximumValue int
Increment int
CycleOption string
}
func (d SequenceDescription) Equals(other SequenceDescription) bool {
return true &&
d.Namespace == other.Namespace &&
d.Name == other.Name &&
d.Type == other.Type &&
d.StartValue == other.StartValue &&
d.MinimumValue == other.MinimumValue &&
d.MaximumValue == other.MaximumValue &&
d.Increment == other.Increment &&
d.CycleOption == other.CycleOption
}
var scanSequences = NewSliceScanner(func(s Scanner) (l SequenceDescription, _ error) {
err := s.Scan(
&l.Namespace,
&l.Name,
&l.Type,
&l.StartValue,
&l.MinimumValue,
&l.MaximumValue,
&l.Increment,
&l.CycleOption,
)
return l, err
})
func DescribeSequences(ctx context.Context, db DB) ([]SequenceDescription, error) {
return scanSequences(db.Query(ctx, RawQuery(`
SELECT
s.sequence_schema AS namespace,
s.sequence_name AS name,
s.data_type AS type,
s.start_value AS start_value,
s.minimum_value AS minimum_value,
s.maximum_value AS maximum_value,
s.increment AS increment,
s.cycle_option AS cycle_option
FROM information_schema.sequences s
WHERE
s.sequence_schema NOT LIKE 'pg_%' AND
s.sequence_schema != 'information_schema'
ORDER BY s.sequence_schema, s.sequence_name
`)))
}