specialweb / gremlin-dsl
Gremlin DSL PHP integration
Requires
- php: >=8.0
- ext-json: *
Requires (Dev)
- nette/php-generator: ^v4.0.0
- phpcompatibility/php-compatibility: ^9.3
- phpunit/phpunit: ^9.5
- squizlabs/php_codesniffer: ^3.7
- symfony/console: ^6.0
- symfony/var-dumper: ^6.0
Suggests
- brightzone/gremlin-php: gremlin-server client for php
Replaces
- dev-main
- 1.0.1
- 1.0.0
- 0.5.0
- 0.4.2
- 0.4.1
- 0.4.0
- 0.3.0
- 0.2.2
- 0.2.1
- 0.2.0
- 0.1.0
- dev-dependabot/composer/phpunit/phpunit-tw-9.5or-tw-10.0
- dev-dependabot/maven/generator/org.apache.tinkerpop-tinkerpop-3.6.2
- dev-dependabot/github_actions/actions/checkout-3.3.0
- dev-dependabot/github_actions/php-actions/phpunit-9
This package is auto-updated.
Last update: 2024-10-30 01:32:09 UTC
README
Information
As the original repository was discontinued this is the continuing package to work with.
Introduction
Gremlin is a graph traversal language developed by Apache TinkerPop.
Many graph vendors like Neo4j, Azure Cosmos, AWS Neptune and many more supports Gremlin.
This package provides a basic integration of gremlin for php applications.
This version is built from TinkerPop v3.6.1.
Installation
composer require specialweb/gremlin-dsl
Configuration
This packages provides a static Configuration Class with some configuration options.
You can either configure it from array:
use SpecialWeb\GremlinDSL\Configuration; /** @var \Brightzone\GremlinDriver\Connection $connection */ $connection = null; Configuration::fromConfig([ 'sendClosure' => function (string $traversalString) use ($connection) { return $connection->send($traversalString); }, 'enableShortFunctions' => true, ]);
or set the desired settings directly:
use SpecialWeb\GremlinDSL\Configuration; /** @var \Brightzone\GremlinDriver\Connection $connection */ $connection = null; Configuration::getInstance() ->setSendClosure(function (string $traversalString) use ($connection) { return $connection->send($traversalString); }) ->enableShortFunctions() ;
Usage
Just install the package and begin traversing.
<?php require_once 'vendor/autoload.php'; echo \SpecialWeb\GremlinDSL\Traversal\GraphTraversal::g() ->V(1)->out('knows')->has('age', new \SpecialWeb\GremlinDSL\Traversal\Predicates\Gt(30))->values('name'); # g.V(1).out("knows").has("age", gt(30)).values("name")
Sending the graph traversal string
There is a pseudo send
step provided with this package.
You can either globally configure a closure for the send step or provide it with every call.
<?php require_once 'vendor/autoload.php'; use SpecialWeb\GremlinDSL\Configuration; /** @var \Brightzone\GremlinDriver\Connection $connection */ $connection = null; $sendClosure = function (string $traversalString) use ($connection) { return $connection->send($traversalString); }; Configuration::getInstance()->setSendClosure($sendClosure); g()->V(1)->out("knows")->has("age", gt(30))->values("name")->send(); # or g()->V(1)->out("knows")->has("age", gt(30))->values("name")->send($sendClosure);
Instead of a closure you can also provide an instance of SendClosureInterface.
use SpecialWeb\GremlinDSL\Traversal\SendClosureInterface; use SpecialWeb\GremlinDSL\Traversal\GraphTraversalInterface; class SendClosure implements SendClosureInterface { public function __invoke(GraphTraversalInterface $graphTraversal, string $traversalString) { // handle the send } }
Short functions
Short functions are simplifying the graph traversal generation and usage of predicates.
You've to enable GREMLIN_DSL_REGISTER_GLOBAL_FUNCTIONS
,
manually load e.g. resources/predicates.php
or call Configuration::enableShortFunctions()
to make short functions available.
<?php require_once 'vendor/autoload.php'; \SpecialWeb\GremlinDSL\Configuration::getInstance()->enableShortFunctions(); g()->V(1)->out('knows')->has('age', gt(30))->values('name'); # g.V(1).out("knows").has("age", gt(30)).values("name")
With GREMLIN_DSL_REGISTER_GLOBAL_FUNCTIONS
constant:
<?php define('GREMLIN_DSL_REGISTER_GLOBAL_FUNCTIONS', true); require_once 'vendor/autoload.php'; # With GREMLIN_DSL_REGISTER_GLOBAL_FUNCTIONS enabled: g()->V(1)->out('knows')->has('age', gt(30))->values('name'); # g.V(1).out("knows").has("age", gt(30)).values("name")
Development
DSL generation
The DSL generation is based on the java base-classes.
To (re)generate the DSL just call make generate
that will first generate the JSON methods structure and afterwards the php file generation.
Generate JSON only
Just call make generate-json
or mvn -f generator -P glv-json compile
Generate PHP only
To e.g. adjust the php file generation you can either call php generate.php [dsl:generate [<in-file>]]
or make generate-php