Commit ac373770 authored by casualet's avatar casualet

update

parent 51858ff1
mysql-src/
normal.sh
obj/
tags
shadow/
This diff is collapsed.
find -name "*.cc" -o -name "*.hh" -o -name "*.tt" -o -name "*.c" -o -name "*.h" -o -name "*.cpp" > cscope.files
cscope -R -b -i cscope.files
This diff is collapsed.
a=`cat all`
final=""
arr=($a)
for item in ${arr[@]};do
final+=" "
final+=${item}
done
echo ${final}
...@@ -477,6 +477,7 @@ embeddedTHDCleanup(THD *thd) ...@@ -477,6 +477,7 @@ embeddedTHDCleanup(THD *thd)
void void
ProxyState::safeCreateEmbeddedTHD() ProxyState::safeCreateEmbeddedTHD()
{ {
//THD is created by new, so there is no Lex or other things in it.
THD *thd = static_cast<THD *>(create_embedded_thd(0)); THD *thd = static_cast<THD *>(create_embedded_thd(0));
assert(thd); assert(thd);
thds.push_back(std::unique_ptr<THD, thds.push_back(std::unique_ptr<THD,
......
...@@ -98,6 +98,7 @@ class DropColumnSubHandler : public AlterSubHandler { ...@@ -98,6 +98,7 @@ class DropColumnSubHandler : public AlterSubHandler {
} }
}; };
class ChangeColumnSubHandler : public AlterSubHandler { class ChangeColumnSubHandler : public AlterSubHandler {
virtual LEX * virtual LEX *
rewriteAndUpdate(Analysis &a, LEX *lex, const Preamble &preamble) rewriteAndUpdate(Analysis &a, LEX *lex, const Preamble &preamble)
......
...@@ -74,6 +74,7 @@ class CreateTableHandler : public DDLHandler { ...@@ -74,6 +74,7 @@ class CreateTableHandler : public DDLHandler {
//对现有的每个field, 如id,name, 都在内部通过createAndRewriteField函数扩展成多个洋葱+salt. //对现有的每个field, 如id,name, 都在内部通过createAndRewriteField函数扩展成多个洋葱+salt.
//其中洋葱有多个层, 其通过newCreateField函数, 决定了类型, 而新的field的名字, 就是洋葱的名字传过去的. //其中洋葱有多个层, 其通过newCreateField函数, 决定了类型, 而新的field的名字, 就是洋葱的名字传过去的.
//扩展以后, 就是新的Create_field类型了, 这了返回的list是被继续传到引用参数里面的, 很奇怪的用法.
new_lex->alter_info.create_list = new_lex->alter_info.create_list =
accumList<Create_field>(it, accumList<Create_field>(it,
[&a, &tm, &key_data] (List<Create_field> out_list, [&a, &tm, &key_data] (List<Create_field> out_list,
......
...@@ -513,7 +513,6 @@ static void ...@@ -513,7 +513,6 @@ static void
process_field_value_pairs(List_iterator<Item> fd_it, process_field_value_pairs(List_iterator<Item> fd_it,
List_iterator<Item> val_it, Analysis &a) List_iterator<Item> val_it, Analysis &a)
{ {
// std::cout<<__PRETTY_FUNCTION__<<":"<<__LINE__<<":"<<__FILE__<<":"<<__LINE__<<std::endl<<std::endl;
for (;;) { for (;;) {
const Item *const field_item = fd_it++; const Item *const field_item = fd_it++;
const Item *const value_item = val_it++; const Item *const value_item = val_it++;
...@@ -524,7 +523,6 @@ process_field_value_pairs(List_iterator<Item> fd_it, ...@@ -524,7 +523,6 @@ process_field_value_pairs(List_iterator<Item> fd_it,
assert(field_item->type() == Item::FIELD_ITEM); assert(field_item->type() == Item::FIELD_ITEM);
const Item_field *const ifd = const Item_field *const ifd =
static_cast<const Item_field *>(field_item); static_cast<const Item_field *>(field_item);
std::cout<<__PRETTY_FUNCTION__<<":"<<__LINE__<<":"<<__FILE__<<":"<<__LINE__<<std::endl<<std::endl;
gatherAndAddAnalysisRewritePlanForFieldValuePair(*ifd, gatherAndAddAnalysisRewritePlanForFieldValuePair(*ifd,
*value_item, a); *value_item, a);
} }
......
...@@ -1335,13 +1335,10 @@ const std::unique_ptr<SQLDispatcher> Rewriter::ddl_dispatcher = ...@@ -1335,13 +1335,10 @@ const std::unique_ptr<SQLDispatcher> Rewriter::ddl_dispatcher =
AbstractQueryExecutor * AbstractQueryExecutor *
Rewriter::dispatchOnLex(Analysis &a, const std::string &query) Rewriter::dispatchOnLex(Analysis &a, const std::string &query)
{ {
std::cout<<__PRETTY_FUNCTION__<<":"<<__LINE__<<":"<<__FILE__<<":"<<__LINE__<<std::endl<<std::endl;
std::unique_ptr<query_parse> p; std::unique_ptr<query_parse> p;
try { try {
p = std::unique_ptr<query_parse>( p = std::unique_ptr<query_parse>(
new query_parse(a.getDatabaseName(), query)); new query_parse(a.getDatabaseName(), query));
std::cout<<"query_parse: "<<query<<std::endl;
} catch (const CryptDBError &e) { } catch (const CryptDBError &e) {
FAIL_TextMessageError("Bad Query: [" + query + "]\n" FAIL_TextMessageError("Bad Query: [" + query + "]\n"
"Error Data: " + e.msg); "Error Data: " + e.msg);
...@@ -1358,7 +1355,6 @@ Rewriter::dispatchOnLex(Analysis &a, const std::string &query) ...@@ -1358,7 +1355,6 @@ Rewriter::dispatchOnLex(Analysis &a, const std::string &query)
lex->select_lex.table_list.first) { lex->select_lex.table_list.first) {
const std::string &db = lex->select_lex.table_list.first->db; const std::string &db = lex->select_lex.table_list.first->db;
if (equalsIgnoreCase("INFORMATION_SCHEMA", db)) { if (equalsIgnoreCase("INFORMATION_SCHEMA", db)) {
std::cout<<"we return SimpleExecutor here"<<__FILE__<<":"<<__LINE__<<std::endl;
return new SimpleExecutor(); return new SimpleExecutor();
} }
} }
......
...@@ -289,17 +289,23 @@ rewrite_key(const TableMeta &tm, const Key &key, const Analysis &a) ...@@ -289,17 +289,23 @@ rewrite_key(const TableMeta &tm, const Key &key, const Analysis &a)
{ {
std::vector<Key *> output_keys; std::vector<Key *> output_keys;
//从左到右分别是三种类型: oOPE, oDET, oPLAIN, 对于每个语句的index都是这样
//比如自己要alter table add 的index, 其对应index的名字, 以及相关的column信息
//比如create的时候, 产生的index, 其对应的名字以及相关的columns, 这样包含在key里面了
const std::vector<onion> key_onions = getOnionIndexTypes(); const std::vector<onion> key_onions = getOnionIndexTypes();
for (auto onion_it : key_onions) { for (auto onion_it : key_onions) {
const onion o = onion_it; const onion o = onion_it;
//原始key的拷贝
Key *const new_key = key.clone(current_thd->mem_root); Key *const new_key = key.clone(current_thd->mem_root);
//通过key的原始名字+onion+tm哈希获得新的key名字,用的是std::hash<string>算法.
// Set anonymous name. // Set anonymous name.
const std::string new_name = const std::string new_name =
a.getAnonIndexName(tm, getOriginalKeyName(key), o); a.getAnonIndexName(tm, getOriginalKeyName(key), o);
//设置key的新名字, 以及新的key对应的column清空??
new_key->name = string_to_lex_str(new_name); new_key->name = string_to_lex_str(new_name);
new_key->columns.empty(); new_key->columns.empty();
//遍历原始的key的columns, 改写, 变成新key的colukns
// Set anonymous columns. // Set anonymous columns.
auto col_it = auto col_it =
RiboldMYSQL::constList_iterator<Key_part_spec>(key.columns); RiboldMYSQL::constList_iterator<Key_part_spec>(key.columns);
...@@ -309,10 +315,12 @@ rewrite_key(const TableMeta &tm, const Key &key, const Analysis &a) ...@@ -309,10 +315,12 @@ rewrite_key(const TableMeta &tm, const Key &key, const Analysis &a)
output_keys.push_back(new_key); output_keys.push_back(new_key);
break; break;
} }
//复制一个column信息
Key_part_spec *const new_key_part = copyWithTHD(key_part); Key_part_spec *const new_key_part = copyWithTHD(key_part);
//原始的key_part, 也就是一个column, 里面取一个field_name出来
const std::string field_name = const std::string field_name =
convert_lex_str(new_key_part->field_name); convert_lex_str(new_key_part->field_name);
//通过column查tablemeta, 然后差当前的onion在不在那个tablemeta里面
// > the onion may not exist; ie oPLAIN with SENSITIVE and not // > the onion may not exist; ie oPLAIN with SENSITIVE and not
// an AUTO INCREMENT column // an AUTO INCREMENT column
const FieldMeta &fm = a.getFieldMeta(tm, field_name); const FieldMeta &fm = a.getFieldMeta(tm, field_name);
...@@ -320,13 +328,17 @@ rewrite_key(const TableMeta &tm, const Key &key, const Analysis &a) ...@@ -320,13 +328,17 @@ rewrite_key(const TableMeta &tm, const Key &key, const Analysis &a)
if (NULL == om) { if (NULL == om) {
break; break;
} }
//如果存在, 那么新的column的名字就是洋葱的名字, 然后new_key的column就确定了
//可以看到, 对于索引里面的每个field, 都选择一个洋葱, 如果没有合适的, 则不选择.
new_key_part->field_name = new_key_part->field_name =
string_to_lex_str(om->getAnonOnionName()); string_to_lex_str(om->getAnonOnionName());
new_key->columns.push_back(new_key_part); new_key->columns.push_back(new_key_part);
} }
} }
//上面, 对于一个key来说, 可以查三个洋葱
//对于每个洋葱,都可能构造一个key, 这是根据这个key对应的columns里面有没有洋葱, 有则选进来. 所以, 列扩展了以后, 索引也扩展了.
//主键特殊处理, 之根据一个洋葱构造.
// Only create one PRIMARY KEY. // Only create one PRIMARY KEY.
if (Key::PRIMARY == key.type) { if (Key::PRIMARY == key.type) {
if (output_keys.size() > 0) { if (output_keys.size() > 0) {
......
...@@ -106,7 +106,6 @@ static Item_null * ...@@ -106,7 +106,6 @@ static Item_null *
make_null(const std::string &name = "") make_null(const std::string &name = "")
{ {
char *const n = current_thd->strdup(name.c_str()); char *const n = current_thd->strdup(name.c_str());
std::cout<<"test_make_null in"<<__FILE__<<std::string(n) <<std::endl;
return new Item_null(n); return new Item_null(n);
} }
...@@ -124,11 +123,8 @@ xlua_pushlstring(lua_State *const l, const std::string &s) ...@@ -124,11 +123,8 @@ xlua_pushlstring(lua_State *const l, const std::string &s)
lua_pushlstring(l, s.data(), s.length()); lua_pushlstring(l, s.data(), s.length());
} }
static int myvariable = 1;
static int static int
connect(lua_State *const L) { connect(lua_State *const L) {
std::cout<<myvariable++<<std::endl;
std::cout<<__PRETTY_FUNCTION__<<":"<<__LINE__<<":"<<__FILE__<<":"<<__LINE__<<std::endl<<std::endl;
//TODO: added, why test here? //TODO: added, why test here?
assert(test64bitZZConversions()); assert(test64bitZZConversions());
...@@ -136,6 +132,7 @@ connect(lua_State *const L) { ...@@ -136,6 +132,7 @@ connect(lua_State *const L) {
scoped_lock l(&big_lock); scoped_lock l(&big_lock);
assert(0 == mysql_thread_init()); assert(0 == mysql_thread_init());
//来自lua脚本的参数.
const std::string client = xlua_tolstring(L, 1); const std::string client = xlua_tolstring(L, 1);
const std::string server = xlua_tolstring(L, 2); const std::string server = xlua_tolstring(L, 2);
const uint port = luaL_checkint(L, 3); const uint port = luaL_checkint(L, 3);
...@@ -158,10 +155,9 @@ connect(lua_State *const L) { ...@@ -158,10 +155,9 @@ connect(lua_State *const L) {
<< "password = " << psswd; << "password = " << psswd;
const std::string &false_str = "FALSE"; const std::string &false_str = "FALSE";
//const std::string &mkey = "113341234"; // XXX do not change as const std::string &mkey = "113341234"; // XXX do not change as
// it's used for tpcc exps // it's used for tpcc exps
const std::string &mkey = "887766908"; //const std::string &mkey = "887766908";
std::cout<<"!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!master key: "<<mkey<<std::endl;
shared_ps = shared_ps =
new SharedProxyState(ci, embed_dir, mkey, new SharedProxyState(ci, embed_dir, mkey,
determineSecurityRating()); determineSecurityRating());
...@@ -228,7 +224,6 @@ connect(lua_State *const L) { ...@@ -228,7 +224,6 @@ connect(lua_State *const L) {
static int static int
disconnect(lua_State *const L) { disconnect(lua_State *const L) {
std::cout<<__PRETTY_FUNCTION__<<":"<<__LINE__<<":"<<__FILE__<<":"<<__LINE__<<std::endl<<std::endl;
ANON_REGION(__func__, &perf_cg); ANON_REGION(__func__, &perf_cg);
scoped_lock l(&big_lock); scoped_lock l(&big_lock);
assert(0 == mysql_thread_init()); assert(0 == mysql_thread_init());
...@@ -253,12 +248,10 @@ disconnect(lua_State *const L) { ...@@ -253,12 +248,10 @@ disconnect(lua_State *const L) {
static int static int
rewrite(lua_State *const L) { rewrite(lua_State *const L) {
std::cout<<__PRETTY_FUNCTION__<<":"<<__LINE__<<":"<<__FILE__<<":"<<__LINE__<<std::endl<<std::endl;
ANON_REGION(__func__, &perf_cg); ANON_REGION(__func__, &perf_cg);
scoped_lock l(&big_lock); scoped_lock l(&big_lock);
assert(0 == mysql_thread_init()); assert(0 == mysql_thread_init());
const std::string client = xlua_tolstring(L, 1); const std::string client = xlua_tolstring(L, 1);
if (clients.find(client) == clients.end()) { if (clients.find(client) == clients.end()) {
lua_pushnil(L); lua_pushnil(L);
...@@ -286,6 +279,7 @@ rewrite(lua_State *const L) { ...@@ -286,6 +279,7 @@ rewrite(lua_State *const L) {
ps->getSchemaInfo(); ps->getSchemaInfo();
c_wrapper->schema_info_refs.push_back(schema); c_wrapper->schema_info_refs.push_back(schema);
//parse, rewrite, delta, adjust, returnMeta,
std::unique_ptr<QueryRewrite> qr = std::unique_ptr<QueryRewrite> qr =
std::unique_ptr<QueryRewrite>(new QueryRewrite( std::unique_ptr<QueryRewrite>(new QueryRewrite(
Rewriter::rewrite(query, *schema.get(), Rewriter::rewrite(query, *schema.get(),
......
...@@ -109,9 +109,10 @@ query_parse::query_parse(const std::string &db, const std::string &q) ...@@ -109,9 +109,10 @@ query_parse::query_parse(const std::string &db, const std::string &q)
} else { } else {
//annot = NULL; //annot = NULL;
} }
try { try {
//set db
t->set_db(db.data(), db.length()); t->set_db(db.data(), db.length());
//reset tdb, what does cur_thd conrespond to??
mysql_reset_thd_for_next_command(t); mysql_reset_thd_for_next_command(t);
t->stmt_arena->state = Query_arena::STMT_INITIALIZED; t->stmt_arena->state = Query_arena::STMT_INITIALIZED;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment