Saltearse al contenido

Subset soportado

NamiDB apunta a un subset estricto de GQL (ISO/IEC 39075:2024) más openCypher 9. Cada query de esta sección parsea, planifica y se ejecuta de punta a punta en el motor v0.3.

Cláusulas de lectura

CláusulaEstadoNotas
MATCH (n)el match sin label se expande a todas las labels observadas
MATCH (n:Label {prop: $p})los predicados sobre propiedades suben al scan
MATCH (a)-[r:TYPE]->(b)edges tipados y sin tipo
MATCH (a)-[r:TYPE*1..N]->(b)paths de longitud variable acotados
OPTIONAL MATCH
WHERElenguaje de predicados completo; pushdown a SST + Parquet
RETURNalias, expresiones, agregaciones
ORDER BY ... LIMIT n / SKIP npushdown de top-K al executor
WITH ... AS ...composición de pipeline
UNION ALL
EXISTS { ... }decorrelado a hash semi-join

Cláusulas de escritura

CláusulaEstadoNotas
CREATE (n:L {props})nuevo NodeId por fila
CREATE (a)-[:T]->(b)requiere que ambos endpoints estén bound
MERGE (n:L {props})semántica de upsert
MERGE (a)-[r:T]->(b)ambos endpoints deben estar bound (v0.3)
SET n.prop = exprmutación por propiedad
SET n += {map}actualización bulk de propiedades
DELETE nborra el nodo (no debe tener edges)
DETACH DELETE nborra el nodo + sus edges
REMOVE n.proptombstone por propiedad
REMOVE n:Labeltombstone de label

Toda escritura es durable al hacer commit: el WAL append + el manifest CAS ocurren antes de que la llamada retorne.

Funciones built-in

FunciónEstado
id(n), n._id✅ — retorna el NodeId interno
labels(n), type(r)
count(*), count(expr), sum, avg, min, max, collect
coalesce, case ... when ... end
size(list), length(path)
toString, toInteger, toFloat, toBoolean
startsWith, endsWith, contains
properties(n)

El _id interno y la propiedad id

Desde v0.3, _id es el NodeId interno del motor e id es una propiedad de usuario común.

// Direccionar el NodeId interno
MATCH (n:Person {_id: $uuid}) RETURN n
RETURN id(n) // forma de función, mismo valor
RETURN n._id // forma de accesor
// Usar `id` como propiedad de usuario
CREATE (n:Person {id: 'external-42', name: 'Alice'})
MATCH (n:Person) WHERE n.id = 'external-42' RETURN n

Ver las notas de release de v0.3.0 para la historia de migración desde v0.2.

Parámetros

Los parámetros son posicionales vía placeholders $name:

MATCH (p:Person)
WHERE p.age >= $min AND p.country = $country
RETURN p.name AS name

Desde el driver (Python):

result = client.cypher(query, params={"min": 18, "country": "EC"})

Aún no soportado

  • Subqueries CALL { ... }
  • Procedures / funciones definidas por el usuario
  • Hints de índice (USING INDEX)
  • LOAD CSV (usar las APIs bulk merge_nodes / merge_edges en su lugar)
  • Cláusulas que definen schema (CREATE CONSTRAINT, CREATE INDEX) — el schema hoy se infiere a partir de las escrituras; el DDL explícito está en el roadmap.
  • Path patterns más largos que las formas de LDBC IC09 / IC11 — los paths de longitud variable más allá de [*1..N] están fuera de scope hoy.

Ver también