OmniSciDB  c1a53651b2
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
anonymous_namespace{WindowContext.cpp}::FindNullRange Struct Reference

Public Member Functions

template<typename T >
IndexPair find_null_range_int (int8_t const *order_col_buf) const
 
template<typename COL_TYPE , typename NULL_TYPE = std::conditional_t<sizeof(COL_TYPE) == sizeof(int32_t), int32_t, int64_t>>
IndexPair find_null_range_fp (int8_t const *order_col_buf) const
 

Public Attributes

int32_t const * original_col_idx_buf
 
int64_t const * ordered_col_idx_buf
 
int32_t const partition_size
 
int64_t null_bit_pattern = -1
 

Detailed Description

Definition at line 777 of file WindowContext.cpp.

Member Function Documentation

template<typename COL_TYPE , typename NULL_TYPE = std::conditional_t<sizeof(COL_TYPE) == sizeof(int32_t), int32_t, int64_t>>
IndexPair anonymous_namespace{WindowContext.cpp}::FindNullRange::find_null_range_fp ( int8_t const *  order_col_buf) const
inline

Definition at line 818 of file WindowContext.cpp.

818  {
819  IndexPair null_range{std::numeric_limits<int64_t>::max(),
820  std::numeric_limits<int64_t>::min()};
821  auto const casted_order_col_buf = reinterpret_cast<COL_TYPE const*>(order_col_buf);
822  auto check_null_val = [&casted_order_col_buf, this](size_t idx) {
823  return *reinterpret_cast<NULL_TYPE const*>(
824  may_alias_ptr(&casted_order_col_buf
827  };
828  if (check_null_val(0)) {
829  int64_t null_range_max = 1;
830  while (null_range_max < partition_size && check_null_val(null_range_max)) {
831  null_range_max++;
832  }
833  null_range.first = 0;
834  null_range.second = null_range_max - 1;
835  } else if (check_null_val(partition_size - 1)) {
836  int64_t null_range_min = partition_size - 2;
837  while (null_range_min >= 0 && check_null_val(null_range_min)) {
838  null_range_min--;
839  }
840  null_range.first = null_range_min + 1;
841  null_range.second = partition_size - 1;
842  }
843  return null_range;
844  }
std::pair< int64_t, int64_t > IndexPair
template<typename T >
IndexPair anonymous_namespace{WindowContext.cpp}::FindNullRange::find_null_range_int ( int8_t const *  order_col_buf) const
inline

Definition at line 784 of file WindowContext.cpp.

References heavydb.dtypes::T.

784  {
785  IndexPair null_range{std::numeric_limits<int64_t>::max(),
786  std::numeric_limits<int64_t>::min()};
787  auto const null_val = inline_int_null_value<T>();
788  auto const casted_order_col_buf = reinterpret_cast<T const*>(order_col_buf);
789  if (casted_order_col_buf[original_col_idx_buf[ordered_col_idx_buf[0]]] == null_val) {
790  int64_t null_range_max = 1;
791  while (null_range_max < partition_size &&
792  casted_order_col_buf
793  [original_col_idx_buf[ordered_col_idx_buf[null_range_max]]] ==
794  null_val) {
795  null_range_max++;
796  }
797  null_range.first = 0;
798  null_range.second = null_range_max - 1;
799  } else if (casted_order_col_buf
801  null_val) {
802  int64_t null_range_min = partition_size - 2;
803  while (null_range_min >= 0 &&
804  casted_order_col_buf
805  [original_col_idx_buf[ordered_col_idx_buf[null_range_min]]] ==
806  null_val) {
807  null_range_min--;
808  }
809  null_range.first = null_range_min + 1;
810  null_range.second = partition_size - 1;
811  }
812  return null_range;
813  }
std::pair< int64_t, int64_t > IndexPair

Member Data Documentation

int64_t anonymous_namespace{WindowContext.cpp}::FindNullRange::null_bit_pattern = -1

Definition at line 781 of file WindowContext.cpp.

int64_t const* anonymous_namespace{WindowContext.cpp}::FindNullRange::ordered_col_idx_buf

Definition at line 779 of file WindowContext.cpp.

int32_t const* anonymous_namespace{WindowContext.cpp}::FindNullRange::original_col_idx_buf

Definition at line 778 of file WindowContext.cpp.

int32_t const anonymous_namespace{WindowContext.cpp}::FindNullRange::partition_size

Definition at line 780 of file WindowContext.cpp.


The documentation for this struct was generated from the following file: