Skip to content

Commit fc03859

Browse files
authored
RUST-2054 Fix quoting when constructing index names (#1226)
1 parent cc8bec5 commit fc03859

File tree

2 files changed

+22
-5
lines changed

2 files changed

+22
-5
lines changed

src/index.rs

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -32,11 +32,14 @@ impl IndexModel {
3232
.and_then(|o| o.name.as_ref())
3333
.is_none()
3434
{
35-
let key_names: Vec<String> = self
36-
.keys
37-
.iter()
38-
.map(|(k, v)| format!("{}_{}", k, v))
39-
.collect();
35+
fn format_kv(kv: (&String, &bson::Bson)) -> String {
36+
if let bson::Bson::String(s) = kv.1 {
37+
format!("{}_{}", kv.0, s)
38+
} else {
39+
format!("{}_{}", kv.0, kv.1)
40+
}
41+
}
42+
let key_names: Vec<String> = self.keys.iter().map(format_kv).collect();
4043
self.options.get_or_insert(IndexOptions::default()).name = Some(key_names.join("_"));
4144
}
4245
}

src/test/index_management.rs

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,20 @@ async fn index_management_creates() {
5555
assert_eq!(names, vec!["_id_", "a_1_b_-1", "c_1", "customname"]);
5656
}
5757

58+
// Test that creating indexes with string field types produces correct names.
59+
#[tokio::test]
60+
async fn index_management_string_names() {
61+
let client = Client::for_test().await;
62+
let coll = client
63+
.init_db_and_coll("index_management", "string_names")
64+
.await;
65+
let result = coll
66+
.create_index(IndexModel::builder().keys(doc! { "field": "2d" }).build())
67+
.await
68+
.expect("Test failed to create index");
69+
assert_eq!(result.index_name, "field_2d");
70+
}
71+
5872
// Test that creating a duplicate index works as expected.
5973
#[tokio::test]
6074
#[function_name::named]

0 commit comments

Comments
 (0)