preparedstatement批量执行不同的sql_一起做个简单的数据库(二):世上最简单的SQL编译器和虚拟机...

本文探讨了如何使用PreparedStatement进行批量SQL执行,通过预编译和字节码缓存来降低复杂性和提高数据库操作的性能。内容主要集中在简化虚拟机处理,避免语法错误,并专注于性能优化方面。
摘要由CSDN通过智能技术生成

a3893c05cb2678cbbc3ce8c8589d3923.png

本系列文章一共13篇,本文为第2篇,请关注公众号,后续文章会陆续发布。 系列文章第1篇:《手把手教你从零开始实现一个数据库系统》我们正在实现SQLlite的克隆。SQLite的前端是SQL编译器,它接收字符串并输出我们称之为字节码的内部表达式。字节码被传输到虚拟机并执行。

cfd558297041689082652743cc7f3813.png

SQLite架构上述将事情分成两步处理有两点好处:
  • 降低每个部分的复杂性(例如虚拟机不用考虑语法错误)

  • 通过对查询语句的批量编译和字节码的缓存来提高性能

在这样的设计思路下,让我们重构主函数并在此过程中支持两个新关键字:

int main(int argc, char* argv[]) {

InputBuffer* input_buffer = new_input_buffer();

while (true) {

print_prompt();

read_input(input_buffer);

- if (strcmp(input_buffer->buffer, ".exit") == 0) {

- exit(EXIT_SUCCESS);

- } else {

- printf("Unrecognized command '%s'.\n", input_buffer->buffer);

+ if (input_buffer->buffer[0] == '.') {

+ switch (do_meta_command(input_buffer)) {

+ case (META_COMMAND_SUCCESS):

+ continue;

+ case (META_COMMAND_UNRECOGNIZED_COMMAND):

+ printf("Unrecognized command '%s'\n", input_buffer->buffer);

+ continue;

+ }

}

+

+ Statement statement;

+ switch (prepare_statement(input_buffer, &statement)) {

+ case (PREPARE_SUCCESS):

+ break;

+ case (PREPARE_UNRECOGNIZED_STATEMENT):

+ printf("Unrecognized keyword at start of '%s'.\n",

+ input_buffer->buffer);

+ continue;

+ }

+

+ execute_statement(&statement);

+ printf("Executed.\

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值