int V8Scope::type( const char *field ){ V8_SIMPLE_HEADER Handle<Value> v = get( field ); if ( v->IsNull() ) return jstNULL; if ( v->IsUndefined() ) return Undefined; if ( v->IsString() ) return String; if ( v->IsFunction() ) return Code; if ( v->IsArray() ) return Array; if ( v->IsBoolean() ) return Bool; if ( v->IsInt32() ) return NumberInt; if ( v->IsNumber() ) return NumberDouble; if ( v->IsExternal() ){ uassert( 10230 , "can't handle external yet" , 0 ); return -1; } if ( v->IsDate() ) return Date; if ( v->IsObject() ) return Object; throw UserException( 12509, (string)"don't know what this is: " + field ); }
int Conv::GetNaturalType(Handle<Object> val) { if(val.IsEmpty()) return TYPE_INVALID; if(val->IsDate()) return TYPE_DATE; if(val->IsFunction()) return TYPE_FUNCTION; if(val->IsArray()) return TYPE_ARRAY; if(val->IsObject()) return TYPE_OBJECT; return TYPE_INVALID; }
/* DESCRIPTION Processing each bind varible PARAMETERS: Handle value, eBaton struct */ void Connection::GetBindUnit (Handle<Value> val, Bind* bind, eBaton* executeBaton) { HandleScope scope; unsigned int dir = BIND_IN; if(val->IsObject() && !val->IsDate()) { Local<Object> bind_unit = val->ToObject(); NJS_GET_UINT_FROM_JSON ( dir, executeBaton->error, bind_unit, "dir", 1, exitGetBindUnit ); NJS_GET_UINT_FROM_JSON ( bind->type, executeBaton->error, bind_unit, "type", 1, exitGetBindUnit ); bind->maxSize = NJS_MAX_OUT_BIND_SIZE; NJS_GET_UINT_FROM_JSON ( bind->maxSize, executeBaton->error, bind_unit, "maxSize", 1, exitGetBindUnit ); if(!bind->maxSize && dir != BIND_IN) { executeBaton->error = NJSMessages::getErrorMsg ( errInvalidPropertyValueInParam, "maxSize", 2 ); goto exitGetBindUnit; } Local<Value> element = bind_unit->Get(String::New("val")); switch(dir) { case BIND_IN : bind->isOut = false; Connection::GetInBindParams(element, bind, executeBaton, BIND_IN ); if(!executeBaton->error.empty()) goto exitGetBindUnit; break; case BIND_INOUT : bind->isOut = true; Connection::GetInBindParams(element, bind, executeBaton, BIND_INOUT); if(!executeBaton->error.empty()) goto exitGetBindUnit; break; case BIND_OUT : bind->isOut = true; bind->ind = 0; Connection::GetOutBindParams(bind->type, bind, executeBaton); if(!executeBaton->error.empty()) goto exitGetBindUnit; break; default : executeBaton->error = NJSMessages::getErrorMsg (errInvalidBindDirection); goto exitGetBindUnit; break; } } else { bind->isOut = false; Connection::GetInBindParams(val, bind, executeBaton, BIND_IN); if(!executeBaton->error.empty()) goto exitGetBindUnit; } exitGetBindUnit: ; }
int Conv::ToJavaDate(JNIEnv *jniEnv, Handle<Value> val, jobject *jVal) { double dateTime; if(val->IsDate()) { dateTime = Date::Cast(*val)->NumberValue(); } else { dateTime = val->NumberValue(); } jobject ob = jniEnv->NewObject(jni.java.util.Date.class_, jni.java.util.Date.ctor, (jlong)dateTime); if(ob) { *jVal = ob; return OK; } if(jniEnv->ExceptionCheck()) jniEnv->ExceptionClear(); return ErrorVM; }
int TiUtils::getDateTime(Handle<Value> value, QDateTime& dt) { if ((value.IsEmpty()) || (!value->IsDate())) { return NATIVE_ERROR_INVALID_ARG; } unsigned int year = 0, month = 0, day = 0; Local<Object> object = Object::Cast(*value); // Get year from date Local<Value> getYear_prop = (object->Get(String::New("getFullYear"))); if (getYear_prop->IsFunction()) { Local<Function> getYear_func = Function::Cast(*getYear_prop); Local<Value> yearValue = getYear_func->Call(object, 0, NULL); year = yearValue->NumberValue(); } // Get month from date Local<Value> getMonth_prop = (object->Get(String::New("getMonth"))); if (getMonth_prop->IsFunction()) { Local<Function> getMonth_func = Function::Cast(*getMonth_prop); Local<Value> monthValue = getMonth_func->Call(object, 0, NULL); month = monthValue->NumberValue(); } // Get day property Local<Value> getDay_prop = (object->Get(String::New("getDate"))); if (getDay_prop->IsFunction()) { Local<Function> getDay_func = Function::Cast(*getDay_prop); Local<Value> dayValue = getDay_func->Call(object, 0, NULL); day = dayValue->NumberValue(); } dt.setDate(QDate(year, month, day)); return NATIVE_ERROR_OK; }
VALUE rr_v82rb(Handle<Value> value) { if (value.IsEmpty()) { return rr_v8_value_empty(); } if (value->IsUndefined() || value->IsNull()) { return Qnil; } if (value->IsExternal()) { return rr_reflect_v8_external(value); } if (value->IsUint32()) { return UINT2NUM(value->Uint32Value()); } if (value->IsInt32()) { return INT2FIX(value->Int32Value()); } if (value->IsBoolean()) { return value->BooleanValue() ? Qtrue : Qfalse; } if (value->IsNumber()) { return rb_float_new(value->NumberValue()); } if (value->IsString()) { return rr_reflect_v8_string(value); } if (value->IsFunction()) { return rr_reflect_v8_function(value); } if (value->IsArray()) { return rr_reflect_v8_array(value); } if (value->IsDate()) { return rr_reflect_v8_date(value); } if (value->IsObject()) { return rr_reflect_v8_object(value); } return rr_wrap_v8_value(value); }
jsvalue JsEngine::AnyFromV8(Handle<Value> value, Handle<Object> thisArg) { jsvalue v; // Initialize to a generic error. v.type = JSVALUE_TYPE_UNKNOWN_ERROR; v.length = 0; v.value.str = 0; if (value->IsNull() || value->IsUndefined()) { v.type = JSVALUE_TYPE_NULL; } else if (value->IsBoolean()) { v.type = JSVALUE_TYPE_BOOLEAN; v.value.i32 = value->BooleanValue() ? 1 : 0; } else if (value->IsInt32()) { v.type = JSVALUE_TYPE_INTEGER; v.value.i32 = value->Int32Value(); } else if (value->IsUint32()) { v.type = JSVALUE_TYPE_INDEX; v.value.i64 = value->Uint32Value(); } else if (value->IsNumber()) { v.type = JSVALUE_TYPE_NUMBER; v.value.num = value->NumberValue(); } else if (value->IsString()) { v = StringFromV8(value); } else if (value->IsDate()) { v.type = JSVALUE_TYPE_DATE; v.value.num = value->NumberValue(); } else if (value->IsArray()) { Handle<Array> object = Handle<Array>::Cast(value->ToObject()); v.length = object->Length(); jsvalue* array = new jsvalue[v.length]; if (array != NULL) { for(int i = 0; i < v.length; i++) { array[i] = AnyFromV8(object->Get(i)); } v.type = JSVALUE_TYPE_ARRAY; v.value.arr = array; } } else if (value->IsFunction()) { Handle<Function> function = Handle<Function>::Cast(value); jsvalue* array = new jsvalue[2]; if (array != NULL) { array[0].value.ptr = new Persistent<Object>(Persistent<Function>::New(function)); array[0].length = 0; array[0].type = JSVALUE_TYPE_WRAPPED; if (!thisArg.IsEmpty()) { array[1].value.ptr = new Persistent<Object>(Persistent<Object>::New(thisArg)); array[1].length = 0; array[1].type = JSVALUE_TYPE_WRAPPED; } else { array[1].value.ptr = NULL; array[1].length = 0; array[1].type = JSVALUE_TYPE_NULL; } v.type = JSVALUE_TYPE_FUNCTION; v.value.arr = array; } } else if (value->IsObject()) { Handle<Object> obj = Handle<Object>::Cast(value); if (obj->InternalFieldCount() == 1) v = ManagedFromV8(obj); else v = WrappedFromV8(obj); } return v; }
/* DESCRIPTION Processing in binds PARAMETERS: Handle value, bind struct, eBaton struct */ void Connection::GetInBindParams (Handle<Value> v8val, Bind* bind, eBaton* executeBaton, BindType type) { bind->ind = 0; if(v8val->IsUndefined() || v8val->IsNull()) { bind->value = NULL; bind->ind = -1; bind->type = dpi::DpiVarChar; } else if(v8val->IsString()) { if( bind->type && bind->type != DATA_STR ) { executeBaton->error= NJSMessages::getErrorMsg( errBindValueAndTypeMismatch, 2); goto exitGetInBindParams; } v8::String::Utf8Value str(v8val->ToString()); bind->type = dpi::DpiVarChar; if(type == BIND_INOUT) { bind->len = str.length(); } else // IN { bind->maxSize = bind->len = str.length(); } DPI_SZ_TYPE size = (bind->maxSize >= bind->len ) ? bind->maxSize : bind->len; if(size) { bind->value = (char*)malloc(size); if(str.length()) memcpy(bind->value, *str, str.length()); } } else if(v8val->IsInt32()) { if( bind->type && bind->type != DATA_NUM ) { executeBaton->error= NJSMessages::getErrorMsg( errBindValueAndTypeMismatch, 2); goto exitGetInBindParams; } bind->type = dpi::DpiInteger; bind->maxSize = bind->len = sizeof(int); bind->value = (int*)malloc(bind->len); *(int*)(bind->value) = v8val->ToInt32()->Value(); } else if(v8val->IsUint32()) { if( bind->type && bind->type != DATA_NUM ) { executeBaton->error= NJSMessages::getErrorMsg( errBindValueAndTypeMismatch, 2); goto exitGetInBindParams; } bind->type = dpi::DpiUnsignedInteger; bind->maxSize = bind->len = sizeof(unsigned int); bind->value = (unsigned int*)malloc(bind->len); *(unsigned int*)(bind->value) = v8val->ToUint32()->Value(); } else if(v8val->IsNumber()) { if( bind->type && bind->type != DATA_NUM ) { executeBaton->error= NJSMessages::getErrorMsg(errBindValueAndTypeMismatch, 2); goto exitGetInBindParams; } bind->type = dpi::DpiDouble; bind->maxSize = bind->len = sizeof(double); bind->value = (double*)malloc(bind->len); *(double*)(bind->value) = v8val->NumberValue(); } else if(v8val->IsDate ()) { if( bind->type && bind->type != DATA_DATE ) { executeBaton->error= NJSMessages::getErrorMsg(errBindValueAndTypeMismatch, 2); goto exitGetInBindParams; } /* This has to be allocated after stmt is initialized */ bind->dttmarr = NULL ; bind->extvalue = (long double *) malloc (sizeof ( long double ) ); bind->value = (long double *)malloc (sizeof ( long double )); bind->type = dpi::DpiTimestampLTZ; bind->len = 0; bind->maxSize = 0; /* Convert v8::Date value to long double */ Connection::v8Date2OraDate ( v8val, bind); } else { executeBaton->error= NJSMessages::getErrorMsg(errInvalidBindDataType,2); goto exitGetInBindParams; } executeBaton->binds.push_back(bind); exitGetInBindParams: ; }