@@ -85,6 +85,7 @@ void Connectors::initDatabaseTable()
8585 // Create database
8686 auto query = m_database.query (" CREATE TABLE IF NOT EXISTS Connectors ("
8787 " [id] INT UNSIGNED,"
88+ " [availability] INT,"
8889 " [status] INT,"
8990 " [last_notified_status] INT,"
9091 " [transaction_id] INT,"
@@ -105,10 +106,23 @@ void Connectors::initDatabaseTable()
105106 }
106107 }
107108
109+ // Migration for availability field
110+ auto check_db = m_database.query (" SELECT [availability] FROM Connectors WHERE TRUE;" );
111+ if (check_db) {
112+ if (!check_db->exec ()) {
113+ resetConnectors ();
114+ }
115+ } else {
116+ auto drop_table = m_database.query (" DROP TABLE IF EXISTS Connectors;" );
117+ if (drop_table && drop_table->exec ()) {
118+ initDatabaseTable ();
119+ }
120+ }
121+
108122 // Create parametrized queries
109123 m_find_query = m_database.query (" SELECT * FROM Connectors WHERE id=?;" );
110- m_insert_query = m_database.query (" INSERT INTO Connectors VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?);" );
111- m_update_query = m_database.query (" UPDATE Connectors SET [status]=?, [last_notified_status]=?, [transaction_id]=?, "
124+ m_insert_query = m_database.query (" INSERT INTO Connectors VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ? );" );
125+ m_update_query = m_database.query (" UPDATE Connectors SET [availability]=?, [ status]=?, [last_notified_status]=?, [transaction_id]=?, "
112126 " [transaction_id_offline]=?, [transaction_start]=?, [transaction_id_tag]=?, "
113127 " [transaction_parent_id_tag]=?, [reservation_id]=?, [reservation_id_tag]=?, "
114128 " [reservation_parent_id_tag]=?, [reservation_expiry_date]=? WHERE id=?;" );
@@ -237,20 +251,22 @@ bool Connectors::loadConnector(Connector& connector)
237251 ret = m_find_query->hasRows ();
238252 if (ret)
239253 {
240- connector.status = static_cast <ChargePointStatus>(m_find_query->getInt32 (1u ));
241- connector.last_notified_status = static_cast <ChargePointStatus>(m_find_query->getInt32 (2u ));
242- connector.transaction_id = m_find_query->getInt32 (3u );
243- connector.transaction_id_offline = m_find_query->getInt32 (4u );
244- connector.transaction_start = static_cast <std::time_t >(m_find_query->getInt64 (5u ));
245- connector.transaction_id_tag = m_find_query->getString (6u );
246- connector.transaction_parent_id_tag = m_find_query->getString (7u );
247- connector.reservation_id = m_find_query->getInt32 (8u );
248- connector.reservation_id_tag = m_find_query->getString (9u );
249- connector.reservation_parent_id_tag = m_find_query->getString (10u );
250- connector.reservation_expiry_date = static_cast <std::time_t >(m_find_query->getInt64 (11u ));
254+ connector.availability = static_cast <AvailabilityType>(m_find_query->getInt32 (1u ));
255+ connector.status = static_cast <ChargePointStatus>(m_find_query->getInt32 (2u ));
256+ connector.last_notified_status = static_cast <ChargePointStatus>(m_find_query->getInt32 (3u ));
257+ connector.transaction_id = m_find_query->getInt32 (4u );
258+ connector.transaction_id_offline = m_find_query->getInt32 (5u );
259+ connector.transaction_start = static_cast <std::time_t >(m_find_query->getInt64 (6u ));
260+ connector.transaction_id_tag = m_find_query->getString (7u );
261+ connector.transaction_parent_id_tag = m_find_query->getString (8u );
262+ connector.reservation_id = m_find_query->getInt32 (9u );
263+ connector.reservation_id_tag = m_find_query->getString (10u );
264+ connector.reservation_parent_id_tag = m_find_query->getString (11u );
265+ connector.reservation_expiry_date = static_cast <std::time_t >(m_find_query->getInt64 (12u ));
251266
252267 LOG_DEBUG << " Connector " << connector.id << " loaded from database : "
253- << " status = " << ChargePointStatusHelper.toString (connector.status )
268+ << " availability = " << AvailabilityTypeHelper.toString (connector.availability )
269+ << " - status = " << ChargePointStatusHelper.toString (connector.status )
254270 << " - last_notified_status = " << ChargePointStatusHelper.toString (connector.last_notified_status )
255271 << " - transaction_id = " << connector.transaction_id
256272 << " - transaction_id_offline = " << connector.transaction_id_offline
@@ -284,18 +300,19 @@ bool Connectors::saveConnector(const Connector& connector)
284300
285301 if (m_update_query)
286302 {
287- m_update_query->bind (0u , static_cast <int >(connector.status ));
288- m_update_query->bind (1u , static_cast <int >(connector.last_notified_status ));
289- m_update_query->bind (2u , connector.transaction_id );
290- m_update_query->bind (3u , connector.transaction_id_offline );
291- m_update_query->bind (4u , static_cast <int64_t >(connector.transaction_start ));
292- m_update_query->bind (5u , connector.transaction_id_tag );
293- m_update_query->bind (6u , connector.transaction_parent_id_tag );
294- m_update_query->bind (7u , connector.reservation_id );
295- m_update_query->bind (8u , connector.reservation_id_tag );
296- m_update_query->bind (9u , connector.reservation_parent_id_tag );
297- m_update_query->bind (10u , static_cast <int64_t >(connector.reservation_expiry_date ));
298- m_update_query->bind (11u , connector.id );
303+ m_update_query->bind (0u , static_cast <int >(connector.availability ));
304+ m_update_query->bind (1u , static_cast <int >(connector.status ));
305+ m_update_query->bind (2u , static_cast <int >(connector.last_notified_status ));
306+ m_update_query->bind (3u , connector.transaction_id );
307+ m_update_query->bind (4u , connector.transaction_id_offline );
308+ m_update_query->bind (5u , static_cast <int64_t >(connector.transaction_start ));
309+ m_update_query->bind (6u , connector.transaction_id_tag );
310+ m_update_query->bind (7u , connector.transaction_parent_id_tag );
311+ m_update_query->bind (8u , connector.reservation_id );
312+ m_update_query->bind (9u , connector.reservation_id_tag );
313+ m_update_query->bind (10u , connector.reservation_parent_id_tag );
314+ m_update_query->bind (11u , static_cast <int64_t >(connector.reservation_expiry_date ));
315+ m_update_query->bind (12u , connector.id );
299316 ret = m_update_query->exec ();
300317 if (ret)
301318 {
@@ -319,17 +336,18 @@ bool Connectors::createConnector(const Connector& connector)
319336 if (m_insert_query)
320337 {
321338 m_insert_query->bind (0u , connector.id );
322- m_insert_query->bind (1u , static_cast <int >(connector.status ));
323- m_insert_query->bind (2u , static_cast <int >(connector.last_notified_status ));
324- m_insert_query->bind (3u , connector.transaction_id );
325- m_insert_query->bind (4u , connector.transaction_id_offline );
326- m_insert_query->bind (5u , static_cast <int64_t >(connector.transaction_start ));
327- m_insert_query->bind (6u , connector.transaction_id_tag );
328- m_insert_query->bind (7u , connector.transaction_parent_id_tag );
329- m_insert_query->bind (8u , connector.reservation_id );
330- m_insert_query->bind (9u , connector.reservation_id_tag );
331- m_insert_query->bind (10u , connector.reservation_parent_id_tag );
332- m_insert_query->bind (11u , static_cast <int64_t >(connector.reservation_expiry_date ));
339+ m_insert_query->bind (1u , static_cast <int >(connector.availability ));
340+ m_insert_query->bind (2u , static_cast <int >(connector.status ));
341+ m_insert_query->bind (3u , static_cast <int >(connector.last_notified_status ));
342+ m_insert_query->bind (4u , connector.transaction_id );
343+ m_insert_query->bind (5u , connector.transaction_id_offline );
344+ m_insert_query->bind (6u , static_cast <int64_t >(connector.transaction_start ));
345+ m_insert_query->bind (7u , connector.transaction_id_tag );
346+ m_insert_query->bind (8u , connector.transaction_parent_id_tag );
347+ m_insert_query->bind (9u , connector.reservation_id );
348+ m_insert_query->bind (10u , connector.reservation_id_tag );
349+ m_insert_query->bind (11u , connector.reservation_parent_id_tag );
350+ m_insert_query->bind (12u , static_cast <int64_t >(connector.reservation_expiry_date ));
333351 ret = m_insert_query->exec ();
334352 if (ret)
335353 {
0 commit comments