diff options
Diffstat (limited to 'SQLiteStudio3/Tests/SelectResolverTest')
| -rw-r--r-- | SQLiteStudio3/Tests/SelectResolverTest/tst_selectresolvertest.cpp | 78 |
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"); } |
