url_parse.h 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. #pragma once
  2. #include <yql/essentials/public/udf/udf_helpers.h>
  3. #include <library/cpp/uri/uri.h>
  4. #define FIELD_MAP(XX) \
  5. XX(Scheme) \
  6. XX(User) \
  7. XX(Pass) \
  8. XX(Host) \
  9. XX(Port) \
  10. XX(Path) \
  11. XX(Query) \
  12. XX(Frag)
  13. #define FIELD_INDEXES(name) ui32 name;
  14. namespace NUrlUdf {
  15. using namespace NUri;
  16. using namespace NKikimr;
  17. using namespace NUdf;
  18. struct TUrlParseIndexes {
  19. ui32 ParseError;
  20. FIELD_MAP(FIELD_INDEXES)
  21. };
  22. class TParse: public TBoxedValue {
  23. public:
  24. TParse(const TUrlParseIndexes& UrlParseIndexes)
  25. : UrlParseIndexes(UrlParseIndexes)
  26. , ParseFlags(TUri::FeaturesRecommended)
  27. {
  28. }
  29. static const TStringRef& Name() {
  30. static auto nameRef = TStringRef("Parse");
  31. return nameRef;
  32. }
  33. private:
  34. TUnboxedValue Run(
  35. const IValueBuilder* valueBuilder,
  36. const TUnboxedValuePod* args) const override;
  37. public:
  38. static bool DeclareSignature(
  39. const TStringRef& name,
  40. TType* userType,
  41. IFunctionTypeInfoBuilder& builder,
  42. bool typesOnly);
  43. private:
  44. const TUrlParseIndexes UrlParseIndexes;
  45. const NUri::TParseFlags ParseFlags;
  46. static constexpr ui32 FieldsCount = sizeof(TUrlParseIndexes) / sizeof(ui32);
  47. };
  48. }