//===----------------------------------------------------------------------===// // DuckDB // // duckdb/parser/parsed_data/alter_table_info.hpp // // //===----------------------------------------------------------------------===// #pragma once #include "duckdb/parser/parsed_data/alter_info.hpp" #include "duckdb/parser/column_definition.hpp" #include "duckdb/parser/constraint.hpp" #include "duckdb/parser/parsed_data/parse_info.hpp" namespace duckdb { enum AlterForeignKeyType : uint8_t { AFT_ADD = 0, AFT_DELETE = 1 }; //===--------------------------------------------------------------------===// // Change Ownership //===--------------------------------------------------------------------===// struct ChangeOwnershipInfo : public AlterInfo { ChangeOwnershipInfo(CatalogType entry_catalog_type, string entry_catalog, string entry_schema, string entry_name, string owner_schema, string owner_name, OnEntryNotFound if_not_found); // Catalog type refers to the entry type, since this struct is usually built from an // ALTER . OWNED BY . statement // here it is only possible to know the type of who is to be owned CatalogType entry_catalog_type; string owner_schema; string owner_name; public: CatalogType GetCatalogType() const override; unique_ptr Copy() const override; void Serialize(FieldWriter &writer) const override; }; //===--------------------------------------------------------------------===// // Alter Table //===--------------------------------------------------------------------===// enum class AlterTableType : uint8_t { INVALID = 0, RENAME_COLUMN = 1, RENAME_TABLE = 2, ADD_COLUMN = 3, REMOVE_COLUMN = 4, ALTER_COLUMN_TYPE = 5, SET_DEFAULT = 6, FOREIGN_KEY_CONSTRAINT = 7, SET_NOT_NULL = 8, DROP_NOT_NULL = 9 }; struct AlterTableInfo : public AlterInfo { AlterTableInfo(AlterTableType type, AlterEntryData data); ~AlterTableInfo() override; AlterTableType alter_table_type; public: CatalogType GetCatalogType() const override; void Serialize(FieldWriter &writer) const override; virtual void SerializeAlterTable(FieldWriter &writer) const = 0; static unique_ptr Deserialize(FieldReader &reader); }; //===--------------------------------------------------------------------===// // RenameColumnInfo //===--------------------------------------------------------------------===// struct RenameColumnInfo : public AlterTableInfo { RenameColumnInfo(AlterEntryData data, string old_name_p, string new_name_p); ~RenameColumnInfo() override; //! Column old name string old_name; //! Column new name string new_name; public: unique_ptr Copy() const override; void SerializeAlterTable(FieldWriter &writer) const override; static unique_ptr Deserialize(FieldReader &reader, AlterEntryData data); }; //===--------------------------------------------------------------------===// // RenameTableInfo //===--------------------------------------------------------------------===// struct RenameTableInfo : public AlterTableInfo { RenameTableInfo(AlterEntryData data, string new_name); ~RenameTableInfo() override; //! Relation new name string new_table_name; public: unique_ptr Copy() const override; void SerializeAlterTable(FieldWriter &writer) const override; static unique_ptr Deserialize(FieldReader &reader, AlterEntryData data); }; //===--------------------------------------------------------------------===// // AddColumnInfo //===--------------------------------------------------------------------===// struct AddColumnInfo : public AlterTableInfo { AddColumnInfo(AlterEntryData data, ColumnDefinition new_column, bool if_column_not_exists); ~AddColumnInfo() override; //! New column ColumnDefinition new_column; //! Whether or not an error should be thrown if the column exist bool if_column_not_exists; public: unique_ptr Copy() const override; void SerializeAlterTable(FieldWriter &writer) const override; static unique_ptr Deserialize(FieldReader &reader, AlterEntryData data); }; //===--------------------------------------------------------------------===// // RemoveColumnInfo //===--------------------------------------------------------------------===// struct RemoveColumnInfo : public AlterTableInfo { RemoveColumnInfo(AlterEntryData data, string removed_column, bool if_column_exists, bool cascade); ~RemoveColumnInfo() override; //! The column to remove string removed_column; //! Whether or not an error should be thrown if the column does not exist bool if_column_exists; //! Whether or not the column should be removed if a dependency conflict arises (used by GENERATED columns) bool cascade; public: unique_ptr Copy() const override; void SerializeAlterTable(FieldWriter &writer) const override; static unique_ptr Deserialize(FieldReader &reader, AlterEntryData data); string GetColumnName() const override { return removed_column; }; }; //===--------------------------------------------------------------------===// // ChangeColumnTypeInfo //===--------------------------------------------------------------------===// struct ChangeColumnTypeInfo : public AlterTableInfo { ChangeColumnTypeInfo(AlterEntryData data, string column_name, LogicalType target_type, unique_ptr expression); ~ChangeColumnTypeInfo() override; //! The column name to alter string column_name; //! The target type of the column LogicalType target_type; //! The expression used for data conversion unique_ptr expression; public: unique_ptr Copy() const override; void SerializeAlterTable(FieldWriter &writer) const override; static unique_ptr Deserialize(FieldReader &reader, AlterEntryData data); string GetColumnName() const override { return column_name; }; }; //===--------------------------------------------------------------------===// // SetDefaultInfo //===--------------------------------------------------------------------===// struct SetDefaultInfo : public AlterTableInfo { SetDefaultInfo(AlterEntryData data, string column_name, unique_ptr new_default); ~SetDefaultInfo() override; //! The column name to alter string column_name; //! The expression used for data conversion unique_ptr expression; public: unique_ptr Copy() const override; void SerializeAlterTable(FieldWriter &writer) const override; static unique_ptr Deserialize(FieldReader &reader, AlterEntryData data); }; //===--------------------------------------------------------------------===// // AlterForeignKeyInfo //===--------------------------------------------------------------------===// struct AlterForeignKeyInfo : public AlterTableInfo { AlterForeignKeyInfo(AlterEntryData data, string fk_table, vector pk_columns, vector fk_columns, vector pk_keys, vector fk_keys, AlterForeignKeyType type); ~AlterForeignKeyInfo() override; string fk_table; vector pk_columns; vector fk_columns; vector pk_keys; vector fk_keys; AlterForeignKeyType type; public: unique_ptr Copy() const override; void SerializeAlterTable(FieldWriter &writer) const override; static unique_ptr Deserialize(FieldReader &reader, AlterEntryData data); }; //===--------------------------------------------------------------------===// // SetNotNullInfo //===--------------------------------------------------------------------===// struct SetNotNullInfo : public AlterTableInfo { SetNotNullInfo(AlterEntryData data, string column_name); ~SetNotNullInfo() override; //! The column name to alter string column_name; public: unique_ptr Copy() const override; void SerializeAlterTable(FieldWriter &writer) const override; static unique_ptr Deserialize(FieldReader &reader, AlterEntryData data); }; //===--------------------------------------------------------------------===// // DropNotNullInfo //===--------------------------------------------------------------------===// struct DropNotNullInfo : public AlterTableInfo { DropNotNullInfo(AlterEntryData data, string column_name); ~DropNotNullInfo() override; //! The column name to alter string column_name; public: unique_ptr Copy() const override; void SerializeAlterTable(FieldWriter &writer) const override; static unique_ptr Deserialize(FieldReader &reader, AlterEntryData data); }; //===--------------------------------------------------------------------===// // Alter View //===--------------------------------------------------------------------===// enum class AlterViewType : uint8_t { INVALID = 0, RENAME_VIEW = 1 }; struct AlterViewInfo : public AlterInfo { AlterViewInfo(AlterViewType type, AlterEntryData data); ~AlterViewInfo() override; AlterViewType alter_view_type; public: CatalogType GetCatalogType() const override; void Serialize(FieldWriter &writer) const override; virtual void SerializeAlterView(FieldWriter &writer) const = 0; static unique_ptr Deserialize(FieldReader &reader); }; //===--------------------------------------------------------------------===// // RenameViewInfo //===--------------------------------------------------------------------===// struct RenameViewInfo : public AlterViewInfo { RenameViewInfo(AlterEntryData data, string new_name); ~RenameViewInfo() override; //! Relation new name string new_view_name; public: unique_ptr Copy() const override; void SerializeAlterView(FieldWriter &writer) const override; static unique_ptr Deserialize(FieldReader &reader, AlterEntryData data); }; } // namespace duckdb