Code Monkey home page Code Monkey logo

kdbstudio's Introduction

Studio for kdb+

Studio for kdb+ is a rapid development environment for the ultra-fast database kdb+ from Kx Systems. In the style of commonly used SQL Clients, it allows you to

  • Connect to kdb+ processes
  • Execute selected text from the editor window
  • View results as tables, charts, or classic console style

The editor component is based on the NetBeans editor component, and includes the following features

  • find/search/replace
  • cut/copy/paste
  • undo/redo
  • syntax highlighting for the q language
  • most recent files menu

Additionally the application features

  • export to Excel
  • drag and drop
  • immediate charting of grid data

Screenshot

alt tag

Current Version

3.34 build date 2018.02.28

Credits

Studio for kdb+ uses the following open source projects:

Installation

Download the latest release from

https://github.com/dzmipt/kdbStudio

Gradle command is used to start

gradle run

Background

Studio for kdb+ has been developed since October 2002, and the source was released to the kdb+ community in September 2008 as the primary developer wanted to allow the community to develop the application further.

Studio is written 100% in Java. The primary motivation for its development was to be able to comfortably access remote kdb+ processes. In time, it has become clear that it is not an IDE as such, but is better described as a rapid execution environment. One can edit text in the "scratch" window, highlight a selection and execute it against a remote kdb+ process via tcp/ip, with the results displayed as a grid or as in the classic kdb+ console.

In 2020, the git repo was forked. And now it is developed in a separate dzmipt git repo.

License

Apache 2 , see LICENSE file in repository root.

N.B. JFreeChart and c.java components have their own respective licenses.

Icon Experience Collection

