[td-2895] merge develop.
This commit is contained in:
commit
aa063917ab
|
@ -16,6 +16,7 @@ SET(TD_GRANT FALSE)
|
||||||
SET(TD_MQTT FALSE)
|
SET(TD_MQTT FALSE)
|
||||||
SET(TD_TSDB_PLUGINS FALSE)
|
SET(TD_TSDB_PLUGINS FALSE)
|
||||||
SET(TD_STORAGE FALSE)
|
SET(TD_STORAGE FALSE)
|
||||||
|
SET(TD_TOPIC FALSE)
|
||||||
|
|
||||||
SET(TD_COVER FALSE)
|
SET(TD_COVER FALSE)
|
||||||
SET(TD_MEM_CHECK FALSE)
|
SET(TD_MEM_CHECK FALSE)
|
||||||
|
|
|
@ -25,6 +25,10 @@ IF (TD_STORAGE)
|
||||||
ADD_DEFINITIONS(-D_STORAGE)
|
ADD_DEFINITIONS(-D_STORAGE)
|
||||||
ENDIF ()
|
ENDIF ()
|
||||||
|
|
||||||
|
IF (TD_TOPIC)
|
||||||
|
ADD_DEFINITIONS(-D_TOPIC)
|
||||||
|
ENDIF ()
|
||||||
|
|
||||||
IF (TD_GODLL)
|
IF (TD_GODLL)
|
||||||
ADD_DEFINITIONS(-D_TD_GO_DLL_)
|
ADD_DEFINITIONS(-D_TD_GO_DLL_)
|
||||||
ENDIF ()
|
ENDIF ()
|
||||||
|
|
|
@ -9,6 +9,14 @@ ELSEIF (${ACCOUNT} MATCHES "false")
|
||||||
MESSAGE(STATUS "Build without account plugins")
|
MESSAGE(STATUS "Build without account plugins")
|
||||||
ENDIF ()
|
ENDIF ()
|
||||||
|
|
||||||
|
IF (${TOPIC} MATCHES "true")
|
||||||
|
SET(TD_TOPIC TRUE)
|
||||||
|
MESSAGE(STATUS "Build with topic plugins")
|
||||||
|
ELSEIF (${TOPIC} MATCHES "false")
|
||||||
|
SET(TD_TOPIC FALSE)
|
||||||
|
MESSAGE(STATUS "Build without topic plugins")
|
||||||
|
ENDIF ()
|
||||||
|
|
||||||
IF (${COVER} MATCHES "true")
|
IF (${COVER} MATCHES "true")
|
||||||
SET(TD_COVER TRUE)
|
SET(TD_COVER TRUE)
|
||||||
MESSAGE(STATUS "Build with test coverage")
|
MESSAGE(STATUS "Build with test coverage")
|
||||||
|
|
|
@ -2426,7 +2426,7 @@ int32_t addExprAndResultField(SSqlCmd* pCmd, SQueryInfo* pQueryInfo, int32_t col
|
||||||
|
|
||||||
return TSDB_CODE_SUCCESS;
|
return TSDB_CODE_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
default:
|
default:
|
||||||
return TSDB_CODE_TSC_INVALID_SQL;
|
return TSDB_CODE_TSC_INVALID_SQL;
|
||||||
}
|
}
|
||||||
|
@ -5538,6 +5538,8 @@ static void setCreateDBOption(SCreateDbMsg* pMsg, SCreateDbInfo* pCreateDb) {
|
||||||
pMsg->ignoreExist = pCreateDb->ignoreExists;
|
pMsg->ignoreExist = pCreateDb->ignoreExists;
|
||||||
pMsg->update = pCreateDb->update;
|
pMsg->update = pCreateDb->update;
|
||||||
pMsg->cacheLastRow = pCreateDb->cachelast;
|
pMsg->cacheLastRow = pCreateDb->cachelast;
|
||||||
|
pMsg->dbType = pCreateDb->dbType;
|
||||||
|
pMsg->partitions = htons(pCreateDb->partitions);
|
||||||
}
|
}
|
||||||
|
|
||||||
int32_t parseCreateDBOptions(SSqlCmd* pCmd, SCreateDbInfo* pCreateDbSql) {
|
int32_t parseCreateDBOptions(SSqlCmd* pCmd, SCreateDbInfo* pCreateDbSql) {
|
||||||
|
@ -6168,6 +6170,15 @@ int32_t tscCheckCreateDbParams(SSqlCmd* pCmd, SCreateDbMsg* pCreate) {
|
||||||
return invalidSqlErrMsg(tscGetErrorMsgPayload(pCmd), msg);
|
return invalidSqlErrMsg(tscGetErrorMsgPayload(pCmd), msg);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
val = (int16_t)htons(pCreate->partitions);
|
||||||
|
if (val != -1 &&
|
||||||
|
(val < TSDB_MIN_DB_PARTITON_OPTION || val > TSDB_MAX_DB_PARTITON_OPTION)) {
|
||||||
|
snprintf(msg, tListLen(msg), "invalid topic option partition: %d valid range: [%d, %d]", val,
|
||||||
|
TSDB_MIN_DB_PARTITON_OPTION, TSDB_MAX_DB_PARTITON_OPTION);
|
||||||
|
return invalidSqlErrMsg(tscGetErrorMsgPayload(pCmd), msg);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
return TSDB_CODE_SUCCESS;
|
return TSDB_CODE_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1071,7 +1071,8 @@ int tscBuildQueryMsg(SSqlObj *pSql, SSqlInfo *pInfo) {
|
||||||
int32_t tscBuildCreateDbMsg(SSqlObj *pSql, SSqlInfo *pInfo) {
|
int32_t tscBuildCreateDbMsg(SSqlObj *pSql, SSqlInfo *pInfo) {
|
||||||
SSqlCmd *pCmd = &pSql->cmd;
|
SSqlCmd *pCmd = &pSql->cmd;
|
||||||
pCmd->payloadLen = sizeof(SCreateDbMsg);
|
pCmd->payloadLen = sizeof(SCreateDbMsg);
|
||||||
pCmd->msgType = TSDB_MSG_TYPE_CM_CREATE_DB;
|
|
||||||
|
pCmd->msgType = (pInfo->pMiscInfo->dbOpt.dbType == TSDB_DB_TYPE_DEFAULT) ? TSDB_MSG_TYPE_CM_CREATE_DB : TSDB_MSG_TYPE_CM_CREATE_TP;
|
||||||
|
|
||||||
SCreateDbMsg *pCreateDbMsg = (SCreateDbMsg *)pCmd->payload;
|
SCreateDbMsg *pCreateDbMsg = (SCreateDbMsg *)pCmd->payload;
|
||||||
|
|
||||||
|
@ -1203,7 +1204,7 @@ int32_t tscBuildDropDbMsg(SSqlObj *pSql, SSqlInfo *pInfo) {
|
||||||
|
|
||||||
pDropDbMsg->ignoreNotExists = pInfo->pMiscInfo->existsCheck ? 1 : 0;
|
pDropDbMsg->ignoreNotExists = pInfo->pMiscInfo->existsCheck ? 1 : 0;
|
||||||
|
|
||||||
pCmd->msgType = TSDB_MSG_TYPE_CM_DROP_DB;
|
pCmd->msgType = (pInfo->pMiscInfo->dbType == TSDB_DB_TYPE_DEFAULT) ? TSDB_MSG_TYPE_CM_DROP_DB : TSDB_MSG_TYPE_CM_DROP_TP;
|
||||||
return TSDB_CODE_SUCCESS;
|
return TSDB_CODE_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1530,9 +1531,11 @@ int tscBuildUpdateTagMsg(SSqlObj* pSql, SSqlInfo *pInfo) {
|
||||||
int tscAlterDbMsg(SSqlObj *pSql, SSqlInfo *pInfo) {
|
int tscAlterDbMsg(SSqlObj *pSql, SSqlInfo *pInfo) {
|
||||||
SSqlCmd *pCmd = &pSql->cmd;
|
SSqlCmd *pCmd = &pSql->cmd;
|
||||||
pCmd->payloadLen = sizeof(SAlterDbMsg);
|
pCmd->payloadLen = sizeof(SAlterDbMsg);
|
||||||
pCmd->msgType = TSDB_MSG_TYPE_CM_ALTER_DB;
|
pCmd->msgType = (pInfo->pMiscInfo->dbOpt.dbType == TSDB_DB_TYPE_DEFAULT) ? TSDB_MSG_TYPE_CM_ALTER_DB : TSDB_MSG_TYPE_CM_ALTER_TP;
|
||||||
|
|
||||||
SAlterDbMsg *pAlterDbMsg = (SAlterDbMsg* )pCmd->payload;
|
SAlterDbMsg *pAlterDbMsg = (SAlterDbMsg* )pCmd->payload;
|
||||||
|
pAlterDbMsg->dbType = -1;
|
||||||
|
|
||||||
STableMetaInfo *pTableMetaInfo = tscGetTableMetaInfoFromCmd(pCmd, pCmd->clauseIndex, 0);
|
STableMetaInfo *pTableMetaInfo = tscGetTableMetaInfoFromCmd(pCmd, pCmd->clauseIndex, 0);
|
||||||
tNameExtractFullName(&pTableMetaInfo->name, pAlterDbMsg->db);
|
tNameExtractFullName(&pTableMetaInfo->name, pAlterDbMsg->db);
|
||||||
|
|
||||||
|
|
|
@ -1944,7 +1944,11 @@ void tscFirstRoundRetrieveCallback(void* param, TAOS_RES* tres, int numOfRows) {
|
||||||
|
|
||||||
// tag or group by column
|
// tag or group by column
|
||||||
if (TSDB_COL_IS_TAG(pExpr->colInfo.flag) || pExpr->functionId == TSDB_FUNC_PRJ) {
|
if (TSDB_COL_IS_TAG(pExpr->colInfo.flag) || pExpr->functionId == TSDB_FUNC_PRJ) {
|
||||||
memcpy(p + offset, row[i], length[i]);
|
if (row[i] == NULL) {
|
||||||
|
setNull(p + offset, pExpr->resType, pExpr->resBytes);
|
||||||
|
} else {
|
||||||
|
memcpy(p + offset, row[i], length[i]);
|
||||||
|
}
|
||||||
offset += pExpr->resBytes;
|
offset += pExpr->resBytes;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -95,6 +95,7 @@ extern int8_t tsCompression;
|
||||||
extern int8_t tsWAL;
|
extern int8_t tsWAL;
|
||||||
extern int32_t tsFsyncPeriod;
|
extern int32_t tsFsyncPeriod;
|
||||||
extern int32_t tsReplications;
|
extern int32_t tsReplications;
|
||||||
|
extern int16_t tsPartitons;
|
||||||
extern int32_t tsQuorum;
|
extern int32_t tsQuorum;
|
||||||
extern int8_t tsUpdate;
|
extern int8_t tsUpdate;
|
||||||
extern int8_t tsCacheLastRow;
|
extern int8_t tsCacheLastRow;
|
||||||
|
|
|
@ -126,8 +126,9 @@ int8_t tsWAL = TSDB_DEFAULT_WAL_LEVEL;
|
||||||
int32_t tsFsyncPeriod = TSDB_DEFAULT_FSYNC_PERIOD;
|
int32_t tsFsyncPeriod = TSDB_DEFAULT_FSYNC_PERIOD;
|
||||||
int32_t tsReplications = TSDB_DEFAULT_DB_REPLICA_OPTION;
|
int32_t tsReplications = TSDB_DEFAULT_DB_REPLICA_OPTION;
|
||||||
int32_t tsQuorum = TSDB_DEFAULT_DB_QUORUM_OPTION;
|
int32_t tsQuorum = TSDB_DEFAULT_DB_QUORUM_OPTION;
|
||||||
|
int16_t tsPartitons = TSDB_DEFAULT_DB_PARTITON_OPTION;
|
||||||
int8_t tsUpdate = TSDB_DEFAULT_DB_UPDATE_OPTION;
|
int8_t tsUpdate = TSDB_DEFAULT_DB_UPDATE_OPTION;
|
||||||
int8_t tsCacheLastRow = TSDB_DEFAULT_CACHE_BLOCK_SIZE;
|
int8_t tsCacheLastRow = TSDB_DEFAULT_CACHE_LAST_ROW;
|
||||||
int32_t tsMaxVgroupsPerDb = 0;
|
int32_t tsMaxVgroupsPerDb = 0;
|
||||||
int32_t tsMinTablePerVnode = TSDB_TABLES_STEP;
|
int32_t tsMinTablePerVnode = TSDB_TABLES_STEP;
|
||||||
int32_t tsMaxTablePerVnode = TSDB_DEFAULT_TABLES;
|
int32_t tsMaxTablePerVnode = TSDB_DEFAULT_TABLES;
|
||||||
|
@ -853,6 +854,16 @@ static void doInitGlobalConfig(void) {
|
||||||
cfg.unitType = TAOS_CFG_UTYPE_NONE;
|
cfg.unitType = TAOS_CFG_UTYPE_NONE;
|
||||||
taosInitConfigOption(cfg);
|
taosInitConfigOption(cfg);
|
||||||
|
|
||||||
|
cfg.option = "partitions";
|
||||||
|
cfg.ptr = &tsPartitons;
|
||||||
|
cfg.valType = TAOS_CFG_VTYPE_INT16;
|
||||||
|
cfg.cfgType = TSDB_CFG_CTYPE_B_CONFIG | TSDB_CFG_CTYPE_B_SHOW;
|
||||||
|
cfg.minValue = TSDB_MIN_DB_PARTITON_OPTION;
|
||||||
|
cfg.maxValue = TSDB_MAX_DB_PARTITON_OPTION;
|
||||||
|
cfg.ptrLength = 0;
|
||||||
|
cfg.unitType = TAOS_CFG_UTYPE_NONE;
|
||||||
|
taosInitConfigOption(cfg);
|
||||||
|
|
||||||
cfg.option = "quorum";
|
cfg.option = "quorum";
|
||||||
cfg.ptr = &tsQuorum;
|
cfg.ptr = &tsQuorum;
|
||||||
cfg.valType = TAOS_CFG_VTYPE_INT32;
|
cfg.valType = TAOS_CFG_VTYPE_INT32;
|
||||||
|
|
|
@ -1,74 +1,12 @@
|
||||||
package com.taosdata.jdbc;
|
package com.taosdata.jdbc;
|
||||||
|
|
||||||
import java.io.*;
|
|
||||||
import java.sql.Driver;
|
import java.sql.Driver;
|
||||||
import java.sql.DriverPropertyInfo;
|
import java.sql.DriverPropertyInfo;
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.Properties;
|
import java.util.Properties;
|
||||||
import java.util.StringTokenizer;
|
import java.util.StringTokenizer;
|
||||||
|
|
||||||
public abstract class AbstractDriver implements Driver {
|
public abstract class AbstractDriver implements Driver {
|
||||||
|
|
||||||
private static final String TAOS_CFG_FILENAME = "taos.cfg";
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @param cfgDirPath
|
|
||||||
* @return return the config dir
|
|
||||||
**/
|
|
||||||
protected File loadConfigDir(String cfgDirPath) {
|
|
||||||
if (cfgDirPath == null)
|
|
||||||
return loadDefaultConfigDir();
|
|
||||||
File cfgDir = new File(cfgDirPath);
|
|
||||||
if (!cfgDir.exists())
|
|
||||||
return loadDefaultConfigDir();
|
|
||||||
return cfgDir;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @return search the default config dir, if the config dir is not exist will return null
|
|
||||||
*/
|
|
||||||
protected File loadDefaultConfigDir() {
|
|
||||||
File cfgDir;
|
|
||||||
File cfgDir_linux = new File("/etc/taos");
|
|
||||||
cfgDir = cfgDir_linux.exists() ? cfgDir_linux : null;
|
|
||||||
File cfgDir_windows = new File("C:\\TDengine\\cfg");
|
|
||||||
cfgDir = (cfgDir == null && cfgDir_windows.exists()) ? cfgDir_windows : cfgDir;
|
|
||||||
return cfgDir;
|
|
||||||
}
|
|
||||||
|
|
||||||
protected List<String> loadConfigEndpoints(File cfgFile) {
|
|
||||||
List<String> endpoints = new ArrayList<>();
|
|
||||||
try (BufferedReader reader = new BufferedReader(new FileReader(cfgFile))) {
|
|
||||||
String line = null;
|
|
||||||
while ((line = reader.readLine()) != null) {
|
|
||||||
if (line.trim().startsWith("firstEp") || line.trim().startsWith("secondEp")) {
|
|
||||||
endpoints.add(line.substring(line.indexOf('p') + 1).trim());
|
|
||||||
}
|
|
||||||
if (endpoints.size() > 1)
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
} catch (FileNotFoundException e) {
|
|
||||||
e.printStackTrace();
|
|
||||||
} catch (IOException e) {
|
|
||||||
e.printStackTrace();
|
|
||||||
}
|
|
||||||
return endpoints;
|
|
||||||
}
|
|
||||||
|
|
||||||
protected void loadTaosConfig(Properties info) {
|
|
||||||
if ((info.getProperty(TSDBDriver.PROPERTY_KEY_HOST) == null || info.getProperty(TSDBDriver.PROPERTY_KEY_HOST).isEmpty()) && (
|
|
||||||
info.getProperty(TSDBDriver.PROPERTY_KEY_PORT) == null || info.getProperty(TSDBDriver.PROPERTY_KEY_PORT).isEmpty())) {
|
|
||||||
File cfgDir = loadConfigDir(info.getProperty(TSDBDriver.PROPERTY_KEY_CONFIG_DIR));
|
|
||||||
File cfgFile = cfgDir.listFiles((dir, name) -> TAOS_CFG_FILENAME.equalsIgnoreCase(name))[0];
|
|
||||||
List<String> endpoints = loadConfigEndpoints(cfgFile);
|
|
||||||
if (!endpoints.isEmpty()) {
|
|
||||||
info.setProperty(TSDBDriver.PROPERTY_KEY_HOST, endpoints.get(0).split(":")[0]);
|
|
||||||
info.setProperty(TSDBDriver.PROPERTY_KEY_PORT, endpoints.get(0).split(":")[1]);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
protected DriverPropertyInfo[] getPropertyInfo(Properties info) {
|
protected DriverPropertyInfo[] getPropertyInfo(Properties info) {
|
||||||
DriverPropertyInfo hostProp = new DriverPropertyInfo(TSDBDriver.PROPERTY_KEY_HOST, info.getProperty(TSDBDriver.PROPERTY_KEY_HOST));
|
DriverPropertyInfo hostProp = new DriverPropertyInfo(TSDBDriver.PROPERTY_KEY_HOST, info.getProperty(TSDBDriver.PROPERTY_KEY_HOST));
|
||||||
hostProp.required = false;
|
hostProp.required = false;
|
||||||
|
@ -154,6 +92,4 @@ public abstract class AbstractDriver implements Driver {
|
||||||
return urlProps;
|
return urlProps;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -52,4 +52,14 @@ public class ColumnMetaData {
|
||||||
public void setColIndex(int colIndex) {
|
public void setColIndex(int colIndex) {
|
||||||
this.colIndex = colIndex;
|
this.colIndex = colIndex;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String toString() {
|
||||||
|
return "ColumnMetaData{" +
|
||||||
|
"colType=" + colType +
|
||||||
|
", colName='" + colName + '\'' +
|
||||||
|
", colSize=" + colSize +
|
||||||
|
", colIndex=" + colIndex +
|
||||||
|
'}';
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -87,11 +87,10 @@ public class TSDBConnection extends AbstractConnection {
|
||||||
}
|
}
|
||||||
|
|
||||||
public void close() throws SQLException {
|
public void close() throws SQLException {
|
||||||
if (isClosed()) {
|
if (isClosed)
|
||||||
throw TSDBError.createSQLException(TSDBErrorNumbers.ERROR_CONNECTION_CLOSED);
|
return;
|
||||||
}
|
|
||||||
this.isClosed = true;
|
|
||||||
this.connector.closeConnection();
|
this.connector.closeConnection();
|
||||||
|
this.isClosed = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean isClosed() throws SQLException {
|
public boolean isClosed() throws SQLException {
|
||||||
|
|
|
@ -112,8 +112,6 @@ public class TSDBDriver extends AbstractDriver {
|
||||||
if ((props = parseURL(url, info)) == null) {
|
if ((props = parseURL(url, info)) == null) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
//load taos.cfg start
|
|
||||||
loadTaosConfig(info);
|
|
||||||
|
|
||||||
try {
|
try {
|
||||||
TSDBJNIConnector.init((String) props.get(PROPERTY_KEY_CONFIG_DIR), (String) props.get(PROPERTY_KEY_LOCALE),
|
TSDBJNIConnector.init((String) props.get(PROPERTY_KEY_CONFIG_DIR), (String) props.get(PROPERTY_KEY_LOCALE),
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
/***************************************************************************
|
/**
|
||||||
|
* *************************************************************************
|
||||||
* Copyright (c) 2019 TAOS Data, Inc. <jhtao@taosdata.com>
|
* Copyright (c) 2019 TAOS Data, Inc. <jhtao@taosdata.com>
|
||||||
*
|
*
|
||||||
* This program is free software: you can use, redistribute, and/or modify
|
* This program is free software: you can use, redistribute, and/or modify
|
||||||
|
@ -11,7 +12,7 @@
|
||||||
*
|
*
|
||||||
* You should have received a copy of the GNU Affero General Public License
|
* You should have received a copy of the GNU Affero General Public License
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*****************************************************************************/
|
**************************************************************************** */
|
||||||
package com.taosdata.jdbc;
|
package com.taosdata.jdbc;
|
||||||
|
|
||||||
import com.taosdata.jdbc.utils.TaosInfo;
|
import com.taosdata.jdbc.utils.TaosInfo;
|
||||||
|
@ -20,6 +21,9 @@ import java.sql.SQLException;
|
||||||
import java.sql.SQLWarning;
|
import java.sql.SQLWarning;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* JNI connector
|
||||||
|
* */
|
||||||
public class TSDBJNIConnector {
|
public class TSDBJNIConnector {
|
||||||
private static volatile Boolean isInitialized = false;
|
private static volatile Boolean isInitialized = false;
|
||||||
|
|
||||||
|
|
|
@ -20,18 +20,16 @@ import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
public class TSDBResultSet extends AbstractResultSet implements ResultSet {
|
public class TSDBResultSet extends AbstractResultSet implements ResultSet {
|
||||||
private TSDBJNIConnector jniConnector;
|
private final TSDBJNIConnector jniConnector;
|
||||||
|
|
||||||
private final TSDBStatement statement;
|
private final TSDBStatement statement;
|
||||||
private long resultSetPointer = 0L;
|
private final long resultSetPointer;
|
||||||
private List<ColumnMetaData> columnMetaDataList = new ArrayList<>();
|
private List<ColumnMetaData> columnMetaDataList = new ArrayList<>();
|
||||||
|
private final TSDBResultSetRowData rowData;
|
||||||
private TSDBResultSetRowData rowData;
|
private final TSDBResultSetBlockData blockData;
|
||||||
private TSDBResultSetBlockData blockData;
|
|
||||||
|
|
||||||
private boolean batchFetch = false;
|
private boolean batchFetch = false;
|
||||||
private boolean lastWasNull = false;
|
private boolean lastWasNull = false;
|
||||||
private final int COLUMN_INDEX_START_VALUE = 1;
|
private boolean isClosed;
|
||||||
|
|
||||||
public void setBatchFetch(boolean batchFetch) {
|
public void setBatchFetch(boolean batchFetch) {
|
||||||
this.batchFetch = batchFetch;
|
this.batchFetch = batchFetch;
|
||||||
|
@ -56,13 +54,13 @@ public class TSDBResultSet extends AbstractResultSet implements ResultSet {
|
||||||
|
|
||||||
int code = this.jniConnector.getSchemaMetaData(this.resultSetPointer, this.columnMetaDataList);
|
int code = this.jniConnector.getSchemaMetaData(this.resultSetPointer, this.columnMetaDataList);
|
||||||
if (code == TSDBConstants.JNI_CONNECTION_NULL) {
|
if (code == TSDBConstants.JNI_CONNECTION_NULL) {
|
||||||
throw new SQLException(TSDBConstants.FixErrMsg(TSDBConstants.JNI_CONNECTION_NULL));
|
throw TSDBError.createSQLException(TSDBErrorNumbers.ERROR_JNI_CONNECTION_NULL);
|
||||||
}
|
}
|
||||||
if (code == TSDBConstants.JNI_RESULT_SET_NULL) {
|
if (code == TSDBConstants.JNI_RESULT_SET_NULL) {
|
||||||
throw new SQLException(TSDBConstants.FixErrMsg(TSDBConstants.JNI_RESULT_SET_NULL));
|
throw TSDBError.createSQLException(TSDBErrorNumbers.ERROR_JNI_RESULT_SET_NULL);
|
||||||
}
|
}
|
||||||
if (code == TSDBConstants.JNI_NUM_OF_FIELDS_0) {
|
if (code == TSDBConstants.JNI_NUM_OF_FIELDS_0) {
|
||||||
throw new SQLException(TSDBConstants.FixErrMsg(TSDBConstants.JNI_NUM_OF_FIELDS_0));
|
throw TSDBError.createSQLException(TSDBErrorNumbers.ERROR_JNI_NUM_OF_FIELDS_0);
|
||||||
}
|
}
|
||||||
this.rowData = new TSDBResultSetRowData(this.columnMetaDataList.size());
|
this.rowData = new TSDBResultSetRowData(this.columnMetaDataList.size());
|
||||||
this.blockData = new TSDBResultSetBlockData(this.columnMetaDataList, this.columnMetaDataList.size());
|
this.blockData = new TSDBResultSetBlockData(this.columnMetaDataList, this.columnMetaDataList.size());
|
||||||
|
@ -78,16 +76,12 @@ public class TSDBResultSet extends AbstractResultSet implements ResultSet {
|
||||||
this.blockData.reset();
|
this.blockData.reset();
|
||||||
|
|
||||||
if (code == TSDBConstants.JNI_CONNECTION_NULL) {
|
if (code == TSDBConstants.JNI_CONNECTION_NULL) {
|
||||||
throw new SQLException(TSDBConstants.FixErrMsg(TSDBConstants.JNI_CONNECTION_NULL));
|
throw TSDBError.createSQLException(TSDBErrorNumbers.ERROR_JNI_CONNECTION_NULL);
|
||||||
} else if (code == TSDBConstants.JNI_RESULT_SET_NULL) {
|
} else if (code == TSDBConstants.JNI_RESULT_SET_NULL) {
|
||||||
throw new SQLException(TSDBConstants.FixErrMsg(TSDBConstants.JNI_RESULT_SET_NULL));
|
throw TSDBError.createSQLException(TSDBErrorNumbers.ERROR_JNI_RESULT_SET_NULL);
|
||||||
} else if (code == TSDBConstants.JNI_NUM_OF_FIELDS_0) {
|
} else if (code == TSDBConstants.JNI_NUM_OF_FIELDS_0) {
|
||||||
throw new SQLException(TSDBConstants.FixErrMsg(TSDBConstants.JNI_NUM_OF_FIELDS_0));
|
throw TSDBError.createSQLException(TSDBErrorNumbers.ERROR_JNI_NUM_OF_FIELDS_0);
|
||||||
} else if (code == TSDBConstants.JNI_FETCH_END) {
|
} else return code != TSDBConstants.JNI_FETCH_END;
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
return true;
|
|
||||||
} else {
|
} else {
|
||||||
if (rowData != null) {
|
if (rowData != null) {
|
||||||
this.rowData.clear();
|
this.rowData.clear();
|
||||||
|
@ -95,11 +89,11 @@ public class TSDBResultSet extends AbstractResultSet implements ResultSet {
|
||||||
|
|
||||||
int code = this.jniConnector.fetchRow(this.resultSetPointer, this.rowData);
|
int code = this.jniConnector.fetchRow(this.resultSetPointer, this.rowData);
|
||||||
if (code == TSDBConstants.JNI_CONNECTION_NULL) {
|
if (code == TSDBConstants.JNI_CONNECTION_NULL) {
|
||||||
throw new SQLException(TSDBConstants.FixErrMsg(TSDBConstants.JNI_CONNECTION_NULL));
|
throw TSDBError.createSQLException(TSDBErrorNumbers.ERROR_JNI_CONNECTION_NULL);
|
||||||
} else if (code == TSDBConstants.JNI_RESULT_SET_NULL) {
|
} else if (code == TSDBConstants.JNI_RESULT_SET_NULL) {
|
||||||
throw new SQLException(TSDBConstants.FixErrMsg(TSDBConstants.JNI_RESULT_SET_NULL));
|
throw TSDBError.createSQLException(TSDBErrorNumbers.ERROR_JNI_RESULT_SET_NULL);
|
||||||
} else if (code == TSDBConstants.JNI_NUM_OF_FIELDS_0) {
|
} else if (code == TSDBConstants.JNI_NUM_OF_FIELDS_0) {
|
||||||
throw new SQLException(TSDBConstants.FixErrMsg(TSDBConstants.JNI_NUM_OF_FIELDS_0));
|
throw TSDBError.createSQLException(TSDBErrorNumbers.ERROR_JNI_NUM_OF_FIELDS_0);
|
||||||
} else if (code == TSDBConstants.JNI_FETCH_END) {
|
} else if (code == TSDBConstants.JNI_FETCH_END) {
|
||||||
return false;
|
return false;
|
||||||
} else {
|
} else {
|
||||||
|
@ -109,14 +103,17 @@ public class TSDBResultSet extends AbstractResultSet implements ResultSet {
|
||||||
}
|
}
|
||||||
|
|
||||||
public void close() throws SQLException {
|
public void close() throws SQLException {
|
||||||
|
if (isClosed)
|
||||||
|
return;
|
||||||
if (this.jniConnector != null) {
|
if (this.jniConnector != null) {
|
||||||
int code = this.jniConnector.freeResultSet(this.resultSetPointer);
|
int code = this.jniConnector.freeResultSet(this.resultSetPointer);
|
||||||
if (code == TSDBConstants.JNI_CONNECTION_NULL) {
|
if (code == TSDBConstants.JNI_CONNECTION_NULL) {
|
||||||
throw new SQLException(TSDBConstants.FixErrMsg(TSDBConstants.JNI_CONNECTION_NULL));
|
throw TSDBError.createSQLException(TSDBErrorNumbers.ERROR_JNI_CONNECTION_NULL);
|
||||||
} else if (code == TSDBConstants.JNI_RESULT_SET_NULL) {
|
} else if (code == TSDBConstants.JNI_RESULT_SET_NULL) {
|
||||||
throw new SQLException(TSDBConstants.FixErrMsg(TSDBConstants.JNI_RESULT_SET_NULL));
|
throw TSDBError.createSQLException(TSDBErrorNumbers.ERROR_JNI_RESULT_SET_NULL);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
isClosed = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean wasNull() throws SQLException {
|
public boolean wasNull() throws SQLException {
|
||||||
|
@ -415,8 +412,8 @@ public class TSDBResultSet extends AbstractResultSet implements ResultSet {
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean isClosed() throws SQLException {
|
public boolean isClosed() throws SQLException {
|
||||||
//TODO: check if need release resources
|
if (isClosed)
|
||||||
boolean isClosed = true;
|
return true;
|
||||||
if (jniConnector != null) {
|
if (jniConnector != null) {
|
||||||
isClosed = jniConnector.isResultsetClosed();
|
isClosed = jniConnector.isResultsetClosed();
|
||||||
}
|
}
|
||||||
|
@ -429,14 +426,12 @@ public class TSDBResultSet extends AbstractResultSet implements ResultSet {
|
||||||
}
|
}
|
||||||
|
|
||||||
private int getTrueColumnIndex(int columnIndex) throws SQLException {
|
private int getTrueColumnIndex(int columnIndex) throws SQLException {
|
||||||
if (columnIndex < this.COLUMN_INDEX_START_VALUE) {
|
if (columnIndex < 1)
|
||||||
throw new SQLException("Column Index out of range, " + columnIndex + " < " + this.COLUMN_INDEX_START_VALUE);
|
throw TSDBError.createSQLException(TSDBErrorNumbers.ERROR_PARAMETER_INDEX_OUT_RANGE, "columnIndex(" + columnIndex + "): < 1");
|
||||||
}
|
|
||||||
|
|
||||||
int numOfCols = this.columnMetaDataList.size();
|
int numOfCols = this.columnMetaDataList.size();
|
||||||
if (columnIndex > numOfCols) {
|
if (columnIndex > numOfCols)
|
||||||
throw new SQLException("Column Index out of range, " + columnIndex + " > " + numOfCols);
|
throw TSDBError.createSQLException(TSDBErrorNumbers.ERROR_PARAMETER_INDEX_OUT_RANGE, "columnIndex: " + columnIndex);
|
||||||
}
|
|
||||||
return columnIndex - 1;
|
return columnIndex - 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -73,11 +73,11 @@ public class TSDBStatement extends AbstractStatement {
|
||||||
}
|
}
|
||||||
|
|
||||||
public void close() throws SQLException {
|
public void close() throws SQLException {
|
||||||
if (!isClosed) {
|
if (isClosed)
|
||||||
if (this.resultSet != null)
|
return;
|
||||||
this.resultSet.close();
|
if (this.resultSet != null && !this.resultSet.isClosed())
|
||||||
isClosed = true;
|
this.resultSet.close();
|
||||||
}
|
isClosed = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean execute(String sql) throws SQLException {
|
public boolean execute(String sql) throws SQLException {
|
||||||
|
|
|
@ -7,24 +7,26 @@ import java.sql.SQLWarning;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
import static org.junit.Assert.*;
|
|
||||||
|
|
||||||
public class TSDBJNIConnectorTest {
|
public class TSDBJNIConnectorTest {
|
||||||
|
|
||||||
public static void main(String[] args) {
|
private static TSDBResultSetRowData rowData;
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void test() {
|
||||||
try {
|
try {
|
||||||
TSDBJNIConnector.init("/etc/taos/taos.cfg", "en_US.UTF-8", "", "");
|
// init
|
||||||
|
TSDBJNIConnector.init(null, null, null, null);
|
||||||
|
// connect
|
||||||
TSDBJNIConnector connector = new TSDBJNIConnector();
|
TSDBJNIConnector connector = new TSDBJNIConnector();
|
||||||
connector.connect("127.0.0.1", 6030, "test", "root", "taosdata");
|
connector.connect("127.0.0.1", 6030, null, "root", "taosdata");
|
||||||
long pSql = connector.executeQuery("show dnodes");
|
// executeQuery
|
||||||
// if pSql is create/insert/update/delete/alter SQL
|
long pSql = connector.executeQuery("show variables");
|
||||||
if (connector.isUpdateQuery(pSql)) {
|
if (connector.isUpdateQuery(pSql)) {
|
||||||
connector.freeResultSet(pSql);
|
connector.freeResultSet(pSql);
|
||||||
throw TSDBError.createSQLException(TSDBErrorNumbers.ERROR_INVALID_WITH_EXECUTEQUERY);
|
throw TSDBError.createSQLException(TSDBErrorNumbers.ERROR_INVALID_WITH_EXECUTEQUERY);
|
||||||
}
|
}
|
||||||
|
// get schema
|
||||||
List<ColumnMetaData> columnMetaDataList = new ArrayList<>();
|
List<ColumnMetaData> columnMetaDataList = new ArrayList<>();
|
||||||
|
|
||||||
int code = connector.getSchemaMetaData(pSql, columnMetaDataList);
|
int code = connector.getSchemaMetaData(pSql, columnMetaDataList);
|
||||||
if (code == TSDBConstants.JNI_CONNECTION_NULL) {
|
if (code == TSDBConstants.JNI_CONNECTION_NULL) {
|
||||||
throw new SQLException(TSDBConstants.FixErrMsg(TSDBConstants.JNI_CONNECTION_NULL));
|
throw new SQLException(TSDBConstants.FixErrMsg(TSDBConstants.JNI_CONNECTION_NULL));
|
||||||
|
@ -35,6 +37,29 @@ public class TSDBJNIConnectorTest {
|
||||||
if (code == TSDBConstants.JNI_NUM_OF_FIELDS_0) {
|
if (code == TSDBConstants.JNI_NUM_OF_FIELDS_0) {
|
||||||
throw new SQLException(TSDBConstants.FixErrMsg(TSDBConstants.JNI_NUM_OF_FIELDS_0));
|
throw new SQLException(TSDBConstants.FixErrMsg(TSDBConstants.JNI_NUM_OF_FIELDS_0));
|
||||||
}
|
}
|
||||||
|
int columnSize = columnMetaDataList.size();
|
||||||
|
// print metadata
|
||||||
|
for (int i = 0; i < columnSize; i++) {
|
||||||
|
System.out.println(columnMetaDataList.get(i));
|
||||||
|
}
|
||||||
|
rowData = new TSDBResultSetRowData(columnSize);
|
||||||
|
// iterate resultSet
|
||||||
|
for (int i = 0; next(connector, pSql); i++) {
|
||||||
|
System.out.println("col[" + i + "] size: " + rowData.getColSize());
|
||||||
|
rowData.getData().stream().forEach(col -> System.out.print(col + "\t"));
|
||||||
|
System.out.println();
|
||||||
|
}
|
||||||
|
// close resultSet
|
||||||
|
code = connector.freeResultSet(pSql);
|
||||||
|
if (code == TSDBConstants.JNI_CONNECTION_NULL) {
|
||||||
|
throw TSDBError.createSQLException(TSDBErrorNumbers.ERROR_JNI_CONNECTION_NULL);
|
||||||
|
} else if (code == TSDBConstants.JNI_RESULT_SET_NULL) {
|
||||||
|
throw TSDBError.createSQLException(TSDBErrorNumbers.ERROR_JNI_RESULT_SET_NULL);
|
||||||
|
}
|
||||||
|
// close statement
|
||||||
|
|
||||||
|
// close connection
|
||||||
|
connector.closeConnection();
|
||||||
|
|
||||||
} catch (SQLWarning throwables) {
|
} catch (SQLWarning throwables) {
|
||||||
throwables.printStackTrace();
|
throwables.printStackTrace();
|
||||||
|
@ -43,88 +68,22 @@ public class TSDBJNIConnectorTest {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static boolean next(TSDBJNIConnector connector, long pSql) throws SQLException {
|
||||||
|
if (rowData != null)
|
||||||
|
rowData.clear();
|
||||||
|
|
||||||
@Test
|
int code = connector.fetchRow(pSql, rowData);
|
||||||
public void isClosed() {
|
if (code == TSDBConstants.JNI_CONNECTION_NULL) {
|
||||||
|
throw TSDBError.createSQLException(TSDBErrorNumbers.ERROR_JNI_CONNECTION_NULL);
|
||||||
|
} else if (code == TSDBConstants.JNI_RESULT_SET_NULL) {
|
||||||
|
throw TSDBError.createSQLException(TSDBErrorNumbers.ERROR_JNI_RESULT_SET_NULL);
|
||||||
|
} else if (code == TSDBConstants.JNI_NUM_OF_FIELDS_0) {
|
||||||
|
throw TSDBError.createSQLException(TSDBErrorNumbers.ERROR_JNI_NUM_OF_FIELDS_0);
|
||||||
|
} else if (code == TSDBConstants.JNI_FETCH_END) {
|
||||||
|
return false;
|
||||||
|
} else {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
|
||||||
public void isResultsetClosed() {
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
public void init() {
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
public void initImp() {
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
public void setOptions() {
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
public void getTsCharset() {
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
public void connect() {
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
public void executeQuery() {
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
public void getErrCode() {
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
public void getErrMsg() {
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
public void isUpdateQuery() {
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
public void freeResultSet() {
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
public void getAffectedRows() {
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
public void getSchemaMetaData() {
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
public void fetchRow() {
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
public void fetchBlock() {
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
public void closeConnection() {
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
public void subscribe() {
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
public void consume() {
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
public void unsubscribe() {
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
public void validateCreateTableSql() {
|
|
||||||
}
|
|
||||||
}
|
}
|
|
@ -31,6 +31,10 @@ IF (TD_MQTT)
|
||||||
TARGET_LINK_LIBRARIES(taosd mqtt)
|
TARGET_LINK_LIBRARIES(taosd mqtt)
|
||||||
ENDIF ()
|
ENDIF ()
|
||||||
|
|
||||||
|
IF (TD_TOPIC)
|
||||||
|
TARGET_LINK_LIBRARIES(taosd topic)
|
||||||
|
ENDIF ()
|
||||||
|
|
||||||
SET(PREPARE_ENV_CMD "prepare_env_cmd")
|
SET(PREPARE_ENV_CMD "prepare_env_cmd")
|
||||||
SET(PREPARE_ENV_TARGET "prepare_env_target")
|
SET(PREPARE_ENV_TARGET "prepare_env_target")
|
||||||
ADD_CUSTOM_COMMAND(OUTPUT ${PREPARE_ENV_CMD}
|
ADD_CUSTOM_COMMAND(OUTPUT ${PREPARE_ENV_CMD}
|
||||||
|
|
|
@ -146,10 +146,10 @@ void dnodeSendRpcMWriteRsp(void *pMsg, int32_t code) {
|
||||||
}
|
}
|
||||||
|
|
||||||
dTrace("msg:%p, app:%p type:%s master:%p will be responsed", pWrite, pWrite->rpcMsg.ahandle,
|
dTrace("msg:%p, app:%p type:%s master:%p will be responsed", pWrite, pWrite->rpcMsg.ahandle,
|
||||||
taosMsg[pWrite->rpcMsg.msgType], pWrite->pBatchMasterMsg);
|
taosMsg[pWrite->rpcMsg.msgType], pWrite->pBatchMasterMsg);
|
||||||
if (pWrite->pBatchMasterMsg && pWrite != pWrite->pBatchMasterMsg) {
|
if (pWrite->pBatchMasterMsg && pWrite != pWrite->pBatchMasterMsg) {
|
||||||
dError("msg:%p, app:%p type:%s master:%p sub message should not response!", pWrite, pWrite->rpcMsg.ahandle,
|
dError("msg:%p, app:%p type:%s master:%p sub message should not response!", pWrite, pWrite->rpcMsg.ahandle,
|
||||||
taosMsg[pWrite->rpcMsg.msgType], pWrite->pBatchMasterMsg);
|
taosMsg[pWrite->rpcMsg.msgType], pWrite->pBatchMasterMsg);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -189,6 +189,11 @@ static void dnodeCheckDataDirOpenned(char *dir) {
|
||||||
}
|
}
|
||||||
|
|
||||||
static int32_t dnodeInitStorage() {
|
static int32_t dnodeInitStorage() {
|
||||||
|
if (tsDiskCfgNum == 1 && dnodeCreateDir(tsDataDir) < 0) {
|
||||||
|
dError("failed to create dir: %s, reason: %s", tsDataDir, strerror(errno));
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
if (tfsInit(tsDiskCfg, tsDiskCfgNum) < 0) {
|
if (tfsInit(tsDiskCfg, tsDiskCfgNum) < 0) {
|
||||||
dError("failed to init TFS since %s", tstrerror(terrno));
|
dError("failed to init TFS since %s", tstrerror(terrno));
|
||||||
return -1;
|
return -1;
|
||||||
|
|
|
@ -47,8 +47,11 @@ int32_t dnodeInitShell() {
|
||||||
dnodeProcessShellMsgFp[TSDB_MSG_TYPE_CM_CREATE_DNODE]= dnodeDispatchToMWriteQueue;
|
dnodeProcessShellMsgFp[TSDB_MSG_TYPE_CM_CREATE_DNODE]= dnodeDispatchToMWriteQueue;
|
||||||
dnodeProcessShellMsgFp[TSDB_MSG_TYPE_CM_DROP_DNODE] = dnodeDispatchToMWriteQueue;
|
dnodeProcessShellMsgFp[TSDB_MSG_TYPE_CM_DROP_DNODE] = dnodeDispatchToMWriteQueue;
|
||||||
dnodeProcessShellMsgFp[TSDB_MSG_TYPE_CM_CREATE_DB] = dnodeDispatchToMWriteQueue;
|
dnodeProcessShellMsgFp[TSDB_MSG_TYPE_CM_CREATE_DB] = dnodeDispatchToMWriteQueue;
|
||||||
|
dnodeProcessShellMsgFp[TSDB_MSG_TYPE_CM_CREATE_TP] = dnodeDispatchToMWriteQueue;
|
||||||
dnodeProcessShellMsgFp[TSDB_MSG_TYPE_CM_DROP_DB] = dnodeDispatchToMWriteQueue;
|
dnodeProcessShellMsgFp[TSDB_MSG_TYPE_CM_DROP_DB] = dnodeDispatchToMWriteQueue;
|
||||||
|
dnodeProcessShellMsgFp[TSDB_MSG_TYPE_CM_DROP_TP] = dnodeDispatchToMWriteQueue;
|
||||||
dnodeProcessShellMsgFp[TSDB_MSG_TYPE_CM_ALTER_DB] = dnodeDispatchToMWriteQueue;
|
dnodeProcessShellMsgFp[TSDB_MSG_TYPE_CM_ALTER_DB] = dnodeDispatchToMWriteQueue;
|
||||||
|
dnodeProcessShellMsgFp[TSDB_MSG_TYPE_CM_ALTER_TP] = dnodeDispatchToMWriteQueue;
|
||||||
dnodeProcessShellMsgFp[TSDB_MSG_TYPE_CM_CREATE_TABLE]= dnodeDispatchToMWriteQueue;
|
dnodeProcessShellMsgFp[TSDB_MSG_TYPE_CM_CREATE_TABLE]= dnodeDispatchToMWriteQueue;
|
||||||
dnodeProcessShellMsgFp[TSDB_MSG_TYPE_CM_DROP_TABLE] = dnodeDispatchToMWriteQueue;
|
dnodeProcessShellMsgFp[TSDB_MSG_TYPE_CM_DROP_TABLE] = dnodeDispatchToMWriteQueue;
|
||||||
dnodeProcessShellMsgFp[TSDB_MSG_TYPE_CM_ALTER_TABLE] = dnodeDispatchToMWriteQueue;
|
dnodeProcessShellMsgFp[TSDB_MSG_TYPE_CM_ALTER_TABLE] = dnodeDispatchToMWriteQueue;
|
||||||
|
|
|
@ -222,6 +222,9 @@ do { \
|
||||||
#define TSDB_MQTT_TOPIC_LEN 64
|
#define TSDB_MQTT_TOPIC_LEN 64
|
||||||
#define TSDB_MQTT_CLIENT_ID_LEN 32
|
#define TSDB_MQTT_CLIENT_ID_LEN 32
|
||||||
|
|
||||||
|
#define TSDB_DB_TYPE_DEFAULT 0
|
||||||
|
#define TSDB_DB_TYPE_TOPIC 1
|
||||||
|
|
||||||
#define TSDB_DEFAULT_PKT_SIZE 65480 //same as RPC_MAX_UDP_SIZE
|
#define TSDB_DEFAULT_PKT_SIZE 65480 //same as RPC_MAX_UDP_SIZE
|
||||||
|
|
||||||
#define TSDB_PAYLOAD_SIZE TSDB_DEFAULT_PKT_SIZE
|
#define TSDB_PAYLOAD_SIZE TSDB_DEFAULT_PKT_SIZE
|
||||||
|
@ -306,6 +309,10 @@ do { \
|
||||||
#define TSDB_MAX_DB_REPLICA_OPTION 3
|
#define TSDB_MAX_DB_REPLICA_OPTION 3
|
||||||
#define TSDB_DEFAULT_DB_REPLICA_OPTION 1
|
#define TSDB_DEFAULT_DB_REPLICA_OPTION 1
|
||||||
|
|
||||||
|
#define TSDB_MIN_DB_PARTITON_OPTION 0
|
||||||
|
#define TSDB_MAX_DB_PARTITON_OPTION 1000
|
||||||
|
#define TSDB_DEFAULT_DB_PARTITON_OPTION 4
|
||||||
|
|
||||||
#define TSDB_MIN_DB_QUORUM_OPTION 1
|
#define TSDB_MIN_DB_QUORUM_OPTION 1
|
||||||
#define TSDB_MAX_DB_QUORUM_OPTION 2
|
#define TSDB_MAX_DB_QUORUM_OPTION 2
|
||||||
#define TSDB_DEFAULT_DB_QUORUM_OPTION 1
|
#define TSDB_DEFAULT_DB_QUORUM_OPTION 1
|
||||||
|
|
|
@ -185,6 +185,9 @@ int32_t* taosGetErrno();
|
||||||
#define TSDB_CODE_MND_INVALID_DB_OPTION_DAYS TAOS_DEF_ERROR_CODE(0, 0x0390) //"Invalid database option: days out of range")
|
#define TSDB_CODE_MND_INVALID_DB_OPTION_DAYS TAOS_DEF_ERROR_CODE(0, 0x0390) //"Invalid database option: days out of range")
|
||||||
#define TSDB_CODE_MND_INVALID_DB_OPTION_KEEP TAOS_DEF_ERROR_CODE(0, 0x0391) //"Invalid database option: keep >= keep1 >= keep0 >= days")
|
#define TSDB_CODE_MND_INVALID_DB_OPTION_KEEP TAOS_DEF_ERROR_CODE(0, 0x0391) //"Invalid database option: keep >= keep1 >= keep0 >= days")
|
||||||
|
|
||||||
|
#define TSDB_CODE_MND_INVALID_TOPIC TAOS_DEF_ERROR_CODE(0, 0x0392) //"Invalid topic name)
|
||||||
|
#define TSDB_CODE_MND_INVALID_TOPIC_OPTION TAOS_DEF_ERROR_CODE(0, 0x0393) //"Invalid topic option)
|
||||||
|
|
||||||
// dnode
|
// dnode
|
||||||
#define TSDB_CODE_DND_MSG_NOT_PROCESSED TAOS_DEF_ERROR_CODE(0, 0x0400) //"Message not processed")
|
#define TSDB_CODE_DND_MSG_NOT_PROCESSED TAOS_DEF_ERROR_CODE(0, 0x0400) //"Message not processed")
|
||||||
#define TSDB_CODE_DND_OUT_OF_MEMORY TAOS_DEF_ERROR_CODE(0, 0x0401) //"Dnode out of memory")
|
#define TSDB_CODE_DND_OUT_OF_MEMORY TAOS_DEF_ERROR_CODE(0, 0x0401) //"Dnode out of memory")
|
||||||
|
|
|
@ -107,6 +107,12 @@ TAOS_DEFINE_MESSAGE_TYPE( TSDB_MSG_TYPE_DUMMY13, "dummy13" )
|
||||||
TAOS_DEFINE_MESSAGE_TYPE( TSDB_MSG_TYPE_DUMMY14, "dummy14" )
|
TAOS_DEFINE_MESSAGE_TYPE( TSDB_MSG_TYPE_DUMMY14, "dummy14" )
|
||||||
TAOS_DEFINE_MESSAGE_TYPE( TSDB_MSG_TYPE_NETWORK_TEST, "nettest" )
|
TAOS_DEFINE_MESSAGE_TYPE( TSDB_MSG_TYPE_NETWORK_TEST, "nettest" )
|
||||||
|
|
||||||
|
// message for topic
|
||||||
|
TAOS_DEFINE_MESSAGE_TYPE( TSDB_MSG_TYPE_CM_CREATE_TP, "create-tp" )
|
||||||
|
TAOS_DEFINE_MESSAGE_TYPE( TSDB_MSG_TYPE_CM_DROP_TP, "drop-tp" )
|
||||||
|
TAOS_DEFINE_MESSAGE_TYPE( TSDB_MSG_TYPE_CM_USE_TP, "use-tp" )
|
||||||
|
TAOS_DEFINE_MESSAGE_TYPE( TSDB_MSG_TYPE_CM_ALTER_TP, "alter-tp" )
|
||||||
|
|
||||||
#ifndef TAOS_MESSAGE_C
|
#ifndef TAOS_MESSAGE_C
|
||||||
TSDB_MSG_TYPE_MAX // 105
|
TSDB_MSG_TYPE_MAX // 105
|
||||||
#endif
|
#endif
|
||||||
|
@ -141,6 +147,7 @@ enum _mgmt_table {
|
||||||
TSDB_MGMT_TABLE_VNODES,
|
TSDB_MGMT_TABLE_VNODES,
|
||||||
TSDB_MGMT_TABLE_STREAMTABLES,
|
TSDB_MGMT_TABLE_STREAMTABLES,
|
||||||
TSDB_MGMT_TABLE_CLUSTER,
|
TSDB_MGMT_TABLE_CLUSTER,
|
||||||
|
TSDB_MGMT_TABLE_TP,
|
||||||
TSDB_MGMT_TABLE_MAX,
|
TSDB_MGMT_TABLE_MAX,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -558,7 +565,9 @@ typedef struct {
|
||||||
int8_t ignoreExist;
|
int8_t ignoreExist;
|
||||||
int8_t update;
|
int8_t update;
|
||||||
int8_t cacheLastRow;
|
int8_t cacheLastRow;
|
||||||
int8_t reserve[8];
|
int8_t dbType;
|
||||||
|
int16_t partitions;
|
||||||
|
int8_t reserve[5];
|
||||||
} SCreateDbMsg, SAlterDbMsg;
|
} SCreateDbMsg, SAlterDbMsg;
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
|
@ -677,7 +686,8 @@ typedef struct {
|
||||||
int8_t cacheLastRow;
|
int8_t cacheLastRow;
|
||||||
int32_t vgCfgVersion;
|
int32_t vgCfgVersion;
|
||||||
int8_t dbReplica;
|
int8_t dbReplica;
|
||||||
int8_t reserved[9];
|
int8_t dbType;
|
||||||
|
int8_t reserved[8];
|
||||||
} SVnodeCfg;
|
} SVnodeCfg;
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
|
|
|
@ -0,0 +1,31 @@
|
||||||
|
/*
|
||||||
|
* Copyright (c) 2019 TAOS Data, Inc. <jhtao@taosdata.com>
|
||||||
|
*
|
||||||
|
* This program is free software: you can use, redistribute, and/or modify
|
||||||
|
* it under the terms of the GNU Affero General Public License, version 3
|
||||||
|
* or later ("AGPL"), as published by the Free Software Foundation.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful, but WITHOUT
|
||||||
|
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||||
|
* FITNESS FOR A PARTICULAR PURPOSE.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU Affero General Public License
|
||||||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef TDENGINE_TP
|
||||||
|
#define TDENGINE_TP
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
int32_t tpInit();
|
||||||
|
void tpCleanUp();
|
||||||
|
void tpUpdateTs(int32_t *seq, void *pMsg);
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif
|
|
@ -62,144 +62,147 @@
|
||||||
#define TK_BITNOT 43
|
#define TK_BITNOT 43
|
||||||
#define TK_SHOW 44
|
#define TK_SHOW 44
|
||||||
#define TK_DATABASES 45
|
#define TK_DATABASES 45
|
||||||
#define TK_MNODES 46
|
#define TK_TOPICS 46
|
||||||
#define TK_DNODES 47
|
#define TK_MNODES 47
|
||||||
#define TK_ACCOUNTS 48
|
#define TK_DNODES 48
|
||||||
#define TK_USERS 49
|
#define TK_ACCOUNTS 49
|
||||||
#define TK_MODULES 50
|
#define TK_USERS 50
|
||||||
#define TK_QUERIES 51
|
#define TK_MODULES 51
|
||||||
#define TK_CONNECTIONS 52
|
#define TK_QUERIES 52
|
||||||
#define TK_STREAMS 53
|
#define TK_CONNECTIONS 53
|
||||||
#define TK_VARIABLES 54
|
#define TK_STREAMS 54
|
||||||
#define TK_SCORES 55
|
#define TK_VARIABLES 55
|
||||||
#define TK_GRANTS 56
|
#define TK_SCORES 56
|
||||||
#define TK_VNODES 57
|
#define TK_GRANTS 57
|
||||||
#define TK_IPTOKEN 58
|
#define TK_VNODES 58
|
||||||
#define TK_DOT 59
|
#define TK_IPTOKEN 59
|
||||||
#define TK_CREATE 60
|
#define TK_DOT 60
|
||||||
#define TK_TABLE 61
|
#define TK_CREATE 61
|
||||||
#define TK_DATABASE 62
|
#define TK_TABLE 62
|
||||||
#define TK_TABLES 63
|
#define TK_DATABASE 63
|
||||||
#define TK_STABLES 64
|
#define TK_TABLES 64
|
||||||
#define TK_VGROUPS 65
|
#define TK_STABLES 65
|
||||||
#define TK_DROP 66
|
#define TK_VGROUPS 66
|
||||||
#define TK_STABLE 67
|
#define TK_DROP 67
|
||||||
#define TK_DNODE 68
|
#define TK_STABLE 68
|
||||||
#define TK_USER 69
|
#define TK_TOPIC 69
|
||||||
#define TK_ACCOUNT 70
|
#define TK_DNODE 70
|
||||||
#define TK_USE 71
|
#define TK_USER 71
|
||||||
#define TK_DESCRIBE 72
|
#define TK_ACCOUNT 72
|
||||||
#define TK_ALTER 73
|
#define TK_USE 73
|
||||||
#define TK_PASS 74
|
#define TK_DESCRIBE 74
|
||||||
#define TK_PRIVILEGE 75
|
#define TK_ALTER 75
|
||||||
#define TK_LOCAL 76
|
#define TK_PASS 76
|
||||||
#define TK_IF 77
|
#define TK_PRIVILEGE 77
|
||||||
#define TK_EXISTS 78
|
#define TK_LOCAL 78
|
||||||
#define TK_PPS 79
|
#define TK_IF 79
|
||||||
#define TK_TSERIES 80
|
#define TK_EXISTS 80
|
||||||
#define TK_DBS 81
|
#define TK_PPS 81
|
||||||
#define TK_STORAGE 82
|
#define TK_TSERIES 82
|
||||||
#define TK_QTIME 83
|
#define TK_DBS 83
|
||||||
#define TK_CONNS 84
|
#define TK_STORAGE 84
|
||||||
#define TK_STATE 85
|
#define TK_QTIME 85
|
||||||
#define TK_KEEP 86
|
#define TK_CONNS 86
|
||||||
#define TK_CACHE 87
|
#define TK_STATE 87
|
||||||
#define TK_REPLICA 88
|
#define TK_KEEP 88
|
||||||
#define TK_QUORUM 89
|
#define TK_CACHE 89
|
||||||
#define TK_DAYS 90
|
#define TK_REPLICA 90
|
||||||
#define TK_MINROWS 91
|
#define TK_QUORUM 91
|
||||||
#define TK_MAXROWS 92
|
#define TK_DAYS 92
|
||||||
#define TK_BLOCKS 93
|
#define TK_MINROWS 93
|
||||||
#define TK_CTIME 94
|
#define TK_MAXROWS 94
|
||||||
#define TK_WAL 95
|
#define TK_BLOCKS 95
|
||||||
#define TK_FSYNC 96
|
#define TK_CTIME 96
|
||||||
#define TK_COMP 97
|
#define TK_WAL 97
|
||||||
#define TK_PRECISION 98
|
#define TK_FSYNC 98
|
||||||
#define TK_UPDATE 99
|
#define TK_COMP 99
|
||||||
#define TK_CACHELAST 100
|
#define TK_PRECISION 100
|
||||||
#define TK_LP 101
|
#define TK_UPDATE 101
|
||||||
#define TK_RP 102
|
#define TK_CACHELAST 102
|
||||||
#define TK_UNSIGNED 103
|
#define TK_PARTITIONS 103
|
||||||
#define TK_TAGS 104
|
#define TK_LP 104
|
||||||
#define TK_USING 105
|
#define TK_RP 105
|
||||||
#define TK_COMMA 106
|
#define TK_UNSIGNED 106
|
||||||
#define TK_AS 107
|
#define TK_TAGS 107
|
||||||
#define TK_NULL 108
|
#define TK_USING 108
|
||||||
#define TK_SELECT 109
|
#define TK_COMMA 109
|
||||||
#define TK_UNION 110
|
#define TK_AS 110
|
||||||
#define TK_ALL 111
|
#define TK_NULL 111
|
||||||
#define TK_DISTINCT 112
|
#define TK_SELECT 112
|
||||||
#define TK_FROM 113
|
#define TK_UNION 113
|
||||||
#define TK_VARIABLE 114
|
#define TK_ALL 114
|
||||||
#define TK_INTERVAL 115
|
#define TK_DISTINCT 115
|
||||||
#define TK_FILL 116
|
#define TK_FROM 116
|
||||||
#define TK_SLIDING 117
|
#define TK_VARIABLE 117
|
||||||
#define TK_ORDER 118
|
#define TK_INTERVAL 118
|
||||||
#define TK_BY 119
|
#define TK_FILL 119
|
||||||
#define TK_ASC 120
|
#define TK_SLIDING 120
|
||||||
#define TK_DESC 121
|
#define TK_ORDER 121
|
||||||
#define TK_GROUP 122
|
#define TK_BY 122
|
||||||
#define TK_HAVING 123
|
#define TK_ASC 123
|
||||||
#define TK_LIMIT 124
|
#define TK_DESC 124
|
||||||
#define TK_OFFSET 125
|
#define TK_GROUP 125
|
||||||
#define TK_SLIMIT 126
|
#define TK_HAVING 126
|
||||||
#define TK_SOFFSET 127
|
#define TK_LIMIT 127
|
||||||
#define TK_WHERE 128
|
#define TK_OFFSET 128
|
||||||
#define TK_NOW 129
|
#define TK_SLIMIT 129
|
||||||
#define TK_RESET 130
|
#define TK_SOFFSET 130
|
||||||
#define TK_QUERY 131
|
#define TK_WHERE 131
|
||||||
#define TK_ADD 132
|
#define TK_NOW 132
|
||||||
#define TK_COLUMN 133
|
#define TK_RESET 133
|
||||||
#define TK_TAG 134
|
#define TK_QUERY 134
|
||||||
#define TK_CHANGE 135
|
#define TK_ADD 135
|
||||||
#define TK_SET 136
|
#define TK_COLUMN 136
|
||||||
#define TK_KILL 137
|
#define TK_TAG 137
|
||||||
#define TK_CONNECTION 138
|
#define TK_CHANGE 138
|
||||||
#define TK_STREAM 139
|
#define TK_SET 139
|
||||||
#define TK_COLON 140
|
#define TK_KILL 140
|
||||||
#define TK_ABORT 141
|
#define TK_CONNECTION 141
|
||||||
#define TK_AFTER 142
|
#define TK_STREAM 142
|
||||||
#define TK_ATTACH 143
|
#define TK_COLON 143
|
||||||
#define TK_BEFORE 144
|
#define TK_ABORT 144
|
||||||
#define TK_BEGIN 145
|
#define TK_AFTER 145
|
||||||
#define TK_CASCADE 146
|
#define TK_ATTACH 146
|
||||||
#define TK_CLUSTER 147
|
#define TK_BEFORE 147
|
||||||
#define TK_CONFLICT 148
|
#define TK_BEGIN 148
|
||||||
#define TK_COPY 149
|
#define TK_CASCADE 149
|
||||||
#define TK_DEFERRED 150
|
#define TK_CLUSTER 150
|
||||||
#define TK_DELIMITERS 151
|
#define TK_CONFLICT 151
|
||||||
#define TK_DETACH 152
|
#define TK_COPY 152
|
||||||
#define TK_EACH 153
|
#define TK_DEFERRED 153
|
||||||
#define TK_END 154
|
#define TK_DELIMITERS 154
|
||||||
#define TK_EXPLAIN 155
|
#define TK_DETACH 155
|
||||||
#define TK_FAIL 156
|
#define TK_EACH 156
|
||||||
#define TK_FOR 157
|
#define TK_END 157
|
||||||
#define TK_IGNORE 158
|
#define TK_EXPLAIN 158
|
||||||
#define TK_IMMEDIATE 159
|
#define TK_FAIL 159
|
||||||
#define TK_INITIALLY 160
|
#define TK_FOR 160
|
||||||
#define TK_INSTEAD 161
|
#define TK_IGNORE 161
|
||||||
#define TK_MATCH 162
|
#define TK_IMMEDIATE 162
|
||||||
#define TK_KEY 163
|
#define TK_INITIALLY 163
|
||||||
#define TK_OF 164
|
#define TK_INSTEAD 164
|
||||||
#define TK_RAISE 165
|
#define TK_MATCH 165
|
||||||
#define TK_REPLACE 166
|
#define TK_KEY 166
|
||||||
#define TK_RESTRICT 167
|
#define TK_OF 167
|
||||||
#define TK_ROW 168
|
#define TK_RAISE 168
|
||||||
#define TK_STATEMENT 169
|
#define TK_REPLACE 169
|
||||||
#define TK_TRIGGER 170
|
#define TK_RESTRICT 170
|
||||||
#define TK_VIEW 171
|
#define TK_ROW 171
|
||||||
#define TK_SEMI 172
|
#define TK_STATEMENT 172
|
||||||
#define TK_NONE 173
|
#define TK_TRIGGER 173
|
||||||
#define TK_PREV 174
|
#define TK_VIEW 174
|
||||||
#define TK_LINEAR 175
|
#define TK_SEMI 175
|
||||||
#define TK_IMPORT 176
|
#define TK_NONE 176
|
||||||
#define TK_METRIC 177
|
#define TK_PREV 177
|
||||||
#define TK_TBNAME 178
|
#define TK_LINEAR 178
|
||||||
#define TK_JOIN 179
|
#define TK_IMPORT 179
|
||||||
#define TK_METRICS 180
|
#define TK_METRIC 180
|
||||||
#define TK_INSERT 181
|
#define TK_TBNAME 181
|
||||||
#define TK_INTO 182
|
#define TK_JOIN 182
|
||||||
#define TK_VALUES 183
|
#define TK_METRICS 183
|
||||||
|
#define TK_INSERT 184
|
||||||
|
#define TK_INTO 185
|
||||||
|
#define TK_VALUES 186
|
||||||
|
|
||||||
|
|
||||||
#define TK_SPACE 300
|
#define TK_SPACE 300
|
||||||
|
@ -210,7 +213,6 @@
|
||||||
#define TK_BIN 305 // bin format data 0b111
|
#define TK_BIN 305 // bin format data 0b111
|
||||||
#define TK_FILE 306
|
#define TK_FILE 306
|
||||||
#define TK_QUESTION 307 // denoting the placeholder of "?",when invoking statement bind query
|
#define TK_QUESTION 307 // denoting the placeholder of "?",when invoking statement bind query
|
||||||
#define TK_FUNCTION 308
|
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
|
@ -46,10 +46,11 @@
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include "os.h"
|
#include "os.h"
|
||||||
|
|
||||||
#ifdef TD_WINDOWS
|
#ifdef WINDOWS
|
||||||
|
#include <winsock2.h>
|
||||||
|
typedef unsigned __int32 uint32_t;
|
||||||
|
|
||||||
#pragma comment ( lib, "ws2_32.lib" )
|
#pragma comment ( lib, "ws2_32.lib" )
|
||||||
#pragma comment ( lib, "winmm.lib" )
|
|
||||||
#pragma comment ( lib, "wldap32.lib" )
|
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -95,6 +96,7 @@ extern char configDir[];
|
||||||
#define MAX_QUERY_SQL_LENGTH 256
|
#define MAX_QUERY_SQL_LENGTH 256
|
||||||
|
|
||||||
#define MAX_DATABASE_COUNT 256
|
#define MAX_DATABASE_COUNT 256
|
||||||
|
#define INPUT_BUF_LEN 256
|
||||||
|
|
||||||
typedef enum CREATE_SUB_TALBE_MOD_EN {
|
typedef enum CREATE_SUB_TALBE_MOD_EN {
|
||||||
PRE_CREATE_SUBTBL,
|
PRE_CREATE_SUBTBL,
|
||||||
|
@ -1595,18 +1597,17 @@ static void printfQuerySystemInfo(TAOS * taos) {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void ERROR_EXIT(const char *msg) { perror(msg); exit(0); }
|
void ERROR_EXIT(const char *msg) { perror(msg); exit(-1); }
|
||||||
|
|
||||||
int postProceSql(char* host, uint16_t port, char* sqlstr)
|
int postProceSql(char* host, uint16_t port, char* sqlstr)
|
||||||
{
|
{
|
||||||
char *req_fmt = "POST %s HTTP/1.1\r\nHost: %s:%d\r\nAccept: */*\r\n%s\r\nContent-Length: %d\r\nContent-Type: application/x-www-form-urlencoded\r\n\r\n%s";
|
char *req_fmt = "POST %s HTTP/1.1\r\nHost: %s:%d\r\nAccept: */*\r\nAuthorization: Basic %s\r\nContent-Length: %d\r\nContent-Type: application/x-www-form-urlencoded\r\n\r\n%s";
|
||||||
|
|
||||||
char *url = "/rest/sql";
|
char *url = "/rest/sql";
|
||||||
char *auth = "Authorization: Basic cm9vdDp0YW9zZGF0YQ==";
|
|
||||||
|
|
||||||
struct hostent *server;
|
struct hostent *server;
|
||||||
struct sockaddr_in serv_addr;
|
struct sockaddr_in serv_addr;
|
||||||
int sockfd, bytes, sent, received, req_str_len, resp_len;
|
int bytes, sent, received, req_str_len, resp_len;
|
||||||
char *request_buf;
|
char *request_buf;
|
||||||
char response_buf[RESP_BUF_LEN];
|
char response_buf[RESP_BUF_LEN];
|
||||||
uint16_t rest_port = port + TSDB_PORT_HTTP;
|
uint16_t rest_port = port + TSDB_PORT_HTTP;
|
||||||
|
@ -1617,18 +1618,37 @@ int postProceSql(char* host, uint16_t port, char* sqlstr)
|
||||||
if (NULL == request_buf)
|
if (NULL == request_buf)
|
||||||
ERROR_EXIT("ERROR, cannot allocate memory.");
|
ERROR_EXIT("ERROR, cannot allocate memory.");
|
||||||
|
|
||||||
int r = snprintf(request_buf,
|
char userpass_buf[INPUT_BUF_LEN];
|
||||||
req_buf_len,
|
int mod_table[] = {0, 2, 1};
|
||||||
req_fmt, url, host, rest_port,
|
|
||||||
auth, strlen(sqlstr), sqlstr);
|
|
||||||
if (r >= req_buf_len) {
|
|
||||||
free(request_buf);
|
|
||||||
ERROR_EXIT("ERROR too long request");
|
|
||||||
}
|
|
||||||
printf("Request:\n%s\n", request_buf);
|
|
||||||
|
|
||||||
|
static char base64[] = {'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H',
|
||||||
|
'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P',
|
||||||
|
'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X',
|
||||||
|
'Y', 'Z', 'a', 'b', 'c', 'd', 'e', 'f',
|
||||||
|
'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n',
|
||||||
|
'o', 'p', 'q', 'r', 's', 't', 'u', 'v',
|
||||||
|
'w', 'x', 'y', 'z', '0', '1', '2', '3',
|
||||||
|
'4', '5', '6', '7', '8', '9', '+', '/'};
|
||||||
|
|
||||||
|
snprintf(userpass_buf, INPUT_BUF_LEN, "%s:%s",
|
||||||
|
g_Dbs.user, g_Dbs.password);
|
||||||
|
size_t userpass_buf_len = strlen(userpass_buf);
|
||||||
|
size_t encoded_len = 4 * ((userpass_buf_len +2) / 3);
|
||||||
|
|
||||||
|
char base64_buf[INPUT_BUF_LEN];
|
||||||
|
#ifdef WINDOWS
|
||||||
|
WSADATA wsaData;
|
||||||
|
WSAStartup(MAKEWORD(2, 2), &wsaData);
|
||||||
|
SOCKET sockfd;
|
||||||
|
#else
|
||||||
|
int sockfd;
|
||||||
|
#endif
|
||||||
sockfd = socket(AF_INET, SOCK_STREAM, 0);
|
sockfd = socket(AF_INET, SOCK_STREAM, 0);
|
||||||
if (sockfd < 0) {
|
if (sockfd < 0) {
|
||||||
|
#ifdef WINDOWS
|
||||||
|
fprintf(stderr, "Could not create socket : %d" , WSAGetLastError());
|
||||||
|
#endif
|
||||||
|
debugPrint("%s() LN%d sockfd=%d\n", __func__, __LINE__, sockfd);
|
||||||
free(request_buf);
|
free(request_buf);
|
||||||
ERROR_EXIT("ERROR opening socket");
|
ERROR_EXIT("ERROR opening socket");
|
||||||
}
|
}
|
||||||
|
@ -1639,20 +1659,68 @@ int postProceSql(char* host, uint16_t port, char* sqlstr)
|
||||||
ERROR_EXIT("ERROR, no such host");
|
ERROR_EXIT("ERROR, no such host");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
debugPrint("h_name: %s\nh_addretype: %s\nh_length: %d\n",
|
||||||
|
server->h_name,
|
||||||
|
(server->h_addrtype == AF_INET)?"ipv4":"ipv6",
|
||||||
|
server->h_length);
|
||||||
|
|
||||||
memset(&serv_addr, 0, sizeof(serv_addr));
|
memset(&serv_addr, 0, sizeof(serv_addr));
|
||||||
serv_addr.sin_family = AF_INET;
|
serv_addr.sin_family = AF_INET;
|
||||||
serv_addr.sin_port = htons(rest_port);
|
serv_addr.sin_port = htons(rest_port);
|
||||||
|
#ifdef WINDOWS
|
||||||
|
serv_addr.sin_addr.s_addr = inet_addr(host);
|
||||||
|
#else
|
||||||
memcpy(&serv_addr.sin_addr.s_addr,server->h_addr,server->h_length);
|
memcpy(&serv_addr.sin_addr.s_addr,server->h_addr,server->h_length);
|
||||||
|
#endif
|
||||||
|
|
||||||
if (connect(sockfd,(struct sockaddr *)&serv_addr,sizeof(serv_addr)) < 0) {
|
int retConn = connect(sockfd,(struct sockaddr *)&serv_addr,sizeof(serv_addr));
|
||||||
|
debugPrint("%s() LN%d connect() return %d\n", __func__, __LINE__, retConn);
|
||||||
|
if (retConn < 0) {
|
||||||
free(request_buf);
|
free(request_buf);
|
||||||
ERROR_EXIT("ERROR connecting");
|
ERROR_EXIT("ERROR connecting");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
memset(base64_buf, 0, INPUT_BUF_LEN);
|
||||||
|
|
||||||
|
for (int n = 0, m = 0; n < userpass_buf_len;) {
|
||||||
|
uint32_t oct_a = n < userpass_buf_len ?
|
||||||
|
(unsigned char) userpass_buf[n++]:0;
|
||||||
|
uint32_t oct_b = n < userpass_buf_len ?
|
||||||
|
(unsigned char) userpass_buf[n++]:0;
|
||||||
|
uint32_t oct_c = n < userpass_buf_len ?
|
||||||
|
(unsigned char) userpass_buf[n++]:0;
|
||||||
|
uint32_t triple = (oct_a << 0x10) + (oct_b << 0x08) + oct_c;
|
||||||
|
|
||||||
|
base64_buf[m++] = base64[(triple >> 3* 6) & 0x3f];
|
||||||
|
base64_buf[m++] = base64[(triple >> 2* 6) & 0x3f];
|
||||||
|
base64_buf[m++] = base64[(triple >> 1* 6) & 0x3f];
|
||||||
|
base64_buf[m++] = base64[(triple >> 0* 6) & 0x3f];
|
||||||
|
}
|
||||||
|
|
||||||
|
for (int l = 0; l < mod_table[userpass_buf_len % 3]; l++)
|
||||||
|
base64_buf[encoded_len - 1 - l] = '=';
|
||||||
|
|
||||||
|
debugPrint("%s() LN%d: auth string base64 encoded: %s\n", __func__, __LINE__, base64_buf);
|
||||||
|
char *auth = base64_buf;
|
||||||
|
|
||||||
|
int r = snprintf(request_buf,
|
||||||
|
req_buf_len,
|
||||||
|
req_fmt, url, host, rest_port,
|
||||||
|
auth, strlen(sqlstr), sqlstr);
|
||||||
|
if (r >= req_buf_len) {
|
||||||
|
free(request_buf);
|
||||||
|
ERROR_EXIT("ERROR too long request");
|
||||||
|
}
|
||||||
|
verbosePrint("%s() LN%d: Request:\n%s\n", __func__, __LINE__, request_buf);
|
||||||
|
|
||||||
req_str_len = strlen(request_buf);
|
req_str_len = strlen(request_buf);
|
||||||
sent = 0;
|
sent = 0;
|
||||||
do {
|
do {
|
||||||
|
#ifdef WINDOWS
|
||||||
|
bytes = send(sockfd, request_buf + sent, req_str_len - sent, 0);
|
||||||
|
#else
|
||||||
bytes = write(sockfd, request_buf + sent, req_str_len - sent);
|
bytes = write(sockfd, request_buf + sent, req_str_len - sent);
|
||||||
|
#endif
|
||||||
if (bytes < 0)
|
if (bytes < 0)
|
||||||
ERROR_EXIT("ERROR writing message to socket");
|
ERROR_EXIT("ERROR writing message to socket");
|
||||||
if (bytes == 0)
|
if (bytes == 0)
|
||||||
|
@ -1664,7 +1732,11 @@ int postProceSql(char* host, uint16_t port, char* sqlstr)
|
||||||
resp_len = sizeof(response_buf) - 1;
|
resp_len = sizeof(response_buf) - 1;
|
||||||
received = 0;
|
received = 0;
|
||||||
do {
|
do {
|
||||||
|
#ifdef WINDOWS
|
||||||
|
bytes = recv(sockfd, response_buf + received, resp_len - received, 0);
|
||||||
|
#else
|
||||||
bytes = read(sockfd, response_buf + received, resp_len - received);
|
bytes = read(sockfd, response_buf + received, resp_len - received);
|
||||||
|
#endif
|
||||||
if (bytes < 0) {
|
if (bytes < 0) {
|
||||||
free(request_buf);
|
free(request_buf);
|
||||||
ERROR_EXIT("ERROR reading response from socket");
|
ERROR_EXIT("ERROR reading response from socket");
|
||||||
|
@ -1683,7 +1755,12 @@ int postProceSql(char* host, uint16_t port, char* sqlstr)
|
||||||
printf("Response:\n%s\n", response_buf);
|
printf("Response:\n%s\n", response_buf);
|
||||||
|
|
||||||
free(request_buf);
|
free(request_buf);
|
||||||
|
#ifdef WINDOWS
|
||||||
|
closesocket(sockfd);
|
||||||
|
WSACleanup();
|
||||||
|
#else
|
||||||
close(sockfd);
|
close(sockfd);
|
||||||
|
#endif
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -2143,7 +2220,7 @@ static int createDatabases() {
|
||||||
debugPrint("%s() %d command: %s\n", __func__, __LINE__, command);
|
debugPrint("%s() %d command: %s\n", __func__, __LINE__, command);
|
||||||
if (0 != queryDbExec(taos, command, NO_INSERT_TYPE)) {
|
if (0 != queryDbExec(taos, command, NO_INSERT_TYPE)) {
|
||||||
taos_close(taos);
|
taos_close(taos);
|
||||||
printf("\ncreate database %s failed!\n\n", g_Dbs.db[i].dbName);
|
fprintf(stderr, "\ncreate database %s failed!\n\n", g_Dbs.db[i].dbName);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
printf("\ncreate database %s success!\n\n", g_Dbs.db[i].dbName);
|
printf("\ncreate database %s success!\n\n", g_Dbs.db[i].dbName);
|
||||||
|
@ -2242,6 +2319,7 @@ static void* createTable(void *sarg)
|
||||||
len = 0;
|
len = 0;
|
||||||
verbosePrint("%s() LN%d %s\n", __func__, __LINE__, buffer);
|
verbosePrint("%s() LN%d %s\n", __func__, __LINE__, buffer);
|
||||||
if (0 != queryDbExec(winfo->taos, buffer, NO_INSERT_TYPE)){
|
if (0 != queryDbExec(winfo->taos, buffer, NO_INSERT_TYPE)){
|
||||||
|
fprintf(stderr, "queryDbExec() failed. buffer:\n%s\n", buffer);
|
||||||
free(buffer);
|
free(buffer);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
@ -2256,7 +2334,9 @@ static void* createTable(void *sarg)
|
||||||
|
|
||||||
if (0 != len) {
|
if (0 != len) {
|
||||||
verbosePrint("%s() %d buffer: %s\n", __func__, __LINE__, buffer);
|
verbosePrint("%s() %d buffer: %s\n", __func__, __LINE__, buffer);
|
||||||
(void)queryDbExec(winfo->taos, buffer, NO_INSERT_TYPE);
|
if (0 != queryDbExec(winfo->taos, buffer, NO_INSERT_TYPE)) {
|
||||||
|
fprintf(stderr, "queryDbExec() failed. buffer:\n%s\n", buffer);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
free(buffer);
|
free(buffer);
|
||||||
|
@ -3949,9 +4029,7 @@ send_to_server:
|
||||||
int affectedRows = queryDbExec(
|
int affectedRows = queryDbExec(
|
||||||
winfo->taos, buffer, INSERT_TYPE);
|
winfo->taos, buffer, INSERT_TYPE);
|
||||||
|
|
||||||
if (0 > affectedRows) {
|
if (0 < affectedRows) {
|
||||||
goto free_and_statistics;
|
|
||||||
} else {
|
|
||||||
endTs = taosGetTimestampUs();
|
endTs = taosGetTimestampUs();
|
||||||
int64_t delay = endTs - startTs;
|
int64_t delay = endTs - startTs;
|
||||||
if (delay > winfo->maxDelay) winfo->maxDelay = delay;
|
if (delay > winfo->maxDelay) winfo->maxDelay = delay;
|
||||||
|
@ -3960,12 +4038,15 @@ send_to_server:
|
||||||
winfo->totalDelay += delay;
|
winfo->totalDelay += delay;
|
||||||
winfo->avgDelay = (double)winfo->totalDelay / winfo->cntDelay;
|
winfo->avgDelay = (double)winfo->totalDelay / winfo->cntDelay;
|
||||||
winfo->totalAffectedRows += affectedRows;
|
winfo->totalAffectedRows += affectedRows;
|
||||||
|
} else {
|
||||||
|
fprintf(stderr, "queryDbExec() buffer:\n%s\naffected rows is %d", buffer, affectedRows);
|
||||||
|
goto free_and_statistics;
|
||||||
}
|
}
|
||||||
|
|
||||||
int64_t currentPrintTime = taosGetTimestampMs();
|
int64_t currentPrintTime = taosGetTimestampMs();
|
||||||
if (currentPrintTime - lastPrintTime > 30*1000) {
|
if (currentPrintTime - lastPrintTime > 30*1000) {
|
||||||
printf("thread[%d] has currently inserted rows: %"PRId64 ", affected rows: %"PRId64 "\n",
|
printf("thread[%d] has currently inserted rows: %"PRId64 ", affected rows: %"PRId64 "\n",
|
||||||
winfo->threadID,
|
winfo->threadID,
|
||||||
winfo->totalRowsInserted,
|
winfo->totalRowsInserted,
|
||||||
winfo->totalAffectedRows);
|
winfo->totalAffectedRows);
|
||||||
lastPrintTime = currentPrintTime;
|
lastPrintTime = currentPrintTime;
|
||||||
|
@ -4102,10 +4183,11 @@ static void* syncWrite(void *sarg) {
|
||||||
winfo->totalAffectedRows = 0;
|
winfo->totalAffectedRows = 0;
|
||||||
|
|
||||||
for (int tID = winfo->start_table_id; tID <= winfo->end_table_id; tID++) {
|
for (int tID = winfo->start_table_id; tID <= winfo->end_table_id; tID++) {
|
||||||
|
int64_t tmp_time = time_counter;
|
||||||
|
|
||||||
for (int i = 0; i < g_args.num_of_DPT;) {
|
for (int i = 0; i < g_args.num_of_DPT;) {
|
||||||
|
|
||||||
int tblInserted = i;
|
int tblInserted = i;
|
||||||
int64_t tmp_time = time_counter;
|
|
||||||
|
|
||||||
char *pstr = buffer;
|
char *pstr = buffer;
|
||||||
pstr += sprintf(pstr,
|
pstr += sprintf(pstr,
|
||||||
|
@ -4160,8 +4242,7 @@ static void* syncWrite(void *sarg) {
|
||||||
verbosePrint("%s() LN%d %s\n", __func__, __LINE__, buffer);
|
verbosePrint("%s() LN%d %s\n", __func__, __LINE__, buffer);
|
||||||
int affectedRows = queryDbExec(winfo->taos, buffer, 1);
|
int affectedRows = queryDbExec(winfo->taos, buffer, 1);
|
||||||
|
|
||||||
verbosePrint("%s() LN%d: affectedRows:%d\n", __func__, __LINE__, affectedRows);
|
if (0 < affectedRows){
|
||||||
if (0 <= affectedRows){
|
|
||||||
endTs = taosGetTimestampUs();
|
endTs = taosGetTimestampUs();
|
||||||
int64_t delay = endTs - startTs;
|
int64_t delay = endTs - startTs;
|
||||||
if (delay > winfo->maxDelay)
|
if (delay > winfo->maxDelay)
|
||||||
|
@ -4172,9 +4253,11 @@ static void* syncWrite(void *sarg) {
|
||||||
winfo->totalDelay += delay;
|
winfo->totalDelay += delay;
|
||||||
winfo->totalAffectedRows += affectedRows;
|
winfo->totalAffectedRows += affectedRows;
|
||||||
winfo->avgDelay = (double)winfo->totalDelay / winfo->cntDelay;
|
winfo->avgDelay = (double)winfo->totalDelay / winfo->cntDelay;
|
||||||
|
} else {
|
||||||
|
fprintf(stderr, "queryDbExec() buffer:\n%s\naffected rows is %d", buffer, affectedRows);
|
||||||
}
|
}
|
||||||
|
|
||||||
verbosePrint("%s() LN%d: totalaffectedRows:%"PRId64"\n", __func__, __LINE__, winfo->totalAffectedRows);
|
verbosePrint("%s() LN%d: totalaffectedRows:%"PRId64" tblInserted=%d\n", __func__, __LINE__, winfo->totalAffectedRows, tblInserted);
|
||||||
if (g_args.insert_interval) {
|
if (g_args.insert_interval) {
|
||||||
et = taosGetTimestampMs();
|
et = taosGetTimestampMs();
|
||||||
}
|
}
|
||||||
|
@ -4258,7 +4341,7 @@ static void* syncWriteWithStb(void *sarg) {
|
||||||
|
|
||||||
int sampleUsePos;
|
int sampleUsePos;
|
||||||
|
|
||||||
debugPrint("%s() LN%d insertRows=%"PRId64"\n", __func__, __LINE__, superTblInfo->insertRows);
|
verbosePrint("%s() LN%d insertRows=%"PRId64"\n", __func__, __LINE__, superTblInfo->insertRows);
|
||||||
|
|
||||||
for (uint32_t tID = winfo->start_table_id; tID <= winfo->end_table_id;
|
for (uint32_t tID = winfo->start_table_id; tID <= winfo->end_table_id;
|
||||||
tID++) {
|
tID++) {
|
||||||
|
@ -4364,7 +4447,7 @@ static void* syncWriteWithStb(void *sarg) {
|
||||||
}
|
}
|
||||||
|
|
||||||
len += retLen;
|
len += retLen;
|
||||||
verbosePrint("%s() LN%d retLen=%d len=%d k=%d buffer=%s\n", __func__, __LINE__, retLen, len, k, buffer);
|
verbosePrint("%s() LN%d retLen=%d len=%d k=%d \nbuffer=%s\n", __func__, __LINE__, retLen, len, k, buffer);
|
||||||
|
|
||||||
tblInserted++;
|
tblInserted++;
|
||||||
k++;
|
k++;
|
||||||
|
@ -4376,42 +4459,46 @@ static void* syncWriteWithStb(void *sarg) {
|
||||||
|
|
||||||
winfo->totalRowsInserted += k;
|
winfo->totalRowsInserted += k;
|
||||||
|
|
||||||
|
int64_t startTs = taosGetTimestampUs();
|
||||||
|
int64_t endTs;
|
||||||
|
int affectedRows;
|
||||||
if (0 == strncasecmp(superTblInfo->insertMode, "taosc", strlen("taosc"))) {
|
if (0 == strncasecmp(superTblInfo->insertMode, "taosc", strlen("taosc"))) {
|
||||||
int64_t startTs;
|
|
||||||
int64_t endTs;
|
|
||||||
startTs = taosGetTimestampUs();
|
|
||||||
|
|
||||||
verbosePrint("%s() LN%d %s\n", __func__, __LINE__, buffer);
|
verbosePrint("%s() LN%d %s\n", __func__, __LINE__, buffer);
|
||||||
int affectedRows = queryDbExec(winfo->taos, buffer, INSERT_TYPE);
|
affectedRows = queryDbExec(winfo->taos, buffer, INSERT_TYPE);
|
||||||
|
|
||||||
if (0 > affectedRows){
|
if (0 > affectedRows){
|
||||||
goto free_and_statistics_2;
|
goto free_and_statistics_2;
|
||||||
} else {
|
|
||||||
endTs = taosGetTimestampUs();
|
|
||||||
int64_t delay = endTs - startTs;
|
|
||||||
if (delay > winfo->maxDelay) winfo->maxDelay = delay;
|
|
||||||
if (delay < winfo->minDelay) winfo->minDelay = delay;
|
|
||||||
winfo->cntDelay++;
|
|
||||||
winfo->totalDelay += delay;
|
|
||||||
}
|
|
||||||
winfo->totalAffectedRows += affectedRows;
|
|
||||||
|
|
||||||
int64_t currentPrintTime = taosGetTimestampMs();
|
|
||||||
if (currentPrintTime - lastPrintTime > 30*1000) {
|
|
||||||
printf("thread[%d] has currently inserted rows: %"PRId64 ", affected rows: %"PRId64 "\n",
|
|
||||||
winfo->threadID,
|
|
||||||
winfo->totalRowsInserted,
|
|
||||||
winfo->totalAffectedRows);
|
|
||||||
lastPrintTime = currentPrintTime;
|
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
verbosePrint("%s() LN%d %s\n", __func__, __LINE__, buffer);
|
||||||
int retCode = postProceSql(g_Dbs.host, g_Dbs.port, buffer);
|
int retCode = postProceSql(g_Dbs.host, g_Dbs.port, buffer);
|
||||||
|
|
||||||
if (0 != retCode) {
|
if (0 != retCode) {
|
||||||
printf("========restful return fail, threadID[%d]\n", winfo->threadID);
|
printf("========restful return fail, threadID[%d]\n", winfo->threadID);
|
||||||
goto free_and_statistics_2;
|
goto free_and_statistics_2;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
affectedRows = k;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
endTs = taosGetTimestampUs();
|
||||||
|
int64_t delay = endTs - startTs;
|
||||||
|
if (delay > winfo->maxDelay) winfo->maxDelay = delay;
|
||||||
|
if (delay < winfo->minDelay) winfo->minDelay = delay;
|
||||||
|
winfo->cntDelay++;
|
||||||
|
winfo->totalDelay += delay;
|
||||||
|
|
||||||
|
winfo->totalAffectedRows += affectedRows;
|
||||||
|
|
||||||
|
int64_t currentPrintTime = taosGetTimestampMs();
|
||||||
|
if (currentPrintTime - lastPrintTime > 30*1000) {
|
||||||
|
printf("thread[%d] has currently inserted rows: %"PRId64 ", affected rows: %"PRId64 "\n",
|
||||||
|
winfo->threadID,
|
||||||
|
winfo->totalRowsInserted,
|
||||||
|
winfo->totalAffectedRows);
|
||||||
|
lastPrintTime = currentPrintTime;
|
||||||
|
}
|
||||||
|
|
||||||
if (g_args.insert_interval) {
|
if (g_args.insert_interval) {
|
||||||
et = taosGetTimestampMs();
|
et = taosGetTimestampMs();
|
||||||
}
|
}
|
||||||
|
|
|
@ -175,7 +175,9 @@ typedef struct {
|
||||||
int8_t quorum;
|
int8_t quorum;
|
||||||
int8_t update;
|
int8_t update;
|
||||||
int8_t cacheLastRow;
|
int8_t cacheLastRow;
|
||||||
int8_t reserved[10];
|
int8_t dbType;
|
||||||
|
int16_t partitions;
|
||||||
|
int8_t reserved[7];
|
||||||
} SDbCfg;
|
} SDbCfg;
|
||||||
|
|
||||||
typedef struct SDbObj {
|
typedef struct SDbObj {
|
||||||
|
|
|
@ -22,6 +22,7 @@
|
||||||
#include "tname.h"
|
#include "tname.h"
|
||||||
#include "tbn.h"
|
#include "tbn.h"
|
||||||
#include "tdataformat.h"
|
#include "tdataformat.h"
|
||||||
|
#include "tp.h"
|
||||||
#include "mnode.h"
|
#include "mnode.h"
|
||||||
#include "mnodeDef.h"
|
#include "mnodeDef.h"
|
||||||
#include "mnodeInt.h"
|
#include "mnodeInt.h"
|
||||||
|
@ -38,8 +39,8 @@
|
||||||
#include "mnodeVgroup.h"
|
#include "mnodeVgroup.h"
|
||||||
|
|
||||||
#define VG_LIST_SIZE 8
|
#define VG_LIST_SIZE 8
|
||||||
int64_t tsDbRid = -1;
|
int64_t tsDbRid = -1;
|
||||||
static void * tsDbSdb = NULL;
|
void * tsDbSdb = NULL;
|
||||||
static int32_t tsDbUpdateSize;
|
static int32_t tsDbUpdateSize;
|
||||||
|
|
||||||
static int32_t mnodeCreateDb(SAcctObj *pAcct, SCreateDbMsg *pCreate, SMnodeMsg *pMsg);
|
static int32_t mnodeCreateDb(SAcctObj *pAcct, SCreateDbMsg *pCreate, SMnodeMsg *pMsg);
|
||||||
|
@ -48,8 +49,14 @@ static int32_t mnodeSetDbDropping(SDbObj *pDb);
|
||||||
static int32_t mnodeGetDbMeta(STableMetaMsg *pMeta, SShowObj *pShow, void *pConn);
|
static int32_t mnodeGetDbMeta(STableMetaMsg *pMeta, SShowObj *pShow, void *pConn);
|
||||||
static int32_t mnodeRetrieveDbs(SShowObj *pShow, char *data, int32_t rows, void *pConn);
|
static int32_t mnodeRetrieveDbs(SShowObj *pShow, char *data, int32_t rows, void *pConn);
|
||||||
static int32_t mnodeProcessCreateDbMsg(SMnodeMsg *pMsg);
|
static int32_t mnodeProcessCreateDbMsg(SMnodeMsg *pMsg);
|
||||||
static int32_t mnodeProcessAlterDbMsg(SMnodeMsg *pMsg);
|
|
||||||
static int32_t mnodeProcessDropDbMsg(SMnodeMsg *pMsg);
|
static int32_t mnodeProcessDropDbMsg(SMnodeMsg *pMsg);
|
||||||
|
int32_t mnodeProcessAlterDbMsg(SMnodeMsg *pMsg);
|
||||||
|
|
||||||
|
#ifndef _TOPIC
|
||||||
|
int32_t tpInit() { return 0; }
|
||||||
|
void tpCleanUp() {}
|
||||||
|
void tpUpdateTs(int32_t *seq, void *pMsg) {}
|
||||||
|
#endif
|
||||||
|
|
||||||
static void mnodeDestroyDb(SDbObj *pDb) {
|
static void mnodeDestroyDb(SDbObj *pDb) {
|
||||||
pthread_mutex_destroy(&pDb->mutex);
|
pthread_mutex_destroy(&pDb->mutex);
|
||||||
|
@ -176,7 +183,7 @@ int32_t mnodeInitDbs() {
|
||||||
mnodeAddShowFreeIterHandle(TSDB_MGMT_TABLE_DB, mnodeCancelGetNextDb);
|
mnodeAddShowFreeIterHandle(TSDB_MGMT_TABLE_DB, mnodeCancelGetNextDb);
|
||||||
|
|
||||||
mDebug("table:dbs table is created");
|
mDebug("table:dbs table is created");
|
||||||
return 0;
|
return tpInit();
|
||||||
}
|
}
|
||||||
|
|
||||||
void *mnodeGetNextDb(void *pIter, SDbObj **pDb) {
|
void *mnodeGetNextDb(void *pIter, SDbObj **pDb) {
|
||||||
|
@ -332,6 +339,17 @@ static int32_t mnodeCheckDbCfg(SDbCfg *pCfg) {
|
||||||
return TSDB_CODE_MND_INVALID_DB_OPTION;
|
return TSDB_CODE_MND_INVALID_DB_OPTION;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (pCfg->dbType < 0 || pCfg->dbType > 1) {
|
||||||
|
mError("invalid db option dbType:%d valid range: [%d, %d]", pCfg->dbType, 0, 1);
|
||||||
|
return TSDB_CODE_MND_INVALID_DB_OPTION;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (pCfg->partitions < TSDB_MIN_DB_PARTITON_OPTION || pCfg->partitions > TSDB_MAX_DB_PARTITON_OPTION) {
|
||||||
|
mError("invalid db option partitions:%d valid range: [%d, %d]", pCfg->partitions, TSDB_MIN_DB_PARTITON_OPTION,
|
||||||
|
TSDB_MAX_DB_PARTITON_OPTION);
|
||||||
|
return TSDB_CODE_MND_INVALID_DB_OPTION;
|
||||||
|
}
|
||||||
|
|
||||||
return TSDB_CODE_SUCCESS;
|
return TSDB_CODE_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -354,6 +372,8 @@ static void mnodeSetDefaultDbCfg(SDbCfg *pCfg) {
|
||||||
if (pCfg->quorum < 0) pCfg->quorum = tsQuorum;
|
if (pCfg->quorum < 0) pCfg->quorum = tsQuorum;
|
||||||
if (pCfg->update < 0) pCfg->update = tsUpdate;
|
if (pCfg->update < 0) pCfg->update = tsUpdate;
|
||||||
if (pCfg->cacheLastRow < 0) pCfg->cacheLastRow = tsCacheLastRow;
|
if (pCfg->cacheLastRow < 0) pCfg->cacheLastRow = tsCacheLastRow;
|
||||||
|
if (pCfg->dbType < 0) pCfg->dbType = 0;
|
||||||
|
if (pCfg->partitions < 0) pCfg->partitions = tsPartitons;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int32_t mnodeCreateDbCb(SMnodeMsg *pMsg, int32_t code) {
|
static int32_t mnodeCreateDbCb(SMnodeMsg *pMsg, int32_t code) {
|
||||||
|
@ -408,7 +428,9 @@ static int32_t mnodeCreateDb(SAcctObj *pAcct, SCreateDbMsg *pCreate, SMnodeMsg *
|
||||||
.replications = pCreate->replications,
|
.replications = pCreate->replications,
|
||||||
.quorum = pCreate->quorum,
|
.quorum = pCreate->quorum,
|
||||||
.update = pCreate->update,
|
.update = pCreate->update,
|
||||||
.cacheLastRow = pCreate->cacheLastRow
|
.cacheLastRow = pCreate->cacheLastRow,
|
||||||
|
.dbType = pCreate->dbType,
|
||||||
|
.partitions = pCreate->partitions
|
||||||
};
|
};
|
||||||
|
|
||||||
mnodeSetDefaultDbCfg(&pDb->cfg);
|
mnodeSetDefaultDbCfg(&pDb->cfg);
|
||||||
|
@ -501,6 +523,7 @@ void mnodeRemoveVgroupFromDb(SVgObj *pVgroup) {
|
||||||
}
|
}
|
||||||
|
|
||||||
void mnodeCleanupDbs() {
|
void mnodeCleanupDbs() {
|
||||||
|
tpCleanUp();
|
||||||
sdbCloseTable(tsDbRid);
|
sdbCloseTable(tsDbRid);
|
||||||
tsDbSdb = NULL;
|
tsDbSdb = NULL;
|
||||||
}
|
}
|
||||||
|
@ -660,7 +683,7 @@ static int32_t mnodeGetDbMeta(STableMetaMsg *pMeta, SShowObj *pShow, void *pConn
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static char *mnodeGetDbStr(char *src) {
|
char *mnodeGetDbStr(char *src) {
|
||||||
char *pos = strstr(src, TS_PATH_DELIMITER);
|
char *pos = strstr(src, TS_PATH_DELIMITER);
|
||||||
if (pos != NULL) ++pos;
|
if (pos != NULL) ++pos;
|
||||||
|
|
||||||
|
@ -852,6 +875,7 @@ static int32_t mnodeProcessCreateDbMsg(SMnodeMsg *pMsg) {
|
||||||
pCreate->daysToKeep2 = htonl(pCreate->daysToKeep2);
|
pCreate->daysToKeep2 = htonl(pCreate->daysToKeep2);
|
||||||
pCreate->commitTime = htonl(pCreate->commitTime);
|
pCreate->commitTime = htonl(pCreate->commitTime);
|
||||||
pCreate->fsyncPeriod = htonl(pCreate->fsyncPeriod);
|
pCreate->fsyncPeriod = htonl(pCreate->fsyncPeriod);
|
||||||
|
pCreate->partitions = htons(pCreate->partitions);
|
||||||
pCreate->minRowsPerFileBlock = htonl(pCreate->minRowsPerFileBlock);
|
pCreate->minRowsPerFileBlock = htonl(pCreate->minRowsPerFileBlock);
|
||||||
pCreate->maxRowsPerFileBlock = htonl(pCreate->maxRowsPerFileBlock);
|
pCreate->maxRowsPerFileBlock = htonl(pCreate->maxRowsPerFileBlock);
|
||||||
|
|
||||||
|
@ -887,6 +911,8 @@ static SDbCfg mnodeGetAlterDbOption(SDbObj *pDb, SAlterDbMsg *pAlter) {
|
||||||
int8_t precision = pAlter->precision;
|
int8_t precision = pAlter->precision;
|
||||||
int8_t update = pAlter->update;
|
int8_t update = pAlter->update;
|
||||||
int8_t cacheLastRow = pAlter->cacheLastRow;
|
int8_t cacheLastRow = pAlter->cacheLastRow;
|
||||||
|
int8_t dbType = pAlter->dbType;
|
||||||
|
int16_t partitions = htons(pAlter->partitions);
|
||||||
|
|
||||||
terrno = TSDB_CODE_SUCCESS;
|
terrno = TSDB_CODE_SUCCESS;
|
||||||
|
|
||||||
|
@ -1004,6 +1030,16 @@ static SDbCfg mnodeGetAlterDbOption(SDbObj *pDb, SAlterDbMsg *pAlter) {
|
||||||
newCfg.cacheLastRow = cacheLastRow;
|
newCfg.cacheLastRow = cacheLastRow;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (dbType >= 0 && dbType != pDb->cfg.dbType) {
|
||||||
|
mDebug("db:%s, dbType:%d change to %d", pDb->name, pDb->cfg.dbType, dbType);
|
||||||
|
newCfg.dbType = dbType;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (partitions >= 0 && partitions != pDb->cfg.partitions) {
|
||||||
|
mDebug("db:%s, partitions:%d change to %d", pDb->name, pDb->cfg.partitions, partitions);
|
||||||
|
newCfg.partitions = partitions;
|
||||||
|
}
|
||||||
|
|
||||||
return newCfg;
|
return newCfg;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1031,6 +1067,8 @@ static int32_t mnodeAlterDbCb(SMnodeMsg *pMsg, int32_t code) {
|
||||||
}
|
}
|
||||||
|
|
||||||
static int32_t mnodeAlterDb(SDbObj *pDb, SAlterDbMsg *pAlter, void *pMsg) {
|
static int32_t mnodeAlterDb(SDbObj *pDb, SAlterDbMsg *pAlter, void *pMsg) {
|
||||||
|
mDebug("db:%s, type:%d do alter operation", pDb->name, pDb->cfg.dbType);
|
||||||
|
|
||||||
SDbCfg newCfg = mnodeGetAlterDbOption(pDb, pAlter);
|
SDbCfg newCfg = mnodeGetAlterDbOption(pDb, pAlter);
|
||||||
if (terrno != TSDB_CODE_SUCCESS) {
|
if (terrno != TSDB_CODE_SUCCESS) {
|
||||||
return terrno;
|
return terrno;
|
||||||
|
@ -1061,9 +1099,9 @@ static int32_t mnodeAlterDb(SDbObj *pDb, SAlterDbMsg *pAlter, void *pMsg) {
|
||||||
return code;
|
return code;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int32_t mnodeProcessAlterDbMsg(SMnodeMsg *pMsg) {
|
int32_t mnodeProcessAlterDbMsg(SMnodeMsg *pMsg) {
|
||||||
SAlterDbMsg *pAlter = pMsg->rpcMsg.pCont;
|
SAlterDbMsg *pAlter = pMsg->rpcMsg.pCont;
|
||||||
mDebug("db:%s, alter db msg is received from thandle:%p", pAlter->db, pMsg->rpcMsg.handle);
|
mDebug("db:%s, alter db msg is received from thandle:%p, dbType:%d", pAlter->db, pMsg->rpcMsg.handle, pAlter->dbType);
|
||||||
|
|
||||||
if (pMsg->pDb == NULL) pMsg->pDb = mnodeGetDb(pAlter->db);
|
if (pMsg->pDb == NULL) pMsg->pDb = mnodeGetDb(pAlter->db);
|
||||||
if (pMsg->pDb == NULL) {
|
if (pMsg->pDb == NULL) {
|
||||||
|
|
|
@ -109,6 +109,7 @@ static char *mnodeGetShowType(int32_t showType) {
|
||||||
case TSDB_MGMT_TABLE_VNODES: return "show vnodes";
|
case TSDB_MGMT_TABLE_VNODES: return "show vnodes";
|
||||||
case TSDB_MGMT_TABLE_CLUSTER: return "show clusters";
|
case TSDB_MGMT_TABLE_CLUSTER: return "show clusters";
|
||||||
case TSDB_MGMT_TABLE_STREAMTABLES : return "show streamtables";
|
case TSDB_MGMT_TABLE_STREAMTABLES : return "show streamtables";
|
||||||
|
case TSDB_MGMT_TABLE_TP: return "show topics";
|
||||||
default: return "undefined";
|
default: return "undefined";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -367,6 +367,11 @@ static int32_t mnodeAllocVgroupIdPool(SVgObj *pInputVgroup) {
|
||||||
maxIdPoolSize = MAX(maxIdPoolSize, idPoolSize);
|
maxIdPoolSize = MAX(maxIdPoolSize, idPoolSize);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// create one table each vnode
|
||||||
|
if (pDb->cfg.dbType == TSDB_DB_TYPE_TOPIC) {
|
||||||
|
maxIdPoolSize = 1;
|
||||||
|
}
|
||||||
|
|
||||||
// new vgroup
|
// new vgroup
|
||||||
if (pInputVgroup->idPool == NULL) {
|
if (pInputVgroup->idPool == NULL) {
|
||||||
pInputVgroup->idPool = taosInitIdPool(maxIdPoolSize);
|
pInputVgroup->idPool = taosInitIdPool(maxIdPoolSize);
|
||||||
|
@ -379,6 +384,11 @@ static int32_t mnodeAllocVgroupIdPool(SVgObj *pInputVgroup) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// create one table each vnode
|
||||||
|
if (pDb->cfg.dbType == TSDB_DB_TYPE_TOPIC) {
|
||||||
|
return TSDB_CODE_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
// realloc all vgroups in db
|
// realloc all vgroups in db
|
||||||
int32_t newIdPoolSize;
|
int32_t newIdPoolSize;
|
||||||
if (minIdPoolSize * 4 < tsTableIncStepPerVnode) {
|
if (minIdPoolSize * 4 < tsTableIncStepPerVnode) {
|
||||||
|
@ -449,6 +459,10 @@ int32_t mnodeGetAvailableVgroup(SMnodeMsg *pMsg, SVgObj **ppVgroup, int32_t *pSi
|
||||||
maxVgroupsPerDb = MIN(maxVgroupsPerDb, TSDB_MAX_VNODES_PER_DB);
|
maxVgroupsPerDb = MIN(maxVgroupsPerDb, TSDB_MAX_VNODES_PER_DB);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (pDb->cfg.dbType == TSDB_DB_TYPE_TOPIC) {
|
||||||
|
maxVgroupsPerDb = TSDB_MAX_DB_PARTITON_OPTION;
|
||||||
|
}
|
||||||
|
|
||||||
int32_t code = TSDB_CODE_MND_NO_ENOUGH_DNODES;
|
int32_t code = TSDB_CODE_MND_NO_ENOUGH_DNODES;
|
||||||
if (pDb->numOfVgroups < maxVgroupsPerDb) {
|
if (pDb->numOfVgroups < maxVgroupsPerDb) {
|
||||||
mDebug("msg:%p, app:%p db:%s, try to create a new vgroup, numOfVgroups:%d maxVgroupsPerDb:%d", pMsg,
|
mDebug("msg:%p, app:%p db:%s, try to create a new vgroup, numOfVgroups:%d maxVgroupsPerDb:%d", pMsg,
|
||||||
|
@ -881,6 +895,7 @@ static SCreateVnodeMsg *mnodeBuildVnodeMsg(SVgObj *pVgroup) {
|
||||||
pCfg->update = pDb->cfg.update;
|
pCfg->update = pDb->cfg.update;
|
||||||
pCfg->cacheLastRow = pDb->cfg.cacheLastRow;
|
pCfg->cacheLastRow = pDb->cfg.cacheLastRow;
|
||||||
pCfg->dbReplica = pDb->cfg.replications;
|
pCfg->dbReplica = pDb->cfg.replications;
|
||||||
|
pCfg->dbType = pDb->cfg.dbType;
|
||||||
|
|
||||||
SVnodeDesc *pNodes = pVnode->nodes;
|
SVnodeDesc *pNodes = pVnode->nodes;
|
||||||
for (int32_t j = 0; j < pVgroup->numOfVnodes; ++j) {
|
for (int32_t j = 0; j < pVgroup->numOfVnodes; ++j) {
|
||||||
|
|
|
@ -125,6 +125,8 @@ typedef struct SCreateDbInfo {
|
||||||
int8_t update;
|
int8_t update;
|
||||||
int8_t cachelast;
|
int8_t cachelast;
|
||||||
SArray *keep;
|
SArray *keep;
|
||||||
|
int8_t dbType;
|
||||||
|
int16_t partitions;
|
||||||
} SCreateDbInfo;
|
} SCreateDbInfo;
|
||||||
|
|
||||||
typedef struct SCreateAcctInfo {
|
typedef struct SCreateAcctInfo {
|
||||||
|
@ -155,6 +157,7 @@ typedef struct SUserInfo {
|
||||||
typedef struct SMiscInfo {
|
typedef struct SMiscInfo {
|
||||||
SArray *a; // SArray<SStrToken>
|
SArray *a; // SArray<SStrToken>
|
||||||
bool existsCheck;
|
bool existsCheck;
|
||||||
|
int16_t dbType;
|
||||||
int16_t tableType;
|
int16_t tableType;
|
||||||
SUserInfo user;
|
SUserInfo user;
|
||||||
union {
|
union {
|
||||||
|
@ -278,7 +281,7 @@ void setCreatedTableName(SSqlInfo *pInfo, SStrToken *pTableNameToken, SStrToken
|
||||||
void SqlInfoDestroy(SSqlInfo *pInfo);
|
void SqlInfoDestroy(SSqlInfo *pInfo);
|
||||||
|
|
||||||
void setDCLSQLElems(SSqlInfo *pInfo, int32_t type, int32_t nParams, ...);
|
void setDCLSQLElems(SSqlInfo *pInfo, int32_t type, int32_t nParams, ...);
|
||||||
void setDropDbTableInfo(SSqlInfo *pInfo, int32_t type, SStrToken* pToken, SStrToken* existsCheck,int16_t tableType);
|
void setDropDbTableInfo(SSqlInfo *pInfo, int32_t type, SStrToken* pToken, SStrToken* existsCheck,int16_t dbType,int16_t tableType);
|
||||||
void setShowOptions(SSqlInfo *pInfo, int32_t type, SStrToken* prefix, SStrToken* pPatterns);
|
void setShowOptions(SSqlInfo *pInfo, int32_t type, SStrToken* prefix, SStrToken* pPatterns);
|
||||||
|
|
||||||
void setCreateDbInfo(SSqlInfo *pInfo, int32_t type, SStrToken *pToken, SCreateDbInfo *pDB, SStrToken *pIgExists);
|
void setCreateDbInfo(SSqlInfo *pInfo, int32_t type, SStrToken *pToken, SCreateDbInfo *pDB, SStrToken *pIgExists);
|
||||||
|
@ -289,6 +292,7 @@ void setKillSql(SSqlInfo *pInfo, int32_t type, SStrToken *ip);
|
||||||
void setAlterUserSql(SSqlInfo *pInfo, int16_t type, SStrToken *pName, SStrToken* pPwd, SStrToken *pPrivilege);
|
void setAlterUserSql(SSqlInfo *pInfo, int16_t type, SStrToken *pName, SStrToken* pPwd, SStrToken *pPrivilege);
|
||||||
|
|
||||||
void setDefaultCreateDbOption(SCreateDbInfo *pDBInfo);
|
void setDefaultCreateDbOption(SCreateDbInfo *pDBInfo);
|
||||||
|
void setDefaultCreateTopicOption(SCreateDbInfo *pDBInfo);
|
||||||
|
|
||||||
// prefix show db.tables;
|
// prefix show db.tables;
|
||||||
void setDbName(SStrToken *pCpxName, SStrToken *pDb);
|
void setDbName(SStrToken *pCpxName, SStrToken *pDb);
|
||||||
|
|
|
@ -64,6 +64,7 @@ program ::= cmd. {}
|
||||||
|
|
||||||
//////////////////////////////////THE SHOW STATEMENT///////////////////////////////////////////
|
//////////////////////////////////THE SHOW STATEMENT///////////////////////////////////////////
|
||||||
cmd ::= SHOW DATABASES. { setShowOptions(pInfo, TSDB_MGMT_TABLE_DB, 0, 0);}
|
cmd ::= SHOW DATABASES. { setShowOptions(pInfo, TSDB_MGMT_TABLE_DB, 0, 0);}
|
||||||
|
cmd ::= SHOW TOPICS. { setShowOptions(pInfo, TSDB_MGMT_TABLE_TP, 0, 0);}
|
||||||
cmd ::= SHOW MNODES. { setShowOptions(pInfo, TSDB_MGMT_TABLE_MNODE, 0, 0);}
|
cmd ::= SHOW MNODES. { setShowOptions(pInfo, TSDB_MGMT_TABLE_MNODE, 0, 0);}
|
||||||
cmd ::= SHOW DNODES. { setShowOptions(pInfo, TSDB_MGMT_TABLE_DNODE, 0, 0);}
|
cmd ::= SHOW DNODES. { setShowOptions(pInfo, TSDB_MGMT_TABLE_DNODE, 0, 0);}
|
||||||
cmd ::= SHOW ACCOUNTS. { setShowOptions(pInfo, TSDB_MGMT_TABLE_ACCT, 0, 0);}
|
cmd ::= SHOW ACCOUNTS. { setShowOptions(pInfo, TSDB_MGMT_TABLE_ACCT, 0, 0);}
|
||||||
|
@ -131,16 +132,18 @@ cmd ::= SHOW dbPrefix(X) VGROUPS ids(Y). {
|
||||||
//drop configure for tables
|
//drop configure for tables
|
||||||
cmd ::= DROP TABLE ifexists(Y) ids(X) cpxName(Z). {
|
cmd ::= DROP TABLE ifexists(Y) ids(X) cpxName(Z). {
|
||||||
X.n += Z.n;
|
X.n += Z.n;
|
||||||
setDropDbTableInfo(pInfo, TSDB_SQL_DROP_TABLE, &X, &Y, -1);
|
setDropDbTableInfo(pInfo, TSDB_SQL_DROP_TABLE, &X, &Y, -1, -1);
|
||||||
}
|
}
|
||||||
|
|
||||||
//drop stable
|
//drop stable
|
||||||
cmd ::= DROP STABLE ifexists(Y) ids(X) cpxName(Z). {
|
cmd ::= DROP STABLE ifexists(Y) ids(X) cpxName(Z). {
|
||||||
X.n += Z.n;
|
X.n += Z.n;
|
||||||
setDropDbTableInfo(pInfo, TSDB_SQL_DROP_TABLE, &X, &Y, TSDB_SUPER_TABLE);
|
setDropDbTableInfo(pInfo, TSDB_SQL_DROP_TABLE, &X, &Y, -1, TSDB_SUPER_TABLE);
|
||||||
}
|
}
|
||||||
|
|
||||||
cmd ::= DROP DATABASE ifexists(Y) ids(X). { setDropDbTableInfo(pInfo, TSDB_SQL_DROP_DB, &X, &Y, -1); }
|
cmd ::= DROP DATABASE ifexists(Y) ids(X). { setDropDbTableInfo(pInfo, TSDB_SQL_DROP_DB, &X, &Y, TSDB_DB_TYPE_DEFAULT, -1); }
|
||||||
|
cmd ::= DROP TOPIC ifexists(Y) ids(X). { setDropDbTableInfo(pInfo, TSDB_SQL_DROP_DB, &X, &Y, TSDB_DB_TYPE_TOPIC, -1); }
|
||||||
|
|
||||||
cmd ::= DROP DNODE ids(X). { setDCLSQLElems(pInfo, TSDB_SQL_DROP_DNODE, 1, &X); }
|
cmd ::= DROP DNODE ids(X). { setDCLSQLElems(pInfo, TSDB_SQL_DROP_DNODE, 1, &X); }
|
||||||
cmd ::= DROP USER ids(X). { setDCLSQLElems(pInfo, TSDB_SQL_DROP_USER, 1, &X); }
|
cmd ::= DROP USER ids(X). { setDCLSQLElems(pInfo, TSDB_SQL_DROP_USER, 1, &X); }
|
||||||
cmd ::= DROP ACCOUNT ids(X). { setDCLSQLElems(pInfo, TSDB_SQL_DROP_ACCT, 1, &X); }
|
cmd ::= DROP ACCOUNT ids(X). { setDCLSQLElems(pInfo, TSDB_SQL_DROP_ACCT, 1, &X); }
|
||||||
|
@ -162,6 +165,7 @@ cmd ::= ALTER DNODE ids(X) ids(Y) ids(Z). { setDCLSQLElems(pInfo, TSDB_SQL
|
||||||
cmd ::= ALTER LOCAL ids(X). { setDCLSQLElems(pInfo, TSDB_SQL_CFG_LOCAL, 1, &X); }
|
cmd ::= ALTER LOCAL ids(X). { setDCLSQLElems(pInfo, TSDB_SQL_CFG_LOCAL, 1, &X); }
|
||||||
cmd ::= ALTER LOCAL ids(X) ids(Y). { setDCLSQLElems(pInfo, TSDB_SQL_CFG_LOCAL, 2, &X, &Y); }
|
cmd ::= ALTER LOCAL ids(X) ids(Y). { setDCLSQLElems(pInfo, TSDB_SQL_CFG_LOCAL, 2, &X, &Y); }
|
||||||
cmd ::= ALTER DATABASE ids(X) alter_db_optr(Y). { SStrToken t = {0}; setCreateDbInfo(pInfo, TSDB_SQL_ALTER_DB, &X, &Y, &t);}
|
cmd ::= ALTER DATABASE ids(X) alter_db_optr(Y). { SStrToken t = {0}; setCreateDbInfo(pInfo, TSDB_SQL_ALTER_DB, &X, &Y, &t);}
|
||||||
|
cmd ::= ALTER TOPIC ids(X) alter_topic_optr(Y). { SStrToken t = {0}; setCreateDbInfo(pInfo, TSDB_SQL_ALTER_DB, &X, &Y, &t);}
|
||||||
|
|
||||||
cmd ::= ALTER ACCOUNT ids(X) acct_optr(Z). { setCreateAcctSql(pInfo, TSDB_SQL_ALTER_ACCT, &X, NULL, &Z);}
|
cmd ::= ALTER ACCOUNT ids(X) acct_optr(Z). { setCreateAcctSql(pInfo, TSDB_SQL_ALTER_ACCT, &X, NULL, &Z);}
|
||||||
cmd ::= ALTER ACCOUNT ids(X) PASS ids(Y) acct_optr(Z). { setCreateAcctSql(pInfo, TSDB_SQL_ALTER_ACCT, &X, &Y, &Z);}
|
cmd ::= ALTER ACCOUNT ids(X) PASS ids(Y) acct_optr(Z). { setCreateAcctSql(pInfo, TSDB_SQL_ALTER_ACCT, &X, &Y, &Z);}
|
||||||
|
@ -187,6 +191,7 @@ cmd ::= CREATE DNODE ids(X). { setDCLSQLElems(pInfo, TSDB_SQL_CREATE_DNODE
|
||||||
cmd ::= CREATE ACCOUNT ids(X) PASS ids(Y) acct_optr(Z).
|
cmd ::= CREATE ACCOUNT ids(X) PASS ids(Y) acct_optr(Z).
|
||||||
{ setCreateAcctSql(pInfo, TSDB_SQL_CREATE_ACCT, &X, &Y, &Z);}
|
{ setCreateAcctSql(pInfo, TSDB_SQL_CREATE_ACCT, &X, &Y, &Z);}
|
||||||
cmd ::= CREATE DATABASE ifnotexists(Z) ids(X) db_optr(Y). { setCreateDbInfo(pInfo, TSDB_SQL_CREATE_DB, &X, &Y, &Z);}
|
cmd ::= CREATE DATABASE ifnotexists(Z) ids(X) db_optr(Y). { setCreateDbInfo(pInfo, TSDB_SQL_CREATE_DB, &X, &Y, &Z);}
|
||||||
|
cmd ::= CREATE TOPIC ifnotexists(Z) ids(X) topic_optr(Y). { setCreateDbInfo(pInfo, TSDB_SQL_CREATE_DB, &X, &Y, &Z);}
|
||||||
cmd ::= CREATE USER ids(X) PASS ids(Y). { setCreateUserSql(pInfo, &X, &Y);}
|
cmd ::= CREATE USER ids(X) PASS ids(Y). { setCreateUserSql(pInfo, &X, &Y);}
|
||||||
|
|
||||||
pps(Y) ::= . { Y.n = 0; }
|
pps(Y) ::= . { Y.n = 0; }
|
||||||
|
@ -247,9 +252,10 @@ comp(Y) ::= COMP INTEGER(X). { Y = X; }
|
||||||
prec(Y) ::= PRECISION STRING(X). { Y = X; }
|
prec(Y) ::= PRECISION STRING(X). { Y = X; }
|
||||||
update(Y) ::= UPDATE INTEGER(X). { Y = X; }
|
update(Y) ::= UPDATE INTEGER(X). { Y = X; }
|
||||||
cachelast(Y) ::= CACHELAST INTEGER(X). { Y = X; }
|
cachelast(Y) ::= CACHELAST INTEGER(X). { Y = X; }
|
||||||
|
partitions(Y) ::= PARTITIONS INTEGER(X). { Y = X; }
|
||||||
|
|
||||||
%type db_optr {SCreateDbInfo}
|
%type db_optr {SCreateDbInfo}
|
||||||
db_optr(Y) ::= . {setDefaultCreateDbOption(&Y);}
|
db_optr(Y) ::= . {setDefaultCreateDbOption(&Y); Y.dbType = TSDB_DB_TYPE_DEFAULT;}
|
||||||
|
|
||||||
db_optr(Y) ::= db_optr(Z) cache(X). { Y = Z; Y.cacheBlockSize = strtol(X.z, NULL, 10); }
|
db_optr(Y) ::= db_optr(Z) cache(X). { Y = Z; Y.cacheBlockSize = strtol(X.z, NULL, 10); }
|
||||||
db_optr(Y) ::= db_optr(Z) replica(X). { Y = Z; Y.replica = strtol(X.z, NULL, 10); }
|
db_optr(Y) ::= db_optr(Z) replica(X). { Y = Z; Y.replica = strtol(X.z, NULL, 10); }
|
||||||
|
@ -267,8 +273,13 @@ db_optr(Y) ::= db_optr(Z) keep(X). { Y = Z; Y.keep = X; }
|
||||||
db_optr(Y) ::= db_optr(Z) update(X). { Y = Z; Y.update = strtol(X.z, NULL, 10); }
|
db_optr(Y) ::= db_optr(Z) update(X). { Y = Z; Y.update = strtol(X.z, NULL, 10); }
|
||||||
db_optr(Y) ::= db_optr(Z) cachelast(X). { Y = Z; Y.cachelast = strtol(X.z, NULL, 10); }
|
db_optr(Y) ::= db_optr(Z) cachelast(X). { Y = Z; Y.cachelast = strtol(X.z, NULL, 10); }
|
||||||
|
|
||||||
|
%type topic_optr {SCreateDbInfo}
|
||||||
|
|
||||||
|
topic_optr(Y) ::= db_optr(Z). { Y = Z; Y.dbType = TSDB_DB_TYPE_TOPIC; }
|
||||||
|
topic_optr(Y) ::= topic_optr(Z) partitions(X). { Y = Z; Y.partitions = strtol(X.z, NULL, 10); }
|
||||||
|
|
||||||
%type alter_db_optr {SCreateDbInfo}
|
%type alter_db_optr {SCreateDbInfo}
|
||||||
alter_db_optr(Y) ::= . { setDefaultCreateDbOption(&Y);}
|
alter_db_optr(Y) ::= . { setDefaultCreateDbOption(&Y); Y.dbType = TSDB_DB_TYPE_DEFAULT;}
|
||||||
|
|
||||||
alter_db_optr(Y) ::= alter_db_optr(Z) replica(X). { Y = Z; Y.replica = strtol(X.z, NULL, 10); }
|
alter_db_optr(Y) ::= alter_db_optr(Z) replica(X). { Y = Z; Y.replica = strtol(X.z, NULL, 10); }
|
||||||
alter_db_optr(Y) ::= alter_db_optr(Z) quorum(X). { Y = Z; Y.quorum = strtol(X.z, NULL, 10); }
|
alter_db_optr(Y) ::= alter_db_optr(Z) quorum(X). { Y = Z; Y.quorum = strtol(X.z, NULL, 10); }
|
||||||
|
@ -280,6 +291,11 @@ alter_db_optr(Y) ::= alter_db_optr(Z) fsync(X). { Y = Z; Y.fsyncPeriod = s
|
||||||
alter_db_optr(Y) ::= alter_db_optr(Z) update(X). { Y = Z; Y.update = strtol(X.z, NULL, 10); }
|
alter_db_optr(Y) ::= alter_db_optr(Z) update(X). { Y = Z; Y.update = strtol(X.z, NULL, 10); }
|
||||||
alter_db_optr(Y) ::= alter_db_optr(Z) cachelast(X). { Y = Z; Y.cachelast = strtol(X.z, NULL, 10); }
|
alter_db_optr(Y) ::= alter_db_optr(Z) cachelast(X). { Y = Z; Y.cachelast = strtol(X.z, NULL, 10); }
|
||||||
|
|
||||||
|
%type alter_topic_optr {SCreateDbInfo}
|
||||||
|
|
||||||
|
alter_topic_optr(Y) ::= alter_db_optr(Z). { Y = Z; Y.dbType = TSDB_DB_TYPE_TOPIC; }
|
||||||
|
alter_topic_optr(Y) ::= alter_topic_optr(Z) partitions(X). { Y = Z; Y.partitions = strtol(X.z, NULL, 10); }
|
||||||
|
|
||||||
%type typename {TAOS_FIELD}
|
%type typename {TAOS_FIELD}
|
||||||
typename(A) ::= ids(X). {
|
typename(A) ::= ids(X). {
|
||||||
X.type = 0;
|
X.type = 0;
|
||||||
|
@ -820,3 +836,4 @@ cmd ::= KILL QUERY INTEGER(X) COLON(Z) INTEGER(Y). {X.n += (Z.n + Y.n); s
|
||||||
LIKE MATCH KEY OF OFFSET RAISE REPLACE RESTRICT ROW STATEMENT TRIGGER VIEW ALL
|
LIKE MATCH KEY OF OFFSET RAISE REPLACE RESTRICT ROW STATEMENT TRIGGER VIEW ALL
|
||||||
NOW IPTOKEN SEMI NONE PREV LINEAR IMPORT
|
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.
|
||||||
|
|