From cf5ba5595056ebbcddd379e483596b04be30c875 Mon Sep 17 00:00:00 2001
From: Andrew Golovashevich <landgrafhomyak@gmail.com>
Date: Sun, 23 Mar 2025 22:32:11 +0300
Subject: [PATCH] Cleanup classes from JDBC

---
 .../db/raw_sql_skeleton/Namespace.kt          | 24 +++++++++++++++++++
 .../db/raw_sql_skeleton/TableName.kt          |  7 ++++++
 2 files changed, 31 insertions(+)
 create mode 100644 src/commonMain/kotlin/ru/landgrafhomyak/db/raw_sql_skeleton/Namespace.kt
 create mode 100644 src/commonMain/kotlin/ru/landgrafhomyak/db/raw_sql_skeleton/TableName.kt

diff --git a/src/commonMain/kotlin/ru/landgrafhomyak/db/raw_sql_skeleton/Namespace.kt b/src/commonMain/kotlin/ru/landgrafhomyak/db/raw_sql_skeleton/Namespace.kt
new file mode 100644
index 0000000..e50d923
--- /dev/null
+++ b/src/commonMain/kotlin/ru/landgrafhomyak/db/raw_sql_skeleton/Namespace.kt
@@ -0,0 +1,24 @@
+package ru.landgrafhomyak.db.raw_sql_skeleton
+
+public class Namespace(
+    private val path: Array<String>
+) {
+    private val usedNames = HashSet<String>()
+
+    public fun subNamespace(name: String): Namespace {
+        if (name in this.usedNames)
+            throw IllegalArgumentException("Name is already used: $name")
+        this.usedNames.add(name)
+        return Namespace(this.path + name)
+    }
+
+    public fun table(name: String): TableName {
+        if (name in this.usedNames)
+            throw IllegalArgumentException("Name is already used: $name")
+        this.usedNames.add(name)
+
+        return TableName(this.formatTableName(name))
+    }
+
+    private fun formatTableName(name: String) = this.path.joinToString(prefix = "::", separator = "::", postfix = "::${name}")
+}
\ No newline at end of file
diff --git a/src/commonMain/kotlin/ru/landgrafhomyak/db/raw_sql_skeleton/TableName.kt b/src/commonMain/kotlin/ru/landgrafhomyak/db/raw_sql_skeleton/TableName.kt
new file mode 100644
index 0000000..a11abed
--- /dev/null
+++ b/src/commonMain/kotlin/ru/landgrafhomyak/db/raw_sql_skeleton/TableName.kt
@@ -0,0 +1,7 @@
+package ru.landgrafhomyak.db.raw_sql_skeleton
+
+public class TableName(private val name: String) {
+    public val asSqlReference: String = "\"${this.name}\""
+    public val asSqlString: String = "\'${this.name}\'"
+    override fun toString(): String = this.asSqlReference
+}
\ No newline at end of file