database tile cache

master
Thomas Rudin 2018-05-02 11:45:03 +02:00
parent f7d7d736af
commit ce950e0598
13 changed files with 829 additions and 6 deletions

19
pom.xml
View File

@ -100,6 +100,25 @@
<version>4.12</version>
<scope>test</scope>
</dependency>
<!-- xml bind -->
<dependency>
<groupId>javax.xml.bind</groupId>
<artifactId>jaxb-api</artifactId>
<version>2.2.11</version>
</dependency>
<dependency>
<groupId>com.sun.xml.bind</groupId>
<artifactId>jaxb-core</artifactId>
<version>2.2.11</version>
</dependency>
<dependency>
<groupId>com.sun.xml.bind</groupId>
<artifactId>jaxb-impl</artifactId>
<version>2.2.11</version>
</dependency>
</dependencies>
<build>

View File

@ -8,6 +8,7 @@ import io.rudin.minetest.tileserver.blockdb.tables.Blocks;
import io.rudin.minetest.tileserver.blockdb.tables.Player;
import io.rudin.minetest.tileserver.blockdb.tables.TileserverBlockChanges;
import io.rudin.minetest.tileserver.blockdb.tables.TileserverBlockDepth;
import io.rudin.minetest.tileserver.blockdb.tables.TileserverTiles;
import java.util.ArrayList;
import java.util.Arrays;
@ -33,7 +34,7 @@ import org.jooq.impl.SchemaImpl;
@SuppressWarnings({ "all", "unchecked", "rawtypes" })
public class DefaultSchema extends SchemaImpl {
private static final long serialVersionUID = -76175788;
private static final long serialVersionUID = 1582418477;
/**
* The reference instance of <code></code>
@ -60,6 +61,11 @@ public class DefaultSchema extends SchemaImpl {
*/
public final TileserverBlockDepth TILESERVER_BLOCK_DEPTH = io.rudin.minetest.tileserver.blockdb.tables.TileserverBlockDepth.TILESERVER_BLOCK_DEPTH;
/**
* The table <code>tileserver_tiles</code>.
*/
public final TileserverTiles TILESERVER_TILES = io.rudin.minetest.tileserver.blockdb.tables.TileserverTiles.TILESERVER_TILES;
/**
* No further instances allowed
*/
@ -88,6 +94,7 @@ public class DefaultSchema extends SchemaImpl {
Blocks.BLOCKS,
Player.PLAYER,
TileserverBlockChanges.TILESERVER_BLOCK_CHANGES,
TileserverBlockDepth.TILESERVER_BLOCK_DEPTH);
TileserverBlockDepth.TILESERVER_BLOCK_DEPTH,
TileserverTiles.TILESERVER_TILES);
}
}

View File

@ -8,6 +8,7 @@ import io.rudin.minetest.tileserver.blockdb.tables.Blocks;
import io.rudin.minetest.tileserver.blockdb.tables.Player;
import io.rudin.minetest.tileserver.blockdb.tables.TileserverBlockChanges;
import io.rudin.minetest.tileserver.blockdb.tables.TileserverBlockDepth;
import io.rudin.minetest.tileserver.blockdb.tables.TileserverTiles;
import javax.annotation.Generated;
@ -37,6 +38,7 @@ public class Indexes {
public static final Index PLAYER_PKEY = Indexes0.PLAYER_PKEY;
public static final Index TILESERVER_BLOCK_CHANGES_PKEY = Indexes0.TILESERVER_BLOCK_CHANGES_PKEY;
public static final Index TILESERVER_BLOCK_DEPTH_PKEY = Indexes0.TILESERVER_BLOCK_DEPTH_PKEY;
public static final Index TILESERVER_TILES_PKEY = Indexes0.TILESERVER_TILES_PKEY;
// -------------------------------------------------------------------------
// [#1459] distribute members to avoid static initialisers > 64kb
@ -47,5 +49,6 @@ public class Indexes {
public static Index PLAYER_PKEY = Internal.createIndex("player_pkey", Player.PLAYER, new OrderField[] { Player.PLAYER.NAME }, true);
public static Index TILESERVER_BLOCK_CHANGES_PKEY = Internal.createIndex("tileserver_block_changes_pkey", TileserverBlockChanges.TILESERVER_BLOCK_CHANGES, new OrderField[] { TileserverBlockChanges.TILESERVER_BLOCK_CHANGES.POSX, TileserverBlockChanges.TILESERVER_BLOCK_CHANGES.POSY, TileserverBlockChanges.TILESERVER_BLOCK_CHANGES.POSZ }, true);
public static Index TILESERVER_BLOCK_DEPTH_PKEY = Internal.createIndex("tileserver_block_depth_pkey", TileserverBlockDepth.TILESERVER_BLOCK_DEPTH, new OrderField[] { TileserverBlockDepth.TILESERVER_BLOCK_DEPTH.POSX, TileserverBlockDepth.TILESERVER_BLOCK_DEPTH.POSZ }, true);
public static Index TILESERVER_TILES_PKEY = Internal.createIndex("tileserver_tiles_pkey", TileserverTiles.TILESERVER_TILES, new OrderField[] { TileserverTiles.TILESERVER_TILES.X, TileserverTiles.TILESERVER_TILES.Y, TileserverTiles.TILESERVER_TILES.Z }, true);
}
}

