Skip to content

Commit

Permalink
Finish Cast update.
Browse files Browse the repository at this point in the history
  • Loading branch information
jdunkerley committed Jan 20, 2025
1 parent 9122758 commit 3839918
Show file tree
Hide file tree
Showing 7 changed files with 56 additions and 48 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,9 @@
import java.math.BigInteger;
import org.enso.table.data.column.builder.Builder;
import org.enso.table.data.column.storage.BoolStorage;
import org.enso.table.data.column.storage.ColumnDoubleStorage;
import org.enso.table.data.column.storage.ColumnLongStorage;
import org.enso.table.data.column.storage.ColumnStorage;
import org.enso.table.data.column.storage.Storage;
import org.enso.table.data.column.storage.numeric.AbstractLongStorage;
import org.enso.table.data.column.storage.numeric.BigDecimalStorage;
Expand Down Expand Up @@ -33,23 +36,23 @@ public Storage<BigDecimal> cast(Storage<?> storage, CastProblemAggregator proble
}

private Storage<BigDecimal> convertDoubleStorage(
DoubleStorage doubleStorage, CastProblemAggregator problemAggregator) {
ColumnDoubleStorage doubleStorage, CastProblemAggregator problemAggregator) {
return StorageConverter.innerLoop(
Builder.getForBigDecimal(doubleStorage.size()),
Builder.getForBigDecimal(doubleStorage.getSize()),
doubleStorage,
(i) -> {
double x = doubleStorage.getItemAsDouble(i);
double x = doubleStorage.get(i);
return BigDecimal.valueOf(x);
});
}

private Storage<BigDecimal> convertLongStorage(
AbstractLongStorage longStorage, CastProblemAggregator problemAggregator) {
ColumnLongStorage longStorage, CastProblemAggregator problemAggregator) {
return StorageConverter.innerLoop(
Builder.getForBigDecimal(longStorage.size()),
Builder.getForBigDecimal(longStorage.getSize()),
longStorage,
(i) -> {
long x = longStorage.getItem(i);
long x = longStorage.get(i);
return BigDecimal.valueOf(x);
});
}
Expand Down Expand Up @@ -77,12 +80,12 @@ private Storage<BigDecimal> convertBigIntegerStorage(
}

