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

Uploaded CPython 3.8+Windows x86-64

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

Uploaded CPython 3.8+macOS 11.0+ ARM64

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

File metadata

  • Download URL: frogql-0.2.0rc1.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.0rc1.tar.gz
Algorithm Hash digest
SHA256 abffa96f6c261b6f1b821cda5d49c4bf6714ff8a92a614f8e6175bdaddf9c423
MD5 1c865bc7745d0241b3dece6c0f941b97
BLAKE2b-256 4044f0ac4eb394fd38d854d2cb4a254248fe75cc741eb0f61d10a2b265d885a5

See more details on using hashes here.

File details

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

File metadata

  • Download URL: frogql-0.2.0rc1-cp38-abi3-win_amd64.whl
  • Upload date:
  • Size: 984.3 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.0rc1-cp38-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 fba72322625339a6eedd4584c2949a5e74a8721bfde21fcf037c3f6d846fb95b
MD5 31bdfa1ad2471eed518152ca0b4bf5b9
BLAKE2b-256 ff88e64ae8d80100eb00f95d5167f24b102ca904bbc983fe2e30ebf5e7dfd1fb

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for frogql-0.2.0rc1-cp38-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 a540cce7a842662960068da2caf169b91aa8140019d48feb965792337ab096c9
MD5 5361be412461b036d82a245dc2111613
BLAKE2b-256 c2e84474e6f9d061d98ad9eae7a45af1ed3b32e7df2b56f77a1dd4155c070af3

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for frogql-0.2.0rc1-cp38-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 3ac434ab37a9770a108b40e715b5d096f94f5e6f513d588469984586c10770c6
MD5 75286d1f2b26a523729737c196c4d679
BLAKE2b-256 4b74be5f52ed96ad465e9ae8be8914cf7df1765c3f29a8f1df48e718fece4d80

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for frogql-0.2.0rc1-cp38-abi3-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 a69232925a6ab4613598583c3af67c7670fb8cb4ecb1fb6653121af9c283e1c0
MD5 d7ba34101e0e6e26097f35831c4038cc
BLAKE2b-256 b4fa35ba63bd82b76bf448eb08add69fa34e19b1c4adc66f0ad60c9e1fdf926c

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for frogql-0.2.0rc1-cp38-abi3-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 86bf20d45ccad965a616f9f96bd1cc0492f3f11a7e928f512cb35253955d098f
MD5 44447e7e7ab4eda562697db5b2a59533
BLAKE2b-256 b1baa9464ac25b529a43a351d56316a4fd4165aa88c7c14a83f51ba1d8204c67

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