You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@baremaps.apache.org by bc...@apache.org on 2023/06/20 22:00:25 UTC
[incubator-baremaps] 05/05: Connect calcite to collections
This is an automated email from the ASF dual-hosted git repository.
bchapuis pushed a commit to branch calcite
in repository https://gitbox.apache.org/repos/asf/incubator-baremaps.git
commit 3dafaddcfed2d5dd2a6bb05877a37a4ad691280f
Author: Bertil Chapuis <bc...@gmail.com>
AuthorDate: Wed Jun 21 00:00:07 2023 +0200
Connect calcite to collections
---
.../OpenStreetMapGeometriesBenchmark.java | 2 +-
.../java/org/apache/baremaps/calcite/Calcite.java | 85 +++++++++++++---------
.../apache/baremaps/collection/DataCollection.java | 2 +-
.../org/apache/baremaps/collection/store/Row.java | 23 ++++++
.../apache/baremaps/collection/store/RowImpl.java | 3 +
.../baremaps/collection/store/TableAdapter.java | 60 +++++++++++++++
.../baremaps/collection/store/TableImpl.java | 45 +++++++++---
.../collection/{store => type}/RowDataType.java | 44 +++++++----
.../type/{ => geometry}/CoordinateDataType.java | 4 +-
.../baremaps/collection/type/DataTypeProvider.java | 58 ++++++++++++++-
.../baremaps/workflow/tasks/ImportMonacoTest.java | 2 +-
.../workflow/tasks/ImportUpdateDataTest.java | 2 +-
.../tasks/ImportUpdateLiechtensteinTest.java | 2 +-
13 files changed, 266 insertions(+), 66 deletions(-)
diff --git a/baremaps-benchmark/src/main/java/org/apache/baremaps/benchmarks/OpenStreetMapGeometriesBenchmark.java b/baremaps-benchmark/src/main/java/org/apache/baremaps/benchmarks/OpenStreetMapGeometriesBenchmark.java
index b1dcb42c..b079a1e5 100644
--- a/baremaps-benchmark/src/main/java/org/apache/baremaps/benchmarks/OpenStreetMapGeometriesBenchmark.java
+++ b/baremaps-benchmark/src/main/java/org/apache/baremaps/benchmarks/OpenStreetMapGeometriesBenchmark.java
@@ -30,8 +30,8 @@ import org.apache.baremaps.collection.DataMap;
import org.apache.baremaps.collection.IndexedDataMap;
import org.apache.baremaps.collection.memory.MemoryMappedFile;
import org.apache.baremaps.collection.memory.OnHeapMemory;
-import org.apache.baremaps.collection.type.CoordinateDataType;
import org.apache.baremaps.collection.type.LongListDataType;
+import org.apache.baremaps.collection.type.geometry.CoordinateDataType;
import org.apache.baremaps.openstreetmap.model.Node;
import org.apache.baremaps.openstreetmap.model.Relation;
import org.apache.baremaps.openstreetmap.model.Way;
diff --git a/baremaps-core/src/main/java/org/apache/baremaps/calcite/Calcite.java b/baremaps-core/src/main/java/org/apache/baremaps/calcite/Calcite.java
index 300f9af4..9d819f74 100644
--- a/baremaps-core/src/main/java/org/apache/baremaps/calcite/Calcite.java
+++ b/baremaps-core/src/main/java/org/apache/baremaps/calcite/Calcite.java
@@ -16,9 +16,12 @@ import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
-import java.util.Arrays;
import java.util.List;
import java.util.Properties;
+import org.apache.baremaps.collection.AppendOnlyBuffer;
+import org.apache.baremaps.collection.IndexedDataList;
+import org.apache.baremaps.collection.store.*;
+import org.apache.baremaps.collection.type.RowDataType;
import org.apache.calcite.DataContext;
import org.apache.calcite.jdbc.CalciteConnection;
import org.apache.calcite.jdbc.JavaTypeFactoryImpl;
@@ -33,24 +36,37 @@ import org.apache.calcite.sql.type.SqlTypeName;
public class Calcite {
- public static final List<Object[]> PLAYER_DATA_AS_OBJECT_ARRAY = Arrays.asList(
- new Object[] {1, "Wizard", 5},
- new Object[] {2, "Hunter", 7}
+ private static final Schema PLAYER_SCHEMA = new SchemaImpl("player", List.of(
+ new ColumnImpl("id", Integer.class),
+ new ColumnImpl("name", String.class),
+ new ColumnImpl("level", Integer.class)));
- );
- public static final List<Object[]> EQUIPMENT_DATA_AS_OBJECT_ARRAY = Arrays.asList(
- new Object[] {1, "fireball", 7, 1},
- new Object[] {2, "rifle", 4, 2});
+ private static final Table PLAYER_TABLE = new TableImpl(
+ PLAYER_SCHEMA,
+ new IndexedDataList<>(new AppendOnlyBuffer<>(new RowDataType(PLAYER_SCHEMA))));
+ static {
+ PLAYER_TABLE.add(new RowImpl(PLAYER_TABLE.schema(), List.of(1, "Wizard", 5)));
+ PLAYER_TABLE.add(new RowImpl(PLAYER_TABLE.schema(), List.of(2, "Hunter", 7)));
+ }
- public static void main(String[] args) throws SQLException {
+ private static final Schema EQUIPMENT_SCHEMA = new SchemaImpl("equipment", List.of(
+ new ColumnImpl("id", Integer.class),
+ new ColumnImpl("name", String.class),
+ new ColumnImpl("damage", Integer.class),
+ new ColumnImpl("player_id", Integer.class)));
+ private static final Table EQUIPMENT_TABLE = new TableImpl(
+ EQUIPMENT_SCHEMA,
+ new IndexedDataList<>(new AppendOnlyBuffer<>(new RowDataType(EQUIPMENT_SCHEMA))));
- RelDataTypeFactory typeFactory = new JavaTypeFactoryImpl();
- RelDataTypeFactory.Builder playerType = new RelDataTypeFactory.Builder(typeFactory);
+ static {
+ EQUIPMENT_TABLE.add(new RowImpl(EQUIPMENT_TABLE.schema(), List.of(1, "fireball", 7, 1)));
+ EQUIPMENT_TABLE.add(new RowImpl(EQUIPMENT_TABLE.schema(), List.of(2, "rifle", 4, 2)));
+ }
+ public static void main(String[] args) throws SQLException {
Properties info = new Properties();
- // https://calcite.apache.org/javadocAggregate/org/apache/calcite/config/Lex.html#JAVA
info.setProperty("lex", "MYSQL");
Connection connection = DriverManager.getConnection("jdbc:calcite:", info);
@@ -59,24 +75,12 @@ public class Calcite {
SchemaPlus rootSchema = calciteConnection.getRootSchema();
- playerType.add("id", SqlTypeName.INTEGER);
- playerType.add("name", SqlTypeName.VARCHAR);
- playerType.add("level", SqlTypeName.INTEGER);
-
- ListTable playerTable = new ListTable(playerType.build(), PLAYER_DATA_AS_OBJECT_ARRAY);
+ ListTable playerTable = new ListTable(PLAYER_TABLE);
rootSchema.add("player", playerTable);
- RelDataTypeFactory.Builder equipmentType = new RelDataTypeFactory.Builder(typeFactory);
-
- equipmentType.add("id", SqlTypeName.INTEGER);
- equipmentType.add("name", SqlTypeName.VARCHAR);
- equipmentType.add("damage", SqlTypeName.INTEGER);
- equipmentType.add("player_id", SqlTypeName.INTEGER);
-
- ListTable equipmentTable = new ListTable(equipmentType.build(), EQUIPMENT_DATA_AS_OBJECT_ARRAY);
+ ListTable equipmentTable = new ListTable(EQUIPMENT_TABLE);
rootSchema.add("equipment", equipmentTable);
-
String sql =
"SELECT player.name, equipment.name FROM player INNER JOIN equipment ON player.id = equipment.player_id ";
ResultSet resultSet = connection.createStatement().executeQuery(sql);
@@ -87,7 +91,6 @@ public class Calcite {
}
System.out.println(b);
-
resultSet.close();
}
@@ -95,22 +98,36 @@ public class Calcite {
* A simple table based on a list.
*/
private static class ListTable extends AbstractTable implements ScannableTable {
- private final RelDataType rowType;
- private final List<Object[]> data;
- ListTable(RelDataType rowType, List<Object[]> data) {
- this.rowType = rowType;
- this.data = data;
+ private final Table table;
+
+ ListTable(Table table) {
+ this.table = table;
}
@Override
public Enumerable<Object[]> scan(final DataContext root) {
- return Linq4j.asEnumerable(data);
+ var collection = new TableAdapter<>(table, row -> row.values().toArray());
+ return Linq4j.asEnumerable(collection);
}
@Override
public RelDataType getRowType(final RelDataTypeFactory typeFactory) {
- return rowType;
+ var rowType = new RelDataTypeFactory.Builder(typeFactory);
+ for (Column column : table.schema().columns()) {
+ rowType.add(column.name(), toSqlType(column.type()));
+ }
+ return rowType.build();
+ }
+
+ private RelDataType toSqlType(Class type) {
+ if (type.equals(Integer.class)) {
+ return new JavaTypeFactoryImpl().createSqlType(SqlTypeName.INTEGER);
+ } else if (type.equals(String.class)) {
+ return new JavaTypeFactoryImpl().createSqlType(SqlTypeName.VARCHAR);
+ } else {
+ throw new IllegalArgumentException();
+ }
}
}
}
diff --git a/baremaps-core/src/main/java/org/apache/baremaps/collection/DataCollection.java b/baremaps-core/src/main/java/org/apache/baremaps/collection/DataCollection.java
index 394af1ae..772f8d01 100644
--- a/baremaps-core/src/main/java/org/apache/baremaps/collection/DataCollection.java
+++ b/baremaps-core/src/main/java/org/apache/baremaps/collection/DataCollection.java
@@ -21,7 +21,7 @@ public interface DataCollection<E> extends Collection<E> {
*
* @return the number of values
*/
- public abstract long sizeAsLong();
+ long sizeAsLong();
/** {@inheritDoc} */
default int size() {
diff --git a/baremaps-core/src/main/java/org/apache/baremaps/collection/store/Row.java b/baremaps-core/src/main/java/org/apache/baremaps/collection/store/Row.java
index 8f10ce81..d0f0b82a 100644
--- a/baremaps-core/src/main/java/org/apache/baremaps/collection/store/Row.java
+++ b/baremaps-core/src/main/java/org/apache/baremaps/collection/store/Row.java
@@ -65,4 +65,27 @@ public interface Row {
*/
void set(int index, Object value);
+ /**
+ * Sets the value of the specified column and returns the row.
+ *
+ * @param column the column
+ * @param value the value
+ * @return the row
+ */
+ default Row with(String column, Object value) {
+ set(column, value);
+ return this;
+ }
+
+ /**
+ * Sets the value of the specified column and returns the row.
+ *
+ * @param index the index of the column
+ * @param value the value
+ * @return the row
+ */
+ default Row with(int index, Object value) {
+ set(index, value);
+ return this;
+ }
}
diff --git a/baremaps-core/src/main/java/org/apache/baremaps/collection/store/RowImpl.java b/baremaps-core/src/main/java/org/apache/baremaps/collection/store/RowImpl.java
index 71d682aa..d3824ad7 100644
--- a/baremaps-core/src/main/java/org/apache/baremaps/collection/store/RowImpl.java
+++ b/baremaps-core/src/main/java/org/apache/baremaps/collection/store/RowImpl.java
@@ -54,6 +54,9 @@ public record RowImpl(Schema schema, List values) implements Row {
throw new IllegalArgumentException("Column " + column + " not found.");
}
+ /**
+ * {@inheritDoc}
+ */
@Override
public void set(int index, Object value) {
values.set(index, value);
diff --git a/baremaps-core/src/main/java/org/apache/baremaps/collection/store/TableAdapter.java b/baremaps-core/src/main/java/org/apache/baremaps/collection/store/TableAdapter.java
new file mode 100644
index 00000000..4976776c
--- /dev/null
+++ b/baremaps-core/src/main/java/org/apache/baremaps/collection/store/TableAdapter.java
@@ -0,0 +1,60 @@
+/*
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
+ * in compliance with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ * or implied. See the License for the specific language governing permissions and limitations under
+ * the License.
+ */
+
+package org.apache.baremaps.collection.store;
+
+import java.util.AbstractCollection;
+import java.util.Iterator;
+import java.util.function.Function;
+
+public class TableAdapter<T> extends AbstractCollection<T> {
+
+ private final Function<Row, T> transformer;
+
+ private final Table table;
+
+ public TableAdapter(Table table, Function<Row, T> transformer) {
+ this.transformer = transformer;
+ this.table = table;
+ }
+
+ @Override
+ public Iterator iterator() {
+ return new TableIterator(table.iterator());
+ }
+
+ @Override
+ public int size() {
+ return table.size();
+ }
+
+ private class TableIterator implements Iterator<T> {
+
+ private final Iterator<Row> iterator;
+
+ public TableIterator(Iterator<Row> iterator) {
+ this.iterator = iterator;
+ }
+
+ @Override
+ public boolean hasNext() {
+ return iterator.hasNext();
+ }
+
+ @Override
+ public T next() {
+ var row = iterator.next();
+ return transformer.apply(row);
+ }
+ }
+
+}
diff --git a/baremaps-core/src/main/java/org/apache/baremaps/collection/store/TableImpl.java b/baremaps-core/src/main/java/org/apache/baremaps/collection/store/TableImpl.java
index 6be35e4f..e4a511f7 100644
--- a/baremaps-core/src/main/java/org/apache/baremaps/collection/store/TableImpl.java
+++ b/baremaps-core/src/main/java/org/apache/baremaps/collection/store/TableImpl.java
@@ -12,37 +12,64 @@
package org.apache.baremaps.collection.store;
-import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Iterator;
+import org.apache.baremaps.collection.AbstractDataCollection;
+import org.apache.baremaps.collection.DataCollection;
/**
* A table is a collection of rows respecting a schema.
*/
-public class TableImpl extends ArrayList<Row> implements Table {
+public class TableImpl extends AbstractDataCollection<Row> implements Table {
- private final Schema dataType;
+ private final Schema schema;
+
+ private final Collection<Row> rows;
/**
* Constructs a table with the specified schema.
*
* @param schema the schema of the table
+ * @param rows the collection of rows
*/
- public TableImpl(Schema schema) {
- this.dataType = schema;
+ public TableImpl(Schema schema, Collection<Row> rows) {
+ this.schema = schema;
+ this.rows = rows;
}
/**
* {@inheritDoc}
*/
@Override
- public long sizeAsLong() {
- return size();
+ public Schema schema() {
+ return schema;
}
/**
* {@inheritDoc}
*/
@Override
- public Schema schema() {
- return dataType;
+ public boolean add(Row e) {
+ return rows.add(e);
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public Iterator<Row> iterator() {
+ return rows.iterator();
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public long sizeAsLong() {
+ if (rows instanceof DataCollection dataCollection) {
+ return dataCollection.sizeAsLong();
+ } else {
+ return rows.size();
+ }
}
}
diff --git a/baremaps-core/src/main/java/org/apache/baremaps/collection/store/RowDataType.java b/baremaps-core/src/main/java/org/apache/baremaps/collection/type/RowDataType.java
similarity index 59%
rename from baremaps-core/src/main/java/org/apache/baremaps/collection/store/RowDataType.java
rename to baremaps-core/src/main/java/org/apache/baremaps/collection/type/RowDataType.java
index 164a264e..df9cd00a 100644
--- a/baremaps-core/src/main/java/org/apache/baremaps/collection/store/RowDataType.java
+++ b/baremaps-core/src/main/java/org/apache/baremaps/collection/type/RowDataType.java
@@ -10,24 +10,42 @@
* the License.
*/
-package org.apache.baremaps.collection.store;
+package org.apache.baremaps.collection.type;
import java.nio.ByteBuffer;
import java.util.ArrayList;
+import java.util.HashMap;
import java.util.Map;
-import org.apache.baremaps.collection.type.*;
+import org.apache.baremaps.collection.store.Row;
+import org.apache.baremaps.collection.store.RowImpl;
+import org.apache.baremaps.collection.store.Schema;
+import org.apache.baremaps.collection.type.geometry.*;
+import org.locationtech.jts.geom.*;
public class RowDataType implements DataType<Row> {
- private static final Map<Class, DataType> types = Map.of(
- Byte.class, new ByteDataType(),
- Boolean.class, new BooleanDataType(),
- Short.class, new ShortDataType(),
- Integer.class, new IntegerDataType(),
- Long.class, new LongDataType(),
- Float.class, new FloatDataType(),
- Double.class, new DoubleDataType(),
- String.class, new StringDataType());
+ private static final Map<Class, DataType> types;
+
+ static {
+ types = new HashMap<>();
+ types.put(Byte.class, new ByteDataType());
+ types.put(Boolean.class, new BooleanDataType());
+ types.put(Short.class, new ShortDataType());
+ types.put(Integer.class, new IntegerDataType());
+ types.put(Long.class, new LongDataType());
+ types.put(Float.class, new FloatDataType());
+ types.put(Double.class, new DoubleDataType());
+ types.put(String.class, new StringDataType());
+ types.put(Geometry.class, new GeometryDataType());
+ types.put(Point.class, new PointDataType());
+ types.put(LineString.class, new LineStringDataType());
+ types.put(Polygon.class, new PolygonDataType());
+ types.put(MultiPoint.class, new MultiPointDataType());
+ types.put(MultiLineString.class, new MultiLineStringDataType());
+ types.put(MultiPolygon.class, new MultiPolygonDataType());
+ types.put(GeometryCollection.class, new GeometryCollectionDataType());
+ types.put(Coordinate.class, new CoordinateDataType());
+ }
private final Schema schema;
@@ -62,8 +80,8 @@ public class RowDataType implements DataType<Row> {
var columnType = column.type();
var dataType = types.get(columnType);
var value = row.get(i);
- dataType.write(buffer, position, value);
- p += dataType.size(buffer, position);
+ dataType.write(buffer, p, value);
+ p += dataType.size(buffer, p);
}
buffer.putInt(position, p - position);
}
diff --git a/baremaps-core/src/main/java/org/apache/baremaps/collection/type/CoordinateDataType.java b/baremaps-core/src/main/java/org/apache/baremaps/collection/type/geometry/CoordinateDataType.java
similarity index 88%
rename from baremaps-core/src/main/java/org/apache/baremaps/collection/type/CoordinateDataType.java
rename to baremaps-core/src/main/java/org/apache/baremaps/collection/type/geometry/CoordinateDataType.java
index 427d34b6..385fc8fb 100644
--- a/baremaps-core/src/main/java/org/apache/baremaps/collection/type/CoordinateDataType.java
+++ b/baremaps-core/src/main/java/org/apache/baremaps/collection/type/geometry/CoordinateDataType.java
@@ -10,11 +10,13 @@
* the License.
*/
-package org.apache.baremaps.collection.type;
+package org.apache.baremaps.collection.type.geometry;
import java.nio.ByteBuffer;
+import org.apache.baremaps.collection.type.DataType;
+import org.apache.baremaps.collection.type.MemoryAlignedDataType;
import org.locationtech.jts.geom.Coordinate;
/** A {@link DataType} for reading and writing {@link Coordinate}s in {@link ByteBuffer}s. */
diff --git a/baremaps-core/src/test/java/org/apache/baremaps/collection/type/DataTypeProvider.java b/baremaps-core/src/test/java/org/apache/baremaps/collection/type/DataTypeProvider.java
index b2662472..52c9bdde 100644
--- a/baremaps-core/src/test/java/org/apache/baremaps/collection/type/DataTypeProvider.java
+++ b/baremaps-core/src/test/java/org/apache/baremaps/collection/type/DataTypeProvider.java
@@ -17,6 +17,7 @@ import java.util.List;
import java.util.Map;
import java.util.stream.Stream;
import org.apache.baremaps.collection.store.ColumnImpl;
+import org.apache.baremaps.collection.store.Row;
import org.apache.baremaps.collection.store.Schema;
import org.apache.baremaps.collection.store.SchemaImpl;
import org.apache.baremaps.collection.type.geometry.*;
@@ -25,8 +26,58 @@ import org.locationtech.jts.geom.*;
public class DataTypeProvider {
- private final Schema schema = new SchemaImpl("row",
- List.of(new ColumnImpl("integer", Integer.class), new ColumnImpl("string", String.class)));
+ private static final GeometryFactory geometryFactory = new GeometryFactory();
+
+ private static final Schema schema = new SchemaImpl("row", List.of(
+ new ColumnImpl("byte", Byte.class),
+ new ColumnImpl("boolean", Boolean.class),
+ new ColumnImpl("short", Short.class),
+ new ColumnImpl("integer", Integer.class),
+ new ColumnImpl("long", Long.class),
+ new ColumnImpl("float", Float.class),
+ new ColumnImpl("double", Double.class),
+ new ColumnImpl("string", String.class),
+ new ColumnImpl("geometry", Geometry.class),
+ new ColumnImpl("point", Point.class),
+ new ColumnImpl("linestring", LineString.class),
+ new ColumnImpl("polygon", Polygon.class),
+ new ColumnImpl("multipoint", MultiPoint.class),
+ new ColumnImpl("multilinestring", MultiLineString.class),
+ new ColumnImpl("multipolygon", MultiPolygon.class),
+ new ColumnImpl("geometrycollection", GeometryCollection.class),
+ new ColumnImpl("coordinate", Coordinate.class)));
+
+ private static final Row row = schema.createRow()
+ .with("byte", Byte.MAX_VALUE)
+ .with("boolean", true)
+ .with("short", Short.MAX_VALUE)
+ .with("integer", Integer.MAX_VALUE)
+ .with("long", Long.MAX_VALUE)
+ .with("float", Float.MAX_VALUE)
+ .with("double", Double.MAX_VALUE)
+ .with("string", "Hello, World!")
+ .with("geometry", geometryFactory.createPoint(new Coordinate(0, 0)))
+ .with("point", geometryFactory.createPoint(new Coordinate(0, 0)))
+ .with("linestring",
+ geometryFactory
+ .createLineString(new Coordinate[] {new Coordinate(0, 0), new Coordinate(1, 1)}))
+ .with("polygon",
+ geometryFactory.createPolygon(new Coordinate[] {new Coordinate(0, 0),
+ new Coordinate(1, 1), new Coordinate(0, 1), new Coordinate(0, 0)}))
+ .with("multipoint",
+ geometryFactory
+ .createMultiPoint(new Coordinate[] {new Coordinate(0, 0), new Coordinate(1, 1)}))
+ .with("multilinestring",
+ geometryFactory.createMultiLineString(new LineString[] {geometryFactory
+ .createLineString(new Coordinate[] {new Coordinate(0, 0), new Coordinate(1, 1)})}))
+ .with("multipolygon",
+ geometryFactory.createMultiPolygon(
+ new Polygon[] {geometryFactory.createPolygon(new Coordinate[] {new Coordinate(0, 0),
+ new Coordinate(1, 1), new Coordinate(0, 1), new Coordinate(0, 0)})}))
+ .with("geometrycollection",
+ geometryFactory.createGeometryCollection(
+ new Geometry[] {geometryFactory.createPoint(new Coordinate(0, 0))}))
+ .with("coordinate", new Coordinate(0, 0));
private static Stream<Arguments> dataTypes() {
return Stream.of(
@@ -267,8 +318,7 @@ public class DataTypeProvider {
new Coordinate(4, 1), new Coordinate(3, 1)})})})),
// Row
- // Arguments.of(new RowDataType(sc), )
-
+ Arguments.of(new RowDataType(schema), row),
// Geometry
Arguments.of(new GeometryDataType(),
diff --git a/baremaps-core/src/test/java/org/apache/baremaps/workflow/tasks/ImportMonacoTest.java b/baremaps-core/src/test/java/org/apache/baremaps/workflow/tasks/ImportMonacoTest.java
index 00770518..84c903f8 100644
--- a/baremaps-core/src/test/java/org/apache/baremaps/workflow/tasks/ImportMonacoTest.java
+++ b/baremaps-core/src/test/java/org/apache/baremaps/workflow/tasks/ImportMonacoTest.java
@@ -20,8 +20,8 @@ import org.apache.baremaps.collection.AppendOnlyBuffer;
import org.apache.baremaps.collection.DataMap;
import org.apache.baremaps.collection.IndexedDataMap;
import org.apache.baremaps.collection.memory.OnHeapMemory;
-import org.apache.baremaps.collection.type.CoordinateDataType;
import org.apache.baremaps.collection.type.LongListDataType;
+import org.apache.baremaps.collection.type.geometry.CoordinateDataType;
import org.apache.baremaps.openstreetmap.DiffService;
import org.apache.baremaps.openstreetmap.model.Header;
import org.apache.baremaps.openstreetmap.postgres.PostgresCoordinateMap;
diff --git a/baremaps-core/src/test/java/org/apache/baremaps/workflow/tasks/ImportUpdateDataTest.java b/baremaps-core/src/test/java/org/apache/baremaps/workflow/tasks/ImportUpdateDataTest.java
index 0b947cb6..6d92d4c2 100644
--- a/baremaps-core/src/test/java/org/apache/baremaps/workflow/tasks/ImportUpdateDataTest.java
+++ b/baremaps-core/src/test/java/org/apache/baremaps/workflow/tasks/ImportUpdateDataTest.java
@@ -23,8 +23,8 @@ import org.apache.baremaps.collection.AppendOnlyBuffer;
import org.apache.baremaps.collection.DataMap;
import org.apache.baremaps.collection.IndexedDataMap;
import org.apache.baremaps.collection.memory.OnHeapMemory;
-import org.apache.baremaps.collection.type.CoordinateDataType;
import org.apache.baremaps.collection.type.LongListDataType;
+import org.apache.baremaps.collection.type.geometry.CoordinateDataType;
import org.apache.baremaps.openstreetmap.model.Header;
import org.apache.baremaps.openstreetmap.model.Node;
import org.apache.baremaps.openstreetmap.model.Way;
diff --git a/baremaps-core/src/test/java/org/apache/baremaps/workflow/tasks/ImportUpdateLiechtensteinTest.java b/baremaps-core/src/test/java/org/apache/baremaps/workflow/tasks/ImportUpdateLiechtensteinTest.java
index 309f2504..7fe302a3 100644
--- a/baremaps-core/src/test/java/org/apache/baremaps/workflow/tasks/ImportUpdateLiechtensteinTest.java
+++ b/baremaps-core/src/test/java/org/apache/baremaps/workflow/tasks/ImportUpdateLiechtensteinTest.java
@@ -22,8 +22,8 @@ import org.apache.baremaps.collection.AppendOnlyBuffer;
import org.apache.baremaps.collection.DataMap;
import org.apache.baremaps.collection.IndexedDataMap;
import org.apache.baremaps.collection.memory.OnHeapMemory;
-import org.apache.baremaps.collection.type.CoordinateDataType;
import org.apache.baremaps.collection.type.LongListDataType;
+import org.apache.baremaps.collection.type.geometry.CoordinateDataType;
import org.apache.baremaps.openstreetmap.DiffService;
import org.apache.baremaps.openstreetmap.model.Header;
import org.apache.baremaps.openstreetmap.postgres.PostgresCoordinateMap;