aboutsummaryrefslogtreecommitdiffstats
path: root/SQLiteStudio3/Tests/SelectResolverTest/tst_selectresolvertest.cpp
diff options
context:
space:
mode:
authorLibravatarUnit 193 <unit193@unit193.net>2021-12-17 07:06:30 -0500
committerLibravatarUnit 193 <unit193@unit193.net>2021-12-17 07:06:30 -0500
commit1fdc150116cad39aae5c5da407c3312b47a59e3a (patch)
tree123c79a4d7ad2d45781ba03ce939f7539fb428d8 /SQLiteStudio3/Tests/SelectResolverTest/tst_selectresolvertest.cpp
parentfeda8a7db8d1d7c5439aa8f8feef7cc0dd2b59a0 (diff)
New upstream version 3.3.3+dfsg1.upstream/3.3.3+dfsg1
Diffstat (limited to 'SQLiteStudio3/Tests/SelectResolverTest/tst_selectresolvertest.cpp')
-rw-r--r--SQLiteStudio3/Tests/SelectResolverTest/tst_selectresolvertest.cpp77
1 files changed, 63 insertions, 14 deletions
diff --git a/SQLiteStudio3/Tests/SelectResolverTest/tst_selectresolvertest.cpp b/SQLiteStudio3/Tests/SelectResolverTest/tst_selectresolvertest.cpp
index 13a30a9..78f0b53 100644
--- a/SQLiteStudio3/Tests/SelectResolverTest/tst_selectresolvertest.cpp
+++ b/SQLiteStudio3/Tests/SelectResolverTest/tst_selectresolvertest.cpp
@@ -28,9 +28,10 @@ class SelectResolverTest : public QObject
void testColumnHash();
void testWithCommonTableExpression();
void testWithCte2();
+ void testWithCte3();
void testStarWithJoinAndError();
void testTableFunction();
- void test1();
+ void testSubselect();
void testSubselectWithAlias();
};
@@ -52,7 +53,7 @@ void SelectResolverTest::testTableHash()
SelectResolver::Table t2;
t2.database = "d2";
t2.table = "t1";
- t2.tableAlias = QString::null;
+ t2.tableAlias = QString();
tables << t2;
// different database
@@ -188,14 +189,14 @@ void SelectResolverTest::testWithCommonTableExpression()
" WHERE org.name IN works_for_alice";
SelectResolver resolver(db, sql);
- Parser parser(db->getDialect());
+ Parser parser;
QVERIFY(parser.parse(sql));
QList<QList<SelectResolver::Column>> columns = resolver.resolve(parser.getQueries().first().dynamicCast<SqliteSelect>().data());
QList<SelectResolver::Column> coreColumns = columns.first();
QVERIFY(coreColumns.size() == 1);
QVERIFY(coreColumns[0].type == SelectResolver::Column::OTHER);
- QVERIFY(coreColumns[0].flags & SelectResolver::Flag::FROM_CTE_SELECT);
+ QVERIFY(coreColumns[0].flags ^ SelectResolver::Flag::FROM_CTE_SELECT);
}
void SelectResolverTest::testWithCte2()
@@ -206,23 +207,71 @@ void SelectResolverTest::testWithCte2()
"select * from m";
SelectResolver resolver(db, sql);
- Parser parser(db->getDialect());
+ Parser parser;
QVERIFY(parser.parse(sql));
QList<QList<SelectResolver::Column>> columns = resolver.resolve(parser.getQueries().first().dynamicCast<SqliteSelect>().data());
QList<SelectResolver::Column> coreColumns = columns.first();
QVERIFY(coreColumns.size() == 2);
- QVERIFY(coreColumns[0].type == SelectResolver::Column::COLUMN);
- QVERIFY(coreColumns[0].flags & SelectResolver::Flag::FROM_CTE_SELECT);
- QVERIFY(coreColumns[1].type == SelectResolver::Column::COLUMN);
- QVERIFY(coreColumns[1].flags & SelectResolver::Flag::FROM_CTE_SELECT);
+
+ QCOMPARE(coreColumns[0].type, SelectResolver::Column::COLUMN);
+ QCOMPARE(coreColumns[0].flags, SelectResolver::FROM_CTE_SELECT);
+ QCOMPARE(coreColumns[0].database, "main");
+ QVERIFY(coreColumns[0].table.isNull());
+ QCOMPARE(coreColumns[0].column, "c1");
+ QVERIFY(coreColumns[0].alias.isNull());
+ QCOMPARE(coreColumns[0].displayName, "c1");
+
+ QCOMPARE(coreColumns[1].type, SelectResolver::Column::COLUMN);
+ QCOMPARE(coreColumns[1].flags, SelectResolver::FROM_CTE_SELECT);
+ QCOMPARE(coreColumns[1].database, "main");
+ QVERIFY(coreColumns[1].table.isNull());
+ QCOMPARE(coreColumns[1].column, "c2");
+ QVERIFY(coreColumns[1].alias.isNull());
+ QCOMPARE(coreColumns[1].displayName, "c2");
+}
+
+void SelectResolverTest::testWithCte3()
+{
+ QString sql = "WITH t AS (SELECT 1 AS x, col1 as y, 'z' FROM test2) SELECT * FROM t;";
+ SelectResolver resolver(db, sql);
+ Parser parser;
+ QVERIFY(parser.parse(sql));
+
+ QList<QList<SelectResolver::Column>> columns = resolver.resolve(parser.getQueries().first().dynamicCast<SqliteSelect>().data());
+ QList<SelectResolver::Column> coreColumns = columns.first();
+ QCOMPARE(coreColumns.size(), 3);
+
+ QCOMPARE(coreColumns[0].type, SelectResolver::Column::COLUMN);
+ QCOMPARE(coreColumns[0].flags, SelectResolver::FROM_CTE_SELECT);
+ QCOMPARE(coreColumns[0].database, "main");
+ QVERIFY(coreColumns[0].table.isNull());
+ QCOMPARE(coreColumns[0].column, "x");
+ QVERIFY(coreColumns[0].alias.isNull());
+ QCOMPARE(coreColumns[0].displayName, "x");
+
+ QCOMPARE(coreColumns[1].type, SelectResolver::Column::COLUMN);
+ QCOMPARE(coreColumns[1].flags, SelectResolver::FROM_CTE_SELECT);
+ QCOMPARE(coreColumns[1].database, "main");
+ QCOMPARE(coreColumns[1].table, "test2");
+ QCOMPARE(coreColumns[1].column, "y");
+ QVERIFY(coreColumns[1].alias.isNull());
+ QCOMPARE(coreColumns[1].displayName, "y");
+
+ QCOMPARE(coreColumns[2].type, SelectResolver::Column::COLUMN);
+ QCOMPARE(coreColumns[2].flags, SelectResolver::FROM_CTE_SELECT);
+ QCOMPARE(coreColumns[2].database, "main");
+ QVERIFY(coreColumns[2].table.isNull());
+ QCOMPARE(coreColumns[2].column, "'z'");
+ QVERIFY(coreColumns[2].alias.isNull());
+ QCOMPARE(coreColumns[2].displayName, "'z'");
}
void SelectResolverTest::testStarWithJoinAndError()
{
QString sql = "SELECT t1.*, t2.* FROM test t1 JOIN test2 USING (col1)";
SelectResolver resolver(db, sql);
- Parser parser(db->getDialect());
+ Parser parser;
QVERIFY(parser.parse(sql));
QList<QList<SelectResolver::Column> > columns = resolver.resolve(parser.getQueries().first().dynamicCast<SqliteSelect>().data());
@@ -234,7 +283,7 @@ void SelectResolverTest::testTableFunction()
{
QString sql = "select * from json_tree(json_array(1, 2, 3))";
SelectResolver resolver(db, sql);
- Parser parser(db->getDialect());
+ Parser parser;
QVERIFY(parser.parse(sql));
SqlQueryPtr versionResult = db->exec("select sqlite_version()");
@@ -251,11 +300,11 @@ void SelectResolverTest::testTableFunction()
QVERIFY(columns.first().first().type == SelectResolver::Column::OTHER);
}
-void SelectResolverTest::test1()
+void SelectResolverTest::testSubselect()
{
QString sql = "SELECT * FROM (SELECT count(col1), col2 FROM test)";
SelectResolver resolver(db, sql);
- Parser parser(db->getDialect());
+ Parser parser;
QVERIFY(parser.parse(sql));
QList<QList<SelectResolver::Column> > columns = resolver.resolve(parser.getQueries().first().dynamicCast<SqliteSelect>().data());
@@ -270,7 +319,7 @@ void SelectResolverTest::testSubselectWithAlias()
{
QString sql = "SELECT * FROM (SELECT m.col1, m.col2, secm.col3 FROM test AS m LEFT OUTER JOIN test AS secm ON secm.col1 = m.col2) alias3;";
SelectResolver resolver(db, sql);
- Parser parser(db->getDialect());
+ Parser parser;
QVERIFY(parser.parse(sql));
QList<QList<SelectResolver::Column> > columns = resolver.resolve(parser.getQueries().first().dynamicCast<SqliteSelect>().data());