mirror of https://github.com/voidlizard/hbs2
wip
This commit is contained in:
parent
387b6bece7
commit
e74cd2b38a
|
@ -9,7 +9,7 @@ fixme-prefix TODO:
|
||||||
fixme-prefix PR:
|
fixme-prefix PR:
|
||||||
fixme-prefix REVIEW:
|
fixme-prefix REVIEW:
|
||||||
|
|
||||||
fixme-git-scan-filter-days 600
|
fixme-git-scan-filter-days 60
|
||||||
|
|
||||||
fixme-attribs assigned workflow
|
fixme-attribs assigned workflow
|
||||||
|
|
||||||
|
|
|
@ -747,6 +747,9 @@ run what = do
|
||||||
ListVal [SymbolVal "builtin:cleanup-state"] -> do
|
ListVal [SymbolVal "builtin:cleanup-state"] -> do
|
||||||
cleanupDatabase
|
cleanupDatabase
|
||||||
|
|
||||||
|
ListVal [SymbolVal "builtin:update-indexes"] -> do
|
||||||
|
updateIndexes
|
||||||
|
|
||||||
ListVal [SymbolVal "trace"] -> do
|
ListVal [SymbolVal "trace"] -> do
|
||||||
setLogging @TRACE (logPrefix "[trace] " . toStderr)
|
setLogging @TRACE (logPrefix "[trace] " . toStderr)
|
||||||
trace "trace on"
|
trace "trace on"
|
||||||
|
|
|
@ -199,6 +199,19 @@ createTables = do
|
||||||
)
|
)
|
||||||
|]
|
|]
|
||||||
|
|
||||||
|
ddl [qc|
|
||||||
|
create table if not exists fixmejson
|
||||||
|
( fixme text not null
|
||||||
|
, fixmekey text
|
||||||
|
, json blob
|
||||||
|
, primary key (fixme)
|
||||||
|
)
|
||||||
|
|]
|
||||||
|
|
||||||
|
ddl [qc|
|
||||||
|
create index if not exists idx_fixmekey ON fixmejson(fixmekey)
|
||||||
|
|]
|
||||||
|
|
||||||
-- .fixme-new/state.db
|
-- .fixme-new/state.db
|
||||||
-- and not exists (select null from fixmedeleted d where a.fixme = id limit 1)
|
-- and not exists (select null from fixmedeleted d where a.fixme = id limit 1)
|
||||||
|
|
||||||
|
@ -370,8 +383,9 @@ genPredQ tbl what = go what
|
||||||
([qc|({tbl}.fixme like ?)|], binds)
|
([qc|({tbl}.fixme like ?)|], binds)
|
||||||
|
|
||||||
AttrLike name val -> do
|
AttrLike name val -> do
|
||||||
let binds = [Bound name, Bound (val <> "%")]
|
let x = val <> "%"
|
||||||
([qc|(exists (select null from fixmeattrview x where x.fixme = a.fixme and x.name = ? and x.value like ?))|], binds)
|
let binds = [Bound x]
|
||||||
|
([qc|(json_extract(json, '$."{name}"') like ?)|], binds)
|
||||||
|
|
||||||
|
|
||||||
And a b -> do
|
And a b -> do
|
||||||
|
@ -386,18 +400,44 @@ genPredQ tbl what = go what
|
||||||
|
|
||||||
Ignored -> ("false", mempty)
|
Ignored -> ("false", mempty)
|
||||||
|
|
||||||
selectFixmeThin :: (FixmePerks m, HasPredicate a) => a -> FixmeM m [FixmeThin]
|
|
||||||
selectFixmeThin a = withState do
|
|
||||||
|
|
||||||
let predic = genPredQ "a" (predicate a)
|
updateFixmeJson :: FixmePerks m => DBPipeM m ()
|
||||||
|
updateFixmeJson = do
|
||||||
|
|
||||||
let sql = [qc|
|
update_ [qc|
|
||||||
|
|
||||||
|
insert into fixmejson (fixme,fixmekey,json)
|
||||||
|
with json as (
|
||||||
select
|
select
|
||||||
cast(json_set(json_group_object(a.name,a.value), '$."fixme-hash"', f.fixme) as blob)
|
a.fixme as fixme,
|
||||||
|
cast(json_set(json_group_object(a.name,a.value), '$."fixme-hash"', f.fixme) as blob) as json
|
||||||
|
|
||||||
from
|
from
|
||||||
fixmeattrview a join fixmeactual f on f.fixme = a.fixme
|
fixmeattrview a join fixmeactual f on f.fixme = a.fixme
|
||||||
|
|
||||||
|
group by a.fixme
|
||||||
|
)
|
||||||
|
|
||||||
|
select
|
||||||
|
fixme
|
||||||
|
, json_extract(json, '$."fixme-key"') as fixmekey
|
||||||
|
, json
|
||||||
|
from json where true
|
||||||
|
on conflict (fixme) do update set json = excluded.json, fixmekey = excluded.fixmekey
|
||||||
|
|]
|
||||||
|
|
||||||
|
|
||||||
|
selectFixmeThin :: (FixmePerks m, HasPredicate a) => a -> FixmeM m [FixmeThin]
|
||||||
|
selectFixmeThin a = withState do
|
||||||
|
|
||||||
|
let predic = genPredQ "j" (predicate a)
|
||||||
|
|
||||||
|
let sql = [qc|
|
||||||
|
|
||||||
|
select j.json as blob
|
||||||
|
|
||||||
|
from
|
||||||
|
fixmejson j join fixmeactual f on f.fixme = j.fixme
|
||||||
join fixme f0 on f0.id = f.fixme
|
join fixme f0 on f0.id = f.fixme
|
||||||
|
|
||||||
where
|
where
|
||||||
|
@ -406,11 +446,11 @@ where
|
||||||
{fst predic}
|
{fst predic}
|
||||||
)
|
)
|
||||||
|
|
||||||
group by a.fixme
|
|
||||||
order by f0.ts nulls first
|
order by f0.ts nulls first
|
||||||
|
|
||||||
|]
|
|]
|
||||||
|
|
||||||
|
trace $ red "selectFixmeThin" <> line <> pretty sql
|
||||||
|
|
||||||
(t,r) <- timeItT $ select sql (snd predic) <&> mapMaybe (Aeson.decode @FixmeThin . fromOnly)
|
(t,r) <- timeItT $ select sql (snd predic) <&> mapMaybe (Aeson.decode @FixmeThin . fromOnly)
|
||||||
|
|
||||||
|
@ -431,7 +471,7 @@ cleanupDatabase = do
|
||||||
update_ [qc|delete from fixmedeleted|]
|
update_ [qc|delete from fixmedeleted|]
|
||||||
update_ [qc|delete from fixmerel|]
|
update_ [qc|delete from fixmerel|]
|
||||||
update_ [qc|delete from fixmeactual|]
|
update_ [qc|delete from fixmeactual|]
|
||||||
|
update_ [qc|delete from fixmejson|]
|
||||||
|
|
||||||
deleteFixme :: (FixmePerks m,MonadReader FixmeEnv m) => Text -> m ()
|
deleteFixme :: (FixmePerks m,MonadReader FixmeEnv m) => Text -> m ()
|
||||||
deleteFixme hash = withState do
|
deleteFixme hash = withState do
|
||||||
|
@ -449,5 +489,6 @@ updateIndexes = withState $ transactional do
|
||||||
insert into fixmeactual
|
insert into fixmeactual
|
||||||
select distinct fixme from fixmeactualview
|
select distinct fixme from fixmeactualview
|
||||||
|]
|
|]
|
||||||
|
updateFixmeJson
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue