Yair Zaslavsky has uploaded a new change for review.

Change subject: core: Adding saveOrUpdate to DbUserDao
......................................................................

core: Adding saveOrUpdate to DbUserDao

Change-Id: I4b6add7cbbe0a3055b6eb11ebf67cc77fec4bf53
Signed-off-by: Yair Zaslavsky <yzasl...@redhat.com>
---
M 
backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/DbUserDAO.java
M 
backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/DbUserDAODbFacadeImpl.java
M 
backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/DbUserDAOTest.java
M packaging/dbscripts/user_sp.sql
4 files changed, 98 insertions(+), 15 deletions(-)


  git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/29/28429/1

diff --git 
a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/DbUserDAO.java
 
b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/DbUserDAO.java
index e480d9a..ccb5a33 100644
--- 
a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/DbUserDAO.java
+++ 
b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/DbUserDAO.java
@@ -97,4 +97,11 @@
      *            the user id
      */
     void remove(Guid user);
+
+    /**
+     * Saves or updates the user.
+     *
+     * @param user
+     */
+    void saveOrUpdate(DbUser user);
 }
diff --git 
a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/DbUserDAODbFacadeImpl.java
 
b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/DbUserDAODbFacadeImpl.java
index f90790c..0986441 100644
--- 
a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/DbUserDAODbFacadeImpl.java
+++ 
b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/DbUserDAODbFacadeImpl.java
@@ -164,4 +164,9 @@
         getCallsHandler().executeModification("DeleteUser", parameterSource);
     }
 
+    @Override
+    public void saveOrUpdate(DbUser user) {
+        new 
SimpleJdbcCall(jdbcTemplate).withProcedureName("InsertOrUpdateUser").execute(new
 DbUserMapSqlParameterSource(user));
+    }
+
 }
diff --git 
a/backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/DbUserDAOTest.java
 
b/backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/DbUserDAOTest.java
index 88ea8d5..6b5fb4d 100644
--- 
a/backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/DbUserDAOTest.java
+++ 
b/backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/DbUserDAOTest.java
@@ -223,6 +223,29 @@
         assertEquals(existingUser, result);
     }
 
