'Initialize the _Database instance.
Args:
db_filename: The sqlite3 file to use for the database.
create_table: A string containing the SQL table creation command.
signature: A string identifying the important invocation options,
used to make sure we are not using an old database.
index: An optional string to create an index for the database.
commit_periodicity: Number of operations between database commits.'

def __init__(self, db_filename, create_table, signature, index=None, commit_periodicity=100):

    self.db_filename = db_filename
    logger.info('Opening    database:    %s', db_filename)
    self.primary_conn = sqlite3.connect(db_filename, isolation_level=None)
    self.primary_thread = threading.currentThread()
    self.secondary_conn = None
    self.secondary_thread = None
    self.operation_count = 0
    self.commit_periodicity = commit_periodicity
    try:
        self.primary_conn.execute(create_table)
    except sqlite3.OperationalError as e:
        if ('already    exists' not in e.message):
            raise
    if index:
        try:
            self.primary_conn.execute(index)
        except sqlite3.OperationalError as e:
            if ('already    exists' not in e.message):
                raise
    self.existing_table = False
    signature_cursor = self.primary_conn.cursor()
    create_signature = ('\n                        create    table    %s    (\n                        value    TEXT    not    null)\n                ' % _Database.SIGNATURE_TABLE_NAME)
    try:
        self.primary_conn.execute(create_signature)
        self.primary_conn.cursor().execute(('insert    into    %s    (value)    values    (?)' % _Database.SIGNATURE_TABLE_NAME), (signature,))
    except sqlite3.OperationalError as e:
        if ('already    exists' not in e.message):
            logger.exception('Exception    creating    table:')
            raise
        else:
            self.existing_table = True
            signature_cursor.execute(('select    *    from    %s' % _Database.SIGNATURE_TABLE_NAME))
            (result,) = signature_cursor.fetchone()
            if (result and (result != signature)):
                logger.error('Database    signature    mismatch:\n\nFound:\n%s\n\nExpecting:\n%s\n', result, signature)
                raise ResumeError(('Database    signature    mismatch:    %s    !=    %s' % (signature, result)))
