Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions src/meta/api/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,7 @@ pub mod util;

pub mod crud;
mod sequence_api_impl;
pub(crate) mod sequence_nextval_impl;

pub use data_mask_api::DatamaskApi;
pub use schema_api::SchemaApi;
Expand Down
69 changes: 62 additions & 7 deletions src/meta/api/src/schema_api_test_suite.rs
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,7 @@ use databend_common_meta_app::schema::index_id_ident::IndexId;
use databend_common_meta_app::schema::index_id_ident::IndexIdIdent;
use databend_common_meta_app::schema::index_id_to_name_ident::IndexIdToNameIdent;
use databend_common_meta_app::schema::least_visible_time_ident::LeastVisibleTimeIdent;
use databend_common_meta_app::schema::sequence_storage::SequenceStorageIdent;
use databend_common_meta_app::schema::table_niv::TableNIV;
use databend_common_meta_app::schema::CatalogMeta;
use databend_common_meta_app::schema::CatalogNameIdent;
Expand Down Expand Up @@ -346,7 +347,9 @@ impl SchemaApiTestSuite {

suite.get_table_name_by_id(&b.build().await).await?;
suite.get_db_name_by_id(&b.build().await).await?;
suite.test_sequence(&b.build().await).await?;

suite.test_sequence_0(&b.build().await).await?;
suite.test_sequence_1(&b.build().await).await?;

suite.dictionary_create_list_drop(&b.build().await).await?;
Ok(())
Expand Down Expand Up @@ -5764,9 +5767,28 @@ impl SchemaApiTestSuite {
}

#[fastrace::trace]
async fn test_sequence<MT: SchemaApi + SequenceApi + kvapi::AsKVApi<Error = MetaError>>(
async fn test_sequence_0<MT: SchemaApi + SequenceApi + kvapi::AsKVApi<Error = MetaError>>(
&self,
mt: &MT,
) -> anyhow::Result<()> {
self.test_sequence_with_version(mt, 0).await
}

#[fastrace::trace]
async fn test_sequence_1<MT: SchemaApi + SequenceApi + kvapi::AsKVApi<Error = MetaError>>(
&self,
mt: &MT,
) -> anyhow::Result<()> {
self.test_sequence_with_version(mt, 1).await
}

#[fastrace::trace]
async fn test_sequence_with_version<
MT: SchemaApi + SequenceApi + kvapi::AsKVApi<Error = MetaError>,
>(
&self,
mt: &MT,
storage_version: u64,
) -> anyhow::Result<()> {
let tenant = Tenant {
tenant: "tenant1".to_string(),
Expand All @@ -5782,6 +5804,7 @@ impl SchemaApiTestSuite {
ident: SequenceIdent::new(&tenant, sequence_name),
create_on,
comment: Some("seq".to_string()),
storage_version,
};

let _resp = mt.create_sequence(req).await?;
Expand All @@ -5803,14 +5826,16 @@ impl SchemaApiTestSuite {
ident: SequenceIdent::new(&tenant, "seq1"),
create_on,
comment: Some("seq1".to_string()),
storage_version,
};

let seqs = ["seq", "seq1"];
let _resp = mt.create_sequence(req).await?;
let values = mt.list_sequences(&tenant).await?;
for (i, (name, _)) in values.iter().enumerate() {
assert_eq!(name, seqs[i]);
}
assert_eq!(values.len(), 2);
assert_eq!(values[0].0, sequence_name);
assert_eq!(values[0].1.current, 1);
assert_eq!(values[1].0, "seq1");
assert_eq!(values[1].1.current, 1);
}

info!("--- get sequence nextval");
Expand All @@ -5821,7 +5846,7 @@ impl SchemaApiTestSuite {
};
let resp = mt.get_sequence_next_value(req).await?;
assert_eq!(resp.start, 1);
assert_eq!(resp.end, 10);
assert_eq!(resp.end, 11);
}

info!("--- get sequence after nextval");
Expand All @@ -5833,13 +5858,24 @@ impl SchemaApiTestSuite {
assert_eq!(resp.current, 11);
}

info!("--- list sequence after nextval");
{
let values = mt.list_sequences(&tenant).await?;
assert_eq!(values.len(), 2);
assert_eq!(values[0].0, sequence_name);
assert_eq!(values[0].1.current, 11);
assert_eq!(values[1].0, "seq1");
assert_eq!(values[1].1.current, 1);
}

info!("--- replace sequence");
{
let req = CreateSequenceReq {
create_option: CreateOption::CreateOrReplace,
ident: SequenceIdent::new(&tenant, sequence_name),
create_on,
comment: Some("seq1".to_string()),
storage_version,
};

let _resp = mt.create_sequence(req).await?;
Expand All @@ -5852,6 +5888,7 @@ impl SchemaApiTestSuite {
assert_eq!(resp.current, 1);
}

info!("--- drop sequence");
{
let req = DropSequenceReq {
ident: SequenceIdent::new(&tenant, sequence_name),
Expand All @@ -5863,6 +5900,24 @@ impl SchemaApiTestSuite {
let req = SequenceIdent::new(&tenant, sequence_name);
let resp = mt.get_sequence(&req).await?;
assert!(resp.is_none());

let storage_ident = SequenceStorageIdent::new_from(req);
let got = mt
.as_kv_api()
.get_kv(&storage_ident.to_string_key())
.await?;
assert!(
got.is_none(),
"storage_version==1 storage should be removed too"
);
}

info!("--- list sequence after drop");
{
let values = mt.list_sequences(&tenant).await?;
assert_eq!(values.len(), 1);
assert_eq!(values[0].0, "seq1");
assert_eq!(values[0].1.current, 1);
}

Ok(())
Expand Down
Loading
Loading