Trois colonnes nullables : gtiObserved (W/m²), gtiObservedSource (openmeteo-satellite-state), gtiObservedAt (observedGtiTime tel que publié). Rattachées au pas [T − 1 h, T) : même convention que gti prévu (§14.3), Open-Meteo horodatant une moyenne horaire à la fin de son heure. L'observation arrive 1 à 4 h après l'écriture du pas : elle complète la ligne existante par un UPDATE ciblé — ces trois colonnes seulement, seulement si gtiObserved IS NULL. Seule exception à « une ligne n'est jamais réécrite » ; elle ne crée jamais de ligne. Encore en tampon, elle entre par l'INSERT. Une table de forme etm67 exacte est migrée par ALTER TABLE ADD COLUMN dans une transaction : lignes conservées, nouvelles colonnes NULL. Le mécanisme « forme inattendue → refaite » ne vaut plus que pour les autres formes. Tests loadmodel : migration d'une base écrite par le code etm67 lui-même (fixture data/energy-forecast-etm67.sqlite), rattachement, retard, nuit à 0, valeur jamais remplacée, aucun autre champ touché. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
21 lines
823 B
Prolog
21 lines
823 B
Prolog
include(../common/common.pri)
|
|
include(../../../energyplugin/energyplugin.pri)
|
|
|
|
CONFIG += testcase
|
|
|
|
TARGET = nymea-energy-loadmodel
|
|
|
|
# Cible VOLONTAIREMENT légère : aucun serveur nymea, aucun EnergyTestBase.
|
|
# La table de paliers et sameHardware() sont de la logique pure — les éprouver ici les rend
|
|
# rejouables en quelques millisecondes, là où la suite de simulation coûte un serveur complet
|
|
# par test (cf. AGENTS.md, « NE JAMAIS lancer la suite de simulation en un seul processus »).
|
|
|
|
HEADERS += testloadmodel.h
|
|
SOURCES += testloadmodel.cpp
|
|
# Une base energy-forecast.sqlite ÉCRITE PAR etm67 (b7317f3) : la migration s'éprouve sur le
|
|
# vrai fichier, pas sur une imitation (testTheLearningLogMigratesAnEtm67TableInPlace).
|
|
RESOURCES += loadmodel.qrc
|
|
|
|
target.path = $$[QT_INSTALL_PREFIX]/bin
|
|
INSTALLS += target
|