Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
taosdata
TDengine
提交
eed7ebdd
T
TDengine
项目概览
taosdata
/
TDengine
1 年多 前同步成功
通知
1185
Star
22016
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看板
提交
eed7ebdd
编写于
1月 09, 2022
作者:
wmmhello
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
[TD-12252]<feature>(connector,query,insert,other,tools,taosAdapter):deal with escape character
上级
6038b728
变更
16
隐藏空白更改
内联
并排
Showing
16 changed file
with
186 addition
and
320 deletion
+186
-320
src/client/inc/tscUtil.h
src/client/inc/tscUtil.h
+0
-2
src/client/src/tscParseInsert.c
src/client/src/tscParseInsert.c
+14
-35
src/client/src/tscParseLineProtocol.c
src/client/src/tscParseLineProtocol.c
+21
-21
src/client/src/tscParseOpenTSDB.c
src/client/src/tscParseOpenTSDB.c
+10
-10
src/client/src/tscSQLParser.c
src/client/src/tscSQLParser.c
+28
-35
src/client/src/tscSql.c
src/client/src/tscSql.c
+1
-1
src/client/src/tscUtil.c
src/client/src/tscUtil.c
+5
-93
src/common/src/tname.c
src/common/src/tname.c
+3
-3
src/common/src/tvariant.c
src/common/src/tvariant.c
+1
-1
src/inc/taosdef.h
src/inc/taosdef.h
+2
-2
src/kit/shell/src/shellCommand.c
src/kit/shell/src/shellCommand.c
+2
-2
src/kit/shell/src/shellEngine.c
src/kit/shell/src/shellEngine.c
+30
-55
src/query/src/qSqlParser.c
src/query/src/qSqlParser.c
+1
-1
src/util/inc/tutil.h
src/util/inc/tutil.h
+2
-3
src/util/src/ttokenizer.c
src/util/src/ttokenizer.c
+7
-0
src/util/src/tutil.c
src/util/src/tutil.c
+59
-56
未找到文件。
src/client/inc/tscUtil.h
浏览文件 @
eed7ebdd
...
...
@@ -258,8 +258,6 @@ void tscColumnListCopyAll(SArray* dst, const SArray* src);
void
convertQueryResult
(
SSqlRes
*
pRes
,
SQueryInfo
*
pQueryInfo
,
uint64_t
objId
,
bool
convertNchar
,
bool
convertJson
);
void
tscDequoteAndTrimToken
(
SStrToken
*
pToken
);
void
tscRmEscapeAndTrimToken
(
SStrToken
*
pToken
);
int32_t
tscValidateName
(
SStrToken
*
pToken
,
bool
escapeEnabled
,
bool
*
dbIncluded
);
void
tscIncStreamExecutionCount
(
void
*
pStream
);
...
...
src/client/src/tscParseInsert.c
浏览文件 @
eed7ebdd
...
...
@@ -481,32 +481,12 @@ int tsParseOneRow(char **str, STableDataBlocks *pDataBlocks, int16_t timePrec, i
// Remove quotation marks
if
(
TK_STRING
==
sToken
.
type
)
{
// delete escape character: \\, \', \"
char
delim
=
sToken
.
z
[
0
];
int32_t
cnt
=
0
;
int32_t
j
=
0
;
if
(
sToken
.
n
>=
TSDB_MAX_BYTES_PER_ROW
)
{
return
tscSQLSyntaxErrMsg
(
pInsertParam
->
msg
,
"too long string"
,
sToken
.
z
);
}
for
(
uint32_t
k
=
1
;
k
<
sToken
.
n
-
1
;
++
k
)
{
if
(
sToken
.
z
[
k
]
==
'\\'
||
(
sToken
.
z
[
k
]
==
delim
&&
sToken
.
z
[
k
+
1
]
==
delim
))
{
tmpTokenBuf
[
j
]
=
sToken
.
z
[
k
+
1
];
cnt
++
;
j
++
;
k
++
;
continue
;
}
tmpTokenBuf
[
j
]
=
sToken
.
z
[
k
];
j
++
;
}
tmpTokenBuf
[
j
]
=
0
;
strncpy
(
tmpTokenBuf
,
sToken
.
z
,
sToken
.
n
);
sToken
.
n
=
stringProcess
(
tmpTokenBuf
,
sToken
.
n
);
sToken
.
z
=
tmpTokenBuf
;
sToken
.
n
-=
2
+
cnt
;
}
bool
isPrimaryKey
=
(
colIndex
==
PRIMARYKEY_TIMESTAMP_COL_INDEX
);
...
...
@@ -1057,10 +1037,12 @@ static int32_t tscCheckIfCreateTable(char **sqlstr, SSqlObj *pSql, char** boundC
break
;
}
char
*
tmp
=
NULL
;
// Remove quotation marks
if
(
TK_STRING
==
sToken
.
type
)
{
sToken
.
z
++
;
sToken
.
n
-=
2
;
tmp
=
strndup
(
sToken
.
z
,
sToken
.
n
);
sToken
.
n
=
stringProcess
(
tmp
,
sToken
.
n
);
sToken
.
z
=
tmp
;
}
char
tagVal
[
TSDB_MAX_TAGS_LEN
]
=
{
0
};
...
...
@@ -1068,6 +1050,7 @@ static int32_t tscCheckIfCreateTable(char **sqlstr, SSqlObj *pSql, char** boundC
if
(
code
!=
TSDB_CODE_SUCCESS
)
{
tdDestroyKVRowBuilder
(
&
kvRowBuilder
);
tscDestroyBoundColumnInfo
(
&
spd
);
tfree
(
tmp
);
return
code
;
}
...
...
@@ -1078,18 +1061,18 @@ static int32_t tscCheckIfCreateTable(char **sqlstr, SSqlObj *pSql, char** boundC
if
(
sToken
.
n
>
TSDB_MAX_JSON_TAGS_LEN
/
TSDB_NCHAR_SIZE
){
tdDestroyKVRowBuilder
(
&
kvRowBuilder
);
tscDestroyBoundColumnInfo
(
&
spd
);
tfree
(
tmp
);
return
tscSQLSyntaxErrMsg
(
pInsertParam
->
msg
,
"json tag too long"
,
NULL
);
}
char
*
json
=
strndup
(
sToken
.
z
,
sToken
.
n
);
code
=
parseJsontoTagData
(
json
,
&
kvRowBuilder
,
pInsertParam
->
msg
,
pTagSchema
[
spd
.
boundedColumns
[
0
]].
colId
);
code
=
parseJsontoTagData
(
sToken
.
z
,
&
kvRowBuilder
,
pInsertParam
->
msg
,
pTagSchema
[
spd
.
boundedColumns
[
0
]].
colId
);
if
(
code
!=
TSDB_CODE_SUCCESS
)
{
tdDestroyKVRowBuilder
(
&
kvRowBuilder
);
tscDestroyBoundColumnInfo
(
&
spd
);
tfree
(
json
);
tfree
(
tmp
);
return
code
;
}
tfree
(
json
);
}
tfree
(
tmp
);
}
tscDestroyBoundColumnInfo
(
&
spd
);
...
...
@@ -1246,12 +1229,8 @@ static int32_t parseBoundColumns(SInsertStatementParam *pInsertParam, SParsedDat
strncpy
(
tmpTokenBuf
,
sToken
.
z
,
sToken
.
n
);
sToken
.
z
=
tmpTokenBuf
;
if
(
TK_STRING
==
sToken
.
type
)
{
tscDequoteAndTrimToken
(
&
sToken
);
}
if
(
TK_ID
==
sToken
.
type
)
{
tscRmEscapeAndTrimToken
(
&
sToken
);
if
(
TK_STRING
==
sToken
.
type
||
TK_ID
==
sToken
.
type
)
{
sToken
.
n
=
stringProcess
(
sToken
.
z
,
sToken
.
n
);
}
if
(
sToken
.
type
==
TK_RP
)
{
...
...
@@ -1371,7 +1350,7 @@ _clean:
static
int32_t
getFileFullPath
(
SStrToken
*
pToken
,
char
*
output
)
{
char
path
[
PATH_MAX
]
=
{
0
};
strncpy
(
path
,
pToken
->
z
,
pToken
->
n
);
str
dequote
(
path
);
str
ingProcess
(
path
,
strlen
(
path
)
);
wordexp_t
full_path
;
if
(
wordexp
(
path
,
&
full_path
,
0
)
!=
0
)
{
...
...
src/client/src/tscParseLineProtocol.c
浏览文件 @
eed7ebdd
...
...
@@ -20,7 +20,7 @@
#include "tscParseLine.h"
typedef
struct
{
char
sTableName
[
TSDB_TABLE_NAME_LEN
+
TS_
ESCAP
E_CHAR_SIZE
];
char
sTableName
[
TSDB_TABLE_NAME_LEN
+
TS_
BACKQUOT
E_CHAR_SIZE
];
SHashObj
*
tagHash
;
SHashObj
*
fieldHash
;
SArray
*
tags
;
//SArray<SSchema>
...
...
@@ -68,13 +68,13 @@ typedef enum {
}
ESchemaAction
;
typedef
struct
{
char
sTableName
[
TSDB_TABLE_NAME_LEN
+
TS_
ESCAP
E_CHAR_SIZE
];
char
sTableName
[
TSDB_TABLE_NAME_LEN
+
TS_
BACKQUOT
E_CHAR_SIZE
];
SArray
*
tags
;
//SArray<SSchema>
SArray
*
fields
;
//SArray<SSchema>
}
SCreateSTableActionInfo
;
typedef
struct
{
char
sTableName
[
TSDB_TABLE_NAME_LEN
+
TS_
ESCAP
E_CHAR_SIZE
];
char
sTableName
[
TSDB_TABLE_NAME_LEN
+
TS_
BACKQUOT
E_CHAR_SIZE
];
SSchema
*
field
;
}
SAlterSTableActionInfo
;
...
...
@@ -161,14 +161,14 @@ static int32_t getSmlMd5ChildTableName(TAOS_SML_DATA_POINT* point, char* tableNa
}
SStringBuilder
sb
;
memset
(
&
sb
,
0
,
sizeof
(
sb
));
char
sTableName
[
TSDB_TABLE_NAME_LEN
+
TS_
ESCAP
E_CHAR_SIZE
]
=
{
0
};
char
sTableName
[
TSDB_TABLE_NAME_LEN
+
TS_
BACKQUOT
E_CHAR_SIZE
]
=
{
0
};
strncpy
(
sTableName
,
point
->
stableName
,
strlen
(
point
->
stableName
));
//strtolower(sTableName, point->stableName);
taosStringBuilderAppendString
(
&
sb
,
sTableName
);
for
(
int
j
=
0
;
j
<
point
->
tagNum
;
++
j
)
{
taosStringBuilderAppendChar
(
&
sb
,
','
);
TAOS_SML_KV
*
tagKv
=
point
->
tags
+
j
;
char
tagName
[
TSDB_COL_NAME_LEN
+
TS_
ESCAP
E_CHAR_SIZE
]
=
{
0
};
char
tagName
[
TSDB_COL_NAME_LEN
+
TS_
BACKQUOT
E_CHAR_SIZE
]
=
{
0
};
strncpy
(
tagName
,
tagKv
->
key
,
strlen
(
tagKv
->
key
));
//strtolower(tagName, tagKv->key);
taosStringBuilderAppendString
(
&
sb
,
tagName
);
...
...
@@ -192,8 +192,8 @@ static int32_t getSmlMd5ChildTableName(TAOS_SML_DATA_POINT* point, char* tableNa
static
int32_t
buildSmlChildTableName
(
TAOS_SML_DATA_POINT
*
point
,
SSmlLinesInfo
*
info
)
{
tscDebug
(
"SML:0x%"
PRIx64
" taos_sml_insert build child table name"
,
info
->
id
);
char
childTableName
[
TSDB_TABLE_NAME_LEN
+
TS_
ESCAP
E_CHAR_SIZE
];
int32_t
tableNameLen
=
TSDB_TABLE_NAME_LEN
+
TS_
ESCAP
E_CHAR_SIZE
;
char
childTableName
[
TSDB_TABLE_NAME_LEN
+
TS_
BACKQUOT
E_CHAR_SIZE
];
int32_t
tableNameLen
=
TSDB_TABLE_NAME_LEN
+
TS_
BACKQUOT
E_CHAR_SIZE
;
getSmlMd5ChildTableName
(
point
,
childTableName
,
&
tableNameLen
,
info
);
point
->
childTableName
=
calloc
(
1
,
tableNameLen
+
1
);
strncpy
(
point
->
childTableName
,
childTableName
,
tableNameLen
);
...
...
@@ -251,15 +251,15 @@ static int32_t buildDataPointSchemas(TAOS_SML_DATA_POINT* points, int numPoint,
size_t
nameLen
=
strlen
(
tsSmlTagNullName
);
strncpy
(
tagNullName
,
tsSmlTagNullName
,
nameLen
);
addEscapeCharToString
(
tagNullName
,
(
int32_t
)
nameLen
);
size_t
*
pTagNullIdx
=
taosHashGet
(
pStableSchema
->
tagHash
,
tagNullName
,
nameLen
+
TS_
ESCAP
E_CHAR_SIZE
);
size_t
*
pTagNullIdx
=
taosHashGet
(
pStableSchema
->
tagHash
,
tagNullName
,
nameLen
+
TS_
BACKQUOT
E_CHAR_SIZE
);
if
(
!
pTagNullIdx
)
{
SSchema
tagNull
=
{
0
};
tagNull
.
type
=
TSDB_DATA_TYPE_NCHAR
;
tagNull
.
bytes
=
TSDB_NCHAR_SIZE
+
VARSTR_HEADER_SIZE
;
strncpy
(
tagNull
.
name
,
tagNullName
,
nameLen
+
TS_
ESCAP
E_CHAR_SIZE
);
strncpy
(
tagNull
.
name
,
tagNullName
,
nameLen
+
TS_
BACKQUOT
E_CHAR_SIZE
);
taosArrayPush
(
pStableSchema
->
tags
,
&
tagNull
);
size_t
tagNullIdx
=
taosArrayGetSize
(
pStableSchema
->
tags
)
-
1
;
taosHashPut
(
pStableSchema
->
tagHash
,
tagNull
.
name
,
nameLen
+
TS_
ESCAP
E_CHAR_SIZE
,
&
tagNullIdx
,
sizeof
(
tagNullIdx
));
taosHashPut
(
pStableSchema
->
tagHash
,
tagNull
.
name
,
nameLen
+
TS_
BACKQUOT
E_CHAR_SIZE
,
&
tagNullIdx
,
sizeof
(
tagNullIdx
));
}
}
...
...
@@ -295,7 +295,7 @@ static int32_t buildDataPointSchemas(TAOS_SML_DATA_POINT* points, int numPoint,
static
int32_t
generateSchemaAction
(
SSchema
*
pointColField
,
SHashObj
*
dbAttrHash
,
SArray
*
dbAttrArray
,
bool
isTag
,
char
sTableName
[],
SSchemaAction
*
action
,
bool
*
actionNeeded
,
SSmlLinesInfo
*
info
)
{
char
fieldName
[
TSDB_COL_NAME_LEN
+
TS_
ESCAP
E_CHAR_SIZE
]
=
{
0
};
char
fieldName
[
TSDB_COL_NAME_LEN
+
TS_
BACKQUOT
E_CHAR_SIZE
]
=
{
0
};
strcpy
(
fieldName
,
pointColField
->
name
);
size_t
*
pDbIndex
=
taosHashGet
(
dbAttrHash
,
fieldName
,
strlen
(
fieldName
));
...
...
@@ -315,7 +315,7 @@ static int32_t generateSchemaAction(SSchema* pointColField, SHashObj* dbAttrHash
action
->
action
=
SCHEMA_ACTION_CHANGE_COLUMN_SIZE
;
}
memset
(
&
action
->
alterSTable
,
0
,
sizeof
(
SAlterSTableActionInfo
));
memcpy
(
action
->
alterSTable
.
sTableName
,
sTableName
,
TSDB_TABLE_NAME_LEN
+
TS_
ESCAP
E_CHAR_SIZE
);
memcpy
(
action
->
alterSTable
.
sTableName
,
sTableName
,
TSDB_TABLE_NAME_LEN
+
TS_
BACKQUOT
E_CHAR_SIZE
);
action
->
alterSTable
.
field
=
pointColField
;
*
actionNeeded
=
true
;
}
...
...
@@ -326,7 +326,7 @@ static int32_t generateSchemaAction(SSchema* pointColField, SHashObj* dbAttrHash
action
->
action
=
SCHEMA_ACTION_ADD_COLUMN
;
}
memset
(
&
action
->
alterSTable
,
0
,
sizeof
(
SAlterSTableActionInfo
));
memcpy
(
action
->
alterSTable
.
sTableName
,
sTableName
,
TSDB_TABLE_NAME_LEN
+
TS_
ESCAP
E_CHAR_SIZE
);
memcpy
(
action
->
alterSTable
.
sTableName
,
sTableName
,
TSDB_TABLE_NAME_LEN
+
TS_
BACKQUOT
E_CHAR_SIZE
);
action
->
alterSTable
.
field
=
pointColField
;
*
actionNeeded
=
true
;
}
...
...
@@ -572,7 +572,7 @@ static int32_t getSuperTableMetaFromLocalCache(TAOS* taos, char* tableName, STab
pSql
->
fp
=
NULL
;
registerSqlObj
(
pSql
);
char
tableNameBuf
[
TSDB_TABLE_NAME_LEN
+
TS_
ESCAP
E_CHAR_SIZE
]
=
{
0
};
char
tableNameBuf
[
TSDB_TABLE_NAME_LEN
+
TS_
BACKQUOT
E_CHAR_SIZE
]
=
{
0
};
memcpy
(
tableNameBuf
,
tableName
,
strlen
(
tableName
));
SStrToken
tableToken
=
{.
z
=
tableNameBuf
,
.
n
=
(
uint32_t
)
strlen
(
tableName
),
.
type
=
TK_ID
};
tGetToken
(
tableNameBuf
,
&
tableToken
.
type
);
...
...
@@ -689,7 +689,7 @@ static int32_t modifyDBSchemas(TAOS* taos, SArray* stableSchemas, SSmlLinesInfo*
SSchemaAction
schemaAction
=
{
0
};
schemaAction
.
action
=
SCHEMA_ACTION_CREATE_STABLE
;
memset
(
&
schemaAction
.
createSTable
,
0
,
sizeof
(
SCreateSTableActionInfo
));
memcpy
(
schemaAction
.
createSTable
.
sTableName
,
pointSchema
->
sTableName
,
TSDB_TABLE_NAME_LEN
+
TS_
ESCAP
E_CHAR_SIZE
);
memcpy
(
schemaAction
.
createSTable
.
sTableName
,
pointSchema
->
sTableName
,
TSDB_TABLE_NAME_LEN
+
TS_
BACKQUOT
E_CHAR_SIZE
);
schemaAction
.
createSTable
.
tags
=
pointSchema
->
tags
;
schemaAction
.
createSTable
.
fields
=
pointSchema
->
fields
;
applySchemaAction
(
taos
,
&
schemaAction
,
info
);
...
...
@@ -726,7 +726,7 @@ static int32_t modifyDBSchemas(TAOS* taos, SArray* stableSchemas, SSmlLinesInfo*
SSchema
*
pointColTs
=
taosArrayGet
(
pointSchema
->
fields
,
0
);
SSchema
*
dbColTs
=
taosArrayGet
(
dbSchema
.
fields
,
0
);
memcpy
(
pointColTs
->
name
,
dbColTs
->
name
,
TSDB_COL_NAME_LEN
+
TS_
ESCAP
E_CHAR_SIZE
);
memcpy
(
pointColTs
->
name
,
dbColTs
->
name
,
TSDB_COL_NAME_LEN
+
TS_
BACKQUOT
E_CHAR_SIZE
);
for
(
int
j
=
1
;
j
<
pointFieldSize
;
++
j
)
{
SSchema
*
pointCol
=
taosArrayGet
(
pointSchema
->
fields
,
j
);
...
...
@@ -1398,7 +1398,7 @@ char* addEscapeCharToString(char *str, int32_t len) {
return
NULL
;
}
memmove
(
str
+
1
,
str
,
len
);
str
[
0
]
=
str
[
len
+
1
]
=
TS_
ESCAP
E_CHAR
;
str
[
0
]
=
str
[
len
+
1
]
=
TS_
BACKQUOT
E_CHAR
;
str
[
len
+
2
]
=
'\0'
;
return
str
;
}
...
...
@@ -2129,7 +2129,7 @@ static int32_t parseSmlKey(TAOS_SML_KV *pKV, const char **index, SHashObj *pHash
return
TSDB_CODE_TSC_LINE_SYNTAX_ERROR
;
}
pKV
->
key
=
calloc
(
len
+
TS_
ESCAP
E_CHAR_SIZE
+
1
,
1
);
pKV
->
key
=
calloc
(
len
+
TS_
BACKQUOT
E_CHAR_SIZE
+
1
,
1
);
memcpy
(
pKV
->
key
,
key
,
len
+
1
);
addEscapeCharToString
(
pKV
->
key
,
len
);
tscDebug
(
"SML:0x%"
PRIx64
" Key:%s|len:%d"
,
info
->
id
,
pKV
->
key
,
len
);
...
...
@@ -2227,7 +2227,7 @@ static int32_t parseSmlMeasurement(TAOS_SML_DATA_POINT *pSml, const char **index
const
char
*
cur
=
*
index
;
int16_t
len
=
0
;
pSml
->
stableName
=
calloc
(
TSDB_TABLE_NAME_LEN
+
TS_
ESCAP
E_CHAR_SIZE
,
1
);
pSml
->
stableName
=
calloc
(
TSDB_TABLE_NAME_LEN
+
TS_
BACKQUOT
E_CHAR_SIZE
,
1
);
if
(
pSml
->
stableName
==
NULL
){
return
TSDB_CODE_TSC_OUT_OF_MEMORY
;
}
...
...
@@ -2313,7 +2313,7 @@ static int32_t parseSmlKvPairs(TAOS_SML_KV **pKVs, int *num_kvs,
}
size_t
childTableNameLen
=
strlen
(
tsSmlChildTableName
);
char
childTableName
[
TSDB_TABLE_NAME_LEN
+
TS_
ESCAP
E_CHAR_SIZE
]
=
{
0
};
char
childTableName
[
TSDB_TABLE_NAME_LEN
+
TS_
BACKQUOT
E_CHAR_SIZE
]
=
{
0
};
if
(
childTableNameLen
!=
0
)
{
memcpy
(
childTableName
,
tsSmlChildTableName
,
childTableNameLen
);
addEscapeCharToString
(
childTableName
,
(
int32_t
)(
childTableNameLen
));
...
...
@@ -2332,7 +2332,7 @@ static int32_t parseSmlKvPairs(TAOS_SML_KV **pKVs, int *num_kvs,
}
if
(
!
isField
&&
childTableNameLen
!=
0
&&
strcasecmp
(
pkv
->
key
,
childTableName
)
==
0
)
{
smlData
->
childTableName
=
malloc
(
pkv
->
length
+
TS_
ESCAP
E_CHAR_SIZE
+
1
);
smlData
->
childTableName
=
malloc
(
pkv
->
length
+
TS_
BACKQUOT
E_CHAR_SIZE
+
1
);
memcpy
(
smlData
->
childTableName
,
pkv
->
value
,
pkv
->
length
);
addEscapeCharToString
(
smlData
->
childTableName
,
(
int32_t
)
pkv
->
length
);
free
(
pkv
->
key
);
...
...
src/client/src/tscParseOpenTSDB.c
浏览文件 @
eed7ebdd
...
...
@@ -37,7 +37,7 @@ static int32_t parseTelnetMetric(TAOS_SML_DATA_POINT *pSml, const char **index,
const
char
*
cur
=
*
index
;
uint16_t
len
=
0
;
pSml
->
stableName
=
tcalloc
(
TSDB_TABLE_NAME_LEN
+
TS_
ESCAP
E_CHAR_SIZE
,
1
);
pSml
->
stableName
=
tcalloc
(
TSDB_TABLE_NAME_LEN
+
TS_
BACKQUOT
E_CHAR_SIZE
,
1
);
if
(
pSml
->
stableName
==
NULL
)
{
return
TSDB_CODE_TSC_OUT_OF_MEMORY
;
}
...
...
@@ -125,7 +125,7 @@ static int32_t parseTelnetTimeStamp(TAOS_SML_KV **pTS, int *num_kvs, const char
}
tfree
(
value
);
(
*
pTS
)
->
key
=
tcalloc
(
sizeof
(
key
)
+
TS_
ESCAP
E_CHAR_SIZE
,
1
);
(
*
pTS
)
->
key
=
tcalloc
(
sizeof
(
key
)
+
TS_
BACKQUOT
E_CHAR_SIZE
,
1
);
memcpy
((
*
pTS
)
->
key
,
key
,
sizeof
(
key
));
addEscapeCharToString
((
*
pTS
)
->
key
,
(
int32_t
)
strlen
(
key
));
...
...
@@ -196,7 +196,7 @@ static int32_t parseTelnetMetricValue(TAOS_SML_KV **pKVs, int *num_kvs, const ch
}
tfree
(
value
);
pVal
->
key
=
tcalloc
(
sizeof
(
key
)
+
TS_
ESCAP
E_CHAR_SIZE
,
1
);
pVal
->
key
=
tcalloc
(
sizeof
(
key
)
+
TS_
BACKQUOT
E_CHAR_SIZE
,
1
);
memcpy
(
pVal
->
key
,
key
,
sizeof
(
key
));
addEscapeCharToString
(
pVal
->
key
,
(
int32_t
)
strlen
(
pVal
->
key
));
*
num_kvs
+=
1
;
...
...
@@ -240,7 +240,7 @@ static int32_t parseTelnetTagKey(TAOS_SML_KV *pKV, const char **index, SHashObj
return
TSDB_CODE_TSC_DUP_TAG_NAMES
;
}
pKV
->
key
=
tcalloc
(
len
+
TS_
ESCAP
E_CHAR_SIZE
+
1
,
1
);
pKV
->
key
=
tcalloc
(
len
+
TS_
BACKQUOT
E_CHAR_SIZE
+
1
,
1
);
memcpy
(
pKV
->
key
,
key
,
len
+
1
);
addEscapeCharToString
(
pKV
->
key
,
len
);
//tscDebug("OTD:0x%"PRIx64" Key:%s|len:%d", info->id, pKV->key, len);
...
...
@@ -307,7 +307,7 @@ static int32_t parseTelnetTagKvs(TAOS_SML_KV **pKVs, int *num_kvs,
pkv
=
*
pKVs
;
size_t
childTableNameLen
=
strlen
(
tsSmlChildTableName
);
char
childTbName
[
TSDB_TABLE_NAME_LEN
+
TS_
ESCAP
E_CHAR_SIZE
]
=
{
0
};
char
childTbName
[
TSDB_TABLE_NAME_LEN
+
TS_
BACKQUOT
E_CHAR_SIZE
]
=
{
0
};
if
(
childTableNameLen
!=
0
)
{
memcpy
(
childTbName
,
tsSmlChildTableName
,
childTableNameLen
);
addEscapeCharToString
(
childTbName
,
(
int32_t
)(
childTableNameLen
));
...
...
@@ -324,7 +324,7 @@ static int32_t parseTelnetTagKvs(TAOS_SML_KV **pKVs, int *num_kvs,
return
ret
;
}
if
(
childTableNameLen
!=
0
&&
strcasecmp
(
pkv
->
key
,
childTbName
)
==
0
)
{
*
childTableName
=
tcalloc
(
pkv
->
length
+
TS_
ESCAP
E_CHAR_SIZE
+
1
,
1
);
*
childTableName
=
tcalloc
(
pkv
->
length
+
TS_
BACKQUOT
E_CHAR_SIZE
+
1
,
1
);
memcpy
(
*
childTableName
,
pkv
->
value
,
pkv
->
length
);
(
*
childTableName
)[
pkv
->
length
]
=
'\0'
;
addEscapeCharToString
(
*
childTableName
,
pkv
->
length
);
...
...
@@ -500,7 +500,7 @@ static int32_t parseMetricFromJSON(cJSON *root, TAOS_SML_DATA_POINT* pSml, SSmlL
return
TSDB_CODE_TSC_INVALID_TABLE_ID_LENGTH
;
}
pSml
->
stableName
=
tcalloc
(
stableLen
+
TS_
ESCAP
E_CHAR_SIZE
+
1
,
sizeof
(
char
));
pSml
->
stableName
=
tcalloc
(
stableLen
+
TS_
BACKQUOT
E_CHAR_SIZE
+
1
,
sizeof
(
char
));
if
(
pSml
->
stableName
==
NULL
){
return
TSDB_CODE_TSC_OUT_OF_MEMORY
;
}
...
...
@@ -879,7 +879,7 @@ static int32_t parseMetricValueFromJSON(cJSON *root, TAOS_SML_KV **pKVs, int *nu
return
ret
;
}
pVal
->
key
=
tcalloc
(
sizeof
(
key
)
+
TS_
ESCAP
E_CHAR_SIZE
,
1
);
pVal
->
key
=
tcalloc
(
sizeof
(
key
)
+
TS_
BACKQUOT
E_CHAR_SIZE
,
1
);
memcpy
(
pVal
->
key
,
key
,
sizeof
(
key
));
addEscapeCharToString
(
pVal
->
key
,
(
int32_t
)
strlen
(
pVal
->
key
));
...
...
@@ -910,7 +910,7 @@ static int32_t parseTagsFromJSON(cJSON *root, TAOS_SML_KV **pKVs, int *num_kvs,
return
TSDB_CODE_TSC_INVALID_JSON
;
}
size_t
idLen
=
strlen
(
id
->
valuestring
);
*
childTableName
=
tcalloc
(
idLen
+
TS_
ESCAP
E_CHAR_SIZE
+
1
,
sizeof
(
char
));
*
childTableName
=
tcalloc
(
idLen
+
TS_
BACKQUOT
E_CHAR_SIZE
+
1
,
sizeof
(
char
));
memcpy
(
*
childTableName
,
id
->
valuestring
,
idLen
);
addEscapeCharToString
(
*
childTableName
,
(
int32_t
)
idLen
);
...
...
@@ -948,7 +948,7 @@ static int32_t parseTagsFromJSON(cJSON *root, TAOS_SML_KV **pKVs, int *num_kvs,
tscError
(
"OTD:0x%"
PRIx64
" Tag key cannot exceeds %d characters in JSON"
,
info
->
id
,
TSDB_COL_NAME_LEN
-
1
);
return
TSDB_CODE_TSC_INVALID_COLUMN_LENGTH
;
}
pkv
->
key
=
tcalloc
(
keyLen
+
TS_
ESCAP
E_CHAR_SIZE
+
1
,
sizeof
(
char
));
pkv
->
key
=
tcalloc
(
keyLen
+
TS_
BACKQUOT
E_CHAR_SIZE
+
1
,
sizeof
(
char
));
strncpy
(
pkv
->
key
,
tag
->
string
,
keyLen
);
addEscapeCharToString
(
pkv
->
key
,
(
int32_t
)
keyLen
);
//value
...
...
src/client/src/tscSQLParser.c
浏览文件 @
eed7ebdd
...
...
@@ -322,7 +322,7 @@ static int32_t invalidOperationMsg(char* dstBuffer, const char* errMsg) {
static
int
convertTimestampStrToInt64
(
tVariant
*
pVar
,
int32_t
precision
)
{
int64_t
time
=
0
;
str
dequote
(
pVar
->
pz
);
str
ingProcess
(
pVar
->
pz
,
pVar
->
nLen
);
char
*
seg
=
strnchr
(
pVar
->
pz
,
'-'
,
pVar
->
nLen
,
false
);
if
(
seg
!=
NULL
)
{
...
...
@@ -359,7 +359,7 @@ static int32_t handlePassword(SSqlCmd* pCmd, SStrToken* pPwd) {
return
invalidOperationMsg
(
tscGetErrorMsgPayload
(
pCmd
),
msg3
);
}
str
dequote
(
pPwd
->
z
);
str
ingProcess
(
pPwd
->
z
,
pPwd
->
n
);
pPwd
->
n
=
(
uint32_t
)
strtrim
(
pPwd
->
z
);
// trim space before and after passwords
if
(
pPwd
->
n
<=
0
)
{
...
...
@@ -477,7 +477,7 @@ int32_t handleUserDefinedFunc(SSqlObj* pSql, struct SSqlInfo* pInfo) {
if
(
validateColumnName
(
createInfo
->
name
.
z
)
!=
TSDB_CODE_SUCCESS
)
{
return
invalidOperationMsg
(
tscGetErrorMsgPayload
(
pCmd
),
msg1
);
}
str
dequote
(
createInfo
->
name
.
z
);
str
ingProcess
(
createInfo
->
name
.
z
,
createInfo
->
name
.
n
);
if
(
strlen
(
createInfo
->
name
.
z
)
>=
TSDB_FUNC_NAME_LEN
)
{
return
invalidOperationMsg
(
tscGetErrorMsgPayload
(
pCmd
),
msg1
);
...
...
@@ -485,7 +485,7 @@ int32_t handleUserDefinedFunc(SSqlObj* pSql, struct SSqlInfo* pInfo) {
createInfo
->
path
.
z
[
createInfo
->
path
.
n
]
=
0
;
str
dequote
(
createInfo
->
path
.
z
);
str
ingProcess
(
createInfo
->
path
.
z
,
createInfo
->
path
.
n
);
if
(
strlen
(
createInfo
->
path
.
z
)
>=
PATH_MAX
)
{
return
invalidOperationMsg
(
tscGetErrorMsgPayload
(
pCmd
),
msg2
);
...
...
@@ -543,7 +543,7 @@ int32_t handleUserDefinedFunc(SSqlObj* pSql, struct SSqlInfo* pInfo) {
t0
->
z
[
t0
->
n
]
=
0
;
str
dequote
(
t0
->
z
);
str
ingProcess
(
t0
->
z
,
t0
->
n
);
if
(
strlen
(
t0
->
z
)
>=
TSDB_FUNC_NAME_LEN
)
{
return
invalidOperationMsg
(
tscGetErrorMsgPayload
(
pCmd
),
msg1
);
...
...
@@ -628,7 +628,7 @@ int32_t tscValidateSqlInfo(SSqlObj* pSql, struct SSqlInfo* pInfo) {
}
}
else
if
(
pInfo
->
type
==
TSDB_SQL_DROP_DNODE
)
{
if
(
pzName
->
type
==
TK_STRING
)
{
pzName
->
n
=
str
dequote
(
pzName
->
z
);
pzName
->
n
=
str
ingProcess
(
pzName
->
z
,
pzName
->
n
);
}
strncpy
(
pCmd
->
payload
,
pzName
->
z
,
pzName
->
n
);
}
else
{
// drop user/account
...
...
@@ -718,7 +718,7 @@ int32_t tscValidateSqlInfo(SSqlObj* pSql, struct SSqlInfo* pInfo) {
SStrToken
*
id
=
taosArrayGet
(
pInfo
->
pMiscInfo
->
a
,
0
);
if
(
id
->
type
==
TK_STRING
)
{
id
->
n
=
str
dequote
(
id
->
z
);
id
->
n
=
str
ingProcess
(
id
->
z
,
id
->
n
);
}
break
;
}
...
...
@@ -834,7 +834,7 @@ int32_t tscValidateSqlInfo(SSqlObj* pSql, struct SSqlInfo* pInfo) {
SStrToken
*
t0
=
taosArrayGet
(
pMiscInfo
->
a
,
0
);
SStrToken
*
t1
=
taosArrayGet
(
pMiscInfo
->
a
,
1
);
t0
->
n
=
str
dequote
(
t0
->
z
);
t0
->
n
=
str
ingProcess
(
t0
->
z
,
t0
->
n
);
strncpy
(
pCfg
->
ep
,
t0
->
z
,
t0
->
n
);
if
(
validateEp
(
pCfg
->
ep
)
!=
TSDB_CODE_SUCCESS
)
{
...
...
@@ -3435,7 +3435,7 @@ static int16_t doGetColumnIndex(SQueryInfo* pQueryInfo, int32_t index, SStrToken
pToken
->
z
=
tmpTokenBuf
;
if
(
pToken
->
type
==
TK_ID
)
{
tscRmEscapeAndTrimToken
(
pToke
n
);
pToken
->
n
=
stringProcess
(
pToken
->
z
,
pToken
->
n
);
}
for
(
int16_t
i
=
0
;
i
<
numOfCols
;
++
i
)
{
...
...
@@ -3596,11 +3596,11 @@ int32_t setShowInfo(SSqlObj* pSql, struct SSqlInfo* pInfo) {
// show table/stable like 'xxxx', set the like pattern for show tables
SStrToken
*
pPattern
=
&
pShowInfo
->
pattern
;
if
(
pPattern
->
type
!=
0
)
{
if
(
pPattern
->
type
==
TK_ID
&&
pPattern
->
z
[
0
]
==
TS_
ESCAP
E_CHAR
)
{
if
(
pPattern
->
type
==
TK_ID
&&
pPattern
->
z
[
0
]
==
TS_
BACKQUOT
E_CHAR
)
{
return
invalidOperationMsg
(
tscGetErrorMsgPayload
(
pCmd
),
msg7
);
}
pPattern
->
n
=
str
dequote
(
pPattern
->
z
);
pPattern
->
n
=
str
ingProcess
(
pPattern
->
z
,
pPattern
->
n
);
if
(
pPattern
->
n
<=
0
)
{
return
invalidOperationMsg
(
tscGetErrorMsgPayload
(
pCmd
),
msg6
);
...
...
@@ -3618,7 +3618,7 @@ int32_t setShowInfo(SSqlObj* pSql, struct SSqlInfo* pInfo) {
}
if
(
pShowInfo
->
prefix
.
type
==
TK_STRING
)
{
pShowInfo
->
prefix
.
n
=
str
dequote
(
pShowInfo
->
prefix
.
z
);
pShowInfo
->
prefix
.
n
=
str
ingProcess
(
pShowInfo
->
prefix
.
z
,
pShowInfo
->
prefix
.
n
);
}
}
return
TSDB_CODE_SUCCESS
;
...
...
@@ -4932,7 +4932,7 @@ static int32_t validateNullExpr(tSqlExpr* pExpr, STableMeta* pTableMeta, int32_t
}
char
*
v
=
strndup
(
pRight
->
exprToken
.
z
,
pRight
->
exprToken
.
n
);
int32_t
len
=
str
Rmquote
(
v
,
pRight
->
exprToken
.
n
);
int32_t
len
=
str
ingProcess
(
v
,
pRight
->
exprToken
.
n
);
if
(
len
>
0
)
{
uint32_t
type
=
0
;
tGetToken
(
v
,
&
type
);
...
...
@@ -6059,7 +6059,7 @@ int32_t getTimeRange(STimeWindow* win, tSqlExpr* pRight, int32_t optr, int16_t t
int64_t
val
=
0
;
bool
parsed
=
false
;
if
(
pRight
->
value
.
nType
==
TSDB_DATA_TYPE_BINARY
)
{
pRight
->
value
.
nLen
=
str
dequote
(
pRight
->
value
.
pz
);
pRight
->
value
.
nLen
=
str
ingProcess
(
pRight
->
value
.
pz
,
pRight
->
value
.
nLen
);
char
*
seg
=
strnchr
(
pRight
->
value
.
pz
,
'-'
,
pRight
->
value
.
nLen
,
false
);
if
(
seg
!=
NULL
)
{
...
...
@@ -7015,7 +7015,7 @@ int32_t setAlterTableInfo(SSqlObj* pSql, struct SSqlInfo* pInfo) {
//handle Escape character backstick
bool
inEscape
=
false
;
if
(
name
.
z
[
0
]
==
TS_
ESCAPE_CHAR
&&
name
.
z
[
name
.
n
-
1
]
==
TS_ESCAP
E_CHAR
)
{
if
(
name
.
z
[
0
]
==
TS_
BACKQUOTE_CHAR
&&
name
.
z
[
name
.
n
-
1
]
==
TS_BACKQUOT
E_CHAR
)
{
inEscape
=
true
;
name
.
type
=
TK_ID
;
}
...
...
@@ -7034,7 +7034,7 @@ int32_t setAlterTableInfo(SSqlObj* pSql, struct SSqlInfo* pInfo) {
int32_t
nameLen
=
pItem
->
pVar
.
nLen
;
if
(
inEscape
)
{
memmove
(
name1
,
name1
+
1
,
nameLen
);
name1
[
nameLen
-
TS_
ESCAP
E_CHAR_SIZE
]
=
'\0'
;
name1
[
nameLen
-
TS_
BACKQUOT
E_CHAR_SIZE
]
=
'\0'
;
}
TAOS_FIELD
f
=
tscCreateField
(
TSDB_DATA_TYPE_INT
,
name1
,
tDataTypes
[
TSDB_DATA_TYPE_INT
].
bytes
);
...
...
@@ -7055,7 +7055,7 @@ int32_t setAlterTableInfo(SSqlObj* pSql, struct SSqlInfo* pInfo) {
//handle Escape character backstick
bool
inEscape
=
false
;
if
(
name
.
z
[
0
]
==
TS_
ESCAPE_CHAR
&&
name
.
z
[
name
.
n
-
1
]
==
TS_ESCAP
E_CHAR
)
{
if
(
name
.
z
[
0
]
==
TS_
BACKQUOTE_CHAR
&&
name
.
z
[
name
.
n
-
1
]
==
TS_BACKQUOT
E_CHAR
)
{
inEscape
=
true
;
name
.
type
=
TK_ID
;
}
...
...
@@ -7096,8 +7096,8 @@ int32_t setAlterTableInfo(SSqlObj* pSql, struct SSqlInfo* pInfo) {
if
(
inEscape
)
{
memmove
(
name
.
z
,
name
.
z
+
1
,
name
.
n
);
name
.
z
[
name
.
n
-
TS_
ESCAP
E_CHAR_SIZE
]
=
'\0'
;
name
.
n
-=
TS_
ESCAP
E_CHAR_SIZE
;
name
.
z
[
name
.
n
-
TS_
BACKQUOT
E_CHAR_SIZE
]
=
'\0'
;
name
.
n
-=
TS_
BACKQUOT
E_CHAR_SIZE
;
}
TAOS_FIELD
f
=
tscCreateField
(
pColSchema
->
type
,
name
.
z
,
pItem
->
bytes
);
...
...
@@ -7115,10 +7115,10 @@ int32_t setAlterTableInfo(SSqlObj* pSql, struct SSqlInfo* pInfo) {
SColumnIndex
columnIndex
=
COLUMN_INDEX_INITIALIZER
;
SStrToken
name
=
{.
type
=
TK_STRING
,
.
z
=
pItem
->
name
,
.
n
=
(
uint32_t
)
strlen
(
pItem
->
name
)};
//handle Escape character backstick
if
(
name
.
z
[
0
]
==
TS_
ESCAPE_CHAR
&&
name
.
z
[
name
.
n
-
1
]
==
TS_ESCAP
E_CHAR
)
{
if
(
name
.
z
[
0
]
==
TS_
BACKQUOTE_CHAR
&&
name
.
z
[
name
.
n
-
1
]
==
TS_BACKQUOT
E_CHAR
)
{
memmove
(
name
.
z
,
name
.
z
+
1
,
name
.
n
);
name
.
z
[
name
.
n
-
TS_
ESCAP
E_CHAR_SIZE
]
=
'\0'
;
name
.
n
-=
TS_
ESCAP
E_CHAR_SIZE
;
name
.
z
[
name
.
n
-
TS_
BACKQUOT
E_CHAR_SIZE
]
=
'\0'
;
name
.
n
-=
TS_
BACKQUOT
E_CHAR_SIZE
;
}
if
(
getColumnIndexByName
(
&
name
,
pQueryInfo
,
&
columnIndex
,
tscGetErrorMsgPayload
(
pCmd
))
!=
TSDB_CODE_SUCCESS
)
{
return
invalidOperationMsg
(
pMsg
,
msg17
);
...
...
@@ -7315,7 +7315,7 @@ int32_t validateDNodeConfig(SMiscInfo* pOptions) {
SStrToken
*
pValToken
=
taosArrayGet
(
pOptions
->
a
,
2
);
int32_t
vnodeId
=
0
;
int32_t
dnodeId
=
0
;
str
dequote
(
pValToken
->
z
);
str
ingProcess
(
pValToken
->
z
,
pValToken
->
n
);
bool
parseOk
=
taosCheckBalanceCfgOptions
(
pValToken
->
z
,
&
vnodeId
,
&
dnodeId
);
if
(
!
parseOk
)
{
return
TSDB_CODE_TSC_INVALID_OPERATION
;
// options value is invalid
...
...
@@ -7417,7 +7417,7 @@ int32_t validateColumnName(char* name) {
}
if
(
token
.
type
==
TK_STRING
)
{
strdequote
(
token
.
z
);
token
.
n
=
stringProcess
(
token
.
z
,
token
.
n
);
strntolower
(
token
.
z
,
token
.
z
,
token
.
n
);
token
.
n
=
(
uint32_t
)
strtrim
(
token
.
z
);
...
...
@@ -7428,7 +7428,7 @@ int32_t validateColumnName(char* name) {
return
validateColumnName
(
token
.
z
);
}
else
if
(
token
.
type
==
TK_ID
)
{
str
RmquoteEscape
(
name
,
token
.
n
);
str
ingProcess
(
name
,
token
.
n
);
return
TSDB_CODE_SUCCESS
;
}
else
{
if
(
isNumber
(
&
token
))
{
...
...
@@ -7579,7 +7579,7 @@ static int32_t setTimePrecision(SSqlCmd* pCmd, SCreateDbMsg* pMsg, SCreateDbInfo
SStrToken
*
pToken
=
&
pCreateDbInfo
->
precision
;
if
(
pToken
->
n
>
0
)
{
pToken
->
n
=
str
dequote
(
pToken
->
z
);
pToken
->
n
=
str
ingProcess
(
pToken
->
z
,
pToken
->
n
);
if
(
strncmp
(
pToken
->
z
,
TSDB_TIME_PRECISION_MILLI_STR
,
pToken
->
n
)
==
0
&&
strlen
(
TSDB_TIME_PRECISION_MILLI_STR
)
==
pToken
->
n
)
{
...
...
@@ -8634,12 +8634,8 @@ int32_t doCheckForCreateFromStable(SSqlObj* pSql, SSqlInfo* pInfo) {
strncpy
(
tmpTokenBuf
,
sToken
->
z
,
sToken
->
n
);
sToken
->
z
=
tmpTokenBuf
;
if
(
TK_STRING
==
sToken
->
type
)
{
tscDequoteAndTrimToken
(
sToken
);
}
if
(
TK_ID
==
sToken
->
type
)
{
tscRmEscapeAndTrimToken
(
sToken
);
if
(
TK_STRING
==
sToken
->
type
||
TK_ID
==
sToken
->
type
)
{
sToken
->
n
=
stringProcess
(
sToken
->
z
,
sToken
->
n
);
}
tVariantListItem
*
pItem
=
taosArrayGet
(
pValList
,
i
);
...
...
@@ -9578,8 +9574,6 @@ static int32_t doLoadAllTableMeta(SSqlObj* pSql, SQueryInfo* pQueryInfo, SSqlNod
return
invalidOperationMsg
(
tscGetErrorMsgPayload
(
pCmd
),
msg1
);
}
tscDequoteAndTrimToken
(
oriName
);
bool
dbIncluded
=
false
;
char
buf
[
TSDB_TABLE_FNAME_LEN
];
SStrToken
sTblToken
;
...
...
@@ -9601,7 +9595,6 @@ static int32_t doLoadAllTableMeta(SSqlObj* pSql, SQueryInfo* pQueryInfo, SSqlNod
return
invalidOperationMsg
(
tscGetErrorMsgPayload
(
pCmd
),
msg2
);
}
tscDequoteAndTrimToken
(
aliasName
);
if
(
tscValidateName
(
aliasName
,
false
,
NULL
)
!=
TSDB_CODE_SUCCESS
||
aliasName
->
n
>=
TSDB_TABLE_NAME_LEN
)
{
return
invalidOperationMsg
(
tscGetErrorMsgPayload
(
pCmd
),
msg3
);
}
...
...
src/client/src/tscSql.c
浏览文件 @
eed7ebdd
...
...
@@ -137,7 +137,7 @@ static SSqlObj *taosConnectImpl(const char *ip, const char *user, const char *pa
char
tmp
[
TSDB_DB_NAME_LEN
]
=
{
0
};
tstrncpy
(
tmp
,
db
,
sizeof
(
tmp
));
str
dequote
(
tmp
);
str
ingProcess
(
tmp
,
strlen
(
tmp
)
);
strtolower
(
pObj
->
db
,
tmp
);
}
...
...
src/client/src/tscUtil.c
浏览文件 @
eed7ebdd
...
...
@@ -2918,7 +2918,7 @@ void tscColumnListDestroy(SArray* pColumnList) {
*
*/
static
int32_t
validateQuoteToken
(
SStrToken
*
pToken
,
bool
escapeEnabled
,
bool
*
dbIncluded
)
{
tscDequoteAndTrimToken
(
pToke
n
);
pToken
->
n
=
stringProcess
(
pToken
->
z
,
pToken
->
n
);
int32_t
k
=
tGetToken
(
pToken
->
z
,
&
pToken
->
type
);
...
...
@@ -2932,94 +2932,6 @@ static int32_t validateQuoteToken(SStrToken* pToken, bool escapeEnabled, bool *d
return
TSDB_CODE_SUCCESS
;
}
void
tscDequoteAndTrimToken
(
SStrToken
*
pToken
)
{
uint32_t
first
=
0
,
last
=
pToken
->
n
;
// trim leading spaces
while
(
first
<
last
)
{
char
c
=
pToken
->
z
[
first
];
if
(
c
!=
' '
&&
c
!=
'\t'
)
{
break
;
}
first
++
;
}
// trim ending spaces
while
(
first
<
last
)
{
char
c
=
pToken
->
z
[
last
-
1
];
if
(
c
!=
' '
&&
c
!=
'\t'
)
{
break
;
}
last
--
;
}
// there are still at least two characters
if
(
first
<
last
-
1
)
{
char
c
=
pToken
->
z
[
first
];
// dequote
if
((
c
==
'\''
||
c
==
'"'
)
&&
c
==
pToken
->
z
[
last
-
1
])
{
first
++
;
last
--
;
}
}
// left shift the string and pad spaces
for
(
uint32_t
i
=
0
;
i
+
first
<
last
;
i
++
)
{
pToken
->
z
[
i
]
=
pToken
->
z
[
first
+
i
];
}
for
(
uint32_t
i
=
last
-
first
;
i
<
pToken
->
n
;
i
++
)
{
pToken
->
z
[
i
]
=
' '
;
}
// adjust token length
pToken
->
n
=
last
-
first
;
}
void
tscRmEscapeAndTrimToken
(
SStrToken
*
pToken
)
{
uint32_t
first
=
0
,
last
=
pToken
->
n
;
// trim leading spaces
while
(
first
<
last
)
{
char
c
=
pToken
->
z
[
first
];
if
(
c
!=
' '
&&
c
!=
'\t'
)
{
break
;
}
first
++
;
}
// trim ending spaces
while
(
first
<
last
)
{
char
c
=
pToken
->
z
[
last
-
1
];
if
(
c
!=
' '
&&
c
!=
'\t'
)
{
break
;
}
last
--
;
}
// there are still at least two characters
if
(
first
<
last
-
1
)
{
char
c
=
pToken
->
z
[
first
];
// dequote
if
((
c
==
'`'
)
&&
c
==
pToken
->
z
[
last
-
1
])
{
first
++
;
last
--
;
}
}
// left shift the string and pad spaces
for
(
uint32_t
i
=
0
;
i
+
first
<
last
;
i
++
)
{
pToken
->
z
[
i
]
=
pToken
->
z
[
first
+
i
];
}
for
(
uint32_t
i
=
last
-
first
;
i
<
pToken
->
n
;
i
++
)
{
pToken
->
z
[
i
]
=
' '
;
}
// adjust token length
pToken
->
n
=
last
-
first
;
}
int32_t
tscValidateName
(
SStrToken
*
pToken
,
bool
escapeEnabled
,
bool
*
dbIncluded
)
{
if
(
pToken
==
NULL
||
pToken
->
z
==
NULL
||
(
pToken
->
type
!=
TK_STRING
&&
pToken
->
type
!=
TK_ID
))
{
...
...
@@ -3027,7 +2939,7 @@ int32_t tscValidateName(SStrToken* pToken, bool escapeEnabled, bool *dbIncluded)
}
if
((
!
escapeEnabled
)
&&
pToken
->
type
==
TK_ID
)
{
if
(
pToken
->
z
[
0
]
==
TS_
ESCAP
E_CHAR
)
{
if
(
pToken
->
z
[
0
]
==
TS_
BACKQUOT
E_CHAR
)
{
return
TSDB_CODE_TSC_INVALID_OPERATION
;
}
}
...
...
@@ -3045,7 +2957,7 @@ int32_t tscValidateName(SStrToken* pToken, bool escapeEnabled, bool *dbIncluded)
if
(
pToken
->
type
==
TK_STRING
)
{
tscDequoteAndTrimToken
(
pToke
n
);
pToken
->
n
=
stringProcess
(
pToken
->
z
,
pToken
->
n
);
// tscStrToLower(pToken->z, pToken->n);
strntolower
(
pToken
->
z
,
pToken
->
z
,
pToken
->
n
);
//pToken->n = (uint32_t)strtrim(pToken->z);
...
...
@@ -3065,7 +2977,7 @@ int32_t tscValidateName(SStrToken* pToken, bool escapeEnabled, bool *dbIncluded)
return
tscValidateName
(
pToken
,
escapeEnabled
,
NULL
);
}
}
else
if
(
pToken
->
type
==
TK_ID
)
{
tscRmEscapeAndTrimToken
(
pToke
n
);
pToken
->
n
=
stringProcess
(
pToken
->
z
,
pToken
->
n
);
if
(
pToken
->
n
==
0
)
{
return
TSDB_CODE_TSC_INVALID_OPERATION
;
...
...
@@ -3126,7 +3038,7 @@ int32_t tscValidateName(SStrToken* pToken, bool escapeEnabled, bool *dbIncluded)
}
if
(
escapeEnabled
&&
pToken
->
type
==
TK_ID
)
{
tscRmEscapeAndTrimToken
(
pToke
n
);
pToken
->
n
=
stringProcess
(
pToken
->
z
,
pToken
->
n
);
}
// re-build the whole name string
...
...
src/common/src/tname.c
浏览文件 @
eed7ebdd
...
...
@@ -50,7 +50,7 @@ SSchema tGetUserSpecifiedColumnSchema(tVariant* pVal, SStrToken* exprStr, const
}
else
{
size_t
tlen
=
MIN
(
sizeof
(
s
.
name
),
exprStr
->
n
+
1
);
tstrncpy
(
s
.
name
,
exprStr
->
z
,
tlen
);
str
dequote
(
s
.
name
);
str
ingProcess
(
s
.
name
,
strlen
(
s
.
name
)
);
}
return
s
;
...
...
@@ -163,7 +163,7 @@ char *tableNameGetPosition(SStrToken* pToken, char target) {
return
pToken
->
z
+
i
;
}
if
(
*
(
pToken
->
z
+
i
)
==
TS_
ESCAP
E_CHAR
)
{
if
(
*
(
pToken
->
z
+
i
)
==
TS_
BACKQUOT
E_CHAR
)
{
if
(
!
inQuote
)
{
inEscape
=
!
inEscape
;
}
...
...
@@ -223,7 +223,7 @@ void extractTableNameFromToken(SStrToken* pToken, SStrToken* pTable) {
char
*
r
=
tableNameGetPosition
(
pToken
,
sep
);
if
(
r
!=
NULL
)
{
// record the table name token
if
(
pToken
->
z
[
0
]
==
TS_
ESCAPE_CHAR
&&
*
(
r
-
1
)
==
TS_ESCAP
E_CHAR
)
{
if
(
pToken
->
z
[
0
]
==
TS_
BACKQUOTE_CHAR
&&
*
(
r
-
1
)
==
TS_BACKQUOT
E_CHAR
)
{
pTable
->
n
=
(
uint32_t
)(
r
-
pToken
->
z
-
2
);
pTable
->
z
=
pToken
->
z
+
1
;
}
else
{
...
...
src/common/src/tvariant.c
浏览文件 @
eed7ebdd
...
...
@@ -87,7 +87,7 @@ void tVariantCreateExt(tVariant *pVar, SStrToken *token, int32_t optrType, bool
case
TSDB_DATA_TYPE_BINARY
:
{
pVar
->
pz
=
strndup
(
token
->
z
,
token
->
n
);
pVar
->
nLen
=
needRmquoteEscape
?
str
RmquoteEscape
(
pVar
->
pz
,
token
->
n
)
:
token
->
n
;
pVar
->
nLen
=
needRmquoteEscape
?
str
ingProcess
(
pVar
->
pz
,
token
->
n
)
:
token
->
n
;
break
;
}
case
TSDB_DATA_TYPE_TIMESTAMP
:
{
...
...
src/inc/taosdef.h
浏览文件 @
eed7ebdd
...
...
@@ -108,8 +108,8 @@ extern const int32_t TYPE_BYTES[16];
#define TSDB_ERR -1
#define TS_PATH_DELIMITER "."
#define TS_
ESCAP
E_CHAR '`'
#define TS_
ESCAP
E_CHAR_SIZE 2
#define TS_
BACKQUOT
E_CHAR '`'
#define TS_
BACKQUOT
E_CHAR_SIZE 2
#define TSDB_TIME_PRECISION_MILLI 0
#define TSDB_TIME_PRECISION_MICRO 1
...
...
src/kit/shell/src/shellCommand.c
浏览文件 @
eed7ebdd
...
...
@@ -51,8 +51,8 @@ void getPrevCharSize(const char *str, int pos, int *size, int *width) {
if
(
str
[
pos
]
>
0
||
countPrefixOnes
((
unsigned
char
)
str
[
pos
])
>
1
)
break
;
}
int
rc
=
mbtowc
(
&
wc
,
str
+
pos
,
MB_CUR_MAX
);
assert
(
rc
==
*
size
);
mbtowc
(
&
wc
,
str
+
pos
,
MB_CUR_MAX
);
// assert(rc == *size); // it will be core, if str is encode by utf8 and taos charset is gbk
*
width
=
wcwidth
(
wc
);
}
...
...
src/kit/shell/src/shellEngine.c
浏览文件 @
eed7ebdd
...
...
@@ -81,9 +81,9 @@ extern TAOS *taos_connect_auth(const char *ip, const char *user, const char *aut
TAOS
*
shellInit
(
SShellArguments
*
_args
)
{
printf
(
"
\n
"
);
if
(
!
_args
->
is_use_passwd
)
{
#ifdef
TD_
WINDOWS
#ifdef WINDOWS
strcpy
(
tsOsName
,
"Windows"
);
#elif defined(
TD_
DARWIN)
#elif defined(DARWIN)
strcpy
(
tsOsName
,
"Darwin"
);
#endif
printf
(
CLIENT_VERSION
,
tsOsName
,
taos_get_client_info
());
...
...
@@ -239,64 +239,27 @@ int32_t shellRunCommand(TAOS* con, char* command) {
}
}
bool
esc
=
false
;
char
quote
=
0
,
*
cmd
=
command
,
*
p
=
command
;
char
quote
=
0
,
*
cmd
=
command
;
for
(
char
c
=
*
command
++
;
c
!=
0
;
c
=
*
command
++
)
{
if
(
esc
)
{
switch
(
c
)
{
case
'n'
:
c
=
'\n'
;
break
;
case
'r'
:
c
=
'\r'
;
break
;
case
't'
:
c
=
'\t'
;
break
;
case
'G'
:
*
p
++
=
'\\'
;
break
;
case
'\''
:
case
'"'
:
case
'`'
:
if
(
quote
)
{
*
p
++
=
'\\'
;
}
break
;
}
*
p
++
=
c
;
esc
=
false
;
if
(
c
==
'\\'
&&
(
*
command
==
'\''
||
*
command
==
'"'
||
*
command
==
'`'
))
{
command
++
;
continue
;
}
if
(
c
==
'\\'
)
{
if
(
quote
!=
0
&&
(
*
command
==
'_'
||
*
command
==
'%'
||
*
command
==
'\\'
))
{
//DO nothing
}
else
{
esc
=
true
;
continue
;
}
}
if
(
quote
==
c
)
{
quote
=
0
;
}
else
if
(
quote
==
0
&&
(
c
==
'\''
||
c
==
'"'
||
c
==
'`'
))
{
quote
=
c
;
}
*
p
++
=
c
;
if
(
c
==
';'
&&
quote
==
0
)
{
c
=
*
p
;
*
p
=
0
;
}
else
if
(
c
==
';'
&&
quote
==
0
)
{
c
=
*
command
;
*
command
=
0
;
if
(
shellRunSingleCommand
(
con
,
cmd
)
<
0
)
{
return
-
1
;
}
*
p
=
c
;
p
=
cm
d
;
*
command
=
c
;
cmd
=
comman
d
;
}
}
*
p
=
0
;
return
shellRunSingleCommand
(
con
,
cmd
);
}
...
...
@@ -411,7 +374,14 @@ int regex_match(const char *s, const char *reg, int cflags) {
}
else
if
(
reti
==
REG_NOMATCH
)
{
regfree
(
&
regex
);
return
0
;
}
else
{
}
#ifdef DARWIN
else
if
(
reti
==
REG_ILLSEQ
){
regfree
(
&
regex
);
return
0
;
}
#endif
else
{
regerror
(
reti
,
&
regex
,
msgbuf
,
sizeof
(
msgbuf
));
fprintf
(
stderr
,
"Regex match failed: %s
\n
"
,
msgbuf
);
regfree
(
&
regex
);
...
...
@@ -609,20 +579,25 @@ static void shellPrintNChar(const char *str, int length, int width) {
if
(
bytes
<=
0
)
{
break
;
}
pos
+=
bytes
;
if
(
pos
>
length
)
{
break
;
}
int
w
=
0
;
#ifdef WINDOWS
int
w
=
bytes
;
w
=
bytes
;
#else
int
w
=
wcwidth
(
wc
);
if
(
*
(
str
+
pos
)
==
'\t'
||
*
(
str
+
pos
)
==
'\n'
||
*
(
str
+
pos
)
==
'\r'
){
w
=
bytes
;
}
else
{
w
=
wcwidth
(
wc
);
}
#endif
if
(
w
<=
0
)
{
continue
;
}
pos
+=
bytes
;
if
(
pos
>
length
)
{
break
;
}
if
(
width
<=
0
)
{
printf
(
"%lc"
,
wc
);
continue
;
...
...
src/query/src/qSqlParser.c
浏览文件 @
eed7ebdd
...
...
@@ -96,7 +96,7 @@ SArray *tSqlExprListAppend(SArray *pList, tSqlExpr *pNode, SStrToken *pDistinct,
strncpy
(
item
.
aliasName
,
pToken
->
z
,
pToken
->
n
);
item
.
aliasName
[
pToken
->
n
]
=
0
;
str
dequote
(
item
.
aliasName
);
str
ingProcess
(
item
.
aliasName
,
strlen
(
item
.
aliasName
)
);
}
taosArrayPush
(
pList
,
&
item
);
...
...
src/util/inc/tutil.h
浏览文件 @
eed7ebdd
...
...
@@ -25,9 +25,8 @@ extern "C" {
#include "tcrc32c.h"
#include "taosdef.h"
int32_t
strdequote
(
char
*
src
);
int32_t
strRmquote
(
char
*
z
,
int32_t
len
);
int32_t
strRmquoteEscape
(
char
*
z
,
int32_t
len
);
int32_t
strDealWithEscape
(
char
*
z
,
int32_t
len
);
int32_t
stringProcess
(
char
*
z
,
int32_t
len
);
size_t
strtrim
(
char
*
src
);
char
*
tstrstr
(
char
*
src
,
char
*
dst
,
bool
ignoreInEsc
);
char
*
strnchr
(
char
*
haystack
,
char
needle
,
int32_t
len
,
bool
skipquote
);
...
...
src/util/src/ttokenizer.c
浏览文件 @
eed7ebdd
...
...
@@ -448,6 +448,13 @@ uint32_t tGetToken(char* z, uint32_t* tokenId) {
}
case
'`'
:
{
for
(
i
=
1
;
z
[
i
];
i
++
)
{
if
(
isprint
(
z
[
i
])
==
0
){
break
;
}
if
(
z
[
i
]
==
'`'
&&
z
[
i
+
1
]
==
'`'
)
{
i
++
;
continue
;
}
if
(
z
[
i
]
==
'`'
)
{
i
++
;
*
tokenId
=
TK_ID
;
...
...
src/util/src/tutil.c
浏览文件 @
eed7ebdd
...
...
@@ -26,74 +26,79 @@ bool isInteger(double x){
return
(
x
==
truncated
);
}
int32_t
str
dequote
(
char
*
z
)
{
int32_t
str
DealWithEscape
(
char
*
z
,
int32_t
len
)
{
if
(
z
==
NULL
)
{
return
0
;
}
int32_t
quote
=
z
[
0
];
if
(
quote
!=
'\''
&&
quote
!=
'"'
)
{
return
(
int32_t
)
strlen
(
z
);
}
int32_t
i
=
1
,
j
=
0
;
while
(
z
[
i
]
!=
0
)
{
if
(
z
[
i
]
==
quote
)
{
if
(
z
[
i
+
1
]
==
quote
)
{
z
[
j
++
]
=
(
char
)
quote
;
i
++
;
}
else
{
z
[
j
++
]
=
0
;
return
(
j
-
1
);
int32_t
j
=
0
;
for
(
int32_t
i
=
0
;
i
<
len
;
i
++
)
{
if
(
z
[
i
]
==
'\\'
)
{
// deal with escape character
if
(
z
[
i
+
1
]
==
'n'
){
z
[
j
++
]
=
'\n'
;
}
else
if
(
z
[
i
+
1
]
==
'r'
){
z
[
j
++
]
=
'\r'
;
}
else
if
(
z
[
i
+
1
]
==
't'
){
z
[
j
++
]
=
'\t'
;
}
else
if
(
z
[
i
+
1
]
==
'\\'
){
z
[
j
++
]
=
'\\'
;
}
else
if
(
z
[
i
+
1
]
==
'\''
){
z
[
j
++
]
=
'\''
;
}
else
if
(
z
[
i
+
1
]
==
'"'
){
z
[
j
++
]
=
'"'
;
}
else
if
(
z
[
i
+
1
]
==
'%'
){
z
[
j
++
]
=
z
[
i
];
z
[
j
++
]
=
z
[
i
+
1
];
}
else
if
(
z
[
i
+
1
]
==
'_'
){
z
[
j
++
]
=
z
[
i
];
z
[
j
++
]
=
z
[
i
+
1
];
}
else
{
z
[
j
++
]
=
z
[
i
+
1
];
}
}
else
{
z
[
j
++
]
=
z
[
i
];
i
++
;
continue
;
}
i
++
;
z
[
j
++
]
=
z
[
i
]
;
}
return
j
+
1
;
// only one quote, do nothing
z
[
j
]
=
0
;
return
j
;
}
// delete escape character: \\, \', \"
int32_t
strRmquote
(
char
*
z
,
int32_t
len
){
char
delim
=
0
;
int32_t
cnt
=
0
;
int32_t
j
=
0
;
for
(
size_t
k
=
0
;
k
<
len
;
++
k
)
{
if
(
!
delim
&&
(
z
[
k
]
==
'\''
||
z
[
k
]
==
'"'
)){
// find the start ' or "
delim
=
z
[
k
];
}
if
((
z
[
k
]
==
'\\'
&&
z
[
k
+
1
]
==
'_'
)
||
(
z
[
k
]
==
'\\'
&&
z
[
k
+
1
]
==
'%'
))
{
//match '_' '%' self
}
else
if
(
z
[
k
]
==
'\\'
){
z
[
j
]
=
z
[
k
+
1
];
cnt
++
;
j
++
;
k
++
;
continue
;
}
else
if
(
z
[
k
]
==
delim
){
continue
;
/*
* remove the quotation marks at both ends
* "fsd" => fsd
* "f""sd" =>f"sd
* 'fsd' => fsd
* 'f''sd' =>f'sd
* `fsd => fsd
* `f``sd` =>f`sd
*/
static
int32_t
strdequote
(
char
*
z
,
int32_t
n
){
if
(
z
==
NULL
||
n
<
2
)
return
n
;
int32_t
quote
=
z
[
0
];
int32_t
i
=
1
,
j
=
0
;
while
(
i
<
n
)
{
if
(
i
<
n
-
1
&&
z
[
i
]
==
quote
&&
z
[
i
+
1
]
==
quote
)
{
// two consecutive quotation marks keep one
z
[
j
++
]
=
(
char
)
quote
;
i
+=
2
;
}
else
{
z
[
j
++
]
=
z
[
i
++
];
}
z
[
j
]
=
z
[
k
];
j
++
;
}
z
[
j
]
=
0
;
return
j
;
z
[
j
-
1
]
=
0
;
return
j
-
1
;
}
int32_t
str
RmquoteEscape
(
char
*
z
,
int32_t
len
)
{
if
(
len
<=
0
)
return
len
;
int32_t
str
ingProcess
(
char
*
z
,
int32_t
len
)
{
if
(
z
==
NULL
||
len
<
2
)
return
len
;
if
(
z
[
0
]
==
'\''
||
z
[
0
]
==
'\"'
)
{
return
strRmquote
(
z
,
len
);
}
else
if
(
len
>
1
&&
z
[
0
]
==
TS_ESCAPE_CHAR
&&
z
[
len
-
1
]
==
TS_ESCAPE_CHAR
)
{
memmove
(
z
,
z
+
1
,
len
-
2
);
z
[
len
-
2
]
=
'\0'
;
return
len
-
2
;
if
((
z
[
0
]
==
'\''
&&
z
[
len
-
1
]
==
'\''
)
||
(
z
[
0
]
==
'"'
&&
z
[
len
-
1
]
==
'"'
))
{
int32_t
n
=
strdequote
(
z
,
len
);
return
strDealWithEscape
(
z
,
n
);
}
else
if
(
z
[
0
]
==
TS_BACKQUOTE_CHAR
&&
z
[
len
-
1
]
==
TS_BACKQUOTE_CHAR
)
{
return
strdequote
(
z
,
len
);
}
return
len
;
...
...
@@ -192,7 +197,7 @@ char *tstrstr(char *src, char *dst, bool ignoreInEsc) {
char
*
str
=
src
,
*
res
=
NULL
;
for
(
int32_t
i
=
0
;
i
<
len
;
++
i
)
{
if
(
src
[
i
]
==
TS_
ESCAP
E_CHAR
||
src
[
i
]
==
'\''
||
src
[
i
]
==
'\"'
)
{
if
(
src
[
i
]
==
TS_
BACKQUOT
E_CHAR
||
src
[
i
]
==
'\''
||
src
[
i
]
==
'\"'
)
{
if
(
!
inEsc
)
{
escChar
=
src
[
i
];
src
[
i
]
=
0
;
...
...
@@ -218,8 +223,6 @@ char *tstrstr(char *src, char *dst, bool ignoreInEsc) {
return
str
?
strstr
(
str
,
dst
)
:
NULL
;
}
char
*
strtolower
(
char
*
dst
,
const
char
*
src
)
{
int
esc
=
0
;
char
quote
=
0
,
*
p
=
dst
,
c
;
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录