Skip to content

Commit

Permalink
GeoPackage spec 1.4 updates (version number, rtree udpates)
Browse files Browse the repository at this point in the history
  • Loading branch information
bosborn committed Jan 25, 2024
1 parent 1ee9dd4 commit 88f8cd3
Show file tree
Hide file tree
Showing 7 changed files with 187 additions and 10 deletions.
2 changes: 2 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,8 @@ Adheres to [Semantic Versioning](http://semver.org/).

## 6.6.7 (TBD)

* GeoPackage user version 1.4.0
* R-tree update trigger modifications
* DAO column range support (including geometry envelopes & bounding boxes) to build where clauses & args for queries
* oapi-features-json version 2.3.3

Expand Down
2 changes: 1 addition & 1 deletion src/main/java/mil/nga/geopackage/GeoPackageConstants.java
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ public class GeoPackageConstants {
*
* @since 1.2.1
*/
public static final int USER_VERSION = 10301;
public static final int USER_VERSION = 10400;

/**
* Expected magic number
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -105,6 +105,8 @@ public abstract class RTreeIndexCoreExtension extends BaseExtension {

/**
* Trigger update 1 name
*
* @deprecated replaced by update6 and update7
*/
public static final String TRIGGER_UPDATE1_NAME = "update1";

Expand All @@ -115,6 +117,8 @@ public abstract class RTreeIndexCoreExtension extends BaseExtension {

/**
* Trigger update 3 name
*
* @deprecated replaced by update5
*/
public static final String TRIGGER_UPDATE3_NAME = "update3";

Expand All @@ -123,6 +127,21 @@ public abstract class RTreeIndexCoreExtension extends BaseExtension {
*/
public static final String TRIGGER_UPDATE4_NAME = "update4";

/**
* Trigger update 5 name
*/
public static final String TRIGGER_UPDATE5_NAME = "update5";

/**
* Trigger update 6 name
*/
public static final String TRIGGER_UPDATE6_NAME = "update6";

/**
* Trigger update 7 name
*/
public static final String TRIGGER_UPDATE7_NAME = "update7";

/**
* Trigger delete name
*/
Expand Down Expand Up @@ -524,10 +543,13 @@ public void createAllTriggers(String tableName, String geometryColumnName,
String idColumnName) {

createInsertTrigger(tableName, geometryColumnName, idColumnName);
createUpdate1Trigger(tableName, geometryColumnName, idColumnName);
// createUpdate1Trigger(tableName, geometryColumnName, idColumnName);
createUpdate2Trigger(tableName, geometryColumnName, idColumnName);
createUpdate3Trigger(tableName, geometryColumnName, idColumnName);
// createUpdate3Trigger(tableName, geometryColumnName, idColumnName);
createUpdate4Trigger(tableName, geometryColumnName, idColumnName);
createUpdate5Trigger(tableName, geometryColumnName, idColumnName);
createUpdate6Trigger(tableName, geometryColumnName, idColumnName);
createUpdate7Trigger(tableName, geometryColumnName, idColumnName);
createDeleteTrigger(tableName, geometryColumnName, idColumnName);

}
Expand All @@ -537,7 +559,7 @@ public void createAllTriggers(String tableName, String geometryColumnName,
*
* <pre>
* Conditions: Insertion of non-empty geometry
* Actions : Insert record into rtree
* Actions : Insert record into R-tree
* </pre>
*
* @param tableName
Expand All @@ -561,7 +583,7 @@ public void createInsertTrigger(String tableName, String geometryColumnName,
* <pre>
* Conditions: Update of geometry column to non-empty geometry
* No row ID change
* Actions : Update record in rtree
* Actions : Update record in R-tree
* </pre>
*
* @param tableName
Expand All @@ -570,6 +592,7 @@ public void createInsertTrigger(String tableName, String geometryColumnName,
* geometry column name
* @param idColumnName
* id column name
* @deprecated replaced by update6 and update7
*/
public void createUpdate1Trigger(String tableName,
String geometryColumnName, String idColumnName) {
Expand All @@ -585,7 +608,7 @@ public void createUpdate1Trigger(String tableName,
* <pre>
* Conditions: Update of geometry column to empty geometry
* No row ID change
* Actions : Remove record from rtree
* Actions : Remove record from R-tree
* </pre>
*
* @param tableName
Expand All @@ -610,8 +633,8 @@ public void createUpdate2Trigger(String tableName,
* Conditions: Update of any column
* Row ID change
* Non-empty geometry
* Actions : Remove record from rtree for old {@literal <i>}
* Insert record into rtree for new {@literal <i>}
* Actions : Remove record from R-tree for old {@literal <i>}
* Insert record into R-tree for new {@literal <i>}
* </pre>
*
* @param tableName
Expand All @@ -620,6 +643,7 @@ public void createUpdate2Trigger(String tableName,
* geometry column name
* @param idColumnName
* id column name
* @deprecated replaced by update5
*/
public void createUpdate3Trigger(String tableName,
String geometryColumnName, String idColumnName) {
Expand All @@ -636,7 +660,7 @@ public void createUpdate3Trigger(String tableName,
* Conditions: Update of any column
* Row ID change
* Empty geometry
* Actions : Remove record from rtree for old and new {@literal <i>}
* Actions : Remove record from R-tree for old and new {@literal <i>}
* </pre>
*
* @param tableName
Expand All @@ -654,12 +678,84 @@ public void createUpdate4Trigger(String tableName,
executeSQL(sqlName, tableName, geometryColumnName, idColumnName);
}

/**
* Create update 5 trigger
*
* <pre>
* Conditions: Update of any column
* Row ID change
* Non-empty geometry
* Actions : Remove record from R-tree for old {@literal <i>}
* Insert record into R-tree for new {@literal <i>}
* </pre>
*
* @param tableName
* table name
* @param geometryColumnName
* geometry column name
* @param idColumnName
* id column name
*/
public void createUpdate5Trigger(String tableName,
String geometryColumnName, String idColumnName) {

String sqlName = GeoPackageProperties.getProperty(TRIGGER_PROPERTY,
TRIGGER_UPDATE5_NAME);
executeSQL(sqlName, tableName, geometryColumnName, idColumnName);
}

/**
* Create update 6 trigger
*
* <pre>
* Conditions: Update a non-empty geometry with another non-empty geometry
* Actions : Replace record from R-tree for {@literal <i>}
* </pre>
*
* @param tableName
* table name
* @param geometryColumnName
* geometry column name
* @param idColumnName
* id column name
*/
public void createUpdate6Trigger(String tableName,
String geometryColumnName, String idColumnName) {

String sqlName = GeoPackageProperties.getProperty(TRIGGER_PROPERTY,
TRIGGER_UPDATE6_NAME);
executeSQL(sqlName, tableName, geometryColumnName, idColumnName);
}

/**
* Create update 7 trigger
*
* <pre>
* Conditions: Update a null/empty geometry with a non-empty geometry
* Actions : Insert record into R-tree for new {@literal <i>}
* </pre>
*
* @param tableName
* table name
* @param geometryColumnName
* geometry column name
* @param idColumnName
* id column name
*/
public void createUpdate7Trigger(String tableName,
String geometryColumnName, String idColumnName) {

String sqlName = GeoPackageProperties.getProperty(TRIGGER_PROPERTY,
TRIGGER_UPDATE7_NAME);
executeSQL(sqlName, tableName, geometryColumnName, idColumnName);
}

/**
* Create delete trigger
*
* <pre>
* Conditions: Row deleted
* Actions : Remove record from rtree for old {@literal <i>}
* Actions : Remove record from R-tree for old {@literal <i>}
* </pre>
*
* @param tableName
Expand Down Expand Up @@ -887,6 +983,9 @@ public void dropAllTriggers(String tableName, String geometryColumnName) {
dropUpdate2Trigger(tableName, geometryColumnName);
dropUpdate3Trigger(tableName, geometryColumnName);
dropUpdate4Trigger(tableName, geometryColumnName);
dropUpdate5Trigger(tableName, geometryColumnName);
dropUpdate6Trigger(tableName, geometryColumnName);
dropUpdate7Trigger(tableName, geometryColumnName);
dropDeleteTrigger(tableName, geometryColumnName);

}
Expand Down Expand Up @@ -955,6 +1054,45 @@ public void dropUpdate4Trigger(String tableName,
dropTrigger(tableName, geometryColumnName, TRIGGER_UPDATE4_NAME);
}

/**
* Drop update 5 trigger
*
* @param tableName
* table name
* @param geometryColumnName
* geometry column name
*/
public void dropUpdate5Trigger(String tableName,
String geometryColumnName) {
dropTrigger(tableName, geometryColumnName, TRIGGER_UPDATE5_NAME);
}

/**
* Drop update 6 trigger
*
* @param tableName
* table name
* @param geometryColumnName
* geometry column name
*/
public void dropUpdate6Trigger(String tableName,
String geometryColumnName) {
dropTrigger(tableName, geometryColumnName, TRIGGER_UPDATE6_NAME);
}

/**
* Drop update 7 trigger
*
* @param tableName
* table name
* @param geometryColumnName
* geometry column name
*/
public void dropUpdate7Trigger(String tableName,
String geometryColumnName) {
dropTrigger(tableName, geometryColumnName, TRIGGER_UPDATE7_NAME);
}

/**
* Drop delete trigger
*
Expand Down
3 changes: 3 additions & 0 deletions src/main/resources/geopackage.properties
Original file line number Diff line number Diff line change
Expand Up @@ -76,6 +76,9 @@ geopackage.extensions.rtree_index.sql.trigger.update1=rtree_trigger_update1
geopackage.extensions.rtree_index.sql.trigger.update2=rtree_trigger_update2
geopackage.extensions.rtree_index.sql.trigger.update3=rtree_trigger_update3
geopackage.extensions.rtree_index.sql.trigger.update4=rtree_trigger_update4
geopackage.extensions.rtree_index.sql.trigger.update5=rtree_trigger_update5
geopackage.extensions.rtree_index.sql.trigger.update6=rtree_trigger_update6
geopackage.extensions.rtree_index.sql.trigger.update7=rtree_trigger_update7
geopackage.extensions.rtree_index.sql.trigger.delete=rtree_trigger_delete
geopackage.extensions.rtree_index.sql.trigger.drop=rtree_trigger_drop
geopackage.extensions.2d_gridded_coverage=http://docs.opengeospatial.org/is/17-066r1/17-066r1.html
Expand Down
11 changes: 11 additions & 0 deletions src/main/resources/sql/extension/rtree/rtree_trigger_update5
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
CREATE TRIGGER "rtree_<t>_<c>_update5" AFTER UPDATE ON "<t>"
WHEN OLD."<i>" != NEW."<i>" AND
(NEW."<c>" NOTNULL AND NOT ST_IsEmpty(NEW."<c>"))
BEGIN
DELETE FROM "rtree_<t>_<c>" WHERE id = OLD."<i>";
INSERT OR REPLACE INTO "rtree_<t>_<c>" VALUES (
NEW."<i>",
ST_MinX(NEW."<c>"), ST_MaxX(NEW."<c>"),
ST_MinY(NEW."<c>"), ST_MaxY(NEW."<c>")
);
END;
12 changes: 12 additions & 0 deletions src/main/resources/sql/extension/rtree/rtree_trigger_update6
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
CREATE TRIGGER "rtree_<t>_<c>_update6" AFTER UPDATE OF "<c>" ON "<t>"
WHEN OLD."<i>" = NEW."<i>" AND
(NEW."<c>" NOTNULL AND NOT ST_IsEmpty(NEW."<c>")) AND
(OLD."<c>" NOTNULL AND NOT ST_IsEmpty(OLD."<c>"))
BEGIN
UPDATE "rtree_<t>_<c>" SET
minx = ST_MinX(NEW."<c>"),
maxx = ST_MaxX(NEW."<c>"),
miny = ST_MinY(NEW."<c>"),
maxy = ST_MaxY(NEW."<c>")
WHERE id = NEW."<i>";
END;
11 changes: 11 additions & 0 deletions src/main/resources/sql/extension/rtree/rtree_trigger_update7
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
CREATE TRIGGER "rtree_<t>_<c>_update7" AFTER UPDATE OF "<c>" ON "<t>"
WHEN OLD."<i>" = NEW."<i>" AND
(NEW."<c>" NOTNULL AND NOT ST_IsEmpty(NEW."<c>")) AND
(OLD."<c>" ISNULL OR ST_IsEmpty(OLD."<c>"))
BEGIN
INSERT INTO "rtree_<t>_<c>" VALUES (
NEW."<i>",
ST_MinX(NEW."<c>"), ST_MaxX(NEW."<c>"),
ST_MinY(NEW."<c>"), ST_MaxY(NEW."<c>")
);
END;

0 comments on commit 88f8cd3

Please sign in to comment.