This is an automated email from the ASF dual-hosted git repository.
bchapuis pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/incubator-baremaps.git
The following commit(s) were added to refs/heads/main by this push:
new fb007135 Refactor copy writer with constants (#817)
fb007135 is described below
commit fb00713585f70af4f907e3509a5477a58f0cdd9b
Author: Bertil Chapuis <[email protected]>
AuthorDate: Wed Jan 3 00:49:26 2024 +0100
Refactor copy writer with constants (#817)
---
baremaps-core/pom.xml.versionsBackup | 173 ---------------------
.../apache/baremaps/postgres/copy/CopyWriter.java | 122 +++++++++++----
.../postgres/copy/GeometryValueHandler.java | 4 +-
3 files changed, 90 insertions(+), 209 deletions(-)
diff --git a/baremaps-core/pom.xml.versionsBackup
b/baremaps-core/pom.xml.versionsBackup
deleted file mode 100644
index e4b75527..00000000
--- a/baremaps-core/pom.xml.versionsBackup
+++ /dev/null
@@ -1,173 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-Licensed to the Apache Software Foundation (ASF) under one or more
-contributor license agreements. See the NOTICE file distributed with
-this work for additional information regarding copyright ownership.
-The ASF licenses this file to you 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.
--->
-<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
http://maven.apache.org/xsd/maven-4.0.0.xsd">
- <modelVersion>4.0.0</modelVersion>
- <parent>
- <groupId>org.apache.baremaps</groupId>
- <artifactId>baremaps</artifactId>
- <version>0.7.3-SNAPSHOT</version>
- </parent>
-
- <artifactId>baremaps-core</artifactId>
-
- <dependencies>
- <dependency>
- <groupId>com.fasterxml.jackson.core</groupId>
- <artifactId>jackson-annotations</artifactId>
- </dependency>
- <dependency>
- <groupId>com.fasterxml.jackson.core</groupId>
- <artifactId>jackson-core</artifactId>
- </dependency>
- <dependency>
- <groupId>com.fasterxml.jackson.core</groupId>
- <artifactId>jackson-databind</artifactId>
- </dependency>
- <dependency>
- <groupId>com.fasterxml.jackson.dataformat</groupId>
- <artifactId>jackson-dataformat-csv</artifactId>
- </dependency>
- <dependency>
- <groupId>com.fasterxml.jackson.dataformat</groupId>
- <artifactId>jackson-dataformat-yaml</artifactId>
- </dependency>
- <dependency>
- <groupId>com.fasterxml.jackson.datatype</groupId>
- <artifactId>jackson-datatype-jdk8</artifactId>
- </dependency>
- <dependency>
- <groupId>com.github.ben-manes.caffeine</groupId>
- <artifactId>caffeine</artifactId>
- </dependency>
- <dependency>
- <groupId>com.google.guava</groupId>
- <artifactId>guava</artifactId>
- </dependency>
- <dependency>
- <groupId>com.google.protobuf</groupId>
- <artifactId>protobuf-java</artifactId>
- </dependency>
- <dependency>
- <groupId>com.zaxxer</groupId>
- <artifactId>HikariCP</artifactId>
- </dependency>
- <dependency>
- <groupId>de.bytefish</groupId>
- <artifactId>pgbulkinsert</artifactId>
- </dependency>
- <dependency>
- <groupId>it.unimi.dsi</groupId>
- <artifactId>fastutil</artifactId>
- </dependency>
- <dependency>
- <groupId>mil.nga.geopackage</groupId>
- <artifactId>geopackage</artifactId>
- </dependency>
- <dependency>
- <groupId>net.ripe.ipresource</groupId>
- <artifactId>ipresource</artifactId>
- </dependency>
- <dependency>
- <groupId>org.apache.calcite</groupId>
- <artifactId>calcite-core</artifactId>
- </dependency>
- <dependency>
- <groupId>org.apache.commons</groupId>
- <artifactId>commons-compress</artifactId>
- </dependency>
- <dependency>
- <groupId>org.apache.lucene</groupId>
- <artifactId>lucene-core</artifactId>
- </dependency>
- <dependency>
- <groupId>org.apache.lucene</groupId>
- <artifactId>lucene-expressions</artifactId>
- </dependency>
- <dependency>
- <groupId>org.apache.lucene</groupId>
- <artifactId>lucene-queryparser</artifactId>
- </dependency>
- <dependency>
- <groupId>org.apache.lucene</groupId>
- <artifactId>lucene-spatial-extras</artifactId>
- </dependency>
- <dependency>
- <groupId>org.graalvm.js</groupId>
- <artifactId>js</artifactId>
- </dependency>
- <dependency>
- <groupId>org.graalvm.sdk</groupId>
- <artifactId>graal-sdk</artifactId>
- </dependency>
- <dependency>
- <groupId>org.locationtech.jts</groupId>
- <artifactId>jts-core</artifactId>
- </dependency>
- <dependency>
- <groupId>org.locationtech.proj4j</groupId>
- <artifactId>proj4j</artifactId>
- </dependency>
- <!-- TODO: Remove this dependency due to license incompatibility -->
- <dependency>
- <groupId>org.locationtech.proj4j</groupId>
- <artifactId>proj4j-epsg</artifactId>
- </dependency>
- <dependency>
- <groupId>org.postgresql</groupId>
- <artifactId>postgresql</artifactId>
- </dependency>
- <dependency>
- <groupId>org.wololo</groupId>
- <artifactId>flatgeobuf</artifactId>
- <version>3.24.0</version>
- </dependency>
- <dependency>
- <groupId>org.xerial</groupId>
- <artifactId>sqlite-jdbc</artifactId>
- </dependency>
- </dependencies>
-
- <build>
- <plugins>
- <plugin>
- <groupId>org.xolstice.maven.plugins</groupId>
- <artifactId>protobuf-maven-plugin</artifactId>
- <version>${version.plugin.protobuf-maven-plugin}</version>
- <extensions>true</extensions>
- <executions>
- <execution>
- <goals>
- <goal>compile</goal>
- <goal>test-compile</goal>
- </goals>
- <configuration>
-
<protocArtifact>com.google.protobuf:protoc:3.19.3:exe:${os.detected.classifier}</protocArtifact>
- </configuration>
- </execution>
- </executions>
- </plugin>
- </plugins>
- <extensions>
- <extension>
- <groupId>kr.motd.maven</groupId>
- <artifactId>os-maven-plugin</artifactId>
- <version>${version.plugin.os-maven-plugin}</version>
- </extension>
- </extensions>
- </build>
-</project>
diff --git
a/baremaps-core/src/main/java/org/apache/baremaps/postgres/copy/CopyWriter.java
b/baremaps-core/src/main/java/org/apache/baremaps/postgres/copy/CopyWriter.java
index 0eadbb28..bdbb2a99 100644
---
a/baremaps-core/src/main/java/org/apache/baremaps/postgres/copy/CopyWriter.java
+++
b/baremaps-core/src/main/java/org/apache/baremaps/postgres/copy/CopyWriter.java
@@ -25,10 +25,9 @@ import java.io.DataOutputStream;
import java.io.IOException;
import java.net.Inet4Address;
import java.net.Inet6Address;
-import java.nio.charset.Charset;
-import java.nio.charset.StandardCharsets;
import java.time.LocalDate;
import java.time.LocalDateTime;
+import java.util.Collection;
import java.util.List;
import java.util.Map;
import org.locationtech.jts.geom.Geometry;
@@ -38,17 +37,74 @@ import org.postgresql.core.Oid;
/** A helper for writing in a {@code PGCopyOutputStream}. */
public class CopyWriter implements AutoCloseable {
- private static final Charset UTF8 = StandardCharsets.UTF_8;
+ public static final StringValueHandler STRING_HANDLER =
+ new StringValueHandler();
- private static final byte IPV4 = 2;
- private static final byte IPV4_MASK = 32;
- private static final byte IPV4_IS_CIDR = 0;
+ public static final CollectionValueHandler<String, Collection<String>>
STRING_COLLECTION_HANDLER =
+ new CollectionValueHandler<>(Oid.TEXT, new StringValueHandler());
- private static final byte IPV6 = 3;
- private static final int IPV6_MASK = 128;
- private static final byte IPV6_IS_CIDR = 0;
+ public static final BooleanValueHandler BOOLEAN_HANDLER =
+ new BooleanValueHandler();
- private static final byte JSONB_VERSION = 1;
+ public static final CollectionValueHandler<Boolean, Collection<Boolean>>
BOOLEAN_COLLECTION_HANDLER =
+ new CollectionValueHandler<>(Oid.BOOL, new BooleanValueHandler());
+
+ public static final ByteValueHandler<Number> BYTE_HANDLER =
+ new ByteValueHandler<>();
+
+ public static final ByteArrayValueHandler BYTE_ARRAY_HANDLER =
+ new ByteArrayValueHandler();
+
+ public static final ShortValueHandler<Number> SHORT_HANDLER =
+ new ShortValueHandler<>();
+
+ public static final CollectionValueHandler<Short, Collection<Short>>
SHORT_COLLECTION_HANDLER =
+ new CollectionValueHandler<>(Oid.INT2, new ShortValueHandler<>());
+
+ public static final IntegerValueHandler<Number> INTEGER_HANDLER =
+ new IntegerValueHandler<>();
+
+ public static final CollectionValueHandler<Integer, Collection<Integer>>
INTEGER_COLLECTION_HANDLER =
+ new CollectionValueHandler<>(Oid.INT4, new IntegerValueHandler<>());
+
+ public static final LongValueHandler<Number> LONG_HANDLER =
+ new LongValueHandler<>();
+
+ public static final CollectionValueHandler<Long, Collection<Long>>
LONG_COLLECTION_HANDLER =
+ new CollectionValueHandler<>(Oid.INT8, new LongValueHandler<>());
+
+ public static final FloatValueHandler<Number> FLOAT_HANDLER =
+ new FloatValueHandler<>();
+
+ public static final CollectionValueHandler<Float, Collection<Float>>
FLOAT_COLLECTION_HANDLER =
+ new CollectionValueHandler<>(Oid.FLOAT4, new FloatValueHandler<>());
+
+ public static final DoubleValueHandler<Number> DOUBLE_HANDLER =
+ new DoubleValueHandler<>();
+
+ public static final CollectionValueHandler<Double, Collection<Double>>
DOUBLE_COLLECTION_HANDLER =
+ new CollectionValueHandler<>(Oid.FLOAT8, new DoubleValueHandler<>());
+
+ public static final LocalDateValueHandler LOCAL_DATE_HANDLER =
+ new LocalDateValueHandler();
+
+ public static final LocalDateTimeValueHandler LOCAL_DATE_TIME_HANDLER =
+ new LocalDateTimeValueHandler();
+
+ public static final Inet4AddressValueHandler INET_4_ADDRESS_HANDLER =
+ new Inet4AddressValueHandler();
+
+ public static final Inet6AddressValueHandler INET_6_ADDRESS_HANDLER =
+ new Inet6AddressValueHandler();
+
+ public static final HstoreValueHandler HSTORE_HANDLER =
+ new HstoreValueHandler();
+
+ public static final JsonbValueHandler JSONB_HANDLER =
+ new JsonbValueHandler();
+
+ public static final GeometryValueHandler GEOMETRY_HANDLER =
+ new GeometryValueHandler();
private final DataOutputStream data;
@@ -118,7 +174,7 @@ public class CopyWriter implements AutoCloseable {
* @throws IOException
*/
public void write(String value) throws IOException {
- new StringValueHandler().handle(data, value);
+ STRING_HANDLER.handle(data, value);
}
/**
@@ -128,7 +184,7 @@ public class CopyWriter implements AutoCloseable {
* @throws IOException
*/
public void write(List<String> value) throws IOException {
- new CollectionValueHandler<>(Oid.TEXT, new
StringValueHandler()).handle(data, value);
+ STRING_COLLECTION_HANDLER.handle(data, value);
}
/**
@@ -138,7 +194,7 @@ public class CopyWriter implements AutoCloseable {
* @throws IOException
*/
public void writeBoolean(Boolean value) throws IOException {
- new BooleanValueHandler().handle(data, value);
+ BOOLEAN_HANDLER.handle(data, value);
}
/**
@@ -148,7 +204,7 @@ public class CopyWriter implements AutoCloseable {
* @throws IOException
*/
public void writeBooleanList(List<Boolean> value) throws IOException {
- new CollectionValueHandler<>(Oid.BOOL, new
BooleanValueHandler()).handle(data, value);
+ BOOLEAN_COLLECTION_HANDLER.handle(data, value);
}
/**
@@ -158,7 +214,7 @@ public class CopyWriter implements AutoCloseable {
* @throws IOException
*/
public void writeByte(Byte value) throws IOException {
- new ByteValueHandler<>().handle(data, value);
+ BYTE_HANDLER.handle(data, value);
}
/**
@@ -168,7 +224,7 @@ public class CopyWriter implements AutoCloseable {
* @throws IOException
*/
public void writeByteArray(byte[] value) throws IOException {
- new ByteArrayValueHandler().handle(data, value);
+ BYTE_ARRAY_HANDLER.handle(data, value);
}
/**
@@ -178,7 +234,7 @@ public class CopyWriter implements AutoCloseable {
* @throws IOException
*/
public void writeShort(Short value) throws IOException {
- new ShortValueHandler<>().handle(data, value);
+ SHORT_HANDLER.handle(data, value);
}
/**
@@ -188,7 +244,7 @@ public class CopyWriter implements AutoCloseable {
* @throws IOException
*/
public void writeShortList(List<Short> value) throws IOException {
- new CollectionValueHandler<>(Oid.INT2, new
ShortValueHandler<Short>()).handle(data, value);
+ SHORT_COLLECTION_HANDLER.handle(data, value);
}
/**
@@ -198,7 +254,7 @@ public class CopyWriter implements AutoCloseable {
* @throws IOException
*/
public void writeInteger(Integer value) throws IOException {
- new IntegerValueHandler<>().handle(data, value);
+ INTEGER_HANDLER.handle(data, value);
}
/**
@@ -208,7 +264,7 @@ public class CopyWriter implements AutoCloseable {
* @throws IOException
*/
public void writeIntegerList(List<Integer> value) throws IOException {
- new CollectionValueHandler<>(Oid.INT4, new
IntegerValueHandler<Integer>()).handle(data, value);
+ INTEGER_COLLECTION_HANDLER.handle(data, value);
}
/**
@@ -218,7 +274,7 @@ public class CopyWriter implements AutoCloseable {
* @throws IOException
*/
public void writeLong(Long value) throws IOException {
- new LongValueHandler<>().handle(data, value);
+ LONG_HANDLER.handle(data, value);
}
/**
@@ -228,7 +284,7 @@ public class CopyWriter implements AutoCloseable {
* @throws IOException
*/
public void writeLongList(List<Long> value) throws IOException {
- new CollectionValueHandler<>(Oid.INT8, new
LongValueHandler<Long>()).handle(data, value);
+ LONG_COLLECTION_HANDLER.handle(data, value);
}
/**
@@ -238,7 +294,7 @@ public class CopyWriter implements AutoCloseable {
* @throws IOException
*/
public void writeFloat(Float value) throws IOException {
- new FloatValueHandler<>().handle(data, value);
+ FLOAT_HANDLER.handle(data, value);
}
/**
@@ -248,7 +304,7 @@ public class CopyWriter implements AutoCloseable {
* @throws IOException
*/
public void writeFloatList(List<Float> value) throws IOException {
- new CollectionValueHandler<>(Oid.FLOAT4, new
FloatValueHandler<Float>()).handle(data, value);
+ FLOAT_COLLECTION_HANDLER.handle(data, value);
}
/**
@@ -258,7 +314,7 @@ public class CopyWriter implements AutoCloseable {
* @throws IOException
*/
public void writeDouble(Double value) throws IOException {
- new DoubleValueHandler<>().handle(data, value);
+ DOUBLE_HANDLER.handle(data, value);
}
/**
@@ -268,7 +324,7 @@ public class CopyWriter implements AutoCloseable {
* @throws IOException
*/
public void writeDoubleArray(List<Double> value) throws IOException {
- new CollectionValueHandler<>(Oid.FLOAT8, new
DoubleValueHandler<Double>()).handle(data, value);
+ DOUBLE_COLLECTION_HANDLER.handle(data, value);
}
/**
@@ -278,7 +334,7 @@ public class CopyWriter implements AutoCloseable {
* @throws IOException
*/
public void writeLocalDate(LocalDate value) throws IOException {
- new LocalDateValueHandler().handle(data, value);
+ LOCAL_DATE_HANDLER.handle(data, value);
}
/**
@@ -288,7 +344,7 @@ public class CopyWriter implements AutoCloseable {
* @throws IOException
*/
public void writeLocalDateTime(LocalDateTime value) throws IOException {
- new LocalDateTimeValueHandler().handle(data, value);
+ LOCAL_DATE_TIME_HANDLER.handle(data, value);
}
/**
@@ -298,7 +354,7 @@ public class CopyWriter implements AutoCloseable {
* @throws IOException
*/
public void writeInet4Adress(Inet4Address value) throws IOException {
- new Inet4AddressValueHandler().handle(data, value);
+ INET_4_ADDRESS_HANDLER.handle(data, value);
}
/**
@@ -308,7 +364,7 @@ public class CopyWriter implements AutoCloseable {
* @throws IOException
*/
public void writeInet6Adress(Inet6Address value) throws IOException {
- new Inet6AddressValueHandler().handle(data, value);
+ INET_6_ADDRESS_HANDLER.handle(data, value);
}
/**
@@ -318,7 +374,7 @@ public class CopyWriter implements AutoCloseable {
* @throws IOException
*/
public void writeHstore(Map<String, String> value) throws IOException {
- new HstoreValueHandler().handle(data, value);
+ HSTORE_HANDLER.handle(data, value);
}
/**
@@ -328,7 +384,7 @@ public class CopyWriter implements AutoCloseable {
* @throws IOException
*/
public void writeJsonb(String value) throws IOException {
- new JsonbValueHandler().handle(data, value);
+ JSONB_HANDLER.handle(data, value);
}
/**
@@ -338,7 +394,7 @@ public class CopyWriter implements AutoCloseable {
* @throws IOException
*/
public void writeGeometry(Geometry value) throws IOException {
- new GeometryValueHandler().handle(data, value);
+ GEOMETRY_HANDLER.handle(data, value);
}
/** Close the writer. */
diff --git
a/baremaps-core/src/main/java/org/apache/baremaps/postgres/copy/GeometryValueHandler.java
b/baremaps-core/src/main/java/org/apache/baremaps/postgres/copy/GeometryValueHandler.java
index 41704a29..d50fc3d3 100644
---
a/baremaps-core/src/main/java/org/apache/baremaps/postgres/copy/GeometryValueHandler.java
+++
b/baremaps-core/src/main/java/org/apache/baremaps/postgres/copy/GeometryValueHandler.java
@@ -27,11 +27,9 @@ import org.locationtech.jts.io.WKBWriter;
public class GeometryValueHandler extends BaseValueHandler<Geometry> {
- private final WKBWriter writer = new WKBWriter(2, wkbNDR, true);
-
@Override
protected void internalHandle(DataOutputStream buffer, Geometry value)
throws IOException {
- byte[] wkb = writer.write(value);
+ byte[] wkb = new WKBWriter(2, wkbNDR, true).write(value);
buffer.writeInt(wkb.length);
buffer.write(wkb, 0, wkb.length);
}