这不是你想要的答案,但我会把它加上给那些好奇的人。将来我会研究如何将其作为自己的插件。也许。
针对这个练习,让我们修改Workbench的“选择所有语句”行为。当右键单击表并选择“复制到剪贴板”或“发送到SQL编辑器”后,您可以在上下文菜单中看到“选择所有语句”。
在我的系统(OS X)中,它在这里定义:
/Applications/MySQLWorkbench.app/Contents/Resources/plugins/sqlide_schematree_ext.py
具体来说,就是这段代码:
(_("Select All Statement"), 'select_all_statement', ['db.Table', 'db.View'], len(selection) > 0, False),
(_("Select All Statement"), 'select_all_statement', ['columns'], len(selection) == 1 and selection[0].type == 'columns', False),
参考以下代码:
def select_all_statement(self):
parts = []
for obj in self.selection:
if obj.type == 'columns':
obj = obj.owner
parts.append("SELECT %s\nFROM %s.%s;\n" % (",\n ".join("%s.%s" % (esc_ident(obj.name), esc_ident(c[0])) for c in self.get_table_columns(obj.schemaName, obj.name)), esc_ident(obj.schemaName), esc_ident(obj.name)))
self.send("\n".join(parts))
好的,我还不确定如何使它变得智能化(例如,找出PK,或在上下文菜单中提供列建议),但现在让我们添加愚蠢的代码(即,ORDER BY id)。您可以将parts.append行修改为以下内容:
parts.append("SELECT %s\nORDER BY id\nFROM %s.%s;\n" % (",\n ".join("%s.%s" % (esc_ident(obj.name), esc_ident(c[0])) for c in self.get_table_columns(obj.schemaName, obj.name)), esc_ident(obj.schemaName), esc_ident(obj.name)))
就像我说的,它并不智能。希望有一天我(或其他人)可以更新它,使其更加智能。话虽如此,重新启动Workbench将使上述更改在Workbench中显示,因为Workbench在启动时重新编译插件(以及Workbench中的大多数内容都是插件)。随意将“选择所有语句”更改为“选择所有语句并按id排序”或其他任何内容。或者,添加新条目和新功能,例如select_all_and_order_statement。愉快的编程!:)