From 1d4ce37ebf67856a9f63588bee43b6b87cac88a5 Mon Sep 17 00:00:00 2001 From: Jocelyn Fiat Date: Mon, 23 Nov 2015 18:03:55 +0100 Subject: [PATCH] Added CMS_STORAGE.as_sql_storage: detachable CMS_STORAGE_SQL_I to ease development based on SQL database. --- modules/blog/cms_blog_api.e | 2 +- modules/blog/cms_blog_module.e | 2 +- modules/node/cms_node_module.e | 6 +++--- modules/oauth20/cms_oauth_20_module.e | 6 +++--- modules/openid/cms_openid_module.e | 4 ++-- modules/taxonomy/cms_taxonomy_api.e | 2 +- modules/taxonomy/site/scripts/install.sql | 13 +++++++++++++ modules/taxonomy/site/scripts/uninstall.sql | 2 ++ src/persistence/cms_storage.e | 13 +++++++++++++ 9 files changed, 39 insertions(+), 11 deletions(-) create mode 100644 modules/taxonomy/site/scripts/install.sql create mode 100644 modules/taxonomy/site/scripts/uninstall.sql diff --git a/modules/blog/cms_blog_api.e b/modules/blog/cms_blog_api.e index 8c63dcd..695289d 100644 --- a/modules/blog/cms_blog_api.e +++ b/modules/blog/cms_blog_api.e @@ -36,7 +36,7 @@ feature {NONE} -- Initialization Precursor -- Create the node storage for type blog - if attached {CMS_STORAGE_SQL_I} storage as l_storage_sql then + if attached storage.as_sql_storage as l_storage_sql then create {CMS_BLOG_STORAGE_SQL} blog_storage.make (l_storage_sql) else create {CMS_BLOG_STORAGE_NULL} blog_storage.make diff --git a/modules/blog/cms_blog_module.e b/modules/blog/cms_blog_module.e index 0daf7cc..ec38c1e 100644 --- a/modules/blog/cms_blog_module.e +++ b/modules/blog/cms_blog_module.e @@ -83,7 +83,7 @@ feature {CMS_API} -- Module management sql: STRING do -- Schema - if attached {CMS_STORAGE_SQL_I} api.storage as l_sql_storage then + if attached api.storage.as_sql_storage as l_sql_storage then if not l_sql_storage.sql_table_exists ("blog_post_nodes") then sql := "[ CREATE TABLE blog_post_nodes( diff --git a/modules/node/cms_node_module.e b/modules/node/cms_node_module.e index b6fd250..5da64a3 100644 --- a/modules/node/cms_node_module.e +++ b/modules/node/cms_node_module.e @@ -63,7 +63,7 @@ feature {CMS_API} -- Module Initialization Precursor (a_api) -- Storage initialization - if attached {CMS_STORAGE_SQL_I} a_api.storage as l_storage_sql then + if attached a_api.storage.as_sql_storage as l_storage_sql then create {CMS_NODE_STORAGE_SQL} l_node_storage.make (l_storage_sql) else -- FIXME: in case of NULL storage, should Current be disabled? @@ -111,7 +111,7 @@ feature {CMS_API} -- Module management -- Is Current module installed? do Result := Precursor (a_api) - if Result and attached {CMS_STORAGE_SQL_I} a_api.storage as l_sql_storage then + if Result and attached a_api.storage.as_sql_storage as l_sql_storage then Result := l_sql_storage.sql_table_exists ("nodes") and l_sql_storage.sql_table_exists ("page_nodes") end @@ -120,7 +120,7 @@ feature {CMS_API} -- Module management install (a_api: CMS_API) do -- Schema - if attached {CMS_STORAGE_SQL_I} a_api.storage as l_sql_storage then + if attached a_api.storage.as_sql_storage as l_sql_storage then l_sql_storage.sql_execute_file_script (a_api.module_resource_location (Current, (create {PATH}.make_from_string ("scripts")).extended (name).appended_with_extension ("sql")), Void) end Precursor {CMS_MODULE}(a_api) diff --git a/modules/oauth20/cms_oauth_20_module.e b/modules/oauth20/cms_oauth_20_module.e index 321f451..0474636 100644 --- a/modules/oauth20/cms_oauth_20_module.e +++ b/modules/oauth20/cms_oauth_20_module.e @@ -72,7 +72,7 @@ feature {CMS_API} -- Module Initialization Precursor (a_api) -- Storage initialization - if attached {CMS_STORAGE_SQL_I} a_api.storage as l_storage_sql then + if attached a_api.storage.as_sql_storage as l_storage_sql then create {CMS_OAUTH_20_STORAGE_SQL} l_user_auth_storage.make (l_storage_sql) else -- FIXME: in case of NULL storage, should Current be disabled? @@ -93,7 +93,7 @@ feature {CMS_API} -- Module management l_consumers: LIST [STRING] do -- Schema - if attached {CMS_STORAGE_SQL_I} api.storage as l_sql_storage then + if attached api.storage.as_sql_storage as l_sql_storage then if not l_sql_storage.sql_table_exists ("oauth2_consumers") then --| Schema l_sql_storage.sql_execute_file_script (api.module_resource_location (Current, (create {PATH}.make_from_string ("scripts")).extended ("oauth2_consumers.sql")), Void) @@ -112,7 +112,7 @@ feature {CMS_API} -- Module management else from l_sql_storage.sql_start - create {ARRAYED_LIST[STRING]} l_consumers.make (2) + create {ARRAYED_LIST [STRING]} l_consumers.make (2) until l_sql_storage.sql_after loop diff --git a/modules/openid/cms_openid_module.e b/modules/openid/cms_openid_module.e index 988085b..f098c50 100644 --- a/modules/openid/cms_openid_module.e +++ b/modules/openid/cms_openid_module.e @@ -74,7 +74,7 @@ feature {CMS_API} -- Module Initialization Precursor (a_api) -- Storage initialization - if attached {CMS_STORAGE_SQL_I} a_api.storage as l_storage_sql then + if attached a_api.storage.as_sql_storage as l_storage_sql then create {CMS_OPENID_STORAGE_SQL} l_openid_storage.make (l_storage_sql) else -- FIXME: in case of NULL storage, should Current be disabled? @@ -93,7 +93,7 @@ feature {CMS_API} -- Module management install (api: CMS_API) do -- Schema - if attached {CMS_STORAGE_SQL_I} api.storage as l_sql_storage then + if attached api.storage.as_sql_storage as l_sql_storage then if not l_sql_storage.sql_table_exists ("openid_consumers") then --| Schema l_sql_storage.sql_execute_file_script (api.module_resource_location (Current, (create {PATH}.make_from_string ("scripts")).extended ("openid_consumers.sql")), Void) diff --git a/modules/taxonomy/cms_taxonomy_api.e b/modules/taxonomy/cms_taxonomy_api.e index 578f589..76f571e 100644 --- a/modules/taxonomy/cms_taxonomy_api.e +++ b/modules/taxonomy/cms_taxonomy_api.e @@ -27,7 +27,7 @@ feature {NONE} -- Initialization Precursor -- Create the node storage for type blog - if attached {CMS_STORAGE_SQL_I} storage as l_storage_sql then + if attached storage.as_sql_storage as l_storage_sql then create {CMS_TAXONOMY_STORAGE_SQL} taxonomy_storage.make (l_storage_sql) else create {CMS_TAXONOMY_STORAGE_NULL} taxonomy_storage.make diff --git a/modules/taxonomy/site/scripts/install.sql b/modules/taxonomy/site/scripts/install.sql new file mode 100644 index 0000000..54b2130 --- /dev/null +++ b/modules/taxonomy/site/scripts/install.sql @@ -0,0 +1,13 @@ +CREATE TABLE taxonomy_term ( + `tid` INTEGER NOT NULL PRIMARY KEY AUTO_INCREMENT UNIQUE, + `text` VARCHAR(255) NOT NULL, + `weight` INTEGER, + `description` TEXT, + `langcode` VARCHAR(12) +); + +CREATE TABLE taxonomy_hierarchy ( + `tid` INTEGER NOT NULL, + `parent` INTEGER, + CONSTRAINT PK_tid_parent PRIMARY KEY (tid,parent) +); diff --git a/modules/taxonomy/site/scripts/uninstall.sql b/modules/taxonomy/site/scripts/uninstall.sql new file mode 100644 index 0000000..1fc3a53 --- /dev/null +++ b/modules/taxonomy/site/scripts/uninstall.sql @@ -0,0 +1,2 @@ +DROP TABLE IF EXISTS taxonomy_term; +DROP TABLE IF EXISTS taxonomy_hierarchy; diff --git a/src/persistence/cms_storage.e b/src/persistence/cms_storage.e index c45d9c1..f49ccbd 100644 --- a/src/persistence/cms_storage.e +++ b/src/persistence/cms_storage.e @@ -27,6 +27,16 @@ feature -- Access api: detachable CMS_API assign set_api -- Associated CMS API. +feature -- Conversion + + as_sql_storage: detachable CMS_STORAGE_SQL_I + -- SQL based variant of `Current' if possible. + do + if attached {CMS_STORAGE_SQL_I} Current as st then + Result := st + end + end + feature -- Status report is_available: BOOLEAN @@ -59,4 +69,7 @@ feature -- Element change api := a_api end +note + copyright: "2011-2015, Jocelyn Fiat, Javier Velilla, Eiffel Software and others" + license: "Eiffel Forum License v2 (see http://www.eiffel.com/licensing/forum.txt)" end