@@ -1693,6 +1693,142 @@ Y_UNIT_TEST(UpdateRowCoveredReturning) {
16931693 ])" , NYdb::FormatResultSetYson (index));
16941694}
16951695
1696+ Y_UNIT_TEST (Select) {
1697+ auto kikimr = Kikimr ();
1698+ auto db = kikimr.GetQueryClient ();
1699+
1700+ CreateTexts (db);
1701+ UpsertTexts (db);
1702+ AddIndex (db);
1703+ auto index = ReadIndex (db);
1704+ CompareYson (R"( [
1705+ [[100u];"animals"];
1706+ [[100u];"cats"];
1707+ [[200u];"cats"];
1708+ [[300u];"cats"];
1709+ [[100u];"chase"];
1710+ [[200u];"chase"];
1711+ [[200u];"dogs"];
1712+ [[400u];"dogs"];
1713+ [[400u];"foxes"];
1714+ [[300u];"love"];
1715+ [[400u];"love"];
1716+ [[100u];"small"];
1717+ [[200u];"small"]
1718+ ])" , NYdb::FormatResultSetYson (index));
1719+
1720+ { // Select by one token
1721+ TString query = R"sql(
1722+ SELECT Key FROM `/Root/Texts/fulltext_idx/indexImplTable`
1723+ WHERE __ydb_token = "dogs"
1724+ ORDER BY Key
1725+ )sql" ;
1726+ auto result = db.ExecuteQuery (query, NYdb::NQuery::TTxControl::NoTx ()).ExtractValueSync ();
1727+ UNIT_ASSERT_VALUES_EQUAL_C (result.GetStatus (), EStatus::SUCCESS, result.GetIssues ().ToString ());
1728+ CompareYson (R"( [
1729+ [[200u]];
1730+ [[400u]]
1731+ ])" , NYdb::FormatResultSetYson (result.GetResultSet (0 )));
1732+ }
1733+
1734+ { // Select by two tokens using OR
1735+ TString query = R"sql(
1736+ SELECT DISTINCT Key FROM `/Root/Texts/fulltext_idx/indexImplTable`
1737+ WHERE __ydb_token IN ("foxes", "animals")
1738+ ORDER BY Key
1739+ )sql" ;
1740+ auto result = db.ExecuteQuery (query, NYdb::NQuery::TTxControl::NoTx ()).ExtractValueSync ();
1741+ UNIT_ASSERT_VALUES_EQUAL_C (result.GetStatus (), EStatus::SUCCESS, result.GetIssues ().ToString ());
1742+ CompareYson (R"( [
1743+ [[100u]];
1744+ [[400u]]
1745+ ])" , NYdb::FormatResultSetYson (result.GetResultSet (0 )));
1746+ }
1747+
1748+ { // Select by two tokens using AND
1749+ TString query = R"sql(
1750+ SELECT Key FROM `/Root/Texts/fulltext_idx/indexImplTable`
1751+ WHERE __ydb_token = "dogs"
1752+ INTERSECT
1753+ SELECT Key FROM `/Root/Texts/fulltext_idx/indexImplTable`
1754+ WHERE __ydb_token = "chase"
1755+ )sql" ;
1756+ auto result = db.ExecuteQuery (query, NYdb::NQuery::TTxControl::NoTx ()).ExtractValueSync ();
1757+ UNIT_ASSERT_VALUES_EQUAL_C (result.GetStatus (), EStatus::SUCCESS, result.GetIssues ().ToString ());
1758+ CompareYson (R"( [
1759+ [[200u]]
1760+ ])" , NYdb::FormatResultSetYson (result.GetResultSet (0 )));
1761+ }
1762+ }
1763+
1764+ Y_UNIT_TEST (SelectCovered) {
1765+ auto kikimr = Kikimr ();
1766+ auto db = kikimr.GetQueryClient ();
1767+
1768+ CreateTexts (db);
1769+ UpsertTexts (db);
1770+ AddIndexCovered (db);
1771+ auto index = ReadIndex (db);
1772+ CompareYson (R"( [
1773+ [["cats data"];[100u];"animals"];
1774+ [["cats data"];[100u];"cats"];
1775+ [["dogs data"];[200u];"cats"];
1776+ [["cats cats data"];[300u];"cats"];
1777+ [["cats data"];[100u];"chase"];
1778+ [["dogs data"];[200u];"chase"];
1779+ [["dogs data"];[200u];"dogs"];
1780+ [["foxes data"];[400u];"dogs"];
1781+ [["foxes data"];[400u];"foxes"];
1782+ [["cats cats data"];[300u];"love"];
1783+ [["foxes data"];[400u];"love"];
1784+ [["cats data"];[100u];"small"];
1785+ [["dogs data"];[200u];"small"]
1786+ ])" , NYdb::FormatResultSetYson (index));
1787+
1788+ { // Select by one token
1789+ TString query = R"sql(
1790+ SELECT Key, Data FROM `/Root/Texts/fulltext_idx/indexImplTable`
1791+ WHERE __ydb_token = "dogs"
1792+ ORDER BY Key
1793+ )sql" ;
1794+ auto result = db.ExecuteQuery (query, NYdb::NQuery::TTxControl::NoTx ()).ExtractValueSync ();
1795+ UNIT_ASSERT_VALUES_EQUAL_C (result.GetStatus (), EStatus::SUCCESS, result.GetIssues ().ToString ());
1796+ CompareYson (R"( [
1797+ [[200u];["dogs data"]];
1798+ [[400u];["foxes data"]]
1799+ ])" , NYdb::FormatResultSetYson (result.GetResultSet (0 )));
1800+ }
1801+
1802+ { // Select by two tokens using OR
1803+ TString query = R"sql(
1804+ SELECT DISTINCT Key, Data FROM `/Root/Texts/fulltext_idx/indexImplTable`
1805+ WHERE __ydb_token IN ("foxes", "animals")
1806+ ORDER BY Key
1807+ )sql" ;
1808+ auto result = db.ExecuteQuery (query, NYdb::NQuery::TTxControl::NoTx ()).ExtractValueSync ();
1809+ UNIT_ASSERT_VALUES_EQUAL_C (result.GetStatus (), EStatus::SUCCESS, result.GetIssues ().ToString ());
1810+ CompareYson (R"( [
1811+ [[100u];["cats data"]];
1812+ [[400u];["foxes data"]]
1813+ ])" , NYdb::FormatResultSetYson (result.GetResultSet (0 )));
1814+ }
1815+
1816+ { // Select by two tokens using AND
1817+ TString query = R"sql(
1818+ SELECT Key, Data FROM `/Root/Texts/fulltext_idx/indexImplTable`
1819+ WHERE __ydb_token = "dogs"
1820+ INTERSECT
1821+ SELECT Key, Data FROM `/Root/Texts/fulltext_idx/indexImplTable`
1822+ WHERE __ydb_token = "chase"
1823+ )sql" ;
1824+ auto result = db.ExecuteQuery (query, NYdb::NQuery::TTxControl::NoTx ()).ExtractValueSync ();
1825+ UNIT_ASSERT_VALUES_EQUAL_C (result.GetStatus (), EStatus::SUCCESS, result.GetIssues ().ToString ());
1826+ CompareYson (R"( [
1827+ [[200u];["dogs data"]]
1828+ ])" , NYdb::FormatResultSetYson (result.GetResultSet (0 )));
1829+ }
1830+ }
1831+
16961832Y_UNIT_TEST (CreateTable) {
16971833 auto kikimr = Kikimr ();
16981834 auto db = kikimr.GetQueryClient ();
0 commit comments