commit
a0d8436ad4
|
@ -26,7 +26,7 @@
|
|||
#include "tschemautil.h"
|
||||
#include "tname.h"
|
||||
|
||||
static void tscSetLocalQueryResult(SSqlObj *pSql, const char *val, const char *columnName, size_t valueLength);
|
||||
static void tscSetLocalQueryResult(SSqlObj *pSql, const char *val, const char *columnName, int16_t type, size_t valueLength);
|
||||
|
||||
static int32_t getToStringLength(const char *pData, int32_t length, int32_t type) {
|
||||
char buf[512] = {0};
|
||||
|
@ -275,22 +275,37 @@ static void tscProcessCurrentUser(SSqlObj *pSql) {
|
|||
SQueryInfo* pQueryInfo = tscGetQueryInfoDetail(&pSql->cmd, 0);
|
||||
|
||||
SSqlExpr* pExpr = taosArrayGetP(pQueryInfo->exprList, 0);
|
||||
tscSetLocalQueryResult(pSql, pSql->pTscObj->user, pExpr->aliasName, TSDB_USER_LEN);
|
||||
pExpr->resBytes = TSDB_USER_LEN + TSDB_DATA_TYPE_BINARY;
|
||||
pExpr->resType = TSDB_DATA_TYPE_BINARY;
|
||||
|
||||
char* vx = calloc(1, pExpr->resBytes);
|
||||
STR_WITH_MAXSIZE_TO_VARSTR(vx, pSql->pTscObj->user, TSDB_USER_LEN);
|
||||
|
||||
tscSetLocalQueryResult(pSql, vx, pExpr->aliasName, pExpr->resType, pExpr->resBytes);
|
||||
free(vx);
|
||||
}
|
||||
|
||||
static void tscProcessCurrentDB(SSqlObj *pSql) {
|
||||
char db[TSDB_DB_NAME_LEN + 1] = {0};
|
||||
extractDBName(pSql->pTscObj->db, db);
|
||||
|
||||
// no use db is invoked before.
|
||||
if (strlen(db) == 0) {
|
||||
setNull(db, TSDB_DATA_TYPE_BINARY, TSDB_DB_NAME_LEN);
|
||||
}
|
||||
|
||||
SQueryInfo* pQueryInfo = tscGetQueryInfoDetail(&pSql->cmd, 0);
|
||||
|
||||
SSqlExpr* pExpr = taosArrayGetP(pQueryInfo->exprList, 0);
|
||||
tscSetLocalQueryResult(pSql, db, pExpr->aliasName, TSDB_DB_NAME_LEN);
|
||||
pExpr->resType = TSDB_DATA_TYPE_BINARY;
|
||||
|
||||
size_t t = strlen(db);
|
||||
pExpr->resBytes = TSDB_DB_NAME_LEN + VARSTR_HEADER_SIZE;
|
||||
|
||||
char* vx = calloc(1, pExpr->resBytes);
|
||||
if (t == 0) {
|
||||
setVardataNull(vx, TSDB_DATA_TYPE_BINARY);
|
||||
} else {
|
||||
STR_WITH_SIZE_TO_VARSTR(vx, db, t);
|
||||
}
|
||||
|
||||
tscSetLocalQueryResult(pSql, vx, pExpr->aliasName, pExpr->resType, pExpr->resBytes);
|
||||
free(vx);
|
||||
}
|
||||
|
||||
static void tscProcessServerVer(SSqlObj *pSql) {
|
||||
|
@ -298,14 +313,32 @@ static void tscProcessServerVer(SSqlObj *pSql) {
|
|||
SQueryInfo* pQueryInfo = tscGetQueryInfoDetail(&pSql->cmd, 0);
|
||||
|
||||
SSqlExpr* pExpr = taosArrayGetP(pQueryInfo->exprList, 0);
|
||||
tscSetLocalQueryResult(pSql, v, pExpr->aliasName, tListLen(pSql->pTscObj->sversion));
|
||||
pExpr->resType = TSDB_DATA_TYPE_BINARY;
|
||||
|
||||
size_t t = strlen(v);
|
||||
pExpr->resBytes = t + VARSTR_HEADER_SIZE;
|
||||
|
||||
char* vx = calloc(1, pExpr->resBytes);
|
||||
STR_WITH_SIZE_TO_VARSTR(vx, v, t);
|
||||
tscSetLocalQueryResult(pSql, vx, pExpr->aliasName, pExpr->resType, pExpr->resBytes);
|
||||
|
||||
tfree(vx);
|
||||
}
|
||||
|
||||
static void tscProcessClientVer(SSqlObj *pSql) {
|
||||
SQueryInfo* pQueryInfo = tscGetQueryInfoDetail(&pSql->cmd, 0);
|
||||
|
||||
SSqlExpr* pExpr = taosArrayGetP(pQueryInfo->exprList, 0);
|
||||
tscSetLocalQueryResult(pSql, version, pExpr->aliasName, strlen(version));
|
||||
pExpr->resType = TSDB_DATA_TYPE_BINARY;
|
||||
|
||||
size_t t = strlen(version);
|
||||
pExpr->resBytes = t + VARSTR_HEADER_SIZE;
|
||||
|
||||
char* v = calloc(1, pExpr->resBytes);
|
||||
STR_WITH_SIZE_TO_VARSTR(v, version, t);
|
||||
tscSetLocalQueryResult(pSql, v, pExpr->aliasName, pExpr->resType, pExpr->resBytes);
|
||||
|
||||
tfree(v);
|
||||
}
|
||||
|
||||
static void tscProcessServStatus(SSqlObj *pSql) {
|
||||
|
@ -325,10 +358,11 @@ static void tscProcessServStatus(SSqlObj *pSql) {
|
|||
SQueryInfo* pQueryInfo = tscGetQueryInfoDetail(&pSql->cmd, 0);
|
||||
|
||||
SSqlExpr* pExpr = taosArrayGetP(pQueryInfo->exprList, 0);
|
||||
tscSetLocalQueryResult(pSql, "1", pExpr->aliasName, 2);
|
||||
int32_t val = 1;
|
||||
tscSetLocalQueryResult(pSql, (char*) &val, pExpr->aliasName, TSDB_DATA_TYPE_INT, sizeof(int32_t));
|
||||
}
|
||||
|
||||
void tscSetLocalQueryResult(SSqlObj *pSql, const char *val, const char *columnName, size_t valueLength) {
|
||||
void tscSetLocalQueryResult(SSqlObj *pSql, const char *val, const char *columnName, int16_t type, size_t valueLength) {
|
||||
SSqlCmd *pCmd = &pSql->cmd;
|
||||
SSqlRes *pRes = &pSql->res;
|
||||
|
||||
|
@ -338,8 +372,10 @@ void tscSetLocalQueryResult(SSqlObj *pSql, const char *val, const char *columnNa
|
|||
pQueryInfo->order.order = TSDB_ORDER_ASC;
|
||||
|
||||
tscFieldInfoClear(&pQueryInfo->fieldsInfo);
|
||||
pQueryInfo->fieldsInfo.pFields = taosArrayInit(1, sizeof(TAOS_FIELD));
|
||||
pQueryInfo->fieldsInfo.pSupportInfo = taosArrayInit(1, sizeof(SFieldSupInfo));
|
||||
|
||||
TAOS_FIELD f = tscCreateField(TSDB_DATA_TYPE_BINARY, columnName, valueLength);
|
||||
TAOS_FIELD f = tscCreateField(type, columnName, valueLength);
|
||||
tscFieldInfoAppend(&pQueryInfo->fieldsInfo, &f);
|
||||
|
||||
tscInitResObjForLocalQuery(pSql, 1, valueLength);
|
||||
|
@ -348,7 +384,7 @@ void tscSetLocalQueryResult(SSqlObj *pSql, const char *val, const char *columnNa
|
|||
SFieldSupInfo* pInfo = tscFieldInfoGetSupp(&pQueryInfo->fieldsInfo, 0);
|
||||
pInfo->pSqlExpr = taosArrayGetP(pQueryInfo->exprList, 0);
|
||||
|
||||
strncpy(pRes->data, val, pField->bytes);
|
||||
memcpy(pRes->data, val, pField->bytes);
|
||||
}
|
||||
|
||||
int tscProcessLocalCmd(SSqlObj *pSql) {
|
||||
|
@ -385,7 +421,7 @@ int tscProcessLocalCmd(SSqlObj *pSql) {
|
|||
// keep the code in local variable in order to avoid invalid read in case of async query
|
||||
int32_t code = pSql->res.code;
|
||||
if (code == TSDB_CODE_SUCCESS) {
|
||||
(*pSql->fp)(pSql->param, pSql, 0);
|
||||
(*pSql->fp)(pSql->param, pSql, code);
|
||||
} else {
|
||||
tscQueueAsyncRes(pSql);
|
||||
}
|
||||
|
|
|
@ -5395,20 +5395,15 @@ int32_t doLocalQueryProcess(SQueryInfo* pQueryInfo, SQuerySQL* pQuerySql) {
|
|||
|
||||
switch (index) {
|
||||
case 0:
|
||||
pQueryInfo->command = TSDB_SQL_CURRENT_DB;
|
||||
return TSDB_CODE_SUCCESS;
|
||||
pQueryInfo->command = TSDB_SQL_CURRENT_DB;break;
|
||||
case 1:
|
||||
pQueryInfo->command = TSDB_SQL_SERV_VERSION;
|
||||
return TSDB_CODE_SUCCESS;
|
||||
case 2:
|
||||
pQueryInfo->command = TSDB_SQL_SERV_STATUS;
|
||||
return TSDB_CODE_SUCCESS;
|
||||
pQueryInfo->command = TSDB_SQL_SERV_VERSION;break;
|
||||
case 2:
|
||||
pQueryInfo->command = TSDB_SQL_SERV_STATUS;break;
|
||||
case 3:
|
||||
pQueryInfo->command = TSDB_SQL_CLI_VERSION;
|
||||
return TSDB_CODE_SUCCESS;
|
||||
pQueryInfo->command = TSDB_SQL_CLI_VERSION;break;
|
||||
case 4:
|
||||
pQueryInfo->command = TSDB_SQL_CURRENT_USER;
|
||||
return TSDB_CODE_SUCCESS;
|
||||
pQueryInfo->command = TSDB_SQL_CURRENT_USER;break;
|
||||
default: { return invalidSqlErrMsg(pQueryInfo->msg, msg3); }
|
||||
}
|
||||
|
||||
|
@ -5418,6 +5413,8 @@ int32_t doLocalQueryProcess(SQueryInfo* pQueryInfo, SQuerySQL* pQuerySql) {
|
|||
|
||||
const char* name = (pExprList->a[0].aliasName != NULL)? pExprList->a[0].aliasName:functionsInfo[index].name;
|
||||
strncpy(pExpr1->aliasName, name, tListLen(pExpr1->aliasName));
|
||||
|
||||
return TSDB_CODE_SUCCESS;
|
||||
}
|
||||
|
||||
// can only perform the parameters based on the macro definitation
|
||||
|
|
|
@ -131,13 +131,6 @@ SSchema* tscGetTableColumnSchema(const STableMeta* pTableMeta, int32_t startCol)
|
|||
assert(pTableMeta != NULL);
|
||||
|
||||
SSchema* pSchema = (SSchema*) pTableMeta->schema;
|
||||
#if 0
|
||||
if (pTableMeta->tableType == TSDB_CHILD_TABLE) {
|
||||
assert (pTableMeta->pSTable != NULL);
|
||||
pSchema = pTableMeta->pSTable->schema;
|
||||
}
|
||||
#endif
|
||||
|
||||
return &pSchema[startCol];
|
||||
}
|
||||
|
||||
|
|
|
@ -1391,22 +1391,9 @@ int tscProcessDescribeTableRsp(SSqlObj *pSql) {
|
|||
return tscLocalResultCommonBuilder(pSql, numOfRes);
|
||||
}
|
||||
|
||||
int tscProcessTagRetrieveRsp(SSqlObj *pSql) {
|
||||
// SSqlCmd *pCmd = &pSql->cmd;
|
||||
|
||||
// SQueryInfo * pQueryInfo = tscGetQueryInfoDetail(pCmd, pCmd->clauseIndex);
|
||||
// STableMetaInfo *pTableMetaInfo = tscGetMetaInfo(pQueryInfo, 0);
|
||||
|
||||
int32_t numOfRes = 0;
|
||||
#if 0
|
||||
if (tscSqlExprGet(pQueryInfo, 0)->functionId == TSDB_FUNC_TAGPRJ) {
|
||||
numOfRes = pTableMetaInfo->pMetricMeta->numOfTables;
|
||||
} else {
|
||||
numOfRes = 1; // for count function, there is only one output.
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
int tscProcessLocalRetrieveRsp(SSqlObj *pSql) {
|
||||
int32_t numOfRes = 1;
|
||||
pSql->res.completed = true;
|
||||
return tscLocalResultCommonBuilder(pSql, numOfRes);
|
||||
}
|
||||
|
||||
|
@ -2562,11 +2549,11 @@ void tscInitMsgsFp() {
|
|||
tscProcessMsgRsp[TSDB_SQL_RETRIEVE] = tscProcessRetrieveRspFromNode; // rsp handled by same function.
|
||||
tscProcessMsgRsp[TSDB_SQL_DESCRIBE_TABLE] = tscProcessDescribeTableRsp;
|
||||
|
||||
tscProcessMsgRsp[TSDB_SQL_CURRENT_DB] = tscProcessTagRetrieveRsp;
|
||||
tscProcessMsgRsp[TSDB_SQL_CURRENT_USER] = tscProcessTagRetrieveRsp;
|
||||
tscProcessMsgRsp[TSDB_SQL_SERV_VERSION] = tscProcessTagRetrieveRsp;
|
||||
tscProcessMsgRsp[TSDB_SQL_CLI_VERSION] = tscProcessTagRetrieveRsp;
|
||||
tscProcessMsgRsp[TSDB_SQL_SERV_STATUS] = tscProcessTagRetrieveRsp;
|
||||
tscProcessMsgRsp[TSDB_SQL_CURRENT_DB] = tscProcessLocalRetrieveRsp;
|
||||
tscProcessMsgRsp[TSDB_SQL_CURRENT_USER] = tscProcessLocalRetrieveRsp;
|
||||
tscProcessMsgRsp[TSDB_SQL_SERV_VERSION] = tscProcessLocalRetrieveRsp;
|
||||
tscProcessMsgRsp[TSDB_SQL_CLI_VERSION] = tscProcessLocalRetrieveRsp;
|
||||
tscProcessMsgRsp[TSDB_SQL_SERV_STATUS] = tscProcessLocalRetrieveRsp;
|
||||
|
||||
tscProcessMsgRsp[TSDB_SQL_RETRIEVE_EMPTY_RESULT] = tscProcessEmptyResultRsp;
|
||||
|
||||
|
|
|
@ -413,10 +413,6 @@ int taos_fetch_block_impl(TAOS_RES *res, TAOS_ROW *rows) {
|
|||
|
||||
static void waitForRetrieveRsp(void *param, TAOS_RES *tres, int numOfRows) {
|
||||
SSqlObj* pSql = (SSqlObj*) tres;
|
||||
|
||||
if (numOfRows < 0) { // set the error code
|
||||
pSql->res.code = -numOfRows;
|
||||
}
|
||||
sem_post(&pSql->rspSem);
|
||||
}
|
||||
|
||||
|
@ -444,7 +440,12 @@ TAOS_ROW taos_fetch_row(TAOS_RES *res) {
|
|||
pCmd->command == TSDB_SQL_FETCH ||
|
||||
pCmd->command == TSDB_SQL_SHOW ||
|
||||
pCmd->command == TSDB_SQL_SELECT ||
|
||||
pCmd->command == TSDB_SQL_DESCRIBE_TABLE)) {
|
||||
pCmd->command == TSDB_SQL_DESCRIBE_TABLE ||
|
||||
pCmd->command == TSDB_SQL_SERV_STATUS ||
|
||||
pCmd->command == TSDB_SQL_CURRENT_DB ||
|
||||
pCmd->command == TSDB_SQL_SERV_VERSION ||
|
||||
pCmd->command == TSDB_SQL_CLI_VERSION ||
|
||||
pCmd->command == TSDB_SQL_CURRENT_USER )) {
|
||||
taos_fetch_rows_a(res, waitForRetrieveRsp, pSql->pTscObj);
|
||||
sem_wait(&pSql->rspSem);
|
||||
}
|
||||
|
|
|
@ -965,7 +965,8 @@ static SSqlExpr* doBuildSqlExpr(SQueryInfo* pQueryInfo, int16_t functionId, SCol
|
|||
SSchema* pSchema = tscGetTableTagSchema(pTableMetaInfo->pTableMeta);
|
||||
pExpr->colInfo.colId = pSchema[pColIndex->columnIndex].colId;
|
||||
strncpy(pExpr->colInfo.name, pSchema[pColIndex->columnIndex].name, TSDB_COL_NAME_LEN);
|
||||
} else {
|
||||
} else if (pTableMetaInfo->pTableMeta != NULL) {
|
||||
// in handling select database/version/server_status(), the pTableMeta is NULL
|
||||
SSchema* pSchema = tscGetTableColumnSchema(pTableMetaInfo->pTableMeta, pColIndex->columnIndex);
|
||||
pExpr->colInfo.colId = pSchema->colId;
|
||||
strncpy(pExpr->colInfo.name, pSchema->name, TSDB_COL_NAME_LEN);
|
||||
|
@ -977,8 +978,12 @@ static SSqlExpr* doBuildSqlExpr(SQueryInfo* pQueryInfo, int16_t functionId, SCol
|
|||
pExpr->colInfo.colIndex = pColIndex->columnIndex;
|
||||
pExpr->resType = type;
|
||||
pExpr->resBytes = size;
|
||||
pExpr->interBytes = interSize;
|
||||
pExpr->uid = pTableMetaInfo->pTableMeta->uid;
|
||||
pExpr->interBytes = interSize;
|
||||
|
||||
if (pTableMetaInfo->pTableMeta) {
|
||||
pExpr->uid = pTableMetaInfo->pTableMeta->uid;
|
||||
}
|
||||
|
||||
|
||||
return pExpr;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue