Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
taosdata
TDengine
提交
c1c1e72e
TDengine
项目概览
taosdata
/
TDengine
大约 2 年 前同步成功
通知
1193
Star
22018
Fork
4786
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
1
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
TDengine
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
1
Issue
1
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
提交
c1c1e72e
编写于
5月 13, 2023
作者:
K
kailixu
浏览文件
操作
浏览文件
下载
差异文件
Merge branch 'main' into enh/TD-22404-M
上级
a39ff5f3
061e9638
变更
6
显示空白变更内容
内联
并排
Showing
6 changed file
with
78 addition
and
17 deletion
+78
-17
README-CN.md
README-CN.md
+1
-1
source/libs/executor/src/executil.c
source/libs/executor/src/executil.c
+10
-1
source/libs/parser/src/parTranslater.c
source/libs/parser/src/parTranslater.c
+12
-1
tests/script/tsim/alter/table.sim
tests/script/tsim/alter/table.sim
+18
-1
tests/script/tsim/parser/alter_column.sim
tests/script/tsim/parser/alter_column.sim
+1
-1
tests/system-test/0-others/user_privilege.py
tests/system-test/0-others/user_privilege.py
+36
-12
未找到文件。
README-CN.md
浏览文件 @
c1c1e72e
...
...
@@ -352,4 +352,4 @@ TDengine 提供了丰富的应用程序开发接口,其中包括 C/C++、Java
# 加入技术交流群
TDengine 官方社群「物联网大数据群」对外开放,欢迎您加入讨论。搜索微信号 "tdengine",加小 T 为好友,即可入群。
TDengine 官方社群「物联网大数据群」对外开放,欢迎您加入讨论。搜索微信号 "tdengine
1
",加小 T 为好友,即可入群。
source/libs/executor/src/executil.c
浏览文件 @
c1c1e72e
...
...
@@ -1484,14 +1484,23 @@ static int32_t setSelectValueColumnInfo(SqlFunctionCtx* pCtx, int32_t numOfOutpu
return
TSDB_CODE_OUT_OF_MEMORY
;
}
SHashObj
*
pSelectFuncs
=
taosHashInit
(
8
,
taosGetDefaultHashFunction
(
TSDB_DATA_TYPE_BINARY
),
false
,
HASH_ENTRY_LOCK
);
for
(
int32_t
i
=
0
;
i
<
numOfOutput
;
++
i
)
{
const
char
*
pName
=
pCtx
[
i
].
pExpr
->
pExpr
->
_function
.
functionName
;
if
((
strcmp
(
pName
,
"_select_value"
)
==
0
)
||
(
strcmp
(
pName
,
"_group_key"
)
==
0
))
{
pValCtx
[
num
++
]
=
&
pCtx
[
i
];
}
else
if
(
fmIsSelectFunc
(
pCtx
[
i
].
functionId
))
{
void
*
data
=
taosHashGet
(
pSelectFuncs
,
pName
,
strlen
(
pName
));
if
(
taosHashGetSize
(
pSelectFuncs
)
!=
0
&&
data
==
NULL
)
{
p
=
NULL
;
break
;
}
else
{
taosHashPut
(
pSelectFuncs
,
pName
,
strlen
(
pName
),
&
num
,
sizeof
(
num
));
p
=
&
pCtx
[
i
];
}
}
}
taosHashCleanup
(
pSelectFuncs
);
if
(
p
!=
NULL
)
{
p
->
subsidiaries
.
pCtx
=
pValCtx
;
...
...
source/libs/parser/src/parTranslater.c
浏览文件 @
c1c1e72e
...
...
@@ -5326,7 +5326,8 @@ static int32_t checkAlterSuperTableBySchema(STranslateContext* pCxt, SAlterTable
}
if
(
TSDB_ALTER_TABLE_UPDATE_COLUMN_BYTES
==
pStmt
->
alterType
)
{
if
(
calcTypeBytes
(
pStmt
->
dataType
)
>
TSDB_MAX_FIELD_LEN
)
{
if
((
TSDB_DATA_TYPE_VARCHAR
==
pStmt
->
dataType
.
type
&&
calcTypeBytes
(
pStmt
->
dataType
)
>
TSDB_MAX_BINARY_LEN
)
||
(
TSDB_DATA_TYPE_NCHAR
==
pStmt
->
dataType
.
type
&&
calcTypeBytes
(
pStmt
->
dataType
)
>
TSDB_MAX_NCHAR_LEN
))
{
return
generateSyntaxErrMsg
(
&
pCxt
->
msgBuf
,
TSDB_CODE_PAR_INVALID_VAR_COLUMN_LEN
);
}
...
...
@@ -5351,6 +5352,11 @@ static int32_t checkAlterSuperTableBySchema(STranslateContext* pCxt, SAlterTable
return
generateSyntaxErrMsg
(
&
pCxt
->
msgBuf
,
TSDB_CODE_PAR_TOO_MANY_COLUMNS
);
}
if
((
TSDB_DATA_TYPE_VARCHAR
==
pStmt
->
dataType
.
type
&&
calcTypeBytes
(
pStmt
->
dataType
)
>
TSDB_MAX_BINARY_LEN
)
||
(
TSDB_DATA_TYPE_NCHAR
==
pStmt
->
dataType
.
type
&&
calcTypeBytes
(
pStmt
->
dataType
)
>
TSDB_MAX_NCHAR_LEN
))
{
return
generateSyntaxErrMsg
(
&
pCxt
->
msgBuf
,
TSDB_CODE_PAR_INVALID_VAR_COLUMN_LEN
);
}
if
(
pTableMeta
->
tableInfo
.
rowSize
+
calcTypeBytes
(
pStmt
->
dataType
)
>
TSDB_MAX_BYTES_PER_ROW
)
{
return
generateSyntaxErrMsg
(
&
pCxt
->
msgBuf
,
TSDB_CODE_PAR_INVALID_ROW_LENGTH
,
TSDB_MAX_BYTES_PER_ROW
);
}
...
...
@@ -8322,6 +8328,11 @@ static int32_t buildUpdateColReq(STranslateContext* pCxt, SAlterTableStmt* pStmt
return
generateSyntaxErrMsg
(
&
pCxt
->
msgBuf
,
TSDB_CODE_PAR_INVALID_MODIFY_COL
);
}
if
((
TSDB_DATA_TYPE_VARCHAR
==
pStmt
->
dataType
.
type
&&
calcTypeBytes
(
pStmt
->
dataType
)
>
TSDB_MAX_BINARY_LEN
)
||
(
TSDB_DATA_TYPE_NCHAR
==
pStmt
->
dataType
.
type
&&
calcTypeBytes
(
pStmt
->
dataType
)
>
TSDB_MAX_NCHAR_LEN
))
{
return
generateSyntaxErrMsg
(
&
pCxt
->
msgBuf
,
TSDB_CODE_PAR_INVALID_VAR_COLUMN_LEN
);
}
if
(
pTableMeta
->
tableInfo
.
rowSize
+
pReq
->
colModBytes
-
pSchema
->
bytes
>
TSDB_MAX_BYTES_PER_ROW
)
{
return
generateSyntaxErrMsg
(
&
pCxt
->
msgBuf
,
TSDB_CODE_PAR_INVALID_ROW_LENGTH
,
TSDB_MAX_BYTES_PER_ROW
);
}
...
...
tests/script/tsim/alter/table.sim
浏览文件 @
c1c1e72e
...
...
@@ -657,17 +657,34 @@ if $data20 != null then
return -1
endi
print =============== error
print =============== error
for normal table
sql create table tb2023(ts timestamp, f int);
sql_error alter table tb2023 add column v varchar(16375);
sql_error alter table tb2023 add column v varchar(16385);
sql_error alter table tb2023 add column v varchar(33100);
sql alter table tb2023 add column v varchar(16374);
sql_error alter table tb2023 modify column v varchar(16375);
sql desc tb2023
sql alter table tb2023 drop column v
sql_error alter table tb2023 add column v nchar(4094);
sql alter table tb2023 add column v nchar(4093);
sql_error alter table tb2023 modify column v nchar(4094);
sql desc tb2023
print =============== error for super table
sql create table stb2023(ts timestamp, f int) tags(t1 int);
sql_error alter table stb2023 add column v varchar(16375);
sql_error alter table stb2023 add column v varchar(16385);
sql_error alter table stb2023 add column v varchar(33100);
sql alter table stb2023 add column v varchar(16374);
sql_error alter table stb2023 modify column v varchar(16375);
sql desc stb2023
sql alter table stb2023 drop column v
sql_error alter table stb2023 add column v nchar(4094);
sql alter table stb2023 add column v nchar(4093);
sql_error alter table stb2023 modify column v nchar(4094);
sql desc stb2023
print ======= over
sql drop database d1
sql select * from information_schema.ins_databases
...
...
tests/script/tsim/parser/alter_column.sim
浏览文件 @
c1c1e72e
...
...
@@ -48,7 +48,7 @@ sql_error alter table tb modify column c2 binary(10);
sql_error alter table tb modify column c2 binary(9);
sql_error alter table tb modify column c2 binary(-9);
sql_error alter table tb modify column c2 binary(0);
sql alter table tb modify column c2 binary(17000);
sql
_error
alter table tb modify column c2 binary(17000);
sql_error alter table tb modify column c2 nchar(30);
sql_error alter table tb modify column c3 double;
sql_error alter table tb modify column c3 nchar(10);
...
...
tests/system-test/0-others/user_privilege.py
浏览文件 @
c1c1e72e
...
...
@@ -29,6 +29,7 @@ class TDTestCase:
self
.
stbname
=
'stb'
self
.
binary_length
=
20
# the length of binary for column_dict
self
.
nchar_length
=
20
# the length of nchar for column_dict
self
.
dbnames
=
[
'db1'
,
'db2'
]
self
.
column_dict
=
{
'ts'
:
'timestamp'
,
'col1'
:
'float'
,
...
...
@@ -57,21 +58,25 @@ class TDTestCase:
def
create_user
(
self
):
user_name
=
'test'
tdSql
.
execute
(
f
'create user
{
user_name
}
pass "test"'
)
tdSql
.
execute
(
f
'grant read on db.stb with t2 = "Beijing" to
{
user_name
}
'
)
tdSql
.
execute
(
f
'grant read on
{
self
.
dbnames
[
0
]
}
.
{
self
.
stbname
}
with t2 = "Beijing" to
{
user_name
}
'
)
tdSql
.
execute
(
f
'grant write on
{
self
.
dbnames
[
1
]
}
.
{
self
.
stbname
}
with t1 = 2 to
{
user_name
}
'
)
def
prepare_data
(
self
):
for
db
in
self
.
dbnames
:
tdSql
.
execute
(
f
"create database
{
db
}
"
)
tdSql
.
execute
(
f
"use
{
db
}
"
)
tdSql
.
execute
(
self
.
setsql
.
set_create_stable_sql
(
self
.
stbname
,
self
.
column_dict
,
self
.
tag_dict
))
for
i
in
range
(
self
.
tbnum
):
tdSql
.
execute
(
f
'create table
{
self
.
stbname
}
_
{
i
}
using
{
self
.
stbname
}
tags(
{
self
.
tag_list
[
i
]
}
)'
)
for
j
in
self
.
values_list
:
tdSql
.
execute
(
f
'insert into
{
self
.
stbname
}
_
{
i
}
values(
{
j
}
)'
)
def
user_
privilege_check
(
self
):
def
user_
read_privilege_check
(
self
,
dbname
):
testconn
=
taos
.
connect
(
user
=
'test'
,
password
=
'test'
)
expectErrNotOccured
=
False
try
:
sql
=
"select count(*) from db
.stb where t2 = 'Beijing'"
sql
=
f
"select count(*) from
{
dbname
}
.stb where t2 = 'Beijing'"
res
=
testconn
.
query
(
sql
)
data
=
res
.
fetch_all
()
count
=
data
[
0
][
0
]
...
...
@@ -85,11 +90,30 @@ class TDTestCase:
tdLog
.
exit
(
f
"
{
sql
}
, expect result doesn't match"
)
pass
def
user_write_privilege_check
(
self
,
dbname
):
testconn
=
taos
.
connect
(
user
=
'test'
,
password
=
'test'
)
expectErrNotOccured
=
False
try
:
sql
=
f
"insert into
{
dbname
}
.stb_1 values(now, 1.1, 200, 0.3)"
testconn
.
execute
(
sql
)
except
BaseException
:
expectErrNotOccured
=
True
if
expectErrNotOccured
:
caller
=
inspect
.
getframeinfo
(
inspect
.
stack
()[
1
][
0
])
tdLog
.
exit
(
f
"
{
caller
.
filename
}
(
{
caller
.
lineno
}
) failed: sql:
{
sql
}
, expect error not occured"
)
else
:
pass
def
user_privilege_error_check
(
self
):
testconn
=
taos
.
connect
(
user
=
'test'
,
password
=
'test'
)
expectErrNotOccured
=
False
sql_list
=
[
"alter talbe db.stb_1 set t2 = 'Wuhan'"
,
"drop table db.stb_1"
]
sql_list
=
[
f
"alter talbe
{
self
.
dbnames
[
0
]
}
.stb_1 set t2 = 'Wuhan'"
,
f
"insert into
{
self
.
dbnames
[
0
]
}
.stb_1 values(now, 1.1, 200, 0.3)"
,
f
"drop table
{
self
.
dbnames
[
0
]
}
.stb_1"
,
f
"select count(*) from
{
self
.
dbnames
[
1
]
}
.stb"
]
for
sql
in
sql_list
:
try
:
...
...
@@ -105,10 +129,10 @@ class TDTestCase:
pass
def
run
(
self
):
tdSql
.
prepare
()
self
.
prepare_data
()
self
.
create_user
()
self
.
user_privilege_check
()
self
.
user_read_privilege_check
(
self
.
dbnames
[
0
])
self
.
user_write_privilege_check
(
self
.
dbnames
[
1
])
self
.
user_privilege_error_check
()
def
stop
(
self
):
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录