- def prepare(self,name,statement):
- if not self.prepared_statements.has_key(name):
- pgc.execute(statement)
- self.prepared_statements[name] = statement
-
-
- def get_location_id(self, location, component, archive):
- """
- Returns database id for the location behind the given combination of
- - B{location} - the path of the location, eg. I{/srv/ftp.debian.org/ftp/pool/}
- - B{component} - the id of the component as returned by L{get_component_id}
- - B{archive} - the id of the archive as returned by L{get_archive_id}
- Results are kept in a cache during runtime to minimize database queries.
-
- @type location: string
- @param location: the path of the location
-
- @type component: int
- @param component: the id of the component
-
- @type archive: int
- @param archive: the id of the archive
-
- @rtype: int
- @return: the database id for the location
-
- """
-
- archive_id = self.get_archive_id(archive)
-
- if not archive_id:
- return None
-
- res = None
-
- if component:
- component_id = self.get_component_id(component)
- if component_id:
- res = self.__get_single_id("SELECT id FROM location WHERE path=%(location)s AND component=%(component)s AND archive=%(archive)s",
- {'location': location,
- 'archive': int(archive_id),
- 'component': component_id}, cachename='location')
- else:
- res = self.__get_single_id("SELECT id FROM location WHERE path=%(location)s AND archive=%(archive)d",
- {'location': location, 'archive': archive_id, 'component': ''}, cachename='location')
-
- return res
-
-
-
-def get_files_id (self, filename, size, md5sum, location_id):
- """
- Returns -1, -2 or the file_id for filename, if its C{size} and C{md5sum} match an
- existing copy.
-
- The database is queried using the C{filename} and C{location_id}. If a file does exist
- at that location, the existing size and md5sum are checked against the provided
- parameters. A size or checksum mismatch returns -2. If more than one entry is
- found within the database, a -1 is returned, no result returns None, otherwise
- the file id.
-
- @type filename: string
- @param filename: the filename of the file to check against the DB
-
- @type size: int
- @param size: the size of the file to check against the DB
-
- @type md5sum: string
- @param md5sum: the md5sum of the file to check against the DB
-
- @type location_id: int
- @param location_id: the id of the location as returned by L{get_location_id}
-
- @rtype: int / None
- @return: Various return values are possible:
- - -2: size/checksum error
- - -1: more than one file found in database
- - None: no file found in database
- - int: file id
-
- """
- values = {'filename' : filename,
- 'location' : location_id}
-
- if not res:
- query = """SELECT id, size, md5sum
- FROM files
- WHERE filename = %(filename)s AND location = %(location)s"""
-
- cursor = self.db_con.cursor()
- cursor.execute( query, values )
-
- if cursor.rowcount == 0:
- res = None
-
- elif cursor.rowcount != 1:
- res = -1
-
- else:
- row = cursor.fetchone()
-
- if row[1] != int(size) or row[2] != md5sum:
- res = -2
-
- else:
- res = row[0]
-
- return res
-
-
-def get_or_set_contents_file_id(self, filename):
- """
- Returns database id for given filename.
-
- If no matching file is found, a row is inserted.
-
- @type filename: string
- @param filename: The filename
-
- @rtype: int
- @return: the database id for the given component
- """
- try:
- values={'value': filename}
- query = "SELECT id FROM content_file_names WHERE file = %(value)s"
- if not id:
- c = self.db_con.cursor()
- c.execute( "INSERT INTO content_file_names VALUES (DEFAULT, %(value)s) RETURNING id",
- values )
-
- id = c.fetchone()[0]
-
- return id
- except:
- traceback.print_exc()
- raise
-
-def get_or_set_contents_path_id(self, path):
- """
- Returns database id for given path.
-
- If no matching file is found, a row is inserted.
-
- @type path: string
- @param path: The filename
-
- @rtype: int
- @return: the database id for the given component
- """
- try:
- values={'value': path}
- query = "SELECT id FROM content_file_paths WHERE path = %(value)s"
- if not id:
- c = self.db_con.cursor()
- c.execute( "INSERT INTO content_file_paths VALUES (DEFAULT, %(value)s) RETURNING id",
- values )
-
- id = c.fetchone()[0]
-
- return id
- except:
- traceback.print_exc()
- raise