Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
taosdata
TDengine
提交
54060691
T
TDengine
项目概览
taosdata
/
TDengine
大约 1 年 前同步成功
通知
1184
Star
22015
Fork
4786
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
1
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
T
TDengine
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
1
Issue
1
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
54060691
编写于
9月 16, 2021
作者:
wmmhello
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
TD-6129<feature> add json tag support
上级
95fc626c
变更
7
隐藏空白更改
内联
并排
Showing
7 changed file
with
136 addition
and
59 deletion
+136
-59
src/client/src/tscSQLParser.c
src/client/src/tscSQLParser.c
+8
-17
src/client/src/tscUtil.c
src/client/src/tscUtil.c
+10
-7
src/query/inc/qSqlparser.h
src/query/inc/qSqlparser.h
+0
-1
src/query/src/qSqlParser.c
src/query/src/qSqlParser.c
+0
-1
src/tsdb/inc/tsdbMeta.h
src/tsdb/inc/tsdbMeta.h
+8
-0
src/tsdb/src/tsdbMeta.c
src/tsdb/src/tsdbMeta.c
+109
-32
src/util/src/hash.c
src/util/src/hash.c
+1
-1
未找到文件。
src/client/src/tscSQLParser.c
浏览文件 @
54060691
...
...
@@ -1583,8 +1583,6 @@ static bool validateTagParams(SArray* pTagsList, SArray* pFieldList, SSqlCmd* pC
invalidOperationMsg
(
tscGetErrorMsgPayload
(
pCmd
),
msg3
);
return
false
;
}
if
(
p
->
type
==
TSDB_DATA_TYPE_JSON
&&
validataTagJson
}
return
true
;
...
...
@@ -6297,17 +6295,7 @@ int32_t setAlterTableInfo(SSqlObj* pSql, struct SSqlInfo* pInfo) {
return
invalidOperationMsg
(
pMsg
,
msg14
);
}
pAlterSQL
->
tagData
.
data
=
calloc
(
1
,
pTagsSchema
->
bytes
*
TSDB_NCHAR_SIZE
+
VARSTR_HEADER_SIZE
);
if
(
tVariantDump
(
&
pItem
->
pVar
,
pAlterSQL
->
tagData
.
data
,
pTagsSchema
->
type
,
true
)
!=
TSDB_CODE_SUCCESS
)
{
return
invalidOperationMsg
(
pMsg
,
msg13
);
}
pAlterSQL
->
tagData
.
dataLen
=
pTagsSchema
->
bytes
;
// validate the length of binary
if
((
pTagsSchema
->
type
==
TSDB_DATA_TYPE_BINARY
||
pTagsSchema
->
type
==
TSDB_DATA_TYPE_NCHAR
)
&&
varDataTLen
(
pAlterSQL
->
tagData
.
data
)
>
pTagsSchema
->
bytes
)
{
if
(
pTagsSchema
->
type
==
TSDB_DATA_TYPE_JSON
&&
(
pItem
->
pVar
.
nLen
>
TSDB_MAX_TAGS_LEN
))
{
return
invalidOperationMsg
(
pMsg
,
msg14
);
}
...
...
@@ -6344,14 +6332,17 @@ int32_t setAlterTableInfo(SSqlObj* pSql, struct SSqlInfo* pInfo) {
}
// copy the tag value to pMsg body
pItem
=
taosArrayGet
(
pVarList
,
1
);
tVariantDump
(
&
pItem
->
pVar
,
pUpdateMsg
->
data
+
schemaLen
,
pTagsSchema
->
type
,
true
);
if
(
tVariantDump
(
&
pItem
->
pVar
,
pUpdateMsg
->
data
+
schemaLen
,
pTagsSchema
->
type
,
true
)
!=
TSDB_CODE_SUCCESS
){
return
invalidOperationMsg
(
pMsg
,
msg13
);
}
int32_t
len
=
0
;
if
(
pTagsSchema
->
type
!=
TSDB_DATA_TYPE_BINARY
&&
pTagsSchema
->
type
!=
TSDB_DATA_TYPE_NCHAR
)
{
if
(
!
IS_VAR_DATA_TYPE
(
pTagsSchema
->
type
)
)
{
len
=
tDataTypes
[
pTagsSchema
->
type
].
bytes
;
}
else
{
len
=
varDataTLen
(
pUpdateMsg
->
data
+
schemaLen
);
if
(
len
>
pTagsSchema
->
bytes
)
return
invalidOperationMsg
(
pMsg
,
msg14
);
}
pUpdateMsg
->
tagValLen
=
htonl
(
len
);
// length may be changed after dump data
...
...
src/client/src/tscUtil.c
浏览文件 @
54060691
...
...
@@ -5176,7 +5176,7 @@ int parseJsontoTagData(char* json, SKVRowBuilder* kvRowBuilder, char* errMsg, in
retCode
=
tscSQLSyntaxErrMsg
(
errMsg
,
"json inner error"
,
NULL
);
goto
end
;
}
char
tagVal
[
TSDB_MAX_TAGS_LEN
];
char
tagVal
[
TSDB_MAX_TAGS_LEN
]
=
{
0
}
;
int32_t
output
=
0
;
if
(
!
taosMbsToUcs4
(
item
->
string
,
strlen
(
item
->
string
),
varDataVal
(
tagVal
),
TSDB_MAX_TAGS_LEN
-
VARSTR_HEADER_SIZE
,
&
output
))
{
tscError
(
"json string error:%s|%s"
,
strerror
(
errno
),
item
->
string
);
...
...
@@ -5185,22 +5185,25 @@ int parseJsontoTagData(char* json, SKVRowBuilder* kvRowBuilder, char* errMsg, in
}
varDataSetLen
(
tagVal
,
output
);
tdAddColToKVRow
(
kvRowBuilder
,
jsonIndex
++
,
TSDB_DATA_TYPE_NCHAR
,
tagVal
);
tdAddColToKVRow
(
kvRowBuilder
,
jsonIndex
++
,
TSDB_DATA_TYPE_NCHAR
,
tagVal
);
// add json key
memset
(
tagVal
,
0
,
TSDB_MAX_TAGS_LEN
);
if
(
item
->
type
==
cJSON_String
){
if
(
item
->
type
==
cJSON_String
){
// add json value format: type|data
output
=
0
;
if
(
!
taosMbsToUcs4
(
item
->
valuestring
,
strlen
(
item
->
valuestring
),
varDataVal
(
tagVal
),
TSDB_MAX_TAGS_LEN
-
VARSTR_HEADER_SIZE
,
&
output
))
{
*
tagVal
=
item
->
type
;
// type
char
*
tagData
=
tagVal
+
CHAR_BYTES
;
if
(
!
taosMbsToUcs4
(
item
->
valuestring
,
strlen
(
item
->
valuestring
),
varDataVal
(
tagData
),
TSDB_MAX_TAGS_LEN
-
VARSTR_HEADER_SIZE
,
&
output
))
{
tscError
(
"json string error:%s|%s"
,
strerror
(
errno
),
item
->
string
);
retCode
=
tscSQLSyntaxErrMsg
(
errMsg
,
"serizelize json error"
,
NULL
);
goto
end
;
}
varDataSetLen
(
tag
Val
,
output
);
varDataSetLen
(
tag
Data
,
output
);
tdAddColToKVRow
(
kvRowBuilder
,
jsonIndex
++
,
TSDB_DATA_TYPE_NCHAR
,
tagVal
);
}
else
if
(
item
->
type
==
cJSON_Number
){
*
((
double
*
)
tagVal
)
=
item
->
valuedouble
;
*
tagVal
=
item
->
type
;
// type
char
*
tagData
=
tagVal
+
CHAR_BYTES
;
*
((
double
*
)
tagData
)
=
item
->
valuedouble
;
tdAddColToKVRow
(
kvRowBuilder
,
jsonIndex
++
,
TSDB_DATA_TYPE_BIGINT
,
tagVal
);
}
else
{
retCode
=
tscSQLSyntaxErrMsg
(
errMsg
,
"invalidate json value"
,
NULL
);
...
...
src/query/inc/qSqlparser.h
浏览文件 @
54060691
...
...
@@ -155,7 +155,6 @@ typedef struct SAlterTableInfo {
SStrToken
name
;
int16_t
tableType
;
int16_t
type
;
STagData
tagData
;
SArray
*
pAddColumns
;
// SArray<TAOS_FIELD>
SArray
*
varList
;
// set t=val or: change src dst, SArray<tVariantListItem>
}
SAlterTableInfo
;
...
...
src/query/src/qSqlParser.c
浏览文件 @
54060691
...
...
@@ -952,7 +952,6 @@ void SqlInfoDestroy(SSqlInfo *pInfo) {
}
else
if
(
pInfo
->
type
==
TSDB_SQL_ALTER_TABLE
)
{
taosArrayDestroyEx
(
pInfo
->
pAlterInfo
->
varList
,
freeVariant
);
taosArrayDestroy
(
pInfo
->
pAlterInfo
->
pAddColumns
);
tfree
(
pInfo
->
pAlterInfo
->
tagData
.
data
);
tfree
(
pInfo
->
pAlterInfo
);
}
else
if
(
pInfo
->
type
==
TSDB_SQL_COMPACT_VNODE
)
{
tSqlExprListDestroy
(
pInfo
->
list
);
...
...
src/tsdb/inc/tsdbMeta.h
浏览文件 @
54060691
...
...
@@ -18,6 +18,14 @@
#define TSDB_MAX_TABLE_SCHEMAS 16
#pragma pack (push,1)
typedef
struct
jsonMapValue
{
uint64_t
uid
;
// the unique table ID
int16_t
colId
;
// the json col ID.
}
JsonMapValue
;
#pragma pack (pop)
typedef
struct
STable
{
STableId
tableId
;
ETableType
type
;
...
...
src/tsdb/src/tsdbMeta.c
浏览文件 @
54060691
...
...
@@ -389,7 +389,8 @@ int tsdbUpdateTableTagValue(STsdbRepo *repo, SUpdateTableTagValMsg *pMsg) {
TSDB_WUNLOCK_TABLE
(
pTable
->
pSuper
);
}
bool
isChangeIndexCol
=
(
pMsg
->
colId
==
colColId
(
schemaColAt
(
pTable
->
pSuper
->
tagSchema
,
0
)));
bool
isChangeIndexCol
=
(
pMsg
->
colId
==
colColId
(
schemaColAt
(
pTable
->
pSuper
->
tagSchema
,
0
)))
||
pMsg
->
type
==
TSDB_DATA_TYPE_JSON
;
// STColumn *pCol = bsearch(&(pMsg->colId), pMsg->data, pMsg->numOfTags, sizeof(STColumn), colIdCompar);
// ASSERT(pCol != NULL);
...
...
@@ -398,7 +399,12 @@ int tsdbUpdateTableTagValue(STsdbRepo *repo, SUpdateTableTagValMsg *pMsg) {
tsdbRemoveTableFromIndex
(
pMeta
,
pTable
);
}
TSDB_WLOCK_TABLE
(
pTable
);
tdSetKVRowDataOfCol
(
&
(
pTable
->
tagVal
),
pMsg
->
colId
,
pMsg
->
type
,
POINTER_SHIFT
(
pMsg
->
data
,
pMsg
->
schemaLen
));
if
(
pMsg
->
type
==
TSDB_DATA_TYPE_JSON
){
kvRowFree
(
pTable
->
tagVal
);
pTable
->
tagVal
=
tdKVRowDup
(
POINTER_SHIFT
(
pMsg
->
data
,
pMsg
->
schemaLen
))
}
else
{
tdSetKVRowDataOfCol
(
&
(
pTable
->
tagVal
),
pMsg
->
colId
,
pMsg
->
type
,
POINTER_SHIFT
(
pMsg
->
data
,
pMsg
->
schemaLen
));
}
TSDB_WUNLOCK_TABLE
(
pTable
);
if
(
isChangeIndexCol
)
{
tsdbAddTableIntoIndex
(
pMeta
,
pTable
,
false
);
...
...
@@ -847,11 +853,21 @@ static STable *tsdbCreateTableFromCfg(STableCfg *pCfg, bool isSuper, STable *pST
}
pTable
->
tagVal
=
NULL
;
STColumn
*
pCol
=
schemaColAt
(
pTable
->
tagSchema
,
DEFAULT_TAG_INDEX_COLUMN
);
pTable
->
pIndex
=
tSkipListCreate
(
TSDB_SUPER_TABLE_SL_LEVEL
,
colType
(
pCol
),
(
uint8_t
)(
colBytes
(
pCol
)),
NULL
,
SL_ALLOW_DUP_KEY
,
getTagIndexKey
);
if
(
pTable
->
pIndex
==
NULL
)
{
terrno
=
TSDB_CODE_TDB_OUT_OF_MEMORY
;
goto
_err
;
if
(
pCol
->
type
==
TSDB_DATA_TYPE_JSON
){
assert
(
pTable
->
tagSchema
->
numOfCols
==
1
);
pTable
->
jsonKeyMap
=
taosHashInit
(
8
,
taosGetDefaultHashFunction
(
TSDB_DATA_TYPE_BINARY
),
true
,
HASH_ENTRY_LOCK
);
if
(
pTable
->
jsonKeyMap
==
NULL
)
{
terrno
=
TSDB_CODE_TDB_OUT_OF_MEMORY
;
tsdbFreeTable
(
pTable
);
return
NULL
;
}
}
else
{
pTable
->
pIndex
=
tSkipListCreate
(
TSDB_SUPER_TABLE_SL_LEVEL
,
colType
(
pCol
),
(
uint8_t
)(
colBytes
(
pCol
)),
NULL
,
SL_ALLOW_DUP_KEY
,
getTagIndexKey
);
if
(
pTable
->
pIndex
==
NULL
)
{
terrno
=
TSDB_CODE_TDB_OUT_OF_MEMORY
;
goto
_err
;
}
}
}
else
{
pTable
->
type
=
pCfg
->
type
;
...
...
@@ -904,6 +920,21 @@ _err:
return
NULL
;
}
static
void
*
tsdbDestroyTagJsonHashTable
(
SHashObj
*
hashObj
)
{
if
(
hashObj
==
NULL
)
{
return
NULL
;
}
SArray
*
p
=
taosHashIterate
(
hashObj
,
NULL
);
while
(
p
)
{
taosArrayDestroy
(
p
);
p
=
taosHashIterate
(
hashObj
,
p
);
}
taosHashCleanup
(
hashObj
);
return
NULL
;
}
static
void
tsdbFreeTable
(
STable
*
pTable
)
{
if
(
pTable
)
{
if
(
pTable
->
name
!=
NULL
)
...
...
@@ -921,6 +952,7 @@ static void tsdbFreeTable(STable *pTable) {
kvRowFree
(
pTable
->
tagVal
);
tSkipListDestroy
(
pTable
->
pIndex
);
tsdbDestroyTagJsonHashTable
(
pTable
->
jsonKeyMap
);
taosTZfree
(
pTable
->
lastRow
);
tfree
(
pTable
->
sql
);
...
...
@@ -1045,6 +1077,14 @@ static void tsdbRemoveTableFromMeta(STsdbRepo *pRepo, STable *pTable, bool rmFro
tsdbUnRefTable
(
pTable
);
}
static
int
tscCompareJsonMapValue
(
const
void
*
a
,
const
void
*
b
)
{
const
JsonMapValue
*
x
=
(
const
JsonMapValue
*
)
a
;
const
JsonMapValue
*
y
=
(
const
JsonMapValue
*
)
b
;
if
(
x
->
uid
>
y
->
uid
)
return
1
;
if
(
x
->
uid
<
y
->
uid
)
return
-
1
;
return
0
;
}
static
int
tsdbAddTableIntoIndex
(
STsdbMeta
*
pMeta
,
STable
*
pTable
,
bool
refSuper
)
{
ASSERT
(
pTable
->
type
==
TSDB_CHILD_TABLE
&&
pTable
!=
NULL
);
STable
*
pSTable
=
tsdbGetTableByUid
(
pMeta
,
TABLE_SUID
(
pTable
));
...
...
@@ -1052,10 +1092,12 @@ static int tsdbAddTableIntoIndex(STsdbMeta *pMeta, STable *pTable, bool refSuper
pTable
->
pSuper
=
pSTable
;
if
(
pSTable
->
tagSchema
->
numOfCols
==
1
&&
pSTable
->
tagSchema
->
columns
[
0
].
type
==
TSDB_DATA_TYPE_JSON
){
if
(
pSTable
->
tagSchema
->
columns
[
0
].
type
==
TSDB_DATA_TYPE_JSON
){
ASSERT
(
pSTable
->
tagSchema
->
numOfCols
==
1
);
int16_t
nCols
=
kvRowNCols
(
pTable
->
tagVal
);
ASSERT
(
nCols
%
2
==
1
);
for
(
int
j
=
0
;
j
<
nCols
;
++
j
)
{
if
(
j
!=
0
&&
j
%
2
==
0
)
continue
;
// jump value
SColIdx
*
pColIdx
=
kvRowColIdxAt
(
pTable
->
tagVal
,
j
);
void
*
val
=
(
kvRowColVal
(
pTable
->
tagVal
,
pColIdx
));
if
(
j
==
0
){
// json value is the first
...
...
@@ -1064,24 +1106,24 @@ static int tsdbAddTableIntoIndex(STsdbMeta *pMeta, STable *pTable, bool refSuper
continue
;
}
void
*
tablist
=
taosHashGet
(
pSTable
->
jsonKeyMap
,
varDataVal
(
val
)
,
varDataLen
(
val
));
SArray
*
*
tablist
=
taosHashGet
(
pSTable
->
jsonKeyMap
,
varDataVal
(
val
)
,
varDataLen
(
val
));
if
(
tablist
==
NULL
)
{
tablist
=
taosArrayInit
(
8
,
sizeof
(
uint64_t
));
if
(
tablist
==
NULL
){
void
*
tablistNew
=
taosArrayInit
(
8
,
sizeof
(
JsonMapValue
));
if
(
tablist
New
==
NULL
){
terrno
=
TSDB_CODE_TDB_OUT_OF_MEMORY
;
tsdbError
(
"out of memory when alloc json tag array"
);
return
-
1
;
}
if
(
taosHashPut
(
pSTable
->
jsonKeyMap
,
varDataVal
(
val
)
,
varDataLen
(
val
),
&
tablistNew
,
sizeof
(
void
*
))
<
0
){
terrno
=
TSDB_CODE_TDB_OUT_OF_MEMORY
;
tsdbError
(
"out of memory when put json tag array"
);
return
-
1
;
}
tablist
=
(
SArray
**
)
&
tablistNew
;
}
taosArrayPush
(
tablist
,
&
TABLE_UID
(
pTable
));
taosArraySort
(
tablist
,
compareUint64Val
);
taosArrayRemoveDuplicate
(
tablist
,
compareUint64Val
,
NULL
);
if
(
taosHashPut
(
pSTable
->
jsonKeyMap
,
varDataVal
(
val
)
,
varDataLen
(
val
),
tablist
,
sizeof
(
void
*
))
<
0
){
terrno
=
TSDB_CODE_TDB_OUT_OF_MEMORY
;
tsdbError
(
"out of memory when put json tag array"
);
return
-
1
;
}
JsonMapValue
jmvalue
=
{
TABLE_UID
(
pTable
),
pColIdx
->
colId
};
taosArrayPush
(
*
tablist
,
&
jmvalue
);
taosArraySort
(
*
tablist
,
tscCompareJsonMapValue
);
}
}
else
{
tSkipListPut
(
pSTable
->
pIndex
,
(
void
*
)
pTable
);
...
...
@@ -1097,22 +1139,52 @@ static int tsdbRemoveTableFromIndex(STsdbMeta *pMeta, STable *pTable) {
STable
*
pSTable
=
pTable
->
pSuper
;
ASSERT
(
pSTable
!=
NULL
);
char
*
key
=
getTagIndexKey
(
pTable
);
SArray
*
res
=
tSkipListGet
(
pSTable
->
pIndex
,
key
);
if
(
pSTable
->
tagSchema
->
columns
[
0
].
type
==
TSDB_DATA_TYPE_JSON
){
ASSERT
(
pSTable
->
tagSchema
->
numOfCols
==
1
);
int16_t
nCols
=
kvRowNCols
(
pTable
->
tagVal
);
ASSERT
(
nCols
%
2
==
1
);
for
(
int
j
=
0
;
j
<
nCols
;
++
j
)
{
if
(
j
!=
0
&&
j
%
2
==
0
)
continue
;
// jump value
SColIdx
*
pColIdx
=
kvRowColIdxAt
(
pTable
->
tagVal
,
j
);
void
*
val
=
(
kvRowColVal
(
pTable
->
tagVal
,
pColIdx
));
if
(
j
==
0
){
// json value is the first
int8_t
jsonVal
=
*
(
int8_t
*
)
val
;
ASSERT
(
jsonVal
==
TSDB_DATA_BINARY_PLACEHOLDER
);
continue
;
}
size_t
size
=
taosArrayGetSize
(
res
);
ASSERT
(
size
>
0
);
SArray
**
tablist
=
taosHashGet
(
pSTable
->
jsonKeyMap
,
varDataVal
(
val
)
,
varDataLen
(
val
));
if
(
tablist
==
NULL
)
{
tsdbError
(
"json tag no key error,%d"
,
j
);
continue
;
}
for
(
int32_t
i
=
0
;
i
<
size
;
++
i
)
{
SSkipListNode
*
pNode
=
taosArrayGetP
(
res
,
i
);
JsonMapValue
jmvalue
=
{
TABLE_UID
(
pTable
),
pColIdx
->
colId
};
void
*
p
=
taosArraySearch
(
*
tablist
,
&
jmvalue
,
tscCompareJsonMapValue
,
TD_EQ
);
if
(
p
==
NULL
)
{
tsdbError
(
"json tag no tableid error,%d"
,
j
);
continue
;
}
taosArrayRemove
(
*
tablist
,
TARRAY_ELEM_IDX
(
*
tablist
,
p
));
}
}
else
{
char
*
key
=
getTagIndexKey
(
pTable
);
SArray
*
res
=
tSkipListGet
(
pSTable
->
pIndex
,
key
);
// STableIndexElem* pElem = (STableIndexElem*) SL_GET_NODE_DATA(pNode);
if
((
STable
*
)
SL_GET_NODE_DATA
(
pNode
)
==
pTable
)
{
// this is the exact what we need
tSkipListRemoveNode
(
pSTable
->
pIndex
,
pNode
);
size_t
size
=
taosArrayGetSize
(
res
);
ASSERT
(
size
>
0
);
for
(
int32_t
i
=
0
;
i
<
size
;
++
i
)
{
SSkipListNode
*
pNode
=
taosArrayGetP
(
res
,
i
);
// STableIndexElem* pElem = (STableIndexElem*) SL_GET_NODE_DATA(pNode);
if
((
STable
*
)
SL_GET_NODE_DATA
(
pNode
)
==
pTable
)
{
// this is the exact what we need
tSkipListRemoveNode
(
pSTable
->
pIndex
,
pNode
);
}
}
}
taosArrayDestroy
(
res
);
taosArrayDestroy
(
res
);
}
return
0
;
}
...
...
@@ -1352,7 +1424,12 @@ static void *tsdbDecodeTable(void *buf, STable **pRTable) {
STColumn
*
pCol
=
schemaColAt
(
pTable
->
tagSchema
,
DEFAULT_TAG_INDEX_COLUMN
);
if
(
pCol
->
type
==
TSDB_DATA_TYPE_JSON
){
assert
(
pTable
->
tagSchema
->
numOfCols
==
1
);
pTable
->
jsonKeyMap
=
taosHashInit
(
8
,
taosGetDefaultHashFunction
(
TSDB_DATA_TYPE_BINARY
),
true
,
true
);
pTable
->
jsonKeyMap
=
taosHashInit
(
8
,
taosGetDefaultHashFunction
(
TSDB_DATA_TYPE_BINARY
),
true
,
HASH_ENTRY_LOCK
);
if
(
pTable
->
jsonKeyMap
==
NULL
)
{
terrno
=
TSDB_CODE_TDB_OUT_OF_MEMORY
;
tsdbFreeTable
(
pTable
);
return
NULL
;
}
}
else
{
pTable
->
pIndex
=
tSkipListCreate
(
TSDB_SUPER_TABLE_SL_LEVEL
,
colType
(
pCol
),
(
uint8_t
)(
colBytes
(
pCol
)),
NULL
,
SL_ALLOW_DUP_KEY
,
getTagIndexKey
);
...
...
src/util/src/hash.c
浏览文件 @
54060691
...
...
@@ -617,7 +617,7 @@ void taosHashCleanup(SHashObj *pHashObj) {
taosArrayDestroy
(
pHashObj
->
pMemBlock
);
memset
(
pHashObj
,
0
,
sizeof
(
SHashObj
));
free
(
pHashObj
);
t
free
(
pHashObj
);
}
// for profile only
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录