Skip to main content

froGQL — embedded GQL graph database with ISO GQL path patterns (Rust core, Python bindings)

Project description

froGQL

Embedded GQL graph database with single-file storage. Rust core, Python bindings via PyO3.

froGQL implements ISO GQL path pattern matching: MATCH, comma-joins, unions, repetitions ({n,m}), OPTIONAL MATCH, EXISTS / NOT EXISTS, WHERE, RETURN, LIMIT. The runtime uses Leapfrog Triejoin (CompactLTJ) as its primary join strategy — worst-case-optimal for multi-way joins, with measured 14×–4000× speedups over pairwise hash-join on social-graph workloads.

Install

pip install frogql

Wheels ship for CPython 3.8+ on Linux (x86_64, aarch64), macOS (x86_64, arm64), and Windows (x86_64).

Quick start

import frogql

# Open or create a .gdb database
conn = frogql.open("movies.gdb")

# Run a query — returns a list of {alias: value} dicts.
# Use `AS name` in RETURN to pick the dict key; otherwise the
# projection falls back to col0, col1, ...
rows = conn.execute(
    "MATCH (p:Person)-[:ACTED_IN]->(m:Movie) "
    "WHERE m.released = 1999 "
    "RETURN p.name AS actor, m.title AS title",
    limit=10,
)
for row in rows:
    print(row["actor"], "->", row["title"])

# Inspect the graph
print(conn.node_count, conn.edge_count)
print(conn.schema())

Bare patterns (no RETURN)

A query without RETURN projects each row as a dict of the matched variables plus a special _paths key holding the full match:

rows = conn.execute("(p:Person)-[:ACTED_IN]->(m:Movie)", limit=1)
row = rows[0]
row["p"]        # {"kind": "node", "id": ..., "labels": [...], "props": {...}}
row["m"]        # the movie node
row["_paths"]   # [[node_p, edge, node_m]] — list of paths, each a
                # list of node/edge dicts in match order

_paths is a list because comma-joined patterns produce one path per joined sub-pattern. For a single pattern, _paths[0] is the full path.

Data import

# From JSON
frogql.import_json("graph.gdb", "graph.json")

# From a CSV directory with spanner_import_config.json
frogql.import_csv("graph.gdb", "path/to/csv_dir/")

Graph types and indexes

The catalog persists inside the .gdb file. DDL is plain GQL:

conn.execute("CREATE GRAPH TYPE movies { (:Movie {title STRING, released INT}) }")
conn.execute("USE GRAPH TYPE movies")
conn.execute("VALIDATE GRAPH TYPE movies")
conn.execute("CREATE BTREE INDEX ON :Movie(released)")

A DEFAULT graph type is auto-inferred at import time. Auto-built secondary indexes (hash + btree) cover unique (label, prop) pairs and are picked up by the optimizer for constant-folding and range filters.

API surface

Call Returns
frogql.open(path) Connection
frogql.import_json(db_path, json_path) None
frogql.import_csv(db_path, csv_dir) None
Connection.execute(query, limit=100) list[dict] (with RETURN: keys = aliases or colN; without RETURN: keys = pattern variables plus _paths)
Connection.schema() dict
Connection.graph_types() list[dict]
Connection.node_count / Connection.edge_count int

Connection is not thread-safe across Python threads (PyO3 unsendable).

License

MIT. See LICENSE in the source repository.

Links

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

frogql-0.2.0rc3.tar.gz (17.0 MB view details)

Uploaded Source

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

frogql-0.2.0rc3-cp38-abi3-win_amd64.whl (984.4 kB view details)

Uploaded CPython 3.8+Windows x86-64

frogql-0.2.0rc3-cp38-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.2 MB view details)

Uploaded CPython 3.8+manylinux: glibc 2.17+ x86-64

frogql-0.2.0rc3-cp38-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (1.1 MB view details)

Uploaded CPython 3.8+manylinux: glibc 2.17+ ARM64

frogql-0.2.0rc3-cp38-abi3-macosx_11_0_arm64.whl (1.0 MB view details)

Uploaded CPython 3.8+macOS 11.0+ ARM64

frogql-0.2.0rc3-cp38-abi3-macosx_10_12_x86_64.whl (1.1 MB view details)

Uploaded CPython 3.8+macOS 10.12+ x86-64

File details

Details for the file frogql-0.2.0rc3.tar.gz.

File metadata

  • Download URL: frogql-0.2.0rc3.tar.gz
  • Upload date:
  • Size: 17.0 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: maturin/1.13.3

File hashes

Hashes for frogql-0.2.0rc3.tar.gz
Algorithm Hash digest
SHA256 929db3f4228283b3464f8589ff3e18fbd471824692451e6ff16a33920bbf44de
MD5 dae37eef804492a3ef314050a9e3c0a8
BLAKE2b-256 916908c06cef2aefb5b8e819fe08f6b070736f096b0a711a92272e32d6e7a6e6

See more details on using hashes here.

File details

Details for the file frogql-0.2.0rc3-cp38-abi3-win_amd64.whl.

File metadata

  • Download URL: frogql-0.2.0rc3-cp38-abi3-win_amd64.whl
  • Upload date:
  • Size: 984.4 kB
  • Tags: CPython 3.8+, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: maturin/1.13.3

File hashes

Hashes for frogql-0.2.0rc3-cp38-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 d094fa9e2211793ab173875e09f83fef41b333159fdd978dd1dea48464b33d49
MD5 bc8114ecae80aa475e482ff265c99834
BLAKE2b-256 df6f98b6d67ddf114b4b91ce5edb500374fccad757af159ebeecc755bd6b945f

See more details on using hashes here.

File details

Details for the file frogql-0.2.0rc3-cp38-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for frogql-0.2.0rc3-cp38-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 ad58f95027e79c574f16b608c3ec4287e66d2ef131b92f5fc0c4367acc0df46f
MD5 285a48cb4087f1ade9368d79f687a7ce
BLAKE2b-256 c4db7b5a546527cec63b3734f8daf06434f83daba897f35808528019ada2c0b6

See more details on using hashes here.

File details

Details for the file frogql-0.2.0rc3-cp38-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for frogql-0.2.0rc3-cp38-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 2d3fceffbd164967bc21c8322cc0c7433d184ce67ab56cb71d14fb60f5f2e64b
MD5 47ed51514b308238ab16dcc750735665
BLAKE2b-256 119beee33bb4bf8823aeeb5d68bdfc65b41d849094121d4f1232365b320f328e

See more details on using hashes here.

File details

Details for the file frogql-0.2.0rc3-cp38-abi3-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for frogql-0.2.0rc3-cp38-abi3-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 ea7cc5769d5b9541de9a008c9e38521197b2826be5b372b07a60d3b07dd08c59
MD5 e56af54b5a5a255fa6d9560f983d3729
BLAKE2b-256 84fff748a72afac1bb4c9e0e1d18b184a5298f3a02209be60fd7c52981d6ab18

See more details on using hashes here.

File details

Details for the file frogql-0.2.0rc3-cp38-abi3-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for frogql-0.2.0rc3-cp38-abi3-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 aaaf3efa7a131573b88a30738be7d7843db8f5a452dd762d9eb4249151bdae1d
MD5 9e2bf3bef202ad97c89b660fd9959480
BLAKE2b-256 07965d8567b0f464da61e6b0ac53900c1a9fe643c27c961d85fda56f5a46fb04

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page