From 226da79d7763a17d4a2bcd4d9b699e14c9103b9c Mon Sep 17 00:00:00 2001 From: icewing Date: Thu, 20 Mar 2008 15:49:23 +0000 Subject: Marcus Povey * Metadata now using metastrings * Entities will now throw an exception when creation is attempted with no owner git-svn-id: https://code.elgg.org/elgg/trunk@260 36083f99-b078-4883-b0ff-0f9b5a30f544 --- engine/lib/entities.php | 1 + engine/lib/metadata.php | 24 +++++++++++++++--------- engine/schema/mysql.sql | 4 ++-- 3 files changed, 18 insertions(+), 11 deletions(-) (limited to 'engine') diff --git a/engine/lib/entities.php b/engine/lib/entities.php index 745b46ee6..e457988ec 100644 --- a/engine/lib/entities.php +++ b/engine/lib/entities.php @@ -388,6 +388,7 @@ $time = time(); if ($type=="") throw new InvalidParameterException("Entity type must be set."); + if ($owner_guid==0) throw new InvalidParameterException("owner_guid must not be 0"); return insert_data("INSERT into {$CONFIG->dbprefix}entities (type, subtype, owner_guid, access_id, time_created, time_updated) values ('$type',$subtype, $owner_guid, $access_id, $time, $time)"); } diff --git a/engine/lib/metadata.php b/engine/lib/metadata.php index 1111fb551..4d29bb7bc 100644 --- a/engine/lib/metadata.php +++ b/engine/lib/metadata.php @@ -156,7 +156,7 @@ $id = (int)$id; $access = get_access_list(); - return row_to_elggmetadata(get_data_row("SELECT m.*, v.string as value from {$CONFIG->dbprefix}metadata m JOIN {$CONFIG->dbprefix}metastrings v on m.value_id = v.id where m.id=$id and (m.access_id in {$access} or (m.access_id = 0 and m.owner_guid = {$_SESSION['id']}))")); + return row_to_elggmetadata(get_data_row("SELECT m.*, n.string as name, v.string as value from {$CONFIG->dbprefix}metadata m JOIN {$CONFIG->dbprefix}metastrings v on m.value_id = v.id JOIN {$CONFIG->dbprefix}metastrings n on m.name_id = n.id where m.id=$id and (m.access_id in {$access} or (m.access_id = 0 and m.owner_guid = {$_SESSION['id']}))")); } /** @@ -186,7 +186,7 @@ $id = false; - $existing = get_data_row("SELECT * from {$CONFIG->dbprefix}metadata WHERE entity_guid = $entity_guid and name='$name' limit 1"); + $existing = get_data_row("SELECT * from {$CONFIG->dbprefix}metadata WHERE entity_guid = $entity_guid and name_id=" . add_metastring($name) . " limit 1"); if ($existing) { $id = $existing->id; @@ -196,12 +196,15 @@ } else { - // Add the metastring + // Add the metastrings $value = add_metastring($value); if (!$value) return false; + $name = add_metastring($name); + if (!$name) return false; + // If ok then add it - $id = insert_data("INSERT into {$CONFIG->dbprefix}metadata (entity_guid, name, value_id, value_type, owner_guid, time_created, access_id) VALUES ($entity_guid, '$name','$value','$value_type', $owner_guid, $time, $access_id)"); + $id = insert_data("INSERT into {$CONFIG->dbprefix}metadata (entity_guid, name_id, value_id, value_type, owner_guid, time_created, access_id) VALUES ($entity_guid, '$name','$value','$value_type', $owner_guid, $time, $access_id)"); } return $id; @@ -238,8 +241,11 @@ $value = add_metastring($value); if (!$value) return false; + $name = add_metastring($name); + if (!$name) return false; + // If ok then add it - return update_data("UPDATE {$CONFIG->dbprefix}metadata set value_id='$value', value_type='$value_type', access_id=$access_id, owner_guid=$owner_guid where id=$id and name='$name' and (access_id in {$access} or (access_id = 0 and owner_guid = {$_SESSION['id']}))"); + return update_data("UPDATE {$CONFIG->dbprefix}metadata set value_id='$value', value_type='$value_type', access_id=$access_id, owner_guid=$owner_guid where id=$id and name_id='$name' and (access_id in {$access} or (access_id = 0 and owner_guid = {$_SESSION['id']}))"); } @@ -268,11 +274,11 @@ { global $CONFIG; - $meta_name = sanitise_string($meta_name); + $meta_name = get_metastring_id($meta_name); $entity_guid = (int)$entity_guid; $access = get_access_list(); - return row_to_elggmetadata(get_data_row("SELECT m.*, v.string as value from {$CONFIG->dbprefix}metadata m JOIN {$CONFIG->dbprefix}metastrings v on m.value_id = v.id where m.entity_guid=$entity_guid and m.name='$meta_name' and (m.access_id in {$access} or (m.access_id = 0 and m.owner_guid = {$_SESSION['id']}))")); + return row_to_elggmetadata(get_data_row("SELECT m.*, n.string as name, v.string as value from {$CONFIG->dbprefix}metadata m JOIN {$CONFIG->dbprefix}metastrings v on m.value_id = v.id JOIN {$CONFIG->dbprefix}metastrings n on m.name_id = n.id where m.entity_guid=$entity_guid and m.name_id='$meta_name' and (m.access_id in {$access} or (m.access_id = 0 and m.owner_guid = {$_SESSION['id']}))")); } /** @@ -290,7 +296,7 @@ { global $CONFIG; - $meta_name = sanitise_string($meta_name); + $meta_name = get_metastring_id($meta_name); $meta_value = get_metastring_id($meta_value); $entity_type = sanitise_string($entity_type); @@ -308,7 +314,7 @@ if ($entity_subtype) $where[] = "e.subtype=$entity_subtype"; if ($meta_name!="") - $where[] = "m.name='$meta_name'"; + $where[] = "m.name_id='$meta_name'"; if ($meta_value!="") $where[] = "m.value_id='$meta_value'"; diff --git a/engine/schema/mysql.sql b/engine/schema/mysql.sql index 78fb3e7be..c51b2b6a7 100644 --- a/engine/schema/mysql.sql +++ b/engine/schema/mysql.sql @@ -142,7 +142,7 @@ CREATE TABLE `prefix_annotations` ( `entity_guid` bigint(20) unsigned NOT NULL, - `name` varchar(255) NOT NULL, + `name` int(11) NOT NULL, `value_id` int(11) NOT NULL, `value_type` enum ('integer','tag','text','file') NOT NULL, @@ -160,7 +160,7 @@ CREATE TABLE `prefix_metadata` ( `entity_guid` bigint(20) unsigned NOT NULL, - `name` varchar(255) NOT NULL, + `name_id` int(11) NOT NULL, `value_id` int(11) NOT NULL, `value_type` enum ('integer','tag','text','file') NOT NULL, -- cgit v1.2.3