/**
  * If the $onTableAliasName is used (not null):
  * Special use of sort attribute resolution. If you are resolving a sort attribute against a relation then
  * the joins must utilize a left join in the case of casting up.  Does not support when the attribute is a
  * relation itself as this expects any relation processing to be done before this is called.
  *
  * @param RedBeanModelAttributeToDataProviderAdapter $modelAttributeToDataProviderAdapter
  * @param RedBeanModelJoinTablesQueryAdapter $joinTablesAdapter
  * @param null | string $onTableAliasName
  * @return string
  * @throws NotSupportedException
  */
 public static function resolveSortAttributeColumnName(RedBeanModelAttributeToDataProviderAdapter $modelAttributeToDataProviderAdapter, RedBeanModelJoinTablesQueryAdapter $joinTablesAdapter, $onTableAliasName = null)
 {
     assert('is_string($onTableAliasName) || $onTableAliasName == null');
     $builder = new ModelJoinBuilder($modelAttributeToDataProviderAdapter, $joinTablesAdapter);
     $tableAliasName = $builder->resolveJoins($onTableAliasName, self::resolveCanUseFromJoins($onTableAliasName));
     $shouldConcatenate = false;
     if ($modelAttributeToDataProviderAdapter->hasRelatedAttribute()) {
         if ($modelAttributeToDataProviderAdapter->relatedAttributesSortUsesTwoAttributes()) {
             $resolvedSortColumnName = $modelAttributeToDataProviderAdapter->getRelatedAttributeColumnNameByPosition(0);
             $sortColumnsNameString = self::resolveSortColumnNameString($tableAliasName, $resolvedSortColumnName);
             $resolvedSortColumnName = $modelAttributeToDataProviderAdapter->getRelatedAttributeColumnNameByPosition(1);
             $shouldConcatenate = true;
         } else {
             $resolvedSortColumnName = $modelAttributeToDataProviderAdapter->getRelatedAttributeColumnName();
         }
     } else {
         if ($modelAttributeToDataProviderAdapter->sortUsesTwoAttributes()) {
             $resolvedSortColumnName = $modelAttributeToDataProviderAdapter->getColumnNameByPosition(0);
             $sortColumnsNameString = self::resolveSortColumnNameString($tableAliasName, $resolvedSortColumnName);
             $resolvedSortColumnName = $modelAttributeToDataProviderAdapter->getColumnNameByPosition(1);
             $shouldConcatenate = true;
         } else {
             $resolvedSortColumnName = $modelAttributeToDataProviderAdapter->getColumnName();
         }
     }
     if ($shouldConcatenate) {
         $sortColumnsNameString = DatabaseCompatibilityUtil::concat(array($sortColumnsNameString, self::resolveSortColumnNameString($tableAliasName, $resolvedSortColumnName)));
     } else {
         $sortColumnsNameString = self::resolveSortColumnNameString($tableAliasName, $resolvedSortColumnName);
     }
     return $sortColumnsNameString;
 }