Updated Peristance layer to use the new error_hanler based on EWF error library.

Remove once use from DATABASE_ERROR_HANDLER.
Initial support transaction handling.
This commit is contained in:
jvelilla
2014-10-17 08:53:02 -03:00
parent 3c73202a0d
commit 5cb26f0b24
18 changed files with 254 additions and 674 deletions

View File

@@ -25,8 +25,7 @@ feature {NONE} -- Initialization
log.write_information (generator+".make_with_database is database connected? "+ a_connection.is_connected.out )
create node_provider.make (a_connection)
create user_provider.make (a_connection)
post_node_provider_execution
post_user_provider_execution
create error_handler.make
end
@@ -36,7 +35,6 @@ feature -- Access: user
-- Has any user?
do
Result := user_provider.has_user
post_user_provider_execution
end
all_users: LIST [CMS_USER]
@@ -48,19 +46,19 @@ feature -- Access: user
user_by_id (a_id: like {CMS_USER}.id): detachable CMS_USER
do
Result := user_provider.user (a_id)
post_user_provider_execution
end
user_by_name (a_name: like {CMS_USER}.name): detachable CMS_USER
do
Result := user_provider.user_by_name (a_name)
post_user_provider_execution
end
user_by_email (a_email: like {CMS_USER}.email): detachable CMS_USER
do
Result := user_provider.user_by_email (a_email)
post_user_provider_execution
end
is_valid_credential (l_auth_login, l_auth_password: READABLE_STRING_32): BOOLEAN
@@ -82,7 +80,7 @@ feature -- Access: user
log.write_information (generator + ".login_valid User:" + l_auth_login + "does not exist" )
end
end
post_user_provider_execution
end
feature -- User Nodes
@@ -135,7 +133,6 @@ feature -- Change: user
user_provider.new_user (a_user.name, l_password, l_email)
connection.commit
else
set_last_error ("User or Password not attached", generator + ".save_user")
end
end
@@ -148,7 +145,7 @@ feature -- Access: node
across node_provider.nodes as c loop
Result.force (c.item)
end
post_node_provider_execution
end
recent_nodes (a_lower: INTEGER; a_count: INTEGER): LIST [CMS_NODE]
@@ -158,21 +155,21 @@ feature -- Access: node
across node_provider.recent_nodes (a_lower,a_count) as c loop
Result.force (c.item)
end
post_node_provider_execution
end
node (a_id: INTEGER_64): detachable CMS_NODE
-- <Precursor>
do
Result := node_provider.node (a_id)
post_node_provider_execution
end
node_author (a_id: like {CMS_NODE}.id): detachable CMS_USER
-- <Precursor>
do
Result := node_provider.node_author (a_id)
post_node_provider_execution
end
node_collaborators (a_id: like {CMS_NODE}.id): LIST [CMS_USER]
@@ -188,21 +185,21 @@ feature -- Node
-- <Precursor>
do
node_provider.new_node (a_node)
post_node_provider_execution
end
delete_node (a_id: INTEGER_64)
do
node_provider.delete_from_user_nodes(a_id)
node_provider.delete_node (a_id)
post_node_provider_execution
end
update_node (a_id: like {CMS_USER}.id; a_node: CMS_NODE)
-- <Precursor>
do
node_provider.update_node (a_id, a_node)
post_node_provider_execution
end
update_node_title (a_id: like {CMS_USER}.id; a_node_id: like {CMS_NODE}.id; a_title: READABLE_STRING_32)
@@ -210,7 +207,7 @@ feature -- Node
do
node_provider.update_node_title (a_node_id, a_title)
internal_node_update (a_id, a_node_id)
post_node_provider_execution
end
update_node_summary (a_id: like {CMS_USER}.id; a_node_id: like {CMS_NODE}.id; a_summary: READABLE_STRING_32)
@@ -218,7 +215,7 @@ feature -- Node
do
node_provider.update_node_summary (a_node_id, a_summary)
internal_node_update (a_id, a_node_id)
post_node_provider_execution
end
update_node_content (a_id: like {CMS_USER}.id; a_node_id: like {CMS_NODE}.id; a_content: READABLE_STRING_32)
@@ -226,7 +223,7 @@ feature -- Node
do
node_provider.update_node_content (a_node_id, a_content)
internal_node_update (a_id, a_node_id)
post_node_provider_execution
end
feature {NONE} -- NODE Implemenation
@@ -258,27 +255,6 @@ feature -- User
feature {NONE} -- Post process
post_node_provider_execution
do
if node_provider.successful then
set_successful
else
if attached node_provider.last_error then
set_last_error_from_handler (node_provider.last_error)
end
end
end
post_user_provider_execution
do
if user_provider.successful then
set_successful
else
if attached user_provider.last_error then
set_last_error_from_handler (user_provider.last_error)
end
end
end
node_provider: NODE_DATA_PROVIDER
-- Node Data provider.

View File

@@ -23,6 +23,7 @@ feature -- Initialization
local
l_retried: BOOLEAN
do
create database_error_handler.make
create db_application.login (username, password)
if not l_retried then
@@ -38,6 +39,7 @@ feature -- Initialization
create db_control.make
end
rescue
create database_error_handler.make
exception_as_error ((create {EXCEPTION_MANAGER}).last_exception)
l_retried := True
retry
@@ -49,6 +51,7 @@ feature -- Initialization
local
l_retried: BOOLEAN
do
create database_error_handler.make
create db_application.login (username, password)
if not l_retried then
@@ -64,6 +67,7 @@ feature -- Initialization
create db_control.make
end
rescue
create database_error_handler.make
exception_as_error ((create {EXCEPTION_MANAGER}).last_exception)
l_retried := True
retry
@@ -76,6 +80,7 @@ feature -- Initialization
-- `database_name' to `a_database_name'
-- `connection' to `a_connection'
do
create database_error_handler.make
create db_application.login (a_username, a_password)
db_application.set_hostname (a_hostname)
db_application.set_data_source (a_database_name)
@@ -97,6 +102,8 @@ feature -- Initialization
l_user: STRING
l_password: STRING
do
create database_error_handler.make
l_string := a_string.split (';')
l_server := l_string.at (2).split ('=').at (2)
l_port := l_string.at (3).split ('=').at (2)
@@ -111,12 +118,12 @@ feature -- Initialization
db_application.set_base
create db_control.make
keep_connection := is_keep_connection
end
login_with_schema (a_schema: STRING; a_username: STRING; a_password: STRING)
-- Login with `a_connection_string'and immediately connect to database.
do
create database_error_handler.make
create db_application
db_application.set_application (a_schema)
db_application.login_and_connect (a_username, a_password)

View File

@@ -10,10 +10,10 @@ inherit
PARAMETER_NAME_HELPER
SHARED_ERROR
REFACTORING_HELPER
SHARED_LOGGER
create
make
@@ -23,6 +23,7 @@ feature -- Initialization
-- Create a data provider.
do
create {DATABASE_HANDLER_IMPL} db_handler.make (a_connection)
create error_handler.make
post_execution
end
@@ -34,8 +35,13 @@ feature -- Status Report
is_successful: BOOLEAN
-- Is the last execution sucessful?
do
Result := not error_handler.has_error
end
feature -- Error Handler
error_handler: ERROR_HANDLER
feature -- Access
nodes: DATABASE_ITERATION_CURSOR [CMS_NODE]
@@ -43,6 +49,7 @@ feature -- Access
local
l_parameters: STRING_TABLE [ANY]
do
error_handler.reset
log.write_information (generator + ".nodes")
create l_parameters.make (0)
db_handler.set_query (create {DATABASE_QUERY}.data_reader (Select_nodes, l_parameters))
@@ -57,6 +64,7 @@ feature -- Access
l_parameters: STRING_TABLE [ANY]
l_query: STRING
do
error_handler.reset
log.write_information (generator + ".recent_nodes")
create l_parameters.make (2)
l_parameters.put (a_rows, "rows")
@@ -73,6 +81,7 @@ feature -- Access
local
l_parameters: STRING_TABLE [ANY]
do
error_handler.reset
log.write_information (generator + ".node")
create l_parameters.make (1)
l_parameters.put (a_id,"id")
@@ -89,6 +98,7 @@ feature -- Access
local
l_parameters: STRING_TABLE [ANY]
do
error_handler.reset
log.write_information (generator + ".count")
create l_parameters.make (0)
db_handler.set_query (create {DATABASE_QUERY}.data_reader (select_count, l_parameters))
@@ -105,6 +115,7 @@ feature -- Access
local
l_parameters: STRING_TABLE [ANY]
do
error_handler.reset
log.write_information (generator + ".last_inserted_node_id")
create l_parameters.make (0)
db_handler.set_query (create {DATABASE_QUERY}.data_reader (Sql_last_insert_node_id, l_parameters))
@@ -122,6 +133,7 @@ feature -- Basic operations
local
l_parameters: STRING_TABLE [ANY]
do
error_handler.reset
log.write_information (generator + ".new_node")
create l_parameters.make (7)
l_parameters.put (a_node.title, "title")
@@ -140,10 +152,7 @@ feature -- Basic operations
db_handler.execute_change
a_node.set_id (last_inserted_node_id)
post_execution
end
update_node_title (a_id: INTEGER_64; a_title: READABLE_STRING_32)
@@ -151,6 +160,7 @@ feature -- Basic operations
local
l_parameters: STRING_TABLE [ANY]
do
error_handler.reset
log.write_information (generator + ".update_node_title")
create l_parameters.make (3)
l_parameters.put (a_title, "title")
@@ -166,6 +176,7 @@ feature -- Basic operations
local
l_parameters: STRING_TABLE [ANY]
do
error_handler.reset
log.write_information (generator + ".update_node_summary")
create l_parameters.make (3)
l_parameters.put (a_summary, "summary")
@@ -181,6 +192,7 @@ feature -- Basic operations
local
l_parameters: STRING_TABLE [ANY]
do
error_handler.reset
log.write_information (generator + ".update_node_content")
create l_parameters.make (3)
l_parameters.put (a_content, "content")
@@ -196,6 +208,7 @@ feature -- Basic operations
local
l_parameters: STRING_TABLE [ANY]
do
error_handler.reset
log.write_information (generator + ".update_node")
create l_parameters.make (7)
l_parameters.put (a_node.title, "title")
@@ -215,6 +228,7 @@ feature -- Basic operations
local
l_parameters: STRING_TABLE [ANY]
do
error_handler.reset
log.write_information (generator + ".delete_node")
create l_parameters.make (1)
l_parameters.put (a_id, "id")
@@ -227,6 +241,7 @@ feature -- Basic operations
local
l_parameters: STRING_TABLE [ANY]
do
error_handler.reset
log.write_information (generator + ".delete_from_user_nodes")
create l_parameters.make (1)
l_parameters.put (a_id, "id")
@@ -242,6 +257,7 @@ feature -- Basic Operations: User_Nodes
local
l_parameters: STRING_TABLE [detachable ANY]
do
error_handler.reset
log.write_information (generator + ".add_author")
create l_parameters.make (2)
l_parameters.put (a_user_id,"user_id")
@@ -256,6 +272,7 @@ feature -- Basic Operations: User_Nodes
local
l_parameters: STRING_TABLE [detachable ANY]
do
error_handler.reset
log.write_information (generator + ".add_collaborator")
create l_parameters.make (2)
l_parameters.put (a_user_id,"users_id")
@@ -270,6 +287,7 @@ feature -- Basic Operations: User_Nodes
local
l_parameters: STRING_TABLE [detachable ANY]
do
error_handler.reset
log.write_information (generator + ".add_collaborator")
create l_parameters.make (2)
l_parameters.put (a_user_id,"users_id")
@@ -285,6 +303,7 @@ feature -- Basic Operations: User_Nodes
local
l_parameters: STRING_TABLE [ANY]
do
error_handler.reset
log.write_information (generator + ".author_nodes")
create l_parameters.make (1)
l_parameters.put (a_id, "user_id")
@@ -299,6 +318,7 @@ feature -- Basic Operations: User_Nodes
local
l_parameters: STRING_TABLE [ANY]
do
error_handler.reset
log.write_information (generator + ".collaborator_nodes")
create l_parameters.make (1)
l_parameters.put (a_id, "user_id")
@@ -314,6 +334,7 @@ feature -- Basic Operations: User_Nodes
local
l_parameters: STRING_TABLE [ANY]
do
error_handler.reset
log.write_information (generator + ".node_author")
create l_parameters.make (1)
l_parameters.put (a_id, "node_id")
@@ -330,6 +351,7 @@ feature -- Basic Operations: User_Nodes
local
l_parameters: STRING_TABLE [ANY]
do
error_handler.reset
log.write_information (generator + ".node_collaborators")
create l_parameters.make (1)
l_parameters.put (a_id, "node_id")
@@ -344,6 +366,7 @@ feature -- Basic Operations: User_Nodes
local
l_parameters: STRING_TABLE [ANY]
do
error_handler.reset
log.write_information (generator + ".node_collaborators")
create l_parameters.make (2)
l_parameters.put (a_user_id, "user_id")
@@ -353,7 +376,6 @@ feature -- Basic Operations: User_Nodes
if db_handler.count = 1 then
Result := db_handler.read_integer_32 (1) = 1
end
post_execution
end
@@ -480,6 +502,10 @@ feature {NONE} -- Implementation
post_execution
-- Post database execution.
do
error_handler.add_synchronization (db_handler.database_error_handler)
if error_handler.has_error then
log.write_critical (generator + ".post_execution " + error_handler.as_string_representation)
end
end
end

View File

@@ -10,10 +10,10 @@ inherit
PARAMETER_NAME_HELPER
SHARED_ERROR
REFACTORING_HELPER
SHARED_LOGGER
create
make
@@ -23,17 +23,24 @@ feature -- Initialization
-- Create a data provider.
do
create {DATABASE_HANDLER_IMPL} db_handler.make (a_connection)
create error_handler.make
post_execution
end
db_handler: DATABASE_HANDLER
-- Db handler.
feature -- Error Handler
error_handler: ERROR_HANDLER
feature -- Status Report
is_successful: BOOLEAN
-- Is the last execution sucessful?
do
Result := not error_handler.has_error
end
has_user: BOOLEAN
@@ -51,6 +58,7 @@ feature -- Basic Operations
l_password_salt, l_password_hash: STRING
l_security: SECURITY_PROVIDER
do
error_handler.reset
create l_security
l_password_salt := l_security.salt
l_password_hash := l_security.password_hash (a_password, l_password_salt)
@@ -71,6 +79,7 @@ feature -- Basic Operations
local
l_parameters: STRING_TABLE [ANY]
do
error_handler.reset
log.write_information (generator + ".user")
create l_parameters.make (1)
l_parameters.put (a_id,"id")
@@ -87,6 +96,7 @@ feature -- Basic Operations
local
l_parameters: STRING_TABLE [ANY]
do
error_handler.reset
log.write_information (generator + ".user_by_name")
create l_parameters.make (1)
l_parameters.put (a_name,"name")
@@ -104,6 +114,7 @@ feature -- Basic Operations
local
l_parameters: STRING_TABLE [detachable ANY]
do
error_handler.reset
log.write_information (generator + ".user_by_email")
create l_parameters.make (1)
l_parameters.put (a_email,"email")
@@ -120,6 +131,7 @@ feature -- Basic Operations
local
l_parameters: STRING_TABLE [ANY]
do
error_handler.reset
log.write_information (generator + ".user_salt")
create l_parameters.make (1)
l_parameters.put (a_username,"name")
@@ -138,6 +150,7 @@ feature -- Basic Operations
local
l_parameters: STRING_TABLE [ANY]
do
error_handler.reset
log.write_information (generator + ".count")
create l_parameters.make (0)
db_handler.set_query (create {DATABASE_QUERY}.data_reader (select_count, l_parameters))
@@ -155,6 +168,7 @@ feature -- Basic operations: User Roles
local
l_parameters: STRING_TABLE [detachable ANY]
do
error_handler.reset
log.write_information (generator + ".add_role")
create l_parameters.make (2)
l_parameters.put (a_user_id,"users_id")
@@ -169,6 +183,7 @@ feature -- Basic operations: User Roles
local
l_parameters: STRING_TABLE [ANY]
do
error_handler.reset
log.write_information (generator + ".user_roles")
create l_parameters.make (1)
l_parameters.put (a_id, "user_id")
@@ -186,6 +201,7 @@ feature -- Basic operations: User Profiles
local
l_parameters: STRING_TABLE [ANY]
do
error_handler.reset
log.write_information (generator + ".save_profile_item")
create l_parameters.make (3)
l_parameters.put (a_key, "key")
@@ -201,6 +217,7 @@ feature -- Basic operations: User Profiles
local
l_cursor: TABLE_ITERATION_CURSOR [READABLE_STRING_8, READABLE_STRING_8]
do
error_handler.reset
log.write_information (generator + ".save_profile")
from
l_cursor := a_user_profile.new_cursor
@@ -219,6 +236,7 @@ feature -- Basic operations: User Profiles
local
l_parameters: STRING_TABLE [ANY]
do
error_handler.reset
log.write_information (generator + ".user_profile")
create l_parameters.make (1)
l_parameters.put (a_user_id, "users_id")
@@ -310,6 +328,10 @@ feature {NONE} -- Implementation
post_execution
-- Post database execution.
do
error_handler.add_synchronization (db_handler.database_error_handler)
if error_handler.has_error then
log.write_critical (generator + ".post_execution " + error_handler.as_string_representation)
end
end
end

View File

@@ -0,0 +1,81 @@
note
description: "[
Eiffel tests that can be executed by testing tool.
]"
author: "EiffelStudio test wizard"
date: "$Date$"
revision: "$Revision$"
testing: "type/manual"
class
DATABASE_HANDLER_TEST
inherit
EQA_TEST_SET
redefine
on_prepare,
on_clean
select
default_create
end
ABSTRACT_DB_TEST
rename
default_create as default_db_test
end
feature {NONE} -- Events
on_prepare
-- <Precursor>
do
(create {CLEAN_DB}).clean_db(connection)
end
on_clean
-- <Precursor>
do
end
feature -- Test routines
test_wrong_database_query
-- New test routine
local
l_parameters: STRING_TABLE[detachable ANY]
do
create l_parameters.make (0)
handler.set_query (create {DATABASE_QUERY}.data_reader ("Sellect from users", l_parameters))
handler.execute_query
assert ("Has error:", handler.has_error)
end
test_sequences_of_wrong_and_correct_queries
-- New test routine
local
l_parameters: STRING_TABLE[detachable ANY]
do
create l_parameters.make (0)
handler.set_query (create {DATABASE_QUERY}.data_reader ("Sellect from users;", l_parameters))
handler.execute_query
assert ("Has error:", handler.has_error)
handler.set_query (create {DATABASE_QUERY}.data_reader ("Select * from users;", l_parameters))
handler.execute_query
assert ("Not Has error:",not handler.has_error)
end
feature -- Handler
handler: DATABASE_HANDLER
once
create {DATABASE_HANDLER_IMPL} Result.make (connection )
end
end

View File

@@ -41,7 +41,9 @@ feature {NONE} -- Events
feature -- Test routines
test_new_node
do
note
testing: "execution/isolated"
do
assert ("Empty Nodes", node_provider.nodes.after)
node_provider.new_node (default_node)
assert ("Not empty Nodes after new_node", not node_provider.nodes.after)
@@ -53,6 +55,8 @@ feature -- Test routines
test_update_node
note
testing: "execution/isolated"
local
l_node: CMS_NODE
do
@@ -85,6 +89,8 @@ feature -- Test routines
end
test_update_title
note
testing: "execution/isolated"
local
l_node: CMS_NODE
do
@@ -104,6 +110,8 @@ feature -- Test routines
end
test_update_summary
note
testing: "execution/isolated"
local
l_node: CMS_NODE
do
@@ -123,11 +131,14 @@ feature -- Test routines
end
test_update_content
note
testing: "execution/isolated"
local
l_node: CMS_NODE
do
assert ("Empty Nodes", node_provider.nodes.after)
l_node := custom_node ("<h1> test node udpate </h1>", "Update node", "Test case update")
connection.begin_transaction
node_provider.new_node (l_node)
assert ("Not empty Nodes after new_node", not node_provider.nodes.after)
-- Exist node with id 1
@@ -139,6 +150,7 @@ feature -- Test routines
node_provider.update_node_content (l_un.id,"New Content")
assert ("Exist node with id 1", attached {CMS_NODE} node_provider.node (1) as ll_node and then not (ll_node.content ~ l_un.content) and then ll_node.content ~ "New Content" and then ll_node.summary ~ l_un.summary and then ll_node.title ~ l_un.title)
end
connection.commit
end

View File

@@ -7,6 +7,7 @@
</option>
<setting name="concurrency" value="thread"/>
<library name="base" location="$ISE_LIBRARY\library\base\base-safe.ecf"/>
<library name="model" location="..\..\..\..\model\model-safe.ecf"/>
<library name="crypto" location="$ISE_LIBRARY\unstable\library\text\encryption\crypto\crypto-safe.ecf"/>
<library name="persitence_mysql" location="..\persistence_mysql-safe.ecf" readonly="false"/>
<library name="testing" location="$ISE_LIBRARY\library\testing\testing-safe.ecf"/>

View File

@@ -66,77 +66,6 @@ feature -- Test routines
assert ("Not has nodes:", node_provider.count = 0)
end
test_user_node_nested_transaction_with_rollback_not_supported
note
testing: "execution/isolated"
do
connection.begin_transaction2
user_provider.new_user ("test", "test","test@admin.com")
assert ("Has user:", user_provider.has_user)
node_provider.new_node (default_node)
assert ("Has one node:", node_provider.count = 1)
connection.begin_transaction2
user_provider.new_user ("test1", "test1","test1@admin.com")
assert ("Has user: test1", attached user_provider.user_by_name ("test1"))
connection.rollback2
connection.commit2
assert ("Has user test:", attached user_provider.user_by_name ("test"))
assert ("Has nodes:", node_provider.count = 1)
assert ("Not has user: test1", user_provider.user_by_name ("test1") = Void)
end
test_user_node_nested_transaction_with_commit
note
testing: "execution/isolated"
do
connection.begin_transaction2
user_provider.new_user ("test", "test","test@admin.com")
assert ("Has user:", user_provider.has_user)
node_provider.new_node (default_node)
assert ("Has one node:", node_provider.count = 1)
connection.begin_transaction2
user_provider.new_user ("test1", "test1","test1@admin.com")
assert ("Has user: test1", attached user_provider.user_by_name ("test1"))
connection.commit2
connection.commit2
assert ("Has user test:", attached user_provider.user_by_name ("test"))
assert ("Has user test1:", attached user_provider.user_by_name ("test1"))
assert ("Has nodes:", node_provider.count = 1)
end
test_user_node_nested_transaction_with_rollback
note
testing: "execution/isolated"
do
connection.begin_transaction2
user_provider.new_user ("test", "test","test@admin.com")
assert ("Has user:", user_provider.has_user)
node_provider.new_node (default_node)
assert ("Has one node:", node_provider.count = 1)
connection.begin_transaction2
user_provider.new_user ("test1", "test1","test1@admin.com")
assert ("Has user: test1", attached user_provider.user_by_name ("test1"))
connection.commit2
connection.rollback2
assert ("Not Has user test:", user_provider.user_by_name ("test") = void)
assert ("Not Has user test1:", user_provider.user_by_name ("test1") = void)
assert ("Has 0 nodes:", node_provider.count = 0)
end
feature {NONE} -- Implementation
node_provider: NODE_DATA_PROVIDER