packages feed

hydra-0.15.0: src/main/haskell/Hydra/Sources/Cypher/Functions.hs

module Hydra.Sources.Cypher.Functions where

data CypherFunction = CypherFunction {
  cypherFunctionName :: String,
  cypherFunctionKeyword :: Maybe String,
  cypherFunctionForms :: [CypherFunctionForm]} deriving (Eq, Ord, Show)

data CypherFunctionForm = CypherFunctionForm {
  cypherFunctionFormSignature :: String,
  cypherFunctionFormDescription :: String} deriving (Eq, Ord, Show)

data CypherLibrary = CypherLibrary {
  cypherLibraryName :: String,
  cypherLibraryDescription :: String,
  cypherLibraryFunctions :: [CypherFunction]} deriving (Eq, Ord, Show)

cypherLibraries :: [CypherLibrary]
cypherLibraries = [
  CypherLibrary "Aggregate" "aggregate functions" [
    CypherFunction "avg" (Just "AVG") [
      CypherFunctionForm
        "avg(input :: DURATION) :: DURATION"
        "Returns the average of a set of DURATION values.",
      CypherFunctionForm
        "avg(input :: FLOAT) :: FLOAT"
        "Returns the average of a set of FLOAT values.",
      CypherFunctionForm
        "avg(input :: INTEGER) :: INTEGER"
        "Returns the average of a set of INTEGER values."],
    CypherFunction "collect" (Just "COLLECT") [CypherFunctionForm
      "collect(input :: ANY) :: LIST<ANY>"
      "Returns a list containing the values returned by an expression."],
    CypherFunction "count" (Just "COUNT") [CypherFunctionForm
      "count(input :: ANY) :: INTEGER"
      "Returns the number of values or rows."],
    CypherFunction "max" (Just "MAX") [CypherFunctionForm
      "max(input :: ANY) :: ANY"
      "Returns the maximum value in a set of values."],
    CypherFunction "min" (Just "MIN") [CypherFunctionForm
      "min(input :: ANY) :: ANY"
      "Returns the minimum value in a set of values."],
    CypherFunction "percentileCont" Nothing [CypherFunctionForm
      "percentileCont(input :: FLOAT, percentile :: FLOAT) :: FLOAT"
      "Returns the percentile of a value over a group using linear interpolation."],
    CypherFunction "percentileDisc" Nothing [
      CypherFunctionForm
        "percentileDisc(input :: FLOAT, percentile :: FLOAT) :: FLOAT"
        "Returns the nearest FLOAT value to the given percentile over a group using a rounding method.",
      CypherFunctionForm
        "percentileDisc(input :: INTEGER, percentile :: FLOAT) :: INTEGER"
        "Returns the nearest INTEGER value to the given percentile over a group using a rounding method."],
    CypherFunction "stdev" Nothing [CypherFunctionForm
      "stdev(input :: FLOAT) :: FLOAT"
      "Returns the standard deviation for the given value over a group for a sample of a population."],
    CypherFunction "stdevp" Nothing [CypherFunctionForm
      "stdevp(input :: FLOAT) :: FLOAT"
      "Returns the standard deviation for the given value over a group for an entire population."],
    CypherFunction "sum" (Just "SUM") [
      CypherFunctionForm
        "sum(input :: DURATION) :: DURATION"
        "Returns the sum of a set of DURATION values.",
      CypherFunctionForm
        "sum(input :: FLOAT) :: FLOAT"
        "Returns the sum of a set of FLOAT values.",
      CypherFunctionForm
        "sum(input :: INTEGER) :: INTEGER"
        "Returns the sum of a set of INTEGER values."]],

  CypherLibrary "Database" "database functions" [
    CypherFunction "db.nameFromElementId" Nothing [CypherFunctionForm
      "db.nameFromElementId(name :: STRING) :: STRING"
      "Resolves the database name from the given element id. Introduced in 5.12."]],

  CypherLibrary "GenAI" "genAI functions" [
    CypherFunction "genai.vector.encode" Nothing [CypherFunctionForm
      "genai.vector.encode(resource :: STRING, provider :: STRING, configuration :: MAP = {}) :: LIST<FLOAT>"
      "Encode a given resource as a vector using the named provider. Introduced in 5.17."]],

  CypherLibrary "Graph" "graph functions" [
    CypherFunction "graph.byElementId" Nothing [CypherFunctionForm
      "USE graph.byElementId(elementId :: STRING)"
      "Resolves the constituent graph to which a given element id belongs. Introduced in 5.13."],
    CypherFunction "graph.byName" Nothing [CypherFunctionForm
      "USE graph.byName(name :: STRING)"
      "Resolves a constituent graph by name."],
    CypherFunction "graph.names" Nothing [CypherFunctionForm
      "graph.names() :: LIST<STRING>"
      "Returns a list containing the names of all graphs in the current composite database."],
    CypherFunction "graph.propertiesByName" Nothing [CypherFunctionForm
      "graph.propertiesByName(name :: STRING) :: MAP"
      "Returns a map containing the properties associated with the given graph."]],

  CypherLibrary "List" "list functions" [
    CypherFunction "keys" Nothing [
      CypherFunctionForm
        "keys(input :: MAP) :: LIST<STRING>"
        "Returns a LIST<STRING> containing the STRING representations for all the property names of a MAP.",
      CypherFunctionForm
        "keys(input :: NODE) :: LIST<STRING>"
        "Returns a LIST<STRING> containing the STRING representations for all the property names of a NODE.",
      CypherFunctionForm
        "keys(input :: RELATIONSHIP) :: LIST<STRING>"
        "Returns a LIST<STRING> containing the STRING representations for all the property names of a RELATIONSHIP."],
    CypherFunction "labels" Nothing [CypherFunctionForm
      "labels(input :: NODE) :: LIST<STRING>"
      "Returns a LIST<STRING> containing the STRING representations for all the labels of a NODE."],
    CypherFunction "nodes" Nothing [CypherFunctionForm
      "nodes(input :: PATH) :: LIST<NODE>"
      "Returns a LIST<NODE> containing all the NODE values in a PATH."],
    CypherFunction "range" Nothing [
      CypherFunctionForm
        "range(start :: INTEGER, end :: INTEGER) :: LIST<INTEGER>"
        "Returns a LIST<INTEGER> comprising all INTEGER values within a specified range.",
      CypherFunctionForm
        "range(start :: INTEGER, end :: INTEGER, step :: INTEGER) :: LIST<INTEGER>"
        "Returns a LIST<INTEGER> comprising all INTEGER values within a specified range created with step length."],
    CypherFunction "reduce" Nothing [CypherFunctionForm
      "reduce(accumulator :: VARIABLE = initial :: ANY, variable :: VARIABLE IN list :: LIST<ANY> | expression :: ANY) :: ANY"
      "Runs an expression against individual elements of a LIST<ANY>, storing the result of the expression in an accumulator."],
    CypherFunction "relationships" Nothing [CypherFunctionForm
      "relationships(input :: PATH) :: LIST<RELATIONSHIP>"
      "Returns a LIST<RELATIONSHIP> containing all the RELATIONSHIP values in a PATH."],
    CypherFunction "reverse" Nothing [CypherFunctionForm
      "reverse(input :: LIST<ANY>) :: LIST<ANY>"
      "Returns a LIST<ANY> in which the order of all elements in the given LIST<ANY> have been reversed."],
    CypherFunction "tail" Nothing [CypherFunctionForm
      "tail(input :: LIST<ANY>) :: LIST<ANY>"
      "Returns all but the first element in a LIST<ANY>."],
    CypherFunction "toBooleanList" Nothing [CypherFunctionForm
      "toBooleanList(input :: LIST<ANY>) :: LIST<BOOLEAN>"
      "Converts a LIST<ANY> of values to a LIST<BOOLEAN> values. If any values are not convertible to BOOLEAN they will be null in the LIST<BOOLEAN> returned."],
    CypherFunction "toFloatList" Nothing [CypherFunctionForm
      "toFloatList(input :: LIST<ANY>) :: LIST<FLOAT>"
      "Converts a LIST<ANY> to a LIST<FLOAT> values. If any values are not convertible to FLOAT they will be null in the LIST<FLOAT> returned."],
    CypherFunction "toIntegerList" Nothing [CypherFunctionForm
      "toIntegerList(input :: LIST<ANY>) :: LIST<INTEGER>"
      "Converts a LIST<ANY> to a LIST<INTEGER> values. If any values are not convertible to INTEGER they will be null in the LIST<INTEGER> returned."],
    CypherFunction "toStringList" Nothing [CypherFunctionForm
      "toStringList(input :: LIST<ANY>) :: LIST<STRING>"
      "Converts a LIST<ANY> to a LIST<STRING> values. If any values are not convertible to STRING they will be null in the LIST<STRING> returned."]],

  CypherLibrary "LoadCSV" "load CSV functions" [
    CypherFunction "file" Nothing [CypherFunctionForm
      "file() :: STRING"
      "Returns the absolute path of the file that LOAD CSV is using."],
    CypherFunction "linenumber" Nothing [CypherFunctionForm
      "linenumber() :: INTEGER"
      "Returns the line number that LOAD CSV is currently using."]],

  CypherLibrary "Logarithmic" "logarithmic functions" [
    CypherFunction "e" Nothing [CypherFunctionForm
      "e() :: FLOAT"
      "Returns the base of the natural logarithm, e."],
    CypherFunction "exp" Nothing [CypherFunctionForm
      "exp(input :: FLOAT) :: FLOAT"
      "Returns e^n, where e is the base of the natural logarithm, and n is the value of the argument expression."],
    CypherFunction "log" Nothing [CypherFunctionForm
      "log(input :: FLOAT) :: FLOAT"
      "Returns the natural logarithm of a FLOAT."],
    CypherFunction "log10" Nothing [CypherFunctionForm
      "log10(input :: FLOAT) :: FLOAT"
      "Returns the common logarithm (base 10) of a FLOAT."],
    CypherFunction "sqrt" Nothing [CypherFunctionForm
      "sqrt(input :: FLOAT) :: FLOAT"
      "Returns the square root of a FLOAT."]],

  CypherLibrary "Numeric" "numeric functions" [
    CypherFunction "abs" Nothing [
      CypherFunctionForm
        "abs(input :: FLOAT) :: FLOAT"
        "Returns the absolute value of a FLOAT.",
      CypherFunctionForm
        "abs(input :: INTEGER) :: INTEGER"
        "Returns the absolute value of an INTEGER."],
    CypherFunction "ceil" Nothing [CypherFunctionForm
      "ceil(input :: FLOAT) :: FLOAT"
      "Returns the smallest FLOAT that is greater than or equal to a number and equal to an INTEGER."],
    CypherFunction "floor" Nothing [CypherFunctionForm
      "floor(input :: FLOAT) :: FLOAT"
      "Returns the largest FLOAT that is less than or equal to a number and equal to an INTEGER."],
    CypherFunction "isNaN" Nothing [
      CypherFunctionForm
        "isNaN(input :: FLOAT) :: BOOLEAN"
        "Returns true if the floating point number is NaN.",
      CypherFunctionForm
        "isNaN(input :: INTEGER) :: BOOLEAN"
        "Returns true if the integer number is NaN."],
    CypherFunction "rand" Nothing [CypherFunctionForm
      "rand() :: FLOAT"
      "Returns a random FLOAT in the range from 0 (inclusive) to 1 (exclusive)."],
    CypherFunction "round" Nothing [
      CypherFunctionForm
        "round(input :: FLOAT) :: FLOAT"
        "Returns the value of a number rounded to the nearest INTEGER.",
      CypherFunctionForm
        "round(value :: FLOAT, precision :: INTEGER | FLOAT) :: FLOAT"
        "Returns the value of a number rounded to the specified precision using rounding mode HALF_UP.",
      CypherFunctionForm
        "round(value :: FLOAT, precision :: INTEGER | FLOAT, mode :: STRING) :: FLOAT"
        "Returns the value of a number rounded to the specified precision with the specified rounding mode."],
    CypherFunction "sign" Nothing [
      CypherFunctionForm
        "sign(input :: FLOAT) :: INTEGER"
        "Returns the signum of a FLOAT: 0 if the number is 0, -1 for any negative number, and 1 for any positive number.",
      CypherFunctionForm
        "sign(input :: INTEGER) :: INTEGER"
        "Returns the signum of an INTEGER: 0 if the number is 0, -1 for any negative number, and 1 for any positive number."]],

  CypherLibrary "Predicate" "predicate functions" [
    CypherFunction "all" Nothing [CypherFunctionForm
      "all(variable :: VARIABLE IN list :: LIST<ANY> WHERE predicate :: ANY) :: BOOLEAN"
      "Returns true if the predicate holds for all elements in the given LIST<ANY>."],
    CypherFunction "any" Nothing [CypherFunctionForm
      "any(variable :: VARIABLE IN list :: LIST<ANY> WHERE predicate :: ANY) :: BOOLEAN"
      "Returns true if the predicate holds for at least one element in the given LIST<ANY>."],
    CypherFunction "exists" Nothing [CypherFunctionForm
      "exists(input :: ANY) :: BOOLEAN"
      "Returns true if a match for the pattern exists in the graph."],
    CypherFunction "isEmpty" Nothing [
      CypherFunctionForm
        "isEmpty(input :: LIST<ANY>) :: BOOLEAN"
        "Checks whether a LIST<ANY> is empty.",
      CypherFunctionForm
        "isEmpty(input :: MAP) :: BOOLEAN"
        "Checks whether a MAP is empty.",
      CypherFunctionForm
        "isEmpty(input :: STRING) :: BOOLEAN"
        "Checks whether a STRING is empty."],
    CypherFunction "none" Nothing [CypherFunctionForm
      "none(variable :: VARIABLE IN list :: LIST<ANY> WHERE predicate :: ANY) :: BOOLEAN"
      "Returns true if the predicate holds for no element in the given LIST<ANY>."],
    CypherFunction "single" Nothing [CypherFunctionForm
      "single(variable :: VARIABLE IN list :: LIST<ANY> WHERE predicate :: ANY) :: BOOLEAN"
      "Returns true if the predicate holds for exactly one of the elements in the given LIST<ANY>."]],

  CypherLibrary "Scalar" "scalar functions" [
    CypherFunction "char_length" Nothing [CypherFunctionForm
      "char_length(input :: STRING) :: INTEGER"
      "Returns the number of Unicode characters in a STRING."],
    CypherFunction "character_length" Nothing [CypherFunctionForm
      "character_length(input :: STRING) :: INTEGER"
      "Returns the number of Unicode characters in a STRING."],
    CypherFunction "coalesce" Nothing [CypherFunctionForm
      "coalesce(input :: ANY) :: ANY"
      "Returns the first non-null value in a list of expressions."],
    CypherFunction "elementId" Nothing [
      CypherFunctionForm
        "elementId(input :: NODE) :: STRING"
        "Returns a node identifier, unique within a specific transaction and DBMS.",
      CypherFunctionForm
        "elementId(input :: RELATIONSHIP) :: STRING"
        "Returns a relationship identifier, unique within a specific transaction and DBMS."],
    CypherFunction "endNode" Nothing [CypherFunctionForm
      "elementId(input :: RELATIONSHIP) :: STRING"
      "Returns a relationship identifier, unique within a specific transaction and DBMS."],
    CypherFunction "head" Nothing [CypherFunctionForm
      "head(list :: LIST<ANY>) :: ANY"
      "Returns the first element in a LIST<ANY>."],
    CypherFunction "id" Nothing [
      CypherFunctionForm
        "id(input :: NODE) :: INTEGER"
        "[Deprecated] Returns the id of a NODE. Replaced by elementId().",
      CypherFunctionForm
        "id(input :: RELATIONSHIP) :: INTEGER"
        "[Deprecated] Returns the id of a RELATIONSHIP. Replaced by elementId()."],
    CypherFunction "last" Nothing [CypherFunctionForm
      "last(list :: LIST<ANY>) :: ANY"
      "Returns the last element in a LIST<ANY>."],
    CypherFunction "length" Nothing [CypherFunctionForm
      "length(input :: PATH) :: INTEGER"
      "Returns the length of a PATH."],
    CypherFunction "nullIf" Nothing [CypherFunctionForm
      "nullIf(v1 :: ANY, v2 :: ANY) :: ANY"
      "Returns null if the two given parameters are equivalent, otherwise returns the value of the first parameter."],
    CypherFunction "properties" Nothing [
      CypherFunctionForm
        "properties(input :: MAP) :: MAP"
        "Returns a MAP containing all the properties of a MAP.",
      CypherFunctionForm
        "properties(input :: NODE) :: MAP"
        "Returns a MAP containing all the properties of a NODE.",
      CypherFunctionForm
        "properties(input :: RELATIONSHIP) :: MAP"
        "Returns a MAP containing all the properties of a RELATIONSHIP."],
    CypherFunction "randomUUID" Nothing [CypherFunctionForm
      "randomUUID() :: STRING"
      "Generates a random UUID."],
    CypherFunction "size" Nothing [
      CypherFunctionForm
        "size(input :: LIST<ANY>) :: INTEGER"
        "Returns the number of items in a LIST<ANY>.",
      CypherFunctionForm
        "size(input :: STRING) :: INTEGER"
        "Returns the number of Unicode characters in a STRING."],
    CypherFunction "startNode" Nothing [CypherFunctionForm
      "startNode(input :: RELATIONSHIP) :: NODE"
      "Returns the start NODE of a RELATIONSHIP."],
    CypherFunction "toBoolean" Nothing [
      CypherFunctionForm
        "toBoolean(input :: STRING) :: BOOLEAN"
        "Converts a STRING value to a BOOLEAN value.",
      CypherFunctionForm
        "toBoolean(input :: BOOLEAN) :: BOOLEAN"
        "Converts a BOOLEAN value to a BOOLEAN value.",
      CypherFunctionForm
        "toBoolean(input :: INTEGER) :: BOOLEAN"
        "Converts an INTEGER value to a BOOLEAN value."],
    CypherFunction "toBooleanOrNull" Nothing [CypherFunctionForm
      "toBooleanOrNull(input :: ANY) :: BOOLEAN"
      "Converts a value to a BOOLEAN value, or null if the value cannot be converted."],
    CypherFunction "toFloat" Nothing [
      CypherFunctionForm
        "toFloat(input :: INTEGER | FLOAT) :: FLOAT"
        "Converts an INTEGER value to a FLOAT value.",
      CypherFunctionForm
        "toFloat(input :: STRING) :: FLOAT"
        "Converts a STRING value to a FLOAT value."],
    CypherFunction "toFloatOrNull" Nothing [CypherFunctionForm
      "toFloatOrNull(input :: ANY) :: FLOAT"
      "Converts a value to a FLOAT value, or null if the value cannot be converted."],
    CypherFunction "toInteger" Nothing [
      CypherFunctionForm
        "toInteger(input :: INTEGER | FLOAT) :: INTEGER"
        "Converts a FLOAT value to an INTEGER value.",
      CypherFunctionForm
        "toInteger(input :: BOOLEAN) :: INTEGER"
        "Converts a BOOLEAN value to an INTEGER value.",
      CypherFunctionForm
        "toInteger(input :: STRING) :: INTEGER"
        "Converts a STRING value to an INTEGER value."],
    CypherFunction "toIntegerOrNull" Nothing [CypherFunctionForm
      "toIntegerOrNull(input :: ANY) :: INTEGER"
      "Converts a value to an INTEGER value, or null if the value cannot be converted."],
    CypherFunction "type" Nothing [CypherFunctionForm
      "type(input :: RELATIONSHIP) :: STRING"
      "Returns a STRING representation of the RELATIONSHIP type."],
    CypherFunction "valueType" Nothing [CypherFunctionForm
      "valueType(input :: ANY) :: STRING"
      "Returns a STRING representation of the most precise value type that the given expression evaluates to."]],

  CypherLibrary "Spatial" "spatial functions" [
    CypherFunction "point.distance" Nothing [CypherFunctionForm
      "point.distance(from :: POINT, to :: POINT) :: FLOAT"
      "Returns a FLOAT representing the geodesic distance between any two points in the same CRS."],
    CypherFunction "point" Nothing [
      CypherFunctionForm
        "point(input :: MAP) :: POINT"
        "Returns a 2D point object, given two coordinate values in the Cartesian coordinate system.",
      CypherFunctionForm
        "point(input :: MAP) :: POINT"
        "Returns a 3D point object, given three coordinate values in the Cartesian coordinate system.",
      CypherFunctionForm
        "point(input :: MAP) :: POINT"
        "Returns a 2D point object, given two coordinate values in the WGS 84 geographic coordinate system.",
      CypherFunctionForm
        "point(input :: MAP) :: POINT"
        "Returns a 3D point object, given three coordinate values in the WGS 84 geographic coordinate system."],
    CypherFunction "point.withinBBox" Nothing [CypherFunctionForm
      "point.withinBBox(point :: POINT, lowerLeft :: POINT, upperRight :: POINT) :: BOOLEAN"
      "Returns true if the provided point is within the bounding box defined by the two provided points, lowerLeft and upperRight."]],

  CypherLibrary "String" "string functions" [
    CypherFunction "btrim" Nothing [
      CypherFunctionForm
        "btrim(original :: STRING) :: STRING"
        "Returns the given STRING with leading and trailing whitespace removed.",
      CypherFunctionForm
        "btrim(input :: STRING, trimCharacterString :: STRING) :: STRING"
        "Returns the given STRING with leading and trailing trimCharacterString characters removed. Introduced in 5.20."],
    CypherFunction "left" Nothing [CypherFunctionForm
      "left(original :: STRING, length :: INTEGER) :: STRING"
      "Returns a STRING containing the specified number (INTEGER) of leftmost characters in the given STRING."],
    CypherFunction "lower" Nothing [CypherFunctionForm
      "lower(input :: STRING) :: STRING"
      "Returns the given STRING in lowercase. This function is an alias to the toLower() function, and it was introduced as part of Cypher's GQL conformance. Introduced in 5.21."],
    CypherFunction "ltrim" Nothing [
      CypherFunctionForm
        "ltrim(input :: STRING) :: STRING"
        "Returns the given STRING with leading whitespace removed.",
      CypherFunctionForm
        "ltrim(input :: STRING, trimCharacterString :: STRING) :: STRING"
        "Returns the given STRING with leading trimCharacterString characters removed. Introduced in 5.20."],
    CypherFunction "normalize" Nothing [
      CypherFunctionForm
        "normalize(input :: STRING) :: STRING"
        "Returns the given STRING normalized according to the normalization CypherFunctionForm NFC. Introduced in 5.17.",
      CypherFunctionForm
        "normalize(input :: STRING, normalForm = NFC :: [NFC, NFD, NFKC, NFKD]) :: STRING"
        "Returns the given STRING normalized according to the specified normalization CypherFunctionForm. Introduced in 5.17."],
    CypherFunction "replace" Nothing [CypherFunctionForm
      "replace(original :: STRING, search :: STRING, replace :: STRING) :: STRING"
      "Returns a STRING in which all occurrences of a specified search STRING in the given STRING have been replaced by another (specified) replacement STRING."],
    CypherFunction "reverse" Nothing [CypherFunctionForm
      "reverse(input :: STRING) :: STRING"
      "Returns a STRING in which the order of all characters in the given STRING have been reversed."],
    CypherFunction "right" Nothing [CypherFunctionForm
      "right(original :: STRING, length :: INTEGER) :: STRING"
      "Returns a STRING containing the specified number of rightmost characters in the given STRING."],
    CypherFunction "rtrim" Nothing [
      CypherFunctionForm
        "rtrim(input :: STRING) :: STRING"
        "Returns the given STRING with trailing whitespace removed.",
      CypherFunctionForm
        "rtrim(input :: STRING, trimCharacterString :: STRING) :: STRING"
        "Returns the given STRING with trailing trimCharacterString characters removed. Introduced in 5.20."],
    CypherFunction "split" Nothing [
      CypherFunctionForm
        "split(original :: STRING, splitDelimiter :: STRING) :: LIST<STRING>"
        "Returns a LIST<STRING> resulting from the splitting of the given STRING around matches of the given delimiter.",
      CypherFunctionForm
        "split(original :: STRING, splitDelimiters :: LIST<STRING>) :: LIST<STRING>"
        "Returns a LIST<STRING> resulting from the splitting of the given STRING around matches of any of the given delimiters."],
    CypherFunction "substring" Nothing [
      CypherFunctionForm
        "substring(original :: STRING, start :: INTEGER) :: STRING"
        "Returns a substring of the given STRING, beginning with a 0-based index start.",
      CypherFunctionForm
        "substring(original :: STRING, start :: INTEGER, length :: INTEGER) :: STRING"
        "Returns a substring of a given length from the given STRING, beginning with a 0-based index start."],
    CypherFunction "toLower" Nothing [CypherFunctionForm
      "toLower(input :: STRING) :: STRING"
      "Returns the given STRING in lowercase."],
    CypherFunction "toString" Nothing [CypherFunctionForm
      "toString(input :: ANY) :: STRING"
      "Converts an INTEGER, FLOAT, BOOLEAN, POINT or temporal type (i.e. DATE, ZONED TIME, LOCAL TIME, ZONED DATETIME, LOCAL DATETIME or DURATION) value to a STRING."],
    CypherFunction "toStringOrNull" Nothing [CypherFunctionForm
      "toStringOrNull(input :: ANY) :: STRING"
      "Converts an INTEGER, FLOAT, BOOLEAN, POINT or temporal type (i.e. DATE, ZONED TIME, LOCAL TIME, ZONED DATETIME, LOCAL DATETIME or DURATION) value to a STRING, or null if the value cannot be converted."],
    CypherFunction "toUpper" Nothing [CypherFunctionForm
      "toUpper(input :: STRING) :: STRING"
      "Returns the given STRING in uppercase."],
    CypherFunction "trim" Nothing [
      CypherFunctionForm
        "trim(input :: STRING) :: STRING"
        "Returns the given STRING with leading and trailing whitespace removed.",
      CypherFunctionForm
        "trim([LEADING | TRAILING | BOTH] [trimCharacterString :: STRING] FROM input :: STRING) :: STRING"
        "Returns the given STRING with the leading and/or trailing trimCharacterString character removed. Introduced in 5.20."],
    CypherFunction "upper" Nothing [CypherFunctionForm
      "upper(input :: STRING) :: STRING"
      "Returns the given STRING in uppercase. This function is an alias to the toUpper() function, and it was introduced as part of Cypher's GQL conformance. Introduced in 5.21."]],

  CypherLibrary "TemporalDuration" "temporal duration functions" [
    CypherFunction "duration" Nothing [CypherFunctionForm
      "duration(input :: ANY) :: DURATION"
      "Constructs a DURATION value."],
    CypherFunction "duration.between" Nothing [CypherFunctionForm
      "duration.between(from :: ANY, to :: ANY) :: DURATION"
      "Computes the DURATION between the from instant (inclusive) and the to instant (exclusive) in logical units."],
    CypherFunction "duration.inDays" Nothing [CypherFunctionForm
      "duration.inDays(from :: ANY, to :: ANY) :: DURATION"
      "Computes the DURATION between the from instant (inclusive) and the to instant (exclusive) in days."],
    CypherFunction "duration.inMonths" Nothing [CypherFunctionForm
      "duration.inMonths(from :: ANY, to :: ANY) :: DURATION"
      "Computes the DURATION between the from instant (inclusive) and the to instant (exclusive) in months."],
    CypherFunction "duration.inSeconds" Nothing [CypherFunctionForm
      "duration.inSeconds(from :: ANY, to :: ANY) :: DURATION"
      "Computes the DURATION between the from instant (inclusive) and the to instant (exclusive) in seconds."]],

  CypherLibrary "TemporalInstant" "temporal instant functions" [
    CypherFunction "date" Nothing [CypherFunctionForm
      "date(input = DEFAULT_TEMPORAL_ARGUMENT :: ANY) :: DATE"
      "Creates a DATE instant."],
    CypherFunction "date.realtime" Nothing [CypherFunctionForm
      "date.realtime(timezone = DEFAULT_TEMPORAL_ARGUMENT :: ANY) :: DATE"
      "Returns the current DATE instant using the realtime clock."],
    CypherFunction "date.statement" Nothing [CypherFunctionForm
      "date.statement(timezone = DEFAULT_TEMPORAL_ARGUMENT :: ANY) :: DATE"
      "Returns the current DATE instant using the statement clock."],
    CypherFunction "date.transaction" Nothing [CypherFunctionForm
      "date.transaction(timezone = DEFAULT_TEMPORAL_ARGUMENT :: ANY) :: DATE"
      "Returns the current DATE instant using the transaction clock."],
    CypherFunction "date.truncate" Nothing [CypherFunctionForm
      "date.truncate(unit :: STRING, input = DEFAULT_TEMPORAL_ARGUMENT :: ANY, fields = null :: MAP) :: DATE"
      "Truncates the given temporal value to a DATE instant using the specified unit."],
    CypherFunction "datetime" Nothing [CypherFunctionForm
      "datetime(input = DEFAULT_TEMPORAL_ARGUMENT :: ANY) :: ZONED DATETIME"
      "Creates a ZONED DATETIME instant."],
    CypherFunction "datetime.fromepoch" Nothing [CypherFunctionForm
      "datetime.fromepoch(seconds :: INTEGER | FLOAT, nanoseconds :: INTEGER | FLOAT) :: ZONED DATETIME"
      "Creates a ZONED DATETIME given the seconds and nanoseconds since the start of the epoch."],
    CypherFunction "datetime.fromepochmillis" Nothing [CypherFunctionForm
      "datetime.fromepochmillis(milliseconds :: INTEGER | FLOAT) :: ZONED DATETIME"
      "Creates a ZONED DATETIME given the milliseconds since the start of the epoch."],
    CypherFunction "datetime.realtime" Nothing [CypherFunctionForm
      "datetime.realtime(timezone = DEFAULT_TEMPORAL_ARGUMENT :: ANY) :: ZONED DATETIME"
      "Returns the current ZONED DATETIME instant using the realtime clock."],
    CypherFunction "datetime.statement" Nothing [CypherFunctionForm
      "datetime.statement(timezone = DEFAULT_TEMPORAL_ARGUMENT :: ANY) :: ZONED DATETIME"
      "Returns the current ZONED DATETIME instant using the statement clock."],
    CypherFunction "datetime.transaction" Nothing [CypherFunctionForm
      "datetime.transaction(timezone = DEFAULT_TEMPORAL_ARGUMENT :: ANY) :: ZONED DATETIME"
      "Returns the current ZONED DATETIME instant using the transaction clock."],
    CypherFunction "datetime.truncate" Nothing [CypherFunctionForm
      "datetime.truncate(unit :: STRING, input = DEFAULT_TEMPORAL_ARGUMENT :: ANY, fields = null :: MAP) :: ZONED DATETIME"
      "Truncates the given temporal value to a ZONED DATETIME instant using the specified unit."],
    CypherFunction "localdatetime" Nothing [CypherFunctionForm
      "localdatetime(input = DEFAULT_TEMPORAL_ARGUMENT :: ANY) :: LOCAL DATETIME"
      "Creates a LOCAL DATETIME instant."],
    CypherFunction "localdatetime.realtime" Nothing [CypherFunctionForm
      "localdatetime.realtime(timezone = DEFAULT_TEMPORAL_ARGUMENT :: ANY) :: LOCAL DATETIME"
      "Returns the current LOCAL DATETIME instant using the realtime clock."],
    CypherFunction "localdatetime.statement" Nothing [CypherFunctionForm
      "localdatetime.statement(timezone = DEFAULT_TEMPORAL_ARGUMENT :: ANY) :: LOCAL DATETIME"
      "Returns the current LOCAL DATETIME instant using the statement clock."],
    CypherFunction "localdatetime.transaction" Nothing [CypherFunctionForm
      "localdatetime.transaction(timezone = DEFAULT_TEMPORAL_ARGUMENT :: ANY) :: LOCAL DATETIME"
      "Returns the current LOCAL DATETIME instant using the transaction clock."],
    CypherFunction "localdatetime.truncate" Nothing [CypherFunctionForm
      "localdatetime.truncate(unit :: STRING, input = DEFAULT_TEMPORAL_ARGUMENT :: ANY, fields = null :: MAP) :: LOCAL DATETIME"
      "Truncates the given temporal value to a LOCAL DATETIME instant using the specified unit."],
    CypherFunction "localtime" Nothing [CypherFunctionForm
      "localtime(input = DEFAULT_TEMPORAL_ARGUMENT :: ANY) :: LOCAL TIME"
      "Creates a LOCAL TIME instant."],
    CypherFunction "localtime.realtime" Nothing [CypherFunctionForm
      "localtime.realtime(timezone = DEFAULT_TEMPORAL_ARGUMENT :: ANY) :: LOCAL TIME"
      "Returns the current LOCAL TIME instant using the realtime clock."],
    CypherFunction "localtime.statement" Nothing [CypherFunctionForm
      "localtime.statement(timezone = DEFAULT_TEMPORAL_ARGUMENT :: ANY) :: LOCAL TIME"
      "Returns the current LOCAL TIME instant using the statement clock."],
    CypherFunction "localtime.transaction" Nothing [CypherFunctionForm
      "localtime.transaction(timezone = DEFAULT_TEMPORAL_ARGUMENT :: ANY) :: LOCAL TIME"
      "Returns the current LOCAL TIME instant using the transaction clock."],
    CypherFunction "localtime.truncate" Nothing [CypherFunctionForm
      "localtime.truncate(unit :: STRING, input = DEFAULT_TEMPORAL_ARGUMENT :: ANY, fields = null :: MAP) :: LOCAL TIME"
      "Truncates the given temporal value to a LOCAL TIME instant using the specified unit."],
    CypherFunction "time" Nothing [CypherFunctionForm
      "time(input = DEFAULT_TEMPORAL_ARGUMENT :: ANY) :: ZONED TIME"
      "Creates a ZONED TIME instant."],
    CypherFunction "time.realtime" Nothing [CypherFunctionForm
      "time.realtime(timezone = DEFAULT_TEMPORAL_ARGUMENT :: ANY) :: ZONED TIME"
      "Returns the current ZONED TIME instant using the realtime clock."],
    CypherFunction "time.statement" Nothing [CypherFunctionForm
      "time.statement(timezone = DEFAULT_TEMPORAL_ARGUMENT :: ANY) :: ZONED TIME"
      "Returns the current ZONED TIME instant using the statement clock."],
    CypherFunction "time.transaction" Nothing [CypherFunctionForm
      "time.transaction(timezone = DEFAULT_TEMPORAL_ARGUMENT :: ANY) :: ZONED TIME"
      "Returns the current ZONED TIME instant using the transaction clock."],
    CypherFunction "time.truncate" Nothing [CypherFunctionForm
      "time.truncate(unit :: STRING, input = DEFAULT_TEMPORAL_ARGUMENT :: ANY, fields = null :: MAP) :: ZONED TIME"
      "Truncates the given temporal value to a ZONED TIME instant using the specified unit."]],

  CypherLibrary "Trigonometric" "trigonometric functions" [
    CypherFunction "acos" Nothing [CypherFunctionForm
      "acos(input :: FLOAT) :: FLOAT"
      "Returns the arccosine of a FLOAT in radians."],
    CypherFunction "asin" Nothing [CypherFunctionForm
      "asin(input :: FLOAT) :: FLOAT"
      "Returns the arcsine of a FLOAT in radians."],
    CypherFunction "atan" Nothing [CypherFunctionForm
      "atan(input :: FLOAT) :: FLOAT"
      "Returns the arctangent of a FLOAT in radians."],
    CypherFunction "atan2" Nothing [CypherFunctionForm
      "atan2(y :: FLOAT, x :: FLOAT) :: FLOAT"
      "Returns the arctangent2 of a set of coordinates in radians."],
    CypherFunction "cos" Nothing [CypherFunctionForm
      "cos(input :: FLOAT) :: FLOAT"
      "Returns the cosine of a FLOAT."],
    CypherFunction "cot" Nothing [CypherFunctionForm
      "cot(input :: FLOAT) :: FLOAT"
      "Returns the cotangent of a FLOAT."],
    CypherFunction "degrees" Nothing [CypherFunctionForm
      "degrees(input :: FLOAT) :: FLOAT"
      "Converts radians to degrees."],
    CypherFunction "haversin" Nothing [CypherFunctionForm
      "haversin(input :: FLOAT) :: FLOAT"
      "Returns half the versine of a number."],
    CypherFunction "pi" Nothing [CypherFunctionForm
      "pi() :: FLOAT"
      "Returns the mathematical constant pi."],
    CypherFunction "radians" Nothing [CypherFunctionForm
      "radians(input :: FLOAT) :: FLOAT"
      "Converts degrees to radians."],
    CypherFunction "sin" Nothing [CypherFunctionForm
      "sin(input :: FLOAT) :: FLOAT"
      "Returns the sine of a FLOAT."],
    CypherFunction "tan" Nothing [CypherFunctionForm
      "tan(input :: FLOAT) :: FLOAT"
      "Returns the tangent of a FLOAT."]],

  CypherLibrary "Vector" "vector functions" [
    CypherFunction "vector.similarity.cosine" Nothing [CypherFunctionForm
      "vector.similarity.cosine(a :: LIST<INTEGER | FLOAT>, b :: LIST<INTEGER | FLOAT>) :: FLOAT"
      "Returns a FLOAT representing the similarity between the argument vectors based on their cosine."],
    CypherFunction "vector.similarity.euclidean" Nothing [CypherFunctionForm
      "vector.similarity.euclidean(a :: LIST<INTEGER | FLOAT>, b :: LIST<INTEGER | FLOAT>) :: FLOAT"
      "Returns a FLOAT representing the similarity between the argument vectors based on their Euclidean distance."]]]