19b5730f6SAndrew Rist /************************************************************** 2cdf0e10cSrcweir * 39b5730f6SAndrew Rist * Licensed to the Apache Software Foundation (ASF) under one 49b5730f6SAndrew Rist * or more contributor license agreements. See the NOTICE file 59b5730f6SAndrew Rist * distributed with this work for additional information 69b5730f6SAndrew Rist * regarding copyright ownership. The ASF licenses this file 79b5730f6SAndrew Rist * to you under the Apache License, Version 2.0 (the 89b5730f6SAndrew Rist * "License"); you may not use this file except in compliance 99b5730f6SAndrew Rist * with the License. You may obtain a copy of the License at 10cdf0e10cSrcweir * 119b5730f6SAndrew Rist * http://www.apache.org/licenses/LICENSE-2.0 12cdf0e10cSrcweir * 139b5730f6SAndrew Rist * Unless required by applicable law or agreed to in writing, 149b5730f6SAndrew Rist * software distributed under the License is distributed on an 159b5730f6SAndrew Rist * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 169b5730f6SAndrew Rist * KIND, either express or implied. See the License for the 179b5730f6SAndrew Rist * specific language governing permissions and limitations 189b5730f6SAndrew Rist * under the License. 19cdf0e10cSrcweir * 209b5730f6SAndrew Rist *************************************************************/ 219b5730f6SAndrew Rist 229b5730f6SAndrew Rist 23cdf0e10cSrcweir 24cdf0e10cSrcweir // MARKER(update_precomp.py): autogen include statement, do not remove 25cdf0e10cSrcweir #include "precompiled_connectivity.hxx" 26cdf0e10cSrcweir #include "java/sql/Clob.hxx" 27cdf0e10cSrcweir #include "java/tools.hxx" 28cdf0e10cSrcweir #include "java/io/Reader.hxx" 29cdf0e10cSrcweir #include <connectivity/dbexception.hxx> 30cdf0e10cSrcweir #include <rtl/logfile.hxx> 31cdf0e10cSrcweir 32cdf0e10cSrcweir using namespace connectivity; 33cdf0e10cSrcweir //************************************************************** 34cdf0e10cSrcweir //************ Class: java.sql.Clob 35cdf0e10cSrcweir //************************************************************** 36cdf0e10cSrcweir 37cdf0e10cSrcweir jclass java_sql_Clob::theClass = 0; 38cdf0e10cSrcweir 39cdf0e10cSrcweir java_sql_Clob::java_sql_Clob( JNIEnv * pEnv, jobject myObj ) 40cdf0e10cSrcweir : java_lang_Object( pEnv, myObj ) 41cdf0e10cSrcweir { 42cdf0e10cSrcweir SDBThreadAttach::addRef(); 43cdf0e10cSrcweir } 44cdf0e10cSrcweir java_sql_Clob::~java_sql_Clob() 45cdf0e10cSrcweir { 46cdf0e10cSrcweir SDBThreadAttach::releaseRef(); 47cdf0e10cSrcweir } 48cdf0e10cSrcweir 49cdf0e10cSrcweir jclass java_sql_Clob::getMyClass() const 50cdf0e10cSrcweir { 51cdf0e10cSrcweir // die Klasse muss nur einmal geholt werden, daher statisch 52cdf0e10cSrcweir if( !theClass ) 53cdf0e10cSrcweir theClass = findMyClass("java/sql/Clob"); 54cdf0e10cSrcweir return theClass; 55cdf0e10cSrcweir } 56cdf0e10cSrcweir 57cdf0e10cSrcweir sal_Int64 SAL_CALL java_sql_Clob::length( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException) 58cdf0e10cSrcweir { 59cdf0e10cSrcweir RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "jdbc", "Ocke.Janssen@sun.com", "java_sql_Clob::length" ); 60cdf0e10cSrcweir jlong out(0); 61*a3cdc23eSJohn Bampton SDBThreadAttach t; OSL_ENSURE(t.pEnv,"Java Environment been deleted!"); 62cdf0e10cSrcweir 63cdf0e10cSrcweir { 64cdf0e10cSrcweir // temporaere Variable initialisieren 65cdf0e10cSrcweir static const char * cSignature = "()J"; 66cdf0e10cSrcweir static const char * cMethodName = "length"; 67cdf0e10cSrcweir // Java-Call absetzen 68cdf0e10cSrcweir static jmethodID mID(NULL); 69cdf0e10cSrcweir obtainMethodId(t.pEnv, cMethodName,cSignature, mID); 70cdf0e10cSrcweir out = t.pEnv->CallLongMethod( object, mID ); 71cdf0e10cSrcweir ThrowSQLException(t.pEnv,*this); 72cdf0e10cSrcweir } //t.pEnv 73cdf0e10cSrcweir return (sal_Int64)out; 74cdf0e10cSrcweir } 75cdf0e10cSrcweir 76cdf0e10cSrcweir ::rtl::OUString SAL_CALL java_sql_Clob::getSubString( sal_Int64 pos, sal_Int32 subStringLength ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException) 77cdf0e10cSrcweir { 78cdf0e10cSrcweir RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "jdbc", "Ocke.Janssen@sun.com", "java_sql_Clob::getSubString" ); 79*a3cdc23eSJohn Bampton SDBThreadAttach t; OSL_ENSURE(t.pEnv,"Java Environment been deleted!"); 80cdf0e10cSrcweir ::rtl::OUString aStr; 81cdf0e10cSrcweir { 82cdf0e10cSrcweir // temporaere Variable initialisieren 83cdf0e10cSrcweir static const char * cSignature = "(JI)Ljava/lang/String;"; 84cdf0e10cSrcweir static const char * cMethodName = "getSubString"; 85cdf0e10cSrcweir // Java-Call absetzen 86cdf0e10cSrcweir static jmethodID mID(NULL); 87cdf0e10cSrcweir obtainMethodId(t.pEnv, cMethodName,cSignature, mID); 88cdf0e10cSrcweir jstring out = (jstring)t.pEnv->CallObjectMethod( object, mID,pos,subStringLength); 89cdf0e10cSrcweir ThrowSQLException(t.pEnv,*this); 90cdf0e10cSrcweir aStr = JavaString2String(t.pEnv,out); 91cdf0e10cSrcweir } //t.pEnv 92cdf0e10cSrcweir // ACHTUNG: der Aufrufer wird Eigentuemer des zurueckgelieferten Zeigers !!! 93cdf0e10cSrcweir return aStr; 94cdf0e10cSrcweir } 95cdf0e10cSrcweir 96cdf0e10cSrcweir ::com::sun::star::uno::Reference< ::com::sun::star::io::XInputStream > SAL_CALL java_sql_Clob::getCharacterStream( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException) 97cdf0e10cSrcweir { 98cdf0e10cSrcweir RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "jdbc", "Ocke.Janssen@sun.com", "java_sql_Clob::getCharacterStream" ); 99cdf0e10cSrcweir SDBThreadAttach t; 100cdf0e10cSrcweir static jmethodID mID(NULL); 101cdf0e10cSrcweir jobject out = callObjectMethod(t.pEnv,"getCharacterStream","()Ljava/io/Reader;", mID); 102cdf0e10cSrcweir 103cdf0e10cSrcweir // ACHTUNG: der Aufrufer wird Eigentuemer des zurueckgelieferten Zeigers !!! 104cdf0e10cSrcweir return out==0 ? 0 : new java_io_Reader( t.pEnv, out ); 105cdf0e10cSrcweir } 106cdf0e10cSrcweir 107cdf0e10cSrcweir sal_Int64 SAL_CALL java_sql_Clob::position( const ::rtl::OUString& searchstr, sal_Int32 start ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException) 108cdf0e10cSrcweir { 109cdf0e10cSrcweir RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "jdbc", "Ocke.Janssen@sun.com", "java_sql_Clob::position" ); 110cdf0e10cSrcweir jlong out(0); 111*a3cdc23eSJohn Bampton SDBThreadAttach t; OSL_ENSURE(t.pEnv,"Java Environment been deleted!"); 112cdf0e10cSrcweir 113cdf0e10cSrcweir { 114cdf0e10cSrcweir jvalue args[1]; 115cdf0e10cSrcweir // Parameter konvertieren 116cdf0e10cSrcweir args[0].l = convertwchar_tToJavaString(t.pEnv,searchstr); 117cdf0e10cSrcweir // temporaere Variable initialisieren 118cdf0e10cSrcweir static const char * cSignature = "(Ljava/lang/String;I)J"; 119cdf0e10cSrcweir static const char * cMethodName = "position"; 120cdf0e10cSrcweir // Java-Call absetzen 121cdf0e10cSrcweir static jmethodID mID(NULL); 122cdf0e10cSrcweir obtainMethodId(t.pEnv, cMethodName,cSignature, mID); 123cdf0e10cSrcweir out = t.pEnv->CallLongMethod( object, mID, args[0].l,start ); 124cdf0e10cSrcweir ThrowSQLException(t.pEnv,*this); 125cdf0e10cSrcweir t.pEnv->DeleteLocalRef((jstring)args[0].l); 126cdf0e10cSrcweir } //t.pEnv 127cdf0e10cSrcweir return (sal_Int64)out; 128cdf0e10cSrcweir } 129cdf0e10cSrcweir 130cdf0e10cSrcweir sal_Int64 SAL_CALL java_sql_Clob::positionOfClob( const ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XClob >& /*pattern*/, sal_Int64 /*start*/ ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException) 131cdf0e10cSrcweir { 132cdf0e10cSrcweir RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "jdbc", "Ocke.Janssen@sun.com", "java_sql_Clob::positionOfClob" ); 133cdf0e10cSrcweir ::dbtools::throwFeatureNotImplementedException( "XClob::positionOfClob", *this ); 134cdf0e10cSrcweir // this was put here in CWS warnings01. The previous implementation was defective, as it did ignore 135cdf0e10cSrcweir // the pattern parameter. Since the effort for proper implementation is rather high - we would need 136cdf0e10cSrcweir // to translated patter into a byte[] -, we defer this functionality for the moment (hey, it was 137cdf0e10cSrcweir // unusable, anyway) 138cdf0e10cSrcweir // 2005-11-15 / #i57457# / frank.schoenheit@sun.com 139cdf0e10cSrcweir return 0; 140cdf0e10cSrcweir } 141