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

Cypher on Oracle: randomUUID() gives SYS_GUID() values, not random version 4 UUIDs, and consecutive ones share most of their digits (port of drivine4j#401)

Fermée Adaptée aux débutants
#252 1 commentaire 0 réactions 0 personnes assignées Voir sur GitHub

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

Une pull request liée a déjà été fusionnée.

  • #273 par @jasperblues — fusionnée

Évaluation

Difficulté
2/5
Temps estimé
1-3 heures
Accessibilité débutants
78/100
Type d'issue
Bug
Clarté
Clairement spécifiée
Activité
Active
Stack technique
python, sql
Domaine
databases

Piste de recherche

Commencez dans drivine/cypher/sql/oracle_cypher_compiler.py, à OracleCypherCompiler.uuid(), et comparez l’expression actuelle SYS_GUID() avec l’expression Oracle UUID() de l’issue. Vérifiez comment le compilateur représente l’expression SQL et si les versions d’Oracle prises en charge nécessitent le fallback. Le travail est terminé lorsque randomUUID() compilé produit un texte UUID aléatoire de version 4 sur Oracle ; l’issue ne nomme aucun fichier de test.

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

Description

Port of liberation-data/drivine4j#401.

On Oracle, compiled Cypher's randomUUID() gives Oracle's SYS_GUID() written as UUID text. It's valid and unique, but it isn't version 4, and consecutive values share their first 11 or 12 characters. In 60 values from UNWIND range(1, 20) AS i RETURN randomUUID() compiled by this library on Oracle 23.26.3, 30 of the 32 hex digits were the same in every value:

5eeff3bf-6c75-0101-e063-090011ac4d78
5eeff3bf-6c76-0101-e063-090011ac4d78
5eeff3bf-6c77-0101-e063-090011ac4d78

Neo4j, Postgres (gen_random_uuid()) and SQLite all give random version 4 UUIDs.

Cause: OracleCypherCompiler.uuid() in drivine/cypher/sql/oracle_cypher_compiler.py compiles randomUUID() to LOWER(REGEXP_REPLACE(RAWTOHEX(SYS_GUID()), …)), the same expression as drivine4j.

Likely also affected, not tested: drivine/model/stamps.py makes its engine token from left(replace(randomUUID(), '-', ''), 16). On Oracle only about 16 bits of that change.

Fix: as in drivine4j#401. Use Oracle's UUID(), which returns a random version 4 UUID as RAW(16), and needs no grant beyond DB_DEVELOPER_ROLE:

LOWER(REGEXP_REPLACE(RAWTOHEX(UUID()), '(.{8})(.{4})(.{4})(.{4})(.{12})', '\1-\2-\3-\4-\5'))

Or use the DBMS_RANDOM fallback described there, if 23ai releases without UUID() must be supported. DBMS_CRYPTO needs EXECUTE granted by a DBA.

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

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.