reduce unnecessary lot queries

deepsource-autofix-76c6eb20
Dan Gowans 2023-03-28 10:43:35 -04:00
parent 31f439597e
commit f33ddb604f
4 changed files with 87 additions and 58 deletions

View File

@ -65,26 +65,33 @@ export async function getWorkOrders(filters, options, connectedDatabase) {
let workOrders = [];
if (count > 0) {
workOrders = database
.prepare('select w.workOrderId,' +
' w.workOrderTypeId, t.workOrderType,' +
' w.workOrderNumber, w.workOrderDescription,' +
' w.workOrderOpenDate, userFn_dateIntegerToString(w.workOrderOpenDate) as workOrderOpenDateString,' +
' w.workOrderCloseDate, userFn_dateIntegerToString(w.workOrderCloseDate) as workOrderCloseDateString,' +
' ifnull(m.workOrderMilestoneCount, 0) as workOrderMilestoneCount,' +
' ifnull(m.workOrderMilestoneCompletionCount, 0) as workOrderMilestoneCompletionCount' +
' from WorkOrders w' +
' left join WorkOrderTypes t on w.workOrderTypeId = t.workOrderTypeId' +
(' left join (select workOrderId,' +
' count(workOrderMilestoneId) as workOrderMilestoneCount,' +
' sum(case when workOrderMilestoneCompletionDate is null then 0 else 1 end) as workOrderMilestoneCompletionCount' +
' from WorkOrderMilestones' +
' where recordDelete_timeMillis is null' +
' group by workOrderId) m on w.workOrderId = m.workOrderId') +
sqlWhereClause +
' order by w.workOrderOpenDate desc, w.workOrderNumber desc' +
(options.limit === -1
? ''
: ` limit ${options.limit} offset ${options.offset}`))
.prepare(`select w.workOrderId,
w.workOrderTypeId, t.workOrderType,
w.workOrderNumber, w.workOrderDescription,
w.workOrderOpenDate, userFn_dateIntegerToString(w.workOrderOpenDate) as workOrderOpenDateString,
w.workOrderCloseDate, userFn_dateIntegerToString(w.workOrderCloseDate) as workOrderCloseDateString,
ifnull(m.workOrderMilestoneCount, 0) as workOrderMilestoneCount,
ifnull(m.workOrderMilestoneCompletionCount, 0) as workOrderMilestoneCompletionCount,
ifnull(l.workOrderLotCount, 0) as workOrderLotCount
from WorkOrders w
left join WorkOrderTypes t on w.workOrderTypeId = t.workOrderTypeId
left join (
select workOrderId,
count(workOrderMilestoneId) as workOrderMilestoneCount,
sum(case when workOrderMilestoneCompletionDate is null then 0 else 1 end) as workOrderMilestoneCompletionCount
from WorkOrderMilestones
where recordDelete_timeMillis is null
group by workOrderId) m on w.workOrderId = m.workOrderId
left join (
select workOrderId, count(lotId) as workOrderLotCount
from WorkOrderLots
where recordDelete_timeMillis is null
group by workOrderId) l on w.workOrderId = l.workOrderId
${sqlWhereClause}
order by w.workOrderOpenDate desc, w.workOrderNumber desc
${options.limit === -1
? ''
: ` limit ${options.limit} offset ${options.offset}`}`)
.all(sqlParameters);
}
const hasInclusions = (options.includeComments ?? false) ||
@ -96,13 +103,18 @@ export async function getWorkOrders(filters, options, connectedDatabase) {
workOrder.workOrderComments = await getWorkOrderComments(workOrder.workOrderId, database);
}
if (options.includeLotsAndLotOccupancies ?? false) {
const workOrderLotsResults = await getLots({
workOrderId: workOrder.workOrderId
}, {
limit: -1,
offset: 0
}, database);
workOrder.workOrderLots = workOrderLotsResults.lots;
if (workOrder.workOrderLotCount === 0) {
workOrder.workOrderLots = [];
}
else {
const workOrderLotsResults = await getLots({
workOrderId: workOrder.workOrderId
}, {
limit: -1,
offset: 0
}, database);
workOrder.workOrderLots = workOrderLotsResults.lots;
}
const lotOccupancies = await getLotOccupancies({
workOrderId: workOrder.workOrderId
}, {

View File

@ -121,26 +121,35 @@ export async function getWorkOrders(
if (count > 0) {
workOrders = database
.prepare(
'select w.workOrderId,' +
' w.workOrderTypeId, t.workOrderType,' +
' w.workOrderNumber, w.workOrderDescription,' +
' w.workOrderOpenDate, userFn_dateIntegerToString(w.workOrderOpenDate) as workOrderOpenDateString,' +
' w.workOrderCloseDate, userFn_dateIntegerToString(w.workOrderCloseDate) as workOrderCloseDateString,' +
' ifnull(m.workOrderMilestoneCount, 0) as workOrderMilestoneCount,' +
' ifnull(m.workOrderMilestoneCompletionCount, 0) as workOrderMilestoneCompletionCount' +
' from WorkOrders w' +
' left join WorkOrderTypes t on w.workOrderTypeId = t.workOrderTypeId' +
(' left join (select workOrderId,' +
' count(workOrderMilestoneId) as workOrderMilestoneCount,' +
' sum(case when workOrderMilestoneCompletionDate is null then 0 else 1 end) as workOrderMilestoneCompletionCount' +
' from WorkOrderMilestones' +
' where recordDelete_timeMillis is null' +
' group by workOrderId) m on w.workOrderId = m.workOrderId') +
sqlWhereClause +
' order by w.workOrderOpenDate desc, w.workOrderNumber desc' +
(options.limit === -1
? ''
: ` limit ${options.limit} offset ${options.offset}`)
`select w.workOrderId,
w.workOrderTypeId, t.workOrderType,
w.workOrderNumber, w.workOrderDescription,
w.workOrderOpenDate, userFn_dateIntegerToString(w.workOrderOpenDate) as workOrderOpenDateString,
w.workOrderCloseDate, userFn_dateIntegerToString(w.workOrderCloseDate) as workOrderCloseDateString,
ifnull(m.workOrderMilestoneCount, 0) as workOrderMilestoneCount,
ifnull(m.workOrderMilestoneCompletionCount, 0) as workOrderMilestoneCompletionCount,
ifnull(l.workOrderLotCount, 0) as workOrderLotCount
from WorkOrders w
left join WorkOrderTypes t on w.workOrderTypeId = t.workOrderTypeId
left join (
select workOrderId,
count(workOrderMilestoneId) as workOrderMilestoneCount,
sum(case when workOrderMilestoneCompletionDate is null then 0 else 1 end) as workOrderMilestoneCompletionCount
from WorkOrderMilestones
where recordDelete_timeMillis is null
group by workOrderId) m on w.workOrderId = m.workOrderId
left join (
select workOrderId, count(lotId) as workOrderLotCount
from WorkOrderLots
where recordDelete_timeMillis is null
group by workOrderId) l on w.workOrderId = l.workOrderId
${sqlWhereClause}
order by w.workOrderOpenDate desc, w.workOrderNumber desc
${
options.limit === -1
? ''
: ` limit ${options.limit} offset ${options.offset}`
}`
)
.all(sqlParameters)
}
@ -160,18 +169,22 @@ export async function getWorkOrders(
}
if (options.includeLotsAndLotOccupancies ?? false) {
const workOrderLotsResults = await getLots(
{
workOrderId: workOrder.workOrderId
},
{
limit: -1,
offset: 0
},
database
)
if (workOrder.workOrderLotCount === 0) {
workOrder.workOrderLots = []
} else {
const workOrderLotsResults = await getLots(
{
workOrderId: workOrder.workOrderId
},
{
limit: -1,
offset: 0
},
database
)
workOrder.workOrderLots = workOrderLotsResults.lots
workOrder.workOrderLots = workOrderLotsResults.lots
}
const lotOccupancies = await getLotOccupancies(
{

View File

@ -264,6 +264,7 @@ export interface WorkOrder extends Record {
workOrderMilestoneCompletionCount?: number;
workOrderComments?: WorkOrderComment[];
workOrderLots?: Lot[];
workOrderLotCount?: number;
workOrderLotOccupancies?: LotOccupancy[];
}
export interface User {

View File

@ -353,7 +353,10 @@ export interface WorkOrder extends Record {
workOrderMilestoneCompletionCount?: number
workOrderComments?: WorkOrderComment[]
workOrderLots?: Lot[]
workOrderLotCount?: number
workOrderLotOccupancies?: LotOccupancy[]
}