@Override public int getColumnScale(int i) { return expressions[i].getScale(); }
@Override public int getScale() { return expr.getScale(); }
@Override public int getScale() { return getExpression().getScale(); }
@Override public Expression[] getExpressionColumns(Session session) { ExpressionColumn[] expr = new ExpressionColumn[list.length]; for (int i = 0; i < list.length; i++) { Expression e = list[i]; Column col = new Column("C" + (i + 1), e.getType(), e.getPrecision(), e.getScale(), e.getDisplaySize()); expr[i] = new ExpressionColumn(session.getDatabase(), col); } return expr; }
int type = Value.getHigherOrder(l.getType(), r.getType()); long prec = Math.max(l.getPrecision(), r.getPrecision()); int scale = Math.max(l.getScale(), r.getScale()); int displaySize = Math.max(l.getDisplaySize(), r.getDisplaySize()); Column col = new Column(l.getAlias(), type, prec, scale, displaySize);
scale = expr.getScale(); displaySize = expr.getDisplaySize(); if (i >= columns.size()) {
if (type != Value.UNKNOWN && type != Value.NULL) { t = Value.getHigherOrder(t, type); s = Math.max(s, e.getScale()); p = Math.max(p, e.getPrecision()); d = Math.max(d, e.getDisplaySize()); if (type != Value.UNKNOWN && type != Value.NULL) { t = Value.getHigherOrder(t, type); s = Math.max(s, then.getScale()); p = Math.max(p, then.getPrecision()); d = Math.max(d, then.getDisplaySize()); if (type != Value.UNKNOWN && type != Value.NULL) { t = Value.getHigherOrder(t, type); s = Math.max(s, elsePart.getScale()); p = Math.max(p, elsePart.getPrecision()); d = Math.max(d, elsePart.getDisplaySize()); p = Math.max(args[1].getPrecision(), args[2].getPrecision()); d = Math.max(args[1].getDisplaySize(), args[2].getDisplaySize()); s = Math.max(args[1].getScale(), args[2].getScale()); break; case NVL2: s = Math.max(args[1].getScale(), args[2].getScale()); break; case CAST: case TRUNCATE:
private void generateColumnsFromQuery() { int columnCount = prepared.getQuery().getColumnCount(); ArrayList<Expression> expressions = prepared.getQuery().getExpressions(); for (int i = 0; i < columnCount; i++) { Expression expr = expressions.get(i); int type = expr.getType(); String name = expr.getAlias(); long precision = expr.getPrecision(); int displaySize = expr.getDisplaySize(); DataType dt = DataType.getDataType(type); if (precision > 0 && (dt.defaultPrecision == 0 || (dt.defaultPrecision > precision && dt.defaultPrecision < Byte.MAX_VALUE))) { // dont' set precision to MAX_VALUE if this is the default precision = dt.defaultPrecision; } int scale = expr.getScale(); if (scale > 0 && (dt.defaultScale == 0 || (dt.defaultScale > scale && dt.defaultScale < precision))) { scale = dt.defaultScale; } if (scale > precision) { precision = scale; } Column col = new Column(name, type, precision, scale, displaySize); prepared.addColumn(col); } }
int scale = expr.getScale(); int displaySize = expr.getDisplaySize(); Column col = new Column(name, type, precision, scale, displaySize);
on = on.optimize(session); dataType = on.getType(); scale = on.getScale(); precision = on.getPrecision(); displaySize = on.getDisplaySize();