Hacktoberfest 2026 : les issues que les mainteneurs ont marquées pour octobre, ouvertes et accessibles aux débutants. Parcourir les issues Hacktoberfest

Keep a graph in a SQLite file, read and written by the object managers

Ouverte
#80 1 commentaire 0 réactions 0 personnes assignées Voir sur GitHub

Les mainteneurs répondent en général sous 1 jour

Personne n'a encore pris cette issue.

Évaluation

Difficulté
5/5
Temps estimé
Plus d'une semaine
Accessibilité débutants
35/100
Type d'issue
Fonctionnalité
Clarté
Plutôt claire
Activité
Active
Stack technique
python, sqlite
Domaine
databases

Piste de recherche

Start by tracing the existing object manager read and write paths and the PostgreSQL write plan, then compare the current SQL store schema with the listed SQLite table layout. Check the SQLite driver’s function registration, transaction, and version support before mapping the required graph operations. Done means object managers can read and write interoperable SQLite graph files while meeting the layout contract, including JSON text, stamps, and nanosecond moment comparisons.

Rédigé par le modèle d'indexation à partir du texte de l'issue.

Description

Port of liberation-data/drivine4j#194.

drivine4j can now keep a graph in a SQLite file, and its object managers read and write it. The file has the same tables as Oracle and Postgres, so each library can read a file another wrote:

  • <graph>_node (nid INTEGER PRIMARY KEY, labels TEXT, props TEXT, stamp TEXT)
  • <graph>_edge (eid INTEGER PRIMARY KEY, src, dst REFERENCES node ON DELETE CASCADE, type, props TEXT)
  • <graph>_schema

Layout contract. These are what make one library's file readable by another:

  • Labels and properties are JSON text, not SQLite's binary jsonb. Labels are written sorted and unescaped (no \uXXXX: in Python, json.dumps(..., ensure_ascii=False)), because a label is found by the text "Label" within labels.
  • The stamp is a column, as on the other SQL stores.
  • Moments are ISO text, compared to the nanosecond.

How drivine4j does it. These can be followed or done another way:

  • Writes: the same write plan Postgres's function carries out, carried out by a function registered on each connection (drivine_write) under a savepoint. better-sqlite3's db.function and Python's create_function can do the same.
  • Deletes that count select their nodes and hand them to drivine_delete.
  • Other registered functions:
    • drivine_epoch(text): epoch nanoseconds, for comparing moments;
    • REGEXP;
    • a Unicode lower;
    • cosine and Euclidean similarity, for vector search by scanning.
  • Connections: WAL, foreign_keys=ON, a busy timeout, and BEGIN IMMEDIATE for writing transactions. A save or delete turned away with SQLITE_BUSY is run again.
  • Minimum SQLite: 3.45. Python's bundled sqlite3 can be older; pysqlite3-binary is one way round that.

Cypher on SQLite (the compiler's third target) follows in a later drivine4j PR, with its own port issue.

Langage dominant
Python
Étoiles
1
Forks
0
Merge moyen
1 h 19 min
PR mergées (30 j)
122

Préparer son environnement

Ce projet ne fournit ni conteneur de développement, ni Dockerfile, ni guide de contribution : l'installation est à votre charge. Commencez par son README, et consultez notre guide de la première contribution pour les étapes générales.

Par où commencer

  1. Lisez l'issue en entier, puis le guide de contribution du projet.
  2. Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
  3. Forkez le dépôt et travaillez sur une branche.
  4. Ouvrez une pull request qui référence le numéro de l'issue.

Autres issues de liberation-data/drivine-python

Toutes les issues de liberation-data/drivine-python

Issues similaires

Plus d'issues Python

Recevez les nouvelles issues par e-mail

Un résumé court des issues GitHub adaptées aux débutants.