static Datum _doubleArray_coerceObject(Type self, jobject doubleArray) { ArrayType* v; jsize nElems; if(doubleArray == 0) return 0; nElems = JNI_getArrayLength((jarray)doubleArray); #if (PGSQL_MAJOR_VER == 8 && PGSQL_MINOR_VER < 2) v = createArrayType(nElems, sizeof(jdouble), FLOAT8OID); #else v = createArrayType(nElems, sizeof(jdouble), FLOAT8OID, false); #endif if(!JNI_isInstanceOf( doubleArray, s_DoubleArray_class)) JNI_getDoubleArrayRegion((jdoubleArray)doubleArray, 0, nElems, (jdouble*)ARR_DATA_PTR(v)); else { int idx = 0; jdouble *array = (jdouble*)ARR_DATA_PTR(v); for(idx = 0; idx < nElems; ++idx) { array[idx] = JNI_callDoubleMethod(JNI_getObjectArrayElement(doubleArray, idx), s_Double_doubleValue); } } PG_RETURN_ARRAYTYPE_P(v); }
static Datum _booleanArray_coerceObject(Type self, jobject booleanArray) { ArrayType* v; jsize nElems; if(booleanArray == 0) return 0; nElems = JNI_getArrayLength((jarray)booleanArray); v = createArrayType(nElems, sizeof(jboolean), BOOLOID, false); JNI_getBooleanArrayRegion((jbooleanArray)booleanArray, 0, nElems, (jboolean*)ARR_DATA_PTR(v)); PG_RETURN_ARRAYTYPE_P(v); }
static Datum _intArray_coerceObject(Type self, jobject intArray) { ArrayType* v; jsize nElems; if(intArray == 0) return 0; nElems = JNI_getArrayLength((jarray)intArray); v = createArrayType(nElems, sizeof(jint), INT4OID, false); JNI_getIntArrayRegion((jintArray)intArray, 0, nElems, (jint*)ARR_DATA_PTR(v)); PG_RETURN_ARRAYTYPE_P(v); }