The London Perl and Raku Workshop takes place on 26th Oct 2024. If your company depends on Perl, please consider sponsoring and/or attending.

NAME

Neo4j::Driver::Record - Container for Cypher result values

VERSION

version 0.14

SYNOPSIS

 use Neo4j::Driver;
 my $session = Neo4j::Driver->new->basic_auth(...)->session;
 
 my $query = 'MATCH (m:Movie) RETURN m.name, m.year';
 my $records = $session->run($query)->list;
 foreach my $record ( @$records ) {
   say $record->get('m.name');
 }
 
 $query .= ' ORDER BY m.year LIMIT 1';
 my $record = $session->run($query)->single;
 say 'Year of oldest movie: ', $record->get(1);

DESCRIPTION

Container for Cypher result values. Records are returned from Cypher statement execution, contained within a StatementResult. A record is a form of ordered map and, as such, contained values can be accessed by either positional index or textual key.

METHODS

Neo4j::Driver::Record implements the following methods.

get

 my $value1 = $record->get('field_key');
 my $value2 = $record->get(2);

Get a value from this record, either by field key or by zero-based index.

If there is only a single field, get may be called without parameters.

 my $value = $session->run('RETURN "It works!"')->single->get;
 my $value = $session->run('RETURN "two", "fields"')->single->get;  # fails

When retrieving values from records, Neo4j types are converted to Perl types as shown in the following table.

 Neo4j type      resulting Perl type
 ----------      -------------------
 Number          scalar
 String          scalar
 Boolean         JSON::PP::true or JSON::PP::false
 null            undef
 
 Node            Neo4j::Driver::Type::Node
 Relationship    Neo4j::Driver::Type::Relationship
 Path            Neo4j::Driver::Type::Path
 
 List            array reference
 Map             hash reference

Boolean values are returned as JSON types; use !! to force-convert to a plain Perl boolean value if necessary.

Note that early versions of this class returned nodes, relationships and paths as hashrefs or arrayrefs rather than blessed objects. This was a bug. The underlying data structure of nodes and relationships is an implementation detail that should not be relied upon. If you try to treat Neo4j::Driver::Type::Node, Neo4j::Driver::Type::Relationship or Neo4j::Driver::Type::Path objects as hashrefs or arrayrefs, your code will eventually fail with a future version of this driver.

data

 my $hashref = $record->data;
 my $value = $hashref->{field_key};

Return the keys and values of this record as a hash reference.

EXPERIMENTAL FEATURES

Neo4j::Driver::Record implements the following experimental features. These are subject to unannounced modification or removal in future versions. Expect your code to break if you depend upon these features.

column_keys

 my $size = $record->{column_keys}->count;
 $record->{column_keys}->add('new_field_key');

Allows adding new columns to the record's field key / index resolution used by the get method. Can be used to synthesize 'virtual' fields based on other data in the result. The new fields can then be accessed just like regular columns.

graph

 my $nodes = $record->{graph}->{nodes};
 my $rels  = $record->{graph}->{relationships};

Allows accessing the graph response the Neo4j server can deliver via HTTP. Requires the return_graph field to be set on the Transaction before the statement is executed.

meta

 my $meta = $record->{meta};

Allows accessing the entity meta data that some versions of the Neo4j server provide.

SEE ALSO

Neo4j::Driver, Neo4j::Driver::Type::Node, Neo4j::Driver::Type::Relationship, Neo4j::Driver::Type::Path, Neo4j Java Driver, Neo4j JavaScript Driver, Neo4j .NET Driver

AUTHOR

Arne Johannessen <ajnn@cpan.org>

COPYRIGHT AND LICENSE

This software is Copyright (c) 2016-2019 by Arne Johannessen.

This is free software, licensed under:

  The Artistic License 2.0 (GPL Compatible)