Skip to content

Commit 8d2afea

Browse files
authored
Merge pull request #256 from wravery/fix-source-lifetime
Fix source lifetime and preserve input strings in response::IdType
2 parents ab07b35 + 86d9822 commit 8d2afea

27 files changed

+136
-110
lines changed

cmake/version.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
4.4.1
1+
4.5.0

include/graphqlservice/internal/Base64.h

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -59,11 +59,12 @@ class Base64
5959
const std::vector<std::uint8_t>& bytes);
6060

6161
enum class [[nodiscard]] Comparison {
62+
// Valid Base64 always compares as less than non-empty invalid Base64.
63+
InvalidBase64 = -2,
64+
6265
LessThan = -1,
6366
EqualTo = 0,
6467
GreaterThan = 1,
65-
66-
InvalidBase64 = 2,
6768
};
6869

6970
// Compare a set of bytes to a possible Base64 string without performing any heap allocations.

include/graphqlservice/internal/Grammar.h

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -11,11 +11,6 @@
1111

1212
#include "graphqlservice/internal/SyntaxTree.h"
1313

14-
#define TAO_PEGTL_NAMESPACE tao::graphqlpeg
15-
16-
#include <tao/pegtl.hpp>
17-
#include <tao/pegtl/contrib/parse_tree.hpp>
18-
1914
#include <functional>
2015

2116
namespace graphql::peg {

include/graphqlservice/internal/SyntaxTree.h

Lines changed: 0 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -86,36 +86,6 @@ class [[nodiscard]] ast_node : public parse_tree::basic_node<ast_node>
8686
mutable std::unique_ptr<unescaped_t> _unescaped;
8787
};
8888

89-
template <class ParseInput>
90-
class [[nodiscard]] depth_limit_input : public ParseInput
91-
{
92-
public:
93-
template <typename... Args>
94-
explicit depth_limit_input(size_t depthLimit, Args&&... args) noexcept
95-
: ParseInput(std::forward<Args>(args)...)
96-
, _depthLimit(depthLimit)
97-
{
98-
}
99-
100-
size_t depthLimit() const noexcept
101-
{
102-
return _depthLimit;
103-
}
104-
105-
size_t selectionSetDepth = 0;
106-
107-
private:
108-
const size_t _depthLimit;
109-
};
110-
111-
using ast_file = depth_limit_input<file_input<>>;
112-
using ast_memory = depth_limit_input<memory_input<>>;
113-
114-
struct [[nodiscard]] ast_input
115-
{
116-
std::variant<std::vector<char>, std::unique_ptr<ast_file>, std::string_view> data;
117-
};
118-
11989
} // namespace graphql::peg
12090

12191
#endif // GRAPHQLSYNTAXTREE_H

include/graphqlservice/internal/Version.h

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,11 +10,11 @@
1010

1111
namespace graphql::internal {
1212

13-
constexpr std::string_view FullVersion { "4.4.1" };
13+
constexpr std::string_view FullVersion { "4.5.0" };
1414

1515
constexpr size_t MajorVersion = 4;
16-
constexpr size_t MinorVersion = 4;
17-
constexpr size_t PatchVersion = 1;
16+
constexpr size_t MinorVersion = 5;
17+
constexpr size_t PatchVersion = 0;
1818

1919
} // namespace graphql::internal
2020

include/graphqlservice/introspection/IntrospectionSchema.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,9 +10,9 @@
1010

1111
#include "graphqlservice/internal/Schema.h"
1212

13-
// Check if the library version is compatible with schemagen 4.4.0
13+
// Check if the library version is compatible with schemagen 4.5.0
1414
static_assert(graphql::internal::MajorVersion == 4, "regenerate with schemagen: major version mismatch");
15-
static_assert(graphql::internal::MinorVersion == 4, "regenerate with schemagen: minor version mismatch");
15+
static_assert(graphql::internal::MinorVersion == 5, "regenerate with schemagen: minor version mismatch");
1616

1717
#include <array>
1818
#include <memory>

res/ClientGen.rc

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,8 @@
33

44
#include <winver.h>
55

