#!/usr/bin/python
# Copyright 2018 The Tulsi Authors. All rights reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#      http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

"""Update the Tulsi dSYM symbol cache."""

import sqlite3
from symbol_cache_schema import SQLITE_SYMBOL_CACHE_PATH
from symbol_cache_schema import SymbolCacheSchema


class UpdateSymbolCache(object):
  """Provides a common interface to update a UUID referencing a dSYM."""

  def UpdateUUID(self, uuid, dsym_path, arch):
    """Updates a given UUID entry in the database.

    Args:
      uuid: A UUID representing a binary slice in the dSYM bundle.
      dsym_path: An absolute path to the dSYM bundle.
      arch: The binary slice's architecture.

    Returns:
      None: If no error occurred in inserting the new set of values.
      String: If a sqlite3.error was raised upon attempting to store new
              values into the dSYM cache.
    """
    con = self.cache_schema.connection
    cur = con.cursor()
    # Relies on the UNIQUE constraint between dsym_path + architecture to
    # update the UUID if dsym_path and arch match an existing pair, or
    # create a new row if this combination of dsym_path and arch is unique.
    try:
      cur.execute('INSERT OR REPLACE INTO symbol_cache '
                  '(uuid, dsym_path, architecture) '
                  'VALUES("%s", "%s", "%s");' % (uuid, dsym_path, arch))
      con.commit()
    except sqlite3.Error as e:
      return e.message
    return None

  def __init__(self, db_path=SQLITE_SYMBOL_CACHE_PATH):
    self.cache_schema = SymbolCacheSchema(db_path)
