From 69921b6f11da7f7d298e50f68461ab7e86da8385 Mon Sep 17 00:00:00 2001 From: ChanHHOO Date: Mon, 27 Oct 2025 20:33:21 +0900 Subject: [PATCH 1/3] feat : Modify table name to singular --- .../kotlin/com/flo/nem12/config/DatabaseConfig.kt | 8 ++++---- .../repository/FailureReadingsRepositoryTest.kt | 14 +++++++------- .../nem12/repository/MeterReadingRepositoryTest.kt | 12 ++++++------ 3 files changed, 17 insertions(+), 17 deletions(-) diff --git a/src/main/kotlin/com/flo/nem12/config/DatabaseConfig.kt b/src/main/kotlin/com/flo/nem12/config/DatabaseConfig.kt index 93f0803..fffd1da 100644 --- a/src/main/kotlin/com/flo/nem12/config/DatabaseConfig.kt +++ b/src/main/kotlin/com/flo/nem12/config/DatabaseConfig.kt @@ -10,7 +10,7 @@ object DatabaseConfig { const val DEFAULT_BATCH_SIZE = 50 const val CREATE_TABLE_SQL = """ - CREATE TABLE IF NOT EXISTS meter_readings ( + CREATE TABLE IF NOT EXISTS meter_reading ( id TEXT PRIMARY KEY, nmi VARCHAR(10) NOT NULL, timestamp TIMESTAMP NOT NULL, @@ -20,14 +20,14 @@ object DatabaseConfig { """ const val INSERT_SQL = """ - INSERT OR IGNORE INTO meter_readings (id, nmi, timestamp, consumption) + INSERT OR IGNORE INTO meter_reading (id, nmi, timestamp, consumption) VALUES (?, ?, ?, ?) """ const val TIMESTAMP_FORMAT = "yyyy-MM-dd HH:mm:ss" const val CREATE_FAILED_READINGS_TABLE_SQL = """ - CREATE TABLE IF NOT EXISTS failed_readings ( + CREATE TABLE IF NOT EXISTS failure_reading ( id TEXT PRIMARY KEY, line_number INTEGER NOT NULL, nmi TEXT, @@ -39,7 +39,7 @@ object DatabaseConfig { """ const val INSERT_FAILED_READING_SQL = """ - INSERT INTO failed_readings (id, line_number, nmi, interval_index, raw_value, failure_reason, timestamp) + INSERT INTO failure_reading (id, line_number, nmi, interval_index, raw_value, failure_reason, timestamp) VALUES (?, ?, ?, ?, ?, ?, ?) """ } diff --git a/src/test/kotlin/com/flo/nem12/repository/FailureReadingsRepositoryTest.kt b/src/test/kotlin/com/flo/nem12/repository/FailureReadingsRepositoryTest.kt index 56bda14..09d9c58 100644 --- a/src/test/kotlin/com/flo/nem12/repository/FailureReadingsRepositoryTest.kt +++ b/src/test/kotlin/com/flo/nem12/repository/FailureReadingsRepositoryTest.kt @@ -48,7 +48,7 @@ class FailureReadingsRepositoryTest { // Then val resultSet = connection.createStatement() - .executeQuery("SELECT COUNT(*) as cnt FROM failed_readings") + .executeQuery("SELECT COUNT(*) as cnt FROM failure_reading") assertEquals(1, resultSet.getInt("cnt")) connection.close() } @@ -73,7 +73,7 @@ class FailureReadingsRepositoryTest { // Then val resultSet = connection.createStatement() - .executeQuery("SELECT COUNT(*) as cnt FROM failed_readings") + .executeQuery("SELECT COUNT(*) as cnt FROM failure_reading") assertEquals(3, resultSet.getInt("cnt")) connection.close() } @@ -104,7 +104,7 @@ class FailureReadingsRepositoryTest { // Then val resultSet = connection.createStatement() - .executeQuery("SELECT COUNT(*) as cnt FROM failed_readings") + .executeQuery("SELECT COUNT(*) as cnt FROM failure_reading") assertEquals(10, resultSet.getInt("cnt")) connection.close() } @@ -159,7 +159,7 @@ class FailureReadingsRepositoryTest { // Then val resultSet = connection.createStatement() - .executeQuery("SELECT DISTINCT failure_reason FROM failed_readings ORDER BY failure_reason") + .executeQuery("SELECT DISTINCT failure_reason FROM failure_reading ORDER BY failure_reason") val reasons = mutableListOf() while (resultSet.next()) { reasons.add(resultSet.getString("failure_reason")) @@ -199,7 +199,7 @@ class FailureReadingsRepositoryTest { // Then val resultSet = connection.createStatement() - .executeQuery("SELECT interval_index FROM failed_readings") + .executeQuery("SELECT interval_index FROM failure_reading") assertTrue(resultSet.next()) assertEquals(0, resultSet.getInt("interval_index")) assertTrue(resultSet.wasNull()) // Check that it's actually NULL @@ -229,7 +229,7 @@ class FailureReadingsRepositoryTest { // Then val resultSet = connection.createStatement() - .executeQuery("SELECT timestamp FROM failed_readings") + .executeQuery("SELECT timestamp FROM failure_reading") assertTrue(resultSet.next()) assertEquals(null, resultSet.getString("timestamp")) connection.close() @@ -260,7 +260,7 @@ class FailureReadingsRepositoryTest { // Then val resultSet = connection.createStatement() - .executeQuery("SELECT COUNT(*) as cnt FROM failed_readings") + .executeQuery("SELECT COUNT(*) as cnt FROM failure_reading") assertEquals(5, resultSet.getInt("cnt")) connection.close() } diff --git a/src/test/kotlin/com/flo/nem12/repository/MeterReadingRepositoryTest.kt b/src/test/kotlin/com/flo/nem12/repository/MeterReadingRepositoryTest.kt index 8cd0450..495cbac 100644 --- a/src/test/kotlin/com/flo/nem12/repository/MeterReadingRepositoryTest.kt +++ b/src/test/kotlin/com/flo/nem12/repository/MeterReadingRepositoryTest.kt @@ -44,7 +44,7 @@ class MeterReadingRepositoryTest { // Then val resultSet = connection.createStatement() - .executeQuery("SELECT COUNT(*) as cnt FROM meter_readings") + .executeQuery("SELECT COUNT(*) as cnt FROM meter_reading") assertEquals(1, resultSet.getInt("cnt")) connection.close() } @@ -70,7 +70,7 @@ class MeterReadingRepositoryTest { val resultSet = connection.createStatement() - .executeQuery("SELECT COUNT(*) as cnt FROM meter_readings") + .executeQuery("SELECT COUNT(*) as cnt FROM meter_reading") assertEquals(3, resultSet.getInt("cnt")) connection.close() } @@ -98,7 +98,7 @@ class MeterReadingRepositoryTest { // Then val resultSet = connection.createStatement() - .executeQuery("SELECT COUNT(*) as cnt FROM meter_readings") + .executeQuery("SELECT COUNT(*) as cnt FROM meter_reading") assertEquals(10, resultSet.getInt("cnt")) connection.close() } @@ -130,12 +130,12 @@ class MeterReadingRepositoryTest { // Then val resultSet = connection.createStatement() - .executeQuery("SELECT COUNT(*) as cnt FROM meter_readings") + .executeQuery("SELECT COUNT(*) as cnt FROM meter_reading") assertEquals(1, resultSet.getInt("cnt")) val dataResult = connection.createStatement() - .executeQuery("SELECT consumption FROM meter_readings") + .executeQuery("SELECT consumption FROM meter_reading") assertEquals("10.5", dataResult.getBigDecimal("consumption").toPlainString()) connection.close() } @@ -160,7 +160,7 @@ class MeterReadingRepositoryTest { // Then val resultSet = connection.createStatement() - .executeQuery("SELECT DISTINCT nmi FROM meter_readings ORDER BY nmi") + .executeQuery("SELECT DISTINCT nmi FROM meter_reading ORDER BY nmi") val nmis = mutableListOf() while (resultSet.next()) { nmis.add(resultSet.getString("nmi")) From c3a62d07ff745bb44afd7df92272f9242e470f62 Mon Sep 17 00:00:00 2001 From: ChanHHOO Date: Mon, 27 Oct 2025 20:43:58 +0900 Subject: [PATCH 2/3] fix : Modify missing table names --- README.md | 10 +++++----- src/main/kotlin/com/flo/nem12/config/DatabaseConfig.kt | 2 +- src/main/kotlin/com/flo/nem12/model/MeterReading.kt | 2 +- .../repository/impl/FailureReadingsRepositoryImpl.kt | 2 +- .../nem12/service/impl/NEM12ParserServiceImplTest.kt | 2 +- 5 files changed, 9 insertions(+), 9 deletions(-) diff --git a/README.md b/README.md index 539608d..f7bce6d 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # NEM12 Parser -A Kotlin-based parser for NEM12 format energy meter reading files, generating SQL INSERT statements for the `meter_readings` database table. +A Kotlin-based parser for NEM12 format energy meter reading files, generating SQL INSERT statements for the `meter_reading` database table. ## Features @@ -114,13 +114,13 @@ class BatchInsertGenerator(outputPath: Path, batchSize: Int) : SQLGenerator ## Database Schema ```sql -create table meter_readings ( +create table meter_reading ( id uuid default gen_random_uuid() not null, nmi varchar(10) not null, timestamp timestamp not null, consumption numeric not null, - constraint meter_readings_pk primary key (id), - constraint meter_readings_unique_consumption unique (nmi, timestamp) + constraint meter_reading_pk primary key (id), + constraint meter_reading_unique_consumption unique (nmi, timestamp) ); ``` @@ -144,7 +144,7 @@ create table meter_readings ( **Output (PostgreSQL COPY):** ```sql -COPY meter_readings (nmi, timestamp, consumption) FROM STDIN WITH (FORMAT CSV); +COPY meter_reading (nmi, timestamp, consumption) FROM STDIN WITH (FORMAT CSV); NEM1201009,2005-03-01 00:00:00,0.461 NEM1201009,2005-03-01 00:30:00,0.810 \. diff --git a/src/main/kotlin/com/flo/nem12/config/DatabaseConfig.kt b/src/main/kotlin/com/flo/nem12/config/DatabaseConfig.kt index fffd1da..6a17622 100644 --- a/src/main/kotlin/com/flo/nem12/config/DatabaseConfig.kt +++ b/src/main/kotlin/com/flo/nem12/config/DatabaseConfig.kt @@ -26,7 +26,7 @@ object DatabaseConfig { const val TIMESTAMP_FORMAT = "yyyy-MM-dd HH:mm:ss" - const val CREATE_FAILED_READINGS_TABLE_SQL = """ + const val CREATE_FAILED_READING_TABLE_SQL = """ CREATE TABLE IF NOT EXISTS failure_reading ( id TEXT PRIMARY KEY, line_number INTEGER NOT NULL, diff --git a/src/main/kotlin/com/flo/nem12/model/MeterReading.kt b/src/main/kotlin/com/flo/nem12/model/MeterReading.kt index 74103f3..dc83108 100644 --- a/src/main/kotlin/com/flo/nem12/model/MeterReading.kt +++ b/src/main/kotlin/com/flo/nem12/model/MeterReading.kt @@ -5,7 +5,7 @@ import java.time.LocalDateTime /** * Represents a single meter reading record - * Corresponds to the meter_readings table in the database + * Corresponds to the meter_reading table in the database */ data class MeterReading( val nmi: String, diff --git a/src/main/kotlin/com/flo/nem12/repository/impl/FailureReadingsRepositoryImpl.kt b/src/main/kotlin/com/flo/nem12/repository/impl/FailureReadingsRepositoryImpl.kt index a7a12e2..88b63e8 100644 --- a/src/main/kotlin/com/flo/nem12/repository/impl/FailureReadingsRepositoryImpl.kt +++ b/src/main/kotlin/com/flo/nem12/repository/impl/FailureReadingsRepositoryImpl.kt @@ -25,7 +25,7 @@ class FailureReadingsRepositoryImpl( ) : BaseSQLiteRepository(connection, batchSize), FailureReadingsRepository { private val statistics = mutableMapOf() - override fun getCreateTableSql(): String = DatabaseConfig.CREATE_FAILED_READINGS_TABLE_SQL + override fun getCreateTableSql(): String = DatabaseConfig.CREATE_FAILED_READING_TABLE_SQL override fun getInsertSql(): String = DatabaseConfig.INSERT_FAILED_READING_SQL diff --git a/src/test/kotlin/com/flo/nem12/service/impl/NEM12ParserServiceImplTest.kt b/src/test/kotlin/com/flo/nem12/service/impl/NEM12ParserServiceImplTest.kt index c430ca1..18bf0e7 100644 --- a/src/test/kotlin/com/flo/nem12/service/impl/NEM12ParserServiceImplTest.kt +++ b/src/test/kotlin/com/flo/nem12/service/impl/NEM12ParserServiceImplTest.kt @@ -155,7 +155,7 @@ class NEM12ParserServiceImplTest { FailureReadingsRepository { val savedFailures = mutableListOf() - override fun getCreateTableSql(): String = DatabaseConfig.CREATE_FAILED_READINGS_TABLE_SQL + override fun getCreateTableSql(): String = DatabaseConfig.CREATE_FAILED_READING_TABLE_SQL override fun getInsertSql(): String = DatabaseConfig.INSERT_FAILED_READING_SQL From 2d4a750ff6e2c73275f1d1394fe33ec764685451 Mon Sep 17 00:00:00 2001 From: ChanHHOO Date: Mon, 27 Oct 2025 20:53:58 +0900 Subject: [PATCH 3/3] fix : Fix contant valiable --- src/main/kotlin/com/flo/nem12/config/DatabaseConfig.kt | 4 ++-- .../nem12/repository/impl/FailureReadingsRepositoryImpl.kt | 2 +- .../com/flo/nem12/service/impl/NEM12ParserServiceImplTest.kt | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/main/kotlin/com/flo/nem12/config/DatabaseConfig.kt b/src/main/kotlin/com/flo/nem12/config/DatabaseConfig.kt index fffd1da..037a118 100644 --- a/src/main/kotlin/com/flo/nem12/config/DatabaseConfig.kt +++ b/src/main/kotlin/com/flo/nem12/config/DatabaseConfig.kt @@ -26,11 +26,11 @@ object DatabaseConfig { const val TIMESTAMP_FORMAT = "yyyy-MM-dd HH:mm:ss" - const val CREATE_FAILED_READINGS_TABLE_SQL = """ + const val CREATE_FAILURE_READINGS_TABLE_SQL = """ CREATE TABLE IF NOT EXISTS failure_reading ( id TEXT PRIMARY KEY, line_number INTEGER NOT NULL, - nmi TEXT, + nmi TEXT, interval_index INTEGER, raw_value TEXT NOT NULL, failure_reason TEXT NOT NULL, diff --git a/src/main/kotlin/com/flo/nem12/repository/impl/FailureReadingsRepositoryImpl.kt b/src/main/kotlin/com/flo/nem12/repository/impl/FailureReadingsRepositoryImpl.kt index a7a12e2..5ba4af6 100644 --- a/src/main/kotlin/com/flo/nem12/repository/impl/FailureReadingsRepositoryImpl.kt +++ b/src/main/kotlin/com/flo/nem12/repository/impl/FailureReadingsRepositoryImpl.kt @@ -25,7 +25,7 @@ class FailureReadingsRepositoryImpl( ) : BaseSQLiteRepository(connection, batchSize), FailureReadingsRepository { private val statistics = mutableMapOf() - override fun getCreateTableSql(): String = DatabaseConfig.CREATE_FAILED_READINGS_TABLE_SQL + override fun getCreateTableSql(): String = DatabaseConfig.CREATE_FAILURE_READINGS_TABLE_SQL override fun getInsertSql(): String = DatabaseConfig.INSERT_FAILED_READING_SQL diff --git a/src/test/kotlin/com/flo/nem12/service/impl/NEM12ParserServiceImplTest.kt b/src/test/kotlin/com/flo/nem12/service/impl/NEM12ParserServiceImplTest.kt index c430ca1..3d0af3e 100644 --- a/src/test/kotlin/com/flo/nem12/service/impl/NEM12ParserServiceImplTest.kt +++ b/src/test/kotlin/com/flo/nem12/service/impl/NEM12ParserServiceImplTest.kt @@ -155,7 +155,7 @@ class NEM12ParserServiceImplTest { FailureReadingsRepository { val savedFailures = mutableListOf() - override fun getCreateTableSql(): String = DatabaseConfig.CREATE_FAILED_READINGS_TABLE_SQL + override fun getCreateTableSql(): String = DatabaseConfig.CREATE_FAILURE_READINGS_TABLE_SQL override fun getInsertSql(): String = DatabaseConfig.INSERT_FAILED_READING_SQL