Docker-DCO-1.1-Signed-off-by: Erik Hollensbe <github@hollensbe.org> (github: erikh)
| ... | ... |
@@ -4,31 +4,15 @@ package graphdb |
| 4 | 4 |
|
| 5 | 5 |
import ( |
| 6 | 6 |
"database/sql" |
| 7 |
- "os" |
|
| 8 | 7 |
|
| 9 | 8 |
_ "code.google.com/p/gosqlite/sqlite3" // registers sqlite |
| 10 | 9 |
) |
| 11 | 10 |
|
| 12 | 11 |
func NewSqliteConn(root string) (*Database, error) {
|
| 13 |
- initDatabase := false |
|
| 14 |
- |
|
| 15 |
- stat, err := os.Stat(root) |
|
| 16 |
- if err != nil {
|
|
| 17 |
- if os.IsNotExist(err) {
|
|
| 18 |
- initDatabase = true |
|
| 19 |
- } else {
|
|
| 20 |
- return nil, err |
|
| 21 |
- } |
|
| 22 |
- } |
|
| 23 |
- |
|
| 24 |
- if stat != nil && stat.Size() == 0 {
|
|
| 25 |
- initDatabase = true |
|
| 26 |
- } |
|
| 27 |
- |
|
| 28 | 12 |
conn, err := sql.Open("sqlite3", root)
|
| 29 | 13 |
if err != nil {
|
| 30 | 14 |
return nil, err |
| 31 | 15 |
} |
| 32 | 16 |
|
| 33 |
- return NewDatabase(conn, initDatabase) |
|
| 17 |
+ return NewDatabase(conn) |
|
| 34 | 18 |
} |
| ... | ... |
@@ -73,45 +73,55 @@ func IsNonUniqueNameError(err error) bool {
|
| 73 | 73 |
} |
| 74 | 74 |
|
| 75 | 75 |
// Create a new graph database initialized with a root entity |
| 76 |
-func NewDatabase(conn *sql.DB, init bool) (*Database, error) {
|
|
| 76 |
+func NewDatabase(conn *sql.DB) (*Database, error) {
|
|
| 77 | 77 |
if conn == nil {
|
| 78 | 78 |
return nil, fmt.Errorf("Database connection cannot be nil")
|
| 79 | 79 |
} |
| 80 | 80 |
db := &Database{conn: conn}
|
| 81 | 81 |
|
| 82 |
- if init {
|
|
| 83 |
- if _, err := conn.Exec(createEntityTable); err != nil {
|
|
| 84 |
- return nil, err |
|
| 85 |
- } |
|
| 86 |
- if _, err := conn.Exec(createEdgeTable); err != nil {
|
|
| 87 |
- return nil, err |
|
| 88 |
- } |
|
| 89 |
- if _, err := conn.Exec(createEdgeIndices); err != nil {
|
|
| 90 |
- return nil, err |
|
| 91 |
- } |
|
| 82 |
+ if _, err := conn.Exec(createEntityTable); err != nil {
|
|
| 83 |
+ return nil, err |
|
| 84 |
+ } |
|
| 85 |
+ if _, err := conn.Exec(createEdgeTable); err != nil {
|
|
| 86 |
+ return nil, err |
|
| 87 |
+ } |
|
| 88 |
+ if _, err := conn.Exec(createEdgeIndices); err != nil {
|
|
| 89 |
+ return nil, err |
|
| 90 |
+ } |
|
| 92 | 91 |
|
| 93 |
- rollback := func() {
|
|
| 94 |
- conn.Exec("ROLLBACK")
|
|
| 95 |
- } |
|
| 92 |
+ rollback := func() {
|
|
| 93 |
+ conn.Exec("ROLLBACK")
|
|
| 94 |
+ } |
|
| 96 | 95 |
|
| 97 |
- // Create root entities |
|
| 98 |
- if _, err := conn.Exec("BEGIN"); err != nil {
|
|
| 99 |
- return nil, err |
|
| 100 |
- } |
|
| 101 |
- if _, err := conn.Exec("INSERT INTO entity (id) VALUES (?);", "0"); err != nil {
|
|
| 102 |
- rollback() |
|
| 103 |
- return nil, err |
|
| 104 |
- } |
|
| 96 |
+ // Create root entities |
|
| 97 |
+ if _, err := conn.Exec("BEGIN"); err != nil {
|
|
| 98 |
+ return nil, err |
|
| 99 |
+ } |
|
| 105 | 100 |
|
| 106 |
- if _, err := conn.Exec("INSERT INTO edge (entity_id, name) VALUES(?,?);", "0", "/"); err != nil {
|
|
| 107 |
- rollback() |
|
| 108 |
- return nil, err |
|
| 109 |
- } |
|
| 101 |
+ if _, err := conn.Exec("DELETE FROM entity where id = ?", "0"); err != nil {
|
|
| 102 |
+ rollback() |
|
| 103 |
+ return nil, err |
|
| 104 |
+ } |
|
| 110 | 105 |
|
| 111 |
- if _, err := conn.Exec("COMMIT"); err != nil {
|
|
| 112 |
- return nil, err |
|
| 113 |
- } |
|
| 106 |
+ if _, err := conn.Exec("INSERT INTO entity (id) VALUES (?);", "0"); err != nil {
|
|
| 107 |
+ rollback() |
|
| 108 |
+ return nil, err |
|
| 109 |
+ } |
|
| 110 |
+ |
|
| 111 |
+ if _, err := conn.Exec("DELETE FROM edge where entity_id=? and name=?", "0", "/"); err != nil {
|
|
| 112 |
+ rollback() |
|
| 113 |
+ return nil, err |
|
| 114 | 114 |
} |
| 115 |
+ |
|
| 116 |
+ if _, err := conn.Exec("INSERT INTO edge (entity_id, name) VALUES(?,?);", "0", "/"); err != nil {
|
|
| 117 |
+ rollback() |
|
| 118 |
+ return nil, err |
|
| 119 |
+ } |
|
| 120 |
+ |
|
| 121 |
+ if _, err := conn.Exec("COMMIT"); err != nil {
|
|
| 122 |
+ return nil, err |
|
| 123 |
+ } |
|
| 124 |
+ |
|
| 115 | 125 |
return db, nil |
| 116 | 126 |
} |
| 117 | 127 |
|
| ... | ... |
@@ -14,7 +14,7 @@ import ( |
| 14 | 14 |
func newTestDb(t *testing.T) (*Database, string) {
|
| 15 | 15 |
p := path.Join(os.TempDir(), "sqlite.db") |
| 16 | 16 |
conn, err := sql.Open("sqlite3", p)
|
| 17 |
- db, err := NewDatabase(conn, true) |
|
| 17 |
+ db, err := NewDatabase(conn) |
|
| 18 | 18 |
if err != nil {
|
| 19 | 19 |
t.Fatal(err) |
| 20 | 20 |
} |