Skip to content

Commit

Permalink
set the locale to ENGLISH for the format function
Browse files Browse the repository at this point in the history
FormatFunctionTest failed. For example with @seed("8E1625C954A12A49")
  • Loading branch information
mfussenegger committed Mar 17, 2015
1 parent de9002b commit f639351
Show file tree
Hide file tree
Showing 2 changed files with 7 additions and 3 deletions.
2 changes: 2 additions & 0 deletions CHANGES.txt
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@
Changes for Crate
=================

- The ``format`` scalar function now always uses Locale.ENGLISH

2015/03/17 0.48.0
=================

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,7 @@

import java.util.ArrayList;
import java.util.List;
import java.util.Locale;

public class FormatFunction extends Scalar<BytesRef, Object> implements DynamicFunctionResolver {

Expand Down Expand Up @@ -69,7 +70,7 @@ public BytesRef evaluate(Input<Object>... args) {
}

Object formatString = args[0].value();
return new BytesRef(String.format(((BytesRef)formatString).utf8ToString(), values));
return new BytesRef(String.format(Locale.ENGLISH, ((BytesRef) formatString).utf8ToString(), values));
}

@Override
Expand All @@ -83,13 +84,13 @@ public Symbol normalizeSymbol(Function function) {

Symbol formatString = function.arguments().get(0);
if (formatString.symbolType() != SymbolType.LITERAL
&& !((Literal)formatString).valueType().equals(DataTypes.STRING)) {
&& !formatString.valueType().equals(DataTypes.STRING)) {
// probably something like format(column_with_format_string, arg1) ?
return function;
}

assert formatString instanceof Literal;
assert ((Literal)formatString).valueType().equals(DataTypes.STRING);
assert formatString.valueType().equals(DataTypes.STRING);
List<Object> objects = new ArrayList<>();
List<Symbol> arguments = function.arguments().subList(1, function.arguments().size());

Expand All @@ -109,6 +110,7 @@ public Symbol normalizeSymbol(Function function) {
}

return Literal.newLiteral(String.format(
Locale.ENGLISH,
((BytesRef)((Literal) formatString).value()).utf8ToString(),
objects.toArray(new Object[objects.size()])));
}
Expand Down

0 comments on commit f639351

Please sign in to comment.