This source file includes following definitions.
- itemMethodCustom
#include "config.h"
#include "V8SQLResultSetRowList.h"
#include "bindings/v8/ExceptionMessages.h"
#include "bindings/v8/ExceptionState.h"
#include "bindings/v8/V8Binding.h"
#include "core/dom/ExceptionCode.h"
#include "modules/webdatabase/SQLResultSetRowList.h"
namespace WebCore {
void V8SQLResultSetRowList::itemMethodCustom(const v8::FunctionCallbackInfo<v8::Value>& info)
{
ExceptionState exceptionState(ExceptionState::ExecutionContext, "item", "SQLResultSetRowList", info.Holder(), info.GetIsolate());
if (!info.Length()) {
exceptionState.throwDOMException(SyntaxError, ExceptionMessages::notEnoughArguments(1, 0));
exceptionState.throwIfNeeded();
return;
}
if (!info[0]->IsNumber()) {
exceptionState.throwTypeError("The index provided is not a number.");
exceptionState.throwIfNeeded();
return;
}
SQLResultSetRowList* rowList = V8SQLResultSetRowList::toNative(info.Holder());
unsigned long index = info[0]->IntegerValue();
if (index >= rowList->length()) {
exceptionState.throwDOMException(IndexSizeError, ExceptionMessages::indexExceedsMaximumBound<unsigned>("index", index, rowList->length()));
exceptionState.throwIfNeeded();
return;
}
v8::Local<v8::Object> item = v8::Object::New(info.GetIsolate());
unsigned numColumns = rowList->columnNames().size();
unsigned valuesIndex = index * numColumns;
for (unsigned i = 0; i < numColumns; ++i) {
const SQLValue& sqlValue = rowList->values()[valuesIndex + i];
v8::Handle<v8::Value> value;
switch(sqlValue.type()) {
case SQLValue::StringValue:
value = v8String(info.GetIsolate(), sqlValue.string());
break;
case SQLValue::NullValue:
value = v8::Null(info.GetIsolate());
break;
case SQLValue::NumberValue:
value = v8::Number::New(info.GetIsolate(), sqlValue.number());
break;
default:
ASSERT_NOT_REACHED();
}
item->Set(v8String(info.GetIsolate(), rowList->columnNames()[i]), value, static_cast<v8::PropertyAttribute>(v8::DontDelete | v8::ReadOnly));
}
v8SetReturnValue(info, item);
}
}