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.0.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.0-cp38-abi3-win_amd64.whl (984.2 kB view details)

Uploaded CPython 3.8+Windows x86-64

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

Uploaded CPython 3.8+macOS 11.0+ ARM64

frogql-0.2.0-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.0.tar.gz.

File metadata

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

File hashes

Hashes for frogql-0.2.0.tar.gz
Algorithm Hash digest
SHA256 f63e2b1d021a52c59d94914c5be36a0db07c9c27ecbebf9fe24785e596aa67da
MD5 6c94a302293f9b10ab69e20768dc8a76
BLAKE2b-256 01a8e89fb17ce0badc1aea2ed171f31eb8be18c057dd15d002618f192b2f53d9

See more details on using hashes here.

File details

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

File metadata

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

File hashes

Hashes for frogql-0.2.0-cp38-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 6f710ccf6f22cd3a31d5959ed8f05dfdf79f318d4db3778e4d06a167be26d687
MD5 7a69230d97bfcda69be3bbd447258ab7
BLAKE2b-256 641571d6552b9eb66feb4e7cd58b9674a4e5d34e4eb2f52ceb781041502a9b07

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for frogql-0.2.0-cp38-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 72ea48e1bfcab571624270d8e7785be3812f0e76877a2084daa3bf3519082a0a
MD5 a9bfa1c6d4ff262c24760c20dd25e4b6
BLAKE2b-256 0a6b2a2e574150d5b334b9872e59de8c1c055c812fec2d7956b96bd88e85e83d

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for frogql-0.2.0-cp38-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 7849f93f2478e153e19862515e01253f02e38f0c00f0ab1d0f27c8b6f2ea2199
MD5 172338a22780779a0a28058009a10cbe
BLAKE2b-256 87f6e49407f5184ee7321db4b2e2c3779248a5c9d22b198ed9d357319e28a3b9

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for frogql-0.2.0-cp38-abi3-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 da3cc102f40ebe366470f7dc59fd848fde18222f54cb291f695297a83a937866
MD5 27437818081f69896e530cdec67bf339
BLAKE2b-256 961c3d03da8eefde94008f071686476fd6bcf9f13b6f5a6b45c51c3eb238457f

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for frogql-0.2.0-cp38-abi3-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 328471d695bb71af31900c17d4faf57fda7bedf0448af2b841a953ef457251bc
MD5 a5e4a28e08afd529142a049ae2d84352
BLAKE2b-256 7e265df9aca90a80893cf34d8fd3ddcc1452dd42b8b8507b27dbdfb523f55910

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