Pessoal, fiquei com uma dúvida aqui. Na aula de "Bancos filtrados e as-of", a questão faz a seguinte pergunta:
"A vantagem de acessar qualquer momento histórico do banco é não perder nada do que aconteceu. Por outro lado sempre que temos uma conexão com o banco queremos definir qual o snapshot que queremos utilizar para fazer uma query."
E a resposta dada como correta é:
"Por padrão d/db reflete o momento atual, mas posso pedir acesso a uma query num momento específico usando o as-of."
Porém, existe a seguinte opção para ser marcada também:
"Por padrão d/db reflete o momento da conexão, mas posso pedir acesso a uma query num momento específico usando o as-of."
E rodando o código com o datomic na versão 1.0.7394, ele na verdade responde com o estado do banco na hora da conexão. Para que eu consiga os dados mais atualizados, eu precisaria realizar uma nova conexão com o banco.
Exemplo:
(ns ecommerce.core
(:require
[datomic.api :as d]
[ecommerce.db :as db]
[ecommerce.model :as model]))
(def conn (db/open-conn))
(db/cria-schema conn)
(let [pc (model/new-product "pc novo" "/pc-novo" 2500.30M)]
(d/transact conn [pc]))
(def db (d/db conn))
; retorna um datom contendo a inserção
(let [nome "pc novo"]
(d/q '[:find (pull ?entidade [*])
:in $ ?nome
:where [?entidade :produto/nome ?nome]]
db nome))
; inserindo um novo datom
(let [pc (model/new-product "pc novo" "/pc-novo2" 200.59M)]
(d/transact conn [pc]))
; utilizando a mesma variável "db"
; retorna APENAS UM datom contendo a primeira inserção
(let [nome "pc novo"]
(d/q '[:find (pull ?entidade [*])
:in $ ?nome
:where [?entidade :produto/nome ?nome]]
db nome))
; utilizando uma nova conexão
; retorna DOIS datoms contendo a segunda inserção
(let [nome "pc novo"]
(d/q '[:find (pull ?entidade [*])
:in $ ?nome
:where [?entidade :produto/nome ?nome]]
(d/db conn) nome))
Isso modificou em versões mais atualizadas do datomic?