fix(driver): 修复内置驱动搜索结果重复
This commit is contained in:
parent
38d300bd35
commit
fa55fa0d8a
|
|
@ -1,3 +1,5 @@
|
|||
use std::collections::HashSet;
|
||||
|
||||
use crate::models::connection::DatabaseType;
|
||||
|
||||
#[derive(Debug, Clone, Copy, PartialEq)]
|
||||
|
|
@ -290,12 +292,19 @@ pub fn is_agent_type(db_type: &DatabaseType) -> bool {
|
|||
}
|
||||
|
||||
pub fn driver_store_entries() -> impl Iterator<Item = (&'static str, &'static str)> {
|
||||
entries().iter().flat_map(|entry| {
|
||||
let base = entry.store_visible.then_some((entry.key, entry.label));
|
||||
let profiles =
|
||||
entry.profiles.iter().filter(|profile| profile.store_visible).map(|profile| (profile.key, profile.label));
|
||||
base.into_iter().chain(profiles)
|
||||
})
|
||||
let mut seen = HashSet::new();
|
||||
entries()
|
||||
.iter()
|
||||
.flat_map(move |entry| {
|
||||
let base = entry.store_visible.then_some((entry.key, entry.label));
|
||||
let profiles = entry
|
||||
.profiles
|
||||
.iter()
|
||||
.filter(|profile| profile.store_visible)
|
||||
.map(|profile| (profile.key, profile.label));
|
||||
base.into_iter().chain(profiles)
|
||||
})
|
||||
.filter(move |(key, _)| seen.insert(*key))
|
||||
}
|
||||
|
||||
pub fn label_for_key(agent_key: &str) -> Option<&'static str> {
|
||||
|
|
|
|||
|
|
@ -4,6 +4,7 @@ use dbx_core::database_capabilities::{
|
|||
};
|
||||
use dbx_core::models::connection::DatabaseType;
|
||||
use serde::Deserialize;
|
||||
use std::collections::HashSet;
|
||||
|
||||
#[derive(Debug, Deserialize)]
|
||||
#[serde(rename_all = "camelCase")]
|
||||
|
|
@ -118,6 +119,17 @@ fn maps_agent_database_types_to_driver_keys() {
|
|||
assert_eq!(agent_key(&DatabaseType::Postgres, None), None);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn driver_store_entries_do_not_repeat_agent_keys() {
|
||||
let entries: Vec<_> = agent_catalog::driver_store_entries().collect();
|
||||
let mut seen = HashSet::new();
|
||||
let duplicate_keys: Vec<_> = entries.iter().map(|(key, _)| *key).filter(|key| !seen.insert(*key)).collect();
|
||||
|
||||
assert!(duplicate_keys.is_empty(), "driver store agent keys should be unique: {duplicate_keys:?}");
|
||||
assert_eq!(entries.iter().filter(|(key, _)| *key == "gbase8a").count(), 1);
|
||||
assert_eq!(entries.iter().filter(|(key, _)| *key == "gbase8s").count(), 1);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn classifies_agent_database_types() {
|
||||
assert!(is_agent_type(&DatabaseType::Oracle));
|
||||
|
|
|
|||
Loading…
Reference in New Issue