Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 8 additions & 3 deletions aerospike-core/src/commands/buffer.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1750,13 +1750,19 @@ impl Buffer {
}

pub(crate) fn write_geo(&mut self, value: &str) -> usize {
// Bin values require flags+ncells prefix
self.write_u8(0);
self.write_u8(0);
self.write_u8(0);
self.write_i16(0);
self.write_bytes(value.as_bytes());
3 + value.len()
}

pub(crate) fn write_geo_string(&mut self, value: &str) -> usize {
// Query filters use raw GeoJSON string
self.write_bytes(value.as_bytes());
value.len()
}

pub(crate) fn write_timeout(&mut self, val: Option<Duration>) {
if let Some(val) = val {
let millis: i32 = (val.as_secs() * 1_000) as i32 + val.subsec_millis() as i32;
Expand All @@ -1767,6 +1773,5 @@ impl Buffer {
#[allow(dead_code)]
pub(crate) fn dump_buffer(&self) {
rhexdump!(&self.data_buffer);
println!("");
}
}
8 changes: 4 additions & 4 deletions aerospike-core/src/net/connection.rs
Original file line number Diff line number Diff line change
Expand Up @@ -141,12 +141,12 @@ impl Connection {
}

pub async fn flush(&mut self) -> Result<()> {
let send_buf = &self.buffer.data_buffer;
match self.conn {
Netsocket::Tcp(ref mut conn) => conn.write_all(&self.buffer.data_buffer).await?,
Netsocket::Tcp(ref mut conn) => conn.write_all(send_buf).await?,
#[cfg(feature = "tls")]
Netsocket::Tls(ref mut conn) => conn.write_all(&self.buffer.data_buffer).await?,
};

Netsocket::Tls(ref mut conn) => conn.write_all(send_buf).await?,
}
self.refresh();
Ok(())
}
Expand Down
36 changes: 29 additions & 7 deletions aerospike-core/src/query/filter.rs
Original file line number Diff line number Diff line change
Expand Up @@ -69,9 +69,15 @@ impl Filter {

#[doc(hidden)]
pub fn estimate_size(&self) -> usize {
// bin name size(1) + particle type size(1)
// + begin particle size(4) + end particle size(4) = 10
self.bin_name.len() + self.begin.estimate_size() + self.end.estimate_size() + 10
let begin_size = match &self.begin {
Copy link
Collaborator

@khaf khaf Nov 13, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@paul-brackin does this mean the Java implementation is also buggy?

Value::GeoJSON(ref s) => s.len(),
_ => self.begin.estimate_size(),
};
let end_size = match &self.end {
Value::GeoJSON(ref s) => s.len(),
_ => self.end.estimate_size(),
};
self.bin_name.len() + begin_size + end_size + 10
}

#[doc(hidden)]
Expand All @@ -80,11 +86,27 @@ impl Filter {
buffer.write_str(&self.bin_name);
buffer.write_u8(self.value_particle_type.clone() as u8);

buffer.write_u32(self.begin.estimate_size() as u32);
self.begin.write_to(buffer);
let begin_size = match &self.begin {
Value::GeoJSON(ref s) => s.len(),
_ => self.begin.estimate_size(),
};
buffer.write_u32(begin_size as u32);
if let Value::GeoJSON(ref geo_str) = &self.begin {
buffer.write_geo_string(geo_str);
} else {
self.begin.write_to(buffer);
}

buffer.write_u32(self.end.estimate_size() as u32);
self.end.write_to(buffer);
let end_size = match &self.end {
Value::GeoJSON(ref s) => s.len(),
_ => self.end.estimate_size(),
};
buffer.write_u32(end_size as u32);
if let Value::GeoJSON(ref geo_str) = &self.end {
buffer.write_geo_string(geo_str);
} else {
self.end.write_to(buffer);
}
}
}

Expand Down
2 changes: 1 addition & 1 deletion aerospike-core/src/value.rs
Original file line number Diff line number Diff line change
Expand Up @@ -292,7 +292,7 @@ impl Value {
Value::Bool(_) => 1,
Value::List(_) | Value::HashMap(_) => encoder::pack_value(&mut None, self),
Value::OrderedMap(_) => panic!("The library never passes ordered maps to the server."),
Value::GeoJSON(ref s) => 1 + 2 + s.len(), // flags + ncells + jsonstr
Value::GeoJSON(ref s) => 1 + 2 + s.len(), // flags + ncells + string
Value::HLL(ref h) => h.len(),
Value::Infinity => 0,
Value::Wildcard => 0,
Expand Down