[FEAT MERGE] Add roaringbitmap type and relative expr

Co-authored-by: fkuner <784819644@qq.com>
This commit is contained in:
qijiax
2024-06-21 09:46:20 +00:00
committed by ob-robot
parent 3723b0f580
commit 3bfa3e2070
149 changed files with 7389 additions and 222 deletions

View File

@ -69,6 +69,7 @@ ob_unittest(test_geo_func_difference)
ob_unittest(test_geo_func_union)
ob_unittest(test_geo_func_box)
ob_unittest(test_throttling_utils)
ob_unittest(test_roaringbitmap)
ob_unittest(test_json_base)
ob_unittest(test_json_bin)

View File

@ -54,6 +54,7 @@
<NULL, COLLECTION> : defined
<NULL, MYSQL_DATE> : defined
<NULL, MYSQL_DATETIME> : defined
<NULL, ROARINGBITMAP> : defined
/**************** TINYINT ****************/
@ -111,6 +112,7 @@
<TINYINT, COLLECTION> : not defined
<TINYINT, MYSQL_DATE> : not defined
<TINYINT, MYSQL_DATETIME> : not defined
<TINYINT, ROARINGBITMAP> : not defined
/**************** SMALLINT ****************/
@ -168,6 +170,7 @@
<SMALLINT, COLLECTION> : not defined
<SMALLINT, MYSQL_DATE> : not defined
<SMALLINT, MYSQL_DATETIME> : not defined
<SMALLINT, ROARINGBITMAP> : not defined
/**************** MEDIUMINT ****************/
@ -225,6 +228,7 @@
<MEDIUMINT, COLLECTION> : not defined
<MEDIUMINT, MYSQL_DATE> : not defined
<MEDIUMINT, MYSQL_DATETIME> : not defined
<MEDIUMINT, ROARINGBITMAP> : not defined
/**************** INT ****************/
@ -282,6 +286,7 @@
<INT, COLLECTION> : not defined
<INT, MYSQL_DATE> : not defined
<INT, MYSQL_DATETIME> : not defined
<INT, ROARINGBITMAP> : not defined
/**************** BIGINT ****************/
@ -339,6 +344,7 @@
<BIGINT, COLLECTION> : not defined
<BIGINT, MYSQL_DATE> : not defined
<BIGINT, MYSQL_DATETIME> : not defined
<BIGINT, ROARINGBITMAP> : not defined
/**************** TINYINT UNSIGNED ****************/
@ -396,6 +402,7 @@
<TINYINT UNSIGNED, COLLECTION> : not defined
<TINYINT UNSIGNED, MYSQL_DATE> : not defined
<TINYINT UNSIGNED, MYSQL_DATETIME> : not defined
<TINYINT UNSIGNED, ROARINGBITMAP> : not defined
/**************** SMALLINT UNSIGNED ****************/
@ -453,6 +460,7 @@
<SMALLINT UNSIGNED, COLLECTION> : not defined
<SMALLINT UNSIGNED, MYSQL_DATE> : not defined
<SMALLINT UNSIGNED, MYSQL_DATETIME> : not defined
<SMALLINT UNSIGNED, ROARINGBITMAP> : not defined
/**************** MEDIUMINT UNSIGNED ****************/
@ -510,6 +518,7 @@
<MEDIUMINT UNSIGNED, COLLECTION> : not defined
<MEDIUMINT UNSIGNED, MYSQL_DATE> : not defined
<MEDIUMINT UNSIGNED, MYSQL_DATETIME> : not defined
<MEDIUMINT UNSIGNED, ROARINGBITMAP> : not defined
/**************** INT UNSIGNED ****************/
@ -567,6 +576,7 @@
<INT UNSIGNED, COLLECTION> : not defined
<INT UNSIGNED, MYSQL_DATE> : not defined
<INT UNSIGNED, MYSQL_DATETIME> : not defined
<INT UNSIGNED, ROARINGBITMAP> : not defined
/**************** BIGINT UNSIGNED ****************/
@ -624,6 +634,7 @@
<BIGINT UNSIGNED, COLLECTION> : not defined
<BIGINT UNSIGNED, MYSQL_DATE> : not defined
<BIGINT UNSIGNED, MYSQL_DATETIME> : not defined
<BIGINT UNSIGNED, ROARINGBITMAP> : not defined
/**************** FLOAT ****************/
@ -681,6 +692,7 @@
<FLOAT, COLLECTION> : not defined
<FLOAT, MYSQL_DATE> : not defined
<FLOAT, MYSQL_DATETIME> : not defined
<FLOAT, ROARINGBITMAP> : not defined
/**************** DOUBLE ****************/
@ -738,6 +750,7 @@
<DOUBLE, COLLECTION> : not defined
<DOUBLE, MYSQL_DATE> : not defined
<DOUBLE, MYSQL_DATETIME> : not defined
<DOUBLE, ROARINGBITMAP> : not defined
/**************** FLOAT UNSIGNED ****************/
@ -795,6 +808,7 @@
<FLOAT UNSIGNED, COLLECTION> : not defined
<FLOAT UNSIGNED, MYSQL_DATE> : not defined
<FLOAT UNSIGNED, MYSQL_DATETIME> : not defined
<FLOAT UNSIGNED, ROARINGBITMAP> : not defined
/**************** DOUBLE UNSIGNED ****************/
@ -852,6 +866,7 @@
<DOUBLE UNSIGNED, COLLECTION> : not defined
<DOUBLE UNSIGNED, MYSQL_DATE> : not defined
<DOUBLE UNSIGNED, MYSQL_DATETIME> : not defined
<DOUBLE UNSIGNED, ROARINGBITMAP> : not defined
/**************** DECIMAL ****************/
@ -909,6 +924,7 @@
<DECIMAL, COLLECTION> : not defined
<DECIMAL, MYSQL_DATE> : not defined
<DECIMAL, MYSQL_DATETIME> : not defined
<DECIMAL, ROARINGBITMAP> : not defined
/**************** DECIMAL UNSIGNED ****************/
@ -966,6 +982,7 @@
<DECIMAL UNSIGNED, COLLECTION> : not defined
<DECIMAL UNSIGNED, MYSQL_DATE> : not defined
<DECIMAL UNSIGNED, MYSQL_DATETIME> : not defined
<DECIMAL UNSIGNED, ROARINGBITMAP> : not defined
/**************** DATETIME ****************/
@ -1023,6 +1040,7 @@
<DATETIME, COLLECTION> : not defined
<DATETIME, MYSQL_DATE> : not defined
<DATETIME, MYSQL_DATETIME> : not defined
<DATETIME, ROARINGBITMAP> : not defined
/**************** TIMESTAMP ****************/
@ -1080,6 +1098,7 @@
<TIMESTAMP, COLLECTION> : not defined
<TIMESTAMP, MYSQL_DATE> : not defined
<TIMESTAMP, MYSQL_DATETIME> : not defined
<TIMESTAMP, ROARINGBITMAP> : not defined
/**************** DATE ****************/
@ -1137,6 +1156,7 @@
<DATE, COLLECTION> : not defined
<DATE, MYSQL_DATE> : not defined
<DATE, MYSQL_DATETIME> : not defined
<DATE, ROARINGBITMAP> : not defined
/**************** TIME ****************/
@ -1194,6 +1214,7 @@
<TIME, COLLECTION> : not defined
<TIME, MYSQL_DATE> : not defined
<TIME, MYSQL_DATETIME> : not defined
<TIME, ROARINGBITMAP> : not defined
/**************** YEAR ****************/
@ -1251,6 +1272,7 @@
<YEAR, COLLECTION> : not defined
<YEAR, MYSQL_DATE> : not defined
<YEAR, MYSQL_DATETIME> : not defined
<YEAR, ROARINGBITMAP> : not defined
/**************** VARCHAR ****************/
@ -1308,6 +1330,7 @@
<VARCHAR, COLLECTION> : not defined
<VARCHAR, MYSQL_DATE> : not defined
<VARCHAR, MYSQL_DATETIME> : not defined
<VARCHAR, ROARINGBITMAP> : not defined
/**************** CHAR ****************/
@ -1365,6 +1388,7 @@
<CHAR, COLLECTION> : not defined
<CHAR, MYSQL_DATE> : not defined
<CHAR, MYSQL_DATETIME> : not defined
<CHAR, ROARINGBITMAP> : not defined
/**************** HEX_STRING ****************/
@ -1422,6 +1446,7 @@
<HEX_STRING, COLLECTION> : not defined
<HEX_STRING, MYSQL_DATE> : not defined
<HEX_STRING, MYSQL_DATETIME> : not defined
<HEX_STRING, ROARINGBITMAP> : not defined
/**************** EXT ****************/
@ -1479,6 +1504,7 @@
<EXT, COLLECTION> : defined
<EXT, MYSQL_DATE> : defined
<EXT, MYSQL_DATETIME> : defined
<EXT, ROARINGBITMAP> : defined
/**************** UNKNOWN ****************/
@ -1536,6 +1562,7 @@
<UNKNOWN, COLLECTION> : not defined
<UNKNOWN, MYSQL_DATE> : not defined
<UNKNOWN, MYSQL_DATETIME> : not defined
<UNKNOWN, ROARINGBITMAP> : not defined
/**************** TINYTEXT ****************/
@ -1593,6 +1620,7 @@
<TINYTEXT, COLLECTION> : not defined
<TINYTEXT, MYSQL_DATE> : not defined
<TINYTEXT, MYSQL_DATETIME> : not defined
<TINYTEXT, ROARINGBITMAP> : not defined
/**************** TEXT ****************/
@ -1650,6 +1678,7 @@
<TEXT, COLLECTION> : not defined
<TEXT, MYSQL_DATE> : not defined
<TEXT, MYSQL_DATETIME> : not defined
<TEXT, ROARINGBITMAP> : not defined
/**************** MEDIUMTEXT ****************/
@ -1707,6 +1736,7 @@
<MEDIUMTEXT, COLLECTION> : not defined
<MEDIUMTEXT, MYSQL_DATE> : not defined
<MEDIUMTEXT, MYSQL_DATETIME> : not defined
<MEDIUMTEXT, ROARINGBITMAP> : not defined
/**************** LONGTEXT ****************/
@ -1764,6 +1794,7 @@
<LONGTEXT, COLLECTION> : not defined
<LONGTEXT, MYSQL_DATE> : not defined
<LONGTEXT, MYSQL_DATETIME> : not defined
<LONGTEXT, ROARINGBITMAP> : not defined
/**************** BIT ****************/
@ -1821,6 +1852,7 @@
<BIT, COLLECTION> : not defined
<BIT, MYSQL_DATE> : not defined
<BIT, MYSQL_DATETIME> : not defined
<BIT, ROARINGBITMAP> : not defined
/**************** ENUM ****************/
@ -1878,6 +1910,7 @@
<ENUM, COLLECTION> : not defined
<ENUM, MYSQL_DATE> : not defined
<ENUM, MYSQL_DATETIME> : not defined
<ENUM, ROARINGBITMAP> : not defined
/**************** SET ****************/
@ -1935,6 +1968,7 @@
<SET, COLLECTION> : not defined
<SET, MYSQL_DATE> : not defined
<SET, MYSQL_DATETIME> : not defined
<SET, ROARINGBITMAP> : not defined
/**************** ENUM_INNER ****************/
@ -1992,6 +2026,7 @@
<ENUM_INNER, COLLECTION> : not defined
<ENUM_INNER, MYSQL_DATE> : not defined
<ENUM_INNER, MYSQL_DATETIME> : not defined
<ENUM_INNER, ROARINGBITMAP> : not defined
/**************** SET_INNER ****************/
@ -2049,6 +2084,7 @@
<SET_INNER, COLLECTION> : not defined
<SET_INNER, MYSQL_DATE> : not defined
<SET_INNER, MYSQL_DATETIME> : not defined
<SET_INNER, ROARINGBITMAP> : not defined
/**************** TIMESTAMP_WITH_TIME_ZONE ****************/
@ -2106,6 +2142,7 @@
<TIMESTAMP_WITH_TIME_ZONE, COLLECTION> : not defined
<TIMESTAMP_WITH_TIME_ZONE, MYSQL_DATE> : not defined
<TIMESTAMP_WITH_TIME_ZONE, MYSQL_DATETIME> : not defined
<TIMESTAMP_WITH_TIME_ZONE, ROARINGBITMAP> : not defined
/**************** TIMESTAMP_WITH_LOCAL_TIME_ZONE ****************/
@ -2163,6 +2200,7 @@
<TIMESTAMP_WITH_LOCAL_TIME_ZONE, COLLECTION> : not defined
<TIMESTAMP_WITH_LOCAL_TIME_ZONE, MYSQL_DATE> : not defined
<TIMESTAMP_WITH_LOCAL_TIME_ZONE, MYSQL_DATETIME> : not defined
<TIMESTAMP_WITH_LOCAL_TIME_ZONE, ROARINGBITMAP> : not defined
/**************** TIMESTAMP ****************/
@ -2220,6 +2258,7 @@
<TIMESTAMP, COLLECTION> : not defined
<TIMESTAMP, MYSQL_DATE> : not defined
<TIMESTAMP, MYSQL_DATETIME> : not defined
<TIMESTAMP, ROARINGBITMAP> : not defined
/**************** RAW ****************/
@ -2277,6 +2316,7 @@
<RAW, COLLECTION> : not defined
<RAW, MYSQL_DATE> : not defined
<RAW, MYSQL_DATETIME> : not defined
<RAW, ROARINGBITMAP> : not defined
/**************** INTERVAL_YEAR_TO_MONTH ****************/
@ -2334,6 +2374,7 @@
<INTERVAL_YEAR_TO_MONTH, COLLECTION> : not defined
<INTERVAL_YEAR_TO_MONTH, MYSQL_DATE> : not defined
<INTERVAL_YEAR_TO_MONTH, MYSQL_DATETIME> : not defined
<INTERVAL_YEAR_TO_MONTH, ROARINGBITMAP> : not defined
/**************** INTERVAL_DAY_TO_SECOND ****************/
@ -2391,6 +2432,7 @@
<INTERVAL_DAY_TO_SECOND, COLLECTION> : not defined
<INTERVAL_DAY_TO_SECOND, MYSQL_DATE> : not defined
<INTERVAL_DAY_TO_SECOND, MYSQL_DATETIME> : not defined
<INTERVAL_DAY_TO_SECOND, ROARINGBITMAP> : not defined
/**************** NUMBER_FLOAT ****************/
@ -2448,6 +2490,7 @@
<NUMBER_FLOAT, COLLECTION> : not defined
<NUMBER_FLOAT, MYSQL_DATE> : not defined
<NUMBER_FLOAT, MYSQL_DATETIME> : not defined
<NUMBER_FLOAT, ROARINGBITMAP> : not defined
/**************** NVARCHAR2 ****************/
@ -2505,6 +2548,7 @@
<NVARCHAR2, COLLECTION> : not defined
<NVARCHAR2, MYSQL_DATE> : not defined
<NVARCHAR2, MYSQL_DATETIME> : not defined
<NVARCHAR2, ROARINGBITMAP> : not defined
/**************** NCHAR ****************/
@ -2562,6 +2606,7 @@
<NCHAR, COLLECTION> : not defined
<NCHAR, MYSQL_DATE> : not defined
<NCHAR, MYSQL_DATETIME> : not defined
<NCHAR, ROARINGBITMAP> : not defined
/**************** ROWID ****************/
@ -2619,6 +2664,7 @@
<ROWID, COLLECTION> : not defined
<ROWID, MYSQL_DATE> : not defined
<ROWID, MYSQL_DATETIME> : not defined
<ROWID, ROARINGBITMAP> : not defined
/**************** LOB ****************/
@ -2676,6 +2722,7 @@
<LOB, COLLECTION> : not defined
<LOB, MYSQL_DATE> : not defined
<LOB, MYSQL_DATETIME> : not defined
<LOB, ROARINGBITMAP> : not defined
/**************** JSON ****************/
@ -2733,6 +2780,7 @@
<JSON, COLLECTION> : not defined
<JSON, MYSQL_DATE> : not defined
<JSON, MYSQL_DATETIME> : not defined
<JSON, ROARINGBITMAP> : not defined
/**************** GEOMETRY ****************/
@ -2790,6 +2838,7 @@
<GEOMETRY, COLLECTION> : not defined
<GEOMETRY, MYSQL_DATE> : not defined
<GEOMETRY, MYSQL_DATETIME> : not defined
<GEOMETRY, ROARINGBITMAP> : not defined
/**************** UDT ****************/
@ -2847,6 +2896,7 @@
<UDT, COLLECTION> : not defined
<UDT, MYSQL_DATE> : not defined
<UDT, MYSQL_DATETIME> : not defined
<UDT, ROARINGBITMAP> : not defined
/**************** DECIMAL_INT ****************/
@ -2904,6 +2954,7 @@
<DECIMAL_INT, COLLECTION> : not defined
<DECIMAL_INT, MYSQL_DATE> : not defined
<DECIMAL_INT, MYSQL_DATETIME> : not defined
<DECIMAL_INT, ROARINGBITMAP> : not defined
/**************** COLLECTION ****************/
@ -2961,6 +3012,7 @@
<COLLECTION, COLLECTION> : not defined
<COLLECTION, MYSQL_DATE> : not defined
<COLLECTION, MYSQL_DATETIME> : not defined
<COLLECTION, ROARINGBITMAP> : not defined
/**************** MYSQL_DATE ****************/
@ -3018,6 +3070,7 @@
<MYSQL_DATE, COLLECTION> : not defined
<MYSQL_DATE, MYSQL_DATE> : not defined
<MYSQL_DATE, MYSQL_DATETIME> : not defined
<MYSQL_DATE, ROARINGBITMAP> : not defined
/**************** MYSQL_DATETIME ****************/
@ -3075,4 +3128,63 @@
<MYSQL_DATETIME, COLLECTION> : not defined
<MYSQL_DATETIME, MYSQL_DATE> : not defined
<MYSQL_DATETIME, MYSQL_DATETIME> : not defined
<MYSQL_DATETIME, ROARINGBITMAP> : not defined
/**************** ROARINGBITMAP ****************/
<ROARINGBITMAP, NULL> : defined
<ROARINGBITMAP, TINYINT> : not defined
<ROARINGBITMAP, SMALLINT> : not defined
<ROARINGBITMAP, MEDIUMINT> : not defined
<ROARINGBITMAP, INT> : not defined
<ROARINGBITMAP, BIGINT> : not defined
<ROARINGBITMAP, TINYINT UNSIGNED> : not defined
<ROARINGBITMAP, SMALLINT UNSIGNED> : not defined
<ROARINGBITMAP, MEDIUMINT UNSIGNED> : not defined
<ROARINGBITMAP, INT UNSIGNED> : not defined
<ROARINGBITMAP, BIGINT UNSIGNED> : not defined
<ROARINGBITMAP, FLOAT> : not defined
<ROARINGBITMAP, DOUBLE> : not defined
<ROARINGBITMAP, FLOAT UNSIGNED> : not defined
<ROARINGBITMAP, DOUBLE UNSIGNED> : not defined
<ROARINGBITMAP, DECIMAL> : not defined
<ROARINGBITMAP, DECIMAL UNSIGNED> : not defined
<ROARINGBITMAP, DATETIME> : not defined
<ROARINGBITMAP, TIMESTAMP> : not defined
<ROARINGBITMAP, DATE> : not defined
<ROARINGBITMAP, TIME> : not defined
<ROARINGBITMAP, YEAR> : not defined
<ROARINGBITMAP, VARCHAR> : not defined
<ROARINGBITMAP, CHAR> : not defined
<ROARINGBITMAP, HEX_STRING> : not defined
<ROARINGBITMAP, EXT> : defined
<ROARINGBITMAP, UNKNOWN> : not defined
<ROARINGBITMAP, TINYTEXT> : not defined
<ROARINGBITMAP, TEXT> : not defined
<ROARINGBITMAP, MEDIUMTEXT> : not defined
<ROARINGBITMAP, LONGTEXT> : not defined
<ROARINGBITMAP, BIT> : not defined
<ROARINGBITMAP, ENUM> : not defined
<ROARINGBITMAP, SET> : not defined
<ROARINGBITMAP, ENUM_INNER> : not defined
<ROARINGBITMAP, SET_INNER> : not defined
<ROARINGBITMAP, TIMESTAMP_WITH_TIME_ZONE> : not defined
<ROARINGBITMAP, TIMESTAMP_WITH_LOCAL_TIME_ZONE> : not defined
<ROARINGBITMAP, TIMESTAMP> : not defined
<ROARINGBITMAP, RAW> : not defined
<ROARINGBITMAP, INTERVAL_YEAR_TO_MONTH> : not defined
<ROARINGBITMAP, INTERVAL_DAY_TO_SECOND> : not defined
<ROARINGBITMAP, NUMBER_FLOAT> : not defined
<ROARINGBITMAP, NVARCHAR2> : not defined
<ROARINGBITMAP, NCHAR> : not defined
<ROARINGBITMAP, ROWID> : not defined
<ROARINGBITMAP, LOB> : not defined
<ROARINGBITMAP, JSON> : not defined
<ROARINGBITMAP, GEOMETRY> : not defined
<ROARINGBITMAP, UDT> : not defined
<ROARINGBITMAP, DECIMAL_INT> : not defined
<ROARINGBITMAP, COLLECTION> : not defined
<ROARINGBITMAP, MYSQL_DATE> : not defined
<ROARINGBITMAP, MYSQL_DATETIME> : not defined
<ROARINGBITMAP, ROARINGBITMAP> : not defined

