Skip to content

Commit

Permalink
add daily and monthly aggregate tables
Browse files Browse the repository at this point in the history
  • Loading branch information
dangowans committed Nov 22, 2023
1 parent 3e75e6d commit da70f25
Show file tree
Hide file tree
Showing 49 changed files with 1,004 additions and 347 deletions.
4 changes: 2 additions & 2 deletions database/addAsset.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import sqlite from 'better-sqlite3';
import { databasePath } from '../helpers/functions.database.js';
import { ensureEnergyDataTableExists } from './manageEnergyDataTables.js';
import { ensureEnergyDataTablesExists } from './manageEnergyDataTables.js';
export async function addAsset(asset, sessionUser, connectedEmileDB) {
const emileDB = connectedEmileDB ?? sqlite(databasePath);
const rightNowMillis = Date.now();
Expand All @@ -13,7 +13,7 @@ export async function addAsset(asset, sessionUser, connectedEmileDB) {
values (?, ?, ?, ?, ?, ?, ?, ?)`)
.run(asset.assetName, asset.categoryId, (asset.latitude ?? '') === '' ? undefined : asset.latitude, (asset.longitude ?? '') === '' ? undefined : asset.longitude, sessionUser.userName, rightNowMillis, sessionUser.userName, rightNowMillis);
const assetId = result.lastInsertRowid;
await ensureEnergyDataTableExists(assetId);
await ensureEnergyDataTablesExists(assetId);
if (connectedEmileDB === undefined) {
emileDB.close();
}
Expand Down
4 changes: 2 additions & 2 deletions database/addAsset.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ import sqlite from 'better-sqlite3'
import { databasePath } from '../helpers/functions.database.js'
import type { Asset } from '../types/recordTypes.js'

import { ensureEnergyDataTableExists } from './manageEnergyDataTables.js'
import { ensureEnergyDataTablesExists } from './manageEnergyDataTables.js'

export async function addAsset(
asset: Partial<Asset>,
Expand Down Expand Up @@ -36,7 +36,7 @@ export async function addAsset(

const assetId = result.lastInsertRowid as number

await ensureEnergyDataTableExists(assetId)
await ensureEnergyDataTablesExists(assetId)

if (connectedEmileDB === undefined) {
emileDB.close()
Expand Down
7 changes: 4 additions & 3 deletions database/addEnergyData.js
Original file line number Diff line number Diff line change
@@ -1,17 +1,17 @@
import { clearCacheByTableName } from '../helpers/functions.cache.js';
import { getConnectionWhenAvailable, queryMaxRetryCount } from '../helpers/functions.database.js';
import { delay } from '../helpers/functions.utilities.js';
import { ensureEnergyDataTableExists } from './manageEnergyDataTables.js';
import { ensureEnergyDataTablesExists, refreshAggregatedEnergyDataTables } from './manageEnergyDataTables.js';
import { updateAssetTimeSeconds } from './updateAsset.js';
export async function addEnergyData(data, sessionUser, connectedEmileDB) {
const emileDB = connectedEmileDB ?? (await getConnectionWhenAvailable());
let result;
for (let count = 0; count <= queryMaxRetryCount; count += 1) {
try {
const rightNowMillis = Date.now();
const tableName = await ensureEnergyDataTableExists(data.assetId);
const tableNames = await ensureEnergyDataTablesExists(data.assetId);
result = emileDB
.prepare(`insert into ${tableName} (
.prepare(`insert into ${tableNames.raw} (
assetId, dataTypeId, fileId,
timeSeconds, durationSeconds, dataValue, powerOfTenMultiplier,
recordCreate_userName, recordCreate_timeMillis,
Expand All @@ -29,6 +29,7 @@ export async function addEnergyData(data, sessionUser, connectedEmileDB) {
}
else {
await updateAssetTimeSeconds(data.assetId, emileDB);
refreshAggregatedEnergyDataTables(data.assetId, emileDB);
if (connectedEmileDB === undefined) {
emileDB.close();
}
Expand Down
11 changes: 8 additions & 3 deletions database/addEnergyData.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,10 @@ import {
import { delay } from '../helpers/functions.utilities.js'
import type { EnergyData } from '../types/recordTypes.js'

import { ensureEnergyDataTableExists } from './manageEnergyDataTables.js'
import {
ensureEnergyDataTablesExists,
refreshAggregatedEnergyDataTables
} from './manageEnergyDataTables.js'
import { updateAssetTimeSeconds } from './updateAsset.js'

export async function addEnergyData(
Expand All @@ -24,13 +27,13 @@ export async function addEnergyData(
try {
const rightNowMillis = Date.now()

const tableName = await ensureEnergyDataTableExists(
const tableNames = await ensureEnergyDataTablesExists(
data.assetId as number
)

result = emileDB
.prepare(
`insert into ${tableName} (
`insert into ${tableNames.raw} (
assetId, dataTypeId, fileId,
timeSeconds, durationSeconds, dataValue, powerOfTenMultiplier,
recordCreate_userName, recordCreate_timeMillis,
Expand Down Expand Up @@ -65,6 +68,8 @@ export async function addEnergyData(
} else {
await updateAssetTimeSeconds(data.assetId as number, emileDB)

refreshAggregatedEnergyDataTables(data.assetId as number, emileDB)

if (connectedEmileDB === undefined) {
emileDB.close()
}
Expand Down
2 changes: 1 addition & 1 deletion database/cleanupDatabase.d.ts
Original file line number Diff line number Diff line change
@@ -1 +1 @@
export declare function cleanupDatabase(_sessionUser: EmileUser): Promise<number>;
export declare function cleanupDatabase(): Promise<number>;
20 changes: 11 additions & 9 deletions database/cleanupDatabase.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import { getConnectionWhenAvailable } from '../helpers/functions.database.js';
import { energyDataTablePrefix, refreshEnergyDataTableView, reloadEnergyDataTableNames } from './manageEnergyDataTables.js';
import { getEnergyDataTableNames, refreshEnergyDataTableViews, reloadEnergyDataTableNames } from './manageEnergyDataTables.js';
const deleteAgeDays = 14;
const deleteSql = [
`delete from AssetAliases
Expand Down Expand Up @@ -36,7 +36,7 @@ const postEnergyDataDeleteSql = [
where recordDelete_timeMillis <= ?
and fileId not in (select fileId from EnergyData)`
];
export async function cleanupDatabase(_sessionUser) {
export async function cleanupDatabase() {
let deleteCount = 0;
let dropCount = 0;
const recordDeleteTimeMillis = Date.now() - deleteAgeDays * 86400 * 1000;
Expand All @@ -52,19 +52,21 @@ export async function cleanupDatabase(_sessionUser) {
const energyDataTableNames = await reloadEnergyDataTableNames(emileDB);
for (const tableName of energyDataTableNames) {
const assetExists = assets.some((possibleAsset) => {
return `${energyDataTablePrefix}${possibleAsset.assetId}` === tableName;
const assetTableNames = getEnergyDataTableNames(possibleAsset.assetId);
return Object.values(assetTableNames).includes(tableName);
});
if (assetExists) {
if (!assetExists) {
emileDB.prepare(`drop table if exists ${tableName}`).run();
dropCount += 1;
await refreshEnergyDataTableViews(emileDB);
}
else if (!tableName.endsWith('_Daily') &&
!tableName.endsWith('_Monthly')) {
const result = emileDB
.prepare(`delete from ${tableName} where recordDelete_timeMillis <= ?`)
.run(recordDeleteTimeMillis);
deleteCount += result.changes;
}
else {
emileDB.prepare(`drop table ${tableName}`).run();
dropCount += 1;
await refreshEnergyDataTableView(emileDB);
}
}
for (const sql of postEnergyDataDeleteSql) {
const result = emileDB.prepare(sql).run(recordDeleteTimeMillis);
Expand Down
26 changes: 14 additions & 12 deletions database/cleanupDatabase.ts
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
import { getConnectionWhenAvailable } from '../helpers/functions.database.js'

import {
energyDataTablePrefix,
refreshEnergyDataTableView,
getEnergyDataTableNames,
refreshEnergyDataTableViews,
reloadEnergyDataTableNames
} from './manageEnergyDataTables.js'

Expand Down Expand Up @@ -62,9 +62,7 @@ const postEnergyDataDeleteSql = [
and fileId not in (select fileId from EnergyData)`
]

export async function cleanupDatabase(
_sessionUser: EmileUser
): Promise<number> {
export async function cleanupDatabase(): Promise<number> {
let deleteCount = 0
let dropCount = 0
const recordDeleteTimeMillis = Date.now() - deleteAgeDays * 86_400 * 1000
Expand Down Expand Up @@ -95,22 +93,26 @@ export async function cleanupDatabase(

for (const tableName of energyDataTableNames) {
const assetExists = assets.some((possibleAsset) => {
return `${energyDataTablePrefix}${possibleAsset.assetId}` === tableName
const assetTableNames = getEnergyDataTableNames(possibleAsset.assetId)
return Object.values(assetTableNames).includes(tableName)
})

if (assetExists) {
if (!assetExists) {
emileDB.prepare(`drop table if exists ${tableName}`).run()
dropCount += 1

await refreshEnergyDataTableViews(emileDB)
} else if (
!tableName.endsWith('_Daily') &&
!tableName.endsWith('_Monthly')
) {
const result = emileDB
.prepare(
`delete from ${tableName} where recordDelete_timeMillis <= ?`
)
.run(recordDeleteTimeMillis)

deleteCount += result.changes
} else {
emileDB.prepare(`drop table ${tableName}`).run()
dropCount += 1

await refreshEnergyDataTableView(emileDB)
}
}

Expand Down
8 changes: 5 additions & 3 deletions database/deleteEnergyData.js
Original file line number Diff line number Diff line change
@@ -1,18 +1,19 @@
import { clearCacheByTableName } from '../helpers/functions.cache.js';
import { getConnectionWhenAvailable } from '../helpers/functions.database.js';
import { ensureEnergyDataTableExists, reloadEnergyDataTableNames } from './manageEnergyDataTables.js';
import { ensureEnergyDataTablesExists, refreshAggregatedEnergyDataTables, reloadEnergyDataTableNames } from './manageEnergyDataTables.js';
import { updateAssetTimeSeconds } from './updateAsset.js';
export async function deleteEnergyData(assetId, dataId, sessionUser) {
const emileDB = await getConnectionWhenAvailable();
const tableName = await ensureEnergyDataTableExists(assetId, emileDB);
const tableNames = await ensureEnergyDataTablesExists(assetId, emileDB);
const result = emileDB
.prepare(`update ${tableName}
.prepare(`update ${tableNames.raw}
set recordDelete_userName = ?,
recordDelete_timeMillis = ?
where recordDelete_timeMillis is null
and dataId = ?`)
.run(sessionUser.userName, Date.now(), dataId);
await updateAssetTimeSeconds(assetId, emileDB);
refreshAggregatedEnergyDataTables(assetId, emileDB);
emileDB.close();
clearCacheByTableName('EnergyData');
return result.changes > 0;
Expand All @@ -32,6 +33,7 @@ export async function deleteEnergyDataByFileId(fileId, sessionUser, connectedEmi
if (result.changes > 0) {
const assetId = tableName.slice(Math.max(0, tableName.lastIndexOf('_') + 1));
await updateAssetTimeSeconds(assetId, emileDB);
refreshAggregatedEnergyDataTables(assetId, emileDB);
count += result.changes;
}
}
Expand Down
9 changes: 6 additions & 3 deletions database/deleteEnergyData.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,8 @@ import { clearCacheByTableName } from '../helpers/functions.cache.js'
import { getConnectionWhenAvailable } from '../helpers/functions.database.js'

import {
ensureEnergyDataTableExists,
ensureEnergyDataTablesExists,
refreshAggregatedEnergyDataTables,
reloadEnergyDataTableNames
} from './manageEnergyDataTables.js'
import { updateAssetTimeSeconds } from './updateAsset.js'
Expand All @@ -16,11 +17,11 @@ export async function deleteEnergyData(
): Promise<boolean> {
const emileDB = await getConnectionWhenAvailable()

const tableName = await ensureEnergyDataTableExists(assetId, emileDB)
const tableNames = await ensureEnergyDataTablesExists(assetId, emileDB)

const result = emileDB
.prepare(
`update ${tableName}
`update ${tableNames.raw}
set recordDelete_userName = ?,
recordDelete_timeMillis = ?
where recordDelete_timeMillis is null
Expand All @@ -29,6 +30,7 @@ export async function deleteEnergyData(
.run(sessionUser.userName, Date.now(), dataId)

await updateAssetTimeSeconds(assetId, emileDB)
refreshAggregatedEnergyDataTables(assetId as number, emileDB)

emileDB.close()

Expand Down Expand Up @@ -65,6 +67,7 @@ export async function deleteEnergyDataByFileId(
)

await updateAssetTimeSeconds(assetId, emileDB)
refreshAggregatedEnergyDataTables(assetId, emileDB)

count += result.changes
}
Expand Down
Loading

0 comments on commit da70f25

Please sign in to comment.