提交 a5be0d1a 编写于 作者: G Ganlin Zhao

[TD-11222]<feature>: Histogram function

上级 aaaf87c3
...@@ -2680,6 +2680,7 @@ int32_t addExprAndResultField(SSqlCmd* pCmd, SQueryInfo* pQueryInfo, int32_t col ...@@ -2680,6 +2680,7 @@ int32_t addExprAndResultField(SSqlCmd* pCmd, SQueryInfo* pQueryInfo, int32_t col
const char* msg21 = "third parameter must be in JSON format"; const char* msg21 = "third parameter must be in JSON format";
const char* msg22 = "invalid parameters for bin_desciption"; const char* msg22 = "invalid parameters for bin_desciption";
const char* msg23 = "parameter/bin out of range [-DBL_MAX, DBL_MAX]"; const char* msg23 = "parameter/bin out of range [-DBL_MAX, DBL_MAX]";
const char* msg24 = "linear_bin 'width' param cannot be 0";
switch (functionId) { switch (functionId) {
case TSDB_FUNC_COUNT: { case TSDB_FUNC_COUNT: {
...@@ -3420,7 +3421,9 @@ int32_t addExprAndResultField(SSqlCmd* pCmd, SQueryInfo* pQueryInfo, int32_t col ...@@ -3420,7 +3421,9 @@ int32_t addExprAndResultField(SSqlCmd* pCmd, SQueryInfo* pQueryInfo, int32_t col
return invalidOperationMsg(tscGetErrorMsgPayload(pCmd), msg22); return invalidOperationMsg(tscGetErrorMsgPayload(pCmd), msg22);
} }
if (isinf(start->valuedouble) || isinf(width->valuedouble)) { if (isinf(start->valuedouble) ||
(width != NULL && isinf(width->valuedouble)) ||
(factor != NULL && isinf(factor->valuedouble))) {
return invalidOperationMsg(tscGetErrorMsgPayload(pCmd), msg23); return invalidOperationMsg(tscGetErrorMsgPayload(pCmd), msg23);
} }
...@@ -3436,6 +3439,10 @@ int32_t addExprAndResultField(SSqlCmd* pCmd, SQueryInfo* pQueryInfo, int32_t col ...@@ -3436,6 +3439,10 @@ int32_t addExprAndResultField(SSqlCmd* pCmd, SQueryInfo* pQueryInfo, int32_t col
intervals = tcalloc(numBins, sizeof(double)); intervals = tcalloc(numBins, sizeof(double));
if (cJSON_IsNumber(width) && factor == NULL && binType == LINEAR_BIN) { if (cJSON_IsNumber(width) && factor == NULL && binType == LINEAR_BIN) {
//linear bin process //linear bin process
if (width->valuedouble == 0) {
tfree(intervals);
return invalidOperationMsg(tscGetErrorMsgPayload(pCmd), msg24);
}
for (int i = 0; i < counter + 1; ++i) { for (int i = 0; i < counter + 1; ++i) {
intervals[startIndex] = start->valuedouble + i * width->valuedouble; intervals[startIndex] = start->valuedouble + i * width->valuedouble;
if (isinf(intervals[i])) { if (isinf(intervals[i])) {
......
...@@ -998,7 +998,54 @@ class TDTestCase: ...@@ -998,7 +998,54 @@ class TDTestCase:
tdSql.checkData(1, 0, "(-1.76e+308:-1.76e+308]:0"); tdSql.checkData(1, 0, "(-1.76e+308:-1.76e+308]:0");
tdSql.checkData(2, 0, "(-1.76e+308:1.79769e+308]:15"); tdSql.checkData(2, 0, "(-1.76e+308:1.79769e+308]:15");
#tdSql.query('select histogram(col_tinyint, \'linear_bin\', \'{"start": -1.80e+308, "width": 5, "count": 5, "infinity": false}\', 0) from stb;') tdSql.query('select histogram(col_tinyint, \'linear_bin\', \'{"start": -0.7e+308, "width": 0.7e+308, "count": 2, "infinity": false}\', 0) from stb;')
tdSql.checkRows(2);
tdSql.checkData(0, 0, "(-7e+307:0]:2");
tdSql.checkData(1, 0, "(0:7e+307]:13");
tdSql.query('select histogram(col_tinyint, \'linear_bin\', \'{"start": -0.7e+308, "width": 0.7e+308, "count": 2, "infinity": false}\', 0) from ctb;')
tdSql.checkRows(2);
tdSql.checkData(0, 0, "(-7e+307:0]:2");
tdSql.checkData(1, 0, "(0:7e+307]:13");
tdSql.query('select histogram(col_tinyint, \'linear_bin\', \'{"start": -0.7e+308, "width": 0.7e+308, "count": 2, "infinity": false}\', 0) from tb;')
tdSql.checkRows(2);
tdSql.checkData(0, 0, "(-7e+307:0]:2");
tdSql.checkData(1, 0, "(0:7e+307]:13");
tdSql.query('select histogram(col_tinyint, \'linear_bin\', \'{"start": -0.7e+308, "width": 0.7e+308, "count": 2, "infinity": true}\', 0) from stb;')
tdSql.checkRows(4);
tdSql.checkData(0, 0, "(-1.79769e+308:-7e+307]:0");
tdSql.checkData(1, 0, "(-7e+307:0]:2");
tdSql.checkData(2, 0, "(0:7e+307]:13");
tdSql.checkData(3, 0, "(7e+307:1.79769e+308]:0");
tdSql.query('select histogram(col_tinyint, \'linear_bin\', \'{"start": -0.7e+308, "width": 0.7e+308, "count": 2, "infinity": true}\', 0) from ctb;')
tdSql.checkRows(4);
tdSql.checkData(0, 0, "(-1.79769e+308:-7e+307]:0");
tdSql.checkData(1, 0, "(-7e+307:0]:2");
tdSql.checkData(2, 0, "(0:7e+307]:13");
tdSql.checkData(3, 0, "(7e+307:1.79769e+308]:0");
tdSql.query('select histogram(col_tinyint, \'linear_bin\', \'{"start": -0.7e+308, "width": 0.7e+308, "count": 2, "infinity": true}\', 0) from tb;')
tdSql.checkRows(4);
tdSql.checkData(0, 0, "(-1.79769e+308:-7e+307]:0");
tdSql.checkData(1, 0, "(-7e+307:0]:2");
tdSql.checkData(2, 0, "(0:7e+307]:13");
tdSql.checkData(3, 0, "(7e+307:1.79769e+308]:0");
tdSql.error('select histogram(col_tinyint, \'linear_bin\', \'{"start": true, "width": 5, "count": 5, "infinity": false}\', 0) from stb;')
tdSql.error('select histogram(col_tinyint, \'linear_bin\', \'{"start": false, "width": 5, "count": 5, "infinity": false}\', 0) from stb;')
tdSql.error('select histogram(col_tinyint, \'linear_bin\', \'{"start": "abc", "width": 5, "count": 5, "infinity": false}\', 0) from stb;')
tdSql.error('select histogram(col_tinyint, \'linear_bin\', \'{"start": "中文", "width": 5, "count": 5, "infinity": false}\', 0) from stb;')
tdSql.error('select histogram(col_tinyint, \'linear_bin\', \'{"start": abc, "width": 5, "count": 5, "infinity": false}\', 0) from stb;')
tdSql.error('select histogram(col_tinyint, \'linear_bin\', \'{"start": -1.80e+308, "width": 5, "count": 5, "infinity": false}\', 0) from stb;')
tdSql.error('select histogram(col_tinyint, \'linear_bin\', \'{"start": 1.80e+308, "width": 5, "count": 5, "infinity": false}\', 0) from stb;')
tdSql.error('select histogram(col_tinyint, \'linear_bin\', \'{"start": 0, "width": true, "count": 5, "infinity": false}\', 0) from stb;')
tdSql.error('select histogram(col_tinyint, \'linear_bin\', \'{"start": 0, "width": false, "count": 5, "infinity": false}\', 0) from stb;')
tdSql.error('select histogram(col_tinyint, \'linear_bin\', \'{"start": 0, "width": "abc", "count": 5, "infinity": false}\', 0) from stb;')
tdSql.error('select histogram(col_tinyint, \'linear_bin\', \'{"start": 0, "width": "中文", "count": 5, "infinity": false}\', 0) from stb;')
tdSql.error('select histogram(col_tinyint, \'linear_bin\', \'{"start": 0, "width": abc, "count": 5, "infinity": false}\', 0) from stb;')
tdSql.error('select histogram(col_tinyint, \'linear_bin\', \'{"start": 0, "width": 0, "count": 5, "infinity": false}\', 0) from stb;')
tdSql.error('select histogram(col_tinyint, \'linear_bin\', \'{"start": 0, "width": -1.80e+308, "count": 5, "infinity": false}\', 0) from stb;')
tdSql.error('select histogram(col_tinyint, \'linear_bin\', \'{"start": 0, "width": 1.80e+308, "count": 5, "infinity": false}\', 0) from stb;')
return return
tdSql.execute('drop database db') tdSql.execute('drop database db')
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册