author Masayuki Nakano <>
Thu, 10 Jan 2019 08:50:41 +0000
changeset 453219 99a977d519a0b78e267d3dce4afb009b8d3be769
parent 244681 ad01543457e739b4eee7a245e16734a3ecfd10ad
child 475212 020c8c871c0d3b3920fe95935cfef06501976c0f
permissions -rw-r--r--
Bug 181137 - part 8: Make ContentIteratorBase and its subclasses non-refcountable r=smaug This patch makes ContentIteratorBase, PostContentIterator, PreContentIterator and ContentSubtreeIterator classes non-refcountable because most users can create their instances in stack and such users may be in a hot path. So, we can save a lot of cost of instantiation. Unfortunately, only ScriptableContentIterator creates one of the concrete classes and needs to destroy it properly. Therefore, its EnsureContentIterator(), destructor, traverse and unlink code becomes messy. However, ScriptableContentIterator was designed for automated tests and we need to maintain it not so many times. Therefore, improvement of other users must be worthwhiler than this demerit. Differential Revision:

/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 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 */

#include "nsISupports.idl"

interface mozIStorageConnection;
interface mozIStorageValueArray;
interface nsIArray;
interface nsIVariant;

 * mozIStorageAggregateFunction represents aggregate SQL function.
 * Common examples of aggregate functions are SUM() and COUNT().
 * An aggregate function calculates one result for a given set of data, where
 * a set of data is a group of tuples. There can be one group
 * per request or many of them, if GROUP BY clause is used or not.
[scriptable, uuid(763217b7-3123-11da-918d-000347412e16)]
interface mozIStorageAggregateFunction : nsISupports {
   * onStep is called when next value should be passed to
   * a custom function.
   * @param aFunctionArguments    The arguments passed in to the function
  void onStep(in mozIStorageValueArray aFunctionArguments);

   * Called when all tuples in a group have been processed and the engine
   * needs the aggregate function's value.
   * @returns aggregate result as Variant.
  nsIVariant onFinal();