1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
use {
super::AlterError,
crate::{ComplexTableName, Glue, Result, ValueDefault},
sqlparser::ast::{ObjectName, ObjectType},
};
impl Glue {
pub async fn drop(
&mut self,
object_type: &ObjectType,
names: &[ObjectName],
if_exists: bool,
) -> Result<()> {
if object_type != &ObjectType::Table {
return Err(AlterError::DropTypeNotSupported(object_type.to_string()).into());
}
for name in names.iter() {
let ComplexTableName {
name: table_name,
database,
..
} = name.try_into()?;
let database = &mut **self.get_mut_database(&database)?;
let schema = database.fetch_schema(&table_name).await?;
if let Some(schema) = schema {
for column in schema.column_defs {
if matches!(column.default, Some(ValueDefault::AutoIncrement(_))) {
database
.set_increment_value(&table_name, &column.name, 1_i64)
.await?;
}
}
database.delete_schema(&table_name).await?;
} else if !if_exists {
return Err(AlterError::TableNotFound(table_name.to_owned()).into());
}
}
Ok(())
}
}