Manager

source: bluebase/ql/manager.py


dataclassclass QlOptim(push_file: bool = False, push_index: bool = False, loop_join: bool = False, hash_join: bool = False, index_join: bool = False, first_leaf: bool = False)[source]

Bases: object

Variables:
  • push_file (bool)

  • push_index (bool)

  • loop_join (bool)

  • hash_join (bool)

  • index_join (bool)

  • first_leaf (bool)

class QlManager(sm: SmManager)[source]

Bases: object

A manager for the QL component.

Variables:
optional_get_context(tables_: list[AstTable]) → QlContext[source]

Hint

이런 함수가 있으면 편하다!

optional_identify_attr(context: QlContext, name: str) → str[source]

Hint

이런 함수가 있으면 편하다!

optional_resolve_attr(context: QlContext, attr_: AstAttr) → QlAttr[source]

Hint

이런 함수가 있으면 편하다!

optional_resolve_cond(context: QlContext, cond_: AstCond) → QlCond[source]

Hint

이런 함수가 있으면 편하다!

optional_validate_select_clause(attrs_: list[AstAttr]) → None[source]

Hint

이런 함수가 있으면 편하다!

optional_validate_from_clause(tables_: list[AstTable]) → None[source]

Hint

이런 함수가 있으면 편하다!

optional_resolve_attrs(context: QlContext, attrs_: list[AstAttr]) → list[QlAttr][source]

Hint

이런 함수가 있으면 편하다!

optional_resolve_conds(context: QlContext, conds_: list[AstCond]) → dict[str, QlCond][source]

Hint

이런 함수가 있으면 편하다!

optional_resolve_assign(context: QlContext, assign_: AstAssign) → QlAssign[source]

Hint

이런 함수가 있으면 편하다!

optional_resolve_assigns(context: QlContext, assigns_: list[AstAssign]) → dict[str, QlAssign][source]

Hint

이런 함수가 있으면 편하다!

optional_pushdown_conds(context: QlContext, conds: dict[str, QlCond]) → dict[str, tuple[QlValueCond, bool]][source]

Hint

이런 함수가 있으면 편하다!

optional_determine_join(op: QlOp, ref: str, cond: QlCond) → QlAttr | None[source]

Hint

이런 함수가 있으면 편하다!

optional_find_index_join(context: QlContext, op: QlOp, leafs: dict[str, QlLeafOp], conds: dict[str, QlCond]) → tuple[str, QlAttrCond] | None[source]

Hint

이런 함수가 있으면 편하다!

optional_find_hash_join(op: QlOp, leafs: dict[str, QlLeafOp], conds: dict[str, QlCond]) → tuple[str, QlAttrCond] | None[source]

Hint

이런 함수가 있으면 편하다!

optional_find_loop_join(op: QlOp, leafs: dict[str, QlLeafOp], conds: dict[str, QlCond]) → tuple[str, QlAttrCond] | None[source]

Hint

이런 함수가 있으면 편하다!

optional_choose_first_leaf(context: QlContext, leafs: dict[str, QlLeafOp], conds: dict[str, QlCond], pushdown: dict[str, tuple[QlValueCond, bool]]) → QlLeafOp[source]

Hint

이런 함수가 있으면 편하다!

optional_align_attr(leaf: QlLeafOp, cond: QlAttrCond) → tuple[QlAttr, QlAttr][source]

Hint

이런 함수가 있으면 편하다!

assignmentselect(ast: AstSelect) → QlOp[source]
Raises:
assignmentinsert(ast: AstInsert) → None[source]
Raises:
assignmentdelete(ast: AstDelete, explain: bool = False) → QlOp | None[source]

scan 중에 delete를 허용하는 방법은 index scan cursor 관리가 굉장히 어렵습니다. 여기서는 일단 scan 결과를 모두 취득한 후, 한번에 delete를 진행합니다. 이른바 materialization 기법이며, 구현은 간단해지지만 메모리가 조금 낭비됩니다.

Raises:
assignmentupdate(ast: AstUpdate, explain: bool = False) → QlOp | None[source]

scan 중에 update를 허용하는 방법은 index scan cursor 관리가 굉장히 어렵습니다. 여기서는 일단 scan 결과를 모두 취득한 후, 한번에 update를 진행합니다. 이른바 materialization 기법이며, 구현은 간단해지지만 메모리가 조금 낭비됩니다.

Raises: