(
defn-
sync-all-indexes!
[
database
]
(
sync-util/with-error-handling
"Error syncing Indexes"
(
let
[
indexes
(
fetch-metadata/log-if-error
"index-metadata"
(
into
[
]
(
driver/describe-indexes
(
driver.u/database->driver
database
)
database
)
)
)
database-id
(
:id
database
)
indexed-field-ids
(
all-indexes->field-ids
database-id
indexes
)
existing-indexed-field-ids
(
t2/select-pks-set
:model/Field
:table_id
[
:in
{
:select
[
[
:t.id
]
]
:from
[
[
(
t2/table-name
:model/Table
)
:t
]
]
:where
[
:=
:t.db_id
database-id
]
}
]
:parent_id
nil
:database_indexed
true
)
[
removing
adding
]
(
data/diff
existing-indexed-field-ids
indexed-field-ids
)
]
(
doseq
[
field-id
removing
]
(
log/infof
"Unmarking Field %d as indexed"
field-id
)
)
(
doseq
[
field-id
adding
]
(
log/infof
"Marking Field %d as indexed"
field-id
)
)
(
if
(
or
(
seq
adding
)
(
seq
removing
)
)
(
do
(
t2/update!
:model/Field
:table_id
[
:in
{
:select
[
[
:t.id
]
]
:from
[
[
(
t2/table-name
:model/Table
)
:t
]
]
:where
[
:=
:t.db_id
database-id
]
}
]
:parent_id
nil
{
:database_indexed
(
if
(
seq
indexed-field-ids
)
[
:case
[
:in
:id
indexed-field-ids
]
true
:else
false
]
false
)
}
)
{
:total-indexes
(
count
indexed-field-ids
)
:added-indexes
(
count
adding
)
:removed-indexes
(
count
removing
)
}
)
empty-stats
)
)
)
)