Compare commits
60 Commits
T1813-CL-r
...
MG-test-ka
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
138dcd5978 | ||
|
|
9a7d4ce9bc | ||
|
|
f25eeb0edf | ||
|
|
a793bc2a7f | ||
|
|
63bf7f90f3 | ||
|
|
bf83ede252 | ||
|
|
540188e643 | ||
|
|
10196f3d7d | ||
|
|
2c86fefbb5 | ||
|
|
df689dccd5 | ||
|
|
6033fbe9bd | ||
|
|
519a204424 | ||
|
|
3fc5e57fef | ||
|
|
906933d2b3 | ||
|
|
e9a937ad6d | ||
|
|
6dc2cdfae4 | ||
|
|
69ea410406 | ||
|
|
24a576c8e9 | ||
|
|
d417ffee6e | ||
|
|
f868b51483 | ||
|
|
26dc73c809 | ||
|
|
9119c89eba | ||
|
|
4e7ea34ae9 | ||
|
|
d7d291217b | ||
|
|
42facfacbc | ||
|
|
bd1e848363 | ||
|
|
0ffb58b764 | ||
|
|
9551b6973a | ||
|
|
f7ef5f50a4 | ||
|
|
046cd80054 | ||
|
|
9e678f8cbe | ||
|
|
69e4f1784b | ||
|
|
d04e23805d | ||
|
|
7e82cc6550 | ||
|
|
18b801a722 | ||
|
|
7e81a95b81 | ||
|
|
0a23eb11ae | ||
|
|
8ea281649a | ||
|
|
da68f86fc9 | ||
|
|
738b5fb8d8 | ||
|
|
b45ae403e6 | ||
|
|
d744711e5e | ||
|
|
8d87e38c64 | ||
|
|
086fc47769 | ||
|
|
5abcb5081d | ||
|
|
9534dfb6ed | ||
|
|
e2112faff0 | ||
|
|
6913feacc7 | ||
|
|
4e604de9d7 | ||
|
|
e628b5ba6e | ||
|
|
5da32c1bff | ||
|
|
ccca46370d | ||
|
|
e33fa5f9c0 | ||
|
|
721eefe263 | ||
|
|
be9ed7e879 | ||
|
|
482798295e | ||
|
|
d58a1cbb58 | ||
|
|
8dc3153fde | ||
|
|
b94e50bf1c | ||
|
|
9f855676cb |
@@ -1,5 +1,6 @@
|
||||
---
|
||||
Checks: '*,
|
||||
-abseil-string-find-str-contains,
|
||||
-altera-struct-pack-align,
|
||||
-android-*,
|
||||
-cert-err58-cpp,
|
||||
|
||||
@@ -30,6 +30,14 @@ for file in $modified_files; do
|
||||
if [ $code -ne 0 ]; then
|
||||
break
|
||||
fi
|
||||
|
||||
echo "Running header checker..."
|
||||
$project_folder/tools/header-checker.py $tmpdir/$file
|
||||
code=$?
|
||||
|
||||
if [ $code -ne 0 ]; then
|
||||
break
|
||||
fi
|
||||
done;
|
||||
|
||||
return $code
|
||||
|
||||
34
.github/ISSUE_TEMPLATE/bug_report.md
vendored
Normal file
34
.github/ISSUE_TEMPLATE/bug_report.md
vendored
Normal file
@@ -0,0 +1,34 @@
|
||||
---
|
||||
name: Bug report
|
||||
about: Create a report to help us improve
|
||||
title: "[BUG] "
|
||||
labels: bug
|
||||
assignees: gitbuda, antonio2368
|
||||
|
||||
---
|
||||
|
||||
|
||||
**Memgraph version**
|
||||
Which version did you use?
|
||||
|
||||
**Environment**
|
||||
Some information about the environment you are using Memgraph on: operating
|
||||
system, how do you connect, with or without docker, which driver etc.
|
||||
|
||||
**Describe the bug**
|
||||
A clear and concise description of what the bug is.
|
||||
|
||||
**To Reproduce**
|
||||
Steps to reproduce the behavior:
|
||||
1. Run the following query '...'
|
||||
2. Click on '....'
|
||||
|
||||
**Expected behavior**
|
||||
A clear and concise description of what you expected to happen.
|
||||
|
||||
**Logs**
|
||||
If applicable, add logs of Memgraph, CLI output or screenshots to help explain
|
||||
your problem.
|
||||
|
||||
**Additional context**
|
||||
Add any other context about the problem here.
|
||||
2
.github/workflows/daily_banchmark.yaml
vendored
2
.github/workflows/daily_banchmark.yaml
vendored
@@ -11,6 +11,8 @@ jobs:
|
||||
runs-on: [self-hosted, Linux, X64, Diff, Gen7]
|
||||
env:
|
||||
THREADS: 24
|
||||
MEMGRAPH_ENTERPRISE_LICENSE: ${{ secrets.MEMGRAPH_ENTERPRISE_LICENSE }}
|
||||
MEMGRAPH_ORGANIZATION_NAME: ${{ secrets.MEMGRAPH_ORGANIZATION_NAME }}
|
||||
|
||||
steps:
|
||||
- name: Set up repository
|
||||
|
||||
59
.github/workflows/diff.yaml
vendored
59
.github/workflows/diff.yaml
vendored
@@ -2,11 +2,15 @@ name: Diff
|
||||
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- master
|
||||
workflow_dispatch:
|
||||
pull_request:
|
||||
paths-ignore:
|
||||
- 'docs/**'
|
||||
- '**/*.md'
|
||||
- '.clang-format'
|
||||
- 'CODEOWNERS'
|
||||
- "docs/**"
|
||||
- "**/*.md"
|
||||
- ".clang-format"
|
||||
- "CODEOWNERS"
|
||||
|
||||
jobs:
|
||||
community_build:
|
||||
@@ -14,6 +18,8 @@ jobs:
|
||||
runs-on: [self-hosted, Linux, X64, Diff]
|
||||
env:
|
||||
THREADS: 24
|
||||
MEMGRAPH_ENTERPRISE_LICENSE: ${{ secrets.MEMGRAPH_ENTERPRISE_LICENSE }}
|
||||
MEMGRAPH_ORGANIZATION_NAME: ${{ secrets.MEMGRAPH_ORGANIZATION_NAME }}
|
||||
|
||||
steps:
|
||||
- name: Set up repository
|
||||
@@ -45,37 +51,13 @@ jobs:
|
||||
cd build
|
||||
ctest -R memgraph__unit --output-on-failure -j$THREADS
|
||||
|
||||
- name: Run stress test
|
||||
run: |
|
||||
cd tests/stress
|
||||
./continuous_integration
|
||||
|
||||
- name: Create community DEB package
|
||||
run: |
|
||||
# Activate toolchain.
|
||||
source /opt/toolchain-v3/activate
|
||||
|
||||
cd build
|
||||
|
||||
# create mgconsole
|
||||
# we use the -B to force the build
|
||||
make -j$THREADS -B mgconsole
|
||||
|
||||
# Create community DEB package.
|
||||
mkdir output && cd output
|
||||
cpack -G DEB --config ../CPackConfig.cmake
|
||||
|
||||
- name: Save community DEB package
|
||||
uses: actions/upload-artifact@v2
|
||||
with:
|
||||
name: "Community DEB package"
|
||||
path: build/output/memgraph*.deb
|
||||
|
||||
code_analysis:
|
||||
name: "Code analysis"
|
||||
runs-on: [self-hosted, Linux, X64, Diff]
|
||||
env:
|
||||
THREADS: 24
|
||||
MEMGRAPH_ENTERPRISE_LICENSE: ${{ secrets.MEMGRAPH_ENTERPRISE_LICENSE }}
|
||||
MEMGRAPH_ORGANIZATION_NAME: ${{ secrets.MEMGRAPH_ORGANIZATION_NAME }}
|
||||
|
||||
steps:
|
||||
- name: Set up repository
|
||||
@@ -140,6 +122,8 @@ jobs:
|
||||
runs-on: [self-hosted, Linux, X64, Diff]
|
||||
env:
|
||||
THREADS: 24
|
||||
MEMGRAPH_ENTERPRISE_LICENSE: ${{ secrets.MEMGRAPH_ENTERPRISE_LICENSE }}
|
||||
MEMGRAPH_ORGANIZATION_NAME: ${{ secrets.MEMGRAPH_ORGANIZATION_NAME }}
|
||||
|
||||
steps:
|
||||
- name: Set up repository
|
||||
@@ -214,6 +198,8 @@ jobs:
|
||||
runs-on: [self-hosted, Linux, X64, Diff]
|
||||
env:
|
||||
THREADS: 24
|
||||
MEMGRAPH_ENTERPRISE_LICENSE: ${{ secrets.MEMGRAPH_ENTERPRISE_LICENSE }}
|
||||
MEMGRAPH_ORGANIZATION_NAME: ${{ secrets.MEMGRAPH_ORGANIZATION_NAME }}
|
||||
|
||||
steps:
|
||||
- name: Set up repository
|
||||
@@ -249,6 +235,15 @@ jobs:
|
||||
tests/gql_behave/gql_behave_status.csv
|
||||
tests/gql_behave/gql_behave_status.html
|
||||
|
||||
- name: Run unit tests
|
||||
run: |
|
||||
# Activate toolchain.
|
||||
source /opt/toolchain-v3/activate
|
||||
|
||||
# Run unit tests.
|
||||
cd build
|
||||
ctest -R memgraph__unit --output-on-failure -j$THREADS
|
||||
|
||||
- name: Run e2e tests
|
||||
run: |
|
||||
# TODO(gitbuda): Setup mgclient and pymgclient properly.
|
||||
@@ -310,6 +305,8 @@ jobs:
|
||||
#continue-on-error: true
|
||||
env:
|
||||
THREADS: 24
|
||||
MEMGRAPH_ENTERPRISE_LICENSE: ${{ secrets.MEMGRAPH_ENTERPRISE_LICENSE }}
|
||||
MEMGRAPH_ORGANIZATION_NAME: ${{ secrets.MEMGRAPH_ORGANIZATION_NAME }}
|
||||
|
||||
steps:
|
||||
- name: Set up repository
|
||||
@@ -349,6 +346,8 @@ jobs:
|
||||
runs-on: [self-hosted, Linux, X64, Diff, Gen7]
|
||||
env:
|
||||
THREADS: 24
|
||||
MEMGRAPH_ENTERPRISE_LICENSE: ${{ secrets.MEMGRAPH_ENTERPRISE_LICENSE }}
|
||||
MEMGRAPH_ORGANIZATION_NAME: ${{ secrets.MEMGRAPH_ORGANIZATION_NAME }}
|
||||
|
||||
steps:
|
||||
- name: Set up repository
|
||||
|
||||
2
.github/workflows/full_clang_tidy.yaml
vendored
2
.github/workflows/full_clang_tidy.yaml
vendored
@@ -9,6 +9,8 @@ jobs:
|
||||
runs-on: [self-hosted, Linux, X64, Ubuntu20.04]
|
||||
env:
|
||||
THREADS: 24
|
||||
MEMGRAPH_ENTERPRISE_LICENSE: ${{ secrets.MEMGRAPH_ENTERPRISE_LICENSE }}
|
||||
MEMGRAPH_ORGANIZATION_NAME: ${{ secrets.MEMGRAPH_ORGANIZATION_NAME }}
|
||||
|
||||
steps:
|
||||
- name: Set up repository
|
||||
|
||||
169
.github/workflows/package_all.yaml
vendored
169
.github/workflows/package_all.yaml
vendored
@@ -5,7 +5,7 @@ name: Package All
|
||||
on: workflow_dispatch
|
||||
|
||||
jobs:
|
||||
centos-7_community:
|
||||
centos-7:
|
||||
runs-on: [self-hosted, DockerMgBuild]
|
||||
timeout-minutes: 60
|
||||
steps:
|
||||
@@ -15,14 +15,14 @@ jobs:
|
||||
fetch-depth: 0 # Required because of release/get_version.py
|
||||
- name: "Build package"
|
||||
run: |
|
||||
./release/package/run.sh package community centos-7
|
||||
./release/package/run.sh package centos-7
|
||||
- name: "Upload package"
|
||||
uses: actions/upload-artifact@v2
|
||||
with:
|
||||
name: centos-7_community
|
||||
name: centos-7
|
||||
path: build/output/centos-7/memgraph*.rpm
|
||||
|
||||
centos-8_community:
|
||||
centos-8:
|
||||
runs-on: [self-hosted, DockerMgBuild]
|
||||
timeout-minutes: 60
|
||||
steps:
|
||||
@@ -32,14 +32,14 @@ jobs:
|
||||
fetch-depth: 0 # Required because of release/get_version.py
|
||||
- name: "Build package"
|
||||
run: |
|
||||
./release/package/run.sh package community centos-8
|
||||
./release/package/run.sh package centos-8
|
||||
- name: "Upload package"
|
||||
uses: actions/upload-artifact@v2
|
||||
with:
|
||||
name: centos-8_community
|
||||
name: centos-8
|
||||
path: build/output/centos-8/memgraph*.rpm
|
||||
|
||||
debian-9_community:
|
||||
debian-9:
|
||||
runs-on: [self-hosted, DockerMgBuild]
|
||||
timeout-minutes: 60
|
||||
steps:
|
||||
@@ -49,14 +49,14 @@ jobs:
|
||||
fetch-depth: 0 # Required because of release/get_version.py
|
||||
- name: "Build package"
|
||||
run: |
|
||||
./release/package/run.sh package community debian-9
|
||||
./release/package/run.sh package debian-9
|
||||
- name: "Upload package"
|
||||
uses: actions/upload-artifact@v2
|
||||
with:
|
||||
name: debian-9_community
|
||||
name: debian-9
|
||||
path: build/output/debian-9/memgraph*.deb
|
||||
|
||||
debian-10_community:
|
||||
debian-10:
|
||||
runs-on: [self-hosted, DockerMgBuild]
|
||||
timeout-minutes: 60
|
||||
steps:
|
||||
@@ -66,14 +66,31 @@ jobs:
|
||||
fetch-depth: 0 # Required because of release/get_version.py
|
||||
- name: "Build package"
|
||||
run: |
|
||||
./release/package/run.sh package community debian-10
|
||||
./release/package/run.sh package debian-10
|
||||
- name: "Upload package"
|
||||
uses: actions/upload-artifact@v2
|
||||
with:
|
||||
name: debian-10_community
|
||||
name: debian-10
|
||||
path: build/output/debian-10/memgraph*.deb
|
||||
|
||||
docker_community:
|
||||
debian-11:
|
||||
runs-on: [self-hosted, DockerMgBuild]
|
||||
timeout-minutes: 60
|
||||
steps:
|
||||
- name: "Set up repository"
|
||||
uses: actions/checkout@v2
|
||||
with:
|
||||
fetch-depth: 0 # Required because of release/get_version.py
|
||||
- name: "Build package"
|
||||
run: |
|
||||
./release/package/run.sh package debian-11
|
||||
- name: "Upload package"
|
||||
uses: actions/upload-artifact@v2
|
||||
with:
|
||||
name: debian-11
|
||||
path: build/output/debian-11/memgraph*.deb
|
||||
|
||||
docker:
|
||||
runs-on: [self-hosted, DockerMgBuild]
|
||||
timeout-minutes: 60
|
||||
steps:
|
||||
@@ -84,15 +101,15 @@ jobs:
|
||||
- name: "Build package"
|
||||
run: |
|
||||
cd release/package
|
||||
./run.sh package community debian-10 --for-docker
|
||||
./run.sh package debian-10 --for-docker
|
||||
./run.sh docker
|
||||
- name: "Upload package"
|
||||
uses: actions/upload-artifact@v2
|
||||
with:
|
||||
name: docker_community
|
||||
name: docker
|
||||
path: build/output/docker/memgraph*.tar.gz
|
||||
|
||||
ubuntu-1804_community:
|
||||
ubuntu-1804:
|
||||
runs-on: [self-hosted, DockerMgBuild]
|
||||
timeout-minutes: 60
|
||||
steps:
|
||||
@@ -102,14 +119,14 @@ jobs:
|
||||
fetch-depth: 0 # Required because of release/get_version.py
|
||||
- name: "Build package"
|
||||
run: |
|
||||
./release/package/run.sh package community ubuntu-18.04
|
||||
./release/package/run.sh package ubuntu-18.04
|
||||
- name: "Upload package"
|
||||
uses: actions/upload-artifact@v2
|
||||
with:
|
||||
name: ubuntu-1804_community
|
||||
name: ubuntu-1804
|
||||
path: build/output/ubuntu-18.04/memgraph*.deb
|
||||
|
||||
ubuntu-2004_community:
|
||||
ubuntu-2004:
|
||||
runs-on: [self-hosted, DockerMgBuild]
|
||||
timeout-minutes: 60
|
||||
steps:
|
||||
@@ -119,14 +136,14 @@ jobs:
|
||||
fetch-depth: 0 # Required because of release/get_version.py
|
||||
- name: "Build package"
|
||||
run: |
|
||||
./release/package/run.sh package community ubuntu-20.04
|
||||
./release/package/run.sh package ubuntu-20.04
|
||||
- name: "Upload package"
|
||||
uses: actions/upload-artifact@v2
|
||||
with:
|
||||
name: ubuntu-2004_community
|
||||
name: ubuntu-2004
|
||||
path: build/output/ubuntu-20.04/memgraph*.deb
|
||||
|
||||
centos-7_enterprise:
|
||||
debian-10-platform:
|
||||
runs-on: [self-hosted, DockerMgBuild]
|
||||
timeout-minutes: 60
|
||||
steps:
|
||||
@@ -136,113 +153,9 @@ jobs:
|
||||
fetch-depth: 0 # Required because of release/get_version.py
|
||||
- name: "Build package"
|
||||
run: |
|
||||
./release/package/run.sh package enterprise centos-7
|
||||
./release/package/run.sh package debian-10 --for-platform
|
||||
- name: "Upload package"
|
||||
uses: actions/upload-artifact@v2
|
||||
with:
|
||||
name: centos-7_enterprise
|
||||
path: build/output/centos-7/memgraph*.rpm
|
||||
|
||||
centos-8_enterprise:
|
||||
runs-on: [self-hosted, DockerMgBuild]
|
||||
timeout-minutes: 60
|
||||
steps:
|
||||
- name: "Set up repository"
|
||||
uses: actions/checkout@v2
|
||||
with:
|
||||
fetch-depth: 0 # Required because of release/get_version.py
|
||||
- name: "Build package"
|
||||
run: |
|
||||
./release/package/run.sh package enterprise centos-8
|
||||
- name: "Upload package"
|
||||
uses: actions/upload-artifact@v2
|
||||
with:
|
||||
name: centos-8_enterprise
|
||||
path: build/output/centos-8/memgraph*.rpm
|
||||
|
||||
debian-9_enterprise:
|
||||
runs-on: [self-hosted, DockerMgBuild]
|
||||
timeout-minutes: 60
|
||||
steps:
|
||||
- name: "Set up repository"
|
||||
uses: actions/checkout@v2
|
||||
with:
|
||||
fetch-depth: 0 # Required because of release/get_version.py
|
||||
- name: "Build package"
|
||||
run: |
|
||||
./release/package/run.sh package enterprise debian-9
|
||||
- name: "Upload package"
|
||||
uses: actions/upload-artifact@v2
|
||||
with:
|
||||
name: debian-9_enterprise
|
||||
path: build/output/debian-9/memgraph*.deb
|
||||
|
||||
debian-10_enterprise:
|
||||
runs-on: [self-hosted, DockerMgBuild]
|
||||
timeout-minutes: 60
|
||||
steps:
|
||||
- name: "Set up repository"
|
||||
uses: actions/checkout@v2
|
||||
with:
|
||||
fetch-depth: 0 # Required because of release/get_version.py
|
||||
- name: "Build package"
|
||||
run: |
|
||||
./release/package/run.sh package enterprise debian-10
|
||||
- name: "Upload package"
|
||||
uses: actions/upload-artifact@v2
|
||||
with:
|
||||
name: debian-10_enterprise
|
||||
name: debian-10-platform
|
||||
path: build/output/debian-10/memgraph*.deb
|
||||
|
||||
docker_enterprise:
|
||||
runs-on: [self-hosted, DockerMgBuild]
|
||||
timeout-minutes: 60
|
||||
steps:
|
||||
- name: "Set up repository"
|
||||
uses: actions/checkout@v2
|
||||
with:
|
||||
fetch-depth: 0 # Required because of release/get_version.py
|
||||
- name: "Build package"
|
||||
run: |
|
||||
cd release/package
|
||||
./run.sh package enterprise debian-10 --for-docker
|
||||
./run.sh docker
|
||||
- name: "Upload package"
|
||||
uses: actions/upload-artifact@v2
|
||||
with:
|
||||
name: docker_enterprise
|
||||
path: build/output/docker/memgraph*.tar.gz
|
||||
|
||||
ubuntu-1804_enterprise:
|
||||
runs-on: [self-hosted, DockerMgBuild]
|
||||
timeout-minutes: 60
|
||||
steps:
|
||||
- name: "Set up repository"
|
||||
uses: actions/checkout@v2
|
||||
with:
|
||||
fetch-depth: 0 # Required because of release/get_version.py
|
||||
- name: "Build package"
|
||||
run: |
|
||||
./release/package/run.sh package enterprise ubuntu-18.04
|
||||
- name: "Upload package"
|
||||
uses: actions/upload-artifact@v2
|
||||
with:
|
||||
name: ubuntu-1804_enterprise
|
||||
path: build/output/ubuntu-18.04/memgraph*.deb
|
||||
|
||||
ubuntu-2004_enterprise:
|
||||
runs-on: [self-hosted, DockerMgBuild]
|
||||
timeout-minutes: 60
|
||||
steps:
|
||||
- name: "Set up repository"
|
||||
uses: actions/checkout@v2
|
||||
with:
|
||||
fetch-depth: 0 # Required because of release/get_version.py
|
||||
- name: "Build package"
|
||||
run: |
|
||||
./release/package/run.sh package enterprise ubuntu-20.04
|
||||
- name: "Upload package"
|
||||
uses: actions/upload-artifact@v2
|
||||
with:
|
||||
name: ubuntu-2004_enterprise
|
||||
path: build/output/ubuntu-20.04/memgraph*.deb
|
||||
|
||||
49
.github/workflows/release_centos8.yaml
vendored
49
.github/workflows/release_centos8.yaml
vendored
@@ -11,6 +11,8 @@ jobs:
|
||||
runs-on: [self-hosted, Linux, X64, CentOS8]
|
||||
env:
|
||||
THREADS: 24
|
||||
MEMGRAPH_ENTERPRISE_LICENSE: ${{ secrets.MEMGRAPH_ENTERPRISE_LICENSE }}
|
||||
MEMGRAPH_ORGANIZATION_NAME: ${{ secrets.MEMGRAPH_ORGANIZATION_NAME }}
|
||||
timeout-minutes: 960
|
||||
|
||||
steps:
|
||||
@@ -34,28 +36,6 @@ jobs:
|
||||
cmake -DCMAKE_BUILD_TYPE=release -DMG_ENTERPRISE=OFF ..
|
||||
make -j$THREADS
|
||||
|
||||
- name: Create community RPM package
|
||||
run: |
|
||||
# Activate toolchain.
|
||||
source /opt/toolchain-v3/activate
|
||||
|
||||
cd build
|
||||
|
||||
# create mgconsole
|
||||
# we use the -B to force the build
|
||||
make -j$THREADS -B mgconsole
|
||||
|
||||
# Create community RPM package.
|
||||
mkdir output && cd output
|
||||
cpack -G RPM --config ../CPackConfig.cmake
|
||||
rpmlint memgraph*.rpm
|
||||
|
||||
- name: Save community RPM package
|
||||
uses: actions/upload-artifact@v2
|
||||
with:
|
||||
name: "Community RPM package"
|
||||
path: build/output/memgraph*.rpm
|
||||
|
||||
- name: Run unit tests
|
||||
run: |
|
||||
# Activate toolchain.
|
||||
@@ -65,21 +45,13 @@ jobs:
|
||||
cd build
|
||||
ctest -R memgraph__unit --output-on-failure
|
||||
|
||||
- name: Run stress test (plain)
|
||||
run: |
|
||||
cd tests/stress
|
||||
./continuous_integration
|
||||
|
||||
- name: Run stress test (large)
|
||||
run: |
|
||||
cd tests/stress
|
||||
./continuous_integration --large-dataset
|
||||
|
||||
coverage_build:
|
||||
name: "Coverage build"
|
||||
runs-on: [self-hosted, Linux, X64, CentOS8]
|
||||
env:
|
||||
THREADS: 24
|
||||
MEMGRAPH_ENTERPRISE_LICENSE: ${{ secrets.MEMGRAPH_ENTERPRISE_LICENSE }}
|
||||
MEMGRAPH_ORGANIZATION_NAME: ${{ secrets.MEMGRAPH_ORGANIZATION_NAME }}
|
||||
|
||||
steps:
|
||||
- name: Set up repository
|
||||
@@ -135,6 +107,8 @@ jobs:
|
||||
runs-on: [self-hosted, Linux, X64, CentOS8]
|
||||
env:
|
||||
THREADS: 24
|
||||
MEMGRAPH_ENTERPRISE_LICENSE: ${{ secrets.MEMGRAPH_ENTERPRISE_LICENSE }}
|
||||
MEMGRAPH_ORGANIZATION_NAME: ${{ secrets.MEMGRAPH_ORGANIZATION_NAME }}
|
||||
|
||||
steps:
|
||||
- name: Set up repository
|
||||
@@ -209,6 +183,8 @@ jobs:
|
||||
runs-on: [self-hosted, Linux, X64, CentOS8]
|
||||
env:
|
||||
THREADS: 24
|
||||
MEMGRAPH_ENTERPRISE_LICENSE: ${{ secrets.MEMGRAPH_ENTERPRISE_LICENSE }}
|
||||
MEMGRAPH_ORGANIZATION_NAME: ${{ secrets.MEMGRAPH_ORGANIZATION_NAME }}
|
||||
timeout-minutes: 960
|
||||
|
||||
steps:
|
||||
@@ -293,6 +269,15 @@ jobs:
|
||||
tests/gql_behave/gql_behave_status.csv
|
||||
tests/gql_behave/gql_behave_status.html
|
||||
|
||||
- name: Run unit tests
|
||||
run: |
|
||||
# Activate toolchain.
|
||||
source /opt/toolchain-v3/activate
|
||||
|
||||
# Run unit tests.
|
||||
cd build
|
||||
ctest -R memgraph__unit --output-on-failure
|
||||
|
||||
- name: Run e2e tests
|
||||
run: |
|
||||
# TODO(gitbuda): Setup mgclient and pymgclient properly.
|
||||
|
||||
50
.github/workflows/release_debian10.yaml
vendored
50
.github/workflows/release_debian10.yaml
vendored
@@ -11,6 +11,8 @@ jobs:
|
||||
runs-on: [self-hosted, Linux, X64, Debian10]
|
||||
env:
|
||||
THREADS: 24
|
||||
MEMGRAPH_ENTERPRISE_LICENSE: ${{ secrets.MEMGRAPH_ENTERPRISE_LICENSE }}
|
||||
MEMGRAPH_ORGANIZATION_NAME: ${{ secrets.MEMGRAPH_ORGANIZATION_NAME }}
|
||||
timeout-minutes: 960
|
||||
|
||||
steps:
|
||||
@@ -34,27 +36,6 @@ jobs:
|
||||
cmake -DCMAKE_BUILD_TYPE=release -DMG_ENTERPRISE=OFF ..
|
||||
make -j$THREADS
|
||||
|
||||
- name: Create community DEB package
|
||||
run: |
|
||||
# Activate toolchain.
|
||||
source /opt/toolchain-v3/activate
|
||||
|
||||
cd build
|
||||
|
||||
# create mgconsole
|
||||
# we use the -B to force the build
|
||||
make -j$THREADS -B mgconsole
|
||||
|
||||
# Create community DEB package.
|
||||
mkdir output && cd output
|
||||
cpack -G DEB --config ../CPackConfig.cmake
|
||||
|
||||
- name: Save community DEB package
|
||||
uses: actions/upload-artifact@v2
|
||||
with:
|
||||
name: "Community DEB package"
|
||||
path: build/output/memgraph*.deb
|
||||
|
||||
- name: Run unit tests
|
||||
run: |
|
||||
# Activate toolchain.
|
||||
@@ -64,21 +45,13 @@ jobs:
|
||||
cd build
|
||||
ctest -R memgraph__unit --output-on-failure
|
||||
|
||||
- name: Run stress test (plain)
|
||||
run: |
|
||||
cd tests/stress
|
||||
./continuous_integration
|
||||
|
||||
- name: Run stress test (large)
|
||||
run: |
|
||||
cd tests/stress
|
||||
./continuous_integration --large-dataset
|
||||
|
||||
coverage_build:
|
||||
name: "Coverage build"
|
||||
runs-on: [self-hosted, Linux, X64, Debian10]
|
||||
env:
|
||||
THREADS: 24
|
||||
MEMGRAPH_ENTERPRISE_LICENSE: ${{ secrets.MEMGRAPH_ENTERPRISE_LICENSE }}
|
||||
MEMGRAPH_ORGANIZATION_NAME: ${{ secrets.MEMGRAPH_ORGANIZATION_NAME }}
|
||||
|
||||
steps:
|
||||
- name: Set up repository
|
||||
@@ -134,6 +107,8 @@ jobs:
|
||||
runs-on: [self-hosted, Linux, X64, Debian10]
|
||||
env:
|
||||
THREADS: 24
|
||||
MEMGRAPH_ENTERPRISE_LICENSE: ${{ secrets.MEMGRAPH_ENTERPRISE_LICENSE }}
|
||||
MEMGRAPH_ORGANIZATION_NAME: ${{ secrets.MEMGRAPH_ORGANIZATION_NAME }}
|
||||
|
||||
steps:
|
||||
- name: Set up repository
|
||||
@@ -208,6 +183,8 @@ jobs:
|
||||
runs-on: [self-hosted, Linux, X64, Debian10]
|
||||
env:
|
||||
THREADS: 24
|
||||
MEMGRAPH_ENTERPRISE_LICENSE: ${{ secrets.MEMGRAPH_ENTERPRISE_LICENSE }}
|
||||
MEMGRAPH_ORGANIZATION_NAME: ${{ secrets.MEMGRAPH_ORGANIZATION_NAME }}
|
||||
timeout-minutes: 960
|
||||
|
||||
steps:
|
||||
@@ -291,6 +268,15 @@ jobs:
|
||||
tests/gql_behave/gql_behave_status.csv
|
||||
tests/gql_behave/gql_behave_status.html
|
||||
|
||||
- name: Run unit tests
|
||||
run: |
|
||||
# Activate toolchain.
|
||||
source /opt/toolchain-v3/activate
|
||||
|
||||
# Run unit tests.
|
||||
cd build
|
||||
ctest -R memgraph__unit --output-on-failure
|
||||
|
||||
- name: Run e2e tests
|
||||
run: |
|
||||
# TODO(gitbuda): Setup mgclient and pymgclient properly.
|
||||
@@ -332,6 +318,8 @@ jobs:
|
||||
runs-on: [self-hosted, Linux, X64, Debian10, JepsenControl]
|
||||
env:
|
||||
THREADS: 24
|
||||
MEMGRAPH_ENTERPRISE_LICENSE: ${{ secrets.MEMGRAPH_ENTERPRISE_LICENSE }}
|
||||
MEMGRAPH_ORGANIZATION_NAME: ${{ secrets.MEMGRAPH_ORGANIZATION_NAME }}
|
||||
timeout-minutes: 60
|
||||
|
||||
steps:
|
||||
|
||||
48
.github/workflows/release_ubuntu2004.yaml
vendored
48
.github/workflows/release_ubuntu2004.yaml
vendored
@@ -11,6 +11,8 @@ jobs:
|
||||
runs-on: [self-hosted, Linux, X64, Ubuntu20.04]
|
||||
env:
|
||||
THREADS: 24
|
||||
MEMGRAPH_ENTERPRISE_LICENSE: ${{ secrets.MEMGRAPH_ENTERPRISE_LICENSE }}
|
||||
MEMGRAPH_ORGANIZATION_NAME: ${{ secrets.MEMGRAPH_ORGANIZATION_NAME }}
|
||||
timeout-minutes: 960
|
||||
|
||||
steps:
|
||||
@@ -34,27 +36,6 @@ jobs:
|
||||
cmake -DCMAKE_BUILD_TYPE=release -DMG_ENTERPRISE=OFF ..
|
||||
make -j$THREADS
|
||||
|
||||
- name: Create community DEB package
|
||||
run: |
|
||||
# Activate toolchain.
|
||||
source /opt/toolchain-v3/activate
|
||||
|
||||
cd build
|
||||
|
||||
# create mgconsole
|
||||
# we use the -B to force the build
|
||||
make -j$THREADS -B mgconsole
|
||||
|
||||
# Create community DEB package.
|
||||
mkdir output && cd output
|
||||
cpack -G DEB --config ../CPackConfig.cmake
|
||||
|
||||
- name: Save community DEB package
|
||||
uses: actions/upload-artifact@v2
|
||||
with:
|
||||
name: "Community DEB package"
|
||||
path: build/output/memgraph*.deb
|
||||
|
||||
- name: Run unit tests
|
||||
run: |
|
||||
# Activate toolchain.
|
||||
@@ -64,21 +45,13 @@ jobs:
|
||||
cd build
|
||||
ctest -R memgraph__unit --output-on-failure
|
||||
|
||||
- name: Run stress test (plain)
|
||||
run: |
|
||||
cd tests/stress
|
||||
./continuous_integration
|
||||
|
||||
- name: Run stress test (large)
|
||||
run: |
|
||||
cd tests/stress
|
||||
./continuous_integration --large-dataset
|
||||
|
||||
coverage_build:
|
||||
name: "Coverage build"
|
||||
runs-on: [self-hosted, Linux, X64, Ubuntu20.04]
|
||||
env:
|
||||
THREADS: 24
|
||||
MEMGRAPH_ENTERPRISE_LICENSE: ${{ secrets.MEMGRAPH_ENTERPRISE_LICENSE }}
|
||||
MEMGRAPH_ORGANIZATION_NAME: ${{ secrets.MEMGRAPH_ORGANIZATION_NAME }}
|
||||
|
||||
steps:
|
||||
- name: Set up repository
|
||||
@@ -134,6 +107,8 @@ jobs:
|
||||
runs-on: [self-hosted, Linux, X64, Ubuntu20.04]
|
||||
env:
|
||||
THREADS: 24
|
||||
MEMGRAPH_ENTERPRISE_LICENSE: ${{ secrets.MEMGRAPH_ENTERPRISE_LICENSE }}
|
||||
MEMGRAPH_ORGANIZATION_NAME: ${{ secrets.MEMGRAPH_ORGANIZATION_NAME }}
|
||||
|
||||
steps:
|
||||
- name: Set up repository
|
||||
@@ -208,6 +183,8 @@ jobs:
|
||||
runs-on: [self-hosted, Linux, X64, Ubuntu20.04]
|
||||
env:
|
||||
THREADS: 24
|
||||
MEMGRAPH_ENTERPRISE_LICENSE: ${{ secrets.MEMGRAPH_ENTERPRISE_LICENSE }}
|
||||
MEMGRAPH_ORGANIZATION_NAME: ${{ secrets.MEMGRAPH_ORGANIZATION_NAME }}
|
||||
timeout-minutes: 960
|
||||
|
||||
steps:
|
||||
@@ -291,6 +268,15 @@ jobs:
|
||||
tests/gql_behave/gql_behave_status.csv
|
||||
tests/gql_behave/gql_behave_status.html
|
||||
|
||||
- name: Run unit tests
|
||||
run: |
|
||||
# Activate toolchain.
|
||||
source /opt/toolchain-v3/activate
|
||||
|
||||
# Run unit tests.
|
||||
cd build
|
||||
ctest -R memgraph__unit --output-on-failure
|
||||
|
||||
- name: Run e2e tests
|
||||
run: |
|
||||
# TODO(gitbuda): Setup mgclient and pymgclient properly.
|
||||
|
||||
@@ -35,13 +35,14 @@ else()
|
||||
message(FATAL_ERROR "Couldn't find clang and/or clang++!")
|
||||
endif()
|
||||
|
||||
option(BUILD_FOR_DOCKER "Build Memgraph binary for docker." OFF)
|
||||
message(STATUS "BUILD_FOR_DOCKER: ${BUILD_FOR_DOCKER}")
|
||||
|
||||
# -----------------------------------------------------------------------------
|
||||
|
||||
project(memgraph)
|
||||
|
||||
# Install licenses.
|
||||
install(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/licenses/
|
||||
DESTINATION share/doc/memgraph)
|
||||
|
||||
# For more information about how to release a new version of Memgraph, see
|
||||
# `release/README.md`.
|
||||
|
||||
@@ -61,21 +62,21 @@ set(MEMGRAPH_OVERRIDE_VERSION_SUFFIX "")
|
||||
|
||||
# Variables used to generate the versions.
|
||||
if (MG_ENTERPRISE)
|
||||
set(get_version_enterprise "--enterprise")
|
||||
set(get_version_offering "")
|
||||
else()
|
||||
set(get_version_enterprise "")
|
||||
set(get_version_offering "--open-source")
|
||||
endif()
|
||||
set(get_version_script "${CMAKE_SOURCE_DIR}/release/get_version.py")
|
||||
set(get_version_script "${CMAKE_CURRENT_SOURCE_DIR}/release/get_version.py")
|
||||
|
||||
# Get version that should be used in the binary.
|
||||
execute_process(
|
||||
OUTPUT_VARIABLE MEMGRAPH_VERSION
|
||||
RESULT_VARIABLE MEMGRAPH_VERSION_RESULT
|
||||
COMMAND "${get_version_script}" ${get_version_enterprise}
|
||||
COMMAND "${get_version_script}" ${get_version_offering}
|
||||
"${MEMGRAPH_OVERRIDE_VERSION}"
|
||||
"${MEMGRAPH_OVERRIDE_VERSION_SUFFIX}"
|
||||
"--memgraph-root-dir"
|
||||
"${CMAKE_SOURCE_DIR}"
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}"
|
||||
)
|
||||
if(MEMGRAPH_VERSION_RESULT AND NOT MEMGRAPH_VERSION_RESULT EQUAL 0)
|
||||
message(FATAL_ERROR "Unable to get Memgraph version.")
|
||||
@@ -87,12 +88,12 @@ endif()
|
||||
execute_process(
|
||||
OUTPUT_VARIABLE MEMGRAPH_VERSION_DEB
|
||||
RESULT_VARIABLE MEMGRAPH_VERSION_DEB_RESULT
|
||||
COMMAND "${get_version_script}" ${get_version_enterprise}
|
||||
COMMAND "${get_version_script}" ${get_version_offering}
|
||||
--variant deb
|
||||
"${MEMGRAPH_OVERRIDE_VERSION}"
|
||||
"${MEMGRAPH_OVERRIDE_VERSION_SUFFIX}"
|
||||
"--memgraph-root-dir"
|
||||
"${CMAKE_SOURCE_DIR}"
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}"
|
||||
)
|
||||
if(MEMGRAPH_VERSION_DEB_RESULT AND NOT MEMGRAPH_VERSION_DEB_RESULT EQUAL 0)
|
||||
message(FATAL_ERROR "Unable to get Memgraph DEB version.")
|
||||
@@ -104,12 +105,12 @@ endif()
|
||||
execute_process(
|
||||
OUTPUT_VARIABLE MEMGRAPH_VERSION_RPM
|
||||
RESULT_VARIABLE MEMGRAPH_VERSION_RPM_RESULT
|
||||
COMMAND "${get_version_script}" ${get_version_enterprise}
|
||||
COMMAND "${get_version_script}" ${get_version_offering}
|
||||
--variant rpm
|
||||
"${MEMGRAPH_OVERRIDE_VERSION}"
|
||||
"${MEMGRAPH_OVERRIDE_VERSION_SUFFIX}"
|
||||
"--memgraph-root-dir"
|
||||
"${CMAKE_SOURCE_DIR}"
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}"
|
||||
)
|
||||
if(MEMGRAPH_VERSION_RPM_RESULT AND NOT MEMGRAPH_VERSION_RPM_RESULT EQUAL 0)
|
||||
message(FATAL_ERROR "Unable to get Memgraph RPM version.")
|
||||
@@ -265,7 +266,11 @@ if (MG_ENTERPRISE)
|
||||
add_definitions(-DMG_ENTERPRISE)
|
||||
endif()
|
||||
|
||||
set(ENABLE_JEMALLOC ON)
|
||||
|
||||
if (ASAN)
|
||||
message(WARNING "Disabling jemalloc as it doesn't work well with ASAN")
|
||||
set(ENABLE_JEMALLOC OFF)
|
||||
# Enable Addres sanitizer and get nicer stack traces in error messages.
|
||||
# NOTE: AddressSanitizer uses llvm-symbolizer binary from the Clang
|
||||
# distribution to symbolize the stack traces (note that ideally the
|
||||
@@ -326,8 +331,13 @@ add_subdirectory(src)
|
||||
# Release configuration
|
||||
add_subdirectory(release)
|
||||
|
||||
enable_testing()
|
||||
add_subdirectory(tests)
|
||||
option(MG_ENABLE_TESTING "Set this to OFF to disable building test binaries" ON)
|
||||
message(STATUS "MG_ENABLE_TESTING: ${MG_ENABLE_TESTING}")
|
||||
|
||||
if (MG_ENABLE_TESTING)
|
||||
enable_testing()
|
||||
add_subdirectory(tests)
|
||||
endif()
|
||||
|
||||
if(TOOLS)
|
||||
add_subdirectory(tools)
|
||||
|
||||
127
CODE_OF_CONDUCT.md
Normal file
127
CODE_OF_CONDUCT.md
Normal file
@@ -0,0 +1,127 @@
|
||||
# Contributor Covenant Code of Conduct
|
||||
|
||||
## Our Pledge
|
||||
|
||||
We as members, contributors, and leaders pledge to make participation in our
|
||||
community a harassment-free experience for everyone, regardless of age, body
|
||||
size, visible or invisible disability, ethnicity, sex characteristics, gender
|
||||
identity and expression, level of experience, education, socio-economic status,
|
||||
nationality, personal appearance, race, caste, color, religion, or sexual
|
||||
identity and orientation.
|
||||
|
||||
We pledge to act and interact in ways that contribute to an open, welcoming,
|
||||
diverse, inclusive, and healthy community.
|
||||
|
||||
## Our Standards
|
||||
|
||||
Examples of behavior that contributes to a positive environment for our
|
||||
community include:
|
||||
|
||||
- Demonstrating empathy and kindness toward other people
|
||||
- Being respectful of differing opinions, viewpoints, and experiences
|
||||
- Giving and gracefully accepting constructive feedback
|
||||
- Accepting responsibility and apologizing to those affected by our mistakes,
|
||||
and learning from the experience
|
||||
- Focusing on what is best not just for us as individuals, but for the overall
|
||||
community
|
||||
|
||||
Examples of unacceptable behavior include:
|
||||
|
||||
- The use of sexualized language or imagery, and sexual attention or advances of
|
||||
any kind
|
||||
- Trolling, insulting or derogatory comments, and personal or political attacks
|
||||
- Public or private harassment
|
||||
- Publishing other's private information, such as a physical or email address,
|
||||
without their explicit permission
|
||||
- Other conduct which could reasonably be considered inappropriate in a
|
||||
professional setting
|
||||
|
||||
## Enforcement Responsibilities
|
||||
|
||||
Community leaders are responsible for clarifying and enforcing our standards of
|
||||
acceptable behavior and will take appropriate and fair corrective action in
|
||||
response to any behavior that they deem inappropriate, threatening, offensive,
|
||||
or harmful.
|
||||
|
||||
Community leaders have the right and responsibility to remove, edit, or reject
|
||||
comments, commits, code, wiki edits, issues, and other contributions that are
|
||||
not aligned to this Code of Conduct, and will communicate reasons for moderation
|
||||
decisions when appropriate.
|
||||
|
||||
## Scope
|
||||
|
||||
This Code of Conduct applies within all community spaces, and also applies when
|
||||
an individual is officially representing the community in public spaces.
|
||||
Examples of representing our community include using an official e-mail address,
|
||||
posting via an official social media account, or acting as an appointed
|
||||
representative at an online or offline event.
|
||||
|
||||
## Enforcement
|
||||
|
||||
Instances of abusive, harassing, or otherwise unacceptable behavior may be
|
||||
reported to the community leaders responsible for enforcement at
|
||||
[contact@memgraph.com](contact@memgraph.com). All complaints will be reviewed
|
||||
and investigated promptly and fairly.
|
||||
|
||||
All community leaders are obligated to respect the privacy and security of the
|
||||
reporter of any incident.
|
||||
|
||||
## Enforcement Guidelines
|
||||
|
||||
Community leaders will follow these Community Impact Guidelines in determining
|
||||
the consequences for any action they deem in violation of this Code of Conduct:
|
||||
|
||||
### 1. Correction
|
||||
|
||||
**Community Impact**: Use of inappropriate language or other behavior deemed
|
||||
unprofessional or unwelcome in the community.
|
||||
|
||||
**Consequence**: A private, written warning from community leaders, providing
|
||||
clarity around the nature of the violation and an explanation of why the
|
||||
behavior was inappropriate. A public apology may be requested.
|
||||
|
||||
### 2. Warning
|
||||
|
||||
**Community Impact**: A violation through a single incident or series of
|
||||
actions.
|
||||
|
||||
**Consequence**: A warning with consequences for continued behavior. No
|
||||
interaction with the people involved, including unsolicited interaction with
|
||||
those enforcing the Code of Conduct, for a specified period of time. This
|
||||
includes avoiding interactions in community spaces as well as external channels
|
||||
like social media. Violating these terms may lead to a temporary or permanent
|
||||
ban.
|
||||
|
||||
### 3. Temporary Ban
|
||||
|
||||
**Community Impact**: A serious violation of community standards, including
|
||||
sustained inappropriate behavior.
|
||||
|
||||
**Consequence**: A temporary ban from any sort of interaction or public
|
||||
communication with the community for a specified period of time. No public or
|
||||
private interaction with the people involved, including unsolicited interaction
|
||||
with those enforcing the Code of Conduct, is allowed during this period.
|
||||
Violating these terms may lead to a permanent ban.
|
||||
|
||||
### 4. Permanent Ban
|
||||
|
||||
**Community Impact**: Demonstrating a pattern of violation of community
|
||||
standards, including sustained inappropriate behavior, harassment of an
|
||||
individual, or aggression toward or disparagement of classes of individuals.
|
||||
|
||||
**Consequence**: A permanent ban from any sort of public interaction within the
|
||||
community.
|
||||
|
||||
## Attribution
|
||||
|
||||
This Code of Conduct is adapted from the Contributor Covenant, version 2.1,
|
||||
available at
|
||||
[https://www.contributor-covenant.org/version/2/1/code_of_conduct.html](https://www.contributor-covenant.org/version/2/1/code_of_conduct.html).
|
||||
|
||||
Community Impact Guidelines were inspired by [Mozilla's code of conduct
|
||||
enforcement ladder][mozilla coc].
|
||||
|
||||
For answers to common questions about this code of conduct, see the FAQ at
|
||||
[https://www.contributor-covenant.org/faq](https://www.contributor-covenant.org/faq).
|
||||
Translations are available at
|
||||
[https://www.contributor-covenant.org/translations](https://www.contributor-covenant.org/translations).
|
||||
121
CONTRIBUTING.md
Normal file
121
CONTRIBUTING.md
Normal file
@@ -0,0 +1,121 @@
|
||||
# How to contribute?
|
||||
|
||||
This is a general purpose guide for contributing to Memgraph. We're still
|
||||
working out the kinks to make contributing to this project as easy and
|
||||
transparent as possible, but we're not quite there yet. Hopefully, this document
|
||||
makes the process for contributing clear and answers some questions that you may
|
||||
have.
|
||||
|
||||
- [How to contribute?](#how-to-contribute)
|
||||
- [Open development](#open-development)
|
||||
- [Branch organization](#branch-organization)
|
||||
- [Bugs & changes](#bugs--changes)
|
||||
- [Where to find known issues?](#where-to-find-known-issues)
|
||||
- [Proposing a change](#proposing-a-change)
|
||||
- [Your first pull request](#your-first-pull-request)
|
||||
- [Sending a pull request](#sending-a-pull-request)
|
||||
- [Style guide](#style-guide)
|
||||
- [How to get in touch?](#how-to-get-in-touch)
|
||||
- [Code of Conduct](#code-of-conduct)
|
||||
- [License](#license)
|
||||
- [Attribution](#attribution)
|
||||
|
||||
## Open development
|
||||
|
||||
All work on Memgraph is done via [GitHub](https://github.com/memgraph/memgraph).
|
||||
Both core team members and external contributors send pull requests which go
|
||||
through the same review process.
|
||||
|
||||
## Branch organization
|
||||
|
||||
Most pull requests should target the [`master
|
||||
branch`](https://github.com/memgraph/memgraph/tree/master). We only use separate
|
||||
branches for developing new features and fixing bugs before they are merged with
|
||||
`master`. We do our best to keep `master` in good shape, with all tests passing.
|
||||
|
||||
Code that lands in `master` must be compatible with the latest stable release.
|
||||
It may contain additional features but no breaking changes if it's not
|
||||
absolutely necessary. We should be able to release a new minor version from the
|
||||
tip of `master` at any time.
|
||||
|
||||
## Bugs & changes
|
||||
|
||||
### Where to find known issues?
|
||||
|
||||
We are using [GitHub Issues](https://github.com/memgraph/memgraph/issues) for
|
||||
our public bugs. We keep a close eye on this and try to make it clear when we
|
||||
have an internal fix in progress. Before filing a new task, try to make sure
|
||||
your problem doesn't already exist.
|
||||
|
||||
### Proposing a change
|
||||
|
||||
If you intend to change the public API, or make any non-trivial changes to the
|
||||
implementation, we recommend [filing an
|
||||
issue](https://github.com/memgraph/memgraph/issues/new). This lets us reach an
|
||||
agreement on your proposal before you put significant effort into it.
|
||||
|
||||
If you're only fixing a bug, it's fine to submit a pull request right away but
|
||||
we still recommend to file an issue detailing what you're fixing. This is
|
||||
helpful in case we don't accept that specific fix but want to keep track of the
|
||||
issue.
|
||||
|
||||
### Your first pull request
|
||||
|
||||
Working on your first Pull Request? You can learn how from this free video
|
||||
series:
|
||||
|
||||
**[How to Contribute to an Open Source Project on
|
||||
GitHub](https://app.egghead.io/courses/how-to-contribute-to-an-open-source-project-on-github)**
|
||||
|
||||
If you decide to fix an issue, please be sure to check the comment thread in
|
||||
case somebody is already working on a fix. If nobody is working on it at the
|
||||
moment, please leave a comment stating that you intend to work on it so other
|
||||
people don't accidentally duplicate your effort.
|
||||
|
||||
If somebody claims an issue but doesn't follow up for more than two weeks, it's
|
||||
fine to take it over but you should still leave a comment.
|
||||
|
||||
### Sending a pull request
|
||||
|
||||
The core team is monitoring for pull requests. We will review your pull request
|
||||
and either merge it, request changes to it, or close it with an explanation.
|
||||
**Before submitting a pull request,** please make sure the following is done:
|
||||
|
||||
1. Fork [the repository](https://github.com/memgraph/memgraph) and create your
|
||||
branch from `master`.
|
||||
2. If you've fixed a bug or added code that should be tested, add tests!
|
||||
3. Use the formatter `clang-format` for C/C++ code and `flake8` for Python code.
|
||||
`clang-format` will automatically detect the `.clang-format` file in the root
|
||||
directory while `flake8` can be used with the default configuration.
|
||||
|
||||
### Style guide
|
||||
|
||||
Memgraph uses the [Google Style
|
||||
Guide](https://google.github.io/styleguide/cppguide.html) for C++ in most of its
|
||||
code. You should follow them whenever writing new code.
|
||||
|
||||
## How to get in touch?
|
||||
|
||||
Aside from communicating directly via Pull Requests and Issues, the Memgraph
|
||||
Community [Discord Server](https://discord.gg/memgraph) is the best place for
|
||||
conversing with project maintainers and other community members.
|
||||
|
||||
## [Code of Conduct](https://github.com/memgraph/memgraph/blob/master/CODE_OF_CONDUCT.md)
|
||||
|
||||
Memgraph has adopted the [Contributor
|
||||
Covenant](https://www.contributor-covenant.org/) as its Code of Conduct, and we
|
||||
expect project participants to adhere to it. Please read [the full
|
||||
text](https://github.com/memgraph/memgraph/blob/master/CODE_OF_CONDUCT.md) so
|
||||
that you can understand what actions will and will not be tolerated.
|
||||
|
||||
## License
|
||||
|
||||
By contributing to Memgraph, you agree that your contributions will be licensed
|
||||
under the [Memgraph licensing
|
||||
scheme](https://github.com/memgraph/memgraph/blob/master/LICENSE).
|
||||
|
||||
## Attribution
|
||||
|
||||
This Contributing guide is adapted from the **React.js Contributing guide**
|
||||
available at
|
||||
[https://reactjs.org/docs/how-to-contribute.html](https://reactjs.org/docs/how-to-contribute.html).
|
||||
5
LICENSE
Normal file
5
LICENSE
Normal file
@@ -0,0 +1,5 @@
|
||||
Source code in this repository is variously licensed under the Business Source
|
||||
License 1.1 (BSL), the Memgraph Enterprise License (MEL). A copy of each licence
|
||||
can be found in the licences directory. Source code in a given file is licensed
|
||||
under the BSL and the copyright belongs to The Memgraph Authors unless
|
||||
otherwise noted at th beginning of the file.
|
||||
135
README.md
135
README.md
@@ -1,21 +1,128 @@
|
||||
# Memgraph
|
||||
<p align="center">
|
||||
<img width="400px" src="https://uploads-ssl.webflow.com/5e7ceb09657a69bdab054b3a/5e7ceb09657a6937ab054bba_Black_Original%20_Logo.png">
|
||||
</p>
|
||||
|
||||
Memgraph is an ACID compliant high performance transactional distributed
|
||||
in-memory graph database featuring runtime native query compiling, lock free
|
||||
data structures, multi-version concurrency control and asynchronous IO.
|
||||
---
|
||||
|
||||
## Development Documentation
|
||||
<p align="center">
|
||||
Build modern, graph-based applications on top of your streaming data in minutes.
|
||||
</p>
|
||||
|
||||
Please continue in
|
||||
[Notion](https://www.notion.so/memgraph/memgraph-0428591638604c8385550e214ea9f3e6).
|
||||
<p align="center">
|
||||
<a href="https://github.com/memgraph/memgraph/blob/master/licenses/APL.txt">
|
||||
<img src="https://img.shields.io/badge/license-APL-green" alt="license" title="license"/>
|
||||
</a>
|
||||
<a href="https://github.com/memgraph/memgraph/blob/master/licenses/BSL.txt">
|
||||
<img src="https://img.shields.io/badge/license-BSL-yellowgreen" alt="license" title="license"/>
|
||||
</a>
|
||||
<a href="https://github.com/memgraph/memgraph/blob/master/licenses/MEL.txt" alt="Documentation">
|
||||
<img src="https://img.shields.io/badge/license-MEL-yellow" alt="license" title="license"/>
|
||||
</a>
|
||||
</p>
|
||||
|
||||
## User Documentation
|
||||
<p align="center">
|
||||
<a href="https://github.com/memgraph/memgraph">
|
||||
<img src="https://img.shields.io/github/workflow/status/memgraph/memgraph/Release%20Ubuntu%2020.04/master" alt="build" title="build"/>
|
||||
</a>
|
||||
<a href="https://memgraph.com/docs/" alt="Documentation">
|
||||
<img src="https://img.shields.io/badge/documentation-Memgraph-orange" />
|
||||
</a>
|
||||
</p>
|
||||
|
||||
Memgraph user documentation is maintained within
|
||||
[docs](https://github.com/memgraph/docs) repository. The documentation is also
|
||||
available on [GitBook](https://docs.memgraph.com).
|
||||
<p align="center">
|
||||
<a href="https://memgr.ph/join-discord">
|
||||
<img src="https://img.shields.io/badge/Discord-7289DA?style=for-the-badge&logo=discord&logoColor=white" alt="Discord"/>
|
||||
</a>
|
||||
</p>
|
||||
|
||||
## Licences
|
||||
## :clipboard: Description
|
||||
|
||||
* [Community](release/LICENSE_COMMUNITY.md)
|
||||
* [Enterprise](release/LICENSE_ENTERPRISE.md)
|
||||
Memgraph is a streaming graph application platform that helps you wrangle your
|
||||
streaming data, build sophisticated models that you can query in real-time, and
|
||||
develop graph applications.
|
||||
|
||||
Memgraph directly connects to your streaming infrastructure. You can ingest data
|
||||
from sources like Kafka, SQL, or plain CSV files. Memgraph provides a standard
|
||||
interface to query your data with Cypher, a widely-used and declarative query
|
||||
language that is easy to write, understand and optimize for performance. This is
|
||||
achieved by using the property graph data model, which stores data in terms of
|
||||
objects, their attributes, and the relationships that connect them. This is a
|
||||
natural and effective way to model many real-world problems without relying on
|
||||
complex SQL schemas.
|
||||
|
||||
Memgraph is implemented in C/C++ and leverages an in-memory first architecture
|
||||
to ensure that you’re getting the best possible performance consistently and
|
||||
without surprises. It’s also ACID-compliant and highly available.
|
||||
|
||||
## :floppy_disk: Download & Install
|
||||
|
||||
### Windows
|
||||
|
||||
[](https://memgraph.com/docs/memgraph/install-memgraph-on-windows-docker)
|
||||
[](https://memgraph.com/docs/memgraph/install-memgraph-on-windows-wsl)
|
||||
|
||||
### macOS
|
||||
|
||||
[](https://memgraph.com/docs/memgraph/install-memgraph-on-macos-docker)
|
||||
|
||||
### Linux
|
||||
|
||||
[](https://memgraph.com/docs/memgraph/install-memgraph-on-linux-docker)
|
||||
[](https://memgraph.com/docs/memgraph/install-memgraph-on-debian)
|
||||
[](https://memgraph.com/docs/memgraph/install-memgraph-on-ubuntu)
|
||||
[](https://memgraph.com/docs/memgraph/install-memgraph-from-rpm)
|
||||
|
||||
You can find the binaries and Docker images on the [Download
|
||||
Hub](https://memgraph.com/download) and the installation instructions in the
|
||||
[official documentation](https://memgraph.com/docs/memgraph/installation).
|
||||
|
||||
## :zap: Features
|
||||
|
||||
- Run Python, Rust, and C/C++ code natively, check out the
|
||||
[MAGE](https://github.com/memgraph/mage) graph algorithm library
|
||||
- Native support for machine learning
|
||||
- Streaming support
|
||||
- Replication
|
||||
- Authentication and authorization
|
||||
- ACID compliance
|
||||
|
||||
## :bookmark_tabs: Documentation
|
||||
|
||||
The Memgraph documentation is available at
|
||||
[memgraph.com/docs](https://memgraph.com/docs).
|
||||
|
||||
## :question: Configuration
|
||||
|
||||
Command line options that Memgraph accepts are available in the [reference
|
||||
guide](https://memgraph.com/docs/memgraph/reference-guide/configuration).
|
||||
|
||||
## :trophy: Contributing
|
||||
|
||||
The main purpose of this repository is to continue evolving Memgraph, making it
|
||||
faster and easier to use. Development of Memgraph happens in the open on GitHub,
|
||||
and we are grateful to the community for contributing bug fixes and
|
||||
improvements. Read below to learn how you can take part in improving Memgraph.
|
||||
|
||||
### Code of Conduct
|
||||
|
||||
Memgraph has adopted a Code of Conduct that we expect project participants to
|
||||
adhere to. Please read [the full text](CODE_OF_CONDUCT.md) so that you can
|
||||
understand what actions will and will not be tolerated.
|
||||
|
||||
### Contributing Guide
|
||||
|
||||
Read our [contributing guide](CONTRIBUTING.md) to learn about our development
|
||||
process and how to propose bug fixes and improvements.
|
||||
|
||||
### :scroll: License
|
||||
|
||||
Memgraph Community is available under the [BSL
|
||||
license](./licenses/BSL.txt).</br> Memgraph Enterprise is available under the
|
||||
[MEL license](./licenses/MEL.txt).
|
||||
|
||||
<p align="center">
|
||||
<a href="#">
|
||||
<img src="https://img.shields.io/badge/⬆️back_to_top_⬆️-white" alt="Back to top" title="Back to top"/>
|
||||
</a>
|
||||
</p>
|
||||
|
||||
@@ -101,3 +101,5 @@ undocumented:
|
||||
- "help"
|
||||
- "help_xml"
|
||||
- "version"
|
||||
- "organization_name"
|
||||
- "license_key"
|
||||
|
||||
@@ -66,7 +66,7 @@ deb http://security.debian.org/debian-security buster/updates main contrib non-f
|
||||
deb-src http://security.debian.org/debian-security buster/updates main contrib non-free
|
||||
EOF
|
||||
cd "$DIR"
|
||||
apt update
|
||||
apt --allow-releaseinfo-change update
|
||||
# If GitHub Actions runner is installed, append LANG to the environment.
|
||||
# Python related tests doesn't work the LANG export.
|
||||
if [ -d "/home/gh/actions-runner" ]; then
|
||||
|
||||
96
environment/os/debian-11.sh
Executable file
96
environment/os/debian-11.sh
Executable file
@@ -0,0 +1,96 @@
|
||||
#!/bin/bash
|
||||
|
||||
set -Eeuo pipefail
|
||||
|
||||
DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )"
|
||||
source "$DIR/../util.sh"
|
||||
|
||||
TOOLCHAIN_BUILD_DEPS=(
|
||||
coreutils gcc g++ build-essential make # generic build tools
|
||||
wget # used for archive download
|
||||
gnupg # used for archive signature verification
|
||||
tar gzip bzip2 xz-utils unzip # used for archive unpacking
|
||||
zlib1g-dev # zlib library used for all builds
|
||||
libexpat1-dev libipt-dev libbabeltrace-dev liblzma-dev python3-dev texinfo # for gdb
|
||||
libcurl4-openssl-dev # for cmake
|
||||
libreadline-dev # for cmake and llvm
|
||||
libffi-dev libxml2-dev # for llvm
|
||||
libedit-dev libpcre3-dev automake bison # for swig
|
||||
)
|
||||
|
||||
TOOLCHAIN_RUN_DEPS=(
|
||||
make # generic build tools
|
||||
tar gzip bzip2 xz-utils # used for archive unpacking
|
||||
zlib1g # zlib library used for all builds
|
||||
libexpat1 libipt2 libbabeltrace1 liblzma5 python3 # for gdb
|
||||
libcurl4 # for cmake
|
||||
file # for CPack
|
||||
libreadline8 # for cmake and llvm
|
||||
libffi7 libxml2 # for llvm
|
||||
)
|
||||
|
||||
MEMGRAPH_BUILD_DEPS=(
|
||||
git # source code control
|
||||
make pkg-config # build system
|
||||
curl wget # for downloading libs
|
||||
uuid-dev default-jre-headless # required by antlr
|
||||
libreadline-dev # for memgraph console
|
||||
libpython3-dev python3-dev # for query modules
|
||||
libssl-dev
|
||||
libseccomp-dev
|
||||
netcat # tests are using nc to wait for memgraph
|
||||
python3 virtualenv python3-virtualenv python3-pip # for qa, macro_benchmark and stress tests
|
||||
python3-yaml # for the configuration generator
|
||||
libcurl4-openssl-dev # mg-requests
|
||||
sbcl # for custom Lisp C++ preprocessing
|
||||
doxygen graphviz # source documentation generators
|
||||
mono-runtime mono-mcs zip unzip default-jdk-headless # for driver tests
|
||||
dotnet-sdk-3.1 golang nodejs npm
|
||||
autoconf # for jemalloc code generation
|
||||
)
|
||||
|
||||
list() {
|
||||
echo "$1"
|
||||
}
|
||||
|
||||
check() {
|
||||
check_all_dpkg "$1"
|
||||
}
|
||||
|
||||
install() {
|
||||
cat >/etc/apt/sources.list <<EOF
|
||||
deb http://deb.debian.org/debian bullseye main
|
||||
deb-src http://deb.debian.org/debian bullseye main
|
||||
|
||||
deb http://deb.debian.org/debian-security/ bullseye-security main
|
||||
deb-src http://deb.debian.org/debian-security/ bullseye-security main
|
||||
|
||||
deb http://deb.debian.org/debian bullseye-updates main
|
||||
deb-src http://deb.debian.org/debian bullseye-updates main
|
||||
EOF
|
||||
cd "$DIR"
|
||||
apt update
|
||||
# If GitHub Actions runner is installed, append LANG to the environment.
|
||||
# Python related tests doesn't work the LANG export.
|
||||
if [ -d "/home/gh/actions-runner" ]; then
|
||||
echo "LANG=en_US.utf8" >> /home/gh/actions-runner/.env
|
||||
else
|
||||
echo "NOTE: export LANG=en_US.utf8"
|
||||
fi
|
||||
apt install -y wget
|
||||
for pkg in $1; do
|
||||
if [ "$pkg" == dotnet-sdk-3.1 ]; then
|
||||
if ! dpkg -s "$pkg" 2>/dev/null >/dev/null; then
|
||||
wget -nv https://packages.microsoft.com/config/debian/10/packages-microsoft-prod.deb -O packages-microsoft-prod.deb
|
||||
dpkg -i packages-microsoft-prod.deb
|
||||
apt-get update
|
||||
apt-get install -y apt-transport-https dotnet-sdk-3.1
|
||||
fi
|
||||
continue
|
||||
fi
|
||||
apt install -y "$pkg"
|
||||
done
|
||||
}
|
||||
|
||||
deps=$2"[*]"
|
||||
"$1" "${!deps}"
|
||||
File diff suppressed because it is too large
Load Diff
750
include/mgp.py
750
include/mgp.py
File diff suppressed because it is too large
Load Diff
@@ -203,7 +203,8 @@ import_external_library(mgclient STATIC
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/mgclient/include
|
||||
CMAKE_ARGS -DCMAKE_C_COMPILER=${CMAKE_C_COMPILER}
|
||||
-DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER}
|
||||
-DBUILD_TESTING=OFF)
|
||||
-DBUILD_TESTING=OFF
|
||||
-DBUILD_CPP_BINDINGS=ON)
|
||||
find_package(OpenSSL REQUIRED)
|
||||
target_link_libraries(mgclient INTERFACE ${OPENSSL_LIBRARIES})
|
||||
|
||||
|
||||
@@ -212,7 +212,7 @@ repo_clone_try_double "${primary_urls[rocksdb]}" "${secondary_urls[rocksdb]}" "r
|
||||
sed -i 's/TARGETS ${ROCKSDB_SHARED_LIB}/TARGETS ${ROCKSDB_SHARED_LIB} OPTIONAL/' rocksdb/CMakeLists.txt
|
||||
|
||||
# mgclient
|
||||
mgclient_tag="v1.2.0" # (2021-01-14)
|
||||
mgclient_tag="v1.3.0" # (2021-09-23)
|
||||
repo_clone_try_double "${primary_urls[mgclient]}" "${secondary_urls[mgclient]}" "mgclient" "$mgclient_tag"
|
||||
sed -i 's/\${CMAKE_INSTALL_LIBDIR}/lib/' mgclient/src/CMakeLists.txt
|
||||
|
||||
@@ -221,7 +221,7 @@ pymgclient_tag="4f85c179e56302d46a1e3e2cf43509db65f062b3" # (2021-01-15)
|
||||
repo_clone_try_double "${primary_urls[pymgclient]}" "${secondary_urls[pymgclient]}" "pymgclient" "$pymgclient_tag"
|
||||
|
||||
# mgconsole
|
||||
mgconsole_tag="01ae99bfce772e540e75c076ba03cf06c0c2ac7d" # (2021-05-26)
|
||||
mgconsole_tag="v1.1.0" # (2021-10-07)
|
||||
repo_clone_try_double "${primary_urls[mgconsole]}" "${secondary_urls[mgconsole]}" "mgconsole" "$mgconsole_tag"
|
||||
|
||||
spdlog_tag="46d418164dd4cd9822cf8ca62a116a3f71569241" # (2020-12-01)
|
||||
|
||||
201
licenses/APL.txt
Normal file
201
licenses/APL.txt
Normal file
@@ -0,0 +1,201 @@
|
||||
Apache License
|
||||
Version 2.0, January 2004
|
||||
http://www.apache.org/licenses/
|
||||
|
||||
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
|
||||
|
||||
1. Definitions.
|
||||
|
||||
"License" shall mean the terms and conditions for use, reproduction,
|
||||
and distribution as defined by Sections 1 through 9 of this document.
|
||||
|
||||
"Licensor" shall mean the copyright owner or entity authorized by
|
||||
the copyright owner that is granting the License.
|
||||
|
||||
"Legal Entity" shall mean the union of the acting entity and all
|
||||
other entities that control, are controlled by, or are under common
|
||||
control with that entity. For the purposes of this definition,
|
||||
"control" means (i) the power, direct or indirect, to cause the
|
||||
direction or management of such entity, whether by contract or
|
||||
otherwise, or (ii) ownership of fifty percent (50%) or more of the
|
||||
outstanding shares, or (iii) beneficial ownership of such entity.
|
||||
|
||||
"You" (or "Your") shall mean an individual or Legal Entity
|
||||
exercising permissions granted by this License.
|
||||
|
||||
"Source" form shall mean the preferred form for making modifications,
|
||||
including but not limited to software source code, documentation
|
||||
source, and configuration files.
|
||||
|
||||
"Object" form shall mean any form resulting from mechanical
|
||||
transformation or translation of a Source form, including but
|
||||
not limited to compiled object code, generated documentation,
|
||||
and conversions to other media types.
|
||||
|
||||
"Work" shall mean the work of authorship, whether in Source or
|
||||
Object form, made available under the License, as indicated by a
|
||||
copyright notice that is included in or attached to the work
|
||||
(an example is provided in the Appendix below).
|
||||
|
||||
"Derivative Works" shall mean any work, whether in Source or Object
|
||||
form, that is based on (or derived from) the Work and for which the
|
||||
editorial revisions, annotations, elaborations, or other modifications
|
||||
represent, as a whole, an original work of authorship. For the purposes
|
||||
of this License, Derivative Works shall not include works that remain
|
||||
separable from, or merely link (or bind by name) to the interfaces of,
|
||||
the Work and Derivative Works thereof.
|
||||
|
||||
"Contribution" shall mean any work of authorship, including
|
||||
the original version of the Work and any modifications or additions
|
||||
to that Work or Derivative Works thereof, that is intentionally
|
||||
submitted to Licensor for inclusion in the Work by the copyright owner
|
||||
or by an individual or Legal Entity authorized to submit on behalf of
|
||||
the copyright owner. For the purposes of this definition, "submitted"
|
||||
means any form of electronic, verbal, or written communication sent
|
||||
to the Licensor or its representatives, including but not limited to
|
||||
communication on electronic mailing lists, source code control systems,
|
||||
and issue tracking systems that are managed by, or on behalf of, the
|
||||
Licensor for the purpose of discussing and improving the Work, but
|
||||
excluding communication that is conspicuously marked or otherwise
|
||||
designated in writing by the copyright owner as "Not a Contribution."
|
||||
|
||||
"Contributor" shall mean Licensor and any individual or Legal Entity
|
||||
on behalf of whom a Contribution has been received by Licensor and
|
||||
subsequently incorporated within the Work.
|
||||
|
||||
2. Grant of Copyright License. Subject to the terms and conditions of
|
||||
this License, each Contributor hereby grants to You a perpetual,
|
||||
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
||||
copyright license to reproduce, prepare Derivative Works of,
|
||||
publicly display, publicly perform, sublicense, and distribute the
|
||||
Work and such Derivative Works in Source or Object form.
|
||||
|
||||
3. Grant of Patent License. Subject to the terms and conditions of
|
||||
this License, each Contributor hereby grants to You a perpetual,
|
||||
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
||||
(except as stated in this section) patent license to make, have made,
|
||||
use, offer to sell, sell, import, and otherwise transfer the Work,
|
||||
where such license applies only to those patent claims licensable
|
||||
by such Contributor that are necessarily infringed by their
|
||||
Contribution(s) alone or by combination of their Contribution(s)
|
||||
with the Work to which such Contribution(s) was submitted. If You
|
||||
institute patent litigation against any entity (including a
|
||||
cross-claim or counterclaim in a lawsuit) alleging that the Work
|
||||
or a Contribution incorporated within the Work constitutes direct
|
||||
or contributory patent infringement, then any patent licenses
|
||||
granted to You under this License for that Work shall terminate
|
||||
as of the date such litigation is filed.
|
||||
|
||||
4. Redistribution. You may reproduce and distribute copies of the
|
||||
Work or Derivative Works thereof in any medium, with or without
|
||||
modifications, and in Source or Object form, provided that You
|
||||
meet the following conditions:
|
||||
|
||||
(a) You must give any other recipients of the Work or
|
||||
Derivative Works a copy of this License; and
|
||||
|
||||
(b) You must cause any modified files to carry prominent notices
|
||||
stating that You changed the files; and
|
||||
|
||||
(c) You must retain, in the Source form of any Derivative Works
|
||||
that You distribute, all copyright, patent, trademark, and
|
||||
attribution notices from the Source form of the Work,
|
||||
excluding those notices that do not pertain to any part of
|
||||
the Derivative Works; and
|
||||
|
||||
(d) If the Work includes a "NOTICE" text file as part of its
|
||||
distribution, then any Derivative Works that You distribute must
|
||||
include a readable copy of the attribution notices contained
|
||||
within such NOTICE file, excluding those notices that do not
|
||||
pertain to any part of the Derivative Works, in at least one
|
||||
of the following places: within a NOTICE text file distributed
|
||||
as part of the Derivative Works; within the Source form or
|
||||
documentation, if provided along with the Derivative Works; or,
|
||||
within a display generated by the Derivative Works, if and
|
||||
wherever such third-party notices normally appear. The contents
|
||||
of the NOTICE file are for informational purposes only and
|
||||
do not modify the License. You may add Your own attribution
|
||||
notices within Derivative Works that You distribute, alongside
|
||||
or as an addendum to the NOTICE text from the Work, provided
|
||||
that such additional attribution notices cannot be construed
|
||||
as modifying the License.
|
||||
|
||||
You may add Your own copyright statement to Your modifications and
|
||||
may provide additional or different license terms and conditions
|
||||
for use, reproduction, or distribution of Your modifications, or
|
||||
for any such Derivative Works as a whole, provided Your use,
|
||||
reproduction, and distribution of the Work otherwise complies with
|
||||
the conditions stated in this License.
|
||||
|
||||
5. Submission of Contributions. Unless You explicitly state otherwise,
|
||||
any Contribution intentionally submitted for inclusion in the Work
|
||||
by You to the Licensor shall be under the terms and conditions of
|
||||
this License, without any additional terms or conditions.
|
||||
Notwithstanding the above, nothing herein shall supersede or modify
|
||||
the terms of any separate license agreement you may have executed
|
||||
with Licensor regarding such Contributions.
|
||||
|
||||
6. Trademarks. This License does not grant permission to use the trade
|
||||
names, trademarks, service marks, or product names of the Licensor,
|
||||
except as required for reasonable and customary use in describing the
|
||||
origin of the Work and reproducing the content of the NOTICE file.
|
||||
|
||||
7. Disclaimer of Warranty. Unless required by applicable law or
|
||||
agreed to in writing, Licensor provides the Work (and each
|
||||
Contributor provides its Contributions) on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
|
||||
implied, including, without limitation, any warranties or conditions
|
||||
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
|
||||
PARTICULAR PURPOSE. You are solely responsible for determining the
|
||||
appropriateness of using or redistributing the Work and assume any
|
||||
risks associated with Your exercise of permissions under this License.
|
||||
|
||||
8. Limitation of Liability. In no event and under no legal theory,
|
||||
whether in tort (including negligence), contract, or otherwise,
|
||||
unless required by applicable law (such as deliberate and grossly
|
||||
negligent acts) or agreed to in writing, shall any Contributor be
|
||||
liable to You for damages, including any direct, indirect, special,
|
||||
incidental, or consequential damages of any character arising as a
|
||||
result of this License or out of the use or inability to use the
|
||||
Work (including but not limited to damages for loss of goodwill,
|
||||
work stoppage, computer failure or malfunction, or any and all
|
||||
other commercial damages or losses), even if such Contributor
|
||||
has been advised of the possibility of such damages.
|
||||
|
||||
9. Accepting Warranty or Additional Liability. While redistributing
|
||||
the Work or Derivative Works thereof, You may choose to offer,
|
||||
and charge a fee for, acceptance of support, warranty, indemnity,
|
||||
or other liability obligations and/or rights consistent with this
|
||||
License. However, in accepting such obligations, You may act only
|
||||
on Your own behalf and on Your sole responsibility, not on behalf
|
||||
of any other Contributor, and only if You agree to indemnify,
|
||||
defend, and hold each Contributor harmless for any liability
|
||||
incurred by, or claims asserted against, such Contributor by reason
|
||||
of your accepting any such warranty or additional liability.
|
||||
|
||||
END OF TERMS AND CONDITIONS
|
||||
|
||||
APPENDIX: How to apply the Apache License to your work.
|
||||
|
||||
To apply the Apache License to your work, attach the following
|
||||
boilerplate notice, with the fields enclosed by brackets "{}"
|
||||
replaced with your own identifying information. (Don't include
|
||||
the brackets!) The text should be enclosed in the appropriate
|
||||
comment syntax for the file format. We also recommend that a
|
||||
file or class name and description of purpose be included on the
|
||||
same "printed page" as the copyright notice for easier
|
||||
identification within third-party archives.
|
||||
|
||||
Copyright {}
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
84
licenses/BSL.txt
Normal file
84
licenses/BSL.txt
Normal file
@@ -0,0 +1,84 @@
|
||||
MEMGRAPH
|
||||
BUSINESS SOURCE LICENSE (BSL) 1.1
|
||||
|
||||
PARAMETERS
|
||||
|
||||
LICENSOR: MEMGRAPH LTD
|
||||
LICENSED WORK: MEMGRAPH COMMUNITY EDITION (MCE) version 2.0
|
||||
ADDITIONAL USE GRANT: You may use the Licensed Work in accordance with the
|
||||
terms of this License solely for any Authorised Purpose,
|
||||
provided that you may not use the Licensed Work for any
|
||||
Excluded Purpose.
|
||||
|
||||
“Authorised Purpose” means any of the following,
|
||||
provided always that (a) you do not embed or otherwise
|
||||
distribute the Licensed Work to third parties; and (b)
|
||||
you do not provide third parties direct access to
|
||||
operate or control the Licensed Work as a standalone
|
||||
solution or service:
|
||||
1. for your internal business purposes;
|
||||
2. to integrate the Licensed Work with your own
|
||||
proprietary software, provided that your proprietary
|
||||
software adds a primary and significant functionality
|
||||
to the Licensed Work (the “Integrated Solution”);
|
||||
and/or
|
||||
3. to host the Integrated Solution and make it available
|
||||
to third parties on a ‘software-as-a-service’ or an
|
||||
equivalent distributed model.
|
||||
“Excluded Purpose” means any of the following:
|
||||
1. making the Licensed Work accessible to any third
|
||||
party outside of your organization as a standalone
|
||||
solution or service;
|
||||
2. hosting and making the Licensed Work available to
|
||||
third parties on a ‘database-as-a-service’ or any
|
||||
equivalent distributed model as a standalone solution or
|
||||
service; and/or
|
||||
3. using the Licensed Work to create a work or solution
|
||||
which competes (or might reasonably be expected to
|
||||
compete) with the Licensed Work.
|
||||
CHANGE DATE: 2025-10-12
|
||||
CHANGE LICENSE: Apache License, Version 2.0
|
||||
|
||||
For information about alternative licensing arrangements, please visit: https://memgraph.com/legal.
|
||||
The Business Source License (this document, or the “License”) is not an
|
||||
‘open source’ license. However, the Licensed Work will eventually be made
|
||||
available under an ‘open source’ license, as stated in this License.
|
||||
|
||||
TERMS
|
||||
The Licensor hereby grants you the right to copy, modify, create derivative works, redistribute, and make non-production
|
||||
use of the Licensed Work. The Licensor may make an Additional Use Grant, above, permitting limited production use.
|
||||
Effective on the Change Date, or the fourth anniversary of the first publicly available distribution of a specific
|
||||
version of the Licensed Work under this License, whichever comes first, the Licensor hereby grants you rights under the
|
||||
terms of the Change License, and the rights granted in the paragraph above terminate. If your use of the Licensed Work
|
||||
does not comply with the requirements currently in effect as described in thisLicense, you must purchase a commercial
|
||||
license from the Licensor, its affiliated entities, or authorized resellers, or you must refrain from using the Licensed
|
||||
Work. All copies of the original and modified Licensed Work, and derivative works of the Licensed Work, are subject to
|
||||
this License. This License applies separately for each version of the Licensed Work and the Change Date may vary for
|
||||
each version of the Licensed Work released by Licensor. You must conspicuously display this License on each original or
|
||||
modified copy of the Licensed Work. If you receive the Licensed Work in original or modified form from a third party,
|
||||
the terms and conditions set forth in this License apply to your use of that work.Any use of the Licensed Work in
|
||||
violation of this License will automatically terminate your rights under this License for the current and all other
|
||||
versions of the Licensed Work. This License does not grant you any right in any trademark or logo of Licensor or its
|
||||
affiliates (provided that you may use a trademark or logo of Licensor as expressly required by this License).
|
||||
TO THE EXTENT PERMITTED BY APPLICABLE LAW, THE LICENSED WORK IS PROVIDED ON AN “AS IS” BASIS. LICENSOR HEREBY DISCLAIMS
|
||||
ALL WARRANTIES AND CONDITIONS, EXPRESS OR IMPLIED, INCLUDING (WITHOUT LIMITATION) WARRANTIES OF MERCHANTABILITY, FITNESS
|
||||
FOR A PARTICULAR PURPOSE, NON-INFRINGEMENT, AND TITLE.
|
||||
MariaDB hereby grants you permission to use this License’s text to license your works, and to refer to it using the
|
||||
trademark ‘Business Source License’, as long as you comply with the Covenants of Licensor below.
|
||||
Covenants of Licensor
|
||||
In consideration of the right to use this License’s text and the ‘Business Source License’ name and trademark, Licensor
|
||||
covenants to MariaDB, and to all other recipients of the Licensed Work to be provided by Licensor:
|
||||
1. To specify as the Change License the GPL Version 2.0 or any later version, or a license that is compatible with GPL
|
||||
Version 2.0 or a later version, where “compatible” means that software provided under the Change License can be
|
||||
included in a program with software provided under GPL Version 2.0 or a later version. Licensor may specify
|
||||
additional Change Licenses without limitation.
|
||||
|
||||
2. To either: (a) specify an additional grant of rights to use that does not impose any additional restriction on the
|
||||
right granted in this License, as the Additional Use Grant; or (b) insert the text “None”.
|
||||
|
||||
3. To specify a Change Date.
|
||||
|
||||
4. Not to modify this License in any other way.
|
||||
|
||||
NOTICE
|
||||
License text copyright (c) 2017 MariaDB Corporation Ab, All Rights Reserved. ‘Business Source License’ is a trademark of MariaDB Corporation Ab.
|
||||
464
licenses/MEL.txt
Normal file
464
licenses/MEL.txt
Normal file
@@ -0,0 +1,464 @@
|
||||
MEMGRAPH
|
||||
ENTERPRISE LICENCE AGREEMENT
|
||||
|
||||
|
||||
Memgraph Limited is registered in England under registration 10195084 and has its registered office at Suite 4,
|
||||
Ironstone House, Ironstone Way, Brixworth, Northampton, NN6 9UD (“Memgraph”).
|
||||
|
||||
|
||||
Memgraph agrees to license and/or grant you (the “Customer”) access to the Software ( as defined below) and provide
|
||||
support and services to you only if you accept and agree to be bound by the terms and conditions in this Memgraph
|
||||
Enterprise Licence Agreement (the “Agreement”). By signing an Order Document (as defined below), which is subject to and
|
||||
part of this Agreement, installing and using the Software or by downloading a trial version of the Software, you agree
|
||||
to be bound by the terms of this Agreement.
|
||||
|
||||
|
||||
Memgraph Enterprise Trial Users: If you receive free of charge trial access to the Software, you are deemed a
|
||||
“Customer” for purposes of this Agreement, except that you are subject to the additional restrictions and limitations
|
||||
set forth in Section 3.2 below in respect of your use of such Software.
|
||||
|
||||
|
||||
1. DEFINITIONS.
|
||||
1.1. “Applicable Laws” means (i) all applicable laws, statutes and regulations, and (ii) regulatory policies,
|
||||
guidelines and industry codes (in each case having the force of law), which apply to the provisions of the
|
||||
Software and Services and this Agreement.
|
||||
1.2. “Confidential Information” means all information disclosed by a party (“Disclosing Party”) to the other party
|
||||
(“Receiving Party”), whether orally or in writing, that is designated as confidential or that reasonably should
|
||||
be understood to be confidential given the nature of the information and the circumstances of disclosure.
|
||||
Customer’s Confidential Information includes Customer Data; Memgraph Confidential Information includes the
|
||||
Software and Services; and Confidential Information of each party includes the terms and conditions of this
|
||||
Agreement and all Orders (including pricing), as well as business and marketing plans, technology and technical
|
||||
information, product plans and designs, and business processes disclosed by such party. However, Confidential
|
||||
Information does not include any information that (i) is or becomes generally known to the public without
|
||||
breach of any obligation owed to the Disclosing Party, (ii) was known to the Receiving Party prior to its
|
||||
disclosure by the Disclosing Party without breach of any obligation owed to the Disclosing Party, (iii) is
|
||||
received from a third party without breach of any obligation owed to the Disclosing Party, or (iv) was
|
||||
independently developed by the Receiving Party.
|
||||
1.3. “Customer Data” means business information or other data loaded by or for Customer and/or processed by the
|
||||
Software.
|
||||
1.4. “Data Protection Legislation” means all applicable data protection and privacy legislation in force from time
|
||||
to time in the UK including the General Data Protection Regulation ((EU) 2016/679) as it forms part of UK law
|
||||
by virtue of section 3 of the European Union (Withdrawal) Act 2018; the Data
|
||||
Protection Act 2018; the Privacy and Electronic Communications Directive 2002/58/EC (as updated by Directive
|
||||
2009/136/EC); and the Privacy and Electronic Communications Regulations 2003 (SI 2003/2426), in each case as
|
||||
amended.
|
||||
1.5. “Derivate Work” means any modification or enhancement made by Customer to the Software, whether in source code,
|
||||
binary executable, intermediate or other form.
|
||||
1.6. “Effective Date” means the date on which you execute this Agreement.
|
||||
1.7. “Order Document” or “Order” means, as applicable: (i) in the case of a Trial Licence, the Memgraph trial
|
||||
registration form available on Memgraph’s website; or (ii) in any other case, an order form that is submitted
|
||||
by or on behalf of Customer and executed by or on behalf of the parties referencing
|
||||
this Agreement and that specifies the Software and/or Services ordered by Customer, as well as the specific
|
||||
terms and conditions, for that particular transaction.
|
||||
1.8. “Services” means those services, including Support Services, which may be provided to Customer by Memgraph
|
||||
pursuant to the terms of this Agreement and are expressly limited to those services directly related to
|
||||
Customer’s use of the Software, and expressly exclude any other services.
|
||||
1.9. “Software” means Memgraph’s proprietary downloadable graph database enterprise software known as Memgraph
|
||||
Enterprise Edition (MEE) (“Enterprise Software”) and the associated technical documentation located at
|
||||
https://docs.memgraph.com/ (“Documentation”), as well as software updates, upgrades, bug fixes, or modified
|
||||
versions thereof that Memgraph licenses or provides to Customer directly or indirectly throughout the Subscription
|
||||
Term. For the avoidance of doubt, for the purpose of this Agreement, the term Software excludes Memgraph’s
|
||||
free-to-use software known as Memgraph Community Edition (MCE) which is licensed pursuant to separate terms
|
||||
(including the Business Source Licence (BSL) or Apache 2.0) as indicated here: https://memgraph.com/legal.
|
||||
1.10. “Subscription Term” means the fixed term, of not less than one (1) year, designated in an Order Document
|
||||
beginning on the Effective Date and ending at the end of the period stated therein. If no expiration date is
|
||||
specified in an Order Document, the Subscription Term shall be a one (1) year period (“Minimum Subscription
|
||||
Term”). A “Subscription” is the binding, non-cancellable contract for the use of the Software for the
|
||||
Subscription Term as set forth in an Order Document.
|
||||
1.11. “Support” means the support and maintenance services, including any updates, upgrades, patches, enhancements
|
||||
and bug fixes for the Software that may be provided to Customer by Memgraph pursuant to the terms of this
|
||||
Agreement.
|
||||
1.12. “Users” means employees and Contractors of Customer that Customer has permitted or authorized to access and use
|
||||
of the Software on Customer’s behalf pursuant to the terms of this Agreement.
|
||||
|
||||
2. ORDERS, DELIVERY; SUPPORT.
|
||||
2.1. Delivery. Customer shall access the Software from Memgraph’s website or online repository (as instructed by
|
||||
Memgraph) after the Effective Date. Memgraph shall deliver to Customer the licence key necessary to unlock the
|
||||
Software after Customer accepts an Order. Unless otherwise stated in an Order, Customer is solely responsible
|
||||
for installing Software on Customer’s own computer equipment. In some instances, Customer’s purchasing
|
||||
relationship exists solely between Customer and an authorised reseller of Memgraph’s Software and Services
|
||||
(a “Reseller”), in which case Sections 5.1-5.3 (Fees and Payment) will be inapplicable to such Order(s), and
|
||||
the Reseller shall be responsible for submitting Orders and the appropriate payment method therewith to
|
||||
Memgraph. An Order is not binding until Memgraph accepts and countersigns the Order.
|
||||
2.2. Support. Memgraph will use commercially reasonable efforts to provide Support to Customer in accordance with
|
||||
Memgraph’s then-current terms and conditions set forth at
|
||||
https://download.memgraph.com/legal/memgraph-support-terms-and-conditions.pdf at the support tier stated in the
|
||||
applicable Order. The Support terms and conditions are subject to change at Memgraph’s discretion; however,
|
||||
Memgraph will not materially reduce the level of Support during a Subscription Term for which Fees have been
|
||||
paid.
|
||||
|
||||
3. LICENCE GRANTS; RESTRICTIONS AND PROPRIETARY RIGHTS.
|
||||
Customer’s licence and access rights and benefits, and Memgraph’s obligations to Customer, will vary depending on the
|
||||
product and the type of licence Memgraph is granting. If you purchased a licence to Memgraph Software, your licence will
|
||||
be subject to certain use and/or capacity restrictions, as identified on the applicable Order Document.
|
||||
3.1. Enterprise Software Licence. In consideration of the Fees paid hereunder and subject to the terms of this
|
||||
Agreement and the applicable Order, Memgraph grants Customer a world-wide, non-exclusive, non-transferable,
|
||||
non-sublicensable, and limited licence during the applicable Subscription Term, to download, access, install
|
||||
and use the Enterprise Software up to the maximum capacity (“Licensed Capacity”), and subject to the usage
|
||||
rules, specified in the applicable Order Document, and to use Documentation solely for Customer’s internal
|
||||
business purposes in connection with the operation of the Enterprise Software.
|
||||
3.2. Enterprise Trial Licence. If the Customer downloads, accesses, installs or uses the Software under a trial
|
||||
licence (“Trial Licence”), then Customer may use one (1) copy of the Software in accordance with the terms and
|
||||
conditions of this Agreement for a thirty (30) day period, or such longer trial period represented by the
|
||||
applicable licence key issued by or expressly authorised by Memgraph (the “Trial Period”). Trial Licences are
|
||||
permitted solely for Customer’s evaluation use to determine whether to purchase a Subscription to the Software.
|
||||
Customer may not use a Trial Licence for any other purpose. At the end of the Trial Period, the Trial Licence
|
||||
will expire and this Agreement will terminate as to such Trial Licence and continue to apply to any subsequent
|
||||
Subscription or use of the Software. If Customer decides not to obtain a Subscription upon expiration of the
|
||||
Trial Period, it will promptly cease using and will delete the Software from its computer systems. Memgraph has
|
||||
the right to terminate a Trial Licence at any time for any reason.
|
||||
3.3. Limited right to modify the Software. In consideration of the Fees paid hereunder and subject to the terms of
|
||||
this Agreement and the applicable Order, Memgraph grants Customer a licence to: (i) create, compile and test
|
||||
Derivative Works; (ii) use Derivative Works solely for Customer’s internal business purposes; and (iii)
|
||||
distribute Derivative Works back to Memgraph for potential incorporation into Memgraph’s maintained code base
|
||||
at its sole discretion.
|
||||
3.4. NO OBLIGATIONS. NOTWITHSTANDING ANYTHING TO THE CONTRARY IN THIS AGREEMENT OR IN ANY ORDER DOCUMENT, MEMGRAPH
|
||||
WILL HAVE NO WARRANTY, INDEMNITY, SUPPORT, OR SERVICE LEVEL, OBLIGATIONS WITH RESPECT TO ANY ENTERPRISE TRIAL,
|
||||
OR OTHER NO-CHARGE SOFTWARE (INCLUDING TOOLS AND UTILITIES) LICENCES.
|
||||
3.5. General Restrictions. Customer acknowledges that the Software, and its structure, organization, and source code,
|
||||
constitute Memgraph’s and its suppliers’ valuable trade secrets, and that usage of the Software is subject to
|
||||
the following restrictions:
|
||||
3.5.1. Restrictions. Customer agrees not to, and not to authorize any third party to: (i) allow access or use
|
||||
of the Software by anyone other than its Users; (ii) distribute, embed, sell, rent, transfer, lease,
|
||||
lend, sublicense, loan, assign, pledge, grant a security interest in, or otherwise make the Software
|
||||
accessible or available to any third party; except to the limited extent expressly provided in Section
|
||||
3.5.2, use the Software in any service-bureau, timesharing, outsourcing or similar arrangement; (iii)
|
||||
subject only to the limited rights set out in Section 3.3, modify, adapt, transform, derive, disassemble,
|
||||
decompile, reverse engineer or otherwise attempt to derive the structure, sequence or organization of,
|
||||
the Software or any portion thereof; (iv) remove or alter product identification, copyright, trademark or
|
||||
other proprietary markings contained in or on the Software; (v) conduct any competitive analysis, publish
|
||||
or share with any third party any results of any technical evaluation or tests performed on the Software,
|
||||
or disclose Software features, errors or bugs to a third party without Memgraph’s prior written consent;
|
||||
or (vi) engage in any act designed to circumvent any restriction set forth in this Agreement, in the
|
||||
Software, or in an Order, including but not limited to restrictions related to Licensed Capacity.
|
||||
3.5.2. Internal Use Licences; Users. The Software is licensed for Customer’s internal business use and not for
|
||||
distribution or use by third parties. For clarity, however, Customer may make available to third parties
|
||||
any Customer-hosted services or other Customer applications or services that make use of or incorporate
|
||||
the Software, provided and solely to the extent that (i) Customer’s application or hosted service adds
|
||||
primary and significant functionality to the Software, (ii) Customer does not embed or otherwise
|
||||
distribute the Software to third parties (iii) Customer does not provide third parties direct access to
|
||||
operate or control the Software itself; and (iv) Customer at all times remains in compliance with the
|
||||
terms of the applicable licence grants under this Agreement. Subject to the terms and conditions of this
|
||||
Agreement, in addition to Customer’s employees, Customer may permit its independent contractors and
|
||||
consultants (“Contractors”) to serve as Users. Customer will remain responsible for compliance by each of
|
||||
its Users (including but not limited to any Contractor Users) with all of the terms and conditions of
|
||||
this Agreement, and any use of the Software by any Contractors must be for the sole benefit of Customer.
|
||||
3.6. Ownership; Reservation of Rights. This is an agreement for use of Memgraph Software and not an agreement for
|
||||
sale. Customer acknowledges that it is obtaining only a limited right to use the Software on a licensed basis,
|
||||
and that irrespective of any use of the words “purchase”, “sale” or like terms hereunder no ownership rights
|
||||
are being conveyed to Customer. Customer agrees that Memgraph or its suppliers retain all right, title and
|
||||
interest (including all patent, copyright, trade secret and other intellectual property rights) in and to the
|
||||
Memgraph Software. Nothing in this Section shall be deemed as granting Memgraph ownership of Customer Data or
|
||||
in any way impacting Customer’s ownership of Customer Data.
|
||||
3.7. Third Party Code. The Software may contain or be provided with components which are licensed from third
|
||||
parties, including components subject to the terms and conditions of “open source” software licences
|
||||
(“Open Source Software”). Open Source Software may be identified in the Software, Documentation, or in a list
|
||||
of the Open Source Software provided to you upon your written request. To the extent required by the licence
|
||||
that accompanies the Open Source Software, the terms of such licence will apply in lieu of the terms of this
|
||||
Agreement with respect to such Open Source Software, including, without limitation, any provisions governing
|
||||
access to source code, modification, or reverse engineering.
|
||||
3.8. IP Ownership. The Parties agree that, save as otherwise provided in this Agreement, neither party shall gain, by
|
||||
virtue of this Agreement, any rights of ownership or any other interest, right or title of copyrights, patents,
|
||||
trade secrets, trademarks, or any other intellectual property rights owned by the other Party. Any and all new
|
||||
works developed in the course of performing obligations pursuant to this Agreement and all new inventions,
|
||||
innovations or ideas developed by a Party in the course of performance of its activities under this Agreement,
|
||||
will belong to that Party who develops the same. Notwithstanding anything to the contrary in this Section, the
|
||||
Parties understand and agree that any and all proprietary materials developed by a Party prior to this
|
||||
Agreement and any modifications, enhancements, improvements or inventions made to such proprietary materials
|
||||
shall be owned by that Party, regardless of which Party prepared or developed such modifications, enhancements,
|
||||
improvements or inventions.
|
||||
3.9. License-back of Derivate Works. If Customer elects, at its sole discretion, to distribute Derivative Works
|
||||
back to Memgraph for potential incorporation into Memgraph’s maintained code base, Customer grants Memgraph
|
||||
(without any restrictions, limitations or requirement of remuneration) a worldwide, non-exclusive, fully
|
||||
paid-up, royalty-free, perpetual, irrevocable, transferable and sublicensable licence to use, exploit, modify,
|
||||
make derivative works of, commercialise, distribute and otherwise exploit such Derivative Works.
|
||||
|
||||
|
||||
4. CUSTOMER DATA; OBLIGATIONS OF CUSTOMER AND MEMGRAPH.
|
||||
4.1. Customer shall retain all of its rights, title, and interest in and to its intellectual property rights in
|
||||
Customer Data. Customer grants to Memgraph a non-exclusive, worldwide, limited-term licence solely to host,
|
||||
copy, transmit and display Customer Data as reasonably necessary for Memgraph to support Customer’s use of the
|
||||
Software, to ensure the security of and to administrate the Software, and to deliver Services in accordance
|
||||
with this Agreement or as otherwise outlined in https://memgraph.com/legal/privacy-policy/.
|
||||
4.2. Protection of Customer Data. Memgraph will maintain appropriate administrative, physical, and technical
|
||||
safeguards, consistent with generally prevailing industry standards, for protection of the security,
|
||||
confidentiality, and integrity of Customer Data, as described in the Documentation. Those safeguards will
|
||||
include, but will not be limited to, measures for preventing access, use, modification, or disclosure of
|
||||
Customer Data by Memgraph personnel, except as permitted by this Agreement.
|
||||
4.3. Personal data. Both parties will comply with all applicable requirements of the Data Protection Legislation.
|
||||
This section 4.3 is in addition to, and does not relieve, remove or replace, a party’s obligations under the
|
||||
Data Protection Legislation. Notwithstanding the foregoing, the parties acknowledge that, in the ordinary
|
||||
course of providing the Services, Memgraph shall not process personal data (as defined in the Data Protection
|
||||
Legislation) on behalf of the Customer. In the event that the Customer requires Memgraph to process personal
|
||||
data on its behalf, it shall notify Memgraph and the parties shall execute such additional terms as necessary
|
||||
to comply with applicable Data Protection Legislation.
|
||||
|
||||
5. FEES AND PAYMENT.
|
||||
5.1. Fees. Customer will pay Memgraph the fees for the Licences and Services as set forth in the applicable Order (
|
||||
“Fees”). Customer acknowledges and agrees that if Customer’s use of the Software exceeds the Licensed Capacity
|
||||
set forth on the applicable Orders or otherwise requires the payment of additional fees (per the terms of this
|
||||
Agreement), Customer shall be invoiced for such usage and Customer agrees to pay the additional fees in
|
||||
accordance with this Section. Notwithstanding the terms of Section 5.4 below (Reconciliation), Customer
|
||||
acknowledges and agrees that it is obligated to ensure that its Software usage does not exceed the Licensed Capacity
|
||||
and to promptly notify Memgraph of any such excess usage no more than thirty (30) days from the last day of the
|
||||
calendar month during which such excess usage occurred.
|
||||
5.2. Payment Terms. Except as otherwise specifically set forth on an Order Document, all fees are due and payable
|
||||
within thirty days after the date of invoice. Renewal Fees for any renewal Subscription Term (if purchased by
|
||||
Customer) will be due and payable within thirty (30) days of expiration of the then-current term. If Fees are
|
||||
not paid when due, or in the event of other breach of this Agreement, Customer shall discontinue use of the
|
||||
Software and Memgraph may suspend its performance, including its delivery of technical support of the Software
|
||||
or other Services without further notice and without penalty. All Orders (including multi-year Subscriptions
|
||||
with annual payment schedules) are non-cancellable and all amounts paid are non-refundable, unless otherwise
|
||||
expressly set forth herein. Any invoiced amount not received by the due date will accrue late interest at the
|
||||
rate of 1.5% of the outstanding balance per month, or the maximum rate permitted by applicable law, whichever
|
||||
is lower.
|
||||
5.3. Taxes. Fees are exclusive of taxes. Customer will pay any sales, use, value added, duties, fees and other
|
||||
governmental assessments or charges arising out of this Agreement and the transactions contemplated herein.
|
||||
Customer will make all payments free and clear of, and without reduction for, any withholding taxes.
|
||||
5.4. Reconciliation. At Memgraph’s request from time to time, not exceeding once per quarter, Customer will provide
|
||||
Memgraph with a report detailing its use of the Software, including its non-production and/or production use
|
||||
and using the self-monitoring capabilities of the Software or other means, and Memgraph may inspect Customer’s
|
||||
records related to such report not more frequently than annually to ensure payment of Fees. Any on-site review
|
||||
will be conducted during regular business hours at Customer’s offices. The parties will use reasonable efforts
|
||||
to promptly resolve any discrepancies between licensed usage and actual usage.
|
||||
|
||||
6. APPLICABLE LAWS.
|
||||
6.1. Each Party shall perform this Agreement in accordance with all Applicable Laws. Without prejudice to the
|
||||
foregoing, each Party shall:
|
||||
6.1.1. comply with all Applicable Laws relating to anti-bribery, anti-corruption, anti-slavery and human
|
||||
trafficking, including the Bribery Act 2010 and the Modern Slavery Act 2015
|
||||
(the “Relevant Requirements”);
|
||||
6.1.2. have and maintain in place throughout the Term its own policies and procedures, including adequate
|
||||
procedures under the Bribery Act 2010, to ensure compliance with the Relevant Requirements, and will
|
||||
enforce them where appropriate;
|
||||
6.1.3. (if not prohibited by law or regulation from doing so) promptly report to the other Party any request or
|
||||
demand for any undue financial or other advantage of any kind received by the reporting Party in
|
||||
connection with the performance of this Agreement; and
|
||||
6.1.4. (if not prohibited by law or regulation from doing so) notify the other Party (and email shall be
|
||||
sufficient for this purpose) as soon as it becomes aware of any actual or suspected slavery or human
|
||||
trafficking in a supply chain which has a connection with this Agreement.
|
||||
|
||||
7. REPRESENTATIONS AND WARRANTIES.
|
||||
7.1. Mutual Representations and Warranties. Each Party represents and warrants to the other that: (i) it is a
|
||||
corporation lawfully incorporated and validly existing pursuant to the laws of its place of incorporation;
|
||||
(ii) it has all requisite power and authority, corporate or otherwise, to execute, deliver and perform its
|
||||
obligations under this Agreement; and (iii) this Agreement constitutes its legal, valid and binding obligations
|
||||
and may be enforced against it.
|
||||
7.2. Limited Memgraph Warranty. Memgraph warrants that the Software, when used as permitted hereunder and in
|
||||
accordance with the applicable Documentation, will operate in all material respects as described in the
|
||||
applicable Documentation, and that the Services will be provided in a professional manner consistent with
|
||||
industry standards.
|
||||
7.3. Limitations; Remedy. Memgraph does not warrant that the Software or the Services will be error-free,
|
||||
uninterrupted or meet Customer’s specific requirements or that performance of the Services will be
|
||||
uninterrupted. Memgraph will have no warranty obligation under Section 7.2 for Customer’s misuse or failure to
|
||||
use the Software in accordance with its Documentation or this Agreement. Customer’s sole and exclusive remedy,
|
||||
and Memgraph’s sole and exclusive obligation, for breach of warranty will be (i) during the thirty (30) day
|
||||
period following initial Delivery of the Software under an Order, Memgraph’s correction of the program errors
|
||||
that cause the breach of warranty, or if Memgraph cannot substantially correct such breach in a commercially
|
||||
reasonable manner, a refund of the fees paid for the nonconforming Software (ii) during the remainder of the
|
||||
relevant Subscription Term, Memgraph’s delivery of Support with respect to any such program errors. In the
|
||||
event of a refund remedy, Customer’s licences and right to use the Software or receive Services will end. In
|
||||
the event of any noticed breach of warranty with respect to Services, Memgraph’s sole and exclusive obligation
|
||||
shall be the re-performance of the deficient Services.
|
||||
7.4. Disclaimer. THIS SECTION 7 IS A LIMITED WARRANTY AND, EXCEPT EXPRESSLY AS SET FORTH IN SECTION 7.2,
|
||||
THE SOFTWARE, INCLUDING WITHOUT LIMITATION THE THIRD-PARTY CODE, AND ALL SERVICES ARE PROVIDED “AS IS”.
|
||||
MEMGRAPH MAKES NO OTHER WARRANTIES OR REPRESENTATIONS, EXPRESS, IMPLIED, STATUTORY OR OTHERWISE, AND DISCLAIMS
|
||||
ALL IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, TITLE, AND NON-INFRINGEMENT.
|
||||
|
||||
8. INDEMNIFICATION.
|
||||
8.1. By Memgraph. Memgraph will defend against any action against Customer brought by a third party to the extent the
|
||||
action is based on a claim that the Software infringes a third party’s patent, copyright or trademark
|
||||
(a “Claim”) and indemnify Customer from the damages, liabilities, costs and expenses (including reasonable
|
||||
attorneys’ fees) awarded against Customer or agreed in settlement by Customer resulting from such Claim. If
|
||||
your use of the Software is (or in Memgraph’s opinion likely to be) enjoined, then Memgraph may, at its own
|
||||
expense and at its option: (i) substitute substantially similar functionality for the Software which renders
|
||||
it non-infringing; (ii) procure for Customer the right to continue to use the Software; or if (i) and (ii) are
|
||||
not commercially reasonable, terminate this Agreement and refund Customer any prepaid, unused (pro-rated) Fees
|
||||
for the duration of the then-current Subscription Term. The foregoing obligations of Memgraph will not apply:
|
||||
(i) if the Software is modified by any party other than Memgraph, but solely to the extent the alleged
|
||||
infringement is caused by such modification; (ii) if the Software is used in combination with other products or
|
||||
processes not provided or authorized by Memgraph, but solely to the extent the alleged infringement is caused
|
||||
by such combination; (iii) use of any version or release of Software other than the most current version or
|
||||
release made available to Customer by Memgraph, if its use would have avoided the infringement; (iv) any
|
||||
unauthorized use of the Software. THIS SECTION 8.1 SETS FORTH MEMGRAPH’S SOLE LIABILITY AND CUSTOMER’S SOLE
|
||||
AND EXCLUSIVE REMEDY WITH RESPECT TO ANY CLAIM OF INTELLECTUAL PROPERTY INFRINGEMENT.
|
||||
8.2. By Customer. Customer will indemnify and hold Memgraph and its suppliers harmless against any claims,
|
||||
liabilities, costs, and expenses (including reasonable attorneys’ fees) that Memgraph or its suppliers may
|
||||
incur as a result of a third-party claim arising from or related to Customer Data, or misuse or unauthorised
|
||||
use of the Software by Customer or any User.
|
||||
8.3. Conditions. All defence and indemnity obligations under Sections 8.1 and 8.2 are conditioned on the indemnitee
|
||||
(i) giving the indemnitor written notice of the relevant claim within thirty (30) days after the indemnitee
|
||||
receives notice of the Claim (or sooner if required by applicable law); (ii) reasonably cooperating with the
|
||||
indemnitor, at the indemnitor’s expense, in the defence of the claim; and (iii) giving the indemnitor sole
|
||||
control of the defence and any settlement negotiations. The indemnitee may participate in the defence at its
|
||||
expense.
|
||||
|
||||
9. LIMITATION OF LIABILITY.
|
||||
9.1. TO THE EXTENT PERMITTED BY LAW, NEITHER MEMGRAPH NOR CUSTOMER SHALL BE LIABLE TO THE OTHER OR ANY THIRD PARTY
|
||||
FOR LOST PROFITS (WHETHER DIRECT OR INDIRECT) OR LOSS OF USE OR DATA, SUBSTITUTE GOODS OR SERVICES, OR FOR
|
||||
INCIDENTAL, CONSEQUENTIAL, PUNITIVE, SPECIAL OR EXEMPLARY DAMAGES (INCLUDING DAMAGE TO BUSINESS, REPUTATION OR
|
||||
GOODWILL), OR INDIRECT DAMAGES OF ANY TYPE HOWEVER CAUSED, WHETHER BY BREACH OF WARRANTY, BREACH OF CONTRACT,
|
||||
IN TORT (INCLUDING NEGLIGENCE) OR ANY OTHER LEGAL OR EQUITABLE CAUSE OF ACTION EVEN IF SUCH PARTY HAS BEEN
|
||||
ADVISED OF SUCH DAMAGES IN ADVANCE OR IF SUCH DAMAGES WERE FORESEEABLE.
|
||||
9.2. LIMITATIONS ON DIRECT DAMAGES. EXCEPT FOR ANY EXCLUDED CLAIMS AND ANY DAMAGES THAT CANNOT BE LIMITED UNDER
|
||||
APPLICABLE LAW, IN NO EVENT WILL MEMGRAPH’S TOTAL AGGREGATE LIABILITY ARISING FROM OR RELATED TO THIS
|
||||
AGREEMENT, EXCEED AN AMOUNT EQUAL TO THE TOTAL AMOUNT OF FEES PAID OR PAYABLE BY CUSTOMER TO MEMGRAPH UNDER
|
||||
THIS AGREEMENT DURING THE TWELVE MONTHS PRECEDING THE CLAIM. THE FOREGOING LIMITATIONS SHALL NOT APPLY TO: (i)
|
||||
PAYMENTS TO A THIRD PARTY ARISING FROM A PARTY’S OBLIGATIONS UNDER SECTION 8 (INDEMNIFICATION); (ii) BREACH BY
|
||||
A PARTY OF SECTION 10 (CONFIDENTIAL INFORMATION), AND (iii) INFRINGEMENT BY A PARTY OF THE OTHER PARTY’S
|
||||
INTELLECTUAL PROPERTY RIGHTS (COLLECTIVELY EXCLUSIONS (i)-(iii) ARE REFERRED TO AS THE “EXCLUDED CLAIMS”). WITH
|
||||
RESPECT TO ANY EXCLUDED CLAIMS, MEMGRAPH’S TOTAL AGGREGATE LIABILITY SHALL IN NO EVENT EXCEED £1,000,000.
|
||||
9.3. Nothing in this Agreement excludes the liability of Memgraph for death or personal injury caused by the
|
||||
Supplier’s negligence; or for fraud or fraudulent misrepresentation.
|
||||
|
||||
10. CONFIDENTIALITY.
|
||||
10.1. The Receiving Party will use the same degree of care that it uses to protect the confidentiality of its own
|
||||
confidential information of like kind (but not less than reasonable care) to (i) not use any confidential
|
||||
information of the Disclosing Party for any purpose outside the scope of this agreement and (ii) except as
|
||||
otherwise authorized by the Disclosing Party in writing, limit access to confidential information of the
|
||||
Disclosing Party to those of its and its affiliates’ employees and contractors who need that access for
|
||||
purposes consistent with this agreement and who have signed confidentiality agreements with the receiving party
|
||||
containing protections not materially less protective of the confidential information than those herein.
|
||||
Neither party will disclose the terms of this agreement or any Orders to any third-party other than its
|
||||
affiliates, legal counsel, and accountants without the other party’s prior written consent, provided that a
|
||||
party that makes any such disclosure to its affiliate, legal counsel or accountants will remain responsible for
|
||||
such affiliate’s, legal counsel’s, or accountant’s compliance with this “Confidentiality” section.
|
||||
10.2. Compelled Disclosure. The Receiving Party may disclose confidential information of the Disclosing Party to the
|
||||
extent compelled by law to do so, provided the Receiving Party gives the Disclosing Party prior notice of the
|
||||
compelled disclosure (to the extent legally permitted) and reasonable assistance, at the Disclosing Party’s
|
||||
cost, if the Disclosing Party wishes to contest the disclosure. If the receiving party is compelled by law to
|
||||
disclose the Disclosing Party’s confidential information as part of a civil proceeding to which the Disclosing
|
||||
Party is a party, and the Disclosing Party is not contesting the disclosure, the Disclosing Party will
|
||||
reimburse the Receiving Party for its reasonable cost of complying and providing secure access to that
|
||||
confidential information.
|
||||
|
||||
|
||||
11. TERMINATION.
|
||||
11.1. Term. The term (“Term”) of this Agreement will commence on the Effective Date and continue until all
|
||||
Subscriptions, licence terms and Orders expire, unless earlier terminated in accordance with this Section 11.
|
||||
11.2. Termination for Cause. In the event of a material breach of this Agreement (excluding any breaches for which an
|
||||
exclusive remedy is expressly provided), the non-breaching party may terminate this Agreement if such breach
|
||||
is not cured within thirty (30) days after written notice thereof (except that for a breach of Section 3.5
|
||||
(“General Restrictions”), there will be no cure period). For clarity, material breach of this Agreement
|
||||
includes, but is not limited to, failure to timely pay amounts due hereunder, exceeding the scope of any
|
||||
Licence granted hereunder (including the Licensed Capacity), violating the Licence restrictions, breach of
|
||||
Section 6.1 and failing to protect the other party’s Confidential Information.
|
||||
11.3. Without affecting any other right or remedy available to it, and to the fullest extent permitted by applicable
|
||||
law, either party may terminate this Agreement with immediate effect by giving written notice to the other
|
||||
party if the other party:
|
||||
11.3.1. suspends, or threatens to suspend, payment of its debts or is unable to pay its debts as they fall due or
|
||||
admits inability to pay its debts or is deemed unable to pay its debts within the meaning of section 123
|
||||
of the Insolvency Act 1986, as if the words “it is proved to the satisfaction of the court” did not
|
||||
appear in sections 123(1)(e) or 123(2) of the Insolvency Act 1986; or
|
||||
11.3.2. the other party commences negotiations with all or any class of its creditors with a view to rescheduling
|
||||
any of its debts, or makes a proposal for or enters into any compromise or arrangement with its creditors
|
||||
other than for the sole purpose of a scheme for a solvent amalgamation of that other party with one or
|
||||
more other companies or the solvent reconstruction of that other party; or
|
||||
11.3.3. a petition is filed, a notice is given, a resolution is passed, or an order is made, for or in connection
|
||||
with the winding up of that other party other than for the sole purpose of a scheme for a solvent
|
||||
amalgamation of that other party with one or more other companies or the solvent reconstruction of that
|
||||
other party; or
|
||||
11.3.4. an application is made to court, or an order is made, for the appointment of an administrator, or if a
|
||||
notice of intention to appoint an administrator is given or if an administrator is appointed, over the
|
||||
other party; or
|
||||
11.3.5. the holder of a qualifying floating charge over the assets of that other party has become entitled to
|
||||
appoint or has appointed an administrative receiver; or
|
||||
11.3.6. a person becomes entitled to appoint a receiver over the assets of the other party or a receiver is
|
||||
appointed over the assets of the other party; or
|
||||
11.3.7. a creditor or encumbrancer of the other party attaches or takes possession of, or a distress, execution,
|
||||
sequestration or other such process is levied or enforced on or sued against, the whole or any part of
|
||||
the other party’s assets and such attachment or process is not discharged within 30 days; or
|
||||
11.3.8. any event occurs, or proceeding is taken, with respect to the other party in any jurisdiction to which
|
||||
it is subject that has an effect equivalent or similar to any of the events mentioned in clause 11.3.1 to
|
||||
clause 11.3.7 (inclusive); or
|
||||
11.3.9. the other party suspends or ceases, or threatens to suspend or cease, carrying on all or a substantial
|
||||
part of its business.
|
||||
11.4. Effect of Termination. Upon the termination of this Agreement: (i) all licences will terminate; (ii) Customer
|
||||
will immediately discontinue all use of the affected Software and erase all other tangible embodiments of
|
||||
Memgraph Confidential Information in Customer’s possession or control, and promptly certify the same to
|
||||
Memgraph; (iii) Memgraph may immediately cease providing the Services; (iv) (subject to this Section),
|
||||
Memgraph will return or delete all tangible embodiments of Customer Confidential Information in Memgraph’s
|
||||
possession or control; and (v) Sections 1 (“Definitions”), 3.5 (“General Restrictions”), 3.6 (“Ownership;
|
||||
Reservation of Rights”), 5 (“Fees and Payment”), 7.3 (“Limitations”), 7.4 (“Disclaimer”), 8
|
||||
(“Indemnification”), 9 (“Limitation of Liability”), 10 (“Confidentiality”), 11.4 (“Effect of Termination”),
|
||||
and 12 (“Miscellaneous”) will survive. If a party’s file retention policies or a valid legal order provides
|
||||
for backup or archival copies of files to be retained, such party will notify the other party of such policy
|
||||
or order, protect the other party’s Confidential Information as required hereunder, and permanently erase,
|
||||
delete, or destroy such Confidential Information as soon as permissible under such policy or order.
|
||||
|
||||
12. MISCELLANEOUS.
|
||||
12.1. Assignment. This Agreement will bind and inure to the benefit of each party’s permitted successors and assigns.
|
||||
Memgraph may assign this Agreement to any affiliate or in connection with a merger, reorganization,
|
||||
acquisition, or other transfer of all or substantially all of Memgraph’s assets or voting securities. Customer
|
||||
may not assign or transfer this Agreement, in whole or in part, without Memgraph’s written consent except that
|
||||
Customer may assign its rights and obligations under this Agreement, in whole but not in part, without
|
||||
Memgraph’s written consent in connection with any merger, consolidation, sale of all or substantially all of
|
||||
Customer’s assets or voting stock, or any other similar transaction provided that: (i) the assignee is not a
|
||||
direct competitor of Memgraph; (ii) Customer provides prompt written notice of such assignment to Memgraph;
|
||||
(iii) the assignee is capable of fully performing Customer’s obligations under this Agreement; and (iv) the
|
||||
assignee agrees to be bound by the terms and conditions of this Agreement. Any attempt to transfer or assign
|
||||
this Agreement without such written consent will be null and void.Force Majeure. Memgraph shall have no
|
||||
liability to the Customer under this Agreement if it is prevented from or delayed in performing its obligations
|
||||
under this Agreement, or from carrying on its business, by acts, events, omissions or accidents beyond its
|
||||
reasonable control, including strikes, lock-outs or other industrial disputes (whether involving the workforce
|
||||
of Memgraph or any other party), failure of a utility service or transport or telecommunications network, act
|
||||
of God, war, pandemic, riot, civil commotion, malicious damage, compliance with any law or governmental order,
|
||||
rule, regulation or direction, accident, breakdown of plant or machinery, fire, flood, storm or default of
|
||||
suppliers or subcontractors, provided that the Customer is notified of such an event and its expected duration.
|
||||
12.2. Governing Law. This Agreement and any dispute or claim arising out of or in connection with it or its subject
|
||||
matter or formation (including non-contractual disputes or claims) shall be governed by and construed in
|
||||
accordance with the law of England and Wales.
|
||||
12.3. Jurisdiction. Each party irrevocably agrees that the courts of England and Wales shall have exclusive
|
||||
jurisdiction to settle any dispute or claim arising out of or in connection with this Agreement or its subject
|
||||
matter or formation (including non-contractual disputes or claims).
|
||||
12.4. Severability; Waiver; Construction. If a court of competent jurisdiction adjudges any provision of this
|
||||
Agreement to be invalid or unenforceable, the remaining provisions of this Agreement, if capable of substantial
|
||||
performance, will continue in full force and effect without being impaired or invalidated in any way. The
|
||||
parties agree to replace any invalid provision with a valid provision that most closely approximates the intent
|
||||
and economic effect of the invalid provision. All waivers must be in writing. A party’s consent to, or waiver
|
||||
of, enforcement of this Agreement on one occasion will not be deemed a waiver of any other provision or such
|
||||
provision on any other occasion. In this Agreement, the word “including” means “including but not limited to.”
|
||||
No presumption will operate in favour of or against any party as a result of its role in drafting this
|
||||
Agreement.
|
||||
12.5. Subcontractors. Memgraph may use the services of subcontractors in connection with its performance of this
|
||||
Agreement, provided that Memgraph remains solely responsible for (i) compliance of any such subcontractor with
|
||||
the terms of this Agreement and (ii) the overall performance of Memgraph as required under this Agreement.
|
||||
12.6. Use of Aggregate Data. Customer agrees that Memgraph may collect, use and disclose quantitative data and
|
||||
metadata derived from the use of the Software (i) for its own internal, statistical analysis, (ii) to develop
|
||||
and improve the Software and (iii) to create and distribute reports and other materials regarding use of the
|
||||
Software. For clarity, any such data collected, used, and disclosed will be in anonymized aggregate form only
|
||||
and shall not identify Customer or its Users, or disclose any Customer Data.Independent Contractors. The
|
||||
parties are independent contractors. No agency, partnership, franchise, joint venture, or employment
|
||||
relationship is intended or created by this Agreement. Neither party has the power or authority to create or
|
||||
assume any obligation, or make any representations or warranties, on behalf of the other party.
|
||||
12.7. Publicity. Memgraph may, in conformity with Customer’s trademark usage guidelines, use Customer’s name and logo
|
||||
in Memgraph’s sales and marketing materials, including in business presentations, Customer lists, and on
|
||||
websites. Neither party will issue a press release regarding this Agreement without the other party’s prior
|
||||
written consent. Neither party will disclose the terms of this Agreement to any third party, except as required
|
||||
by law.
|
||||
12.8. Notice. Any notice, consent, or waiver hereunder must be in writing, addressed to the attention of “Legal
|
||||
Department” at the address set forth above, and delivered by personal delivery, reputable rapid courier, or
|
||||
certified/registered mail, return receipt requested, and will be deemed given upon personal delivery, one (1)
|
||||
day after deposit with an overnight domestic courier, two (2) days after deposit with an international courier,
|
||||
or five (5) days after deposit in the certified or registered mail. A party may specify a new address by
|
||||
providing notice to the other party in accordance with this Section.
|
||||
12.9. Compliance with Law. Each party will comply with all applicable laws, regulations, and orders of any
|
||||
governmental authority of competent jurisdiction in its performance under this Agreement, including but not
|
||||
limited to those applicable to data collection and the privacy and security of personal information, including
|
||||
trans-border data transfers and data breach notification requirements as required of each party by law.
|
||||
12.10.Supremacy; Modification. This Agreement will prevail over any written instrument submitted by Customer; the
|
||||
terms of any purchase order, acknowledgement, or similar document submitted by Customer to Memgraph will have
|
||||
no effect. If the express terms of an Order Document conflict with this Agreement, the terms on the Order
|
||||
Document will prevail, but only with respect to that Order Document. This Agreement cannot be varied or
|
||||
supplemented by course of dealing or by usage of trade. All modifications or amendments to this Agreement must
|
||||
be in writing and signed by both parties, except that subsequent renewals and purchases of additional Licensed
|
||||
Capacity can be procured by payment against an issued invoice as set forth in Section 5 (“Fees and Payment”)
|
||||
above.
|
||||
12.11.No Third Party Beneficiaries. This Agreement is not intended and shall not be construed to give any third party
|
||||
any interest or rights with respect to or in connection with any agreement or provision herein, except as
|
||||
expressly provided for in this Agreement.
|
||||
12.12.Entire Agreement. This Agreement in its original English text, sets forth the complete, exclusive, and final
|
||||
agreement of the parties concerning the subject matter hereof, supersedes, replaces, and merges all prior and
|
||||
contemporaneous agreements, communications, and understandings, both
|
||||
written and oral, between them concerning the subject matter hereof. This Agreement may be executed in
|
||||
counterparts.
|
||||
@@ -16,7 +16,7 @@
|
||||
// CALL example.procedure(1, 2) YIELD args, result;
|
||||
// CALL example.procedure(1) YIELD args, result;
|
||||
// Naturally, you may pass in different arguments or yield less fields.
|
||||
static void procedure(const struct mgp_list *args, const struct mgp_graph *graph, struct mgp_result *result,
|
||||
static void procedure(struct mgp_list *args, struct mgp_graph *graph, struct mgp_result *result,
|
||||
struct mgp_memory *memory) {
|
||||
size_t args_size = 0;
|
||||
if (mgp_list_size(args, &args_size) != MGP_ERROR_NO_ERROR) {
|
||||
@@ -27,7 +27,7 @@ static void procedure(const struct mgp_list *args, const struct mgp_graph *graph
|
||||
goto error_something_went_wrong;
|
||||
}
|
||||
for (size_t i = 0; i < args_size; ++i) {
|
||||
const struct mgp_value *value = NULL;
|
||||
struct mgp_value *value = NULL;
|
||||
if (mgp_list_at(args, i, &value) != MGP_ERROR_NO_ERROR) {
|
||||
goto error_free_list;
|
||||
}
|
||||
@@ -65,22 +65,20 @@ static void procedure(const struct mgp_list *args, const struct mgp_graph *graph
|
||||
error_free_list:
|
||||
mgp_list_destroy(args_copy);
|
||||
error_something_went_wrong:
|
||||
// Best effort. If it fails, there is nothing we can do.
|
||||
mgp_result_set_error_msg(result, "Something went wrong!");
|
||||
return;
|
||||
}
|
||||
|
||||
// Each module needs to define mgp_init_module function.
|
||||
// Here you can register multiple procedures your module supports.
|
||||
int mgp_init_module(struct mgp_module *module, struct mgp_memory *memory) {
|
||||
int add_read_procedure(struct mgp_module *module, struct mgp_memory *memory) {
|
||||
struct mgp_proc *proc = NULL;
|
||||
if (mgp_module_add_read_procedure(module, "procedure", procedure, &proc) != MGP_ERROR_NO_ERROR) {
|
||||
return 1;
|
||||
}
|
||||
const struct mgp_type *any_type = NULL;
|
||||
struct mgp_type *any_type = NULL;
|
||||
if (mgp_type_any(&any_type) != MGP_ERROR_NO_ERROR) {
|
||||
return 1;
|
||||
}
|
||||
const struct mgp_type *nullable_any_type = NULL;
|
||||
struct mgp_type *nullable_any_type = NULL;
|
||||
if (mgp_type_nullable(any_type, &nullable_any_type) != MGP_ERROR_NO_ERROR) {
|
||||
return 1;
|
||||
}
|
||||
@@ -97,14 +95,14 @@ int mgp_init_module(struct mgp_module *module, struct mgp_memory *memory) {
|
||||
return 1;
|
||||
}
|
||||
mgp_value_destroy(null_value);
|
||||
const struct mgp_type *string = NULL;
|
||||
struct mgp_type *string = NULL;
|
||||
if (mgp_type_string(&string) != MGP_ERROR_NO_ERROR) {
|
||||
return 1;
|
||||
}
|
||||
if (mgp_proc_add_result(proc, "result", string) != MGP_ERROR_NO_ERROR) {
|
||||
return 1;
|
||||
}
|
||||
const struct mgp_type *list_of_anything = NULL;
|
||||
struct mgp_type *list_of_anything = NULL;
|
||||
if (mgp_type_list(nullable_any_type, &list_of_anything) != MGP_ERROR_NO_ERROR) {
|
||||
return 1;
|
||||
}
|
||||
@@ -114,6 +112,101 @@ int mgp_init_module(struct mgp_module *module, struct mgp_memory *memory) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
// This example procedure returns one field called `created_vertex`
|
||||
// which contains the newly created vertex.
|
||||
// In case of memory errors, this function will report them and finish
|
||||
// executing.
|
||||
//
|
||||
// The procedure can be invoked in openCypher using the following call:
|
||||
// CALL example.write_procedure("property value") YIELD created_vertex;
|
||||
static void write_procedure(struct mgp_list *args, struct mgp_graph *graph, struct mgp_result *result,
|
||||
struct mgp_memory *memory) {
|
||||
size_t args_size = 0;
|
||||
if (mgp_list_size(args, &args_size) != MGP_ERROR_NO_ERROR) {
|
||||
goto error_something_went_wrong;
|
||||
}
|
||||
if (args_size != 1) {
|
||||
mgp_result_set_error_msg(result, "The procedure requires exactly one argument!");
|
||||
return;
|
||||
}
|
||||
|
||||
struct mgp_value *arg = NULL;
|
||||
if (mgp_list_at(args, 0, &arg) != MGP_ERROR_NO_ERROR) {
|
||||
goto error_something_went_wrong;
|
||||
}
|
||||
|
||||
struct mgp_vertex *vertex = NULL;
|
||||
if (mgp_graph_create_vertex(graph, memory, &vertex) != MGP_ERROR_NO_ERROR) {
|
||||
goto error_something_went_wrong;
|
||||
}
|
||||
|
||||
if (mgp_vertex_set_property(vertex, "new_property", arg) != MGP_ERROR_NO_ERROR) {
|
||||
goto error_destroy_vertex;
|
||||
}
|
||||
|
||||
struct mgp_value *vertex_value = NULL;
|
||||
if (mgp_value_make_vertex(vertex, &vertex_value) != MGP_ERROR_NO_ERROR) {
|
||||
goto error_destroy_vertex;
|
||||
}
|
||||
|
||||
struct mgp_result_record *record = NULL;
|
||||
if (mgp_result_new_record(result, &record) != MGP_ERROR_NO_ERROR) {
|
||||
goto error_destroy_vertex_value;
|
||||
}
|
||||
|
||||
if (mgp_result_record_insert(record, "created_vertex", vertex_value) != MGP_ERROR_NO_ERROR) {
|
||||
goto error_destroy_vertex_value;
|
||||
}
|
||||
mgp_value_destroy(vertex_value);
|
||||
|
||||
return;
|
||||
|
||||
error_destroy_vertex:
|
||||
mgp_vertex_destroy(vertex);
|
||||
goto error_something_went_wrong;
|
||||
error_destroy_vertex_value:
|
||||
mgp_value_destroy(vertex_value);
|
||||
error_something_went_wrong:
|
||||
// Best effort. If it fails, there is nothing we can do.
|
||||
mgp_result_set_error_msg(result, "Something went wrong!");
|
||||
}
|
||||
|
||||
int add_write_procedure(struct mgp_module *module, struct mgp_memory *memory) {
|
||||
struct mgp_proc *proc = NULL;
|
||||
if (mgp_module_add_write_procedure(module, "write_procedure", write_procedure, &proc) != MGP_ERROR_NO_ERROR) {
|
||||
return 1;
|
||||
}
|
||||
struct mgp_type *string_type = NULL;
|
||||
if (mgp_type_string(&string_type) != MGP_ERROR_NO_ERROR) {
|
||||
return 1;
|
||||
}
|
||||
|
||||
if (mgp_proc_add_arg(proc, "required_arg", string_type) != MGP_ERROR_NO_ERROR) {
|
||||
return 1;
|
||||
}
|
||||
|
||||
struct mgp_type *node_type = NULL;
|
||||
if (mgp_type_node(&node_type) != MGP_ERROR_NO_ERROR) {
|
||||
return 1;
|
||||
}
|
||||
if (mgp_proc_add_result(proc, "created_vertex", node_type) != MGP_ERROR_NO_ERROR) {
|
||||
return 1;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
// Each module needs to define mgp_init_module function.
|
||||
// Here you can register multiple procedures your module supports.
|
||||
int mgp_init_module(struct mgp_module *module, struct mgp_memory *memory) {
|
||||
if (add_read_procedure(module, memory) != 0) {
|
||||
return -1;
|
||||
}
|
||||
if (add_write_procedure(module, memory) != 0) {
|
||||
return -1;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
// This is an optional function if you need to release any resources before the
|
||||
// module is unloaded. You will probably need this if you acquired some
|
||||
// resources in mgp_init_module.
|
||||
|
||||
@@ -14,7 +14,7 @@ def procedure(context: mgp.ProcCtx,
|
||||
vertex_count=int,
|
||||
avg_degree=mgp.Number,
|
||||
props=mgp.Nullable[mgp.Map]):
|
||||
'''
|
||||
"""
|
||||
This example procedure returns 4 fields.
|
||||
|
||||
* `args` is a copy of arguments passed to the procedure.
|
||||
@@ -31,7 +31,7 @@ def procedure(context: mgp.ProcCtx,
|
||||
MATCH (n) CALL example.procedure(n, 1) YIELD * RETURN *;
|
||||
|
||||
Naturally, you may pass in different arguments or yield different fields.
|
||||
'''
|
||||
"""
|
||||
# Create a properties map if we received an Edge, Vertex, or Path instance.
|
||||
props = None
|
||||
if isinstance(required_arg, (mgp.Edge, mgp.Vertex)):
|
||||
@@ -53,3 +53,42 @@ def procedure(context: mgp.ProcCtx,
|
||||
# Multiple rows can be produced by returning an iterable of mgp.Record.
|
||||
return mgp.Record(args=args_copy, vertex_count=vertex_count,
|
||||
avg_degree=avg_degree, props=props)
|
||||
|
||||
|
||||
@mgp.write_proc
|
||||
def write_procedure(context: mgp.ProcCtx,
|
||||
property_name: str,
|
||||
property_value: mgp.Nullable[mgp.Any]
|
||||
) -> mgp.Record(created_vertex=mgp.Vertex):
|
||||
"""
|
||||
This example procedure creates a new vertex with the specified property
|
||||
and connects it to all existing vertex which has the same property with
|
||||
the same name. It returns one field called `created_vertex` which
|
||||
contains the newly created vertex.
|
||||
|
||||
Any errors can be reported by raising an Exception.
|
||||
|
||||
The procedure can be invoked in openCypher using the following calls:
|
||||
- CALL example.write_procedure("property_name", "property_value")
|
||||
YIELD created_vertex;
|
||||
- MATCH (n) WHERE n.my_property IS NOT NULL
|
||||
WITH n.my_property as property_value
|
||||
CALL example.write_procedure("my_property", property_value)
|
||||
YIELD created_vertex;
|
||||
|
||||
Naturally, you may pass in different arguments.
|
||||
"""
|
||||
# Collect all the vertices that has the required property with the same
|
||||
# value
|
||||
vertices_to_connect = []
|
||||
for v in context.graph.vertices:
|
||||
if v.properties[property_name] == property_value:
|
||||
vertices_to_connect.append(v)
|
||||
# Create the new vertex and set its property
|
||||
vertex = context.graph.create_vertex()
|
||||
vertex.properties.set(property_name, property_value)
|
||||
# Connect the new vertex to the other vertices
|
||||
for v in vertices_to_connect:
|
||||
context.graph.create_edge(vertex, v, mgp.EdgeType("HAS_SAME_VALUE"))
|
||||
|
||||
return mgp.Record(created_vertex=vertex)
|
||||
|
||||
@@ -1,15 +1,3 @@
|
||||
# Install the license file.
|
||||
if (MG_ENTERPRISE)
|
||||
install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/LICENSE_ENTERPRISE.md
|
||||
DESTINATION share/doc/memgraph RENAME copyright)
|
||||
else()
|
||||
install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/LICENSE_COMMUNITY.md
|
||||
DESTINATION share/doc/memgraph RENAME copyright)
|
||||
endif()
|
||||
|
||||
install(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/third-party-licenses
|
||||
DESTINATION share/doc/memgraph)
|
||||
|
||||
# Install systemd service (must use absolute path).
|
||||
install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/memgraph.service
|
||||
DESTINATION /lib/systemd/system)
|
||||
@@ -30,23 +18,13 @@ set(CPACK_DEBIAN_PACKAGE_SECTION non-free/database)
|
||||
set(CPACK_DEBIAN_PACKAGE_HOMEPAGE https://memgraph.com)
|
||||
set(CPACK_DEBIAN_PACKAGE_VERSION "${MEMGRAPH_VERSION_DEB}")
|
||||
set(CPACK_DEBIAN_FILE_NAME "memgraph_${MEMGRAPH_VERSION_DEB}_amd64.deb")
|
||||
if (MG_ENTERPRISE)
|
||||
set(CPACK_DEBIAN_PACKAGE_CONTROL_EXTRA
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/debian/enterprise/conffiles;"
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/debian/enterprise/copyright;"
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/debian/preinst;"
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/debian/prerm;"
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/debian/postrm;"
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/debian/postinst;")
|
||||
else()
|
||||
set(CPACK_DEBIAN_PACKAGE_CONTROL_EXTRA
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/debian/community/conffiles;"
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/debian/community/copyright;"
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/debian/preinst;"
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/debian/prerm;"
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/debian/postrm;"
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/debian/postinst;")
|
||||
endif()
|
||||
set(CPACK_DEBIAN_PACKAGE_CONTROL_EXTRA
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/debian/conffiles;"
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/debian/copyright;"
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/debian/preinst;"
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/debian/prerm;"
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/debian/postrm;"
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/debian/postinst;")
|
||||
set(CPACK_DEBIAN_PACKAGE_SHLIBDEPS ON)
|
||||
# Description formatting is important, summary must be followed with a newline and 1 space.
|
||||
set(CPACK_DEBIAN_PACKAGE_DESCRIPTION "${CPACK_PACKAGE_DESCRIPTION_SUMMARY}
|
||||
@@ -65,13 +43,8 @@ set(CPACK_RPM_EXCLUDE_FROM_AUTO_FILELIST_ADDITION
|
||||
/var /var/lib /var/log /etc/logrotate.d
|
||||
/lib /lib/systemd /lib/systemd/system /lib/systemd/system/memgraph.service)
|
||||
set(CPACK_RPM_PACKAGE_REQUIRES_PRE "shadow-utils")
|
||||
if (MG_ENTERPRISE)
|
||||
set(CPACK_RPM_USER_BINARY_SPECFILE "${CMAKE_CURRENT_SOURCE_DIR}/rpm/enterprise/memgraph.spec.in")
|
||||
set(CPACK_RPM_PACKAGE_LICENSE "Memgraph Enterprise Trial License")
|
||||
else()
|
||||
set(CPACK_RPM_USER_BINARY_SPECFILE "${CMAKE_CURRENT_SOURCE_DIR}/rpm/community/memgraph.spec.in")
|
||||
set(CPACK_RPM_PACKAGE_LICENSE "Memgraph Community License")
|
||||
endif()
|
||||
set(CPACK_RPM_USER_BINARY_SPECFILE "${CMAKE_CURRENT_SOURCE_DIR}/rpm/memgraph.spec.in")
|
||||
set(CPACK_RPM_PACKAGE_LICENSE "Memgraph License")
|
||||
# Description formatting is important, no line must be greater than 80 characters.
|
||||
set(CPACK_RPM_PACKAGE_DESCRIPTION "Contains Memgraph, the graph database.
|
||||
It aims to deliver developers the speed, simplicity and scale required to build
|
||||
|
||||
@@ -1,98 +0,0 @@
|
||||
# Memgraph Community User License Agreement
|
||||
|
||||
This License Agreement governs your use of the Memgraph Community Release (the
|
||||
"Software") and documentation ("Documentation").
|
||||
|
||||
BY DOWNLOADING AND/OR ACCESSING THIS SOFTWARE, YOU ("LICENSEE") AGREE TO THESE
|
||||
TERMS.
|
||||
|
||||
1. License Grant
|
||||
|
||||
The Software and Documentation are provided to Licensee at no charge and are
|
||||
licensed, not sold to Licensee. No ownership of any part of the Software and
|
||||
Documentation is hereby transferred to Licensee. Subject to (i) the terms and
|
||||
conditions of this License Agreement, and (ii) any additional license
|
||||
restrictions and parameters contained on Licensor’s quotation, website, or
|
||||
order form, Licensor hereby grants Licensee a personal, non-assignable,
|
||||
non-transferable and non-exclusive license to install, access and use the
|
||||
Software (in object code form only) and Documentation for Licensee’s internal
|
||||
business purposes (including for use in a production environment) only. All
|
||||
rights relating to the Software and Documentation that are not expressly
|
||||
licensed in this License Agreement, whether now existing or which may hereafter
|
||||
come into existence are reserved for Licensor. Licensee shall not remove,
|
||||
obscure, or alter any proprietary rights notices (including without limitation
|
||||
copyright and trademark notices), which may be affixed to or contained within
|
||||
the Software or Documentation.
|
||||
|
||||
Licensor may terminate this License Agreement with immediate effect upon
|
||||
written notice to the Licensee. Upon termination Licensee shall delete all
|
||||
electronic copies of all or any part of the Software and/or the Documentation
|
||||
resident in its systems or elsewhere.
|
||||
|
||||
2. Restrictions
|
||||
|
||||
Licensee will not, directly or indirectly, (a) copy the Software or
|
||||
Documentation in any manner or for any purpose; (b) install, access or use any
|
||||
component of the Software or Documentation for any purpose not expressly
|
||||
granted in Section 1 above; (c) resell, distribute, publicly display or
|
||||
publicly perform the Software or Documentation or any component thereof, by
|
||||
transfer, lease, loan or any other means, or make it available for use by
|
||||
others in any time-sharing, service bureau or similar arrangement; (d)
|
||||
disassemble, decrypt, extract, reverse engineer or reverse compile the
|
||||
Software, or otherwise attempt to discover the source code, confidential
|
||||
algorithms or techniques incorporated in the Software; (e) export the Software
|
||||
or Documentation in violation of any applicable laws or regulations; (f)
|
||||
modify, translate, adapt, or create derivative works from the Software or
|
||||
Documentation; (g) circumvent, disable or otherwise interfere with
|
||||
security-related features of the Software or Documentation; (h) use the
|
||||
Software or Documentation for any illegal purpose, in any manner that is
|
||||
inconsistent with the terms of this License Agreement, or to engage in illegal
|
||||
activity; (i) remove or alter any trademark, logo, copyright or other
|
||||
proprietary notices, legends, symbols or labels on, or embedded in, the
|
||||
Software or Documentation; or (j) provide access to the Software or
|
||||
Documentation to third parties.
|
||||
|
||||
3. Warranty Disclaimer
|
||||
|
||||
THE SOFTWARE AND DOCUMENTATION ARE PROVIDED "AS IS" AND LICENSOR MAKES NO
|
||||
WARRANTIES, EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED
|
||||
WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, TITLE OR NON
|
||||
INFRINGEMENT OF THIRD PARTIES’ INTELLECTUAL PROPERTY RIGHTS OR OTHER
|
||||
PROPRIETARY RIGHTS. NEITHER THIS LICENSE AGREEMENT NOR ANY DOCUMENTATION
|
||||
FURNISHED UNDER IT IS INTENDED TO EXPRESS OR IMPLY ANY WARRANTY THAT THE
|
||||
OPERATION OF THE SOFTWARE WILL BE UNINTERRUPTED, TIMELY, OR ERROR-FREE.
|
||||
|
||||
4. Limitation of Liability
|
||||
|
||||
Licensor shall not in any circumstances be liable, whether in tort (including
|
||||
for negligence or breach of statutory duty howsoever arising), contract,
|
||||
misrepresentation (whether innocent or negligent) or otherwise for: loss of
|
||||
profits, loss of business, depletion of goodwill or similar losses, loss of
|
||||
anticipated savings, loss of goods, loss or corruption of data or computer
|
||||
downtime, or any special, indirect, consequential or pure economic loss, costs,
|
||||
damages, charges or expenses.
|
||||
|
||||
Licensor's total aggregate liability in contract, tort (including without
|
||||
limitation negligence or breach of statutory duty howsoever arising),
|
||||
misrepresentation (whether innocent or negligent), restitution or otherwise,
|
||||
arising in connection with the performance or contemplated performance of this
|
||||
License Agreement shall in all circumstances be limited to GBP10.00 (ten pounds
|
||||
sterling).
|
||||
|
||||
Nothing in this License Agreement shall limit Licensor’s liability in the case
|
||||
of death or personal injury caused by negligence, fraud, or fraudulent
|
||||
misrepresentation, or where it otherwise cannot be limited by law.
|
||||
|
||||
5. Technical Data
|
||||
|
||||
Licensor may collect and use technical information (such as usage patterns)
|
||||
gathered when the Licensee downloads and uses the Software. This is generally
|
||||
statistical data which does not identify an identified or identifiable
|
||||
individual. It may also include Licensee’s IP address which is personal data
|
||||
and is processed in accordance with our Privacy Policy. We only use this
|
||||
technical information to improve our products.
|
||||
|
||||
6. Law and Jurisdiction
|
||||
|
||||
This License Agreement is governed by the laws of England and is subject to the
|
||||
non-exclusive jurisdiction of the courts of England.
|
||||
@@ -1,671 +0,0 @@
|
||||
# Memgraph Enterprise - Software Subscription Agreement
|
||||
|
||||
Memgraph Limited is registered in England under registration 10195084 and has
|
||||
its registered office at Suite 4, Ironstone House, Ironstone Way, Brixworth,
|
||||
Northampton, NN6 9UD ("Memgraph").
|
||||
|
||||
Memgraph agrees to license and/or grant you (the "Customer") access to the
|
||||
Software, as defined below and provide support and services to you only if you
|
||||
accept and agree to be bound by the terms and conditions in this Software
|
||||
Subscription Agreement (the "Agreement"). By signing an Order Document (as
|
||||
defined below), which is subject to and part of this Agreement, installing and
|
||||
using the Software or by downloading a trial version of the Software, you agree
|
||||
to be bound by the terms of this Agreement.
|
||||
|
||||
Memgraph Enterprise Trial Users: If you receive free of charge trial access to
|
||||
the Software, you are deemed a "Customer" for purposes of this Agreement except
|
||||
that you are subject to the additional restrictions and limitations set forth
|
||||
in Section 3.2 below as to such Software.
|
||||
|
||||
## 1. DEFINITIONS.
|
||||
|
||||
1.1. "Applicable Laws" means (i) all applicable laws, statutes and regulations,
|
||||
and (ii) regulatory policies, guidelines and industry codes (in each case
|
||||
having the force of law), which apply to the provisions of the Software and
|
||||
Services and this Agreement.
|
||||
|
||||
1.2. "Confidential Information" means all information disclosed
|
||||
by a party ("Disclosing Party") to the other party ("Receiving Party"), whether
|
||||
orally or in writing, that is designated as confidential or that reasonably
|
||||
should be understood to be confidential given the nature of the information and
|
||||
the circumstances of disclosure. Customer's Confidential Information includes
|
||||
Customer Data; Memgraph Confidential Information includes the Software and
|
||||
Services; and Confidential Information of each party includes the terms and
|
||||
conditions of this Agreement and all Orders (including pricing), as well as
|
||||
business and marketing plans, technology and technical information, product
|
||||
plans and designs, and business processes disclosed by such party. However,
|
||||
Confidential Information does not include any information that (i) is or
|
||||
becomes generally known to the public without breach of any obligation owed to
|
||||
the Disclosing Party, (ii) was known to the Receiving Party prior to its
|
||||
disclosure by the Disclosing Party without breach of any obligation owed to the
|
||||
Disclosing Party, (iii) is received from a third party without breach of any
|
||||
obligation owed to the Disclosing Party, or (iv) was independently developed by
|
||||
the Receiving Party.
|
||||
|
||||
1.3. "Customer Data" means business information or other data loaded by or for
|
||||
Customer and/or processed by the Software.
|
||||
|
||||
1.4. "Data Protection Legislation" means all applicable data protection and
|
||||
privacy legislation in force from time to time in the UK including the General
|
||||
Data Protection Regulation ((EU) 2016/679); the Data Protection Act 2018; the
|
||||
Privacy and Electronic Communications Directive 2002/58/EC (as updated by
|
||||
Directive 2009/136/EC) and the Privacy and Electronic Communications
|
||||
Regulations 2003 (SI 2003/2426) as amended.
|
||||
|
||||
1.5. "Order Document" or "Order" means an order on the Memgraph form of
|
||||
provisioning document that is submitted by or on behalf of Customer, and
|
||||
executed by or on behalf of the parties referencing this Agreement and that
|
||||
specifies the Software and/or Services ordered by Customer, as well as the
|
||||
specific terms and conditions, for that particular transaction.
|
||||
|
||||
1.6. "Services" means those services, including Support Services, which may be
|
||||
provided to Customer by Memgraph pursuant to the terms of this Agreement and
|
||||
are expressly limited to those services directly related to Customer's use of
|
||||
the Software, and expressly exclude any other services.
|
||||
|
||||
1.7. "Software" means the Memgraph proprietary downloadable graph database
|
||||
enterprise software ("Enterprise Software") and the associated technical
|
||||
documentation located at https://docs.memgraph.com/ ("Documentation"), as well
|
||||
as software updates, upgrades, bug fixes, or modified versions thereof that
|
||||
Memgraph licenses or provides to Customer directly or indirectly throughout the
|
||||
Subscription Term.
|
||||
|
||||
1.8. "Subscription Term" means the fixed term, of not less than one (1) year,
|
||||
designated in an Order Document beginning on the Effective Date and ending at
|
||||
the end of the period stated therein. If no expiration date is specified in an
|
||||
Order Document, the Subscription Term shall be a one (1) year period ("Minimum
|
||||
Subscription Term"). A "Subscription" is the binding, non-cancellable contract
|
||||
for the use of the Software for the Subscription Term as set forth in an Order
|
||||
Document.
|
||||
|
||||
1.9. "Support" means the support and maintenance services, including any
|
||||
updates, upgrades, patches, enhancements and bug fixes for the Software that
|
||||
may be provided to Customer by Memgraph pursuant to the terms of this
|
||||
Agreement.
|
||||
|
||||
1.10. "Users" means employees and Contractors of Customer that Customer has
|
||||
permitted or authorized to access and use of the Software on Customer's behalf
|
||||
pursuant to the terms of this Agreement.
|
||||
|
||||
## 2. ORDERS, DELIVERY; SUPPORT.
|
||||
|
||||
2.1. Delivery. Memgraph will promptly deliver the Software after it accepts an
|
||||
Order and Customer issues a purchase order referencing such Order. Unless
|
||||
otherwise stated in an Order, Customer is solely responsible for installing
|
||||
Software on Customer's own computer equipment. In some instances, Customer's
|
||||
purchasing relationship exists solely between Customer and an authorised
|
||||
reseller of Memgraph's Software and Services (a "Reseller"), in which case
|
||||
Sections 5.1-5.3 (Fees and Payment) will be inapplicable to such Order(s), and
|
||||
the Reseller shall be responsible for submitting Orders and the appropriate
|
||||
payment method therewith to Memgraph. An Order is not binding until Memgraph
|
||||
accepts and countersigns the Order.
|
||||
|
||||
2.2 Support. Memgraph will use commercially reasonable efforts to provide
|
||||
Support to Customer in accordance with Memgraph's then-current terms and
|
||||
conditions set forth at
|
||||
https://download.memgraph.com/legal/memgraph-support-terms-and-conditions.pdf
|
||||
at the support tier stated in the applicable Order. The Support terms and
|
||||
conditions are subject to change at Memgraph's discretion; however, Memgraph
|
||||
will not materially reduce the level of Support during a Subscription Term for
|
||||
which Fees have been paid.
|
||||
|
||||
## 3. LICENCE GRANTS; RESTRICTIONS AND PROPRIETARY RIGHTS.
|
||||
|
||||
Customer's licence and access rights and benefits and Memgraph's obligations to
|
||||
Customer will vary depending on the product and the type of licence Memgraph is
|
||||
granting. If you purchased a licence to Memgraph Software, your licence will be
|
||||
subject to certain use and/or capacity restrictions, as identified on the
|
||||
applicable Order Document.
|
||||
|
||||
3.1. Enterprise Software Licence. In consideration of the Fees paid hereunder
|
||||
and subject to the terms of this Agreement and the applicable Order, Memgraph
|
||||
grants Customer a world-wide, non-exclusive, non-transferable,
|
||||
non-sublicenseable, and limited licence during the applicable Subscription
|
||||
Term, to install, and use the Enterprise Software up to the maximum capacity
|
||||
("Licensed Capacity"), and subject to the usage rules, specified in the
|
||||
applicable Order Document, and to use Documentation solely for Customer's
|
||||
internal business purposes in connection with operation of the Enterprise
|
||||
Software.
|
||||
|
||||
3.2. Enterprise Trial Licence. If the Customer downloads, accesses, or uses the
|
||||
Software under a trial licence ("Trial Licence"), then Customer may use one (1)
|
||||
copy of the Software in accordance with the terms and conditions of this
|
||||
Agreement for a thirty (30) day period, or such longer trial period represented
|
||||
by the applicable licence key issued by or expressly authorised by Memgraph
|
||||
(the "Trial Period"). Trial Licences are permitted solely for Customer's
|
||||
evaluation use to determine whether to purchase a Subscription to the Software.
|
||||
Customer may not use a Trial Licence for any other purpose. At the end of the
|
||||
Trial Period, the Trial Licence will expire (and this Agreement will terminate
|
||||
as to such Licence and continue to apply to any subsequent Subscription or use
|
||||
of the Software; if Customer decides not to obtain a Subscription upon
|
||||
expiration of the Trial Period, it will promptly cease using and will delete
|
||||
the Software from its computer systems. Memgraph has the right to terminate a
|
||||
Trial Licence at any time for any reason.
|
||||
|
||||
3.3. NO OBLIGATIONS. NOTWITHSTANDING ANYTHING TO THE CONTRARY IN THIS AGREEMENT
|
||||
OR IN ANY ORDER DOCUMENT, MEMGRAPH WILL HAVE NO WARRANTY, INDEMNITY, SUPPORT,
|
||||
OR SERVICE LEVEL, OBLIGATIONS WITH RESPECT TO ANY ENTERPRISE TRIAL, OR OTHER
|
||||
NO-CHARGE SOFTWARE (INCLUDING TOOLS AND UTILITIES) LICENCES.
|
||||
|
||||
3.4. General Restrictions. Customer acknowledges that the Software, and its
|
||||
structure, organization, and source code, constitute Memgraph's and its
|
||||
suppliers' valuable trade secrets, and that usage of the Software is subject to
|
||||
the following restrictions:
|
||||
|
||||
3.4.1. Restrictions. Customer agrees not to, and not to authorize any third
|
||||
party to: (i) allow access or use of the Software by anyone other than its
|
||||
Users; (ii) distribute, embed, sell, rent, transfer, lease, lend, sublicense,
|
||||
loan, assign, pledge, grant a security interest in, or otherwise make the
|
||||
Software accessible or available to any third party; except to the limited
|
||||
extent expressly provided in Section 3.4.2, use the Software in any
|
||||
service-bureau, timesharing, outsourcing or similar arrangement; or (iii)
|
||||
disassemble, decompile, reverse engineer or otherwise attempt to derive the
|
||||
structure, sequence or organization of source code or APIs; (iv) remove or
|
||||
alter product identification, copyright, trademark or other proprietary
|
||||
markings contained in or on the Software; (v) modify, adapt, recast, transform
|
||||
or otherwise prepare a derivative work of the Software or portion thereof; (vi)
|
||||
conduct any competitive analysis, publish or share with any third party any
|
||||
results of any technical evaluation or tests performed on the Software, or
|
||||
disclose Software features, errors or bugs to a third party without Memgraph's
|
||||
prior written consent; or (vii) engage in any act designed to circumvent any
|
||||
restriction set forth in this Agreement, in the Software, or in an Order,
|
||||
including but not limited to restrictions related to Licensed Capacity.
|
||||
|
||||
3.4.2. Internal Use Licences; Users. The Software is licensed for Customer's
|
||||
internal business use and not for distribution or use by third parties. For
|
||||
clarity, however, Customer may make available to third parties any
|
||||
Customer-hosted services or other Customer applications or services that make
|
||||
use of or incorporate the Software, provided and solely to the extent that (i)
|
||||
Customer's application or hosted service adds primary and significant
|
||||
functionality to the Software, (ii) Customer does not embed or otherwise
|
||||
distribute the Software to third parties, (iii) Customer does not provide third
|
||||
parties direct access to operate or control the Software itself; and (iv)
|
||||
Customer at all times remains in compliance with the terms of the applicable
|
||||
licence grants under this Agreement. Subject to the terms and conditions of
|
||||
this Agreement, in addition to Customer's employees, Customer may permit its
|
||||
independent contractors and consultants ("Contractors") to serve as Users.
|
||||
Customer will remain responsible for compliance by each of its Users (including
|
||||
but not limited to any Contractor Users) with all of the terms and conditions
|
||||
of this Agreement, and any use of the Software by any Contractors must be for
|
||||
the sole benefit of Customer.
|
||||
|
||||
3.5. Ownership; Reservation of Rights. This is an agreement for use of Memgraph
|
||||
Software and not an agreement for sale. Customer acknowledges that it is
|
||||
obtaining only a limited right to use the Software on a licensed basis, and
|
||||
that irrespective of any use of the words "purchase", "sale" or like terms
|
||||
hereunder no ownership rights are being conveyed to Customer. Customer agrees
|
||||
that Memgraph or its suppliers retain all right, title and interest (including
|
||||
all patent, copyright, trade secret and other intellectual property rights) in
|
||||
and to the Memgraph Software. Nothing in this Section shall be deemed as
|
||||
granting Memgraph ownership of Customer Data or in any way impacting Customer's
|
||||
ownership of Customer Data.
|
||||
|
||||
3.6. Third Party Code. The Software may contain or be provided with components
|
||||
which are licensed from third parties, including components subject to the
|
||||
terms and conditions of "open source" software licences ("Open Source
|
||||
Software"). Open Source Software may be identified in the Software,
|
||||
Documentation, or in a list of the Open Source Software provided to you upon
|
||||
your written request. To the extent required by the licence that accompanies
|
||||
the Open Source Software, the terms of such licence will apply in lieu of the
|
||||
terms of this Agreement with respect to such Open Source Software, including,
|
||||
without limitation, any provisions governing access to source code,
|
||||
modification, or reverse engineering.
|
||||
|
||||
3.7. IP Ownership. The Parties agree that neither party shall gain, by virtue
|
||||
of this Agreement, any rights of ownership or any other interest, right or
|
||||
title of copyrights, patents, trade secrets, trademarks, or any other
|
||||
intellectual property rights owned by the other Party. Any and all new works
|
||||
developed in the course of performing obligations pursuant to this Agreement
|
||||
and all new inventions, innovations or ideas developed by a Party in the course
|
||||
of performance of its activities under this Agreement, will belong to that
|
||||
Party who develops the same. Notwithstanding anything to the contrary in this
|
||||
Section, the Parties understand and agree that any and all proprietary
|
||||
materials developed by a Party prior to this Agreement and any modifications,
|
||||
enhancements, improvements or inventions made to such proprietary materials
|
||||
shall be owned by that Party, regardless of which Party prepared or developed
|
||||
such modifications, enhancements, improvements or inventions.
|
||||
|
||||
## 4. CUSTOMER DATA; OBLIGATIONS OF CUSTOMER AND MEMGRAPH.
|
||||
|
||||
4.1. Customer shall retain all of its rights, title, and interest in and to its
|
||||
intellectual property rights in Customer Data. Customer grants to Memgraph a
|
||||
non-exclusive, worldwide, limited-term licence solely to host, copy, transmit
|
||||
and display Customer Data as reasonably necessary for Memgraph to support
|
||||
Customer's use of the Software, to ensure the security of and to administrate
|
||||
the Software, and to deliver Services in accordance with this Agreement or as
|
||||
otherwise outlined in https://memgraph.com/legal/privacy-policy/.
|
||||
|
||||
4.2. Protection of Customer Data. Memgraph will maintain appropriate
|
||||
administrative, physical, and technical safeguards, consistent with generally
|
||||
prevailing industry standards, for protection of the security, confidentiality,
|
||||
and integrity of Customer Data, as described in the Documentation. Those
|
||||
safeguards will include, but will not be limited to, measures for preventing
|
||||
access, use, modification, or disclosure of Customer Data by Memgraph
|
||||
personnel, except as permitted by this Agreement.
|
||||
|
||||
4.3. Personal data. Both parties will comply with all applicable requirements
|
||||
of the Data Protection Legislation. This section 4 is in addition to, and does
|
||||
not relieve, remove or replace, a party's obligations under the Data Protection
|
||||
Legislation. Notwithstanding the foregoing, the parties acknowledge that, in
|
||||
the ordinary course of providing the Services, Memgraph shall not process
|
||||
personal data (as defined in the Data Protection Legislation) on behalf of the
|
||||
Customer. In the event that the Customer requires Memgraph to process personal
|
||||
data on its behalf, it shall notify Memgraph and the parties shall execute such
|
||||
terms as necessary under applicable law.
|
||||
|
||||
## 5. FEES AND PAYMENT.
|
||||
|
||||
5.1. Fees. Customer will pay Memgraph the fees for the Licences and Services as
|
||||
set forth in the applicable Order ("Fees"). Customer acknowledges and agrees
|
||||
that if Customer's use of the Software exceeds the Licensed Capacity set forth
|
||||
on the applicable Orders or otherwise requires the payment of additional fees
|
||||
(per the terms of this Agreement), Customer shall be invoiced for such usage
|
||||
and Customer agrees to pay the additional fees in accordance with this Section.
|
||||
Notwithstanding the terms of Section 5.4 below (Reconciliation), Customer
|
||||
acknowledges and agrees that it is obligated to ensure that its Software usage
|
||||
does not exceed the Licensed Capacity and to promptly notify Memgraph of any
|
||||
such excess usage no more than thirty (30) days from the last day of the
|
||||
calendar month during which such excess usage occurred.
|
||||
|
||||
5.2. Payment Terms. Except as otherwise specifically set forth on an Order
|
||||
Document, all fees are due and payable within thirty days after the date of
|
||||
invoice. Renewal Fees for any renewal Subscription Term (if purchased by
|
||||
Customer) will be due and payable within thirty (30) days of expiration of the
|
||||
then-current term. If Fees are not paid when due, or in the event of other
|
||||
breach of this Agreement, Customer shall discontinue use of the Software and
|
||||
Memgraph may suspend its performance, including its delivery of technical
|
||||
support of the Software or other Services without further notice and without
|
||||
penalty. All Orders (including multi-year Subscriptions with annual payment
|
||||
schedules) are non-cancellable and all amounts paid are non-refundable, unless
|
||||
otherwise expressly set forth herein. Any invoiced amount not received by the
|
||||
due date will accrue late interest at the rate of 1.5% of the outstanding
|
||||
balance per month, or the maximum rate permitted by applicable law, whichever
|
||||
is lower.
|
||||
|
||||
5.3. Taxes. Fees are exclusive of taxes. Customer will pay any sales, use,
|
||||
value added, duties, fees and other governmental assessments or charges arising
|
||||
out of this Agreement and the transactions contemplated herein. Customer will
|
||||
make all payments free and clear of, and without reduction for, any withholding
|
||||
taxes.
|
||||
|
||||
5.4. Reconciliation. At Memgraph's request from time to time, not exceeding
|
||||
once per quarter, Customer will provide Memgraph with a report detailing its
|
||||
use of the Software, including its non-production and/or production use and
|
||||
using the self-monitoring capabilities of the Software or other means, and
|
||||
Memgraph may inspect Customer's records related to such report not more
|
||||
frequently than annually to ensure payment of Fees. Any on-site review will be
|
||||
conducted during regular business hours at Customer's offices. The parties will
|
||||
use reasonable good faith efforts to promptly resolve any discrepancies between
|
||||
licensed usage and actual usage.
|
||||
|
||||
## 6. APPLICABLE LAWS.
|
||||
|
||||
6.1. Each Party shall perform this Agreement in accordance with all Applicable
|
||||
Laws. Without prejudice to the foregoing, each Party shall:
|
||||
|
||||
6.1.1. comply with all Applicable Laws relating to anti-bribery,
|
||||
anti-corruption, anti-slavery and human trafficking, including the Bribery Act
|
||||
2010 and the Modern Slavery Act 2015 (the "Relevant Requirements");
|
||||
|
||||
6.1.2. have and maintain in place throughout the Term its own policies and
|
||||
procedures, including adequate procedures under the Bribery Act 2010, to ensure
|
||||
compliance with the Relevant Requirements, and will enforce them where
|
||||
appropriate;
|
||||
|
||||
6.1.3. (if not prohibited by law or regulation from doing so) promptly report
|
||||
to the other Party any request or demand for any undue financial or other
|
||||
advantage of any kind received by the reporting Party in connection with the
|
||||
performance of this Agreement; and
|
||||
|
||||
6.1.4. (if not prohibited by law or regulation from doing so) notify the other
|
||||
Party (and email shall be sufficient for this purpose) as soon as it becomes
|
||||
aware of any actual or suspected slavery or human trafficking in a supply chain
|
||||
which has a connection with this Agreement.
|
||||
|
||||
## 7. REPRESENTATIONS AND WARRANTIES.
|
||||
|
||||
7.1. Mutual Representations and Warranties. Each Party represents and warrants
|
||||
to the other that: (i) it is a corporation lawfully incorporated and validly
|
||||
existing pursuant to the laws of its place of incorporation; (ii) it has all
|
||||
requisite power and authority, corporate or otherwise, to execute, deliver and
|
||||
perform its obligations under this Agreement; and (iii) this Agreement
|
||||
constitutes its legal, valid and binding obligations and may be enforced
|
||||
against it.
|
||||
|
||||
7.2. Limited Memgraph Warranty; Remedies. Memgraph warrants that the Software,
|
||||
when used as permitted hereunder, will operate in all material respects as
|
||||
described in the applicable Documentation, and that Services will be provided
|
||||
in a professional manner consistent with industry standards.
|
||||
|
||||
7.3. Limitations; Remedy. Memgraph does not warrant that the Software or the
|
||||
Services will be error-free, uninterrupted or meet Customer's specific
|
||||
requirements or that performance of the Services will be uninterrupted.
|
||||
Memgraph will have no warranty obligation under Section 7.2 for Customer's
|
||||
misuse or failure to use the Software in accordance with its Documentation or
|
||||
this Agreement. Customer's sole and exclusive remedy, and Memgraph's sole and
|
||||
exclusive obligation, for breach of warranty will be (i) during the thirty (30)
|
||||
day period following initial Delivery of the Software under an Order,
|
||||
Memgraph's correction of the program errors that cause the breach of warranty,
|
||||
or if Memgraph cannot substantially correct such breach in a commercially
|
||||
reasonable manner, a refund of the fees paid for the nonconforming Software
|
||||
(ii) during the remainder of the relevant Subscription Term, Memgraph's
|
||||
delivery of Support with respect to any such program errors. In the event of a
|
||||
refund remedy, Customer's licences and right to use the Software or receive
|
||||
Services will end. In the event of any noticed breach of warranty with respect
|
||||
to Services, Memgraph's sole and exclusive obligation shall be the
|
||||
re-performance of the deficient Services.
|
||||
|
||||
7.4. Disclaimer. THIS SECTION 7 IS A LIMITED WARRANTY AND, EXCEPT EXPRESSLY AS
|
||||
SET FORTH IN SECTION 7.2, THE SOFTWARE, INCLUDING WITHOUT LIMITATION THE
|
||||
THIRD-PARTY CODE, AND ALL SERVICES ARE PROVIDED "AS IS". MEMGRAPH MAKES NO
|
||||
OTHER WARRANTIES OR REPRESENTATIONS, EXPRESS, IMPLIED, STATUTORY OR OTHERWISE,
|
||||
AND DISCLAIMS ALL IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
|
||||
PARTICULAR PURPOSE, TITLE, AND NON-INFRINGEMENT.
|
||||
|
||||
## 8. INDEMNIFICATION.
|
||||
|
||||
8.1. By Memgraph. Memgraph will defend against any action against Customer
|
||||
brought by a third party to the extent the action is based on a claim that the
|
||||
Software infringes a third party's patent, copyright or trademark (a "Claim")
|
||||
and indemnify Customer from the damages, liabilities, costs and expenses
|
||||
(including reasonable attorneys' fees) awarded against Customer or agreed in
|
||||
settlement by Customer resulting from such Claim. If your use of the Software
|
||||
is (or in Memgraph's opinion likely to be) enjoined, then Memgraph may, at its
|
||||
own expense and at its option: (i) substitute substantially similar
|
||||
functionality for the Software which renders it non-infringing; (ii) procure
|
||||
for Customer the right to continue to use the Software; or if (i) and (ii) are
|
||||
not commercially reasonable, terminate this Agreement and refund Customer any
|
||||
prepaid, unused (pro-rated) Fees for the duration of the then-current
|
||||
Subscription Term. The foregoing obligations of Memgraph will not apply: (i) if
|
||||
the Software is modified by any party other than Memgraph, but solely to the
|
||||
extent the alleged infringement is caused by such modification; (ii) if the
|
||||
Software is used in combination with other products or processes not provided
|
||||
or authorized by Memgraph, but solely to the extent the alleged infringement is
|
||||
caused by such combination; (iii) use of any version or release of Software
|
||||
other than the most current version or release made available to Customer by
|
||||
Memgraph, if its use would have avoided the infringement; (iv) any unauthorized
|
||||
use of the Software. THIS SECTION 8.1 SETS FORTH MEMGRAPH'S SOLE LIABILITY AND
|
||||
CUSTOMER'S SOLE AND EXCLUSIVE REMEDY WITH RESPECT TO ANY CLAIM OF INTELLECTUAL
|
||||
PROPERTY INFRINGEMENT.
|
||||
|
||||
8.2. By Customer. Customer will indemnify and hold Memgraph and its suppliers
|
||||
harmless against any claims, liabilities, costs, and expenses (including
|
||||
reasonable attorneys' fees) that Memgraph or its suppliers may incur as a
|
||||
result of a third-party claim arising from or related to Customer Data, or
|
||||
misuse or unauthorised use of the Software by Customer or any User.
|
||||
|
||||
8.3. Conditions. All defence and indemnity obligations under Sections 8.1 and
|
||||
8.2 are conditioned on the indemnitee (i) giving the indemnitor written notice
|
||||
of the relevant claim within thirty (30) days after the indemnitee receives
|
||||
notice of the Claim (or sooner if required by applicable law); (ii) reasonably
|
||||
cooperating with the indemnitor, at the indemnitor's expense, in the defence of
|
||||
the claim; and (iii) giving the indemnitor sole control of the defence and any
|
||||
settlement negotiations. The indemnitee may participate in the defence at its
|
||||
expense.
|
||||
|
||||
## 9. LIMITATION OF LIABILITY.
|
||||
|
||||
9.1. TO THE EXTENT PERMITTED BY LAW, NEITHER MEMGRAPH NOR CUSTOMER SHALL BE
|
||||
LIABLE TO THE OTHER OR ANY THIRD PARTY FOR LOST PROFITS (WHETHER DIRECT OR
|
||||
INDIRECT) OR LOSS OF USE OR DATA, SUBSTITUTE GOODS OR SERVICES, OR FOR
|
||||
INCIDENTAL, CONSEQUENTIAL, PUNITIVE, SPECIAL OR EXEMPLARY DAMAGES (INCLUDING
|
||||
DAMAGE TO BUSINESS, REPUTATION OR GOODWILL), OR INDIRECT DAMAGES OF ANY TYPE
|
||||
HOWEVER CAUSED, WHETHER BY BREACH OF WARRANTY, BREACH OF CONTRACT, IN TORT
|
||||
(INCLUDING NEGLIGENCE) OR ANY OTHER LEGAL OR EQUITABLE CAUSE OF ACTION EVEN IF
|
||||
SUCH PARTY HAS BEEN ADVISED OF SUCH DAMAGES IN ADVANCE OR IF SUCH DAMAGES WERE
|
||||
FORESEEABLE.
|
||||
|
||||
9.2. LIMITATIONS ON DIRECT DAMAGES. EXCEPT FOR ANY EXCLUDED CLAIMS AND ANY
|
||||
DAMAGES THAT CANNOT BE LIMITED UNDER APPLICABLE LAW, IN NO EVENT WILL
|
||||
MEMGRAPH'S TOTAL AGGREGATE LIABILITY ARISING FROM OR RELATED TO THIS AGREEMENT,
|
||||
EXCEED AN AMOUNT EQUAL TO THE TOTAL AMOUNT OF FEES PAID OR PAYABLE BY CUSTOMER
|
||||
TO MEMGRAPH UNDER THIS AGREEMENT DURING THE TWELVE MONTHS PRECEDING THE CLAIM.
|
||||
THE FOREGOING LIMITATIONS SHALL NOT APPLY TO: (i) PAYMENTS TO A THIRD PARTY
|
||||
ARISING FROM A PARTY'S OBLIGATIONS UNDER SECTION 8 (INDEMNIFICATION); (ii)
|
||||
BREACH BY A PARTY OF SECTION 10 (CONFIDENTIAL INFORMATION), AND (iii)
|
||||
INFRINGEMENT BY A PARTY OF THE OTHER PARTY'S INTELLECTUAL PROPERTY RIGHTS
|
||||
(COLLECTIVELY EXCLUSIONS (i)-(iii) ARE REFERRED TO AS THE "EXCLUDED CLAIMS").
|
||||
WITH RESPECT TO ANY EXCLUDED CLAIMS, MEMGRAPH'S TOTAL AGGREGATE LIABILITY SHALL
|
||||
IN NO EVENT EXCEED £1,000,000.
|
||||
|
||||
9.3. Nothing in this Agreement excludes the liability of Memgraph for death or
|
||||
personal injury caused by the Supplier's negligence; or for fraud or fraudulent
|
||||
misrepresentation.
|
||||
|
||||
## 10. CONFIDENTIALITY.
|
||||
|
||||
10.1. The Receiving Party will use the same degree of care that it uses to
|
||||
protect the confidentiality of its own confidential information of like kind
|
||||
(but not less than reasonable care) to (i) not use any confidential information
|
||||
of the Disclosing Party for any purpose outside the scope of this agreement and
|
||||
(ii) except as otherwise authorized by the Disclosing Party in writing, limit
|
||||
access to confidential information of the Disclosing Party to those of its and
|
||||
its affiliates' employees and contractors who need that access for purposes
|
||||
consistent with this agreement and who have signed confidentiality agreements
|
||||
with the receiving party containing protections not materially less protective
|
||||
of the confidential information than those herein. Neither party will disclose
|
||||
the terms of this agreement or any Orders to any third-party other than its
|
||||
affiliates, legal counsel, and accountants without the other party's prior
|
||||
written consent, provided that a party that makes any such disclosure to its
|
||||
affiliate, legal counsel or accountants will remain responsible for such
|
||||
affiliate's, legal counsel's, or accountant's compliance with this
|
||||
"confidentiality" section.
|
||||
|
||||
10.2. Compelled Disclosure. The Receiving Party may disclose confidential
|
||||
information of the Disclosing Party to the extent compelled by law to do so,
|
||||
provided the Receiving Party gives the Disclosing Party prior notice of the
|
||||
compelled disclosure (to the extent legally permitted) and reasonable
|
||||
assistance, at the Disclosing Party's cost, if the Disclosing Party wishes to
|
||||
contest the disclosure. If the receiving party is compelled by law to disclose
|
||||
the Disclosing Party's confidential information as part of a civil proceeding
|
||||
to which the Disclosing Party is a party, and the Disclosing Party is not
|
||||
contesting the disclosure, the Disclosing Party will reimburse the Receiving
|
||||
Party for its reasonable cost of complying and providing secure access to that
|
||||
confidential information.
|
||||
|
||||
## 11. TERMINATION.
|
||||
|
||||
11.1. Term. The term ("Term") of this Agreement will commence on the Effective
|
||||
Date and continue until all Subscriptions, licence terms and Orders expire,
|
||||
unless earlier terminated in accordance with this Section 11.
|
||||
|
||||
11.2. Termination for Cause. In the event of a material breach of this
|
||||
Agreement (excluding any breaches for which an exclusive remedy is expressly
|
||||
provided), the non-breaching party may terminate this Agreement if such breach
|
||||
is not cured within thirty (30) days after written notice thereof (except that
|
||||
for a breach of Section 3.4 ("General Restrictions"), there will be no cure
|
||||
period). For clarity, material breach of this Agreement includes, but is not
|
||||
limited to, failure to timely pay amounts due hereunder, exceeding the scope of
|
||||
any Licence granted hereunder (including the Licensed Capacity), violating the
|
||||
Licence restrictions, breach of Section 6.1 and failing to protect the other
|
||||
party's Confidential Information.
|
||||
|
||||
11.3. Without affecting any other right or remedy available to it, either party
|
||||
may terminate this Agreement with immediate effect by giving written notice to
|
||||
the other party if the other party:
|
||||
|
||||
11.3.1. suspends, or threatens to suspend, payment of its debts or is unable to
|
||||
pay its debts as they fall due or admits inability to pay its debts or is
|
||||
deemed unable to pay its debts within the meaning of section 123 of the
|
||||
Insolvency Act 1986, as if the words "it is proved to the satisfaction of the
|
||||
court" did not appear in sections 123(1)(e) or 123(2) of the Insolvency Act
|
||||
1986; or
|
||||
|
||||
11.3.2. the other party commences negotiations with all or any class of its
|
||||
creditors with a view to rescheduling any of its debts, or makes a proposal for
|
||||
or enters into any compromise or arrangement with its creditors other than for
|
||||
the sole purpose of a scheme for a solvent amalgamation of that other party
|
||||
with one or more other companies or the solvent reconstruction of that other
|
||||
party; or
|
||||
|
||||
11.3.3. a petition is filed, a notice is given, a resolution is passed, or an
|
||||
order is made, for or in connection with the winding up of that other party
|
||||
other than for the sole purpose of a scheme for a solvent amalgamation of that
|
||||
other party with one or more other companies or the solvent reconstruction of
|
||||
that other party; or
|
||||
|
||||
11.3.4. an application is made to court, or an order is made, for the
|
||||
appointment of an administrator, or if a notice of intention to appoint an
|
||||
administrator is given or if an administrator is appointed, over the other
|
||||
party; or
|
||||
|
||||
11.3.5. the holder of a qualifying floating charge over the assets of that
|
||||
other party has become entitled to appoint or has appointed an administrative
|
||||
receiver; or
|
||||
|
||||
11.3.6. a person becomes entitled to appoint a receiver over the assets of the
|
||||
other party or a receiver is appointed over the assets of the other party; or
|
||||
|
||||
11.3.7. a creditor or encumbrancer of the other party attaches or takes
|
||||
possession of, or a distress, execution, sequestration or other such process is
|
||||
levied or enforced on or sued against, the whole or any part of the other
|
||||
party's assets and such attachment or process is not discharged within 30 days;
|
||||
or
|
||||
|
||||
11.3.8. any event occurs, or proceeding is taken, with respect to the other
|
||||
party in any jurisdiction to which it is subject that has an effect equivalent
|
||||
or similar to any of the events mentioned in clause 11.3.1 to clause 11.3.7
|
||||
(inclusive); or
|
||||
|
||||
11.3.9. the other party suspends or ceases, or threatens to suspend or cease,
|
||||
carrying on all or a substantial part of its business.
|
||||
|
||||
11.4. Effect of Termination. Upon the termination of this Agreement: (i) all
|
||||
licences will terminate; (ii) Customer will immediately discontinue all use of
|
||||
the affected Software, erase all full and partial copies of the Software and
|
||||
(subject to this Section) all other tangible embodiments of Memgraph
|
||||
Confidential Information in Customer's possession or control, and promptly
|
||||
certify the same to Memgraph; (iii) Memgraph may immediately cease providing
|
||||
the Services; (iv) (subject to this Section), Memgraph will return or delete
|
||||
all tangible embodiments of Customer Confidential Information in Memgraph's
|
||||
possession or control; and (v) Sections 1 ("Definitions"), 3.4 ("General
|
||||
Restrictions"), 3.5 ("Ownership; Reservation of Rights"), 5 ("Fees and
|
||||
Payment"), 7.3 ("Limitations"), 7.4 ("Disclaimer"), 8 ("Indemnification"), 9
|
||||
("Limitation of Liability"), 10 ("Confidentiality"), 11.4 ("Effect of
|
||||
Termination"), and 12 ("Miscellaneous") will survive. If a party's file
|
||||
retention policies or a valid legal order provides for backup or archival
|
||||
copies of files to be retained, such party will notify the other party of such
|
||||
policy or order, protect the other party's Confidential Information as required
|
||||
hereunder, and permanently erase, delete, or destroy such Confidential
|
||||
Information as soon as permissible under such policy or order.
|
||||
|
||||
## 12. MISCELLANEOUS.
|
||||
|
||||
12.1. Assignment. This Agreement will bind and inure to the benefit of each
|
||||
party's permitted successors and assigns. Memgraph may assign this Agreement to
|
||||
any affiliate or in connection with a merger, reorganization, acquisition, or
|
||||
other transfer of all or substantially all of Memgraph's assets or voting
|
||||
securities. Customer may not assign or transfer this Agreement, in whole or in
|
||||
part, without Memgraph's written consent except that Customer may assign its
|
||||
rights and obligations under this Agreement, in whole but not in part, without
|
||||
Memgraph's written consent in connection with any merger, consolidation, sale
|
||||
of all or substantially all of Customer's assets or voting stock, or any other
|
||||
similar transaction provided that: (i) the assignee is not a direct competitor
|
||||
of Memgraph; (ii) Customer provides prompt written notice of such assignment to
|
||||
Memgraph; (iii) the assignee is capable of fully performing Customer's
|
||||
obligations under this Agreement; and (iv) the assignee agrees to be bound by
|
||||
the terms and conditions of this Agreement. Any attempt to transfer or assign
|
||||
this Agreement without such written consent will be null and void.
|
||||
|
||||
12.2. Force Majeure. Memgraph shall have no liability to the Customer under
|
||||
this Agreement if it is prevented from or delayed in performing its obligations
|
||||
under this Agreement, or from carrying on its business, by acts, events,
|
||||
omissions or accidents beyond its reasonable control, including strikes,
|
||||
lock-outs or other industrial disputes (whether involving the workforce of
|
||||
Memgraph or any other party), failure of a utility service or transport or
|
||||
telecommunications network, act of God, war, pandemic, riot, civil commotion,
|
||||
malicious damage, compliance with any law or governmental order, rule,
|
||||
regulation or direction, accident, breakdown of plant or machinery, fire,
|
||||
flood, storm or default of suppliers or subcontractors, provided that the
|
||||
Customer is notified of such an event and its expected duration.
|
||||
|
||||
12.3. Governing Law. This Agreement and any dispute or claim arising out of or
|
||||
in connection with it or its subject matter or formation (including
|
||||
non-contractual disputes or claims) shall be governed by and construed in
|
||||
accordance with the law of England and Wales.
|
||||
|
||||
12.4. Jurisdiction. Each party irrevocably agrees that the courts of England
|
||||
and Wales shall have exclusive jurisdiction to settle any dispute or claim
|
||||
arising out of or in connection with this Agreement or its subject matter or
|
||||
formation (including non-contractual disputes or claims).
|
||||
|
||||
12.5. Severability; Waiver; Construction. If a court of competent jurisdiction
|
||||
adjudges any provision of this Agreement to be invalid or unenforceable, the
|
||||
remaining provisions of this Agreement, if capable of substantial performance,
|
||||
will continue in full force and effect without being impaired or invalidated in
|
||||
any way. The parties agree to replace any invalid provision with a valid
|
||||
provision that most closely approximates the intent and economic effect of the
|
||||
invalid provision. All waivers must be in writing. A party's consent to, or
|
||||
waiver of, enforcement of this Agreement on one occasion will not be deemed a
|
||||
waiver of any other provision or such provision on any other occasion. In this
|
||||
Agreement, the word "including" means "including but not limited to." No
|
||||
presumption will operate in favour of or against any party as a result of its
|
||||
role in drafting this Agreement.
|
||||
|
||||
12.6. Subcontractors. Memgraph may use the services of subcontractors in
|
||||
connection with its performance of this Agreement, provided that Memgraph
|
||||
remains solely responsible for (i) compliance of any such subcontractor with
|
||||
the terms of this Agreement and (ii) the overall performance of Memgraph as
|
||||
required under this Agreement.
|
||||
|
||||
12.7. Use of Aggregate Data. Customer agrees that Memgraph may collect, use and
|
||||
disclose quantitative data and metadata derived from the use of the Software
|
||||
(i) for its own internal, statistical analysis, (ii) to develop and improve the
|
||||
Software and (iii) to create and distribute reports and other materials
|
||||
regarding use of the Software. For clarity, any such data collected, used, and
|
||||
disclosed will be in anonymized aggregate form only and shall not identify
|
||||
Customer or its Users, or disclose any Customer Data.
|
||||
|
||||
12.8. Independent Contractors. The parties are independent contractors. No
|
||||
agency, partnership, franchise, joint venture, or employment relationship is
|
||||
intended or created by this Agreement. Neither party has the power or authority
|
||||
to create or assume any obligation, or make any representations or warranties,
|
||||
on behalf of the other party.
|
||||
|
||||
12.9. Publicity. Memgraph may, in conformity with Customer's trademark usage
|
||||
guidelines, use Customer's name and logo in Memgraph's sales and marketing
|
||||
materials, including in business presentations, Customer lists, and on
|
||||
websites. Neither party will issue a press release regarding this Agreement
|
||||
without the other party's prior written consent. Neither party will disclose
|
||||
the terms of this Agreement to any third party, except as required by law.
|
||||
|
||||
12.10. Notice. Any notice, consent, or waiver hereunder must be in writing,
|
||||
addressed to the attention of "Legal Department" at the address set forth
|
||||
above, and delivered by personal delivery, reputable rapid courier, or
|
||||
certified/registered mail, return receipt requested, and will be deemed given
|
||||
upon personal delivery, one (1) day after deposit with an overnight domestic
|
||||
courier, two (2) days after deposit with an international courier, or five (5)
|
||||
days after deposit in the certified or registered mail. A party may specify a
|
||||
new address by providing notice to the other party in accordance with this
|
||||
Section.
|
||||
|
||||
12.11. Compliance with Law. Each party will comply with all applicable laws,
|
||||
regulations, and orders of any governmental authority of competent jurisdiction
|
||||
in its performance under this Agreement, including but not limited to those
|
||||
applicable to data collection and the privacy and security of personal
|
||||
information, including trans-border data transfers and data breach notification
|
||||
requirements as required of each party by law.
|
||||
|
||||
12.12. Supremacy; Modification. This Agreement will prevail over any written
|
||||
instrument submitted by Customer; the terms of any purchase order,
|
||||
acknowledgement, or similar document submitted by Customer to Memgraph will
|
||||
have no effect. If the express terms of an Order Document conflict with this
|
||||
Agreement, the terms on the Order Document will prevail, but only with respect
|
||||
to that Order Document. This Agreement cannot be varied or supplemented by
|
||||
course of dealing or by usage of trade. All modifications or amendments to this
|
||||
Agreement must be in writing and signed by both parties, except that subsequent
|
||||
renewals and purchases of additional Licensed Capacity can be procured by
|
||||
payment against an issued invoice as set forth in Section 5 ("Fees and
|
||||
payment") above.
|
||||
|
||||
12.13. No Third Party Beneficiaries. This Agreement is not intended and shall
|
||||
not be construed to give any third party any interest or rights with respect to
|
||||
or in connection with any agreement or provision herein, except as expressly
|
||||
provided for in this Agreement.
|
||||
|
||||
12.14. Entire Agreement. This Agreement in its original English text, sets
|
||||
forth the complete, exclusive, and final agreement of the parties concerning
|
||||
the subject matter hereof, supersedes, replaces, and merges all prior and
|
||||
contemporaneous agreements, communications, and understandings, both written
|
||||
and oral, between them concerning the subject matter hereof. This Agreement may
|
||||
be executed in counterparts.
|
||||
@@ -1,2 +0,0 @@
|
||||
/etc/memgraph/memgraph.conf
|
||||
/etc/logrotate.d/memgraph
|
||||
@@ -1 +0,0 @@
|
||||
../../LICENSE_COMMUNITY.md
|
||||
1
release/debian/copyright
Symbolic link
1
release/debian/copyright
Symbolic link
@@ -0,0 +1 @@
|
||||
../../LICENSE
|
||||
@@ -1 +0,0 @@
|
||||
../../LICENSE_ENTERPRISE.md
|
||||
@@ -7,7 +7,7 @@ set -e
|
||||
|
||||
# Manage (remove) /etc/logrotate.d/memgraph_audit file because the whole
|
||||
# logrotate config is moved to /etc/logrotate.d/memgraph since v1.2.0.
|
||||
# Note: Only used to manage Memgraph Enterprise config but packaged into the
|
||||
# Note: Only used to manage Memgraph config but it was packaged into the
|
||||
# Memgraph Community as well.
|
||||
if dpkg-maintscript-helper supports rm_conffile 2>/dev/null; then
|
||||
# 1.1.999 is chosen because it's high enough version number. It's highly
|
||||
|
||||
@@ -4,8 +4,8 @@ FROM debian:buster
|
||||
ARG deb_release
|
||||
|
||||
RUN apt-get update && apt-get install -y \
|
||||
openssl libcurl4 libssl1.1 python3 libpython3.7 python3-pip \
|
||||
--no-install-recommends \
|
||||
openssl libcurl4 libssl1.1 libseccomp2 python3 libpython3.7 python3-pip \
|
||||
--no-install-recommends \
|
||||
&& rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*
|
||||
|
||||
RUN pip3 install networkx==2.4 numpy==1.19.2 scipy==1.5.2
|
||||
@@ -17,6 +17,11 @@ RUN dpkg -i ${deb_release}
|
||||
|
||||
# Memgraph listens for Bolt Protocol on this port by default.
|
||||
EXPOSE 7687
|
||||
# Snapshots and logging volumes
|
||||
VOLUME /var/log/memgraph
|
||||
VOLUME /var/lib/memgraph
|
||||
# Configuration volume
|
||||
VOLUME /etc/memgraph
|
||||
|
||||
USER memgraph
|
||||
WORKDIR /usr/lib/memgraph
|
||||
@@ -1,25 +0,0 @@
|
||||
FROM debian:buster
|
||||
# NOTE: If you change the base distro update release/package as well.
|
||||
|
||||
ARG deb_release
|
||||
|
||||
RUN apt-get update && apt-get install -y \
|
||||
openssl libcurl4 libssl1.1 libseccomp2 python3 libpython3.7 python3-pip \
|
||||
--no-install-recommends \
|
||||
&& rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*
|
||||
|
||||
RUN pip3 install networkx==2.4 numpy==1.19.2 scipy==1.5.2
|
||||
|
||||
COPY ${deb_release} /
|
||||
|
||||
# Install memgraph package
|
||||
RUN dpkg -i ${deb_release}
|
||||
|
||||
# Memgraph listens for Bolt Protocol on this port by default.
|
||||
EXPOSE 7687
|
||||
|
||||
USER memgraph
|
||||
WORKDIR /usr/lib/memgraph
|
||||
|
||||
ENTRYPOINT ["/usr/lib/memgraph/memgraph"]
|
||||
CMD [""]
|
||||
@@ -35,8 +35,7 @@ cd ${working_dir}
|
||||
# Extract version and offering from deb name.
|
||||
deb_name=`echo $(basename "$deb_path") | sed 's/.deb$//'`
|
||||
version=`echo ${deb_name} | cut -d '_' -f 2 | rev | cut -d '-' -f 2- | rev | tr '+~' '__'`
|
||||
offering=`echo ${version} | cut -d '-' -f 2`
|
||||
dockerfile_path="${working_dir}/memgraph_${offering}.dockerfile"
|
||||
dockerfile_path="${working_dir}/memgraph.dockerfile"
|
||||
image_name="memgraph:${version}"
|
||||
package_name="memgraph-${version}-docker.tar.gz"
|
||||
|
||||
|
||||
@@ -1,10 +1,11 @@
|
||||
#!/usr/bin/env python3
|
||||
import argparse
|
||||
import os
|
||||
import re
|
||||
import subprocess
|
||||
import sys
|
||||
import os
|
||||
|
||||
import time
|
||||
from functools import wraps
|
||||
|
||||
# This script is used to determine the current version of Memgraph. The script
|
||||
# determines the current version using `git` automatically. The user can also
|
||||
@@ -49,13 +50,13 @@ import os
|
||||
# <VERSION>+<DISTANCE>~<SHORTHASH>-<OFFERING>[-<SUFFIX>]
|
||||
# Examples:
|
||||
# Release version:
|
||||
# 0.50.1-community
|
||||
# 0.50.1-enterprise
|
||||
# 0.50.1-enterprise-veryimportantcustomer
|
||||
# 0.50.1-open-source
|
||||
# 0.50.1
|
||||
# 0.50.1-veryimportantcustomer
|
||||
# Development version (master, 12 commits after release/0.50):
|
||||
# 0.50.0+12~7e1eef94-community
|
||||
# 0.50.0+12~7e1eef94-enterprise
|
||||
# 0.50.0+12~7e1eef94-enterprise-veryimportantcustomer
|
||||
# 0.50.0+12~7e1eef94-open-source
|
||||
# 0.50.0+12~7e1eef94
|
||||
# 0.50.0+12~7e1eef94-veryimportantcustomer
|
||||
#
|
||||
# The DEB package version is determined using the following two templates:
|
||||
# Release version:
|
||||
@@ -64,13 +65,13 @@ import os
|
||||
# <VERSION>+<DISTANCE>~<SHORTHASH>-<OFFERING>[-<SUFFIX>]-1
|
||||
# Examples:
|
||||
# Release version:
|
||||
# 0.50.1-community-1
|
||||
# 0.50.1-enterprise-1
|
||||
# 0.50.1-enterprise-veryimportantcustomer-1
|
||||
# 0.50.1-open-source-1
|
||||
# 0.50.1-1
|
||||
# 0.50.1-veryimportantcustomer-1
|
||||
# Development version (master, 12 commits after release/0.50):
|
||||
# 0.50.0+12~7e1eef94-community-1
|
||||
# 0.50.0+12~7e1eef94-enterprise-1
|
||||
# 0.50.0+12~7e1eef94-enterprise-veryimportantcustomer-1
|
||||
# 0.50.0+12~7e1eef94-open-source-1
|
||||
# 0.50.0+12~7e1eef94-1
|
||||
# 0.50.0+12~7e1eef94-veryimportantcustomer-1
|
||||
# For more documentation about the DEB package naming conventions see:
|
||||
# https://www.debian.org/doc/debian-policy/ch-controlfields.html#version
|
||||
#
|
||||
@@ -81,46 +82,59 @@ import os
|
||||
# <VERSION>_0.<DISTANCE>.<SHORTHASH>.<OFFERING>[.<SUFFIX>]
|
||||
# Examples:
|
||||
# Release version:
|
||||
# 0.50.1_1.community
|
||||
# 0.50.1_1.enterprise
|
||||
# 0.50.1_1.enterprise.veryimportantcustomer
|
||||
# 0.50.1_1.open-source
|
||||
# 0.50.1_1
|
||||
# 0.50.1_1.veryimportantcustomer
|
||||
# Development version:
|
||||
# 0.50.0_0.12.7e1eef94.community
|
||||
# 0.50.0_0.12.7e1eef94.enterprise
|
||||
# 0.50.0_0.12.7e1eef94.enterprise.veryimportantcustomer
|
||||
# 0.50.0_0.12.7e1eef94.open-source
|
||||
# 0.50.0_0.12.7e1eef94
|
||||
# 0.50.0_0.12.7e1eef94.veryimportantcustomer
|
||||
# For more documentation about the RPM package naming conventions see:
|
||||
# https://docs.fedoraproject.org/en-US/packaging-guidelines/Versioning/
|
||||
# https://fedoraproject.org/wiki/Package_Versioning_Examples
|
||||
|
||||
|
||||
def retry(retry_limit, timeout=100):
|
||||
def inner_func(func):
|
||||
@wraps(func)
|
||||
def wrapper(*args, **kwargs):
|
||||
for _ in range(retry_limit):
|
||||
try:
|
||||
return func(*args, **kwargs)
|
||||
except Exception:
|
||||
time.sleep(timeout)
|
||||
return func(*args, **kwargs)
|
||||
return wrapper
|
||||
return inner_func
|
||||
|
||||
|
||||
@retry(3)
|
||||
def get_output(*cmd, multiple=False):
|
||||
ret = subprocess.run(cmd, stdout=subprocess.PIPE, check=True)
|
||||
if multiple:
|
||||
return list(map(lambda x: x.strip(),
|
||||
ret.stdout.decode("utf-8").strip().split("\n")))
|
||||
return list(map(lambda x: x.strip(), ret.stdout.decode("utf-8").strip().split("\n")))
|
||||
return ret.stdout.decode("utf-8").strip()
|
||||
|
||||
|
||||
def format_version(variant, version, offering, distance=None, shorthash=None,
|
||||
suffix=None):
|
||||
def format_version(variant, version, offering, distance=None, shorthash=None, suffix=None):
|
||||
if not distance:
|
||||
# This is a release version.
|
||||
if variant == "deb":
|
||||
# <VERSION>-<OFFERING>[-<SUFFIX>]-1
|
||||
ret = "{}-{}".format(version, offering)
|
||||
ret = "{}{}".format(version, "-" + offering if offering else "")
|
||||
if suffix:
|
||||
ret += "-" + suffix
|
||||
ret += "-1"
|
||||
return ret
|
||||
elif variant == "rpm":
|
||||
# <VERSION>_1.<OFFERING>[.<SUFFIX>]
|
||||
ret = "{}_1.{}".format(version, offering)
|
||||
ret = "{}_1{}".format(version, "." + offering if offering else "")
|
||||
if suffix:
|
||||
ret += "." + suffix
|
||||
return ret
|
||||
else:
|
||||
# <VERSION>-<OFFERING>[-<SUFFIX>]
|
||||
ret = "{}-{}".format(version, offering)
|
||||
ret = "{}{}".format(version, "-" + offering if offering else "")
|
||||
if suffix:
|
||||
ret += "-" + suffix
|
||||
return ret
|
||||
@@ -128,59 +142,53 @@ def format_version(variant, version, offering, distance=None, shorthash=None,
|
||||
# This is a development version.
|
||||
if variant == "deb":
|
||||
# <VERSION>+<DISTANCE>~<SHORTHASH>-<OFFERING>[-<SUFFIX>]-1
|
||||
ret = "{}+{}~{}-{}".format(version, distance, shorthash, offering)
|
||||
ret = "{}+{}~{}{}".format(version, distance, shorthash, "-" + offering if offering else "")
|
||||
if suffix:
|
||||
ret += "-" + suffix
|
||||
ret += "-1"
|
||||
return ret
|
||||
elif variant == "rpm":
|
||||
# <VERSION>_0.<DISTANCE>.<SHORTHASH>.<OFFERING>[.<SUFFIX>]
|
||||
ret = "{}_0.{}.{}.{}".format(
|
||||
version, distance, shorthash, offering)
|
||||
ret = "{}_0.{}.{}{}".format(version, distance, shorthash, "." + offering if offering else "")
|
||||
if suffix:
|
||||
ret += "." + suffix
|
||||
return ret
|
||||
else:
|
||||
# <VERSION>+<DISTANCE>~<SHORTHASH>-<OFFERING>[-<SUFFIX>]
|
||||
ret = "{}+{}~{}-{}".format(version, distance, shorthash, offering)
|
||||
ret = "{}+{}~{}{}".format(version, distance, shorthash, "-" + offering if offering else "")
|
||||
if suffix:
|
||||
ret += "-" + suffix
|
||||
return ret
|
||||
|
||||
|
||||
# Parse arguments.
|
||||
parser = argparse.ArgumentParser(
|
||||
description="Get the current version of Memgraph.")
|
||||
parser = argparse.ArgumentParser(description="Get the current version of Memgraph.")
|
||||
parser.add_argument("--open-source", action="store_true", help="set the current offering to 'open-source'")
|
||||
parser.add_argument("version", help="manual version override, if supplied the version isn't " "determined using git")
|
||||
parser.add_argument("suffix", help="custom suffix for the current version being built")
|
||||
parser.add_argument(
|
||||
"--enterprise", action="store_true",
|
||||
help="set the current offering to enterprise (default 'community')")
|
||||
"--variant",
|
||||
choices=("binary", "deb", "rpm"),
|
||||
default="binary",
|
||||
help="which variant of the version string should be generated",
|
||||
)
|
||||
parser.add_argument(
|
||||
"version", help="manual version override, if supplied the version isn't "
|
||||
"determined using git")
|
||||
parser.add_argument(
|
||||
"suffix", help="custom suffix for the current version being built")
|
||||
parser.add_argument(
|
||||
"--variant", choices=("binary", "deb", "rpm"), default="binary",
|
||||
help="which variant of the version string should be generated")
|
||||
parser.add_argument(
|
||||
"--memgraph-root-dir", help="The root directory of the checked out "
|
||||
"Memgraph repository.", default=".")
|
||||
"--memgraph-root-dir", help="The root directory of the checked out " "Memgraph repository.", default="."
|
||||
)
|
||||
args = parser.parse_args()
|
||||
|
||||
if not os.path.isdir(args.memgraph_root_dir):
|
||||
raise Exception("The root directory ({}) is not a valid directory".format(
|
||||
args.memgraph_root_dir))
|
||||
raise Exception("The root directory ({}) is not a valid directory".format(args.memgraph_root_dir))
|
||||
|
||||
os.chdir(args.memgraph_root_dir)
|
||||
|
||||
offering = "enterprise" if args.enterprise else "community"
|
||||
offering = "open-source" if args.open_source else None
|
||||
|
||||
# Check whether the version was manually supplied.
|
||||
if args.version:
|
||||
if not re.match(r"^[0-9]+\.[0-9]+\.[0-9]+$", args.version):
|
||||
raise Exception("Invalid version supplied '{}'!".format(args.version))
|
||||
print(format_version(args.variant, args.version, offering,
|
||||
suffix=args.suffix), end="")
|
||||
print(format_version(args.variant, args.version, offering, suffix=args.suffix), end="")
|
||||
sys.exit(0)
|
||||
|
||||
# Within CI, after the regular checkout, master is sometimes (e.g. in the case
|
||||
@@ -234,33 +242,28 @@ versions.sort(reverse=True)
|
||||
current_version = None
|
||||
for version in versions:
|
||||
version_tuple, branch, master_branch_merge = version
|
||||
current_branch_merge = get_output(
|
||||
"git", "merge-base", current_hash, branch)
|
||||
master_current_merge = get_output(
|
||||
"git", "merge-base", current_hash, "master")
|
||||
current_branch_merge = get_output("git", "merge-base", current_hash, branch)
|
||||
master_current_merge = get_output("git", "merge-base", current_hash, "master")
|
||||
# The first check checks whether this commit is a child of `master` and
|
||||
# the version branch was created before us.
|
||||
# The second check checks whether this commit is a child of the version
|
||||
# branch.
|
||||
if master_branch_merge == current_branch_merge or \
|
||||
master_branch_merge == master_current_merge:
|
||||
if master_branch_merge == current_branch_merge or master_branch_merge == master_current_merge:
|
||||
current_version = version
|
||||
break
|
||||
|
||||
# Determine current version.
|
||||
if current_version is None:
|
||||
raise Exception("You are attempting to determine the version for a very "
|
||||
"old version of Memgraph!")
|
||||
raise Exception("You are attempting to determine the version for a very " "old version of Memgraph!")
|
||||
version, branch, master_branch_merge = current_version
|
||||
distance = int(get_output("git", "rev-list", "--count", "--first-parent",
|
||||
master_branch_merge + ".." + current_hash))
|
||||
distance = int(get_output("git", "rev-list", "--count", "--first-parent", master_branch_merge + ".." + current_hash))
|
||||
version_str = ".".join(map(str, version)) + ".0"
|
||||
if distance == 0:
|
||||
print(format_version(args.variant, version_str, offering,
|
||||
suffix=args.suffix),
|
||||
end="")
|
||||
print(format_version(args.variant, version_str, offering, suffix=args.suffix), end="")
|
||||
else:
|
||||
print(format_version(args.variant, version_str, offering,
|
||||
distance=distance, shorthash=current_hash_short,
|
||||
suffix=args.suffix),
|
||||
end="")
|
||||
print(
|
||||
format_version(
|
||||
args.variant, version_str, offering, distance=distance, shorthash=current_hash_short, suffix=args.suffix
|
||||
),
|
||||
end="",
|
||||
)
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
# logrotate configuration for Memgraph Enterprise
|
||||
# see "man logrotate" for details
|
||||
|
||||
/var/lib/memgraph/durability/audit/audit.log {
|
||||
/var/lib/memgraph/audit/audit.log {
|
||||
# rotate log files daily
|
||||
daily
|
||||
# keep one year worth of audit logs
|
||||
@@ -1,2 +0,0 @@
|
||||
# logrotate configuration for Memgraph Community
|
||||
# see "man logrotate" for details
|
||||
17
release/package/debian-11/Dockerfile
Normal file
17
release/package/debian-11/Dockerfile
Normal file
@@ -0,0 +1,17 @@
|
||||
FROM debian:11
|
||||
|
||||
ARG TOOLCHAIN_VERSION
|
||||
|
||||
# Stops tzdata interactive configuration.
|
||||
ENV DEBIAN_FRONTEND=noninteractive
|
||||
|
||||
RUN apt update && apt install -y \
|
||||
ca-certificates wget git
|
||||
# Do NOT be smart here and clean the cache because the container is used in the
|
||||
# stateful context.
|
||||
|
||||
RUN wget -q https://s3-eu-west-1.amazonaws.com/deps.memgraph.io/${TOOLCHAIN_VERSION}/${TOOLCHAIN_VERSION}-binaries-debian-11.tar.gz \
|
||||
-O ${TOOLCHAIN_VERSION}-binaries-debian-11.tar.gz \
|
||||
&& tar xzvf ${TOOLCHAIN_VERSION}-binaries-debian-11.tar.gz -C /opt
|
||||
|
||||
ENTRYPOINT ["sleep", "infinity"]
|
||||
@@ -16,6 +16,10 @@ services:
|
||||
build:
|
||||
context: debian-10
|
||||
container_name: "mgbuild_debian-10"
|
||||
mgbuild_debian-11:
|
||||
build:
|
||||
context: debian-11
|
||||
container_name: "mgbuild_debian-11"
|
||||
mgbuild_ubuntu-18.04:
|
||||
build:
|
||||
context: ubuntu-18.04
|
||||
|
||||
@@ -3,49 +3,49 @@
|
||||
set -Eeuo pipefail
|
||||
|
||||
SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
|
||||
SUPPORTED_OFFERING=(community enterprise)
|
||||
SUPPORTED_OS=(centos-7 centos-8 debian-9 debian-10 ubuntu-18.04 ubuntu-20.04)
|
||||
SUPPORTED_OS=(centos-7 centos-8 debian-9 debian-10 debian-11 ubuntu-18.04 ubuntu-20.04)
|
||||
PROJECT_ROOT="$SCRIPT_DIR/../.."
|
||||
TOOLCHAIN_VERSION="toolchain-v3"
|
||||
ACTIVATE_TOOLCHAIN="source /opt/${TOOLCHAIN_VERSION}/activate"
|
||||
HOST_OUTPUT_DIR="$PROJECT_ROOT/build/output"
|
||||
|
||||
print_help () {
|
||||
echo "$0 init|package {offering} {os} [--for-docker]|docker|test"
|
||||
echo "$0 init|package {os} [--for-docker|--for-platform]|docker|test"
|
||||
echo ""
|
||||
echo " offerings: ${SUPPORTED_OFFERING[*]}"
|
||||
echo " OSs: ${SUPPORTED_OS[*]}"
|
||||
exit 1
|
||||
}
|
||||
|
||||
make_package () {
|
||||
offering="$1"
|
||||
offering_flag=" -DMG_ENTERPRISE=OFF "
|
||||
if [[ "$offering" == "enterprise" ]]; then
|
||||
offering_flag=" -DMG_ENTERPRISE=ON "
|
||||
fi
|
||||
if [[ "$offering" == "community" ]]; then
|
||||
offering_flag=" -DMG_ENTERPRISE=OFF "
|
||||
fi
|
||||
os="$2"
|
||||
os="$1"
|
||||
|
||||
build_container="mgbuild_$os"
|
||||
echo "Building Memgraph for $os on $build_container..."
|
||||
|
||||
package_command=""
|
||||
if [[ "$os" =~ ^"centos".* ]]; then
|
||||
docker exec "$build_container" bash -c "yum -y update"
|
||||
package_command=" cpack -G RPM --config ../CPackConfig.cmake && rpmlint memgraph*.rpm "
|
||||
fi
|
||||
if [[ "$os" =~ ^"debian".* ]]; then
|
||||
docker exec "$build_container" bash -c "apt update"
|
||||
package_command=" cpack -G DEB --config ../CPackConfig.cmake "
|
||||
fi
|
||||
if [[ "$os" =~ ^"ubuntu".* ]]; then
|
||||
docker exec "$build_container" bash -c "apt update"
|
||||
package_command=" cpack -G DEB --config ../CPackConfig.cmake "
|
||||
fi
|
||||
docker_flag=" -DBUILD_FOR_DOCKER=OFF "
|
||||
if [[ "$#" -gt 2 ]]; then
|
||||
if [[ "$3" == "--for-docker" ]]; then
|
||||
docker_flag=" -DBUILD_FOR_DOCKER=ON "
|
||||
telemetry_id_override_flag=""
|
||||
if [[ "$#" -gt 1 ]]; then
|
||||
if [[ "$2" == "--for-docker" ]]; then
|
||||
telemetry_id_override_flag=" -DMG_TELEMETRY_ID_OVERRIDE=DOCKER "
|
||||
elif [[ "$2" == "--for-platform" ]]; then
|
||||
telemetry_id_override_flag=" -DMG_TELEMETRY_ID_OVERRIDE=DOCKER-PLATFORM"
|
||||
else
|
||||
print_help
|
||||
exit
|
||||
fi
|
||||
fi
|
||||
build_container="mgbuild_$os"
|
||||
echo "Building Memgraph $offering for $os on $build_container..."
|
||||
|
||||
echo "Copying project files..."
|
||||
# If master is not the current branch, fetch it, because the get_version
|
||||
@@ -74,7 +74,7 @@ make_package () {
|
||||
echo "Building targeted package..."
|
||||
docker exec "$build_container" bash -c "cd /memgraph && ./init"
|
||||
docker exec "$build_container" bash -c "cd $container_build_dir && rm -rf ./*"
|
||||
docker exec "$build_container" bash -c "cd $container_build_dir && $ACTIVATE_TOOLCHAIN && cmake -DCMAKE_BUILD_TYPE=release $offering_flag $docker_flag .."
|
||||
docker exec "$build_container" bash -c "cd $container_build_dir && $ACTIVATE_TOOLCHAIN && cmake -DCMAKE_BUILD_TYPE=release $telemetry_id_override_flag .."
|
||||
# ' is used instead of " because we need to run make within the allowed
|
||||
# container resources.
|
||||
# shellcheck disable=SC2016
|
||||
@@ -118,17 +118,9 @@ case "$1" in
|
||||
|
||||
package)
|
||||
shift 1
|
||||
if [[ "$#" -lt 2 ]]; then
|
||||
if [[ "$#" -lt 1 ]]; then
|
||||
print_help
|
||||
fi
|
||||
offering="$1"
|
||||
shift 1
|
||||
is_offering_ok=false
|
||||
for supported_offering in "${SUPPORTED_OFFERING[@]}"; do
|
||||
if [[ "$supported_offering" == "${offering}" ]]; then
|
||||
is_offering_ok=true
|
||||
fi
|
||||
done
|
||||
os="$1"
|
||||
shift 1
|
||||
is_os_ok=false
|
||||
@@ -137,8 +129,8 @@ case "$1" in
|
||||
is_os_ok=true
|
||||
fi
|
||||
done
|
||||
if [[ "$is_offering_ok" == true ]] && [[ "$is_os_ok" == true ]]; then
|
||||
make_package "$offering" "$os" "$@"
|
||||
if [[ "$is_os_ok" == true ]]; then
|
||||
make_package "$os" "$@"
|
||||
else
|
||||
print_help
|
||||
fi
|
||||
|
||||
@@ -1,138 +0,0 @@
|
||||
# -*- rpm-spec -*-
|
||||
BuildRoot: %_topdir/@CPACK_PACKAGE_FILE_NAME@@CPACK_RPM_PACKAGE_COMPONENT_PART_PATH@
|
||||
Summary: @CPACK_RPM_PACKAGE_SUMMARY@
|
||||
Name: @CPACK_RPM_PACKAGE_NAME@
|
||||
Version: @CPACK_RPM_PACKAGE_VERSION@
|
||||
Release: @CPACK_RPM_PACKAGE_RELEASE@
|
||||
License: @CPACK_RPM_PACKAGE_LICENSE@
|
||||
# Group field is deprecated
|
||||
# Group: @CPACK_RPM_PACKAGE_GROUP@
|
||||
Vendor: @CPACK_RPM_PACKAGE_VENDOR@
|
||||
BuildRequires: systemd
|
||||
|
||||
@TMP_RPM_URL@
|
||||
@TMP_RPM_REQUIRES@
|
||||
@TMP_RPM_REQUIRES_PRE@
|
||||
@TMP_RPM_REQUIRES_POST@
|
||||
@TMP_RPM_REQUIRES_PREUN@
|
||||
@TMP_RPM_REQUIRES_POSTUN@
|
||||
@TMP_RPM_PROVIDES@
|
||||
@TMP_RPM_OBSOLETES@
|
||||
@TMP_RPM_CONFLICTS@
|
||||
@TMP_RPM_AUTOPROV@
|
||||
@TMP_RPM_AUTOREQ@
|
||||
@TMP_RPM_AUTOREQPROV@
|
||||
@TMP_RPM_BUILDARCH@
|
||||
@TMP_RPM_PREFIXES@
|
||||
|
||||
@TMP_RPM_DEBUGINFO@
|
||||
|
||||
# This is needed to prevent Python compilation errors when building the RPM
|
||||
# package
|
||||
# https://github.com/scylladb/scylla/issues/2235
|
||||
%if 0%{?rhel} < 8
|
||||
%global __os_install_post \
|
||||
/usr/lib/rpm/redhat/brp-compress \
|
||||
%{!?__debug_package:\
|
||||
/usr/lib/rpm/redhat/brp-strip %{__strip} \
|
||||
/usr/lib/rpm/redhat/brp-strip-comment-note %{__strip} %{__objdump} \
|
||||
} \
|
||||
/usr/lib/rpm/redhat/brp-strip-static-archive %{__strip} \
|
||||
%{!?__jar_repack:/usr/lib/rpm/redhat/brp-java-repack-jars} \
|
||||
%{nil}
|
||||
%else
|
||||
%global __os_install_post \
|
||||
/usr/lib/rpm/brp-compress \
|
||||
%{!?__debug_package:\
|
||||
/usr/lib/rpm/brp-strip %{__strip} \
|
||||
/usr/lib/rpm/brp-strip-comment-note %{__strip} %{__objdump} \
|
||||
} \
|
||||
/usr/lib/rpm/brp-strip-static-archive %{__strip} \
|
||||
%{nil}
|
||||
%endif
|
||||
|
||||
%define _rpmdir %_topdir/RPMS
|
||||
%define _srcrpmdir %_topdir/SRPMS
|
||||
@FILE_NAME_DEFINE@
|
||||
%define _unpackaged_files_terminate_build 0
|
||||
@TMP_RPM_SPEC_INSTALL_POST@
|
||||
@CPACK_RPM_SPEC_MORE_DEFINE@
|
||||
@CPACK_RPM_COMPRESSION_TYPE_TMP@
|
||||
|
||||
%description
|
||||
@CPACK_RPM_PACKAGE_DESCRIPTION@
|
||||
|
||||
# This is a shortcutted spec file generated by CMake RPM generator
|
||||
# we skip _install step because CPack does that for us.
|
||||
# We do only save CPack installed tree in _prepr
|
||||
# and then restore it in build.
|
||||
%prep
|
||||
# Put the systemd unit where it is expected on this system
|
||||
mkdir -p $RPM_BUILD_ROOT/%{_unitdir}
|
||||
mv $RPM_BUILD_ROOT/lib/systemd/system/memgraph.service $RPM_BUILD_ROOT/%{_unitdir}
|
||||
rm -rf $RPM_BUILD_ROOT/lib
|
||||
# Fix the incorrect directory permissions set by cpack (this is fixed in CMake 3.11)
|
||||
find $RPM_BUILD_ROOT -type d | xargs chmod 755
|
||||
# After setting up custom prep, continue with CMake's default
|
||||
mv $RPM_BUILD_ROOT %_topdir/tmpBBroot
|
||||
|
||||
%install
|
||||
if [ -e $RPM_BUILD_ROOT ];
|
||||
then
|
||||
rm -rf $RPM_BUILD_ROOT
|
||||
fi
|
||||
mv %_topdir/tmpBBroot $RPM_BUILD_ROOT
|
||||
|
||||
@TMP_RPM_DEBUGINFO_INSTALL@
|
||||
|
||||
%clean
|
||||
|
||||
%post
|
||||
# memgraph user and group must be set in preinst
|
||||
chown memgraph:memgraph /var/lib/memgraph || exit 1
|
||||
chmod 750 /var/lib/memgraph || exit 1
|
||||
chown memgraph:adm /var/log/memgraph || exit 1
|
||||
chmod 750 /var/log/memgraph || exit 1
|
||||
|
||||
# Generate SSL certificates
|
||||
if [ ! -d /etc/memgraph/ssl ]; then
|
||||
mkdir /etc/memgraph/ssl || exit 1
|
||||
openssl req -x509 -newkey rsa:4096 -days 3650 -nodes \
|
||||
-keyout /etc/memgraph/ssl/key.pem -out /etc/memgraph/ssl/cert.pem \
|
||||
-subj "/C=GB/ST=London/L=London/O=Memgraph Ltd./CN=Memgraph DB" || exit 1
|
||||
chown memgraph:memgraph /etc/memgraph/ssl/* || exit 1
|
||||
chmod 400 /etc/memgraph/ssl/* || exit 1
|
||||
fi
|
||||
@RPM_SYMLINK_POSTINSTALL@
|
||||
@CPACK_RPM_SPEC_POSTINSTALL@
|
||||
|
||||
%postun
|
||||
@CPACK_RPM_SPEC_POSTUNINSTALL@
|
||||
|
||||
%pre
|
||||
# Add the 'memgraph' user and group
|
||||
getent group memgraph >/dev/null || groupadd -r memgraph || exit 1
|
||||
getent passwd memgraph >/dev/null || \
|
||||
useradd -r -g memgraph -d /var/lib/memgraph -s /bin/bash memgraph || exit 1
|
||||
echo "Don't forget to switch to the 'memgraph' user to use Memgraph" || exit 1
|
||||
@CPACK_RPM_SPEC_PREINSTALL@
|
||||
|
||||
%preun
|
||||
@CPACK_RPM_SPEC_PREUNINSTALL@
|
||||
|
||||
%files
|
||||
%defattr(@TMP_DEFAULT_FILE_PERMISSIONS@,@TMP_DEFAULT_USER@,@TMP_DEFAULT_GROUP@,@TMP_DEFAULT_DIR_PERMISSIONS@)
|
||||
@CPACK_RPM_INSTALL_FILES@
|
||||
# Since we moved the memgraph.service file, declare it explicitly here.
|
||||
# NOTE: memgraph.service must not be marked as configuration file.
|
||||
%{_unitdir}/memgraph.service
|
||||
|
||||
# Override CPACK_RPM_ABSOLUTE_INSTALL_FILES with our %config(noreplace), cpack
|
||||
# uses plain %config.
|
||||
%config(noreplace) "/etc/memgraph/memgraph.conf"
|
||||
%config(noreplace) "/etc/logrotate.d/memgraph"
|
||||
|
||||
@CPACK_RPM_USER_INSTALL_FILES@
|
||||
|
||||
%changelog
|
||||
@CPACK_RPM_SPEC_CHANGELOG@
|
||||
@@ -8,14 +8,16 @@ add_subdirectory(io)
|
||||
add_subdirectory(kvstore)
|
||||
add_subdirectory(telemetry)
|
||||
add_subdirectory(communication)
|
||||
add_subdirectory(memory)
|
||||
add_subdirectory(storage/v2)
|
||||
add_subdirectory(integrations)
|
||||
add_subdirectory(query)
|
||||
add_subdirectory(slk)
|
||||
add_subdirectory(rpc)
|
||||
add_subdirectory(auth)
|
||||
|
||||
if (MG_ENTERPRISE)
|
||||
add_subdirectory(audit)
|
||||
add_subdirectory(auth)
|
||||
endif()
|
||||
|
||||
string(TOLOWER ${CMAKE_BUILD_TYPE} lower_build_type)
|
||||
@@ -31,18 +33,14 @@ include_directories(${CMAKE_CURRENT_BINARY_DIR})
|
||||
set(mg_single_node_v2_sources
|
||||
glue/communication.cpp
|
||||
memgraph.cpp
|
||||
glue/auth.cpp
|
||||
)
|
||||
if (MG_ENTERPRISE)
|
||||
set(mg_single_node_v2_sources
|
||||
${mg_single_node_v2_sources}
|
||||
glue/auth.cpp)
|
||||
endif()
|
||||
|
||||
set(mg_single_node_v2_libs stdc++fs Threads::Threads
|
||||
telemetry_lib mg-query mg-communication mg-new-delete mg-utils)
|
||||
telemetry_lib mg-query mg-communication mg-memory mg-utils mg-auth)
|
||||
if (MG_ENTERPRISE)
|
||||
# These are enterprise subsystems
|
||||
set(mg_single_node_v2_libs ${mg_single_node_v2_libs} mg-auth mg-audit)
|
||||
set(mg_single_node_v2_libs ${mg_single_node_v2_libs} mg-audit)
|
||||
endif()
|
||||
|
||||
# memgraph main executable
|
||||
@@ -108,13 +106,9 @@ install(FILES ${CMAKE_SOURCE_DIR}/include/mg_procedure.h
|
||||
install(FILES ${CMAKE_BINARY_DIR}/config/memgraph.conf
|
||||
DESTINATION /etc/memgraph RENAME memgraph.conf)
|
||||
# Install logrotate configuration (must use absolute path).
|
||||
if (MG_ENTERPRISE)
|
||||
install(FILES ${CMAKE_SOURCE_DIR}/release/logrotate_enterprise.conf
|
||||
install(FILES ${CMAKE_SOURCE_DIR}/release/logrotate.conf
|
||||
DESTINATION /etc/logrotate.d RENAME memgraph)
|
||||
else()
|
||||
install(FILES ${CMAKE_SOURCE_DIR}/release/logrotate_community.conf
|
||||
DESTINATION /etc/logrotate.d RENAME memgraph)
|
||||
endif()
|
||||
|
||||
# Create empty directories for default location of lib and log.
|
||||
install(CODE "file(MAKE_DIRECTORY \$ENV{DESTDIR}/var/log/memgraph
|
||||
\$ENV{DESTDIR}/var/lib/memgraph)")
|
||||
|
||||
@@ -1,10 +1,20 @@
|
||||
// Copyright 2021 Memgraph Ltd.
|
||||
//
|
||||
// Licensed as a Memgraph Enterprise file under the Memgraph Enterprise
|
||||
// License (the "License"); by using this file, you agree to be bound by the terms of the License, and you may not use
|
||||
// this file except in compliance with the License. You may obtain a copy of the License at https://memgraph.com/legal.
|
||||
//
|
||||
//
|
||||
|
||||
#include "audit/log.hpp"
|
||||
|
||||
#include <chrono>
|
||||
#include <sstream>
|
||||
|
||||
#include <fmt/format.h>
|
||||
#include <json/json.hpp>
|
||||
|
||||
#include "storage/v2/temporal.hpp"
|
||||
#include "utils/logging.hpp"
|
||||
#include "utils/string.hpp"
|
||||
|
||||
@@ -42,6 +52,37 @@ inline nlohmann::json PropertyValueToJson(const storage::PropertyValue &pv) {
|
||||
}
|
||||
break;
|
||||
}
|
||||
case storage::PropertyValue::Type::TemporalData: {
|
||||
const auto temporal_data = pv.ValueTemporalData();
|
||||
auto to_string = [](auto temporal_data) {
|
||||
std::stringstream ss;
|
||||
const auto ms = temporal_data.microseconds;
|
||||
switch (temporal_data.type) {
|
||||
case storage::TemporalType::Date: {
|
||||
const auto date = utils::Date(ms);
|
||||
ss << date;
|
||||
return ss.str();
|
||||
}
|
||||
case storage::TemporalType::Duration: {
|
||||
const auto dur = utils::Duration(ms);
|
||||
ss << dur;
|
||||
return ss.str();
|
||||
}
|
||||
case storage::TemporalType::LocalTime: {
|
||||
const auto lt = utils::LocalTime(ms);
|
||||
ss << lt;
|
||||
return ss.str();
|
||||
}
|
||||
case storage::TemporalType::LocalDateTime: {
|
||||
const auto ldt = utils::LocalDateTime(ms);
|
||||
ss << ldt;
|
||||
return ss.str();
|
||||
}
|
||||
}
|
||||
};
|
||||
ret = to_string(temporal_data);
|
||||
break;
|
||||
}
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
@@ -1,3 +1,11 @@
|
||||
// Copyright 2021 Memgraph Ltd.
|
||||
//
|
||||
// Licensed as a Memgraph Enterprise file under the Memgraph Enterprise
|
||||
// License (the "License"); by using this file, you agree to be bound by the terms of the License, and you may not use
|
||||
// this file except in compliance with the License. You may obtain a copy of the License at https://memgraph.com/legal.
|
||||
//
|
||||
//
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <atomic>
|
||||
|
||||
@@ -1,3 +1,11 @@
|
||||
// Copyright 2021 Memgraph Ltd.
|
||||
//
|
||||
// Licensed as a Memgraph Enterprise file under the Memgraph Enterprise
|
||||
// License (the "License"); by using this file, you agree to be bound by the terms of the License, and you may not use
|
||||
// this file except in compliance with the License. You may obtain a copy of the License at https://memgraph.com/legal.
|
||||
//
|
||||
//
|
||||
|
||||
#include "auth/auth.hpp"
|
||||
|
||||
#include <cstring>
|
||||
@@ -9,7 +17,10 @@
|
||||
|
||||
#include "auth/exceptions.hpp"
|
||||
#include "utils/flag_validation.hpp"
|
||||
#include "utils/license.hpp"
|
||||
#include "utils/logging.hpp"
|
||||
#include "utils/message.hpp"
|
||||
#include "utils/settings.hpp"
|
||||
#include "utils/string.hpp"
|
||||
|
||||
DEFINE_VALIDATED_string(auth_module_executable, "", "Absolute path to the auth module executable that should be used.",
|
||||
@@ -58,6 +69,13 @@ Auth::Auth(const std::string &storage_directory) : storage_(storage_directory),
|
||||
|
||||
std::optional<User> Auth::Authenticate(const std::string &username, const std::string &password) {
|
||||
if (module_.IsUsed()) {
|
||||
const auto license_check_result = utils::license::global_license_checker.IsValidLicense(utils::global_settings);
|
||||
if (license_check_result.HasError()) {
|
||||
spdlog::warn(
|
||||
utils::license::LicenseCheckErrorToString(license_check_result.GetError(), "authentication modules"));
|
||||
return std::nullopt;
|
||||
}
|
||||
|
||||
nlohmann::json params = nlohmann::json::object();
|
||||
params["username"] = username;
|
||||
params["password"] = password;
|
||||
@@ -85,17 +103,15 @@ std::optional<User> Auth::Authenticate(const std::string &username, const std::s
|
||||
if (FLAGS_auth_module_create_missing_user) {
|
||||
user = AddUser(username, password);
|
||||
if (!user) {
|
||||
spdlog::warn(
|
||||
"Couldn't authenticate user '{}' using the auth module because "
|
||||
"the user already exists as a role!",
|
||||
username);
|
||||
spdlog::warn(utils::MessageWithLink(
|
||||
"Couldn't create the missing user '{}' using the auth module because the user already exists as a role.",
|
||||
username, "https://memgr.ph/auth"));
|
||||
return std::nullopt;
|
||||
}
|
||||
} else {
|
||||
spdlog::warn(
|
||||
"Couldn't authenticate user '{}' using the auth module because the "
|
||||
"user doesn't exist!",
|
||||
username);
|
||||
spdlog::warn(utils::MessageWithLink(
|
||||
"Couldn't authenticate user '{}' using the auth module because the user doesn't exist.", username,
|
||||
"https://memgr.ph/auth"));
|
||||
return std::nullopt;
|
||||
}
|
||||
} else {
|
||||
@@ -109,17 +125,16 @@ std::optional<User> Auth::Authenticate(const std::string &username, const std::s
|
||||
role = AddRole(rolename);
|
||||
if (!role) {
|
||||
spdlog::warn(
|
||||
"Couldn't authenticate user '{}' using the auth module "
|
||||
"because the user's role '{}' already exists as a user!",
|
||||
username, rolename);
|
||||
utils::MessageWithLink("Couldn't authenticate user '{}' using the auth module because the user's "
|
||||
"role '{}' already exists as a user.",
|
||||
username, rolename, "https://memgr.ph/auth"));
|
||||
return std::nullopt;
|
||||
}
|
||||
SaveRole(*role);
|
||||
} else {
|
||||
spdlog::warn(
|
||||
"Couldn't authenticate user '{}' using the auth module because "
|
||||
"the user's role '{}' doesn't exist!",
|
||||
username, rolename);
|
||||
spdlog::warn(utils::MessageWithLink(
|
||||
"Couldn't authenticate user '{}' using the auth module because the user's role '{}' doesn't exist.",
|
||||
username, rolename, "https://memgr.ph/auth"));
|
||||
return std::nullopt;
|
||||
}
|
||||
}
|
||||
@@ -133,11 +148,13 @@ std::optional<User> Auth::Authenticate(const std::string &username, const std::s
|
||||
} else {
|
||||
auto user = GetUser(username);
|
||||
if (!user) {
|
||||
spdlog::warn("Couldn't authenticate user '{}' because the user doesn't exist", username);
|
||||
spdlog::warn(utils::MessageWithLink("Couldn't authenticate user '{}' because the user doesn't exist.", username,
|
||||
"https://memgr.ph/auth"));
|
||||
return std::nullopt;
|
||||
}
|
||||
if (!user->CheckPassword(password)) {
|
||||
spdlog::warn("Couldn't authenticate user '{}'", username);
|
||||
spdlog::warn(utils::MessageWithLink("Couldn't authenticate user '{}' because the password is not correct.",
|
||||
username, "https://memgr.ph/auth"));
|
||||
return std::nullopt;
|
||||
}
|
||||
return user;
|
||||
|
||||
@@ -1,3 +1,11 @@
|
||||
// Copyright 2021 Memgraph Ltd.
|
||||
//
|
||||
// Licensed as a Memgraph Enterprise file under the Memgraph Enterprise
|
||||
// License (the "License"); by using this file, you agree to be bound by the terms of the License, and you may not use
|
||||
// this file except in compliance with the License. You may obtain a copy of the License at https://memgraph.com/legal.
|
||||
//
|
||||
//
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <mutex>
|
||||
@@ -8,6 +16,7 @@
|
||||
#include "auth/models.hpp"
|
||||
#include "auth/module.hpp"
|
||||
#include "kvstore/kvstore.hpp"
|
||||
#include "utils/settings.hpp"
|
||||
|
||||
namespace auth {
|
||||
|
||||
@@ -20,7 +29,7 @@ namespace auth {
|
||||
*/
|
||||
class Auth final {
|
||||
public:
|
||||
Auth(const std::string &storage_directory);
|
||||
explicit Auth(const std::string &storage_directory);
|
||||
|
||||
/**
|
||||
* Authenticates a user using his username and password.
|
||||
|
||||
@@ -1,3 +1,11 @@
|
||||
// Copyright 2021 Memgraph Ltd.
|
||||
//
|
||||
// Licensed as a Memgraph Enterprise file under the Memgraph Enterprise
|
||||
// License (the "License"); by using this file, you agree to be bound by the terms of the License, and you may not use
|
||||
// this file except in compliance with the License. You may obtain a copy of the License at https://memgraph.com/legal.
|
||||
//
|
||||
//
|
||||
|
||||
#include "auth/crypto.hpp"
|
||||
|
||||
#include <libbcrypt/bcrypt.h>
|
||||
|
||||
@@ -1,3 +1,11 @@
|
||||
// Copyright 2021 Memgraph Ltd.
|
||||
//
|
||||
// Licensed as a Memgraph Enterprise file under the Memgraph Enterprise
|
||||
// License (the "License"); by using this file, you agree to be bound by the terms of the License, and you may not use
|
||||
// this file except in compliance with the License. You may obtain a copy of the License at https://memgraph.com/legal.
|
||||
//
|
||||
//
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <string>
|
||||
|
||||
@@ -1,3 +1,14 @@
|
||||
// Copyright 2021 Memgraph Ltd.
|
||||
//
|
||||
// Use of this software is governed by the Business Source License
|
||||
// included in the file licenses/BSL.txt; by using this file, you agree to be bound by the terms of the Business Source
|
||||
// License, and you may not use this file except in compliance with the Business Source License.
|
||||
//
|
||||
// As of the Change Date specified in that file, in accordance with
|
||||
// the Business Source License, use of this software will be governed
|
||||
// by the Apache License, Version 2.0, included in the file
|
||||
// licenses/APL.txt.
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "utils/exceptions.hpp"
|
||||
|
||||
@@ -1,3 +1,11 @@
|
||||
// Copyright 2021 Memgraph Ltd.
|
||||
//
|
||||
// Licensed as a Memgraph Enterprise file under the Memgraph Enterprise
|
||||
// License (the "License"); by using this file, you agree to be bound by the terms of the License, and you may not use
|
||||
// this file except in compliance with the License. You may obtain a copy of the License at https://memgraph.com/legal.
|
||||
//
|
||||
//
|
||||
|
||||
#include "auth/models.hpp"
|
||||
|
||||
#include <regex>
|
||||
@@ -7,11 +15,16 @@
|
||||
#include "auth/crypto.hpp"
|
||||
#include "auth/exceptions.hpp"
|
||||
#include "utils/cast.hpp"
|
||||
#include "utils/license.hpp"
|
||||
#include "utils/settings.hpp"
|
||||
#include "utils/string.hpp"
|
||||
|
||||
// NOLINTNEXTLINE(cppcoreguidelines-avoid-non-const-global-variables)
|
||||
DEFINE_bool(auth_password_permit_null, true, "Set to false to disable null passwords.");
|
||||
|
||||
DEFINE_string(auth_password_strength_regex, ".+",
|
||||
constexpr std::string_view default_password_regex = ".+";
|
||||
// NOLINTNEXTLINE(cppcoreguidelines-avoid-non-const-global-variables)
|
||||
DEFINE_string(auth_password_strength_regex, default_password_regex.data(),
|
||||
"The regular expression that should be used to match the entire "
|
||||
"entered password to ensure its strength.");
|
||||
|
||||
@@ -80,7 +93,8 @@ PermissionLevel Permissions::Has(Permission permission) const {
|
||||
// Check for the deny first because it has greater priority than a grant.
|
||||
if (denies_ & utils::UnderlyingCast(permission)) {
|
||||
return PermissionLevel::DENY;
|
||||
} else if (grants_ & utils::UnderlyingCast(permission)) {
|
||||
}
|
||||
if (grants_ & utils::UnderlyingCast(permission)) {
|
||||
return PermissionLevel::GRANT;
|
||||
}
|
||||
return PermissionLevel::NEUTRAL;
|
||||
@@ -190,26 +204,38 @@ User::User(const std::string &username, const std::string &password_hash, const
|
||||
: username_(utils::ToLowerCase(username)), password_hash_(password_hash), permissions_(permissions) {}
|
||||
|
||||
bool User::CheckPassword(const std::string &password) {
|
||||
if (password_hash_ == "") return true;
|
||||
if (password_hash_.empty()) return true;
|
||||
return VerifyPassword(password, password_hash_);
|
||||
}
|
||||
|
||||
void User::UpdatePassword(const std::optional<std::string> &password) {
|
||||
if (password) {
|
||||
std::regex re(FLAGS_auth_password_strength_regex);
|
||||
if (!std::regex_match(*password, re)) {
|
||||
throw AuthException(
|
||||
"The user password doesn't conform to the required strength! Regex: "
|
||||
"{}",
|
||||
FLAGS_auth_password_strength_regex);
|
||||
}
|
||||
password_hash_ = EncryptPassword(*password);
|
||||
} else {
|
||||
if (!password) {
|
||||
if (!FLAGS_auth_password_permit_null) {
|
||||
throw AuthException("Null passwords aren't permitted!");
|
||||
}
|
||||
password_hash_ = "";
|
||||
return;
|
||||
}
|
||||
|
||||
if (FLAGS_auth_password_strength_regex != default_password_regex) {
|
||||
if (const auto license_check_result = utils::license::global_license_checker.IsValidLicense(utils::global_settings);
|
||||
license_check_result.HasError()) {
|
||||
throw AuthException(
|
||||
"Custom password regex is a Memgraph Enterprise feature. Please set the config "
|
||||
"(\"--auth-password-strength-regex\") to its default value (\"{}\") or remove the flag.\n{}",
|
||||
default_password_regex,
|
||||
utils::license::LicenseCheckErrorToString(license_check_result.GetError(), "password regex"));
|
||||
}
|
||||
}
|
||||
std::regex re(FLAGS_auth_password_strength_regex);
|
||||
if (!std::regex_match(*password, re)) {
|
||||
throw AuthException(
|
||||
"The user password doesn't conform to the required strength! Regex: "
|
||||
"\"{}\"",
|
||||
FLAGS_auth_password_strength_regex);
|
||||
}
|
||||
|
||||
password_hash_ = EncryptPassword(*password);
|
||||
}
|
||||
|
||||
void User::SetRole(const Role &role) { role_.emplace(role); }
|
||||
|
||||
@@ -1,3 +1,11 @@
|
||||
// Copyright 2021 Memgraph Ltd.
|
||||
//
|
||||
// Licensed as a Memgraph Enterprise file under the Memgraph Enterprise
|
||||
// License (the "License"); by using this file, you agree to be bound by the terms of the License, and you may not use
|
||||
// this file except in compliance with the License. You may obtain a copy of the License at https://memgraph.com/legal.
|
||||
//
|
||||
//
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <optional>
|
||||
|
||||
@@ -1,3 +1,11 @@
|
||||
// Copyright 2021 Memgraph Ltd.
|
||||
//
|
||||
// Licensed as a Memgraph Enterprise file under the Memgraph Enterprise
|
||||
// License (the "License"); by using this file, you agree to be bound by the terms of the License, and you may not use
|
||||
// this file except in compliance with the License. You may obtain a copy of the License at https://memgraph.com/legal.
|
||||
//
|
||||
//
|
||||
|
||||
#include "auth/module.hpp"
|
||||
|
||||
#include <cerrno>
|
||||
|
||||
@@ -1,3 +1,11 @@
|
||||
// Copyright 2021 Memgraph Ltd.
|
||||
//
|
||||
// Licensed as a Memgraph Enterprise file under the Memgraph Enterprise
|
||||
// License (the "License"); by using this file, you agree to be bound by the terms of the License, and you may not use
|
||||
// this file except in compliance with the License. You may obtain a copy of the License at https://memgraph.com/legal.
|
||||
//
|
||||
//
|
||||
|
||||
/// @file
|
||||
#pragma once
|
||||
|
||||
|
||||
@@ -1,3 +1,14 @@
|
||||
// Copyright 2021 Memgraph Ltd.
|
||||
//
|
||||
// Use of this software is governed by the Business Source License
|
||||
// included in the file licenses/BSL.txt; by using this file, you agree to be bound by the terms of the Business Source
|
||||
// License, and you may not use this file except in compliance with the Business Source License.
|
||||
//
|
||||
// As of the Change Date specified in that file, in accordance with
|
||||
// the Business Source License, use of this software will be governed
|
||||
// by the Apache License, Version 2.0, included in the file
|
||||
// licenses/APL.txt.
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "communication/bolt/v1/decoder/chunked_decoder_buffer.hpp"
|
||||
|
||||
@@ -1,3 +1,14 @@
|
||||
// Copyright 2021 Memgraph Ltd.
|
||||
//
|
||||
// Use of this software is governed by the Business Source License
|
||||
// included in the file licenses/BSL.txt; by using this file, you agree to be bound by the terms of the Business Source
|
||||
// License, and you may not use this file except in compliance with the Business Source License.
|
||||
//
|
||||
// As of the Change Date specified in that file, in accordance with
|
||||
// the Business Source License, use of this software will be governed
|
||||
// by the Apache License, Version 2.0, included in the file
|
||||
// licenses/APL.txt.
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <cstdint>
|
||||
@@ -30,6 +41,12 @@ enum class Signature : uint8_t {
|
||||
Relationship = 0x52,
|
||||
Path = 0x50,
|
||||
UnboundRelationship = 0x72,
|
||||
|
||||
/// Temporal data types
|
||||
Date = 0x44,
|
||||
Duration = 0x45,
|
||||
LocalDateTime = 0x64,
|
||||
LocalTime = 0x74,
|
||||
};
|
||||
|
||||
enum class Marker : uint8_t {
|
||||
|
||||
@@ -1,3 +1,14 @@
|
||||
// Copyright 2021 Memgraph Ltd.
|
||||
//
|
||||
// Use of this software is governed by the Business Source License
|
||||
// included in the file licenses/BSL.txt; by using this file, you agree to be bound by the terms of the Business Source
|
||||
// License, and you may not use this file except in compliance with the Business Source License.
|
||||
//
|
||||
// As of the Change Date specified in that file, in accordance with
|
||||
// the Business Source License, use of this software will be governed
|
||||
// by the Apache License, Version 2.0, included in the file
|
||||
// licenses/APL.txt.
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <cstddef>
|
||||
|
||||
@@ -1,3 +1,14 @@
|
||||
// Copyright 2021 Memgraph Ltd.
|
||||
//
|
||||
// Use of this software is governed by the Business Source License
|
||||
// included in the file licenses/BSL.txt; by using this file, you agree to be bound by the terms of the Business Source
|
||||
// License, and you may not use this file except in compliance with the Business Source License.
|
||||
//
|
||||
// As of the Change Date specified in that file, in accordance with
|
||||
// the Business Source License, use of this software will be governed
|
||||
// by the Apache License, Version 2.0, included in the file
|
||||
// licenses/APL.txt.
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <algorithm>
|
||||
|
||||
@@ -1,5 +1,18 @@
|
||||
// Copyright 2021 Memgraph Ltd.
|
||||
//
|
||||
// Use of this software is governed by the Business Source License
|
||||
// included in the file licenses/BSL.txt; by using this file, you agree to be bound by the terms of the Business Source
|
||||
// License, and you may not use this file except in compliance with the Business Source License.
|
||||
//
|
||||
// As of the Change Date specified in that file, in accordance with
|
||||
// the Business Source License, use of this software will be governed
|
||||
// by the Apache License, Version 2.0, included in the file
|
||||
// licenses/APL.txt.
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <array>
|
||||
#include <chrono>
|
||||
#include <string>
|
||||
|
||||
#include "communication/bolt/v1/codes.hpp"
|
||||
@@ -7,6 +20,7 @@
|
||||
#include "utils/cast.hpp"
|
||||
#include "utils/endian.hpp"
|
||||
#include "utils/logging.hpp"
|
||||
#include "utils/temporal.hpp"
|
||||
|
||||
namespace communication::bolt {
|
||||
|
||||
@@ -69,12 +83,37 @@ class Decoder {
|
||||
case Marker::Map16:
|
||||
case Marker::Map32:
|
||||
return ReadMap(marker, data);
|
||||
|
||||
case Marker::TinyStruct1: {
|
||||
uint8_t signature = 0;
|
||||
if (!buffer_.Read(&signature, 1)) {
|
||||
return false;
|
||||
}
|
||||
switch (static_cast<Signature>(signature)) {
|
||||
case Signature::Date:
|
||||
return ReadDate(data);
|
||||
case Signature::LocalTime:
|
||||
return ReadLocalTime(data);
|
||||
default:
|
||||
return false;
|
||||
}
|
||||
}
|
||||
case Marker::TinyStruct2: {
|
||||
uint8_t signature = 0;
|
||||
if (!buffer_.Read(&signature, 1)) {
|
||||
return false;
|
||||
}
|
||||
switch (static_cast<Signature>(signature)) {
|
||||
case Signature::LocalDateTime:
|
||||
return ReadLocalDateTime(data);
|
||||
default:
|
||||
return false;
|
||||
}
|
||||
}
|
||||
case Marker::TinyStruct3: {
|
||||
// For tiny struct 3 we will also read the Signature to switch between
|
||||
// vertex, unbounded_edge and path. Note that in those functions we
|
||||
// won't perform an additional signature read.
|
||||
uint8_t signature;
|
||||
uint8_t signature = 0;
|
||||
if (!buffer_.Read(&signature, 1)) {
|
||||
return false;
|
||||
}
|
||||
@@ -89,10 +128,30 @@ class Decoder {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
case Marker::TinyStruct5:
|
||||
return ReadEdge(marker, data);
|
||||
|
||||
case Marker::TinyStruct4: {
|
||||
uint8_t signature = 0;
|
||||
if (!buffer_.Read(&signature, 1)) {
|
||||
return false;
|
||||
}
|
||||
switch (static_cast<Signature>(signature)) {
|
||||
case Signature::Duration:
|
||||
return ReadDuration(data);
|
||||
default:
|
||||
return false;
|
||||
}
|
||||
}
|
||||
case Marker::TinyStruct5: {
|
||||
uint8_t signature = 0;
|
||||
if (!buffer_.Read(&signature, 1)) {
|
||||
return false;
|
||||
}
|
||||
switch (static_cast<Signature>(signature)) {
|
||||
case Signature::Relationship:
|
||||
return ReadEdge(data);
|
||||
default:
|
||||
return false;
|
||||
}
|
||||
}
|
||||
default:
|
||||
if ((value & 0xF0) == utils::UnderlyingCast(Marker::TinyString)) {
|
||||
return ReadString(marker, data);
|
||||
@@ -351,24 +410,11 @@ class Decoder {
|
||||
return true;
|
||||
}
|
||||
|
||||
bool ReadEdge(const Marker &marker, Value *data) {
|
||||
uint8_t value;
|
||||
bool ReadEdge(Value *data) {
|
||||
Value dv;
|
||||
*data = Value(Edge());
|
||||
auto &edge = data->ValueEdge();
|
||||
|
||||
if (!buffer_.Read(&value, 1)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
// check header
|
||||
if (marker != Marker::TinyStruct5) {
|
||||
return false;
|
||||
}
|
||||
if (value != utils::UnderlyingCast(Signature::Relationship)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
// read ID
|
||||
if (!ReadValue(&dv, Value::Type::Int)) {
|
||||
return false;
|
||||
@@ -468,5 +514,81 @@ class Decoder {
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
bool ReadDate(Value *data) {
|
||||
Value dv;
|
||||
if (!ReadValue(&dv, Value::Type::Int)) {
|
||||
return false;
|
||||
}
|
||||
const auto chrono_days = std::chrono::days(dv.ValueInt());
|
||||
const auto sys_days = std::chrono::sys_days(chrono_days);
|
||||
const auto date = std::chrono::year_month_day(sys_days);
|
||||
*data = Value(utils::Date(
|
||||
{static_cast<int>(date.year()), static_cast<unsigned>(date.month()), static_cast<unsigned>(date.day())}));
|
||||
return true;
|
||||
}
|
||||
|
||||
bool ReadLocalTime(Value *data) {
|
||||
Value dv;
|
||||
if (!ReadValue(&dv, Value::Type::Int)) {
|
||||
return false;
|
||||
}
|
||||
namespace chrono = std::chrono;
|
||||
const auto nanos = chrono::nanoseconds(dv.ValueInt());
|
||||
const auto microseconds = chrono::duration_cast<chrono::microseconds>(nanos);
|
||||
*data = Value(utils::LocalTime(microseconds.count()));
|
||||
return true;
|
||||
}
|
||||
|
||||
bool ReadLocalDateTime(Value *data) {
|
||||
Value secs;
|
||||
if (!ReadValue(&secs, Value::Type::Int)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
Value nanos;
|
||||
if (!ReadValue(&nanos, Value::Type::Int)) {
|
||||
return false;
|
||||
}
|
||||
namespace chrono = std::chrono;
|
||||
const auto chrono_seconds = chrono::seconds(secs.ValueInt());
|
||||
const auto sys_seconds = chrono::sys_seconds(chrono_seconds);
|
||||
const auto sys_days = chrono::time_point_cast<chrono::days>(sys_seconds);
|
||||
const auto date = chrono::year_month_day(sys_days);
|
||||
|
||||
const auto ldt = utils::Date(
|
||||
{static_cast<int>(date.year()), static_cast<unsigned>(date.month()), static_cast<unsigned>(date.day())});
|
||||
|
||||
auto secs_leftover = chrono::seconds(sys_seconds - sys_days);
|
||||
const auto h = utils::GetAndSubtractDuration<chrono::hours>(secs_leftover);
|
||||
const auto m = utils::GetAndSubtractDuration<chrono::minutes>(secs_leftover);
|
||||
const auto s = secs_leftover.count();
|
||||
auto nanos_leftover = chrono::nanoseconds(nanos.ValueInt());
|
||||
const auto ml = utils::GetAndSubtractDuration<chrono::milliseconds>(nanos_leftover);
|
||||
const auto mi = chrono::duration_cast<chrono::microseconds>(nanos_leftover).count();
|
||||
const auto params = utils::LocalTimeParameters{h, m, s, ml, mi};
|
||||
const auto tm = utils::LocalTime(params);
|
||||
*data = utils::LocalDateTime(ldt, tm);
|
||||
return true;
|
||||
}
|
||||
|
||||
bool ReadDuration(Value *data) {
|
||||
Value dv;
|
||||
std::array<int64_t, 4> values{0};
|
||||
for (auto &val : values) {
|
||||
if (!ReadValue(&dv, Value::Type::Int)) {
|
||||
return false;
|
||||
}
|
||||
val = dv.ValueInt();
|
||||
}
|
||||
namespace chrono = std::chrono;
|
||||
const auto months = chrono::months(values[0]);
|
||||
const auto days = chrono::days(values[1]);
|
||||
const auto secs = chrono::seconds(values[2]);
|
||||
const auto nanos = chrono::nanoseconds(values[3]);
|
||||
const auto micros = months + days + secs + chrono::duration_cast<chrono::microseconds>(nanos);
|
||||
*data = Value(utils::Duration(micros.count()));
|
||||
return true;
|
||||
}
|
||||
};
|
||||
} // namespace communication::bolt
|
||||
|
||||
@@ -1,3 +1,14 @@
|
||||
// Copyright 2021 Memgraph Ltd.
|
||||
//
|
||||
// Use of this software is governed by the Business Source License
|
||||
// included in the file licenses/BSL.txt; by using this file, you agree to be bound by the terms of the Business Source
|
||||
// License, and you may not use this file except in compliance with the Business Source License.
|
||||
//
|
||||
// As of the Change Date specified in that file, in accordance with
|
||||
// the Business Source License, use of this software will be governed
|
||||
// by the Apache License, Version 2.0, included in the file
|
||||
// licenses/APL.txt.
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <type_traits>
|
||||
@@ -15,7 +26,8 @@ namespace communication::bolt {
|
||||
|
||||
/**
|
||||
* Bolt BaseEncoder. Has public interfaces for writing Bolt encoded data.
|
||||
* Supported types are: Null, Bool, Int, Double, String, List, Map, Vertex, Edge
|
||||
* Supported types are: Null, Bool, Int, Double, String, List, Map, Vertex,
|
||||
* Edge, Date, LocalDate, LocalDateTime, Duration.
|
||||
*
|
||||
* The purpose of this class is to stream bolt data into the given Buffer.
|
||||
*
|
||||
@@ -89,6 +101,7 @@ class BaseEncoder {
|
||||
WriteTypeSize(value.size(), MarkerString);
|
||||
WriteRAW(value.c_str(), value.size());
|
||||
}
|
||||
|
||||
void WriteList(const std::vector<Value> &value) {
|
||||
WriteTypeSize(value.size(), MarkerList);
|
||||
for (auto &x : value) WriteValue(x);
|
||||
@@ -168,6 +181,37 @@ class BaseEncoder {
|
||||
for (auto &i : path.indices) WriteInt(i);
|
||||
}
|
||||
|
||||
void WriteDate(const utils::Date &date) {
|
||||
WriteRAW(utils::UnderlyingCast(Marker::TinyStruct1));
|
||||
WriteRAW(utils::UnderlyingCast(Signature::Date));
|
||||
WriteInt(date.DaysSinceEpoch());
|
||||
}
|
||||
|
||||
void WriteLocalTime(const utils::LocalTime &local_time) {
|
||||
WriteRAW(utils::UnderlyingCast(Marker::TinyStruct1));
|
||||
WriteRAW(utils::UnderlyingCast(Signature::LocalTime));
|
||||
WriteInt(local_time.NanosecondsSinceEpoch());
|
||||
}
|
||||
|
||||
void WriteLocalDateTime(const utils::LocalDateTime &local_date_time) {
|
||||
WriteRAW(utils::UnderlyingCast(Marker::TinyStruct2));
|
||||
WriteRAW(utils::UnderlyingCast(Signature::LocalDateTime));
|
||||
WriteInt(local_date_time.SecondsSinceEpoch());
|
||||
WriteInt(local_date_time.SubSecondsAsNanoseconds());
|
||||
}
|
||||
|
||||
void WriteDuration(const utils::Duration &duration) {
|
||||
WriteRAW(utils::UnderlyingCast(Marker::TinyStruct4));
|
||||
WriteRAW(utils::UnderlyingCast(Signature::Duration));
|
||||
// This shall always be zero because internally we store microseconds
|
||||
// and converting months to microseconds is an approximation. However,
|
||||
// for the encoder, we implement ReadInt() to support the neo4j driver.
|
||||
WriteInt(0);
|
||||
WriteInt(duration.Days());
|
||||
WriteInt(duration.SubDaysAsSeconds());
|
||||
WriteInt(duration.SubSecondsAsNanoseconds());
|
||||
}
|
||||
|
||||
void WriteValue(const Value &value) {
|
||||
switch (value.type()) {
|
||||
case Value::Type::Null:
|
||||
@@ -203,6 +247,18 @@ class BaseEncoder {
|
||||
case Value::Type::Path:
|
||||
WritePath(value.ValuePath());
|
||||
break;
|
||||
case Value::Type::Date:
|
||||
WriteDate(value.ValueDate());
|
||||
break;
|
||||
case Value::Type::LocalTime:
|
||||
WriteLocalTime(value.ValueLocalTime());
|
||||
break;
|
||||
case Value::Type::LocalDateTime:
|
||||
WriteLocalDateTime(value.ValueLocalDateTime());
|
||||
break;
|
||||
case Value::Type::Duration:
|
||||
WriteDuration(value.ValueDuration());
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -1,3 +1,14 @@
|
||||
// Copyright 2021 Memgraph Ltd.
|
||||
//
|
||||
// Use of this software is governed by the Business Source License
|
||||
// included in the file licenses/BSL.txt; by using this file, you agree to be bound by the terms of the Business Source
|
||||
// License, and you may not use this file except in compliance with the Business Source License.
|
||||
//
|
||||
// As of the Change Date specified in that file, in accordance with
|
||||
// the Business Source License, use of this software will be governed
|
||||
// by the Apache License, Version 2.0, included in the file
|
||||
// licenses/APL.txt.
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <algorithm>
|
||||
|
||||
@@ -1,3 +1,14 @@
|
||||
// Copyright 2021 Memgraph Ltd.
|
||||
//
|
||||
// Use of this software is governed by the Business Source License
|
||||
// included in the file licenses/BSL.txt; by using this file, you agree to be bound by the terms of the Business Source
|
||||
// License, and you may not use this file except in compliance with the Business Source License.
|
||||
//
|
||||
// As of the Change Date specified in that file, in accordance with
|
||||
// the Business Source License, use of this software will be governed
|
||||
// by the Apache License, Version 2.0, included in the file
|
||||
// licenses/APL.txt.
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "communication/bolt/v1/codes.hpp"
|
||||
|
||||
@@ -1,3 +1,14 @@
|
||||
// Copyright 2021 Memgraph Ltd.
|
||||
//
|
||||
// Use of this software is governed by the Business Source License
|
||||
// included in the file licenses/BSL.txt; by using this file, you agree to be bound by the terms of the Business Source
|
||||
// License, and you may not use this file except in compliance with the Business Source License.
|
||||
//
|
||||
// As of the Change Date specified in that file, in accordance with
|
||||
// the Business Source License, use of this software will be governed
|
||||
// by the Apache License, Version 2.0, included in the file
|
||||
// licenses/APL.txt.
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "communication/bolt/v1/codes.hpp"
|
||||
|
||||
@@ -1,3 +1,14 @@
|
||||
// Copyright 2021 Memgraph Ltd.
|
||||
//
|
||||
// Use of this software is governed by the Business Source License
|
||||
// included in the file licenses/BSL.txt; by using this file, you agree to be bound by the terms of the Business Source
|
||||
// License, and you may not use this file except in compliance with the Business Source License.
|
||||
//
|
||||
// As of the Change Date specified in that file, in accordance with
|
||||
// the Business Source License, use of this software will be governed
|
||||
// by the Apache License, Version 2.0, included in the file
|
||||
// licenses/APL.txt.
|
||||
|
||||
/// @file
|
||||
|
||||
#pragma once
|
||||
|
||||
@@ -1,3 +1,14 @@
|
||||
// Copyright 2021 Memgraph Ltd.
|
||||
//
|
||||
// Use of this software is governed by the Business Source License
|
||||
// included in the file licenses/BSL.txt; by using this file, you agree to be bound by the terms of the Business Source
|
||||
// License, and you may not use this file except in compliance with the Business Source License.
|
||||
//
|
||||
// As of the Change Date specified in that file, in accordance with
|
||||
// the Business Source License, use of this software will be governed
|
||||
// by the Apache License, Version 2.0, included in the file
|
||||
// licenses/APL.txt.
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <optional>
|
||||
|
||||
@@ -1,3 +1,14 @@
|
||||
// Copyright 2021 Memgraph Ltd.
|
||||
//
|
||||
// Use of this software is governed by the Business Source License
|
||||
// included in the file licenses/BSL.txt; by using this file, you agree to be bound by the terms of the Business Source
|
||||
// License, and you may not use this file except in compliance with the Business Source License.
|
||||
//
|
||||
// As of the Change Date specified in that file, in accordance with
|
||||
// the Business Source License, use of this software will be governed
|
||||
// by the Apache License, Version 2.0, included in the file
|
||||
// licenses/APL.txt.
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <cstdint>
|
||||
|
||||
@@ -1,3 +1,14 @@
|
||||
// Copyright 2021 Memgraph Ltd.
|
||||
//
|
||||
// Use of this software is governed by the Business Source License
|
||||
// included in the file licenses/BSL.txt; by using this file, you agree to be bound by the terms of the Business Source
|
||||
// License, and you may not use this file except in compliance with the Business Source License.
|
||||
//
|
||||
// As of the Change Date specified in that file, in accordance with
|
||||
// the Business Source License, use of this software will be governed
|
||||
// by the Apache License, Version 2.0, included in the file
|
||||
// licenses/APL.txt.
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <fmt/format.h>
|
||||
|
||||
@@ -1,3 +1,14 @@
|
||||
// Copyright 2021 Memgraph Ltd.
|
||||
//
|
||||
// Use of this software is governed by the Business Source License
|
||||
// included in the file licenses/BSL.txt; by using this file, you agree to be bound by the terms of the Business Source
|
||||
// License, and you may not use this file except in compliance with the Business Source License.
|
||||
//
|
||||
// As of the Change Date specified in that file, in accordance with
|
||||
// the Business Source License, use of this software will be governed
|
||||
// by the Apache License, Version 2.0, included in the file
|
||||
// licenses/APL.txt.
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <map>
|
||||
@@ -12,6 +23,7 @@
|
||||
#include "communication/exceptions.hpp"
|
||||
#include "utils/likely.hpp"
|
||||
#include "utils/logging.hpp"
|
||||
#include "utils/message.hpp"
|
||||
|
||||
namespace communication::bolt {
|
||||
|
||||
@@ -53,7 +65,8 @@ inline std::pair<std::string, std::string> ExceptionToErrorMessage(const std::ex
|
||||
// All exceptions used in memgraph are derived from BasicException. Since
|
||||
// we caught some other exception we don't know what is going on. Return
|
||||
// DatabaseError, log real message and return generic string.
|
||||
spdlog::error("Unknown exception occurred during query execution {}", e.what());
|
||||
spdlog::error(
|
||||
utils::MessageWithLink("Unknown exception occurred during query execution {}.", e.what(), "https://memgr.ph/unknown"));
|
||||
return {"Memgraph.DatabaseError.MemgraphError.MemgraphError",
|
||||
"An unknown exception occurred, this is unexpected. Real message "
|
||||
"should be in database logs."};
|
||||
|
||||
@@ -1,3 +1,14 @@
|
||||
// Copyright 2021 Memgraph Ltd.
|
||||
//
|
||||
// Use of this software is governed by the Business Source License
|
||||
// included in the file licenses/BSL.txt; by using this file, you agree to be bound by the terms of the Business Source
|
||||
// License, and you may not use this file except in compliance with the Business Source License.
|
||||
//
|
||||
// As of the Change Date specified in that file, in accordance with
|
||||
// the Business Source License, use of this software will be governed
|
||||
// by the Apache License, Version 2.0, included in the file
|
||||
// licenses/APL.txt.
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <fmt/format.h>
|
||||
|
||||
@@ -1,3 +1,14 @@
|
||||
// Copyright 2021 Memgraph Ltd.
|
||||
//
|
||||
// Use of this software is governed by the Business Source License
|
||||
// included in the file licenses/BSL.txt; by using this file, you agree to be bound by the terms of the Business Source
|
||||
// License, and you may not use this file except in compliance with the Business Source License.
|
||||
//
|
||||
// As of the Change Date specified in that file, in accordance with
|
||||
// the Business Source License, use of this software will be governed
|
||||
// by the Apache License, Version 2.0, included in the file
|
||||
// licenses/APL.txt.
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <fmt/format.h>
|
||||
|
||||
@@ -1,3 +1,14 @@
|
||||
// Copyright 2021 Memgraph Ltd.
|
||||
//
|
||||
// Use of this software is governed by the Business Source License
|
||||
// included in the file licenses/BSL.txt; by using this file, you agree to be bound by the terms of the Business Source
|
||||
// License, and you may not use this file except in compliance with the Business Source License.
|
||||
//
|
||||
// As of the Change Date specified in that file, in accordance with
|
||||
// the Business Source License, use of this software will be governed
|
||||
// by the Apache License, Version 2.0, included in the file
|
||||
// licenses/APL.txt.
|
||||
|
||||
#include "communication/bolt/v1/value.hpp"
|
||||
|
||||
#include "utils/algorithm.hpp"
|
||||
@@ -39,6 +50,10 @@ DEF_GETTER_BY_REF(Vertex, Vertex, vertex_v)
|
||||
DEF_GETTER_BY_REF(Edge, Edge, edge_v)
|
||||
DEF_GETTER_BY_REF(UnboundedEdge, UnboundedEdge, unbounded_edge_v)
|
||||
DEF_GETTER_BY_REF(Path, Path, path_v)
|
||||
DEF_GETTER_BY_REF(Date, utils::Date, date_v)
|
||||
DEF_GETTER_BY_REF(LocalTime, utils::LocalTime, local_time_v)
|
||||
DEF_GETTER_BY_REF(LocalDateTime, utils::LocalDateTime, local_date_time_v)
|
||||
DEF_GETTER_BY_REF(Duration, utils::Duration, duration_v)
|
||||
|
||||
#undef DEF_GETTER_BY_REF
|
||||
|
||||
@@ -76,6 +91,18 @@ Value::Value(const Value &other) : type_(other.type_) {
|
||||
case Type::Path:
|
||||
new (&path_v) Path(other.path_v);
|
||||
return;
|
||||
case Type::Date:
|
||||
new (&date_v) utils::Date(other.date_v);
|
||||
return;
|
||||
case Type::LocalTime:
|
||||
new (&local_time_v) utils::LocalTime(other.local_time_v);
|
||||
return;
|
||||
case Type::LocalDateTime:
|
||||
new (&local_date_time_v) utils::LocalDateTime(other.local_date_time_v);
|
||||
return;
|
||||
case Type::Duration:
|
||||
new (&duration_v) utils::Duration(other.duration_v);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -118,6 +145,18 @@ Value &Value::operator=(const Value &other) {
|
||||
case Type::Path:
|
||||
new (&path_v) Path(other.path_v);
|
||||
return *this;
|
||||
case Type::Date:
|
||||
new (&date_v) utils::Date(other.date_v);
|
||||
return *this;
|
||||
case Type::LocalTime:
|
||||
new (&local_time_v) utils::LocalTime(other.local_time_v);
|
||||
return *this;
|
||||
case Type::LocalDateTime:
|
||||
new (&local_date_time_v) utils::LocalDateTime(other.local_date_time_v);
|
||||
return *this;
|
||||
case Type::Duration:
|
||||
new (&duration_v) utils::Duration(other.duration_v);
|
||||
return *this;
|
||||
}
|
||||
}
|
||||
return *this;
|
||||
@@ -157,6 +196,18 @@ Value::Value(Value &&other) noexcept : type_(other.type_) {
|
||||
case Type::Path:
|
||||
new (&path_v) Path(std::move(other.path_v));
|
||||
break;
|
||||
case Type::Date:
|
||||
new (&date_v) utils::Date(other.date_v);
|
||||
break;
|
||||
case Type::LocalTime:
|
||||
new (&local_time_v) utils::LocalTime(other.local_time_v);
|
||||
break;
|
||||
case Type::LocalDateTime:
|
||||
new (&local_date_time_v) utils::LocalDateTime(other.local_date_time_v);
|
||||
break;
|
||||
case Type::Duration:
|
||||
new (&duration_v) utils::Duration(other.duration_v);
|
||||
break;
|
||||
}
|
||||
|
||||
// reset the type of other
|
||||
@@ -203,6 +254,18 @@ Value &Value::operator=(Value &&other) noexcept {
|
||||
case Type::Path:
|
||||
new (&path_v) Path(std::move(other.path_v));
|
||||
break;
|
||||
case Type::Date:
|
||||
new (&date_v) utils::Date(other.date_v);
|
||||
break;
|
||||
case Type::LocalTime:
|
||||
new (&local_time_v) utils::LocalTime(other.local_time_v);
|
||||
break;
|
||||
case Type::LocalDateTime:
|
||||
new (&local_date_time_v) utils::LocalDateTime(other.local_date_time_v);
|
||||
break;
|
||||
case Type::Duration:
|
||||
new (&duration_v) utils::Duration(other.duration_v);
|
||||
break;
|
||||
}
|
||||
|
||||
// reset the type of other
|
||||
@@ -249,6 +312,18 @@ Value::~Value() {
|
||||
case Type::Path:
|
||||
path_v.~Path();
|
||||
return;
|
||||
case Type::Date:
|
||||
date_v.~Date();
|
||||
return;
|
||||
case Type::LocalTime:
|
||||
local_time_v.~LocalTime();
|
||||
return;
|
||||
case Type::LocalDateTime:
|
||||
local_date_time_v.~LocalDateTime();
|
||||
return;
|
||||
case Type::Duration:
|
||||
duration_v.~Duration();
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -341,6 +416,14 @@ std::ostream &operator<<(std::ostream &os, const Value &value) {
|
||||
return os << value.ValueUnboundedEdge();
|
||||
case Value::Type::Path:
|
||||
return os << value.ValuePath();
|
||||
case Value::Type::Date:
|
||||
return os << value.ValueDate();
|
||||
case Value::Type::LocalTime:
|
||||
return os << value.ValueLocalTime();
|
||||
case Value::Type::LocalDateTime:
|
||||
return os << value.ValueLocalDateTime();
|
||||
case Value::Type::Duration:
|
||||
return os << value.ValueDuration();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -368,6 +451,14 @@ std::ostream &operator<<(std::ostream &os, const Value::Type type) {
|
||||
return os << "unbounded_edge";
|
||||
case Value::Type::Path:
|
||||
return os << "path";
|
||||
case Value::Type::Date:
|
||||
return os << "date";
|
||||
case Value::Type::LocalTime:
|
||||
return os << "local_time";
|
||||
case Value::Type::LocalDateTime:
|
||||
return os << "local_date_time";
|
||||
case Value::Type::Duration:
|
||||
return os << "duration";
|
||||
}
|
||||
}
|
||||
} // namespace communication::bolt
|
||||
|
||||
@@ -1,3 +1,14 @@
|
||||
// Copyright 2021 Memgraph Ltd.
|
||||
//
|
||||
// Use of this software is governed by the Business Source License
|
||||
// included in the file licenses/BSL.txt; by using this file, you agree to be bound by the terms of the Business Source
|
||||
// License, and you may not use this file except in compliance with the Business Source License.
|
||||
//
|
||||
// As of the Change Date specified in that file, in accordance with
|
||||
// the Business Source License, use of this software will be governed
|
||||
// by the Apache License, Version 2.0, included in the file
|
||||
// licenses/APL.txt.
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <algorithm>
|
||||
@@ -7,6 +18,7 @@
|
||||
|
||||
#include "utils/cast.hpp"
|
||||
#include "utils/exceptions.hpp"
|
||||
#include "utils/temporal.hpp"
|
||||
|
||||
namespace communication::bolt {
|
||||
|
||||
@@ -120,7 +132,23 @@ class Value {
|
||||
Value() : type_(Type::Null) {}
|
||||
|
||||
/** Types that can be stored in a Value. */
|
||||
enum class Type : unsigned { Null, Bool, Int, Double, String, List, Map, Vertex, Edge, UnboundedEdge, Path };
|
||||
enum class Type : unsigned {
|
||||
Null,
|
||||
Bool,
|
||||
Int,
|
||||
Double,
|
||||
String,
|
||||
List,
|
||||
Map,
|
||||
Vertex,
|
||||
Edge,
|
||||
UnboundedEdge,
|
||||
Path,
|
||||
Date,
|
||||
LocalTime,
|
||||
LocalDateTime,
|
||||
Duration
|
||||
};
|
||||
|
||||
// constructors for primitive types
|
||||
Value(bool value) : type_(Type::Bool) { bool_v = value; }
|
||||
@@ -139,7 +167,12 @@ class Value {
|
||||
Value(const Edge &value) : type_(Type::Edge) { new (&edge_v) Edge(value); }
|
||||
Value(const UnboundedEdge &value) : type_(Type::UnboundedEdge) { new (&unbounded_edge_v) UnboundedEdge(value); }
|
||||
Value(const Path &value) : type_(Type::Path) { new (&path_v) Path(value); }
|
||||
|
||||
Value(const utils::Date &date) : type_(Type::Date) { new (&date_v) utils::Date(date); }
|
||||
Value(const utils::LocalTime &time) : type_(Type::LocalTime) { new (&local_time_v) utils::LocalTime(time); }
|
||||
Value(const utils::LocalDateTime &date_time) : type_(Type::LocalDateTime) {
|
||||
new (&local_date_time_v) utils::LocalDateTime(date_time);
|
||||
}
|
||||
Value(const utils::Duration &dur) : type_(Type::Duration) { new (&duration_v) utils::Duration(dur); }
|
||||
// move constructors for non-primitive values
|
||||
Value(std::string &&value) noexcept : type_(Type::String) { new (&string_v) std::string(std::move(value)); }
|
||||
Value(std::vector<Value> &&value) noexcept : type_(Type::List) { new (&list_v) std::vector<Value>(std::move(value)); }
|
||||
@@ -183,7 +216,10 @@ class Value {
|
||||
DECL_GETTER_BY_REFERENCE(Edge, Edge)
|
||||
DECL_GETTER_BY_REFERENCE(UnboundedEdge, UnboundedEdge)
|
||||
DECL_GETTER_BY_REFERENCE(Path, Path)
|
||||
|
||||
DECL_GETTER_BY_REFERENCE(Date, utils::Date)
|
||||
DECL_GETTER_BY_REFERENCE(LocalTime, utils::LocalTime)
|
||||
DECL_GETTER_BY_REFERENCE(LocalDateTime, utils::LocalDateTime)
|
||||
DECL_GETTER_BY_REFERENCE(Duration, utils::Duration)
|
||||
#undef DECL_GETTER_BY_REFERNCE
|
||||
|
||||
#define TYPE_CHECKER(type) \
|
||||
@@ -199,7 +235,10 @@ class Value {
|
||||
TYPE_CHECKER(Edge)
|
||||
TYPE_CHECKER(UnboundedEdge)
|
||||
TYPE_CHECKER(Path)
|
||||
|
||||
TYPE_CHECKER(Date)
|
||||
TYPE_CHECKER(LocalTime)
|
||||
TYPE_CHECKER(LocalDateTime)
|
||||
TYPE_CHECKER(Duration)
|
||||
#undef TYPE_CHECKER
|
||||
|
||||
friend std::ostream &operator<<(std::ostream &os, const Value &value);
|
||||
@@ -219,9 +258,12 @@ class Value {
|
||||
Edge edge_v;
|
||||
UnboundedEdge unbounded_edge_v;
|
||||
Path path_v;
|
||||
utils::Date date_v;
|
||||
utils::LocalTime local_time_v;
|
||||
utils::LocalDateTime local_date_time_v;
|
||||
utils::Duration duration_v;
|
||||
};
|
||||
};
|
||||
|
||||
/**
|
||||
* An exception raised by the Value system.
|
||||
*/
|
||||
|
||||
@@ -1,3 +1,14 @@
|
||||
// Copyright 2021 Memgraph Ltd.
|
||||
//
|
||||
// Use of this software is governed by the Business Source License
|
||||
// included in the file licenses/BSL.txt; by using this file, you agree to be bound by the terms of the Business Source
|
||||
// License, and you may not use this file except in compliance with the Business Source License.
|
||||
//
|
||||
// As of the Change Date specified in that file, in accordance with
|
||||
// the Business Source License, use of this software will be governed
|
||||
// by the Apache License, Version 2.0, included in the file
|
||||
// licenses/APL.txt.
|
||||
|
||||
#include "communication/buffer.hpp"
|
||||
|
||||
#include "utils/logging.hpp"
|
||||
|
||||
@@ -1,3 +1,14 @@
|
||||
// Copyright 2021 Memgraph Ltd.
|
||||
//
|
||||
// Use of this software is governed by the Business Source License
|
||||
// included in the file licenses/BSL.txt; by using this file, you agree to be bound by the terms of the Business Source
|
||||
// License, and you may not use this file except in compliance with the Business Source License.
|
||||
//
|
||||
// As of the Change Date specified in that file, in accordance with
|
||||
// the Business Source License, use of this software will be governed
|
||||
// by the Apache License, Version 2.0, included in the file
|
||||
// licenses/APL.txt.
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <vector>
|
||||
|
||||
@@ -1,3 +1,14 @@
|
||||
// Copyright 2021 Memgraph Ltd.
|
||||
//
|
||||
// Use of this software is governed by the Business Source License
|
||||
// included in the file licenses/BSL.txt; by using this file, you agree to be bound by the terms of the Business Source
|
||||
// License, and you may not use this file except in compliance with the Business Source License.
|
||||
//
|
||||
// As of the Change Date specified in that file, in accordance with
|
||||
// the Business Source License, use of this software will be governed
|
||||
// by the Apache License, Version 2.0, included in the file
|
||||
// licenses/APL.txt.
|
||||
|
||||
#include "communication/client.hpp"
|
||||
|
||||
#include "communication/helpers.hpp"
|
||||
|
||||
@@ -1,3 +1,14 @@
|
||||
// Copyright 2021 Memgraph Ltd.
|
||||
//
|
||||
// Use of this software is governed by the Business Source License
|
||||
// included in the file licenses/BSL.txt; by using this file, you agree to be bound by the terms of the Business Source
|
||||
// License, and you may not use this file except in compliance with the Business Source License.
|
||||
//
|
||||
// As of the Change Date specified in that file, in accordance with
|
||||
// the Business Source License, use of this software will be governed
|
||||
// by the Apache License, Version 2.0, included in the file
|
||||
// licenses/APL.txt.
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <openssl/bio.h>
|
||||
|
||||
@@ -1,3 +1,14 @@
|
||||
// Copyright 2021 Memgraph Ltd.
|
||||
//
|
||||
// Use of this software is governed by the Business Source License
|
||||
// included in the file licenses/BSL.txt; by using this file, you agree to be bound by the terms of the Business Source
|
||||
// License, and you may not use this file except in compliance with the Business Source License.
|
||||
//
|
||||
// As of the Change Date specified in that file, in accordance with
|
||||
// the Business Source License, use of this software will be governed
|
||||
// by the Apache License, Version 2.0, included in the file
|
||||
// licenses/APL.txt.
|
||||
|
||||
#include "communication/context.hpp"
|
||||
|
||||
#include "utils/logging.hpp"
|
||||
|
||||
@@ -1,3 +1,14 @@
|
||||
// Copyright 2021 Memgraph Ltd.
|
||||
//
|
||||
// Use of this software is governed by the Business Source License
|
||||
// included in the file licenses/BSL.txt; by using this file, you agree to be bound by the terms of the Business Source
|
||||
// License, and you may not use this file except in compliance with the Business Source License.
|
||||
//
|
||||
// As of the Change Date specified in that file, in accordance with
|
||||
// the Business Source License, use of this software will be governed
|
||||
// by the Apache License, Version 2.0, included in the file
|
||||
// licenses/APL.txt.
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <string>
|
||||
|
||||
@@ -1,3 +1,14 @@
|
||||
// Copyright 2021 Memgraph Ltd.
|
||||
//
|
||||
// Use of this software is governed by the Business Source License
|
||||
// included in the file licenses/BSL.txt; by using this file, you agree to be bound by the terms of the Business Source
|
||||
// License, and you may not use this file except in compliance with the Business Source License.
|
||||
//
|
||||
// As of the Change Date specified in that file, in accordance with
|
||||
// the Business Source License, use of this software will be governed
|
||||
// by the Apache License, Version 2.0, included in the file
|
||||
// licenses/APL.txt.
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "utils/exceptions.hpp"
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user