6.5 选择 select

select 选择的实现基于表扫描,逐条遍历所有记录,使用physical_scan_evaluate_expression计算表达式的值,判断当前记录是否满足选择条件,如果满足,返回1;否则记录迭代下一条记录,直到找到满足条件的记录;否则就是没有满足条件的记录,返回0

主要函数

physical_scan physical_scan_select_create(physical_scan scan);

创建一个选择关系的物理计划

void physical_scan_select_init_scan(physical_scan *scan);

初始选择关系的物理计划

int physical_scan_select_before_first(physical_scan *scan);

将要读取的位置移动到记录的第0条

int physical_scan_select_next(physical_scan *scan);

通过表扫描遍历所有记录,判断下一条是否满足选择条件的记录,如果存在,就返回1;否则就返回1

int physical_scan_select_close(physical_scan *scan);

关闭选择关系的扫描

variant physical_scan_select_get_val(physical_scan scan, char tableName, char fieldName);

(未实现)获得tableName表中fieldName字段的值

variant physical_scan_select_get_val_by_index(physical_scan scan, int index);

获得索引字段的值

int physical_scan_select_get_int_by_index(physical_scan *scan, int index);

当索引字段为Int时,获得索引字段的int值

int physical_scan_select_get_string_by_index(physical_scan scan, int index, char value);

当索引字段为字符串时,获得索引字段的字符串值

int physical_scan_select_get_int(physical_scan scan, char tableName, char *fieldName);

获得tableName表中fieldName字段的int值

int physical_scan_select_get_string(physical_scan scan, char tableName, char fieldName, char value);

获得tableName表中fieldName字段的字符串值

int physical_scan_select_has_field(physical_scan scan, char tableName, char *fieldName);

判断tableName表中是否含有fieldName字段,如果有,返回1,否则返回0

field_info physical_scan_select_get_field(physical_scan scan, char tableName, char fieldName);

获得tableName表中fieldName字段的详细信息field_info结构体

arraylist physical_scan_select_get_fields_name(physical_scan scan, char *tableName);

获得tableName表中所有字段的名称,返回一个包含所有字段名称的arraylist

int physical_scan_select_set_int(physical_scan scan, char tableName, char *fieldName, int value);

向tableName表中fieldName字段写入一个整数

int physical_scan_select_set_string(physical_scan scan, char tableName, char fieldName, char value);

向tableName表中fieldName字段写入一个字符串

int physical_scan_select_delete(physical_scan *scan);

删除创建的临时记录页面

int physical_scan_select_insert(physical_scan *scan);

插入一个临时的记录页面

int physical_scan_select_get_rid(physical_scan scan, record_id recordId);

int physical_scan_select_moveto_rid(physical_scan scan, record_id recordId);