[Title] support DB
authorjiil.hyoun <jiil.hyoun@samsung.com>
Fri, 19 Oct 2012 06:36:14 +0000 (15:36 +0900)
committerjiil.hyoun <jiil.hyoun@samsung.com>
Fri, 19 Oct 2012 06:36:14 +0000 (15:36 +0900)
[Type] Feature
[Module] Toolchain /
[Priority] Major
[Jira#]
[Redmine#]
[Problem]
[Cause]
[Solution]
[TestCase]

Change-Id: Id2c71d79f2fa814c57b7a07c3d6ea33ebd928212

src/build_server/BuildServer.rb
src/build_server/BuildServerController.rb
src/build_server/DistributionManager.rb
src/build_server/ProjectManager.rb

index 45fa76ca849d1b1f136a4532b6071c6dd8943382..b615dc59636ad6a0d5fcf7894a47d35c494bebe9 100644 (file)
@@ -64,7 +64,7 @@ class BuildServer
        attr_accessor :remote_pkg_servers
        attr_accessor :pkg_sync_period
        attr_accessor :changelog_check
-
+       attr_accessor :db_dsn, :db_user, :db_passwd
        CONFIG_ROOT = "#{Utils::HOME}/.build_tools/build_server"
        HOST_OS = Utils::HOST_OS
 
@@ -111,6 +111,11 @@ class BuildServer
                @pkg_sync_period=600
                @upgrade = false
                @changelog_check = false
+
+               #DB settring
+               @db_dsn = "SQLite3:#{BuildServer::CONFIG_ROOT}/#{@id}/server.db"
+               @db_user = nil
+               @db_passwd = nil
        end
 
 
@@ -401,19 +406,25 @@ class BuildServer
        def create_db()
                result = true
                # create DB
-               sqlite_db_file = "DBI:SQLite3:#{BuildServer::CONFIG_ROOT}/#{@id}/server.db"
                begin
-                       db = DBI.connect(sqlite_db_file)
+                       #DB open
+                       db = DBI.connect("DBI:#{@db_dsn}", @db_user, @db_passwd)
+                       case @db_dsn
+                       when /^SQLite3:/ then inc="AUTOINCREMENT"
+                       when /^Mysql:/ then inc="AUTO_INCREMENT"
+                       else inc="AUTOINCREMENT"
+                       end
+
 
                        # create table
                        db.do "CREATE TABLE IF NOT EXISTS distributions(name VARCHAR(32) PRIMARY KEY, pkgsvr_url VARCHAR(256), pkgsvr_addr VARCHAR(64))"
-                       db.do "CREATE TABLE IF NOT EXISTS remote_build_servers(id INTEGER PRIMARY KEY AUTOINCREMENT, svr_addr VARCHAR(64))"
-                       db.do "CREATE TABLE IF NOT EXISTS sync_pkg_servers(id INTEGER PRIMARY KEY AUTOINCREMENT, pkgsvr_url VARCHAR(256), period INTEGER, dist_name VARCHAR(32))"
+                       db.do "CREATE TABLE IF NOT EXISTS remote_build_servers(id INTEGER PRIMARY KEY #{inc}, svr_addr VARCHAR(64))"
+                       db.do "CREATE TABLE IF NOT EXISTS sync_pkg_servers(id INTEGER PRIMARY KEY #{inc}, pkgsvr_url VARCHAR(256), period INTEGER, dist_name VARCHAR(32))"
                        db.do "CREATE TABLE IF NOT EXISTS supported_os(name VARCHAR(32) PRIMARY KEY)"
-                       db.do "CREATE TABLE IF NOT EXISTS projects(id INTEGER PRIMARY KEY AUTOINCREMENT, name VARCHAR(32), type VARCHAR(32), password VARCHAR(32), dist_name VARCHAR(32))"
+                       db.do "CREATE TABLE IF NOT EXISTS projects(id INTEGER PRIMARY KEY #{inc}, name VARCHAR(32), type VARCHAR(32), password VARCHAR(32), dist_name VARCHAR(32))"
                        db.do "CREATE TABLE IF NOT EXISTS project_os(prj_id INTEGER, os_name VARCHAR(32))"
-                       db.do "CREATE TABLE IF NOT EXISTS users(user_id INTEGER PRIMARY KEY AUTOINCREMENT, email VARCHAR(256), password VARCHAR(256), password_salt VARCHAR(256), user_name VARCHAR(256), group_id VARCHAR(256))"
-                       db.do "CREATE TABLE IF NOT EXISTS groups(group_id INTEGER PRIMARY KEY AUTOINCREMENT, group_name VARCHAR(256))"
+                       db.do "CREATE TABLE IF NOT EXISTS users(user_id INTEGER PRIMARY KEY #{inc}, email VARCHAR(256), password VARCHAR(256), password_salt VARCHAR(256), user_name VARCHAR(256), group_id VARCHAR(256))"
+                       db.do "CREATE TABLE IF NOT EXISTS groups(group_id INTEGER PRIMARY KEY #{inc}, group_name VARCHAR(256))"
                rescue DBI::DatabaseError => e
                        puts "DB Creation failed!"
                        puts e.errstr
@@ -432,10 +443,9 @@ class BuildServer
                # distribution
                @distmgr.save_db()
 
-               sqlite_db_file = "DBI:SQLite3:#{BuildServer::CONFIG_ROOT}/#{@id}/server.db"
                begin
                        # open DB
-                       db = DBI.connect(sqlite_db_file)
+                       db = DBI.connect("DBI:#{@db_dsn}", @db_user ,@db_passwd)
 
                        # remote_build_servers
                        db.do "DELETE FROM remote_build_servers"
@@ -474,10 +484,9 @@ class BuildServer
                # distribution
                @distmgr.load_db()
 
-               sqlite_db_file = "DBI:SQLite3:#{BuildServer::CONFIG_ROOT}/#{@id}/server.db"
                begin
                        # open DB
-                       db = DBI.connect(sqlite_db_file)
+                       db = DBI.connect("DBI:#{@db_dsn}", @db_user, @db_passwd)
                        #db.results_as_hash = true
 
                        # remote_build_servers
index 36ce45fa3854624403672b0f505532a3a2a70514..033d247d7aba9fffce3b50422c586505d7d6ebab 100644 (file)
@@ -717,6 +717,22 @@ class BuildServerController
                        server.ftp_passwd = value
                when "CHANGELOG_CHECK"
                        server.changelog_check = value
+               when "DB_DSN"
+                       case value
+                       when /^SQLite3:(.*)/i then
+                               if $1.strip.empty? then db_dsn = "SQLite3:#{BuildServer::CONFIG_ROOT}/#{@id}/server.db"
+                               else db_dsn = "SQLite3:#{$1.strip}"
+                               end
+                       when /^Mysql:(.*)/i then
+                               db_dsn = "Mysql:#{$1}"
+                       else
+                               db_dsn = "SQLite3:#{BuildServer::CONFIG_ROOT}/#{@id}/server.db"
+                       end
+                       server.db_dsn = db_dsn
+               when "DB_USER"
+                       server.db_user = value if not value.empty?
+               when "DB_PASSWORD"
+                       server.db_passwd = value if not value.empty?
                else
                        puts "Wrong attribute name!"
                        result = false
@@ -763,6 +779,12 @@ class BuildServerController
                        puts server.ftp_passwd
                when "CHANGELOG_CHECK"
                        puts server.changelog_check
+               when "DB_DSN"
+                       puts server.db_dsn
+               when "DB_USER"
+                       puts server.db_user
+               when "DB_PASSWORD"
+                       puts server.db_passwd
                else
                        puts "Wrong attribute name!"
                        result = false
@@ -810,6 +832,10 @@ class BuildServerController
                        end
                        f.puts "PKG_SYNC_PERIOD=#{server.pkg_sync_period}"
                        f.puts "CHANGELOG_CHECK=#{server.changelog_check}"
+                       f.puts "#only supports \"Mysql\" and \"SQLite3\""
+                       f.puts "DB_DSN=#{server.db_dsn}"
+                       f.puts "DB_USER=#{server.db_user}"
+                       f.puts "DB_PASSWORD=#{server.db_passwd}"
                end
 
                # save to server.db
@@ -836,11 +862,15 @@ class BuildServerController
                ftp_passwd=nil
                pkg_sync_period=600
                changelog_check=false
+               db_dsn="SQLite3:#{BuildServer::CONFIG_ROOT}/#{id}/server.db"
+               db_user=nil
+               db_passwd=nil
 
                # read configuration
                server_dir = "#{BuildServer::CONFIG_ROOT}/#{id}"
                File.open( "#{server_dir}/server.cfg", "r" ) do |f|
                        f.each_line do |l|
+                               if l.strip.start_with?("#") then next end
                                idx = l.index("=") + 1
                                length = l.length - idx
 
@@ -870,6 +900,21 @@ class BuildServerController
                                        pkg_sync_period = l[idx,length].strip.to_i
                                elsif l.start_with?("CHANGELOG_CHECK=")
                                        changelog_check = true if l[idx,length].strip =~ /true/i
+                               elsif l.start_with?("DB_DSN=")
+                                       case l[idx,length].strip
+                                       when /^SQLite3:(.*)/i then
+                                               if $1.strip.empty? then db_dsn = "SQLite3:#{BuildServer::CONFIG_ROOT}/#{@id}/server.db"
+                                               else db_dsn = "SQLite3:#{$1.strip}"
+                                               end
+                                       when /^Mysql:(.*)/i then
+                                               db_dsn = "Mysql:#{$1}"
+                                       else
+                                               db_dsn = "SQLite3:#{BuildServer::CONFIG_ROOT}/#{@id}/server.db"
+                                       end
+                               elsif l.start_with?("DB_USER=")
+                                       db_user = l[idx,length].strip if not l[idx,length].strip.empty?
+                               elsif l.start_with?("DB_PASSWORD=")
+                                       db_passwd = l[idx,length].strip if not l[idx,length].strip.empty?
                                else
                                        next
                                end
@@ -914,6 +959,11 @@ class BuildServerController
                # change log setting
                obj.changelog_check = changelog_check
 
+               # DB settring
+               obj.db_dsn = db_dsn if not db_dsn.nil?
+               obj.db_user = db_user
+               obj.db_passwd = db_passwd
+
                # save config
                write_server_config( obj )
 
index e3c8e07c68856f67703785d29925fcdd8ed7f393..70cef6f66dadff36d7f2eea2285bd1553af9a797 100644 (file)
@@ -129,10 +129,9 @@ class DistributionManager
        # save
        def save_db()
                result = true
-               sqlite_db_file = "DBI:SQLite3:#{BuildServer::CONFIG_ROOT}/#{@server.id}/server.db"
                begin
                        # open DB
-                       db = DBI.connect(sqlite_db_file)
+                       db = DBI.connect("DBI:#{@server.db_dsn}", @server.db_user, @server.db_passwd)
 
                        # distributions
                        db.do "DELETE FROM distributions"
@@ -156,17 +155,16 @@ class DistributionManager
                result = true
                @distributions = []
 
-               sqlite_db_file = "DBI:SQLite3:#{BuildServer::CONFIG_ROOT}/#{@server.id}/server.db"
                begin
                        # open DB
-                       db = DBI.connect(sqlite_db_file)
+                       db = DBI.connect("DBI:#{@server.db_dsn}", @server.db_user, @server.db_passwd)
 
                        begin
                                db.do('ALTER TABLE distributions ADD COLUMN status VARCHAR(32) DEFAULT "OPEN"') 
                        rescue DBI::DatabaseError => e
                                # do nothing
                        end
-                       
+
                        # distributions
                        rs = db.execute "SELECT * FROM distributions"
                        rs.fetch_hash do |row|
index 99622c851852e6f6cb6fa7906dcb7275b2b2344d..3f825032e3e5f5ba694346b6c3c23739201f32b0 100644 (file)
@@ -254,10 +254,9 @@ class ProjectManager
        # save
        def save_db()
                result = true
-               sqlite_db_file = "DBI:SQLite3:#{BuildServer::CONFIG_ROOT}/#{@server.id}/server.db"
                begin
                        # open #
-                       db = DBI.connect(sqlite_db_file)
+                       db = DBI.connect("DBI:#{@server.db_dsn}", @server.db_user, @server.db_passwd)
 
                        # delete all rows
                        db.do "DELETE FROM projects"
@@ -269,7 +268,12 @@ class ProjectManager
                                db.do "INSERT INTO projects (name,type,password,dist_name) VALUES('#{prj.name}', '#{prj.type}', '#{prj.passwd}', '#{prj.dist_name}')"
 
                                # OS
-                               prj_id = db.select_one("select last_insert_rowid()")[0]
+                               case @server.db_dsn
+                               when /^SQLite3:/ then prj_id = db.select_one("select last_insert_rowid()")[0]
+                               when /^Mysql:/ then prj_id = db.func(:insert_id)
+                               else prj_id = db.select_one("select last_insert_rowid()")[0]
+                               end
+
                                prj.os_list.each do |os|
                                        db.do "INSERT INTO project_os VALUES('#{prj_id}','#{os}')"
                                end
@@ -292,10 +296,9 @@ class ProjectManager
                result = true
                @projects = []
 
-               sqlite_db_file = "DBI:SQLite3:#{BuildServer::CONFIG_ROOT}/#{@server.id}/server.db"
                begin
                        # open DB
-                       db = DBI.connect(sqlite_db_file)
+                       db = DBI.connect("DBI:#{@server.db_dsn}", @server.db_user, @server.db_passwd)
 
                        # distributions
                        rs = db.execute "SELECT * FROM projects"