12.7子查询

在表达式中,子查询(即,子选择)由物品继承自item_subselect.

隐藏表演单身的差异选择联盟S,item_subselect.使用两个不同的发动机,它提供统一接口以访问底层选择或者联盟subselect_single_select_engine.subselect_union_engine.,两者都是遗传的subselect_engine.)。

发动机将于当时创建item_subselect.被建成(item_subselect :: init.方法)。

Item_subselect :: fix_fields()发动机 - >准备()将被称为。

在调用任何值获取方法之前(val_int.val_str.caving_value.(如果是行结果))引擎 - > exec()将被调用,执行查询,或者如果子查询可缓存并且已经执行,则只能执行任何操作。

继承的项目有自己的选择_result类。它们有两种类型:

  • select_singlerow_subselect.,存储给定行的值item_singlerow_subselect.缓存send_data()呼叫,报告错误如果item_subselect.有'分配'属性。

  • select_exists_subselect.只是作为价值存储1item_exists_subselect.send_data()称呼。自从item_in_subselect.item_allany_subselect.是遗传的item_exists_subselect,他们使用它select_result.班级。

item_subselect.永远不会打电话给清理(​​)程序加入。每一个加入::清理将会通知清理(​​)为内在加入s。最上面的加入::清理将被调用mysql_select()或者mysql_union()