chore: more code
This commit is contained in:
parent
b26842e398
commit
2d4dd64584
|
@ -30,7 +30,7 @@ extern "C" {
|
||||||
|
|
||||||
#define SHOW_CREATE_DB_RESULT_COLS 2
|
#define SHOW_CREATE_DB_RESULT_COLS 2
|
||||||
#define SHOW_CREATE_DB_RESULT_FIELD1_LEN (TSDB_DB_NAME_LEN + VARSTR_HEADER_SIZE)
|
#define SHOW_CREATE_DB_RESULT_FIELD1_LEN (TSDB_DB_NAME_LEN + VARSTR_HEADER_SIZE)
|
||||||
#define SHOW_CREATE_DB_RESULT_FIELD2_LEN (TSDB_MAX_BINARY_LEN)
|
#define SHOW_CREATE_DB_RESULT_FIELD2_LEN (TSDB_MAX_BINARY_LEN + VARSTR_HEADER_SIZE)
|
||||||
|
|
||||||
#define SHOW_CREATE_TB_RESULT_COLS 2
|
#define SHOW_CREATE_TB_RESULT_COLS 2
|
||||||
#define SHOW_CREATE_TB_RESULT_FIELD1_LEN (TSDB_TABLE_NAME_LEN + VARSTR_HEADER_SIZE)
|
#define SHOW_CREATE_TB_RESULT_FIELD1_LEN (TSDB_TABLE_NAME_LEN + VARSTR_HEADER_SIZE)
|
||||||
|
|
|
@ -22,6 +22,13 @@
|
||||||
extern "C" {
|
extern "C" {
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
#if 1
|
||||||
|
#define TASSERT assert(0);
|
||||||
|
#else
|
||||||
|
#define TASSERT
|
||||||
|
#endif
|
||||||
|
|
||||||
#define TSDB__packed
|
#define TSDB__packed
|
||||||
|
|
||||||
#define TSKEY int64_t
|
#define TSKEY int64_t
|
||||||
|
|
|
@ -565,8 +565,8 @@ static int32_t smlFindNearestPowerOf2(int32_t length, uint8_t type) {
|
||||||
}
|
}
|
||||||
if (type == TSDB_DATA_TYPE_BINARY && result > TSDB_MAX_BINARY_LEN - VARSTR_HEADER_SIZE) {
|
if (type == TSDB_DATA_TYPE_BINARY && result > TSDB_MAX_BINARY_LEN - VARSTR_HEADER_SIZE) {
|
||||||
result = TSDB_MAX_BINARY_LEN - VARSTR_HEADER_SIZE;
|
result = TSDB_MAX_BINARY_LEN - VARSTR_HEADER_SIZE;
|
||||||
} else if (type == TSDB_DATA_TYPE_NCHAR && result > (TSDB_MAX_BINARY_LEN - VARSTR_HEADER_SIZE) / TSDB_NCHAR_SIZE) {
|
} else if (type == TSDB_DATA_TYPE_NCHAR && result > (TSDB_MAX_NCHAR_LEN - VARSTR_HEADER_SIZE) / TSDB_NCHAR_SIZE) {
|
||||||
result = (TSDB_MAX_BINARY_LEN - VARSTR_HEADER_SIZE) / TSDB_NCHAR_SIZE;
|
result = (TSDB_MAX_NCHAR_LEN - VARSTR_HEADER_SIZE) / TSDB_NCHAR_SIZE;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (type == TSDB_DATA_TYPE_NCHAR) {
|
if (type == TSDB_DATA_TYPE_NCHAR) {
|
||||||
|
@ -637,6 +637,9 @@ static int32_t smlBuildFieldsList(SSmlHandle *info, SSchema *schemaField, SHashO
|
||||||
field.bytes = getBytes(kv->type, kv->length);
|
field.bytes = getBytes(kv->type, kv->length);
|
||||||
memcpy(field.name, kv->key, kv->keyLen);
|
memcpy(field.name, kv->key, kv->keyLen);
|
||||||
taosArrayPush(results, &field);
|
taosArrayPush(results, &field);
|
||||||
|
if(numOfCols == 0) {
|
||||||
|
|
||||||
|
}
|
||||||
} else if (action == SCHEMA_ACTION_CHANGE_COLUMN_SIZE || action == SCHEMA_ACTION_CHANGE_TAG_SIZE) {
|
} else if (action == SCHEMA_ACTION_CHANGE_COLUMN_SIZE || action == SCHEMA_ACTION_CHANGE_TAG_SIZE) {
|
||||||
uint16_t *index = (uint16_t *)taosHashGet(schemaHash, kv->key, kv->keyLen);
|
uint16_t *index = (uint16_t *)taosHashGet(schemaHash, kv->key, kv->keyLen);
|
||||||
if (index == NULL) {
|
if (index == NULL) {
|
||||||
|
|
|
@ -578,10 +578,12 @@ static int32_t smlConvertJSONString(SSmlKv *pVal, char *typeStr, cJSON *value) {
|
||||||
pVal->length = (uint16_t)strlen(value->valuestring);
|
pVal->length = (uint16_t)strlen(value->valuestring);
|
||||||
|
|
||||||
if (pVal->type == TSDB_DATA_TYPE_BINARY && pVal->length > TSDB_MAX_BINARY_LEN - VARSTR_HEADER_SIZE) {
|
if (pVal->type == TSDB_DATA_TYPE_BINARY && pVal->length > TSDB_MAX_BINARY_LEN - VARSTR_HEADER_SIZE) {
|
||||||
|
TASSERT
|
||||||
return TSDB_CODE_PAR_INVALID_VAR_COLUMN_LEN;
|
return TSDB_CODE_PAR_INVALID_VAR_COLUMN_LEN;
|
||||||
}
|
}
|
||||||
if (pVal->type == TSDB_DATA_TYPE_NCHAR &&
|
if (pVal->type == TSDB_DATA_TYPE_NCHAR &&
|
||||||
pVal->length > (TSDB_MAX_NCHAR_LEN - VARSTR_HEADER_SIZE) / TSDB_NCHAR_SIZE) {
|
pVal->length > (TSDB_MAX_NCHAR_LEN - VARSTR_HEADER_SIZE) / TSDB_NCHAR_SIZE) {
|
||||||
|
TASSERT
|
||||||
return TSDB_CODE_PAR_INVALID_VAR_COLUMN_LEN;
|
return TSDB_CODE_PAR_INVALID_VAR_COLUMN_LEN;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -81,6 +81,7 @@ int32_t smlParseValue(SSmlKv *pVal, SSmlMsgBuf *msg) {
|
||||||
pVal->type = TSDB_DATA_TYPE_BINARY;
|
pVal->type = TSDB_DATA_TYPE_BINARY;
|
||||||
pVal->length -= BINARY_ADD_LEN;
|
pVal->length -= BINARY_ADD_LEN;
|
||||||
if (pVal->length > TSDB_MAX_BINARY_LEN - VARSTR_HEADER_SIZE) {
|
if (pVal->length > TSDB_MAX_BINARY_LEN - VARSTR_HEADER_SIZE) {
|
||||||
|
TASSERT
|
||||||
return TSDB_CODE_PAR_INVALID_VAR_COLUMN_LEN;
|
return TSDB_CODE_PAR_INVALID_VAR_COLUMN_LEN;
|
||||||
}
|
}
|
||||||
pVal->value += (BINARY_ADD_LEN - 1);
|
pVal->value += (BINARY_ADD_LEN - 1);
|
||||||
|
@ -94,6 +95,7 @@ int32_t smlParseValue(SSmlKv *pVal, SSmlMsgBuf *msg) {
|
||||||
pVal->type = TSDB_DATA_TYPE_NCHAR;
|
pVal->type = TSDB_DATA_TYPE_NCHAR;
|
||||||
pVal->length -= NCHAR_ADD_LEN;
|
pVal->length -= NCHAR_ADD_LEN;
|
||||||
if (pVal->length > (TSDB_MAX_NCHAR_LEN - VARSTR_HEADER_SIZE) / TSDB_NCHAR_SIZE) {
|
if (pVal->length > (TSDB_MAX_NCHAR_LEN - VARSTR_HEADER_SIZE) / TSDB_NCHAR_SIZE) {
|
||||||
|
TASSERT
|
||||||
return TSDB_CODE_PAR_INVALID_VAR_COLUMN_LEN;
|
return TSDB_CODE_PAR_INVALID_VAR_COLUMN_LEN;
|
||||||
}
|
}
|
||||||
pVal->value += (NCHAR_ADD_LEN - 1);
|
pVal->value += (NCHAR_ADD_LEN - 1);
|
||||||
|
@ -236,7 +238,8 @@ static int32_t smlParseTagKv(SSmlHandle *info, char **sql, char *sqlEnd, SSmlLin
|
||||||
PROCESS_SLASH(value, valueLen)
|
PROCESS_SLASH(value, valueLen)
|
||||||
}
|
}
|
||||||
|
|
||||||
if (unlikely(valueLen > (TSDB_MAX_NCHAR_LEN - VARSTR_HEADER_SIZE) / TSDB_NCHAR_SIZE)) {
|
if (unlikely(valueLen > (TSDB_MAX_TAGS_LEN - VARSTR_HEADER_SIZE) / TSDB_NCHAR_SIZE)) {
|
||||||
|
TASSERT
|
||||||
return TSDB_CODE_PAR_INVALID_VAR_COLUMN_LEN;
|
return TSDB_CODE_PAR_INVALID_VAR_COLUMN_LEN;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -158,7 +158,8 @@ static int32_t smlParseTelnetTags(SSmlHandle *info, char *data, char *sqlEnd, SS
|
||||||
return TSDB_CODE_TSC_INVALID_VALUE;
|
return TSDB_CODE_TSC_INVALID_VALUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (unlikely(valueLen > (TSDB_MAX_NCHAR_LEN - VARSTR_HEADER_SIZE) / TSDB_NCHAR_SIZE)) {
|
if (unlikely(valueLen > (TSDB_MAX_TAGS_LEN - VARSTR_HEADER_SIZE) / TSDB_NCHAR_SIZE)) {
|
||||||
|
TASSERT
|
||||||
return TSDB_CODE_PAR_INVALID_VAR_COLUMN_LEN;
|
return TSDB_CODE_PAR_INVALID_VAR_COLUMN_LEN;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1208,7 +1208,7 @@ SDataType createDataType(uint8_t type) {
|
||||||
}
|
}
|
||||||
|
|
||||||
SDataType createVarLenDataType(uint8_t type, const SToken* pLen) {
|
SDataType createVarLenDataType(uint8_t type, const SToken* pLen) {
|
||||||
SDataType dt = {.type = type, .precision = 0, .scale = 0, .bytes = taosStr2Int16(pLen->z, NULL, 10)};
|
SDataType dt = {.type = type, .precision = 0, .scale = 0, .bytes = taosStr2Int32(pLen->z, NULL, 10)};
|
||||||
return dt;
|
return dt;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -4498,8 +4498,9 @@ static int32_t checkTableTagsSchema(STranslateContext* pCxt, SHashObj* pHash, SN
|
||||||
code = generateSyntaxErrMsg(&pCxt->msgBuf, TSDB_CODE_PAR_ONLY_ONE_JSON_TAG);
|
code = generateSyntaxErrMsg(&pCxt->msgBuf, TSDB_CODE_PAR_ONLY_ONE_JSON_TAG);
|
||||||
}
|
}
|
||||||
if (TSDB_CODE_SUCCESS == code) {
|
if (TSDB_CODE_SUCCESS == code) {
|
||||||
if ((TSDB_DATA_TYPE_VARCHAR == pTag->dataType.type && calcTypeBytes(pTag->dataType) > TSDB_MAX_BINARY_LEN) ||
|
if ((TSDB_DATA_TYPE_VARCHAR == pTag->dataType.type && calcTypeBytes(pTag->dataType) > TSDB_MAX_TAGS_LEN) ||
|
||||||
(TSDB_DATA_TYPE_NCHAR == pTag->dataType.type && calcTypeBytes(pTag->dataType) > TSDB_MAX_NCHAR_LEN)) {
|
(TSDB_DATA_TYPE_NCHAR == pTag->dataType.type && calcTypeBytes(pTag->dataType) > TSDB_MAX_TAGS_LEN)) {
|
||||||
|
TASSERT
|
||||||
code = generateSyntaxErrMsg(&pCxt->msgBuf, TSDB_CODE_PAR_INVALID_VAR_COLUMN_LEN);
|
code = generateSyntaxErrMsg(&pCxt->msgBuf, TSDB_CODE_PAR_INVALID_VAR_COLUMN_LEN);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -4551,6 +4552,7 @@ static int32_t checkTableColsSchema(STranslateContext* pCxt, SHashObj* pHash, in
|
||||||
if (TSDB_CODE_SUCCESS == code) {
|
if (TSDB_CODE_SUCCESS == code) {
|
||||||
if ((TSDB_DATA_TYPE_VARCHAR == pCol->dataType.type && calcTypeBytes(pCol->dataType) > TSDB_MAX_BINARY_LEN) ||
|
if ((TSDB_DATA_TYPE_VARCHAR == pCol->dataType.type && calcTypeBytes(pCol->dataType) > TSDB_MAX_BINARY_LEN) ||
|
||||||
(TSDB_DATA_TYPE_NCHAR == pCol->dataType.type && calcTypeBytes(pCol->dataType) > TSDB_MAX_NCHAR_LEN)) {
|
(TSDB_DATA_TYPE_NCHAR == pCol->dataType.type && calcTypeBytes(pCol->dataType) > TSDB_MAX_NCHAR_LEN)) {
|
||||||
|
TASSERT
|
||||||
code = generateSyntaxErrMsg(&pCxt->msgBuf, TSDB_CODE_PAR_INVALID_VAR_COLUMN_LEN);
|
code = generateSyntaxErrMsg(&pCxt->msgBuf, TSDB_CODE_PAR_INVALID_VAR_COLUMN_LEN);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -5236,6 +5238,7 @@ static int32_t checkAlterSuperTableBySchema(STranslateContext* pCxt, SAlterTable
|
||||||
|
|
||||||
if (TSDB_ALTER_TABLE_UPDATE_COLUMN_BYTES == pStmt->alterType) {
|
if (TSDB_ALTER_TABLE_UPDATE_COLUMN_BYTES == pStmt->alterType) {
|
||||||
if (calcTypeBytes(pStmt->dataType) > TSDB_MAX_FIELD_LEN) {
|
if (calcTypeBytes(pStmt->dataType) > TSDB_MAX_FIELD_LEN) {
|
||||||
|
TASSERT
|
||||||
return generateSyntaxErrMsg(&pCxt->msgBuf, TSDB_CODE_PAR_INVALID_VAR_COLUMN_LEN);
|
return generateSyntaxErrMsg(&pCxt->msgBuf, TSDB_CODE_PAR_INVALID_VAR_COLUMN_LEN);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -5245,7 +5248,8 @@ static int32_t checkAlterSuperTableBySchema(STranslateContext* pCxt, SAlterTable
|
||||||
}
|
}
|
||||||
|
|
||||||
if (TSDB_ALTER_TABLE_UPDATE_TAG_BYTES == pStmt->alterType) {
|
if (TSDB_ALTER_TABLE_UPDATE_TAG_BYTES == pStmt->alterType) {
|
||||||
if (calcTypeBytes(pStmt->dataType) > TSDB_MAX_FIELD_LEN) {
|
if (calcTypeBytes(pStmt->dataType) > TSDB_MAX_TAGS_LEN) {
|
||||||
|
TASSERT
|
||||||
return generateSyntaxErrMsg(&pCxt->msgBuf, TSDB_CODE_PAR_INVALID_VAR_COLUMN_LEN);
|
return generateSyntaxErrMsg(&pCxt->msgBuf, TSDB_CODE_PAR_INVALID_VAR_COLUMN_LEN);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -338,6 +338,7 @@
|
||||||
,,y,system-test,./pytest.sh python3 ./test.py -f 1-insert/delete_childtable.py
|
,,y,system-test,./pytest.sh python3 ./test.py -f 1-insert/delete_childtable.py
|
||||||
,,y,system-test,./pytest.sh python3 ./test.py -f 1-insert/delete_normaltable.py
|
,,y,system-test,./pytest.sh python3 ./test.py -f 1-insert/delete_normaltable.py
|
||||||
,,y,system-test,./pytest.sh python3 ./test.py -f 1-insert/keep_expired.py
|
,,y,system-test,./pytest.sh python3 ./test.py -f 1-insert/keep_expired.py
|
||||||
|
,,y,system-test,./pytest.sh python3 ./test.py -f 1-insert/stmt_error.py
|
||||||
,,y,system-test,./pytest.sh python3 ./test.py -f 1-insert/drop.py
|
,,y,system-test,./pytest.sh python3 ./test.py -f 1-insert/drop.py
|
||||||
,,y,system-test,./pytest.sh python3 ./test.py -f 1-insert/drop.py -N 3 -M 3 -i False -n 3
|
,,y,system-test,./pytest.sh python3 ./test.py -f 1-insert/drop.py -N 3 -M 3 -i False -n 3
|
||||||
,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/join2.py
|
,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/join2.py
|
||||||
|
|
|
@ -673,11 +673,11 @@ class TDTestCase:
|
||||||
tdSql.checkNotEqual(err.errno, 0)
|
tdSql.checkNotEqual(err.errno, 0)
|
||||||
|
|
||||||
# # # binary
|
# # # binary
|
||||||
# stb_name = tdCom.getLongName(7, "letters")
|
stb_name = tdCom.getLongName(7, "letters")
|
||||||
# input_sql = f'{stb_name},t0=t c0=f,c1="{tdCom.getLongName(16374, "letters")}" 1626006833639000000'
|
input_sql = f'{stb_name},t0=t c0=f,c11=f,c2=f,c3=f,c4=f,c5=f,c6=f,c7=f,c8=f,c9=f,c10=f,c12=f,c1="{tdCom.getLongName(65519, "letters")}" 1626006833639000000'
|
||||||
# self._conn.schemaless_insert([input_sql], TDSmlProtocolType.LINE.value, TDSmlTimestampType.NANO_SECOND.value)
|
self._conn.schemaless_insert([input_sql], TDSmlProtocolType.LINE.value, TDSmlTimestampType.NANO_SECOND.value)
|
||||||
|
|
||||||
# input_sql = f'{stb_name},t0=t c0=f,c1="{tdCom.getLongName(16375, "letters")}" 1626006833639000000'
|
# input_sql = f'{stb_name},t0=t c0=f,c1="{tdCom.getLongName(65514, "letters")}" 1626006833639000000'
|
||||||
# try:
|
# try:
|
||||||
# self._conn.schemaless_insert([input_sql], TDSmlProtocolType.LINE.value, TDSmlTimestampType.NANO_SECOND.value)
|
# self._conn.schemaless_insert([input_sql], TDSmlProtocolType.LINE.value, TDSmlTimestampType.NANO_SECOND.value)
|
||||||
# except SchemalessError as err:
|
# except SchemalessError as err:
|
||||||
|
@ -884,7 +884,7 @@ class TDTestCase:
|
||||||
tdSql.checkRows(2)
|
tdSql.checkRows(2)
|
||||||
tdSql.checkNotEqual(tb_name1, tb_name3)
|
tdSql.checkNotEqual(tb_name1, tb_name3)
|
||||||
|
|
||||||
# * tag binary max is 16384, col+ts binary max 49151
|
# * tag binary max is 16384, col+ts binary max 65531
|
||||||
def tagColBinaryMaxLengthCheckCase(self):
|
def tagColBinaryMaxLengthCheckCase(self):
|
||||||
"""
|
"""
|
||||||
every binary and nchar must be length+2
|
every binary and nchar must be length+2
|
||||||
|
@ -911,7 +911,10 @@ class TDTestCase:
|
||||||
tdSql.checkRows(2)
|
tdSql.checkRows(2)
|
||||||
|
|
||||||
# # * check col,col+ts max in describe ---> 16143
|
# # * check col,col+ts max in describe ---> 16143
|
||||||
input_sql = f'{stb_name},t0=t c0=f,c1="{tdCom.getLongName(16374, "letters")}",c2="{tdCom.getLongName(16374, "letters")}",c3="{tdCom.getLongName(16374, "letters")}",c4="{tdCom.getLongName(12, "letters")}" 1626006833639000000'
|
input_sql = f'{stb_name},t0=t c0=f,c1="{tdCom.getLongName(65517, "letters")}" 1626006833639000000'
|
||||||
|
self._conn.schemaless_insert([input_sql], TDSmlProtocolType.LINE.value, TDSmlTimestampType.NANO_SECOND.value)
|
||||||
|
|
||||||
|
input_sql = f'{stb_name},t0=t c0=f,c1="{tdCom.getLongName(49133, "letters")}",c2="{tdCom.getLongName(16384, "letters")}" 1626006833639000000'
|
||||||
self._conn.schemaless_insert([input_sql], TDSmlProtocolType.LINE.value, TDSmlTimestampType.NANO_SECOND.value)
|
self._conn.schemaless_insert([input_sql], TDSmlProtocolType.LINE.value, TDSmlTimestampType.NANO_SECOND.value)
|
||||||
|
|
||||||
tdSql.query(f"select * from {stb_name}")
|
tdSql.query(f"select * from {stb_name}")
|
||||||
|
@ -1280,7 +1283,7 @@ class TDTestCase:
|
||||||
self.nowTsCheckCase()
|
self.nowTsCheckCase()
|
||||||
self.dateFormatTsCheckCase()
|
self.dateFormatTsCheckCase()
|
||||||
self.illegalTsCheckCase()
|
self.illegalTsCheckCase()
|
||||||
# self.tagValueLengthCheckCase()
|
self.tagValueLengthCheckCase()
|
||||||
self.colValueLengthCheckCase()
|
self.colValueLengthCheckCase()
|
||||||
self.tagColIllegalValueCheckCase()
|
self.tagColIllegalValueCheckCase()
|
||||||
self.duplicateIdTagColInsertCheckCase()
|
self.duplicateIdTagColInsertCheckCase()
|
||||||
|
|
|
@ -0,0 +1,225 @@
|
||||||
|
# encoding:UTF-8
|
||||||
|
from taos import *
|
||||||
|
|
||||||
|
from ctypes import *
|
||||||
|
from datetime import datetime
|
||||||
|
import taos
|
||||||
|
|
||||||
|
import taos
|
||||||
|
import time
|
||||||
|
|
||||||
|
from util.log import *
|
||||||
|
from util.cases import *
|
||||||
|
from util.sql import *
|
||||||
|
from util.dnodes import *
|
||||||
|
|
||||||
|
class TDTestCase:
|
||||||
|
def __init__(self):
|
||||||
|
self.err_case = 0
|
||||||
|
self.curret_case = 0
|
||||||
|
|
||||||
|
def caseDescription(self):
|
||||||
|
|
||||||
|
'''
|
||||||
|
case1 <wenzhouwww>: [TD-11899] : this is an test case for check stmt error use .
|
||||||
|
'''
|
||||||
|
return
|
||||||
|
|
||||||
|
def init(self, conn, logSql, replicaVar=1):
|
||||||
|
self.replicaVar = int(replicaVar)
|
||||||
|
tdLog.debug("start to execute %s" % __file__)
|
||||||
|
tdSql.init(conn.cursor(), logSql)
|
||||||
|
|
||||||
|
def conn(self):
|
||||||
|
# type: () -> taos.TaosConnection
|
||||||
|
return connect()
|
||||||
|
|
||||||
|
def test_stmt_insert(self,conn):
|
||||||
|
# type: (TaosConnection) -> None
|
||||||
|
|
||||||
|
dbname = "pytest_taos_stmt"
|
||||||
|
try:
|
||||||
|
conn.execute("drop database if exists %s" % dbname)
|
||||||
|
conn.execute("create database if not exists %s" % dbname)
|
||||||
|
conn.select_db(dbname)
|
||||||
|
|
||||||
|
conn.execute(
|
||||||
|
"create table if not exists log(ts timestamp, bo bool, nil tinyint, ti tinyint, si smallint, ii int,\
|
||||||
|
bi bigint, tu tinyint unsigned, su smallint unsigned, iu int unsigned, bu bigint unsigned, \
|
||||||
|
ff float, dd double, bb binary(65059), nn nchar(100), tt timestamp)",
|
||||||
|
)
|
||||||
|
conn.load_table_info("log")
|
||||||
|
|
||||||
|
|
||||||
|
stmt = conn.statement("insert into log values(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)")
|
||||||
|
params = new_bind_params(16)
|
||||||
|
params[0].timestamp(1626861392589, PrecisionEnum.Milliseconds)
|
||||||
|
params[1].bool(True)
|
||||||
|
params[2].tinyint(None)
|
||||||
|
params[3].tinyint(2)
|
||||||
|
params[4].smallint(3)
|
||||||
|
params[5].int(4)
|
||||||
|
params[6].bigint(5)
|
||||||
|
params[7].tinyint_unsigned(6)
|
||||||
|
params[8].smallint_unsigned(7)
|
||||||
|
params[9].int_unsigned(8)
|
||||||
|
params[10].bigint_unsigned(9)
|
||||||
|
params[11].float(10.1)
|
||||||
|
params[12].double(10.11)
|
||||||
|
binaryStr = '123456789'
|
||||||
|
for i in range(1301):
|
||||||
|
binaryStr += "1234567890abcdefghij1234567890abcdefghij12345hello"
|
||||||
|
params[13].binary(binaryStr)
|
||||||
|
params[14].nchar("stmt")
|
||||||
|
params[15].timestamp(1626861392589, PrecisionEnum.Milliseconds)
|
||||||
|
|
||||||
|
stmt.bind_param(params)
|
||||||
|
stmt.execute()
|
||||||
|
|
||||||
|
assert stmt.affected_rows == 1
|
||||||
|
stmt.close()
|
||||||
|
|
||||||
|
querystmt=conn.statement("select ?, bo, nil, ti, si, ii,bi, tu, su, iu, bu, ff, dd, bb, nn, tt from log")
|
||||||
|
queryparam=new_bind_params(1)
|
||||||
|
print(type(queryparam))
|
||||||
|
queryparam[0].binary("ts")
|
||||||
|
querystmt.bind_param(queryparam)
|
||||||
|
querystmt.execute()
|
||||||
|
result=querystmt.use_result()
|
||||||
|
|
||||||
|
row=result.fetch_all()
|
||||||
|
print(row)
|
||||||
|
|
||||||
|
assert row[0][1] == True
|
||||||
|
assert row[0][2] == None
|
||||||
|
for i in range(3, 10):
|
||||||
|
assert row[0][i] == i - 1
|
||||||
|
#float == may not work as expected
|
||||||
|
# assert row[0][11] == c_float(10.1)
|
||||||
|
assert row[0][12] == 10.11
|
||||||
|
assert row[0][13][65054:] == "hello"
|
||||||
|
assert row[0][14] == "stmt"
|
||||||
|
|
||||||
|
conn.execute("drop database if exists %s" % dbname)
|
||||||
|
conn.close()
|
||||||
|
|
||||||
|
except Exception as err:
|
||||||
|
conn.execute("drop database if exists %s" % dbname)
|
||||||
|
conn.close()
|
||||||
|
raise err
|
||||||
|
|
||||||
|
def test_stmt_insert_error(self,conn):
|
||||||
|
# type: (TaosConnection) -> None
|
||||||
|
|
||||||
|
dbname = "pytest_taos_stmt_error"
|
||||||
|
try:
|
||||||
|
conn.execute("drop database if exists %s" % dbname)
|
||||||
|
conn.execute("create database if not exists %s" % dbname)
|
||||||
|
conn.select_db(dbname)
|
||||||
|
|
||||||
|
conn.execute(
|
||||||
|
"create table if not exists log(ts timestamp, bo bool, nil tinyint, ti tinyint, si smallint, ii int,\
|
||||||
|
bi bigint, tu tinyint unsigned, su smallint unsigned, iu int unsigned, bu bigint unsigned, \
|
||||||
|
ff float, dd double, bb binary(100), nn nchar(100), tt timestamp , error_data int )",
|
||||||
|
)
|
||||||
|
conn.load_table_info("log")
|
||||||
|
|
||||||
|
|
||||||
|
stmt = conn.statement("insert into log values(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,1000)")
|
||||||
|
params = new_bind_params(16)
|
||||||
|
params[0].timestamp(1626861392589, PrecisionEnum.Milliseconds)
|
||||||
|
params[1].bool(True)
|
||||||
|
params[2].tinyint(None)
|
||||||
|
params[3].tinyint(2)
|
||||||
|
params[4].smallint(3)
|
||||||
|
params[5].int(4)
|
||||||
|
params[6].bigint(5)
|
||||||
|
params[7].tinyint_unsigned(6)
|
||||||
|
params[8].smallint_unsigned(7)
|
||||||
|
params[9].int_unsigned(8)
|
||||||
|
params[10].bigint_unsigned(9)
|
||||||
|
params[11].float(10.1)
|
||||||
|
params[12].double(10.11)
|
||||||
|
params[13].binary("hello")
|
||||||
|
params[14].nchar("stmt")
|
||||||
|
params[15].timestamp(1626861392589, PrecisionEnum.Milliseconds)
|
||||||
|
|
||||||
|
stmt.bind_param(params)
|
||||||
|
stmt.execute()
|
||||||
|
|
||||||
|
conn.close()
|
||||||
|
|
||||||
|
except Exception as err:
|
||||||
|
conn.execute("drop database if exists %s" % dbname)
|
||||||
|
conn.close()
|
||||||
|
raise err
|
||||||
|
|
||||||
|
def test_stmt_insert_error_null_timestamp(self,conn):
|
||||||
|
|
||||||
|
dbname = "pytest_taos_stmt_error_null_ts"
|
||||||
|
try:
|
||||||
|
conn.execute("drop database if exists %s" % dbname)
|
||||||
|
conn.execute("create database if not exists %s" % dbname)
|
||||||
|
conn.execute("alter database %s keep 36500" % dbname)
|
||||||
|
conn.select_db(dbname)
|
||||||
|
|
||||||
|
conn.execute("create stable STB(ts timestamp, n int) tags(b int)")
|
||||||
|
|
||||||
|
stmt = conn.statement("insert into ? using STB tags(?) values(?, ?)")
|
||||||
|
params = new_bind_params(1)
|
||||||
|
params[0].int(4);
|
||||||
|
stmt.set_tbname_tags("ct", params);
|
||||||
|
|
||||||
|
multi_params = new_multi_binds(2);
|
||||||
|
multi_params[0].timestamp([9223372036854775808])
|
||||||
|
multi_params[1].int([123])
|
||||||
|
stmt.bind_param_batch(multi_params)
|
||||||
|
|
||||||
|
stmt.execute()
|
||||||
|
result = stmt.use_result()
|
||||||
|
|
||||||
|
result.close()
|
||||||
|
stmt.close()
|
||||||
|
|
||||||
|
stmt = conn.statement("select * from STB")
|
||||||
|
stmt.execute()
|
||||||
|
result = stmt.use_result()
|
||||||
|
print(result.affected_rows)
|
||||||
|
row = result.next()
|
||||||
|
print(row)
|
||||||
|
|
||||||
|
result.close()
|
||||||
|
stmt.close()
|
||||||
|
conn.close()
|
||||||
|
|
||||||
|
except Exception as err:
|
||||||
|
conn.close()
|
||||||
|
raise err
|
||||||
|
|
||||||
|
def run(self):
|
||||||
|
|
||||||
|
self.test_stmt_insert(self.conn())
|
||||||
|
try:
|
||||||
|
self.test_stmt_insert_error(self.conn())
|
||||||
|
except Exception as error :
|
||||||
|
|
||||||
|
if str(error)=='[0x0200]: no mix usage for ? and values':
|
||||||
|
tdLog.info('=========stmt error occured for bind part column ==============')
|
||||||
|
else:
|
||||||
|
tdLog.exit("expect error(%s) not occured" % str(error))
|
||||||
|
|
||||||
|
try:
|
||||||
|
self.test_stmt_insert_error_null_timestamp(self.conn())
|
||||||
|
tdLog.exit("expect error not occured - 1")
|
||||||
|
except Exception as error :
|
||||||
|
if str(error)=='[0x060b]: Timestamp data out of range':
|
||||||
|
tdLog.info('=========stmt error occured for bind part column(NULL Timestamp) ==============')
|
||||||
|
else:
|
||||||
|
tdLog.exit("expect error(%s) not occured - 2" % str(error))
|
||||||
|
|
||||||
|
def stop(self):
|
||||||
|
tdSql.close()
|
||||||
|
tdLog.success("%s successfully executed" % __file__)
|
||||||
|
|
||||||
|
tdCases.addWindows(__file__, TDTestCase())
|
||||||
|
tdCases.addLinux(__file__, TDTestCase())
|
|
@ -287,6 +287,7 @@ python3 ./test.py -f 1-insert/tb_100w_data_order.py -P
|
||||||
python3 ./test.py -f 1-insert/delete_childtable.py -P
|
python3 ./test.py -f 1-insert/delete_childtable.py -P
|
||||||
python3 ./test.py -f 1-insert/delete_normaltable.py -P
|
python3 ./test.py -f 1-insert/delete_normaltable.py -P
|
||||||
python3 ./test.py -f 1-insert/keep_expired.py -P
|
python3 ./test.py -f 1-insert/keep_expired.py -P
|
||||||
|
python3 ./test.py -f 1-insert/stmt_error.py -P
|
||||||
python3 ./test.py -f 1-insert/drop.py -P
|
python3 ./test.py -f 1-insert/drop.py -P
|
||||||
python3 ./test.py -f 2-query/join2.py -P
|
python3 ./test.py -f 2-query/join2.py -P
|
||||||
python3 ./test.py -f 2-query/union1.py -P
|
python3 ./test.py -f 2-query/union1.py -P
|
||||||
|
|
|
@ -218,6 +218,7 @@ python3 ./test.py -f 1-insert/delete_stable.py
|
||||||
python3 ./test.py -f 1-insert/delete_childtable.py
|
python3 ./test.py -f 1-insert/delete_childtable.py
|
||||||
python3 ./test.py -f 1-insert/delete_normaltable.py
|
python3 ./test.py -f 1-insert/delete_normaltable.py
|
||||||
python3 ./test.py -f 1-insert/keep_expired.py
|
python3 ./test.py -f 1-insert/keep_expired.py
|
||||||
|
python3 ./test.py -f 1-insert/stmt_error.py
|
||||||
python3 ./test.py -f 1-insert/drop.py
|
python3 ./test.py -f 1-insert/drop.py
|
||||||
python3 ./test.py -f 1-insert/drop.py -N 3 -M 3 -i False -n 3
|
python3 ./test.py -f 1-insert/drop.py -N 3 -M 3 -i False -n 3
|
||||||
python3 ./test.py -f 2-query/join2.py
|
python3 ./test.py -f 2-query/join2.py
|
||||||
|
|
Loading…
Reference in New Issue