Refine search
@Override public TupleFilter visitLiteral(RexLiteral literal) { String strValue = null; Object literalValue = literal.getValue(); if (literalValue instanceof NlsString) { strValue = ((NlsString) literalValue).getValue(); } else if (literalValue instanceof GregorianCalendar) { GregorianCalendar g = (GregorianCalendar) literalValue; strValue = Long.toString(g.getTimeInMillis()); } else if (literalValue instanceof TimeUnitRange) { // Extract(x from y) in where clause strValue = ((TimeUnitRange) literalValue).name(); } else if (literalValue == null) { strValue = null; } else { strValue = literalValue.toString(); } TupleFilter filter = new ConstantTupleFilter(strValue); return filter; }
private static NlsString asUnicodeString(String text) { return new NlsString(text, ConversionUtil.NATIVE_UTF16_CHARSET_NAME, SqlCollation.IMPLICIT); }
assert literalExpr.isA(SqlKind.CAST); RexNode child = ((RexCall) literalExpr).getOperands().get(0); assert RexLiteral.isNullLiteral(child); Comparable value = literal.getValue(); new NlsString( Spaces.padRight(unpadded.getValue(), type.getPrecision()), unpadded.getCharsetName(), unpadded.getCollation()));
switch (literal.getType().getSqlTypeName()) { case VARCHAR: case CHAR: return Tuple.<Object, Type>of(((NlsString)literal.getValue()).getValue(), Type.STRING); case INTEGER: return Tuple.<Object, Type>of(getLong(literal), Type.LONG); return Tuple.of(new Date(literal.getValueAs(DateString.class).getMillisSinceEpoch()), Type.DATE); case TIMESTAMP:
if (operands.get(0) instanceof RexLiteral) { oplit = (RexLiteral) operands.get(0); if (oplit.getTypeName() == SqlTypeName.CHAR) { newLiteral = builder.makeLiteral(((NlsString) oplit.getValue()).getValue() + "%"); input = operands.get(1); if (oplit.getTypeName() == SqlTypeName.CHAR) { newLiteral = builder.makeLiteral(((NlsString) oplit.getValue()).getValue() + "%"); input = operands.get(0);
public SqlNode convertLiteral(RexLiteral literal) { literal.getTypeName())) { return SqlLiteral.createExactNumeric( literal.getValue().toString(), SqlParserPos.ZERO); literal.getTypeName())) { return SqlLiteral.createApproxNumeric( literal.getValue().toString(), literal.getTypeName())) { return SqlLiteral.createCharString( ((NlsString) (literal.getValue())).getValue(), SqlParserPos.ZERO);
public String jarName() { return jarName == null ? null : ((NlsString) SqlLiteral.value(jarName)).getValue(); } }
return Pair.of(index, rexLiteral.getValueAs(Integer.class)); case DOUBLE: return Pair.of(index, rexLiteral.getValueAs(Double.class)); case REAL: return Pair.of(index, rexLiteral.getValueAs(Float.class)); case BIGINT: return Pair.of(index, rexLiteral.getValueAs(Long.class)); type.getSqlTypeName(), rexLiteral.getValue().getClass()); if (rexLiteral.getValue() instanceof NlsString) { return Pair.of(index, ((NlsString) rexLiteral.getValue()).getValue()); } else { return Pair.of(index, rexLiteral.getValue());
((BigDecimal) literal.getValue()).setScale(0, BigDecimal.ROUND_HALF_UP).longValue(), filter.getKind()); matchingSplitsQuery = SearchQueryUtils.newRangeLong(columnKey, (Long) rangeQueryInput.min, (Long) rangeQueryInput.max, rangeQueryInput.includeMin, rangeQueryInput.includeMax); break; rangeQueryInput = new RangeQueryInput((int) ((GregorianCalendar) literal.getValue()).getTimeInMillis(), filter.getKind()); matchingSplitsQuery = SearchQueryUtils.newRangeInt(columnKey, (Integer) rangeQueryInput.min, (Integer) rangeQueryInput.max, rangeQueryInput.includeMin, rangeQueryInput.includeMax); break; if (literal.getValue() instanceof NlsString) { rangeQueryInput = new RangeQueryInput(((NlsString) literal.getValue()).getValue(), filter.getKind()); } else { rangeQueryInput = new RangeQueryInput((literal.getValue3().toString()), filter.getKind());
@Override public TupleExpression visitLiteral(RexLiteral literal) { TupleExpression tuple; Object value = literal.getValue(); if (value instanceof Number) { tuple = new NumberTupleExpression(value); } else { if (value == null) { tuple = new StringTupleExpression(null); } else if (value instanceof NlsString) { tuple = new StringTupleExpression(((NlsString) value).getValue()); } else { tuple = new StringTupleExpression(value.toString()); } } tuple.setDigest(literal.toString()); return tuple; } }
if ((nlsString.getCollation() == null) || (nlsString.getCharset() == null)) { assert type.getSqlTypeName() == SqlTypeName.CHAR; assert type.getCharset().name() != null; assert type.getCollation() != null; o = new NlsString( nlsString.getValue(), type.getCharset().name(), type.getCollation()); return new RexLiteral(o, type, typeName);
String s = ns.getValue(); StringBuilder sb = new StringBuilder(); int n = s.length(); ns = new NlsString( sb.toString(), ns.getCharsetName(), ns.getCollation()); return new SqlCharStringLiteral(ns, getParserPosition());
RelDataTypeFactory typeFactory, NlsString str) { Charset charset = str.getCharset(); if (null == charset) { charset = typeFactory.getDefaultCharset(); SqlCollation collation = str.getCollation(); if (null == collation) { collation = SqlCollation.COERCIBLE; typeFactory.createSqlType( SqlTypeName.CHAR, str.getValue().length()); type = typeFactory.createTypeWithCharsetAndCollation(
/** Rewrite the parse tree as SELECT ... FROM INFORMATION_SCHEMA.SCHEMATA ... */ @Override public SqlNode rewrite(SqlNode sqlNode) throws ForemanSetupException { SqlShowSchemas node = unwrap(sqlNode, SqlShowSchemas.class); List<SqlNode> selectList = Collections.singletonList(new SqlIdentifier(SCHS_COL_SCHEMA_NAME, SqlParserPos.ZERO)); SqlNode fromClause = new SqlIdentifier(Arrays.asList(IS_SCHEMA_NAME, InfoSchemaTableType.SCHEMATA.name()), SqlParserPos.ZERO); SqlNode where = null; SqlNode likePattern = node.getLikePattern(); if (likePattern != null) { SqlNode column = new SqlIdentifier(SCHS_COL_SCHEMA_NAME, SqlParserPos.ZERO); // schema names are case insensitive, wrap column in lower function, pattern to lower case if (likePattern instanceof SqlCharStringLiteral) { NlsString conditionString = ((SqlCharStringLiteral) likePattern).getNlsString(); likePattern = SqlCharStringLiteral.createCharString( conditionString.getValue().toLowerCase(), conditionString.getCharsetName(), likePattern.getParserPosition()); column = SqlStdOperatorTable.LOWER.createCall(SqlParserPos.ZERO, column); } where = DrillParserUtil.createCondition(column, SqlStdOperatorTable.LIKE, likePattern); } else if (node.getWhereClause() != null) { where = node.getWhereClause(); } return new SqlSelect(SqlParserPos.ZERO, null, new SqlNodeList(selectList, SqlParserPos.ZERO), fromClause, where, null, null, null, null, null, null); } }
Util.printJavaString( pw, nlsString.getValue(), true); } else { boolean includeCharset = (nlsString.getCharsetName() != null) && !nlsString.getCharsetName().equals( SaffronProperties.INSTANCE.defaultCharset().get()); pw.print(nlsString.asSql(includeCharset, false)); break; default: assert valueMatchesType(value, typeName, true); throw Util.needToImplement(typeName);
@Test public void testSubstring() throws Exception { check((rexBuilder, executor) -> { final List<RexNode> reducedValues = new ArrayList<>(); final RexLiteral hello = rexBuilder.makeCharLiteral( new NlsString("Hello world!", null, null)); final RexNode plus = rexBuilder.makeCall(SqlStdOperatorTable.PLUS, rexBuilder.makeExactLiteral(BigDecimal.ONE), rexBuilder.makeExactLiteral(BigDecimal.ONE)); RexLiteral four = rexBuilder.makeExactLiteral(BigDecimal.valueOf(4)); final RexNode substring = rexBuilder.makeCall(SqlStdOperatorTable.SUBSTRING, hello, plus, four); executor.reduce(rexBuilder, ImmutableList.of(substring, plus), reducedValues); assertThat(reducedValues.size(), equalTo(2)); assertThat(reducedValues.get(0), instanceOf(RexLiteral.class)); assertThat(((RexLiteral) reducedValues.get(0)).getValue2(), equalTo((Object) "ello")); // substring('Hello world!, 2, 4) assertThat(reducedValues.get(1), instanceOf(RexLiteral.class)); assertThat(((RexLiteral) reducedValues.get(1)).getValue2(), equalTo((Object) 2L)); }); }
boolean canRemoveCastFromLiteral(RelDataType toType, Comparable value, SqlTypeName fromTypeName) { final SqlTypeName sqlType = toType.getSqlTypeName(); if (!RexLiteral.valueMatchesType(value, sqlType, false)) { return false; final int length = ((NlsString) value).getValue().length(); switch (toType.getSqlTypeName()) { case CHAR: