* fix database interfaces * add queries * fix queries * fix linters * add owner to imported go library * remove unused funcs * run go work sync * improve critical section fix in data race fix * fix linters * remove sync * fix typo * improve data embedding * fix linters * fix migration * remove unnecessary comments * fix linters * improve SQL templates readability * remove group_version from kind_version for consistency in History method * add created_at and updated_at columns to kind_version table
79 lines
3.4 KiB
SQL
79 lines
3.4 KiB
SQL
SELECT
|
|
{{ .Ident "guid" | .Into .Entity.Guid }},
|
|
{{ .Ident "resource_version" | .Into .Entity.ResourceVersion }},
|
|
|
|
{{ .Ident "key" | .Into .Entity.Key }},
|
|
|
|
{{ .Ident "group" | .Into .Entity.Group }},
|
|
{{ .Ident "group_version" | .Into .Entity.GroupVersion }},
|
|
{{ .Ident "resource" | .Into .Entity.Resource }},
|
|
{{ .Ident "namespace" | .Into .Entity.Namespace }},
|
|
{{ .Ident "name" | .Into .Entity.Name }},
|
|
|
|
{{ .Ident "folder" | .Into .Entity.Folder }},
|
|
|
|
{{ .Ident "meta" | .Into .Entity.Meta }},
|
|
{{ .Ident "body" | .Into .Entity.Body }},
|
|
{{ .Ident "status" | .Into .Entity.Status }},
|
|
|
|
{{ .Ident "size" | .Into .Entity.Size }},
|
|
{{ .Ident "etag" | .Into .Entity.ETag }},
|
|
|
|
{{ .Ident "created_at" | .Into .Entity.CreatedAt }},
|
|
{{ .Ident "created_by" | .Into .Entity.CreatedBy }},
|
|
{{ .Ident "updated_at" | .Into .Entity.UpdatedAt }},
|
|
{{ .Ident "updated_by" | .Into .Entity.UpdatedBy }},
|
|
|
|
{{ .Ident "origin" | .Into .Entity.Origin.Source }},
|
|
{{ .Ident "origin_key" | .Into .Entity.Origin.Key }},
|
|
{{ .Ident "origin_ts" | .Into .Entity.Origin.Time }},
|
|
|
|
{{ .Ident "title" | .Into .Entity.Title }},
|
|
{{ .Ident "slug" | .Into .Entity.Slug }},
|
|
{{ .Ident "description" | .Into .Entity.Description }},
|
|
|
|
{{ .Ident "message" | .Into .Entity.Message }},
|
|
{{ .Ident "labels" | .Into .Entity.Labels }},
|
|
{{ .Ident "fields" | .Into .Entity.Fields }},
|
|
{{ .Ident "errors" | .Into .Entity.Errors }},
|
|
|
|
{{ .Ident "action" | .Into .Entity.Action }}
|
|
|
|
FROM
|
|
{{ if gt .ResourceVersion 0 }}
|
|
{{ .Ident "entity_history" }}
|
|
{{ else }}
|
|
{{ .Ident "entity" }}
|
|
{{ end }}
|
|
|
|
WHERE 1 = 1
|
|
AND {{ .Ident "namespace" }} = {{ .Arg .Key.Namespace }}
|
|
AND {{ .Ident "group" }} = {{ .Arg .Key.Group }}
|
|
AND {{ .Ident "resource" }} = {{ .Arg .Key.Resource }}
|
|
AND {{ .Ident "name" }} = {{ .Arg .Key.Name }}
|
|
|
|
{{/*
|
|
Resource versions work like snapshots at the kind level. Thus, a request
|
|
to retrieve a specific resource version should be interpreted as asking
|
|
for a resource as of how it existed at that point in time. This is why we
|
|
request matching entities with at most the provided resource version, and
|
|
return only the one with the highest resource version. In the case of not
|
|
specifying a resource version (i.e. resource version zero), it is
|
|
interpreted as the latest version of the given entity, thus we instead
|
|
query the "entity" table (which holds only the latest version of
|
|
non-deleted entities) and we don't need to specify anything else. The
|
|
"entity" table has a unique constraint on (namespace, group, resource,
|
|
name), so we're guaranteed to have at most one matching row.
|
|
*/}}
|
|
{{ if gt .ResourceVersion 0 }}
|
|
AND {{ .Ident "resource_version" }} <= {{ .Arg .ResourceVersion }}
|
|
|
|
ORDER BY {{ .Ident "resource_version" }} DESC
|
|
LIMIT 1
|
|
{{ end }}
|
|
|
|
{{ if .SelectForUpdate }}
|
|
{{ .SelectFor "UPDATE" }}
|
|
{{ end }}
|
|
;
|