From 48ea1400031596ec450f049ba9a3be5ad5bfcf3f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B6rg=20Henke?= Date: Wed, 3 Jan 2024 15:41:43 +0100 Subject: [PATCH] view optimization --- build.gradle | 2 +- .../timetrack/db/done/tables/VDaylimit.java | 16 +++-- .../done/tables/records/VDaylimitRecord.java | 68 ++++++++++--------- src/main/resources/done_ext.sql | 18 ++--- 4 files changed, 54 insertions(+), 50 deletions(-) diff --git a/build.gradle b/build.gradle index e21e684..1d3b705 100644 --- a/build.gradle +++ b/build.gradle @@ -23,7 +23,7 @@ apply plugin: 'maven-publish' apply plugin: 'eclipse' group = 'de.jottyfan' -version = '20240103' +version = '20240103b' def artifactId = 'timetrackjooq' def versionNumber = version diff --git a/src/main/java/de/jottyfan/timetrack/db/done/tables/VDaylimit.java b/src/main/java/de/jottyfan/timetrack/db/done/tables/VDaylimit.java index 8ed2066..58b1f98 100644 --- a/src/main/java/de/jottyfan/timetrack/db/done/tables/VDaylimit.java +++ b/src/main/java/de/jottyfan/timetrack/db/done/tables/VDaylimit.java @@ -8,6 +8,7 @@ import de.jottyfan.timetrack.db.done.Done; import de.jottyfan.timetrack.db.done.tables.records.VDaylimitRecord; import java.time.LocalDate; +import java.time.LocalTime; import java.util.function.Function; import org.jooq.Field; @@ -25,6 +26,7 @@ import org.jooq.TableOptions; import org.jooq.impl.DSL; import org.jooq.impl.SQLDataType; import org.jooq.impl.TableImpl; +import org.jooq.types.YearToSecond; /** @@ -51,22 +53,22 @@ public class VDaylimit extends TableImpl { /** * The column done.v_daylimit.daytime_from. */ - public final TableField DAYTIME_FROM = createField(DSL.name("daytime_from"), SQLDataType.CLOB, this, ""); + public final TableField DAYTIME_FROM = createField(DSL.name("daytime_from"), SQLDataType.LOCALTIME(6), this, ""); /** * The column done.v_daylimit.daytime_until. */ - public final TableField DAYTIME_UNTIL = createField(DSL.name("daytime_until"), SQLDataType.CLOB, this, ""); + public final TableField DAYTIME_UNTIL = createField(DSL.name("daytime_until"), SQLDataType.LOCALTIME(6), this, ""); /** * The column done.v_daylimit.dayworktime. */ - public final TableField DAYWORKTIME = createField(DSL.name("dayworktime"), SQLDataType.CLOB, this, ""); + public final TableField DAYWORKTIME = createField(DSL.name("dayworktime"), SQLDataType.LOCALTIME(6), this, ""); /** * The column done.v_daylimit.breaks. */ - public final TableField BREAKS = createField(DSL.name("breaks"), SQLDataType.CLOB, this, ""); + public final TableField BREAKS = createField(DSL.name("breaks"), SQLDataType.INTERVAL, this, ""); /** * The column done.v_daylimit.day. @@ -160,14 +162,14 @@ public class VDaylimit extends TableImpl { // ------------------------------------------------------------------------- @Override - public Row6 fieldsRow() { + public Row6 fieldsRow() { return (Row6) super.fieldsRow(); } /** * Convenience mapping calling {@link SelectField#convertFrom(Function)}. */ - public SelectField mapping(Function6 from) { + public SelectField mapping(Function6 from) { return convertFrom(Records.mapping(from)); } @@ -175,7 +177,7 @@ public class VDaylimit extends TableImpl { * Convenience mapping calling {@link SelectField#convertFrom(Class, * Function)}. */ - public SelectField mapping(Class toType, Function6 from) { + public SelectField mapping(Class toType, Function6 from) { return convertFrom(toType, Records.mapping(from)); } } diff --git a/src/main/java/de/jottyfan/timetrack/db/done/tables/records/VDaylimitRecord.java b/src/main/java/de/jottyfan/timetrack/db/done/tables/records/VDaylimitRecord.java index 23ec086..e171686 100644 --- a/src/main/java/de/jottyfan/timetrack/db/done/tables/records/VDaylimitRecord.java +++ b/src/main/java/de/jottyfan/timetrack/db/done/tables/records/VDaylimitRecord.java @@ -7,75 +7,77 @@ package de.jottyfan.timetrack.db.done.tables.records; import de.jottyfan.timetrack.db.done.tables.VDaylimit; import java.time.LocalDate; +import java.time.LocalTime; import org.jooq.Field; import org.jooq.Record6; import org.jooq.Row6; import org.jooq.impl.TableRecordImpl; +import org.jooq.types.YearToSecond; /** * This class is generated by jOOQ. */ @SuppressWarnings({ "all", "unchecked", "rawtypes" }) -public class VDaylimitRecord extends TableRecordImpl implements Record6 { +public class VDaylimitRecord extends TableRecordImpl implements Record6 { private static final long serialVersionUID = 1L; /** * Setter for done.v_daylimit.daytime_from. */ - public void setDaytimeFrom(String value) { + public void setDaytimeFrom(LocalTime value) { set(0, value); } /** * Getter for done.v_daylimit.daytime_from. */ - public String getDaytimeFrom() { - return (String) get(0); + public LocalTime getDaytimeFrom() { + return (LocalTime) get(0); } /** * Setter for done.v_daylimit.daytime_until. */ - public void setDaytimeUntil(String value) { + public void setDaytimeUntil(LocalTime value) { set(1, value); } /** * Getter for done.v_daylimit.daytime_until. */ - public String getDaytimeUntil() { - return (String) get(1); + public LocalTime getDaytimeUntil() { + return (LocalTime) get(1); } /** * Setter for done.v_daylimit.dayworktime. */ - public void setDayworktime(String value) { + public void setDayworktime(LocalTime value) { set(2, value); } /** * Getter for done.v_daylimit.dayworktime. */ - public String getDayworktime() { - return (String) get(2); + public LocalTime getDayworktime() { + return (LocalTime) get(2); } /** * Setter for done.v_daylimit.breaks. */ - public void setBreaks(String value) { + public void setBreaks(YearToSecond value) { set(3, value); } /** * Getter for done.v_daylimit.breaks. */ - public String getBreaks() { - return (String) get(3); + public YearToSecond getBreaks() { + return (YearToSecond) get(3); } /** @@ -111,32 +113,32 @@ public class VDaylimitRecord extends TableRecordImpl implements // ------------------------------------------------------------------------- @Override - public Row6 fieldsRow() { + public Row6 fieldsRow() { return (Row6) super.fieldsRow(); } @Override - public Row6 valuesRow() { + public Row6 valuesRow() { return (Row6) super.valuesRow(); } @Override - public Field field1() { + public Field field1() { return VDaylimit.V_DAYLIMIT.DAYTIME_FROM; } @Override - public Field field2() { + public Field field2() { return VDaylimit.V_DAYLIMIT.DAYTIME_UNTIL; } @Override - public Field field3() { + public Field field3() { return VDaylimit.V_DAYLIMIT.DAYWORKTIME; } @Override - public Field field4() { + public Field field4() { return VDaylimit.V_DAYLIMIT.BREAKS; } @@ -151,22 +153,22 @@ public class VDaylimitRecord extends TableRecordImpl implements } @Override - public String component1() { + public LocalTime component1() { return getDaytimeFrom(); } @Override - public String component2() { + public LocalTime component2() { return getDaytimeUntil(); } @Override - public String component3() { + public LocalTime component3() { return getDayworktime(); } @Override - public String component4() { + public YearToSecond component4() { return getBreaks(); } @@ -181,22 +183,22 @@ public class VDaylimitRecord extends TableRecordImpl implements } @Override - public String value1() { + public LocalTime value1() { return getDaytimeFrom(); } @Override - public String value2() { + public LocalTime value2() { return getDaytimeUntil(); } @Override - public String value3() { + public LocalTime value3() { return getDayworktime(); } @Override - public String value4() { + public YearToSecond value4() { return getBreaks(); } @@ -211,25 +213,25 @@ public class VDaylimitRecord extends TableRecordImpl implements } @Override - public VDaylimitRecord value1(String value) { + public VDaylimitRecord value1(LocalTime value) { setDaytimeFrom(value); return this; } @Override - public VDaylimitRecord value2(String value) { + public VDaylimitRecord value2(LocalTime value) { setDaytimeUntil(value); return this; } @Override - public VDaylimitRecord value3(String value) { + public VDaylimitRecord value3(LocalTime value) { setDayworktime(value); return this; } @Override - public VDaylimitRecord value4(String value) { + public VDaylimitRecord value4(YearToSecond value) { setBreaks(value); return this; } @@ -247,7 +249,7 @@ public class VDaylimitRecord extends TableRecordImpl implements } @Override - public VDaylimitRecord values(String value1, String value2, String value3, String value4, LocalDate value5, Integer value6) { + public VDaylimitRecord values(LocalTime value1, LocalTime value2, LocalTime value3, YearToSecond value4, LocalDate value5, Integer value6) { value1(value1); value2(value2); value3(value3); @@ -271,7 +273,7 @@ public class VDaylimitRecord extends TableRecordImpl implements /** * Create a detached, initialised VDaylimitRecord */ - public VDaylimitRecord(String daytimeFrom, String daytimeUntil, String dayworktime, String breaks, LocalDate day, Integer fkLogin) { + public VDaylimitRecord(LocalTime daytimeFrom, LocalTime daytimeUntil, LocalTime dayworktime, YearToSecond breaks, LocalDate day, Integer fkLogin) { super(VDaylimit.V_DAYLIMIT); setDaytimeFrom(daytimeFrom); diff --git a/src/main/resources/done_ext.sql b/src/main/resources/done_ext.sql index 4b6b9e9..3e20a74 100644 --- a/src/main/resources/done_ext.sql +++ b/src/main/resources/done_ext.sql @@ -31,20 +31,20 @@ grant select,insert,update,delete on done.t_freetime to timetrack; create view done.v_daylimit as with x(dayworktime, day, fk_login) as ( select coalesce(time_until - time_from, '0'::interval), - to_char(time_from, 'DD.MM.YYYY')::date, + time_from, fk_login from done.t_done ), y(daytime_from, daytime_until, day, fk_login) as ( select min(time_from), max(time_until), - to_char(time_from, 'DD.MM.YYYY')::date, + time_from, fk_login from done.t_done - group by to_char(time_from, 'DD.MM.YYYY')::date, fk_login -) select to_char(y.daytime_from, 'HH24:MI') as daytime_from, - to_char(y.daytime_until, 'HH24:MI') as daytime_until, - to_char(sum(x.dayworktime), 'HH24:MI') as dayworktime, - to_char(y.daytime_until - y.daytime_from - sum(x.dayworktime), 'HH24:MI') as breaks, - to_char(y.day, 'DD.MM.YYYY')::date as day, + group by time_from, fk_login +) select y.daytime_from::time, + y.daytime_until::time, + sum(x.dayworktime)::time as dayworktime, + y.daytime_until - y.daytime_from - sum(x.dayworktime) as breaks, + y.day::date, y.fk_login from x left join y on y.day = x.day and y.fk_login = x.fk_login @@ -54,7 +54,7 @@ with x(dayworktime, day, fk_login) as ( grant select on done.v_daylimit to timetrack; create view done.v_current_overtime as -select x.worktime_offset + sum(l.dayworktime::time - r.required) as overtime, +select x.worktime_offset + sum(l.dayworktime - r.required) as overtime, to_char(now(), 'DD.MM.YYYY HH24:MI') as impact, x.fk_login from done.t_overtime x