[Title] apply DBi but only using sqlite3
authorjiil.hyoun <jiil.hyoun@samsung.com>
Fri, 12 Oct 2012 01:37:48 +0000 (10:37 +0900)
committerjiil.hyoun <jiil.hyoun@samsung.com>
Fri, 12 Oct 2012 01:37:48 +0000 (10:37 +0900)
[Type] Feature
[Module] Toolchain /
[Priority] Major
[Jira#]
[Redmine#] 7185
[Problem]
[Cause]
[Solution]
[TestCase]

Change-Id: Ief5f1d6e15d7a1e1fcb7aca653d1d29e2033e97f

src/build_server/BinaryUploadProject.rb
src/build_server/BuildServer.rb
src/build_server/BuildServerController.rb
src/build_server/CommonProject.rb
src/build_server/DistributionManager.rb
src/build_server/GitBuildProject.rb
src/build_server/ProjectManager.rb

index 49f7eb864b06b59735db60cf14fdf73f418d0e8f..83994696a04359c98a58ea2dbc114420190a3159 100644 (file)
@@ -27,7 +27,7 @@ Contributors:
 =end
 
 require 'fileutils'
-require 'sqlite3'
+require 'dbi'
 $LOAD_PATH.unshift File.dirname(__FILE__)
 require "CommonProject.rb"
 require "RegisterPackageJob.rb"
@@ -118,11 +118,7 @@ class BinaryUploadProject < CommonProject
 
 
        def include_package?(name, version=nil, os=nil)
-               if name == @pkg_name then 
-                       return true 
-               else
-                       return false
-               end
+               return (name == @pkg_name)
        end
 
 
@@ -132,6 +128,7 @@ class BinaryUploadProject < CommonProject
                        f.puts "TYPE=BINARY"
                        f.puts "PACKAGE_NAME=#{@pkg_name}"
                end
+               return true
        end
 
 
@@ -147,11 +144,12 @@ class BinaryUploadProject < CommonProject
                                if l.start_with?("PACKAGE_NAME=")
                                        pkg_name = l[idx,length].strip
                                else
-                                       next    
-                               end 
+                                       next
+                               end
                        end
                end
 
                @pkg_name = pkg_name
+               return true
        end
 end
index f66073ca36fbe473eb26749f0c1c554ef618094e..16336b45209477a8443c645066d8b9cfd2cc36bb 100644 (file)
@@ -28,7 +28,7 @@ Contributors:
 
 require 'rubygems'
 require 'fileutils'
-require 'sqlite3'
+require 'dbi'
 $LOAD_PATH.unshift File.dirname(__FILE__)
 require "SocketJobRequestListener.rb"
 require "RemoteBuildJob.rb"
@@ -399,118 +399,121 @@ class BuildServer
 
 
        def create_db()
+               result = true
                # create DB
-               db_file = "#{BuildServer::CONFIG_ROOT}/#{@id}/server.db" 
+               sqlite_db_file = "DBI:SQLite3:#{BuildServer::CONFIG_ROOT}/#{@id}/server.db"
                begin
-                       db = SQLite3::Database.new db_file
+                       db = DBI.connect(sqlite_db_file)
 
                        # create table
-                       db.execute "CREATE TABLE IF NOT EXISTS distributions(name VARCHAR(32) PRIMARY KEY, pkgsvr_url VARCHAR(256), pkgsvr_addr VARCHAR(64))"
-                       db.execute "CREATE TABLE IF NOT EXISTS remote_build_servers(id INTEGER PRIMARY KEY, svr_addr VARCHAR(64))"
-                       db.execute "CREATE TABLE IF NOT EXISTS sync_pkg_servers(id INTEGER PRIMARY KEY, pkgsvr_url VARCHAR(256), period INTEGER, dist_name VARCHAR(32))"
-                       db.execute "CREATE TABLE IF NOT EXISTS supported_os(name VARCHAR(32) PRIMARY KEY)"
-                       db.execute "CREATE TABLE IF NOT EXISTS projects(id INTEGER PRIMARY KEY, name VARCHAR(32), type VARCHAR(32), password VARCHAR(32), dist_name VARCHAR(32))"
-                       db.execute "CREATE TABLE IF NOT EXISTS project_os(prj_id INTEGER, os_name VARCHAR(32))"
-                       db.execute "CREATE TABLE IF NOT EXISTS users(user_id INTEGER PRIMARY KEY, email VARCHAR(256), password VARCHAR(256), password_salt VARCHAR(256), user_name VARCHAR(256), group_id VARCHAR(256))"
-                       db.execute "CREATE TABLE IF NOT EXISTS groups(group_id INTEGER PRIMARY KEY, group_name VARCHAR(256))"
-               rescue SQLite3::Exception => e
+                       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 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 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))"
+               rescue DBI::DatabaseError => e
                        puts "DB Creation failed!"
