--- InterpreterQuery
+++ InterpreterQuery
@@ -44,20 +44,21 @@
show birthDate
]]]
== 정한 것과 그 이유
* '''모르는 줄은 오류입니다.''' `shwo` 로 잘못 적은 줄이 조용히 무시되면, 아무것도 안 보이는 것이 «조건에 맞는 페이지가 없다» 와 구별되지 않습니다. 오류 상자가 어느 줄이 문제인지 말합니다.
* '''class 도 `where` 도 없는 질의는 거부합니다.''' 위키의 모든 페이지가 되기 때문입니다.
* '''속성이 없는 페이지는 정렬에서 맨 뒤입니다''', 오름차순이든 내림차순이든. 없는 것이지 가장 작은 것이 아닙니다. 값이 같으면 이름순이라 렌더링마다 순서가 바뀌지 않습니다.
* '''읽을 수 없는 페이지는 목록에도, 개수에도 나오지 않습니다.'''
* '''그릴 때 읽습니다.''' 어떤 페이지가 `#!Schema` 를 저장하는 즉시 이 목록에 나타납니다. 이 인터프리터가 따로 저장하는 것은 없습니다.
* 값은 [InterpreterSchema] 가 그리는 것과 같이 위키 링크로 나옵니다.
+ * '''연월만 있는 값은 감춥니다.''' `#!Schema` 는 날짜를 그 자체(`1972-10-17`)와 연월(`1972-10`)로 함께 저장하므로(월로 찾으려는 것), 그대로 보이면 생일이 둘인 것처럼 읽힙니다. 같은 속성에 그 연월로 시작하는 더 긴 값이 있으면 짧은 쪽을 보이지 않게 합니다 — 데이터에서는 지우지 않으니 `where` 는 둘 다 봅니다.
== 아직 없는 것
* 카드·보드·달력 보기. 노션과 옵시디언 Bases 는 갖고 있습니다. 표와 목록으로 시작한 것은 나머지가 «데이터를 어떻게 고르는가» 가 아니라 «어떻게 그리는가» 의 문제라서, 고르는 쪽을 먼저 굳히려는 것입니다.
* 계산 열(노션의 formula·rollup)과 페이지 간 관계 따라가기.
* 여러 값 중 어느 것으로 정렬할지 고르기 — 지금은 첫 값(글자순으로 가장 앞)입니다.
* 속성을 `#!Schema` 가 아니라 본문에서 읽기.
== 구현
* `QueryEngine` — 순수 함수: 줄을 읽고(`parse`), 조건을 평가하고, 정렬·묶기·자르기를 합니다. 데이터베이스도 HTML 도 모릅니다. `QueryEngineSpec` 이 확인합니다.
* `InterpreterQuery` — `CalculatedSchemaOrg` 에서 필요한 속성만(`selectFacts`) 읽어 엔진에 주고 그립니다. 한 번에 읽는 행은 2만으로 막아 두었습니다 — 거의 모든 페이지가 가진 속성으로 물으면 «앞의 행들» 로 줄어들 뿐 테이블을 통째로 읽지는 않습니다.