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)
void
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));
assert(thd);
thds.push_back(std::unique_ptr<THD,
......
......@@ -98,6 +98,7 @@ class DropColumnSubHandler : public AlterSubHandler {
}
};
class ChangeColumnSubHandler : public AlterSubHandler {
virtual LEX *
rewriteAndUpdate(Analysis &a, LEX *lex, const Preamble &preamble)
......
......@@ -74,6 +74,7 @@ class CreateTableHandler : public DDLHandler {
//对现有的每个field, 如id,name, 都在内部通过createAndRewriteField函数扩展成多个洋葱+salt.
//其中洋葱有多个层, 其通过newCreateField函数, 决定了类型, 而新的field的名字, 就是洋葱的名字传过去的.
//扩展以后, 就是新的Create_field类型了, 这了返回的list是被继续传到引用参数里面的, 很奇怪的用法.
new_lex->alter_info.create_list =
accumList<Create_field>(it,
[&a, &tm, &key_data] (List<Create_field> out_list,
......
......@@ -513,7 +513,6 @@ static void
process_field_value_pairs(List_iterator<Item> fd_it,
List_iterator<Item> val_it, Analysis &a)
{
// std::cout<<__PRETTY_FUNCTION__<<":"<<__LINE__<<":"<<__FILE__<<":"<<__LINE__<<std::endl<<std::endl;
for (;;) {
const Item *const field_item = fd_it++;
const Item *const value_item = val_it++;
......@@ -524,7 +523,6 @@ process_field_value_pairs(List_iterator<Item> fd_it,
assert(field_item->type() == Item::FIELD_ITEM);
const Item_field *const ifd =
static_cast<const Item_field *>(field_item);
std::cout<<__PRETTY_FUNCTION__<<":"<<__LINE__<<":"<<__FILE__<<":"<<__LINE__<<std::endl<<std::endl;
gatherAndAddAnalysisRewritePlanForFieldValuePair(*ifd,
*value_item, a);
}
......
......@@ -1335,13 +1335,10 @@ const std::unique_ptr<SQLDispatcher> Rewriter::ddl_dispatcher =
AbstractQueryExecutor *
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;
try {
p = std::unique_ptr<query_parse>(
new query_parse(a.getDatabaseName(), query));
std::cout<<"query_parse: "<<query<<std::endl;
} catch (const CryptDBError &e) {
FAIL_TextMessageError("Bad Query: [" + query + "]\n"
"Error Data: " + e.msg);
......@@ -1358,7 +1355,6 @@ Rewriter::dispatchOnLex(Analysis &a, const std::string &query)
lex->select_lex.table_list.first) {
const std::string &db = lex->select_lex.table_list.first->db;
if (equalsIgnoreCase("INFORMATION_SCHEMA", db)) {
std::cout<<"we return SimpleExecutor here"<<__FILE__<<":"<<__LINE__<<std::endl;
return new SimpleExecutor();
}
}
......
......@@ -289,17 +289,23 @@ rewrite_key(const TableMeta &tm, const Key &key, const Analysis &a)
{
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();
for (auto onion_it : key_onions) {
const onion o = onion_it;
//原始key的拷贝
Key *const new_key = key.clone(current_thd->mem_root);
//通过key的原始名字+onion+tm哈希获得新的key名字,用的是std::hash<string>算法.
// Set anonymous name.
const std::string new_name =
a.getAnonIndexName(tm, getOriginalKeyName(key), o);
//设置key的新名字, 以及新的key对应的column清空??
new_key->name = string_to_lex_str(new_name);
new_key->columns.empty();
//遍历原始的key的columns, 改写, 变成新key的colukns
// Set anonymous columns.
auto col_it =
RiboldMYSQL::constList_iterator<Key_part_spec>(key.columns);
......@@ -309,10 +315,12 @@ rewrite_key(const TableMeta &tm, const Key &key, const Analysis &a)
output_keys.push_back(new_key);
break;
}
//复制一个column信息
Key_part_spec *const new_key_part = copyWithTHD(key_part);
//原始的key_part, 也就是一个column, 里面取一个field_name出来
const std::string 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
// an AUTO INCREMENT column
const FieldMeta &fm = a.getFieldMeta(tm, field_name);
......@@ -320,13 +328,17 @@ rewrite_key(const TableMeta &tm, const Key &key, const Analysis &a)
if (NULL == om) {
break;
}
//如果存在, 那么新的column的名字就是洋葱的名字, 然后new_key的column就确定了
//可以看到, 对于索引里面的每个field, 都选择一个洋葱, 如果没有合适的, 则不选择.
new_key_part->field_name =
string_to_lex_str(om->getAnonOnionName());
new_key->columns.push_back(new_key_part);
}
}
//上面, 对于一个key来说, 可以查三个洋葱
//对于每个洋葱,都可能构造一个key, 这是根据这个key对应的columns里面有没有洋葱, 有则选进来. 所以, 列扩展了以后, 索引也扩展了.
//主键特殊处理, 之根据一个洋葱构造.
// Only create one PRIMARY KEY.
if (Key::PRIMARY == key.type) {
if (output_keys.size() > 0) {
......
......@@ -106,7 +106,6 @@ static Item_null *
make_null(const std::string &name = "")
{
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);
}
......@@ -124,11 +123,8 @@ xlua_pushlstring(lua_State *const l, const std::string &s)
lua_pushlstring(l, s.data(), s.length());
}
static int myvariable = 1;
static int
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?
assert(test64bitZZConversions());
......@@ -136,6 +132,7 @@ connect(lua_State *const L) {
scoped_lock l(&big_lock);
assert(0 == mysql_thread_init());
//来自lua脚本的参数.
const std::string client = xlua_tolstring(L, 1);
const std::string server = xlua_tolstring(L, 2);
const uint port = luaL_checkint(L, 3);
......@@ -158,10 +155,9 @@ connect(lua_State *const L) {
<< "password = " << psswd;
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
const std::string &mkey = "887766908";
std::cout<<"!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!master key: "<<mkey<<std::endl;
//const std::string &mkey = "887766908";
shared_ps =
new SharedProxyState(ci, embed_dir, mkey,
determineSecurityRating());
......@@ -228,7 +224,6 @@ connect(lua_State *const L) {
static int
disconnect(lua_State *const L) {
std::cout<<__PRETTY_FUNCTION__<<":"<<__LINE__<<":"<<__FILE__<<":"<<__LINE__<<std::endl<<std::endl;
ANON_REGION(__func__, &perf_cg);
scoped_lock l(&big_lock);
assert(0 == mysql_thread_init());
......@@ -253,8 +248,6 @@ disconnect(lua_State *const L) {
static int
rewrite(lua_State *const L) {
std::cout<<__PRETTY_FUNCTION__<<":"<<__LINE__<<":"<<__FILE__<<":"<<__LINE__<<std::endl<<std::endl;
ANON_REGION(__func__, &perf_cg);
scoped_lock l(&big_lock);
assert(0 == mysql_thread_init());
......@@ -286,6 +279,7 @@ rewrite(lua_State *const L) {
ps->getSchemaInfo();
c_wrapper->schema_info_refs.push_back(schema);
//parse, rewrite, delta, adjust, returnMeta,
std::unique_ptr<QueryRewrite> qr =
std::unique_ptr<QueryRewrite>(new QueryRewrite(
Rewriter::rewrite(query, *schema.get(),
......
......@@ -109,9 +109,10 @@ query_parse::query_parse(const std::string &db, const std::string &q)
} else {
//annot = NULL;
}
try {
//set db
t->set_db(db.data(), db.length());
//reset tdb, what does cur_thd conrespond to??
mysql_reset_thd_for_next_command(t);
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