anchor.diff:          false ->    physical_table_name(atom_to_list(TableAlias),Key)
       end;
   physical_table_name(TableAlias,Key) when is_list(TableAlias) ->
  -    case lists:last(TableAlias) of
  -        $@ ->
  -            partitioned_table_name(TableAlias,Key);
  -        _ ->    
  -            list_to_atom(TableAlias)
  +    case lists:reverse(TableAlias) of
  +        [$@|_] ->       partitioned_table_name(TableAlias,Key);    % node sharded, maybe time sharded
  +        [$_,$@|_] ->    partitioned_table_name(TableAlias,Key);    % time sharded only
  +        _ ->            list_to_atom(TableAlias)
       end.
   
   physical_table_names({_S,N,_A}) -> physical_table_names(N);
  
positive.code: -ifdef(TEST).
  
  -include_lib("eunit/include/eunit.hrl").
  
  sql_bind_jp_values_test_() ->
      {inparallel
  
negative.code: is_time_partitioned_alias(TableAlias) when is_atom(TableAlias) ->
      is_time_partitioned_alias(atom_to_list(TableAlias));
  is_time_partitioned_alias(TableAlias) when is_list(TableAlias) ->
      TableAliasRev = lists:reverse(TableAlias),
      case TableAliasRev of
          [$_,$@|_] ->    is_reverse_timed_name(tl(TableAliasRev));
          [$@|_] ->       is_reverse_timed_name(TableAliasRev);
           _ ->           false
      end.
  
  is_reverse_timed_name(TableAliasRev) ->
      case string:tokens(TableAliasRev, "_") of
          [[$@|RN]|_] -> 
              try 
                  _ = list_to_integer(lists:reverse(RN)),
                  true    % timestamp partitioned
              catch
                  _:_ -> false
              end;
           _ ->      
              false       % unsharded or node sharded alias only
      end.
  
  is_local_node_sharded_table(Name) when is_atom(Name) -> 
  