sea_schema/mysql/parser/
system.rs

1use crate::mysql::def::*;
2use crate::mysql::query::VersionQueryResult;
3
4impl VersionQueryResult {
5    pub fn parse(self) -> SystemInfo {
6        parse_version_query_result(self)
7    }
8}
9
10pub fn parse_version_query_result(result: VersionQueryResult) -> SystemInfo {
11    parse_version_string(result.version.as_str())
12}
13
14pub fn parse_version_string(string: &str) -> SystemInfo {
15    let mut system = SystemInfo::default();
16    for (i, part) in string.split('-').enumerate() {
17        if i == 0 {
18            system.version = parse_version_number(part);
19        } else if i == 1 {
20            system.system = part.to_string();
21        } else {
22            system.suffix.push(part.to_owned());
23        }
24    }
25    system
26}
27
28pub fn parse_version_number(string: &str) -> u32 {
29    let mut number: u32 = 0;
30    let numbers: Vec<&str> = string.split('.').collect();
31    #[allow(clippy::len_zero)]
32    if numbers.len() > 0 {
33        number += numbers[0].parse::<u32>().unwrap() * 10000
34    }
35    if numbers.len() > 1 {
36        number += numbers[1].parse::<u32>().unwrap() * 100
37    }
38    if numbers.len() > 2 {
39        number += numbers[2].parse::<u32>().unwrap()
40    }
41    number
42}
43
44#[cfg(test)]
45mod tests {
46    use super::*;
47
48    #[test]
49    fn test_0() {
50        assert_eq!(parse_version_number("5.1.10"), 50110);
51    }
52
53    #[test]
54    fn test_1() {
55        assert_eq!(parse_version_number("8.0.23"), 80023);
56    }
57
58    #[test]
59    fn test_2() {
60        assert_eq!(
61            parse_version_string("8.0.23-0ubuntu0.20.04.1"),
62            SystemInfo {
63                version: 80023,
64                system: "0ubuntu0.20.04.1".to_owned(),
65                suffix: vec![],
66            }
67        )
68    }
69
70    #[test]
71    fn test_3() {
72        assert_eq!(
73            parse_version_string("10.2.31-MariaDB"),
74            SystemInfo {
75                version: 100231,
76                system: "MariaDB".to_owned(),
77                suffix: vec![],
78            }
79        )
80    }
81
82    #[test]
83    fn test_4() {
84        assert_eq!(
85            parse_version_string("10.2.31-MariaDB-debug"),
86            SystemInfo {
87                version: 100231,
88                system: "MariaDB".to_owned(),
89                suffix: vec!["debug".to_owned()],
90            }
91        )
92    }
93}