4
4
package schema
5
5
6
6
import (
7
+ "context"
8
+ "database/sql"
9
+
10
+ jc "github.com/juju/testing/checkers"
7
11
gc "gopkg.in/check.v1"
8
12
)
9
13
@@ -19,16 +23,47 @@ func (s *charmSchemaSuite) TestCharmSequence(c *gc.C) {
19
23
// Insert the first sequence, then every other one is monotonically
20
24
// increasing.
21
25
22
- s .assertExecSQL (c , "INSERT INTO sequence_charm_local (source_id, reference_name, sequence) VALUES ('1', 'foo', 1)" )
23
- s .assertExecSQL (c , "INSERT INTO charm (uuid, source_id, reference_name, revision) VALUES ('abc', '1', 'foo', 1)" )
26
+ s .assertExecSQL (c , "INSERT INTO sequence_charm_local (reference_name, sequence) VALUES ('foo', 1)" )
27
+ s .assertExecSQL (c , "UPDATE sequence_charm_local SET sequence=2 WHERE reference_name='foo'" )
28
+ s .assertExecSQL (c , "UPDATE sequence_charm_local SET sequence=3 WHERE reference_name='foo'" )
29
+
30
+ // Ensure we can't go backwards.
24
31
25
- s .assertExecSQL (c , "UPDATE sequence_charm_local SET sequence=2 WHERE source_id='1' AND reference_name='foo'" )
26
- s . assertExecSQL ( c , "INSERT INTO charm (uuid, source_id, reference_name, revision) VALUES ('def', '1', 'foo', 2)" )
32
+ s .assertExecSQLError (c , "UPDATE sequence_charm_local SET sequence=2 AND reference_name='foo'" , "sequence number must monotonically increase " )
33
+ }
27
34
28
- s . assertExecSQL ( c , "UPDATE sequence_charm_local SET sequence=3 WHERE source_id='1' AND reference_name='foo'" )
29
- s .assertExecSQL (c , "INSERT INTO charm (uuid, source_id, reference_name, revision) VALUES ('ghi', '1', 'foo', 3)" )
35
+ func ( s * charmSchemaSuite ) TestCharmSequenceWithMultipleReferenceNames ( c * gc. C ) {
36
+ s .applyDDL (c , ModelDDL () )
30
37
31
- // Ensure we can't go backwards.
38
+ s .assertExecSQL (c , "INSERT INTO sequence_charm_local (reference_name, sequence) VALUES ('foo', 1)" )
39
+ s .assertExecSQL (c , "UPDATE sequence_charm_local SET sequence=2 WHERE reference_name='foo'" )
40
+ s .assertExecSQL (c , "INSERT INTO sequence_charm_local (reference_name, sequence) VALUES ('bar', 1)" )
41
+ s .assertExecSQL (c , "UPDATE sequence_charm_local SET sequence=3 WHERE reference_name='foo'" )
42
+ s .assertExecSQL (c , "UPDATE sequence_charm_local SET sequence=2 WHERE reference_name='bar'" )
43
+
44
+ s .assertSequence (c , "foo" , 3 )
45
+ s .assertSequence (c , "bar" , 2 )
46
+
47
+ }
48
+
49
+ func (s * charmSchemaSuite ) assertSequence (c * gc.C , name string , expected int ) {
50
+ var sequence int
51
+ err := s .TxnRunner ().StdTxn (context .Background (), func (ctx context.Context , tx * sql.Tx ) error {
52
+ row , err := tx .QueryContext (ctx , "SELECT sequence FROM sequence_charm_local WHERE reference_name=?" , name )
53
+ if err != nil {
54
+ return err
55
+ }
56
+ defer row .Close ()
57
+
58
+ if ! row .Next () {
59
+ return sql .ErrNoRows
60
+ }
61
+ if err := row .Scan (& sequence ); err != nil {
62
+ return err
63
+ }
32
64
33
- s .assertExecSQLError (c , "UPDATE sequence_charm_local SET sequence=2 WHERE source_id='1' AND reference_name='foo'" , "sequence number must monotonically increase" )
65
+ return row .Err ()
66
+ })
67
+ c .Assert (err , jc .ErrorIsNil )
68
+ c .Check (sequence , gc .Equals , expected )
34
69
}
0 commit comments