sig
  type sequence_index = int
  type restore_function = Physical_value.dom_tuple -> unit
  val export_input_tuple_as_tuple_cursor :
    Code_selection_context.code_selection_context ->
    Xquery_physical_type_ast.physical_tuple_type ->
    Physical_value.tuple_unit Cursor.cursor ->
    Physical_value.tuple Cursor.cursor
  val import_tuple_cursor_as_input_tuple :
    Code_selection_context.code_selection_context ->
    Xquery_physical_type_ast.physical_tuple_type ->
    Physical_value.tuple Cursor.cursor ->
    Physical_value.tuple_unit Cursor.cursor
  type array_materialize_fun =
      Algebra_type.eval_fun ->
      Execution_context.algebra_context ->
      Physical_value.tuple_unit Cursor.cursor -> Physical_value.dom_table
  val materialize_cursor_to_dom_value_array :
    Code_selection_context.code_selection_context ->
    Xquery_algebra_ast.free_variable_desc ->
    unit ->
    Code_util_materialize.array_materialize_fun *
    Code_util_materialize.restore_function * Xquery_common_ast.cvname array
  type hash_materialize_fun =
      Algebra_type.eval_fun ->
      Execution_context.algebra_context ->
      Physical_value.dom_table -> int Dm_atomic.AtomicValueHash.t
  val materialize_array_to_hash :
    Code_selection_context.code_selection_context ->
    Xquery_algebra_ast.free_variable_desc ->
    Code_util_materialize.restore_function ->
    Code_util_predicates.predicate_branch * Namespace_context.nsenv ->
    Code_util_materialize.hash_materialize_fun *
    Code_util_materialize.restore_function * Xquery_common_ast.cvname array
  type sort_array_materialize_fun =
      Algebra_type.eval_fun ->
      Execution_context.algebra_context ->
      Physical_value.dom_table -> Code_util_ridlist.rid Dm_atomic_btree.btree
  val materialize_array_to_sorted_array_index :
    Code_selection_context.code_selection_context ->
    Xquery_algebra_ast.free_variable_desc ->
    Code_util_materialize.restore_function ->
    Code_util_predicates.predicate_branch * Namespace_context.nsenv ->
    Code_util_materialize.sort_array_materialize_fun
  val build_materialize_table_code :
    ('a, 'b) Xquery_algebra_ast.aalgop_expr ->
    Code_selection_context.code_selection_context ->
    Algebra_type.eval_fun ->
    Execution_context.algebra_context ->
    Physical_value.tuple_unit Cursor.cursor ->
    Physical_value.tuple_unit Cursor.cursor
  val annotate_materialization :
    Code_selection_context.code_selection_context ->
    Algebra_type.algop_expr -> unit
  val should_materialize : Algebra_type.algop_expr -> bool
  val produces_a_table : Algebra_type.algop_expr -> bool
end