View File

@ -8,10 +8,12 @@ import io.rudin.minetest.tileserver.blockdb.tables.Blocks;
import io.rudin.minetest.tileserver.blockdb.tables.Player;
import io.rudin.minetest.tileserver.blockdb.tables.TileserverBlockChanges;
import io.rudin.minetest.tileserver.blockdb.tables.TileserverBlockDepth;
import io.rudin.minetest.tileserver.blockdb.tables.TileserverTiles;
import io.rudin.minetest.tileserver.blockdb.tables.records.BlocksRecord;
import io.rudin.minetest.tileserver.blockdb.tables.records.PlayerRecord;
import io.rudin.minetest.tileserver.blockdb.tables.records.TileserverBlockChangesRecord;
import io.rudin.minetest.tileserver.blockdb.tables.records.TileserverBlockDepthRecord;
import io.rudin.minetest.tileserver.blockdb.tables.records.TileserverTilesRecord;
import javax.annotation.Generated;
@ -46,6 +48,7 @@ public class Keys {
public static final UniqueKey<PlayerRecord> PLAYER_PKEY = UniqueKeys0.PLAYER_PKEY;
public static final UniqueKey<TileserverBlockChangesRecord> TILESERVER_BLOCK_CHANGES_PKEY = UniqueKeys0.TILESERVER_BLOCK_CHANGES_PKEY;
public static final UniqueKey<TileserverBlockDepthRecord> TILESERVER_BLOCK_DEPTH_PKEY = UniqueKeys0.TILESERVER_BLOCK_DEPTH_PKEY;
public static final UniqueKey<TileserverTilesRecord> TILESERVER_TILES_PKEY = UniqueKeys0.TILESERVER_TILES_PKEY;
// -------------------------------------------------------------------------
// FOREIGN KEY definitions
@ -61,5 +64,6 @@ public class Keys {
public static final UniqueKey<PlayerRecord> PLAYER_PKEY = Internal.createUniqueKey(Player.PLAYER, "player_pkey", Player.PLAYER.NAME);
public static final UniqueKey<TileserverBlockChangesRecord> TILESERVER_BLOCK_CHANGES_PKEY = Internal.createUniqueKey(TileserverBlockChanges.TILESERVER_BLOCK_CHANGES, "tileserver_block_changes_pkey", TileserverBlockChanges.TILESERVER_BLOCK_CHANGES.POSX, TileserverBlockChanges.TILESERVER_BLOCK_CHANGES.POSY, TileserverBlockChanges.TILESERVER_BLOCK_CHANGES.POSZ);
public static final UniqueKey<TileserverBlockDepthRecord> TILESERVER_BLOCK_DEPTH_PKEY = Internal.createUniqueKey(TileserverBlockDepth.TILESERVER_BLOCK_DEPTH, "tileserver_block_depth_pkey", TileserverBlockDepth.TILESERVER_BLOCK_DEPTH.POSX, TileserverBlockDepth.TILESERVER_BLOCK_DEPTH.POSZ);
public static final UniqueKey<TileserverTilesRecord> TILESERVER_TILES_PKEY = Internal.createUniqueKey(TileserverTiles.TILESERVER_TILES, "tileserver_tiles_pkey", TileserverTiles.TILESERVER_TILES.X, TileserverTiles.TILESERVER_TILES.Y, TileserverTiles.TILESERVER_TILES.Z);
}
}

