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

Attachment: test-mul_var-init.sql
Description: Binary data

Attachment: test-mul_var-verify.sql
Description: Binary data

Reply via email to