Implement spellfix
This commit is contained in:
88
food.ddl
88
food.ddl
@@ -27,28 +27,28 @@ order by date desc;
|
||||
create view weightDaily as
|
||||
select strftime('%Y-%m-%d', date) as period,
|
||||
round(avg(weight), 2) as amount
|
||||
from weight
|
||||
from weight
|
||||
group by strftime('%Y-%m-%d', date)
|
||||
order by date desc;
|
||||
|
||||
create view weightWeekly as
|
||||
select strftime('%Y-%W', date) as period,
|
||||
round(avg(weight), 2) as amount
|
||||
from weight
|
||||
from weight
|
||||
group by strftime('%Y-%W', date)
|
||||
order by date desc;
|
||||
|
||||
create view weightMonthly as
|
||||
select strftime('%Y-%m', date) as period,
|
||||
round(avg(weight), 2) as amount
|
||||
from weight
|
||||
from weight
|
||||
group by strftime('%Y-%m', date)
|
||||
order by date desc;
|
||||
|
||||
create view weightYearly as
|
||||
select strftime('%Y', date) as period,
|
||||
round(avg(weight), 2) as amount
|
||||
from weight
|
||||
from weight
|
||||
group by strftime('%Y', date)
|
||||
order by date desc;
|
||||
|
||||
@@ -61,6 +61,80 @@ create table food(
|
||||
energy generated always as (coalesce(amount, 0) * coalesce(per100, 0) / 100) stored
|
||||
);
|
||||
|
||||
create virtual table foodfix using spellfix1;
|
||||
-- insert into foodfix (word, rank)
|
||||
-- select food as word,
|
||||
-- count(*) as rank
|
||||
-- from food
|
||||
-- group by food;
|
||||
drop trigger if exists food_foodfix_insert;
|
||||
create trigger food_foodfix_insert AFTER
|
||||
insert on food for EACH row
|
||||
begin
|
||||
update foodfix
|
||||
set rank = rank + 1
|
||||
where word = new.food;
|
||||
insert into foodfix (word, rank)
|
||||
select new.food,
|
||||
1
|
||||
where not exists (
|
||||
select 1
|
||||
from foodfix
|
||||
where word = new.food
|
||||
);
|
||||
end;
|
||||
|
||||
drop trigger if exists food_foodfix_delete;
|
||||
create trigger food_foodfix_delete AFTER
|
||||
delete on food for EACH row
|
||||
begin
|
||||
update foodfix
|
||||
set rank = rank - 1
|
||||
where word = old.food;
|
||||
|
||||
delete from foodfix
|
||||
where word = old.food
|
||||
and rank <= 0;
|
||||
end;
|
||||
|
||||
|
||||
drop trigger if exists food_foodfix_update;
|
||||
create trigger food_foodfix_update AFTER
|
||||
update on food for EACH row
|
||||
begin
|
||||
update foodfix
|
||||
set rank = rank - 1
|
||||
where word = old.food;
|
||||
|
||||
delete from foodfix
|
||||
where word = old.food
|
||||
and rank <= 0;
|
||||
update foodfix
|
||||
set rank = rank + 1
|
||||
where word = new.food;
|
||||
|
||||
insert into foodfix (word, rank)
|
||||
select new.food,
|
||||
1
|
||||
where not exists (
|
||||
select 1
|
||||
from foodfix
|
||||
where word = new.food
|
||||
);
|
||||
end;
|
||||
|
||||
-- Spellfix search example
|
||||
with search_results as (
|
||||
select word, rank
|
||||
from foodfix
|
||||
where word MATCH 'B'
|
||||
limit 1
|
||||
)
|
||||
select f.*, s.rank
|
||||
from search_results s
|
||||
inner join food f on s.word = f.food
|
||||
order by f.date desc;
|
||||
|
||||
create index dailyIdx on food(strftime('%Y-%m-%d', date));
|
||||
create index weeklyIdx on food(strftime('%Y-%W', date));
|
||||
create index monthlyIdx on food(strftime('%Y-%m', date));
|
||||
@@ -134,17 +208,17 @@ insert on food
|
||||
begin
|
||||
update food
|
||||
set per100 = coalesce(
|
||||
new .per100,
|
||||
new.per100,
|
||||
(
|
||||
select per100
|
||||
from food
|
||||
where food = new .food
|
||||
where food = new.food
|
||||
and per100 is not null
|
||||
order by date desc
|
||||
limit 1
|
||||
)
|
||||
)
|
||||
where rowid = new .rowid;
|
||||
where rowid = new.rowid;
|
||||
end;
|
||||
|
||||
create table settings(
|
||||
|
Reference in New Issue
Block a user