Skip to content

Commit

Permalink
fix relation filter bug and isolateTdsSelect
Browse files Browse the repository at this point in the history
  • Loading branch information
gs-rpant1729 committed Feb 3, 2025
1 parent e48edf2 commit 61a244f
Show file tree
Hide file tree
Showing 25 changed files with 97 additions and 88 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -35,11 +35,7 @@ public class Test_Relational_DuckDB_RelationFunctions_PCT extends PCTReportConfi
private static final ReportScope reportScope = RelationCodeRepositoryProvider.relationFunctions;
private static final Adapter adapter = CoreExternalTestConnectionCodeRepositoryProvider.duckDBAdapter;
private static final String platform = "compiled";
private static final MutableList<ExclusionSpecification> expectedFailures = Lists.mutable.with(
// BUG: unsupported compositions
one("meta::pure::functions::relation::tests::composition::test_Distinct_GroupBy_Filter_Function_1__Boolean_1_", "java.sql.SQLException: java.sql.SQLException: Binder Error: column newCol must appear in the GROUP BY clause or be used in an aggregate function"),
one("meta::pure::functions::relation::tests::composition::test_GroupBy_Filter_Function_1__Boolean_1_", "java.sql.SQLException: java.sql.SQLException: Binder Error: column \"newCol\" must appear in the GROUP BY clause or must be part of an aggregate function.\nEither add it to the GROUP BY list, or use \"ANY_VALUE(newCol)\" if the exact value of \"newCol\" is not important.\nLINE 2: select \"str\" as \"str\", \"newCol\" as \"newCol\" from (select \"tb")
);
private static final MutableList<ExclusionSpecification> expectedFailures = Lists.mutable.with();

public static Test suite()
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ function <<test.Test>> meta::relational::tests::sqlQueryToString::duckDB::testCT
let result = toSQLString($func, simpleRelationalMapping, DatabaseType.DuckDB, []->cast(@String), $pp, ^Format(newLine='', indent=''), relationalExtensions(), noDebug());
assertEquals(
'WITH subquery_cte_1_1 AS (select "root".ID as "TradeID", "root".quantity as "Quantity" from tradeTable as "root" limit 10) \n' +
'select "TradeID" as "TradeID", "Quantity" as "Quantity" from subquery_cte_1_1 as "subselect" where "TradeID" = 100',
'select "subselect"."TradeID" as "TradeID", "subselect"."Quantity" as "Quantity" from subquery_cte_1_1 as "subselect" where "subselect"."TradeID" = 100',
$result
);
}
Original file line number Diff line number Diff line change
Expand Up @@ -44,5 +44,5 @@ function <<test.Test>> meta::relational::memsql::tests::query::take::testDrop_Me
function <<test.Test>> meta::relational::memsql::tests::query::take::testDropLimit_MemSQL():Boolean[1]
{
let s = toSQLString(|Person.all()->project([col(p|$p.firstName, 'firstName'), col(p|$p.lastName, 'lastName')])->drop(10)->limit(100);, meta::relational::tests::simpleRelationalMapping, meta::relational::runtime::DatabaseType.MemSQL, meta::relational::extension::relationalExtensions());
assertEquals('select `firstName` as `firstName`, `lastName` as `lastName` from (select `limitoffset_via_window_subquery`.`firstName` as `firstName`, `limitoffset_via_window_subquery`.`lastName` as `lastName` from (select `root`.FIRSTNAME as `firstName`, `root`.LASTNAME as `lastName`, row_number() OVER (Order By `root`.FIRSTNAME) as `row_number` from personTable as `root`) as `limitoffset_via_window_subquery` where `limitoffset_via_window_subquery`.row_number > 10) as `subselect` limit 100', $s);
assertEquals('select `subselect`.`firstName` as `firstName`, `subselect`.`lastName` as `lastName` from (select `limitoffset_via_window_subquery`.`firstName` as `firstName`, `limitoffset_via_window_subquery`.`lastName` as `lastName` from (select `root`.FIRSTNAME as `firstName`, `root`.LASTNAME as `lastName`, row_number() OVER (Order By `root`.FIRSTNAME) as `row_number` from personTable as `root`) as `limitoffset_via_window_subquery` where `limitoffset_via_window_subquery`.row_number > 10) as `subselect` limit 100', $s);
}
Original file line number Diff line number Diff line change
Expand Up @@ -27,5 +27,5 @@ function <<test.Test>> meta::relational::memsql::tests::tds::tdsWindow::testSing
->sort('rank')
};
let result = toSQLString($func, simpleRelationalMapping, DatabaseType.MemSQL, meta::relational::extension::relationalExtensions(),debug());
assertEquals('select `firstName` as `firstName`, `lastName` as `lastName`, `age` as `age`, `rank` as `rank` from (select `root`.FIRSTNAME as `firstName`, `root`.LASTNAME as `lastName`, `root`.AGE as `age`, dense_rank() OVER (Partition By `root`.FIRSTNAME Order By `root`.LASTNAME DESC) as `rank` from personTable as `root`) as `subselect` order by `rank`', $result);
assertEquals('select `subselect`.`firstName` as `firstName`, `subselect`.`lastName` as `lastName`, `subselect`.`age` as `age`, `subselect`.`rank` as `rank` from (select `root`.FIRSTNAME as `firstName`, `root`.LASTNAME as `lastName`, `root`.AGE as `age`, dense_rank() OVER (Partition By `root`.FIRSTNAME Order By `root`.LASTNAME DESC) as `rank` from personTable as `root`) as `subselect` order by `rank`', $result);
}
Original file line number Diff line number Diff line change
Expand Up @@ -44,10 +44,6 @@ public class Test_Relational_Postgres_RelationFunctions_PCT extends PCTReportCon
one("meta::pure::functions::relation::tests::composition::test_Extend_Filter_Select_Pivot_GroupBy_Extend_Sort_Function_1__Boolean_1_", "\"pivot is not supported\""),
one("meta::pure::functions::relation::tests::composition::test_Extend_Filter_Select_GroupBy_Pivot_Extend_Sort_Limit_Function_1__Boolean_1_", "\"pivot is not supported\""),

