160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
|
Delete a particular article, or all notes for a particular article, respectively.
}
@section{Schema}
The cache database has four tables: @tt{articles}, @tt{notes}, @tt{index_entries} and @tt{series}. Each of these has a corresponding schema, shown below. In addition, there is a “virtual” schema, @tt{listing}, for use with queries which may or may not combine articles and notes intermingled.
The work of picking apart an article’s exported @tt{doc} and @tt{metas} into rows in these tables is done by @racket[parse-and-cache-article!].
The below are shown as @code{struct} forms but are actually defined with deta’s @racket[define-schema]. Each schema has an associated struct with the same name and a smart constructor called @tt{make-@emph{id}}. The struct’s “dumb” constructor is hidden so that invalid entities cannot be created. For every defined field there is an associated functional setter and updater named @tt{set-@emph{id}-field} and @tt{update-@emph{id}-field}, respectively.
@defstruct*[cache:article ([id id/f]
[page symbol/f]
[title-plain string/f]
[title-html-flow string/f]
[title-specified boolean/f]
[published string/f]
|
|
>
>
|
>
|
>
>
>
>
|
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
|
Delete a particular article, or all notes for a particular article, respectively.
}
@section{Schema}
The cache database has four tables: @tt{articles}, @tt{notes}, @tt{index_entries} and @tt{series}.
Each of these has a corresponding schema, shown below. In addition, there is a “virtual” schema,
@tt{listing}, for use with queries which may or may not combine articles and notes intermingled.
The work of picking apart an article’s exported @tt{doc} and @tt{metas} into rows in these tables is
done by @racket[parse-and-cache-article!].
The below are shown as @code{struct} forms but are actually defined with deta’s
@racket[define-schema]. Each schema has an associated struct with the same name and a smart
constructor called @tt{make-@emph{id}}. The struct’s “dumb” constructor is hidden so that invalid
entities cannot be created. For every defined field there is an associated functional setter and
updater named @tt{set-@emph{id}-field} and @tt{update-@emph{id}-field}, respectively.
@defstruct*[cache:article ([id id/f]
[page symbol/f]
[title-plain string/f]
[title-html-flow string/f]
[title-specified boolean/f]
[published string/f]
|
243
244
245
246
247
248
249
250
251
252
253
|
[author string/f]
[published string/f]
[updated string/f]
[html string/f])
#:constructor-name make-listing]{
This is a “virtual” schema targeted by @racket[articles] and @racket[articles+notes] using deta’s
@racket[project-onto]. It supplies the minimum set of fields needed to build the RSS feed; most
times (e.g., on @tech{series} pages) only the @tt{html} field is used, via @racket[fenced-listing].
}
|
|
|
>
|
250
251
252
253
254
255
256
257
258
259
260
261
|
[author string/f]
[published string/f]
[updated string/f]
[html string/f])
#:constructor-name make-listing]{
This is a “virtual” schema targeted by @racket[articles] and @racket[articles+notes] using deta’s
@racket[project-onto]. It supplies the minimum set of fields needed to build the RSS feed, and which
are common to both articles and notes; most times (e.g., on @tech{series} pages) only the @tt{html}
field is used, via @racket[fenced-listing] or @racket[listing-htmls].
}
|