Selected icons within the lib/images directory are part of the Icon Experience collection (http://www.iconexperience.com) and may be freely used with Studio for kdb+ without charge, but may not be used separately from Studio for kdb+ without a purchase of a license from Icon Experience.

kdbstudio's People

Contributors

charlesskelton avatar charlieskelton-kx avatar custodian avatar dernasherbrezon avatar dzmipt avatar kmatveev avatar punx120 avatar yanpas avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar

Watchers

 avatar

kdbstudio's Issues

Word wrap in text editor

At the moment long lines can be horizontal scrolled. Is it difficult to have word wrap in current text editor? Reformat (to add extra \n) might be not a best option as the line could have comments in the end of the line

Error on query executions when socket is recreated

  • connect to a q from a Studio and execute some queries;
  • restart q opening the same port
    The next query in Studio will error:
    studio.ui.action.QueryExecutor - Error occurred during query execution
    java.io.EOFException: null

All next queries are ok

Set editor tab names

At the moment, tabs are named by filename or Script in case the script wasn't loaded or saved. In the latter case, i propose to name tabs based on connected server name or host:port.

Memory leak

If huge results are loaded, even if tabs were disappeared, the memory is not freed.

Last commit introduced TabPanel.cleanUp() which looks like is fixing the problem. However why a reference is not deleted to a TabPanel during tab removal requires further investigation

Wizard to set background color for all servers

Use-case: it is nice to highlight servers to Production with different (e.g. red) color.

It looks we need a wizard which set background (defined by a user) to servers which match to rules. The rules could be something like:
if name has prod (ignore case), color is red (Color selection)
if host has prd, color is red
if folders have ProjectBlahBlah, color is green

Workspaces

The idea is to save/restore all settings, open tabs, etc. It will allow to have separate workspace for different projects

NPE in Config

This is to incorporate PR:
CharlesSkelton#25

I suspect that kdbStudio wouldn't start if there is no config file (i.e. the first start up).

OOM Exception in logs not reported to user

It looks there was big (30Mb) response from remote server. There was no output. Logs have an exception. It should be some notifacation to the user about the error.
2021.03.30 15:37:21.251 [AWT-EventQueue-0] ERROR stderr - Exception in thread "AWT-EventQueue-0" java.lang.OutOfMemoryError: Java heap space
2021.03.30 15:37:21.251 [AWT-EventQueue-0] ERROR stderr - at java.util.Arrays.copyOf(Arrays.java:3332)
2021.03.30 15:37:21.252 [AWT-EventQueue-0] ERROR stderr - at java.lang.AbstractStringBuilder.ensureCapacityInternal(AbstractStringBuilder.java:124)
2021.03.30 15:37:21.252 [AWT-EventQueue-0] ERROR stderr - at java.lang.AbstractStringBuilder.append(AbstractStringBuilder.java:448)
2021.03.30 15:37:21.252 [AWT-EventQueue-0] ERROR stderr - at java.lang.StringBuilder.append(StringBuilder.java:136)
2021.03.30 15:37:21.252 [AWT-EventQueue-0] ERROR stderr - at studio.kdb.K$KDate.format(K.java:627)
2021.03.30 15:37:21.252 [AWT-EventQueue-0] ERROR stderr - at studio.kdb.K$KBaseVector.formatVector(K.java:1061)
2021.03.30 15:37:21.252 [AWT-EventQueue-0] ERROR stderr - at studio.kdb.K$KBaseVector.format(K.java:1072)
2021.03.30 15:37:21.253 [AWT-EventQueue-0] ERROR stderr - at studio.kdb.K$KList.formatVector(K.java:1123)
2021.03.30 15:37:21.253 [AWT-EventQueue-0] ERROR stderr - at studio.kdb.K$KBaseVector.format(K.java:1072)
2021.03.30 15:37:21.253 [AWT-EventQueue-0] ERROR stderr - at studio.kdb.K$Flip.format(K.java:835)
2021.03.30 15:37:21.253 [AWT-EventQueue-0] ERROR stderr - at studio.kdb.K$Dict.format(K.java:802)
2021.03.30 15:37:21.253 [AWT-EventQueue-0] ERROR stderr - at studio.kdb.K$KBase.toString(K.java:75)
2021.03.30 15:37:21.253 [AWT-EventQueue-0] ERROR stderr - at studio.ui.CellRenderer.getTableCellRendererComponent(CellRenderer.java:52)
2021.03.30 15:37:21.253 [AWT-EventQueue-0] ERROR stderr - at studio.ui.WidthAdjuster.resize(WidthAdjuster.java:91)
2021.03.30 15:37:21.254 [AWT-EventQueue-0] ERROR stderr - at studio.ui.WidthAdjuster.resizeAllColumns(WidthAdjuster.java:67)
2021.03.30 15:37:21.254 [AWT-EventQueue-0] ERROR stderr - at studio.ui.QGrid.(QGrid.java:135)
2021.03.30 15:37:21.254 [AWT-EventQueue-0] ERROR stderr - at studio.ui.TabPanel.initComponents(TabPanel.java:49)
2021.03.30 15:37:21.254 [AWT-EventQueue-0] ERROR stderr - at studio.ui.TabPanel.(TabPanel.java:42)
2021.03.30 15:37:21.254 [AWT-EventQueue-0] ERROR stderr - at studio.ui.StudioPanel.queryExecutionComplete(StudioPanel.java:2164)
2021.03.30 15:37:21.255 [AWT-EventQueue-0] ERROR stderr - at studio.ui.action.QueryExecutor$Worker.done(QueryExecutor.java:152)
2021.03.30 15:37:21.255 [AWT-EventQueue-0] ERROR stderr - at javax.swing.SwingWorker$5.run(SwingWorker.java:737)
2021.03.30 15:37:21.255 [AWT-EventQueue-0] ERROR stderr - at javax.swing.SwingWorker$DoSubmitAccumulativeRunnable.run(SwingWorker.java:832)
2021.03.30 15:37:21.255 [AWT-EventQueue-0] ERROR stderr - at sun.swing.AccumulativeRunnable.run(AccumulativeRunnable.java:112)
2021.03.30 15:37:21.255 [AWT-EventQueue-0] ERROR stderr - at javax.swing.SwingWorker$DoSubmitAccumulativeRunnable.actionPerformed(SwingWorker.java:842)
2021.03.30 15:37:21.255 [AWT-EventQueue-0] ERROR stderr - at javax.swing.Timer.fireActionPerformed(Timer.java:313)
2021.03.30 15:37:21.255 [AWT-EventQueue-0] ERROR stderr - at javax.swing.Timer$DoPostEvent.run(Timer.java:245)
2021.03.30 15:37:21.256 [AWT-EventQueue-0] ERROR stderr - at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:311)
2021.03.30 15:37:21.256 [AWT-EventQueue-0] ERROR stderr - at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:758)
2021.03.30 15:37:21.256 [AWT-EventQueue-0] ERROR stderr - at java.awt.EventQueue.access$500(EventQueue.java:97)
2021.03.30 15:37:21.256 [AWT-EventQueue-0] ERROR stderr - at java.awt.EventQueue$3.run(EventQueue.java:709)
2021.03.30 15:37:21.256 [AWT-EventQueue-0] ERROR stderr - at java.awt.EventQueue$3.run(EventQueue.java:703)
2021.03.30 15:37:21.256 [AWT-EventQueue-0] ERROR stderr - at java.security.AccessController.doPrivileged(Native Method)

