if not row.nil? then return false end
row = db.select_one("SELECT id FROM distributions WHERE name='#{dist}'")
dist_id = row['id'];
- db.do "INSERT INTO sync_pkg_servers (pkgsvr_url,period,distribution_id) VALUES('#{url}','#{@pkg_sync_period}','#{dist_id}')"
+ db.do "INSERT INTO sync_pkg_servers (pkgsvr_url,period,distribution_id) VALUES('#{url}','#{@pkg_sync_period}',#{dist_id})"
end
return true
row = db.select_one("SELECT distributions.id FROM sync_pkg_servers,distributions WHERE sync_pkg_servers.pkgsvr_url='#{url}' and distributions.name='#{dist}'")
if row.nil? then return false end
dist_id = row['id'];
- db.do("DELETE FROM sync_pkg_servers WHERE pkgsvr_url='#{url}' and distribution_id='#{dist_id}'")
+ db.do("DELETE FROM sync_pkg_servers WHERE pkgsvr_url='#{url}' and distribution_id=#{dist_id}")
end
return 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))"
- db.do "CREATE TABLE project_os(prj_id INTEGER, os_name VARCHAR(32))"
+ CommonProject.create_table(db, inc, post_fix)
db.do "CREATE TABLE project_gits(prj_id INTEGER, git_repos VARCHAR(128), git_branch VARCHAR(32))"
- db.do "CREATE TABLE project_sources(prj_id INTEGER, pkg_ver VARCHAR(64), location VARCHAR(256))"
db.do "CREATE TABLE project_bins(prj_id INTEGER, pkg_name VARCHAR(64))"
- db.do "CREATE TABLE project_packages(prj_id INTEGER, pkg_ver VARCHAR(64), pkg_name VARCHAR(64), pkg_os VARCHAR(32))"
# JOBS
db.do "CREATE TABLE jobs(id INTEGER PRIMARY KEY, jtype VARCHAR(32), os_name VARCHAR(32), user_id INTEGER, parent_job_id INTEGER, status VARCHAR(32), prj_id INTEGER, dist_name VARCHAR(32), start_time VARCHAR(32), end_time VARCHAR(32) )"
end
+ def self.create_table(db, inc, post_fix)
+ db.do "CREATE TABLE projects (
+ id INTEGER PRIMARY KEY #{inc},
+ distribution_id INTEGER NOT NULL,
+ name VARCHAR(32) NOT NULL,
+ ptype VARCHAR(32) NOT NULL,
+ password VARCHAR(32),
+ CONSTRAINT fk_projects_distributions1 FOREIGN KEY ( distribution_id ) REFERENCES distributions ( id ) )#{post_fix}"
+
+ db.do "CREATE TABLE project_os (
+ project_id INTEGER NOT NULL,
+ supported_os_id INTEGER NOT NULL,
+ PRIMARY KEY ( project_id,supported_os_id ),
+ CONSTRAINT fk_projects_has_supported_os_projects FOREIGN KEY ( project_id ) REFERENCES projects ( id ),
+ CONSTRAINT fk_projects_has_supported_os_supported_os1 FOREIGN KEY ( supported_os_id ) REFERENCES supported_os ( id ) )#{post_fix}"
+
+ db.do "CREATE TABLE sources (
+ id INTEGER PRIMARY KEY #{inc},
+ project_id INTEGER NOT NULL,
+ pkg_ver VARCHAR(64) NOT NULL,
+ location VARCHAR(256) NOT NULL,
+ CONSTRAINT fk_project_sources_projects1 FOREIGN KEY ( project_id ) REFERENCES projects ( id ))#{post_fix}"
+
+ db.do "CREATE TABLE packages (
+ id INTEGER PRIMARY KEY #{inc},
+ source_id INTEGER NOT NULL,
+ supported_os_id INTEGER NOT NULL,
+ pkg_name VARCHAR(64) NOT NULL,
+ CONSTRAINT fk_project_packages_project_sources1 FOREIGN KEY ( source_id ) REFERENCES sources ( id ),
+ CONSTRAINT fk_project_packages_supported_os1 FOREIGN KEY ( supported_os_id ) REFERENCES supported_os ( id ) )#{post_fix}"
+ end
+
+
protected
def self.load_row(name, dist_name, db)
- row = db.select_one("SELECT * FROM projects WHERE name='#{name}' and dist_name='#{dist_name}'")
+ row = db.select_one("SELECT * FROM distributions WHERE name='#{dist_name}'")
+ if row.nil? then return nil end
+ dist_id = row['id']
+ row = db.select_one("SELECT * FROM projects WHERE name='#{name}' and distribution_id=#{dist_id}")
if row.nil? then return nil end
# get supported_os
prj_id = row['id']
os_list = []
- rows = db.select_all("SELECT os_name FROM project_os WHERE prj_id=#{prj_id}")
+ rows = db.select_all("SELECT supported_os.name FROM project_os,supported_os WHERE project_id=#{prj_id} and supported_os.id = project_os.supported_os_id")
rows.each do |r|
- os_list.push r['os_name']
+ os_list.push r['name']
end
- # get source info
+ # get source info/ package info
source_info = {}
- rows=db.select_all("SELECT * FROM project_sources WHERE prj_id=#{prj_id}")
+ package_info = {}
+ rows=db.select_all("SELECT * FROM sources WHERE project_id=#{prj_id}")
rows.each do |r|
source_info[r['pkg_ver']] = r['location']
- end
- # get package info
- package_info = {}
- rows=db.select_all("SELECT * FROM project_packages WHERE prj_id=#{prj_id}")
- rows.each do |r|
- if package_info[r['pkg_ver']].nil? then
- package_info[r['pkg_ver']] = []
- end
- package_info[r['pkg_ver']].push [r['pkg_name'], r['pkg_os']]
- end
+ source_id = r['id']
+ rows2=db.select_all("SELECT packages.pkg_name,supported_os.name as os_name
+ FROM packages,supported_os WHERE source_id=#{source_id} and packages.supported_os_id=supported_os.id")
+ rows2.each do |r2|
+ if package_info[r['pkg_ver']].nil? then
+ package_info[r['pkg_ver']] = []
+ end
+ package_info[r['pkg_ver']].push [r2['pkg_name'], r2['os_name']]
+ end
+ end
return row, os_list, source_info, package_info
end
protected
def save_common(db)
if @prj_id == -1 then
- db.do "INSERT INTO projects (name,ptype,password,dist_name) VALUES ('#{@name}','#{@type}','#{@passwd}','#{@dist_name}')"
+ row = db.select_one("SELECT * FROM distributions WHERE name='#{@dist_name}'")
+ dist_id = row['id']
+ db.do "INSERT INTO projects (distribution_id,name,ptype,password)
+ VALUES (#{dist_id},'#{@name}','#{@type}','#{@passwd}')"
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
@os_list.each do |os|
- db.do "INSERT INTO project_os VALUES('#{@prj_id}','#{os}')"
+ row = db.select_one("SELECT * FROM supported_os WHERE name='#{os}'")
+ os_id = row['id']
+ db.do "INSERT INTO project_os VALUES(#{@prj_id},#{os_id})"
end
return true
else
- db.do "UPDATE projects SET ptype='#{@type}',password='#{@passwd}' WHERE name='#{@name}' and dist_name='#{@dist_name}')"
- db.do "DELETE FROM project_os WHERE prj_id=#{@prj_id}"
+ row = db.select_one("SELECT * FROM distributions WHERE name='#{@dist_name}'")
+ dist_id = row['id']
+ db.do "UPDATE projects SET ptype='#{@type}',password='#{@passwd}' WHERE name='#{@name}' and distribution_id=#{dist_id})"
+ db.do "DELETE FROM project_os WHERE project_id=#{@prj_id}"
@os_list.each do |os|
- db.do "INSERT INTO project_os VALUES('#{@prj_id}','#{os}')"
+ row = db.select_one("SELECT * FROM supported_os WHERE name='#{os}'")
+ os_id = row['id']
+ db.do "INSERT INTO project_os VALUES(#{@prj_id},#{os_id})"
end
@source_info.each do |src_ver,info|
protected
def save_source_info_internal(src_ver, info, db)
- row1=db.select_one("SELECT * FROM project_sources WHERE prj_id=#{@prj_id} and pkg_ver='#{src_ver}'")
+ row1=db.select_one("SELECT * FROM sources WHERE project_id=#{@prj_id} and pkg_ver='#{src_ver}'")
if row1.nil? then
- db.do "INSERT INTO project_sources VALUES(#{@prj_id},'#{src_ver}','#{info}')"
+ db.do "INSERT INTO sources(project_id, pkg_ver,location)
+ VALUES(#{@prj_id},'#{src_ver}','#{info}')"
end
end
protected
def save_package_info_internal(src_ver, pkg_name, pkg_os, db)
- row1=db.select_one("SELECT * FROM project_packages WHERE prj_id=#{@prj_id} and pkg_ver='#{src_ver}' and pkg_name='#{pkg_name}' and pkg_os='#{pkg_os}'")
+ row=db.select_one("SELECT * FROM sources WHERE project_id=#{@prj_id} and pkg_ver='#{src_ver}'")
+ source_id = row['id']
+ row = db.select_one("SELECT * FROM supported_os WHERE name='#{pkg_os}'")
+ os_id = row['id']
+ row1=db.select_one("SELECT * FROM packages WHERE source_id=#{source_id} and pkg_name='#{pkg_name}' and supported_os_id=#{os_id}")
if row1.nil? then
- db.do "INSERT INTO project_packages VALUES(#{@prj_id},'#{src_ver}','#{pkg_name}','#{pkg_os}')"
+ db.do "INSERT INTO packages(source_id,supported_os_id,pkg_name) VALUES(#{source_id},#{os_id},'#{pkg_name}')"
end
end
def unload_common(db)
row = db.select_one("SELECT * FROM projects WHERE id=#{@prj_id}")
if row.nil? then return -1 end
- db.do("DELETE FROM projects WHERE name='#{@name}' and dist_name='#{@dist_name}'")
- db.do "DELETE FROM project_os WHERE prj_id=#{@prj_id}"
- db.do "DELETE FROM project_sources WHERE prj_id=#{@prj_id}"
- db.do "DELETE FROM project_packages WHERE prj_id=#{@prj_id}"
+ db.do "DELETE FROM project_os WHERE project_id=#{@prj_id}"
+ rows=db.select_all("SELECT * FROM sources WHERE project_id=#{@prj_id}")
+ rows.each do |r|
+ source_id = r['id']
+ db.do "DELETE FROM packages WHERE source_id=#{source_id}"
+ end
+ db.do "DELETE FROM sources WHERE project_id=#{@prj_id}"
+ db.do("DELETE FROM projects WHERE id=#{@prj_id}")
+ end
+
+
+ public
+ def self.get_project_row(name, dist_name, db)
+ row = db.select_one("SELECT * FROM distributions WHERE name='#{dist_name}'")
+ dist_id = row['id']
+ row = db.select_one("SELECT * FROM projects WHERE name='#{name}' and distribution_id=#{dist_id}")
+ return row
+ end
+
+
+ public
+ def self.get_all_project_rows(db)
+ result = []
+ rows = db.select_all("SELECT projects.name,distributions.name as dist_name,projects.ptype
+ FROM projects,distributions WHERE projects.distribution_id=distributions.id")
+ rows.each do |row|
+ prj_name = row['name']
+ prj_dist = row['dist_name']
+ prj_type = row['ptype']
+ result.push [prj_name, prj_dist, prj_type]
+ end
+ return result
end
end