+    @Test
+    public void testSaveOrUpdateExisting() {
+        int sizeBeforeSave = dao.getAll().size();
+        existingUser.setFirstName("changedname");
+        existingUser.setLastName("changedsurname");
+        int sizeAfterSave = dao.getAll().size();
+        dao.saveOrUpdate(existingUser);
+        DbUser result = dao.get(existingUser.getId());
+        assertEquals(existingUser, result);
+        assertEquals(0, sizeAfterSave - sizeBeforeSave);
+
+    }
+
+    @Test
+    public void testSaveOrUpdateNew() {
+        int sizeBeforeSave = dao.getAll().size();
+        dao.saveOrUpdate(newUser);
+        DbUser result = dao.getByUsername(newUser.getLoginName());
+        int sizeAfterSave = dao.getAll().size();
+        assertEquals(newUser, result);
+        assertEquals(1, sizeAfterSave - sizeBeforeSave);
+    }
+
     /**
      * Ensures that inserting an user with no external id fails, as it has a
      * not null constraint.
diff --git a/packaging/dbscripts/user_sp.sql b/packaging/dbscripts/user_sp.sql
index 26f2973..bdbb70b 100644
--- a/packaging/dbscripts/user_sp.sql
+++ b/packaging/dbscripts/user_sp.sql
@@ -31,11 +31,43 @@
 END; $procedure$
 LANGUAGE plpgsql;
 
+Create or replace FUNCTION UpdateUserImpl(
+       v_department VARCHAR(255) ,
+       v_domain VARCHAR(255),
+       v_email VARCHAR(255) ,
+       v_groups VARCHAR(4000),
+       v_name VARCHAR(255) ,
+       v_note VARCHAR(255) ,
+       v_role VARCHAR(255) ,
+       v_active BOOLEAN,
+       v_surname VARCHAR(255) ,
+       v_user_id UUID,
+       v_username VARCHAR(255),
+       v_group_ids VARCHAR(2048),
+        v_external_id TEXT,
+       v_namespace VARCHAR(2048))
+RETURNS VOID
+
+       --The [users] table doesn't have a timestamp column. Optimistic 
concurrency logic cannot be generated
+   AS $procedure$
+BEGIN
+      UPDATE users
+      SET department = v_department,domain = v_domain,
+      email = v_email,groups = v_groups,name = v_name,note = v_note,
+      role = v_role,active = v_active,surname = v_surname,
+      username = v_username,
+      group_ids = v_group_ids,
+      external_id = v_external_id,
+      namespace = v_namespace,
+      _update_date = CURRENT_TIMESTAMP
+      WHERE user_id = v_user_id;
+END; $procedure$
+LANGUAGE plpgsql;
 
 
 
-
-Create or replace FUNCTION UpdateUser(v_department VARCHAR(255) ,
+Create or replace FUNCTION UpdateUser(
+       v_department VARCHAR(255) ,
        v_domain VARCHAR(255),
        v_email VARCHAR(255) ,
        v_groups VARCHAR(4000),
@@ -55,23 +87,39 @@
        --The [users] table doesn't have a timestamp column. Optimistic 
concurrency logic cannot be generated
    AS $procedure$
 BEGIN
-      UPDATE users
-      SET department = v_department,domain = v_domain,
-      email = v_email,groups = v_groups,name = v_name,note = v_note,
-      role = v_role,active = v_active,surname = v_surname,
-      username = v_username,
-      last_admin_check_status = v_last_admin_check_status,
-      group_ids = v_group_ids,
-      external_id = v_external_id,
-      namespace = v_namespace,
-      _update_date = CURRENT_TIMESTAMP
+      PERFORM UpdateUserImpl(v_department, v_domain, v_email, v_groups, 
v_name, v_note, v_role, v_active, v_surname, v_user_id, v_username, 
v_group_ids, v_external_id, v_namespace);
+      UPDATE users SET
+      last_admin_check_status = v_last_admin_check_status
       WHERE user_id = v_user_id;
 END; $procedure$
 LANGUAGE plpgsql;
 
-
-
-
+Create or replace FUNCTION InsertOrUpdateUser(
+       v_department VARCHAR(255) ,
+       v_domain VARCHAR(255),
+       v_email VARCHAR(255) ,
+       v_groups VARCHAR,
+       v_name VARCHAR(255) ,
+       v_note VARCHAR(255) ,
+       v_role VARCHAR(255) ,
+       v_active BOOLEAN,
+       v_surname VARCHAR(255) ,
+       v_user_id UUID,
+       v_username VARCHAR(255),
+       v_group_ids VARCHAR(2048),
+       v_external_id TEXT,
+       v_namespace VARCHAR(2048))
+RETURNS VOID
+   AS $procedure$
+BEGIN
+       IF NOT EXISTS (SELECT 1 from USERS where USERS.user_id = v_user_id) THEN
+               PERFORM InsertUser(v_department, v_domain, v_email, v_groups, 
v_name, v_note, v_role, v_active, v_surname, v_user_id, v_username, 
v_group_ids, v_external_id, v_namespace);
+        ELSE
+               PERFORM UpdateUserImpl(v_department, v_domain, v_email, 
v_groups, v_name, v_note, v_role, v_active, v_surname, v_user_id, v_username, 
v_group_ids, v_external_id, v_namespace);
+       End IF;
+END; $procedure$
+LANGUAGE plpgsql;
+        
 
 Create or replace FUNCTION DeleteUser(v_user_id UUID)
 RETURNS VOID


-- 
To view, visit http://gerrit.ovirt.org/28429
To unsubscribe, visit http://gerrit.ovirt.org/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: I4b6add7cbbe0a3055b6eb11ebf67cc77fec4bf53
Gerrit-PatchSet: 1
Gerrit-Project: ovirt-engine
Gerrit-Branch: master
Gerrit-Owner: Yair Zaslavsky <yzasl...@redhat.com>
_______________________________________________
Engine-patches mailing list
Engine-patches@ovirt.org
http://lists.ovirt.org/mailman/listinfo/engine-patches

Reply via email to