Interface mozIStorageAsyncConnectionType

mozIStorageAsyncConnection represents an asynchronous database connection attached to a specific file or to an in-memory data storage. It is the primary interface for interacting with a database from the main thread, including creating prepared statements, executing SQL, and examining database errors.

Hierarchy

Properties

databaseFile: nsIFile

The current database nsIFile. Null if the database connection refers to an in-memory database.

defaultTransactionType: int32_t

The default behavior for all transactions run on this connection. Defaults to TRANSACTION_DEFERRED, and can be overridden for individual transactions.

transactionInProgress: boolean

Returns true if a transaction is active on this connection.

Note that this is true if a transaction is active on the connection, regardless of how it was opened. There are several ways to open one:

  1. Explicitly calling beginTransaction on a mozIStorageConnection.
  2. Calling executeSimpleSQL("BEGIN") or createStatement("BEGIN").execute() on a mozIStorageConnection.
  3. Executing an async statement, like createAsyncStatement("BEGIN").executeAsync(...). This is what Sqlite.sys.mjs does under the hood.

Because of this, it's important not to use this attribute to decide whether to commit the active transaction, because the caller that opened it may not expect that. This is why both mozStorageTransaction and Sqlite.sys.mjs use an internal variable (mHasTransaction for the former; _hasInProgressTransaction for the latter) to check if their transaction is already in progress, instead of just checking this attribute before committing. Otherwise, mozStorage might accidentally commit (or roll back!) a transaction started by Sqlite.sys.mjs, and vice versa.

variableLimit: int32_t

The maximum number of bound parameters for statements executed on this connection. If your statement has more params than this limit, you'll need to chunk them into multiple statements. See PlacesUtils.chunkArray and its callers in Places for examples of how to do this, or read on for an overview.

Keep in mind that the variable limit is for the total number of parameters, including ones bound by name (using the :VVV, @VVV, or ?VVV syntax) and index (? and ?NNN).

This means, when chunking:

  • If you're binding 1 param per 1 value per chunk (for example, if you have a list of GUIDs and a clause like WHERE guid IN (?, ?, ?, ...), your chunk length is just variableLimit.
  • If you're binding 1 param per 1 value per chunk, but using that param in multiple positions in the query (for example, WHERE url_hash IN (hash(?1), hash(?2), ...) AND url IN (?1, ?2, ...)), you can use the ?NNN syntax with a chunk length of variableLimit.
  • If you're binding N params per 1 value per chunk (for example, if you have a list of items with GUIDs and parent GUIDs, and you want to bind both), your chunk length is variableLimit / N, since you're binding two params for each element.
  • If you're binding K params per L values per chunk, plus M fixed ones (for example, WHERE parentGuid = :parentGuid AND guid IN (?, ?, ...)), your chunk length is variableLimit - M, to ensure there's space for the fixed variables.

If you bind more params than this limit, create{Async}Statement will fail with a "too many SQL variables" error.