6-
#define GRAPHQL_RC_VERSION 4,4,1,0
7-
#define GRAPHQL_RC_VERSION_STR "4.4.1"
6+
#define GRAPHQL_RC_VERSION 4,5,0,0
7+
#define GRAPHQL_RC_VERSION_STR "4.5.0"
88

99
#ifndef DEBUG
1010
#define VER_DEBUG 0

res/SchemaGen.rc

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,8 @@
33

44
#include <winver.h>
55

6-
#define GRAPHQL_RC_VERSION 4,4,1,0
7-
#define GRAPHQL_RC_VERSION_STR "4.4.1"
6+
#define GRAPHQL_RC_VERSION 4,5,0,0
7+
#define GRAPHQL_RC_VERSION_STR "4.5.0"
88

99
#ifndef DEBUG
1010
#define VER_DEBUG 0

res/graphqlclient_version.rc

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,8 @@
33

44
#include <winver.h>
55

6-
#define GRAPHQL_RC_VERSION 4,4,1,0
7-
#define GRAPHQL_RC_VERSION_STR "4.4.1"
6+
#define GRAPHQL_RC_VERSION 4,5,0,0
7+
#define GRAPHQL_RC_VERSION_STR "4.5.0"
88

99
#ifndef DEBUG
1010
#define VER_DEBUG 0

res/graphqljson_version.rc

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,8 @@
33

44
#include <winver.h>
55

6-
#define GRAPHQL_RC_VERSION 4,4,1,0
7-
#define GRAPHQL_RC_VERSION_STR "4.4.1"
6+
#define GRAPHQL_RC_VERSION 4,5,0,0
7+
#define GRAPHQL_RC_VERSION_STR "4.5.0"
88

99
#ifndef DEBUG
1010
#define VER_DEBUG 0

res/graphqlpeg_version.rc

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,8 @@
33

44
#include <winver.h>
55

6-
#define GRAPHQL_RC_VERSION 4,4,1,0
7-
#define GRAPHQL_RC_VERSION_STR "4.4.1"
6+
#define GRAPHQL_RC_VERSION 4,5,0,0
7+
#define GRAPHQL_RC_VERSION_STR "4.5.0"
88

99
#ifndef DEBUG
1010
#define VER_DEBUG 0

res/graphqlresponse_version.rc

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,8 @@
33

44
#include <winver.h>
55

6-
#define GRAPHQL_RC_VERSION 4,4,1,0
7-
#define GRAPHQL_RC_VERSION_STR "4.4.1"
6+
#define GRAPHQL_RC_VERSION 4,5,0,0
7+
#define GRAPHQL_RC_VERSION_STR "4.5.0"
88

99
#ifndef DEBUG
1010
#define VER_DEBUG 0

res/graphqlservice_version.rc

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,8 @@
33

44
#include <winver.h>
55

6-
#define GRAPHQL_RC_VERSION 4,4,1,0
7-
#define GRAPHQL_RC_VERSION_STR "4.4.1"
6+
#define GRAPHQL_RC_VERSION 4,5,0,0
7+
#define GRAPHQL_RC_VERSION_STR "4.5.0"
88

99
#ifndef DEBUG
1010
#define VER_DEBUG 0

samples/client/benchmark/BenchmarkClient.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,9 +14,9 @@
1414

1515
#include "graphqlservice/internal/Version.h"
1616

17-
// Check if the library version is compatible with clientgen 4.4.0
17+
// Check if the library version is compatible with clientgen 4.5.0
1818
static_assert(graphql::internal::MajorVersion == 4, "regenerate with clientgen: major version mismatch");
19-
static_assert(graphql::internal::MinorVersion == 4, "regenerate with clientgen: minor version mismatch");
19+
static_assert(graphql::internal::MinorVersion == 5, "regenerate with clientgen: minor version mismatch");
2020

2121
#include <optional>
2222
#include <string>

samples/client/multiple/MultipleQueriesClient.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,9 +14,9 @@
1414

1515
#include "graphqlservice/internal/Version.h"
1616

17-
// Check if the library version is compatible with clientgen 4.4.0
17+
// Check if the library version is compatible with clientgen 4.5.0
1818
static_assert(graphql::internal::MajorVersion == 4, "regenerate with clientgen: major version mismatch");
19-
static_assert(graphql::internal::MinorVersion == 4, "regenerate with clientgen: minor version mismatch");
19+
static_assert(graphql::internal::MinorVersion == 5, "regenerate with clientgen: minor version mismatch");
2020

