From 1d4792f16c88655970c76dd3ee149b4cddef9fa0 Mon Sep 17 00:00:00 2001 From: lihenggui Date: Mon, 12 Feb 2024 15:31:16 -0800 Subject: [PATCH] WIP: Migrate table to SqlDelight --- core/database/build.gradle.kts | 1 + .../core/database/NewsResourceEntity.sq | 68 +++++++++++++++++++ gradle/libs.versions.toml | 1 + 3 files changed, 70 insertions(+) create mode 100644 core/database/src/commonMain/sqldelight/com/google/samples/apps/nowinandroid/core/database/NewsResourceEntity.sq diff --git a/core/database/build.gradle.kts b/core/database/build.gradle.kts index e0fb8a977..837e471f5 100644 --- a/core/database/build.gradle.kts +++ b/core/database/build.gradle.kts @@ -36,6 +36,7 @@ kotlin { implementation(libs.kotlinx.datetime) implementation(libs.kotlinInject.runtime) implementation(libs.sqldelight.coroutines.extensions) + implementation(libs.sqldelight.primitive.adapters) } } val androidMain by getting { diff --git a/core/database/src/commonMain/sqldelight/com/google/samples/apps/nowinandroid/core/database/NewsResourceEntity.sq b/core/database/src/commonMain/sqldelight/com/google/samples/apps/nowinandroid/core/database/NewsResourceEntity.sq new file mode 100644 index 000000000..4676cbccf --- /dev/null +++ b/core/database/src/commonMain/sqldelight/com/google/samples/apps/nowinandroid/core/database/NewsResourceEntity.sq @@ -0,0 +1,68 @@ +CREATE TABLE news_resources ( + id TEXT NOT NULL PRIMARY KEY, + title TEXT NOT NULL, + content TEXT NOT NULL, + url TEXT NOT NULL, + header_image_url TEXT, + publish_date INTEGER NOT NULL, + type TEXT NOT NULL +); + +getNewsResources: +SELECT * FROM news_resources +WHERE + CASE WHEN :useFilterNewsIds + THEN id IN (:filterNewsIds) + ELSE 1 + END + AND + CASE WHEN :useFilterTopicIds + THEN id IN + ( + SELECT news_resource_id FROM news_resources_topics + WHERE topic_id IN (:filterTopicIds) + ) + ELSE 1 + END +ORDER BY publish_date DESC; + +getNewsResourceIds: +SELECT id FROM news_resources +WHERE + CASE WHEN :useFilterNewsIds + THEN id IN (:filterNewsIds) + ELSE 1 + END + AND + CASE WHEN :useFilterTopicIds + THEN id IN + ( + SELECT news_resource_id FROM news_resources_topics + WHERE topic_id IN (:filterTopicIds) + ) + ELSE 1 + END +ORDER BY publish_date DESC; + +insertOrIgnoreNewsResources: +INSERT OR IGNORE INTO news_resources (id, title, content, url, header_image_url, publish_date, type) +VALUES (?, ?, ?, ?, ?, ?, ?); + +upsertNewsResources: +INSERT INTO news_resources (id, title, content, url, header_image_url, publish_date, type) +VALUES (?, ?, ?, ?, ?, ?, ?) +ON CONFLICT(id) DO UPDATE SET +title = excluded.title, +content = excluded.content, +url = excluded.url, +header_image_url = excluded.header_image_url, +publish_date = excluded.publish_date, +type = excluded.type; + +insertOrIgnoreTopicCrossRefEntities: +INSERT OR IGNORE INTO news_resources_topics (news_resource_id, topic_id) +VALUES (?, ?); + +deleteNewsResources: +DELETE FROM news_resources +WHERE id IN (:ids); diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index d2f2ceed7..e8fc00767 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -164,6 +164,7 @@ sqldelight-sqlite-driver = { group = "app.cash.sqldelight", name = "sqlite-drive sqldelight-sqljs-driver = { group = "app.cash.sqldelight", name = "sqljs-driver", version.ref = "sqldelight" } sqldelight-webworker-driver = { group = "app.cash.sqldelight", name = "web-worker-driver", version.ref = "sqldelight" } sqldelight-coroutines-extensions = { group = "app.cash.sqldelight", name = "coroutines-extensions", version.ref = "sqldelight" } +sqldelight-primitive-adapters = { group = "app.cash.sqldelight", name = "primitive-adapters", version.ref = "sqldelight" } kotlinInject-compiler = { module = 'me.tatarka.inject:kotlin-inject-compiler-ksp', version.ref = 'kotlinInject' } kotlinInject-runtime = { module = 'me.tatarka.inject:kotlin-inject-runtime', version.ref = 'kotlinInject' }