View File

@ -8,6 +8,7 @@ import io.rudin.minetest.tileserver.blockdb.tables.Blocks;
import io.rudin.minetest.tileserver.blockdb.tables.Player;
import io.rudin.minetest.tileserver.blockdb.tables.TileserverBlockChanges;
import io.rudin.minetest.tileserver.blockdb.tables.TileserverBlockDepth;
import io.rudin.minetest.tileserver.blockdb.tables.TileserverTiles;
import javax.annotation.Generated;
@ -44,4 +45,9 @@ public class Tables {
* The table <code>tileserver_block_depth</code>.
*/
public static final TileserverBlockDepth TILESERVER_BLOCK_DEPTH = io.rudin.minetest.tileserver.blockdb.tables.TileserverBlockDepth.TILESERVER_BLOCK_DEPTH;
/**
* The table <code>tileserver_tiles</code>.
*/
public static final TileserverTiles TILESERVER_TILES = io.rudin.minetest.tileserver.blockdb.tables.TileserverTiles.TILESERVER_TILES;
}

View File

@ -0,0 +1,173 @@
/*
* This file is generated by jOOQ.
*/
package io.rudin.minetest.tileserver.blockdb.tables;
import io.rudin.minetest.tileserver.blockdb.DefaultSchema;
import io.rudin.minetest.tileserver.blockdb.Indexes;
import io.rudin.minetest.tileserver.blockdb.Keys;
import io.rudin.minetest.tileserver.blockdb.tables.records.TileserverTilesRecord;
import java.util.Arrays;
import java.util.List;
import javax.annotation.Generated;
import org.jooq.Field;
import org.jooq.Index;
import org.jooq.Name;
import org.jooq.Schema;
import org.jooq.Table;
import org.jooq.TableField;
import org.jooq.UniqueKey;
import org.jooq.impl.DSL;
import org.jooq.impl.TableImpl;
/**
* This class is generated by jOOQ.
*/
@Generated(
value = {
"http://www.jooq.org",
"jOOQ version:3.10.5"
},
comments = "This class is generated by jOOQ"
)
@SuppressWarnings({ "all", "unchecked", "rawtypes" })
public class TileserverTiles extends TableImpl<TileserverTilesRecord> {
private static final long serialVersionUID = -916322810;
/**
* The reference instance of <code>tileserver_tiles</code>
*/
public static final TileserverTiles TILESERVER_TILES = new TileserverTiles();
/**
* The class holding records for this type
*/
@Override
public Class<TileserverTilesRecord> getRecordType() {
return TileserverTilesRecord.class;
}
/**
* The column <code>tileserver_tiles.x</code>.
*/
public final TableField<TileserverTilesRecord, Integer> X = createField("x", org.jooq.impl.SQLDataType.INTEGER.nullable(false), this, "");
/**
* The column <code>tileserver_tiles.y</code>.
*/
public final TableField<TileserverTilesRecord, Integer> Y = createField("y", org.jooq.impl.SQLDataType.INTEGER.nullable(false), this, "");
/**
* The column <code>tileserver_tiles.z</code>.
*/
public final TableField<TileserverTilesRecord, Integer> Z = createField("z", org.jooq.impl.SQLDataType.INTEGER.nullable(false), this, "");
/**
* The column <code>tileserver_tiles.mtime</code>.
*/
public final TableField<TileserverTilesRecord, Long> MTIME = createField("mtime", org.jooq.impl.SQLDataType.BIGINT.nullable(false), this, "");
/**
* The column <code>tileserver_tiles.tile</code>.
*/
public final TableField<TileserverTilesRecord, byte[]> TILE = createField("tile", org.jooq.impl.SQLDataType.BLOB, this, "");
/**
* Create a <code>tileserver_tiles</code> table reference
*/
public TileserverTiles() {
this(DSL.name("tileserver_tiles"), null);
}
/**
* Create an aliased <code>tileserver_tiles</code> table reference
*/
public TileserverTiles(String alias) {
this(DSL.name(alias), TILESERVER_TILES);
}
/**
* Create an aliased <code>tileserver_tiles</code> table reference
*/
public TileserverTiles(Name alias) {
this(alias, TILESERVER_TILES);
}
private TileserverTiles(Name alias, Table<TileserverTilesRecord> aliased) {
this(alias, aliased, null);
}
private TileserverTiles(Name alias, Table<TileserverTilesRecord> aliased, Field<?>[] parameters) {
super(alias, null, aliased, parameters, "");
}
/**
* {@inheritDoc}
*/
@Override
public Schema getSchema() {
return DefaultSchema.DEFAULT_SCHEMA;
}
/**
* {@inheritDoc}
*/
@Override
public List<Index> getIndexes() {
return Arrays.<Index>asList(Indexes.TILESERVER_TILES_PKEY);
}
/**
* {@inheritDoc}
*/
@Override
public UniqueKey<TileserverTilesRecord> getPrimaryKey() {
return Keys.TILESERVER_TILES_PKEY;
}
/**
* {@inheritDoc}
*/
@Override
public List<UniqueKey<TileserverTilesRecord>> getKeys() {
return Arrays.<UniqueKey<TileserverTilesRecord>>asList(Keys.TILESERVER_TILES_PKEY);
}
/**
* {@inheritDoc}
*/
@Override
public TileserverTiles as(String alias) {
return new TileserverTiles(DSL.name(alias), this);
}
/**
* {@inheritDoc}
*/
@Override
public TileserverTiles as(Name alias) {
return new TileserverTiles(alias, this);
}
/**
* Rename this table
*/
@Override
public TileserverTiles rename(String name) {
return new TileserverTiles(DSL.name(name), null);
}
/**
* Rename this table
*/
@Override
public TileserverTiles rename(Name name) {
return new TileserverTiles(name, null);
}
}

