fix: filter system schemas for Oracle and DM (Dameng)
This commit is contained in:
parent
bb2a3021ea
commit
0c430c9fb4
|
|
@ -81,12 +81,19 @@ pub async fn connect(host: &str, port: u16, database: &str, user: &str, pass: &s
|
|||
}
|
||||
|
||||
pub fn list_databases(client: &DmClient) -> Result<Vec<DatabaseInfo>, String> {
|
||||
let rows = client.query_single_column("SELECT USERNAME FROM ALL_USERS ORDER BY USERNAME")?;
|
||||
let rows = client.query_single_column(
|
||||
"SELECT USERNAME FROM ALL_USERS \
|
||||
WHERE USERNAME NOT IN (\
|
||||
'SYS','SYSDBA','SYSAUDITOR','SYSSSO','CTISYS',\
|
||||
'SYS_DBA','_SYS_STATISTICS','SYS_PHM'\
|
||||
) ORDER BY USERNAME",
|
||||
)?;
|
||||
Ok(rows.into_iter().map(|name| DatabaseInfo { name }).collect())
|
||||
}
|
||||
|
||||
pub fn list_schemas(client: &DmClient) -> Result<Vec<String>, String> {
|
||||
client.query_single_column("SELECT USERNAME FROM ALL_USERS ORDER BY USERNAME")
|
||||
let dbs = list_databases(client)?;
|
||||
Ok(dbs.into_iter().map(|d| d.name).collect())
|
||||
}
|
||||
|
||||
pub fn list_tables(client: &DmClient, schema: &str) -> Result<Vec<TableInfo>, String> {
|
||||
|
|
|
|||
|
|
@ -39,17 +39,45 @@ fn value_to_json(val: &oracle_rs::Value) -> serde_json::Value {
|
|||
|
||||
pub async fn list_databases(conn: &OracleClient) -> Result<Vec<DatabaseInfo>, String> {
|
||||
log::debug!("[oracle] list_databases: querying all_users");
|
||||
let result = conn.query("SELECT username FROM all_users ORDER BY username", &[]).await.map_err(|e| {
|
||||
log::error!("[oracle] list_databases failed: {e}");
|
||||
e.to_string()
|
||||
})?;
|
||||
let result = conn
|
||||
.query(
|
||||
"SELECT username FROM all_users \
|
||||
WHERE oracle_maintained = 'N' \
|
||||
OR NOT EXISTS (SELECT 1 FROM all_users WHERE oracle_maintained IS NOT NULL) \
|
||||
ORDER BY username",
|
||||
&[],
|
||||
)
|
||||
.await;
|
||||
|
||||
let result = match result {
|
||||
Ok(r) => r,
|
||||
Err(_) => conn
|
||||
.query(
|
||||
"SELECT username FROM all_users \
|
||||
WHERE username NOT IN (\
|
||||
'SYS','SYSTEM','SYSMAN','DBSNMP','SYSBACKUP','SYSDG','SYSKM','OUTLN',\
|
||||
'AUDSYS','LBACSYS','DVF','DVSYS','APPQOSSYS','CTXSYS','MDSYS','MDDATA',\
|
||||
'ORDSYS','ORDDATA','ORDPLUGINS','XDB','ANONYMOUS','DIP','EXFSYS',\
|
||||
'GSMADMIN_INTERNAL','GSMCATUSER','GSMUSER','OJVMSYS','OLAPSYS',\
|
||||
'ORACLE_OCM','SI_INFORMTN_SCHEMA','WMSYS','XS$NULL','DBSFWUSER',\
|
||||
'REMOTE_SCHEDULER_AGENT','PDBADMIN','DGPDB_INT','OPS$ORACLE',\
|
||||
'GGSYS','FLOWS_FILES','APEX_PUBLIC_USER'\
|
||||
) ORDER BY username",
|
||||
&[],
|
||||
)
|
||||
.await
|
||||
.map_err(|e| {
|
||||
log::error!("[oracle] list_databases failed: {e}");
|
||||
e.to_string()
|
||||
})?,
|
||||
};
|
||||
|
||||
Ok(result.rows.iter().map(|row| DatabaseInfo { name: row.get_string(0).unwrap_or("").to_string() }).collect())
|
||||
}
|
||||
|
||||
pub async fn list_schemas(conn: &OracleClient) -> Result<Vec<String>, String> {
|
||||
let result =
|
||||
conn.query("SELECT username FROM all_users ORDER BY username", &[]).await.map_err(|e| e.to_string())?;
|
||||
Ok(result.rows.iter().map(|row| row.get_string(0).unwrap_or("").to_string()).collect())
|
||||
let dbs = list_databases(conn).await?;
|
||||
Ok(dbs.into_iter().map(|d| d.name).collect())
|
||||
}
|
||||
|
||||
pub async fn list_tables(conn: &OracleClient, schema: &str) -> Result<Vec<TableInfo>, String> {
|
||||
|
|
|
|||
Loading…
Reference in New Issue