Проблема SQLdelight в KMPAndroid

Форум для тех, кто программирует под Android
Anonymous
Проблема SQLdelight в KMP

Сообщение Anonymous »

Как правильно настроить две отдельные базы данных в многоплатформенном проекте Kotlin? Я хочу использовать две отдельные базы данных SQLite с SqlDelight: < /p>
carddatabase: для основных данных приложения (сбор карт). < /P>
settingsdatabase: для простых пользовательских настрой Архитектура. < /p>
Проблема
Я изо всех сил пытаюсь настроить плагин SQLdelight Gradle, чтобы правильно обрабатывать эти две отдельные базы данных. Независимо от того, как я настраиваю блок SQLdelight в моем build.gradle.kts, я сталкиваюсь с одним из двух выпусков: < /p>
Выпуск 1: Ошибка реконструкции < /p>
Если я определяю обе базы данных с помощью собственного имени пакета, сборка не выполняет длинный список ошибок восстановления. Кажется, как если бы SQLdelight собирает файлы .sq из обоих исходных каталогов для каждого определения базы данных.
Пример журнала ошибок:

e: .../build/сг. REDCLARATION: Class CardDataBaseQueries: Transacterimpl


e: .../build/squldelight/code/futsdatabase/commonmain/com/пример/myApp/db/cardentity. Все сущности и запросы из carddatabase.sq) < /p>
< /blockquote>
Выпуск 2: Файлы SQLdelight должны быть помещены в каталог пакетов < /p>
Когда я пытаюсь использовать свойства srcdirs для явного разделения исходных папков для каждого Database, а также с этими ошибками, если это исправить. каталоги. Похоже, это правильный подход в соответствии с принципами Градл, но он приводит к ошибкам, упомянутым выше. /> composemultiplatform = "1.6.11" < /li>
sqladelight = "2.0.2" < /li>
agp = "8.2.2" < /li>
< /ul>
Изолирован: < /p>

Код: Выделить всё

composeApp/
└── src/
└── commonMain/
└── sqldelight/
└── com/
└── example/
└── myapp/
└── db/
├── cards/
│   └── CardDatabase.sq
└── settings/
└── SettingsDatabase.sq
composeapp/build.gradle.kts (block sqldelight):
Это моя текущая попытка настроить плагин.
sqldelight {
databases {
create("CardDatabase") {
packageName.set("com.example.myapp.db.cards")
srcDirs.set(listOf("src/commonMain/sqldelight/com/example/myapp/db/cards"))
}
create("SettingsDatabase") {
packageName.set("com.example.myapp.db.settings")
srcDirs.set(listOf("src/commonMain/sqldelight/com/example/myapp/db/settings"))
}
}
}
< /code>
carddatabase.sq Content: < /p>
CREATE TABLE SetEntity (
setId TEXT NOT NULL PRIMARY KEY
-- ... other columns
);

CREATE TABLE PokemonCardEntity (
id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
setId TEXT NOT NULL,
FOREIGN KEY(setId) REFERENCES SetEntity(setId)
-- ... other columns
);

selectAllSets:
SELECT * FROM SetEntity;
< /code>
settingsdatabase.sq Содержание: < /p>
CREATE TABLE SettingsEntity (
key TEXT NOT NULL PRIMARY KEY,
value TEXT NOT NULL
);

getSetting:
SELECT value FROM SettingsEntity WHERE key = :key;
< /code>
Вопрос
Что такое правильный и современный способ настроить плагин SQLdelight в многоплатформенном проекте Kotlin для обработки нескольких, полностью разделенных баз данных, каждый из которых со своим собственным каталогом источника и сгенерированным пакетом, чтобы избежать ошибок повторного выполнения? Есть ли проблема с моим использованием Srcdirs или другого свойства, которое я должен использовать?
Заранее спасибо за помощь!

Подробнее здесь: https://stackoverflow.com/questions/796 ... sue-in-kmp

Вернуться в «Android»