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(())
	}
}