Compare commits

...
1 Commits
Author SHA1 Message Date
henkej 21c3ab28ec view optimization 2026-10-05 14:52:46 +02:00
4 changed files with 59 additions and 30 deletions

No files matched your search

+1 -2
View File
@@ -4,7 +4,6 @@ buildscript {
mavenCentral()
maven { url "https://repo.maven.apache.org/maven2" }
maven { url "https://plugins.gradle.org/m2/" }
jcenter()
}
dependencies {
classpath 'org.jooq:jooq-codegen:3.19.15'
@@ -23,7 +22,7 @@ apply plugin: 'maven-publish'
apply plugin: 'eclipse'
group = 'de.jottyfan'
version = '20260114'
version = '20261005'
def artifactId = 'timetrackjooq'
def versionNumber = version
+1 -1
View File
@@ -1,5 +1,5 @@
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-8.14.3-bin.zip
distributionUrl=https\://services.gradle.org/distributions/gradle-9.5.0-bin.zip
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
+56 -26
View File
@@ -1,4 +1,4 @@
create schema done;
/vcreate schema done;
create table done.t_billing (
lastchange timestamp without time zone default now(),
@@ -41,7 +41,7 @@ create table done.t_done (
create table done.t_favorite (
lastchange timestamp without time zone default now(),
pk_favorite integer not null primary key generated always as identity,
fk_login integer not null references profile.t_login(pk),
fk_login integer not null references profile.t_login(pk),
fk_project integer references done.t_project(pk),
fk_module integer references done.t_module(pk),
fk_job integer references done.t_job(pk),
@@ -73,13 +73,30 @@ create table done.t_freetime (
unique(day, fk_login)
);
create view done.v_favorite as
select f.pk_favorite, f.fk_login, p.name as project, m.name as module, j.name as job, b.name as billing
from done.t_favorite f
left join done.t_project p on p.pk = f.fk_project
left join done.t_module m on m.pk = f.fk_module
left join done.t_job j on j.pk = f.fk_job
left join done.t_billing b on b.pk = f.fk_billing;
create or replace view done.v_favorite as
with x(fk_login, fk_project, fk_module, fk_job, fk_billing, amount) as (
select fk_login, fk_project, fk_module, fk_job, fk_billing, count(*)
from done.t_done
group by fk_login, fk_project, fk_module, fk_job, fk_billing
)
select f.pk_favorite,
f.fk_login,
p.name as project,
m.name as module,
j.name as job,
b.name as billing,
coalesce(x.amount, 0) as usage_count
from done.t_favorite f
left join done.t_project p on p.pk = f.fk_project
left join done.t_module m on m.pk = f.fk_module
left join done.t_job j on j.pk = f.fk_job
left join done.t_billing b on b.pk = f.fk_billing
left join x
on x.fk_login = f.fk_login
and x.fk_project is not distinct from f.fk_project
and x.fk_module is not distinct from f.fk_module
and x.fk_job is not distinct from f.fk_job
and x.fk_billing is not distinct from f.fk_billing;
create view done.v_billing as
with x(total) as (
@@ -97,11 +114,11 @@ create view done.v_done as
select d.pk as fk_done,
l.pk as fk_login,
d.time_from,
d.time_until,
p.name as project_name,
m.name as module_name,
j.name as job_name,
l.login
d.time_until,
p.name as project_name,
m.name as module_name,
j.name as job_name,
l.login
from done.t_done d
left join done.t_project p on p.pk = d.fk_project
left join done.t_module m on m.pk = d.fk_module
@@ -127,8 +144,8 @@ create view done.v_daylimits as
with x(time_from, time_until, day, fk_login) as (
select time_from,
coalesce(time_until::timestamp with time zone, now()) as "coalesce",
to_char(time_from, 'yyyy-MM-dd'::text) as day,
fk_login
to_char(time_from, 'yyyy-MM-dd'::text) as day,
fk_login
from done.t_done
) select min(x.time_from) as work_start,
max(x.time_until) as work_end,
@@ -147,11 +164,11 @@ create view done.v_eucanshare as
select d.pk as fk_done,
d.time_from::date as workday,
age(d.time_until, d.time_from) as duration,
p.name as project_name,
m.name as module_name,
j.name as job_name,
b.name as billing_name,
d.fk_login
p.name as project_name,
m.name as module_name,
j.name as job_name,
b.name as billing_name,
d.fk_login
from done.t_done d
left join done.t_project p on p.pk = d.fk_project
left join done.t_module m on m.pk = d.fk_module
@@ -160,11 +177,11 @@ left join done.t_billing b on b.pk = d.fk_billing;
create view done.v_hamster as
select time_from::date as workday,
age(time_until, time_from) as duration,
project_name,
module_name,
job_name,
login
age(time_until, time_from) as duration,
project_name,
module_name,
job_name,
login
from done.v_done;
create view done.v_hamstersummary as
@@ -304,6 +321,18 @@ with x(dayworktime, day, fk_login, required, starttime, endtime) as (
from x
order by day desc, fk_login;
create view done.v_favorite_count as
select f.pk_favorite,
f.fk_login,
count(d.pk) as usage_count
from done.t_favorite f
left join done.t_done d on d.fk_login = f.fk_login
and d.fk_project is not distinct from f.fk_project
and d.fk_module is not distinct from f.fk_module
and d.fk_job is not distinct from f.fk_job
and d.fk_billing is not distinct from f.fk_billing
group by f.pk_favorite, f.fk_login;
copy done.t_billing (lastchange, pk, name, shortcut, csskey) from stdin;
2021-03-05 19:37:07.12832 1 WP2 (eucs) - Opal/Mica/..., REST WP2 WP2
2021-03-05 19:37:07.12832 2 WP4 (eucs) - Square² WP4 WP4
@@ -414,3 +443,4 @@ grant select on done.v_worktime to timetrack;
grant select on done.v_daylimit to timetrack;
grant select on done.v_current_overtime to timetrack;
grant select on done.v_day to timetrack;
grant select on done.v_favorite_count to timetrack;
+1 -1
View File
@@ -1,5 +1,5 @@
create or replace view public.v_version as
select 20260114 as version;
select 20261005 as version;
grant usage on schema public to timetrack;