Skip to content

Instantly share code, notes, and snippets.

@kearfy
Created July 28, 2023 13:03
Show Gist options
  • Save kearfy/e7966d11f14c60f8a5369d36df0afe6f to your computer and use it in GitHub Desktop.
Save kearfy/e7966d11f14c60f8a5369d36df0afe6f to your computer and use it in GitHub Desktop.
SurrealQL recursion
[
{
"id": "recursion:five",
"links": [
"recursion:four",
"recursion:two"
],
"resolved": [
{
"id": "recursion:four",
"links": [
"recursion:two"
],
"resolved": [
{
"id": "recursion:two",
"links": [
"recursion:one"
],
"resolved": [
{
"id": "recursion:one",
"links": [],
"resolved": []
}
]
}
]
},
{
"id": "recursion:two",
"links": [
"recursion:one"
],
"resolved": [
{
"id": "recursion:one",
"links": [],
"resolved": []
}
]
}
]
},
{
"id": "recursion:four",
"links": [
"recursion:two"
],
"resolved": [
{
"id": "recursion:two",
"links": [
"recursion:one"
],
"resolved": [
{
"id": "recursion:one",
"links": [],
"resolved": []
}
]
}
]
},
{
"id": "recursion:one",
"links": [],
"resolved": []
},
{
"id": "recursion:three",
"links": [
"recursion:one",
"recursion:two"
],
"resolved": [
{
"id": "recursion:one",
"links": [],
"resolved": []
},
{
"id": "recursion:two",
"links": [
"recursion:one"
],
"resolved": [
{
"id": "recursion:one",
"links": [],
"resolved": []
}
]
}
]
},
{
"id": "recursion:two",
"links": [
"recursion:one"
],
"resolved": [
{
"id": "recursion:one",
"links": [],
"resolved": []
}
]
}
]
BEGIN;
DELETE recursion;
DEFINE TABLE recursion SCHEMAFULL;
DEFINE FIELD links ON recursion TYPE array<record<recursion>> VALUE $value OR $before OR [];
DEFINE FIELD links.* ON recursion TYPE record<recursion>;
DEFINE FIELD resolved ON recursion VALUE <future> {
RETURN SELECT * FROM (links);
};
CREATE recursion:one;
CREATE recursion:two SET links = [recursion:one];
CREATE recursion:three SET links = [recursion:one, recursion:two];
CREATE recursion:four SET links = [recursion:two];
CREATE recursion:five SET links = [recursion:four, recursion:two];
RETURN SELECT * FROM recursion;
COMMIT;
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment