Pārlūkot izejas kodu

Implemented support for sqlite and postgresql as temporal database backend.

git-svn-id: https://svn.osgeo.org/grass/grass/trunk@48662 15284696-431f-4ddb-bdfa-cd5b030d7da7
Soeren Gebbert 13 gadi atpakaļ
vecāks
revīzija
26170e5f07

+ 70 - 27
lib/python/temporal/abstract_datasets.py

@@ -589,8 +589,6 @@ class abstract_space_time_dataset(abstract_dataset):
             if order:
             if order:
                 sql += " ORDER BY %s" % (order)
                 sql += " ORDER BY %s" % (order)
 
 
-            print sql
-
             try:
             try:
                 dbif.cursor.execute(sql)
                 dbif.cursor.execute(sql)
                 rows = dbif.cursor.fetchall()
                 rows = dbif.cursor.fetchall()
@@ -682,7 +680,10 @@ class abstract_space_time_dataset(abstract_dataset):
 
 
         # Check if map is already registred
         # Check if map is already registred
         if stds_register_table:
         if stds_register_table:
-            sql = "SELECT id FROM " + stds_register_table + " WHERE id = (?)"
+	    if dbmi.paramstyle == "qmark":
+		sql = "SELECT id FROM " + stds_register_table + " WHERE id = (?)"
+	    else:
+		sql = "SELECT id FROM " + stds_register_table + " WHERE id = (%s)"
             dbif.cursor.execute(sql, (map_id,))
             dbif.cursor.execute(sql, (map_id,))
             row = dbif.cursor.fetchone()
             row = dbif.cursor.fetchone()
             # In case of no entry make a new one
             # In case of no entry make a new one
@@ -709,7 +710,10 @@ class abstract_space_time_dataset(abstract_dataset):
             sql = sql.replace("MAP_ID", map_id)
             sql = sql.replace("MAP_ID", map_id)
             sql = sql.replace("STDS", self.get_type())
             sql = sql.replace("STDS", self.get_type())
             try:
             try:
-                dbif.cursor.executescript(sql)
+		if dbmi.paramstyle == "qmark":
+		    dbif.cursor.executescript(sql)
+		else:
+		    dbif.cursor.execute(sql)
             except:
             except:
                 try:
                 try:
                     # Drop stds register table
                     # Drop stds register table
@@ -719,7 +723,10 @@ class abstract_space_time_dataset(abstract_dataset):
                     core.error(_("Unable to drop table <%s>" % (map_register_table)))
                     core.error(_("Unable to drop table <%s>" % (map_register_table)))
                     raise
                     raise
                 try:
                 try:
-                    dbif.cursor.executescript(sql_script)
+		    if dbmi.paramstyle == "qmark":
+			dbif.cursor.executescript(sql_script)
+		    else:
+			dbif.cursor.execute(sql_script)
                 except:
                 except:
                     core.error(_("Unable to create the space time %s dataset register table for <%s>") % (map.get_type(), map.get_id()))
                     core.error(_("Unable to create the space time %s dataset register table for <%s>") % (map.get_type(), map.get_id()))
                     raise
                     raise
@@ -748,17 +755,24 @@ class abstract_space_time_dataset(abstract_dataset):
             #sql_script += "\n"
             #sql_script += "\n"
             #sql_script += "END TRANSACTION;"
             #sql_script += "END TRANSACTION;"
             try:
             try:
-                dbif.cursor.executescript(sql_script)
+		if dbmi.paramstyle == "qmark":
+		    dbif.cursor.executescript(sql_script)
+		else:
+		    dbif.cursor.execute(sql_script)
             except:
             except:
                 try:
                 try:
                     # Drop map register table
                     # Drop map register table
                     sql = "DROP TABLE " + stds_register_table
                     sql = "DROP TABLE " + stds_register_table
+		    print sql
                     dbif.cursor.execute(sql)
                     dbif.cursor.execute(sql)
                 except:
                 except:
                     core.error(_("Unable to drop table <%s>" % (stds_register_table)))
                     core.error(_("Unable to drop table <%s>" % (stds_register_table)))
                     raise
                     raise
                 try:
                 try:
-                    dbif.cursor.executescript(sql_script)
+		    if dbmi.paramstyle == "qmark":
+			dbif.cursor.executescript(sql_script)
+		    else:
+			dbif.cursor.execute(sql_script)
                 except:
                 except:
                     core.error(_("Unable to create the space time %s dataset register table for <%s>") % (map.get_type(), map.get_id()))
                     core.error(_("Unable to create the space time %s dataset register table for <%s>") % (map.get_type(), map.get_id()))
                     raise
                     raise
@@ -787,18 +801,27 @@ class abstract_space_time_dataset(abstract_dataset):
 
 
         # Register the stds in the map stds register table
         # Register the stds in the map stds register table
         # Check if the entry is already there
         # Check if the entry is already there
-        sql = "SELECT id FROM " + map_register_table + " WHERE id = ?"
+	if dbmi.paramstyle == "qmark":
+	    sql = "SELECT id FROM " + map_register_table + " WHERE id = ?"
+	else:
+	    sql = "SELECT id FROM " + map_register_table + " WHERE id = %s"
         dbif.cursor.execute(sql, (self.base.get_id(),))
         dbif.cursor.execute(sql, (self.base.get_id(),))
       	row = dbif.cursor.fetchone()
       	row = dbif.cursor.fetchone()
 
 
         # In case of no entry make a new one
         # In case of no entry make a new one
         if row == None:
         if row == None:
-            sql = "INSERT INTO " + map_register_table + " (id) " + "VALUES (?)"
+	    if dbmi.paramstyle == "qmark":
+		sql = "INSERT INTO " + map_register_table + " (id) " + "VALUES (?)"
+	    else:
+		sql = "INSERT INTO " + map_register_table + " (id) " + "VALUES (%s)"
             #print sql
             #print sql
             dbif.cursor.execute(sql, (self.base.get_id(),))
             dbif.cursor.execute(sql, (self.base.get_id(),))
 
 
         # Now put the raster name in the stds map register table
         # Now put the raster name in the stds map register table
-        sql = "INSERT INTO " + stds_register_table + " (id) " + "VALUES (?)"
+	if dbmi.paramstyle == "qmark":
+	    sql = "INSERT INTO " + stds_register_table + " (id) " + "VALUES (?)"
+	else:
+	    sql = "INSERT INTO " + stds_register_table + " (id) " + "VALUES (%s)"
         #print sql
         #print sql
         dbif.cursor.execute(sql, (map_id,))
         dbif.cursor.execute(sql, (map_id,))
 
 
@@ -834,7 +857,10 @@ class abstract_space_time_dataset(abstract_dataset):
         stds_register_table = self.get_map_register()
         stds_register_table = self.get_map_register()
 
 
         # Check if the map is registered in the space time raster dataset
         # Check if the map is registered in the space time raster dataset
-        sql = "SELECT id FROM " + map_register_table + " WHERE id = ?"
+	if dbmi.paramstyle == "qmark":
+	    sql = "SELECT id FROM " + map_register_table + " WHERE id = ?"
+	else:
+	    sql = "SELECT id FROM " + map_register_table + " WHERE id = %s"
         dbif.cursor.execute(sql, (self.base.get_id(),))
         dbif.cursor.execute(sql, (self.base.get_id(),))
       	row = dbif.cursor.fetchone()
       	row = dbif.cursor.fetchone()
 
 
@@ -845,12 +871,18 @@ class abstract_space_time_dataset(abstract_dataset):
 
 
         # Remove the space time raster dataset from the raster dataset register
         # Remove the space time raster dataset from the raster dataset register
         if map_register_table != None:
         if map_register_table != None:
-            sql = "DELETE FROM " + map_register_table + " WHERE id = ?"
+	    if dbmi.paramstyle == "qmark":
+		sql = "DELETE FROM " + map_register_table + " WHERE id = ?"
+	    else:
+		sql = "DELETE FROM " + map_register_table + " WHERE id = %s"
             dbif.cursor.execute(sql, (self.base.get_id(),))
             dbif.cursor.execute(sql, (self.base.get_id(),))
 
 
         # Remove the raster map from the space time raster dataset register
         # Remove the raster map from the space time raster dataset register
         if stds_register_table != None:
         if stds_register_table != None:
-            sql = "DELETE FROM " + stds_register_table + " WHERE id = ?"
+	    if dbmi.paramstyle == "qmark":
+		sql = "DELETE FROM " + stds_register_table + " WHERE id = ?"
+	    else:
+		sql = "DELETE FROM " + stds_register_table + " WHERE id = %s"
             dbif.cursor.execute(sql, (map_id,))
             dbif.cursor.execute(sql, (map_id,))
 
 
         if connect == True:
         if connect == True:
@@ -918,7 +950,11 @@ class abstract_space_time_dataset(abstract_dataset):
 
 
         sql_script += "END TRANSACTION;"
         sql_script += "END TRANSACTION;"
 
 
-        dbif.cursor.executescript(sql_script)
+	if dbmi.paramstyle == "qmark":
+	    dbif.cursor.executescript(sql_script)
+	else:
+	    dbif.cursor.execute(sql_script)
+	    
 
 
         # Read and validate the selected end time
         # Read and validate the selected end time
         self.select()
         self.select()
@@ -948,16 +984,20 @@ class abstract_space_time_dataset(abstract_dataset):
             row = dbif.cursor.fetchone()
             row = dbif.cursor.fetchone()
 
 
             if row != None:
             if row != None:
-                tstring = row[0]
-                # Convert the unicode string into the datetime format
-                if tstring.find(":") > 0:
-                    time_format = "%Y-%m-%d %H:%M:%S"
-                else:
-                    time_format = "%Y-%m-%d"
-
-                max_start_time = datetime.strptime(tstring, time_format)
-                if end_time < max_start_time:
-                    use_start_time = True
+		if dbmi.paramstyle == "qmark":
+		    tstring = row[0]
+		    # Convert the unicode string into the datetime format
+		    if tstring.find(":") > 0:
+			time_format = "%Y-%m-%d %H:%M:%S"
+		    else:
+			time_format = "%Y-%m-%d"
+
+		    max_start_time = datetime.strptime(tstring, time_format)
+		else:
+		    max_start_time = row[0]
+		    
+		if end_time < max_start_time:
+		    use_start_time = True
 
 
         # Set the maximum start time as end time
         # Set the maximum start time as end time
         if use_start_time:
         if use_start_time:
@@ -965,7 +1005,7 @@ class abstract_space_time_dataset(abstract_dataset):
                 sql = """UPDATE STDS_absolute_time SET end_time =
                 sql = """UPDATE STDS_absolute_time SET end_time =
                (SELECT max(start_time) FROM GRASS_MAP_absolute_time WHERE GRASS_MAP_absolute_time.id IN
                (SELECT max(start_time) FROM GRASS_MAP_absolute_time WHERE GRASS_MAP_absolute_time.id IN
                         (SELECT id FROM SPACETIME_NAME_GRASS_MAP_register)
                         (SELECT id FROM SPACETIME_NAME_GRASS_MAP_register)
-               ) WHERE id = "SPACETIME_ID";"""
+               ) WHERE id = 'SPACETIME_ID';"""
                 sql = sql.replace("GRASS_MAP", self.get_new_map_instance(None).get_type())
                 sql = sql.replace("GRASS_MAP", self.get_new_map_instance(None).get_type())
                 sql = sql.replace("SPACETIME_NAME", stds_name + "_" + stds_mapset )
                 sql = sql.replace("SPACETIME_NAME", stds_name + "_" + stds_mapset )
                 sql = sql.replace("SPACETIME_ID", self.base.get_id())
                 sql = sql.replace("SPACETIME_ID", self.base.get_id())
@@ -974,13 +1014,16 @@ class abstract_space_time_dataset(abstract_dataset):
                 sql = """UPDATE STDS_relative_time SET end_time =
                 sql = """UPDATE STDS_relative_time SET end_time =
                (SELECT max(start_time) FROM GRASS_MAP_relative_time WHERE GRASS_MAP_relative_time.id IN
                (SELECT max(start_time) FROM GRASS_MAP_relative_time WHERE GRASS_MAP_relative_time.id IN
                         (SELECT id FROM SPACETIME_NAME_GRASS_MAP_register)
                         (SELECT id FROM SPACETIME_NAME_GRASS_MAP_register)
-               ) WHERE id = "SPACETIME_ID";"""
+               ) WHERE id = 'SPACETIME_ID';"""
                 sql = sql.replace("GRASS_MAP", self.get_new_map_instance(None).get_type())
                 sql = sql.replace("GRASS_MAP", self.get_new_map_instance(None).get_type())
                 sql = sql.replace("SPACETIME_NAME", stds_name + "_" + stds_mapset )
                 sql = sql.replace("SPACETIME_NAME", stds_name + "_" + stds_mapset )
                 sql = sql.replace("SPACETIME_ID", self.base.get_id())
                 sql = sql.replace("SPACETIME_ID", self.base.get_id())
                 sql = sql.replace("STDS", self.get_type())
                 sql = sql.replace("STDS", self.get_type())
 
 
-            dbif.cursor.executescript(sql)
+	    if dbmi.paramstyle == "qmark":
+		dbif.cursor.executescript(sql)
+	    else:
+		dbif.cursor.execute(sql)
 
 
         if connect == True:
         if connect == True:
             dbif.close()
             dbif.close()

+ 75 - 48
lib/python/temporal/base.py

@@ -7,7 +7,7 @@ Python temporal gis packages.
 
 
 This packages includes all base classes to stor basic information like id, name,
 This packages includes all base classes to stor basic information like id, name,
 mapset creation and modification time as well as sql serialization and deserialization
 mapset creation and modification time as well as sql serialization and deserialization
-and the sqlite3 database interface.
+and the sql database interface.
 
 
 Usage:
 Usage:
 
 
@@ -75,9 +75,15 @@ class dict_sql_serializer(object):
 	    sql += ') VALUES ('
 	    sql += ') VALUES ('
             for key in self.D.keys():
             for key in self.D.keys():
 		if count == 0:
 		if count == 0:
-                    sql += '?'
+		    if dbmi.paramstyle == "qmark":
+			sql += '?'
+		    else:
+			sql += '%s'
 		else:
 		else:
-                    sql += ',?'
+		    if dbmi.paramstyle == "qmark":
+			sql += ' ,?'
+		    else:
+			sql += ' ,%s'
 		count += 1
 		count += 1
 		args.append(self.D[key])
 		args.append(self.D[key])
 	    sql += ') '
 	    sql += ') '
@@ -93,9 +99,17 @@ class dict_sql_serializer(object):
 		# Update only entries which are not None
 		# Update only entries which are not None
 		if self.D[key] != None:
 		if self.D[key] != None:
 		    if count == 0:
 		    if count == 0:
-                        sql += ' %s = ? ' % key
+			if dbmi.paramstyle == "qmark":
+			    sql += ' %s = ? ' % key
+			else:
+			    sql += ' %s ' % key
+			    sql += '= %s '
 		    else:
 		    else:
-                        sql += ' ,%s = ? ' % key
+			if dbmi.paramstyle == "qmark":
+			    sql += ' ,%s = ? ' % key
+			else:
+			    sql += ' ,%s ' % key
+			    sql += '= %s '
 		    count += 1
 		    count += 1
 	            args.append(self.D[key])
 	            args.append(self.D[key])
 	    if where:
 	    if where:
@@ -107,9 +121,17 @@ class dict_sql_serializer(object):
 	    sql += 'UPDATE ' + table + ' SET '
 	    sql += 'UPDATE ' + table + ' SET '
             for key in self.D.keys():
             for key in self.D.keys():
                 if count == 0:
                 if count == 0:
-                    sql += ' %s = ? ' % key
+		    if dbmi.paramstyle == "qmark":
+			sql += ' %s = ? ' % key
+		    else:
+			sql += ' %s ' % key
+			sql += '= %s '
                 else:
                 else:
-                    sql += ' ,%s = ? ' % key
+		    if dbmi.paramstyle == "qmark":
+	                sql += ' ,%s = ? ' % key
+		    else:
+			sql += ' ,%s ' % key
+			sql += '= %s '
                 count += 1
                 count += 1
                 args.append(self.D[key])
                 args.append(self.D[key])
 	    if where:
 	    if where:
@@ -118,7 +140,7 @@ class dict_sql_serializer(object):
     	return sql, tuple(args)
     	return sql, tuple(args)
 
 
     def deserialize(self, row):
     def deserialize(self, row):
-	"""Convert the content of the sqlite row into the internal dictionary"""
+	"""Convert the content of the dbmi row into the internal dictionary"""
 	self.D = {}
 	self.D = {}
 	for key in row.keys():
 	for key in row.keys():
 	    self.D[key] = row[key]
 	    self.D[key] = row[key]
@@ -149,7 +171,7 @@ class dict_sql_serializer(object):
 ###############################################################################
 ###############################################################################
 
 
 class sql_database_interface(dict_sql_serializer):
 class sql_database_interface(dict_sql_serializer):
-    """This is the sql database interface to sqlite3"""
+    """This is the sql database interface"""
     def __init__(self, table=None, ident=None, database=None):
     def __init__(self, table=None, ident=None, database=None):
         dict_sql_serializer.__init__(self)
         dict_sql_serializer.__init__(self)
 
 
@@ -165,9 +187,14 @@ class sql_database_interface(dict_sql_serializer):
 
 
     def connect(self):
     def connect(self):
         #print "Connect to",  self.database
         #print "Connect to",  self.database
-	self.connection = sqlite3.connect(self.database, detect_types=sqlite3.PARSE_DECLTYPES|sqlite3.PARSE_COLNAMES)
-	self.connection.row_factory = sqlite3.Row
-        self.cursor = self.connection.cursor()
+	if dbmi.paramstyle == "qmark":
+	    self.connection = dbmi.connect(self.database, detect_types=dbmi.PARSE_DECLTYPES|dbmi.PARSE_COLNAMES)
+	    self.connection.row_factory = dbmi.Row
+	    self.cursor = self.connection.cursor()
+	else:
+	    self.connection = dbmi.connect(self.database)
+	    self.connection.set_isolation_level(dbmi.extensions.ISOLATION_LEVEL_AUTOCOMMIT)
+	    self.cursor = self.connection.cursor(cursor_factory=dbmi.extras.DictCursor)
 
 
     def close(self):
     def close(self):
         #print "Close connection to",  self.database
         #print "Close connection to",  self.database
@@ -175,7 +202,7 @@ class sql_database_interface(dict_sql_serializer):
         self.cursor.close()
         self.cursor.close()
 
 
     def get_delete_statement(self):
     def get_delete_statement(self):
-	return "DELETE FROM " + self.get_table_name() + " WHERE id = \"" + str(self.ident) + "\""
+	return "DELETE FROM " + self.get_table_name() + " WHERE id = \'" + str(self.ident) + "\'"
 
 
     def delete(self, dbif=None):
     def delete(self, dbif=None):
 	sql = self.get_delete_statement()
 	sql = self.get_delete_statement()
@@ -189,7 +216,7 @@ class sql_database_interface(dict_sql_serializer):
             self.close()
             self.close()
 
 
     def get_is_in_db_statement(self):
     def get_is_in_db_statement(self):
-	return "SELECT id FROM " + self.get_table_name() + " WHERE id = \"" + str(self.ident) + "\""
+	return "SELECT id FROM " + self.get_table_name() + " WHERE id = \'" + str(self.ident) + "\'"
 
 
     def is_in_db(self, dbif=None):
     def is_in_db(self, dbif=None):
 
 
@@ -212,7 +239,7 @@ class sql_database_interface(dict_sql_serializer):
 	return True
 	return True
 
 
     def get_select_statement(self):
     def get_select_statement(self):
-	return self.serialize("SELECT", self.get_table_name(), "WHERE id = \"" + str(self.ident) + "\"")
+	return self.serialize("SELECT", self.get_table_name(), "WHERE id = \'" + str(self.ident) + "\'")
 
 
     def select(self, dbif=None):
     def select(self, dbif=None):
 	sql, args = self.get_select_statement()
 	sql, args = self.get_select_statement()
@@ -261,7 +288,7 @@ class sql_database_interface(dict_sql_serializer):
             self.close()
             self.close()
 
 
     def get_update_statement(self):
     def get_update_statement(self):
-	return self.serialize("UPDATE", self.get_table_name(), "WHERE id = \"" + str(self.ident) + "\"")
+	return self.serialize("UPDATE", self.get_table_name(), "WHERE id = \'" + str(self.ident) + "\'")
 
 
     def update(self, dbif=None):
     def update(self, dbif=None):
 	if self.ident == None:
 	if self.ident == None:
@@ -279,7 +306,7 @@ class sql_database_interface(dict_sql_serializer):
             self.close()
             self.close()
 
 
     def get_update_all_statement(self):
     def get_update_all_statement(self):
-	return self.serialize("UPDATE ALL", self.get_table_name(), "WHERE id = \"" + str(self.ident) + "\"")
+	return self.serialize("UPDATE ALL", self.get_table_name(), "WHERE id = \'" + str(self.ident) + "\'")
 
 
     def update_all(self, dbif=None):
     def update_all(self, dbif=None):
 	if self.ident == None:
 	if self.ident == None:
@@ -310,9 +337,9 @@ class dataset_base(sql_database_interface):
 	self.set_mapset(mapset)
 	self.set_mapset(mapset)
 	self.set_creator(creator)
 	self.set_creator(creator)
 	self.set_ctime(ctime)
 	self.set_ctime(ctime)
-	self.set_mtime(mtime)
 	self.set_ttype(ttype)
 	self.set_ttype(ttype)
-	self.set_revision(revision)
+	#self.set_mtime(mtime)
+	#self.set_revision(revision)
 
 
     def set_id(self, ident):
     def set_id(self, ident):
 	"""Convenient method to set the unique identifier (primary key)"""
 	"""Convenient method to set the unique identifier (primary key)"""
@@ -338,13 +365,6 @@ class dataset_base(sql_database_interface):
 	else:
 	else:
             self.D["creation_time"] = ctime
             self.D["creation_time"] = ctime
 
 
-    def set_mtime(self, mtime=None):
-	"""Set the modification time of the map, if nothing set the current time is used"""
-	if mtime == None:
-            self.D["modification_time"] = datetime.now()
-	else:
-            self.D["modification_time"] = mtime
-
     def set_ttype(self, ttype):
     def set_ttype(self, ttype):
 	"""Set the temporal type of the map: absolute or relative, if nothing set absolute time will assumed"""
 	"""Set the temporal type of the map: absolute or relative, if nothing set absolute time will assumed"""
 	if ttype == None or (ttype != "absolute" and ttype != "relative"):
 	if ttype == None or (ttype != "absolute" and ttype != "relative"):
@@ -352,9 +372,16 @@ class dataset_base(sql_database_interface):
         else:
         else:
 	    self.D["temporal_type"] = ttype
 	    self.D["temporal_type"] = ttype
 
 
-    def set_revision(self, revision=1):
-	"""Set the revision of the map: if nothing set revision 1 will assumed"""
-	self.D["revision"] = revision
+#    def set_mtime(self, mtime=None):
+#	"""Set the modification time of the map, if nothing set the current time is used"""
+#	if mtime == None:
+#            self.D["modification_time"] = datetime.now()
+#	else:
+#            self.D["modification_time"] = mtime
+
+#    def set_revision(self, revision=1):
+#	"""Set the revision of the map: if nothing set revision 1 will assumed"""
+#	self.D["revision"] = revision
 
 
     def get_id(self):
     def get_id(self):
 	"""Convenient method to get the unique identifier (primary key)
 	"""Convenient method to get the unique identifier (primary key)
@@ -397,14 +424,6 @@ class dataset_base(sql_database_interface):
         else:
         else:
 	    return None
 	    return None
 
 
-    def get_mtime(self):
-	"""Get the modification time of the map, datatype is datetime
-	   @return None if not found"""
-	if self.D.has_key("modification_time"):
-	    return self.D["modification_time"]
-        else:
-	    return None
-
     def get_ttype(self):
     def get_ttype(self):
 	"""Get the temporal type of the map
 	"""Get the temporal type of the map
 	   @return None if not found"""
 	   @return None if not found"""
@@ -413,13 +432,21 @@ class dataset_base(sql_database_interface):
         else:
         else:
 	    return None
 	    return None
 
 
-    def get_revision(self):
-	"""Get the revision of the map
-	   @return None if not found"""
-	if self.D.has_key("revision"):
-	    return self.D["revision"]
-        else:
-	    return None
+#    def get_mtime(self):
+#	"""Get the modification time of the map, datatype is datetime
+#	   @return None if not found"""
+#	if self.D.has_key("modification_time"):
+#	    return self.D["modification_time"]
+#       else:
+#	    return None
+
+#    def get_revision(self):
+#	"""Get the revision of the map
+#	   @return None if not found"""
+#	if self.D.has_key("revision"):
+#	    return self.D["revision"]
+#       else:
+#	    return None
 
 
     def print_info(self):
     def print_info(self):
         """Print information about this class in human readable style"""
         """Print information about this class in human readable style"""
@@ -430,9 +457,9 @@ class dataset_base(sql_database_interface):
         print " | Mapset: .................... " + str(self.get_mapset())
         print " | Mapset: .................... " + str(self.get_mapset())
         print " | Creator: ................... " + str(self.get_creator())
         print " | Creator: ................... " + str(self.get_creator())
         print " | Creation time: ............. " + str(self.get_ctime())
         print " | Creation time: ............. " + str(self.get_ctime())
-        print " | Modification time: ......... " + str(self.get_mtime())
+#        print " | Modification time: ......... " + str(self.get_mtime())
         print " | Temporal type: ............. " + str(self.get_ttype())
         print " | Temporal type: ............. " + str(self.get_ttype())
-        print " | Revision in database: ...... " + str(self.get_revision())
+#        print " | Revision in database: ...... " + str(self.get_revision())
         
         
     def print_shell_info(self):
     def print_shell_info(self):
         """Print information about this class in shell style"""
         """Print information about this class in shell style"""
@@ -441,9 +468,9 @@ class dataset_base(sql_database_interface):
         print "mapset=" + str(self.get_mapset())
         print "mapset=" + str(self.get_mapset())
         print "creator=" + str(self.get_creator())
         print "creator=" + str(self.get_creator())
         print "creation_time=" + str(self.get_ctime())
         print "creation_time=" + str(self.get_ctime())
-        print "modification_time=" + str(self.get_mtime())
+#        print "modification_time=" + str(self.get_mtime())
         print "temporal_type=" + str(self.get_ttype())
         print "temporal_type=" + str(self.get_ttype())
-        print "revision=" + str(self.get_revision())
+#        print "revision=" + str(self.get_revision())
 
 
 ###############################################################################
 ###############################################################################
 
 

+ 59 - 37
lib/python/temporal/core.py

@@ -21,7 +21,10 @@ for details.
 @author Soeren Gebbert
 @author Soeren Gebbert
 """
 """
 import os
 import os
-import sqlite3
+import sqlite3 as dbmi
+#import psycopg2 as dbmi
+# Needed for dictionary like cursors
+#import psycopg2.extras
 import grass.script.core as core
 import grass.script.core as core
 import copy
 import copy
 from datetime import datetime, date, time, timedelta
 from datetime import datetime, date, time, timedelta
@@ -29,9 +32,12 @@ from datetime import datetime, date, time, timedelta
 ###############################################################################
 ###############################################################################
 
 
 def get_grass_location_db_path():
 def get_grass_location_db_path():
-    grassenv = core.gisenv()
-    dbpath = os.path.join(grassenv["GISDBASE"], grassenv["LOCATION_NAME"])
-    return os.path.join(dbpath, "grass.db")
+    if dbmi.paramstyle == "qmark":
+	grassenv = core.gisenv()
+	dbpath = os.path.join(grassenv["GISDBASE"], grassenv["LOCATION_NAME"])
+	return os.path.join(dbpath, "grass.db")
+    else:
+	return "dbname=grass_test user=soeren password=abcdefgh"
 
 
 ###############################################################################
 ###############################################################################
 
 
@@ -154,10 +160,17 @@ def create_temporal_database():
     
     
     database = get_grass_location_db_path()
     database = get_grass_location_db_path()
 
 
-    # Check if it already exists
-    if os.path.exists(database):
-        return False
+    build_db = False
 
 
+    # Check if it already exists
+    if dbmi.paramstyle == "qmark":
+	# Check path of the sqlite database
+	if not os.path.exists(database):
+	    build_db = True
+    
+    if build_db == False:
+	return
+    
     # Read all SQL scripts and templates
     # Read all SQL scripts and templates
     map_tables_template_sql = open(os.path.join(get_sql_template_path(), "map_tables_template.sql"), 'r').read()
     map_tables_template_sql = open(os.path.join(get_sql_template_path(), "map_tables_template.sql"), 'r').read()
     raster_metadata_sql = open(os.path.join(get_sql_template_path(), "raster_metadata_table.sql"), 'r').read()
     raster_metadata_sql = open(os.path.join(get_sql_template_path(), "raster_metadata_table.sql"), 'r').read()
@@ -167,6 +180,7 @@ def create_temporal_database():
     strds_metadata_sql = open(os.path.join(get_sql_template_path(), "strds_metadata_table.sql"), 'r').read()
     strds_metadata_sql = open(os.path.join(get_sql_template_path(), "strds_metadata_table.sql"), 'r').read()
     str3ds_metadata_sql = open(os.path.join(get_sql_template_path(), "str3ds_metadata_table.sql"), 'r').read()
     str3ds_metadata_sql = open(os.path.join(get_sql_template_path(), "str3ds_metadata_table.sql"), 'r').read()
     stvds_metadata_sql = open(os.path.join(get_sql_template_path(), "stvds_metadata_table.sql"), 'r').read()
     stvds_metadata_sql = open(os.path.join(get_sql_template_path(), "stvds_metadata_table.sql"), 'r').read()
+    
 
 
     # Create the raster, raster3d and vector tables
     # Create the raster, raster3d and vector tables
     raster_tables_sql = map_tables_template_sql.replace("GRASS_MAP", "raster")
     raster_tables_sql = map_tables_template_sql.replace("GRASS_MAP", "raster")
@@ -178,39 +192,47 @@ def create_temporal_database():
     stvds_tables_sql = stds_tables_template_sql.replace("STDS", "stvds")
     stvds_tables_sql = stds_tables_template_sql.replace("STDS", "stvds")
     str3ds_tables_sql = stds_tables_template_sql.replace("STDS", "str3ds")
     str3ds_tables_sql = stds_tables_template_sql.replace("STDS", "str3ds")
 
 
-    # Check for completion
-    sqlite3.complete_statement(raster_tables_sql)
-    sqlite3.complete_statement(vector_tables_sql)
-    sqlite3.complete_statement(raster3d_tables_sql)
-    sqlite3.complete_statement(raster_metadata_sql)
-    sqlite3.complete_statement(vector_metadata_sql)
-    sqlite3.complete_statement(raster3d_metadata_sql)
-    sqlite3.complete_statement(strds_tables_sql)
-    sqlite3.complete_statement(stvds_tables_sql)
-    sqlite3.complete_statement(str3ds_tables_sql)
-    sqlite3.complete_statement(strds_metadata_sql)
-    sqlite3.complete_statement(stvds_metadata_sql)
-    sqlite3.complete_statement(str3ds_metadata_sql)
-
     # Connect to database
     # Connect to database
-    connection = sqlite3.connect(database)
+    connection = dbmi.connect(database)
     cursor = connection.cursor()
     cursor = connection.cursor()
 
 
-    # Execute the SQL statements
-    # Create the global tables for the native grass datatypes
-    cursor.executescript(raster_tables_sql)
-    cursor.executescript(raster_metadata_sql)
-    cursor.executescript(vector_tables_sql)
-    cursor.executescript(vector_metadata_sql)
-    cursor.executescript(raster3d_tables_sql)
-    cursor.executescript(raster3d_metadata_sql)
-    # Create the tables for the new space-time datatypes
-    cursor.executescript(strds_tables_sql)
-    cursor.executescript(strds_metadata_sql)
-    cursor.executescript(stvds_tables_sql)
-    cursor.executescript(stvds_metadata_sql)
-    cursor.executescript(str3ds_tables_sql)
-    cursor.executescript(str3ds_metadata_sql)
+    
+    if dbmi.paramstyle == "qmark":
+	
+	sqlite3_delete_trigger_sql = open(os.path.join(get_sql_template_path(), "sqlite3_delete_trigger.sql"), 'r').read()
+	
+	# Execute the SQL statements for sqlite
+	# Create the global tables for the native grass datatypes
+	cursor.executescript(raster_tables_sql)
+	cursor.executescript(raster_metadata_sql)
+	cursor.executescript(vector_tables_sql)
+	cursor.executescript(vector_metadata_sql)
+	cursor.executescript(raster3d_tables_sql)
+	cursor.executescript(raster3d_metadata_sql)
+	# Create the tables for the new space-time datatypes
+	cursor.executescript(strds_tables_sql)
+	cursor.executescript(strds_metadata_sql)
+	cursor.executescript(stvds_tables_sql)
+	cursor.executescript(stvds_metadata_sql)
+	cursor.executescript(str3ds_tables_sql)
+	cursor.executescript(str3ds_metadata_sql)
+	cursor.executescript(sqlite3_delete_trigger_sql)
+    else:
+	# Execute the SQL statements for postgresql
+	# Create the global tables for the native grass datatypes
+	cursor.execute(raster_tables_sql)
+	cursor.execute(raster_metadata_sql)
+	cursor.execute(vector_tables_sql)
+	cursor.execute(vector_metadata_sql)
+	cursor.execute(raster3d_tables_sql)
+	cursor.execute(raster3d_metadata_sql)
+	# Create the tables for the new space-time datatypes
+	cursor.execute(strds_tables_sql)
+	cursor.execute(strds_metadata_sql)
+	cursor.execute(stvds_tables_sql)
+	cursor.execute(stvds_metadata_sql)
+	cursor.execute(str3ds_tables_sql)
+	cursor.execute(str3ds_metadata_sql)
 
 
     connection.commit()
     connection.commit()
     cursor.close()
     cursor.close()

+ 16 - 0
lib/python/temporal/space_time_datasets.py

@@ -426,8 +426,10 @@ def register_maps_in_space_time_dataset(type, name, maps, start=None, increment=
     else:
     else:
         maplist = tuple(maps.split(","))
         maplist = tuple(maps.split(","))
 
 
+    num_maps = len(maplist)
     count = 0
     count = 0
     for mapname in maplist:
     for mapname in maplist:
+	core.percent(count, num_maps, 1)
         mapname = mapname.strip()
         mapname = mapname.strip()
         # Check if the map name contains the mapset as well
         # Check if the map name contains the mapset as well
         if mapname.find("@") < 0:
         if mapname.find("@") < 0:
@@ -471,6 +473,8 @@ def register_maps_in_space_time_dataset(type, name, maps, start=None, increment=
 
 
     if connect == True:
     if connect == True:
         dbif.close()
         dbif.close()
+
+    core.percent(num_maps, num_maps, 1)
         
         
 ###############################################################################
 ###############################################################################
 
 
@@ -513,7 +517,10 @@ def unregister_maps_from_space_time_datasets(type, name, maps, dbif = None):
     else:
     else:
         maplist = tuple(maps.split(","))
         maplist = tuple(maps.split(","))
 
 
+    num_maps = len(maplist)
+    count = 0
     for mapname in maplist:
     for mapname in maplist:
+	core.percent(count, num_maps, 1)
         mapname = mapname.strip()
         mapname = mapname.strip()
         # Check if the map name contains the mapset as well
         # Check if the map name contains the mapset as well
         if mapname.find("@") < 0:
         if mapname.find("@") < 0:
@@ -537,12 +544,16 @@ def unregister_maps_from_space_time_datasets(type, name, maps, dbif = None):
             else:
             else:
                 map.select(dbif)
                 map.select(dbif)
                 map.unregister(dbif)
                 map.unregister(dbif)
+		
+	count += 1
 
 
     if name:
     if name:
         sp.update_from_registered_maps(dbif)
         sp.update_from_registered_maps(dbif)
 
 
     if connect == True:
     if connect == True:
         dbif.close()
         dbif.close()
+	
+    core.percent(num_maps, num_maps, 1)
 
 
 ###############################################################################
 ###############################################################################
 
 
@@ -583,8 +594,11 @@ def assign_valid_time_to_maps(type, maps, ttype, start, end=None, increment=None
     else:
     else:
         maplist = tuple(maps.split(","))
         maplist = tuple(maps.split(","))
 
 
+    num_maps = len(maplist)
     count = 0
     count = 0
+    
     for mapname in maplist:
     for mapname in maplist:
+	core.percent(count, num_maps, 1)
         mapname = mapname.strip()
         mapname = mapname.strip()
         # Check if the map name contains the mapset as well
         # Check if the map name contains the mapset as well
         if mapname.find("@") < 0:
         if mapname.find("@") < 0:
@@ -631,6 +645,8 @@ def assign_valid_time_to_maps(type, maps, ttype, start, end=None, increment=None
     if connect == True:
     if connect == True:
         dbif.close()
         dbif.close()
 
 
+    core.percent(num_maps, num_maps, 1)
+    
 
 
 ###############################################################################
 ###############################################################################
 
 

+ 11 - 11
lib/temporal/map_stds_register_table_template.sql

@@ -9,7 +9,7 @@
 -- Author: Soeren Gebbert soerengebbert <at> googlemail <dot> com
 -- Author: Soeren Gebbert soerengebbert <at> googlemail <dot> com
 --#############################################################################
 --#############################################################################
 
 
-PRAGMA foreign_keys = ON;
+--PRAGMA foreign_keys = ON;
 
 
 -- TABLE_NAME is a placeholder for specific table name (SQL compliant)
 -- TABLE_NAME is a placeholder for specific table name (SQL compliant)
 -- MAP_ID is a placeholder for specific map id: name@mapset
 -- MAP_ID is a placeholder for specific map id: name@mapset
@@ -23,16 +23,16 @@ CREATE TABLE  TABLE_NAME_STDS_register (
   FOREIGN KEY (id) REFERENCES  STDS_base (id) ON DELETE CASCADE
   FOREIGN KEY (id) REFERENCES  STDS_base (id) ON DELETE CASCADE
 );
 );
 
 
-CREATE TRIGGER TABLE_NAME_STDS_register_insert AFTER INSERT ON TABLE_NAME_STDS_register
-  BEGIN
-    UPDATE GRASS_MAP_base SET modification_time = datetime("NOW") WHERE GRASS_MAP_base.id = "MAP_ID";
-    UPDATE GRASS_MAP_base SET revision = (revision + 1) WHERE GRASS_MAP_base.id = "MAP_ID";
-  END;
+--CREATE TRIGGER TABLE_NAME_STDS_register_insert AFTER INSERT ON TABLE_NAME_STDS_register
+--  BEGIN
+--    UPDATE GRASS_MAP_base SET modification_time = datetime("NOW") WHERE GRASS_MAP_base.id = 'MAP_ID';
+--    UPDATE GRASS_MAP_base SET revision = (revision + 1) WHERE GRASS_MAP_base.id = 'MAP_ID';
+--  END;
 
 
-CREATE TRIGGER TABLE_NAME_STDS_register_delete AFTER DELETE ON TABLE_NAME_STDS_register
-  BEGIN
-    UPDATE GRASS_MAP_base SET modification_time = datetime("NOW") WHERE GRASS_MAP_base.id = "MAP_ID";
-    UPDATE GRASS_MAP_base SET revision = (revision + 1) WHERE GRASS_MAP_base.id = "MAP_ID";
-  END;
+--CREATE TRIGGER TABLE_NAME_STDS_register_delete AFTER DELETE ON TABLE_NAME_STDS_register
+--  BEGIN
+--    UPDATE GRASS_MAP_base SET modification_time = datetime("NOW") WHERE GRASS_MAP_base.id = 'MAP_ID';
+--    UPDATE GRASS_MAP_base SET revision = (revision + 1) WHERE GRASS_MAP_base.id = 'MAP_ID';
+--  END;
 
 
 
 

+ 20 - 19
lib/temporal/map_tables_template.sql

@@ -12,7 +12,7 @@
 
 
 -- GRASS_MAP is a placeholder for specific map type: raster, raster3d or vector
 -- GRASS_MAP is a placeholder for specific map type: raster, raster3d or vector
 
 
-PRAGMA foreign_keys = ON;
+--PRAGMA foreign_keys = ON;
 
 
 CREATE TABLE  GRASS_MAP_base (
 CREATE TABLE  GRASS_MAP_base (
   id VARCHAR NOT NULL,                  -- The id (PK) is the unique identifier for all tables, it is based on name and mapset (name@mapset) and is used as primary key
   id VARCHAR NOT NULL,                  -- The id (PK) is the unique identifier for all tables, it is based on name and mapset (name@mapset) and is used as primary key
@@ -21,8 +21,9 @@ CREATE TABLE  GRASS_MAP_base (
   creator VARCHAR NOT NULL,
   creator VARCHAR NOT NULL,
   temporal_type VARCHAR,                -- The temporal type of the grass map "absolute" or "relative" or NULL in case no time stamp is available
   temporal_type VARCHAR,                -- The temporal type of the grass map "absolute" or "relative" or NULL in case no time stamp is available
   creation_time TIMESTAMP NOT NULL,      -- The time of creation of the grass map
   creation_time TIMESTAMP NOT NULL,      -- The time of creation of the grass map
-  modification_time TIMESTAMP NOT NULL,  -- The time of the last modification of the grass map
-  revision SMALLINT NOT NULL,           -- The revision number
+-- Uncommented due to performance issues
+--  modification_time TIMESTAMP NOT NULL,  -- The time of the last modification of the grass map
+--  revision SMALLINT NOT NULL,           -- The revision number
   PRIMARY KEY (id)
   PRIMARY KEY (id)
 );
 );
 
 
@@ -55,28 +56,28 @@ CREATE TABLE  GRASS_MAP_spatial_extent (
   west DOUBLE PRECISION NOT NULL,
   west DOUBLE PRECISION NOT NULL,
   top DOUBLE PRECISION NOT NULL,
   top DOUBLE PRECISION NOT NULL,
   bottom DOUBLE PRECISION NOT NULL,
   bottom DOUBLE PRECISION NOT NULL,
-  proj DOUBLE VARCHAR,
+  proj VARCHAR,
   PRIMARY KEY (id),
   PRIMARY KEY (id),
   FOREIGN KEY (id) REFERENCES  GRASS_MAP_base (id) ON DELETE CASCADE
   FOREIGN KEY (id) REFERENCES  GRASS_MAP_base (id) ON DELETE CASCADE
 );
 );
 
 
 -- Create a trigger to update the modification time and revision number in case the metadata or timestanps have been updated 
 -- Create a trigger to update the modification time and revision number in case the metadata or timestanps have been updated 
 
 
-CREATE TRIGGER update_GRASS_MAP_absolute_time AFTER UPDATE ON GRASS_MAP_absolute_time 
-  BEGIN
-    UPDATE GRASS_MAP_base SET modification_time = datetime("NOW") WHERE id = old.id;
-    UPDATE GRASS_MAP_base SET revision = (revision + 1) WHERE id = old.id;
-  END;
+--CREATE TRIGGER update_GRASS_MAP_absolute_time AFTER UPDATE ON GRASS_MAP_absolute_time 
+--  BEGIN
+--    UPDATE GRASS_MAP_base SET modification_time = datetime("NOW") WHERE id = old.id;
+--    UPDATE GRASS_MAP_base SET revision = (revision + 1) WHERE id = old.id;
+-- END;
 
 
-CREATE TRIGGER update_GRASS_MAP_relative_time AFTER UPDATE ON GRASS_MAP_relative_time 
-  BEGIN
-    UPDATE GRASS_MAP_base SET modification_time = datetime("NOW") WHERE id = old.id;
-    UPDATE GRASS_MAP_base SET revision = (revision + 1) WHERE id = old.id;
-  END;
+--CREATE TRIGGER update_GRASS_MAP_relative_time AFTER UPDATE ON GRASS_MAP_relative_time 
+--  BEGIN
+--    UPDATE GRASS_MAP_base SET modification_time = datetime("NOW") WHERE id = old.id;
+--    UPDATE GRASS_MAP_base SET revision = (revision + 1) WHERE id = old.id;
+--  END;
 
 
 
 
-CREATE TRIGGER update_GRASS_MAP_spatial_extent AFTER UPDATE ON GRASS_MAP_spatial_extent 
-  BEGIN
-    UPDATE GRASS_MAP_base SET modification_time = datetime("NOW") WHERE id = old.id;
-    UPDATE GRASS_MAP_base SET revision = (revision + 1) WHERE id = old.id;
-  END;
+--CREATE TRIGGER update_GRASS_MAP_spatial_extent AFTER UPDATE ON GRASS_MAP_spatial_extent 
+--  BEGIN
+--    UPDATE GRASS_MAP_base SET modification_time = datetime("NOW") WHERE id = old.id;
+--    UPDATE GRASS_MAP_base SET revision = (revision + 1) WHERE id = old.id;
+--  END;

+ 14 - 20
lib/temporal/raster3d_metadata_table.sql

@@ -6,7 +6,7 @@
 -- Author: Soeren Gebbert soerengebbert <at> googlemail <dot> com
 -- Author: Soeren Gebbert soerengebbert <at> googlemail <dot> com
 --#############################################################################
 --#############################################################################
 
 
-PRAGMA foreign_keys = ON;
+--PRAGMA foreign_keys = ON;
 
 
 -- The metadata table reflects most of the raster3d metadata available in grass
 -- The metadata table reflects most of the raster3d metadata available in grass
 
 
@@ -32,8 +32,10 @@ CREATE TABLE  raster3d_metadata (
 CREATE VIEW raster3d_view_abs_time AS SELECT 
 CREATE VIEW raster3d_view_abs_time AS SELECT 
             A1.id, A1.mapset,
             A1.id, A1.mapset,
             A1.name, A1.temporal_type,
             A1.name, A1.temporal_type,
-            A1.creation_time, A1.modification_time,
-            A1.revision, A1.creator,
+            A1.creation_time, 
+-- Uncommented due to performance issues
+--            A1.modification_time, A1.revision, 
+            A1.creator,
 	    A2.start_time, A2.end_time, A2.timezone,
 	    A2.start_time, A2.end_time, A2.timezone,
             A3.north, A3.south, A3.east, A3.west, A3.proj,
             A3.north, A3.south, A3.east, A3.west, A3.proj,
 	    A4.datatype, A4.cols, A4.rows, A4.depths,
 	    A4.datatype, A4.cols, A4.rows, A4.depths,
@@ -48,8 +50,10 @@ CREATE VIEW raster3d_view_abs_time AS SELECT
 CREATE VIEW raster3d_view_rel_time AS SELECT 
 CREATE VIEW raster3d_view_rel_time AS SELECT 
             A1.id, A1.mapset,
             A1.id, A1.mapset,
             A1.name, A1.temporal_type,
             A1.name, A1.temporal_type,
-            A1.creation_time, A1.modification_time,
-            A1.revision, A1.creator,
+            A1.creation_time, 
+-- Uncommented due to performance issues
+--            A1.modification_time, A1.revision, 
+            A1.creator,
 	    A2.start_time, A2.end_time,
 	    A2.start_time, A2.end_time,
             A3.north, A3.south, A3.east, A3.west, A3.proj,
             A3.north, A3.south, A3.east, A3.west, A3.proj,
 	    A4.datatype, A4.cols, A4.rows, A4.depths,
 	    A4.datatype, A4.cols, A4.rows, A4.depths,
@@ -63,19 +67,8 @@ CREATE VIEW raster3d_view_rel_time AS SELECT
 
 
 -- Create a trigger to update the modification time and revision number in case the metadata have been updated 
 -- Create a trigger to update the modification time and revision number in case the metadata have been updated 
 
 
-CREATE TRIGGER update_raster3d_metadata AFTER UPDATE ON raster3d_metadata 
-  BEGIN
-    UPDATE raster3d_base SET modification_time = datetime("NOW") WHERE id = old.id;
-    UPDATE raster3d_base SET revision = (revision + 1) WHERE id = old.id;
-  END;
-
-
-CREATE TRIGGER delete_raster3d_base AFTER DELETE ON raster3d_base
-  BEGIN
-    DELETE FROM raster3d_absolute_time WHERE id = old.id;
-    DELETE FROM raster3d_relative_time WHERE id = old.id;
-    DELETE FROM raster3d_spatial_extent WHERE id = old.id;
-    DELETE FROM raster3d_metadata WHERE id = old.id;
-  END;
-
+--CREATE TRIGGER update_raster3d_metadata AFTER UPDATE ON raster3d_metadata 
+--  BEGIN
+--    UPDATE raster3d_base SET modification_time = datetime("NOW") WHERE id = old.id;
+--    UPDATE raster3d_base SET revision = (revision + 1) WHERE id = old.id;
+--  END;

+ 15 - 20
lib/temporal/raster_metadata_table.sql

@@ -6,7 +6,7 @@
 -- Author: Soeren Gebbert soerengebbert <at> googlemail <dot> com
 -- Author: Soeren Gebbert soerengebbert <at> googlemail <dot> com
 --#############################################################################
 --#############################################################################
 
 
-PRAGMA foreign_keys = ON;
+--PRAGMA foreign_keys = ON;
 
 
 -- The metadata table reflects most of the raster metadata available in grass
 -- The metadata table reflects most of the raster metadata available in grass
 
 
@@ -30,8 +30,10 @@ CREATE TABLE  raster_metadata (
 CREATE VIEW raster_view_abs_time AS SELECT 
 CREATE VIEW raster_view_abs_time AS SELECT 
             A1.id, A1.mapset,
             A1.id, A1.mapset,
             A1.name, A1.temporal_type,
             A1.name, A1.temporal_type,
-            A1.creation_time, A1.modification_time,
-            A1.revision, A1.creator, 
+            A1.creation_time, 
+-- Uncommented due to performance issues
+--            A1.modification_time, A1.revision, 
+            A1.creator, 
 	    A2.start_time, A2.end_time, A2.timezone,
 	    A2.start_time, A2.end_time, A2.timezone,
             A3.north, A3.south, A3.east, A3.west, A3.proj,
             A3.north, A3.south, A3.east, A3.west, A3.proj,
 	    A4.datatype, A4.cols, A4.rows,
 	    A4.datatype, A4.cols, A4.rows,
@@ -45,8 +47,10 @@ CREATE VIEW raster_view_abs_time AS SELECT
 CREATE VIEW raster_view_rel_time AS SELECT 
 CREATE VIEW raster_view_rel_time AS SELECT 
             A1.id, A1.mapset,
             A1.id, A1.mapset,
             A1.name, A1.temporal_type,
             A1.name, A1.temporal_type,
-            A1.creation_time, A1.modification_time,
-            A1.revision, A1.creator,
+            A1.creation_time, 
+-- Uncommented due to performance issues
+--            A1.modification_time, A1.revision, 
+            A1.creator, 
 	    A2.start_time, A2.end_time,
 	    A2.start_time, A2.end_time,
             A3.north, A3.south, A3.east, A3.west, A3.proj,
             A3.north, A3.south, A3.east, A3.west, A3.proj,
 	    A4.datatype, A4.cols, A4.rows,
 	    A4.datatype, A4.cols, A4.rows,
@@ -58,20 +62,10 @@ CREATE VIEW raster_view_rel_time AS SELECT
 	    WHERE A1.id = A2.id AND A1.id = A3.id AND A1.id = A4.id;
 	    WHERE A1.id = A2.id AND A1.id = A3.id AND A1.id = A4.id;
 
 
 -- Create a trigger to update the modification time and revision number in case the metadata have been updated 
 -- Create a trigger to update the modification time and revision number in case the metadata have been updated 
-
-CREATE TRIGGER update_raster_metadata AFTER UPDATE ON raster_metadata 
-  BEGIN
-    UPDATE raster_base SET modification_time = datetime("NOW") WHERE id = old.id;
-    UPDATE raster_base SET revision = (revision + 1) WHERE id = old.id;
-  END;
-
-
-CREATE TRIGGER delete_raster_base AFTER DELETE ON raster_base
-  BEGIN
-    DELETE FROM raster_absolute_time WHERE id = old.id;
-    DELETE FROM raster_relative_time WHERE id = old.id;
-    DELETE FROM raster_spatial_extent WHERE id = old.id;
-    DELETE FROM raster_metadata WHERE id = old.id;
-  END;
+-- Uncommented due to performance issues
+--CREATE TRIGGER update_raster_metadata AFTER UPDATE ON raster_metadata 
+--  BEGIN
+--    UPDATE raster_base SET modification_time = datetime("NOW") WHERE id = old.id;
+--    UPDATE raster_base SET revision = (revision + 1) WHERE id = old.id;
+--  END;
 
 

+ 51 - 0
lib/temporal/sqlite3_delete_trigger.sql

@@ -0,0 +1,51 @@
+
+-- Create trigger for automated deletion of dependent rows, this should normally be done using foreign keys 
+
+CREATE TRIGGER delete_strds_base AFTER DELETE ON strds_base
+  BEGIN
+    DELETE FROM strds_absolute_time WHERE id = old.id;
+    DELETE FROM strds_relative_time WHERE id = old.id;
+    DELETE FROM strds_spatial_extent WHERE id = old.id;
+    DELETE FROM strds_metadata WHERE id = old.id;
+  END;
+
+CREATE TRIGGER delete_raster_base AFTER DELETE ON raster_base
+  BEGIN
+    DELETE FROM raster_absolute_time WHERE id = old.id;
+    DELETE FROM raster_relative_time WHERE id = old.id;
+    DELETE FROM raster_spatial_extent WHERE id = old.id;
+    DELETE FROM raster_metadata WHERE id = old.id;
+  END;
+
+CREATE TRIGGER delete_str3ds_base AFTER DELETE ON str3ds_base
+  BEGIN
+    DELETE FROM str3ds_absolute_time WHERE id = old.id;
+    DELETE FROM str3ds_relative_time WHERE id = old.id;
+    DELETE FROM str3ds_spatial_extent WHERE id = old.id;
+    DELETE FROM str3ds_metadata WHERE id = old.id;
+  END;
+
+CREATE TRIGGER delete_raster3d_base AFTER DELETE ON raster3d_base
+  BEGIN
+    DELETE FROM raster3d_absolute_time WHERE id = old.id;
+    DELETE FROM raster3d_relative_time WHERE id = old.id;
+    DELETE FROM raster3d_spatial_extent WHERE id = old.id;
+    DELETE FROM raster3d_metadata WHERE id = old.id;
+  END;
+
+CREATE TRIGGER delete_stvds_base AFTER DELETE ON stvds_base
+  BEGIN
+    DELETE FROM stvds_absolute_time WHERE id = old.id;
+    DELETE FROM stvds_relative_time WHERE id = old.id;
+    DELETE FROM stvds_spatial_extent WHERE id = old.id;
+    DELETE FROM stvds_metadata WHERE id = old.id;
+  END;
+
+CREATE TRIGGER delete_vector_base AFTER DELETE ON vector_base
+  BEGIN
+    DELETE FROM vector_absolute_time WHERE id = old.id;
+    DELETE FROM vector_relative_time WHERE id = old.id;
+    DELETE FROM vector_spatial_extent WHERE id = old.id;
+    DELETE FROM vector_metadata WHERE id = old.id;
+  END;
+

+ 27 - 1
lib/temporal/stds_map_register_table_template.sql

@@ -12,7 +12,7 @@
 -- GRASS_MAP is a placeholder for specific map type: raster, raster3d or vector
 -- GRASS_MAP is a placeholder for specific map type: raster, raster3d or vector
 -- STDS is a placeholder for specific space-time dataset type: strds, str3ds, stvds
 -- STDS is a placeholder for specific space-time dataset type: strds, str3ds, stvds
 
 
-PRAGMA foreign_keys = ON;
+--PRAGMA foreign_keys = ON;
 
 
 -- This table stores the.ids of the GRASS_MAP maps registered in the current spacetime GRASS_MAP table
 -- This table stores the.ids of the GRASS_MAP maps registered in the current spacetime GRASS_MAP table
 CREATE TABLE  SPACETIME_NAME_GRASS_MAP_register (
 CREATE TABLE  SPACETIME_NAME_GRASS_MAP_register (
@@ -24,106 +24,106 @@ CREATE TABLE  SPACETIME_NAME_GRASS_MAP_register (
 -- Triggers are disabled due to huge performance issues
 -- Triggers are disabled due to huge performance issues
 --CREATE TRIGGER SPACETIME_NAME_GRASS_MAP_register_insert_trigger AFTER INSERT ON SPACETIME_NAME_GRASS_MAP_register 
 --CREATE TRIGGER SPACETIME_NAME_GRASS_MAP_register_insert_trigger AFTER INSERT ON SPACETIME_NAME_GRASS_MAP_register 
 --  BEGIN
 --  BEGIN
+--    UPDATE STDS_base SET modification_time = datetime("NOW") WHERE id = 'SPACETIME_ID';
+--    UPDATE STDS_base SET revision = (revision + 1) WHERE id = 'SPACETIME_ID';
 --    -- Number of registered maps
 --    -- Number of registered maps
 --    UPDATE STDS_metadata SET number_of_maps = 
 --    UPDATE STDS_metadata SET number_of_maps = 
 --           (SELECT count(id) FROM SPACETIME_NAME_GRASS_MAP_register)
 --           (SELECT count(id) FROM SPACETIME_NAME_GRASS_MAP_register)
+--           WHERE id = 'SPACETIME_ID';
 --    -- Update the temporal extent
 --    -- Update the temporal extent
 --    UPDATE STDS_absolute_time SET start_time = 
 --    UPDATE STDS_absolute_time SET start_time = 
 --           (SELECT min(start_time) FROM GRASS_MAP_absolute_time WHERE GRASS_MAP_absolute_time.id IN 
 --           (SELECT min(start_time) FROM GRASS_MAP_absolute_time WHERE GRASS_MAP_absolute_time.id IN 
 --			(SELECT id FROM SPACETIME_NAME_GRASS_MAP_register)
 --			(SELECT id FROM SPACETIME_NAME_GRASS_MAP_register)
+--           ) WHERE id = 'SPACETIME_ID';
 --    UPDATE STDS_absolute_time SET end_time = 
 --    UPDATE STDS_absolute_time SET end_time = 
 --           (SELECT max(end_time) FROM GRASS_MAP_absolute_time WHERE GRASS_MAP_absolute_time.id IN 
 --           (SELECT max(end_time) FROM GRASS_MAP_absolute_time WHERE GRASS_MAP_absolute_time.id IN 
 --			(SELECT id FROM SPACETIME_NAME_GRASS_MAP_register)
 --			(SELECT id FROM SPACETIME_NAME_GRASS_MAP_register)
+--           ) WHERE id = 'SPACETIME_ID';
 
 
 --    UPDATE STDS_relative_time SET start_time =
 --    UPDATE STDS_relative_time SET start_time =
 --           (SELECT min(start_time) FROM GRASS_MAP_relative_time WHERE GRASS_MAP_relative_time.id IN
 --           (SELECT min(start_time) FROM GRASS_MAP_relative_time WHERE GRASS_MAP_relative_time.id IN
 --                      (SELECT id FROM SPACETIME_NAME_GRASS_MAP_register)
 --                      (SELECT id FROM SPACETIME_NAME_GRASS_MAP_register)
+--           ) WHERE id = 'SPACETIME_ID';
 --    UPDATE STDS_relative_time SET end_time =
 --    UPDATE STDS_relative_time SET end_time =
 --           (SELECT max(end_time) FROM GRASS_MAP_relative_time WHERE GRASS_MAP_relative_time.id IN
 --           (SELECT max(end_time) FROM GRASS_MAP_relative_time WHERE GRASS_MAP_relative_time.id IN
 --                      (SELECT id FROM SPACETIME_NAME_GRASS_MAP_register)
 --                      (SELECT id FROM SPACETIME_NAME_GRASS_MAP_register)
+--           ) WHERE id = 'SPACETIME_ID';
 --    -- Update the spatial extent
 --    -- Update the spatial extent
 --    UPDATE STDS_spatial_extent SET north = 
 --    UPDATE STDS_spatial_extent SET north = 
 --           (SELECT max(north) FROM GRASS_MAP_spatial_extent WHERE GRASS_MAP_spatial_extent.id IN 
 --           (SELECT max(north) FROM GRASS_MAP_spatial_extent WHERE GRASS_MAP_spatial_extent.id IN 
 --			(SELECT id FROM SPACETIME_NAME_GRASS_MAP_register)
 --			(SELECT id FROM SPACETIME_NAME_GRASS_MAP_register)
+--           ) WHERE id = 'SPACETIME_ID';
 --    UPDATE STDS_spatial_extent SET south = 
 --    UPDATE STDS_spatial_extent SET south = 
 --           (SELECT min(south) FROM GRASS_MAP_spatial_extent WHERE GRASS_MAP_spatial_extent.id IN 
 --           (SELECT min(south) FROM GRASS_MAP_spatial_extent WHERE GRASS_MAP_spatial_extent.id IN 
 --			(SELECT id FROM SPACETIME_NAME_GRASS_MAP_register)
 --			(SELECT id FROM SPACETIME_NAME_GRASS_MAP_register)
+--           ) WHERE id = 'SPACETIME_ID';
 --    UPDATE STDS_spatial_extent SET east = 
 --    UPDATE STDS_spatial_extent SET east = 
 --           (SELECT max(east) FROM GRASS_MAP_spatial_extent WHERE GRASS_MAP_spatial_extent.id IN 
 --           (SELECT max(east) FROM GRASS_MAP_spatial_extent WHERE GRASS_MAP_spatial_extent.id IN 
 --			(SELECT id FROM SPACETIME_NAME_GRASS_MAP_register)
 --			(SELECT id FROM SPACETIME_NAME_GRASS_MAP_register)
+--           ) WHERE id = 'SPACETIME_ID';
 --    UPDATE STDS_spatial_extent SET west = 
 --    UPDATE STDS_spatial_extent SET west = 
 --           (SELECT min(west) FROM GRASS_MAP_spatial_extent WHERE GRASS_MAP_spatial_extent.id IN 
 --           (SELECT min(west) FROM GRASS_MAP_spatial_extent WHERE GRASS_MAP_spatial_extent.id IN 
 --			(SELECT id FROM SPACETIME_NAME_GRASS_MAP_register)
 --			(SELECT id FROM SPACETIME_NAME_GRASS_MAP_register)
+--           ) WHERE id = 'SPACETIME_ID';
 --    UPDATE STDS_spatial_extent SET top = 
 --    UPDATE STDS_spatial_extent SET top = 
 --           (SELECT max(top) FROM GRASS_MAP_spatial_extent WHERE GRASS_MAP_spatial_extent.id IN 
 --           (SELECT max(top) FROM GRASS_MAP_spatial_extent WHERE GRASS_MAP_spatial_extent.id IN 
 --			(SELECT id FROM SPACETIME_NAME_GRASS_MAP_register)
 --			(SELECT id FROM SPACETIME_NAME_GRASS_MAP_register)
+--           ) WHERE id = 'SPACETIME_ID';
 --    UPDATE STDS_spatial_extent SET bottom = 
 --    UPDATE STDS_spatial_extent SET bottom = 
 --           (SELECT min(bottom) FROM GRASS_MAP_spatial_extent WHERE GRASS_MAP_spatial_extent.id IN 
 --           (SELECT min(bottom) FROM GRASS_MAP_spatial_extent WHERE GRASS_MAP_spatial_extent.id IN 
 --			(SELECT id FROM SPACETIME_NAME_GRASS_MAP_register)
 --			(SELECT id FROM SPACETIME_NAME_GRASS_MAP_register)
+--           ) WHERE id = 'SPACETIME_ID';
 --    UPDATE STDS_spatial_extent SET proj = 
 --    UPDATE STDS_spatial_extent SET proj = 
 --           (SELECT min(proj) FROM GRASS_MAP_spatial_extent WHERE GRASS_MAP_spatial_extent.id IN 
 --           (SELECT min(proj) FROM GRASS_MAP_spatial_extent WHERE GRASS_MAP_spatial_extent.id IN 
 --			(SELECT id FROM SPACETIME_NAME_GRASS_MAP_register)
 --			(SELECT id FROM SPACETIME_NAME_GRASS_MAP_register)
+--           ) WHERE id = 'SPACETIME_ID';
 --  END;
 --  END;
 --
 --
 --CREATE TRIGGER SPACETIME_NAME_GRASS_MAP_register_delete_trigger AFTER DELETE ON SPACETIME_NAME_GRASS_MAP_register 
 --CREATE TRIGGER SPACETIME_NAME_GRASS_MAP_register_delete_trigger AFTER DELETE ON SPACETIME_NAME_GRASS_MAP_register 
 -- BEGIN
 -- BEGIN
+--    UPDATE STDS_base SET modification_time = datetime("NOW") WHERE id = 'SPACETIME_ID';
+--    UPDATE STDS_base SET revision = (revision + 1) WHERE id = 'SPACETIME_ID';
 --    -- Number of registered maps
 --    -- Number of registered maps
 --    UPDATE STDS_metadata SET number_of_maps = 
 --    UPDATE STDS_metadata SET number_of_maps = 
 --           (SELECT count(id) FROM  SPACETIME_NAME_GRASS_MAP_register)
 --           (SELECT count(id) FROM  SPACETIME_NAME_GRASS_MAP_register)
+--           WHERE id = 'SPACETIME_ID';
 --    -- Update the temporal extent
 --    -- Update the temporal extent
 --    UPDATE STDS_absolute_time SET start_time = 
 --    UPDATE STDS_absolute_time SET start_time = 
 --           (SELECT min(start_time) FROM GRASS_MAP_absolute_time WHERE GRASS_MAP_absolute_time.id IN 
 --           (SELECT min(start_time) FROM GRASS_MAP_absolute_time WHERE GRASS_MAP_absolute_time.id IN 
 --			(SELECT id FROM SPACETIME_NAME_GRASS_MAP_register)
 --			(SELECT id FROM SPACETIME_NAME_GRASS_MAP_register)
+--           ) WHERE id = 'SPACETIME_ID';
 --    UPDATE STDS_absolute_time SET end_time = 
 --    UPDATE STDS_absolute_time SET end_time = 
 --           (SELECT max(end_time) FROM GRASS_MAP_absolute_time WHERE GRASS_MAP_absolute_time.id IN 
 --           (SELECT max(end_time) FROM GRASS_MAP_absolute_time WHERE GRASS_MAP_absolute_time.id IN 
 --			(SELECT id FROM SPACETIME_NAME_GRASS_MAP_register)
 --			(SELECT id FROM SPACETIME_NAME_GRASS_MAP_register)
+--           ) WHERE id = 'SPACETIME_ID';
 --    -- Update the spatial extent
 --    -- Update the spatial extent
 --    UPDATE STDS_spatial_extent SET north = 
 --    UPDATE STDS_spatial_extent SET north = 
 --           (SELECT max(north) FROM GRASS_MAP_spatial_extent WHERE GRASS_MAP_spatial_extent.id IN 
 --           (SELECT max(north) FROM GRASS_MAP_spatial_extent WHERE GRASS_MAP_spatial_extent.id IN 
 --			(SELECT id FROM SPACETIME_NAME_GRASS_MAP_register)
 --			(SELECT id FROM SPACETIME_NAME_GRASS_MAP_register)
+--           ) WHERE id = 'SPACETIME_ID';
 --    UPDATE STDS_spatial_extent SET south = 
 --    UPDATE STDS_spatial_extent SET south = 
 --           (SELECT min(south) FROM GRASS_MAP_spatial_extent WHERE GRASS_MAP_spatial_extent.id IN 
 --           (SELECT min(south) FROM GRASS_MAP_spatial_extent WHERE GRASS_MAP_spatial_extent.id IN 
 --			(SELECT id FROM SPACETIME_NAME_GRASS_MAP_register)
 --			(SELECT id FROM SPACETIME_NAME_GRASS_MAP_register)
+--           ) WHERE id = 'SPACETIME_ID';
 --    UPDATE STDS_spatial_extent SET east = 
 --    UPDATE STDS_spatial_extent SET east = 
 --           (SELECT max(east) FROM GRASS_MAP_spatial_extent WHERE GRASS_MAP_spatial_extent.id IN 
 --           (SELECT max(east) FROM GRASS_MAP_spatial_extent WHERE GRASS_MAP_spatial_extent.id IN 
 --			(SELECT id FROM SPACETIME_NAME_GRASS_MAP_register)
 --			(SELECT id FROM SPACETIME_NAME_GRASS_MAP_register)
+--           ) WHERE id = 'SPACETIME_ID';
 --    UPDATE STDS_spatial_extent SET west = 
 --    UPDATE STDS_spatial_extent SET west = 
 --           (SELECT min(west) FROM GRASS_MAP_spatial_extent WHERE GRASS_MAP_spatial_extent.id IN 
 --           (SELECT min(west) FROM GRASS_MAP_spatial_extent WHERE GRASS_MAP_spatial_extent.id IN 
 --			(SELECT id FROM SPACETIME_NAME_GRASS_MAP_register)
 --			(SELECT id FROM SPACETIME_NAME_GRASS_MAP_register)
+--           ) WHERE id = 'SPACETIME_ID';
 --    UPDATE STDS_spatial_extent SET top = 
 --    UPDATE STDS_spatial_extent SET top = 
 --           (SELECT max(top) FROM GRASS_MAP_spatial_extent WHERE GRASS_MAP_spatial_extent.id IN 
 --           (SELECT max(top) FROM GRASS_MAP_spatial_extent WHERE GRASS_MAP_spatial_extent.id IN 
 --			(SELECT id FROM SPACETIME_NAME_GRASS_MAP_register)
 --			(SELECT id FROM SPACETIME_NAME_GRASS_MAP_register)
+--           ) WHERE id = 'SPACETIME_ID';
 --    UPDATE STDS_spatial_extent SET bottom = 
 --    UPDATE STDS_spatial_extent SET bottom = 
 --           (SELECT min(bottom) FROM GRASS_MAP_spatial_extent WHERE GRASS_MAP_spatial_extent.id IN 
 --           (SELECT min(bottom) FROM GRASS_MAP_spatial_extent WHERE GRASS_MAP_spatial_extent.id IN 
 --			(SELECT id FROM SPACETIME_NAME_GRASS_MAP_register)
 --			(SELECT id FROM SPACETIME_NAME_GRASS_MAP_register)
+--           ) WHERE id = 'SPACETIME_ID';
 --    UPDATE STDS_spatial_extent SET proj = 
 --    UPDATE STDS_spatial_extent SET proj = 
 --           (SELECT min(proj) FROM GRASS_MAP_spatial_extent WHERE GRASS_MAP_spatial_extent.id IN 
 --           (SELECT min(proj) FROM GRASS_MAP_spatial_extent WHERE GRASS_MAP_spatial_extent.id IN 
 --			(SELECT id FROM SPACETIME_NAME_GRASS_MAP_register)
 --			(SELECT id FROM SPACETIME_NAME_GRASS_MAP_register)
+--           ) WHERE id = 'SPACETIME_ID';
 --  END;
 --  END;
 --
 --

+ 21 - 1
lib/temporal/stds_raster3d_register_trigger_template.sql

@@ -8,7 +8,7 @@
 -- SPACETIME_NAME is a placeholder for specific stds name (SQL compliant): name_mapset
 -- SPACETIME_NAME is a placeholder for specific stds name (SQL compliant): name_mapset
 -- SPACETIME_ID is a placeholder for specific stds id: name@mapset
 -- SPACETIME_ID is a placeholder for specific stds id: name@mapset
 
 
-PRAGMA foreign_keys = ON;
+--PRAGMA foreign_keys = ON;
 
 
 -- Triggers are disabled due to huge performance issues
 -- Triggers are disabled due to huge performance issues
 --CREATE TRIGGER SPACETIME_NAME_raster3d_metadata_register_insert_trigger AFTER INSERT ON SPACETIME_NAME_raster3d_register 
 --CREATE TRIGGER SPACETIME_NAME_raster3d_metadata_register_insert_trigger AFTER INSERT ON SPACETIME_NAME_raster3d_register 
@@ -17,44 +17,44 @@ PRAGMA foreign_keys = ON;
 --    UPDATE str3ds_metadata SET min_min = 
 --    UPDATE str3ds_metadata SET min_min = 
 --           (SELECT min(min) FROM raster3d_metadata WHERE raster3d_metadata.id IN 
 --           (SELECT min(min) FROM raster3d_metadata WHERE raster3d_metadata.id IN 
 --			(SELECT id FROM SPACETIME_NAME_raster3d_register)
 --			(SELECT id FROM SPACETIME_NAME_raster3d_register)
+--           ) WHERE id = 'SPACETIME_ID';
 --    UPDATE str3ds_metadata SET min_max = 
 --    UPDATE str3ds_metadata SET min_max = 
 --           (SELECT max(min) FROM raster3d_metadata WHERE raster3d_metadata.id IN 
 --           (SELECT max(min) FROM raster3d_metadata WHERE raster3d_metadata.id IN 
 --			(SELECT id FROM SPACETIME_NAME_raster3d_register)
 --			(SELECT id FROM SPACETIME_NAME_raster3d_register)
+--           ) WHERE id = 'SPACETIME_ID';
 --    UPDATE str3ds_metadata SET max_min = 
 --    UPDATE str3ds_metadata SET max_min = 
 --           (SELECT min(max) FROM raster3d_metadata WHERE raster3d_metadata.id IN 
 --           (SELECT min(max) FROM raster3d_metadata WHERE raster3d_metadata.id IN 
 --			(SELECT id FROM SPACETIME_NAME_raster3d_register)
 --			(SELECT id FROM SPACETIME_NAME_raster3d_register)
+--           ) WHERE id = 'SPACETIME_ID';
 --    UPDATE str3ds_metadata SET max_max = 
 --    UPDATE str3ds_metadata SET max_max = 
 --           (SELECT max(max) FROM raster3d_metadata WHERE raster3d_metadata.id IN 
 --           (SELECT max(max) FROM raster3d_metadata WHERE raster3d_metadata.id IN 
 --			(SELECT id FROM SPACETIME_NAME_raster3d_register)
 --			(SELECT id FROM SPACETIME_NAME_raster3d_register)
+--           ) WHERE id = 'SPACETIME_ID';
 --    -- Update the resolution
 --    -- Update the resolution
 --    UPDATE str3ds_metadata SET nsres_min = 
 --    UPDATE str3ds_metadata SET nsres_min = 
 --           (SELECT min(nsres) FROM raster3d_metadata WHERE raster3d_metadata.id IN 
 --           (SELECT min(nsres) FROM raster3d_metadata WHERE raster3d_metadata.id IN 
 --			(SELECT id FROM SPACETIME_NAME_raster3d_register)
 --			(SELECT id FROM SPACETIME_NAME_raster3d_register)
+--           ) WHERE id = 'SPACETIME_ID';
 --    UPDATE str3ds_metadata SET nsres_max = 
 --    UPDATE str3ds_metadata SET nsres_max = 
 --           (SELECT max(nsres) FROM raster3d_metadata WHERE raster3d_metadata.id IN 
 --           (SELECT max(nsres) FROM raster3d_metadata WHERE raster3d_metadata.id IN 
 --			(SELECT id FROM SPACETIME_NAME_raster3d_register)
 --			(SELECT id FROM SPACETIME_NAME_raster3d_register)
+--           ) WHERE id = 'SPACETIME_ID';
 --    UPDATE str3ds_metadata SET ewres_min = 
 --    UPDATE str3ds_metadata SET ewres_min = 
 --           (SELECT min(ewres) FROM raster3d_metadata WHERE raster3d_metadata.id IN 
 --           (SELECT min(ewres) FROM raster3d_metadata WHERE raster3d_metadata.id IN 
 --			(SELECT id FROM SPACETIME_NAME_raster3d_register)
 --			(SELECT id FROM SPACETIME_NAME_raster3d_register)
+--           ) WHERE id = 'SPACETIME_ID';
 --    UPDATE str3ds_metadata SET ewres_max = 
 --    UPDATE str3ds_metadata SET ewres_max = 
 --           (SELECT max(ewres) FROM raster3d_metadata WHERE raster3d_metadata.id IN 
 --           (SELECT max(ewres) FROM raster3d_metadata WHERE raster3d_metadata.id IN 
 --			(SELECT id FROM SPACETIME_NAME_raster3d_register)
 --			(SELECT id FROM SPACETIME_NAME_raster3d_register)
+--           ) WHERE id = 'SPACETIME_ID';
 --    UPDATE str3ds_metadata SET tbres_min = 
 --    UPDATE str3ds_metadata SET tbres_min = 
 --           (SELECT min(tbres) FROM raster3d_metadata WHERE raster3d_metadata.id IN 
 --           (SELECT min(tbres) FROM raster3d_metadata WHERE raster3d_metadata.id IN 
 --			(SELECT id FROM SPACETIME_NAME_raster3d_register)
 --			(SELECT id FROM SPACETIME_NAME_raster3d_register)
+--           ) WHERE id = 'SPACETIME_ID';
 --    UPDATE str3ds_metadata SET tbres_max = 
 --    UPDATE str3ds_metadata SET tbres_max = 
 --           (SELECT max(tbres) FROM raster3d_metadata WHERE raster3d_metadata.id IN 
 --           (SELECT max(tbres) FROM raster3d_metadata WHERE raster3d_metadata.id IN 
 --			(SELECT id FROM SPACETIME_NAME_raster3d_register)
 --			(SELECT id FROM SPACETIME_NAME_raster3d_register)
+--           ) WHERE id = 'SPACETIME_ID';
 --  END;
 --  END;
 --
 --
 --CREATE TRIGGER SPACETIME_NAME_raster3d_metadata_register_delete_trigger AFTER DELETE ON SPACETIME_NAME_raster3d_register 
 --CREATE TRIGGER SPACETIME_NAME_raster3d_metadata_register_delete_trigger AFTER DELETE ON SPACETIME_NAME_raster3d_register 
@@ -63,44 +63,44 @@ PRAGMA foreign_keys = ON;
 --    UPDATE str3ds_metadata SET min_min = 
 --    UPDATE str3ds_metadata SET min_min = 
 --           (SELECT min(min) FROM raster3d_metadata WHERE raster3d_metadata.id IN 
 --           (SELECT min(min) FROM raster3d_metadata WHERE raster3d_metadata.id IN 
 --			(SELECT id FROM SPACETIME_NAME_raster3d_register)
 --			(SELECT id FROM SPACETIME_NAME_raster3d_register)
+--           ) WHERE id = 'SPACETIME_ID';
 --    UPDATE str3ds_metadata SET min_max = 
 --    UPDATE str3ds_metadata SET min_max = 
 --           (SELECT max(min) FROM raster3d_metadata WHERE raster3d_metadata.id IN 
 --           (SELECT max(min) FROM raster3d_metadata WHERE raster3d_metadata.id IN 
 --			(SELECT id FROM SPACETIME_NAME_raster3d_register)
 --			(SELECT id FROM SPACETIME_NAME_raster3d_register)
+--           ) WHERE id = 'SPACETIME_ID';
 --    UPDATE str3ds_metadata SET max_min = 
 --    UPDATE str3ds_metadata SET max_min = 
 --           (SELECT min(max) FROM raster3d_metadata WHERE raster3d_metadata.id IN 
 --           (SELECT min(max) FROM raster3d_metadata WHERE raster3d_metadata.id IN 
 --			(SELECT id FROM SPACETIME_NAME_raster3d_register)
 --			(SELECT id FROM SPACETIME_NAME_raster3d_register)
+--           ) WHERE id = 'SPACETIME_ID';
 --    UPDATE str3ds_metadata SET max_max = 
 --    UPDATE str3ds_metadata SET max_max = 
 --           (SELECT max(max) FROM raster3d_metadata WHERE raster3d_metadata.id IN 
 --           (SELECT max(max) FROM raster3d_metadata WHERE raster3d_metadata.id IN 
 --			(SELECT id FROM SPACETIME_NAME_raster3d_register)
 --			(SELECT id FROM SPACETIME_NAME_raster3d_register)
+--           ) WHERE id = 'SPACETIME_ID';
 --    -- Update the resolution
 --    -- Update the resolution
 --    UPDATE str3ds_metadata SET nsres_min = 
 --    UPDATE str3ds_metadata SET nsres_min = 
 --           (SELECT min(nsres) FROM raster3d_metadata WHERE raster3d_metadata.id IN 
 --           (SELECT min(nsres) FROM raster3d_metadata WHERE raster3d_metadata.id IN 
 --			(SELECT id FROM SPACETIME_NAME_raster3d_register)
 --			(SELECT id FROM SPACETIME_NAME_raster3d_register)
+--           ) WHERE id = 'SPACETIME_ID';
 --    UPDATE str3ds_metadata SET nsres_max = 
 --    UPDATE str3ds_metadata SET nsres_max = 
 --           (SELECT max(nsres) FROM raster3d_metadata WHERE raster3d_metadata.id IN 
 --           (SELECT max(nsres) FROM raster3d_metadata WHERE raster3d_metadata.id IN 
 --			(SELECT id FROM SPACETIME_NAME_raster3d_register)
 --			(SELECT id FROM SPACETIME_NAME_raster3d_register)
+--           ) WHERE id = 'SPACETIME_ID';
 --    UPDATE str3ds_metadata SET ewres_min = 
 --    UPDATE str3ds_metadata SET ewres_min = 
 --           (SELECT min(ewres) FROM raster3d_metadata WHERE raster3d_metadata.id IN 
 --           (SELECT min(ewres) FROM raster3d_metadata WHERE raster3d_metadata.id IN 
 --			(SELECT id FROM SPACETIME_NAME_raster3d_register)
 --			(SELECT id FROM SPACETIME_NAME_raster3d_register)
+--           ) WHERE id = 'SPACETIME_ID';
 --    UPDATE str3ds_metadata SET ewres_max = 
 --    UPDATE str3ds_metadata SET ewres_max = 
 --           (SELECT max(ewres) FROM raster3d_metadata WHERE raster3d_metadata.id IN 
 --           (SELECT max(ewres) FROM raster3d_metadata WHERE raster3d_metadata.id IN 
 --			(SELECT id FROM SPACETIME_NAME_raster3d_register)
 --			(SELECT id FROM SPACETIME_NAME_raster3d_register)
+--           ) WHERE id = 'SPACETIME_ID';
 --    UPDATE str3ds_metadata SET tbres_min = 
 --    UPDATE str3ds_metadata SET tbres_min = 
 --           (SELECT min(tbres) FROM raster3d_metadata WHERE raster3d_metadata.id IN 
 --           (SELECT min(tbres) FROM raster3d_metadata WHERE raster3d_metadata.id IN 
 --			(SELECT id FROM SPACETIME_NAME_raster3d_register)
 --			(SELECT id FROM SPACETIME_NAME_raster3d_register)
+--           ) WHERE id = 'SPACETIME_ID';
 --    UPDATE str3ds_metadata SET tbres_max = 
 --    UPDATE str3ds_metadata SET tbres_max = 
 --           (SELECT max(tbres) FROM raster3d_metadata WHERE raster3d_metadata.id IN 
 --           (SELECT max(tbres) FROM raster3d_metadata WHERE raster3d_metadata.id IN 
 --			(SELECT id FROM SPACETIME_NAME_raster3d_register)
 --			(SELECT id FROM SPACETIME_NAME_raster3d_register)
+--           ) WHERE id = 'SPACETIME_ID';
 --  END;
 --  END;
 --
 --
 --
 --

+ 17 - 1
lib/temporal/stds_raster_register_trigger_template.sql

@@ -8,7 +8,7 @@
 -- SPACETIME_NAME is a placeholder for specific stds name (SQL compliant): name_mapset
 -- SPACETIME_NAME is a placeholder for specific stds name (SQL compliant): name_mapset
 -- SPACETIME_ID is a placeholder for specific stds id: name@mapset
 -- SPACETIME_ID is a placeholder for specific stds id: name@mapset
 
 
-PRAGMA foreign_keys = ON;
+--PRAGMA foreign_keys = ON;
 
 
 -- Triggers are disabled due to huge performance issues
 -- Triggers are disabled due to huge performance issues
 --CREATE TRIGGER SPACETIME_NAME_raster_metadata_register_insert_trigger AFTER INSERT ON SPACETIME_NAME_raster_register 
 --CREATE TRIGGER SPACETIME_NAME_raster_metadata_register_insert_trigger AFTER INSERT ON SPACETIME_NAME_raster_register 
@@ -17,36 +17,36 @@ PRAGMA foreign_keys = ON;
 --    UPDATE strds_metadata SET min_min = 
 --    UPDATE strds_metadata SET min_min = 
 --           (SELECT min(min) FROM raster_metadata WHERE raster_metadata.id IN 
 --           (SELECT min(min) FROM raster_metadata WHERE raster_metadata.id IN 
 --			(SELECT id FROM SPACETIME_NAME_raster_register)
 --			(SELECT id FROM SPACETIME_NAME_raster_register)
+--           ) WHERE id = 'SPACETIME_ID';
 --    UPDATE strds_metadata SET min_max = 
 --    UPDATE strds_metadata SET min_max = 
 --           (SELECT max(min) FROM raster_metadata WHERE raster_metadata.id IN 
 --           (SELECT max(min) FROM raster_metadata WHERE raster_metadata.id IN 
 --			(SELECT id FROM SPACETIME_NAME_raster_register)
 --			(SELECT id FROM SPACETIME_NAME_raster_register)
+--           ) WHERE id = 'SPACETIME_ID';
 --    UPDATE strds_metadata SET max_min = 
 --    UPDATE strds_metadata SET max_min = 
 --           (SELECT min(max) FROM raster_metadata WHERE raster_metadata.id IN 
 --           (SELECT min(max) FROM raster_metadata WHERE raster_metadata.id IN 
 --			(SELECT id FROM SPACETIME_NAME_raster_register)
 --			(SELECT id FROM SPACETIME_NAME_raster_register)
+--           ) WHERE id = 'SPACETIME_ID';
 --    UPDATE strds_metadata SET max_max = 
 --    UPDATE strds_metadata SET max_max = 
 --           (SELECT max(max) FROM raster_metadata WHERE raster_metadata.id IN 
 --           (SELECT max(max) FROM raster_metadata WHERE raster_metadata.id IN 
 --			(SELECT id FROM SPACETIME_NAME_raster_register)
 --			(SELECT id FROM SPACETIME_NAME_raster_register)
+--           ) WHERE id = 'SPACETIME_ID';
 --    -- Update the resolution
 --    -- Update the resolution
 --    UPDATE strds_metadata SET nsres_min = 
 --    UPDATE strds_metadata SET nsres_min = 
 --           (SELECT min(nsres) FROM raster_metadata WHERE raster_metadata.id IN 
 --           (SELECT min(nsres) FROM raster_metadata WHERE raster_metadata.id IN 
 --			(SELECT id FROM SPACETIME_NAME_raster_register)
 --			(SELECT id FROM SPACETIME_NAME_raster_register)
+--           ) WHERE id = 'SPACETIME_ID';
 --    UPDATE strds_metadata SET nsres_max = 
 --    UPDATE strds_metadata SET nsres_max = 
 --           (SELECT max(nsres) FROM raster_metadata WHERE raster_metadata.id IN 
 --           (SELECT max(nsres) FROM raster_metadata WHERE raster_metadata.id IN 
 --			(SELECT id FROM SPACETIME_NAME_raster_register)
 --			(SELECT id FROM SPACETIME_NAME_raster_register)
+--           ) WHERE id = 'SPACETIME_ID';
 --    UPDATE strds_metadata SET ewres_min = 
 --    UPDATE strds_metadata SET ewres_min = 
 --           (SELECT min(ewres) FROM raster_metadata WHERE raster_metadata.id IN 
 --           (SELECT min(ewres) FROM raster_metadata WHERE raster_metadata.id IN 
 --			(SELECT id FROM SPACETIME_NAME_raster_register)
 --			(SELECT id FROM SPACETIME_NAME_raster_register)
+--           ) WHERE id = 'SPACETIME_ID';
 --    UPDATE strds_metadata SET ewres_max = 
 --    UPDATE strds_metadata SET ewres_max = 
 --           (SELECT max(ewres) FROM raster_metadata WHERE raster_metadata.id IN 
 --           (SELECT max(ewres) FROM raster_metadata WHERE raster_metadata.id IN 
 --			(SELECT id FROM SPACETIME_NAME_raster_register)
 --			(SELECT id FROM SPACETIME_NAME_raster_register)
+--           ) WHERE id = 'SPACETIME_ID';
 --  END;
 --  END;
 --
 --
 --CREATE TRIGGER SPACETIME_NAME_raster_metadata_register_delete_trigger AFTER DELETE ON SPACETIME_NAME_raster_register 
 --CREATE TRIGGER SPACETIME_NAME_raster_metadata_register_delete_trigger AFTER DELETE ON SPACETIME_NAME_raster_register 
@@ -55,36 +55,36 @@ PRAGMA foreign_keys = ON;
 --    UPDATE strds_metadata SET min_min = 
 --    UPDATE strds_metadata SET min_min = 
 --           (SELECT min(min) FROM raster_metadata WHERE raster_metadata.id IN 
 --           (SELECT min(min) FROM raster_metadata WHERE raster_metadata.id IN 
 --			(SELECT id FROM SPACETIME_NAME_raster_register)
 --			(SELECT id FROM SPACETIME_NAME_raster_register)
+--           ) WHERE id = 'SPACETIME_ID';
 --    UPDATE strds_metadata SET min_max = 
 --    UPDATE strds_metadata SET min_max = 
 --           (SELECT max(min) FROM raster_metadata WHERE raster_metadata.id IN 
 --           (SELECT max(min) FROM raster_metadata WHERE raster_metadata.id IN 
 --			(SELECT id FROM SPACETIME_NAME_raster_register)
 --			(SELECT id FROM SPACETIME_NAME_raster_register)
+--           ) WHERE id = 'SPACETIME_ID';
 --    UPDATE strds_metadata SET max_min = 
 --    UPDATE strds_metadata SET max_min = 
 --           (SELECT min(max) FROM raster_metadata WHERE raster_metadata.id IN 
 --           (SELECT min(max) FROM raster_metadata WHERE raster_metadata.id IN 
 --			(SELECT id FROM SPACETIME_NAME_raster_register)
 --			(SELECT id FROM SPACETIME_NAME_raster_register)
+--           ) WHERE id = 'SPACETIME_ID';
 --    UPDATE strds_metadata SET max_max = 
 --    UPDATE strds_metadata SET max_max = 
 --           (SELECT max(max) FROM raster_metadata WHERE raster_metadata.id IN 
 --           (SELECT max(max) FROM raster_metadata WHERE raster_metadata.id IN 
 --			(SELECT id FROM SPACETIME_NAME_raster_register)
 --			(SELECT id FROM SPACETIME_NAME_raster_register)
+--           ) WHERE id = 'SPACETIME_ID';
 --    -- Update the resolution
 --    -- Update the resolution
 --    UPDATE strds_metadata SET nsres_min = 
 --    UPDATE strds_metadata SET nsres_min = 
 --           (SELECT min(nsres) FROM raster_metadata WHERE raster_metadata.id IN 
 --           (SELECT min(nsres) FROM raster_metadata WHERE raster_metadata.id IN 
 --			(SELECT id FROM SPACETIME_NAME_raster_register)
 --			(SELECT id FROM SPACETIME_NAME_raster_register)
+--           ) WHERE id = 'SPACETIME_ID';
 --    UPDATE strds_metadata SET nsres_max = 
 --    UPDATE strds_metadata SET nsres_max = 
 --           (SELECT max(nsres) FROM raster_metadata WHERE raster_metadata.id IN 
 --           (SELECT max(nsres) FROM raster_metadata WHERE raster_metadata.id IN 
 --			(SELECT id FROM SPACETIME_NAME_raster_register)
 --			(SELECT id FROM SPACETIME_NAME_raster_register)
+--           ) WHERE id = 'SPACETIME_ID';
 --    UPDATE strds_metadata SET ewres_min = 
 --    UPDATE strds_metadata SET ewres_min = 
 --           (SELECT min(ewres) FROM raster_metadata WHERE raster_metadata.id IN 
 --           (SELECT min(ewres) FROM raster_metadata WHERE raster_metadata.id IN 
 --			(SELECT id FROM SPACETIME_NAME_raster_register)
 --			(SELECT id FROM SPACETIME_NAME_raster_register)
+--           ) WHERE id = 'SPACETIME_ID';
 --    UPDATE strds_metadata SET ewres_max = 
 --    UPDATE strds_metadata SET ewres_max = 
 --           (SELECT max(ewres) FROM raster_metadata WHERE raster_metadata.id IN 
 --           (SELECT max(ewres) FROM raster_metadata WHERE raster_metadata.id IN 
 --			(SELECT id FROM SPACETIME_NAME_raster_register)
 --			(SELECT id FROM SPACETIME_NAME_raster_register)
+--           ) WHERE id = 'SPACETIME_ID';
 --  END;
 --  END;
 --
 --
 --
 --

+ 22 - 21
lib/temporal/stds_tables_template.sql

@@ -7,7 +7,7 @@
 
 
 -- STDS is a placeholder for specific space-time dataset type: strds, str3ds, stvds
 -- STDS is a placeholder for specific space-time dataset type: strds, str3ds, stvds
 
 
-PRAGMA foreign_keys = ON;
+--PRAGMA foreign_keys = ON;
 
 
 CREATE TABLE  STDS_base (
 CREATE TABLE  STDS_base (
   id VARCHAR NOT NULL,                 -- Id of the space-time dataset, name@mapset this is the primary key
   id VARCHAR NOT NULL,                 -- Id of the space-time dataset, name@mapset this is the primary key
@@ -17,8 +17,9 @@ CREATE TABLE  STDS_base (
   temporal_type VARCHAR NOT NULL,      -- The temporal type of the dataset "absolute" or "relative" 
   temporal_type VARCHAR NOT NULL,      -- The temporal type of the dataset "absolute" or "relative" 
   semantic_type VARCHAR NOT NULL,      -- The semantic data description used for aggregation/decomposition algorithm selection
   semantic_type VARCHAR NOT NULL,      -- The semantic data description used for aggregation/decomposition algorithm selection
   creation_time TIMESTAMP NOT NULL,    -- The time of creation of the space-time dataset
   creation_time TIMESTAMP NOT NULL,    -- The time of creation of the space-time dataset
-  modification_time TIMESTAMP NOT NULL,-- The time of the last modification of the space-time dataset
-  revision SMALLINT NOT NULL,          -- The revision number
+-- Uncommented due to performance issues
+--  modification_time TIMESTAMP NOT NULL,  -- The time of the last modification of the grass map
+--  revision SMALLINT NOT NULL,           -- The revision number        -- The revision number
   PRIMARY KEY (id)
   PRIMARY KEY (id)
 );
 );
 
 
@@ -26,7 +27,7 @@ CREATE TABLE  STDS_relative_time (
   id VARCHAR NOT NULL,            -- Id of the space-time dataset, this is the primary foreign key
   id VARCHAR NOT NULL,            -- Id of the space-time dataset, this is the primary foreign key
   start_time DOUBLE PRECISION,    -- The relative valid start time in [days]
   start_time DOUBLE PRECISION,    -- The relative valid start time in [days]
   end_time DOUBLE PRECISION,      -- The relative valid end time in [days]
   end_time DOUBLE PRECISION,      -- The relative valid end time in [days]
-  granularity DOUBLE,             -- The granularity in [days]
+  granularity DOUBLE PRECISION,             -- The granularity in [days]
   PRIMARY KEY (id),  
   PRIMARY KEY (id),  
   FOREIGN KEY (id) REFERENCES  STDS_base (id) ON DELETE CASCADE
   FOREIGN KEY (id) REFERENCES  STDS_base (id) ON DELETE CASCADE
 );
 );
@@ -49,28 +50,28 @@ CREATE TABLE  STDS_spatial_extent (
   west DOUBLE PRECISION,    -- The spatial west extent, derived from the registered maps
   west DOUBLE PRECISION,    -- The spatial west extent, derived from the registered maps
   top DOUBLE PRECISION,     -- The spatial top extent, derived from the registered maps
   top DOUBLE PRECISION,     -- The spatial top extent, derived from the registered maps
   bottom DOUBLE PRECISION,  -- The spatial bottom extent, derived from the registered maps
   bottom DOUBLE PRECISION,  -- The spatial bottom extent, derived from the registered maps
-  proj DOUBLE VARCHAR,      -- The projection of the space time dataset (XY of LL)
+  proj VARCHAR,      -- The projection of the space time dataset (XY of LL)
   PRIMARY KEY (id),  
   PRIMARY KEY (id),  
   FOREIGN KEY (id) REFERENCES  STDS_base (id) ON DELETE CASCADE
   FOREIGN KEY (id) REFERENCES  STDS_base (id) ON DELETE CASCADE
 );
 );
 
 
 -- Create a trigger to update the modification time and revision number in case the metadata or timestanps have been updated 
 -- Create a trigger to update the modification time and revision number in case the metadata or timestanps have been updated 
+-- Uncommented due to performance issues
+--CREATE TRIGGER update_STDS_abs_time AFTER UPDATE ON STDS_absolute_time 
+--  BEGIN
+--    UPDATE STDS_base SET modification_time = datetime("NOW") WHERE id = old.id;
+--    UPDATE STDS_base SET revision = (revision + 1) WHERE id = old.id;
+--  END;
 
 
-CREATE TRIGGER update_STDS_abs_time AFTER UPDATE ON STDS_absolute_time 
-  BEGIN
-    UPDATE STDS_base SET modification_time = datetime("NOW") WHERE id = old.id;
-    UPDATE STDS_base SET revision = (revision + 1) WHERE id = old.id;
-  END;
+--CREATE TRIGGER update_STDS_rel_time AFTER UPDATE ON STDS_relative_time 
+--  BEGIN
+--    UPDATE STDS_base SET modification_time = datetime("NOW") WHERE id = old.id;
+--    UPDATE STDS_base SET revision = (revision + 1) WHERE id = old.id;
+--  END;
 
 
-CREATE TRIGGER update_STDS_rel_time AFTER UPDATE ON STDS_relative_time 
-  BEGIN
-    UPDATE STDS_base SET modification_time = datetime("NOW") WHERE id = old.id;
-    UPDATE STDS_base SET revision = (revision + 1) WHERE id = old.id;
-  END;
-
-CREATE TRIGGER update_STDS_spatial_extent AFTER UPDATE ON STDS_spatial_extent 
-  BEGIN
-    UPDATE STDS_base SET modification_time = datetime("NOW") WHERE id = old.id;
-    UPDATE STDS_base SET revision = (revision + 1) WHERE id = old.id;
-  END;
+--CREATE TRIGGER update_STDS_spatial_extent AFTER UPDATE ON STDS_spatial_extent 
+--  BEGIN
+--    UPDATE STDS_base SET modification_time = datetime("NOW") WHERE id = old.id;
+--   UPDATE STDS_base SET revision = (revision + 1) WHERE id = old.id;
+--  END;
 
 

+ 17 - 23
lib/temporal/str3ds_metadata_table.sql

@@ -5,7 +5,7 @@
 -- Author: Soeren Gebbert soerengebbert <at> googlemail <dot> com
 -- Author: Soeren Gebbert soerengebbert <at> googlemail <dot> com
 --#############################################################################
 --#############################################################################
 
 
-PRAGMA foreign_keys = ON;
+--PRAGMA foreign_keys = ON;
 
 
 CREATE TABLE  str3ds_metadata (
 CREATE TABLE  str3ds_metadata (
   id VARCHAR NOT NULL,          -- Id of the space-time raster3d dataset, this is the primary foreign key
   id VARCHAR NOT NULL,          -- Id of the space-time raster3d dataset, this is the primary foreign key
@@ -30,9 +30,11 @@ CREATE TABLE  str3ds_metadata (
 
 
 CREATE VIEW str3ds_view_abs_time AS SELECT 
 CREATE VIEW str3ds_view_abs_time AS SELECT 
             A1.id, A1.name, A1.mapset, A1.temporal_type,
             A1.id, A1.name, A1.mapset, A1.temporal_type,
-            A1.creator, A1.semantic_type,  
-            A1.creation_time, A1.modification_time,
-            A1.revision,
+            A1.semantic_type, 
+            A1.creation_time, 
+-- Uncommented due to performance issues
+--            A1.modification_time, A1.revision, 
+            A1.creator, 
 	    A2.start_time, A2.end_time, A2.timezone, A2.granularity,
 	    A2.start_time, A2.end_time, A2.timezone, A2.granularity,
 	    A3.north, A3.south, A3.east, A3.west, A3.proj,
 	    A3.north, A3.south, A3.east, A3.west, A3.proj,
 	    A4.raster3d_register,
 	    A4.raster3d_register,
@@ -49,9 +51,11 @@ CREATE VIEW str3ds_view_abs_time AS SELECT
 
 
 CREATE VIEW str3ds_view_rel_time AS SELECT 
 CREATE VIEW str3ds_view_rel_time AS SELECT 
             A1.id, A1.name, A1.mapset, A1.temporal_type,
             A1.id, A1.name, A1.mapset, A1.temporal_type,
-            A1.creator, A1.semantic_type,  
-            A1.creation_time, A1.modification_time,
-            A1.revision,
+            A1.semantic_type, 
+            A1.creation_time, 
+-- Uncommented due to performance issues
+--            A1.modification_time, A1.revision, 
+            A1.creator, 
 	    A2.start_time, A2.end_time, A2.granularity,
 	    A2.start_time, A2.end_time, A2.granularity,
 	    A3.north, A3.south, A3.east, A3.west, A3.proj,
 	    A3.north, A3.south, A3.east, A3.west, A3.proj,
 	    A4.raster3d_register,
 	    A4.raster3d_register,
@@ -68,20 +72,9 @@ CREATE VIEW str3ds_view_rel_time AS SELECT
 
 
 
 
 -- Create a trigger to update the modification time and revision number in case the metadata or timestanps have been updated 
 -- Create a trigger to update the modification time and revision number in case the metadata or timestanps have been updated 
-
-CREATE TRIGGER update_str3ds_metadata AFTER UPDATE ON str3ds_metadata 
-  BEGIN
-    UPDATE str3ds_base SET modification_time = datetime("NOW") WHERE id = old.id;
-    UPDATE str3ds_base SET revision = (revision + 1) WHERE id = old.id;
-  END;
-
-
-CREATE TRIGGER delete_str3ds_base AFTER DELETE ON str3ds_base
-  BEGIN
-    DELETE FROM str3ds_absolute_time WHERE id = old.id;
-    DELETE FROM str3ds_relative_time WHERE id = old.id;
-    DELETE FROM str3ds_spatial_extent WHERE id = old.id;
-    DELETE FROM str3ds_metadata WHERE id = old.id;
-  END;
-
+-- Uncommented due to performance issues
+--CREATE TRIGGER update_str3ds_metadata AFTER UPDATE ON str3ds_metadata 
+--  BEGIN
+--    UPDATE str3ds_base SET modification_time = datetime("NOW") WHERE id = old.id;
+--    UPDATE str3ds_base SET revision = (revision + 1) WHERE id = old.id;
+--  END;

+ 17 - 23
lib/temporal/strds_metadata_table.sql

@@ -5,7 +5,7 @@
 -- Author: Soeren Gebbert soerengebbert <at> googlemail <dot> com
 -- Author: Soeren Gebbert soerengebbert <at> googlemail <dot> com
 --#############################################################################
 --#############################################################################
 
 
-PRAGMA foreign_keys = ON;
+--PRAGMA foreign_keys = ON;
 
 
 CREATE TABLE  strds_metadata (
 CREATE TABLE  strds_metadata (
   id VARCHAR NOT NULL,          -- Id of the space-time dataset, this is the primary foreign key
   id VARCHAR NOT NULL,          -- Id of the space-time dataset, this is the primary foreign key
@@ -28,9 +28,11 @@ CREATE TABLE  strds_metadata (
 
 
 CREATE VIEW strds_view_abs_time AS SELECT 
 CREATE VIEW strds_view_abs_time AS SELECT 
             A1.id, A1.name, A1.mapset, A1.temporal_type,
             A1.id, A1.name, A1.mapset, A1.temporal_type,
-            A1.creator, A1.semantic_type,  
-            A1.creation_time, A1.modification_time,
-            A1.revision,
+            A1.semantic_type, 
+            A1.creation_time, 
+-- Uncommented due to performance issues
+--            A1.modification_time, A1.revision, 
+            A1.creator, 
 	    A2.start_time, A2.end_time, A2.timezone, A2.granularity,
 	    A2.start_time, A2.end_time, A2.timezone, A2.granularity,
 	    A3.north, A3.south, A3.east, A3.west, A3.proj,
 	    A3.north, A3.south, A3.east, A3.west, A3.proj,
 	    A4.raster_register,
 	    A4.raster_register,
@@ -46,9 +48,11 @@ CREATE VIEW strds_view_abs_time AS SELECT
 
 
 CREATE VIEW strds_view_rel_time AS SELECT 
 CREATE VIEW strds_view_rel_time AS SELECT 
             A1.id, A1.name, A1.mapset, A1.temporal_type,
             A1.id, A1.name, A1.mapset, A1.temporal_type,
-            A1.creator, A1.semantic_type,  
-            A1.creation_time, A1.modification_time,
-            A1.revision,
+            A1.semantic_type, 
+            A1.creation_time, 
+-- Uncommented due to performance issues
+--            A1.modification_time, A1.revision, 
+            A1.creator, 
 	    A2.start_time, A2.end_time, A2.granularity,
 	    A2.start_time, A2.end_time, A2.granularity,
 	    A3.north, A3.south, A3.east, A3.west, A3.proj,
 	    A3.north, A3.south, A3.east, A3.west, A3.proj,
 	    A4.raster_register,
 	    A4.raster_register,
@@ -64,20 +68,9 @@ CREATE VIEW strds_view_rel_time AS SELECT
 
 
 
 
 -- Create a trigger to update the modification time and revision number in case the metadata or timestanps have been updated 
 -- Create a trigger to update the modification time and revision number in case the metadata or timestanps have been updated 
-
-CREATE TRIGGER update_strds_metadata AFTER UPDATE ON strds_metadata 
-  BEGIN
-    UPDATE strds_base SET modification_time = datetime("NOW") WHERE id = old.id;
-    UPDATE strds_base SET revision = (revision + 1) WHERE id = old.id;
-  END;
-
-
-CREATE TRIGGER delete_strds_base AFTER DELETE ON strds_base
-  BEGIN
-    DELETE FROM strds_absolute_time WHERE id = old.id;
-    DELETE FROM strds_relative_time WHERE id = old.id;
-    DELETE FROM strds_spatial_extent WHERE id = old.id;
-    DELETE FROM strds_metadata WHERE id = old.id;
-  END;
-
+-- Uncommented due to performance issues
+--CREATE TRIGGER update_strds_metadata AFTER UPDATE ON strds_metadata 
+--  BEGIN
+--    UPDATE strds_base SET modification_time = datetime("NOW") WHERE id = old.id;
+--    UPDATE strds_base SET revision = (revision + 1) WHERE id = old.id;
+--  END;

+ 17 - 23
lib/temporal/stvds_metadata_table.sql

@@ -5,7 +5,7 @@
 -- Author: Soeren Gebbert soerengebbert <at> googlemail <dot> com
 -- Author: Soeren Gebbert soerengebbert <at> googlemail <dot> com
 --#############################################################################
 --#############################################################################
 
 
-PRAGMA foreign_keys = ON;
+--PRAGMA foreign_keys = ON;
 
 
 CREATE TABLE  stvds_metadata (
 CREATE TABLE  stvds_metadata (
   id VARCHAR NOT NULL,                -- Name of the space-time vector dataset, this is the primary foreign key
   id VARCHAR NOT NULL,                -- Name of the space-time vector dataset, this is the primary foreign key
@@ -20,9 +20,11 @@ CREATE TABLE  stvds_metadata (
 
 
 CREATE VIEW stvds_view_abs_time AS SELECT 
 CREATE VIEW stvds_view_abs_time AS SELECT 
             A1.id, A1.name, A1.mapset, A1.temporal_type,
             A1.id, A1.name, A1.mapset, A1.temporal_type,
-            A1.creator, A1.semantic_type,  
-            A1.creation_time, A1.modification_time,
-            A1.revision,
+            A1.semantic_type, 
+            A1.creation_time, 
+-- Uncommented due to performance issues
+--            A1.modification_time, A1.revision, 
+            A1.creator, 
 	    A2.start_time, A2.end_time, A2.timezone,
 	    A2.start_time, A2.end_time, A2.timezone,
             A2.granularity,
             A2.granularity,
 	    A3.north, A3.south, A3.east, A3.west, A3.proj,
 	    A3.north, A3.south, A3.east, A3.west, A3.proj,
@@ -35,9 +37,11 @@ CREATE VIEW stvds_view_abs_time AS SELECT
 
 
 CREATE VIEW stvds_view_rel_time AS SELECT 
 CREATE VIEW stvds_view_rel_time AS SELECT 
             A1.id, A1.name, A1.mapset, A1.temporal_type,
             A1.id, A1.name, A1.mapset, A1.temporal_type,
-            A1.creator, A1.semantic_type,  
-            A1.creation_time, A1.modification_time,
-            A1.revision,
+            A1.semantic_type, 
+            A1.creation_time, 
+-- Uncommented due to performance issues
+--            A1.modification_time, A1.revision, 
+            A1.creator, 
 	    A2.start_time, A2.end_time, A2.granularity,
 	    A2.start_time, A2.end_time, A2.granularity,
 	    A3.north, A3.south, A3.east, A3.west, A3.proj,
 	    A3.north, A3.south, A3.east, A3.west, A3.proj,
 	    A4.vector_register,
 	    A4.vector_register,
@@ -49,20 +53,9 @@ CREATE VIEW stvds_view_rel_time AS SELECT
 
 
 
 
 -- Create a trigger to update the modification time and revision number in case the metadata or timestanps have been updated 
 -- Create a trigger to update the modification time and revision number in case the metadata or timestanps have been updated 
-
-CREATE TRIGGER update_stvds_metadata AFTER UPDATE ON stvds_metadata 
-  BEGIN
-    UPDATE stvds_base SET modification_time = datetime("NOW") WHERE id = old.id;
-    UPDATE stvds_base SET revision = (revision + 1) WHERE id = old.id;
-  END;
-
-
-CREATE TRIGGER delete_stvds_base AFTER DELETE ON stvds_base
-  BEGIN
-    DELETE FROM stvds_absolute_time WHERE id = old.id;
-    DELETE FROM stvds_relative_time WHERE id = old.id;
-    DELETE FROM stvds_spatial_extent WHERE id = old.id;
-    DELETE FROM stvds_metadata WHERE id = old.id;
-  END;
-
+-- Uncommented due to performance issues
+--CREATE TRIGGER update_stvds_metadata AFTER UPDATE ON stvds_metadata 
+--  BEGIN
+--    UPDATE stvds_base SET modification_time = datetime("NOW") WHERE id = old.id;
+--    UPDATE stvds_base SET revision = (revision + 1) WHERE id = old.id;
+--  END;

+ 14 - 14
lib/temporal/update_stds_spatial_temporal_extent_template.sql

@@ -12,55 +12,55 @@
 -- GRASS_MAP is a placeholder for specific map type: raster, raster3d or vector
 -- GRASS_MAP is a placeholder for specific map type: raster, raster3d or vector
 -- STDS is a placeholder for specific space-time dataset type: strds, str3ds, stvds
 -- STDS is a placeholder for specific space-time dataset type: strds, str3ds, stvds
 
 
-UPDATE STDS_base SET modification_time = datetime("NOW") WHERE id = "SPACETIME_ID";
-UPDATE STDS_base SET revision = (revision + 1) WHERE id = "SPACETIME_ID";
+-- UPDATE STDS_base SET modification_time = datetime("NOW") WHERE id = 'SPACETIME_ID';
+-- UPDATE STDS_base SET revision = (revision + 1) WHERE id = 'SPACETIME_ID';
 -- Number of registered maps
 -- Number of registered maps
 UPDATE STDS_metadata SET number_of_maps = 
 UPDATE STDS_metadata SET number_of_maps = 
        (SELECT count(id) FROM SPACETIME_NAME_GRASS_MAP_register)
        (SELECT count(id) FROM SPACETIME_NAME_GRASS_MAP_register)
-       WHERE id = "SPACETIME_ID";
+       WHERE id = 'SPACETIME_ID';
 -- Update the temporal extent
 -- Update the temporal extent
 UPDATE STDS_absolute_time SET start_time = 
 UPDATE STDS_absolute_time SET start_time = 
        (SELECT min(start_time) FROM GRASS_MAP_absolute_time WHERE GRASS_MAP_absolute_time.id IN 
        (SELECT min(start_time) FROM GRASS_MAP_absolute_time WHERE GRASS_MAP_absolute_time.id IN 
     		(SELECT id FROM SPACETIME_NAME_GRASS_MAP_register)
     		(SELECT id FROM SPACETIME_NAME_GRASS_MAP_register)
-       ) WHERE id = "SPACETIME_ID";
+       ) WHERE id = 'SPACETIME_ID';
 UPDATE STDS_absolute_time SET end_time = 
 UPDATE STDS_absolute_time SET end_time = 
        (SELECT max(end_time) FROM GRASS_MAP_absolute_time WHERE GRASS_MAP_absolute_time.id IN 
        (SELECT max(end_time) FROM GRASS_MAP_absolute_time WHERE GRASS_MAP_absolute_time.id IN 
     		(SELECT id FROM SPACETIME_NAME_GRASS_MAP_register)
     		(SELECT id FROM SPACETIME_NAME_GRASS_MAP_register)
-       ) WHERE id = "SPACETIME_ID";
+       ) WHERE id = 'SPACETIME_ID';
 UPDATE STDS_relative_time SET start_time =
 UPDATE STDS_relative_time SET start_time =
        (SELECT min(start_time) FROM GRASS_MAP_relative_time WHERE GRASS_MAP_relative_time.id IN
        (SELECT min(start_time) FROM GRASS_MAP_relative_time WHERE GRASS_MAP_relative_time.id IN
     		(SELECT id FROM SPACETIME_NAME_GRASS_MAP_register)
     		(SELECT id FROM SPACETIME_NAME_GRASS_MAP_register)
-       ) WHERE id = "SPACETIME_ID";
+       ) WHERE id = 'SPACETIME_ID';
 UPDATE STDS_relative_time SET end_time =
 UPDATE STDS_relative_time SET end_time =
        (SELECT max(end_time) FROM GRASS_MAP_relative_time WHERE GRASS_MAP_relative_time.id IN
        (SELECT max(end_time) FROM GRASS_MAP_relative_time WHERE GRASS_MAP_relative_time.id IN
     		(SELECT id FROM SPACETIME_NAME_GRASS_MAP_register)
     		(SELECT id FROM SPACETIME_NAME_GRASS_MAP_register)
-       ) WHERE id = "SPACETIME_ID";
+       ) WHERE id = 'SPACETIME_ID';
 -- Update the spatial extent
 -- Update the spatial extent
 UPDATE STDS_spatial_extent SET north = 
 UPDATE STDS_spatial_extent SET north = 
        (SELECT max(north) FROM GRASS_MAP_spatial_extent WHERE GRASS_MAP_spatial_extent.id IN 
        (SELECT max(north) FROM GRASS_MAP_spatial_extent WHERE GRASS_MAP_spatial_extent.id IN 
     		(SELECT id FROM SPACETIME_NAME_GRASS_MAP_register)
     		(SELECT id FROM SPACETIME_NAME_GRASS_MAP_register)
-       ) WHERE id = "SPACETIME_ID";
+       ) WHERE id = 'SPACETIME_ID';
 UPDATE STDS_spatial_extent SET south = 
 UPDATE STDS_spatial_extent SET south = 
        (SELECT min(south) FROM GRASS_MAP_spatial_extent WHERE GRASS_MAP_spatial_extent.id IN 
        (SELECT min(south) FROM GRASS_MAP_spatial_extent WHERE GRASS_MAP_spatial_extent.id IN 
     		(SELECT id FROM SPACETIME_NAME_GRASS_MAP_register)
     		(SELECT id FROM SPACETIME_NAME_GRASS_MAP_register)
-       ) WHERE id = "SPACETIME_ID";
+       ) WHERE id = 'SPACETIME_ID';
 UPDATE STDS_spatial_extent SET east = 
 UPDATE STDS_spatial_extent SET east = 
        (SELECT max(east) FROM GRASS_MAP_spatial_extent WHERE GRASS_MAP_spatial_extent.id IN 
        (SELECT max(east) FROM GRASS_MAP_spatial_extent WHERE GRASS_MAP_spatial_extent.id IN 
     		(SELECT id FROM SPACETIME_NAME_GRASS_MAP_register)
     		(SELECT id FROM SPACETIME_NAME_GRASS_MAP_register)
-       ) WHERE id = "SPACETIME_ID";
+       ) WHERE id = 'SPACETIME_ID';
 UPDATE STDS_spatial_extent SET west = 
 UPDATE STDS_spatial_extent SET west = 
        (SELECT min(west) FROM GRASS_MAP_spatial_extent WHERE GRASS_MAP_spatial_extent.id IN 
        (SELECT min(west) FROM GRASS_MAP_spatial_extent WHERE GRASS_MAP_spatial_extent.id IN 
     		(SELECT id FROM SPACETIME_NAME_GRASS_MAP_register)
     		(SELECT id FROM SPACETIME_NAME_GRASS_MAP_register)
-       ) WHERE id = "SPACETIME_ID";
+       ) WHERE id = 'SPACETIME_ID';
 UPDATE STDS_spatial_extent SET top = 
 UPDATE STDS_spatial_extent SET top = 
        (SELECT max(top) FROM GRASS_MAP_spatial_extent WHERE GRASS_MAP_spatial_extent.id IN 
        (SELECT max(top) FROM GRASS_MAP_spatial_extent WHERE GRASS_MAP_spatial_extent.id IN 
     		(SELECT id FROM SPACETIME_NAME_GRASS_MAP_register)
     		(SELECT id FROM SPACETIME_NAME_GRASS_MAP_register)
-       ) WHERE id = "SPACETIME_ID";
+       ) WHERE id = 'SPACETIME_ID';
 UPDATE STDS_spatial_extent SET bottom = 
 UPDATE STDS_spatial_extent SET bottom = 
        (SELECT min(bottom) FROM GRASS_MAP_spatial_extent WHERE GRASS_MAP_spatial_extent.id IN 
        (SELECT min(bottom) FROM GRASS_MAP_spatial_extent WHERE GRASS_MAP_spatial_extent.id IN 
     		(SELECT id FROM SPACETIME_NAME_GRASS_MAP_register)
     		(SELECT id FROM SPACETIME_NAME_GRASS_MAP_register)
-       ) WHERE id = "SPACETIME_ID";
+       ) WHERE id = 'SPACETIME_ID';
 UPDATE STDS_spatial_extent SET proj = 
 UPDATE STDS_spatial_extent SET proj = 
        (SELECT min(proj) FROM GRASS_MAP_spatial_extent WHERE GRASS_MAP_spatial_extent.id IN 
        (SELECT min(proj) FROM GRASS_MAP_spatial_extent WHERE GRASS_MAP_spatial_extent.id IN 
     		(SELECT id FROM SPACETIME_NAME_GRASS_MAP_register)
     		(SELECT id FROM SPACETIME_NAME_GRASS_MAP_register)
-       ) WHERE id = "SPACETIME_ID";
+       ) WHERE id = 'SPACETIME_ID';

+ 10 - 10
lib/temporal/update_str3ds_metadata_template.sql

@@ -11,41 +11,41 @@
 UPDATE str3ds_metadata SET min_min = 
 UPDATE str3ds_metadata SET min_min = 
        (SELECT min(min) FROM raster3d_metadata WHERE raster3d_metadata.id IN 
        (SELECT min(min) FROM raster3d_metadata WHERE raster3d_metadata.id IN 
     		(SELECT id FROM SPACETIME_NAME_raster3d_register)
     		(SELECT id FROM SPACETIME_NAME_raster3d_register)
-       ) WHERE id = "SPACETIME_ID";
+       ) WHERE id = 'SPACETIME_ID';
 UPDATE str3ds_metadata SET min_max = 
 UPDATE str3ds_metadata SET min_max = 
        (SELECT max(min) FROM raster3d_metadata WHERE raster3d_metadata.id IN 
        (SELECT max(min) FROM raster3d_metadata WHERE raster3d_metadata.id IN 
     		(SELECT id FROM SPACETIME_NAME_raster3d_register)
     		(SELECT id FROM SPACETIME_NAME_raster3d_register)
-       ) WHERE id = "SPACETIME_ID";
+       ) WHERE id = 'SPACETIME_ID';
 UPDATE str3ds_metadata SET max_min = 
 UPDATE str3ds_metadata SET max_min = 
        (SELECT min(max) FROM raster3d_metadata WHERE raster3d_metadata.id IN 
        (SELECT min(max) FROM raster3d_metadata WHERE raster3d_metadata.id IN 
     		(SELECT id FROM SPACETIME_NAME_raster3d_register)
     		(SELECT id FROM SPACETIME_NAME_raster3d_register)
-       ) WHERE id = "SPACETIME_ID";
+       ) WHERE id = 'SPACETIME_ID';
 UPDATE str3ds_metadata SET max_max = 
 UPDATE str3ds_metadata SET max_max = 
        (SELECT max(max) FROM raster3d_metadata WHERE raster3d_metadata.id IN 
        (SELECT max(max) FROM raster3d_metadata WHERE raster3d_metadata.id IN 
     		(SELECT id FROM SPACETIME_NAME_raster3d_register)
     		(SELECT id FROM SPACETIME_NAME_raster3d_register)
-       ) WHERE id = "SPACETIME_ID";
+       ) WHERE id = 'SPACETIME_ID';
 -- Update the resolution
 -- Update the resolution
 UPDATE str3ds_metadata SET nsres_min = 
 UPDATE str3ds_metadata SET nsres_min = 
        (SELECT min(nsres) FROM raster3d_metadata WHERE raster3d_metadata.id IN 
        (SELECT min(nsres) FROM raster3d_metadata WHERE raster3d_metadata.id IN 
     		(SELECT id FROM SPACETIME_NAME_raster3d_register)
     		(SELECT id FROM SPACETIME_NAME_raster3d_register)
-       ) WHERE id = "SPACETIME_ID";
+       ) WHERE id = 'SPACETIME_ID';
 UPDATE str3ds_metadata SET nsres_max = 
 UPDATE str3ds_metadata SET nsres_max = 
        (SELECT max(nsres) FROM raster3d_metadata WHERE raster3d_metadata.id IN 
        (SELECT max(nsres) FROM raster3d_metadata WHERE raster3d_metadata.id IN 
     		(SELECT id FROM SPACETIME_NAME_raster3d_register)
     		(SELECT id FROM SPACETIME_NAME_raster3d_register)
-       ) WHERE id = "SPACETIME_ID";
+       ) WHERE id = 'SPACETIME_ID';
 UPDATE str3ds_metadata SET ewres_min = 
 UPDATE str3ds_metadata SET ewres_min = 
        (SELECT min(ewres) FROM raster3d_metadata WHERE raster3d_metadata.id IN 
        (SELECT min(ewres) FROM raster3d_metadata WHERE raster3d_metadata.id IN 
     		(SELECT id FROM SPACETIME_NAME_raster3d_register)
     		(SELECT id FROM SPACETIME_NAME_raster3d_register)
-       ) WHERE id = "SPACETIME_ID";
+       ) WHERE id = 'SPACETIME_ID';
 UPDATE str3ds_metadata SET ewres_max = 
 UPDATE str3ds_metadata SET ewres_max = 
        (SELECT max(ewres) FROM raster3d_metadata WHERE raster3d_metadata.id IN 
        (SELECT max(ewres) FROM raster3d_metadata WHERE raster3d_metadata.id IN 
     		(SELECT id FROM SPACETIME_NAME_raster3d_register)
     		(SELECT id FROM SPACETIME_NAME_raster3d_register)
-       ) WHERE id = "SPACETIME_ID";
+       ) WHERE id = 'SPACETIME_ID';
 UPDATE str3ds_metadata SET tbres_min = 
 UPDATE str3ds_metadata SET tbres_min = 
        (SELECT min(tbres) FROM raster3d_metadata WHERE raster3d_metadata.id IN 
        (SELECT min(tbres) FROM raster3d_metadata WHERE raster3d_metadata.id IN 
     		(SELECT id FROM SPACETIME_NAME_raster3d_register)
     		(SELECT id FROM SPACETIME_NAME_raster3d_register)
-       ) WHERE id = "SPACETIME_ID";
+       ) WHERE id = 'SPACETIME_ID';
 UPDATE str3ds_metadata SET tbres_max = 
 UPDATE str3ds_metadata SET tbres_max = 
        (SELECT max(tbres) FROM raster3d_metadata WHERE raster3d_metadata.id IN 
        (SELECT max(tbres) FROM raster3d_metadata WHERE raster3d_metadata.id IN 
     		(SELECT id FROM SPACETIME_NAME_raster3d_register)
     		(SELECT id FROM SPACETIME_NAME_raster3d_register)
-       ) WHERE id = "SPACETIME_ID";
+       ) WHERE id = 'SPACETIME_ID';

+ 8 - 8
lib/temporal/update_strds_metadata_template.sql

@@ -11,33 +11,33 @@
 UPDATE strds_metadata SET min_min = 
 UPDATE strds_metadata SET min_min = 
        (SELECT min(min) FROM raster_metadata WHERE raster_metadata.id IN 
        (SELECT min(min) FROM raster_metadata WHERE raster_metadata.id IN 
     		(SELECT id FROM SPACETIME_NAME_raster_register)
     		(SELECT id FROM SPACETIME_NAME_raster_register)
-       ) WHERE id = "SPACETIME_ID";
+       ) WHERE id = 'SPACETIME_ID';
 UPDATE strds_metadata SET min_max = 
 UPDATE strds_metadata SET min_max = 
        (SELECT max(min) FROM raster_metadata WHERE raster_metadata.id IN 
        (SELECT max(min) FROM raster_metadata WHERE raster_metadata.id IN 
     		(SELECT id FROM SPACETIME_NAME_raster_register)
     		(SELECT id FROM SPACETIME_NAME_raster_register)
-       ) WHERE id = "SPACETIME_ID";
+       ) WHERE id = 'SPACETIME_ID';
 UPDATE strds_metadata SET max_min = 
 UPDATE strds_metadata SET max_min = 
        (SELECT min(max) FROM raster_metadata WHERE raster_metadata.id IN 
        (SELECT min(max) FROM raster_metadata WHERE raster_metadata.id IN 
     		(SELECT id FROM SPACETIME_NAME_raster_register)
     		(SELECT id FROM SPACETIME_NAME_raster_register)
-       ) WHERE id = "SPACETIME_ID";
+       ) WHERE id = 'SPACETIME_ID';
 UPDATE strds_metadata SET max_max = 
 UPDATE strds_metadata SET max_max = 
        (SELECT max(max) FROM raster_metadata WHERE raster_metadata.id IN 
        (SELECT max(max) FROM raster_metadata WHERE raster_metadata.id IN 
     		(SELECT id FROM SPACETIME_NAME_raster_register)
     		(SELECT id FROM SPACETIME_NAME_raster_register)
-       ) WHERE id = "SPACETIME_ID";
+       ) WHERE id = 'SPACETIME_ID';
 -- Update the resolution
 -- Update the resolution
 UPDATE strds_metadata SET nsres_min = 
 UPDATE strds_metadata SET nsres_min = 
        (SELECT min(nsres) FROM raster_metadata WHERE raster_metadata.id IN 
        (SELECT min(nsres) FROM raster_metadata WHERE raster_metadata.id IN 
     		(SELECT id FROM SPACETIME_NAME_raster_register)
     		(SELECT id FROM SPACETIME_NAME_raster_register)
-       ) WHERE id = "SPACETIME_ID";
+       ) WHERE id = 'SPACETIME_ID';
 UPDATE strds_metadata SET nsres_max = 
 UPDATE strds_metadata SET nsres_max = 
        (SELECT max(nsres) FROM raster_metadata WHERE raster_metadata.id IN 
        (SELECT max(nsres) FROM raster_metadata WHERE raster_metadata.id IN 
     		(SELECT id FROM SPACETIME_NAME_raster_register)
     		(SELECT id FROM SPACETIME_NAME_raster_register)
-       ) WHERE id = "SPACETIME_ID";
+       ) WHERE id = 'SPACETIME_ID';
 UPDATE strds_metadata SET ewres_min = 
 UPDATE strds_metadata SET ewres_min = 
        (SELECT min(ewres) FROM raster_metadata WHERE raster_metadata.id IN 
        (SELECT min(ewres) FROM raster_metadata WHERE raster_metadata.id IN 
     		(SELECT id FROM SPACETIME_NAME_raster_register)
     		(SELECT id FROM SPACETIME_NAME_raster_register)
-       ) WHERE id = "SPACETIME_ID";
+       ) WHERE id = 'SPACETIME_ID';
 UPDATE strds_metadata SET ewres_max = 
 UPDATE strds_metadata SET ewres_max = 
        (SELECT max(ewres) FROM raster_metadata WHERE raster_metadata.id IN 
        (SELECT max(ewres) FROM raster_metadata WHERE raster_metadata.id IN 
     		(SELECT id FROM SPACETIME_NAME_raster_register)
     		(SELECT id FROM SPACETIME_NAME_raster_register)
-       ) WHERE id = "SPACETIME_ID";
+       ) WHERE id = 'SPACETIME_ID';

+ 15 - 21
lib/temporal/vector_metadata_table.sql

@@ -5,7 +5,7 @@
 -- Author: Soeren Gebbert soerengebbert <at> googlemail <dot> com
 -- Author: Soeren Gebbert soerengebbert <at> googlemail <dot> com
 --#############################################################################
 --#############################################################################
 
 
-PRAGMA foreign_keys = ON;
+--PRAGMA foreign_keys = ON;
 
 
 -- The metadata table 
 -- The metadata table 
 
 
@@ -21,8 +21,10 @@ CREATE TABLE  vector_metadata (
 CREATE VIEW vector_view_abs_time AS SELECT 
 CREATE VIEW vector_view_abs_time AS SELECT 
             A1.id, A1.mapset,
             A1.id, A1.mapset,
             A1.name, A1.temporal_type,
             A1.name, A1.temporal_type,
-            A1.creation_time, A1.modification_time,
-            A1.revision, A1.creator,
+            A1.creation_time, 
+-- Uncommented due to performance issues
+--            A1.modification_time, A1.revision, 
+            A1.creator, 
 	    A2.start_time, A2.end_time, A2.timezone,
 	    A2.start_time, A2.end_time, A2.timezone,
             A3.north, A3.south, A3.east, A3.west, A3.proj,
             A3.north, A3.south, A3.east, A3.west, A3.proj,
 	    A4.stvds_register
 	    A4.stvds_register
@@ -33,8 +35,10 @@ CREATE VIEW vector_view_abs_time AS SELECT
 CREATE VIEW vector_view_rel_time AS SELECT 
 CREATE VIEW vector_view_rel_time AS SELECT 
             A1.id, A1.mapset,
             A1.id, A1.mapset,
             A1.name, A1.temporal_type,
             A1.name, A1.temporal_type,
-            A1.creation_time, A1.modification_time,
-            A1.revision, A1.creator,
+            A1.creation_time, 
+-- Uncommented due to performance issues
+--            A1.modification_time, A1.revision, 
+            A1.creator, 
 	    A2.start_time, A2.end_time,
 	    A2.start_time, A2.end_time,
             A3.north, A3.south, A3.east, A3.west, A3.proj,
             A3.north, A3.south, A3.east, A3.west, A3.proj,
 	    A4.stvds_register
 	    A4.stvds_register
@@ -43,20 +47,9 @@ CREATE VIEW vector_view_rel_time AS SELECT
 	    WHERE A1.id = A2.id AND A1.id = A3.id AND A1.id = A4.id;
 	    WHERE A1.id = A2.id AND A1.id = A3.id AND A1.id = A4.id;
 
 
 -- Create a trigger to update the modification time and revision number in case the metadata or timestanps have been updated 
 -- Create a trigger to update the modification time and revision number in case the metadata or timestanps have been updated 
-
-CREATE TRIGGER update_vector_metadata AFTER UPDATE ON vector_metadata 
-  BEGIN
-    UPDATE vector_base SET modification_time = datetime("NOW") WHERE id = old.id;
-    UPDATE vector_base SET revision = (revision + 1) WHERE id = old.id;
-  END;
-
-
-CREATE TRIGGER delete_vector_base AFTER DELETE ON vector_base
-  BEGIN
-    DELETE FROM vector_absolute_time WHERE id = old.id;
-    DELETE FROM vector_relative_time WHERE id = old.id;
-    DELETE FROM vector_spatial_extent WHERE id = old.id;
-    DELETE FROM vector_metadata WHERE id = old.id;
-  END;
-
+-- Uncommented due to performance issues
+--CREATE TRIGGER update_vector_metadata AFTER UPDATE ON vector_metadata 
+--  BEGIN
+--    UPDATE vector_base SET modification_time = datetime("NOW") WHERE id = old.id;
+--    UPDATE vector_base SET revision = (revision + 1) WHERE id = old.id;
+--  END;

+ 0 - 3
temporal/t.list/t.list.py

@@ -116,9 +116,6 @@ def main():
     dbif = tgis.sql_database_interface()
     dbif = tgis.sql_database_interface()
     dbif.connect()
     dbif.connect()
 
 
-    # Insert content from db
-    sp.select(dbif)
-
     # Create the sql selection statement
     # Create the sql selection statement
     # Table name
     # Table name
     if temporaltype == "absolute":
     if temporaltype == "absolute":

+ 1 - 1
temporal/tr.extract/test.tr.extract.sh

@@ -20,7 +20,7 @@ tr.register -i dataset=precip_abs1 maps=prec_1,prec_2,prec_3,prec_4,prec_5,prec_
 # The first @test
 # The first @test
 # We create the space time raster datasets and register the raster maps with absolute time interval
 # We create the space time raster datasets and register the raster maps with absolute time interval
 
 
-tr.extract --o input=precip_abs1 output=precip_abs2 where='start_time > "2001-06-01"' expression=" if(precip_abs1 > 400, precip_abs1, null())" base=new_prec
+tr.extract --o input=precip_abs1 output=precip_abs2 where="start_time > '2001-06-01'" expression=" if(precip_abs1 > 400, precip_abs1, null())" base=new_prec
 
 
 t.info type=strds dataset=precip_abs2
 t.info type=strds dataset=precip_abs2
 
 

+ 13 - 4
temporal/tr.extract/tr.extract.py

@@ -91,8 +91,8 @@ def main():
     if sp.is_in_db() == False:
     if sp.is_in_db() == False:
         grass.fatal(_("Dataset <%s> not found in temporal database") % (id))
         grass.fatal(_("Dataset <%s> not found in temporal database") % (id))
 
 
-    if expression and base == None:
-        grass.fatal(_("A raster map base name must be provided"))
+    if expression and not base:
+        grass.fatal(_("Please specify base="))
 
 
     dbif = tgis.sql_database_interface()
     dbif = tgis.sql_database_interface()
     dbif.connect()
     dbif.connect()
@@ -109,6 +109,7 @@ def main():
     if new_sp.is_in_db():
     if new_sp.is_in_db():
         if grass.overwrite() == True:
         if grass.overwrite() == True:
             new_sp.delete(dbif)
             new_sp.delete(dbif)
+	    new_sp = tgis.space_time_raster_dataset(out_id)
         else:
         else:
             grass.fatal(_("Space time raster dataset <%s> is already in database, use overwrite flag to overwrite") % out_id)
             grass.fatal(_("Space time raster dataset <%s> is already in database, use overwrite flag to overwrite") % out_id)
 
 
@@ -119,9 +120,15 @@ def main():
     rows = sp.get_registered_maps(dbif, where, "start_time")
     rows = sp.get_registered_maps(dbif, where, "start_time")
 
 
     if rows:
     if rows:
+	num_rows = len(rows)
+	
+	grass.percent(0, num_rows, 1)
+	
         count = 0
         count = 0
         for row in rows:
         for row in rows:
             count += 1
             count += 1
+	    
+	    grass.percent(count, num_rows, 1)
 
 
             old_map = sp.get_new_map_instance(row["id"])
             old_map = sp.get_new_map_instance(row["id"])
             old_map.select(dbif)
             old_map.select(dbif)
@@ -150,9 +157,9 @@ def main():
                 grass.verbose(_("Apply r.mapcalc expression: \"%s\"") % expr)
                 grass.verbose(_("Apply r.mapcalc expression: \"%s\"") % expr)
 
 
                 if grass.overwrite() == True:
                 if grass.overwrite() == True:
-                    ret = grass.run_command("r.mapcalc", expression=expr, overwrite=True)
+                    ret = grass.run_command("r.mapcalc", expression=expr, overwrite=True, quiet=True)
                 else:
                 else:
-                    ret = grass.run_command("r.mapcalc", expression=expr, overwrite=False)
+                    ret = grass.run_command("r.mapcalc", expression=expr, overwrite=False, quiet=True)
 
 
                 if ret != 0:
                 if ret != 0:
                     grass.error(_("Error while r.mapcalc computation, continue with next map"))
                     grass.error(_("Error while r.mapcalc computation, continue with next map"))
@@ -183,6 +190,8 @@ def main():
 
 
         # Update the spatio-temporal extent and the raster metadata table entries
         # Update the spatio-temporal extent and the raster metadata table entries
         new_sp.update_from_registered_maps(dbif)
         new_sp.update_from_registered_maps(dbif)
+	
+	grass.percent(num_rows, num_rows, 1)
         
         
     dbif.close()
     dbif.close()
 
 

+ 6 - 3
temporal/tr.register/register_ECAD_maps_temp_mean_1995_2010.py

@@ -6,11 +6,14 @@ import grass.script as grass
 # Create the space time raster dataset with t.create
 # Create the space time raster dataset with t.create
 dataset = "temp_mean_1995_2010_daily"
 dataset = "temp_mean_1995_2010_daily"
 
 
-grass.run_command("t.create", type="strds", dataset=dataset, granularity="1 days", semantic="continuous", temporal="absolute", title="European mean temperature 1995-2010", description="The european daily mean temperature 1995 - 2010 from ECA&D ")
+grass.run_command("t.create", type="strds", dataset=dataset, granularity="1 days", \
+                  semantic="continuous", temporal="absolute", \
+		  title="European mean temperature 1995-2010", \
+		  description="The european daily mean temperature 1995 - 2010 from ECA&D ", \
+		  overwrite=True)
 
 
 name = "temp_mean."
 name = "temp_mean."
 maps=""
 maps=""
-#for i in range(6025):
 for i in range(5844):
 for i in range(5844):
     inc = i + 1
     inc = i + 1
     map_name = name + str(inc)
     map_name = name + str(inc)
@@ -20,4 +23,4 @@ for i in range(5844):
         maps += "," + map_name
         maps += "," + map_name
     
     
 # Register all maps at once
 # Register all maps at once
-grass.run_command("tr.register", flags="i", dataset=dataset, maps=maps, start="1995-01-01", increment="1 days")
+grass.run_command("tr.register", flags="i", dataset=dataset, maps=maps, start="1995-01-01", increment="1 days", overwrite=True)

+ 1 - 1
temporal/tr.series/test.tr.series.sh

@@ -24,7 +24,7 @@ t.create --v --o type=strds temporaltype=absolute dataset=precip_abs gran="1 mon
 
 
 tr.register --v dataset=precip_abs maps=prec_1,prec_2,prec_3,prec_4,prec_5,prec_6 start="2001-01-01" increment="1 months"
 tr.register --v dataset=precip_abs maps=prec_1,prec_2,prec_3,prec_4,prec_5,prec_6 start="2001-01-01" increment="1 months"
 
 
-tr.series --o input=precip_abs method=average output=prec_average where='start_time > "2001-03-01"'
+tr.series --o input=precip_abs method=average output=prec_average where="start_time > '2001-03-01'"
 tr.series --o -t input=precip_abs method=maximum output=prec_max sort=start_time
 tr.series --o -t input=precip_abs method=maximum output=prec_max sort=start_time
 tr.series --o -t input=precip_abs method=sum output=prec_sum
 tr.series --o -t input=precip_abs method=sum output=prec_sum
 
 

+ 2 - 2
temporal/tr.series/tr.series.py

@@ -110,9 +110,9 @@ def main():
         file.close()
         file.close()
 
 
         if grass.overwrite() == True:
         if grass.overwrite() == True:
-            grass.run_command("r.series", file=filename, output=output, overwrite=True, method=method)
+            grass.run_command("r.series", flags="z", file=filename, output=output, overwrite=True, method=method)
         else:
         else:
-            grass.run_command("r.series", file=filename, output=output, overwrite=False, method=method)
+            grass.run_command("r.series", flags="z", file=filename, output=output, overwrite=False, method=method)
 
 
     if add_time:
     if add_time:
 	# Create the time range for the output map
 	# Create the time range for the output map