90 lines
2.0 KiB
Go
90 lines
2.0 KiB
Go
package main
|
|
|
|
import (
|
|
"log"
|
|
"fmt"
|
|
"github.com/neo4j/neo4j-go-driver/v5/neo4j"
|
|
)
|
|
|
|
func handle_if_error(err error) {
|
|
if err != nil {
|
|
log.Fatal("Error occured: %s", err)
|
|
}
|
|
}
|
|
|
|
func main() {
|
|
dbUri := "bolt://localhost:7687"
|
|
driver, err := neo4j.NewDriver(dbUri, neo4j.BasicAuth("", "", ""))
|
|
if err != nil {
|
|
log.Fatal("An error occurred opening conn: %s", err)
|
|
}
|
|
defer driver.Close()
|
|
|
|
session := driver.NewSession(neo4j.SessionConfig{})
|
|
defer session.Close()
|
|
|
|
_, err = session.WriteTransaction(clearDatabase)
|
|
handle_if_error(err)
|
|
fmt.Println("Database cleared.")
|
|
|
|
_, err = session.WriteTransaction(createItemFn)
|
|
handle_if_error(err)
|
|
fmt.Println("Record created.")
|
|
|
|
_,err = session.WriteTransaction(testAll)
|
|
handle_if_error(err)
|
|
fmt.Println("All ok!")
|
|
}
|
|
|
|
func clearDatabase(tx neo4j.Transaction) (interface{}, error) {
|
|
result, err := tx.Run(
|
|
"MATCH (n) DETACH DELETE n;",
|
|
map[string]interface{}{})
|
|
handle_if_error(err)
|
|
return result.Consume()
|
|
}
|
|
|
|
func createItemFn(tx neo4j.Transaction) (interface{}, error) {
|
|
result, err := tx.Run(
|
|
`CREATE (alice:Person {name: "Alice", age: 22});`,
|
|
map[string]interface{}{})
|
|
handle_if_error(err)
|
|
return result.Consume()
|
|
}
|
|
|
|
func testAll(tx neo4j.Transaction) (interface{}, error) {
|
|
result, err := tx.Run(
|
|
"MATCH (n) RETURN n;",
|
|
map[string]interface{}{})
|
|
handle_if_error(err)
|
|
|
|
if !result.Next() {
|
|
log.Fatal("Missing result.")
|
|
}
|
|
|
|
node_record, found := result.Record().Get("n")
|
|
if !found {
|
|
return nil, fmt.Errorf("Wrong result returned.")
|
|
}
|
|
|
|
node_value := node_record.(neo4j.Node)
|
|
fmt.Println("Record matched.")
|
|
|
|
label := node_value.Labels[0]
|
|
name, err := neo4j.GetProperty[string](node_value, "name")
|
|
handle_if_error(err)
|
|
age, err := neo4j.GetProperty[int64](node_value, "age")
|
|
handle_if_error(err)
|
|
|
|
if label != "Person" && name != "Alice" && age != 22 {
|
|
return nil, fmt.Errorf("Data doesn't match.")
|
|
}
|
|
|
|
fmt.Println("Label", label)
|
|
fmt.Println("name", name)
|
|
fmt.Println("age", age)
|
|
|
|
return result.Consume()
|
|
}
|
|
|