From 011a590b155ab91367459fbc17d7797414251ccf Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Sandbox=20=F0=9F=A4=96?= <neo4j-oss-build@neotechnology.com>
Date: Thu, 4 May 2023 10:21:47 +0000
Subject: [PATCH] Triggered by dispatch event. Origin:
 https://github.com/neo4j-graph-examples/template/commit/8556d8f9aeed10508116ebd1d7a02b9694891cff

---
 code/go/example.go         | 57 ++++++++++++++++----------------------
 code/javascript/example.js |  2 +-
 code/python/example.py     | 24 ++++++++--------
 3 files changed, 36 insertions(+), 47 deletions(-)

diff --git a/code/go/example.go b/code/go/example.go
index e709d60..6b6b4c8 100644
--- a/code/go/example.go
+++ b/code/go/example.go
@@ -3,9 +3,9 @@
 package main
 
 import (
+	"context"
 	"fmt"
-	"github.com/neo4j/neo4j-go-driver/v4/neo4j"
-	"io"
+	"github.com/neo4j/neo4j-go-driver/v5/neo4j"
 	"reflect"
 )
 
@@ -19,46 +19,37 @@ func main() {
 	}
 }
 
-func runQuery(uri, database, username, password string) (result []string, err error) {
-	driver, err := neo4j.NewDriver(uri, neo4j.BasicAuth(username, password, ""))
+func runQuery(uri, database, username, password string) (_ []string, err error) {
+	ctx := context.Background()
+	driver, err := neo4j.NewDriverWithContext(uri, neo4j.BasicAuth(username, password, ""))
 	if err != nil {
 		return nil, err
 	}
-	defer func() {err = handleClose(driver, err)}()
-	session := driver.NewSession(neo4j.SessionConfig{AccessMode: neo4j.AccessModeRead, DatabaseName: database})
-	defer func() {err = handleClose(session, err)}()
-	results, err := session.ReadTransaction(func(transaction neo4j.Transaction) (interface{}, error) {
-		result, err := transaction.Run(
-			`
-			MATCH (c:Person{name:$name})-[r:INTERACTS]->(other)
-			  RETURN other.name as person
-			`, map[string]interface{}{
-				"name": "Jaime Lannister",
-			})
+	defer func() { err = handleClose(ctx, driver, err) }()
+	query := "	MATCH (c:Person{name:$name})-[r:INTERACTS]->(other)
+	  RETURN other.name as person
+	params := map[string]any{"name": "Jaime Lannister"}
+	result, err := neo4j.ExecuteQuery(ctx, driver, query, params,
+		neo4j.EagerResultTransformer,
+		neo4j.ExecuteQueryWithDatabase(database),
+		neo4j.ExecuteQueryWithReadersRouting())
+	if err != nil {
+		return nil, err
+	}
+	persons := make([]string, len(result.Records))
+	for i, record := range result.Records {
+		// this assumes all actors have names, hence ignoring the 2nd returned value
+		name, _, err := neo4j.GetRecordValue[string](record, "person")
 		if err != nil {
 			return nil, err
 		}
-		var arr []string
-		for result.Next() {
-			value, found := result.Record().Get("person")
-			if found {
-				arr = append(arr, value.(string))
-			}
-		}
-		if err = result.Err(); err != nil {
-			return nil, err
-		}
-		return arr, nil
-	})
-	if err != nil {
-		return nil, err
+		persons[i] = name
 	}
-	result = results.([]string)
-	return result, err
+	return persons, nil
 }
 
-func handleClose(closer io.Closer, previousError error) error {
-	err := closer.Close()
+func handleClose(ctx context.Context, closer interface{ Close(context.Context) error }, previousError error) error {
+	err := closer.Close(ctx)
 	if err == nil {
 		return previousError
 	}
diff --git a/code/javascript/example.js b/code/javascript/example.js
index b24be92..339ae33 100644
--- a/code/javascript/example.js
+++ b/code/javascript/example.js
@@ -3,7 +3,7 @@
 const neo4j = require('neo4j-driver');
 const driver = neo4j.driver('neo4j://<HOST>:<BOLTPORT>',
                   neo4j.auth.basic('<USERNAME>', '<PASSWORD>'), 
-                  {/* encrypted: 'ENCRYPTION_OFF' */});
+                  {});
 
 const query =
   `
diff --git a/code/python/example.py b/code/python/example.py
index 4d17dbb..19049b2 100644
--- a/code/python/example.py
+++ b/code/python/example.py
@@ -1,22 +1,20 @@
-# pip3 install neo4j-driver
+# pip3 install neo4j
 # python3 example.py
 
 from neo4j import GraphDatabase, basic_auth
 
-driver = GraphDatabase.driver(
-  "neo4j://<HOST>:<BOLTPORT>",
-  auth=basic_auth("<USERNAME>", "<PASSWORD>"))
-
 cypher_query = '''
 MATCH (c:Person{name:$name})-[r:INTERACTS]->(other)
   RETURN other.name as person
 '''
 
-with driver.session(database="neo4j") as session:
-  results = session.read_transaction(
-    lambda tx: tx.run(cypher_query,
-                      name="Jaime Lannister").data())
-  for record in results:
-    print(record['person'])
-
-driver.close()
+with GraphDatabase.driver(
+    "neo4j://<HOST>:<BOLTPORT>",
+    auth=("<USERNAME>", "<PASSWORD>")
+) as driver:
+    result = driver.execute_query(
+        cypher_query,
+        name="Jaime Lannister",
+        database_="neo4j")
+    for record in result.records:
+        print(record['person'])