摘要:
严格上来说monetdbe_query_internal不仅仅是查询执行函数, query这个名字有点误导人.这个函数做的事情可以囊括了一个数据库的查询查询执行的核心环节.
本文对该函数进行分析, 以深化对数据库查询之心的理解.
函数定义:
static char*
monetdbe_query_internal(monetdbe_database_internal *mdbe, char* query, monetdbe_result** result, monetdbe_cnt* affected_rows, int *prepare_id, char language)
{char *nq = NULL;Client c = mdbe->c;mvc* m = NULL;backend *b;size_t query_len, input_query_len, prep_len = 0;buffer query_buf;stream *query_stream = NULL;bstream *old_bstream = c->fdin;stream *fdout = c->fdout;bool fdin_changed = false;if (result)*result = NULL;if ((mdbe->msg = validate_database_handle(mdbe, "monetdbe.monetdbe_query_internal")) != MAL_SUCCEED)return mdbe->msg;if ((mdbe->msg = getSQLContext(c, NULL, &m, NULL)) != MAL_SUCCEED)goto cleanup;b = (backend *) c->sql