Documentation
use {
	super::AlterError,
	crate::{types::ComplexTableName, Glue, Result, ValueDefault},
	sqlparser::ast::{ObjectName, ObjectType},
};

impl Glue {
	pub async fn ast_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(())
	}
}