aboutsummaryrefslogtreecommitdiffstats
path: root/SQLiteStudio3/coreSQLiteStudio/completionhelper.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'SQLiteStudio3/coreSQLiteStudio/completionhelper.cpp')
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/completionhelper.cpp26
1 files changed, 21 insertions, 5 deletions
diff --git a/SQLiteStudio3/coreSQLiteStudio/completionhelper.cpp b/SQLiteStudio3/coreSQLiteStudio/completionhelper.cpp
index 99eb334..528df73 100644
--- a/SQLiteStudio3/coreSQLiteStudio/completionhelper.cpp
+++ b/SQLiteStudio3/coreSQLiteStudio/completionhelper.cpp
@@ -1029,9 +1029,6 @@ void CompletionHelper::parseFullSql()
{
Dialect dialect = db->getDialect();
- Parser parser(dialect);
- parser.setLemonDebug(enableLemonDebug);
-
QString sql = fullSql;
// Selecting query at cursor position
@@ -1046,11 +1043,30 @@ void CompletionHelper::parseFullSql()
query += ";";
// Parsing query
- if (parser.parse(query, true) && !parser.getQueries().isEmpty())
+ Parser parser(dialect);
+ parser.setLemonDebug(enableLemonDebug);
+ if (tryToParse(&parser, query))
+ return;
+
+ // Second try - handling open parenthesis for expr (which could not be handled by the grammar, because of bug #2755)
+ parser.setLemonDebug(false); // avoid spamming with lemon debug
+ QString truncatedSql = sql.left(cursorPosition);
+ query = getQueryWithPosition(truncatedSql, cursorPosition, dialect);
+ query += ");";
+
+ if (tryToParse(&parser, query))
+ return;
+}
+
+bool CompletionHelper::tryToParse(Parser* parser, const QString& query)
+{
+ if (parser->parse(query, true) && !parser->getQueries().isEmpty())
{
- parsedQuery = parser.getQueries().first();
+ parsedQuery = parser->getQueries().first();
originalParsedQuery = SqliteQueryPtr(dynamic_cast<SqliteQuery*>(parsedQuery->clone()));
+ return true;
}
+ return false;
}
void CompletionHelper::sort(QList<ExpectedTokenPtr> &resultsSoFar)