Methods

  • Increases the reference count for this interface. The associated instance will not be deleted unless the reference count is returned to zero.

    Returns

    The resulting reference count.

    Returns number

  • Parameters

    • aIID: object
    • Optional aInstancePtr: object

    Returns any

  • A run time mechanism for interface discovery.

    Returns

    NS_OK if the interface is supported by the associated instance, NS_NOINTERFACE if it is not.

    aInstancePtr must not be null.

    Parameters

    • aIID: object

      [in] A requested interface IID

    • aInstancePtr: object

      [out] A pointer to an interface pointer to receive the result.

    Returns void

  • Decreases the reference count for this interface. Generally, if the reference count returns to zero, the associated instance is deleted.

    Returns

    The resulting reference count.

    Returns number

  • Clone a database and make the clone read only if needed. SQL Functions and attached on-disk databases are applied to the new clone.

    Throws

    NS_ERROR_NOT_SAME_THREAD If is called on a thread other than the one that opened it.

    Throws

    NS_ERROR_UNEXPECTED If this connection is a memory database.

    Note

    If your connection is already read-only, you will get a read-only clone.

    Note

    The resulting connection will implement mozIStorageConnection, but all synchronous methods will throw if called from the main thread.

    Note

    Due to a bug in SQLite, if you use the shared cache (see mozIStorageService), you end up with the same privileges as the first connection opened regardless of what is specified in aReadOnly.

    Note

    The following pragmas are copied over to a read-only clone:

    • cache_size
    • temp_store The following pragmas are copied over to a writeable clone:
    • cache_size
    • temp_store
    • foreign_keys
    • journal_size_limit
    • synchronous
    • wal_autocheckpoint All SQL functions are copied over to read-only and writeable clones. Additionally, all temporary tables, triggers, and views, as well as any indexes on temporary tables, are copied over to writeable clones. For temporary tables, only the schemas are copied, not their contents.

    Parameters

    • aReadOnly: boolean

      If true, the returned database should be put into read-only mode.

    • aCallback: mozIStorageCompletionCallback

      A callback that will be notified when the operation is complete, with the following arguments:

      • status: the status of the operation
      • value: in case of success, an intance of mozIStorageAsyncConnection cloned from this one.

    Returns void

  • Close this database connection, allowing all pending statements to complete first.

    Throws

    NS_ERROR_NOT_SAME_THREAD If called on a thread other than the one that opened it. The callback will not be dispatched.

    Throws

    NS_ERROR_NOT_INITIALIZED If called on a connection that has already been closed or was never properly opened. The callback will still be dispatched to the main thread despite the returned error.

    Note

    If this call should fail, the callback won't be invoked.

    Parameters

    • aCallback: mozIStorageCompletionCallback

      [optional] A callback that will be notified when the close is completed, with the following arguments:

      • status: the status of the call
      • value: |null|

    Returns void

  • Vacuum the main database plus all the attached one. If the database is in auto_vacuum = INCREMENTAL mode, this executes an incremental_vacuum, otherwise it will always execute a full vacuum.

    While it's possible to invoke this method directly, it's suggested, when possible, to use the VacuumManager instead. That means registering your component for the "vacuum-participant" XPCOM category, and implement the mozIStorageVacuumParticipant interface.

    Throws

    If it's not possible to start the async vacuum operation, note in this case the callback won't be invoked.

    Note

    Vacuum will fail inside a transaction, or if there is an ongoing read statement.

    Parameters

    • Optional aCallback: any

      Completion callback invoked once the operation is complete.

    • Optional aUseIncremental: null | boolean

      When set to true, this will try to convert the main schema to auto_vacuum = INCREMENTAL mode, if it's not set yet. When set to false, it will try to set auto_vacuum = NONE. Note a full vacuum will be executed if the auto_vacuum mode must be changed, otherwise an incremental vacuum will happen if the database is already in INCREMENTAL mode.

    • Optional aSetPageSize: null | number

      This can be used to change the database page_size, a full vacuum will be executed to persist the change. If the page size is already correct, or you pass 0, this will be a no-op.

    Returns void

  • Create an asynchronous statement for the given SQL. An asynchronous statement can only be used to dispatch asynchronous requests to the asynchronous execution thread and cannot be used to take any synchronous actions on the database.

    The expression may use ? to indicate sequential numbered arguments, ?1, ?2 etc. to indicate specific numbered arguments or :name and $var to indicate named arguments.

    Returns

    a new mozIStorageAsyncStatement

    Note

    The statement is created lazily on first execution.

    Parameters

    • aSQLStatement: string

      The SQL statement to execute.

    Returns mozIStorageAsyncStatement

  • Create a new SQL function. If you use your connection on multiple threads, your function needs to be threadsafe, or it should only be called on one thread.

    Parameters

    • aFunctionName: string

      The name of function to create, as seen in SQL.

    • aNumArguments: number

      The number of arguments the function takes. Pass -1 for variable-argument functions.

    • aFunction: mozIStorageFunction

      The instance of mozIStorageFunction, which implements the function in question.

    Returns void

  • Execute an array of statements created with this connection using any currently bound parameters. When the array contains multiple statements, the execution is wrapped in a single transaction. These statements can be reused immediately, and reset does not need to be called.

    Returns

    an object that can be used to cancel the statements execution.

    Note

    If you have any custom defined functions, they must be re-entrant since they can be called on multiple threads.

    Parameters

    • aStatements: invalid

      The array of statements to execute asynchronously, in the order they are given in the array.

    • aCallback: mozIStorageStatementCallback

      [optional] The callback object that will be notified of progress, errors, and completion.

    Returns mozIStoragePendingStatement

  • Execute asynchronously an SQL expression, expecting no arguments.

    Returns

    an object that can be used to cancel the statement execution.

    Parameters

    • aSQLStatement: string

      The SQL statement to execute

    • aCallback: mozIStorageStatementCallback

      [optional] The callback object that will be notified of progress, errors, and completion.

    Returns mozIStoragePendingStatement

  • Causes any pending database operation to abort and return at the first opportunity.

    Note

    this cannot be used on mozIStorageConnection unless the connection is explicitly marked as interruptible. For more details, please refer to CONNECTION_INTERRUPTIBLE in mozIStorageService.

    Note

    operations that are nearly complete may still be able to complete.

    Throws

    if used on an unsupported connection type, or a closed connection.

    Returns void

  • Delete custom SQL function.

    Parameters

    • aFunctionName: string

      The name of function to remove.

    Returns void

  • Remove a progress handler.

    Returns

    previous registered handler.

    Returns mozIStorageProgressHandler

  • Sets a progress handler. Only one handler can be registered at a time. If you need more than one, you need to chain them yourself. This progress handler should be threadsafe if you use this connection object on more than one thread.

    Returns

    previous registered handler.

    Parameters

    • aGranularity: int32_t

      The number of SQL virtual machine steps between progress handler callbacks.

    • aHandler: mozIStorageProgressHandler

      The instance of mozIStorageProgressHandler.

    Returns mozIStorageProgressHandler

  • Forcibly closes a database connection synchronously. This should only be used when it's required to close and replace the database synchronously to return control to the consumer, for example in case of a detected corruption on database opening. Since this spins the events loop, it should be used only in very particular and rare situations, or it may cause unexpected consequences (crashes).

    Throws

    NS_ERROR_NOT_SAME_THREAD If called on a thread other than the one that opened it.

    Returns void

Generated using TypeDoc