support udf
This commit is contained in:
parent
a1f747a89e
commit
03a6ba6570
|
@ -241,6 +241,80 @@ static int32_t handlePassword(SSqlCmd* pCmd, SStrToken* pPwd) {
|
||||||
return TSDB_CODE_SUCCESS;
|
return TSDB_CODE_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int32_t readFromFile(char *name, uint32_t *len, void **buf) {
|
||||||
|
struct stat fileStat;
|
||||||
|
if (stat(name, &fileStat) < 0) {
|
||||||
|
tscError("stat file %s failed, error:%s", name, strerror(errno));
|
||||||
|
return TAOS_SYSTEM_ERROR(errno);
|
||||||
|
}
|
||||||
|
|
||||||
|
*len = fileStat.st_size;
|
||||||
|
|
||||||
|
*buf = calloc(1, *len);
|
||||||
|
if (*buf == NULL) {
|
||||||
|
return TSDB_CODE_TSC_OUT_OF_MEMORY;
|
||||||
|
}
|
||||||
|
|
||||||
|
int fd = open(name, O_RDONLY);
|
||||||
|
if (fd < 0) {
|
||||||
|
tscError("open file %s failed, error:%s", name, strerror(errno));
|
||||||
|
tfree(*buf);
|
||||||
|
return TAOS_SYSTEM_ERROR(errno);
|
||||||
|
}
|
||||||
|
|
||||||
|
int64_t s = taosReadImp(fd, *buf, *len);
|
||||||
|
if (s != *len) {
|
||||||
|
tscError("read file %s failed, error:%s", name, strerror(errno));
|
||||||
|
close(fd);
|
||||||
|
tfree(*buf);
|
||||||
|
return TSDB_CODE_TSC_APP_ERROR;
|
||||||
|
}
|
||||||
|
|
||||||
|
return TSDB_CODE_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
int32_t handleCreateFunc(SSqlObj* pSql, struct SSqlInfo* pInfo) {
|
||||||
|
switch (pInfo->type) {
|
||||||
|
case TSDB_SQL_CREATE_FUNCTION:
|
||||||
|
SCreateFuncInfo *createInfo = &pInfo->pMiscInfo->funcOpt;
|
||||||
|
SCreateFuncMsg *pMsg = (SCreateFuncMsg *)pSql->cmd.payload;
|
||||||
|
int32_t len = 0;
|
||||||
|
void *buf = NULL;
|
||||||
|
|
||||||
|
createInfo->path.z[createInfo->path.n] = 0;
|
||||||
|
|
||||||
|
strdequote(createInfo->path.z);
|
||||||
|
|
||||||
|
int32_t ret = readFromFile(createInfo->path.z, &len, &buf);
|
||||||
|
if (ret) {
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
//TODO CHECK CODE
|
||||||
|
|
||||||
|
|
||||||
|
if (len + sizeof(SCreateFuncMsg) > pSql->cmd.allocSize) {
|
||||||
|
ret = tscAllocPayload(&pSql->cmd, len + sizeof(SCreateFuncMsg));
|
||||||
|
if (ret) {
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
pMsg->codeLen = htonl(len);
|
||||||
|
memcpy(pMsg->code, *buf, len);
|
||||||
|
|
||||||
|
break;
|
||||||
|
case TSDB_SQL_DROP_FUNCTION:
|
||||||
|
|
||||||
|
default:
|
||||||
|
return TSDB_CODE_TSC_APP_ERROR;
|
||||||
|
}
|
||||||
|
|
||||||
|
return TSDB_CODE_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
int32_t tscToSQLCmd(SSqlObj* pSql, struct SSqlInfo* pInfo) {
|
int32_t tscToSQLCmd(SSqlObj* pSql, struct SSqlInfo* pInfo) {
|
||||||
if (pInfo == NULL || pSql == NULL) {
|
if (pInfo == NULL || pSql == NULL) {
|
||||||
return TSDB_CODE_TSC_APP_ERROR;
|
return TSDB_CODE_TSC_APP_ERROR;
|
||||||
|
@ -352,6 +426,15 @@ int32_t tscToSQLCmd(SSqlObj* pSql, struct SSqlInfo* pInfo) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
case TSDB_SQL_CREATE_FUNCTION:
|
||||||
|
case TSDB_SQL_DROP_FUNCTION: {
|
||||||
|
if (handleCreateFunc(pSql, pInfo) != TSDB_CODE_SUCCESS) {
|
||||||
|
return TSDB_CODE_TSC_INVALID_SQL;
|
||||||
|
}
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
case TSDB_SQL_ALTER_DB:
|
case TSDB_SQL_ALTER_DB:
|
||||||
case TSDB_SQL_CREATE_DB: {
|
case TSDB_SQL_CREATE_DB: {
|
||||||
const char* msg1 = "invalid db name";
|
const char* msg1 = "invalid db name";
|
||||||
|
|
|
@ -41,8 +41,10 @@ enum {
|
||||||
TSDB_DEFINE_SQL_TYPE( TSDB_SQL_MGMT, "mgmt" )
|
TSDB_DEFINE_SQL_TYPE( TSDB_SQL_MGMT, "mgmt" )
|
||||||
TSDB_DEFINE_SQL_TYPE( TSDB_SQL_CREATE_DB, "create-db" )
|
TSDB_DEFINE_SQL_TYPE( TSDB_SQL_CREATE_DB, "create-db" )
|
||||||
TSDB_DEFINE_SQL_TYPE( TSDB_SQL_CREATE_TABLE, "create-table" )
|
TSDB_DEFINE_SQL_TYPE( TSDB_SQL_CREATE_TABLE, "create-table" )
|
||||||
|
TSDB_DEFINE_SQL_TYPE( TSDB_SQL_CREATE_FUNCTION, "create-function" )
|
||||||
TSDB_DEFINE_SQL_TYPE( TSDB_SQL_DROP_DB, "drop-db" )
|
TSDB_DEFINE_SQL_TYPE( TSDB_SQL_DROP_DB, "drop-db" )
|
||||||
TSDB_DEFINE_SQL_TYPE( TSDB_SQL_DROP_TABLE, "drop-table" )
|
TSDB_DEFINE_SQL_TYPE( TSDB_SQL_DROP_TABLE, "drop-table" )
|
||||||
|
TSDB_DEFINE_SQL_TYPE( TSDB_SQL_DROP_FUNCTION, "drop-function" )
|
||||||
TSDB_DEFINE_SQL_TYPE( TSDB_SQL_CREATE_ACCT, "create-acct" )
|
TSDB_DEFINE_SQL_TYPE( TSDB_SQL_CREATE_ACCT, "create-acct" )
|
||||||
TSDB_DEFINE_SQL_TYPE( TSDB_SQL_CREATE_USER, "create-user" )
|
TSDB_DEFINE_SQL_TYPE( TSDB_SQL_CREATE_USER, "create-user" )
|
||||||
TSDB_DEFINE_SQL_TYPE( TSDB_SQL_DROP_ACCT, "drop-acct" )
|
TSDB_DEFINE_SQL_TYPE( TSDB_SQL_DROP_ACCT, "drop-acct" )
|
||||||
|
|
|
@ -148,6 +148,7 @@ enum _mgmt_table {
|
||||||
TSDB_MGMT_TABLE_STREAMTABLES,
|
TSDB_MGMT_TABLE_STREAMTABLES,
|
||||||
TSDB_MGMT_TABLE_CLUSTER,
|
TSDB_MGMT_TABLE_CLUSTER,
|
||||||
TSDB_MGMT_TABLE_TP,
|
TSDB_MGMT_TABLE_TP,
|
||||||
|
TSDB_MGMT_TABLE_FUNCTION,
|
||||||
TSDB_MGMT_TABLE_MAX,
|
TSDB_MGMT_TABLE_MAX,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -567,6 +568,11 @@ typedef struct {
|
||||||
int8_t reserve[5];
|
int8_t reserve[5];
|
||||||
} SCreateDbMsg, SAlterDbMsg;
|
} SCreateDbMsg, SAlterDbMsg;
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
int32_t codeLen;
|
||||||
|
char code[];
|
||||||
|
} SCreateFuncMsg;
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
char db[TSDB_TABLE_FNAME_LEN];
|
char db[TSDB_TABLE_FNAME_LEN];
|
||||||
uint8_t ignoreNotExists;
|
uint8_t ignoreNotExists;
|
||||||
|
|
|
@ -129,6 +129,12 @@ typedef struct SCreateDbInfo {
|
||||||
int16_t partitions;
|
int16_t partitions;
|
||||||
} SCreateDbInfo;
|
} SCreateDbInfo;
|
||||||
|
|
||||||
|
typedef struct SCreateFuncInfo {
|
||||||
|
SStrToken name;
|
||||||
|
SStrToken path;
|
||||||
|
} SCreateFuncInfo;
|
||||||
|
|
||||||
|
|
||||||
typedef struct SCreateAcctInfo {
|
typedef struct SCreateAcctInfo {
|
||||||
int32_t maxUsers;
|
int32_t maxUsers;
|
||||||
int32_t maxDbs;
|
int32_t maxDbs;
|
||||||
|
@ -163,6 +169,7 @@ typedef struct SMiscInfo {
|
||||||
union {
|
union {
|
||||||
SCreateDbInfo dbOpt;
|
SCreateDbInfo dbOpt;
|
||||||
SCreateAcctInfo acctOpt;
|
SCreateAcctInfo acctOpt;
|
||||||
|
SCreateFuncInfo funcOpt;
|
||||||
SShowInfo showOpt;
|
SShowInfo showOpt;
|
||||||
SStrToken id;
|
SStrToken id;
|
||||||
};
|
};
|
||||||
|
|
|
@ -837,4 +837,3 @@ cmd ::= KILL QUERY INTEGER(X) COLON(Z) INTEGER(Y). {X.n += (Z.n + Y.n); s
|
||||||
COUNT SUM AVG MIN MAX FIRST LAST TOP BOTTOM STDDEV PERCENTILE APERCENTILE LEASTSQUARES HISTOGRAM DIFF
|
COUNT SUM AVG MIN MAX FIRST LAST TOP BOTTOM STDDEV PERCENTILE APERCENTILE LEASTSQUARES HISTOGRAM DIFF
|
||||||
SPREAD TWA INTERP LAST_ROW RATE IRATE SUM_RATE SUM_IRATE AVG_RATE AVG_IRATE TBID NOW IPTOKEN SEMI NONE PREV LINEAR IMPORT
|
SPREAD TWA INTERP LAST_ROW RATE IRATE SUM_RATE SUM_IRATE AVG_RATE AVG_IRATE TBID NOW IPTOKEN SEMI NONE PREV LINEAR IMPORT
|
||||||
METRIC TBNAME JOIN METRICS STABLE NULL INSERT INTO VALUES.
|
METRIC TBNAME JOIN METRICS STABLE NULL INSERT INTO VALUES.
|
||||||
|