View File

@ -54,6 +54,7 @@
<NULL, COLLECTION> : defined
<NULL, MYSQL_DATE> : defined
<NULL, MYSQL_DATETIME> : defined
<NULL, ROARINGBITMAP> : defined
/**************** TINYINT ****************/
@ -111,6 +112,7 @@
<TINYINT, COLLECTION> : not defined
<TINYINT, MYSQL_DATE> : not defined
<TINYINT, MYSQL_DATETIME> : not defined
<TINYINT, ROARINGBITMAP> : not defined
/**************** SMALLINT ****************/
@ -168,6 +170,7 @@
<SMALLINT, COLLECTION> : not defined
<SMALLINT, MYSQL_DATE> : not defined
<SMALLINT, MYSQL_DATETIME> : not defined
<SMALLINT, ROARINGBITMAP> : not defined
/**************** MEDIUMINT ****************/
@ -225,6 +228,7 @@
<MEDIUMINT, COLLECTION> : not defined
<MEDIUMINT, MYSQL_DATE> : not defined
<MEDIUMINT, MYSQL_DATETIME> : not defined
<MEDIUMINT, ROARINGBITMAP> : not defined
/**************** INT ****************/
@ -282,6 +286,7 @@
<INT, COLLECTION> : not defined
<INT, MYSQL_DATE> : not defined
<INT, MYSQL_DATETIME> : not defined
<INT, ROARINGBITMAP> : not defined
/**************** BIGINT ****************/
@ -339,6 +344,7 @@
<BIGINT, COLLECTION> : not defined
<BIGINT, MYSQL_DATE> : not defined
<BIGINT, MYSQL_DATETIME> : not defined
<BIGINT, ROARINGBITMAP> : not defined
/**************** TINYINT UNSIGNED ****************/
@ -396,6 +402,7 @@
<TINYINT UNSIGNED, COLLECTION> : not defined
<TINYINT UNSIGNED, MYSQL_DATE> : not defined
<TINYINT UNSIGNED, MYSQL_DATETIME> : not defined
<TINYINT UNSIGNED, ROARINGBITMAP> : not defined
/**************** SMALLINT UNSIGNED ****************/
@ -453,6 +460,7 @@
<SMALLINT UNSIGNED, COLLECTION> : not defined
<SMALLINT UNSIGNED, MYSQL_DATE> : not defined
<SMALLINT UNSIGNED, MYSQL_DATETIME> : not defined
<SMALLINT UNSIGNED, ROARINGBITMAP> : not defined
/**************** MEDIUMINT UNSIGNED ****************/
@ -510,6 +518,7 @@
<MEDIUMINT UNSIGNED, COLLECTION> : not defined
<MEDIUMINT UNSIGNED, MYSQL_DATE> : not defined
<MEDIUMINT UNSIGNED, MYSQL_DATETIME> : not defined
<MEDIUMINT UNSIGNED, ROARINGBITMAP> : not defined
/**************** INT UNSIGNED ****************/
@ -567,6 +576,7 @@
<INT UNSIGNED, COLLECTION> : not defined
<INT UNSIGNED, MYSQL_DATE> : not defined
<INT UNSIGNED, MYSQL_DATETIME> : not defined
<INT UNSIGNED, ROARINGBITMAP> : not defined
/**************** BIGINT UNSIGNED ****************/
@ -624,6 +634,7 @@
<BIGINT UNSIGNED, COLLECTION> : not defined
<BIGINT UNSIGNED, MYSQL_DATE> : not defined
<BIGINT UNSIGNED, MYSQL_DATETIME> : not defined
<BIGINT UNSIGNED, ROARINGBITMAP> : not defined
/**************** FLOAT ****************/
@ -681,6 +692,7 @@
<FLOAT, COLLECTION> : not defined
<FLOAT, MYSQL_DATE> : not defined
<FLOAT, MYSQL_DATETIME> : not defined
<FLOAT, ROARINGBITMAP> : not defined
/**************** DOUBLE ****************/
@ -738,6 +750,7 @@
<DOUBLE, COLLECTION> : not defined
<DOUBLE, MYSQL_DATE> : not defined
<DOUBLE, MYSQL_DATETIME> : not defined
<DOUBLE, ROARINGBITMAP> : not defined
/**************** FLOAT UNSIGNED ****************/
@ -795,6 +808,7 @@
<FLOAT UNSIGNED, COLLECTION> : not defined
<FLOAT UNSIGNED, MYSQL_DATE> : not defined
<FLOAT UNSIGNED, MYSQL_DATETIME> : not defined
<FLOAT UNSIGNED, ROARINGBITMAP> : not defined
/**************** DOUBLE UNSIGNED ****************/
@ -852,6 +866,7 @@
<DOUBLE UNSIGNED, COLLECTION> : not defined
<DOUBLE UNSIGNED, MYSQL_DATE> : not defined
<DOUBLE UNSIGNED, MYSQL_DATETIME> : not defined
<DOUBLE UNSIGNED, ROARINGBITMAP> : not defined
/**************** DECIMAL ****************/
@ -909,6 +924,7 @@
<DECIMAL, COLLECTION> : not defined
<DECIMAL, MYSQL_DATE> : not defined
<DECIMAL, MYSQL_DATETIME> : not defined
<DECIMAL, ROARINGBITMAP> : not defined
/**************** DECIMAL UNSIGNED ****************/
@ -966,6 +982,7 @@
<DECIMAL UNSIGNED, COLLECTION> : not defined
<DECIMAL UNSIGNED, MYSQL_DATE> : not defined
<DECIMAL UNSIGNED, MYSQL_DATETIME> : not defined
<DECIMAL UNSIGNED, ROARINGBITMAP> : not defined
/**************** DATETIME ****************/
@ -1023,6 +1040,7 @@
<DATETIME, COLLECTION> : not defined
<DATETIME, MYSQL_DATE> : not defined
<DATETIME, MYSQL_DATETIME> : not defined
<DATETIME, ROARINGBITMAP> : not defined
/**************** TIMESTAMP ****************/
@ -1080,6 +1098,7 @@
<TIMESTAMP, COLLECTION> : not defined
<TIMESTAMP, MYSQL_DATE> : not defined
<TIMESTAMP, MYSQL_DATETIME> : not defined
<TIMESTAMP, ROARINGBITMAP> : not defined
/**************** DATE ****************/
@ -1137,6 +1156,7 @@
<DATE, COLLECTION> : not defined
<DATE, MYSQL_DATE> : not defined
<DATE, MYSQL_DATETIME> : not defined
<DATE, ROARINGBITMAP> : not defined
/**************** TIME ****************/
@ -1194,6 +1214,7 @@
<TIME, COLLECTION> : not defined
<TIME, MYSQL_DATE> : not defined
<TIME, MYSQL_DATETIME> : not defined
<TIME, ROARINGBITMAP> : not defined
/**************** YEAR ****************/
@ -1251,6 +1272,7 @@
<YEAR, COLLECTION> : not defined
<YEAR, MYSQL_DATE> : not defined
<YEAR, MYSQL_DATETIME> : not defined
<YEAR, ROARINGBITMAP> : not defined
/**************** VARCHAR ****************/
@ -1308,6 +1330,7 @@
<VARCHAR, COLLECTION> : not defined
<VARCHAR, MYSQL_DATE> : not defined
<VARCHAR, MYSQL_DATETIME> : not defined
<VARCHAR, ROARINGBITMAP> : not defined
/**************** CHAR ****************/
@ -1365,6 +1388,7 @@
<CHAR, COLLECTION> : not defined
<CHAR, MYSQL_DATE> : not defined
<CHAR, MYSQL_DATETIME> : not defined
<CHAR, ROARINGBITMAP> : not defined
/**************** HEX_STRING ****************/
@ -1422,6 +1446,7 @@
<HEX_STRING, COLLECTION> : not defined
<HEX_STRING, MYSQL_DATE> : not defined
<HEX_STRING, MYSQL_DATETIME> : not defined
<HEX_STRING, ROARINGBITMAP> : not defined
/**************** EXT ****************/
@ -1479,6 +1504,7 @@
<EXT, COLLECTION> : defined
<EXT, MYSQL_DATE> : defined
<EXT, MYSQL_DATETIME> : defined
<EXT, ROARINGBITMAP> : defined
/**************** UNKNOWN ****************/
@ -1536,6 +1562,7 @@
<UNKNOWN, COLLECTION> : not defined
<UNKNOWN, MYSQL_DATE> : not defined
<UNKNOWN, MYSQL_DATETIME> : not defined
<UNKNOWN, ROARINGBITMAP> : not defined
/**************** TINYTEXT ****************/
@ -1593,6 +1620,7 @@
<TINYTEXT, COLLECTION> : not defined
<TINYTEXT, MYSQL_DATE> : not defined
<TINYTEXT, MYSQL_DATETIME> : not defined
<TINYTEXT, ROARINGBITMAP> : not defined
/**************** TEXT ****************/
@ -1650,6 +1678,7 @@
<TEXT, COLLECTION> : not defined
<TEXT, MYSQL_DATE> : not defined
<TEXT, MYSQL_DATETIME> : not defined
<TEXT, ROARINGBITMAP> : not defined
/**************** MEDIUMTEXT ****************/
@ -1707,6 +1736,7 @@
<MEDIUMTEXT, COLLECTION> : not defined
<MEDIUMTEXT, MYSQL_DATE> : not defined
<MEDIUMTEXT, MYSQL_DATETIME> : not defined
<MEDIUMTEXT, ROARINGBITMAP> : not defined
/**************** LONGTEXT ****************/
@ -1764,6 +1794,7 @@
<LONGTEXT, COLLECTION> : not defined
<LONGTEXT, MYSQL_DATE> : not defined
<LONGTEXT, MYSQL_DATETIME> : not defined
<LONGTEXT, ROARINGBITMAP> : not defined
/**************** BIT ****************/
@ -1821,6 +1852,7 @@
<BIT, COLLECTION> : not defined
<BIT, MYSQL_DATE> : not defined
<BIT, MYSQL_DATETIME> : not defined
<BIT, ROARINGBITMAP> : not defined
/**************** ENUM ****************/
@ -1878,6 +1910,7 @@
<ENUM, COLLECTION> : not defined
<ENUM, MYSQL_DATE> : not defined
<ENUM, MYSQL_DATETIME> : not defined
<ENUM, ROARINGBITMAP> : not defined
/**************** SET ****************/
@ -1935,6 +1968,7 @@
<SET, COLLECTION> : not defined
<SET, MYSQL_DATE> : not defined
<SET, MYSQL_DATETIME> : not defined
<SET, ROARINGBITMAP> : not defined
/**************** ENUM_INNER ****************/
@ -1992,6 +2026,7 @@
<ENUM_INNER, COLLECTION> : not defined
<ENUM_INNER, MYSQL_DATE> : not defined
<ENUM_INNER, MYSQL_DATETIME> : not defined
<ENUM_INNER, ROARINGBITMAP> : not defined
/**************** SET_INNER ****************/
@ -2049,6 +2084,7 @@
<SET_INNER, COLLECTION> : not defined
<SET_INNER, MYSQL_DATE> : not defined
<SET_INNER, MYSQL_DATETIME> : not defined
<SET_INNER, ROARINGBITMAP> : not defined
/**************** TIMESTAMP_WITH_TIME_ZONE ****************/
@ -2106,6 +2142,7 @@
<TIMESTAMP_WITH_TIME_ZONE, COLLECTION> : not defined
<TIMESTAMP_WITH_TIME_ZONE, MYSQL_DATE> : not defined
<TIMESTAMP_WITH_TIME_ZONE, MYSQL_DATETIME> : not defined
<TIMESTAMP_WITH_TIME_ZONE, ROARINGBITMAP> : not defined
/**************** TIMESTAMP_WITH_LOCAL_TIME_ZONE ****************/
@ -2163,6 +2200,7 @@
<TIMESTAMP_WITH_LOCAL_TIME_ZONE, COLLECTION> : not defined
<TIMESTAMP_WITH_LOCAL_TIME_ZONE, MYSQL_DATE> : not defined
<TIMESTAMP_WITH_LOCAL_TIME_ZONE, MYSQL_DATETIME> : not defined
<TIMESTAMP_WITH_LOCAL_TIME_ZONE, ROARINGBITMAP> : not defined
/**************** TIMESTAMP ****************/
@ -2220,6 +2258,7 @@
<TIMESTAMP, COLLECTION> : not defined
<TIMESTAMP, MYSQL_DATE> : not defined
<TIMESTAMP, MYSQL_DATETIME> : not defined
<TIMESTAMP, ROARINGBITMAP> : not defined
/**************** RAW ****************/
@ -2277,6 +2316,7 @@
<RAW, COLLECTION> : not defined
<RAW, MYSQL_DATE> : not defined
<RAW, MYSQL_DATETIME> : not defined
<RAW, ROARINGBITMAP> : not defined
/**************** INTERVAL_YEAR_TO_MONTH ****************/
@ -2334,6 +2374,7 @@
<INTERVAL_YEAR_TO_MONTH, COLLECTION> : not defined
<INTERVAL_YEAR_TO_MONTH, MYSQL_DATE> : not defined
<INTERVAL_YEAR_TO_MONTH, MYSQL_DATETIME> : not defined
<INTERVAL_YEAR_TO_MONTH, ROARINGBITMAP> : not defined
/**************** INTERVAL_DAY_TO_SECOND ****************/
@ -2391,6 +2432,7 @@
<INTERVAL_DAY_TO_SECOND, COLLECTION> : not defined
<INTERVAL_DAY_TO_SECOND, MYSQL_DATE> : not defined
<INTERVAL_DAY_TO_SECOND, MYSQL_DATETIME> : not defined
<INTERVAL_DAY_TO_SECOND, ROARINGBITMAP> : not defined
/**************** NUMBER_FLOAT ****************/
@ -2448,6 +2490,7 @@
<NUMBER_FLOAT, COLLECTION> : not defined
<NUMBER_FLOAT, MYSQL_DATE> : not defined
<NUMBER_FLOAT, MYSQL_DATETIME> : not defined
<NUMBER_FLOAT, ROARINGBITMAP> : not defined
/**************** NVARCHAR2 ****************/
@ -2505,6 +2548,7 @@
<NVARCHAR2, COLLECTION> : not defined
<NVARCHAR2, MYSQL_DATE> : not defined
<NVARCHAR2, MYSQL_DATETIME> : not defined
<NVARCHAR2, ROARINGBITMAP> : not defined
/**************** NCHAR ****************/
@ -2562,6 +2606,7 @@
<NCHAR, COLLECTION> : not defined
<NCHAR, MYSQL_DATE> : not defined
<NCHAR, MYSQL_DATETIME> : not defined
<NCHAR, ROARINGBITMAP> : not defined
/**************** ROWID ****************/
@ -2619,6 +2664,7 @@
<ROWID, COLLECTION> : not defined
<ROWID, MYSQL_DATE> : not defined
<ROWID, MYSQL_DATETIME> : not defined
<ROWID, ROARINGBITMAP> : not defined
/**************** LOB ****************/
@ -2676,6 +2722,7 @@
<LOB, COLLECTION> : not defined
<LOB, MYSQL_DATE> : not defined
<LOB, MYSQL_DATETIME> : not defined
<LOB, ROARINGBITMAP> : not defined
/**************** JSON ****************/
@ -2733,6 +2780,7 @@
<JSON, COLLECTION> : not defined
<JSON, MYSQL_DATE> : not defined
<JSON, MYSQL_DATETIME> : not defined
<JSON, ROARINGBITMAP> : not defined
/**************** GEOMETRY ****************/
@ -2790,6 +2838,7 @@
<GEOMETRY, COLLECTION> : not defined
<GEOMETRY, MYSQL_DATE> : not defined
<GEOMETRY, MYSQL_DATETIME> : not defined
<GEOMETRY, ROARINGBITMAP> : not defined
/**************** UDT ****************/
@ -2847,6 +2896,7 @@
<UDT, COLLECTION> : not defined
<UDT, MYSQL_DATE> : not defined
<UDT, MYSQL_DATETIME> : not defined
<UDT, ROARINGBITMAP> : not defined
/**************** DECIMAL_INT ****************/
@ -2904,6 +2954,7 @@
<DECIMAL_INT, COLLECTION> : not defined
<DECIMAL_INT, MYSQL_DATE> : not defined
<DECIMAL_INT, MYSQL_DATETIME> : not defined
<DECIMAL_INT, ROARINGBITMAP> : not defined
/**************** COLLECTION ****************/
@ -2961,6 +3012,7 @@
<COLLECTION, COLLECTION> : not defined
<COLLECTION, MYSQL_DATE> : not defined
<COLLECTION, MYSQL_DATETIME> : not defined
<COLLECTION, ROARINGBITMAP> : not defined
/**************** MYSQL_DATE ****************/
@ -3018,6 +3070,7 @@
<MYSQL_DATE, COLLECTION> : not defined
<MYSQL_DATE, MYSQL_DATE> : not defined
<MYSQL_DATE, MYSQL_DATETIME> : not defined
<MYSQL_DATE, ROARINGBITMAP> : not defined
/**************** MYSQL_DATETIME ****************/
@ -3075,4 +3128,63 @@
<MYSQL_DATETIME, COLLECTION> : not defined
<MYSQL_DATETIME, MYSQL_DATE> : not defined
<MYSQL_DATETIME, MYSQL_DATETIME> : not defined
<MYSQL_DATETIME, ROARINGBITMAP> : not defined
/**************** ROARINGBITMAP ****************/
<ROARINGBITMAP, NULL> : defined
<ROARINGBITMAP, TINYINT> : not defined
<ROARINGBITMAP, SMALLINT> : not defined
<ROARINGBITMAP, MEDIUMINT> : not defined
<ROARINGBITMAP, INT> : not defined
<ROARINGBITMAP, BIGINT> : not defined
<ROARINGBITMAP, TINYINT UNSIGNED> : not defined
<ROARINGBITMAP, SMALLINT UNSIGNED> : not defined
<ROARINGBITMAP, MEDIUMINT UNSIGNED> : not defined
<ROARINGBITMAP, INT UNSIGNED> : not defined
<ROARINGBITMAP, BIGINT UNSIGNED> : not defined
<ROARINGBITMAP, FLOAT> : not defined
<ROARINGBITMAP, DOUBLE> : not defined
<ROARINGBITMAP, FLOAT UNSIGNED> : not defined
<ROARINGBITMAP, DOUBLE UNSIGNED> : not defined
<ROARINGBITMAP, DECIMAL> : not defined
<ROARINGBITMAP, DECIMAL UNSIGNED> : not defined
<ROARINGBITMAP, DATETIME> : not defined
<ROARINGBITMAP, TIMESTAMP> : not defined
<ROARINGBITMAP, DATE> : not defined
<ROARINGBITMAP, TIME> : not defined
<ROARINGBITMAP, YEAR> : not defined
<ROARINGBITMAP, VARCHAR> : not defined
<ROARINGBITMAP, CHAR> : not defined
<ROARINGBITMAP, HEX_STRING> : not defined
<ROARINGBITMAP, EXT> : defined
<ROARINGBITMAP, UNKNOWN> : not defined
<ROARINGBITMAP, TINYTEXT> : not defined
<ROARINGBITMAP, TEXT> : not defined
<ROARINGBITMAP, MEDIUMTEXT> : not defined
<ROARINGBITMAP, LONGTEXT> : not defined
<ROARINGBITMAP, BIT> : not defined
<ROARINGBITMAP, ENUM> : not defined
<ROARINGBITMAP, SET> : not defined
<ROARINGBITMAP, ENUM_INNER> : not defined
<ROARINGBITMAP, SET_INNER> : not defined
<ROARINGBITMAP, TIMESTAMP_WITH_TIME_ZONE> : not defined
<ROARINGBITMAP, TIMESTAMP_WITH_LOCAL_TIME_ZONE> : not defined
<ROARINGBITMAP, TIMESTAMP> : not defined
<ROARINGBITMAP, RAW> : not defined
<ROARINGBITMAP, INTERVAL_YEAR_TO_MONTH> : not defined
<ROARINGBITMAP, INTERVAL_DAY_TO_SECOND> : not defined
<ROARINGBITMAP, NUMBER_FLOAT> : not defined
<ROARINGBITMAP, NVARCHAR2> : not defined
<ROARINGBITMAP, NCHAR> : not defined
<ROARINGBITMAP, ROWID> : not defined
<ROARINGBITMAP, LOB> : not defined
<ROARINGBITMAP, JSON> : not defined
<ROARINGBITMAP, GEOMETRY> : not defined
<ROARINGBITMAP, UDT> : not defined
<ROARINGBITMAP, DECIMAL_INT> : not defined
<ROARINGBITMAP, COLLECTION> : not defined
<ROARINGBITMAP, MYSQL_DATE> : not defined
<ROARINGBITMAP, MYSQL_DATETIME> : not defined
<ROARINGBITMAP, ROARINGBITMAP> : not defined

