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(); let mut jb = JsonBuilder::new_object();
// User is a mandatory field in a pgsql message // User is a mandatory field in a pgsql message
jb.set_string_from_bytes("user", &params.user.value)?; 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 { if let Some(parameters) = &params.optional_params {
jb.open_array("optional_parameters")?; jb.open_array("optional_parameters")?;
for parameter in parameters { for parameter in parameters {

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

Loading…
Cancel
Save