View File

@ -0,0 +1,88 @@
/*
* This file is generated by jOOQ.
*/
package io.rudin.minetest.tileserver.blockdb.tables.daos;
import io.rudin.minetest.tileserver.blockdb.tables.TileserverTiles;
import io.rudin.minetest.tileserver.blockdb.tables.records.TileserverTilesRecord;
import java.util.List;
import javax.annotation.Generated;
import org.jooq.Configuration;
import org.jooq.Record3;
import org.jooq.impl.DAOImpl;
/**
* This class is generated by jOOQ.
*/
@Generated(
value = {
"http://www.jooq.org",
"jOOQ version:3.10.5"
},
comments = "This class is generated by jOOQ"
)
@SuppressWarnings({ "all", "unchecked", "rawtypes" })
public class TileserverTilesDao extends DAOImpl<TileserverTilesRecord, io.rudin.minetest.tileserver.blockdb.tables.pojos.TileserverTiles, Record3<Integer, Integer, Integer>> {
/**
* Create a new TileserverTilesDao without any configuration
*/
public TileserverTilesDao() {
super(TileserverTiles.TILESERVER_TILES, io.rudin.minetest.tileserver.blockdb.tables.pojos.TileserverTiles.class);
}
/**
* Create a new TileserverTilesDao with an attached configuration
*/
public TileserverTilesDao(Configuration configuration) {
super(TileserverTiles.TILESERVER_TILES, io.rudin.minetest.tileserver.blockdb.tables.pojos.TileserverTiles.class, configuration);
}
/**
* {@inheritDoc}
*/
@Override
protected Record3<Integer, Integer, Integer> getId(io.rudin.minetest.tileserver.blockdb.tables.pojos.TileserverTiles object) {
return compositeKeyRecord(object.getX(), object.getY(), object.getZ());
}
/**
* Fetch records that have <code>x IN (values)</code>
*/
public List<io.rudin.minetest.tileserver.blockdb.tables.pojos.TileserverTiles> fetchByX(Integer... values) {
return fetch(TileserverTiles.TILESERVER_TILES.X, values);
}
/**
* Fetch records that have <code>y IN (values)</code>
*/
public List<io.rudin.minetest.tileserver.blockdb.tables.pojos.TileserverTiles> fetchByY(Integer... values) {
return fetch(TileserverTiles.TILESERVER_TILES.Y, values);
}
/**
* Fetch records that have <code>z IN (values)</code>
*/
public List<io.rudin.minetest.tileserver.blockdb.tables.pojos.TileserverTiles> fetchByZ(Integer... values) {
return fetch(TileserverTiles.TILESERVER_TILES.Z, values);
}
/**
* Fetch records that have <code>mtime IN (values)</code>
*/
public List<io.rudin.minetest.tileserver.blockdb.tables.pojos.TileserverTiles> fetchByMtime(Long... values) {
return fetch(TileserverTiles.TILESERVER_TILES.MTIME, values);
}
/**
* Fetch records that have <code>tile IN (values)</code>
*/
public List<io.rudin.minetest.tileserver.blockdb.tables.pojos.TileserverTiles> fetchByTile(byte[]... values) {
return fetch(TileserverTiles.TILESERVER_TILES.TILE, values);
}
}