// BUG: unsupported compositions
one("meta::pure::functions::relation::tests::composition::test_Distinct_GroupBy_Filter_Function_1__Boolean_1_", "org.postgresql.util.PSQLException: ERROR: column \"subselect.newCol\" must appear in the GROUP BY clause or be used in an aggregate function"),
one("meta::pure::functions::relation::tests::composition::test_GroupBy_Filter_Function_1__Boolean_1_", "org.postgresql.util.PSQLException: ERROR: column \"subselect.newCol\" must appear in the GROUP BY clause or be used in an aggregate function"),

// BUG: Column name with special characters is not properly escaped
one("meta::pure::functions::relation::tests::select::testSingleSelectWithQuotedColumn_Function_1__Boolean_1_", "Error while executing: Create Table leSchema."),

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -45,5 +45,5 @@ function <<test.Test>> meta::relational::tests::query::snowflake::testPaginatedB
let f3 = {|Person.all()->project([col(p|$p.firstName, 'firstName'), col(p|$p.lastName, 'lastName')])->slice(0,50)->restrict('firstName')->sort(asc('firstName'))->paginated(2, 3);};

let snowflake3 = toSQLString($f3, meta::relational::tests::simpleRelationalMapping, meta::relational::runtime::DatabaseType.Snowflake, meta::relational::extension::relationalExtensions());
assertEquals('select "firstName" as "firstName" from (select "root".FIRSTNAME as "firstName", "root".LASTNAME as "lastName" from personTable as "root" limit 50) as "subselect" order by "firstName" limit ${3?number} offset ${((2?number - 1?number)?number * 3?number)}', $snowflake3);
assertEquals('select "subselect"."firstName" as "firstName" from (select "root".FIRSTNAME as "firstName", "root".LASTNAME as "lastName" from personTable as "root" limit 50) as "subselect" order by "firstName" limit ${3?number} offset ${((2?number - 1?number)?number * 3?number)}', $snowflake3);
}
Original file line number Diff line number Diff line change
Expand Up @@ -38,10 +38,10 @@ function <<test.Test>> meta::relational::tests::query::snowflake::testSliceByVen
assertEquals('select "root".FIRSTNAME as "firstName" from personTable as "root" order by "firstName" limit 2 offset 3', $snowflake2);