-                       puts e
+                       puts e.errstr
+                       result = false
                ensure
-                       db.close if db
+                       db.disconnect if db
                end
+               return result
        end
 
 
        # save
        def save_db()
 
+               result = true
                # distribution
                @distmgr.save_db()
 
-               db_file = "#{BuildServer::CONFIG_ROOT}/#{@id}/server.db" 
+               sqlite_db_file = "DBI:SQLite3:#{BuildServer::CONFIG_ROOT}/#{@id}/server.db"
                begin
                        # open DB
-                       db = SQLite3::Database.open db_file
+                       db = DBI.connect(sqlite_db_file)
 
                        # remote_build_servers
-                       db.execute "DELETE FROM remote_build_servers"
-                       idx = 0
+                       db.do "DELETE FROM remote_build_servers"
                        @friend_servers.each { |svr|
-                               db.execute "INSERT INTO remote_build_servers VALUES('#{idx}','#{svr.ip}:#{svr.port}')"
-                               idx += 1
+                               db.do "INSERT INTO remote_build_servers (svr_addr) VALUES('#{svr.ip}:#{svr.port}')"
                        }
-               
+
                        # sync_pkg_servers
-                       db.execute "DELETE FROM sync_pkg_servers"
-                       idx = 0
+                       db.do "DELETE FROM sync_pkg_servers"
                        @remote_pkg_servers.each { |svr|
-                               db.execute "INSERT INTO sync_pkg_servers VALUES('#{idx}','#{svr[0]}','#{@pkg_sync_period}','#{svr[1]}')"
-                               idx += 1
+                               db.do "INSERT INTO sync_pkg_servers (pkgsvr_url,period,dist_name) VALUES('#{svr[0]}','#{@pkg_sync_period}','#{svr[1]}')"
                        }
 
                        # supported_os
-                       db.execute "DELETE FROM supported_os"
+                       db.do "DELETE FROM supported_os"
                        @supported_os_list.each { |os|
-                               db.execute "INSERT INTO supported_os VALUES('#{os}')"
+                               db.do "INSERT INTO supported_os VALUES('#{os}')"
                        }
-       
-               rescue SQLite3::Exception => e
+
+               rescue DBI::DatabaseError => e
                        puts "DB update failed!"
-                       puts e
+                       puts e.errstr
+                       result = false
                ensure
-                       db.close if db
+                       db.disconnect if db
                end
+
+               return result
        end
 
 
        # load
        def load_db()
 
+               result = true
                # distribution
                @distmgr.load_db()
 
-               db_file = "#{BuildServer::CONFIG_ROOT}/#{@id}/server.db" 
+               sqlite_db_file = "DBI:SQLite3:#{BuildServer::CONFIG_ROOT}/#{@id}/server.db"
                begin
                        # open DB
-                       db = SQLite3::Database.open db_file
-                       db.results_as_hash = true
+                       db = DBI.connect(sqlite_db_file)
+                       #db.results_as_hash = true
 
                        # remote_build_servers
                        @friend_servers = []
