plugins/db.mysql.editors/backend/mysql_table_editor.h (104 lines of code) (raw):

/* * Copyright (c) 2009, 2018, Oracle and/or its affiliates. All rights reserved. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License, version 2.0, * as published by the Free Software Foundation. * * This program is designed to work with certain software (including * but not limited to OpenSSL) that is licensed under separate terms, as * designated in a particular file or component or in included license * documentation. The authors of MySQL hereby grant you an additional * permission to link the program and your derivative works with the * separately licensed software that they have either included with * the program or referenced in the documentation. * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See * the GNU General Public License, version 2.0, for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #pragma once #include "grtdb/editor_table.h" #include "grts/structs.workbench.physical.h" #include "grts/structs.db.mysql.h" #include "mysql_support_backend_public_interface.h" class MySQLTableEditorBE; namespace mforms { class View; }; class MYSQLWBMYSQLSUPPORTBACKEND_PUBLIC_FUNC MySQLTableColumnsListBE : public ::bec::TableColumnsListBE { public: enum MySQLColumnListColumns { IsAutoIncrement = bec::TableColumnsListBE::LastColumn, IsAutoIncrementable, IsGenerated, GeneratedStorageType, GeneratedExpression }; virtual bool set_field(const ::bec::NodeId &node, ColumnId column, const std::string &value); virtual bool set_field(const ::bec::NodeId &node, ColumnId column, ssize_t value); MySQLTableColumnsListBE(MySQLTableEditorBE *owner); virtual bool activate_popup_item_for_nodes(const std::string &name, const std::vector<bec::NodeId> &orig_nodes); virtual bec::MenuItemList get_popup_items_for_nodes(const std::vector<bec::NodeId> &nodes); protected: // for internal use only virtual bool get_field_grt(const ::bec::NodeId &node, ColumnId column, ::grt::ValueRef &value); }; class MYSQLWBMYSQLSUPPORTBACKEND_PUBLIC_FUNC MySQLTableIndexListBE : public bec::IndexListBE { public: enum Columns { StorageType = bec::IndexListBE::LastColumn, RowBlockSize, Parser }; MySQLTableIndexListBE(MySQLTableEditorBE *owner); virtual bool set_field(const ::bec::NodeId &node, ColumnId column, const std::string &value); virtual bool set_field(const ::bec::NodeId &node, ColumnId column, ssize_t value); protected: virtual bool get_field_grt(const ::bec::NodeId &node, ColumnId column, grt::ValueRef &value); }; class MYSQLWBMYSQLSUPPORTBACKEND_PUBLIC_FUNC MySQLTablePartitionTreeBE : public bec::TreeModel { MySQLTableEditorBE *_owner; public: // all columns are string, including min/maxRows enum Columns { Name, Value, MinRows, MaxRows, DataDirectory, IndexDirectory, Comment }; MySQLTablePartitionTreeBE(MySQLTableEditorBE *owner); virtual void refresh(){}; virtual size_t count_children(const ::bec::NodeId &parent); virtual ::bec::NodeId get_child(const ::bec::NodeId &parent, size_t index); virtual bool set_field(const ::bec::NodeId &node, ColumnId column, const std::string &value); protected: virtual bool get_field_grt(const ::bec::NodeId &node, ColumnId column, grt::ValueRef &value); virtual grt::Type get_field_type(const ::bec::NodeId &node, ColumnId column); db_mysql_PartitionDefinitionRef get_definition(const ::bec::NodeId &node); }; class MySQLTriggerPanel; class MYSQLWBMYSQLSUPPORTBACKEND_PUBLIC_FUNC MySQLTableEditorBE : public ::bec::TableEditorBE { friend class MySQLTriggerPanel; public: MySQLTableEditorBE(db_mysql_TableRef table); virtual ~MySQLTableEditorBE(); virtual void refresh_live_object(); virtual void commit_changes(); virtual MySQLTableColumnsListBE *get_columns() { return &_columns; } virtual MySQLTableIndexListBE *get_indexes() { return &_indexes; } virtual std::vector<std::string> get_index_types(); virtual std::vector<std::string> get_index_storage_types(); virtual std::vector<std::string> get_fk_action_options(); // table options virtual void set_table_option_by_name(const std::string &name, const std::string &value); virtual std::string get_table_option_by_name(const std::string &name); std::vector<std::string> get_engines_list(); bool engine_supports_foreign_keys(); virtual bool check_column_referenceable_by_fk(const db_ColumnRef &column1, const db_ColumnRef &column2); void load_trigger_sql(); // triggers mforms::View *get_trigger_panel(); void add_trigger(const std::string &timing, const std::string &event); virtual bool can_close(); // partitioning bool set_partition_type(const std::string &type); std::string get_partition_type(); void set_partition_expression(const std::string &expr); std::string get_partition_expression(); void set_partition_count(int count); int get_partition_count(); bool set_subpartition_type(const std::string &type); std::string get_subpartition_type(); bool set_subpartition_expression(const std::string &expr); std::string get_subpartition_expression(); bool subpartition_count_allowed(); void set_subpartition_count(int count); int get_subpartition_count(); MySQLTablePartitionTreeBE *get_partitions() { return &_partitions; } // whether partitions and sub partitions will be defined by the user or not // if false, only count is needed otherwise the partitions list must be defined void set_explicit_partitions(bool flag); bool get_explicit_partitions(); void set_explicit_subpartitions(bool flag); bool get_explicit_subpartitions(); virtual db_TableRef create_stub_table(const std::string &schema, const std::string &table); protected: MySQLTableColumnsListBE _columns; MySQLTablePartitionTreeBE _partitions; MySQLTableIndexListBE _indexes; MySQLTriggerPanel *_trigger_panel; bool _updating_triggers; void reset_partition_definitions(int parts, int subparts); };