NS_IMETHODIMP Row::GetInt64(uint32_t aIndex, int64_t *_value) { ENSURE_INDEX_VALUE(aIndex, mNumCols); return mData.ObjectAt(aIndex)->GetAsInt64(_value); }
NS_IMETHODIMP Row::GetTypeOfIndex(uint32_t aIndex, int32_t *_type) { ENSURE_INDEX_VALUE(aIndex, mNumCols); uint16_t type; (void)mData.ObjectAt(aIndex)->GetDataType(&type); switch (type) { case nsIDataType::VTYPE_INT32: case nsIDataType::VTYPE_INT64: *_type = mozIStorageValueArray::VALUE_TYPE_INTEGER; break; case nsIDataType::VTYPE_DOUBLE: *_type = mozIStorageValueArray::VALUE_TYPE_FLOAT; break; case nsIDataType::VTYPE_ASTRING: *_type = mozIStorageValueArray::VALUE_TYPE_TEXT; break; case nsIDataType::VTYPE_ARRAY: *_type = mozIStorageValueArray::VALUE_TYPE_BLOB; break; default: *_type = mozIStorageValueArray::VALUE_TYPE_NULL; break; } return NS_OK; }
NS_IMETHODIMP Row::GetString(uint32_t aIndex, nsAString &_value) { ENSURE_INDEX_VALUE(aIndex, mNumCols); return mData.ObjectAt(aIndex)->GetAsAString(_value); }
NS_IMETHODIMP Row::GetDouble(uint32_t aIndex, double *_value) { ENSURE_INDEX_VALUE(aIndex, mNumCols); return mData.ObjectAt(aIndex)->GetAsDouble(_value); }
NS_IMETHODIMP Row::GetInt32(PRUint32 aIndex, PRInt32 *_value) { ENSURE_INDEX_VALUE(aIndex, mNumCols); return mData.ObjectAt(aIndex)->GetAsInt32(_value); }
NS_IMETHODIMP Row::GetUTF8String(PRUint32 aIndex, nsACString &_value) { ENSURE_INDEX_VALUE(aIndex, mNumCols); return mData.ObjectAt(aIndex)->GetAsAUTF8String(_value); }
NS_IMETHODIMP Statement::GetTypeOfIndex(uint32_t aIndex, int32_t *_type) { if (!mDBStatement) return NS_ERROR_NOT_INITIALIZED; ENSURE_INDEX_VALUE(aIndex, mResultColumnCount); if (!mExecuting) return NS_ERROR_UNEXPECTED; int t = ::sqlite3_column_type(mDBStatement, aIndex); switch (t) { case SQLITE_INTEGER: *_type = mozIStorageStatement::VALUE_TYPE_INTEGER; break; case SQLITE_FLOAT: *_type = mozIStorageStatement::VALUE_TYPE_FLOAT; break; case SQLITE_TEXT: *_type = mozIStorageStatement::VALUE_TYPE_TEXT; break; case SQLITE_BLOB: *_type = mozIStorageStatement::VALUE_TYPE_BLOB; break; case SQLITE_NULL: *_type = mozIStorageStatement::VALUE_TYPE_NULL; break; default: return NS_ERROR_FAILURE; } return NS_OK; }
NS_IMETHODIMP ArgValueArray::GetDouble(uint32_t aIndex, double *_value) { ENSURE_INDEX_VALUE(aIndex, mArgc); *_value = ::sqlite3_value_double(mArgv[aIndex]); return NS_OK; }
NS_IMETHODIMP ArgValueArray::GetInt64(uint32_t aIndex, int64_t *_value) { ENSURE_INDEX_VALUE(aIndex, mArgc); *_value = ::sqlite3_value_int64(mArgv[aIndex]); return NS_OK; }
NS_IMETHODIMP BindingParams::BindByIndex(uint32_t aIndex, nsIVariant *aValue) { NS_ENSURE_FALSE(mLocked, NS_ERROR_UNEXPECTED); ENSURE_INDEX_VALUE(aIndex, mParamCount); // Store the variant for later use. NS_ENSURE_TRUE(mParameters.ReplaceObjectAt(aValue, aIndex), NS_ERROR_OUT_OF_MEMORY); return NS_OK; }
NS_IMETHODIMP Statement::GetColumnDecltype(uint32_t aParamIndex, nsACString &_declType) { if (!mDBStatement) return NS_ERROR_NOT_INITIALIZED; ENSURE_INDEX_VALUE(aParamIndex, mResultColumnCount); _declType.Assign(::sqlite3_column_decltype(mDBStatement, aParamIndex)); return NS_OK; }
NS_IMETHODIMP Row::GetIsNull(uint32_t aIndex, bool *_isNull) { ENSURE_INDEX_VALUE(aIndex, mNumCols); NS_ENSURE_ARG_POINTER(_isNull); uint16_t type; (void)mData.ObjectAt(aIndex)->GetDataType(&type); *_isNull = type == nsIDataType::VTYPE_EMPTY; return NS_OK; }
NS_IMETHODIMP Row::GetBlob(uint32_t aIndex, uint32_t *_size, uint8_t **_blob) { ENSURE_INDEX_VALUE(aIndex, mNumCols); uint16_t type; nsIID interfaceIID; return mData.ObjectAt(aIndex)->GetAsArray(&type, &interfaceIID, _size, reinterpret_cast<void **>(_blob)); }
NS_IMETHODIMP Statement::GetColumnName(uint32_t aColumnIndex, nsACString &_name) { if (!mDBStatement) return NS_ERROR_NOT_INITIALIZED; ENSURE_INDEX_VALUE(aColumnIndex, mResultColumnCount); const char *cname = ::sqlite3_column_name(mDBStatement, aColumnIndex); _name.Assign(nsDependentCString(cname)); return NS_OK; }
NS_IMETHODIMP ArgValueArray::GetBlob(uint32_t aIndex, uint32_t *_size, uint8_t **_blob) { ENSURE_INDEX_VALUE(aIndex, mArgc); int size = ::sqlite3_value_bytes(mArgv[aIndex]); void *blob = nsMemory::Clone(::sqlite3_value_blob(mArgv[aIndex]), size); NS_ENSURE_TRUE(blob, NS_ERROR_OUT_OF_MEMORY); *_blob = static_cast<uint8_t *>(blob); *_size = size; return NS_OK; }
NS_IMETHODIMP Statement::GetInt32(uint32_t aIndex, int32_t *_value) { if (!mDBStatement) return NS_ERROR_NOT_INITIALIZED; ENSURE_INDEX_VALUE(aIndex, mResultColumnCount); if (!mExecuting) return NS_ERROR_UNEXPECTED; *_value = ::sqlite3_column_int(mDBStatement, aIndex); return NS_OK; }
NS_IMETHODIMP ArgValueArray::GetString(uint32_t aIndex, nsAString &_value) { ENSURE_INDEX_VALUE(aIndex, mArgc); if (::sqlite3_value_type(mArgv[aIndex]) == SQLITE_NULL) { // NULL columns should have IsVoid set to distinguish them from an empty // string. _value.Truncate(0); _value.SetIsVoid(true); } else { _value.Assign(static_cast<const char16_t *>(::sqlite3_value_text16(mArgv[aIndex])), ::sqlite3_value_bytes16(mArgv[aIndex]) / 2); } return NS_OK; }
NS_IMETHODIMP BindingParams::BindByIndex(uint32_t aIndex, nsIVariant *aValue) { NS_ENSURE_FALSE(mLocked, NS_ERROR_UNEXPECTED); ENSURE_INDEX_VALUE(aIndex, mParamCount); // Store the variant for later use. RefPtr<Variant_base> variant = convertVariantToStorageVariant(aValue); if (!variant) return NS_ERROR_UNEXPECTED; if (mParameters.Length() <= aIndex) { (void)mParameters.SetLength(aIndex); (void)mParameters.AppendElement(variant); } else { NS_ENSURE_TRUE(mParameters.ReplaceElementAt(aIndex, variant), NS_ERROR_OUT_OF_MEMORY); } return NS_OK; }
NS_IMETHODIMP Statement::GetParameterName(uint32_t aParamIndex, nsACString &_name) { if (!mDBStatement) return NS_ERROR_NOT_INITIALIZED; ENSURE_INDEX_VALUE(aParamIndex, mParamCount); const char *name = ::sqlite3_bind_parameter_name(mDBStatement, aParamIndex + 1); if (name == nullptr) { // this thing had no name, so fake one nsAutoCString name(":"); name.AppendInt(aParamIndex); _name.Assign(name); } else { _name.Assign(nsDependentCString(name)); } return NS_OK; }
NS_IMETHODIMP Statement::GetBlob(uint32_t aIndex, uint32_t *_size, uint8_t **_blob) { if (!mDBStatement) return NS_ERROR_NOT_INITIALIZED; ENSURE_INDEX_VALUE(aIndex, mResultColumnCount); if (!mExecuting) return NS_ERROR_UNEXPECTED; int size = ::sqlite3_column_bytes(mDBStatement, aIndex); void *blob = nullptr; if (size) { blob = nsMemory::Clone(::sqlite3_column_blob(mDBStatement, aIndex), size); NS_ENSURE_TRUE(blob, NS_ERROR_OUT_OF_MEMORY); } *_blob = static_cast<uint8_t *>(blob); *_size = size; return NS_OK; }