test_user_data.cpp 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. #include <yql/essentials/public/purecalc/purecalc.h>
  2. #include <yql/essentials/public/purecalc/io_specs/protobuf/spec.h>
  3. #include <yql/essentials/public/purecalc/ut/protos/test_structs.pb.h>
  4. #include <yql/essentials/public/purecalc/ut/empty_stream.h>
  5. #include <library/cpp/testing/unittest/registar.h>
  6. Y_UNIT_TEST_SUITE(TestUserData) {
  7. Y_UNIT_TEST(TestUserData) {
  8. using namespace NYql::NPureCalc;
  9. auto options = TProgramFactoryOptions()
  10. .AddFile(NYql::NUserData::EDisposition::INLINE, "my_file.txt", "my content!");
  11. auto factory = MakeProgramFactory(options);
  12. auto program = factory->MakePullListProgram(
  13. TProtobufInputSpec<NPureCalcProto::TStringMessage>(),
  14. TProtobufOutputSpec<NPureCalcProto::TStringMessage>(),
  15. "SELECT UNWRAP(CAST(FileContent(\"my_file.txt\") AS Utf8)) AS X",
  16. ETranslationMode::SQL
  17. );
  18. auto stream = program->Apply(EmptyStream<NPureCalcProto::TStringMessage*>());
  19. NPureCalcProto::TStringMessage* message;
  20. UNIT_ASSERT(message = stream->Fetch());
  21. UNIT_ASSERT_EQUAL(message->GetX(), "my content!");
  22. UNIT_ASSERT(!stream->Fetch());
  23. }
  24. Y_UNIT_TEST(TestUserDataLibrary) {
  25. using namespace NYql::NPureCalc;
  26. try {
  27. auto options = TProgramFactoryOptions()
  28. .AddLibrary(NYql::NUserData::EDisposition::INLINE, "a.sql", "$x = 1; EXPORT $x;")
  29. .AddLibrary(NYql::NUserData::EDisposition::INLINE, "b.sql", "IMPORT a SYMBOLS $x; $y = CAST($x + 1 AS String); EXPORT $y;");
  30. auto factory = MakeProgramFactory(options);
  31. auto program = factory->MakePullListProgram(
  32. TProtobufInputSpec<NPureCalcProto::TStringMessage>(),
  33. TProtobufOutputSpec<NPureCalcProto::TStringMessage>(),
  34. "IMPORT b SYMBOLS $y; SELECT CAST($y AS Utf8) ?? '' AS X;",
  35. ETranslationMode::SQL
  36. );
  37. auto stream = program->Apply(EmptyStream<NPureCalcProto::TStringMessage*>());
  38. NPureCalcProto::TStringMessage* message;
  39. UNIT_ASSERT(message = stream->Fetch());
  40. UNIT_ASSERT_EQUAL(message->GetX(), "2");
  41. UNIT_ASSERT(!stream->Fetch());
  42. } catch (const TCompileError& e) {
  43. Cerr << e;
  44. throw e;
  45. }
  46. }
  47. }