forked from OpenBazaar/openbazaar-go
/
Migration004.go
153 lines (147 loc) · 3.13 KB
/
Migration004.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
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
package migrations
import (
"database/sql"
"os"
"path"
_ "github.com/mutecomm/go-sqlcipher"
)
type Migration004 struct{}
func (Migration004) Up(repoPath string, dbPassword string, testnet bool) error {
var dbPath string
if testnet {
dbPath = path.Join(repoPath, "datastore", "testnet.db")
} else {
dbPath = path.Join(repoPath, "datastore", "mainnet.db")
}
db, err := sql.Open("sqlite3", dbPath)
if err != nil {
return err
}
if dbPassword != "" {
p := "pragma key='" + dbPassword + "';"
_, err = db.Exec(p)
if err != nil {
return err
}
}
tx, err := db.Begin()
if err != nil {
return err
}
stmt, err := tx.Prepare("ALTER TABLE sales ADD COLUMN needsSync integer;")
if err != nil {
return err
}
defer stmt.Close()
_, err = stmt.Exec()
if err != nil {
err0 := tx.Rollback()
if err0 != nil {
log.Error(err0)
}
return err
}
err = tx.Commit()
if err != nil {
return err
}
f1, err := os.Create(path.Join(repoPath, "repover"))
if err != nil {
return err
}
_, err = f1.Write([]byte("5"))
if err != nil {
return err
}
f1.Close()
return nil
}
func (Migration004) Down(repoPath string, dbPassword string, testnet bool) error {
var dbPath string
if testnet {
dbPath = path.Join(repoPath, "datastore", "testnet.db")
} else {
dbPath = path.Join(repoPath, "datastore", "mainnet.db")
}
db, err := sql.Open("sqlite3", dbPath)
if err != nil {
return err
}
if dbPassword != "" {
p := "pragma key='" + dbPassword + "';"
_, err = db.Exec(p)
if err != nil {
return err
}
}
tx, err := db.Begin()
if err != nil {
return err
}
stmt1, err := tx.Prepare("ALTER TABLE sales RENAME TO temp_sales;")
if err != nil {
return err
}
defer stmt1.Close()
_, err = stmt1.Exec()
if err != nil {
err0 := tx.Rollback()
if err0 != nil {
log.Error(err)
}
return err
}
stmt2, err := tx.Prepare(`create table sales (orderID text primary key not null, contract blob, state integer, read integer, timestamp integer, total integer, thumbnail text, buyerID text, buyerHandle text, title text, shippingName text, shippingAddress text, paymentAddr text, funded integer, transactions blob);`)
if err != nil {
return err
}
defer stmt2.Close()
_, err = stmt2.Exec()
if err != nil {
err0 := tx.Rollback()
if err0 != nil {
log.Error(err)
}
return err
}
stmt3, err := tx.Prepare(`INSERT INTO sales SELECT orderID, contract, state, read, timestamp, total, thumbnail, buyerID, buyerHandle, title, shippingName, shippingAddress, paymentAddr, funded, transactions FROM temp_sales;`)
if err != nil {
return err
}
defer stmt3.Close()
_, err = stmt3.Exec()
if err != nil {
err0 := tx.Rollback()
if err0 != nil {
log.Error(err)
}
return err
}
stmt4, err := tx.Prepare(`DROP TABLE temp_sales;`)
if err != nil {
return err
}
defer stmt4.Close()
_, err = stmt4.Exec()
if err != nil {
err0 := tx.Rollback()
if err0 != nil {
log.Error(err)
}
return err
}
err = tx.Commit()
if err != nil {
return err
}
f1, err := os.Create(path.Join(repoPath, "repover"))
if err != nil {
return err
}
_, err = f1.Write([]byte("4"))
if err != nil {
return err
}
f1.Close()
return nil
}