Skip to content

Commit b28ca38

Browse files
committed
Fixed: 'repeated_field[-1]' should return nothing.
1 parent 6bc6055 commit b28ca38

File tree

4 files changed

+14
-3
lines changed

4 files changed

+14
-3
lines changed

expected/postgres_protobuf.out

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -205,6 +205,12 @@ aaa
205205
bbb
206206
ccc
207207
(3 rows)
208+
SELECT protobuf_query_multi(
209+
'pgpb.test.ExampleMessage:repeated_string[-1]',
210+
'\x1a036161611a036262621a03636363'::BYTEA
211+
) AS result;
212+
result
213+
(0 rows)
208214
SELECT protobuf_query_multi(
209215
'pgpb.test.ExampleMessage:repeated_inner[0].inner_repeated[*]',
210216
'\x2a0a120361626312036465662a0a12036161611203626262'::BYTEA

generate_test_cases.rb

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -239,6 +239,7 @@ def pg_quote(s)
239239
test_query('pgpb.test.ExampleMessage:repeated_string[2]', ['ccc'])
240240
test_query('pgpb.test.ExampleMessage:repeated_string[3]', [])
241241
test_query('pgpb.test.ExampleMessage:repeated_string[*]', ['aaa', 'bbb', 'ccc'])
242+
test_query('pgpb.test.ExampleMessage:repeated_string[-1]', [])
242243
end
243244

244245
with_proto('repeated_inner: { inner_repeated: "abc", inner_repeated: "def" }, repeated_inner { inner_repeated: "aaa", inner_repeated: "bbb" }') do

querying.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -611,7 +611,7 @@ class FieldSelector : public ProtobufVisitor {
611611
wanted_field_(wanted_field),
612612
ty_(ty),
613613
is_packed_(is_packed),
614-
wanted_index_(-1),
614+
wanted_index_(),
615615
state_(State::Scanning),
616616
current_field_(0),
617617
current_index_(0) {
@@ -675,7 +675,7 @@ class FieldSelector : public ProtobufVisitor {
675675
const int wanted_field_;
676676
const pb::FieldDescriptor::Type ty_;
677677
const bool is_packed_;
678-
int wanted_index_;
678+
std::optional<int> wanted_index_;
679679

680680
enum class State {
681681
Scanning,
@@ -688,7 +688,7 @@ class FieldSelector : public ProtobufVisitor {
688688

689689
bool ShouldEmitCurrentIndex() const {
690690
return current_field_ == wanted_field_ &&
691-
(wanted_index_ == -1 || current_index_ == wanted_index_);
691+
(!wanted_index_.has_value() || current_index_ == wanted_index_.value());
692692
}
693693
};
694694

sql/postgres_protobuf.sql

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -123,6 +123,10 @@ SELECT protobuf_query_multi(
123123
'pgpb.test.ExampleMessage:repeated_string[*]',
124124
'\x1a036161611a036262621a03636363'::BYTEA
125125
) AS result;
126+
SELECT protobuf_query_multi(
127+
'pgpb.test.ExampleMessage:repeated_string[-1]',
128+
'\x1a036161611a036262621a03636363'::BYTEA
129+
) AS result;
126130
SELECT protobuf_query_multi(
127131
'pgpb.test.ExampleMessage:repeated_inner[0].inner_repeated[*]',
128132
'\x2a0a120361626312036465662a0a12036161611203626262'::BYTEA

0 commit comments

Comments
 (0)