private Storage<BigDecimal> castFromMixed(
Storage<?> storage, CastProblemAggregator problemAggregator) {
ColumnStorage storage, CastProblemAggregator problemAggregator) {
return StorageConverter.innerLoop(
Builder.getForBigDecimal(storage.size()),
Builder.getForBigDecimal(storage.getSize()),
storage,
(i) -> {
Object o = storage.getItemBoxed(i);
Object o = storage.getItemAsObject(i);
return switch (o) {
case Boolean b -> booleanAsBigDecimal(b);
case Long l -> BigDecimal.valueOf(l);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,9 @@
import java.math.BigInteger;
import org.enso.table.data.column.builder.Builder;
import org.enso.table.data.column.storage.BoolStorage;
import org.enso.table.data.column.storage.ColumnDoubleStorage;
import org.enso.table.data.column.storage.ColumnLongStorage;
import org.enso.table.data.column.storage.ColumnStorage;
import org.enso.table.data.column.storage.Storage;
import org.enso.table.data.column.storage.numeric.AbstractLongStorage;
import org.enso.table.data.column.storage.numeric.BigDecimalStorage;
Expand Down Expand Up @@ -33,23 +36,23 @@ public Storage<BigInteger> cast(Storage<?> storage, CastProblemAggregator proble
}

private Storage<BigInteger> convertDoubleStorage(
DoubleStorage doubleStorage, CastProblemAggregator problemAggregator) {
ColumnDoubleStorage doubleStorage, CastProblemAggregator problemAggregator) {
return StorageConverter.innerLoop(
Builder.getForBigInteger(doubleStorage.size(), problemAggregator),
Builder.getForBigInteger(doubleStorage.getSize(), problemAggregator),
doubleStorage,
(i) -> {
double x = doubleStorage.getItemAsDouble(i);
double x = doubleStorage.get(i);
return BigDecimal.valueOf(x).toBigInteger();
});
}

private Storage<BigInteger> convertLongStorage(
AbstractLongStorage longStorage, CastProblemAggregator problemAggregator) {
ColumnLongStorage longStorage, CastProblemAggregator problemAggregator) {
return StorageConverter.innerLoop(
Builder.getForBigInteger(longStorage.size(), problemAggregator),
Builder.getForBigInteger(longStorage.getSize(), problemAggregator),
longStorage,
(i) -> {
long x = longStorage.getItem(i);
long x = longStorage.get(i);
return BigInteger.valueOf(x);
});
}
Expand All @@ -60,7 +63,7 @@ private Storage<BigInteger> convertBoolStorage(
Builder.getForBigInteger(boolStorage.size(), problemAggregator),
boolStorage,
(i) -> {
boolean x = boolStorage.getItem(i);
boolean x = boolStorage.getItem((int) i);
return booleanAsBigInteger(x);
});
}
Expand All @@ -71,18 +74,18 @@ private Storage<BigInteger> convertBigDecimalStorage(
Builder.getForBigInteger(bigDecimalStorage.size(), problemAggregator),
bigDecimalStorage,
(i) -> {
BigDecimal x = bigDecimalStorage.getItemBoxed(i);
BigDecimal x = bigDecimalStorage.getItemBoxed((int) i);
return x.toBigInteger();
});
}

private Storage<BigInteger> castFromMixed(
Storage<?> storage, CastProblemAggregator problemAggregator) {
ColumnStorage storage, CastProblemAggregator problemAggregator) {
return StorageConverter.innerLoop(
Builder.getForBigInteger(storage.size(), problemAggregator),
Builder.getForBigInteger(storage.getSize(), problemAggregator),
storage,
(i) -> {
Object o = storage.getItemBoxed(i);
Object o = storage.getItemAsObject(i);
return switch (o) {
case Boolean b -> booleanAsBigInteger(b);
case Long l -> BigInteger.valueOf(l);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

import org.enso.table.data.column.builder.Builder;
import org.enso.table.data.column.storage.BoolStorage;
import org.enso.table.data.column.storage.ColumnStorage;
import org.enso.table.data.column.storage.Storage;
import org.enso.table.data.column.storage.type.AnyObjectType;

Expand All @@ -19,13 +20,13 @@ public Storage<Boolean> cast(Storage<?> storage, CastProblemAggregator problemAg
}

private Storage<Boolean> castFromMixed(
Storage<?> mixedStorage, CastProblemAggregator problemAggregator) {
ColumnStorage mixedStorage, CastProblemAggregator problemAggregator) {
// As mixed storage is already boxed, use the standard inner loop.
return StorageConverter.innerLoop(
Builder.getForBoolean(mixedStorage.size()),
Builder.getForBoolean(mixedStorage.getSize()),
mixedStorage,
(i) -> {
Object o = mixedStorage.getItemBoxed(i);
Object o = mixedStorage.getItemAsObject(i);
if (o instanceof Boolean b) {
return b;
} else {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
import java.time.LocalDate;
import java.time.ZonedDateTime;
import org.enso.table.data.column.builder.Builder;
import org.enso.table.data.column.storage.ColumnStorage;
import org.enso.table.data.column.storage.Storage;
import org.enso.table.data.column.storage.datetime.DateStorage;
import org.enso.table.data.column.storage.datetime.DateTimeStorage;
Expand All @@ -24,12 +25,12 @@ public Storage<LocalDate> cast(Storage<?> storage, CastProblemAggregator problem
}

private Storage<LocalDate> castFromMixed(
Storage<?> mixedStorage, CastProblemAggregator problemAggregator) {
ColumnStorage mixedStorage, CastProblemAggregator problemAggregator) {
return StorageConverter.innerLoop(
Builder.getForDate(mixedStorage.size()),
Builder.getForDate(mixedStorage.getSize()),
mixedStorage,
(i) -> {
Object o = mixedStorage.getItemBoxed(i);
Object o = mixedStorage.getItemAsObject(i);
return switch (o) {
case LocalDate d -> d;
case ZonedDateTime d -> d.toLocalDate();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
import java.time.ZoneId;
import java.time.ZonedDateTime;
import org.enso.table.data.column.builder.Builder;
import org.enso.table.data.column.storage.ColumnStorage;
import org.enso.table.data.column.storage.Storage;
import org.enso.table.data.column.storage.datetime.DateStorage;
import org.enso.table.data.column.storage.datetime.DateTimeStorage;
Expand All @@ -25,12 +26,12 @@ public Storage<ZonedDateTime> cast(Storage<?> storage, CastProblemAggregator pro
}

public Storage<ZonedDateTime> castFromMixed(
Storage<?> mixedStorage, CastProblemAggregator problemAggregator) {
ColumnStorage mixedStorage, CastProblemAggregator problemAggregator) {
return StorageConverter.innerLoop(
Builder.getForDateTime(mixedStorage.size()),
Builder.getForDateTime(mixedStorage.getSize()),
mixedStorage,
(i) -> {
Object o = mixedStorage.getItemBoxed(i);
Object o = mixedStorage.getItemAsObject(i);
return switch (o) {
case ZonedDateTime d -> d;
case LocalDate d -> convertDate(d);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,9 +7,7 @@
import java.util.function.Function;
import org.enso.polyglot.common_utils.Core_Date_Utils;
import org.enso.table.data.column.builder.Builder;
import org.enso.table.data.column.storage.BoolStorage;
import org.enso.table.data.column.storage.Storage;
import org.enso.table.data.column.storage.StringStorage;
import org.enso.table.data.column.storage.*;
import org.enso.table.data.column.storage.datetime.DateStorage;
import org.enso.table.data.column.storage.datetime.DateTimeStorage;
import org.enso.table.data.column.storage.datetime.TimeOfDayStorage;
Expand Down Expand Up @@ -55,12 +53,12 @@ public Storage<String> cast(Storage<?> storage, CastProblemAggregator problemAgg
}

private Storage<String> castFromMixed(
Storage<?> mixedStorage, CastProblemAggregator problemAggregator) {
ColumnStorage mixedStorage, CastProblemAggregator problemAggregator) {
return StorageConverter.innerLoop(
Builder.getForText(mixedStorage.size(), targetType),
Builder.getForText(mixedStorage.getSize(), targetType),
mixedStorage,
(i) -> {
Object o = mixedStorage.getItemBoxed(i);
Object o = mixedStorage.getItemAsObject(i);
return switch (o) {
case LocalTime d -> adapt(convertTime(d), problemAggregator);
case LocalDate d -> adapt(convertDate(d), problemAggregator);
Expand All @@ -72,34 +70,34 @@ private Storage<String> castFromMixed(
}

private Storage<String> castLongStorage(
AbstractLongStorage longStorage, CastProblemAggregator problemAggregator) {
ColumnLongStorage longStorage, CastProblemAggregator problemAggregator) {
return StorageConverter.innerLoop(
Builder.getForText(longStorage.size(), targetType),
Builder.getForText(longStorage.getSize(), targetType),
longStorage,
(i) -> {
long value = longStorage.getItem(i);
long value = longStorage.get(i);
return adapt(Long.toString(value), problemAggregator);
});
}

private Storage<String> castBoolStorage(
BoolStorage boolStorage, CastProblemAggregator problemAggregator) {
ColumnBooleanStorage boolStorage, CastProblemAggregator problemAggregator) {
return StorageConverter.innerLoop(
Builder.getForText(boolStorage.size(), targetType),
Builder.getForText(boolStorage.getSize(), targetType),
boolStorage,
(i) -> {
boolean value = boolStorage.getItem(i);
boolean value = boolStorage.get(i);
return adapt(convertBoolean(value), problemAggregator);
});
}

private Storage<String> castDoubleStorage(
DoubleStorage doubleStorage, CastProblemAggregator problemAggregator) {
ColumnDoubleStorage doubleStorage, CastProblemAggregator problemAggregator) {
return StorageConverter.innerLoop(
Builder.getForText(doubleStorage.size(), targetType),
Builder.getForText(doubleStorage.getSize(), targetType),
doubleStorage,
(i) -> {
double value = doubleStorage.getItem(i);
double value = doubleStorage.get(i);
return adapt(Double.toString(value), problemAggregator);
});
}
Expand All @@ -110,7 +108,7 @@ private <T> Storage<String> castTemporalStorage(
Builder.getForText(storage.size(), targetType),
storage,
(i) -> {
var value = storage.getItemBoxed(i);
var value = storage.getItemBoxed((int) i);
return adapt(converter.apply(value), problemAggregator);
});
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
import java.time.LocalTime;
import java.time.ZonedDateTime;
import org.enso.table.data.column.builder.Builder;
import org.enso.table.data.column.storage.ColumnStorage;
import org.enso.table.data.column.storage.Storage;
import org.enso.table.data.column.storage.datetime.DateTimeStorage;
import org.enso.table.data.column.storage.datetime.TimeOfDayStorage;
Expand All @@ -24,12 +25,12 @@ public Storage<LocalTime> cast(Storage<?> storage, CastProblemAggregator problem
}

private Storage<LocalTime> castFromMixed(
Storage<?> mixedStorage, CastProblemAggregator problemAggregator) {
ColumnStorage mixedStorage, CastProblemAggregator problemAggregator) {
return StorageConverter.innerLoop(
Builder.getForTime(mixedStorage.size()),
Builder.getForTime(mixedStorage.getSize()),
mixedStorage,
(i) -> {
Object o = mixedStorage.getItemBoxed(i);
Object o = mixedStorage.getItemAsObject(i);
return switch (o) {
case LocalTime d -> d;
case ZonedDateTime d -> convertDateTime(d);
Expand Down

0 comments on commit 3839918

Please sign in to comment.