Skip to content

Commit 50b91bb

Browse files
committed
fix(Install): more robust inserts in DB
1 parent 74da1e1 commit 50b91bb

File tree

1 file changed

+39
-7
lines changed

1 file changed

+39
-7
lines changed

install/install/init_datasources.php

Lines changed: 39 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -72,13 +72,29 @@
7272
Install::linkSourceZone($source_id, $zone_id);
7373

7474
// Insert into the database
75-
$success = $DB->insert($table, [
75+
$row_exists = (new DbUtils())->countElementsInTable($table, [
7676
'date' => "$year-01-01 00:00:00",
7777
'plugin_carbon_carbonintensitysources_id' => $source_id,
78-
'plugin_carbon_zones_id' => $zone_id,
79-
'intensity' => $intensity,
80-
'data_quality' => 2 // constant GlpiPlugin\Carbon\DataTracking::DATA_QUALITY_ESTIMATED
78+
'plugin_carbon_zones_id' => $zone_id
8179
]);
80+
if (!$row_exists) {
81+
$success = $DB->insert($table, [
82+
'date' => "$year-01-01 00:00:00",
83+
'plugin_carbon_carbonintensitysources_id' => $source_id,
84+
'plugin_carbon_zones_id' => $zone_id,
85+
'intensity' => $intensity,
86+
'data_quality' => 2 // constant GlpiPlugin\Carbon\DataTracking::DATA_QUALITY_ESTIMATED
87+
]);
88+
} else {
89+
$success = $DB->update($table, [
90+
'intensity' => $intensity,
91+
'data_quality' => 2 // constant GlpiPlugin\Carbon\DataTracking::DATA_QUALITY_ESTIMATED
92+
], [
93+
'date' => "$year-01-01 00:00:00",
94+
'plugin_carbon_carbonintensitysources_id' => $source_id,
95+
'plugin_carbon_zones_id' => $zone_id
96+
]);
97+
}
8298

8399
if (!$success) {
84100
throw new \RuntimeException("Failed to insert data for year $year");
@@ -92,11 +108,27 @@
92108

93109
$quebec_carbon_intensity = include(dirname(__DIR__) . '/data/carbon_intensity/quebec.php');
94110
foreach ($quebec_carbon_intensity as $year => $intensity) {
95-
$success = $DB->insert($table, [
111+
$row_exists = (new DbUtils())->countElementsInTable($table, [
96112
'date' => "$year-01-01 00:00:00",
97113
'plugin_carbon_carbonintensitysources_id' => $source_id,
98114
'plugin_carbon_zones_id' => $zone_id_quebec,
99-
'intensity' => $intensity,
100-
'data_quality' => 2 // constant GlpiPlugin\Carbon\DataTracking::DATA_QUALITY_ESTIMATED
101115
]);
116+
if (!$row_exists) {
117+
$success = $DB->insert($table, [
118+
'date' => "$year-01-01 00:00:00",
119+
'plugin_carbon_carbonintensitysources_id' => $source_id,
120+
'plugin_carbon_zones_id' => $zone_id_quebec,
121+
'intensity' => $intensity,
122+
'data_quality' => 2 // constant GlpiPlugin\Carbon\DataTracking::DATA_QUALITY_ESTIMATED
123+
]);
124+
} else {
125+
$success = $DB->update($table, [
126+
'intensity' => $intensity,
127+
'data_quality' => 2 // constant GlpiPlugin\Carbon\DataTracking::DATA_QUALITY_ESTIMATED
128+
], [
129+
'date' => "$year-01-01 00:00:00",
130+
'plugin_carbon_carbonintensitysources_id' => $source_id,
131+
'plugin_carbon_zones_id' => $zone_id
132+
]);
133+
}
102134
}

0 commit comments

Comments
 (0)