/* * Class: org_postgresql_pljava_internal_TupleDesc * Method: _getOid * Signature: (JI)Lorg/postgresql/pljava/internal/Oid; */ JNIEXPORT jobject JNICALL Java_org_postgresql_pljava_internal_TupleDesc__1getOid(JNIEnv* env, jclass cls, jlong _this, jint index) { jobject result = 0; BEGIN_NATIVE Ptr2Long p2l; p2l.longVal = _this; PG_TRY(); { Oid typeId = SPI_gettypeid((TupleDesc)p2l.ptrVal, (int)index); if(!OidIsValid(typeId)) { Exception_throw(ERRCODE_INVALID_DESCRIPTOR_INDEX, "Invalid attribute index \"%d\"", (int)index); } else { result = Oid_create(typeId); } } PG_CATCH(); { Exception_throw_ERROR("SPI_gettypeid"); } PG_END_TRY(); END_NATIVE return result; }
/* * Class: org_postgresql_pljava_internal_AclId * Method: _fromName * Signature: (Ljava/lang/String;)Lorg/postgresql/pljava/internal/AclId; */ JNIEXPORT jobject JNICALL Java_org_postgresql_pljava_internal_AclId__1fromName(JNIEnv* env, jclass clazz, jstring jname) { jobject result = 0; if(jname != 0) { BEGIN_NATIVE PG_TRY(); { char* roleName = String_createNTS(jname); HeapTuple roleTup = SearchSysCache(AUTHNAME, PointerGetDatum(roleName), 0, 0, 0); if(!HeapTupleIsValid(roleTup)) ereport(ERROR, (errcode(ERRCODE_UNDEFINED_OBJECT), errmsg("role \"%s\" does not exist", roleName))); result = AclId_create(HeapTupleGetOid(roleTup)); ReleaseSysCache(roleTup); } PG_CATCH(); { Exception_throw_ERROR("SearchSysCache"); } PG_END_TRY(); END_NATIVE }
/* * Class: org_postgresql_pljava_internal_TupleDesc * Method: _getColumnIndex * Signature: (JLjava/lang/String;)I; */ JNIEXPORT jint JNICALL Java_org_postgresql_pljava_internal_TupleDesc__1getColumnIndex(JNIEnv* env, jclass cls, jlong _this, jstring colName) { jint result = 0; BEGIN_NATIVE char* name = String_createNTS(colName); if(name != 0) { Ptr2Long p2l; p2l.longVal = _this; PG_TRY(); { result = SPI_fnumber((TupleDesc)p2l.ptrVal, name); if(result == SPI_ERROR_NOATTRIBUTE) { Exception_throw(ERRCODE_UNDEFINED_COLUMN, "Tuple has no attribute \"%s\"", name); } pfree(name); } PG_CATCH(); { Exception_throw_ERROR("SPI_fnumber"); } PG_END_TRY(); } END_NATIVE return result; }
/* * Class: org_postgresql_pljava_internal_Backend * Method: _getConfigOption * Signature: (Ljava/lang/String;)Ljava/lang/String; */ JNIEXPORT jstring JNICALL JNICALL Java_org_postgresql_pljava_internal_Backend__1getConfigOption(JNIEnv* env, jclass cls, jstring jkey) { jstring result = 0; BEGIN_NATIVE char* key = String_createNTS(jkey); if(key != 0) { PG_TRY(); { const char *value = PG_GETCONFIGOPTION(key); pfree(key); if(value != 0) result = String_createJavaStringFromNTS(value); } PG_CATCH(); { Exception_throw_ERROR("GetConfigOption"); } PG_END_TRY(); } END_NATIVE return result; }
/* * Class: org_postgresql_pljava_internal_TupleDesc * Method: _getColumnName * Signature: (JI)Ljava/lang/String; */ JNIEXPORT jstring JNICALL Java_org_postgresql_pljava_internal_TupleDesc__1getColumnName(JNIEnv* env, jclass cls, jlong _this, jint index) { jstring result = 0; BEGIN_NATIVE PG_TRY(); { char* name; Ptr2Long p2l; p2l.longVal = _this; name = SPI_fname((TupleDesc)p2l.ptrVal, (int)index); if(name == 0) { Exception_throw(ERRCODE_INVALID_DESCRIPTOR_INDEX, "Invalid attribute index \"%d\"", (int)index); } else { result = String_createJavaStringFromNTS(name); pfree(name); } } PG_CATCH(); { Exception_throw_ERROR("SPI_fname"); } PG_END_TRY(); END_NATIVE return result; }
/* * Class: org_postgresql_pljava_internal_SPI * Method: _exec * Signature: (JLjava/lang/String;I)I */ JNIEXPORT jint JNICALL Java_org_postgresql_pljava_internal_SPI__1exec(JNIEnv* env, jclass cls, jlong threadId, jstring cmd, jint count) { jint result = 0; BEGIN_NATIVE char* command = String_createNTS(cmd); if(command != 0) { STACK_BASE_VARS STACK_BASE_PUSH(threadId) PG_TRY(); { Invocation_assertConnect(); result = (jint)SPI_exec(command, (int)count); if(result < 0) Exception_throwSPI("exec", result); } PG_CATCH(); { Exception_throw_ERROR("SPI_exec"); } PG_END_TRY(); pfree(command); STACK_BASE_POP() }
jobject HeapTupleHeader_getObject( JNIEnv* env, jlong hth, jlong jtd, jint attrNo, jclass rqcls) { jobject result = 0; HeapTupleHeader self = (HeapTupleHeader)Invocation_getWrappedPointer(hth); if(self != 0 && jtd != 0) { Ptr2Long p2l; p2l.longVal = jtd; BEGIN_NATIVE PG_TRY(); { Type type = TupleDesc_getColumnType( (TupleDesc) p2l.ptrVal, (int) attrNo); if (type != 0) { Datum binVal; bool wasNull = false; binVal = GetAttributeByNum(self, (AttrNumber)attrNo, &wasNull); if(!wasNull) result = Type_coerceDatumAs(type, binVal, rqcls).l; } } PG_CATCH(); { Exception_throw_ERROR("GetAttributeByNum"); } PG_END_TRY(); END_NATIVE }
/* * Class: org_postgresql_pljava_internal_TupleDesc * Method: _formTuple * Signature: (J[Ljava/lang/Object;)Lorg/postgresql/pljava/internal/Tuple; */ JNIEXPORT jobject JNICALL Java_org_postgresql_pljava_internal_TupleDesc__1formTuple(JNIEnv* env, jclass cls, jlong _this, jobjectArray jvalues) { jobject result = 0; BEGIN_NATIVE Ptr2Long p2l; p2l.longVal = _this; PG_TRY(); { jint idx; HeapTuple tuple; MemoryContext curr; TupleDesc self = (TupleDesc)p2l.ptrVal; int count = self->natts; Datum* values = (Datum*)palloc(count * sizeof(Datum)); char* nulls = palloc(count); jobject typeMap = Invocation_getTypeMap(); memset(values, 0, count * sizeof(Datum)); memset(nulls, 'n', count); /* all values null initially */ for(idx = 0; idx < count; ++idx) { jobject value = JNI_getObjectArrayElement(jvalues, idx); if(value != 0) { Type type = Type_fromOid(SPI_gettypeid(self, idx + 1), typeMap); values[idx] = Type_coerceObject(type, value); nulls[idx] = ' '; } } curr = MemoryContextSwitchTo(JavaMemoryContext); tuple = heap_formtuple(self, values, nulls); result = Tuple_internalCreate(tuple, false); MemoryContextSwitchTo(curr); pfree(values); pfree(nulls); } PG_CATCH(); { Exception_throw_ERROR("heap_formtuple"); } PG_END_TRY(); END_NATIVE return result; }
/* * Class: org_postgresql_pljava_internal_LargeObject * Method: _open * Signature: (Lorg/postgresql/pljava/internal/Oid;I)Lorg/postgresql/pljava/internal/LargeObject; */ JNIEXPORT jobject JNICALL Java_org_postgresql_pljava_internal_LargeObject__1open(JNIEnv* env, jclass cls, jobject oid, jint flags) { jobject result = 0; BEGIN_NATIVE PG_TRY(); { result = LargeObject_create(inv_open(Oid_getOid(oid), (int)flags, JavaMemoryContext)); } PG_CATCH(); { Exception_throw_ERROR("inv_open"); } PG_END_TRY(); END_NATIVE return result; }
/* * Class: org_postgresql_pljava_internal_LargeObject * Method: _drop * Signature: (Lorg/postgresql/pljava/internal/Oid;)I */ JNIEXPORT jint JNICALL Java_org_postgresql_pljava_internal_LargeObject__1drop(JNIEnv* env, jclass cls, jobject oid) { jint result = -1; BEGIN_NATIVE PG_TRY(); { result = inv_drop(Oid_getOid(oid)); } PG_CATCH(); { Exception_throw_ERROR("inv_drop"); } PG_END_TRY(); END_NATIVE return result; }
/* * Class: org_postgresql_pljava_internal_AclId * Method: _getUser * Signature: ()Lorg/postgresql/pljava/internal/AclId; */ JNIEXPORT jobject JNICALL Java_org_postgresql_pljava_internal_AclId__1getUser(JNIEnv* env, jclass clazz) { jobject result = 0; BEGIN_NATIVE PG_TRY(); { result = AclId_create(GetUserId()); } PG_CATCH(); { Exception_throw_ERROR("GetUserId"); } PG_END_TRY(); END_NATIVE return result; }
/* * Class: org_postgresql_pljava_internal_Backend * Method: _getLibraryPath * Signature: ()Ljava/lang/String; */ JNIEXPORT jstring JNICALL JNICALL Java_org_postgresql_pljava_internal_Backend__1getLibraryPath(JNIEnv* env, jclass cls) { jstring result = 0; BEGIN_NATIVE PG_TRY(); { result = String_createJavaStringFromNTS(pkglib_path); } PG_CATCH(); { Exception_throw_ERROR("GetLibraryPath"); } PG_END_TRY(); END_NATIVE return result; }
/* * Class: org_postgresql_pljava_internal_LargeObject * Method: _close * Signature: (J)V */ JNIEXPORT void JNICALL Java_org_postgresql_pljava_internal_LargeObject__1close(JNIEnv* env, jclass cls, jlong _this) { LargeObjectDesc* self = Invocation_getWrappedPointer(_this); if(self != 0) { BEGIN_NATIVE PG_TRY(); { inv_close(self); } PG_CATCH(); { Exception_throw_ERROR("inv_close"); } PG_END_TRY(); END_NATIVE }
/* * Class: org_postgresql_pljava_internal_LargeObject * Method: _create * Signature: (I)Lorg/postgresql/pljava/internal/LargeObject; */ JNIEXPORT jobject JNICALL Java_org_postgresql_pljava_internal_LargeObject__1create(JNIEnv* env, jclass cls, jint flags) { jobject result = 0; BEGIN_NATIVE PG_TRY(); { result = Oid_create(inv_create((int)flags)); } PG_CATCH(); { Exception_throw_ERROR("inv_create"); } PG_END_TRY(); END_NATIVE return result; }
/* * Class: org_postgresql_pljava_internal_Backend * Method: _log * Signature: (ILjava/lang/String;)V */ JNIEXPORT void JNICALL JNICALL Java_org_postgresql_pljava_internal_Backend__1log(JNIEnv* env, jclass cls, jint logLevel, jstring jstr) { BEGIN_NATIVE_NO_ERRCHECK char* str = String_createNTS(jstr); if(str != 0) { PG_TRY(); { elog(logLevel, "%s", str); pfree(str); } PG_CATCH(); { Exception_throw_ERROR("ereport"); } PG_END_TRY(); } END_NATIVE }
/* * Class: org_postgresql_pljava_internal_Relation * Method: _getName * Signature: (J)Ljava/lang/String; */ JNIEXPORT jstring JNICALL Java_org_postgresql_pljava_internal_Relation__1getName(JNIEnv* env, jclass clazz, jlong _this) { jstring result = 0; Relation self = Invocation_getWrappedPointer(_this); if(self != 0) { BEGIN_NATIVE PG_TRY(); { char* relName = SPI_getrelname(self); result = String_createJavaStringFromNTS(relName); pfree(relName); } PG_CATCH(); { Exception_throw_ERROR("SPI_getrelname"); } PG_END_TRY(); END_NATIVE }
jobject Tuple_getObject(TupleDesc tupleDesc, HeapTuple tuple, int index, jclass rqcls) { jobject result = 0; PG_TRY(); { Type type = TupleDesc_getColumnType(tupleDesc, index); if(type != 0) { bool wasNull = false; Datum binVal = SPI_getbinval(tuple, tupleDesc, (int)index, &wasNull); if(!wasNull) result = Type_coerceDatumAs(type, binVal, rqcls).l; } } PG_CATCH(); { Exception_throw_ERROR("SPI_getbinval"); } PG_END_TRY(); return result; }