2121
#include <optional>
2222
#include <string>

samples/client/mutate/MutateClient.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,9 +14,9 @@
1414

1515
#include "graphqlservice/internal/Version.h"
1616

17-
// Check if the library version is compatible with clientgen 4.4.0
17+
// Check if the library version is compatible with clientgen 4.5.0
1818
static_assert(graphql::internal::MajorVersion == 4, "regenerate with clientgen: major version mismatch");
19-
static_assert(graphql::internal::MinorVersion == 4, "regenerate with clientgen: minor version mismatch");
19+
static_assert(graphql::internal::MinorVersion == 5, "regenerate with clientgen: minor version mismatch");
2020

2121
#include <optional>
2222
#include <string>

samples/client/nestedinput/NestedInputClient.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,9 +14,9 @@
1414

1515
#include "graphqlservice/internal/Version.h"
1616

17-
// Check if the library version is compatible with clientgen 4.4.0
17+
// Check if the library version is compatible with clientgen 4.5.0
1818
static_assert(graphql::internal::MajorVersion == 4, "regenerate with clientgen: major version mismatch");
19-
static_assert(graphql::internal::MinorVersion == 4, "regenerate with clientgen: minor version mismatch");
19+
static_assert(graphql::internal::MinorVersion == 5, "regenerate with clientgen: minor version mismatch");
2020

2121
#include <optional>
2222
#include <string>

samples/client/query/QueryClient.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,9 +14,9 @@
1414

1515
#include "graphqlservice/internal/Version.h"
1616

17-
// Check if the library version is compatible with clientgen 4.4.0
17+
// Check if the library version is compatible with clientgen 4.5.0
1818
static_assert(graphql::internal::MajorVersion == 4, "regenerate with clientgen: major version mismatch");
19-
static_assert(graphql::internal::MinorVersion == 4, "regenerate with clientgen: minor version mismatch");
19+
static_assert(graphql::internal::MinorVersion == 5, "regenerate with clientgen: minor version mismatch");
2020

2121
#include <optional>
2222
#include <string>

samples/client/subscribe/SubscribeClient.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,9 +14,9 @@
1414

1515
#include "graphqlservice/internal/Version.h"
1616

17-
// Check if the library version is compatible with clientgen 4.4.0
17+
// Check if the library version is compatible with clientgen 4.5.0
1818
static_assert(graphql::internal::MajorVersion == 4, "regenerate with clientgen: major version mismatch");
19-
static_assert(graphql::internal::MinorVersion == 4, "regenerate with clientgen: minor version mismatch");
19+
static_assert(graphql::internal::MinorVersion == 5, "regenerate with clientgen: minor version mismatch");
2020

2121
#include <optional>
2222
#include <string>

samples/learn/QueryData.cpp

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -31,26 +31,26 @@ std::shared_ptr<object::Character> Query::getHero(std::optional<Episode> episode
3131

3232
std::shared_ptr<object::Human> Query::getHuman(const response::IdType& idArg) const noexcept
3333
{
34-
std::shared_ptr<Human> result;
34+
std::shared_ptr<object::Human> result;
3535

3636
if (const auto itr = humans_.find(idArg); itr != humans_.end())
3737
{
38-
result = itr->second;
38+
result = std::make_shared<object::Human>(itr->second);
3939
}
4040

41-
return std::make_shared<object::Human>(std::move(result));
41+
return result;
4242
}
4343

4444
std::shared_ptr<object::Droid> Query::getDroid(const response::IdType& idArg) const noexcept
4545
{
46-
std::shared_ptr<Droid> result;
46+
std::shared_ptr<object::Droid> result;
4747

4848
if (const auto itr = droids_.find(idArg); itr != droids_.end())
4949
{
50-
result = itr->second;
50+
result = std::make_shared<object::Droid>(itr->second);
5151
}
5252

53-
return std::make_shared<object::Droid>(std::move(result));
53+
return result;
5454
}
5555

5656
} // namespace graphql::learn

