1 /* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- 2 * vim: sw=2 ts=2 et lcs=trail\:.,tab\:>~ : 3 * This Source Code Form is subject to the terms of the Mozilla Public 4 * License, v. 2.0. If a copy of the MPL was not distributed with this 5 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ 6 7 #ifndef mozStorageRow_h 8 #define mozStorageRow_h 9 10 #include "mozIStorageRow.h" 11 #include "nsCOMArray.h" 12 #include "nsDataHashtable.h" 13 #include "mozilla/Attributes.h" 14 class nsIVariant; 15 struct sqlite3_stmt; 16 17 namespace mozilla { 18 namespace storage { 19 20 class Row final : public mozIStorageRow 21 { 22 public: 23 NS_DECL_THREADSAFE_ISUPPORTS 24 NS_DECL_MOZISTORAGEROW 25 NS_DECL_MOZISTORAGEVALUEARRAY 26 Row()27 Row() : mNumCols(0) {} 28 29 /** 30 * Initializes the object with the given statement. Copies the values from 31 * the statement. 32 * 33 * @param aStatement 34 * The sqlite statement to pull results from. 35 */ 36 nsresult initialize(sqlite3_stmt *aStatement); 37 38 private: ~Row()39 ~Row() {} 40 41 /** 42 * The number of columns in this tuple. 43 */ 44 uint32_t mNumCols; 45 46 /** 47 * Stores the data in the tuple. 48 */ 49 nsCOMArray<nsIVariant> mData; 50 51 /** 52 * Maps a given name to a column index. 53 */ 54 nsDataHashtable<nsCStringHashKey, uint32_t> mNameHashtable; 55 }; 56 57 } // namespace storage 58 } // namespace mozilla 59 60 #endif // mozStorageRow_h 61