EMMA Coverage Report (generated Sun Mar 01 22:06:14 CET 2015)
[all classes][org.h2.command.ddl]

COVERAGE SUMMARY FOR SOURCE FILE [CreateUser.java]

nameclass, %method, %block, %line, %
CreateUser.java100% (1/1)100% (12/12)88%  (146/165)90%  (39.8/44)

COVERAGE BREAKDOWN BY CLASS AND METHOD

nameclass, %method, %block, %line, %
     
class CreateUser100% (1/1)100% (12/12)88%  (146/165)90%  (39.8/44)
update (): int 100% (1/1)83%  (92/111)83%  (20.8/25)
CreateUser (Session): void 100% (1/1)100% (4/4)100% (2/2)
getByteArray (Expression): byte [] 100% (1/1)100% (10/10)100% (1/1)
getCharArray (Expression): char [] 100% (1/1)100% (10/10)100% (1/1)
getType (): int 100% (1/1)100% (2/2)100% (1/1)
setAdmin (boolean): void 100% (1/1)100% (4/4)100% (2/2)
setComment (String): void 100% (1/1)100% (4/4)100% (2/2)
setHash (Expression): void 100% (1/1)100% (4/4)100% (2/2)
setIfNotExists (boolean): void 100% (1/1)100% (4/4)100% (2/2)
setPassword (Expression): void 100% (1/1)100% (4/4)100% (2/2)
setSalt (Expression): void 100% (1/1)100% (4/4)100% (2/2)
setUserName (String): void 100% (1/1)100% (4/4)100% (2/2)

1/*
2 * Copyright 2004-2014 H2 Group. Multiple-Licensed under the MPL 2.0,
3 * and the EPL 1.0 (http://h2database.com/html/license.html).
4 * Initial Developer: H2 Group
5 */
6package org.h2.command.ddl;
7 
8import org.h2.api.ErrorCode;
9import org.h2.command.CommandInterface;
10import org.h2.engine.Database;
11import org.h2.engine.Session;
12import org.h2.engine.User;
13import org.h2.expression.Expression;
14import org.h2.message.DbException;
15import org.h2.security.SHA256;
16import org.h2.util.StringUtils;
17 
18/**
19 * This class represents the statement
20 * CREATE USER
21 */
22public class CreateUser extends DefineCommand {
23 
24    private String userName;
25    private boolean admin;
26    private Expression password;
27    private Expression salt;
28    private Expression hash;
29    private boolean ifNotExists;
30    private String comment;
31 
32    public CreateUser(Session session) {
33        super(session);
34    }
35 
36    public void setIfNotExists(boolean ifNotExists) {
37        this.ifNotExists = ifNotExists;
38    }
39 
40    public void setUserName(String userName) {
41        this.userName = userName;
42    }
43 
44    public void setPassword(Expression password) {
45        this.password = password;
46    }
47 
48    private char[] getCharArray(Expression e) {
49        return e.optimize(session).getValue(session).getString().toCharArray();
50    }
51 
52    private byte[] getByteArray(Expression e) {
53        return StringUtils.convertHexToBytes(
54                e.optimize(session).getValue(session).getString());
55    }
56 
57    @Override
58    public int update() {
59        session.getUser().checkAdmin();
60        session.commit(true);
61        Database db = session.getDatabase();
62        if (db.findRole(userName) != null) {
63            throw DbException.get(ErrorCode.ROLE_ALREADY_EXISTS_1, userName);
64        }
65        if (db.findUser(userName) != null) {
66            if (ifNotExists) {
67                return 0;
68            }
69            throw DbException.get(ErrorCode.USER_ALREADY_EXISTS_1, userName);
70        }
71        int id = getObjectId();
72        User user = new User(db, id, userName, false);
73        user.setAdmin(admin);
74        user.setComment(comment);
75        if (hash != null && salt != null) {
76            user.setSaltAndHash(getByteArray(salt), getByteArray(hash));
77        } else if (password != null) {
78            char[] passwordChars = getCharArray(password);
79            byte[] userPasswordHash;
80            if (userName.length() == 0 && passwordChars.length == 0) {
81                userPasswordHash = new byte[0];
82            } else {
83                userPasswordHash = SHA256.getKeyPasswordHash(userName, passwordChars);
84            }
85            user.setUserPasswordHash(userPasswordHash);
86        } else {
87            throw DbException.throwInternalError();
88        }
89        db.addDatabaseObject(session, user);
90        return 0;
91    }
92 
93    public void setSalt(Expression e) {
94        salt = e;
95    }
96 
97    public void setHash(Expression e) {
98        hash = e;
99    }
100 
101    public void setAdmin(boolean b) {
102        admin = b;
103    }
104 
105    public void setComment(String comment) {
106        this.comment = comment;
107    }
108 
109    @Override
110    public int getType() {
111        return CommandInterface.CREATE_USER;
112    }
113 
114}

[all classes][org.h2.command.ddl]
EMMA 2.0.5312 (C) Vladimir Roubtsov