hints_ut.cpp 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. #include <yql/essentials/parser/lexer_common/hints.h>
  2. #include <yql/essentials/sql/v1/lexer/lexer.h>
  3. #include <yql/essentials/sql/v1/lexer/antlr4/lexer.h>
  4. #include <library/cpp/testing/unittest/registar.h>
  5. #include <util/string/join.h>
  6. using namespace NSQLTranslation;
  7. using namespace NSQLTranslationV1;
  8. TSQLHints CollectHints(const TString& query) {
  9. NSQLTranslationV1::TLexers lexers;
  10. lexers.Antlr4 = NSQLTranslationV1::MakeAntlr4LexerFactory();
  11. bool ansi = false;
  12. auto lexer = MakeLexer(lexers, ansi, true);
  13. UNIT_ASSERT(lexer);
  14. TSQLHints result;
  15. NYql::TIssues issues;
  16. size_t maxErrors = 100;
  17. UNIT_ASSERT(CollectSqlHints(*lexer, query, "", "", result, issues, maxErrors, false));
  18. UNIT_ASSERT(issues.Empty());
  19. return result;
  20. }
  21. TString SerializeHints(const TVector<TSQLHint>& hints) {
  22. return JoinSeq(",", hints);
  23. }
  24. Y_UNIT_TEST_SUITE(TLexerHintsTests) {
  25. Y_UNIT_TEST(Basic) {
  26. TString query = "/*+ some() */ SELECT /*+ foo(one) */ --+ bar(two)";
  27. auto hintsWithPos = CollectHints(query);
  28. UNIT_ASSERT(hintsWithPos.size() == 1);
  29. NYql::TPosition pos = hintsWithPos.begin()->first;
  30. TVector<TSQLHint> hints = hintsWithPos.begin()->second;
  31. UNIT_ASSERT_EQUAL(pos.Row, 1);
  32. UNIT_ASSERT_EQUAL(pos.Column, 15);
  33. TStringBuf expected = R"raw("foo":{"one"},"bar":{"two"})raw";
  34. UNIT_ASSERT_NO_DIFF(SerializeHints(hints), expected);
  35. }
  36. }