Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

chore(query): round the results for decimal division #14109

Merged
merged 4 commits into from
Dec 21, 2023
Merged
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
19 changes: 11 additions & 8 deletions src/query/functions/src/scalars/decimal/arithmetic.rs
Original file line number Diff line number Diff line change
Expand Up @@ -85,21 +85,24 @@ macro_rules! binary_decimal {
let scale_a = $left.scale();
let scale_b = $right.scale();

let (scale_mul, scale_div) = if scale_b + $size.scale > scale_a {
(scale_b + $size.scale - scale_a, 0)
} else {
(0, scale_b + $size.scale - scale_a)
};

// Note: the result scale is always larger than the left scale
sundy-li marked this conversation as resolved.
Show resolved Hide resolved
let scale_mul = scale_b + $size.scale - scale_a;
let multiplier = T::e(scale_mul as u32);
let div = T::e(scale_div as u32);

let func = |a: T, b: T, result: &mut Vec<T>, ctx: &mut EvalContext| {
// We are using round div here which follow snowflake's behavior: https://docs.snowflake.com/sql-reference/operators-arithmetic
// For example:
// round_div(5, 2) --> 3
// round_div(-5, 2) --> -3
// round_div(5, -2) --> -3
// round_div(-5, -2) --> 3
if std::intrinsics::unlikely(b == zero) {
ctx.set_error(result.len(), "divided by zero");
result.push(one);
} else if a.is_negative() == b.is_negative() {
result.push((a * multiplier + b / 2).div(b));
} else {
result.push((a * multiplier).div(b) / div);
result.push((a * multiplier - b / 2).div(b));
}
};

Expand Down
18 changes: 9 additions & 9 deletions src/query/functions/tests/it/scalars/testdata/arithmetic.txt
Original file line number Diff line number Diff line change
Expand Up @@ -1142,7 +1142,7 @@ evaluation:
| Type | UInt32 | Decimal(10, 1) | Decimal(17, 6) |
| Domain | {10..=30} | {3.1..=188.8} | Unknown |
| Row 0 | 10 | 3.1 | 3.225806 |
| Row 1 | 20 | 33.5 | 0.597014 |
| Row 1 | 20 | 33.5 | 0.597015 |
| Row 2 | 30 | 188.8 | 0.158898 |
+--------+-----------+----------------+----------------+
evaluation (internal):
Expand All @@ -1151,7 +1151,7 @@ evaluation (internal):
+--------+--------------------------------------------+
| c | UInt32([10, 20, 30]) |
| e | Decimal128([3.1, 33.5, 188.8]) |
| Output | Decimal128([3.225806, 0.597014, 0.158898]) |
| Output | Decimal128([3.225806, 0.597015, 0.158898]) |
+--------+--------------------------------------------+


Expand Down Expand Up @@ -1187,17 +1187,17 @@ evaluation:
+--------+------------------+----------------+---------------------+
| Type | UInt8 NULL | Decimal(10, 1) | Decimal(10, 6) NULL |
| Domain | {0..=3} ∪ {NULL} | {3.1..=188.8} | Unknown |
| Row 0 | 1 | 3.1 | 0.322580 |
| Row 0 | 1 | 3.1 | 0.322581 |
| Row 1 | NULL | 33.5 | NULL |
| Row 2 | 3 | 188.8 | 0.015889 |
| Row 2 | 3 | 188.8 | 0.015890 |
+--------+------------------+----------------+---------------------+
evaluation (internal):
+--------+-----------------------------------------------------------------------------------------------+
| Column | Data |
+--------+-----------------------------------------------------------------------------------------------+
| d2 | NullableColumn { column: UInt8([1, 0, 3]), validity: [0b_____101] } |
| e | Decimal128([3.1, 33.5, 188.8]) |
| Output | NullableColumn { column: Decimal128([0.322580, 0.000000, 0.015889]), validity: [0b_____101] } |
| Output | NullableColumn { column: Decimal128([0.322581, 0.000000, 0.015890]), validity: [0b_____101] } |
+--------+-----------------------------------------------------------------------------------------------+


Expand All @@ -1212,15 +1212,15 @@ evaluation:
| Domain | {0..=3} ∪ {NULL} | {0.50..=12.34} | Unknown |
| Row 0 | 1 | 0.50 | 2.000000 |
| Row 1 | NULL | 0.92 | NULL |
| Row 2 | 3 | 12.34 | 0.243111 |
| Row 2 | 3 | 12.34 | 0.243112 |
+--------+------------------+----------------+---------------------+
evaluation (internal):
+--------+-----------------------------------------------------------------------------------------------+
| Column | Data |
+--------+-----------------------------------------------------------------------------------------------+
| d2 | NullableColumn { column: UInt8([1, 0, 3]), validity: [0b_____101] } |
| f | Decimal256([0.50, 0.92, 12.34]) |
| Output | NullableColumn { column: Decimal256([2.000000, 0.000000, 0.243111]), validity: [0b_____101] } |
| Output | NullableColumn { column: Decimal256([2.000000, 0.000000, 0.243112]), validity: [0b_____101] } |
+--------+-----------------------------------------------------------------------------------------------+


Expand All @@ -1234,7 +1234,7 @@ evaluation:
| Type | Decimal(10, 1) | Decimal(76, 2) | Decimal(39, 7) |
| Domain | {3.1..=188.8} | {0.50..=12.34} | Unknown |
| Row 0 | 3.1 | 0.50 | 6.2000000 |
| Row 1 | 33.5 | 0.92 | 36.4130434 |
| Row 1 | 33.5 | 0.92 | 36.4130435 |
| Row 2 | 188.8 | 12.34 | 15.2998379 |
+--------+----------------+----------------+----------------+
evaluation (internal):
Expand All @@ -1243,7 +1243,7 @@ evaluation (internal):
+--------+-------------------------------------------------+
| e | Decimal128([3.1, 33.5, 188.8]) |
| f | Decimal256([0.50, 0.92, 12.34]) |
| Output | Decimal256([6.2000000, 36.4130434, 15.2998379]) |
| Output | Decimal256([6.2000000, 36.4130435, 15.2998379]) |
+--------+-------------------------------------------------+


Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -235,14 +235,14 @@ SELECT CAST(4.56 AS DECIMAL(46, 2)) / CAST(1.23 AS DECIMAL(46, 2)) AS result;
3.70731707

query I
SELECT CAST(987654321.34 AS DECIMAL(20, 2)) / CAST(123456789.12 AS DECIMAL(20, 2)) AS result;
SELECT CAST(987654321.34 AS DECIMAL(20, 2)) / CAST(123456789.12 AS DECIMAL(20, 2)), CAST(-987654321.34 AS DECIMAL(20, 2)) / CAST(123456789.12 AS DECIMAL(20, 2)), CAST(-987654321.34 AS DECIMAL(20, 2)) / CAST(-123456789.12 AS DECIMAL(20, 2)), CAST(987654321.34 AS DECIMAL(20, 2)) / CAST(-123456789.12 AS DECIMAL(20, 2));
----
8.00000006
8.00000007 -8.00000007 8.00000007 -8.00000007

query I
SELECT CAST(987654321.34 AS DECIMAL(52, 2)) / CAST(123456789.12 AS DECIMAL(52, 2)) AS result;
----
8.00000006
8.00000007

query I
SELECT CAST(987654321.34 AS DECIMAL(20, 2)) / CAST(1.23 AS DECIMAL(6, 2)) AS result;
Expand Down
90 changes: 45 additions & 45 deletions tests/sqllogictests/suites/tpcds/materialized_cte.test
Original file line number Diff line number Diff line change
Expand Up @@ -188,7 +188,7 @@ AAAAAAAAALAAAAAA TN 0 85.0 25.24000000 0.00000000 3.53000000
AAAAAAAACCAAAAAA TN 0 40.0 90.50500000 365.38000000 23.32500000
AAAAAAAACDAAAAAA TN 0 22.666666666666668 167.21000000 189.36000000 123.85000000
AAAAAAAACFAAAAAA TN 0 93.0 99.48000000 0.00000000 38.79000000
AAAAAAAACIAAAAAA TN 0 44.0 96.88333333 0.00000000 66.72666666
AAAAAAAACIAAAAAA TN 0 44.0 96.88333333 0.00000000 66.72666667
AAAAAAAACJAAAAAA TN 0 23.0 103.96000000 0.00000000 35.17500000
AAAAAAAACLAAAAAA TN 0 1.0 99.21000000 0.00000000 23.81000000
AAAAAAAADBAAAAAA TN 0 2.0 59.54000000 0.00000000 57.75000000
Expand All @@ -197,16 +197,16 @@ AAAAAAAADHAAAAAA TN 0 54.0 72.46000000 0.00000000 23.18000000
AAAAAAAADKAAAAAA TN 0 57.0 116.65000000 0.00000000 116.65000000
AAAAAAAAEAAAAAAA TN 0 96.0 18.88000000 0.00000000 0.18000000
AAAAAAAAEBAAAAAA TN 0 89.0 72.02000000 198.64000000 3.60000000
AAAAAAAAEEAAAAAA TN 0 65.66666666666667 72.09666666 0.00000000 36.22000000
AAAAAAAAEEAAAAAA TN 0 65.66666666666667 72.09666667 0.00000000 36.22000000
AAAAAAAAEHAAAAAA TN 0 47.0 103.80500000 0.00000000 50.52500000
AAAAAAAAEJAAAAAA TN 0 41.5 74.63500000 148.83000000 21.26000000
AAAAAAAAEKAAAAAA TN 0 53.0 78.36000000 0.00000000 13.32000000
AAAAAAAAFCAAAAAA TN 0 58.0 31.99666666 0.80333333 8.70666666
AAAAAAAAFCAAAAAA TN 0 58.0 31.99666667 0.80333333 8.70666667
AAAAAAAAFIAAAAAA TN 0 61.5 106.53000000 0.00000000 38.92000000
AAAAAAAAGCAAAAAA TN 0 96.0 68.02000000 0.00000000 14.28000000
AAAAAAAAGHAAAAAA TN 0 89.0 68.05000000 499.29000000 7.48000000
AAAAAAAAHDAAAAAA TN 0 62.0 93.63000000 0.00000000 3.74000000
AAAAAAAAHJAAAAAA TN 0 76.33333333333333 88.60333333 471.82666666 40.75000000
AAAAAAAAHJAAAAAA TN 0 76.33333333333333 88.60333333 471.82666667 40.75000000
AAAAAAAAIAAAAAAA TN 0 63.0 89.88000000 0.00000000 70.10000000
AAAAAAAAICAAAAAA TN 0 9.0 84.66000000 0.00000000 11.85000000
AAAAAAAAIDAAAAAA TN 0 87.0 9.48000000 0.00000000 7.20000000
Expand All @@ -217,13 +217,13 @@ AAAAAAAAKAAAAAAA TN 0 56.0 64.04000000 0.00000000 61.47000000
AAAAAAAAKDAAAAAA TN 0 36.0 31.77000000 0.00000000 30.18000000
AAAAAAAALCAAAAAA TN 0 34.0 147.08000000 1912.65000000 125.01000000
AAAAAAAAMBAAAAAA TN 0 60.0 71.13000000 0.00000000 11.38000000
AAAAAAAAMCAAAAAA TN 0 55.666666666666664 38.22333333 436.18666666 21.22666666
AAAAAAAAMCAAAAAA TN 0 55.666666666666664 38.22333333 436.18666667 21.22666667
AAAAAAAAMEAAAAAA TN 0 55.5 150.41000000 0.00000000 107.43500000
AAAAAAAAMFAAAAAA TN 0 10.0 97.69000000 0.00000000 93.78000000
AAAAAAAAMHAAAAAA TN 0 48.0 59.96500000 0.00000000 15.91000000
AAAAAAAANAAAAAAA TN 0 65.5 70.54000000 0.00000000 68.42000000
AAAAAAAANDAAAAAA TN 0 88.0 162.72000000 0.00000000 60.20000000
AAAAAAAANGAAAAAA TN 0 27.666666666666668 92.24666666 201.94333333 78.62000000
AAAAAAAANGAAAAAA TN 0 27.666666666666668 92.24666667 201.94333333 78.62000000
AAAAAAAAOAAAAAAA TN 0 6.0 22.97000000 0.00000000 12.86000000
AAAAAAAAOCAAAAAA TN 0 76.0 50.88000000 0.00000000 30.01000000
AAAAAAAAODAAAAAA TN 0 26.0 100.08500000 0.00000000 73.23500000
Expand Down Expand Up @@ -297,7 +297,7 @@ ORDER BY i_item_id NULLS FIRST,
s_state NULLS FIRST
LIMIT 100;
----
NULL NULL 1 51.535714285714285 81.57047619 241.29547619 42.32321428
NULL NULL 1 51.535714285714285 81.57047619 241.29547619 42.32321429
AAAAAAAAACAAAAAA NULL 1 54.0 107.97000000 0.00000000 0.00000000
AAAAAAAAACAAAAAA TN 0 54.0 107.97000000 0.00000000 0.00000000
AAAAAAAAAEAAAAAA NULL 1 91.0 63.95000000 0.00000000 14.06000000
Expand All @@ -316,8 +316,8 @@ AAAAAAAACDAAAAAA NULL 1 22.666666666666668 167.21000000 189.36000000 123.8500000
AAAAAAAACDAAAAAA TN 0 22.666666666666668 167.21000000 189.36000000 123.85000000
AAAAAAAACFAAAAAA NULL 1 93.0 99.48000000 0.00000000 38.79000000
AAAAAAAACFAAAAAA TN 0 93.0 99.48000000 0.00000000 38.79000000
AAAAAAAACIAAAAAA NULL 1 44.0 96.88333333 0.00000000 66.72666666
AAAAAAAACIAAAAAA TN 0 44.0 96.88333333 0.00000000 66.72666666
AAAAAAAACIAAAAAA NULL 1 44.0 96.88333333 0.00000000 66.72666667
AAAAAAAACIAAAAAA TN 0 44.0 96.88333333 0.00000000 66.72666667
AAAAAAAACJAAAAAA NULL 1 23.0 103.96000000 0.00000000 35.17500000
AAAAAAAACJAAAAAA TN 0 23.0 103.96000000 0.00000000 35.17500000
AAAAAAAACLAAAAAA NULL 1 1.0 99.21000000 0.00000000 23.81000000
Expand All @@ -334,16 +334,16 @@ AAAAAAAAEAAAAAAA NULL 1 96.0 18.88000000 0.00000000 0.18000000
AAAAAAAAEAAAAAAA TN 0 96.0 18.88000000 0.00000000 0.18000000
AAAAAAAAEBAAAAAA NULL 1 89.0 72.02000000 198.64000000 3.60000000
AAAAAAAAEBAAAAAA TN 0 89.0 72.02000000 198.64000000 3.60000000
AAAAAAAAEEAAAAAA NULL 1 65.66666666666667 72.09666666 0.00000000 36.22000000
AAAAAAAAEEAAAAAA TN 0 65.66666666666667 72.09666666 0.00000000 36.22000000
AAAAAAAAEEAAAAAA NULL 1 65.66666666666667 72.09666667 0.00000000 36.22000000
AAAAAAAAEEAAAAAA TN 0 65.66666666666667 72.09666667 0.00000000 36.22000000
AAAAAAAAEHAAAAAA NULL 1 47.0 103.80500000 0.00000000 50.52500000
AAAAAAAAEHAAAAAA TN 0 47.0 103.80500000 0.00000000 50.52500000
AAAAAAAAEJAAAAAA NULL 1 41.5 74.63500000 148.83000000 21.26000000
AAAAAAAAEJAAAAAA TN 0 41.5 74.63500000 148.83000000 21.26000000
AAAAAAAAEKAAAAAA NULL 1 53.0 78.36000000 0.00000000 13.32000000
AAAAAAAAEKAAAAAA TN 0 53.0 78.36000000 0.00000000 13.32000000
AAAAAAAAFCAAAAAA NULL 1 58.0 31.99666666 0.80333333 8.70666666
AAAAAAAAFCAAAAAA TN 0 58.0 31.99666666 0.80333333 8.70666666
AAAAAAAAFCAAAAAA NULL 1 58.0 31.99666667 0.80333333 8.70666667
AAAAAAAAFCAAAAAA TN 0 58.0 31.99666667 0.80333333 8.70666667
AAAAAAAAFIAAAAAA NULL 1 61.5 106.53000000 0.00000000 38.92000000
AAAAAAAAFIAAAAAA TN 0 61.5 106.53000000 0.00000000 38.92000000
AAAAAAAAGCAAAAAA NULL 1 96.0 68.02000000 0.00000000 14.28000000
Expand All @@ -352,8 +352,8 @@ AAAAAAAAGHAAAAAA NULL 1 89.0 68.05000000 499.29000000 7.48000000
AAAAAAAAGHAAAAAA TN 0 89.0 68.05000000 499.29000000 7.48000000
AAAAAAAAHDAAAAAA NULL 1 62.0 93.63000000 0.00000000 3.74000000
AAAAAAAAHDAAAAAA TN 0 62.0 93.63000000 0.00000000 3.74000000
AAAAAAAAHJAAAAAA NULL 1 76.33333333333333 88.60333333 471.82666666 40.75000000
AAAAAAAAHJAAAAAA TN 0 76.33333333333333 88.60333333 471.82666666 40.75000000
AAAAAAAAHJAAAAAA NULL 1 76.33333333333333 88.60333333 471.82666667 40.75000000
AAAAAAAAHJAAAAAA TN 0 76.33333333333333 88.60333333 471.82666667 40.75000000
AAAAAAAAIAAAAAAA NULL 1 63.0 89.88000000 0.00000000 70.10000000
AAAAAAAAIAAAAAAA TN 0 63.0 89.88000000 0.00000000 70.10000000
AAAAAAAAICAAAAAA NULL 1 9.0 84.66000000 0.00000000 11.85000000
Expand All @@ -374,8 +374,8 @@ AAAAAAAALCAAAAAA NULL 1 34.0 147.08000000 1912.65000000 125.01000000
AAAAAAAALCAAAAAA TN 0 34.0 147.08000000 1912.65000000 125.01000000
AAAAAAAAMBAAAAAA NULL 1 60.0 71.13000000 0.00000000 11.38000000
AAAAAAAAMBAAAAAA TN 0 60.0 71.13000000 0.00000000 11.38000000
AAAAAAAAMCAAAAAA NULL 1 55.666666666666664 38.22333333 436.18666666 21.22666666
AAAAAAAAMCAAAAAA TN 0 55.666666666666664 38.22333333 436.18666666 21.22666666
AAAAAAAAMCAAAAAA NULL 1 55.666666666666664 38.22333333 436.18666667 21.22666667
AAAAAAAAMCAAAAAA TN 0 55.666666666666664 38.22333333 436.18666667 21.22666667
AAAAAAAAMEAAAAAA NULL 1 55.5 150.41000000 0.00000000 107.43500000
AAAAAAAAMEAAAAAA TN 0 55.5 150.41000000 0.00000000 107.43500000
AAAAAAAAMFAAAAAA NULL 1 10.0 97.69000000 0.00000000 93.78000000
Expand All @@ -386,8 +386,8 @@ AAAAAAAANAAAAAAA NULL 1 65.5 70.54000000 0.00000000 68.42000000
AAAAAAAANAAAAAAA TN 0 65.5 70.54000000 0.00000000 68.42000000
AAAAAAAANDAAAAAA NULL 1 88.0 162.72000000 0.00000000 60.20000000
AAAAAAAANDAAAAAA TN 0 88.0 162.72000000 0.00000000 60.20000000
AAAAAAAANGAAAAAA NULL 1 27.666666666666668 92.24666666 201.94333333 78.62000000
AAAAAAAANGAAAAAA TN 0 27.666666666666668 92.24666666 201.94333333 78.62000000
AAAAAAAANGAAAAAA NULL 1 27.666666666666668 92.24666667 201.94333333 78.62000000
AAAAAAAANGAAAAAA TN 0 27.666666666666668 92.24666667 201.94333333 78.62000000
AAAAAAAAOAAAAAAA NULL 1 6.0 22.97000000 0.00000000 12.86000000
AAAAAAAAOAAAAAAA TN 0 6.0 22.97000000 0.00000000 12.86000000
AAAAAAAAOCAAAAAA NULL 1 76.0 50.88000000 0.00000000 30.01000000
Expand Down Expand Up @@ -1048,63 +1048,63 @@ ORDER BY lochierarchy DESC NULLS FIRST,
LIMIT 100;
----
-0.430613524573 NULL NULL 2 1
-0.539846955887 Electronics NULL 1 1
-0.535121056889 Sports NULL 1 2
-0.474252822434 Men NULL 1 3
-0.435320469693 Music NULL 1 4
-0.539846955888 Electronics NULL 1 1
-0.535121056890 Sports NULL 1 2
-0.474252822435 Men NULL 1 3
-0.435320469694 Music NULL 1 4
-0.422314561478 Books NULL 1 5
-0.420998277520 Women NULL 1 6
-0.403514360939 Jewelry NULL 1 7
-0.356821428447 Children NULL 1 8
-0.403514360940 Jewelry NULL 1 7
-0.356821428448 Children NULL 1 8
-0.314648142539 Home NULL 1 9
-0.289802639400 Shoes NULL 1 10
-0.513324910568 Books sports 0 1
-0.513324910569 Books sports 0 1
-0.485395658723 Books fiction 0 2
-0.456069178991 Books self-help 0 3
-0.390536207986 Books reference 0 4
-0.456069178992 Books self-help 0 3
-0.390536207987 Books reference 0 4
-0.361388375025 Books arts 0 5
-0.294644974837 Books travel 0 6
-0.271740556571 Books business 0 7
-0.294644974838 Books travel 0 6
-0.271740556572 Books business 0 7
-0.451483367528 Children newborn 0 1
-0.395579858268 Children school-uniforms 0 2
-0.395579858269 Children school-uniforms 0 2
-0.283308037489 Children toddlers 0 3
-0.818900225495 Electronics monitors 0 1
-0.803203772642 Electronics memory 0 2
-0.601671839290 Electronics audio 0 3
-0.561754670184 Electronics stereo 0 4
-0.539295360265 Electronics musical 0 5
-0.500535076466 Electronics televisions 0 6
-0.485984869242 Electronics karoke 0 7
-0.539295360266 Electronics musical 0 5
-0.500535076467 Electronics televisions 0 6
-0.485984869243 Electronics karoke 0 7
-0.427238663642 Electronics dvd/vcr players 0 8
-0.373938894451 Electronics scanners 0 9
-0.453441805344 Home rugs 0 1
-0.453441805345 Home rugs 0 1
-0.426861349508 Home kids 0 2
-0.327256787408 Home decor 0 3
-0.231456207456 Home furniture 0 4
-0.231456207457 Home furniture 0 4
-0.223144558697 Home bedding 0 5
-0.552936914047 Jewelry costume 0 1
-0.479340075045 Jewelry jewelry boxes 0 2
-0.552936914048 Jewelry costume 0 1
-0.479340075046 Jewelry jewelry boxes 0 2
-0.477787939030 Jewelry consignment 0 3
-0.466880015534 Jewelry pendants 0 4
-0.453849812673 Jewelry estate 0 5
-0.453849812674 Jewelry estate 0 5
-0.409295229944 Jewelry diamonds 0 6
-0.395230036306 Jewelry semi-precious 0 7
-0.355619262239 Jewelry custom 0 8
-0.297142264334 Jewelry gold 0 9
-0.177338006085 Jewelry mens watch 0 10
-0.177338006086 Jewelry mens watch 0 10
-0.560892409081 Men sports-apparel 0 1
-0.455523452563 Men shirts 0 2
-0.449096601844 Men pants 0 3
-0.445111999489 Men accessories 0 4
-0.500281860802 Music pop 0 1
-0.449096601845 Men pants 0 3
-0.445111999490 Men accessories 0 4
-0.500281860803 Music pop 0 1
-0.430407608267 Music country 0 2
-0.359006402586 Music classical 0 3
-0.387787805905 Shoes mens 0 1
-0.261783565848 Shoes womens 0 2
-0.261783565849 Shoes womens 0 2
-0.740280536700 Sports fishing 0 1
-0.456764107705 Sports sailing 0 2
-0.325190591878 Sports guns 0 3
-0.466266877786 Women swimwear 0 1
-0.466266877787 Women swimwear 0 1
-0.398132007627 Women fragrances 0 2
-0.355443373145 Women maternity 0 3

Expand Down
Loading
Loading