Interface mozIStorageConnectionType

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

Note

From the main thread, you should rather use mozIStorageAsyncConnection.

Threadsafe

Hierarchy

Properties

affectedRows: number

affectedRows returns the number of database rows that were changed or inserted or deleted by last operation.

connectionReady: boolean

Indicates if the connection is open and ready to use. This will be false if the connection failed to open, or it has been closed.

databaseFile: nsIFile

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

defaultPageSize: number

The default size for SQLite database pages used by mozStorage for new databases.

defaultTransactionType: int32_t

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

lastError: number

The last error SQLite error code.

lastErrorString: string

The last SQLite error as a string (in english, straight from the sqlite library).

lastInsertRowID: number

lastInsertRowID returns the row ID from the last INSERT operation.

schemaVersion: number

The schema version of the database. This should not be used until the database is ready. The schema will be reported as zero if it is not set.

sharedDBMutex: SQLiteMutex

The mutex used for protection of operations (BEGIN/COMMIT/ROLLBACK) in mozStorageTransaction. The lock must be held in a way that spans whole operation, not just when accessing the nesting level.

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

  • Begin a new transaction. If a transaction is active, throws an error.

    Returns void

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

    Returns

    the cloned database connection.

    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

    Due to a bug in SQLite, if you use the shared cache (openDatabase), 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. Defaults to false.

    Returns mozIStorageConnection

  • Closes a database connection. Callers must finalize all statements created for this connection prior to calling this method. It is illegal to use call this method if any asynchronous statements have been executed on this connection.

    Throws

    NS_ERROR_UNEXPECTED If any statement has been executed asynchronously on this object.

    Throws

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

    Returns void

  • Commits the current transaction. If no transaction is active,

    Throws

    NS_ERROR_UNEXPECTED.

    Throws

    NS_ERROR_NOT_INITIALIZED.

    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

  • Create a mozIStorageStatement for the given SQL expression. 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 mozIStorageStatement

    Parameters

    • aSQLStatement: string

      The SQL statement to execute.

    Returns mozIStorageStatement

  • Create the table with the given name and schema.

    If the table already exists, NS_ERROR_FAILURE is thrown. (XXX at some point in the future it will check if the schema is the same as what is specified, but that doesn't happen currently.)

    Throws

    NS_ERROR_FAILURE If the table already exists or could not be created for any other reason.

    Parameters

    • aTableName: string

      The table name to be created, consisting of [A-Za-z0-9_], and beginning with a letter.

    • aTableSchema: string

      The schema of the table; what would normally go between the parens in a CREATE TABLE statement: e.g., "foo INTEGER, bar STRING".

    Returns void

  • Parameters

    • aProofOfLock: SQLiteMutexAutoLock

    Returns number

  • Enable a predefined virtual table implementation.

    Throws

    NS_ERROR_FAILURE For unknown module names.

    Parameters

    • aModuleName: string

      The module to enable. Only "filesystem" is currently supported.

    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 a SQL expression, expecting no arguments.

    Parameters

    • aSQLStatement: string

      The SQL statement to execute

    Returns void

  • 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

  • Get quota objects.

    @param[out] aDatabaseQuotaObject The QuotaObject associated with the database file. @param[out] aJournalQuotaObject The QuotaObject associated with the journal file.

    Throws

    NS_ERROR_NOT_INITIALIZED.

    Parameters

    • aDatabaseQuotaObject: QuotaObject
    • aJournalQuotaObject: QuotaObject

    Returns void

  • Helper methods for managing the transaction nesting level. The methods must be called with a proof of lock. Currently only used by mozStorageTransaction.

    Parameters

    • aProofOfLock: SQLiteMutexAutoLock

    Returns number

  • Parameters

    • aProofOfLock: SQLiteMutexAutoLock

    Returns number

  • Check if the given index exists.

    Returns

    TRUE if the index exists, FALSE otherwise.

    Parameters

    • aIndexName: string

      The index to check

    Returns boolean

  • 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

  • Rolls back the current transaction. If no transaction is active,

    Throws

    NS_ERROR_UNEXPECTED.

    Throws

    NS_ERROR_NOT_INITIALIZED.

    Returns void

  • Controls SQLITE_FCNTL_CHUNK_SIZE setting in sqlite. This helps avoid fragmentation by growing/shrinking the database file in SQLITE_FCNTL_CHUNK_SIZE increments. To conserve memory on systems short on storage space, this function will have no effect on mobile devices or if less than 500MiB of space is left available.

    Throws

    NS_ERROR_FILE_TOO_BIG If the system is short on storage space.

    Parameters

    • aIncrement: int32_t

      The database file will grow in multiples of chunkSize.

    • aDatabaseName: string

      Sqlite database name. "" means pass NULL for zDbName to sqlite3_file_control. See http://sqlite.org/c3ref/file_control.html for more details.

    Returns void

  • 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

  • Check if the given table exists.

    Returns

    TRUE if table exists, FALSE otherwise.

    Parameters

    • aTableName: string

      The table to check

    Returns boolean

Generated using TypeDoc