in baremaps-core/src/main/java/org/apache/baremaps/openstreetmap/postgres/PostgresWayRepository.java [86:129]
public PostgresWayRepository(DataSource dataSource, String tableName, String idColumn,
String versionColumn, String uidColumn, String timestampColumn, String changesetColumn,
String tagsColumn, String nodesColumn, String geometryColumn) {
this.dataSource = dataSource;
this.createTable = String.format("""
CREATE TABLE %1$s (
%2$s bigint PRIMARY KEY,
%3$s int,
%4$s int,
%5$s timestamp without time zone,
%6$s bigint,
%7$s jsonb,
%8$s bigint[],
%9$s geometry
)""", tableName, idColumn, versionColumn, uidColumn, timestampColumn, changesetColumn,
tagsColumn, nodesColumn, geometryColumn);
this.dropTable = String.format("DROP TABLE IF EXISTS %1$s CASCADE", tableName);
this.truncateTable = String.format("TRUNCATE TABLE %1$s", tableName);
this.select = String.format(
"SELECT %2$s, %3$s, %4$s, %5$s, %6$s, %7$s, %8$s, st_asbinary(%9$s) FROM %1$s WHERE %2$s = ?",
tableName, idColumn, versionColumn, uidColumn, timestampColumn, changesetColumn, tagsColumn,
nodesColumn, geometryColumn);
this.selectIn = String.format(
"SELECT %2$s, %3$s, %4$s, %5$s, %6$s, %7$s, %8$s, st_asbinary(%9$s) FROM %1$s WHERE %2$s = ANY (?)",
tableName, idColumn, versionColumn, uidColumn, timestampColumn, changesetColumn, tagsColumn,
nodesColumn, geometryColumn);
this.insert = String.format("""
INSERT INTO %1$s (%2$s, %3$s, %4$s, %5$s, %6$s, %7$s, %8$s, %9$s)
VALUES (?, ?, ?, ?, ?, cast (? AS jsonb), ?, ?)
ON CONFLICT (%2$s) DO UPDATE SET
%3$s = excluded.%3$s,
%4$s = excluded.%4$s,
%5$s = excluded.%5$s,
%6$s = excluded.%6$s,
%7$s = excluded.%7$s,
%8$s = excluded.%8$s,
%9$s = excluded.%9$s""", tableName, idColumn, versionColumn, uidColumn, timestampColumn,
changesetColumn, tagsColumn, nodesColumn, geometryColumn);
this.delete = String.format("DELETE FROM %1$s WHERE %2$s = ?", tableName, idColumn);
this.copy = String.format(
"COPY %1$s (%2$s, %3$s, %4$s, %5$s, %6$s, %7$s, %8$s, %9$s) FROM STDIN BINARY", tableName,
idColumn, versionColumn, uidColumn, timestampColumn, changesetColumn, tagsColumn,
nodesColumn, geometryColumn);
}