-                       stm = db.prepare "SELECT * FROM remote_build_servers"
-                       rs = stm.execute
-                       rs.each { |row|
+                       sth = db.execute "SELECT * FROM remote_build_servers"
+                       sth.fetch_hash { |row|
                                add_remote_server(
-                                       row['svr_addr'].split(":")[0], 
+                                       row['svr_addr'].split(":")[0],
                                        row['svr_addr'].split(":")[1].to_i)
                        }
-                       stm.close if stm
-
+                       sth.finish
                        # sync_package_servers
                        @remote_pkg_servers = []
-                       stm = db.prepare "SELECT * FROM sync_pkg_servers"
-                       rs = stm.execute
-                       rs.each { |row|
+                       sth = db.execute "SELECT * FROM sync_pkg_servers"
+                       sth.fetch_hash { |row|
                                add_sync_package_server( row['pkgsvr_url'], row['dist_name'] )
                                @pkg_sync_period = row['period'].to_i
                        }
-                       stm.close if stm
+                       sth.finish
 
                        # supported_os
                        @supported_os_list = []
-                       stm = db.prepare "SELECT * FROM supported_os"
-                       rs = stm.execute
-                       rs.each { |row|
+                       sth = db.execute "SELECT * FROM supported_os"
+                       sth.fetch_hash { |row|
                                add_target_os( row['name'] )
                        }
-               rescue SQLite3::Exception => e
+                       sth.finish
+               rescue DBI::DatabaseError => e
                        puts "DB loading failed!"
-                       puts e
+                       puts e.errstr
+                       result = false
                ensure
-                       stm.close if stm
-                       db.close if db
+                       sth.finish if not sth.finished?
+                       db.disconnect if db
                end
+               return result
        end
 
 end
index f935964d85262b370d334a7722b9df239166702c..6ba375940c3f260863c0a16913a367a3608e212f 100644 (file)
@@ -259,10 +259,13 @@ class BuildServerController
                
                # add
                if server.add_remote_server( ip, port ) then
-                       server.save_db()
-                       puts "Friend server is added successfully!"
-                       
-                       return true
+                       if server.save_db() then
+                               puts "Friend server is added successfully!"
+                               return true
+                       else
+                               puts "Add friend server to DB is failed!"
+                               return false
+                       end
                else
                        puts "Friend server already exists in list!"
                        return false
@@ -276,10 +279,13 @@ class BuildServerController
                
                # add
                if server.remove_remote_server( ip, port ) then
-                       server.save_db()
-                       puts "Friend server is removed successfully!"
-                       
-                       return true
+                       if server.save_db() then
+                               puts "Friend server is removed successfully!"
+                               return true
+                       else
+                               puts "Remove friend server from DB is failed!"
+                               return false
+                       end
                else
                        puts "Friend server does not exist in list!"
                        return false
@@ -300,9 +306,13 @@ class BuildServerController
                
                # add
                if server.add_target_os( os_name ) then
-                       server.save_db()
-                       puts "Target OS is added successfully!"
-                       return true
+                       if server.save_db() then
+                               puts "Target OS is added successfully!"
+                               return true
+                       else
+                               puts "Add target OS to DB is failed!"
+                               return false
+                       end
                else
                        puts "Target OS already exists in list!"
                        return false
@@ -317,9 +327,13 @@ class BuildServerController
                
                # add
                if server.remove_target_os( os_name ) then
-                       server.save_db()
-                       puts "Target OS is removed successfully!"
-                       return true
+                       if server.save_db() then
+                               puts "Target OS is removed successfully!"
+                               return true
+                       else
+                               puts "Remove target OS from DB failed!"
+                               return false
+                       end
                else
                        puts "Target OS does not exist in list!"
                        return false
@@ -334,9 +348,13 @@ class BuildServerController
                
                # add
                if server.distmgr.add_distribution( dist_name, pkgsvr_url, pkgsvr_ip, pkgsvr_port ) then
-                       server.save_db()
-                       puts "Distribution is added successfully!"
-                       return true
+                       if server.save_db() then
+                               puts "Distribution is added successfully!"
+                               return true
+                       else
+                               puts "Add distribution to DB failed!"
+                               return false
+                       end
                else
                        puts "Distribution already exists in list!"
                        return false
@@ -351,9 +369,13 @@ class BuildServerController
                
                # remove
                if server.distmgr.remove_distribution( dist_name ) then
-                       server.save_db()
-                       puts "Distribution is removed successfully!"
-                       return true
+                       if server.save_db() then
+                               puts "Distribution is removed successfully!"
+                               return true
+                       else
+                               puts "Remove distribution from DB is failed!"
+                               return false
+                       end
                else
                        puts "Distribution does not exist in list!"
                        return false
@@ -371,9 +393,13 @@ class BuildServerController
 
                # add
                if server.add_sync_package_server( url, dist_name ) then
-                       server.save_db()
-                       puts "Remote package server is added!"
-                       return true
+                       if server.save_db() then
+                               puts "Remote package server is added!"
+                               return true
+                       else
+                               puts "Remove package server from DB is failed!"
+                               return false
+                       end
                else
                        puts "The server already exists in list!"
                        return false
@@ -403,9 +429,13 @@ class BuildServerController
 
                # remove
                if server.remove_sync_package_server( url, dist_name ) then
-                       server.save_db()
-                       puts "Remote package server is removed!"
-                       return true
+                       if server.save_db() then
+                               puts "Remote package server is removed!"
+                               return true
+                       else
+                               puts "Remove remote package server from DB is failed!"
+                               return false
+                       end
                else
                        puts "The server does not exist in list!"
                        return false
index 37716b58efd11b301779d891b0d0d5a7efb5e072..11745e9f8a0f6586c961b1d1e218ab5e46d28083 100644 (file)
@@ -112,14 +112,4 @@ class CommonProject
                end
                return nil
        end
-
-
-       def set_project_id(id)
-               @project_id = id
-       end
-
-       
-       def get_project_id()
-               return @project_id
-       end
 end
index 0c7b7ed3df72e6f51daa69530c0a4401f0f106af..dbca431a2908fdce3720d383c42ffa9a0c37b750 100644 (file)
@@ -118,52 +118,56 @@ class DistributionManager
 
        # save
        def save_db()
-               db_file = "#{BuildServer::CONFIG_ROOT}/#{@server.id}/server.db" 
+               result = true
+               sqlite_db_file = "DBI:SQLite3:#{BuildServer::CONFIG_ROOT}/#{@server.id}/server.db"
                begin
                        # open DB
-                       db = SQLite3::Database.open db_file
+                       db = DBI.connect(sqlite_db_file)
 
                        # distributions
-                       db.execute "DELETE FROM distributions"
+                       db.do "DELETE FROM distributions"
                        @distributions.each { |dist|
                                dist_addr = dist.pkgsvr_ip + ":" + dist.pkgsvr_port.to_s
-                               db.execute "INSERT INTO distributions VALUES('#{dist.name}','#{dist.pkgsvr_url}','#{dist_addr}')"
+                               db.do "INSERT INTO distributions VALUES('#{dist.name}','#{dist.pkgsvr_url}','#{dist_addr}')"
                        }
-               rescue SQLite3::Exception => e
+               rescue DBI::DatabaseError => e
                        puts "DB update failed!"
-                       puts e
+                       puts e.errstr
+                       result = false
                ensure
-                       db.close if db
+                       db.disconnect if db
                end
+               return result
        end
 
 
        # load
        def load_db()
+               result = true
                @distributions = []
 
-               db_file = "#{BuildServer::CONFIG_ROOT}/#{@server.id}/server.db" 
+               sqlite_db_file = "DBI:SQLite3:#{BuildServer::CONFIG_ROOT}/#{@server.id}/server.db"
                begin
                        # open DB
-                       db = SQLite3::Database.open db_file
-                       db.results_as_hash = true
+                       db = DBI.connect(sqlite_db_file)
 
                        # distributions
-                       stm = db.prepare "SELECT * FROM distributions"
-                       rs = stm.execute
-                       rs.each { |row|
+                       rs = db.execute "SELECT * FROM distributions"
+                       rs.fetch_hash { |row|
                                pkgsvr_ip = row['pkgsvr_addr'].split(":")[0]
                                pkgsvr_port = row['pkgsvr_addr'].split(":")[1].to_i
                                add_distribution_internal(row['name'], row['pkgsvr_url'], pkgsvr_ip, pkgsvr_port)
                        }
-               rescue SQLite3::Exception => e
+                       rs.finish
+               rescue DBI::DatabaseError => e
                        puts "DB loading failed!"
-                       puts e
+                       puts e.errstr
+                       result = false
                ensure
-                       stm.close if stm
-                       db.close if db
+                       rs.finish if not rs.finished?
+                       db.disconnect if db
                end
-
+               return result
        end
 
 
index 050cd288f27cb62ff0278f4cf7f45fc8d571ba6f..670e86764892c73d20a7b4a968216c98ad295a3c 100644 (file)
@@ -27,7 +27,7 @@ Contributors:
 =end
 
 require 'fileutils'
-require 'sqlite3'
+require 'dbi'
 $LOAD_PATH.unshift File.dirname(__FILE__)
 require "CommonProject.rb"
 require "GitBuildJob.rb"
@@ -184,6 +184,7 @@ class GitBuildProject < CommonProject
                        f.puts "GIT_REPOSITORY=#{@repository}"
                        f.puts "GIT_BRANCH=#{@branch}"
                end
+               return true
        end
 
        
@@ -232,5 +233,6 @@ class GitBuildProject < CommonProject
                        version = file[0,vlen]
                        add_package_info( version, "#{pkginfo_dir}/#{file}" )
                end
+               return true
        end
 end
index f8bf7338e8d95faec88611f259c60f165f41b4e8..df64083cdeaff0c0f417dc0efe88d38a818213c9 100644 (file)
@@ -27,7 +27,7 @@ Contributors:
 =end
 
 require 'fileutils'
-require 'sqlite3'
+require 'dbi'
 $LOAD_PATH.unshift File.dirname(__FILE__)
 require "GitBuildProject.rb"
 require "BinaryUploadProject.rb"
@@ -247,69 +247,56 @@ class ProjectManager
                return get_project(name, dist_name)     
        end
 
-       
+
        # save
        def save_db()
-               # generate project id if not exist?
-               last_id = -1
-               @projects.each { |prj|
-                       if prj.get_project_id() > last_id then last_id = prj.get_project_id() end
-               }
-               new_id = last_id + 1
-               @projects.each { |prj|
-                       if prj.get_project_id() == -1 then
-                               prj.set_project_id(new_id)
-                               new_id += 1
-                       end
-               }
-
-               db_file = "#{BuildServer::CONFIG_ROOT}/#{@server.id}/server.db" 
+               result = true
+               sqlite_db_file = "DBI:SQLite3:#{BuildServer::CONFIG_ROOT}/#{@server.id}/server.db"
                begin
-                       # open DB
-                       db = SQLite3::Database.open db_file
-                       db.results_as_hash = true
-                       
+                       # open #
+                       db = DBI.connect(sqlite_db_file)
+
                        # delete all rows
-                       db.execute "DELETE FROM projects"
-                       db.execute "DELETE FROM project_os"
+                       db.do "DELETE FROM projects"
+                       db.do "DELETE FROM project_os"
 
                        # insert  project info
                        @projects.each { |prj|
-                               prj_id = prj.get_project_id()
                                # COMMON
-                               db.execute "INSERT INTO projects VALUES(#{prj_id}, '#{prj.name}', '#{prj.type}', '#{prj.passwd}', '#{prj.dist_name}')"
+                               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()")
                                prj.os_list.each { |os|
-                                       db.execute "INSERT INTO project_os VALUES('#{prj_id}','#{os}')"
+                                       db.do "INSERT INTO project_os VALUES('#{prj_id}','#{os}')"
                                }
 
-                               prj.save_db()
+                               if not prj.save_db() then raise RuntimeError ,"Save project DB is failed!" end
                        }
-               rescue SQLite3::Exception => e
+               rescue DBI::DatabaseError => e
                        puts "DB update failed!"
-                       puts e
+                       puts e.errstr
+                       result = false
                ensure
-                       db.close if db
+                       db.disconnect if db
                end
+               return result
        end
 
 
        # load
        def load_db()
+               result = true
                @projects = []
 
-               db_file = "#{BuildServer::CONFIG_ROOT}/#{@server.id}/server.db" 
+               sqlite_db_file = "DBI:SQLite3:#{BuildServer::CONFIG_ROOT}/#{@server.id}/server.db"
                begin
                        # open DB
-                       db = SQLite3::Database.open db_file
-                       db.results_as_hash = true
+                       db = DBI.connect(sqlite_db_file)
 
                        # distributions
-                       stm = db.prepare "SELECT * FROM projects"
-                       rs = stm.execute
-                       stm2 = nil
-                       rs.each { |row|
+                       rs = db.execute "SELECT * FROM projects"
+                       rs.fetch_hash { |row|
                                prj_id = row['id']
                                prj_name = row['name']
                                prj_type = row['type']
@@ -319,36 +306,35 @@ class ProjectManager
                                @server.log.info "Loading project : #{prj_name}"
                                # os
                                prj_os_list = []
-                               stm2 = db.prepare "SELECT os_name FROM project_os WHERE prj_id = #{prj_id}"
-                               rs2 = stm2.execute
-                               rs2.each { |row2|
+                               rs2 = db.execute "SELECT os_name FROM project_os WHERE prj_id = #{prj_id}"
+                               rs2.fetch { |row2|
                                        prj_os_list.push row2[0]
                                }
-                               stm2.close if stm2
-                               stm2 = nil
+                               rs2.finish
 
                                if prj_type == "GIT" then
                                        new_project = GitBuildProject.new(prj_name, @server, prj_os_list, prj_dist)
                                else
                                        new_project = BinaryUploadProject.new(prj_name, @server, prj_os_list, prj_dist)
                                end
-                               new_project.set_project_id(prj_id)
 
                                if not prj_passwd.empty? then
                                        new_project.passwd = prj_passwd
                                end
 
-                               new_project.load_db()
+                               if not new_project.load_db() then raise RuntimeError, "Project DB load failed!" end
                                @projects.push new_project
                        }
-               rescue SQLite3::Exception => e
+                       rs.finish
+               rescue DBI::DatabaseError => e
                        puts "DB loading failed!"
-                       puts e
+                       puts e.errstr
+                       result = false
                ensure
-                       stm.close if stm
-                       stm2.close if stm2
-                       db.close if db
+                       rs.finish if not rs.finished?
+                       db.disconnect if db
                end
+               return result
        end