View File

@ -0,0 +1,390 @@
/**
* Copyright (c) 2023 OceanBase
* OceanBase CE is licensed under Mulan PubL v2.
* You can use this software according to the terms and conditions of the Mulan PubL v2.
* You may obtain a copy of Mulan PubL v2 at:
* http://license.coscl.org.cn/MulanPubL-2.0
* THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
* EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
* MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
* See the Mulan PubL v2 for more details.
*/
#include <gtest/gtest.h>
#define private public
#include "lib/roaringbitmap/ob_roaringbitmap.h"
#include "lib/roaringbitmap/ob_rb_utils.h"
#include "lib/utility/ob_macro_utils.h"
#undef private
#include <sys/time.h>
#include <stdexcept>
#include <exception>
#include <typeinfo>
namespace oceanbase {
namespace common {
class TestRoaringBitmap : public ::testing::Test {
public:
TestRoaringBitmap()
{}
~TestRoaringBitmap()
{}
virtual void SetUp()
{}
virtual void TearDown()
{}
static void SetUpTestCase()
{}
static void TearDownTestCase()
{}
private:
// disallow copy
DISALLOW_COPY_AND_ASSIGN(TestRoaringBitmap);
};
TEST_F(TestRoaringBitmap, serialize_deserialize)
{
ObArenaAllocator allocator(ObModIds::TEST);
ModulePageAllocator page_allocator_(allocator, common::ObModIds::OB_MODULE_PAGE_ALLOCATOR);
ObRoaringBitmap *rb = OB_NEWx(ObRoaringBitmap, &allocator, (&allocator));
ObRoaringBitmap *rb_64 = OB_NEWx(ObRoaringBitmap, &allocator, (&allocator));
// EMPTY Type
ASSERT_EQ(rb->get_version(), BITMAP_VESION_1);
ASSERT_EQ(rb->get_type(), ObRbType::EMPTY);
ASSERT_EQ(rb->get_cardinality(), 0);
ObString bin_empty;
ASSERT_EQ(OB_SUCCESS, ObRbUtils::rb_serialize(allocator, bin_empty, rb));
ASSERT_EQ(ObRbBinType::EMPTY, static_cast<ObRbBinType>(*(bin_empty.ptr() + 1)));
ObRoaringBitmap *rb_empty;
ASSERT_EQ(OB_SUCCESS, ObRbUtils::rb_deserialize(allocator, bin_empty, rb_empty));
ASSERT_EQ(rb->get_version(), rb_empty->get_version());
ASSERT_EQ(rb->get_type(), rb_empty->get_type());
ASSERT_EQ(rb->get_cardinality(), rb_empty->get_cardinality());
// SINGLE_32 Type
ASSERT_EQ(OB_SUCCESS, rb->value_add(100));
ASSERT_EQ(rb->get_type(), ObRbType::SINGLE);
ASSERT_EQ(rb->get_cardinality(), 1);
ASSERT_TRUE(rb->is_contains(100));
ObString bin_single;
ASSERT_EQ(OB_SUCCESS, ObRbUtils::rb_serialize(allocator, bin_single, rb));
ASSERT_EQ(ObRbBinType::SINGLE_32, static_cast<ObRbBinType>(*(bin_single.ptr() + 1)));
ObRoaringBitmap *rb_single;
ASSERT_EQ(OB_SUCCESS, ObRbUtils::rb_deserialize(allocator, bin_single, rb_single));
ASSERT_EQ(rb->get_version(), rb_single->get_version());
ASSERT_EQ(rb->get_type(), rb_single->get_type());
ASSERT_EQ(rb->get_cardinality(), rb_single->get_cardinality());
ASSERT_TRUE(rb_single->is_contains(100));
// SET_32 Type
ASSERT_EQ(OB_SUCCESS, rb->value_add(200));
ASSERT_EQ(rb->get_type(), ObRbType::SET);
ASSERT_EQ(rb->get_cardinality(), 2);
ASSERT_TRUE(rb->is_contains(100));
ASSERT_TRUE(rb->is_contains(200));
ObString bin_set;
ASSERT_EQ(OB_SUCCESS, ObRbUtils::rb_serialize(allocator, bin_set, rb));
ASSERT_EQ(ObRbBinType::SET_32, static_cast<ObRbBinType>(*(bin_set.ptr() + 1)));
ObRoaringBitmap *rb_set;
ASSERT_EQ(OB_SUCCESS, ObRbUtils::rb_deserialize(allocator, bin_set, rb_set));
ASSERT_EQ(rb->get_version(), rb_set->get_version());
ASSERT_EQ(rb->get_type(), rb_set->get_type());
ASSERT_EQ(rb->get_cardinality(), rb_set->get_cardinality());
ASSERT_TRUE(rb_set->is_contains(100));
ASSERT_TRUE(rb_set->is_contains(200));
// BITMAP_32 Type
for (int i = 0; i < MAX_BITMAP_SET_VALUES; i++) {
ASSERT_EQ(OB_SUCCESS, rb->value_add(300 + i));
}
ASSERT_EQ(rb->get_type(), ObRbType::BITMAP);
ASSERT_EQ(rb->get_cardinality(), 34);
for (int i = 0; i < MAX_BITMAP_SET_VALUES; i++) {
ASSERT_TRUE(rb->is_contains(300 + i));
}
ObString bin_bitmap;
ASSERT_EQ(OB_SUCCESS, ObRbUtils::rb_serialize(allocator, bin_bitmap, rb));
ASSERT_EQ(ObRbBinType::BITMAP_32, static_cast<ObRbBinType>(*(bin_bitmap.ptr() + 1)));
ObRoaringBitmap *rb_bitmap;
ASSERT_EQ(OB_SUCCESS, ObRbUtils::rb_deserialize(allocator, bin_bitmap, rb_bitmap));
ASSERT_EQ(rb->get_version(), rb_bitmap->get_version());
ASSERT_EQ(rb->get_type(), rb_bitmap->get_type());
ASSERT_EQ(rb->get_cardinality(), rb_bitmap->get_cardinality());
for (int i = 0; i < MAX_BITMAP_SET_VALUES; i++) {
ASSERT_TRUE(rb_bitmap->is_contains(300 + i));
}
// SINGLE_64 Type
ASSERT_EQ(OB_SUCCESS, rb_64->value_add(4294967295 + 100));
ASSERT_EQ(rb_64->get_type(), ObRbType::SINGLE);
ASSERT_EQ(rb_64->get_cardinality(), 1);
ASSERT_TRUE(rb_64->is_contains(4294967295 + 100));
ObString bin_single_64;
ASSERT_EQ(OB_SUCCESS, ObRbUtils::rb_serialize(allocator, bin_single_64, rb_64));
ASSERT_EQ(ObRbBinType::SINGLE_64, static_cast<ObRbBinType>(*(bin_single_64.ptr() + 1)));
ObRoaringBitmap *rb_single_64;
ASSERT_EQ(OB_SUCCESS, ObRbUtils::rb_deserialize(allocator, bin_single_64, rb_single_64));
ASSERT_EQ(rb_64->get_version(), rb_single_64->get_version());
ASSERT_EQ(rb_64->get_type(), rb_single_64->get_type());
ASSERT_EQ(rb_64->get_cardinality(), rb_single_64->get_cardinality());
ASSERT_TRUE(rb_single_64->is_contains(4294967295 + 100));
// SET_64 Type
ASSERT_EQ(OB_SUCCESS, rb_64->value_add(200));
ASSERT_EQ(rb_64->get_type(), ObRbType::SET);
ASSERT_EQ(rb_64->get_cardinality(), 2);
ASSERT_TRUE(rb_64->is_contains(4294967295 + 100));
ASSERT_TRUE(rb_64->is_contains(200));
ObString bin_set_64;
ASSERT_EQ(OB_SUCCESS, ObRbUtils::rb_serialize(allocator, bin_set_64, rb_64));
ASSERT_EQ(ObRbBinType::SET_64, static_cast<ObRbBinType>(*(bin_set_64.ptr() + 1)));
ObRoaringBitmap *rb_set_64;
ASSERT_EQ(OB_SUCCESS, ObRbUtils::rb_deserialize(allocator, bin_set_64, rb_set_64));
ASSERT_EQ(rb_64->get_version(), rb_set_64->get_version());
ASSERT_EQ(rb_64->get_type(), rb_set_64->get_type());
ASSERT_EQ(rb_64->get_cardinality(), rb_set_64->get_cardinality());
ASSERT_TRUE(rb_set_64->is_contains(4294967295 + 100));
ASSERT_TRUE(rb_set_64->is_contains(200));
// BITMAP_64 Type
for (int i = 0; i < MAX_BITMAP_SET_VALUES; i++) {
ASSERT_EQ(OB_SUCCESS, rb_64->value_add(i * 4294967295 + i));
}
ASSERT_EQ(rb_64->get_type(), ObRbType::BITMAP);
ASSERT_EQ(rb_64->get_cardinality(), 34);
for (int i = 0; i < MAX_BITMAP_SET_VALUES; i++) {
ASSERT_TRUE(rb_64->is_contains(i * 4294967295 + i));
}
ObString bin_bitmap_64;
ASSERT_EQ(OB_SUCCESS, ObRbUtils::rb_serialize(allocator, bin_bitmap_64, rb_64));
ASSERT_EQ(ObRbBinType::BITMAP_64, static_cast<ObRbBinType>(*(bin_bitmap_64.ptr() + 1)));
ObRoaringBitmap *rb_bitmap_64;
ASSERT_EQ(OB_SUCCESS, ObRbUtils::rb_deserialize(allocator, bin_bitmap_64, rb_bitmap_64));
ASSERT_EQ(rb_64->get_version(), rb_bitmap_64->get_version());
ASSERT_EQ(rb_64->get_type(), rb_bitmap_64->get_type());
ASSERT_EQ(rb_64->get_cardinality(), rb_bitmap_64->get_cardinality());
for (int i = 0; i < MAX_BITMAP_SET_VALUES; i++) {
ASSERT_TRUE(rb_bitmap_64->is_contains(i * 4294967295 + i));
}
}
TEST_F(TestRoaringBitmap, optimize)
{
ObArenaAllocator allocator(ObModIds::TEST);
ModulePageAllocator page_allocator_(allocator, common::ObModIds::OB_MODULE_PAGE_ALLOCATOR);
ObRoaringBitmap *rb = OB_NEWx(ObRoaringBitmap, &allocator, (&allocator));
// add 33 value, remain 33 value
for (int i = 0; i < MAX_BITMAP_SET_VALUES + 1; i++) {
ASSERT_EQ(OB_SUCCESS, rb->value_add(300 + i));
}
ASSERT_EQ(rb->get_type(), ObRbType::BITMAP);
ASSERT_EQ(rb->get_cardinality(), 33);
ASSERT_EQ(rb->value_remove(300), OB_SUCCESS);
ASSERT_EQ(rb->get_cardinality(), 32);
ASSERT_FALSE(rb->is_contains(300));
rb->optimize();
// remove 32 value, remain 1 value
for (int i = 0; i < MAX_BITMAP_SET_VALUES; i++) {
ASSERT_EQ(rb->value_remove(300 + i), OB_SUCCESS);
}
ASSERT_EQ(rb->get_type(), ObRbType::BITMAP);
ASSERT_EQ(rb->get_cardinality(), 1);
rb->optimize();
ASSERT_EQ(rb->get_type(), ObRbType::SINGLE);
ASSERT_EQ(rb->get_cardinality(), 1);
// remove 1 value, remain 0 value
ASSERT_EQ(rb->value_remove(300 + 32), OB_SUCCESS);
ASSERT_EQ(rb->get_type(), ObRbType::EMPTY);
ASSERT_EQ(rb->get_cardinality(), 0);
// add 32 value, remain 32 value
for (int i = 0; i < MAX_BITMAP_SET_VALUES; i++) {
ASSERT_EQ(rb->value_add(i), OB_SUCCESS);
}
ASSERT_EQ(rb->get_type(), ObRbType::SET);
ASSERT_EQ(rb->get_cardinality(), 32);
// remove 32 value, remain 0 value
for (int i = 0; i < MAX_BITMAP_SET_VALUES; i++) {
ASSERT_EQ(rb->value_remove(i), OB_SUCCESS);
}
ASSERT_EQ(rb->get_type(), ObRbType::SET);
ASSERT_EQ(rb->get_cardinality(), 0);
// add 33 value, remain 33 value
for (int i = 0; i < MAX_BITMAP_SET_VALUES + 1; i++) {
ASSERT_EQ(rb->value_add(300 + i), OB_SUCCESS);
}
ASSERT_EQ(rb->get_type(), ObRbType::BITMAP);
ASSERT_EQ(rb->get_cardinality(), 33);
// remove 33 value, remain 0 value
for (int i = 0; i < MAX_BITMAP_SET_VALUES + 1; i++) {
ASSERT_EQ(rb->value_remove(300 + i), OB_SUCCESS);
}
ASSERT_EQ(rb->get_type(), ObRbType::BITMAP);
ASSERT_EQ(rb->get_cardinality(), 0);
rb->optimize();
ASSERT_EQ(rb->get_type(), ObRbType::EMPTY);
ASSERT_EQ(rb->get_cardinality(), 0);
// add 2 value, remain 2 value
for (int i = 0; i < 2; i++) {
ASSERT_EQ(rb->value_add(300 + i), OB_SUCCESS);
}
ASSERT_EQ(rb->get_type(), ObRbType::SET);
ASSERT_EQ(rb->get_cardinality(), 2);
// remove 1 value, remain 1 value
ASSERT_EQ(rb->value_remove(300), OB_SUCCESS);
ASSERT_EQ(rb->get_type(), ObRbType::SET);
ASSERT_EQ(rb->get_cardinality(), 1);
rb->optimize();
ASSERT_EQ(rb->get_type(), ObRbType::SINGLE);
ASSERT_EQ(rb->get_cardinality(), 1);
}
TEST_F(TestRoaringBitmap, to_roaring_bin)
{
ObArenaAllocator allocator(ObModIds::TEST);
ModulePageAllocator page_allocator_(allocator, common::ObModIds::OB_MODULE_PAGE_ALLOCATOR);
ObRoaringBitmap *rb = OB_NEWx(ObRoaringBitmap, &allocator, (&allocator));
ObRoaringBitmap *rb64 = OB_NEWx(ObRoaringBitmap, &allocator, (&allocator));
// EMPTY
ObString bin_empty;
ObString roaring_bin_empty;
ASSERT_EQ(OB_SUCCESS, ObRbUtils::rb_serialize(allocator, bin_empty, rb));
ASSERT_EQ(OB_SUCCESS, ObRbUtils::binary_format_convert(allocator, bin_empty, roaring_bin_empty));
ObRbBinType bin_type_empty;
ASSERT_EQ(OB_SUCCESS, ObRbUtils::check_get_bin_type(roaring_bin_empty, bin_type_empty));
ASSERT_EQ(ObRbBinType::BITMAP_32, bin_type_empty);
ObRoaringBitmap *rb_roaring_empty;
ASSERT_EQ(OB_SUCCESS, ObRbUtils::rb_deserialize(allocator, roaring_bin_empty, rb_roaring_empty));
ASSERT_EQ(rb_roaring_empty->get_version(), 1);
ASSERT_EQ(rb_roaring_empty->get_type(), ObRbType::BITMAP);
ASSERT_EQ(rb_roaring_empty->get_cardinality(), 0);
// SINGLE_32
ASSERT_EQ(OB_SUCCESS, rb->value_add(100));
ObString bin_single;
ObString roaring_bin_single;
ASSERT_EQ(OB_SUCCESS, ObRbUtils::rb_serialize(allocator, bin_single, rb));
ASSERT_EQ(OB_SUCCESS, ObRbUtils::binary_format_convert(allocator, bin_single, roaring_bin_single));
ObRbBinType bin_type_single;
ASSERT_EQ(OB_SUCCESS, ObRbUtils::check_get_bin_type(roaring_bin_single, bin_type_single));
ASSERT_EQ(ObRbBinType::BITMAP_32, bin_type_single);
ObRoaringBitmap *rb_roaring_single;
ASSERT_EQ(OB_SUCCESS, ObRbUtils::rb_deserialize(allocator, roaring_bin_single, rb_roaring_single));
ASSERT_EQ(rb_roaring_single->get_version(), 1);
ASSERT_EQ(rb_roaring_single->get_type(), ObRbType::BITMAP);
ASSERT_EQ(rb_roaring_single->get_cardinality(), 1);
ASSERT_TRUE(rb_roaring_single->is_contains(100));
// SET_32
ASSERT_EQ(OB_SUCCESS, rb->value_add(101));
ObString bin_set;
ObString roaring_bin_set;
ASSERT_EQ(OB_SUCCESS, ObRbUtils::rb_serialize(allocator, bin_set, rb));
ASSERT_EQ(OB_SUCCESS, ObRbUtils::binary_format_convert(allocator, bin_set, roaring_bin_set));
ObRbBinType bin_type_set;
ASSERT_EQ(OB_SUCCESS, ObRbUtils::check_get_bin_type(roaring_bin_set, bin_type_set));
ASSERT_EQ(ObRbBinType::BITMAP_32, bin_type_set);
ObRoaringBitmap *rb_roaring_set;
ASSERT_EQ(OB_SUCCESS, ObRbUtils::rb_deserialize(allocator, roaring_bin_set, rb_roaring_set));
ASSERT_EQ(rb_roaring_set->get_version(), 1);
ASSERT_EQ(rb_roaring_set->get_type(), ObRbType::BITMAP);
ASSERT_EQ(rb_roaring_set->get_cardinality(), 2);
ASSERT_TRUE(rb_roaring_set->is_contains(100));
ASSERT_TRUE(rb_roaring_set->is_contains(101));
// BITMAP_32
for (int i = 0; i < MAX_BITMAP_SET_VALUES; i++) {
ASSERT_EQ(OB_SUCCESS, rb->value_add(300 + i));
}
ObString bin_bitmap;
ObString roaring_bin_bitmap;
ASSERT_EQ(OB_SUCCESS, ObRbUtils::rb_serialize(allocator, bin_bitmap, rb));
ASSERT_EQ(OB_SUCCESS, ObRbUtils::binary_format_convert(allocator, bin_bitmap, roaring_bin_bitmap));
ObRbBinType bin_type_bitmap;
ASSERT_EQ(OB_SUCCESS, ObRbUtils::check_get_bin_type(roaring_bin_bitmap, bin_type_bitmap));
ASSERT_EQ(ObRbBinType::BITMAP_32, bin_type_bitmap);
ObRoaringBitmap *rb_roaring_bitmap;
ASSERT_EQ(OB_SUCCESS, ObRbUtils::rb_deserialize(allocator, roaring_bin_bitmap, rb_roaring_bitmap));
ASSERT_EQ(rb_roaring_bitmap->get_version(), 1);
ASSERT_EQ(rb_roaring_bitmap->get_type(), ObRbType::BITMAP);
ASSERT_EQ(rb_roaring_bitmap->get_cardinality(), 34);
for (int i = 0; i < MAX_BITMAP_SET_VALUES; i++) {
ASSERT_TRUE(rb_roaring_bitmap->is_contains(300 + i));
}
// SINGLE_64
ASSERT_EQ(OB_SUCCESS, rb64->value_add(4294967295 + 100));
ObString bin_single64;
ObString roaring_bin_single64;
ASSERT_EQ(OB_SUCCESS, ObRbUtils::rb_serialize(allocator, bin_single64, rb64));
ASSERT_EQ(OB_SUCCESS, ObRbUtils::binary_format_convert(allocator, bin_single64, roaring_bin_single64));
ObRbBinType bin_type_single64;
ASSERT_EQ(OB_SUCCESS, ObRbUtils::check_get_bin_type(roaring_bin_single64, bin_type_single64));
ASSERT_EQ(ObRbBinType::BITMAP_64, bin_type_single64);
ObRoaringBitmap *rb_roaring_single64;
ASSERT_EQ(OB_SUCCESS, ObRbUtils::rb_deserialize(allocator, roaring_bin_single64, rb_roaring_single64));
ASSERT_EQ(rb_roaring_single64->get_version(), 1);
ASSERT_EQ(rb_roaring_single64->get_type(), ObRbType::BITMAP);
ASSERT_EQ(rb_roaring_single64->get_cardinality(), 1);
ASSERT_TRUE(rb_roaring_single64->is_contains(4294967295 + 100));
// SET_64
ASSERT_EQ(OB_SUCCESS, rb64->value_add(4294967295 + 101));
ObString bin_set64;
ObString roaring_bin_set64;
ASSERT_EQ(OB_SUCCESS, ObRbUtils::rb_serialize(allocator, bin_set64, rb64));
ASSERT_EQ(OB_SUCCESS, ObRbUtils::binary_format_convert(allocator, bin_set64, roaring_bin_set64));
ObRbBinType bin_type_set64;
ASSERT_EQ(OB_SUCCESS, ObRbUtils::check_get_bin_type(roaring_bin_set64, bin_type_set64));
ASSERT_EQ(ObRbBinType::BITMAP_64, bin_type_set64);
ObRoaringBitmap *rb_roaring_set64;
ASSERT_EQ(OB_SUCCESS, ObRbUtils::rb_deserialize(allocator, roaring_bin_set64, rb_roaring_set64));
ASSERT_EQ(rb_roaring_set64->get_version(), 1);
ASSERT_EQ(rb_roaring_set64->get_type(), ObRbType::BITMAP);
ASSERT_EQ(rb_roaring_set64->get_cardinality(), 2);
ASSERT_TRUE(rb_roaring_set64->is_contains(4294967295 + 100));
ASSERT_TRUE(rb_roaring_set64->is_contains(4294967295 + 101));
// BITMAP_64
for (int i = 0; i < MAX_BITMAP_SET_VALUES; i++) {
ASSERT_EQ(OB_SUCCESS, rb64->value_add(4294967295 + 300 + i));
}
ObString bin_bitmap64;
ObString roaring_bin_bitmap64;
ASSERT_EQ(OB_SUCCESS, ObRbUtils::rb_serialize(allocator, bin_bitmap64, rb64));
ASSERT_EQ(OB_SUCCESS, ObRbUtils::binary_format_convert(allocator, bin_bitmap64, roaring_bin_bitmap64));
ObRbBinType bin_type_bitmap64;
ASSERT_EQ(OB_SUCCESS, ObRbUtils::check_get_bin_type(roaring_bin_bitmap64, bin_type_bitmap64));
ASSERT_EQ(ObRbBinType::BITMAP_64, bin_type_bitmap64);
ObRoaringBitmap *rb_roaring_bitmap64;
ASSERT_EQ(OB_SUCCESS, ObRbUtils::rb_deserialize(allocator, roaring_bin_bitmap64, rb_roaring_bitmap64));
ASSERT_EQ(rb_roaring_bitmap64->get_version(), 1);
ASSERT_EQ(rb_roaring_bitmap64->get_type(), ObRbType::BITMAP);
ASSERT_EQ(rb_roaring_bitmap64->get_cardinality(), 34);
for (int i = 0; i < MAX_BITMAP_SET_VALUES; i++) {
ASSERT_TRUE(rb_roaring_bitmap64->is_contains(4294967295 + 300 + i));
}
}
} // namespace common
} // namespace oceanbase
int main(int argc, char** argv)
{
::testing::InitGoogleTest(&argc, argv);
// system("rm -f test_geo_tree.log");
// OB_LOGGER.set_file_name("test_geo_tree.log");
OB_LOGGER.set_log_level("DEBUG");
return RUN_ALL_TESTS();
}

View File

@ -347,7 +347,7 @@ int ObCSEncodingTestBase::check_decode_vector(ObMicroBlockCSDecoder &decoder,
}
} else if (vector_format == VEC_DISCRETE || vector_format == VEC_UNIFORM) {
VecValueTypeClass var_tc_arr[] = {VEC_TC_NUMBER, VEC_TC_EXTEND, VEC_TC_STRING, VEC_TC_ENUM_SET_INNER,
VEC_TC_RAW, VEC_TC_ROWID, VEC_TC_LOB, VEC_TC_JSON, VEC_TC_GEO, VEC_TC_UDT};
VEC_TC_RAW, VEC_TC_ROWID, VEC_TC_LOB, VEC_TC_JSON, VEC_TC_GEO, VEC_TC_UDT, VEC_TC_ROARINGBITMAP};
VecValueTypeClass *vec = std::find(std::begin(var_tc_arr), std::end(var_tc_arr), vec_tc);
if (vec == std::end(var_tc_arr)) {
need_test_column = false;
@ -355,7 +355,7 @@ int ObCSEncodingTestBase::check_decode_vector(ObMicroBlockCSDecoder &decoder,
} else if (vector_format == VEC_CONTINUOUS) {
/* can't test now
VecValueTypeClass var_tc_arr[] = {VEC_TC_NUMBER, VEC_TC_EXTEND, VEC_TC_STRING, VEC_TC_ENUM_SET_INNER,
VEC_TC_RAW, VEC_TC_ROWID, VEC_TC_LOB, VEC_TC_JSON, VEC_TC_GEO, VEC_TC_UDT};
VEC_TC_RAW, VEC_TC_ROWID, VEC_TC_LOB, VEC_TC_JSON, VEC_TC_GEO, VEC_TC_UDT, VEC_TC_ROARINGBITMAP};
VecValueTypeClass *vec = std::find(std::begin(var_tc_arr), std::end(var_tc_arr), vec_tc);
if (vec == std::end(var_tc_arr)) {
need_test_column = false;

View File

@ -2258,7 +2258,7 @@ bool VectorDecodeTestUtil::need_test_vec_with_type(
}
} else if (vector_format == VEC_DISCRETE) {
VecValueTypeClass var_tc_arr[] = {VEC_TC_NUMBER, VEC_TC_EXTEND, VEC_TC_STRING, VEC_TC_ENUM_SET_INNER,
VEC_TC_RAW, VEC_TC_ROWID, VEC_TC_LOB, VEC_TC_JSON, VEC_TC_GEO, VEC_TC_UDT};
VEC_TC_RAW, VEC_TC_ROWID, VEC_TC_LOB, VEC_TC_JSON, VEC_TC_GEO, VEC_TC_UDT, VEC_TC_ROARINGBITMAP};
VecValueTypeClass *vec = std::find(std::begin(var_tc_arr), std::end(var_tc_arr), vec_tc);
if (vec == std::end(var_tc_arr)) {
need_test_column = false;

View File

@ -732,7 +732,7 @@ void TestRawDecoder::test_batch_decode_to_vector(
}
} else if (vector_format == VEC_DISCRETE) {
VecValueTypeClass var_tc_arr[] = {VEC_TC_NUMBER, VEC_TC_EXTEND, VEC_TC_STRING, VEC_TC_ENUM_SET_INNER,
VEC_TC_RAW, VEC_TC_ROWID, VEC_TC_LOB, VEC_TC_JSON, VEC_TC_GEO, VEC_TC_UDT};
VEC_TC_RAW, VEC_TC_ROWID, VEC_TC_LOB, VEC_TC_JSON, VEC_TC_GEO, VEC_TC_UDT, VEC_TC_ROARINGBITMAP};
VecValueTypeClass *vec = std::find(std::begin(var_tc_arr), std::end(var_tc_arr), vec_tc);
if (vec == std::end(var_tc_arr)) {
need_test_column = false;

View File

@ -508,7 +508,8 @@ int ObRowGenerate::set_obj(const ObObjType &column_type,
case ObMediumTextType:
case ObLongTextType:
case ObJsonType:
case ObGeometryType: {
case ObGeometryType:
case ObRoaringBitmapType: {
ObLobCommon *value = NULL;
void *buf = NULL;
if (OB_ISNULL(buf = p_allocator_->alloc(sizeof(ObLobCommon) + 10))) {
@ -521,7 +522,7 @@ int ObRowGenerate::set_obj(const ObObjType &column_type,
if (column_type == ObTinyTextType) {
byte_size = 2;
}
obj.meta_.set_collation_type(column_type == ObGeometryType ? CS_TYPE_BINARY
obj.meta_.set_collation_type(column_type == (ObGeometryType || ObRoaringBitmapType) ? CS_TYPE_BINARY
:CS_TYPE_UTF8MB4_GENERAL_CI);
obj.meta_.set_collation_level(CS_LEVEL_IMPLICIT);
obj.set_type(column_type);
@ -771,7 +772,8 @@ int ObRowGenerate::compare_obj(const ObObjType &column_type, const int64_t value
case ObMediumTextType:
case ObLongTextType:
case ObJsonType:
case ObGeometryType: {
case ObGeometryType:
case ObRoaringBitmapType: {
break;
}
case ObBitType: {