code: function (arr, joiner) {
          joiner = joiner || null;
          var args;
          arr = arr.map(function (a) {
              return isInstanceOf(a, Expression, LiteralString, Boolean) || isNull(a) ? a : sql.stringToIdentifier(a);
          });
          if (joiner) {
              var newJoiner = [];
              for (var i = 0; i < arr.length; i++) {
                  newJoiner.push(joiner);
              }
              args = array.flatten(array.zip(arr, newJoiner));
              args.pop();
          } else {
              args = arr;
          }
          args = args.map(function (a) {
              return isInstanceOf(a, Expression, LiteralString, Boolean) || isNull(a) ? a : "" + a;
          });
          return StringExpression.fromArgs(["||"].concat(args));
      }
docs: Creates a {@link patio.sql.StringExpression}
  
  Return a {@link patio.sql.StringExpression} representing an SQL string made up of the
  concatenation of this array's elements.  If an joiner is passed
  it is used in between each element of the array in the SQL
  concatenation.
  
  @example
  patio.sql.sqlStringJoin(["a"]); //=> a
  //you can use sql.* as a shortcut to get an identifier
  patio.sql.sqlStringJoin([sql.identifier("a"), sql.b]);//=> a || b
  patio.sql.sqlStringJoin([sql.a, 'b']) # SQL: a || 'b'
  patio.sql.sqlStringJoin(['a', sql.b], ' '); //=> 'a' || ' ' || b