Skip to content
项目
群组
代码片段
帮助
正在加载...
帮助
为 GitLab 提交贡献
登录/注册
切换导航
H
h2database
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
分枝图
比较
统计图
议题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
计划
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
分枝图
统计图
创建新议题
作业
提交
议题看板
打开侧边栏
Administrator
h2database
Commits
a5472db7
提交
a5472db7
authored
12月 21, 2018
作者:
Evgenij Ryazanov
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Add explicit table query
上级
c6933120
全部展开
隐藏空白字符变更
内嵌
并排
正在显示
12 个修改的文件
包含
238 行增加
和
63 行删除
+238
-63
help.csv
h2/src/docsrc/help/help.csv
+13
-0
advanced.html
h2/src/docsrc/html/advanced.html
+2
-2
Parser.java
h2/src/main/org/h2/command/Parser.java
+107
-38
FullText.java
h2/src/main/org/h2/fulltext/FullText.java
+5
-5
FullTextLucene.java
h2/src/main/org/h2/fulltext/FullTextLucene.java
+5
-5
JdbcDatabaseMetaData.java
h2/src/main/org/h2/jdbc/JdbcDatabaseMetaData.java
+2
-2
LobStorageBackend.java
h2/src/main/org/h2/store/LobStorageBackend.java
+5
-5
ParserUtil.java
h2/src/main/org/h2/util/ParserUtil.java
+9
-2
TestScript.java
h2/src/test/org/h2/test/scripts/TestScript.java
+1
-1
table.sql
h2/src/test/org/h2/test/scripts/dml/table.sql
+55
-0
with.sql
h2/src/test/org/h2/test/scripts/dml/with.sql
+19
-1
table.sql
h2/src/test/org/h2/test/scripts/functions/system/table.sql
+15
-2
没有找到文件。
h2/src/docsrc/help/help.csv
浏览文件 @
a5472db7
...
...
@@ -238,6 +238,19 @@ Lists the schemas, tables, or the columns of a table.
SHOW TABLES
"
"Commands (DML)","Explicit TABLE","
TABLE [schemaName.]tableName
","
Selects data from a table.
This command is an equivalent to SELECT * FROM TABLE.
FROM, WHERE, GROUP BY, HAVING, and WINDOW clauses from the SELECT command are not allowed.
","
TABLE TEST;
TABLE TEST ORDER BY ID FETCH FIRST ROW ONLY;
"
"Commands (DML)","WITH","
WITH [ RECURSIVE ] { name [( columnName [,...] )] AS ( select ) [,...] }
{ select | insert | update | merge | delete | createTable }
...
...
h2/src/docsrc/html/advanced.html
浏览文件 @
a5472db7
...
...
@@ -481,8 +481,8 @@ EXISTS, FALSE, FETCH, FOR, FOREIGN, FROM, FULL, GROUP, HAVING,
IF, INNER, INTERSECT, INTERSECTS, INTERVAL, IS, JOIN, LIKE,
LIMIT, LOCALTIME, LOCALTIMESTAMP, MINUS, NATURAL, NOT, NULL,
OFFSET, ON, ORDER, PRIMARY, ROW, ROWNUM, SELECT, SYSDATE,
SYSTIME, SYSTIMESTAMP, T
ODAY, TOP, TRUE, UNION, UNIQUE, VALUES
,
WHERE, WINDOW, WITH
SYSTIME, SYSTIMESTAMP, T
ABLE, TODAY, TOP, TRUE, UNION, UNIQUE
,
VALUES,
WHERE, WINDOW, WITH
</code>
</p><p>
Certain words of this list are keywords because they are functions that can be used without '()',
...
...
h2/src/main/org/h2/command/Parser.java
浏览文件 @
a5472db7
差异被折叠。
点击展开。
h2/src/main/org/h2/fulltext/FullText.java
浏览文件 @
a5472db7
...
...
@@ -110,8 +110,8 @@ public class FullText {
stat
.
execute
(
"CREATE SCHEMA IF NOT EXISTS "
+
SCHEMA
);
stat
.
execute
(
"CREATE TABLE IF NOT EXISTS "
+
SCHEMA
+
".INDEXES(ID INT AUTO_INCREMENT PRIMARY KEY, "
+
"SCHEMA VARCHAR,
TABLE
VARCHAR, COLUMNS VARCHAR, "
+
"UNIQUE(SCHEMA,
TABLE
))"
);
"SCHEMA VARCHAR,
\"TABLE\"
VARCHAR, COLUMNS VARCHAR, "
+
"UNIQUE(SCHEMA,
\"TABLE\"
))"
);
stat
.
execute
(
"CREATE TABLE IF NOT EXISTS "
+
SCHEMA
+
".WORDS(ID INT AUTO_INCREMENT PRIMARY KEY, "
+
"NAME VARCHAR, UNIQUE(NAME))"
);
...
...
@@ -176,7 +176,7 @@ public class FullText {
String
table
,
String
columnList
)
throws
SQLException
{
init
(
conn
);
PreparedStatement
prep
=
conn
.
prepareStatement
(
"INSERT INTO "
+
SCHEMA
+
".INDEXES(SCHEMA,
TABLE
, COLUMNS) VALUES(?, ?, ?)"
);
+
".INDEXES(SCHEMA,
\"TABLE\"
, COLUMNS) VALUES(?, ?, ?)"
);
prep
.
setString
(
1
,
schema
);
prep
.
setString
(
2
,
table
);
prep
.
setString
(
3
,
columnList
);
...
...
@@ -221,7 +221,7 @@ public class FullText {
throws
SQLException
{
init
(
conn
);
PreparedStatement
prep
=
conn
.
prepareStatement
(
"SELECT ID FROM "
+
SCHEMA
+
".INDEXES WHERE SCHEMA=? AND
TABLE
=?"
);
+
".INDEXES WHERE SCHEMA=? AND
\"TABLE\"
=?"
);
prep
.
setString
(
1
,
schema
);
prep
.
setString
(
2
,
table
);
ResultSet
rs
=
prep
.
executeQuery
();
...
...
@@ -929,7 +929,7 @@ public class FullText {
ArrayList
<
String
>
indexList
=
Utils
.
newSmallArrayList
();
PreparedStatement
prep
=
conn
.
prepareStatement
(
"SELECT ID, COLUMNS FROM "
+
SCHEMA
+
".INDEXES"
+
" WHERE SCHEMA=? AND
TABLE
=?"
);
" WHERE SCHEMA=? AND
\"TABLE\"
=?"
);
prep
.
setString
(
1
,
schemaName
);
prep
.
setString
(
2
,
tableName
);
rs
=
prep
.
executeQuery
();
...
...
h2/src/main/org/h2/fulltext/FullTextLucene.java
浏览文件 @
a5472db7
...
...
@@ -114,8 +114,8 @@ public class FullTextLucene extends FullText {
try
(
Statement
stat
=
conn
.
createStatement
())
{
stat
.
execute
(
"CREATE SCHEMA IF NOT EXISTS "
+
SCHEMA
);
stat
.
execute
(
"CREATE TABLE IF NOT EXISTS "
+
SCHEMA
+
".INDEXES(SCHEMA VARCHAR,
TABLE
VARCHAR, "
+
"COLUMNS VARCHAR, PRIMARY KEY(SCHEMA,
TABLE
))"
);
".INDEXES(SCHEMA VARCHAR,
\"TABLE\"
VARCHAR, "
+
"COLUMNS VARCHAR, PRIMARY KEY(SCHEMA,
\"TABLE\"
))"
);
stat
.
execute
(
"CREATE ALIAS IF NOT EXISTS FTL_CREATE_INDEX FOR \""
+
FullTextLucene
.
class
.
getName
()
+
".createIndex\""
);
stat
.
execute
(
"CREATE ALIAS IF NOT EXISTS FTL_DROP_INDEX FOR \""
+
...
...
@@ -144,7 +144,7 @@ public class FullTextLucene extends FullText {
String
table
,
String
columnList
)
throws
SQLException
{
init
(
conn
);
PreparedStatement
prep
=
conn
.
prepareStatement
(
"INSERT INTO "
+
SCHEMA
+
".INDEXES(SCHEMA,
TABLE
, COLUMNS) VALUES(?, ?, ?)"
);
+
".INDEXES(SCHEMA,
\"TABLE\"
, COLUMNS) VALUES(?, ?, ?)"
);
prep
.
setString
(
1
,
schema
);
prep
.
setString
(
2
,
table
);
prep
.
setString
(
3
,
columnList
);
...
...
@@ -166,7 +166,7 @@ public class FullTextLucene extends FullText {
init
(
conn
);
PreparedStatement
prep
=
conn
.
prepareStatement
(
"DELETE FROM "
+
SCHEMA
+
".INDEXES WHERE SCHEMA=? AND
TABLE
=?"
);
+
".INDEXES WHERE SCHEMA=? AND
\"TABLE\"
=?"
);
prep
.
setString
(
1
,
schema
);
prep
.
setString
(
2
,
table
);
int
rowCount
=
prep
.
executeUpdate
();
...
...
@@ -548,7 +548,7 @@ public class FullTextLucene extends FullText {
ArrayList
<
String
>
indexList
=
Utils
.
newSmallArrayList
();
PreparedStatement
prep
=
conn
.
prepareStatement
(
"SELECT COLUMNS FROM "
+
SCHEMA
+
".INDEXES WHERE SCHEMA=? AND
TABLE
=?"
);
+
".INDEXES WHERE SCHEMA=? AND
\"TABLE\"
=?"
);
prep
.
setString
(
1
,
schemaName
);
prep
.
setString
(
2
,
tableName
);
rs
=
prep
.
executeQuery
();
...
...
h2/src/main/org/h2/jdbc/JdbcDatabaseMetaData.java
浏览文件 @
a5472db7
...
...
@@ -1553,8 +1553,8 @@ public class JdbcDatabaseMetaData extends TraceObject implements
* IF, INNER, INTERSECT, INTERSECTS, INTERVAL, IS, JOIN, LIKE,
* LIMIT, LOCALTIME, LOCALTIMESTAMP, MINUS, NATURAL, NOT, NULL,
* OFFSET, ON, ORDER, PRIMARY, ROW, ROWNUM, SELECT, SYSDATE,
* SYSTIME, SYSTIMESTAMP, T
ODAY, TOP, TRUE, UNION, UNIQUE, VALUES
,
* WHERE, WINDOW, WITH
* SYSTIME, SYSTIMESTAMP, T
ABLE, TODAY, TOP, TRUE, UNION, UNIQUE
,
*
VALUES,
WHERE, WINDOW, WITH
* </pre>
*
* @return a list of additional the keywords
...
...
h2/src/main/org/h2/store/LobStorageBackend.java
浏览文件 @
a5472db7
...
...
@@ -139,10 +139,10 @@ public class LobStorageBackend implements LobStorageInterface {
}
if
(
create
)
{
stat
.
execute
(
"CREATE CACHED TABLE IF NOT EXISTS "
+
LOBS
+
"(ID BIGINT PRIMARY KEY, BYTE_COUNT BIGINT,
TABLE
INT) HIDDEN"
);
"(ID BIGINT PRIMARY KEY, BYTE_COUNT BIGINT,
\"TABLE\"
INT) HIDDEN"
);
stat
.
execute
(
"CREATE INDEX IF NOT EXISTS "
+
"INFORMATION_SCHEMA.INDEX_LOB_TABLE ON "
+
LOBS
+
"(
TABLE
)"
);
LOBS
+
"(
\"TABLE\"
)"
);
stat
.
execute
(
"CREATE CACHED TABLE IF NOT EXISTS "
+
LOB_MAP
+
"(LOB BIGINT, SEQ INT, POS BIGINT, HASH INT, "
+
"BLOCK BIGINT, PRIMARY KEY(LOB, SEQ)) HIDDEN"
);
...
...
@@ -191,7 +191,7 @@ public class LobStorageBackend implements LobStorageInterface {
public
void
removeAllForTable
(
int
tableId
)
{
init
();
try
{
String
sql
=
"SELECT ID FROM "
+
LOBS
+
" WHERE
TABLE
= ?"
;
String
sql
=
"SELECT ID FROM "
+
LOBS
+
" WHERE
\"TABLE\"
= ?"
;
PreparedStatement
prep
=
prepare
(
sql
);
prep
.
setInt
(
1
,
tableId
);
ResultSet
rs
=
prep
.
executeQuery
();
...
...
@@ -414,7 +414,7 @@ public class LobStorageBackend implements LobStorageInterface {
synchronized
(
database
)
{
synchronized
(
conn
.
getSession
())
{
String
sql
=
"INSERT INTO "
+
LOBS
+
"(ID, BYTE_COUNT,
TABLE
) VALUES(?, ?, ?)"
;
"(ID, BYTE_COUNT,
\"TABLE\"
) VALUES(?, ?, ?)"
;
PreparedStatement
prep
=
prepare
(
sql
);
prep
.
setLong
(
1
,
lobId
);
prep
.
setLong
(
2
,
byteCount
);
...
...
@@ -456,7 +456,7 @@ public class LobStorageBackend implements LobStorageInterface {
reuse
(
sql
,
prep
);
sql
=
"INSERT INTO "
+
LOBS
+
"(ID, BYTE_COUNT,
TABLE
) "
+
"(ID, BYTE_COUNT,
\"TABLE\"
) "
+
"SELECT ?, BYTE_COUNT, ? FROM "
+
LOBS
+
" WHERE ID = ?"
;
prep
=
prepare
(
sql
);
...
...
h2/src/main/org/h2/util/ParserUtil.java
浏览文件 @
a5472db7
...
...
@@ -232,10 +232,15 @@ public class ParserUtil {
*/
public
static
final
int
SELECT
=
ROWNUM
+
1
;
/**
* The token "TABLE".
*/
public
static
final
int
TABLE
=
SELECT
+
1
;
/**
* The token "TRUE".
*/
public
static
final
int
TRUE
=
SELECT
+
1
;
public
static
final
int
TRUE
=
TABLE
+
1
;
/**
* The token "UNION".
...
...
@@ -490,7 +495,9 @@ public class ParserUtil {
}
return
IDENTIFIER
;
case
'T'
:
if
(
eq
(
"TRUE"
,
s
,
ignoreCase
,
start
,
end
))
{
if
(
eq
(
"TABLE"
,
s
,
ignoreCase
,
start
,
end
))
{
return
TABLE
;
}
else
if
(
eq
(
"TRUE"
,
s
,
ignoreCase
,
start
,
end
))
{
return
TRUE
;
}
if
(
additionalKeywords
)
{
...
...
h2/src/test/org/h2/test/scripts/TestScript.java
浏览文件 @
a5472db7
...
...
@@ -155,7 +155,7 @@ public class TestScript extends TestDb {
testScript
(
"ddl/"
+
s
+
".sql"
);
}
for
(
String
s
:
new
String
[]
{
"delete"
,
"error_reporting"
,
"insertIgnore"
,
"merge"
,
"mergeUsing"
,
"replace"
,
"script"
,
"select"
,
"show"
,
"with"
})
{
"script"
,
"select"
,
"show"
,
"
table"
,
"
with"
})
{
testScript
(
"dml/"
+
s
+
".sql"
);
}
for
(
String
s
:
new
String
[]
{
"help"
})
{
...
...
h2/src/test/org/h2/test/scripts/dml/table.sql
0 → 100644
浏览文件 @
a5472db7
-- 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
--
CREATE
TABLE
TEST
(
A
INT
,
B
INT
,
C
INT
);
>
ok
INSERT
INTO
TEST
VALUES
(
1
,
1
,
1
),
(
1
,
1
,
2
),
(
1
,
1
,
3
),
(
1
,
2
,
1
),
(
1
,
2
,
2
),
(
1
,
2
,
3
),
(
2
,
1
,
1
),
(
2
,
1
,
2
),
(
2
,
1
,
3
),
(
2
,
2
,
1
),
(
2
,
2
,
2
),
(
2
,
2
,
3
);
>
update
count
:
12
TABLE
TEST
ORDER
BY
A
,
B
;
>
A
B
C
>
-
-
-
>
1
1
1
>
1
1
2
>
1
1
3
>
1
2
1
>
1
2
2
>
1
2
3
>
2
1
1
>
2
1
2
>
2
1
3
>
2
2
1
>
2
2
2
>
2
2
3
>
rows
(
partially
ordered
):
12
TABLE
TEST
ORDER
BY
A
,
B
,
C
FETCH
FIRST
4
ROWS
ONLY
;
>
A
B
C
>
-
-
-
>
1
1
1
>
1
1
2
>
1
1
3
>
1
2
1
>
rows
(
ordered
):
4
SELECT
*
FROM
(
TABLE
TEST
)
ORDER
BY
A
,
B
,
C
FETCH
FIRST
ROW
ONLY
;
>
A
B
C
>
-
-
-
>
1
1
1
>
rows
(
ordered
):
1
SELECT
(
1
,
2
,
3
)
IN
(
TABLE
TEST
);
>>
TRUE
SELECT
(
TABLE
TEST
FETCH
FIRST
ROW
ONLY
)
"ROW"
;
>
ROW
>
-------------
>
ROW
(
1
,
1
,
1
)
>
rows
:
1
DROP
TABLE
TEST
;
>
ok
h2/src/test/org/h2/test/scripts/dml/with.sql
浏览文件 @
a5472db7
...
...
@@ -129,4 +129,22 @@ WITH CTE_TEST AS (SELECT 1, 2) ((SELECT * FROM CTE_TEST));
>
1
2
>
-
-
>
1
2
>
rows
:
1
\ No newline at end of file
>
rows
:
1
CREATE
TABLE
TEST
(
A
INT
,
B
INT
)
AS
SELECT
1
,
2
;
>
ok
WITH
CTE_TEST
AS
(
TABLE
TEST
)
((
SELECT
*
FROM
CTE_TEST
));
>
A
B
>
-
-
>
1
2
>
rows
:
1
WITH
CTE_TEST
AS
(
TABLE
TEST
)
((
TABLE
CTE_TEST
));
>
A
B
>
-
-
>
1
2
>
rows
:
1
DROP
TABLE
TEST
;
>
ok
h2/src/test/org/h2/test/scripts/functions/system/table.sql
浏览文件 @
a5472db7
...
...
@@ -31,11 +31,17 @@ SELECT * FROM (SELECT * FROM TEST) x ORDER BY id;
drop
table
test
;
>
ok
call
table
(
id
int
=
(
1
));
>
ID
>
--
>
1
>
rows
:
1
explain
select
*
from
table
(
id
int
=
(
1
,
2
),
name
varchar
=
(
'Hello'
,
'World'
));
>>
SELECT
TABLE
.
ID
,
TABLE
.
NAME
FROM
TABLE
(
ID
INT
=
ROW
(
1
,
2
),
NAME
VARCHAR
=
ROW
(
'Hello'
,
'World'
))
/* function */
>>
SELECT
"TABLE"
.
ID
,
"TABLE"
.
NAME
FROM
TABLE
(
ID
INT
=
ROW
(
1
,
2
),
NAME
VARCHAR
=
ROW
(
'Hello'
,
'World'
))
/* function */
explain
select
*
from
table
(
id
int
=
ARRAY
[
1
,
2
],
name
varchar
=
ARRAY
[
'Hello'
,
'World'
]);
>>
SELECT
TABLE
.
ID
,
TABLE
.
NAME
FROM
TABLE
(
ID
INT
=
ARRAY
[
1
,
2
],
NAME
VARCHAR
=
ARRAY
[
'Hello'
,
'World'
])
/* function */
>>
SELECT
"TABLE"
.
ID
,
"TABLE"
.
NAME
FROM
TABLE
(
ID
INT
=
ARRAY
[
1
,
2
],
NAME
VARCHAR
=
ARRAY
[
'Hello'
,
'World'
])
/* function */
select
*
from
table
(
id
int
=
(
1
,
2
),
name
varchar
=
(
'Hello'
,
'World'
))
x
order
by
id
;
>
ID
NAME
...
...
@@ -43,3 +49,10 @@ select * from table(id int=(1, 2), name varchar=('Hello', 'World')) x order by i
>
1
Hello
>
2
World
>
rows
(
ordered
):
2
SELECT
*
FROM
(
TABLE
(
ID
INT
=
(
1
,
2
)));
>
ID
>
--
>
1
>
2
>
rows
:
2
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论