Error in rendering result

Played with such object:
get `:test1/ set ([] qqq:1.1 2.2 3.3 4.4 5.5; c:{ ([] a:x+til 3; b: til 3)} each til 5)

Got the following Exception:
Error occurred during query execution: kx.c$K4Exception: type kx.c$K4Exception: type
at kx.c.k(c.java:678)
at kx.c$1.run(c.java:138)
at java.lang.Thread.run(Thread.java:748)

FileChoose dialog can open longer first time

I think that initial initialization of the Dialog might require longer time especially if there are network mounts.

Probably we can re-use File Choose dialog between different panels. If we open a file in a frame where we previously loaded file, the dialog would be initiated to the corresponded path. If it is a new frame, the dialog would show last selected location.

Syntax highlighting for symbols

At the moment, / and : are not treated as possible characters for symbol atom.
Kdb doesn't recognized `a/bas symbol. However the following are legitimate symbols `:a/b, `:, `asdf:asdfsa//asdf:

Option to prevent to execute all script

Ctrl+E executes all lines from the file (the whole script) in case nothing is selected.

It could be not useful. Let's add an option into settings to not execute everything if nothing is selected (another option is to ask user if he/she wants to execute everything)

Edit Server lost position of the server in Server Tree

Steps to reproduce:

  1. Select a server in the Server Tree
  2. Server -> Edit menu
  3. Amend server details and save

Expected: server details will be at the old location in the server tree
Actual: Server is removed from the server tree and then it is added into the end at the root level

Refresh action repeats the last query

Refresh the result set button repeats the last query and opens one more tab.

Probably more intuitive solution would be to refresh current tab and do not re-open a new tab

Add custom decimal format

It used to be possible to add custom decimal format - it was a property DecimalFormat in Studio property config. During introduction of thousands separator, this was disappeared. Probably we can add this into Settings menu?

Adding/removing servers doesn't work

  1. Removing a server from root:
    2021.04.02 09:13:17.120 [AWT-EventQueue-0] ERROR stderr - Exception in thread "AWT-EventQueue-0" java.lang.IllegalArgumentException: Can't add folder with empty name
    2021.04.02 09:13:17.121 [AWT-EventQueue-0] ERROR stderr - at studio.kdb.Config.setServerTree(Config.java:576)
    2021.04.02 09:13:17.121 [AWT-EventQueue-0] ERROR stderr - at studio.ui.ServerList.removeNode(ServerList.java:458)
    2021.04.02 09:13:17.121 [AWT-EventQueue-0] ERROR stderr - at studio.ui.ServerList.lambda$initActions$2(ServerList.java:356)
    2021.04.02 09:13:17.121 [AWT-EventQueue-0] ERROR stderr - at studio.ui.UserAction$1.actionPerformed(UserAction.java:33)
  2. Adding server into a folder (using Insert server) returns
    java.lan.IllegalArgumentException: Can't add folder with empty name

Open in Excel is broken

Trying to open in Excel results in Excel saying that the file is broken.
Trying to Copy in Excel format, Paste into Excel all cells (except header) with something like
studio.kdb.KFormatContext@11c696d9

Restoring panel contents after restart

I spot at least the following: I opened the Studio with one panel which was saved to a *.q file. I create a new (unnamed) panel and closed the first one. When I restart the Studio, I expected to get unnamed panel. Actually I got again one panel with the *.q file.

Underscores in table cells

Observed in Windows with tables having underscores in their names.

Underscores are not visible in table output - it looks they cell grid is drawn on top of the underscores symbols. As the result it is not obvious if entity has underscore or space char.

Single jar to start application

How to start the application? It is possible to start with gradle or to use a script which add all jars into classpath (actually the script is created during gradle distribution task).

To simplify application start up, probably we need to have a target (a way) to package all dependencies into a single jars. Is it Spring Boot?

Timezone in logs

At the moment it looks logs at ~/.studioforkdb/log are in UTC timezone. On one hand, it is not obvious from log file. On the another hand, probably it makes sense to have logs in user local timezone

Error trying to build chart

Actually the table was not something which is supposed to be used for charting, but still
([]a:1 2 3;b:string 10 20 30)

2021.03.31 08:09:52.123 [AWT-EventQueue-0] ERROR stderr - Exception in thread "AWT-EventQueue-0" java.lang.ClassCastException: studio.kdb.K$KCharacterVector cannot be cast to studio.kdb.ToDouble
2021.03.31 08:09:52.124 [AWT-EventQueue-0] ERROR stderr - at studio.ui.LineChart.createDataset(LineChart.java:190)
2021.03.31 08:09:52.124 [AWT-EventQueue-0] ERROR stderr - at studio.ui.LineChart.(LineChart.java:31)
2021.03.31 08:09:52.124 [AWT-EventQueue-0] ERROR stderr - at studio.ui.StudioPanel$21.actionPerformed(StudioPanel.java:1157)
2021.03.31 08:09:52.124 [AWT-EventQueue-0] ERROR stderr - at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2022)
2021.03.31 08:09:52.124 [AWT-EventQueue-0] ERROR stderr - at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2348)
2021.03.31 08:09:52.125 [AWT-EventQueue-0] ERROR stderr - at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402)
2021.03.31 08:09:52.125 [AWT-EventQueue-0] ERROR stderr - at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259)
2021.03.31 08:09:52.125 [AWT-EventQueue-0] ERROR stderr - at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:252)
2021.03.31 08:09:52.125 [AWT-EventQueue-0] ERROR stderr - at java.awt.AWTEventMulticaster.mouseReleased(AWTEventMulticaster.java:289)
2021.03.31 08:09:52.125 [AWT-EventQueue-0] ERROR stderr - at java.awt.Component.processMouseEvent(Component.java:6539)
2021.03.31 08:09:52.125 [AWT-EventQueue-0] ERROR stderr - at javax.swing.JComponent.processMouseEvent(JComponent.java:3324)
2021.03.31 08:09:52.126 [AWT-EventQueue-0] ERROR stderr - at java.awt.Component.processEvent(Component.java:6304)
2021.03.31 08:09:52.126 [AWT-EventQueue-0] ERROR stderr - at java.awt.Container.processEvent(Container.java:2239)
2021.03.31 08:09:52.126 [AWT-EventQueue-0] ERROR stderr - at java.awt.Component.dispatchEventImpl(Component.java:4889)
2021.03.31 08:09:52.126 [AWT-EventQueue-0] ERROR stderr - at java.awt.Container.dispatchEventImpl(Container.java:2297)
2021.03.31 08:09:52.126 [AWT-EventQueue-0] ERROR stderr - at java.awt.Component.dispatchEvent(Component.java:4711)
2021.03.31 08:09:52.127 [AWT-EventQueue-0] ERROR stderr - at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4904)
2021.03.31 08:09:52.128 [AWT-EventQueue-0] ERROR stderr - at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4535)
2021.03.31 08:09:52.128 [AWT-EventQueue-0] ERROR stderr - at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4476)
2021.03.31 08:09:52.128 [AWT-EventQueue-0] ERROR stderr - at java.awt.Container.dispatchEventImpl(Container.java:2283)
2021.03.31 08:09:52.128 [AWT-EventQueue-0] ERROR stderr - at java.awt.Window.dispatchEventImpl(Window.java:2746)
2021.03.31 08:09:52.128 [AWT-EventQueue-0] ERROR stderr - at java.awt.Component.dispatchEvent(Component.java:4711)
2021.03.31 08:09:52.128 [AWT-EventQueue-0] ERROR stderr - at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:760)
2021.03.31 08:09:52.128 [AWT-EventQueue-0] ERROR stderr - at java.awt.EventQueue.access$500(EventQueue.java:97)
2021.03.31 08:09:52.129 [AWT-EventQueue-0] ERROR stderr - at java.awt.EventQueue$3.run(EventQueue.java:709)
2021.03.31 08:09:52.129 [AWT-EventQueue-0] ERROR stderr - at java.awt.EventQueue$3.run(EventQueue.java:703)
2021.03.31 08:09:52.129 [AWT-EventQueue-0] ERROR stderr - at java.security.AccessController.doPrivileged(Native Method)
2021.03.31 08:09:52.129 [AWT-EventQueue-0] ERROR stderr - at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:74)
2021.03.31 08:09:52.129 [AWT-EventQueue-0] ERROR stderr - at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:84)
2021.03.31 08:09:52.129 [AWT-EventQueue-0] ERROR stderr - at java.awt.EventQueue$4.run(EventQueue.java:733)
2021.03.31 08:09:52.129 [AWT-EventQueue-0] ERROR stderr - at java.awt.EventQueue$4.run(EventQueue.java:731)
2021.03.31 08:09:52.130 [AWT-EventQueue-0] ERROR stderr - at java.security.AccessController.doPrivileged(Native Method)
2021.03.31 08:09:52.130 [AWT-EventQueue-0] ERROR stderr - at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:74)
2021.03.31 08:09:52.130 [AWT-EventQueue-0] ERROR stderr - at java.awt.EventQueue.dispatchEvent(EventQueue.java:730)
2021.03.31 08:09:52.130 [AWT-EventQueue-0] ERROR stderr - at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:205)
2021.03.31 08:09:52.130 [AWT-EventQueue-0] ERROR stderr - at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)
2021.03.31 08:09:52.130 [AWT-EventQueue-0] ERROR stderr - at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105)
2021.03.31 08:09:52.131 [AWT-EventQueue-0] ERROR stderr - at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
2021.03.31 08:09:52.131 [AWT-EventQueue-0] ERROR stderr - at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)
2021.03.31 08:09:52.131 [AWT-EventQueue-0] ERROR stderr - at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)
2021.03.31 08:09:54.792 [AWT-EventQueue-0] ERROR stderr - Exception in thread "AWT-EventQueue-0" java.lang.ClassCastException: studio.kdb.K$KCharacterVector cannot be cast to studio.kdb.ToDouble
2021.03.31 08:09:54.792 [AWT-EventQueue-0] ERROR stderr - at studio.ui.LineChart.createDataset(LineChart.java:190)
2021.03.31 08:09:54.793 [AWT-EventQueue-0] ERROR stderr - at studio.ui.LineChart.(LineChart.java:31)
2021.03.31 08:09:54.793 [AWT-EventQueue-0] ERROR stderr - at studio.ui.StudioPanel$21.actionPerformed(StudioPanel.java:1157)
2021.03.31 08:09:54.793 [AWT-EventQueue-0] ERROR stderr - at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2022)
2021.03.31 08:09:54.793 [AWT-EventQueue-0] ERROR stderr - at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2348)
2021.03.31 08:09:54.793 [AWT-EventQueue-0] ERROR stderr - at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402)
2021.03.31 08:09:54.793 [AWT-EventQueue-0] ERROR stderr - at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259)
2021.03.31 08:09:54.793 [AWT-EventQueue-0] ERROR stderr - at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:252)
2021.03.31 08:09:54.793 [AWT-EventQueue-0] ERROR stderr - at java.awt.AWTEventMulticaster.mouseReleased(AWTEventMulticaster.java:289)
2021.03.31 08:09:54.793 [AWT-EventQueue-0] ERROR stderr - at java.awt.Component.processMouseEvent(Component.java:6539)
2021.03.31 08:09:54.794 [AWT-EventQueue-0] ERROR stderr - at javax.swing.JComponent.processMouseEvent(JComponent.java:3324)
2021.03.31 08:09:54.794 [AWT-EventQueue-0] ERROR stderr - at java.awt.Component.processEvent(Component.java:6304)
2021.03.31 08:09:54.794 [AWT-EventQueue-0] ERROR stderr - at java.awt.Container.processEvent(Container.java:2239)
2021.03.31 08:09:54.794 [AWT-EventQueue-0] ERROR stderr - at java.awt.Component.dispatchEventImpl(Component.java:4889)
2021.03.31 08:09:54.794 [AWT-EventQueue-0] ERROR stderr - at java.awt.Container.dispatchEventImpl(Container.java:2297)
2021.03.31 08:09:54.794 [AWT-EventQueue-0] ERROR stderr - at java.awt.Component.dispatchEvent(Component.java:4711)
2021.03.31 08:09:54.794 [AWT-EventQueue-0] ERROR stderr - at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4904)
2021.03.31 08:09:54.794 [AWT-EventQueue-0] ERROR stderr - at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4535)
2021.03.31 08:09:54.794 [AWT-EventQueue-0] ERROR stderr - at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4476)
2021.03.31 08:09:54.794 [AWT-EventQueue-0] ERROR stderr - at java.awt.Container.dispatchEventImpl(Container.java:2283)
2021.03.31 08:09:54.794 [AWT-EventQueue-0] ERROR stderr - at java.awt.Window.dispatchEventImpl(Window.java:2746)
2021.03.31 08:09:54.797 [AWT-EventQueue-0] ERROR stderr - at java.awt.Component.dispatchEvent(Component.java:4711)
2021.03.31 08:09:54.797 [AWT-EventQueue-0] ERROR stderr - at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:760)
2021.03.31 08:09:54.797 [AWT-EventQueue-0] ERROR stderr - at java.awt.EventQueue.access$500(EventQueue.java:97)
2021.03.31 08:09:54.797 [AWT-EventQueue-0] ERROR stderr - at java.awt.EventQueue$3.run(EventQueue.java:709)
2021.03.31 08:09:54.797 [AWT-EventQueue-0] ERROR stderr - at java.awt.EventQueue$3.run(EventQueue.java:703)
2021.03.31 08:09:54.797 [AWT-EventQueue-0] ERROR stderr - at java.security.AccessController.doPrivileged(Native Method)
2021.03.31 08:09:54.797 [AWT-EventQueue-0] ERROR stderr - at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:74)
2021.03.31 08:09:54.797 [AWT-EventQueue-0] ERROR stderr - at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:84)
2021.03.31 08:09:54.797 [AWT-EventQueue-0] ERROR stderr - at java.awt.EventQueue$4.run(EventQueue.java:733)
2021.03.31 08:09:54.797 [AWT-EventQueue-0] ERROR stderr - at java.awt.EventQueue$4.run(EventQueue.java:731)
2021.03.31 08:09:54.798 [AWT-EventQueue-0] ERROR stderr - at java.security.AccessController.doPrivileged(Native Method)
2021.03.31 08:09:54.798 [AWT-EventQueue-0] ERROR stderr - at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:74)
2021.03.31 08:09:54.798 [AWT-EventQueue-0] ERROR stderr - at java.awt.EventQueue.dispatchEvent(EventQueue.java:730)
2021.03.31 08:09:54.798 [AWT-EventQueue-0] ERROR stderr - at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:205)
2021.03.31 08:09:54.798 [AWT-EventQueue-0] ERROR stderr - at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)
2021.03.31 08:09:54.798 [AWT-EventQueue-0] ERROR stderr - at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105)
2021.03.31 08:09:54.798 [AWT-EventQueue-0] ERROR stderr - at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
2021.03.31 08:09:54.798 [AWT-EventQueue-0] ERROR stderr - at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)
2021.03.31 08:09:54.798 [AWT-EventQueue-0] ERROR stderr - at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)

Add logging of executed queries

It is nice to keep all executed queries into a file. It makes sense to have date/time when the query was sent for execution; likely duration and connection details of server.

Huge result: dynamic rendering of pieces

It looks Swing controls takes much more memory than result itself (actually requires double check). If this is a case, it is possible situation when results fit into memory however the whole JTable is too huge. May be we can have rendering of visible piece of table

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.