[tracker/localtime-for-master: 1/5] libtracker-data: Add localDate and localTime columns



commit 46d3027ed44cadc393510ae85df5d504b160d45c
Author: Jürg Billeter <j bitron ch>
Date:   Mon Feb 1 15:27:18 2010 +0100

    libtracker-data: Add localDate and localTime columns

 src/libtracker-data/tracker-data-manager.c |   58 ++++++++++++++++++----------
 1 files changed, 38 insertions(+), 20 deletions(-)
---
diff --git a/src/libtracker-data/tracker-data-manager.c b/src/libtracker-data/tracker-data-manager.c
index 39a70c5..c65aca6 100644
--- a/src/libtracker-data/tracker-data-manager.c
+++ b/src/libtracker-data/tracker-data-manager.c
@@ -825,22 +825,38 @@ create_decomposed_metadata_property_table (TrackerDBInterface *iface,
 	}
 
 	if (transient || tracker_property_get_multiple_values (property)) {
+		GString *sql;
+
+		sql = g_string_new ("");
+		g_string_append_printf (sql, "CREATE %sTABLE \"%s_%s\" ("
+		                             "ID INTEGER NOT NULL, "
+		                             "\"%s\" %s NOT NULL, "
+		                             "\"%s:graph\" INTEGER",
+		                             transient ? "TEMPORARY " : "",
+		                             service_name,
+		                             field_name,
+		                             field_name,
+		                             sql_type,
+		                             field_name);
+
+		if (tracker_property_get_data_type (property) == TRACKER_PROPERTY_TYPE_DATETIME) {
+			/* xsd:dateTime is stored in three columns:
+			 * universal time, local date, local time of day */
+			g_string_append_printf (sql,
+			                        ", \"%s:localDate\" INTEGER NOT NULL"
+			                        ", \"%s:localTime\" INTEGER NOT NULL",
+			                        tracker_property_get_name (property),
+			                        tracker_property_get_name (property));
+		}
+
 		/* multiple values */
 		if (tracker_property_get_indexed (property)) {
 			/* use different UNIQUE index for properties whose
 			 * value should be indexed to minimize index size */
 			tracker_db_interface_execute_query (iface, NULL,
-			                                    "CREATE %sTABLE \"%s_%s\" ("
-			                                    "ID INTEGER NOT NULL, "
-			                                    "\"%s\" %s NOT NULL, "
-			                                    "\"%s:graph\" INTEGER, "
+			                                    "%s, "
 			                                    "UNIQUE (\"%s\", ID))",
-			                                    transient ? "TEMPORARY " : "",
-			                                    service_name,
-			                                    field_name,
-			                                    field_name,
-			                                    sql_type,
-			                                    field_name,
+			                                    sql->str,
 			                                    field_name);
 
 			tracker_db_interface_execute_query (iface, NULL,
@@ -853,19 +869,13 @@ create_decomposed_metadata_property_table (TrackerDBInterface *iface,
 			/* we still have to include the property value in
 			 * the unique index for proper constraints */
 			tracker_db_interface_execute_query (iface, NULL,
-			                                    "CREATE %sTABLE \"%s_%s\" ("
-			                                    "ID INTEGER NOT NULL, "
-			                                    "\"%s\" %s NOT NULL, "
-			                                    "\"%s:graph\" INTEGER, "
+			                                    "%s, "
 			                                    "UNIQUE (ID, \"%s\"))",
-			                                    transient ? "TEMPORARY " : "",
-			                                    service_name,
-			                                    field_name,
-			                                    field_name,
-			                                    sql_type,
-			                                    field_name,
+			                                    sql->str,
 			                                    field_name);
 		}
+
+		g_string_free (sql, TRUE);
 	} else if (sql_type_for_single_value) {
 		*sql_type_for_single_value = sql_type;
 	}
@@ -925,6 +935,14 @@ create_decomposed_metadata_tables (TrackerDBInterface *iface,
 
 				g_string_append_printf (sql, ", \"%s:graph\" INTEGER",
 				                        tracker_property_get_name (property));
+
+				if (tracker_property_get_data_type (property) == TRACKER_PROPERTY_TYPE_DATETIME) {
+					/* xsd:dateTime is stored in three columns:
+					 * universal time, local date, local time of day */
+					g_string_append_printf (sql, ", \"%s:localDate\" INTEGER, \"%s:localTime\" INTEGER",
+						                tracker_property_get_name (property),
+						                tracker_property_get_name (property));
+				}
 			}
 		}
 	}



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]