class_docstr: Perform a database (SQL) merge operation between two DataFrame objects
  using either columns as keys or their row indexes
class_docstr_tok: ["Perform","a","database","(","SQL",")","merge","operation","between","two","DataFrame","objects","using","either","columns","as","keys","or","their","row","indexes"]
code: def _get_join_info(self):
      left_ax = self.left._data.axes[self.axis]
      right_ax = self.right._data.axes[self.axis]
  
      if self.left_index and self.right_index and self.how != "asof":
          join_index, left_indexer, right_indexer = left_ax.join(
              right_ax,
              how=self.how,
              return_indexers=True,
              sort=self.sort,
          )
      elif self.right_index and self.how == "left":
          join_index, left_indexer, right_indexer = _left_join_on_index(
              left_ax, right_ax, self.left_join_keys, sort=self.sort
          )
  
      elif self.left_index and self.how == "right":
          join_index, right_indexer, left_indexer = _left_join_on_index(
              right_ax, left_ax, self.right_join_keys, sort=self.sort
          )
      else:
          (left_indexer, right_indexer) = self._get_join_indexers()
  
          if self.right_index:
              if len(self.left) > 0:
                  join_index = self.left.index.take(left_indexer)
              else:
                  join_index = self.right.index.take(right_indexer)
                  left_indexer = np.array([-1] * len(join_index))
          elif self.left_index:
              if len(self.right) > 0:
                  join_index = self.right.index.take(right_indexer)
              else:
                  join_index = self.left.index.take(left_indexer)
                  right_indexer = np.array([-1] * len(join_index))
          else:
              join_index = Index(np.arange(len(left_indexer)))
  
      if len(join_index) == 0:
          join_index = join_index.astype(object)
      return join_index, left_indexer, right_indexer
  
imports: import copy
  import string
  import warnings
  import numpy
  from pandas._libs import hashtable, join, lib
  import pandas.compat
  from pandas.compat import filter, lzip, map, range, zip
  from pandas.errors import MergeError
  from pandas.util._decorators import Appender, Substitution
  from pandas.core.dtypes.common import ensure_float64, ensure_int64, ensure_object, is_array_like, is_bool, is_bool_dtype, is_categorical_dtype, is_datetime64_dtype, is_datetime64tz_dtype, is_datetimelike, is_dtype_equal, is_extension_array_dtype, is_float_dtype, is_int64_dtype, is_integer, is_integer_dtype, is_list_like, is_number, is_numeric_dtype, is_object_dtype, needs_i8_conversion
  from pandas.core.dtypes.missing import isnull, na_value_for_dtype
  from pandas import Categorical, DataFrame, Index, MultiIndex, Series, Timedelta
  import pandas.core.algorithms
  from pandas.core.arrays.categorical import _recode_for_categories
  import pandas.core.common
  from pandas.core.frame import _merge_doc
  from pandas.core.internals import concatenate_block_managers, items_overlap_with_suffix
  import pandas.core.sorting
  from pandas.core.sorting import is_int64_overflow_possible
label_desc: Use image node_id 8 for calling the _MergeOperation obj's underlying member method code with example usage: obj._get_join_info() and returns: join_index,  left_indexer,  right_indexer