View File

@ -0,0 +1,110 @@
/*
* This file is generated by jOOQ.
*/
package io.rudin.minetest.tileserver.blockdb.tables.pojos;
import java.io.Serializable;
import javax.annotation.Generated;
/**
* This class is generated by jOOQ.
*/
@Generated(
value = {
"http://www.jooq.org",
"jOOQ version:3.10.5"
},
comments = "This class is generated by jOOQ"
)
@SuppressWarnings({ "all", "unchecked", "rawtypes" })
public class TileserverTiles implements Serializable {
private static final long serialVersionUID = 1480737257;
private Integer x;
private Integer y;
private Integer z;
private Long mtime;
private byte[] tile;
public TileserverTiles() {}
public TileserverTiles(TileserverTiles value) {
this.x = value.x;
this.y = value.y;
this.z = value.z;
this.mtime = value.mtime;
this.tile = value.tile;
}
public TileserverTiles(
Integer x,
Integer y,
Integer z,
Long mtime,
byte[] tile
) {
this.x = x;
this.y = y;
this.z = z;
this.mtime = mtime;
this.tile = tile;
}
public Integer getX() {
return this.x;
}
public void setX(Integer x) {
this.x = x;
}
public Integer getY() {
return this.y;
}
public void setY(Integer y) {
this.y = y;
}
public Integer getZ() {
return this.z;
}
public void setZ(Integer z) {
this.z = z;
}
public Long getMtime() {
return this.mtime;
}
public void setMtime(Long mtime) {
this.mtime = mtime;
}
public byte[] getTile() {
return this.tile;
}
public void setTile(byte... tile) {
this.tile = tile;
}
@Override
public String toString() {
StringBuilder sb = new StringBuilder("TileserverTiles (");
sb.append(x);
sb.append(", ").append(y);
sb.append(", ").append(z);
sb.append(", ").append(mtime);
sb.append(", ").append("[binary...]");
sb.append(")");
return sb.toString();
}
}

View File

