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

Uploaded CPython 3.8+Windows x86-64

frogql-0.1.1-cp38-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.0 MB view details)

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

frogql-0.1.1-cp38-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (966.6 kB view details)

Uploaded CPython 3.8+manylinux: glibc 2.17+ ARM64

frogql-0.1.1-cp38-abi3-macosx_11_0_arm64.whl (892.0 kB view details)

Uploaded CPython 3.8+macOS 11.0+ ARM64

frogql-0.1.1-cp38-abi3-macosx_10_12_x86_64.whl (943.4 kB view details)

Uploaded CPython 3.8+macOS 10.12+ x86-64

File details

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

File metadata

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

File hashes

Hashes for frogql-0.1.1.tar.gz
Algorithm Hash digest
SHA256 53cd0ac79715e818b84954eac2451a1d7b6e5b2fc146c4389e3399f040542c80
MD5 e6d84271c4da923b399ade76f6429179
BLAKE2b-256 489a7af14655794ba773830177ab92d8d7d53826d89e3c93351bf3b4c5c5faca

See more details on using hashes here.

File details

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

File metadata

  • Download URL: frogql-0.1.1-cp38-abi3-win_amd64.whl
  • Upload date:
  • Size: 844.9 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.1.1-cp38-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 4eb51724d8aaff78d0f4a6ab5b7f6efbb7a5c45b2983a6c5f1648c379561b242
MD5 f765d6dd6e6e65db3b067e6f97523564
BLAKE2b-256 80fe28aeeca67ed98e9f3c20b5bd2e7bbaa04e5c6e679f27aeb1abd929297c43

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for frogql-0.1.1-cp38-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 0edee659a9611c6a55f2daff134755afb75424470934807ae3e0ad88e8c075ae
MD5 14bb9b452a6f1ab9dfbe1ea6db71c25b
BLAKE2b-256 e5d564aa494390f020baac3887a47c081052aba1367cef0703389cd89b46154d

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for frogql-0.1.1-cp38-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 565e0155bae1a8ccac157540b63da618b848b53963dd716a69e6f97a9d1d4ece
MD5 6e52df003b7a031ae0c0bfb58bf10e19
BLAKE2b-256 d18d1ac70b4388e9aaa4a3b95e19fbab9d6ec8fcd2f7dbc577e493268aebf7a6

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for frogql-0.1.1-cp38-abi3-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 bb68cefb7396c3e9deb5e2b585b670c58f0cec6801311400d448a4a3ee684df0
MD5 5c824d57c3ac34d77d302e3929302898
BLAKE2b-256 8bef2ddd6d7302e50e263605bf566a530b1050212758c2e4e123282e0708dafe

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for frogql-0.1.1-cp38-abi3-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 b772d500dbfe96df90e45d72544a52c3452e9e97a7dcc97fb45eed60aeb0c483
MD5 b16688eb0869f369261304627938f375
BLAKE2b-256 2aa766ee6dfe6cf3239ab71b697985ecea71c27f1a6b1334a9b41254962428e3

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