On Sun, Aug 11, 2024, at 22:04, Joel Jacobson wrote: >> Attachments: >> * v4-0001-Extend-mul_var_short-to-5-and-6-digit-inputs.patch >> * v4-0002-Optimise-numeric-multiplication-using-base-NBASE-.patch > > I've reviewed and tested both patches and think they are ready to be > committed.
In addition, I've also tested reduced rscale specifically, due to what you wrote earlier: > 2). Attempt to fix the formulae incorporating maxdigits mentioned > above. This part really made my brain hurt, and I'm still not quite > sure that I've got it right. In particular, it needs double-checking > to ensure that it's not losing accuracy in the reduced-rscale case. To test if there are any differences that actually matter in the result, I patched mul_var to log what combinations that occur when running the test suite: ``` if (rscale != var1->dscale + var2->dscale) { printf("NUMERIC_REDUCED_RSCALE %d,%d,%d,%d,%d\n", var1ndigits, var2ndigits, var1->dscale, var2->dscale, rscale - (var1->dscale + var2->dscale)); } ``` I also added a SQL-callable numeric_mul_rscale(var1, var2, rscale_adjustment) function, to be able to check for differences for the reduced rscale combinations. I then ran the test suite against my db and extracted the seen combinations: ``` make installcheck grep -E "^NUMERIC_REDUCED_RSCALE \d+,\d+,\d+,\d+,-\d+$" logfile | sort -u | awk '{print $2}' > plausible_rscale_adjustments.csv ``` This test didn't produce any differences between HEAD and the two patches applied. % psql -f test-mul_var-verify.sql CREATE TABLE COPY 1413 var1ndigits | var2ndigits | var1dscale | var2dscale | rscale_adjustment | var1 | var2 | expected | numeric_mul_rscale -------------+-------------+------------+------------+-------------------+------+------+----------+-------------------- (0 rows) Attaching patch as .txt to not confuse cfbot. Regards, Joel
diff --git a/src/backend/utils/adt/numeric.c b/src/backend/utils/adt/numeric.c index d0f0923710..94752fc343 100644 --- a/src/backend/utils/adt/numeric.c +++ b/src/backend/utils/adt/numeric.c @@ -3016,6 +3016,25 @@ numeric_mul(PG_FUNCTION_ARGS) } +/* + * numeric_mul_rscale() - + * + * Calculate the product of two numerics with reduced rscale. + */ +Datum +numeric_mul_rscale(PG_FUNCTION_ARGS) +{ + Numeric num1 = PG_GETARG_NUMERIC(0); + Numeric num2 = PG_GETARG_NUMERIC(1); + int rscale_adjustment = PG_GETARG_INT32(2); + Numeric res; + + res = numeric_mul_rscale_opt_error(num1, num2, NULL, rscale_adjustment); + + PG_RETURN_NUMERIC(res); +} + + /* * numeric_mul_opt_error() - * @@ -3119,6 +3138,108 @@ numeric_mul_opt_error(Numeric num1, Numeric num2, bool *have_error) } +/* + * numeric_mul_rscale_opt_error() - + * + * Internal version of numeric_mul_rscale(). If "*have_error" flag is provided, + * on error it's set to true, NULL returned. This is helpful when caller + * need to handle errors by itself. + */ +Numeric +numeric_mul_rscale_opt_error(Numeric num1, Numeric num2, bool *have_error, int rscale_adjustment) +{ + NumericVar arg1; + NumericVar arg2; + NumericVar result; + Numeric res; + + /* + * Handle NaN and infinities + */ + if (NUMERIC_IS_SPECIAL(num1) || NUMERIC_IS_SPECIAL(num2)) + { + if (NUMERIC_IS_NAN(num1) || NUMERIC_IS_NAN(num2)) + return make_result(&const_nan); + if (NUMERIC_IS_PINF(num1)) + { + switch (numeric_sign_internal(num2)) + { + case 0: + return make_result(&const_nan); /* Inf * 0 */ + case 1: + return make_result(&const_pinf); + case -1: + return make_result(&const_ninf); + } + Assert(false); + } + if (NUMERIC_IS_NINF(num1)) + { + switch (numeric_sign_internal(num2)) + { + case 0: + return make_result(&const_nan); /* -Inf * 0 */ + case 1: + return make_result(&const_ninf); + case -1: + return make_result(&const_pinf); + } + Assert(false); + } + /* by here, num1 must be finite, so num2 is not */ + if (NUMERIC_IS_PINF(num2)) + { + switch (numeric_sign_internal(num1)) + { + case 0: + return make_result(&const_nan); /* 0 * Inf */ + case 1: + return make_result(&const_pinf); + case -1: + return make_result(&const_ninf); + } + Assert(false); + } + Assert(NUMERIC_IS_NINF(num2)); + switch (numeric_sign_internal(num1)) + { + case 0: + return make_result(&const_nan); /* 0 * -Inf */ + case 1: + return make_result(&const_ninf); + case -1: + return make_result(&const_pinf); + } + Assert(false); + } + + /* + * Unpack the values, let mul_var() compute the result and return it. + * Unlike add_var() and sub_var(), mul_var() will round its result. In the + * case of numeric_mul(), which is invoked for the * operator on numerics, + * we request exact representation for the product (rscale = sum(dscale of + * arg1, dscale of arg2)). If the exact result has more digits after the + * decimal point than can be stored in a numeric, we round it. Rounding + * after computing the exact result ensures that the final result is + * correctly rounded (rounding in mul_var() using a truncated product + * would not guarantee this). + */ + init_var_from_num(num1, &arg1); + init_var_from_num(num2, &arg2); + + init_var(&result); + mul_var(&arg1, &arg2, &result, arg1.dscale + arg2.dscale + rscale_adjustment); + + if (result.dscale > NUMERIC_DSCALE_MAX) + round_var(&result, NUMERIC_DSCALE_MAX); + + res = make_result_opt_error(&result, have_error); + + free_var(&result); + + return res; +} + /* * numeric_div() - * @@ -8719,6 +8840,11 @@ mul_var(const NumericVar *var1, const NumericVar *var2, NumericVar *result, return; } + if (rscale != var1->dscale + var2->dscale) + { + printf("NUMERIC_REDUCED_RSCALE %d,%d,%d,%d,%d\n", var1ndigits, var2ndigits, var1->dscale, var2->dscale, rscale - (var1->dscale + var2->dscale)); + } + /* * If var1 has 1-4 digits and the exact result was requested, delegate to * mul_var_short() which uses a faster direct multiplication algorithm. diff --git a/src/include/catalog/pg_proc.dat b/src/include/catalog/pg_proc.dat index d36f6001bb..a400ff2875 100644 --- a/src/include/catalog/pg_proc.dat +++ b/src/include/catalog/pg_proc.dat @@ -4498,6 +4498,9 @@ { oid => '1726', proname => 'numeric_mul', prorettype => 'numeric', proargtypes => 'numeric numeric', prosrc => 'numeric_mul' }, +{ oid => '8000', + proname => 'numeric_mul_rscale', prorettype => 'numeric', + proargtypes => 'numeric numeric int4', prosrc => 'numeric_mul_rscale' }, { oid => '1727', proname => 'numeric_div', prorettype => 'numeric', proargtypes => 'numeric numeric', prosrc => 'numeric_div' }, diff --git a/src/include/utils/numeric.h b/src/include/utils/numeric.h index 43c75c436f..76794970d1 100644 --- a/src/include/utils/numeric.h +++ b/src/include/utils/numeric.h @@ -97,6 +97,8 @@ extern Numeric numeric_sub_opt_error(Numeric num1, Numeric num2, bool *have_error); extern Numeric numeric_mul_opt_error(Numeric num1, Numeric num2, bool *have_error); +extern Numeric numeric_mul_rscale_opt_error(Numeric num1, Numeric num2, + bool *have_error, int rscale_adjustment); extern Numeric numeric_div_opt_error(Numeric num1, Numeric num2, bool *have_error); extern Numeric numeric_mod_opt_error(Numeric num1, Numeric num2,
1,1,11,1,-1 1,1,11,2,-2 1,1,11,3,-3 1,1,11,4,-8 1,1,13,1,-1 1,1,14,2,-2 1,1,15,3,-3 1,1,16,4,-8 1,1,32,30,-16 1,1,32,31,-17 1,1,32,32,-18 1,1,46,46,-46 1,1,8,8,-1 1,1,8,8,-2 1,1,8,8,-3 1,1,8,8,-4 1,1,8,8,-5 1,10,28,38,-38 1,12,0,46,-11 1,13,0,51,-9 1,13,51,51,-51 1,14,0,57,-9 1,17,0,67,-9 1,18,62,72,-72 1,2,26,8,-8 1,2,80,77,-77 1,25,0,97,-11 1,27,0,108,-11 1,27,108,108,-108 1,29,0,114,-11 1,29,0,114,-9 1,3,0,1016,-8 1,3,0,1072,-8 1,3,28,17,-17 1,3,68,17,-17 1,4,0,26,-8 1,4,26,26,-26 1,4,27,15,-15 1,4,28,15,-15 1,4,7,19,-19 1,5,0,17,-9 1,5,0,18,-10 1,5,17,17,-17 1,5,18,18,-18 1,5,7,36,-36 1,53,0,209,-9 1,53,0,210,-10 1,54,211,218,-218 1,55,0,218,-9 1,57,0,226,-9 1,57,0,228,-9 1,58,0,232,-9 1,58,220,229,-229 1,58,222,231,-231 1,58,232,232,-232 1,59,0,234,-9 1,59,0,235,-9 1,59,226,235,-235 1,59,228,237,-237 1,59,235,235,-235 1,6,0,25,-10 1,6,0,25,-9 1,6,28,28,-28 1,7,0,25,-10 1,7,0,25,-9 1,7,0,26,-10 1,7,0,26,-11 1,7,0,28,-8 1,7,26,26,-26 1,8,0,33,-9 1,8,26,33,-33 1,8,27,34,-34 1,8,33,33,-33 1,9,0,33,-10 1,9,0,33,-9 1,9,0,34,-10 1,9,0,34,-11 1,9,0,34,-9 1,9,0,35,-9 1,9,0,36,-8 1,9,0,37,-8 1,9,27,36,-36 1,9,33,33,-33 1,9,34,34,-34 1,9,35,35,-35 10,10,29,29,-37 10,10,36,36,-44 10,10,37,37,-37 10,10,38,38,-39 10,10,38,38,-48 10,10,61,61,-37 10,12,46,46,-46 10,13,51,51,-51 10,15,57,57,-57 10,17,67,67,-67 10,18,62,72,-72 10,25,97,97,-97 10,27,108,108,-108 10,29,114,114,-114 10,53,209,209,-209 10,53,210,210,-210 10,54,211,218,-218 10,55,218,218,-218 10,57,226,226,-226 10,57,228,228,-228 10,58,220,229,-229 10,58,222,231,-231 10,58,232,232,-232 10,59,226,235,-235 10,59,228,237,-237 10,59,234,234,-234 10,59,235,235,-235 10,60,229,239,-239 11,11,45,45,-37 11,11,53,45,-37 11,12,46,46,-46 11,13,51,51,-51 11,15,57,57,-57 11,17,67,67,-67 11,18,62,72,-72 11,25,97,97,-97 11,27,108,108,-108 11,29,114,114,-114 11,53,209,209,-209 11,53,210,210,-210 11,54,211,218,-218 11,55,218,218,-218 11,57,226,226,-226 11,57,228,228,-228 11,58,220,229,-229 11,58,222,231,-231 11,58,232,232,-232 11,59,226,235,-235 11,59,228,237,-237 11,59,234,234,-234 11,59,235,235,-235 11,60,229,239,-239 12,12,34,34,-42 12,12,45,45,-45 12,12,46,46,-46 12,13,38,26,-46 12,13,51,51,-51 12,15,57,57,-57 12,17,67,67,-67 12,18,62,72,-72 12,25,97,97,-97 12,27,108,108,-108 12,29,114,114,-114 12,53,209,209,-209 12,53,210,210,-210 12,54,211,218,-218 12,55,218,218,-218 12,57,226,226,-226 12,57,228,228,-228 12,58,220,229,-229 12,58,222,231,-231 12,58,232,232,-232 12,59,226,235,-235 12,59,228,237,-237 12,59,234,234,-234 12,59,235,235,-235 12,60,229,239,-239 13,13,40,40,-48 13,13,42,42,-50 13,13,46,46,-46 13,13,51,51,-51 13,15,57,57,-57 13,17,67,67,-67 13,18,62,72,-72 13,25,97,97,-97 13,27,108,108,-108 13,29,114,114,-114 13,53,209,209,-209 13,53,210,210,-210 13,54,211,218,-218 13,55,218,218,-218 13,57,226,226,-226 13,57,228,228,-228 13,58,220,229,-229 13,58,222,231,-231 13,58,232,232,-232 13,59,226,235,-235 13,59,228,237,-237 13,59,234,234,-234 13,59,235,235,-235 13,60,229,239,-239 136,136,354,354,-538 136,137,490,450,-542 137,137,170,398,-546 137,137,450,450,-546 137,137,498,498,-546 137,137,522,522,-546 14,15,57,57,-57 14,17,67,67,-67 14,18,62,72,-72 14,25,97,97,-97 14,27,108,108,-108 14,29,114,114,-114 14,53,209,209,-209 14,53,210,210,-210 14,54,211,218,-218 14,55,218,218,-218 14,57,226,226,-226 14,57,228,228,-228 14,58,220,229,-229 14,58,222,231,-231 14,58,232,232,-232 14,59,226,235,-235 14,59,228,237,-237 14,59,234,234,-234 14,59,235,235,-235 14,60,229,239,-239 140,140,490,490,-554 140,140,522,522,-554 140,140,538,538,-554 140,140,546,546,-554 140,140,553,553,-552 140,140,554,554,-554 141,141,290,290,-562 141,141,426,426,-562 141,141,554,554,-562 15,15,57,57,-57 15,17,67,67,-67 15,18,62,72,-72 15,25,97,97,-97 15,27,108,108,-108 15,29,114,114,-114 15,53,209,209,-209 15,53,210,210,-210 15,54,211,218,-218 15,55,218,218,-218 15,57,226,226,-226 15,57,228,228,-228 15,58,220,229,-229 15,58,222,231,-231 15,58,232,232,-232 15,59,226,235,-235 15,59,228,237,-237 15,59,234,234,-234 15,59,235,235,-235 15,60,229,239,-239 16,17,67,67,-67 16,25,97,97,-97 16,27,108,108,-108 16,29,114,114,-114 16,53,209,209,-209 16,53,210,210,-210 16,54,211,218,-218 16,55,218,218,-218 16,57,226,226,-226 16,57,228,228,-228 16,58,220,229,-229 16,58,222,231,-231 16,58,232,232,-232 16,59,226,235,-235 16,59,228,237,-237 16,59,234,234,-234 16,59,235,235,-235 17,17,39,39,-63 17,17,63,63,-63 17,17,67,67,-67 17,25,97,97,-97 17,27,108,108,-108 17,29,114,114,-114 17,53,209,209,-209 17,53,210,210,-210 17,54,211,218,-218 17,55,218,218,-218 17,57,226,226,-226 17,57,228,228,-228 17,58,220,229,-229 17,58,222,231,-231 17,58,232,232,-232 17,59,226,235,-235 17,59,228,237,-237 17,59,234,234,-234 17,59,235,235,-235 17,60,229,239,-239 18,18,1082,1082,-2086 18,18,55,55,-71 18,18,63,63,-71 18,18,68,68,-67 18,18,69,69,-69 18,18,72,72,-82 18,25,97,97,-97 18,27,108,108,-108 18,29,114,114,-114 18,53,209,209,-209 18,53,210,210,-210 18,54,211,218,-218 18,55,218,218,-218 18,57,226,226,-226 18,57,228,228,-228 18,58,220,229,-229 18,58,222,231,-231 18,58,232,232,-232 18,59,226,235,-235 18,59,228,237,-237 18,59,234,234,-234 18,59,235,235,-235 18,60,229,239,-239 19,19,102,102,-70 19,19,190,190,-70 19,19,310,310,-70 19,19,45,45,-69 19,19,69,69,-69 19,19,72,72,-81 19,19,78,78,-70 19,19,86,86,-70 19,25,97,97,-97 19,27,108,108,-108 19,29,114,114,-114 19,53,210,210,-210 19,54,211,218,-218 19,55,218,218,-218 19,57,226,226,-226 19,57,228,228,-228 19,58,220,229,-229 19,58,222,231,-231 19,58,232,232,-232 19,59,226,235,-235 19,59,228,237,-237 19,59,234,234,-234 19,59,235,235,-235 19,60,229,239,-239 2,10,28,38,-38 2,10,77,80,-77 2,11,77,80,-77 2,12,46,46,-46 2,12,77,80,-77 2,13,51,51,-51 2,13,77,80,-77 2,14,77,80,-77 2,15,57,57,-57 2,15,77,80,-77 2,16,1,58,-1 2,16,77,80,-77 2,17,67,67,-67 2,17,77,80,-77 2,18,62,72,-72 2,18,77,80,-77 2,19,77,80,-77 2,2,26,8,-8 2,2,77,77,-74 2,2,8,1,-1 2,2,80,77,-77 2,25,97,97,-97 2,27,108,108,-108 2,29,114,114,-114 2,3,1,8,-1 2,3,28,17,-17 2,3,68,17,-17 2,3,77,80,-77 2,3,8,26,-8 2,4,27,15,-15 2,4,28,15,-15 2,4,77,80,-77 2,4,8,26,-8 2,5,17,17,-17 2,5,18,18,-18 2,5,553,21,-21 2,5,77,80,-77 2,5,8,26,-8 2,53,209,209,-209 2,53,210,210,-210 2,54,211,218,-218 2,55,218,218,-218 2,57,226,226,-226 2,57,228,228,-228 2,58,220,229,-229 2,58,222,231,-231 2,58,232,232,-232 2,59,226,235,-235 2,59,228,237,-237 2,59,234,234,-234 2,59,235,235,-235 2,6,1,24,-1 2,6,25,25,-25 2,6,77,80,-77 2,6,8,26,-8 2,60,229,239,-239 2,7,1,24,-1 2,7,25,25,-25 2,7,26,26,-26 2,7,69,1082,-1082 2,7,77,80,-77 2,8,26,33,-33 2,8,27,34,-34 2,8,33,33,-33 2,8,36,36,-36 2,8,37,37,-37 2,8,77,80,-77 2,9,27,36,-36 2,9,33,33,-33 2,9,34,34,-34 2,9,35,35,-35 2,9,77,80,-77 20,20,134,134,-78 20,20,550,550,-78 20,20,61,61,-77 20,20,69,69,-77 20,20,78,78,-78 20,25,97,97,-97 20,27,108,108,-108 20,29,114,114,-114 20,53,209,209,-209 20,53,210,210,-210 20,54,211,218,-218 20,55,218,218,-218 20,57,226,226,-226 20,57,228,228,-228 20,58,220,229,-229 20,58,222,231,-231 20,58,232,232,-232 20,59,226,235,-235 20,59,228,237,-237 20,59,234,234,-234 20,59,235,235,-235 20,60,229,239,-239 21,21,80,80,-79 21,21,81,81,-81 21,25,97,97,-97 21,27,108,108,-108 21,29,114,114,-114 21,53,209,209,-209 21,53,210,210,-210 21,54,211,218,-218 21,55,218,218,-218 21,57,226,226,-226 21,57,228,228,-228 21,58,220,229,-229 21,58,222,231,-231 21,58,232,232,-232 21,59,226,235,-235 21,59,228,237,-237 21,59,234,234,-234 21,59,235,235,-235 21,60,229,239,-239 22,22,81,81,-81 22,25,97,97,-97 22,27,108,108,-108 22,29,114,114,-114 22,53,209,209,-209 22,53,210,210,-210 22,54,211,218,-218 22,55,218,218,-218 22,57,226,226,-226 22,57,228,228,-228 22,58,220,229,-229 22,58,222,231,-231 22,58,232,232,-232 22,59,226,235,-235 22,59,228,237,-237 22,59,234,234,-234 22,59,235,235,-235 22,60,229,239,-239 23,25,97,97,-97 23,27,108,108,-108 23,29,114,114,-114 23,53,209,209,-209 23,53,210,210,-210 23,54,211,218,-218 23,55,218,218,-218 23,57,226,226,-226 23,57,228,228,-228 23,58,220,229,-229 23,58,222,231,-231 23,58,232,232,-232 23,59,226,235,-235 23,59,228,237,-237 23,59,234,234,-234 23,59,235,235,-235 23,60,229,239,-239 24,25,97,97,-97 24,27,108,108,-108 24,29,114,114,-114 24,53,209,209,-209 24,53,210,210,-210 24,54,211,218,-218 24,55,218,218,-218 24,57,226,226,-226 24,57,228,228,-228 24,58,220,229,-229 24,58,222,231,-231 24,58,232,232,-232 24,59,226,235,-235 24,59,228,237,-237 24,59,234,234,-234 24,59,235,235,-235 24,60,229,239,-239 25,25,97,97,-97 25,27,108,108,-108 25,29,114,114,-114 25,53,210,210,-210 25,54,211,218,-218 25,57,226,226,-226 25,57,228,228,-228 25,58,220,229,-229 25,58,222,231,-231 25,58,232,232,-232 25,59,226,235,-235 25,59,228,237,-237 25,59,234,234,-234 25,59,235,235,-235 25,60,229,239,-239 26,27,108,108,-108 26,29,114,114,-114 26,53,209,209,-209 26,53,210,210,-210 26,54,211,218,-218 26,55,218,218,-218 26,57,228,228,-228 26,58,220,229,-229 26,58,222,231,-231 26,58,232,232,-232 26,59,226,235,-235 26,59,228,237,-237 26,59,234,234,-234 26,59,235,235,-235 26,60,229,239,-239 27,27,108,108,-108 27,29,114,114,-114 27,53,209,209,-209 27,53,210,210,-210 27,54,211,218,-218 27,55,218,218,-218 27,57,226,226,-226 27,57,228,228,-228 27,58,220,229,-229 27,58,222,231,-231 27,58,232,232,-232 27,59,226,235,-235 27,59,228,237,-237 27,59,234,234,-234 27,59,235,235,-235 27,60,229,239,-239 28,29,114,114,-114 28,53,209,209,-209 28,53,210,210,-210 28,54,211,218,-218 28,55,218,218,-218 28,57,226,226,-226 28,57,228,228,-228 28,58,220,229,-229 28,58,222,231,-231 28,58,232,232,-232 28,59,226,235,-235 28,59,228,237,-237 28,59,234,234,-234 28,59,235,235,-235 28,60,229,239,-239 29,29,114,114,-114 29,53,209,209,-209 29,53,210,210,-210 29,54,211,218,-218 29,55,218,218,-218 29,57,226,226,-226 29,57,228,228,-228 29,58,220,229,-229 29,58,222,231,-231 29,58,232,232,-232 29,59,226,235,-235 29,59,228,237,-237 29,59,234,234,-234 29,59,235,235,-235 3,10,17,68,-17 3,10,28,38,-38 3,11,17,68,-17 3,12,17,68,-17 3,12,46,46,-46 3,13,17,68,-17 3,13,51,51,-51 3,14,17,68,-17 3,15,57,57,-57 3,17,67,67,-67 3,18,62,72,-72 3,25,97,97,-97 3,27,108,108,-108 3,29,114,114,-114 3,3,1016,1016,-1016 3,3,1072,1072,-1072 3,3,1096,1096,-8 3,3,136,136,-8 3,3,144,144,-8 3,3,16,16,-8 3,3,17,17,-6 3,3,24,24,-8 3,3,264,264,-8 3,3,28,17,-17 3,3,280,280,-8 3,3,40,40,-8 3,3,552,552,-8 3,3,68,17,-17 3,3,72,72,-8 3,4,17,28,-17 3,4,17,68,-17 3,4,27,15,-15 3,4,28,15,-15 3,5,17,17,-17 3,5,17,28,-17 3,5,17,68,-17 3,5,18,18,-18 3,5,553,21,-21 3,51,8,200,-200 3,53,210,210,-210 3,54,211,218,-218 3,55,218,218,-218 3,57,226,226,-226 3,57,228,228,-228 3,58,220,229,-229 3,58,222,231,-231 3,58,232,232,-232 3,59,226,235,-235 3,59,228,237,-237 3,59,234,234,-234 3,59,235,235,-235 3,6,17,28,-17 3,6,17,68,-17 3,6,25,25,-25 3,6,28,28,-28 3,60,229,239,-239 3,7,17,68,-17 3,7,25,25,-25 3,7,26,26,-26 3,7,69,1082,-1082 3,8,17,68,-17 3,8,26,33,-33 3,8,27,34,-34 3,8,33,33,-33 3,9,17,68,-17 3,9,27,36,-36 3,9,33,33,-33 3,9,34,34,-34 3,9,35,35,-35 30,53,209,209,-209 30,53,210,210,-210 30,54,211,218,-218 30,55,218,218,-218 30,57,226,226,-226 30,57,228,228,-228 30,58,220,229,-229 30,58,222,231,-231 30,58,232,232,-232 30,59,226,235,-235 30,59,228,237,-237 30,59,234,234,-234 30,59,235,235,-235 30,60,229,239,-239 31,53,209,209,-209 31,53,210,210,-210 31,54,211,218,-218 31,55,218,218,-218 31,57,226,226,-226 31,57,228,228,-228 31,58,220,229,-229 31,58,222,231,-231 31,58,232,232,-232 31,59,226,235,-235 31,59,228,237,-237 31,59,234,234,-234 31,59,235,235,-235 31,60,229,239,-239 32,53,209,209,-209 32,53,210,210,-210 32,54,211,218,-218 32,55,218,218,-218 32,57,226,226,-226 32,57,228,228,-228 32,58,220,229,-229 32,58,222,231,-231 32,58,232,232,-232 32,59,226,235,-235 32,59,228,237,-237 32,59,234,234,-234 32,59,235,235,-235 32,60,229,239,-239 33,53,209,209,-209 33,53,210,210,-210 33,54,211,218,-218 33,55,218,218,-218 33,57,226,226,-226 33,57,228,228,-228 33,58,220,229,-229 33,58,222,231,-231 33,58,232,232,-232 33,59,226,235,-235 33,59,228,237,-237 33,59,234,234,-234 33,59,235,235,-235 33,60,229,239,-239 34,53,209,209,-209 34,53,210,210,-210 34,54,211,218,-218 34,55,218,218,-218 34,57,226,226,-226 34,57,228,228,-228 34,58,220,229,-229 34,58,222,231,-231 34,58,232,232,-232 34,59,226,235,-235 34,59,228,237,-237 34,59,234,234,-234 34,59,235,235,-235 34,60,229,239,-239 35,53,209,209,-209 35,53,210,210,-210 35,54,211,218,-218 35,57,226,226,-226 35,57,228,228,-228 35,58,220,229,-229 35,58,222,231,-231 35,58,232,232,-232 35,59,226,235,-235 35,59,228,237,-237 35,59,234,234,-234 35,59,235,235,-235 35,60,229,239,-239 36,53,209,209,-209 36,53,210,210,-210 36,54,211,218,-218 36,55,218,218,-218 36,57,226,226,-226 36,57,228,228,-228 36,58,220,229,-229 36,58,222,231,-231 36,58,232,232,-232 36,59,228,237,-237 36,59,234,234,-234 36,59,235,235,-235 36,60,229,239,-239 37,137,138,498,-146 37,53,209,209,-209 37,53,210,210,-210 37,54,211,218,-218 37,55,218,218,-218 37,57,226,226,-226 37,57,228,228,-228 37,58,220,229,-229 37,58,222,231,-231 37,58,232,232,-232 37,59,226,235,-235 37,59,228,237,-237 37,59,234,234,-234 37,59,235,235,-235 37,60,229,239,-239 38,53,209,209,-209 38,53,210,210,-210 38,54,211,218,-218 38,55,218,218,-218 38,57,226,226,-226 38,57,228,228,-228 38,58,220,229,-229 38,58,222,231,-231 38,58,232,232,-232 38,59,226,235,-235 38,59,228,237,-237 38,59,234,234,-234 38,59,235,235,-235 38,60,229,239,-239 39,53,209,209,-209 39,53,210,210,-210 39,54,211,218,-218 39,55,218,218,-218 39,57,226,226,-226 39,57,228,228,-228 39,58,220,229,-229 39,58,222,231,-231 39,58,232,232,-232 39,59,226,235,-235 39,59,228,237,-237 39,59,234,234,-234 39,59,235,235,-235 39,60,229,239,-239 4,10,28,38,-38 4,12,46,46,-46 4,13,51,51,-51 4,13,9,32,-9 4,15,57,57,-57 4,17,67,67,-67 4,18,62,72,-72 4,25,97,97,-97 4,27,108,108,-108 4,29,114,114,-114 4,4,15,15,-2 4,4,15,15,-3 4,4,16,16,-16 4,4,19,19,-22 4,4,19,19,-31 4,4,24,24,-16 4,4,26,26,-26 4,4,27,15,-15 4,4,28,15,-15 4,4,32,32,-16 4,4,48,48,-16 4,4,520,520,-16 4,4,80,80,-16 4,5,15,27,-15 4,5,15,28,-15 4,5,17,17,-17 4,5,18,18,-18 4,5,553,21,-21 4,53,209,209,-209 4,53,210,210,-210 4,54,211,218,-218 4,55,218,218,-218 4,57,226,226,-226 4,57,228,228,-228 4,58,220,229,-229 4,58,222,231,-231 4,58,232,232,-232 4,59,226,235,-235 4,59,228,237,-237 4,59,234,234,-234 4,59,235,235,-235 4,6,15,27,-15 4,6,15,28,-15 4,6,25,25,-25 4,60,229,239,-239 4,7,25,25,-25 4,7,26,26,-26 4,7,69,1082,-1082 4,8,26,33,-33 4,8,27,34,-34 4,8,33,33,-33 4,8,36,36,-36 4,8,37,37,-37 4,9,27,36,-36 4,9,33,33,-33 4,9,34,34,-34 4,9,35,35,-35 40,53,209,209,-209 40,53,210,210,-210 40,54,211,218,-218 40,55,218,218,-218 40,57,226,226,-226 40,57,228,228,-228 40,58,220,229,-229 40,58,222,231,-231 40,58,232,232,-232 40,59,226,235,-235 40,59,228,237,-237 40,59,234,234,-234 40,59,235,235,-235 40,60,229,239,-239 41,53,209,209,-209 41,53,210,210,-210 41,54,211,218,-218 41,55,218,218,-218 41,57,226,226,-226 41,57,228,228,-228 41,58,220,229,-229 41,58,222,231,-231 41,58,232,232,-232 41,59,226,235,-235 41,59,228,237,-237 41,59,234,234,-234 41,59,235,235,-235 41,60,229,239,-239 42,53,209,209,-209 42,53,210,210,-210 42,54,211,218,-218 42,55,218,218,-218 42,57,226,226,-226 42,57,228,228,-228 42,58,220,229,-229 42,58,222,231,-231 42,58,232,232,-232 42,59,226,235,-235 42,59,228,237,-237 42,59,234,234,-234 42,59,235,235,-235 42,60,229,239,-239 43,53,209,209,-209 43,53,210,210,-210 43,54,211,218,-218 43,55,218,218,-218 43,57,226,226,-226 43,57,228,228,-228 43,58,220,229,-229 43,58,222,231,-231 43,58,232,232,-232 43,59,226,235,-235 43,59,228,237,-237 43,59,234,234,-234 43,59,235,235,-235 43,60,229,239,-239 44,53,209,209,-209 44,53,210,210,-210 44,54,211,218,-218 44,55,218,218,-218 44,57,228,228,-228 44,58,220,229,-229 44,58,222,231,-231 44,58,232,232,-232 44,59,226,235,-235 44,59,228,237,-237 44,59,234,234,-234 44,59,235,235,-235 44,60,229,239,-239 45,53,209,209,-209 45,53,210,210,-210 45,54,211,218,-218 45,55,218,218,-218 45,57,226,226,-226 45,57,228,228,-228 45,58,220,229,-229 45,58,222,231,-231 45,58,232,232,-232 45,59,226,235,-235 45,59,228,237,-237 45,59,234,234,-234 45,59,235,235,-235 45,60,229,239,-239 46,53,209,209,-209 46,53,210,210,-210 46,54,211,218,-218 46,55,218,218,-218 46,57,226,226,-226 46,57,228,228,-228 46,58,220,229,-229 46,58,222,231,-231 46,58,232,232,-232 46,59,226,235,-235 46,59,228,237,-237 46,59,234,234,-234 46,59,235,235,-235 46,60,229,239,-239 47,53,209,209,-209 47,53,210,210,-210 47,54,211,218,-218 47,55,218,218,-218 47,57,226,226,-226 47,57,228,228,-228 47,58,220,229,-229 47,58,222,231,-231 47,58,232,232,-232 47,59,226,235,-235 47,59,228,237,-237 47,59,234,234,-234 47,59,235,235,-235 47,60,229,239,-239 48,53,209,209,-209 48,53,210,210,-210 48,54,211,218,-218 48,55,218,218,-218 48,57,226,226,-226 48,57,228,228,-228 48,58,220,229,-229 48,58,222,231,-231 48,58,232,232,-232 48,59,226,235,-235 48,59,228,237,-237 48,59,234,234,-234 48,59,235,235,-235 48,60,229,239,-239 49,53,209,209,-209 49,53,210,210,-210 49,54,211,218,-218 49,55,218,218,-218 49,57,226,226,-226 49,57,228,228,-228 49,58,220,229,-229 49,58,222,231,-231 49,58,232,232,-232 49,59,226,235,-235 49,59,228,237,-237 49,59,234,234,-234 49,59,235,235,-235 49,60,229,239,-239 5,10,21,553,-21 5,10,28,38,-38 5,100,21,553,-21 5,101,21,553,-21 5,102,21,553,-21 5,103,21,553,-21 5,105,21,553,-21 5,106,21,553,-21 5,107,21,553,-21 5,108,21,553,-21 5,109,21,553,-21 5,11,15,32,-15 5,110,21,553,-21 5,111,21,553,-21 5,112,21,553,-21 5,113,21,553,-21 5,114,21,553,-21 5,115,21,553,-21 5,116,21,553,-21 5,117,21,553,-21 5,119,21,553,-21 5,12,20,45,-20 5,12,21,553,-21 5,12,46,46,-46 5,120,21,553,-21 5,121,21,553,-21 5,122,21,553,-21 5,123,21,553,-21 5,124,21,553,-21 5,125,21,553,-21 5,126,21,553,-21 5,127,21,553,-21 5,128,21,553,-21 5,129,21,553,-21 5,13,51,51,-51 5,130,21,553,-21 5,131,21,553,-21 5,132,21,553,-21 5,133,21,553,-21 5,134,21,553,-21 5,135,21,553,-21 5,14,21,553,-21 5,15,21,553,-21 5,15,57,57,-57 5,16,21,553,-21 5,17,21,553,-21 5,17,67,67,-67 5,18,21,553,-21 5,18,62,72,-72 5,19,21,553,-21 5,20,21,553,-21 5,21,21,553,-21 5,22,21,553,-21 5,23,21,553,-21 5,24,21,553,-21 5,25,21,553,-21 5,25,97,97,-97 5,26,21,553,-21 5,27,108,108,-108 5,27,21,553,-21 5,28,21,553,-21 5,29,114,114,-114 5,29,21,553,-21 5,30,21,553,-21 5,31,21,553,-21 5,32,21,553,-21 5,33,21,553,-21 5,34,21,553,-21 5,35,21,553,-21 5,36,21,553,-21 5,38,21,553,-21 5,39,21,553,-21 5,40,21,553,-21 5,41,21,553,-21 5,42,21,553,-21 5,43,21,553,-21 5,45,21,553,-21 5,46,21,553,-21 5,48,21,553,-21 5,49,21,553,-21 5,5,17,17,-17 5,5,18,18,-18 5,5,36,36,-56 5,5,36,36,-65 5,5,553,21,-21 5,50,21,553,-21 5,51,21,553,-21 5,52,21,553,-21 5,53,209,209,-209 5,53,21,553,-21 5,53,210,210,-210 5,54,21,553,-21 5,54,211,218,-218 5,55,21,553,-21 5,55,218,218,-218 5,56,21,553,-21 5,57,21,553,-21 5,57,226,226,-226 5,57,228,228,-228 5,58,21,553,-21 5,58,220,229,-229 5,58,222,231,-231 5,58,232,232,-232 5,59,21,553,-21 5,59,228,237,-237 5,59,234,234,-234 5,59,235,235,-235 5,6,21,553,-21 5,6,25,25,-25 5,6,28,28,-28 5,60,21,553,-21 5,60,229,239,-239 5,61,21,553,-21 5,62,21,553,-21 5,63,21,553,-21 5,64,21,553,-21 5,65,21,553,-21 5,66,21,553,-21 5,67,21,553,-21 5,68,21,553,-21 5,69,21,553,-21 5,7,21,553,-21 5,7,25,25,-25 5,7,26,26,-26 5,7,69,1082,-1082 5,70,21,553,-21 5,71,21,553,-21 5,72,21,553,-21 5,73,21,553,-21 5,74,21,553,-21 5,76,21,553,-21 5,77,21,553,-21 5,78,21,553,-21 5,79,21,553,-21 5,8,21,553,-21 5,8,26,33,-33 5,8,27,34,-34 5,8,33,33,-33 5,8,36,36,-36 5,80,21,553,-21 5,81,21,553,-21 5,82,21,553,-21 5,83,21,553,-21 5,84,21,553,-21 5,85,21,553,-21 5,86,21,553,-21 5,87,21,553,-21 5,88,21,553,-21 5,89,21,553,-21 5,9,21,553,-21 5,9,27,36,-36 5,9,33,33,-33 5,9,34,34,-34 5,9,35,35,-35 5,90,21,553,-21 5,91,21,553,-21 5,92,21,553,-21 5,93,21,553,-21 5,94,21,553,-21 5,95,21,553,-21 5,97,21,553,-21 5,98,21,553,-21 5,99,21,553,-21 50,53,209,209,-209 50,53,210,210,-210 50,54,211,218,-218 50,55,218,218,-218 50,57,226,226,-226 50,57,228,228,-228 50,58,220,229,-229 50,58,222,231,-231 50,58,232,232,-232 50,59,226,235,-235 50,59,228,237,-237 50,59,234,234,-234 50,59,235,235,-235 50,60,229,239,-239 51,53,209,209,-209 51,53,210,210,-210 51,54,200,209,-200 51,54,211,218,-218 51,55,218,218,-218 51,56,200,217,-200 51,56,200,219,-200 51,57,200,223,-200 51,57,226,226,-226 51,57,228,228,-228 51,58,200,225,-200 51,58,200,226,-200 51,58,220,229,-229 51,58,222,231,-231 51,58,232,232,-232 51,59,226,235,-235 51,59,228,237,-237 51,59,234,234,-234 51,59,235,235,-235 51,60,229,239,-239 52,53,209,209,-209 52,53,210,210,-210 52,54,211,218,-218 52,55,218,218,-218 52,57,226,226,-226 52,57,228,228,-228 52,58,220,229,-229 52,58,222,231,-231 52,58,232,232,-232 52,59,226,235,-235 52,59,228,237,-237 52,59,234,234,-234 52,59,235,235,-235 52,60,229,239,-239 53,53,209,209,-209 53,53,210,210,-210 53,55,218,218,-218 53,57,226,226,-226 53,57,228,228,-228 53,58,220,229,-229 53,58,222,231,-231 53,58,232,232,-232 53,59,226,235,-235 53,59,228,237,-237 53,59,234,234,-234 53,59,235,235,-235 53,60,229,239,-239 54,54,212,212,-212 54,54,218,218,-225 54,55,218,218,-218 54,57,226,226,-226 54,57,228,228,-228 54,58,220,229,-229 54,58,222,231,-231 54,58,232,232,-232 54,59,226,235,-235 54,59,228,237,-237 54,59,234,234,-234 54,59,235,235,-235 54,60,229,239,-239 55,55,218,218,-218 55,55,218,218,-224 55,57,226,226,-226 55,57,228,228,-228 55,58,222,231,-231 55,58,232,232,-232 55,59,226,235,-235 55,59,228,237,-237 55,59,234,234,-234 55,59,235,235,-235 55,60,229,239,-239 56,56,221,221,-221 56,57,226,226,-226 56,57,228,228,-228 56,58,232,232,-232 56,59,226,235,-235 56,59,228,237,-237 56,59,234,234,-234 56,59,235,235,-235 56,60,229,239,-239 57,57,221,221,-221 57,57,223,223,-223 57,57,226,226,-226 57,57,228,228,-228 57,58,232,232,-232 57,59,234,234,-234 57,59,235,235,-235 57,60,229,239,-239 58,58,221,221,-229 58,58,223,223,-231 58,58,227,227,-227 58,58,229,229,-229 58,58,229,229,-238 58,58,231,231,-240 58,58,232,232,-232 58,59,234,234,-234 58,59,235,235,-235 59,59,221,221,-229 59,59,222,222,-230 59,59,227,227,-235 59,59,229,229,-229 59,59,229,229,-237 59,59,230,230,-230 59,59,231,231,-239 59,59,234,234,-234 59,59,235,235,-235 59,59,235,235,-244 59,59,237,237,-246 6,10,28,38,-38 6,12,46,46,-46 6,13,51,51,-51 6,15,57,57,-57 6,17,67,67,-67 6,18,62,72,-72 6,25,97,97,-97 6,27,108,108,-108 6,29,114,114,-114 6,53,209,209,-209 6,53,210,210,-210 6,54,211,218,-218 6,55,218,218,-218 6,57,226,226,-226 6,57,228,228,-228 6,58,220,229,-229 6,58,222,231,-231 6,58,232,232,-232 6,59,226,235,-235 6,59,228,237,-237 6,59,234,234,-234 6,59,235,235,-235 6,6,25,25,-25 6,7,25,25,-25 6,7,26,26,-26 6,7,28,28,-28 6,7,69,1082,-1082 6,8,26,33,-33 6,8,27,34,-34 6,8,33,33,-33 6,9,27,36,-36 6,9,33,33,-33 6,9,34,34,-34 6,9,35,35,-35 60,60,229,229,-237 60,60,230,230,-238 60,60,235,235,-243 60,60,237,237,-245 60,60,239,239,-249 61,61,239,239,-248 7,10,1082,69,-1082 7,11,1082,69,-1082 7,12,1082,69,-1082 7,12,46,46,-46 7,13,1082,69,-1082 7,13,51,51,-51 7,14,1082,69,-1082 7,15,1082,69,-1082 7,16,1082,69,-1082 7,17,1082,69,-1082 7,17,67,67,-67 7,18,62,72,-72 7,25,97,97,-97 7,27,108,108,-108 7,29,114,114,-114 7,53,209,209,-209 7,53,210,210,-210 7,54,211,218,-218 7,55,218,218,-218 7,57,226,226,-226 7,57,228,228,-228 7,58,220,229,-229 7,58,222,231,-231 7,58,232,232,-232 7,59,226,235,-235 7,59,228,237,-237 7,59,234,234,-234 7,59,235,235,-235 7,60,229,239,-239 7,7,1082,1082,-2095 7,7,24,24,-2 7,7,25,25,-25 7,7,26,26,-26 7,7,27,27,-18 7,7,28,28,-19 7,7,28,28,-28 7,7,69,1082,-1082 7,8,1082,69,-1082 7,8,33,33,-33 7,8,37,37,-37 7,9,1082,69,-1082 7,9,33,33,-33 7,9,34,34,-34 7,9,35,35,-35 8,12,46,46,-46 8,13,25,42,-29 8,13,51,51,-51 8,15,57,57,-57 8,17,67,67,-67 8,18,62,72,-72 8,25,97,97,-97 8,27,108,108,-108 8,29,114,114,-114 8,53,209,209,-209 8,53,210,210,-210 8,54,211,218,-218 8,55,218,218,-218 8,57,226,226,-226 8,57,228,228,-228 8,58,220,229,-229 8,58,222,231,-231 8,58,232,232,-232 8,59,226,235,-235 8,59,228,237,-237 8,59,234,234,-234 8,59,235,235,-235 8,60,229,239,-239 8,8,24,24,-16 8,8,24,24,-8 8,8,26,26,-25 8,8,27,27,-27 8,8,28,28,-27 8,8,28,28,-28 8,8,32,32,-19 8,8,33,33,-33 8,8,33,33,-40 8,8,34,34,-41 8,8,36,36,-28 8,9,33,33,-33 8,9,34,34,-34 8,9,35,35,-35 8,9,36,36,-36 8,9,37,37,-37 9,12,46,46,-46 9,13,51,51,-51 9,15,57,57,-57 9,17,67,67,-67 9,18,62,72,-72 9,25,97,97,-97 9,27,108,108,-108 9,29,114,114,-114 9,53,209,209,-209 9,53,210,210,-210 9,54,211,218,-218 9,55,218,218,-218 9,57,226,226,-226 9,57,228,228,-228 9,58,220,229,-229 9,58,222,231,-231 9,58,232,232,-232 9,59,226,235,-235 9,59,228,237,-237 9,59,234,234,-234 9,59,235,235,-235 9,60,229,239,-239 9,9,28,28,-36 9,9,29,29,-29 9,9,32,32,-22 9,9,33,33,-33 9,9,33,33,-39 9,9,34,34,-34 9,9,34,34,-40 9,9,35,35,-35 9,9,36,36,-36 9,9,36,36,-45 9,9,37,37,-29 9,9,37,37,-37 9,9,45,45,-29 99,99,384,384,-246
test-mul_var-init.sql
Description: Binary data
test-mul_var-verify.sql
Description: Binary data