private ValueArray getArrayOfVisible(Value[] values) { if (values.length > visibleColumnCount) { Value[] v2 = new Value[visibleColumnCount]; System.arraycopy(values, 0, v2, 0, visibleColumnCount); values = v2; } return ValueArray.get(values); }
/** * Check if this result set contains the given row. * * @param values the row * @return true if the row exists */ public boolean containsDistinct(Value[] values) { if (distinctRows == null) { distinctRows = ValueHashMap.newInstance(); for (Value[] row : rows) { ValueArray array = getArrayOfVisible(row); distinctRows.put(array, array.getList()); } } ValueArray array = ValueArray.get(values); return distinctRows.get(array) != null; }
@Override public Value getValue(Session session) { Value[] v = new Value[list.length]; for (int i = 0; i < list.length; i++) { v[i] = list[i].getValue(session); } return ValueArray.get(v); }
@Override public Value convertPrecision(long precision, boolean force) { if (!force) { return this; } ArrayList<Value> list = New.arrayList(); for (Value v : values) { v = v.convertPrecision(precision, true); // empty byte arrays or strings have precision 0 // they count as precision 1 here precision -= Math.max(1, v.getPrecision()); if (precision < 0) { break; } list.add(v); } Value[] array = new Value[list.size()]; list.toArray(array); return get(array); }
/** * Remove the row from the result set if it exists. * * @param values the row */ public void removeDistinct(Value[] values) { if (!distinct) { DbException.throwInternalError(); } ValueArray array = ValueArray.get(values); distinctRows.remove(array); rowCount = distinctRows.size(); }
@Override Value getValue(Database database, int dataType, boolean distinct) { if (distinct) { count = 0; groupDistinct(database, dataType); } ValueArray[] values = new ValueArray[distinctValues.size()]; int i = 0; for (Value dv : distinctValues.keys()) { AggregateDataHistogram d = distinctValues.get(dv); values[i] = ValueArray.get(new Value[]{dv, ValueLong.get(d.count)}); i++; } final CompareMode compareMode = database.getCompareMode(); Arrays.sort(values, new Comparator<ValueArray>() { @Override public int compare(ValueArray v1, ValueArray v2) { Value a1 = v1.getList()[0]; Value a2 = v2.getList()[0]; return a1.compareTo(a2, compareMode); } }); Value v = ValueArray.get(values); return v.convertTo(dataType); }
values[i] = DataType.convertToValue(list[i], Value.NULL); v = ValueArray.get(values); break;
array[i + 1] = o.expression.getValue(session); v = ValueArray.get(array);
v[i] = convertToValue(o[i], type); return ValueArray.get(x.getClass().getComponentType(), v); } else if (x instanceof Character) { return ValueStringFixed.get(x.toString());
@Override public Value getValue(Session session) { query.setSession(session); ResultInterface result = query.query(2); try { int rowcount = result.getRowCount(); if (rowcount > 1) { throw DbException.get(ErrorCode.SCALAR_SUBQUERY_CONTAINS_MORE_THAN_ONE_ROW); } Value v; if (rowcount <= 0) { v = ValueNull.INSTANCE; } else { result.next(); Value[] values = result.currentRow(); if (result.getVisibleColumnCount() == 1) { v = values[0]; } else { v = ValueArray.get(values); } } return v; } finally { result.close(); } }
BLOB, StringUtils.convertHexToBytes(s.trim())); case ARRAY: return ValueArray.get(new Value[]{ValueString.get(s)}); case RESULT_SET: { SimpleResultSet rs = new SimpleResultSet();