This is an automated email from the ASF dual-hosted git repository.

dehowef pushed a commit to branch PG13
in repository https://gitbox.apache.org/repos/asf/age.git


The following commit(s) were added to refs/heads/PG13 by this push:
     new 162f9250 Update the Go driver documentation, Linux installer, and CI 
(#1527) (#1559)
162f9250 is described below

commit 162f9250c916c208d379ae53a50195b544c2409d
Author: John Gemignani <[email protected]>
AuthorDate: Wed Feb 7 09:24:10 2024 -0800

    Update the Go driver documentation, Linux installer, and CI (#1527) (#1559)
---
 .github/workflows/go-driver.yml   |   2 +-
 drivers/golang/README.md          |  34 +++---
 drivers/golang/go.mod             |   4 +-
 drivers/golang/go.sum             |   4 +
 drivers/golang/install.sh         | 237 +++++++++++++++++++-------------------
 drivers/golang/parser/generate.sh |   3 +
 6 files changed, 149 insertions(+), 135 deletions(-)

diff --git a/.github/workflows/go-driver.yml b/.github/workflows/go-driver.yml
index 9edc2fe4..a89f148f 100644
--- a/.github/workflows/go-driver.yml
+++ b/.github/workflows/go-driver.yml
@@ -12,7 +12,7 @@ jobs:
     runs-on: ubuntu-latest
     strategy:
       matrix:
-        go-version: [ '1.18', '1.19' ]
+        go-version: [ '1.20', '1.21' ]
 
     defaults:
       run:
diff --git a/drivers/golang/README.md b/drivers/golang/README.md
index b4adc664..308472f7 100644
--- a/drivers/golang/README.md
+++ b/drivers/golang/README.md
@@ -1,4 +1,4 @@
-# age AGType parser and driver support for Golang 
+# age AGType parser and driver support for Golang
 
 AGType parser and driver support for [Apache AGE](https://age.apache.org/), 
graph extension for PostgreSQL.
 
@@ -6,27 +6,29 @@ AGType parser and driver support for [Apache 
AGE](https://age.apache.org/), grap
 * Unmarshal AGE result data(AGType) to Vertex, Edge, Path
 * Cypher query support for 3rd. Party sql driver (enables to use cypher 
queries directly)
 
-### Prerequisites
-* over Go 1.18 / 1.19
-* This module runs on golang standard api 
[database/sql](https://golang.org/pkg/database/sql/) and 
[antlr4-python3](https://github.com/antlr/antlr4/tree/master/runtime/Go/antlr)
+### Prerequisites (Required)
+* Java 11, or greater, installed.
+* Go 1.18, or greater, installed.
+* This module runs on the golang standard api 
[database/sql](https://golang.org/pkg/database/sql/) and 
[antlr4-python3](https://github.com/antlr/antlr4/tree/master/runtime/Go/antlr)
+* ANTLR 4.11.1, or greater, installed.
 
 ### Installation (From source)
 Run (Windows): install.bat
 Run (Linux & OSX):
 ```
-sh install.sh
+cd age/drivers/golang
+./install.sh
 ```
 
-### Go get  
-``` 
+### Go get
+```
 go get github.com/apache/age/drivers/golang
 ```
 ### gomod
-``` 
+```
 require  github.com/apache/age/drivers/golang {version}
 ```
 
-
 Check [latest version](https://github.com/apache/age/releases)
 
 ### For more information about [Apache AGE](https://age.apache.org/)
@@ -34,17 +36,23 @@ Check [latest 
version](https://github.com/apache/age/releases)
 * GitHub : https://github.com/apache/age
 * Document : https://age.apache.org/docs/
 
-### Check AGE loaded on your PostgreSQL
+### Check that Apache AGE is loaded on your PostgreSQL database
 Connect to your containerized Postgres instance and then run the following 
commands:
 ```(sql)
-# psql 
+# psql
 CREATE EXTENSION age;
 LOAD 'age';
 SET search_path = ag_catalog, "$user", public;
 ```
 
 ### Test
-Check out and rewrite DSN in age/drivers/golang/age/age_test.go
+For the tests to work, please make sure the following has been done.
+* The driver has been successfully installed following the instructions above.
+* Make sure the database you will run tests against has Apache AGE installed.
+* Make sure to modify the DSN value in age/drivers/golang/age/age_test.go
+* Make sure the DSN has the correct database and connect string.
+* Make sure the database has a graph called testGraph created.
+
 ```
 cd age/drivers/golang/age
 go test . -v
@@ -52,7 +60,7 @@ go test . -v
 ```
 
 ### Samples
-* Usage 1: using database/sql API and Cypher execution function 'ExecCypher' 
+* Usage 1: using database/sql API and Cypher execution function 'ExecCypher'
   Sample : [samples/sql_api_sample.go](samples/sql_api_sample.go)
 
 * Usage 2: using Age Wrapper 
diff --git a/drivers/golang/go.mod b/drivers/golang/go.mod
index ce329424..c9745424 100644
--- a/drivers/golang/go.mod
+++ b/drivers/golang/go.mod
@@ -23,13 +23,13 @@ go 1.19
 
 require (
        github.com/antlr/antlr4/runtime/Go/antlr/v4 
v4.0.0-20230321174746-8dcc6526cfb1
-       github.com/lib/pq v1.10.7
+       github.com/lib/pq v1.10.9
        github.com/stretchr/testify v1.7.0
 )
 
 require (
        github.com/davecgh/go-spew v1.1.0 // indirect
        github.com/pmezard/go-difflib v1.0.0 // indirect
-       golang.org/x/exp v0.0.0-20230321023759-10a507213a29 // indirect
+       golang.org/x/exp v0.0.0-20240119083558-1b970713d09a // indirect
        gopkg.in/yaml.v3 v3.0.0 // indirect
 )
diff --git a/drivers/golang/go.sum b/drivers/golang/go.sum
index 3c2ce325..957ce775 100644
--- a/drivers/golang/go.sum
+++ b/drivers/golang/go.sum
@@ -4,6 +4,8 @@ github.com/davecgh/go-spew v1.1.0 
h1:ZDRjVQ15GmhC3fiQ8ni8+OwkZQO4DARzQgrnXU1Liz8
 github.com/davecgh/go-spew v1.1.0/go.mod 
h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
 github.com/lib/pq v1.10.7 h1:p7ZhMD+KsSRozJr34udlUrhboJwWAgCg34+/ZZNvZZw=
 github.com/lib/pq v1.10.7/go.mod 
h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o=
+github.com/lib/pq v1.10.9 h1:YXG7RB+JIjhP29X+OtkiDnYaXQwpS4JEWq7dtCCRUEw=
+github.com/lib/pq v1.10.9/go.mod 
h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o=
 github.com/pmezard/go-difflib v1.0.0 
h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
 github.com/pmezard/go-difflib v1.0.0/go.mod 
h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
 github.com/stretchr/objx v0.1.0/go.mod 
h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
@@ -11,6 +13,8 @@ github.com/stretchr/testify v1.7.0 
h1:nwc3DEeHmmLAfoZucVR881uASk0Mfjw8xYJ99tb5Cc
 github.com/stretchr/testify v1.7.0/go.mod 
h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
 golang.org/x/exp v0.0.0-20230321023759-10a507213a29 
h1:ooxPy7fPvB4kwsA2h+iBNHkAbp/4JxTSwCmvdjEYmug=
 golang.org/x/exp v0.0.0-20230321023759-10a507213a29/go.mod 
h1:CxIveKay+FTh1D0yPZemJVgC/95VzuuOLq5Qi4xnoYc=
+golang.org/x/exp v0.0.0-20240119083558-1b970713d09a 
h1:Q8/wZp0KX97QFTc2ywcOE0YRjZPVIx+MXInMzdvQqcA=
+golang.org/x/exp v0.0.0-20240119083558-1b970713d09a/go.mod 
h1:idGWGoKP1toJGkd5/ig9ZLuPcZBC3ewk7SzmH0uou08=
 gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 
h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM=
 gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod 
h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
 gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod 
h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
diff --git a/drivers/golang/install.sh b/drivers/golang/install.sh
index 8cd1a7d8..1465a217 100755
--- a/drivers/golang/install.sh
+++ b/drivers/golang/install.sh
@@ -1,141 +1,140 @@
 #!/bin/sh
 
+# get OS
 os=$(uname)
+
+# get architecture
 arch=$(uname -m)
 
-java=$(java -version 2>&1 | head -n 1 | cut -d ' ' -f 3 | cut -d '.' -f 1 | 
cut -d '"' -f 2)
-# Check JDK version
-echo "Checking for JDK..."
-if ! java -version >/dev/null 2>&1 || [ $java -lt 11 ]; then
-  echo "JDK not found or less than version 11, would you like to install? ()"
-  echo "Y/N ->"
-  read answer
-  if [ "$answer" = y ] || [ "$answer" = Y ]; then
-       echo "Installing..."
-               if [[ "$os" == "Darwin" ]]; then
-                       cd /tmp
-                 if [[ "$arch" == "x86_64" ]]; then
-                   curl 
"https://download.oracle.com/java/20/latest/jdk-20_macos-x64_bin.dmg"; -o 
jdk-20_bin.dmg
-                 elif [[ "$arch" == "arm64" ]]; then
-                   curl 
"https://download.oracle.com/java/20/latest/jdk-20_macos-aarch64_bin.dmg"; -o 
jdk-20_bin.dmg
-                 fi
-                 hdiutil mount jdk-20_bin.dmg
-                 # sudo installer -pkg "/Volumes/JDK 20/JDK 20.pkg" -target "/"
-                 sudo open -w "/Volumes/JDK 20/JDK 20.pkg"
-                 hdiutil unmount "/Volumes/JDK 20"
-                 rm jdk-20_bin.dmg
-
-               elif [[ "$os" == "Linux" ]]; then
-                 mkdir -p ~/tmp/jdk20
-                 cd ~/tmp/jdk20
-                 if [[ "$arch" == "x86_64" ]]; then
-                       curl 
"https://download.oracle.com/java/20/latest/jdk-20_linux-x64_bin.tar.gz"; -o 
jdk-20_bin.tar.gz
-                 elif [[ "$arch" == "arm64" ]]; then
-                       curl 
"https://download.oracle.com/java/20/latest/jdk-20_linux-aarch64_bin.tar.gz"; -o 
jdk-20_bin.tar.gz
-                 fi
-                 sudo tar zxvf jdk-20_bin.tar.gz -C /usr/local/
-                 cd ~/
-                 rm -rf ~/tmp/jdk20/
-       fi
-       echo "JDK installation complete."
-  else
-       echo "Please install JDK >= 11.0.16"
-       exit 0
-       fi
+# Check Java installation
+echo "Checking for minimum Java installation..."
+
+java_version=$(java -version 2>&1 | awk -F '"' '/version/ {print $2}')
+
+if [ ! -z $java_version ]; then
+    echo "Java version $java_version"
 else
-  echo "JDK already installed."
+    echo "Java not found. Please install Java."
 fi
 
-antlr=$(/usr/local/jdk-20/bin/jar xf /usr/local/antlr/antlr-*-complete.jar 
META-INF/MANIFEST.MF >/dev/null 2>&1 && grep 'Implementation-Version' 
META-INF/MANIFEST.MF | cut -d ' ' -f 2 && rm -rf META-INF)
-# Check ANTLR installation and version
-echo "Checking for ANTLR..."
-check_antlr    () {
-       if [ ! -z $antlr ]; then
-               if ([ "$(echo $antlr | cut -d '.' -f 1)" -lt 4 ] && [ "$(echo 
$antlr | cut -d '.' -f 2)" -lt 11 ] && [ "$(echo $antlr | cut -d '.' -f 3)" -lt 
1 ]); then
-                       return 0
-               else
-                       return 1        
-               fi
-       else
-               return 0
-       fi
-}
-
-if check_antlr; then
-       echo "ANTLR not found in Default Location or less than version 4.11.1, 
would you like to Install?"
-       echo "(If installed in other location, please edit the location inside 
the shell script before running)"
-       echo "Y/N ->"
-       read answer
-       if [ "$answer" = y ] || [ "$answer" = Y ]; then
-                       mkdir -p ~/tmp/antlr4.11.1
-                       cd ~/tmp/antlr4.11.1
-                       curl -LO 
"https://www.antlr.org/download/antlr-4.11.1-complete.jar";
-                       sudo mkdir -p /usr/local/antlr
-                       sudo mv ~/tmp/antlr4.11.1/antlr-4.11.1-complete.jar 
/usr/local/antlr/antlr-4.11.1-complete.jar
-
-                       echo 'export 
CLASSPATH=".:/usr/local/antlr/antlr-4.11.1-complete.jar"' >>~/.bashrc
-                       . ~/.bashrc
-                       echo "ANTLR installation complete."
-               else
-                       echo "Please install ANTLR >= 4.11.1"
-               exit 0
-       fi
-       #
+# Get Java version
+java_major=$(echo $java_version | cut -d '.' -f1)
+java_minor=$(echo $java_version | cut -d '.' -f2)
+java_patch=$(echo $java_version | cut -d '.' -f3)
+
+# Check Java version
+java_version_flag=0
+if [ $java_major -lt 11 ]; then
+    java_version_flag=0
+elif [ $java_minor -lt 0 ]; then
+    java_version_flag=0
+elif [ $java_patch -lt 0 ]; then
+    java_version_flag=0
 else
-       echo "ANTLR already installed."
+    java_version_flag=1
 fi
 
-# Check Go installation and version
-echo "Checking for Go..."
-if ! command -v go >/dev/null 2>&1 || { [ $(go version | grep -o -E 
'[0-9]+\.[0-9]+' | head -n 1 | cut -d '.' -f 1) -lt 1 ] && [ $(go version | 
grep -o -E '[0-9]+\.[0-9]+' | head -n 1 | cut -d '.' -f 2) -lt 19 ]; }; then
-       echo "Go not installed or version is less than 1.19, would you like to 
install?"
-  echo "Y/N ->"
-       read answer
-  if [ "$answer" = y ] || [ "$answer" = Y ]; then      
-               if [[ "$os" == "Darwin" ]]; then
-                       cd /tmp
-                 if [[ "$arch" == "x86_64" ]]; then
-                   curl "https://go.dev/dl/go1.20.2.darwin-amd64.pkg"; -o 
go1.20.2.pkg
-                 elif [[ "$arch" == "arm64" ]]; then
-                   curl "https://go.dev/dl/go1.20.2.darwin-arm64.pkg"; -o 
go1.20.2.pkg
-                 fi
-                 
-                       #sudo installer -pkg "go1.20.2.pkg" -target "/"
-                       sudo open -w golang.pkg
-                 
-         elif [[ "$os" == "Linux" ]]; then
-                 mkdir -p ~/tmp/go1.20.2
-                 cd ~/tmp/go1.20.2
-                 if [[ "$arch" == "x86_64" ]]; then
-                       curl "https://go.dev/dl/go1.20.2.linux-amd64.tar.gz"; -o 
go1.20.2.tar.gz
-                 elif [[ "$arch" == "arm64" ]]; then
-                       curl "https://go.dev/dl/go1.20.2.linux-arm64.tar.gz"; -o 
go1.20.2.tar.gz
-               fi
-               
-               if command -v go >/dev/null 2>&1; then
-                       rm -rf /usr/local/go
-               fi
-               sudo tar -C /usr/local -xzf go1.20.2.linux-amd64.tar.gz
-               
-               if ! [[ ":$PATH:" == *":/usr/local/go/bin:"* ]]; then
-                       export PATH=$PATH:/usr/local/go/bin
-               fi
-         fi
-         echo "Go installation complete"
-       else
-       echo "Please install Go >= 1.19"
-       exit 0
-       fi
+if [ $java_version_flag -eq 0 ]; then
+    echo "Java version less than 11.0.0"
+    echo "NOTE: If a newer version of Java is installed, but not set as "
+    echo "      the current version, exit and select it before continuing."
+    exit 0
 else
-  echo "Go already installed."
+    echo "Java is installed."
+    echo ""
 fi
 
+# Check ANTLR installation
+echo "Checking for minimum ANTLR installation..."
+jar xf /usr/local/antlr/antlr-*-complete.jar META-INF/MANIFEST.MF >/dev/null 
2>&1
+antlr_version=$(grep 'Implementation-Version' META-INF/MANIFEST.MF | cut -d ' 
' -f 2)
+rm -rf META-INF
 
+if [ ! -z $antlr_version ]; then
+    echo "ANTLR version $antlr_version"
+else
+    echo "ANTLR not found. Please install ANTLR."
+    exit 0
+fi
 
+# Check ANTLR version
+antlr_version_flag=0
+antlr_major=$(echo $antlr_version | cut -d '.' -f 1)
+antlr_minor=$(echo $antlr_version | cut -d '.' -f 2)
+antlr_patch=$(echo $antlr_version | cut -d '.' -f 3 | sed 's/\r//')
+
+if [ $antlr_major -lt 4 ]; then
+    antlr_version_flag=0
+elif [ $antlr_minor -lt 11 ]; then
+    antlr_version_flag=0
+elif [ $antlr_patch -lt 1 ]; then
+    antlr_version_flag=0
+else
+    antlr_version_flag=1
+fi
+
+if [ $antlr_version_flag -eq 0 ]; then
+    echo "ANTLR version less than 4.11.1"
+    exit 0
+else
+    echo "ANTLR is installed."
+    echo ""
+fi
+
+# Check Go installation
+echo "Checking for minimum Golang installation..."
+go_version=$(go version 2>&1 | cut -d' ' -f3)
+
+if [ ! -z $go_version ]; then
+    echo "Golang version $go_version"
+else
+    echo "Golang not found. Please install Golang."
+    exit 0
+fi
+
+# Check Go version
+go_version_flag=0
+go_major=$(echo $go_version | cut -d '.' -f1 | cut -d 'o' -f 2)
+go_minor=$(echo $go_version | cut -d '.' -f2)
+go_patch=$(echo $go_version | cut -d '.' -f3)
+
+if [ $go_major -lt 1 ]; then
+    go_version_flag=0
+elif [ $go_minor -lt 18 ]; then
+    go_version_flag=0
+elif [ $go_patch -lt 0 ]; then
+    go_version_flag=0
+else
+    go_version_flag=1
+fi
+
+if [ $go_version_flag -eq 0 ]; then
+    echo "Golang version less than 1.19.0"
+    exit 0
+else
+    echo "Golang is installed."
+    echo ""
+fi
+
+# Check CLASSPATH
+echo "Checking for ANTLR in CLASSPATH..."
+test_classpath=$(echo $CLASSPATH | grep antlr)
+
+if [ ! -z $test_classpath ]; then
+    echo "CLASSPATH = $CLASSPATH"
+    echo ""
+else
+    echo "ANTLR not set in CLASSPATH. Please set up CLASSPATH."
+    exit 0
+fi
+
+# Generate Parser and Lexer
 echo "Generating Parser & Lexer..."
-java -Xmx500M -cp "/usr/local/lib/antlr-4.11.1-complete.jar:$CLASSPATH" 
org.antlr.v4.Tool -Dlanguage=Go -visitor Age.g4
+java -Xmx500M org.antlr.v4.Tool -Dlanguage=Go -visitor parser/Age.g4
 
+# Install Golang driver
 echo "Installing Driver..."
 go get -u ./...
+
 echo "Successfully Installed Driver!"
 exit 0
diff --git a/drivers/golang/parser/generate.sh 
b/drivers/golang/parser/generate.sh
index e45501b4..9fa3cafc 100755
--- a/drivers/golang/parser/generate.sh
+++ b/drivers/golang/parser/generate.sh
@@ -1,4 +1,7 @@
 #!/bin/sh
+#
+# Please be aware that this is used by the CI scripts
+#
 GRAMMAR_LOC="$(dirname $(pwd))/parser"
 
 mkdir -p ~/tmp/antlr

Reply via email to