let snowflake3 = toSQLString($f3, meta::relational::tests::simpleRelationalMapping, meta::relational::runtime::DatabaseType.Snowflake, meta::relational::extension::relationalExtensions());
assertEquals('select "firstName" as "firstName" from (select "root".FIRSTNAME as "firstName", "root".LASTNAME as "lastName" from personTable as "root" limit 50) as "subselect" order by "firstName" limit 2 offset 3', $snowflake3);
assertEquals('select "subselect"."firstName" as "firstName" from (select "root".FIRSTNAME as "firstName", "root".LASTNAME as "lastName" from personTable as "root" limit 50) as "subselect" order by "firstName" limit 2 offset 3', $snowflake3);

let snowflake4 = toSQLString($f4, meta::relational::tests::simpleRelationalMapping, meta::relational::runtime::DatabaseType.Snowflake, meta::relational::extension::relationalExtensions());
assertEquals('select "firstName" as "firstName" from (select "root".FIRSTNAME as "firstName", "root".LASTNAME as "lastName" from personTable as "root" order by "firstName" limit 50) as "subselect"', $snowflake4);
assertEquals('select "subselect"."firstName" as "firstName" from (select "root".FIRSTNAME as "firstName", "root".LASTNAME as "lastName" from personTable as "root" order by "firstName" limit 50) as "subselect"', $snowflake4);
}

