| /* |
| * Licensed to the Apache Software Foundation (ASF) under one |
| * or more contributor license agreements. See the NOTICE file |
| * distributed with this work for additional information |
| * regarding copyright ownership. The ASF licenses this file |
| * to you 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. |
| */ |
| 'use strict'; |
| const cassandra = require('cassandra-driver'); |
| const async = require('async'); |
| |
| /** |
| * Example using async library for avoiding nested callbacks |
| * See https://github.com/caolan/async |
| * |
| * Inserts some vertex and edges: http://tinkerpop.apache.org/docs/3.1.1-incubating/reference/#_the_graph_structure |
| */ |
| |
| const client = new cassandra.Client({ |
| contactPoints: ['127.0.0.1'], |
| profiles: [ |
| // Set the graph name in the default execution profile |
| new cassandra.ExecutionProfile('default', { |
| graphOptions: { name: 'example_graph' } |
| }) |
| ] |
| }); |
| |
| const modernSchema = |
| 'schema.config().option("graph.allow_scan").set("true");\n' + |
| 'schema.propertyKey("name").Text().ifNotExists().create();\n' + |
| 'schema.propertyKey("age").Int().ifNotExists().create();\n' + |
| 'schema.propertyKey("relationship_weight").Float().ifNotExists().create();\n' + |
| 'schema.vertexLabel("person").properties("name", "age").ifNotExists().create();\n' + |
| 'schema.edgeLabel("knows").properties("relationship_weight").connection("person", "person").ifNotExists().create();'; |
| |
| const modernGraph = |
| 'Vertex marko = graph.addVertex(label, "person", "name", "marko", "age", 29);\n' + |
| 'Vertex vadas = graph.addVertex(label, "person", "name", "vadas", "age", 27);\n' + |
| 'marko.addEdge("knows", vadas, "relationship_weight", 0.5f);\n'; |
| |
| async.series([ |
| function connect(next) { |
| client.connect(next); |
| }, |
| function createGraph(next) { |
| const query = 'system.graph("example_graph").ifNotExists().create();'; |
| // As the graph "example_graph" does not exist yet and |
| // it is a system query, we need to set the graph name to `null` |
| client.executeGraph(query, null, { graphName: null }, next); |
| }, |
| function createSchema(next) { |
| client.executeGraph(modernSchema, next); |
| }, |
| function createVerticesAndEdges(next) { |
| client.executeGraph(modernGraph, next); |
| }, |
| function retrieveVertices(next) { |
| client.executeGraph('g.V()', function (err, result) { |
| if (err) { |
| return next(err); |
| } |
| const vertex = result.first(); |
| console.log('First vertex: ', vertex); |
| next(); |
| }); |
| } |
| ], function (err) { |
| if (err) { |
| console.error('There was an error', err.message, err.stack); |
| } |
| console.log('Shutting down'); |
| client.shutdown(); |
| }); |