Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
2dot5
ClickHouse
提交
d1edd926
C
ClickHouse
项目概览
2dot5
/
ClickHouse
通知
3
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
C
ClickHouse
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
d1edd926
编写于
7月 11, 2014
作者:
M
Michael Kolupaev
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Merge
上级
1005bbaa
变更
5
隐藏空白更改
内联
并排
Showing
5 changed file
with
53 addition
and
44 deletion
+53
-44
dbms/include/DB/Interpreters/Context.h
dbms/include/DB/Interpreters/Context.h
+0
-3
dbms/include/DB/Storages/AlterCommands.h
dbms/include/DB/Storages/AlterCommands.h
+1
-1
dbms/src/Interpreters/Context.cpp
dbms/src/Interpreters/Context.cpp
+26
-35
dbms/src/Interpreters/InterpreterAlterQuery.cpp
dbms/src/Interpreters/InterpreterAlterQuery.cpp
+25
-4
dbms/src/Storages/MergeTree/MergeTreeData.cpp
dbms/src/Storages/MergeTree/MergeTreeData.cpp
+1
-1
未找到文件。
dbms/include/DB/Interpreters/Context.h
浏览文件 @
d1edd926
...
...
@@ -271,9 +271,6 @@ public:
/// Получить запрос на CREATE таблицы.
ASTPtr
getCreateQuery
(
const
String
&
database_name
,
const
String
&
table_name
)
const
;
/// Получить запрос на CREATE таблицы. Только если он есть на диске. Нужно вызывать при заблокированной структуре таблицы.
ASTPtr
readCreateQueryFromDisk
(
const
String
&
database_name
,
const
String
&
table_name
)
const
;
/// Для методов ниже может быть необходимо захватывать mutex самостоятельно.
Poco
::
Mutex
&
getMutex
()
const
{
return
shared
->
mutex
;
}
...
...
dbms/include/DB/Storages/AlterCommands.h
浏览文件 @
d1edd926
...
...
@@ -100,7 +100,7 @@ class AlterCommands : public std::vector<AlterCommand>
public:
void
apply
(
NamesAndTypesList
&
columns
)
const
{
NamesAndTypesList
new_columns
;
NamesAndTypesList
new_columns
=
columns
;
for
(
const
AlterCommand
&
command
:
*
this
)
command
.
apply
(
new_columns
);
columns
=
new_columns
;
...
...
dbms/src/Interpreters/Context.cpp
浏览文件 @
d1edd926
...
...
@@ -305,13 +305,35 @@ void Context::detachDatabase(const String & database_name)
}
ASTPtr
Context
::
readCreateQueryFromDisk
(
const
String
&
database_name
,
const
String
&
table_name
)
const
ASTPtr
Context
::
getCreateQuery
(
const
String
&
database_name
,
const
String
&
table_name
)
const
{
StoragePtr
table
;
String
db
;
{
Poco
::
ScopedLock
<
Poco
::
Mutex
>
lock
(
shared
->
mutex
);
db
=
database_name
.
empty
()
?
current_database
:
database_name
;
table
=
getTable
(
db
,
table_name
);
}
auto
table_lock
=
table
->
lockStructure
(
false
);
/// Здесь хранится определение таблицы
String
metadata_path
=
shared
->
path
+
"metadata/"
+
escapeForFileName
(
d
atabase_name
)
+
"/"
+
escapeForFileName
(
table_name
)
+
".sql"
;
String
metadata_path
=
shared
->
path
+
"metadata/"
+
escapeForFileName
(
d
b
)
+
"/"
+
escapeForFileName
(
table_name
)
+
".sql"
;
if
(
!
Poco
::
File
(
metadata_path
).
exists
())
return
nullptr
;
{
try
{
/// Если файл .sql не предусмотрен (например, для таблиц типа ChunkRef), то движок может сам предоставить запрос CREATE.
return
table
->
getCustomCreateQuery
(
*
this
);
}
catch
(...)
{
throw
Exception
(
"Metadata file "
+
metadata_path
+
" for table "
+
db
+
"."
+
table_name
+
" doesn't exist."
,
ErrorCodes
::
TABLE_METADATA_DOESNT_EXIST
);
}
}
StringPtr
query
=
new
String
();
{
...
...
@@ -336,44 +358,13 @@ ASTPtr Context::readCreateQueryFromDisk(const String & database_name, const Stri
ASTCreateQuery
&
ast_create_query
=
typeid_cast
<
ASTCreateQuery
&>
(
*
ast
);
ast_create_query
.
attach
=
false
;
ast_create_query
.
database
=
d
atabase_name
;
ast_create_query
.
database
=
d
b
;
ast_create_query
.
query_string
=
query
;
return
ast
;
}
ASTPtr
Context
::
getCreateQuery
(
const
String
&
database_name
,
const
String
&
table_name
)
const
{
StoragePtr
table
;
String
db
;
{
Poco
::
ScopedLock
<
Poco
::
Mutex
>
lock
(
shared
->
mutex
);
db
=
database_name
.
empty
()
?
current_database
:
database_name
;
table
=
getTable
(
db
,
table_name
);
}
auto
table_lock
=
table
->
lockStructure
(
false
);
ASTPtr
res
=
readCreateQueryFromDisk
(
db
,
table_name
);
if
(
res
)
return
res
;
try
{
/// Если файл .sql не предусмотрен (например, для таблиц типа ChunkRef), то движок может сам предоставить запрос CREATE.
return
table
->
getCustomCreateQuery
(
*
this
);
}
catch
(...)
{
throw
Exception
(
"Metadata file for table "
+
db
+
"."
+
table_name
+
" doesn't exist."
,
ErrorCodes
::
TABLE_METADATA_DOESNT_EXIST
);
}
}
Settings
Context
::
getSettings
()
const
{
Poco
::
ScopedLock
<
Poco
::
Mutex
>
lock
(
shared
->
mutex
);
...
...
dbms/src/Interpreters/InterpreterAlterQuery.cpp
浏览文件 @
d1edd926
...
...
@@ -97,16 +97,37 @@ void InterpreterAlterQuery::updateMetadata(
String
metadata_path
=
path
+
"metadata/"
+
database_name_escaped
+
"/"
+
table_name_escaped
+
".sql"
;
String
metadata_temp_path
=
metadata_path
+
".tmp"
;
ASTPtr
attach_ptr
=
context
.
readCreateQueryFromDisk
(
database_name
,
table_name
);
ASTCreateQuery
&
attach
=
typeid_cast
<
ASTCreateQuery
&>
(
*
attach_ptr
);
attach
.
attach
=
true
;
StringPtr
query
=
new
String
();
{
ReadBufferFromFile
in
(
metadata_path
);
WriteBufferFromString
out
(
*
query
);
copyData
(
in
,
out
);
}
const
char
*
begin
=
query
->
data
();
const
char
*
end
=
begin
+
query
->
size
();
const
char
*
pos
=
begin
;
ParserCreateQuery
parser
;
ASTPtr
ast
;
Expected
expected
=
""
;
bool
parse_res
=
parser
.
parse
(
pos
,
end
,
ast
,
expected
);
/// Распарсенный запрос должен заканчиваться на конец входных данных или на точку с запятой.
if
(
!
parse_res
||
(
pos
!=
end
&&
*
pos
!=
';'
))
throw
Exception
(
getSyntaxErrorMessage
(
parse_res
,
begin
,
end
,
pos
,
expected
,
"in file "
+
metadata_path
),
DB
::
ErrorCodes
::
SYNTAX_ERROR
);
ast
->
query_string
=
query
;
ASTCreateQuery
&
attach
=
typeid_cast
<
ASTCreateQuery
&>
(
*
ast
);
ASTPtr
new_columns
=
InterpreterCreateQuery
::
formatColumns
(
columns
);
*
std
::
find
(
attach
.
children
.
begin
(),
attach
.
children
.
end
(),
attach
.
columns
)
=
new_columns
;
attach
.
columns
=
new_columns
;
{
Poco
::
FileOutputStream
ostr
(
metadata_temp_path
+
".tmp"
);
Poco
::
FileOutputStream
ostr
(
metadata_temp_path
);
formatAST
(
attach
,
ostr
,
0
,
false
);
}
...
...
dbms/src/Storages/MergeTree/MergeTreeData.cpp
浏览文件 @
d1edd926
...
...
@@ -485,7 +485,7 @@ void MergeTreeData::AlterDataPartTransaction::commit()
}
else
{
Poco
::
File
(
path
+
it
.
first
).
renameTo
(
it
.
second
);
Poco
::
File
(
path
+
it
.
first
).
renameTo
(
path
+
it
.
second
);
}
}
data_part
=
nullptr
;
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录