pgsql: move database into opt parameters list

For StartupMessages, the database parameter is optional. This moves the
parameter into the optional_parameters list.

Bug #5579
pull/8118/head
Juliana Fajardini 3 years ago committed by Victor Julien
parent 84f9ea7254
commit c4fbd78770

@ -271,10 +271,6 @@ fn log_startup_parameters(params: &PgsqlStartupParameters) -> Result<JsonBuilder
let mut jb = JsonBuilder::new_object();
// User is a mandatory field in a pgsql message
jb.set_string_from_bytes("user", &params.user.value)?;
if let Some(PgsqlParameter { name: _, value }) = &params.database {
jb.set_string_from_bytes("database", value)?;
}
if let Some(parameters) = &params.optional_params {
jb.open_array("optional_parameters")?;
for parameter in parameters {

@ -122,7 +122,6 @@ pub struct PgsqlParameter {
#[derive(Debug, PartialEq, Eq)]
pub struct PgsqlStartupParameters {
pub user: PgsqlParameter,
pub database: Option<PgsqlParameter>,
pub optional_params: Option<Vec<PgsqlParameter>>,
}
@ -554,26 +553,25 @@ fn pgsql_parse_generic_parameter(i: &[u8]) -> IResult<&[u8], PgsqlParameter> {
}
pub fn pgsql_parse_startup_parameters(i: &[u8]) -> IResult<&[u8], PgsqlStartupParameters> {
let (i, optional) = opt(terminated(many1(pgsql_parse_generic_parameter), tag("\x00")))(i)?;
if let Some(ref params) = optional {
let (i, mut optional) = opt(terminated(many1(pgsql_parse_generic_parameter), tag("\x00")))(i)?;
if let Some(ref mut params) = optional {
let mut user = PgsqlParameter{name: PgsqlParameters::User, value: Vec::new() };
let mut database = None;
let mut index: usize = 0;
for j in 0..params.len() {
if params[j].name == PgsqlParameters::User {
user.value.extend_from_slice(&params[j].value);
} else if params[j].name == PgsqlParameters::Database {
let mut d1 = PgsqlParameter{name: PgsqlParameters::Database, value: Vec::new() };
d1.value.extend_from_slice(&params[j].value);
database = Some(d1);
index = j;
}
}
params.remove(index);
if user.value.len() == 0 {
return Err(Err::Error(make_error(i, ErrorKind::Tag)));
}
return Ok((i, PgsqlStartupParameters{
user,
database,
optional_params: optional,
optional_params: if !params.is_empty() {
optional
} else { None },
}));
}
return Err(Err::Error(make_error(i, ErrorKind::Tag)));
@ -1159,10 +1157,11 @@ mod tests {
name: PgsqlParameters::Database,
value: br#"mailstore"#.to_vec(),
};
let mut database_param: Vec<PgsqlParameter> = Vec::new();
database_param.push(database);
let params = PgsqlStartupParameters {
user,
database: Some(database),
optional_params: None,
optional_params: Some(database_param),
};
let expected_result = PgsqlFEMessage::StartupMessage(StartupPacket {
length: 38,
@ -1199,7 +1198,6 @@ mod tests {
};
let params = PgsqlStartupParameters {
user,
database: None,
optional_params: None,
};
let expected_result = PgsqlFEMessage::StartupMessage(StartupPacket {

Loading…
Cancel
Save