From 5f4eb2cf10cbd421163cb54b4e180700b32e5177 Mon Sep 17 00:00:00 2001 From: Jocelyn Fiat Date: Tue, 8 Sep 2015 20:44:00 +0200 Subject: [PATCH] Correct implementation of node extension save operation. --- modules/blog/cms_node_storage_sql_blog_extension.e | 4 +++- .../persistence/cms_node_storage_sql_page_extension.e | 10 ++++++---- 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/modules/blog/cms_node_storage_sql_blog_extension.e b/modules/blog/cms_node_storage_sql_blog_extension.e index e2272b8..1793bd9 100644 --- a/modules/blog/cms_node_storage_sql_blog_extension.e +++ b/modules/blog/cms_node_storage_sql_blog_extension.e @@ -136,11 +136,13 @@ feature {NONE} -- Implementation check unique_data: n = 0 end end end + ensure + accepted_revision: Result /= Void implies Result.revision <= a_node.revision end feature -- SQL - sql_select_node_data: STRING = "SELECT nid, revision, tags FROM blog_post_nodes WHERE nid =:nid AND revision<=:revision ORDER BY revision DESC LIMIT 1;" + sql_select_node_data: STRING = "SELECT nid, revision, tags FROM blog_post_nodes WHERE nid=:nid AND revision<=:revision ORDER BY revision DESC LIMIT 1;" sql_insert_node_data: STRING = "INSERT INTO blog_post_nodes (nid, revision, tags) VALUES (:nid, :revision, :tags);" sql_update_node_data: STRING = "UPDATE blog_post_nodes SET nid=:nid, revision=:revision, tags=:tags WHERE nid=:nid AND revision=:revision;" diff --git a/modules/node/persistence/cms_node_storage_sql_page_extension.e b/modules/node/persistence/cms_node_storage_sql_page_extension.e index 03f3477..bc98357 100644 --- a/modules/node/persistence/cms_node_storage_sql_page_extension.e +++ b/modules/node/persistence/cms_node_storage_sql_page_extension.e @@ -55,7 +55,7 @@ feature -- Persistence error_handler.reset -- Check existing record, if any. if attached node_data (a_node) as d then - l_update := True + l_update := a_node.revision = d.revision l_previous_parent_id := d.parent_id end if not has_error then @@ -114,7 +114,7 @@ feature -- Persistence feature {NONE} -- Implementation - node_data (a_node: CMS_NODE): detachable TUPLE [parent_id: INTEGER_64] + node_data (a_node: CMS_NODE): detachable TUPLE [revision: INTEGER_64; parent_id: INTEGER_64] -- Node extension data for node `a_node' as tuple. local l_parameters: STRING_TABLE [ANY] @@ -129,16 +129,18 @@ feature {NONE} -- Implementation n := sql_rows_count if n = 1 then -- nid, revision, parent - Result := [sql_read_integer_64 (3)] + Result := [sql_read_integer_64 (2), sql_read_integer_64 (3)] else check unique_data: n = 0 end end end + ensure + accepted_revision: Result /= Void implies Result.revision <= a_node.revision end feature -- SQL - sql_select_node_data: STRING = "SELECT nid, revision, parent FROM page_nodes WHERE nid =:nid AND revision =:revision ORDER BY revision DESC LIMIT 1;" + sql_select_node_data: STRING = "SELECT nid, revision, parent FROM page_nodes WHERE nid=:nid AND revision<=:revision ORDER BY revision DESC LIMIT 1;" sql_insert_node_data: STRING = "INSERT INTO page_nodes (nid, revision, parent) VALUES (:nid, :revision, :parent);" sql_update_node_data: STRING = "UPDATE page_nodes SET nid=:nid, revision=:revision, parent=:parent WHERE nid=:nid AND revision=:revision;"