WL#8763: support multi-value functional index for InnoDB

Affects: Server-8.0   —   Status: Complete

This worklog is to support multi-value functional index through InnoDB. Since
this is a functional index, and functional index in MySQL/InnoDB is implemented
through "virtual columns", so the multi-value funaiotnal index is based on
multi-value "virtual columns".

Since virtual column is never materialized in the table Primary Key (or data),
so it can be only materilaized by specific index, in this case the multi-value
functional index.

For example: 
if we try to index address or zip code (index(user_id, zip)) for a user
described following:
{
user: John,
user_id: 1,
 addr: [

      {zip: 94582},
      {zip: 94536}
 ],
}

Since he has multiple homes, it could generate multiple zip code out of a single
document.

we will support create index on ZIP code in this case.

Another simple example is:

mysql>  create table t1(f1 json, f2 int as (cast(`f1` as unsigned array)));
Query OK, 0 rows affected (4.16 sec)

mysql> insert into t1(f1) values   (cast('[1,3]' as json));
Query OK, 1 row affected, 2 warnings (0.04 sec)
mysql> insert into t1(f1) values   (cast('[1,3,9,8]' as json));
Query OK, 1 row affected, 2 warnings (0.05 sec)

mysql> create index idx1 on t1(f2);
Query OK, 0 rows affected (5.17 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> select f2 from t1;
+------+
| f2   |
+------+
|    1 |
|    1 |
|    3 |
|    3 |
|    8 |
|    9 |
+------+
6 rows in set (0.00 sec)

mysql> select * from t1 where f2 = 1;
+--------------+------+
| f1           | f2   |
+--------------+------+
| [1, 3]       |    1 |
| [1, 3, 9, 8] |    1 |
+--------------+------+
2 rows in set, 4 warnings (0.01 sec)

As you can see in above, there could be multiple f2 values corresponding a
single f1 values.