Skip to content

Commit 03f2e3f

Browse files
author
GWA
committed
Bug fix: SQL result tab header marks:
Fixed performance problem when the SQL editor contained SQLs that were longer than 8000Bug fix: characters. For SQLs that are longer than 8000 characters marking of result tab headers is skipped.
1 parent fe07e7b commit 03f2e3f

File tree

2 files changed

+29
-8
lines changed

2 files changed

+29
-8
lines changed

sql12/core/doc/changes.txt

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -99,6 +99,10 @@ Table cell data popup now offers find, Xml/Json-reformatting and export function
9999

100100
Bug fixes:
101101

102+
SQL result tab header marks:
103+
Fixed performance problem when the SQL editor contained SQLs that were longer than 8000 characters.
104+
For SQLs that are longer than 8000 characters marking of result tab headers is skipped.
105+
102106
Improved the performance of SQL result tab header marking for large SQL editor content.
103107

104108
SQL result tab header marks:

sql12/core/src/net/sourceforge/squirrel_sql/client/session/mainpanel/resulttabheader/ResultTabMatchingCurrentSqlHandler.java

Lines changed: 25 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,12 @@
11
package net.sourceforge.squirrel_sql.client.session.mainpanel.resulttabheader;
22

3+
import java.util.ArrayList;
4+
import java.util.Collections;
5+
import java.util.Comparator;
6+
import java.util.List;
7+
import javax.swing.JTabbedPane;
8+
import javax.swing.Timer;
9+
310
import net.sourceforge.squirrel_sql.client.Main;
411
import net.sourceforge.squirrel_sql.client.session.ISQLEntryPanel;
512
import net.sourceforge.squirrel_sql.client.session.editorpaint.TextAreaPaintListener;
@@ -8,17 +15,14 @@
815
import net.sourceforge.squirrel_sql.client.session.sqlbounds.BoundsOfSqlHandler;
916
import net.sourceforge.squirrel_sql.fw.sql.querytokenizer.IQueryTokenizer;
1017
import net.sourceforge.squirrel_sql.fw.sql.querytokenizer.QueryTokenizePurpose;
18+
import net.sourceforge.squirrel_sql.fw.util.log.ILogger;
19+
import net.sourceforge.squirrel_sql.fw.util.log.LoggerController;
1120
import org.apache.commons.lang3.StringUtils;
1221

13-
import javax.swing.JTabbedPane;
14-
import javax.swing.Timer;
15-
import java.util.ArrayList;
16-
import java.util.Collections;
17-
import java.util.Comparator;
18-
import java.util.List;
19-
2022
public class ResultTabMatchingCurrentSqlHandler
2123
{
24+
private static final ILogger s_log = LoggerController.createLogger(ResultTabMatchingCurrentSqlHandler.class);
25+
2226
private boolean _resultTabHeaderMarkingActive;
2327

2428
private BoundsOfSqlHandler _boundsOfSqlHandler;
@@ -29,6 +33,7 @@ public class ResultTabMatchingCurrentSqlHandler
2933
private Timer _paintTimer;
3034

3135
private NormalizedSqlCompareCache _normalizedSqlCompareCache = new NormalizedSqlCompareCache();
36+
private long _lastEditorSqlToLongWarningMillis = 0;
3237

3338
public ResultTabMatchingCurrentSqlHandler(ISQLEntryPanel entryPanel, SQLResultExecutorPanel sqlExecPanel)
3439
{
@@ -81,7 +86,19 @@ private void onTextAreaPaint(boolean activateLastMarked)
8186
{
8287
boolean tabMatchesSqlToBeExecuted;
8388

84-
if(Main.getApplication().getSquirrelPreferences().isResultTabHeaderCompareSqlsNormalized())
89+
if( null != sqlToBeExecuted && 8000 < sqlToBeExecuted.length() )
90+
{
91+
// Editor-SQL to long. Will skip search for matching result tab
92+
long currentTimeMillis = System.currentTimeMillis();
93+
if( currentTimeMillis - _lastEditorSqlToLongWarningMillis > 5000L)
94+
{
95+
_lastEditorSqlToLongWarningMillis = currentTimeMillis;
96+
s_log.warn("Editor SQL too long (" + sqlToBeExecuted.length() + " chars) to perform matching result tab search without severe editor performance impact.");
97+
}
98+
99+
tabMatchesSqlToBeExecuted = false;
100+
}
101+
else if(Main.getApplication().getSquirrelPreferences().isResultTabHeaderCompareSqlsNormalized())
85102
{
86103

87104
IQueryTokenizer qt = _entryPanel.getSession().getNewQueryTokenizer();

0 commit comments

Comments
 (0)