File: C:/Program Files/MySQL/MySQL Workbench 8.0/modules/table_utils_grt.py
# 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 also distributed 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 included with MySQL.
# 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
# import the wb module, where various utilities for working with plugins are defined
from wb import *
from mforms import App
import mforms
import table_templates
# import module for working with Workbench data structures
import grt
# create a module information descriptor. The variable name must be ModuleInfo
ModuleInfo = DefineModule(name= "WbTableUtils", author= "MySQL Team", version="1.0")
# export a function from this module, declaring its return and parameter types and then
# tell WB that it is a plugin to be shown in the context menu for the selected table
# and the Objects menu receiving the current selected table as input
@ModuleInfo.plugin("wb.table.util.copyInsertToClipboard", caption= "Copy Inserts to Clipboard", input= [wbinputs.objectOfClass("db.Table")], groups=["Catalog/Utilities","Menu/Objects"], accessibilityName="Copy Inserts to Clipboard")
@ModuleInfo.export(grt.INT, grt.classes.db_Table)
def copyInsertToClipboard(table):
inserts = table.inserts()
if inserts != "":
grt.modules.Workbench.copyToClipboard(table.inserts())
App.get().set_status_text("Ready")
else:
App.get().set_status_text("The table " + table.owner.name + "." + table.name + " has no records for insert statements")
return 0
# export a function from this module, declaring its return and parameter types and then
# tell WB that it is a plugin to be shown in the context menu for the selected table
# and the Objects menu receiving the current selected table as input
@ModuleInfo.plugin("wb.table.util.copyInsertTemplateToClipboard", caption= "Copy Insert Template to Clipboard", input= [wbinputs.objectOfClass("db.Table")], groups=["Catalog/Utilities","Menu/Objects"], accessibilityName="Copy Insert Template to Clipboard")
@ModuleInfo.export(grt.INT, grt.classes.db_Table)
def copyInsertTemplateToClipboard(table):
code = "INSERT INTO `" + table.owner.name + "`.`" + table.name + "` ("
first = 1
for col in table.columns:
if first == 0:
code += "`, `" + col.name
else:
code += "`" + col.name
first = 0
code += "`) VALUES ("
first = 1
for col in table.columns:
if first == 0:
code += ", " + "NULL"
else:
code += "NULL"
first = 0
code += ");"
grt.modules.Workbench.copyToClipboard(code)
App.get().set_status_text("Ready")
return 0
def _parse_table_definitions(code):
defs= []
tables= code.strip().split("\n")
for t in tables:
name, sep, columns = t.strip().partition(" ")
column_defs = []
for column in columns.strip().split(","):
cn, sep, ct = column.strip().partition(" ")
if cn:
column_defs.append((cn.strip(), ct.strip()))
defs.append((name, column_defs))
return defs
def _create_table(catalog, schema, name, columns):
types= catalog.simpleDatatypes
tbl= schema.addNewTable("db.mysql")
tbl.name= name
for cname, ctype in columns:
column= grt.classes.db_mysql_Column()
column.owner = tbl
column.name = cname[1:] if cname.startswith("*") else cname
if ctype:
column.setParseType(ctype, types)
tbl.addColumn(column)
if cname.startswith("*"):
tbl.addPrimaryKeyColumn(column)
return tbl
@ModuleInfo.plugin("wb.table.util.quickTables", caption= "Create Multiple Tables", input= [wbinputs.currentCatalog()], groups=["Catalog/Utilities","Menu/Objects"], accessibilityName="Create Multiple Tables")
@ModuleInfo.export(grt.INT, grt.classes.db_Catalog)
def quickTablesInCatalog(catalog):
form= mforms.Form(None, mforms.FormDialogFrame)
label = mforms.newLabel("""You can create multiple tables by giving their outline in the following format:
table1 *column1 int,column2 varchar(32),column3
table2 column1,column2
table3
...
* denotes a primary key column. Column type is optional.""")
box = mforms.newBox(False)
box.set_spacing(12)
box.set_padding(12)
box.add(label, False, False)
text = mforms.newTextBox(mforms.VerticalScrollBar)
box.add(text, True, True)
form.set_content(box)
form.set_title("Create Multiple Tables")
ok = mforms.newButton()
ok.set_text("OK")
cancel = mforms.newButton()
cancel.set_text("Cancel")
bbox = mforms.newBox(True)
mforms.Utilities.add_end_ok_cancel_buttons(bbox, ok, cancel)
bbox.set_spacing(8)
box.add_end(bbox, False, True)
form.set_size(600, 350)
form.center()
schema = catalog.schemata[0]
ok.add_clicked_callback(lambda: form.end_modal(True))
if form.run_modal(None, cancel):
tabledefs= _parse_table_definitions(text.get_string_value())
for name, columns in tabledefs:
if name:
_create_table(catalog, schema, name, columns)
return 1
return 0
@ModuleInfo.plugin("wb.table.util.openTableTemplateEditor", caption= "Open Table Templates Editor", accessibilityName="Open Table Templates Editor")
@ModuleInfo.export(grt.INT)
def openTableTemplateEditor():
table_templates.TableTemplateManager().edit_templates()
return 0
@ModuleInfo.export(grt.INT, grt.STRING)
def openTableTemplateEditorFor(name):
table_templates.TableTemplateManager().edit_template(name)
return 0
@ModuleInfo.export(grt.classes.db_Table, grt.classes.db_Schema, grt.STRING)
def createTableFromTemplate(schema, template_name):
return table_templates.TableTemplateManager().create_table_like_template_in_schema(schema, template_name)