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.7.tar.gz (348.5 kB 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.7-cp38-abi3-win_amd64.whl (1.1 MB view details)

Uploaded CPython 3.8+Windows x86-64

frogql-0.2.7-cp38-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.3 MB view details)

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

frogql-0.2.7-cp38-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (1.2 MB view details)

Uploaded CPython 3.8+manylinux: glibc 2.17+ ARM64

frogql-0.2.7-cp38-abi3-macosx_11_0_arm64.whl (1.2 MB view details)

Uploaded CPython 3.8+macOS 11.0+ ARM64

frogql-0.2.7-cp38-abi3-macosx_10_12_x86_64.whl (1.2 MB view details)

Uploaded CPython 3.8+macOS 10.12+ x86-64

File details

Details for the file frogql-0.2.7.tar.gz.

File metadata

  • Download URL: frogql-0.2.7.tar.gz
  • Upload date:
  • Size: 348.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: maturin/1.14.1

File hashes

Hashes for frogql-0.2.7.tar.gz
Algorithm Hash digest
SHA256 ed67d2d09e8ba2a8e27bb7c5047cfcee12c6f6d34d2a6b0338c2b1437403f57e
MD5 d0e2cba96702dc87c353b5fdff9f6d7b
BLAKE2b-256 d154f63031de152268247f989267a06b5d1820e04ac61a252042f65872257849

See more details on using hashes here.

File details

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

File metadata

  • Download URL: frogql-0.2.7-cp38-abi3-win_amd64.whl
  • Upload date:
  • Size: 1.1 MB
  • Tags: CPython 3.8+, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: maturin/1.14.1

File hashes

Hashes for frogql-0.2.7-cp38-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 2f0b340c914ca7bd7923314ace5d7ea347c9f0fbd96b02641e7a0eb458d46730
MD5 637a5f625cfc1c235824282e8e060c63
BLAKE2b-256 c331d0fefcde344e7d6c4fc0defcd9b5ea8f3adec140c4cebbe590473f52a900

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for frogql-0.2.7-cp38-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 b6f380302ca2153e91a02dc20a86518511d4f51c276bd473944530ba3879426b
MD5 a10d8349acae5491858d3923f1f8df09
BLAKE2b-256 39e38cddc7e128c00435e6b478a1506231d845090ce700000aebe682bed669ac

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for frogql-0.2.7-cp38-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 2e33824e3adc5a1137fae1bb459952f824bbf1e9eda91ce3217ec1c1588f69d9
MD5 497ddc994bc383a10bbf0114f3772bdb
BLAKE2b-256 da6eb85f18b525b4c83c90189617c124d4516783ef2c60f2d16f3bfbf61bde2a

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for frogql-0.2.7-cp38-abi3-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 d55386aa20b010a16d61f70309252d1d40ed3331dba3b6c7a5ab64c6ad1db685
MD5 e49482f809769005a3b38a452bb46f6b
BLAKE2b-256 334d0f17e684c42fa1d370250df3946558b2fc4746c001114b64a84f1bda59da

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for frogql-0.2.7-cp38-abi3-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 5f8392f35cce30283b1b7bab274a9c7a9eac9d6fadc27bd3a6e14392eaacedc3
MD5 c88d497abc61acf32031f642b1e99853
BLAKE2b-256 282351d018ddb98f9465f2b39753198373a94a2d5cdd3dabe087e93434d9e598

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