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.3.tar.gz (17.1 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.3-cp38-abi3-win_amd64.whl (985.6 kB view details)

Uploaded CPython 3.8+Windows x86-64

frogql-0.2.3-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.3-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.3-cp38-abi3-macosx_11_0_arm64.whl (1.0 MB view details)

Uploaded CPython 3.8+macOS 11.0+ ARM64

frogql-0.2.3-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.3.tar.gz.

File metadata

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

File hashes

Hashes for frogql-0.2.3.tar.gz
Algorithm Hash digest
SHA256 2822145d8672264fdb52779ae165aa6d64cced6f8cdcf769a6e10e1c4140ccbe
MD5 cec6c75bdf33c11ac8c0f676e67afb6a
BLAKE2b-256 19091ad2db1b83277e58d1a5a59e92470eb564e7f3eafc4a740dfc2280c4f210

See more details on using hashes here.

File details

Details for the file frogql-0.2.3-cp38-abi3-win_amd64.whl.

File metadata

  • Download URL: frogql-0.2.3-cp38-abi3-win_amd64.whl
  • Upload date:
  • Size: 985.6 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.3-cp38-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 3bdbe477db296313880bdccfd29c99f61fc36810826fa47755b762e23835028b
MD5 d37dc975fd93284f0d94fa7a4c0ac5d0
BLAKE2b-256 d480be6bb72884c4d3995e0a0086c1497300c2c7d810a9e18da95813bbb492bb

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for frogql-0.2.3-cp38-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 74d7c891447f412dda30ee19f05c3191fd1db381cfa5158c28d9153da573d942
MD5 4f38e3a3e4fd991a1c1d81cc243dbe08
BLAKE2b-256 89cdde0f3c911e05ecd655764452ac580b479ab36f9efbde3a4a4182f122a94f

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for frogql-0.2.3-cp38-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 06e3426dee0af71115a1ec6e91646f095b6581289efd5ea3078ae466cecc5c1e
MD5 f29ccb619388813d5c1fb2fd424ad53b
BLAKE2b-256 e2660bb5b9897a10b731f2045808eb67eea15738d308dcc576a2fd9175d721b8

See more details on using hashes here.

File details

Details for the file frogql-0.2.3-cp38-abi3-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for frogql-0.2.3-cp38-abi3-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 d2b9a24bd937ba2c2ae09282b45cc05f4a54fe4a33bd478c54d5ccc5ac056fc9
MD5 e392f036addd5867629632e4e311f727
BLAKE2b-256 fbbf9de9b7a3e18996e1bd5a106c0601b5f2d131a15eac3fffdaabf05d2b3e06

See more details on using hashes here.

File details

Details for the file frogql-0.2.3-cp38-abi3-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for frogql-0.2.3-cp38-abi3-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 80745f2d1ada6575695122a5520fc0e0a22b56a3d5b8d6fbdd40f89fcea86df5
MD5 265a637660ffc817aa8d7098f287bfcc
BLAKE2b-256 7ad157949f16a4fcb7753e5cc4d88e8afffc015f7f07c2e169cf32056dfb93cb

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