function <<test.Test>> meta::relational::tests::query::snowflake::testLimitByVendor():Boolean[1]
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,5 +30,5 @@ function <<test.Test>> meta::relational::tests::tds::snowflake::testOLAPGroupByS
->filter(r|$r.getInteger('rowNumber') > 10)
};
let result = toSQLString($func, simpleRelationalMappingIncWithStoreFilter, DatabaseType.Snowflake, meta::relational::extension::relationalExtensions());
assertEquals('select "firstName" as "firstName", "lastName" as "lastName", "ageSum" as "ageSum", "rowNumber" as "rowNumber" from (select "root".FIRSTNAME as "firstName", "root".LASTNAME as "lastName", sum("root".AGE) as "ageSum", row_number() OVER (Order By "root".FIRSTNAME ASC) as "rowNumber" from (select "root".ID as ID, "root".FIRSTNAME as FIRSTNAME, "root".LASTNAME as LASTNAME, "root".AGE as AGE from personTable as "root" where "root".AGE > 110) as "root" where "root".AGE < 200 and startswith("root".LASTNAME,\'David\') group by "firstName","lastName") as "subselect" where "rowNumber" > 10', $result);
assertEquals('select "subselect"."firstName" as "firstName", "subselect"."lastName" as "lastName", "subselect"."ageSum" as "ageSum", "subselect"."rowNumber" as "rowNumber" from (select "root".FIRSTNAME as "firstName", "root".LASTNAME as "lastName", sum("root".AGE) as "ageSum", row_number() OVER (Order By "root".FIRSTNAME ASC) as "rowNumber" from (select "root".ID as ID, "root".FIRSTNAME as FIRSTNAME, "root".LASTNAME as LASTNAME, "root".AGE as AGE from personTable as "root" where "root".AGE > 110) as "root" where "root".AGE < 200 and startswith("root".LASTNAME,\'David\') group by "firstName","lastName") as "subselect" where "subselect"."rowNumber" > 10', $result);
}
Original file line number Diff line number Diff line change
Expand Up @@ -197,7 +197,7 @@ function <<test.Test>> meta::relational::tests::sqlToString::snowflake::testToSQ
let result = toSQLStringPretty(|Product.all()->project([#/Product/name!prodName#])->sort(asc('prodName'))->drop(2)->limit(5),
simpleRelationalMapping, $runtime, meta::relational::extension::relationalExtensions());

assertEquals('select "prodName" as "prodName" from ( select "root"."NAME" as "prodName" from "productSchema"."productTable" as "root" order by "prodName" limit \'\' offset 2) as "subselect" limit 5', $result->replace('\n', ''));
assertEquals('select "subselect"."prodName" as "prodName" from ( select "root"."NAME" as "prodName" from "productSchema"."productTable" as "root" order by "prodName" limit \'\' offset 2) as "subselect" limit 5', $result->replace('\n', ''));
}

function <<test.Test>> meta::relational::tests::sqlToString::snowflake::testJoinStringsSnowflake():Boolean[1]
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ function <<test.Test>> meta::relational::tests::query::function::sybaseIQ::testP
let f3 = {|Person.all()->project([col(p|$p.firstName, 'firstName'), col(p|$p.lastName, 'lastName')])->slice(0,50)->restrict('firstName')->sort(asc('firstName'))->paginated(2, 3);};

let s5 = toSQLString($f3, meta::relational::tests::simpleRelationalMapping, meta::relational::runtime::DatabaseType.SybaseIQ, meta::relational::extension::relationalExtensions());
assertEquals('select "firstName" as "firstName" from (select "limitoffset_via_window_subquery"."firstName" as "firstName", "limitoffset_via_window_subquery"."lastName" as "lastName" from '
assertEquals('select "subselect"."firstName" as "firstName" from (select "limitoffset_via_window_subquery"."firstName" as "firstName", "limitoffset_via_window_subquery"."lastName" as "lastName" from '
+ '(select "root".FIRSTNAME as "firstName", "root".LASTNAME as "lastName", row_number() OVER (Order By "root".FIRSTNAME) as "row_number" from personTable as "root") '
+ 'as "limitoffset_via_window_subquery" where "limitoffset_via_window_subquery".row_number <= 50) as "subselect" order by "firstName" limit ${((2?number - 1?number)?number * 3?number)},${3?number}', $s5);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -31,15 +31,15 @@ function <<test.Test>> meta::relational::tests::query::function::sybaseIQ::testS
let f3 = {|Person.all()->project([col(p|$p.firstName, 'firstName'), col(p|$p.lastName, 'lastName')])->slice(0,50)->restrict('firstName')->sort(asc('firstName'))->slice(3, 5);};

let s5 = toSQLString($f3, meta::relational::tests::simpleRelationalMapping, meta::relational::runtime::DatabaseType.SybaseIQ, meta::relational::extension::relationalExtensions());
assertEquals('select "firstName" as "firstName" from (select "limitoffset_via_window_subquery"."firstName" as "firstName", "limitoffset_via_window_subquery"."lastName" as "lastName" from '
assertEquals('select "subselect"."firstName" as "firstName" from (select "limitoffset_via_window_subquery"."firstName" as "firstName", "limitoffset_via_window_subquery"."lastName" as "lastName" from '
+ '(select "root".FIRSTNAME as "firstName", "root".LASTNAME as "lastName", row_number() OVER (Order By "root".FIRSTNAME) as "row_number" from personTable as "root") '
+ 'as "limitoffset_via_window_subquery" where "limitoffset_via_window_subquery".row_number <= 50) as "subselect" order by "firstName" limit 3,2', $s5);


let f4 = {|Person.all()->project([col(p|$p.firstName, 'firstName'), col(p|$p.lastName, 'lastName')])->sort(asc('firstName'))->slice(0,50)->restrict('firstName');};

let s6 = toSQLString($f4, meta::relational::tests::simpleRelationalMapping, meta::relational::runtime::DatabaseType.SybaseIQ, meta::relational::extension::relationalExtensions());
assertEquals('select "firstName" as "firstName" from (select "limitoffset_via_window_subquery"."firstName" as "firstName", "limitoffset_via_window_subquery"."lastName" as "lastName" from (select "root".FIRSTNAME as "firstName", "root".LASTNAME as "lastName", row_number() OVER (Order By "root".FIRSTNAME ASC) as "row_number" from personTable as "root") as "limitoffset_via_window_subquery" where "limitoffset_via_window_subquery".row_number <= 50) as "subselect"', $s6);
assertEquals('select "subselect"."firstName" as "firstName" from (select "limitoffset_via_window_subquery"."firstName" as "firstName", "limitoffset_via_window_subquery"."lastName" as "lastName" from (select "root".FIRSTNAME as "firstName", "root".LASTNAME as "lastName", row_number() OVER (Order By "root".FIRSTNAME ASC) as "row_number" from personTable as "root") as "limitoffset_via_window_subquery" where "limitoffset_via_window_subquery".row_number <= 50) as "subselect"', $s6);
}

function <<test.Test>> meta::relational::tests::query::function::sybaseIQ::testTakeByVendor():Boolean[1]
Expand Down
Loading

0 comments on commit 61a244f

Please sign in to comment.