Repository navigation
Description
Summary
Follow-up to #7427. That issue, and its sibling #8102, are about trailing parameters ArcadeDB implements but declares mandatory. This one is the other half of the same sweep: trailing parameters ArcadeDB does not accept at all, so a Neo4j/APOC call that passes them is rejected as "too many arguments" rather than being honoured or ignored.
merge.relationship — onMatchProps
APOC: apoc.merge.relationship(startNode :: NODE, relationshipType :: STRING, identProps :: MAP, onCreateProps :: MAP, endNode :: NODE, onMatchProps = {} :: MAP).
ArcadeDB (com.arcadedb.query.opencypher.procedures.merge.MergeRelationship) declares getMinArgs() == getMaxArgs() == 5, so the six-argument APOC form fails with Procedure 'merge.relationship' expects 5 arguments but got 6. There is no way to express "set these properties when the relationship already existed".
db.index.fulltext.queryNodes / queryRelationships — options
Neo4j: db.index.fulltext.queryNodes(indexName :: STRING, queryString :: STRING, options = {} :: MAP), same shape for queryRelationships.
ArcadeDB (DbIndexFulltextQueryNodes, DbIndexFulltextQueryRelationships) declares getMinArgs() == getMaxArgs() == 2, so a call carrying options (skip, limit, analyzer) is rejected with expects 2 arguments but got 3.
Why this is a separate issue from #7427 / #8102
Those two are one-line arity relaxations: the parameter is already supported, only its mandatory declaration is wrong. Here the parameter has no implementation behind it, so raising getMaxArgs() alone would silently swallow an argument the caller expects to take effect — worse than the current error. Each needs the behaviour built and tested:
onMatchProps: apply the map to the relationship on the match branch ofmerge.relationship, mirroring howonCreatePropsis applied on the create branch.- fulltext
options: decide which of Neo4j's keys ArcadeDB can honour and reject the rest explicitly, rather than ignoring unknown keys.
Splitting them into one issue each is reasonable if they are picked up separately.
Fix
Per procedure: implement the trailing parameter, raise getMaxArgs(), and add a regression test driving the full-arity call through a Cypher CALL plus one asserting the new arity bounds.
Found by the completeness sweep on #7427. The argument counts above are read from the getMinArgs()/getMaxArgs() declarations in the named classes on main.
Activity
feat(#8103): merge.relationship takes onMatchProps and the fulltext q…
robfrank commentedon Sep 22, 2026
Fixed in #8119, merged.
All three procedures now accept the trailing arguments and act on them - the point you made in the issue, that raising the declared arity alone would have been worse than the error it replaced, is what shaped the fix:
merge.relationshiptakes a sixth argument,onMatchProps, applied to the relationship on the match branch only, mirroring howonCreatePropsapplies on the create branch. An omitted or empty map writes nothing, so the five-argument form behaves exactly as before.db.index.fulltext.queryNodes/queryRelationshipstake a third argument,options, honouringskipandlimit.analyzeris refused by name with a message saying why - ArcadeDB resolves the analyzer from the metadata written when the index was created and has no query-time override, so accepting the key and ignoring it would have run the search under an analyzer you did not ask for and reported success. Any other key is refused by name too.Minimum argument counts are unchanged everywhere, so every call that worked before still works.
Still open
merge.nodes own fourth APOC argument,onMatchProps, is the same defect on a procedure this issue does not name. It is filed as apoc.merge.node onMatchProps is not accepted at all #8117.merge.nodeanddo.whendeclaring APOC-defaulted trailing arguments as mandatory is a different defect class, tracked by apoc.merge.node and apoc.do.when reject calls that omit APOC's defaulted trailing arguments #8102 (merged separately).❤️ Thanks for helping make ArcadeDB better! ArcadeDB is free and open source, sustained by its community. If it's useful to you or your company, please consider becoming a sponsor to keep development going.