samples/learn/schema/StarWarsSchema.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,9 +10,9 @@
1010

1111
#include "graphqlservice/internal/Schema.h"
1212

13-
// Check if the library version is compatible with schemagen 4.4.0
13+
// Check if the library version is compatible with schemagen 4.5.0
1414
static_assert(graphql::internal::MajorVersion == 4, "regenerate with schemagen: major version mismatch");
15-
static_assert(graphql::internal::MinorVersion == 4, "regenerate with schemagen: minor version mismatch");
15+
static_assert(graphql::internal::MinorVersion == 5, "regenerate with schemagen: minor version mismatch");
1616

1717
#include <array>
1818
#include <memory>

samples/today/nointrospection/TodaySchema.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,9 +10,9 @@
1010

1111
#include "graphqlservice/internal/Schema.h"
1212

13-
// Check if the library version is compatible with schemagen 4.4.0
13+
// Check if the library version is compatible with schemagen 4.5.0
1414
static_assert(graphql::internal::MajorVersion == 4, "regenerate with schemagen: major version mismatch");
15-
static_assert(graphql::internal::MinorVersion == 4, "regenerate with schemagen: minor version mismatch");
15+
static_assert(graphql::internal::MinorVersion == 5, "regenerate with schemagen: minor version mismatch");
1616

1717
#include <array>
1818
#include <memory>

samples/today/schema/TodaySchema.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,9 +10,9 @@
1010

1111
#include "graphqlservice/internal/Schema.h"
1212

13-
// Check if the library version is compatible with schemagen 4.4.0
13+
// Check if the library version is compatible with schemagen 4.5.0
1414
static_assert(graphql::internal::MajorVersion == 4, "regenerate with schemagen: major version mismatch");
15-
static_assert(graphql::internal::MinorVersion == 4, "regenerate with schemagen: minor version mismatch");
15+
static_assert(graphql::internal::MinorVersion == 5, "regenerate with schemagen: minor version mismatch");
1616

1717
#include <array>
1818
#include <memory>

samples/validation/schema/ValidationSchema.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,9 +10,9 @@
1010

1111
#include "graphqlservice/internal/Schema.h"
1212

13-
// Check if the library version is compatible with schemagen 4.4.0
13+
// Check if the library version is compatible with schemagen 4.5.0
1414
static_assert(graphql::internal::MajorVersion == 4, "regenerate with schemagen: major version mismatch");
15-
static_assert(graphql::internal::MinorVersion == 4, "regenerate with schemagen: minor version mismatch");
15+
static_assert(graphql::internal::MinorVersion == 5, "regenerate with schemagen: minor version mismatch");
1616

1717
#include <array>
1818
#include <memory>

src/GraphQLResponse.cpp

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -138,11 +138,12 @@ bool IdType::operator<(const IdType& rhs) const noexcept
138138
}
139139

140140
return (std::holds_alternative<ByteData>(_data)
141-
? internal::Base64::compareBase64(std::get<ByteData>(_data),
142-
std::get<OpaqueString>(rhs._data))
143-
: internal::Base64::compareBase64(std::get<ByteData>(rhs._data),
144-
std::get<OpaqueString>(_data)))
145-
> internal::Base64::Comparison::EqualTo;
141+
? (internal::Base64::compareBase64(std::get<ByteData>(_data),
142+
std::get<OpaqueString>(rhs._data))
143+
< internal::Base64::Comparison::EqualTo)
144+
: (internal::Base64::compareBase64(std::get<ByteData>(rhs._data),
145+
std::get<OpaqueString>(_data)))
146+
> internal::Base64::Comparison::EqualTo);
146147
}
147148

148149
bool IdType::isBase64() const noexcept
@@ -881,9 +882,7 @@ IdType Value::release<IdType>()
881882
{
882883
auto stringValue = std::move(stringData.string);
883884

884-
return internal::Base64::validateBase64(stringValue)
885-
? IdType { internal::Base64::fromBase64(stringValue) }
886-
: IdType { std::move(stringValue) };
885+
return IdType { std::move(stringValue) };
887886
}
888887
}
889888
else if (std::holds_alternative<IdType>(_data))

0 commit comments

Comments
 (0)