datanotes 3.1.0 → 3.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/api/index.cjs +175 -8
- package/dist/api/index.js +175 -8
- package/dist/api/mcp.cjs +175 -8
- package/dist/api/mcp.js +175 -8
- package/dist/datanotes.cjs +591 -139
- package/dist/docs/api/operations/add_column.md +1 -0
- package/dist/docs/api/operations/add_constraint.md +2 -0
- package/dist/docs/api/operations/alter_column.md +1 -1
- package/dist/docs/api/operations/alter_table.md +3 -2
- package/dist/docs/api/operations/check_table.md +1 -1
- package/dist/docs/api/operations/create_table.md +3 -1
- package/dist/docs/api/operations/describe_table.md +1 -1
- package/dist/docs/api/operations/insert_row.md +2 -2
- package/dist/docs/api/operations/tags/rows-dml.md +1 -1
- package/dist/docs/api.md +2 -2
- package/dist/docs/guides/data-quality/check-constraints.md +14 -13
- package/dist/docs/guides/data-quality/hand-edits.md +10 -10
- package/dist/docs/guides/database-objects/bases.md +11 -11
- package/dist/docs/guides/database-objects/catalogs-and-schemas.md +16 -10
- package/dist/docs/guides/database-objects/columns.md +38 -38
- package/dist/docs/guides/database-objects/relations.md +173 -36
- package/dist/docs/guides/database-objects/tables.md +80 -35
- package/dist/docs/guides/database-objects/views.md +44 -44
- package/dist/docs/guides/history/change-data-feed.md +34 -34
- package/dist/docs/guides/history/journal-and-undo.md +12 -12
- package/dist/docs/guides/history/restore.md +20 -20
- package/dist/docs/guides/history/table-history.md +31 -31
- package/dist/docs/guides/read-and-write/automatic-links.md +15 -15
- package/dist/docs/guides/read-and-write/import-notes.md +21 -21
- package/dist/docs/guides/read-and-write/joins-and-aggregates.md +7 -7
- package/dist/docs/guides/read-and-write/read-and-filter.md +10 -10
- package/dist/docs/guides/read-and-write/write-rows.md +10 -10
- package/dist/docs/guides/search/text.md +1 -1
- package/dist/docs/reference/cli.md +1 -1
- package/dist/docs/reference/errors.md +1 -1
- package/dist/docs/reference/operations/auxiliary.md +2 -2
- package/dist/docs/reference/operations/rows.md +1 -1
- package/dist/docs/reference/operations/schema.md +15 -11
- package/dist/docs/reference/operations.md +28 -28
- package/dist/docs/release-notes.md +24 -0
- package/package.json +1 -1
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Relations and hierarchies
|
|
2
2
|
|
|
3
|
-
> Link rows to rows of other tables, keep two-way links in step, take allowed values from a table, build trees and limit link targets.
|
|
3
|
+
> Link rows to rows of other tables, keep two-way links in step, take allowed values from a table, build trees, keep dependencies free of cycles and limit link targets.
|
|
4
4
|
|
|
5
5
|
A link column holds a wikilink to a note, such as `[[Charade]]`, and `ref` names the table that note must be a row of. The link points to a row of the other table, and you reach that row’s columns through the link.
|
|
6
6
|
|
|
@@ -56,7 +56,7 @@ Answer:
|
|
|
56
56
|
"op": "create_table",
|
|
57
57
|
"planned_texts": ["datanotes/metastore.yaml"],
|
|
58
58
|
"commits": [{ "table": "main.public.watch", "version": 0, "operation": "CREATE TABLE" }],
|
|
59
|
-
"migration_id": "
|
|
59
|
+
"migration_id": "20261019T040640-create_table-create-table-main-public-watch"
|
|
60
60
|
}
|
|
61
61
|
```
|
|
62
62
|
|
|
@@ -85,7 +85,7 @@ Answer:
|
|
|
85
85
|
"files_created": 1,
|
|
86
86
|
"planned_creates": ["datanotes/main/public/watch/2026-03-14T2030.md"],
|
|
87
87
|
"commits": [{ "table": "main.public.watch", "version": 1, "operation": "WRITE" }],
|
|
88
|
-
"migration_id": "
|
|
88
|
+
"migration_id": "20261019T040640-insert_row-insert-into-watch"
|
|
89
89
|
}
|
|
90
90
|
```
|
|
91
91
|
|
|
@@ -94,7 +94,7 @@ Answer:
|
|
|
94
94
|
```markdown
|
|
95
95
|
---
|
|
96
96
|
table: main.public.watch
|
|
97
|
-
id:
|
|
97
|
+
id: 01a15257-1334-78ef-a884-7dec625383fb
|
|
98
98
|
film: "[[His Girl Friday]]"
|
|
99
99
|
where: cinema
|
|
100
100
|
place: the film club downtown
|
|
@@ -189,7 +189,7 @@ Answer:
|
|
|
189
189
|
"op": "add_column",
|
|
190
190
|
"planned_texts": ["datanotes/metastore.yaml"],
|
|
191
191
|
"commits": [{ "table": "main.public.actor", "version": 4, "operation": "ADD COLUMNS" }],
|
|
192
|
-
"migration_id": "
|
|
192
|
+
"migration_id": "20261019T040640-add_column-add-column-films-to-actor"
|
|
193
193
|
}
|
|
194
194
|
```
|
|
195
195
|
|
|
@@ -217,7 +217,7 @@ Answer:
|
|
|
217
217
|
"op": "add_column",
|
|
218
218
|
"planned_texts": ["datanotes/metastore.yaml"],
|
|
219
219
|
"commits": [{ "table": "main.public.film", "version": 4, "operation": "ADD COLUMNS" }],
|
|
220
|
-
"migration_id": "
|
|
220
|
+
"migration_id": "20261019T040640-add_column-add-column-cast-to-film"
|
|
221
221
|
}
|
|
222
222
|
```
|
|
223
223
|
|
|
@@ -259,7 +259,7 @@ Answer:
|
|
|
259
259
|
{ "table": "main.public.actor", "version": 5, "operation": "UPDATE" },
|
|
260
260
|
{ "table": "main.public.film", "version": 5, "operation": "UPDATE" }
|
|
261
261
|
],
|
|
262
|
-
"migration_id": "
|
|
262
|
+
"migration_id": "20261019T040640-update_row-update-film"
|
|
263
263
|
}
|
|
264
264
|
```
|
|
265
265
|
|
|
@@ -268,7 +268,7 @@ Answer:
|
|
|
268
268
|
```markdown
|
|
269
269
|
---
|
|
270
270
|
table: main.public.film
|
|
271
|
-
id:
|
|
271
|
+
id: 01a15257-1318-7711-9b6a-1133ed5ade2a
|
|
272
272
|
title: Charade
|
|
273
273
|
year: 1963
|
|
274
274
|
minutes: 113
|
|
@@ -291,7 +291,7 @@ Answer:
|
|
|
291
291
|
```markdown
|
|
292
292
|
---
|
|
293
293
|
table: main.public.actor
|
|
294
|
-
id:
|
|
294
|
+
id: 01a15257-12f4-74ff-9c67-ad018a33f0ad
|
|
295
295
|
name: Cary Grant
|
|
296
296
|
born: 1904-01-18
|
|
297
297
|
films:
|
|
@@ -359,7 +359,7 @@ Answer:
|
|
|
359
359
|
{
|
|
360
360
|
"path": "datanotes/main/public/actor/Cary Grant.md",
|
|
361
361
|
"table": "main.public.actor",
|
|
362
|
-
"id": "
|
|
362
|
+
"id": "01a15257-12f4-74ff-9c67-ad018a33f0ad",
|
|
363
363
|
"name": "Cary Grant",
|
|
364
364
|
"born": "1904-01-18",
|
|
365
365
|
"films": ["[[Charade]]", "[[His Girl Friday]]"]
|
|
@@ -367,7 +367,7 @@ Answer:
|
|
|
367
367
|
{
|
|
368
368
|
"path": "datanotes/main/public/actor/Audrey Hepburn.md",
|
|
369
369
|
"table": "main.public.actor",
|
|
370
|
-
"id": "
|
|
370
|
+
"id": "01a15257-1302-766a-9b85-dcc175445424",
|
|
371
371
|
"name": "Audrey Hepburn",
|
|
372
372
|
"born": "1929-05-04",
|
|
373
373
|
"films": ["[[Charade]]"]
|
|
@@ -423,7 +423,7 @@ Answer:
|
|
|
423
423
|
"op": "alter_column",
|
|
424
424
|
"planned_texts": ["datanotes/metastore.yaml"],
|
|
425
425
|
"commits": [{ "table": "main.public.film", "version": 9, "operation": "CHANGE COLUMN" }],
|
|
426
|
-
"migration_id": "
|
|
426
|
+
"migration_id": "20261019T040640-alter_column-alter-column-see_also-in-film"
|
|
427
427
|
}
|
|
428
428
|
```
|
|
429
429
|
|
|
@@ -479,7 +479,7 @@ Answer:
|
|
|
479
479
|
"commits": [
|
|
480
480
|
{ "table": "main.public.film", "version": 10, "operation": "ALIGN RELATIONS" }
|
|
481
481
|
],
|
|
482
|
-
"migration_id": "
|
|
482
|
+
"migration_id": "20261019T040640-align_relations-align-inverse-links-of-main-pu"
|
|
483
483
|
}
|
|
484
484
|
```
|
|
485
485
|
|
|
@@ -573,7 +573,7 @@ Answer:
|
|
|
573
573
|
"op": "add_column",
|
|
574
574
|
"planned_texts": ["datanotes/metastore.yaml"],
|
|
575
575
|
"commits": [{ "table": "main.public.film", "version": 11, "operation": "ADD COLUMNS" }],
|
|
576
|
-
"migration_id": "
|
|
576
|
+
"migration_id": "20261019T040640-add_column-add-column-tags-to-film"
|
|
577
577
|
}
|
|
578
578
|
```
|
|
579
579
|
|
|
@@ -629,7 +629,7 @@ Answer:
|
|
|
629
629
|
}
|
|
630
630
|
],
|
|
631
631
|
"commits": [{ "table": "main.public.film", "version": 12, "operation": "UPDATE" }],
|
|
632
|
-
"migration_id": "
|
|
632
|
+
"migration_id": "20261019T040640-update_row-update-film-4"
|
|
633
633
|
}
|
|
634
634
|
```
|
|
635
635
|
|
|
@@ -677,7 +677,7 @@ Answer:
|
|
|
677
677
|
"op": "create_table",
|
|
678
678
|
"planned_texts": ["datanotes/metastore.yaml"],
|
|
679
679
|
"commits": [{ "table": "main.public.genre", "version": 0, "operation": "CREATE TABLE" }],
|
|
680
|
-
"migration_id": "
|
|
680
|
+
"migration_id": "20261019T040640-create_table-create-table-main-public-genre"
|
|
681
681
|
}
|
|
682
682
|
```
|
|
683
683
|
|
|
@@ -753,10 +753,130 @@ Refused:
|
|
|
753
753
|
```text
|
|
754
754
|
update_row refused — nothing was written:
|
|
755
755
|
invalid datanotes/main/public/genre/Cinema.md: parent would make "Cinema" its own ancestor (Cinema → Screwball comedy → Sound film → Cinema)
|
|
756
|
-
Hint: A row cannot be its own ancestor:
|
|
756
|
+
Hint: A row cannot be its own ancestor in a hierarchy column, nor depend on itself through an acyclic column: the message shows the path. Point the column to a row that is not on that path. Then call update_row again (dry_run: true checks without writing).
|
|
757
757
|
Docs: https://datanotes.dev/guides/database-objects/relations.md#build-a-tree-of-rows-with-a-parent-link (offline: read_docs("guides/database-objects/relations#build-a-tree-of-rows-with-a-parent-link"))
|
|
758
758
|
```
|
|
759
759
|
|
|
760
|
+
## Keep dependencies free of cycles with `acyclic`
|
|
761
|
+
|
|
762
|
+
`acyclic: true` keeps the links of a column free of cycles. It works on a link, or a list of links, to the same table (`ref: self`). Here `watch_after` lists the films to watch first, and `watch_before` is its inverse.
|
|
763
|
+
|
|
764
|
+
The engine refuses a write that closes a cycle:
|
|
765
|
+
|
|
766
|
+
* **Through the column**: a film can’t wait for a film that already waits for it
|
|
767
|
+
* **Through the inverse**: `watch_before` adds the matching `watch_after` link, and the engine checks that link too
|
|
768
|
+
* **On existing rows**: `alter_column` refuses `acyclic: true` while rows already form a cycle, and lists them
|
|
769
|
+
|
|
770
|
+
`hierarchy` refuses cycles too, but takes one parent per row. `acyclic` takes any number of links.
|
|
771
|
+
|
|
772
|
+
**`add_column`**
|
|
773
|
+
|
|
774
|
+
```json
|
|
775
|
+
{
|
|
776
|
+
"table": "film",
|
|
777
|
+
"column": {
|
|
778
|
+
"name": "watch_after",
|
|
779
|
+
"type": "list",
|
|
780
|
+
"items": "link",
|
|
781
|
+
"ref": "self",
|
|
782
|
+
"acyclic": true,
|
|
783
|
+
"description": "Films to watch before this one"
|
|
784
|
+
}
|
|
785
|
+
}
|
|
786
|
+
```
|
|
787
|
+
|
|
788
|
+
Answer:
|
|
789
|
+
|
|
790
|
+
```json
|
|
791
|
+
{
|
|
792
|
+
"ok": true,
|
|
793
|
+
"op": "add_column",
|
|
794
|
+
"planned_texts": ["datanotes/metastore.yaml"],
|
|
795
|
+
"commits": [{ "table": "main.public.film", "version": 13, "operation": "ADD COLUMNS" }],
|
|
796
|
+
"migration_id": "20261019T040640-add_column-add-column-watch_after-to-film"
|
|
797
|
+
}
|
|
798
|
+
```
|
|
799
|
+
|
|
800
|
+
**`add_column`**
|
|
801
|
+
|
|
802
|
+
```json
|
|
803
|
+
{
|
|
804
|
+
"table": "film",
|
|
805
|
+
"column": {
|
|
806
|
+
"name": "watch_before",
|
|
807
|
+
"type": "list",
|
|
808
|
+
"items": "link",
|
|
809
|
+
"ref": "self",
|
|
810
|
+
"inverse": "watch_after",
|
|
811
|
+
"description": "Films to watch after this one"
|
|
812
|
+
}
|
|
813
|
+
}
|
|
814
|
+
```
|
|
815
|
+
|
|
816
|
+
**`update_row`**
|
|
817
|
+
|
|
818
|
+
```json
|
|
819
|
+
{
|
|
820
|
+
"table": "film",
|
|
821
|
+
"path": "datanotes/main/public/film/Night of the Living Dead.md",
|
|
822
|
+
"set": { "watch_after": ["[[Charade]]"] }
|
|
823
|
+
}
|
|
824
|
+
```
|
|
825
|
+
|
|
826
|
+
**`update_row`**
|
|
827
|
+
|
|
828
|
+
```json
|
|
829
|
+
{
|
|
830
|
+
"table": "film",
|
|
831
|
+
"path": "datanotes/main/public/film/Charade.md",
|
|
832
|
+
"set": { "watch_after": ["[[His Girl Friday]]"] }
|
|
833
|
+
}
|
|
834
|
+
```
|
|
835
|
+
|
|
836
|
+
His Girl Friday can’t wait for Night of the Living Dead, which waits for it through Charade:
|
|
837
|
+
|
|
838
|
+
**`update_row`**
|
|
839
|
+
|
|
840
|
+
```json
|
|
841
|
+
{
|
|
842
|
+
"table": "film",
|
|
843
|
+
"path": "datanotes/main/public/film/His Girl Friday.md",
|
|
844
|
+
"set": { "watch_after": ["[[Night of the Living Dead]]"] }
|
|
845
|
+
}
|
|
846
|
+
```
|
|
847
|
+
|
|
848
|
+
Refused:
|
|
849
|
+
|
|
850
|
+
```text
|
|
851
|
+
update_row refused — nothing was written:
|
|
852
|
+
invalid datanotes/main/public/film/His Girl Friday.md: watch_after would close a cycle in "watch_after" (His Girl Friday → Night of the Living Dead → Charade → His Girl Friday)
|
|
853
|
+
invalid datanotes/main/public/film/Night of the Living Dead.md: watch_after would close a cycle in "watch_after" (Night of the Living Dead → Charade → His Girl Friday → Night of the Living Dead)
|
|
854
|
+
Hint: A row cannot depend on itself through an acyclic column: the message shows the cycle. Remove one of its links, or link to a row that is not on it; check_table lists the cycles already there. Then call update_row again (dry_run: true checks without writing).
|
|
855
|
+
Docs: https://datanotes.dev/guides/database-objects/relations.md#keep-dependencies-free-of-cycles-with-acyclic (offline: read_docs("guides/database-objects/relations#keep-dependencies-free-of-cycles-with-acyclic"))
|
|
856
|
+
```
|
|
857
|
+
|
|
858
|
+
Setting the inverse closes the same cycle, so the engine refuses it too:
|
|
859
|
+
|
|
860
|
+
**`update_row`**
|
|
861
|
+
|
|
862
|
+
```json
|
|
863
|
+
{
|
|
864
|
+
"table": "film",
|
|
865
|
+
"path": "datanotes/main/public/film/Night of the Living Dead.md",
|
|
866
|
+
"set": { "watch_before": ["[[His Girl Friday]]"] }
|
|
867
|
+
}
|
|
868
|
+
```
|
|
869
|
+
|
|
870
|
+
Refused:
|
|
871
|
+
|
|
872
|
+
```text
|
|
873
|
+
update_row refused — nothing was written:
|
|
874
|
+
invalid datanotes/main/public/film/His Girl Friday.md: watch_after would close a cycle in "watch_after" (His Girl Friday → Night of the Living Dead → Charade → His Girl Friday)
|
|
875
|
+
invalid datanotes/main/public/film/Night of the Living Dead.md: watch_after would close a cycle in "watch_after" (Night of the Living Dead → Charade → His Girl Friday → Night of the Living Dead)
|
|
876
|
+
Hint: A row cannot depend on itself through an acyclic column: the message shows the cycle. Remove one of its links, or link to a row that is not on it; check_table lists the cycles already there. Then call update_row again (dry_run: true checks without writing).
|
|
877
|
+
Docs: https://datanotes.dev/guides/database-objects/relations.md#keep-dependencies-free-of-cycles-with-acyclic (offline: read_docs("guides/database-objects/relations#keep-dependencies-free-of-cycles-with-acyclic"))
|
|
878
|
+
```
|
|
879
|
+
|
|
760
880
|
## Limit link targets with `ref_by` and `ref_where`
|
|
761
881
|
|
|
762
882
|
A link column can limit which rows it points to, without a CHECK. `ref_by` reads a column of the row itself. With `levels: [cinema, era, genre]`, Cinema has no parent, an era’s parent must be Cinema, and a genre’s parent must be an era.
|
|
@@ -787,7 +907,7 @@ Answer:
|
|
|
787
907
|
"commits": [
|
|
788
908
|
{ "table": "main.public.genre", "version": 10, "operation": "CHANGE COLUMN" }
|
|
789
909
|
],
|
|
790
|
-
"migration_id": "
|
|
910
|
+
"migration_id": "20261019T040642-alter_column-alter-column-parent-in-genre"
|
|
791
911
|
}
|
|
792
912
|
```
|
|
793
913
|
|
|
@@ -944,8 +1064,8 @@ Answer:
|
|
|
944
1064
|
"ok": true,
|
|
945
1065
|
"op": "add_column",
|
|
946
1066
|
"planned_texts": ["datanotes/metastore.yaml"],
|
|
947
|
-
"commits": [{ "table": "main.public.film", "version":
|
|
948
|
-
"migration_id": "
|
|
1067
|
+
"commits": [{ "table": "main.public.film", "version": 17, "operation": "ADD COLUMNS" }],
|
|
1068
|
+
"migration_id": "20261019T040642-add_column-add-column-genre-to-film"
|
|
949
1069
|
}
|
|
950
1070
|
```
|
|
951
1071
|
|
|
@@ -1027,7 +1147,7 @@ Answer:
|
|
|
1027
1147
|
"op": "add_column",
|
|
1028
1148
|
"planned_texts": ["datanotes/metastore.yaml"],
|
|
1029
1149
|
"commits": [{ "table": "main.public.watch", "version": 3, "operation": "ADD COLUMNS" }],
|
|
1030
|
-
"migration_id": "
|
|
1150
|
+
"migration_id": "20261019T040642-add_column-add-column-on_day-to-watch"
|
|
1031
1151
|
}
|
|
1032
1152
|
```
|
|
1033
1153
|
|
|
@@ -1056,7 +1176,7 @@ Answer:
|
|
|
1056
1176
|
"files_created": 1,
|
|
1057
1177
|
"planned_creates": ["datanotes/main/public/watch/2026-10-31T2300.md"],
|
|
1058
1178
|
"commits": [{ "table": "main.public.watch", "version": 4, "operation": "WRITE" }],
|
|
1059
|
-
"migration_id": "
|
|
1179
|
+
"migration_id": "20261019T040642-insert_row-insert-into-watch"
|
|
1060
1180
|
}
|
|
1061
1181
|
```
|
|
1062
1182
|
|
|
@@ -1065,7 +1185,7 @@ Answer:
|
|
|
1065
1185
|
```markdown
|
|
1066
1186
|
---
|
|
1067
1187
|
table: main.public.watch
|
|
1068
|
-
id:
|
|
1188
|
+
id: 01a15257-1c26-7cdc-8409-61767eceb696
|
|
1069
1189
|
film: "[[Night of the Living Dead]]"
|
|
1070
1190
|
where: cinema
|
|
1071
1191
|
place: the film club downtown
|
|
@@ -1094,7 +1214,7 @@ Refused:
|
|
|
1094
1214
|
|
|
1095
1215
|
```text
|
|
1096
1216
|
delete_rows refused — nothing was written:
|
|
1097
|
-
conflict datanotes/main/public/film/Charade.md: referenced by datanotes/main/public/actor/Audrey Hepburn.md, datanotes/main/public/actor/Cary Grant.md, datanotes/main/public/film/His Girl Friday.md, datanotes/main/public/watch/2026-09-26T2130.md
|
|
1217
|
+
conflict datanotes/main/public/film/Charade.md: referenced by datanotes/main/public/actor/Audrey Hepburn.md, datanotes/main/public/actor/Cary Grant.md, datanotes/main/public/film/His Girl Friday.md, datanotes/main/public/film/Night of the Living Dead.md, datanotes/main/public/watch/2026-09-26T2130.md
|
|
1098
1218
|
Hint: Other rows link to it: pass on_referenced ("set_null" or "ignore"), or change those rows first.
|
|
1099
1219
|
Docs: https://datanotes.dev/guides/database-objects/relations.md#delete-a-row-that-other-notes-link-to (offline: read_docs("guides/database-objects/relations#delete-a-row-that-other-notes-link-to"))
|
|
1100
1220
|
```
|
|
@@ -1135,20 +1255,20 @@ Delete the viewing and the film together with `batch`. The viewing goes first, t
|
|
|
1135
1255
|
}
|
|
1136
1256
|
```
|
|
1137
1257
|
|
|
1138
|
-
Answer (
|
|
1258
|
+
Answer (77 lines)
|
|
1139
1259
|
|
|
1140
1260
|
```json
|
|
1141
1261
|
{
|
|
1142
1262
|
"ok": true,
|
|
1143
1263
|
"op": "batch",
|
|
1144
1264
|
"dry_run": false,
|
|
1145
|
-
"migration_id": "
|
|
1265
|
+
"migration_id": "20261019T040643-batch-remove-charade-and-its-viewing",
|
|
1146
1266
|
"steps": [
|
|
1147
1267
|
{
|
|
1148
1268
|
"index": 0,
|
|
1149
1269
|
"op": "delete_rows",
|
|
1150
1270
|
"ok": true,
|
|
1151
|
-
"migration_id": "
|
|
1271
|
+
"migration_id": "20261019T040643-delete_rows-archive-1-rows-of-watch",
|
|
1152
1272
|
"result": {
|
|
1153
1273
|
"ok": true,
|
|
1154
1274
|
"op": "delete_rows",
|
|
@@ -1160,18 +1280,18 @@ Answer (72 lines)
|
|
|
1160
1280
|
}
|
|
1161
1281
|
],
|
|
1162
1282
|
"commits": [{ "table": "main.public.watch", "version": 5, "operation": "DELETE" }],
|
|
1163
|
-
"migration_id": "
|
|
1283
|
+
"migration_id": "20261019T040643-delete_rows-archive-1-rows-of-watch"
|
|
1164
1284
|
}
|
|
1165
1285
|
},
|
|
1166
1286
|
{
|
|
1167
1287
|
"index": 1,
|
|
1168
1288
|
"op": "delete_rows",
|
|
1169
1289
|
"ok": true,
|
|
1170
|
-
"migration_id": "
|
|
1290
|
+
"migration_id": "20261019T040643-delete_rows-archive-1-rows-of-film",
|
|
1171
1291
|
"result": {
|
|
1172
1292
|
"ok": true,
|
|
1173
1293
|
"op": "delete_rows",
|
|
1174
|
-
"notes_changed":
|
|
1294
|
+
"notes_changed": 5,
|
|
1175
1295
|
"files_moved": 1,
|
|
1176
1296
|
"planned_edits": [
|
|
1177
1297
|
{
|
|
@@ -1186,7 +1306,12 @@ Answer (72 lines)
|
|
|
1186
1306
|
},
|
|
1187
1307
|
{
|
|
1188
1308
|
"path": "datanotes/main/public/film/His Girl Friday.md",
|
|
1189
|
-
"set": { "see_also": [] },
|
|
1309
|
+
"set": { "see_also": [], "watch_before": [] },
|
|
1310
|
+
"remove": []
|
|
1311
|
+
},
|
|
1312
|
+
{
|
|
1313
|
+
"path": "datanotes/main/public/film/Night of the Living Dead.md",
|
|
1314
|
+
"set": { "watch_after": [] },
|
|
1190
1315
|
"remove": []
|
|
1191
1316
|
},
|
|
1192
1317
|
{
|
|
@@ -1203,9 +1328,9 @@ Answer (72 lines)
|
|
|
1203
1328
|
],
|
|
1204
1329
|
"commits": [
|
|
1205
1330
|
{ "table": "main.public.actor", "version": 7, "operation": "DELETE" },
|
|
1206
|
-
{ "table": "main.public.film", "version":
|
|
1331
|
+
{ "table": "main.public.film", "version": 18, "operation": "DELETE" }
|
|
1207
1332
|
],
|
|
1208
|
-
"migration_id": "
|
|
1333
|
+
"migration_id": "20261019T040643-delete_rows-archive-1-rows-of-film"
|
|
1209
1334
|
}
|
|
1210
1335
|
}
|
|
1211
1336
|
]
|
|
@@ -1223,7 +1348,7 @@ Answer:
|
|
|
1223
1348
|
```markdown
|
|
1224
1349
|
---
|
|
1225
1350
|
table: main.public.actor
|
|
1226
|
-
id:
|
|
1351
|
+
id: 01a15257-12f4-74ff-9c67-ad018a33f0ad
|
|
1227
1352
|
name: Cary Grant
|
|
1228
1353
|
born: 1904-01-18
|
|
1229
1354
|
films:
|
|
@@ -1237,7 +1362,7 @@ The engine wrote this file with the relations from this page:
|
|
|
1237
1362
|
|
|
1238
1363
|
* **Link columns**: each with its `ref`, and `self` kept as written
|
|
1239
1364
|
* **`inverse`**: on one side only
|
|
1240
|
-
* **`vocabulary`, `hierarchy` and `ref_where`**: as declared
|
|
1365
|
+
* **`vocabulary`, `hierarchy`, `acyclic` and `ref_where`**: as declared
|
|
1241
1366
|
* **`ref_by`**: with the `levels` shortcut kept as written
|
|
1242
1367
|
* **Generated link**: the `on_day` column with its template
|
|
1243
1368
|
|
|
@@ -1245,7 +1370,7 @@ The engine wrote this file with the relations from this page:
|
|
|
1245
1370
|
|
|
1246
1371
|
```yaml
|
|
1247
1372
|
# Metastore (Datanotes): catalogs, schemas, tables, columns, views.
|
|
1248
|
-
id:
|
|
1373
|
+
id: 01a15257-12e1-7b62-b27c-c29567a21bea
|
|
1249
1374
|
config:
|
|
1250
1375
|
history: true
|
|
1251
1376
|
|
|
@@ -1323,6 +1448,18 @@ catalogs:
|
|
|
1323
1448
|
items: string
|
|
1324
1449
|
description: My tags for the film, from the tag table
|
|
1325
1450
|
vocabulary: main.public.tag
|
|
1451
|
+
- name: watch_after
|
|
1452
|
+
type: list
|
|
1453
|
+
items: link
|
|
1454
|
+
ref: self
|
|
1455
|
+
description: Films to watch before this one
|
|
1456
|
+
acyclic: true
|
|
1457
|
+
- name: watch_before
|
|
1458
|
+
type: list
|
|
1459
|
+
items: link
|
|
1460
|
+
ref: self
|
|
1461
|
+
description: Films to watch after this one
|
|
1462
|
+
inverse: watch_after
|
|
1326
1463
|
- name: genre
|
|
1327
1464
|
type: link
|
|
1328
1465
|
ref: main.public.genre
|