Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
caoersss
oceanbase
提交
000ee98d
O
oceanbase
项目概览
caoersss
/
oceanbase
与 Fork 源项目一致
Fork自
oceanbase / oceanbase
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
O
oceanbase
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
000ee98d
编写于
7月 15, 2021
作者:
O
obdev
提交者:
wangzelin.wzl
7月 15, 2021
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
fix bug for sequence
上级
51ee0c55
变更
7
隐藏空白更改
内联
并排
Showing
7 changed file
with
46 addition
and
25 deletion
+46
-25
src/share/sequence/ob_sequence_dml_proxy.cpp
src/share/sequence/ob_sequence_dml_proxy.cpp
+10
-2
src/sql/resolver/ddl/ob_alter_sequence_resolver.cpp
src/sql/resolver/ddl/ob_alter_sequence_resolver.cpp
+11
-6
src/sql/resolver/ddl/ob_create_table_resolver.cpp
src/sql/resolver/ddl/ob_create_table_resolver.cpp
+3
-1
src/sql/resolver/dml/ob_dml_resolver.cpp
src/sql/resolver/dml/ob_dml_resolver.cpp
+1
-1
src/sql/resolver/dml/ob_select_resolver.cpp
src/sql/resolver/dml/ob_select_resolver.cpp
+6
-2
src/sql/resolver/dml/ob_view_table_resolver.h
src/sql/resolver/dml/ob_view_table_resolver.h
+13
-13
src/sql/resolver/ob_resolver_define.h
src/sql/resolver/ob_resolver_define.h
+2
-0
未找到文件。
src/share/sequence/ob_sequence_dml_proxy.cpp
浏览文件 @
000ee98d
...
...
@@ -95,7 +95,8 @@ int ObSequenceDMLProxy::next_batch(const uint64_t tenant_id, const uint64_t sequ
common
::
ObArenaAllocator
allocator
(
ObModIds
::
OB_SCHEMA_SEQUENCE
);
ObSqlString
sql
;
bool
with_snap_shot
=
true
;
ObNumber
next_value
;
// default to zero
ObNumber
next_value
;
// default to zero
ObNumber
tmp_next_value
;
ObNumber
cache_inclusive_start
;
ObNumber
cache_exclusive_end
;
ObNumber
cache_size
;
...
...
@@ -177,6 +178,13 @@ int ObSequenceDMLProxy::next_batch(const uint64_t tenant_id, const uint64_t sequ
}
}
if
(
OB_SUCC
(
ret
))
{
if
(
OB_FAIL
(
tmp_next_value
.
from
(
next_value
,
allocator
)))
{
// copy for check need update inner_table
LOG_WARN
(
"fail deep copy next_val"
,
K
(
next_value
),
K
(
ret
));
}
}
if
(
OB_SUCC
(
ret
))
{
// The following piece of logic has the following purpose:
// 1. calculate the new next_value for updating into the internal table
...
...
@@ -249,7 +257,7 @@ int ObSequenceDMLProxy::next_batch(const uint64_t tenant_id, const uint64_t sequ
}
// update
if
(
OB_SUCC
(
ret
))
{
if
(
OB_SUCC
(
ret
)
&&
tmp_next_value
!=
next_value
)
{
int64_t
affected_rows
=
0
;
if
(
OB_FAIL
(
sql
.
assign_fmt
(
"UPDATE %s SET next_value = %s "
"WHERE SEQUENCE_ID = %lu"
,
...
...
src/sql/resolver/ddl/ob_alter_sequence_resolver.cpp
浏览文件 @
000ee98d
...
...
@@ -89,13 +89,18 @@ int ObAlterSequenceResolver::resolve(const ParseNode& parse_tree)
}
/* sequence options */
if
(
OB_SUCC
(
ret
)
&&
NULL
!=
parse_tree
.
children_
[
1
])
{
if
(
OB_UNLIKELY
(
T_SEQUENCE_OPTION_LIST
!=
parse_tree
.
children_
[
1
]
->
type_
))
{
ret
=
OB_ERR_UNEXPECTED
;
LOG_ERROR
(
"invalid option node type"
,
K
(
parse_tree
.
children_
[
1
]
->
type_
),
K
(
ret
));
if
(
OB_SUCC
(
ret
))
{
if
(
OB_NOT_NULL
(
parse_tree
.
children_
[
1
]))
{
if
(
OB_UNLIKELY
(
T_SEQUENCE_OPTION_LIST
!=
parse_tree
.
children_
[
1
]
->
type_
))
{
ret
=
OB_ERR_UNEXPECTED
;
LOG_ERROR
(
"invalid option node type"
,
K
(
parse_tree
.
children_
[
1
]
->
type_
),
K
(
ret
));
}
else
{
ObSequenceResolver
<
ObAlterSequenceStmt
>
resolver
;
ret
=
resolver
.
resolve_sequence_options
(
mystmt
,
parse_tree
.
children_
[
1
]);
}
}
else
{
ObSequenceResolver
<
ObAlterSequenceStmt
>
resolver
;
ret
=
resolver
.
resolve_sequence_options
(
mystmt
,
parse_tree
.
children_
[
1
]
);
ret
=
OB_ERR_REQUIRE_ALTER_SEQ_OPTION
;
LOG_USER_ERROR
(
OB_ERR_REQUIRE_ALTER_SEQ_OPTION
);
}
}
return
ret
;
...
...
src/sql/resolver/ddl/ob_create_table_resolver.cpp
浏览文件 @
000ee98d
...
...
@@ -1449,7 +1449,7 @@ int ObCreateTableResolver::resolve_table_elements_from_select(const ParseNode& p
ParseNode
*
sub_sel_node
=
parse_tree
.
children_
[
CREATE_TABLE_AS_SEL_NUM_CHILD
-
1
];
ObSelectStmt
*
select_stmt
=
NULL
;
ObSelectResolver
select_resolver
(
params_
);
select_resolver
.
params_
.
is_from_create_
view
_
=
true
;
select_resolver
.
params_
.
is_from_create_
table
_
=
true
;
// select stmt can not see upper insert stmt.
select_resolver
.
set_parent_namespace_resolver
(
NULL
);
if
(
OB_ISNULL
(
session_info_
))
{
...
...
@@ -1510,6 +1510,8 @@ int ObCreateTableResolver::resolve_table_elements_from_select(const ParseNode& p
LOG_WARN
(
"invalid null expr in select_item"
,
K
(
ret
),
K
(
select_item
.
expr_
));
}
else
if
(
select_item
.
is_real_alias_
||
T_REF_COLUMN
==
select_item
.
expr_
->
get_expr_type
())
{
// do nothing
}
else
if
(
select_item
.
expr_
->
get_expr_type
()
==
T_FUN_SYS_SEQ_NEXTVAL
)
{
// do nothing
}
else
{
ret
=
OB_NO_COLUMN_ALIAS
;
LOG_USER_ERROR
(
OB_NO_COLUMN_ALIAS
,
select_item
.
expr_name_
.
length
(),
select_item
.
expr_name_
.
ptr
());
...
...
src/sql/resolver/dml/ob_dml_resolver.cpp
浏览文件 @
000ee98d
...
...
@@ -1120,7 +1120,7 @@ int ObDMLResolver::resolve_basic_table(const ParseNode& parse_tree, TableItem*&
}
else
if
(
table_schema
->
is_vir_table
()
&&
!
stmt
->
is_select_stmt
())
{
ret
=
OB_NOT_SUPPORTED
;
LOG_USER_ERROR
(
OB_NOT_SUPPORTED
,
"DML operation on Virtual Table/Temporary Table"
);
}
else
if
(
params_
.
is_from_create_view_
&&
table_schema
->
is_mysql_tmp_table
())
{
}
else
if
(
(
params_
.
is_from_create_view_
||
params_
.
is_from_create_table_
)
&&
table_schema
->
is_mysql_tmp_table
())
{
ret
=
OB_NOT_SUPPORTED
;
LOG_USER_ERROR
(
OB_NOT_SUPPORTED
,
"View/Table's column refers to a temporary table"
);
}
else
if
(
OB_FAIL
(
resolve_table_partition_expr
(
*
table_item
,
*
table_schema
)))
{
...
...
src/sql/resolver/dml/ob_select_resolver.cpp
浏览文件 @
000ee98d
...
...
@@ -55,6 +55,7 @@ ObSelectResolver::ObSelectResolver(ObResolverParams& params)
transpose_item_
(
NULL
)
{
params_
.
is_from_create_view_
=
params
.
is_from_create_view_
;
params_
.
is_from_create_table_
=
params
.
is_from_create_table_
;
}
ObSelectResolver
::~
ObSelectResolver
()
...
...
@@ -1357,8 +1358,8 @@ int ObSelectResolver::resolve_field_list(const ParseNode& node)
ret
=
OB_ERR_TOO_LONG_IDENT
;
LOG_WARN
(
"alias name too long"
,
K
(
ret
),
K
(
select_item
.
alias_name_
));
}
}
else
if
(
OB_UNLIKELY
(
params_
.
is_from_create_view_
&&
0
==
select_item
.
expr_name_
.
case_compare
(
OB_HIDDEN_LOGICAL_ROWID_COLUMN_NAME
)))
{
}
else
if
(
OB_UNLIKELY
(
(
params_
.
is_from_create_view_
||
params_
.
is_from_create_table_
)
&&
0
==
select_item
.
expr_name_
.
case_compare
(
OB_HIDDEN_LOGICAL_ROWID_COLUMN_NAME
)))
{
// must name alias for rowid
// eg: create view/table as select rowid from t1;
ret
=
OB_NO_COLUMN_ALIAS
;
...
...
@@ -1421,6 +1422,9 @@ int ObSelectResolver::resolve_field_list(const ParseNode& node)
}
else
if
(
T_FUN_SYS_SEQ_NEXTVAL
==
select_item
.
expr_
->
get_expr_type
())
{
// sequence expr, expr is seq_name.nextval or seq_name.currval
// but column name displayed should be nextval or currval
if
(
T_OP_POS
==
project_node
->
type_
)
{
project_node
=
project_node
->
children_
[
0
];
}
if
(
T_OBJ_ACCESS_REF
!=
project_node
->
type_
)
{
ret
=
OB_ERR_UNEXPECTED
;
LOG_WARN
(
"unexpected select item type"
,
K
(
select_item
),
K
(
project_node
->
type_
),
K
(
ret
));
...
...
src/sql/resolver/dml/ob_view_table_resolver.h
浏览文件 @
000ee98d
...
...
@@ -17,19 +17,19 @@ namespace oceanbase {
namespace
sql
{
class
ObViewTableResolver
:
public
ObSelectResolver
{
public:
ObViewTableResolver
(
ObResolverParams
&
params
,
const
ObString
&
view_db_name
,
const
ObString
&
view_name
)
:
ObSelectResolver
(
params
),
parent_view_resolver_
(
NULL
),
is_create_view_
(
false
),
materialized_
(
false
),
auto_name_id_
(
1
),
view_db_name_
(
view_db_name
),
view_name_
(
view_name
)
{
params_
.
is_from_create_view_
=
params
.
is_from_create_view_
;
}
virtual
~
ObViewTableResolver
()
{}
ObViewTableResolver
(
ObResolverParams
&
params
,
const
ObString
&
view_db_name
,
const
ObString
&
view_name
)
:
ObSelectResolver
(
params
),
parent_view_resolver_
(
NULL
),
is_create_view_
(
false
),
materialized_
(
false
),
auto_name_id_
(
1
),
view_db_name_
(
view_db_name
),
view_name_
(
view_name
)
{
params_
.
is_from_create_view_
=
params
.
is_from_create_view_
;
params_
.
is_from_create_table_
=
params
.
is_from_create_table_
;
}
virtual
~
ObViewTableResolver
()
{}
void
set_current_view_item
(
const
TableItem
&
view_item
)
{
...
...
src/sql/resolver/ob_resolver_define.h
浏览文件 @
000ee98d
...
...
@@ -267,6 +267,7 @@ struct ObResolverParams {
is_from_show_resolver_
(
false
),
is_restore_
(
false
),
is_from_create_view_
(
false
),
is_from_create_table_
(
false
),
is_prepare_protocol_
(
false
),
is_prepare_stage_
(
false
),
is_dynamic_sql_
(
false
),
...
...
@@ -313,6 +314,7 @@ public:
bool
is_from_show_resolver_
;
bool
is_restore_
;
bool
is_from_create_view_
;
bool
is_from_create_table_
;
bool
is_prepare_protocol_
;
bool
is_prepare_stage_
;
bool
is_dynamic_sql_
;
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录