1 /* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
2 /* This Source Code Form is subject to the terms of the Mozilla Public
3 * License, v. 2.0. If a copy of the MPL was not distributed with this
4 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
6 #include
"nsISupports.idl"
8 #include
"mozilla/DebugOnly.h"
11 [ptr] native octetPtr
(uint8_t
);
14 * mozIStorageValueArray wraps an array of SQL values, such as a single database
17 [scriptable
, uuid(6e6306f4
-ffa7
-40f5
-96ca
-36159ce8f431
)]
18 interface mozIStorageValueArray
: nsISupports
{
20 * These type values are returned by getTypeOfIndex
21 * to indicate what type of value is present at
24 const long VALUE_TYPE_NULL
= 0;
25 const long VALUE_TYPE_INTEGER
= 1;
26 const long VALUE_TYPE_FLOAT
= 2;
27 const long VALUE_TYPE_TEXT
= 3;
28 const long VALUE_TYPE_BLOB
= 4;
33 * number of entries in the array (each corresponding to a column
34 * in the database row)
36 readonly attribute
unsigned long numEntries
;
39 * Returns the type of the value at the given column index;
40 * one of VALUE_TYPE_NULL, VALUE_TYPE_INTEGER, VALUE_TYPE_FLOAT,
41 * VALUE_TYPE_TEXT, VALUE_TYPE_BLOB.
43 long getTypeOfIndex
(in unsigned long aIndex
);
46 * Obtain a value for the given entry (column) index.
47 * Due to SQLite's type conversion rules, any of these are valid
48 * for any column regardless of the column's data type. However,
49 * if the specific type matters, getTypeOfIndex should be used
50 * first to identify the column type, and then the appropriate
51 * get method should be called.
53 * If you ask for a string value for a NULL column, you will get an empty
54 * string with IsVoid set to distinguish it from an explicitly set empty
57 long getInt32
(in unsigned long aIndex
);
58 long long getInt64
(in unsigned long aIndex
);
59 double getDouble
(in unsigned long aIndex
);
60 AUTF8String getUTF8String
(in unsigned long aIndex
);
61 AString getString
(in unsigned long aIndex
);
63 // data will be NULL if dataSize = 0
64 void getBlob
(in unsigned long aIndex
, out unsigned long aDataSize
, [array
,size_is(aDataSize
)] out octet aData
);
65 AString getBlobAsString
(in unsigned long aIndex
);
66 AUTF8String getBlobAsUTF8String
(in unsigned long aIndex
);
67 boolean getIsNull
(in unsigned long aIndex
);
70 * Returns a shared string pointer.
73 * 0-based colummn index.
75 * The number of bytes in the string or blob. This is the same as the
76 * number of characters for UTF-8 strings, and twice the number of
77 * characters for UTF-16 strings.
79 * A pointer to the string or blob.
81 [noscript
] void getSharedUTF8String
(in unsigned long aIndex
, out unsigned long aByteLength
, [shared
,retval] out string aResult
);
82 [noscript
] void getSharedString
(in unsigned long aIndex
, out unsigned long aByteLength
, [shared
,retval] out wstring aResult
);
83 [noscript
] void getSharedBlob
(in unsigned long aIndex
, out unsigned long aByteLength
, [shared
,retval] out octetPtr aResult
);
87 * Getters for native code that return their values as
88 * the return type, for convenience and sanity.
90 * Not virtual; no vtable bloat.
93 inline int32_t AsInt32
(uint32_t idx
) {
95 mozilla
::DebugOnly
<nsresult
> rv
= GetInt32
(idx
, &v
);
96 MOZ_ASSERT
(NS_SUCCEEDED
(rv
) || IsNull
(idx
),
97 "Getting value failed, wrong column index?");
101 inline int64_t AsInt64
(uint32_t idx
) {
103 mozilla
::DebugOnly
<nsresult
> rv
= GetInt64
(idx
, &v
);
104 MOZ_ASSERT
(NS_SUCCEEDED
(rv
) || IsNull
(idx
),
105 "Getting value failed, wrong column index?");
109 inline
double AsDouble
(uint32_t idx
) {
111 mozilla
::DebugOnly
<nsresult
> rv
= GetDouble
(idx
, &v
);
112 MOZ_ASSERT
(NS_SUCCEEDED
(rv
) || IsNull
(idx
),
113 "Getting value failed, wrong column index?");
117 inline
const char* AsSharedUTF8String
(uint32_t idx
, uint32_t
*len
) {
118 const char *str
= nullptr
;
120 mozilla
::DebugOnly
<nsresult
> rv
= GetSharedUTF8String
(idx
, len
, &str
);
121 MOZ_ASSERT
(NS_SUCCEEDED
(rv
) || IsNull
(idx
),
122 "Getting value failed, wrong column index?");
126 inline
const char16_t
* AsSharedWString
(uint32_t idx
, uint32_t
*len
) {
127 const char16_t
*str
= nullptr
;
129 mozilla
::DebugOnly
<nsresult
> rv
= GetSharedString
(idx
, len
, &str
);
130 MOZ_ASSERT
(NS_SUCCEEDED
(rv
) || IsNull
(idx
),
131 "Getting value failed, wrong column index?");
135 inline
const uint8_t
* AsSharedBlob
(uint32_t idx
, uint32_t
*len
) {
136 const uint8_t
*blob
= nullptr
;
138 mozilla
::DebugOnly
<nsresult
> rv
= GetSharedBlob
(idx
, len
, &blob
);
139 MOZ_ASSERT
(NS_SUCCEEDED
(rv
) || IsNull
(idx
),
140 "Getting value failed, wrong column index?");
144 inline bool IsNull
(uint32_t idx
) {
146 mozilla
::DebugOnly
<nsresult
> rv
= GetIsNull
(idx
, &b
);
147 MOZ_ASSERT
(NS_SUCCEEDED
(rv
),
148 "Getting value failed, wrong column index?");