Skip to content

Commit 7bbaa03

Browse files
committed
Implement hasRevision
1 parent c2b09a7 commit 7bbaa03

File tree

24 files changed

+248
-8
lines changed

24 files changed

+248
-8
lines changed

Cargo.lock

Lines changed: 51 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

__tests__/sql/index.test.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,7 @@ describe('sqlite', async () => {
6666
}
6767

6868
const hasRevision = await pool.hasRevision()
69+
expect(hasRevision).toBe(false)
6970
if (!hasRevision) {
7071
await pool.setupRevision()
7172
}
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
[package]
2+
name = "database_strategy"
3+
version = "0.1.0"
4+
edition = "2024"
5+
6+
[dependencies]
7+
sqlx = { version = "0.8" }
8+
async-trait = "0.1"
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
use async_trait::async_trait;
2+
use sqlx::{Any, Error, Pool};
3+
4+
#[async_trait]
5+
pub trait DatabaseStrategy: Send + Sync {
6+
async fn has_revision(&self, pool: &Pool<Any>) -> Result<bool, Error>;
7+
}
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
[package]
2+
name = "database_strategy_mysql"
3+
version = "0.1.0"
4+
edition = "2024"
5+
6+
[dependencies]
7+
sqlx = { version = "0.8" }
8+
database_strategy = { path = "../database_strategy" }
9+
async-trait = "0.1"
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
use async_trait::async_trait;
2+
use database_strategy::DatabaseStrategy;
3+
use sqlx::Any;
4+
use sqlx::Error;
5+
use sqlx::Executor;
6+
use sqlx::Pool;
7+
use sqlx::Row;
8+
9+
pub struct MysqlDatabaseStrategy;
10+
11+
#[async_trait]
12+
impl DatabaseStrategy for MysqlDatabaseStrategy {
13+
/// check to exists devup_revisions table
14+
async fn has_revision(&self, pool: &Pool<Any>) -> Result<bool, Error> {
15+
let query: sqlx::query::Query<'_, Any, sqlx::any::AnyArguments<'_>> = sqlx::query(
16+
"SELECT COUNT(*) as count FROM information_schema.tables WHERE table_name = 'devup_revisions'",
17+
);
18+
let result = pool.fetch_one(query).await?;
19+
Ok(result.try_get::<i32, usize>(0).unwrap_or(0) > 0)
20+
}
21+
}
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
[package]
2+
name = "database_strategy_postgres"
3+
version = "0.1.0"
4+
edition = "2024"
5+
6+
[dependencies]
7+
sqlx = { version = "0.8" }
8+
database_strategy = { path = "../database_strategy" }
9+
async-trait = "0.1"
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
use async_trait::async_trait;
2+
use database_strategy::DatabaseStrategy;
3+
use sqlx::Any;
4+
use sqlx::Error;
5+
use sqlx::Executor;
6+
use sqlx::Pool;
7+
use sqlx::Row;
8+
9+
pub struct PostgresDatabaseStrategy;
10+
11+
#[async_trait]
12+
impl DatabaseStrategy for PostgresDatabaseStrategy {
13+
/// check to exists devup_revisions table
14+
async fn has_revision(&self, pool: &Pool<Any>) -> Result<bool, Error> {
15+
let query: sqlx::query::Query<'_, Any, sqlx::any::AnyArguments<'_>> = sqlx::query(
16+
"SELECT COUNT(*) as count FROM information_schema.tables WHERE table_name = 'devup_revisions'",
17+
);
18+
let result = pool.fetch_one(query).await?;
19+
Ok(result.try_get::<i32, usize>(0).unwrap_or(0) > 0)
20+
}
21+
}
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
[package]
2+
name = "database_strategy_sqlite"
3+
version = "0.1.0"
4+
edition = "2024"
5+
6+
[dependencies]
7+
sqlx = { version = "0.8" }
8+
database_strategy = { path = "../database_strategy" }
9+
async-trait = "0.1"
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
use async_trait::async_trait;
2+
use database_strategy::DatabaseStrategy;
3+
use sqlx::Any;
4+
use sqlx::Error;
5+
use sqlx::Executor;
6+
use sqlx::Pool;
7+
use sqlx::Row;
8+
9+
pub struct SqliteDatabaseStrategy;
10+
11+
#[async_trait]
12+
impl DatabaseStrategy for SqliteDatabaseStrategy {
13+
/// check to exists devup_revisions table
14+
async fn has_revision(&self, pool: &Pool<Any>) -> Result<bool, Error> {
15+
let query: sqlx::query::Query<'_, Any, sqlx::any::AnyArguments<'_>> = sqlx::query(
16+
"SELECT COUNT(*) as count FROM sqlite_master WHERE type = 'table' AND name = 'devup_revisions'",
17+
);
18+
let result = pool.fetch_one(query).await?;
19+
Ok(result.try_get::<i32, usize>(0).unwrap_or(0) > 0)
20+
}
21+
}

0 commit comments

Comments
 (0)