106 lines
3.9 KiB
Python
106 lines
3.9 KiB
Python
|
# Copyright (c) 2023 Thomas Tuerk (kontakt@thomas-tuerk.de)
|
||
|
#
|
||
|
# This file is part of PyAPplus64 (see https://www.thomas-tuerk.de/de/pyapplus64).
|
||
|
#
|
||
|
# Use of this source code is governed by an MIT-style
|
||
|
# license that can be found in the LICENSE file or at
|
||
|
# https://opensource.org/licenses/MIT.
|
||
|
|
||
|
import PySimpleGUI as sg # type: ignore
|
||
|
import PyAPplus64
|
||
|
import applus_configs
|
||
|
import pathlib
|
||
|
from typing import Tuple, Optional, Union
|
||
|
|
||
|
try:
|
||
|
import sqlparse
|
||
|
except:
|
||
|
pass
|
||
|
|
||
|
try:
|
||
|
import sqlfmt.api
|
||
|
except:
|
||
|
pass
|
||
|
|
||
|
def prettyPrintSQL(format, sql):
|
||
|
try:
|
||
|
if format == "sqlfmt":
|
||
|
mode = sqlfmt.api.Mode(dialect_name="ClickHouse")
|
||
|
sqlPretty = sqlfmt.api.format_string(sql, mode)
|
||
|
return sqlPretty.replace("N '", "N'") # fix String Constants
|
||
|
elif format == "sqlparse-2":
|
||
|
return sqlparse.format(sql, reindent=True, keyword_case='upper')
|
||
|
elif format == "sqlparse":
|
||
|
return sqlparse.format(sql, reindent_aligned=True, keyword_case='upper')
|
||
|
else:
|
||
|
return sql
|
||
|
except e:
|
||
|
print (str(e))
|
||
|
return sql
|
||
|
|
||
|
def main() -> None:
|
||
|
monospaceFont = ("Courier New", 12)
|
||
|
sysenvs = applus_configs.serverConfDescs[:];
|
||
|
sysenvs.append("-");
|
||
|
layout = [
|
||
|
[sg.Button("Vervollständigen"), sg.Button("aus Clipboard", key="import"), sg.Button("nach Clipboard", key="export"), sg.Button("zurücksetzen", key="clear"), sg.Button("Beenden"),
|
||
|
sg.Text('System/Umgebung:'), sg.Combo(sysenvs, default_value="-", key="sysenv", readonly=True), sg.Text('Formatierung:'), sg.Combo(["-", "sqlfmt", "sqlparse", "sqlparse-2"], default_value="sqlparse", key="formatieren", readonly=True)
|
||
|
],
|
||
|
[sg.Text('Eingabe-SQL')],
|
||
|
[sg.Multiline(key='input', size=(150, 20), font=monospaceFont)],
|
||
|
[sg.Text('Ausgabe-SQL')],
|
||
|
[sg.Multiline(key='output', size=(150, 20), font=monospaceFont, horizontal_scroll=True)]
|
||
|
]
|
||
|
|
||
|
# server = PyAPplus64.applusFromConfigFile(confFile, user=user, env=env)
|
||
|
# systemName = server.scripttool.getSystemName() + "/" + server.scripttool.getMandant()
|
||
|
window = sg.Window("Complete SQL", layout)
|
||
|
oldSys = None
|
||
|
while True:
|
||
|
event, values = window.read()
|
||
|
if event == sg.WIN_CLOSED or event == 'Beenden':
|
||
|
break
|
||
|
elif event == 'clear':
|
||
|
window['input'].update("")
|
||
|
window['output'].update("")
|
||
|
elif event == 'import':
|
||
|
try:
|
||
|
window['input'].update(window.TKroot.clipboard_get())
|
||
|
except:
|
||
|
window['input'].update("")
|
||
|
window['output'].update("")
|
||
|
elif event == 'export':
|
||
|
try:
|
||
|
window.TKroot.clipboard_clear()
|
||
|
window.TKroot.clipboard_append(window['output'].get())
|
||
|
except:
|
||
|
pass
|
||
|
elif event == 'Vervollständigen':
|
||
|
sqlIn = window['input'].get()
|
||
|
try:
|
||
|
if sqlIn:
|
||
|
sys = window['sysenv'].get()
|
||
|
if sys != oldSys:
|
||
|
oldSys = sys
|
||
|
if sys and sys != "-":
|
||
|
server = sys.connect()
|
||
|
else:
|
||
|
server = None
|
||
|
if server:
|
||
|
sqlOut = server.completeSQL(sqlIn)
|
||
|
else:
|
||
|
sqlOut = sqlIn
|
||
|
sqlOut = prettyPrintSQL(window['formatieren'].get(), sqlOut)
|
||
|
else:
|
||
|
sqlOut = ""
|
||
|
except Exception as e:
|
||
|
sqlOut = "ERROR: " + str(e)
|
||
|
sg.popup_error_with_traceback("Fehler bei Vervollständigung", e)
|
||
|
window['output'].update(value=sqlOut)
|
||
|
|
||
|
window.close()
|
||
|
|
||
|
|
||
|
if __name__ == "__main__":
|
||
|
main()
|