diff options
author | Helmut Grohne <helmut@subdivi.de> | 2013-07-17 16:27:08 +0200 |
---|---|---|
committer | Helmut Grohne <helmut@subdivi.de> | 2013-07-17 16:27:08 +0200 |
commit | ed3e611cfc54b8c916e919701070bfd5c6770610 (patch) | |
tree | fe06694d5a2212c87a0d149eccb0f4cbb889a5cd /readyaml.py | |
parent | a03daac99a237babcd874748d19fc0f809a1dc60 (diff) | |
parent | 6205c89b1e289f04dcea1e6e32fafa6357abf063 (diff) | |
download | debian-dedup-ed3e611cfc54b8c916e919701070bfd5c6770610.tar.gz |
Merge branch master into sqlalchemy
This basically pulls the packageid branch into sqlalchemy. The merge was
complex, because many sql statements diverged. The merge brings us one
step closer to supporting postgres, because an "INSERT OR REPLACE" was
removed from readyaml.py in the packageid branch.
Conflicts:
update_sharing.py
webapp.py
Diffstat (limited to 'readyaml.py')
-rwxr-xr-x | readyaml.py | 35 |
1 files changed, 21 insertions, 14 deletions
diff --git a/readyaml.py b/readyaml.py index e2f3bb3..bb8ac54 100755 --- a/readyaml.py +++ b/readyaml.py @@ -14,29 +14,36 @@ def readyaml(db, stream): gen = yaml.safe_load_all(stream) metadata = next(gen) package = metadata["package"] - cur.execute("SELECT version FROM package WHERE package = ?;", + cur.execute("SELECT id, version FROM package WHERE name = ?;", (package,)) row = cur.fetchone() - if row and version_compare(row[0], metadata["version"]) > 0: - return + if row: + pid, version = row + if version_compare(version, metadata["version"]) > 0: + return + else: + pid = None cur.execute("BEGIN;") - cur.execute("DELETE FROM content WHERE package = ?;", - (package,)) - cur.execute("INSERT OR REPLACE INTO package (package, version, architecture, source) VALUES (?, ?, ?, ?);", - (package, metadata["version"], metadata["architecture"], - metadata["source"])) - cur.execute("DELETE FROM dependency WHERE package = ?;", - (package,)) - cur.executemany("INSERT INTO dependency (package, required) VALUES (?, ?);", - ((package, dep) for dep in metadata["depends"])) + if pid is not None: + cur.execute("DELETE FROM content WHERE pid = ?;", (pid,)) + cur.execute("DELETE FROM dependency WHERE pid = ?;", (pid,)) + cur.execute("UPDATE package SET version = ?, architecture = ?, source = ? WHERE id = ?;", + (metadata["version"], metadata["architecture"], metadata["source"], pid)) + else: + cur.execute("INSERT INTO package (name, version, architecture, source) VALUES (?, ?, ?, ?);", + (package, metadata["version"], metadata["architecture"], + metadata["source"])) + pid = cur.lastrowid + cur.executemany("INSERT INTO dependency (pid, required) VALUES (?, ?);", + ((pid, dep) for dep in metadata["depends"])) for entry in gen: if entry == "commit": db.commit() return - cur.execute("INSERT INTO content (package, filename, size) VALUES (?, ?, ?);", - (package, entry["name"], entry["size"])) + cur.execute("INSERT INTO content (pid, filename, size) VALUES (?, ?, ?);", + (pid, entry["name"], entry["size"])) cid = cur.lastrowid cur.executemany("INSERT INTO hash (cid, function, hash) VALUES (?, ?, ?);", ((cid, func, hexhash) |