aboutsummaryrefslogtreecommitdiffstats
path: root/SQLiteStudio3/Tests/SelectResolverTest/tst_selectresolvertest.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'SQLiteStudio3/Tests/SelectResolverTest/tst_selectresolvertest.cpp')
-rw-r--r--SQLiteStudio3/Tests/SelectResolverTest/tst_selectresolvertest.cpp78
1 files changed, 74 insertions, 4 deletions
diff --git a/SQLiteStudio3/Tests/SelectResolverTest/tst_selectresolvertest.cpp b/SQLiteStudio3/Tests/SelectResolverTest/tst_selectresolvertest.cpp
index 78f0b53..bcb142e 100644
--- a/SQLiteStudio3/Tests/SelectResolverTest/tst_selectresolvertest.cpp
+++ b/SQLiteStudio3/Tests/SelectResolverTest/tst_selectresolvertest.cpp
@@ -29,10 +29,12 @@ class SelectResolverTest : public QObject
void testWithCommonTableExpression();
void testWithCte2();
void testWithCte3();
+ void testWithCte4();
void testStarWithJoinAndError();
void testTableFunction();
void testSubselect();
void testSubselectWithAlias();
+ void testIssue4607();
};
SelectResolverTest::SelectResolverTest()
@@ -214,7 +216,7 @@ void SelectResolverTest::testWithCte2()
QList<SelectResolver::Column> coreColumns = columns.first();
QVERIFY(coreColumns.size() == 2);
- QCOMPARE(coreColumns[0].type, SelectResolver::Column::COLUMN);
+ QCOMPARE(coreColumns[0].type, SelectResolver::Column::OTHER);
QCOMPARE(coreColumns[0].flags, SelectResolver::FROM_CTE_SELECT);
QCOMPARE(coreColumns[0].database, "main");
QVERIFY(coreColumns[0].table.isNull());
@@ -222,7 +224,7 @@ void SelectResolverTest::testWithCte2()
QVERIFY(coreColumns[0].alias.isNull());
QCOMPARE(coreColumns[0].displayName, "c1");
- QCOMPARE(coreColumns[1].type, SelectResolver::Column::COLUMN);
+ QCOMPARE(coreColumns[1].type, SelectResolver::Column::OTHER);
QCOMPARE(coreColumns[1].flags, SelectResolver::FROM_CTE_SELECT);
QCOMPARE(coreColumns[1].database, "main");
QVERIFY(coreColumns[1].table.isNull());
@@ -242,10 +244,11 @@ void SelectResolverTest::testWithCte3()
QList<SelectResolver::Column> coreColumns = columns.first();
QCOMPARE(coreColumns.size(), 3);
- QCOMPARE(coreColumns[0].type, SelectResolver::Column::COLUMN);
+ QCOMPARE(coreColumns[0].type, SelectResolver::Column::OTHER);
QCOMPARE(coreColumns[0].flags, SelectResolver::FROM_CTE_SELECT);
QCOMPARE(coreColumns[0].database, "main");
QVERIFY(coreColumns[0].table.isNull());
+ QCOMPARE(coreColumns[0].tableAlias, "t");
QCOMPARE(coreColumns[0].column, "x");
QVERIFY(coreColumns[0].alias.isNull());
QCOMPARE(coreColumns[0].displayName, "x");
@@ -254,19 +257,43 @@ void SelectResolverTest::testWithCte3()
QCOMPARE(coreColumns[1].flags, SelectResolver::FROM_CTE_SELECT);
QCOMPARE(coreColumns[1].database, "main");
QCOMPARE(coreColumns[1].table, "test2");
+ QCOMPARE(coreColumns[1].tableAlias, "t");
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].type, SelectResolver::Column::OTHER);
QCOMPARE(coreColumns[2].flags, SelectResolver::FROM_CTE_SELECT);
QCOMPARE(coreColumns[2].database, "main");
QVERIFY(coreColumns[2].table.isNull());
+ QCOMPARE(coreColumns[2].tableAlias, "t");
QCOMPARE(coreColumns[2].column, "'z'");
QVERIFY(coreColumns[2].alias.isNull());
QCOMPARE(coreColumns[2].displayName, "'z'");
}
+void SelectResolverTest::testWithCte4()
+{
+ QString sql = "WITH testcte AS (SELECT 3)"
+ "SELECT * FROM TESTCTE";
+
+ 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();
+ QVERIFY(coreColumns.size() == 1);
+
+ QCOMPARE(coreColumns[0].type, SelectResolver::Column::OTHER);
+ QCOMPARE(coreColumns[0].flags, SelectResolver::FROM_CTE_SELECT);
+ QCOMPARE(coreColumns[0].database, "main");
+ QVERIFY(coreColumns[0].table.isNull());
+ QCOMPARE(coreColumns[0].column, "3");
+ QVERIFY(coreColumns[0].alias.isNull());
+ QCOMPARE(coreColumns[0].displayName, "3");
+}
+
void SelectResolverTest::testStarWithJoinAndError()
{
QString sql = "SELECT t1.*, t2.* FROM test t1 JOIN test2 USING (col1)";
@@ -335,6 +362,48 @@ void SelectResolverTest::testSubselectWithAlias()
QVERIFY(coreColumns[2].oldTableAliases.first() == "secm");
}
+void SelectResolverTest::testIssue4607()
+{
+ QString sql = "SELECT Trip.TripID AS [Trip Number],"
+ " P1.PlaceAlternates AS [Origin Alternates],"
+ " P2.PlaceAlternates AS [Destination Alternates],"
+ " Trip.ROWID AS ResCol_0"
+ " FROM Trip"
+ " INNER JOIN"
+ " ("
+ " SELECT 1 AS PlaceID,"
+ " 2 AS PlaceAlternates"
+ " )"
+ " P1 ON Trip.TripID = P1.PlaceID"
+ " INNER JOIN"
+ " ("
+ " SELECT 1 AS PlaceID,"
+ " 2 AS PlaceAlternates"
+ " GROUP BY PlaceID"
+ " )"
+ " P2 ON Trip.TripID = P2.PlaceID";
+
+ 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();
+ QVERIFY(coreColumns.size() == 4);
+ QVERIFY(coreColumns[0].table == "Trip");
+ QVERIFY(coreColumns[0].tableAlias.isNull());
+ QVERIFY(coreColumns[0].flags == 0);
+ QVERIFY(coreColumns[1].table.isNull());
+ QVERIFY(coreColumns[1].tableAlias == "P1");
+ QVERIFY(coreColumns[1].flags == 0);
+ QVERIFY(coreColumns[2].table.isNull());
+ QVERIFY(coreColumns[2].tableAlias == "P2");
+ QVERIFY(coreColumns[2].flags & SelectResolver::FROM_GROUPED_SELECT);
+ QVERIFY(coreColumns[3].table == "Trip");
+ QVERIFY(coreColumns[3].tableAlias.isNull());
+ QVERIFY(coreColumns[3].flags == 0);
+}
+
void SelectResolverTest::initTestCase()
{
initKeywords();
@@ -346,6 +415,7 @@ void SelectResolverTest::initTestCase()
db->exec("CREATE TABLE test (col1, col2, col3);");
db->exec("CREATE TABLE org (name TEXT PRIMARY KEY, boss TEXT REFERENCES org, height INT)");
db->exec("CREATE TABLE test2 (col1);");
+ db->exec("CREATE TABLE Trip (TripID INTEGER PRIMARY KEY ASC);");
//SqlQueryPtr results = db->exec("SELECT name FROM sqlite_master");
}