From f7c788d2c450aeb5b23e6c97912b74cf2cc01cee Mon Sep 17 00:00:00 2001
From: Nikolaus Krismer <nikolaus.krismer@uibk.ac.at>
Date: Tue, 26 Aug 2014 12:33:33 +0200
Subject: [PATCH] added precaching for placeholder preparation

---
 .../java/it/unibz/inf/isochrone/db/Database.java | 16 +++++++++++++++-
 1 file changed, 15 insertions(+), 1 deletion(-)

diff --git a/src/main/java/it/unibz/inf/isochrone/db/Database.java b/src/main/java/it/unibz/inf/isochrone/db/Database.java
index 697909fe..201f307b 100644
--- a/src/main/java/it/unibz/inf/isochrone/db/Database.java
+++ b/src/main/java/it/unibz/inf/isochrone/db/Database.java
@@ -42,6 +42,7 @@ import java.util.Set;
  * @version 2.2
  */
 public class Database {
+	private static final String[] PRECACHED_PLACEHOLDERS;
 	protected static final byte NW_MODE_CONTINUOUS = 0;
 	protected static final byte NW_MODE_DISCRETE = 1;
 	private final String queryEarliestArrivalTimeHomo;
@@ -67,6 +68,16 @@ public class Database {
 	protected Mode mode;
 	protected boolean isIncoming;
 
+	// Static block
+
+	static {
+		final int preachingLength = 10;
+		PRECACHED_PLACEHOLDERS = new String[preachingLength];
+		for (int i = 0; i < preachingLength; ++i) {
+			PRECACHED_PLACEHOLDERS[i] = preparePlaceHolders(i);
+		}
+	}
+
 	// Constructor
 
 	public Database(final ConfigDataset config, final Mode mode, final Direction direction) {
@@ -84,7 +95,7 @@ public class Database {
 				+ " WHERE SOURCE = ? AND TARGET = ? AND ROUTE_ID IN (%S) AND (TIME_D BETWEEN ? AND ?) AND SERVICE_ID IN (%S) AND TIME_A <= ?";
 
 		queryLatestDepartureTimeHomo = "SELECT TIME_D, TIME_A, ROUTE_ID FROM " + configSchedule
-				+ " WHERE SOURCE = ? AND  TARGET = ? AND ROUTE_ID IN (%S) AND (TIME_A BETWEEN ? AND ?) AND SERVICE_ID IN (%S) AND TIME_D >= ?";
+				+ " WHERE SOURCE = ? AND TARGET = ? AND ROUTE_ID IN (%S) AND (TIME_A BETWEEN ? AND ?) AND SERVICE_ID IN (%S) AND TIME_D >= ?";
 
 		queryGetAllEdges = "SELECT ID, SOURCE, TARGET, LENGTH, EDGE_MODE, ROUTE_ID FROM " + configEdges;
 
@@ -742,6 +753,9 @@ public class Database {
 		if (length <= 0) {
 			return "";
 		}
+		if (length < PRECACHED_PLACEHOLDERS.length) {
+			return PRECACHED_PLACEHOLDERS[length];
+		}
 
 		final StringBuilder builder = new StringBuilder((2 * length) - 1);
 		builder.append("?");
-- 
GitLab