UNPKG

@neo4j/graphql

Version:

A GraphQL to Cypher query execution layer for Neo4j and JavaScript GraphQL implementations

90 lines 3.78 kB
"use strict"; /* * Copyright (c) "Neo4j" * Neo4j Sweden AB [http://neo4j.com] * * This file is part of Neo4j. * * 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. */ var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.ParamInputField = void 0; const cypher_builder_1 = __importDefault(require("@neo4j/cypher-builder")); const InputField_1 = require("./InputField"); // TODO: this should be the default case (PropertyInputField) /** Input field from a parameter * it will generate a set operation from param, if a Cypher.Variable or Param is passed, it will be used * otherwise, the value will be wrapped in a param * * ```cypher * CREATE (var0:Movie) * SET * this.id = $param0 * ``` */ class ParamInputField extends InputField_1.InputField { constructor({ attribute, attachedTo, inputValue, }) { super(attribute.name, attachedTo); this.attribute = attribute; this.inputValue = inputValue; } getChildren() { return []; } getSetParams(queryASTContext, _inputVariable) { const target = this.getTarget(queryASTContext); let rightVariable; if (this.inputValue instanceof cypher_builder_1.default.Variable) { rightVariable = this.inputValue; } else { rightVariable = new cypher_builder_1.default.Param(this.inputValue); } const leftExpr = target.property(this.attribute.databaseName); const rightExpr = this.coerceReference(rightVariable); const setField = [leftExpr, rightExpr]; return [setField]; } coerceReference(variable) { if (this.attribute.typeHelper.isSpatial()) { if (!this.attribute.typeHelper.isList()) { return cypher_builder_1.default.point(variable); } const comprehensionVar = new cypher_builder_1.default.Variable(); const mapPoint = cypher_builder_1.default.point(comprehensionVar); return new cypher_builder_1.default.ListComprehension(comprehensionVar, variable).map(mapPoint); } if (this.attribute.typeHelper.isDateTime()) { if (!this.attribute.typeHelper.isList()) { return cypher_builder_1.default.datetime(variable); } const comprehensionVar = new cypher_builder_1.default.Variable(); const mapDateTime = cypher_builder_1.default.datetime(comprehensionVar); return new cypher_builder_1.default.ListComprehension(comprehensionVar, variable).map(mapDateTime); } if (this.attribute.typeHelper.isTime()) { if (!this.attribute.typeHelper.isList()) { return cypher_builder_1.default.time(variable); } const comprehensionVar = new cypher_builder_1.default.Variable(); const mapTime = cypher_builder_1.default.time(comprehensionVar); return new cypher_builder_1.default.ListComprehension(comprehensionVar, variable).map(mapTime); } return variable; } } exports.ParamInputField = ParamInputField; //# sourceMappingURL=ParamInputField.js.map