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