@ -0,0 +1,336 @@
/*
* This file is generated by jOOQ.
*/
package io.rudin.minetest.tileserver.blockdb.tables.records;
import io.rudin.minetest.tileserver.blockdb.tables.TileserverTiles;
import javax.annotation.Generated;
import org.jooq.Field;
import org.jooq.Record3;
import org.jooq.Record5;
import org.jooq.Row5;
import org.jooq.impl.UpdatableRecordImpl;
/**
* This class is generated by jOOQ.
*/
@Generated(
value = {
"http://www.jooq.org",
"jOOQ version:3.10.5"
},
comments = "This class is generated by jOOQ"
)
@SuppressWarnings({ "all", "unchecked", "rawtypes" })
public class TileserverTilesRecord extends UpdatableRecordImpl<TileserverTilesRecord> implements Record5<Integer, Integer, Integer, Long, byte[]> {
private static final long serialVersionUID = -899694994;
/**
* Setter for <code>tileserver_tiles.x</code>.
*/
public void setX(Integer value) {
set(0, value);
}
/**
* Getter for <code>tileserver_tiles.x</code>.
*/
public Integer getX() {
return (Integer) get(0);
}
/**
* Setter for <code>tileserver_tiles.y</code>.
*/
public void setY(Integer value) {
set(1, value);
}
/**
* Getter for <code>tileserver_tiles.y</code>.
*/
public Integer getY() {
return (Integer) get(1);
}
/**
* Setter for <code>tileserver_tiles.z</code>.
*/
public void setZ(Integer value) {
set(2, value);
}
/**
* Getter for <code>tileserver_tiles.z</code>.
*/
public Integer getZ() {
return (Integer) get(2);
}
/**
* Setter for <code>tileserver_tiles.mtime</code>.
*/
public void setMtime(Long value) {
set(3, value);
}
/**
* Getter for <code>tileserver_tiles.mtime</code>.
*/
public Long getMtime() {
return (Long) get(3);
}
/**
* Setter for <code>tileserver_tiles.tile</code>.
*/
public void setTile(byte... value) {
set(4, value);
}
/**
* Getter for <code>tileserver_tiles.tile</code>.
*/
public byte[] getTile() {
return (byte[]) get(4);
}
// -------------------------------------------------------------------------
// Primary key information
// -------------------------------------------------------------------------
/**
* {@inheritDoc}
*/
@Override
public Record3<Integer, Integer, Integer> key() {
return (Record3) super.key();
}
// -------------------------------------------------------------------------
// Record5 type implementation
// -------------------------------------------------------------------------
/**
* {@inheritDoc}
*/
@Override
public Row5<Integer, Integer, Integer, Long, byte[]> fieldsRow() {
return (Row5) super.fieldsRow();
}
/**
* {@inheritDoc}
*/
@Override
public Row5<Integer, Integer, Integer, Long, byte[]> valuesRow() {
return (Row5) super.valuesRow();
}
/**
* {@inheritDoc}
*/
@Override
public Field<Integer> field1() {
return TileserverTiles.TILESERVER_TILES.X;
}
/**
* {@inheritDoc}
*/
@Override
public Field<Integer> field2() {
return TileserverTiles.TILESERVER_TILES.Y;
}
/**
* {@inheritDoc}
*/
@Override
public Field<Integer> field3() {
return TileserverTiles.TILESERVER_TILES.Z;
}
/**
* {@inheritDoc}
*/
@Override
public Field<Long> field4() {
return TileserverTiles.TILESERVER_TILES.MTIME;
}
/**
* {@inheritDoc}
*/
@Override
public Field<byte[]> field5() {
return TileserverTiles.TILESERVER_TILES.TILE;
}
/**
* {@inheritDoc}
*/
@Override
public Integer component1() {
return getX();
}
/**
* {@inheritDoc}
*/
@Override
public Integer component2() {
return getY();
}
/**
* {@inheritDoc}
*/
@Override
public Integer component3() {
return getZ();
}
/**
* {@inheritDoc}
*/
@Override
public Long component4() {
return getMtime();
}
/**
* {@inheritDoc}
*/
@Override
public byte[] component5() {
return getTile();
}
/**
* {@inheritDoc}
*/
@Override
public Integer value1() {
return getX();
}
/**
* {@inheritDoc}
*/
@Override
public Integer value2() {
return getY();
}
/**
* {@inheritDoc}
*/
@Override
public Integer value3() {
return getZ();
}
/**
* {@inheritDoc}
*/
@Override
public Long value4() {
return getMtime();
}
/**
* {@inheritDoc}
*/
@Override
public byte[] value5() {
return getTile();
}
/**
* {@inheritDoc}
*/
@Override
public TileserverTilesRecord value1(Integer value) {
setX(value);
return this;
}
/**
* {@inheritDoc}
*/
@Override
public TileserverTilesRecord value2(Integer value) {
setY(value);
return this;
}
/**
* {@inheritDoc}
*/
@Override
public TileserverTilesRecord value3(Integer value) {
setZ(value);
return this;
}
/**
* {@inheritDoc}
*/
@Override
public TileserverTilesRecord value4(Long value) {
setMtime(value);
return this;
}
/**
* {@inheritDoc}
*/
@Override
public TileserverTilesRecord value5(byte... value) {
setTile(value);
return this;
}
/**
* {@inheritDoc}
*/
@Override
public TileserverTilesRecord values(Integer value1, Integer value2, Integer value3, Long value4, byte[] value5) {
value1(value1);
value2(value2);
value3(value3);
value4(value4);
value5(value5);
return this;
}
// -------------------------------------------------------------------------
// Constructors
// -------------------------------------------------------------------------
/**
* Create a detached TileserverTilesRecord
*/
public TileserverTilesRecord() {
super(TileserverTiles.TILESERVER_TILES);
}
/**
* Create a detached, initialised TileserverTilesRecord
*/
public TileserverTilesRecord(Integer x, Integer y, Integer z, Long mtime, byte[] tile) {
super(TileserverTiles.TILESERVER_TILES);
set(0, x);
set(1, y);
set(2, z);
set(3, mtime);
set(4, tile);
}
}

