/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*-
 * vim: sw=2 ts=2 sts=2
 * This Source Code Form is subject to the terms of the Mozilla Public
 * License, v. 2.0. If a copy of the MPL was not distributed with this
 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */

#include "nsISupports.idl"

interface mozIStorageConnection;
interface nsINavHistoryQuery;
interface nsINavHistoryQueryOptions;
interface mozIStorageStatementCallback;
interface mozIStoragePendingStatement;
interface nsIAsyncShutdownClient;

/**
 * This is a private interface used by Places components to get access to the
 * database.  If outside consumers wish to use this, they should only read from
 * the database so they do not break any internal invariants.
 */
[scriptable, uuid(366ee63e-a413-477d-9ad6-8d6863e89401)]
interface nsPIPlacesDatabase : nsISupports
{
  /**
   * The database connection used by Places.
   */
  readonly attribute mozIStorageConnection DBConnection;

  /**
   * Asynchronously executes the statement created from queries.
   *
   * @see nsINavHistoryService::executeQueries
   * @note THIS IS A TEMPORARY API.  Don't rely on it, since it will be replaced
   *       in future versions by a real async querying API.
   * @note Results obtained from this method differ from results obtained from
   *       executeQueries, because there is additional filtering and sorting
   *       done by the latter.  Thus you should use executeQueries, unless you
   *       are absolutely sure that the returned results are fine for
   *       your use-case.
   */
  mozIStoragePendingStatement asyncExecuteLegacyQueries(
    [array, size_is(aQueryCount)] in nsINavHistoryQuery aQueries,
    in unsigned long aQueryCount,
    in nsINavHistoryQueryOptions aOptions,
    in mozIStorageStatementCallback aCallback);

  /**
   * Hook for clients who need to perform actions during/by the end of
   * the shutdown of the database.
   * May be null if it's too late to get one.
   */
  readonly attribute nsIAsyncShutdownClient shutdownClient;

  /**
   * Hook for internal clients who need to perform actions just before the
   * connection gets closed.
   * May be null if it's too late to get one.
   */
  readonly attribute nsIAsyncShutdownClient connectionShutdownClient;
};
