diff --git a/src/operator/src/insert.rs b/src/operator/src/insert.rs index ec01b329457f..466dde5425c1 100644 --- a/src/operator/src/insert.rs +++ b/src/operator/src/insert.rs @@ -576,6 +576,9 @@ impl Inserter { for table in tables { let table_info = table.table_info(); + if table_info.is_ttl_instant_table() { + instant_table_ids.insert(table_info.table_id()); + } table_name_to_ids.insert(table_info.name.clone(), table_info.table_id()); } } @@ -596,6 +599,9 @@ impl Inserter { .create_physical_table(create_table, ctx, statement_executor) .await?; let table_info = table.table_info(); + if table_info.is_ttl_instant_table() { + instant_table_ids.insert(table_info.table_id()); + } table_name_to_ids.insert(table_info.name.clone(), table_info.table_id()); } for alter_expr in alter_tables.into_iter() { diff --git a/tests-integration/tests/grpc.rs b/tests-integration/tests/grpc.rs index 8b91ed55d520..74c8a6c0f73d 100644 --- a/tests-integration/tests/grpc.rs +++ b/tests-integration/tests/grpc.rs @@ -444,6 +444,40 @@ async fn insert_with_hints_and_assert(db: &Database) { +-------+-------------------------------------+\ "; assert_eq!(pretty, expected); + + // testing data with ttl=instant and auto_create_table = true can be handled correctly + let (expected_host_col, expected_cpu_col, expected_mem_col, expected_ts_col) = expect_data(); + + let request = InsertRequest { + table_name: "demo1".to_string(), + columns: vec![ + expected_host_col.clone(), + expected_cpu_col.clone(), + expected_mem_col.clone(), + expected_ts_col.clone(), + ], + row_count: 4, + }; + let result = db + .insert_with_hints( + InsertRequests { + inserts: vec![request], + }, + &[("auto_create_table", "true"), ("ttl", "instant")], + ) + .await; + assert_eq!(result.unwrap(), 0); + + // check table is empty + let output = db.sql("SELECT * FROM demo1").await.unwrap(); + + let record_batches = match output.data { + OutputData::RecordBatches(record_batches) => record_batches, + OutputData::Stream(stream) => RecordBatches::try_collect(stream).await.unwrap(), + OutputData::AffectedRows(_) => unreachable!(), + }; + + assert!(record_batches.iter().all(|r| r.num_rows() == 0)); } async fn insert_and_assert(db: &Database) {