View File

@ -9,13 +9,14 @@ import io.rudin.minetest.tileserver.ColorTable;
import io.rudin.minetest.tileserver.provider.ColorTableProvider;
import io.rudin.minetest.tileserver.provider.ExecutorProvider;
import io.rudin.minetest.tileserver.service.TileCache;
import io.rudin.minetest.tileserver.service.impl.FileTileCache;
import io.rudin.minetest.tileserver.service.impl.DatabaseTileCache;
public class ServiceModule extends AbstractModule {
@Override
protected void configure() {
bind(TileCache.class).to(FileTileCache.class);
bind(TileCache.class).to(DatabaseTileCache.class);
//bind(TileCache.class).to(FileTileCache.class);
bind(ColorTable.class).toProvider(ColorTableProvider.class);
bind(ExecutorService.class).toProvider(ExecutorProvider.class);
bind(ScheduledExecutorService.class).toProvider(ExecutorProvider.class);

View File

@ -0,0 +1,67 @@
package io.rudin.minetest.tileserver.service.impl;
import io.rudin.minetest.tileserver.blockdb.tables.records.TileserverTilesRecord;
import io.rudin.minetest.tileserver.service.TileCache;
import org.jooq.DSLContext;
import org.jooq.impl.DSL;
import javax.inject.Inject;
import javax.inject.Singleton;
import java.io.IOException;
import static io.rudin.minetest.tileserver.blockdb.tables.TileserverTiles.TILESERVER_TILES;
@Singleton
public class DatabaseTileCache implements TileCache {
@Inject
public DatabaseTileCache(DSLContext ctx){
this.ctx = ctx;
}
private final DSLContext ctx;
@Override
public void put(int x, int y, int z, byte[] data) throws IOException {
TileserverTilesRecord record = ctx.newRecord(TILESERVER_TILES);
record.setTile(data);
record.setX(x);
record.setY(y);
record.setZ(z);
record.setMtime(System.currentTimeMillis());
record.insert();
}
@Override
public byte[] get(int x, int y, int z) throws IOException {
return ctx
.select(TILESERVER_TILES.TILE)
.from(TILESERVER_TILES)
.where(TILESERVER_TILES.X.eq(x))
.and(TILESERVER_TILES.Y.eq(y))
.and(TILESERVER_TILES.Z.eq(z))
.fetchOne(TILESERVER_TILES.TILE);
}
@Override
public boolean has(int x, int y, int z) {
Integer count = ctx
.select(DSL.count())
.from(TILESERVER_TILES)
.where(TILESERVER_TILES.X.eq(x))
.and(TILESERVER_TILES.Y.eq(y))
.and(TILESERVER_TILES.Z.eq(z))
.fetchOne(DSL.count());
return count > 0;
}
@Override
public void remove(int x, int y, int z) {
ctx.delete(TILESERVER_TILES)
.where(TILESERVER_TILES.X.eq(x))
.and(TILESERVER_TILES.Y.eq(y))
.and(TILESERVER_TILES.Z.eq(z))
.execute();
}
}

View File

@ -20,6 +20,15 @@ create table tileserver_block_depth (
PRIMARY KEY (posX,posZ)
);
create table tileserver_tiles (
x int not null,
y int not null,
z int not null,
mtime bigint not null,
tile bytea,
PRIMARY KEY(x,y,z)
);
create or replace function on_blocks_change() returns trigger as
$BODY$

View File

@ -17,7 +17,7 @@ public class CodeGen {
jdbc.setDriver("org.postgresql.Driver");
jdbc.setPassword("enter");
jdbc.setUsername("postgres");
jdbc.setUrl("jdbc:postgresql://10.0.0.144:5432/minetest");
jdbc.setUrl("jdbc:postgresql://10.0.0.147:5432/minetest");
cfg.setJdbc(jdbc);
Generator generator = new Generator();
@ -25,7 +25,7 @@ public class CodeGen {
Database database = new Database();
database.setName("org.jooq.util.postgres.PostgresDatabase");
database.setIncludes("blocks|player|tileserver_block_changes|tileserver_block_depth");
database.setIncludes("blocks|player|tileserver_block_changes|tileserver_block_depth|tileserver_tiles");
database.setInputSchema("public");
database.setOutputSchemaToDefault(true);
generator.setDatabase(database);