Skip to content
项目
群组
代码片段
帮助
正在加载...
帮助
为 GitLab 提交贡献
登录/注册
切换导航
H
h2database
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
分枝图
比较
统计图
议题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
计划
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
分枝图
统计图
创建新议题
作业
提交
议题看板
打开侧边栏
Administrator
h2database
Commits
6395ede0
提交
6395ede0
authored
7 年前
作者:
Evgenij Ryazanov
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Parse DUAL, SYS.DUAL, SYSDUMMY1, and SYSIBM.SYSDUMMY1 in better way
上级
ffd978cb
无相关合并请求
隐藏空白字符变更
内嵌
并排
正在显示
3 个修改的文件
包含
91 行增加
和
29 行删除
+91
-29
Parser.java
h2/src/main/org/h2/command/Parser.java
+44
-29
TestScript.java
h2/src/test/org/h2/test/scripts/TestScript.java
+1
-0
dual.sql
h2/src/test/org/h2/test/scripts/dual.sql
+46
-0
没有找到文件。
h2/src/main/org/h2/command/Parser.java
浏览文件 @
6395ede0
...
...
@@ -684,10 +684,6 @@ public class Parser {
if
(
equalsToken
(
"SESSION"
,
schemaName
))
{
// for local temporary tables
schema
=
database
.
getSchema
(
session
.
getCurrentSchemaName
());
}
else
if
(
database
.
getMode
().
sysDummy1
&&
"SYSIBM"
.
equals
(
schemaName
))
{
// IBM DB2 and Apache Derby compatibility: SYSIBM.SYSDUMMY1
schema
=
database
.
getSchema
(
session
.
getCurrentSchemaName
());
}
}
return
schema
;
...
...
@@ -1372,7 +1368,7 @@ public class Parser {
private
TableFilter
readTableFilter
()
{
Table
table
;
String
alias
=
null
;
if
(
readIf
(
"("
))
{
label:
if
(
readIf
(
"("
))
{
if
(
isSelect
())
{
Query
query
=
parseSelectUnion
();
read
(
")"
);
...
...
@@ -1406,7 +1402,19 @@ public class Parser {
table
=
parseValuesTable
(
0
).
getTable
();
}
else
{
String
tableName
=
readIdentifierWithSchema
(
null
);
Schema
schema
=
getSchema
();
Schema
schema
;
if
(
schemaName
==
null
)
{
schema
=
null
;
}
else
{
schema
=
findSchema
(
schemaName
);
if
(
schema
==
null
)
{
if
(
isDualTable
(
tableName
))
{
table
=
getDualTable
(
false
);
break
label
;
}
throw
DbException
.
get
(
ErrorCode
.
SCHEMA_NOT_FOUND_1
,
schemaName
);
}
}
boolean
foundLeftBracket
=
readIf
(
"("
);
if
(
foundLeftBracket
&&
readIf
(
"INDEX"
))
{
// Sybase compatibility with
...
...
@@ -1442,13 +1450,8 @@ public class Parser {
}
table
=
new
FunctionTable
(
mainSchema
,
session
,
expr
,
call
);
}
}
else
if
(
equalsToken
(
"DUAL"
,
tableName
))
{
table
=
getDualTable
(
false
);
}
else
if
(
database
.
getMode
().
sysDummy1
&&
equalsToken
(
"SYSDUMMY1"
,
tableName
))
{
table
=
getDualTable
(
false
);
}
else
{
table
=
readTableOrView
(
tableName
);
table
=
readTableOrView
(
tableName
,
true
);
}
}
ArrayList
<
String
>
derivedColumnNames
=
null
;
...
...
@@ -5933,30 +5936,42 @@ public class Parser {
return
command
;
}
boolean
isDualTable
(
String
tableName
)
{
return
((
schemaName
==
null
||
equalsToken
(
schemaName
,
"SYS"
))
&&
equalsToken
(
"DUAL"
,
tableName
))
||
(
database
.
getMode
().
sysDummy1
&&
(
schemaName
==
null
||
equalsToken
(
schemaName
,
"SYSIBM"
)))
&&
equalsToken
(
"SYSDUMMY1"
,
tableName
);
}
private
Table
readTableOrView
()
{
return
readTableOrView
(
readIdentifierWithSchema
(
null
));
return
readTableOrView
(
readIdentifierWithSchema
(
null
)
,
false
);
}
private
Table
readTableOrView
(
String
tableName
)
{
// same algorithm than readSequence
private
Table
readTableOrView
(
String
tableName
,
boolean
allowDual
)
{
if
(
schemaName
!=
null
)
{
return
getSchema
().
getTableOrView
(
session
,
tableName
);
}
Table
table
=
database
.
getSchema
(
session
.
getCurrentSchemaName
())
.
resolveTableOrView
(
session
,
tableName
);
if
(
table
!=
null
)
{
return
table
;
}
String
[]
schemaNames
=
session
.
getSchemaSearchPath
();
if
(
schemaNames
!=
null
)
{
for
(
String
name
:
schemaNames
)
{
Schema
s
=
database
.
getSchema
(
name
);
table
=
s
.
resolveTableOrView
(
session
,
tableName
);
if
(
table
!=
null
)
{
return
table
;
Table
table
=
getSchema
().
resolveTableOrView
(
session
,
tableName
);
if
(
table
!=
null
)
{
return
table
;
}
}
else
{
Table
table
=
database
.
getSchema
(
session
.
getCurrentSchemaName
())
.
resolveTableOrView
(
session
,
tableName
);
if
(
table
!=
null
)
{
return
table
;
}
String
[]
schemaNames
=
session
.
getSchemaSearchPath
();
if
(
schemaNames
!=
null
)
{
for
(
String
name
:
schemaNames
)
{
Schema
s
=
database
.
getSchema
(
name
);
table
=
s
.
resolveTableOrView
(
session
,
tableName
);
if
(
table
!=
null
)
{
return
table
;
}
}
}
}
if
(
allowDual
&&
isDualTable
(
tableName
))
{
return
getDualTable
(
false
);
}
throw
DbException
.
get
(
ErrorCode
.
TABLE_OR_VIEW_NOT_FOUND_1
,
tableName
);
}
...
...
This diff is collapsed.
Click to expand it.
h2/src/test/org/h2/test/scripts/TestScript.java
浏览文件 @
6395ede0
...
...
@@ -87,6 +87,7 @@ public class TestScript extends TestBase {
testScript
(
"testScript.sql"
);
testScript
(
"derived-column-names.sql"
);
testScript
(
"dual.sql"
);
testScript
(
"indexes.sql"
);
testScript
(
"information_schema.sql"
);
testScript
(
"joins.sql"
);
...
...
This diff is collapsed.
Click to expand it.
h2/src/test/org/h2/test/scripts/dual.sql
0 → 100644
浏览文件 @
6395ede0
-- Copyright 2004-2018 H2 Group. Multiple-Licensed under the MPL 2.0,
-- and the EPL 1.0 (http://h2database.com/html/license.html).
-- Initial Developer: H2 Group
--
SELECT
*
FROM
DUAL
;
>>
1
CREATE
TABLE
DUAL
(
A
INT
);
>
ok
INSERT
INTO
DUAL
VALUES
(
2
);
>
update
count
:
1
SELECT
A
FROM
DUAL
;
>>
2
SELECT
*
FROM
SYS
.
DUAL
;
>>
1
DROP
TABLE
DUAL
;
>
ok
SET
MODE
DB2
;
>
ok
SELECT
*
FROM
SYSDUMMY1
;
>>
1
CREATE
TABLE
SYSDUMMY1
(
A
INT
);
>
ok
INSERT
INTO
SYSDUMMY1
VALUES
(
2
);
>
update
count
:
1
SELECT
A
FROM
SYSDUMMY1
;
>>
2
SELECT
*
FROM
SYSIBM
.
SYSDUMMY1
;
>>
1
DROP
TABLE
SYSDUMMY1
;
>
ok
SET
MODE
Regular
;
>
ok
This diff is collapsed.
Click to expand it.
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论