Skip to content
项目
群组
代码片段
帮助
正在加载...
帮助
为 GitLab 提交贡献
登录/注册
切换导航
H
h2database
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
分枝图
比较
统计图
议题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
计划
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
分枝图
统计图
创建新议题
作业
提交
议题看板
打开侧边栏
Administrator
h2database
Commits
1281690a
提交
1281690a
authored
6 年前
作者:
Evgenij Ryazanov
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Parse DB2's special registers only in DB2 mode
上级
19f5f2de
显示空白字符变更
内嵌
并排
正在显示
2 个修改的文件
包含
33 行增加
和
10 行删除
+33
-10
Parser.java
h2/src/main/org/h2/command/Parser.java
+20
-10
TestCompatibility.java
h2/src/test/org/h2/test/db/TestCompatibility.java
+13
-0
没有找到文件。
h2/src/main/org/h2/command/Parser.java
浏览文件 @
1281690a
...
...
@@ -3377,16 +3377,8 @@ public class Parser {
r
=
readFunctionWithoutParameters
(
"LOCALTIME"
);
}
else
if
(
equalsToken
(
"SYSTIME"
,
name
))
{
r
=
readFunctionWithoutParameters
(
"CURRENT_TIME"
);
}
else
if
(
equalsToken
(
"CURRENT"
,
name
))
{
if
(
readIf
(
"TIMESTAMP"
))
{
r
=
readFunctionWithoutParameters
(
"CURRENT_TIMESTAMP"
);
}
else
if
(
readIf
(
"TIME"
))
{
r
=
readFunctionWithoutParameters
(
"CURRENT_TIME"
);
}
else
if
(
readIf
(
"DATE"
))
{
r
=
readFunctionWithoutParameters
(
"CURRENT_DATE"
);
}
else
{
r
=
new
ExpressionColumn
(
database
,
null
,
null
,
name
);
}
}
else
if
(
database
.
getMode
().
getEnum
()
==
ModeEnum
.
DB2
&&
equalsToken
(
"CURRENT"
,
name
))
{
r
=
parseDB2SpecialRegisters
(
name
);
}
else
if
(
equalsToken
(
"NEXT"
,
name
)
&&
readIf
(
"VALUE"
))
{
read
(
FOR
);
Sequence
sequence
=
readSequence
();
...
...
@@ -3588,6 +3580,24 @@ public class Parser {
return
r
;
}
private
Expression
parseDB2SpecialRegisters
(
String
name
)
{
// Only "CURRENT" name is supported
if
(
readIf
(
"TIMESTAMP"
))
{
if
(
readIf
(
WITH
))
{
read
(
"TIME"
);
read
(
"ZONE"
);
return
readFunctionWithoutParameters
(
"CURRENT_TIMESTAMP"
);
}
return
readFunctionWithoutParameters
(
"LOCALTIMESTAMP"
);
}
else
if
(
readIf
(
"TIME"
))
{
return
readFunctionWithoutParameters
(
"CURRENT_TIME"
);
}
else
if
(
readIf
(
"DATE"
))
{
return
readFunctionWithoutParameters
(
"CURRENT_DATE"
);
}
// No match, parse CURRENT as a column
return
new
ExpressionColumn
(
database
,
null
,
null
,
name
);
}
private
Expression
readCase
()
{
if
(
readIf
(
"END"
))
{
readIf
(
"CASE"
);
...
...
This diff is collapsed.
Click to expand it.
h2/src/test/org/h2/test/db/TestCompatibility.java
浏览文件 @
1281690a
...
...
@@ -561,6 +561,19 @@ public class TestCompatibility extends TestDb {
"select date from test where date = '2014-04-05-09.48.28.020005'"
);
assertResult
(
"2014-04-05 09:48:28.020005"
,
stat
,
"select date from test where date = '2014-04-05 09:48:28.020005'"
);
// Test limited support for DB2's special registers
// Standard SQL functions like LOCALTIMESTAMP, CURRENT_TIMESTAMP and
// others are used to compare values, their implementation in H2 is
// compatible with standard, but may be not really compatible with DB2.
assertResult
(
"TRUE"
,
stat
,
"SELECT LOCALTIMESTAMP = CURRENT TIMESTAMP"
);
assertResult
(
"TRUE"
,
stat
,
"SELECT CAST(LOCALTIMESTAMP AS VARCHAR) = CAST(CURRENT TIMESTAMP AS VARCHAR)"
);
assertResult
(
"TRUE"
,
stat
,
"SELECT CURRENT_TIMESTAMP = CURRENT TIMESTAMP WITH TIME ZONE"
);
assertResult
(
"TRUE"
,
stat
,
"SELECT CAST(CURRENT_TIMESTAMP AS VARCHAR) = CAST(CURRENT TIMESTAMP WITH TIME ZONE AS VARCHAR)"
);
assertResult
(
"TRUE"
,
stat
,
"SELECT CURRENT_TIME = CURRENT TIME"
);
assertResult
(
"TRUE"
,
stat
,
"SELECT CURRENT_DATE = CURRENT DATE"
);
}
private
void
testDerby
()
throws
SQLException
{
...
...
This diff is collapsed.
Click to expand it.
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论