aboutsummaryrefslogtreecommitdiffstats
path: root/SQLiteStudio3/Tests/ParserTest/tst_parsertest.cpp
diff options
context:
space:
mode:
authorLibravatarUnit 193 <unit193@unit193.net>2023-04-30 18:30:36 -0400
committerLibravatarUnit 193 <unit193@unit193.net>2023-04-30 18:30:36 -0400
commit3565aad630864ecdbe53fdaa501ea708555b3c7c (patch)
treec743e4ad0bad39ebdb2f514c7cc52d34a257ebbe /SQLiteStudio3/Tests/ParserTest/tst_parsertest.cpp
parent1fdc150116cad39aae5c5da407c3312b47a59e3a (diff)
New upstream version 3.4.4+dfsg.upstream/3.4.4+dfsg
Diffstat (limited to 'SQLiteStudio3/Tests/ParserTest/tst_parsertest.cpp')
-rw-r--r--SQLiteStudio3/Tests/ParserTest/tst_parsertest.cpp116
1 files changed, 115 insertions, 1 deletions
diff --git a/SQLiteStudio3/Tests/ParserTest/tst_parsertest.cpp b/SQLiteStudio3/Tests/ParserTest/tst_parsertest.cpp
index 6d537dc..eec1e39 100644
--- a/SQLiteStudio3/Tests/ParserTest/tst_parsertest.cpp
+++ b/SQLiteStudio3/Tests/ParserTest/tst_parsertest.cpp
@@ -2,7 +2,6 @@
#include "parser/ast/sqliteselect.h"
#include "parser/ast/sqlitecreatetable.h"
#include "parser/ast/sqliteinsert.h"
-#include "parser/ast/sqlitewith.h"
#include "parser/ast/sqliteupdate.h"
#include "parser/keywords.h"
#include "parser/lexer.h"
@@ -58,9 +57,17 @@ class ParserTest : public QObject
void testGetColumnTokensFromInsertUpsert();
void testGeneratedColumn();
void testWindowClause();
+ void testWindowKwAsColumn();
void testFilterClause();
+ void testFilterAsId();
void testUpdateFrom();
void testStringAsTableId();
+ void testJsonPtrOp();
+ void testUnfinishedSelectWithAliasForCompleter();
+ void testUnfinishedSelectWithAliasStrict();
+ void testBlobLiteral();
+ void testBigDec();
+ void testQuotedFunction();
};
ParserTest::ParserTest()
@@ -559,6 +566,15 @@ void ParserTest::testWindowClause()
verifyWindowClause(sql, select, ok);
}
+void ParserTest::testWindowKwAsColumn()
+{
+ QString sql = "SELECT window FROM test_table;";
+ parser3->setLemonDebug(true);
+ bool res = parser3->parse(sql);
+ QVERIFY(res);
+ QVERIFY(parser3->getErrors().isEmpty());
+}
+
void ParserTest::verifyWindowClause(const QString& sql, SqliteSelectPtr& select, bool& ok)
{
bool res = parser3->parse(sql);
@@ -646,6 +662,18 @@ void ParserTest::testFilterClause()
QVERIFY(resCol->expr->filterOver->over->window->mode == SqliteWindowDefinition::Window::Mode::ORDER_BY);
}
+void ParserTest::testFilterAsId()
+{
+ QString sql = "CREATE TABLE aa2 (sdfsdfdf, filter)";
+ bool res = parser3->parse(sql);
+ QVERIFY(res);
+ QVERIFY(parser3->getErrors().isEmpty());
+
+ SqliteCreateTablePtr create = parser3->getQueries().first().dynamicCast<SqliteCreateTable>();
+ QCOMPARE(create->columns.size(), 2);
+ QCOMPARE(create->columns[1]->name, "filter");
+}
+
void ParserTest::testUpdateFrom()
{
QString sql = "UPDATE inventory"
@@ -674,6 +702,92 @@ void ParserTest::testStringAsTableId()
QVERIFY(parser3->getErrors().isEmpty());
}
+void ParserTest::testJsonPtrOp()
+{
+ QString sql = "SELECT '[\"a11\", \"a22\", {\"x\":\"a33\"}]' -> 2,"
+ " '[\"a11\", \"a22\", {\"x\":\"a33\"}]' ->> 2";
+ bool res = parser3->parse(sql);
+ QVERIFY(res);
+ QVERIFY(parser3->getErrors().isEmpty());
+}
+
+void ParserTest::testUnfinishedSelectWithAliasForCompleter()
+{
+ QString sql = "select * from a1 x where x.";
+ bool res = parser3->parse(sql, true);
+ QVERIFY(res);
+ QVERIFY(parser3->getErrors().isEmpty());
+}
+
+void ParserTest::testUnfinishedSelectWithAliasStrict()
+{
+ QString sql = "select * from a1 x where x.";
+ bool res = parser3->parse(sql);
+ QVERIFY(!res);
+ QVERIFY(!parser3->getErrors().isEmpty());
+}
+
+void ParserTest::testBlobLiteral()
+{
+ QString sql = "insert into tab1 values (X'010e0F', 'string''with''quotes')";
+ bool res = parser3->parse(sql);
+ SqliteQueryPtr query = parser3->getQueries()[0];
+ QVERIFY(res);
+ QVERIFY(parser3->getErrors().isEmpty());
+
+ SqliteInsertPtr insert = parser3->getQueries().first().dynamicCast<SqliteInsert>();
+ SqliteSelect::Core* core = insert->select->coreSelects[0];
+ QCOMPARE(core->resultColumns.size(), 2);
+
+ QCOMPARE(core->resultColumns[0]->expr->mode, SqliteExpr::Mode::LITERAL_VALUE);
+ QCOMPARE(core->resultColumns[0]->expr->literalValue.type(), QVariant::ByteArray);
+ QCOMPARE(core->resultColumns[0]->expr->literalValue.toByteArray().toHex(), "010e0f");
+ QCOMPARE(core->resultColumns[1]->expr->mode, SqliteExpr::Mode::LITERAL_VALUE);
+ QCOMPARE(core->resultColumns[1]->expr->literalValue.type(), QVariant::String);
+ QCOMPARE(core->resultColumns[1]->expr->literalValue.toString(), "string''with''quotes");
+
+ core->resultColumns[0]->expr->rebuildTokens();
+ QCOMPARE(core->resultColumns[0]->expr->tokens[0]->value, "X'010e0f'");
+}
+
+void ParserTest::testBigDec()
+{
+ QString sql = "select 9999999999999999999 + 9999999999999999999, 9999999999999999999.1 + 9999999999999999999.2, 9999.1 + 9999.2;";
+ bool res = parser3->parse(sql);
+ SqliteQueryPtr query = parser3->getQueries()[0];
+ QVERIFY(res);
+ QVERIFY(parser3->getErrors().isEmpty());
+ SqliteSelectPtr select = parser3->getQueries().first().dynamicCast<SqliteSelect>();
+ SqliteSelect::Core* core = select->coreSelects[0];
+ QCOMPARE(core->resultColumns[0]->expr->expr1->literalValue.type(), QVariant::Double);
+ QCOMPARE(core->resultColumns[1]->expr->expr1->literalValue.type(), QVariant::Double);
+ QCOMPARE(core->resultColumns[2]->expr->expr1->literalValue.type(), QVariant::Double);
+}
+
+void ParserTest::testQuotedFunction()
+{
+ QString sql = "select \"abs\"(1)";
+ bool res = parser3->parse(sql);
+ QVERIFY(res);
+ QVERIFY(parser3->getQueries().size() > 0);
+
+ SqliteQueryPtr query = parser3->getQueries().first();
+ QVERIFY(query);
+
+ SqliteSelectPtr select = query.dynamicCast<SqliteSelect>();
+ QVERIFY(select);
+ QVERIFY(select->coreSelects.size() > 0);
+ QVERIFY(select->coreSelects.first()->resultColumns.size() > 0);
+
+ SqliteSelect::Core::ResultColumn* rc = select->coreSelects.first()->resultColumns.first();
+ SqliteExpr* e = rc->expr;
+ QVERIFY(e);
+
+ QVERIFY(e->mode == SqliteExpr::Mode::FUNCTION);
+ QCOMPARE(e->function, "abs");
+}
+
+
void ParserTest::initTestCase()
{
initKeywords();