[Title] db schema apply( little bit)
authorjiil.hyoun <jiil.hyoun@samsung.com>
Fri, 23 Nov 2012 06:58:26 +0000 (15:58 +0900)
committerjiil.hyoun <jiil.hyoun@samsung.com>
Fri, 23 Nov 2012 06:58:26 +0000 (15:58 +0900)
[Type] Feature
[Module] Toolchain /
[Priority] Major
[Jira#]
[Redmine#]
[Problem]
[Cause]
[Solution]
[TestCase]

Change-Id: I87d63e854a09447f8c935113b3e8b1d70d729dec

src/build_server/BuildServer.rb

index 88e199a4da1d61740c0a6976264ee71eb02d4175..e431b227071923636ee3beab100317ad60181d58 100644 (file)
@@ -517,9 +517,15 @@ class BuildServer
                gen_db()
                result = get_db_connection() do |db|
                        case @db_dsn
-                       when /^SQLite3:/ then inc="AUTOINCREMENT"
-                       when /^Mysql:/ then inc="AUTO_INCREMENT"
-                       else inc="AUTOINCREMENT"
+                       when /^SQLite3:/ then
+                               inc="AUTOINCREMENT"
+                               post_fix=""
+                       when /^Mysql:/ then
+                               inc="AUTO_INCREMENT"
+                               post_fix="ENGINE = INNODB DEFAULT CHARSET = UTF8"
+                       else
+                               inc="AUTOINCREMENT"
+                               post_fix=""
                        end
 
                        # remove table
@@ -530,17 +536,26 @@ class BuildServer
                        # create table
                        db.do "CREATE TABLE db(version INTEGER )"
                        db.do "INSERT INTO db (version) VALUES('#{@db_version}')"
+                       db.do "CREATE TABLE os_category ( id INTEGER PRIMARY KEY #{inc}, name VARCHAR(32) NOT NULL UNIQUE ) #{post_fix}"
                        db.do "CREATE TABLE distributions(name VARCHAR(32) PRIMARY KEY, pkgsvr_url VARCHAR(256), pkgsvr_addr VARCHAR(64), status VARCHAR(32) DEFAULT 'OPEN')"
-                       db.do "CREATE TABLE remote_build_servers(id INTEGER PRIMARY KEY #{inc}, svr_addr VARCHAR(64))"
+                       db.do "CREATE TABLE remote_build_servers ( id INTEGER PRIMARY KEY #{inc}, svr_addr VARCHAR(64) NOT NULL UNIQUE, description VARCHAR(256) )#{post_fix}"
                        db.do "CREATE TABLE sync_pkg_servers(id INTEGER PRIMARY KEY #{inc}, pkgsvr_url VARCHAR(256), period INTEGER, dist_name VARCHAR(32))"
                        db.do "CREATE TABLE supported_os(name VARCHAR(32) PRIMARY KEY)"
 
                        # USERS/GROUPS
-                       db.do "CREATE TABLE IF NOT EXISTS users(id INTEGER PRIMARY KEY #{inc}, email VARCHAR(256), password_hash VARCHAR(256), password_salt VARCHAR(256), name VARCHAR(256), group_id INTEGER)"
-                       db.do "CREATE TABLE IF NOT EXISTS groups(id INTEGER PRIMARY KEY #{inc}, name VARCHAR(256))"
+                       # users
+                       db.do "CREATE TABLE users ( id INTEGER PRIMARY KEY #{inc}, name VARCHAR(32) NOT NULL UNIQUE, email VARCHAR(256), password_hash VARCHAR(256), password_salt VARCHAR(256) ) #{post_fix}"
+                       # groups
+                       db.do "CREATE TABLE groups ( id INTEGER PRIMARY KEY #{inc}, name VARCHAR(32) NOT NULL UNIQUE, admin VARCHAR(32) NOT NULL DEFAULT 'FALSE', description VARCHAR(256) )#{post_fix}"
+                       # user groups  (users -- groups)
+                       db.do "CREATE  TABLE user_groups ( users_id INTEGER NOT NULL, groups_id INTEGER NOT NULL, status VARCHAR(32) NOT NULL DEFAULT 'ACTIVE', PRIMARY KEY ( users_id, groups_id ),
+                                       CONSTRAINT fk_users_has_groups_users1 FOREIGN KEY ( users_id ) REFERENCES users ( id ),
+                                       CONSTRAINT fk_users_has_groups_groups1 FOREIGN KEY ( groups_id ) REFERENCES groups ( id )) #{post_fix}"
                        db.do "CREATE TABLE IF NOT EXISTS group_project_accesses(group_id INTEGER, prj_id INTEGER, build VARCHAR(32))"
-                       db.do "INSERT INTO groups VALUES (0, 'administrators')"
-                       db.do "INSERT INTO users VALUES (0, 'admin@user', '', '', 'admin', 0)"
+
+                       db.do "INSERT INTO users (name,email,password_hash,password_salt) VALUES ('administrators','admin@user','$2a$10$H.w3ssI9KfuvNEXXp1qxD.b3Wm8alJG.HXviUofe4nErDn.TKUAka','$2a$10$H.w3ssI9KfuvNEXXp1qxD.')"
+                       db.do "INSERT INTO groups (name, admin, description) VALUES ('admin','TRUE','')"
+                       db.do "INSERT INTO user_groups (users_id, groups_id) SELECT users.id,groups.id FROM users,groups WHERE users.email = 'admin@user' and groups.name = 'admin'"
 
                        # PROJECTS
                        db.do "CREATE TABLE projects(id INTEGER PRIMARY KEY #{inc}, name VARCHAR(32), ptype VARCHAR(32), password VARCHAR(32), dist_name VARCHAR(32))"